//@ sourceMappingURL=jquery.caret.map /* Implement Github like autocomplete mentions http://ichord.github.com/At.js Copyright (c) 2013 chord.luo@gmail.com Licensed under the MIT license. */ /* 本插件操作 textarea 或者 input 内的插入符 只实现了获得插入符在文本框中的位置,我设置 插入符的位置. */ (function() { (function(factory) { if (typeof define === 'function' && define.amd) { return define(['jquery'], factory); } else { return factory(window.jQuery); } })(function($) { "use strict"; var EditableCaret, InputCaret, Mirror, Utils, discoveryIframeOf, methods, oDocument, oFrame, oWindow, pluginName, setContextBy; pluginName = 'caret'; EditableCaret = (function() { function EditableCaret($inputor) { this.$inputor = $inputor; this.domInputor = this.$inputor[0]; } EditableCaret.prototype.setPos = function(pos) { return this.domInputor; }; EditableCaret.prototype.getIEPosition = function() { return this.getPosition(); }; EditableCaret.prototype.getPosition = function() { var inputor_offset, offset; offset = this.getOffset(); inputor_offset = this.$inputor.offset(); offset.left -= inputor_offset.left; offset.top -= inputor_offset.top; return offset; }; EditableCaret.prototype.getOldIEPos = function() { var preCaretTextRange, textRange; textRange = oDocument.selection.createRange(); preCaretTextRange = oDocument.body.createTextRange(); preCaretTextRange.moveToElementText(this.domInputor); preCaretTextRange.setEndPoint("EndToEnd", textRange); return preCaretTextRange.text.length; }; EditableCaret.prototype.getPos = function() { var clonedRange, pos, range; if (range = this.range()) { clonedRange = range.cloneRange(); clonedRange.selectNodeContents(this.domInputor); clonedRange.setEnd(range.endContainer, range.endOffset); pos = clonedRange.toString().length; clonedRange.detach(); return pos; } else if (oDocument.selection) { return this.getOldIEPos(); } }; EditableCaret.prototype.getOldIEOffset = function() { var range, rect; range = oDocument.selection.createRange().duplicate(); range.moveStart("character", -1); rect = range.getBoundingClientRect(); return { height: rect.bottom - rect.top, left: rect.left, top: rect.top }; }; EditableCaret.prototype.getOffset = function(pos) { var clonedRange, offset, range, rect, shadowCaret; if (oWindow.getSelection && (range = this.range())) { if (range.endOffset - 1 > 0 && range.endContainer === !this.domInputor) { clonedRange = range.cloneRange(); clonedRange.setStart(range.endContainer, range.endOffset - 1); clonedRange.setEnd(range.endContainer, range.endOffset); rect = clonedRange.getBoundingClientRect(); offset = { height: rect.height, left: rect.left + rect.width, top: rect.top }; clonedRange.detach(); } if (!offset || (offset != null ? offset.height : void 0) === 0) { clonedRange = range.cloneRange(); shadowCaret = $(document.createTextNode("|")); clonedRange.insertNode(shadowCaret[0]); clonedRange.selectNode(shadowCaret[0]); rect = clonedRange.getBoundingClientRect(); offset = { height: rect.height, left: rect.left, top: rect.top }; shadowCaret.remove(); clonedRange.detach(); } } else if (oDocument.selection) { offset = this.getOldIEOffset(); } if (offset) { offset.top += $(oWindow).scrollTop(); offset.left += $(oWindow).scrollLeft(); } return offset; }; EditableCaret.prototype.range = function() { var sel; if (!oWindow.getSelection) { return; } sel = oWindow.getSelection(); if (sel.rangeCount > 0) { return sel.getRangeAt(0); } else { return null; } }; return EditableCaret; })(); InputCaret = (function() { function InputCaret($inputor) { this.$inputor = $inputor; this.domInputor = this.$inputor[0]; } InputCaret.prototype.getIEPos = function() { var endRange, inputor, len, normalizedValue, pos, range, textInputRange; inputor = this.domInputor; range = oDocument.selection.createRange(); pos = 0; if (range && range.parentElement() === inputor) { normalizedValue = inputor.value.replace(/\r\n/g, "\n"); len = normalizedValue.length; textInputRange = inputor.createTextRange(); textInputRange.moveToBookmark(range.getBookmark()); endRange = inputor.createTextRange(); endRange.collapse(false); if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) { pos = len; } else { pos = -textInputRange.moveStart("character", -len); } } return pos; }; InputCaret.prototype.getPos = function() { if (oDocument.selection) { return this.getIEPos(); } else { return this.domInputor.selectionStart; } }; InputCaret.prototype.setPos = function(pos) { var inputor, range; inputor = this.domInputor; if (oDocument.selection) { range = inputor.createTextRange(); range.move("character", pos); range.select(); } else if (inputor.setSelectionRange) { inputor.setSelectionRange(pos, pos); } return inputor; }; InputCaret.prototype.getIEOffset = function(pos) { var h, textRange, x, y; textRange = this.domInputor.createTextRange(); pos || (pos = this.getPos()); textRange.move('character', pos); x = textRange.boundingLeft; y = textRange.boundingTop; h = textRange.boundingHeight; return { left: x, top: y, height: h }; }; InputCaret.prototype.getOffset = function(pos) { var $inputor, offset, position; $inputor = this.$inputor; if (oDocument.selection) { offset = this.getIEOffset(pos); offset.top += $(oWindow).scrollTop() + $inputor.scrollTop(); offset.left += $(oWindow).scrollLeft() + $inputor.scrollLeft(); return offset; } else { offset = $inputor.offset(); position = this.getPosition(pos); return offset = { left: offset.left + position.left - $inputor.scrollLeft(), top: offset.top + position.top - $inputor.scrollTop(), height: position.height }; } }; InputCaret.prototype.getPosition = function(pos) { var $inputor, at_rect, end_range, format, html, mirror, start_range; $inputor = this.$inputor; format = function(value) { return $('
').text(value).html().replace(/\r\n|\r|\n/g, "