From 2d98eaaf727834c128fdd2513d43d677d97fe8d7 Mon Sep 17 00:00:00 2001 From: Owen Date: Tue, 24 Jun 2014 15:29:43 +0200 Subject: client-only prototype files --- scripts/caret.js | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 scripts/caret.js (limited to 'scripts/caret.js') diff --git a/scripts/caret.js b/scripts/caret.js new file mode 100644 index 00000000..fd8fe38d --- /dev/null +++ b/scripts/caret.js @@ -0,0 +1,70 @@ +(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 pos = 0, + range = target.createTextRange(), + range2 = document.selection.createRange().duplicate(), + bookmark = range2.getBookmark(); + 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; + } +})(jQuery) \ No newline at end of file -- cgit v1.3.1