Blame pagure/static/vendor/jquery.caret/jquery.caret-0.3.1.js

Pierre-Yves Chibon 93ac90
(function (root, factory) {
Pierre-Yves Chibon 93ac90
  if (typeof define === 'function' && define.amd) {
Pierre-Yves Chibon 93ac90
    // AMD. Register as an anonymous module.
Pierre-Yves Chibon 93ac90
    define(["jquery"], function ($) {
Pierre-Yves Chibon 93ac90
      return (root.returnExportsGlobal = factory($));
Pierre-Yves Chibon 93ac90
    });
Pierre-Yves Chibon 93ac90
  } else if (typeof exports === 'object') {
Pierre-Yves Chibon 93ac90
    // Node. Does not work with strict CommonJS, but
Pierre-Yves Chibon 93ac90
    // only CommonJS-like enviroments that support module.exports,
Pierre-Yves Chibon 93ac90
    // like Node.
Pierre-Yves Chibon 93ac90
    module.exports = factory(require("jquery"));
Pierre-Yves Chibon 93ac90
  } else {
Pierre-Yves Chibon 93ac90
    factory(jQuery);
Pierre-Yves Chibon 93ac90
  }
Pierre-Yves Chibon 93ac90
}(this, function ($) {
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
/*
Pierre-Yves Chibon 93ac90
  Implement Github like autocomplete mentions
Pierre-Yves Chibon 93ac90
  http://ichord.github.com/At.js
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
  Copyright (c) 2013 chord.luo@gmail.com
Pierre-Yves Chibon 93ac90
  Licensed under the MIT license.
Pierre-Yves Chibon 93ac90
*/
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
/*
Pierre-Yves Chibon 93ac90
本插件操作 textarea 或者 input 内的插入符
Pierre-Yves Chibon 93ac90
只实现了获得插入符在文本框中的位置,我设置
Pierre-Yves Chibon 93ac90
插入符的位置.
Pierre-Yves Chibon 93ac90
*/
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
"use strict";
Pierre-Yves Chibon 93ac90
var EditableCaret, InputCaret, Mirror, Utils, discoveryIframeOf, methods, oDocument, oFrame, oWindow, pluginName, setContextBy;
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
pluginName = 'caret';
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
EditableCaret = (function() {
Pierre-Yves Chibon 93ac90
  function EditableCaret($inputor) {
Pierre-Yves Chibon 93ac90
    this.$inputor = $inputor;
Pierre-Yves Chibon 93ac90
    this.domInputor = this.$inputor[0];
Pierre-Yves Chibon 93ac90
  }
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
  EditableCaret.prototype.setPos = function(pos) {
Pierre-Yves Chibon 93ac90
    var fn, found, offset, sel;
Pierre-Yves Chibon 93ac90
    if (sel = oWindow.getSelection()) {
Pierre-Yves Chibon 93ac90
      offset = 0;
Pierre-Yves Chibon 93ac90
      found = false;
Pierre-Yves Chibon 93ac90
      (fn = function(pos, parent) {
Pierre-Yves Chibon 93ac90
        var node, range, _i, _len, _ref, _results;
Pierre-Yves Chibon 93ac90
        _ref = parent.childNodes;
Pierre-Yves Chibon 93ac90
        _results = [];
Pierre-Yves Chibon 93ac90
        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
Pierre-Yves Chibon 93ac90
          node = _ref[_i];
Pierre-Yves Chibon 93ac90
          if (found) {
Pierre-Yves Chibon 93ac90
            break;
Pierre-Yves Chibon 93ac90
          }
Pierre-Yves Chibon 93ac90
          if (node.nodeType === 3) {
Pierre-Yves Chibon 93ac90
            if (offset + node.length >= pos) {
Pierre-Yves Chibon 93ac90
              found = true;
Pierre-Yves Chibon 93ac90
              range = oDocument.createRange();
Pierre-Yves Chibon 93ac90
              range.setStart(node, pos - offset);
Pierre-Yves Chibon 93ac90
              sel.removeAllRanges();
Pierre-Yves Chibon 93ac90
              sel.addRange(range);
Pierre-Yves Chibon 93ac90
              break;
Pierre-Yves Chibon 93ac90
            } else {
Pierre-Yves Chibon 93ac90
              _results.push(offset += node.length);
Pierre-Yves Chibon 93ac90
            }
Pierre-Yves Chibon 93ac90
          } else {
Pierre-Yves Chibon 93ac90
            _results.push(fn(pos, node));
Pierre-Yves Chibon 93ac90
          }
Pierre-Yves Chibon 93ac90
        }
Pierre-Yves Chibon 93ac90
        return _results;
Pierre-Yves Chibon 93ac90
      })(pos, this.domInputor);
Pierre-Yves Chibon 93ac90
    }
Pierre-Yves Chibon 93ac90
    return this.domInputor;
Pierre-Yves Chibon 93ac90
  };
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
  EditableCaret.prototype.getIEPosition = function() {
Pierre-Yves Chibon 93ac90
    return this.getPosition();
Pierre-Yves Chibon 93ac90
  };
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
  EditableCaret.prototype.getPosition = function() {
Pierre-Yves Chibon 93ac90
    var inputor_offset, offset;
Pierre-Yves Chibon 93ac90
    offset = this.getOffset();
Pierre-Yves Chibon 93ac90
    inputor_offset = this.$inputor.offset();
Pierre-Yves Chibon 93ac90
    offset.left -= inputor_offset.left;
Pierre-Yves Chibon 93ac90
    offset.top -= inputor_offset.top;
Pierre-Yves Chibon 93ac90
    return offset;
Pierre-Yves Chibon 93ac90
  };
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
  EditableCaret.prototype.getOldIEPos = function() {
Pierre-Yves Chibon 93ac90
    var preCaretTextRange, textRange;
Pierre-Yves Chibon 93ac90
    textRange = oDocument.selection.createRange();
Pierre-Yves Chibon 93ac90
    preCaretTextRange = oDocument.body.createTextRange();
Pierre-Yves Chibon 93ac90
    preCaretTextRange.moveToElementText(this.domInputor);
Pierre-Yves Chibon 93ac90
    preCaretTextRange.setEndPoint("EndToEnd", textRange);
Pierre-Yves Chibon 93ac90
    return preCaretTextRange.text.length;
Pierre-Yves Chibon 93ac90
  };
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
  EditableCaret.prototype.getPos = function() {
Pierre-Yves Chibon 93ac90
    var clonedRange, pos, range;
Pierre-Yves Chibon 93ac90
    if (range = this.range()) {
Pierre-Yves Chibon 93ac90
      clonedRange = range.cloneRange();
Pierre-Yves Chibon 93ac90
      clonedRange.selectNodeContents(this.domInputor);
Pierre-Yves Chibon 93ac90
      clonedRange.setEnd(range.endContainer, range.endOffset);
Pierre-Yves Chibon 93ac90
      pos = clonedRange.toString().length;
Pierre-Yves Chibon 93ac90
      clonedRange.detach();
Pierre-Yves Chibon 93ac90
      return pos;
Pierre-Yves Chibon 93ac90
    } else if (oDocument.selection) {
Pierre-Yves Chibon 93ac90
      return this.getOldIEPos();
Pierre-Yves Chibon 93ac90
    }
Pierre-Yves Chibon 93ac90
  };
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
  EditableCaret.prototype.getOldIEOffset = function() {
Pierre-Yves Chibon 93ac90
    var range, rect;
Pierre-Yves Chibon 93ac90
    range = oDocument.selection.createRange().duplicate();
Pierre-Yves Chibon 93ac90
    range.moveStart("character", -1);
Pierre-Yves Chibon 93ac90
    rect = range.getBoundingClientRect();
Pierre-Yves Chibon 93ac90
    return {
Pierre-Yves Chibon 93ac90
      height: rect.bottom - rect.top,
Pierre-Yves Chibon 93ac90
      left: rect.left,
Pierre-Yves Chibon 93ac90
      top: rect.top
Pierre-Yves Chibon 93ac90
    };
Pierre-Yves Chibon 93ac90
  };
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
  EditableCaret.prototype.getOffset = function(pos) {
Pierre-Yves Chibon 93ac90
    var clonedRange, offset, range, rect, shadowCaret;
Pierre-Yves Chibon 93ac90
    if (oWindow.getSelection && (range = this.range())) {
Pierre-Yves Chibon 93ac90
      if (range.endOffset - 1 > 0 && range.endContainer !== this.domInputor) {
Pierre-Yves Chibon 93ac90
        clonedRange = range.cloneRange();
Pierre-Yves Chibon 93ac90
        clonedRange.setStart(range.endContainer, range.endOffset - 1);
Pierre-Yves Chibon 93ac90
        clonedRange.setEnd(range.endContainer, range.endOffset);
Pierre-Yves Chibon 93ac90
        rect = clonedRange.getBoundingClientRect();
Pierre-Yves Chibon 93ac90
        offset = {
Pierre-Yves Chibon 93ac90
          height: rect.height,
Pierre-Yves Chibon 93ac90
          left: rect.left + rect.width,
Pierre-Yves Chibon 93ac90
          top: rect.top
Pierre-Yves Chibon 93ac90
        };
Pierre-Yves Chibon 93ac90
        clonedRange.detach();
Pierre-Yves Chibon 93ac90
      }
Pierre-Yves Chibon 93ac90
      if (!offset || (offset != null ? offset.height : void 0) === 0) {
Pierre-Yves Chibon 93ac90
        clonedRange = range.cloneRange();
Pierre-Yves Chibon 93ac90
        shadowCaret = $(oDocument.createTextNode("|"));
Pierre-Yves Chibon 93ac90
        clonedRange.insertNode(shadowCaret[0]);
Pierre-Yves Chibon 93ac90
        clonedRange.selectNode(shadowCaret[0]);
Pierre-Yves Chibon 93ac90
        rect = clonedRange.getBoundingClientRect();
Pierre-Yves Chibon 93ac90
        offset = {
Pierre-Yves Chibon 93ac90
          height: rect.height,
Pierre-Yves Chibon 93ac90
          left: rect.left,
Pierre-Yves Chibon 93ac90
          top: rect.top
Pierre-Yves Chibon 93ac90
        };
Pierre-Yves Chibon 93ac90
        shadowCaret.remove();
Pierre-Yves Chibon 93ac90
        clonedRange.detach();
Pierre-Yves Chibon 93ac90
      }
Pierre-Yves Chibon 93ac90
    } else if (oDocument.selection) {
Pierre-Yves Chibon 93ac90
      offset = this.getOldIEOffset();
Pierre-Yves Chibon 93ac90
    }
Pierre-Yves Chibon 93ac90
    if (offset) {
Pierre-Yves Chibon 93ac90
      offset.top += $(oWindow).scrollTop();
Pierre-Yves Chibon 93ac90
      offset.left += $(oWindow).scrollLeft();
Pierre-Yves Chibon 93ac90
    }
Pierre-Yves Chibon 93ac90
    return offset;
Pierre-Yves Chibon 93ac90
  };
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
  EditableCaret.prototype.range = function() {
Pierre-Yves Chibon 93ac90
    var sel;
Pierre-Yves Chibon 93ac90
    if (!oWindow.getSelection) {
Pierre-Yves Chibon 93ac90
      return;
Pierre-Yves Chibon 93ac90
    }
Pierre-Yves Chibon 93ac90
    sel = oWindow.getSelection();
Pierre-Yves Chibon 93ac90
    if (sel.rangeCount > 0) {
Pierre-Yves Chibon 93ac90
      return sel.getRangeAt(0);
Pierre-Yves Chibon 93ac90
    } else {
Pierre-Yves Chibon 93ac90
      return null;
Pierre-Yves Chibon 93ac90
    }
Pierre-Yves Chibon 93ac90
  };
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
  return EditableCaret;
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
})();
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
InputCaret = (function() {
Pierre-Yves Chibon 93ac90
  function InputCaret($inputor) {
Pierre-Yves Chibon 93ac90
    this.$inputor = $inputor;
Pierre-Yves Chibon 93ac90
    this.domInputor = this.$inputor[0];
Pierre-Yves Chibon 93ac90
  }
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
  InputCaret.prototype.getIEPos = function() {
Pierre-Yves Chibon 93ac90
    var endRange, inputor, len, normalizedValue, pos, range, textInputRange;
Pierre-Yves Chibon 93ac90
    inputor = this.domInputor;
Pierre-Yves Chibon 93ac90
    range = oDocument.selection.createRange();
Pierre-Yves Chibon 93ac90
    pos = 0;
Pierre-Yves Chibon 93ac90
    if (range && range.parentElement() === inputor) {
Pierre-Yves Chibon 93ac90
      normalizedValue = inputor.value.replace(/\r\n/g, "\n");
Pierre-Yves Chibon 93ac90
      len = normalizedValue.length;
Pierre-Yves Chibon 93ac90
      textInputRange = inputor.createTextRange();
Pierre-Yves Chibon 93ac90
      textInputRange.moveToBookmark(range.getBookmark());
Pierre-Yves Chibon 93ac90
      endRange = inputor.createTextRange();
Pierre-Yves Chibon 93ac90
      endRange.collapse(false);
Pierre-Yves Chibon 93ac90
      if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) {
Pierre-Yves Chibon 93ac90
        pos = len;
Pierre-Yves Chibon 93ac90
      } else {
Pierre-Yves Chibon 93ac90
        pos = -textInputRange.moveStart("character", -len);
Pierre-Yves Chibon 93ac90
      }
Pierre-Yves Chibon 93ac90
    }
Pierre-Yves Chibon 93ac90
    return pos;
Pierre-Yves Chibon 93ac90
  };
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
  InputCaret.prototype.getPos = function() {
Pierre-Yves Chibon 93ac90
    if (oDocument.selection) {
Pierre-Yves Chibon 93ac90
      return this.getIEPos();
Pierre-Yves Chibon 93ac90
    } else {
Pierre-Yves Chibon 93ac90
      return this.domInputor.selectionStart;
Pierre-Yves Chibon 93ac90
    }
Pierre-Yves Chibon 93ac90
  };
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
  InputCaret.prototype.setPos = function(pos) {
Pierre-Yves Chibon 93ac90
    var inputor, range;
Pierre-Yves Chibon 93ac90
    inputor = this.domInputor;
Pierre-Yves Chibon 93ac90
    if (oDocument.selection) {
Pierre-Yves Chibon 93ac90
      range = inputor.createTextRange();
Pierre-Yves Chibon 93ac90
      range.move("character", pos);
Pierre-Yves Chibon 93ac90
      range.select();
Pierre-Yves Chibon 93ac90
    } else if (inputor.setSelectionRange) {
Pierre-Yves Chibon 93ac90
      inputor.setSelectionRange(pos, pos);
Pierre-Yves Chibon 93ac90
    }
Pierre-Yves Chibon 93ac90
    return inputor;
Pierre-Yves Chibon 93ac90
  };
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
  InputCaret.prototype.getIEOffset = function(pos) {
Pierre-Yves Chibon 93ac90
    var h, textRange, x, y;
Pierre-Yves Chibon 93ac90
    textRange = this.domInputor.createTextRange();
Pierre-Yves Chibon 93ac90
    pos || (pos = this.getPos());
Pierre-Yves Chibon 93ac90
    textRange.move('character', pos);
Pierre-Yves Chibon 93ac90
    x = textRange.boundingLeft;
Pierre-Yves Chibon 93ac90
    y = textRange.boundingTop;
Pierre-Yves Chibon 93ac90
    h = textRange.boundingHeight;
Pierre-Yves Chibon 93ac90
    return {
Pierre-Yves Chibon 93ac90
      left: x,
Pierre-Yves Chibon 93ac90
      top: y,
Pierre-Yves Chibon 93ac90
      height: h
Pierre-Yves Chibon 93ac90
    };
Pierre-Yves Chibon 93ac90
  };
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
  InputCaret.prototype.getOffset = function(pos) {
Pierre-Yves Chibon 93ac90
    var $inputor, offset, position;
Pierre-Yves Chibon 93ac90
    $inputor = this.$inputor;
Pierre-Yves Chibon 93ac90
    if (oDocument.selection) {
Pierre-Yves Chibon 93ac90
      offset = this.getIEOffset(pos);
Pierre-Yves Chibon 93ac90
      offset.top += $(oWindow).scrollTop() + $inputor.scrollTop();
Pierre-Yves Chibon 93ac90
      offset.left += $(oWindow).scrollLeft() + $inputor.scrollLeft();
Pierre-Yves Chibon 93ac90
      return offset;
Pierre-Yves Chibon 93ac90
    } else {
Pierre-Yves Chibon 93ac90
      offset = $inputor.offset();
Pierre-Yves Chibon 93ac90
      position = this.getPosition(pos);
Pierre-Yves Chibon 93ac90
      return offset = {
Pierre-Yves Chibon 93ac90
        left: offset.left + position.left - $inputor.scrollLeft(),
Pierre-Yves Chibon 93ac90
        top: offset.top + position.top - $inputor.scrollTop(),
Pierre-Yves Chibon 93ac90
        height: position.height
Pierre-Yves Chibon 93ac90
      };
Pierre-Yves Chibon 93ac90
    }
Pierre-Yves Chibon 93ac90
  };
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
  InputCaret.prototype.getPosition = function(pos) {
Pierre-Yves Chibon 93ac90
    var $inputor, at_rect, end_range, format, html, mirror, start_range;
Pierre-Yves Chibon 93ac90
    $inputor = this.$inputor;
Pierre-Yves Chibon 93ac90
    format = function(value) {
Pierre-Yves Chibon 93ac90
      value = value.replace(/<|>|`|"|&/g, '?').replace(/\r\n|\r|\n/g, "
");
Pierre-Yves Chibon 93ac90
      if (/firefox/i.test(navigator.userAgent)) {
Pierre-Yves Chibon 93ac90
        value = value.replace(/\s/g, ' ');
Pierre-Yves Chibon 93ac90
      }
Pierre-Yves Chibon 93ac90
      return value;
Pierre-Yves Chibon 93ac90
    };
Pierre-Yves Chibon 93ac90
    if (pos === void 0) {
Pierre-Yves Chibon 93ac90
      pos = this.getPos();
Pierre-Yves Chibon 93ac90
    }
Pierre-Yves Chibon 93ac90
    start_range = $inputor.val().slice(0, pos);
Pierre-Yves Chibon 93ac90
    end_range = $inputor.val().slice(pos);
Julen Landa Alustiza ee5cc9
    html = '' + format(start_range) + '';
Julen Landa Alustiza ee5cc9
    html += '|';
Julen Landa Alustiza ee5cc9
    html += '' + format(end_range) + '';
Pierre-Yves Chibon 93ac90
    mirror = new Mirror($inputor);
Pierre-Yves Chibon 93ac90
    return at_rect = mirror.create(html).rect();
Pierre-Yves Chibon 93ac90
  };
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
  InputCaret.prototype.getIEPosition = function(pos) {
Pierre-Yves Chibon 93ac90
    var h, inputorOffset, offset, x, y;
Pierre-Yves Chibon 93ac90
    offset = this.getIEOffset(pos);
Pierre-Yves Chibon 93ac90
    inputorOffset = this.$inputor.offset();
Pierre-Yves Chibon 93ac90
    x = offset.left - inputorOffset.left;
Pierre-Yves Chibon 93ac90
    y = offset.top - inputorOffset.top;
Pierre-Yves Chibon 93ac90
    h = offset.height;
Pierre-Yves Chibon 93ac90
    return {
Pierre-Yves Chibon 93ac90
      left: x,
Pierre-Yves Chibon 93ac90
      top: y,
Pierre-Yves Chibon 93ac90
      height: h
Pierre-Yves Chibon 93ac90
    };
Pierre-Yves Chibon 93ac90
  };
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
  return InputCaret;
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
})();
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
Mirror = (function() {
Pierre-Yves Chibon 93ac90
  Mirror.prototype.css_attr = ["borderBottomWidth", "borderLeftWidth", "borderRightWidth", "borderTopStyle", "borderRightStyle", "borderBottomStyle", "borderLeftStyle", "borderTopWidth", "boxSizing", "fontFamily", "fontSize", "fontWeight", "height", "letterSpacing", "lineHeight", "marginBottom", "marginLeft", "marginRight", "marginTop", "outlineWidth", "overflow", "overflowX", "overflowY", "paddingBottom", "paddingLeft", "paddingRight", "paddingTop", "textAlign", "textOverflow", "textTransform", "whiteSpace", "wordBreak", "wordWrap"];
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
  function Mirror($inputor) {
Pierre-Yves Chibon 93ac90
    this.$inputor = $inputor;
Pierre-Yves Chibon 93ac90
  }
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
  Mirror.prototype.mirrorCss = function() {
Pierre-Yves Chibon 93ac90
    var css,
Pierre-Yves Chibon 93ac90
      _this = this;
Pierre-Yves Chibon 93ac90
    css = {
Pierre-Yves Chibon 93ac90
      position: 'absolute',
Pierre-Yves Chibon 93ac90
      left: -9999,
Pierre-Yves Chibon 93ac90
      top: 0,
Pierre-Yves Chibon 93ac90
      zIndex: -20000
Pierre-Yves Chibon 93ac90
    };
Pierre-Yves Chibon 93ac90
    if (this.$inputor.prop('tagName') === 'TEXTAREA') {
Pierre-Yves Chibon 93ac90
      this.css_attr.push('width');
Pierre-Yves Chibon 93ac90
    }
Pierre-Yves Chibon 93ac90
    $.each(this.css_attr, function(i, p) {
Pierre-Yves Chibon 93ac90
      return css[p] = _this.$inputor.css(p);
Pierre-Yves Chibon 93ac90
    });
Pierre-Yves Chibon 93ac90
    return css;
Pierre-Yves Chibon 93ac90
  };
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
  Mirror.prototype.create = function(html) {
Pierre-Yves Chibon 93ac90
    this.$mirror = $('
');
Pierre-Yves Chibon 93ac90
    this.$mirror.css(this.mirrorCss());
Pierre-Yves Chibon 93ac90
    this.$mirror.html(html);
Pierre-Yves Chibon 93ac90
    this.$inputor.after(this.$mirror);
Pierre-Yves Chibon 93ac90
    return this;
Pierre-Yves Chibon 93ac90
  };
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
  Mirror.prototype.rect = function() {
Pierre-Yves Chibon 93ac90
    var $flag, pos, rect;
Pierre-Yves Chibon 93ac90
    $flag = this.$mirror.find("#caret");
Pierre-Yves Chibon 93ac90
    pos = $flag.position();
Pierre-Yves Chibon 93ac90
    rect = {
Pierre-Yves Chibon 93ac90
      left: pos.left,
Pierre-Yves Chibon 93ac90
      top: pos.top,
Pierre-Yves Chibon 93ac90
      height: $flag.height()
Pierre-Yves Chibon 93ac90
    };
Pierre-Yves Chibon 93ac90
    this.$mirror.remove();
Pierre-Yves Chibon 93ac90
    return rect;
Pierre-Yves Chibon 93ac90
  };
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
  return Mirror;
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
})();
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
Utils = {
Pierre-Yves Chibon 93ac90
  contentEditable: function($inputor) {
Pierre-Yves Chibon 93ac90
    return !!($inputor[0].contentEditable && $inputor[0].contentEditable === 'true');
Pierre-Yves Chibon 93ac90
  }
Pierre-Yves Chibon 93ac90
};
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
methods = {
Pierre-Yves Chibon 93ac90
  pos: function(pos) {
Pierre-Yves Chibon 93ac90
    if (pos || pos === 0) {
Pierre-Yves Chibon 93ac90
      return this.setPos(pos);
Pierre-Yves Chibon 93ac90
    } else {
Pierre-Yves Chibon 93ac90
      return this.getPos();
Pierre-Yves Chibon 93ac90
    }
Pierre-Yves Chibon 93ac90
  },
Pierre-Yves Chibon 93ac90
  position: function(pos) {
Pierre-Yves Chibon 93ac90
    if (oDocument.selection) {
Pierre-Yves Chibon 93ac90
      return this.getIEPosition(pos);
Pierre-Yves Chibon 93ac90
    } else {
Pierre-Yves Chibon 93ac90
      return this.getPosition(pos);
Pierre-Yves Chibon 93ac90
    }
Pierre-Yves Chibon 93ac90
  },
Pierre-Yves Chibon 93ac90
  offset: function(pos) {
Pierre-Yves Chibon 93ac90
    var offset;
Pierre-Yves Chibon 93ac90
    offset = this.getOffset(pos);
Pierre-Yves Chibon 93ac90
    return offset;
Pierre-Yves Chibon 93ac90
  }
Pierre-Yves Chibon 93ac90
};
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
oDocument = null;
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
oWindow = null;
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
oFrame = null;
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
setContextBy = function(settings) {
Pierre-Yves Chibon 93ac90
  var iframe;
Pierre-Yves Chibon 93ac90
  if (iframe = settings != null ? settings.iframe : void 0) {
Pierre-Yves Chibon 93ac90
    oFrame = iframe;
Pierre-Yves Chibon 93ac90
    oWindow = iframe.contentWindow;
Pierre-Yves Chibon 93ac90
    return oDocument = iframe.contentDocument || oWindow.document;
Pierre-Yves Chibon 93ac90
  } else {
Pierre-Yves Chibon 93ac90
    oFrame = void 0;
Pierre-Yves Chibon 93ac90
    oWindow = window;
Pierre-Yves Chibon 93ac90
    return oDocument = document;
Pierre-Yves Chibon 93ac90
  }
Pierre-Yves Chibon 93ac90
};
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
discoveryIframeOf = function($dom) {
Pierre-Yves Chibon 93ac90
  var error;
Pierre-Yves Chibon 93ac90
  oDocument = $dom[0].ownerDocument;
Pierre-Yves Chibon 93ac90
  oWindow = oDocument.defaultView || oDocument.parentWindow;
Pierre-Yves Chibon 93ac90
  try {
Pierre-Yves Chibon 93ac90
    return oFrame = oWindow.frameElement;
Pierre-Yves Chibon 93ac90
  } catch (_error) {
Pierre-Yves Chibon 93ac90
    error = _error;
Pierre-Yves Chibon 93ac90
  }
Pierre-Yves Chibon 93ac90
};
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
$.fn.caret = function(method, value, settings) {
Pierre-Yves Chibon 93ac90
  var caret;
Pierre-Yves Chibon 93ac90
  if (methods[method]) {
Pierre-Yves Chibon 93ac90
    if ($.isPlainObject(value)) {
Pierre-Yves Chibon 93ac90
      setContextBy(value);
Pierre-Yves Chibon 93ac90
      value = void 0;
Pierre-Yves Chibon 93ac90
    } else {
Pierre-Yves Chibon 93ac90
      setContextBy(settings);
Pierre-Yves Chibon 93ac90
    }
Pierre-Yves Chibon 93ac90
    caret = Utils.contentEditable(this) ? new EditableCaret(this) : new InputCaret(this);
Pierre-Yves Chibon 93ac90
    return methods[method].apply(caret, [value]);
Pierre-Yves Chibon 93ac90
  } else {
Pierre-Yves Chibon 93ac90
    return $.error("Method " + method + " does not exist on jQuery.caret");
Pierre-Yves Chibon 93ac90
  }
Pierre-Yves Chibon 93ac90
};
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
$.fn.caret.EditableCaret = EditableCaret;
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
$.fn.caret.InputCaret = InputCaret;
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
$.fn.caret.Utils = Utils;
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
$.fn.caret.apis = methods;
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
Pierre-Yves Chibon 93ac90
}));