diff options
| author | Alon Levy <alon@pobox.com> | 2014-12-16 17:37:42 +0200 |
|---|---|---|
| committer | Alon Levy <alon@pobox.com> | 2014-12-16 17:37:42 +0200 |
| commit | ade19de410e0a789a921ec1666b278b2a64176d6 (patch) | |
| tree | c4c54b106de93609ca7bb70a20fd4be696715dbe /res/client/lib/caret.js | |
| parent | c7d026b1d504323a8c61d51b726e5e8d2337fc4b (diff) | |
moving files around after repository merger
Diffstat (limited to 'res/client/lib/caret.js')
| -rw-r--r-- | res/client/lib/caret.js | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/res/client/lib/caret.js b/res/client/lib/caret.js new file mode 100644 index 00000000..017e96f3 --- /dev/null +++ b/res/client/lib/caret.js @@ -0,0 +1,73 @@ +define('caret', ['jquery'], +function($) { + $.fn.caret = function(pos) { + var target = this[0]; + var isContentEditable = target.contentEditable === 'true'; + //get + if (arguments.length == 0) { + //HTML5 + if (window.getSelection) { + //contenteditable + if (isContentEditable) { + target.focus(); + var range1 = window.getSelection().getRangeAt(0), + range2 = range1.cloneRange(); + range2.selectNodeContents(target); + range2.setEnd(range1.endContainer, range1.endOffset); + return range2.toString().length; + } + //textarea + return target.selectionStart; + } + //IE<9 + if (document.selection) { + target.focus(); + //contenteditable + if (isContentEditable) { + var range1 = document.selection.createRange(), + range2 = document.body.createTextRange(); + range2.moveToElementText(target); + range2.setEndPoint('EndToEnd', range1); + return range2.text.length; + } + //textarea + var range = target.createTextRange(), + range2 = document.selection.createRange().duplicate(), + bookmark = range2.getBookmark(); + pos = 0; + range.moveToBookmark(bookmark); + while (range.moveStart('character', -1) !== 0) pos++; + return pos; + } + //not supported + return 0; + } + //set + if (pos == -1) + pos = this[isContentEditable? 'text' : 'val']().length; + //HTML5 + if (window.getSelection) { + //contenteditable + if (isContentEditable) { + target.focus(); + window.getSelection().collapse(target.firstChild, pos); + } + //textarea + else + target.setSelectionRange(pos, pos); + } + //IE<9 + else if (document.body.createTextRange) { + var range = document.body.createTextRange(); + range.moveToElementText(target); + range.moveStart('character', pos); + range.collapse(true); + range.select(); + } + if (!isContentEditable) + target.focus(); + return pos; + } + return {'caret': 'place-holder'}; +} +); |
