1(function($) { 2 $.fn.caret = function(pos) { 3 var target = this[0]; 4 var isContentEditable = target && target.contentEditable === 'true'; 5 if (arguments.length == 0) { 6 //get 7 if (target) { 8 //HTML5 9 if (window.getSelection) { 10 //contenteditable 11 if (isContentEditable) { 12 target.focus(); 13 var range1 = window.getSelection().getRangeAt(0), 14 range2 = range1.cloneRange(); 15 range2.selectNodeContents(target); 16 range2.setEnd(range1.endContainer, range1.endOffset); 17 return range2.toString().length; 18 } 19 //textarea 20 return target.selectionStart; 21 } 22 //IE<9 23 if (document.selection) { 24 target.focus(); 25 //contenteditable 26 if (isContentEditable) { 27 var range1 = document.selection.createRange(), 28 range2 = document.body.createTextRange(); 29 range2.moveToElementText(target); 30 range2.setEndPoint('EndToEnd', range1); 31 return range2.text.length; 32 } 33 //textarea 34 var pos = 0, 35 range = target.createTextRange(), 36 range2 = document.selection.createRange().duplicate(), 37 bookmark = range2.getBookmark(); 38 range.moveToBookmark(bookmark); 39 while (range.moveStart('character', -1) !== 0) pos++; 40 return pos; 41 } 42 // Addition for jsdom support 43 if (target.selectionStart) 44 return target.selectionStart; 45 } 46 //not supported 47 return; 48 } 49 //set 50 if (target) { 51 if (pos == -1) 52 pos = this[isContentEditable? 'text' : 'val']().length; 53 //HTML5 54 if (window.getSelection) { 55 //contenteditable 56 if (isContentEditable) { 57 target.focus(); 58 window.getSelection().collapse(target.firstChild, pos); 59 } 60 //textarea 61 else 62 target.setSelectionRange(pos, pos); 63 } 64 //IE<9 65 else if (document.body.createTextRange) { 66 if (isContentEditable) { 67 var range = document.body.createTextRange(); 68 range.moveToElementText(target); 69 range.moveStart('character', pos); 70 range.collapse(true); 71 range.select(); 72 } else { 73 var range = target.createTextRange(); 74 range.move('character', pos); 75 range.select(); 76 } 77 } 78 if (!isContentEditable) 79 target.focus(); 80 } 81 return this; 82 } 83})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.