<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[BuddyPress][9795] trunk/src/bp-core/js/jquery.caret.js: Update caret.js to version 0.2.2</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="http://buddypress.trac.wordpress.org/changeset/9795">9795</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"http://buddypress.trac.wordpress.org/changeset/9795","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>djpaul</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2015-04-23 21:00:44 +0000 (Thu, 23 Apr 2015)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>Update caret.js to version 0.2.2

This library is used in the @mentions suggestions UI.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcbpcorejsjquerycaretjs">trunk/src/bp-core/js/jquery.caret.js</a></li>
</ul>

<h3>Property Changed</h3>
<ul>
<li><a href="#trunksrcbpcorejsjquerycaretjs">trunk/src/bp-core/js/jquery.caret.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcbpcorejsjquerycaretjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/bp-core/js/jquery.caret.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/bp-core/js/jquery.caret.js      2015-04-23 20:29:16 UTC (rev 9794)
+++ trunk/src/bp-core/js/jquery.caret.js        2015-04-23 21:00:44 UTC (rev 9795)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,3 +1,19 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module.
+    define(["jquery"], function ($) {
+      return (root.returnExportsGlobal = factory($));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like enviroments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function ($) {
+
</ins><span class="cx" style="display: block; padding: 0 10px"> /*
</span><span class="cx" style="display: block; padding: 0 10px">   Implement Github like autocomplete mentions
</span><span class="cx" style="display: block; padding: 0 10px">   http://ichord.github.com/At.js
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -6,374 +22,384 @@
</span><span class="cx" style="display: block; padding: 0 10px">   Licensed under the MIT license.
</span><span class="cx" style="display: block; padding: 0 10px"> */
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
</del><span class="cx" style="display: block; padding: 0 10px"> /*
</span><span class="cx" style="display: block; padding: 0 10px"> 本插件操作 textarea 或者 input 内的插入符
</span><span class="cx" style="display: block; padding: 0 10px"> 只实现了获得插入符在文本框中的位置,我设置
</span><span class="cx" style="display: block; padding: 0 10px"> 插入符的位置.
</span><span class="cx" style="display: block; padding: 0 10px"> */
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+"use strict";
+var EditableCaret, InputCaret, Mirror, Utils, discoveryIframeOf, methods, oDocument, oFrame, oWindow, pluginName, setContextBy;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-(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];
-      }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+pluginName = 'caret';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      EditableCaret.prototype.setPos = function(pos) {
-        return this.domInputor;
-      };
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+EditableCaret = (function() {
+  function EditableCaret($inputor) {
+    this.$inputor = $inputor;
+    this.domInputor = this.$inputor[0];
+  }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      EditableCaret.prototype.getIEPosition = function() {
-        return this.getPosition();
-      };
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  EditableCaret.prototype.setPos = function(pos) {
+    return this.domInputor;
+  };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      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;
-      };
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  EditableCaret.prototype.getIEPosition = function() {
+    return this.getPosition();
+  };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      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;
-      };
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  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;
+  };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      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();
-        }
-      };
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  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;
+  };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      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,
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  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 = $(oDocument.createTextNode("|"));
+        clonedRange.insertNode(shadowCaret[0]);
+        clonedRange.selectNode(shadowCaret[0]);
+        rect = clonedRange.getBoundingClientRect();
+        offset = {
+          height: rect.height,
</ins><span class="cx" style="display: block; padding: 0 10px">           left: rect.left,
</span><span class="cx" style="display: block; padding: 0 10px">           top: rect.top
</span><span class="cx" style="display: block; padding: 0 10px">         };
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      };
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        shadowCaret.remove();
+        clonedRange.detach();
+      }
+    } else if (oDocument.selection) {
+      offset = this.getOldIEOffset();
+    }
+    if (offset) {
+      offset.top += $(oWindow).scrollTop();
+      offset.left += $(oWindow).scrollLeft();
+    }
+    return offset;
+  };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      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 = $(oDocument.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;
-      };
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  EditableCaret.prototype.range = function() {
+    var sel;
+    if (!oWindow.getSelection) {
+      return;
+    }
+    sel = oWindow.getSelection();
+    if (sel.rangeCount > 0) {
+      return sel.getRangeAt(0);
+    } else {
+      return null;
+    }
+  };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      EditableCaret.prototype.range = function() {
-        var sel;
-        if (!oWindow.getSelection) {
-          return;
-        }
-        sel = oWindow.getSelection();
-        if (sel.rangeCount > 0) {
-          return sel.getRangeAt(0);
-        } else {
-          return null;
-        }
-      };
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  return EditableCaret;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      return EditableCaret;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+})();
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-    })();
-    InputCaret = (function() {
-      function InputCaret($inputor) {
-        this.$inputor = $inputor;
-        this.domInputor = this.$inputor[0];
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+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);
</ins><span class="cx" style="display: block; padding: 0 10px">       }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+    }
+    return pos;
+  };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      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;
-      };
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  InputCaret.prototype.getPos = function() {
+    if (oDocument.selection) {
+      return this.getIEPos();
+    } else {
+      return this.domInputor.selectionStart;
+    }
+  };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      InputCaret.prototype.getPos = function() {
-        if (oDocument.selection) {
-          return this.getIEPos();
-        } else {
-          return this.domInputor.selectionStart;
-        }
-      };
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  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;
+  };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      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;
-      };
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  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
+    };
+  };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      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
-        };
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  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
</ins><span class="cx" style="display: block; padding: 0 10px">       };
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+    }
+  };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      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
-          };
-        }
-      };
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  InputCaret.prototype.getPosition = function(pos) {
+    var $inputor, at_rect, end_range, format, html, mirror, start_range;
+    $inputor = this.$inputor;
+    format = function(value) {
+      value = value.replace(/<|>|`|"|&/g, '?').replace(/\r\n|\r|\n/g, "<br/>");
+      if (/firefox/i.test(navigator.userAgent)) {
+        value = value.replace(/\s/g, '&nbsp;');
+      }
+      return value;
+    };
+    if (pos === void 0) {
+      pos = this.getPos();
+    }
+    start_range = $inputor.val().slice(0, pos);
+    end_range = $inputor.val().slice(pos);
+    html = "<span style='position: relative; display: inline;'>" + format(start_range) + "</span>";
+    html += "<span id='caret' style='position: relative; display: inline;'>|</span>";
+    html += "<span style='position: relative; display: inline;'>" + format(end_range) + "</span>";
+    mirror = new Mirror($inputor);
+    return at_rect = mirror.create(html).rect();
+  };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      InputCaret.prototype.getPosition = function(pos) {
-        var $inputor, at_rect, end_range, format, html, mirror, start_range;
-        $inputor = this.$inputor;
-        format = function(value) {
-          return $('<div></div>').text(value).html().replace(/\r\n|\r|\n/g, "<br/>").replace(/\s/g, "&nbsp;");
-        };
-        if (pos === void 0) {
-          pos = this.getPos();
-        }
-        start_range = $inputor.val().slice(0, pos);
-        end_range = $inputor.val().slice(pos);
-        html = "<span style='position: relative; display: inline;'>" + format(start_range) + "</span>";
-        html += "<span id='caret' style='position: relative; display: inline;'>|</span>";
-        html += "<span style='position: relative; display: inline;'>" + format(end_range) + "</span>";
-        mirror = new Mirror($inputor);
-        return at_rect = mirror.create(html).rect();
-      };
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  InputCaret.prototype.getIEPosition = function(pos) {
+    var h, inputorOffset, offset, x, y;
+    offset = this.getIEOffset(pos);
+    inputorOffset = this.$inputor.offset();
+    x = offset.left - inputorOffset.left;
+    y = offset.top - inputorOffset.top;
+    h = offset.height;
+    return {
+      left: x,
+      top: y,
+      height: h
+    };
+  };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      InputCaret.prototype.getIEPosition = function(pos) {
-        var h, inputorOffset, offset, x, y;
-        offset = this.getIEOffset(pos);
-        inputorOffset = this.$inputor.offset();
-        x = offset.left - inputorOffset.left;
-        y = offset.top - inputorOffset.top;
-        h = offset.height;
-        return {
-          left: x,
-          top: y,
-          height: h
-        };
-      };
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  return InputCaret;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      return InputCaret;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+})();
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-    })();
-    Mirror = (function() {
-      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"];
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+Mirror = (function() {
+  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"];
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      function Mirror($inputor) {
-        this.$inputor = $inputor;
-      }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  function Mirror($inputor) {
+    this.$inputor = $inputor;
+  }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      Mirror.prototype.mirrorCss = function() {
-        var css,
-          _this = this;
-        css = {
-          position: 'absolute',
-          left: -9999,
-          top: 0,
-          zIndex: -20000
-        };
-        if (this.$inputor.prop('tagName') === 'TEXTAREA') {
-          this.css_attr.push('width');
-        }
-        $.each(this.css_attr, function(i, p) {
-          return css[p] = _this.$inputor.css(p);
-        });
-        return css;
-      };
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  Mirror.prototype.mirrorCss = function() {
+    var css,
+      _this = this;
+    css = {
+      position: 'absolute',
+      left: -9999,
+      top: 0,
+      zIndex: -20000
+    };
+    if (this.$inputor.prop('tagName') === 'TEXTAREA') {
+      this.css_attr.push('width');
+    }
+    $.each(this.css_attr, function(i, p) {
+      return css[p] = _this.$inputor.css(p);
+    });
+    return css;
+  };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      Mirror.prototype.create = function(html) {
-        this.$mirror = $('<div></div>');
-        this.$mirror.css(this.mirrorCss());
-        this.$mirror.html(html);
-        this.$inputor.after(this.$mirror);
-        return this;
-      };
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  Mirror.prototype.create = function(html) {
+    this.$mirror = $('<div></div>');
+    this.$mirror.css(this.mirrorCss());
+    this.$mirror.html(html);
+    this.$inputor.after(this.$mirror);
+    return this;
+  };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      Mirror.prototype.rect = function() {
-        var $flag, pos, rect;
-        $flag = this.$mirror.find("#caret");
-        pos = $flag.position();
-        rect = {
-          left: pos.left,
-          top: pos.top,
-          height: $flag.height()
-        };
-        this.$mirror.remove();
-        return rect;
-      };
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  Mirror.prototype.rect = function() {
+    var $flag, pos, rect;
+    $flag = this.$mirror.find("#caret");
+    pos = $flag.position();
+    rect = {
+      left: pos.left,
+      top: pos.top,
+      height: $flag.height()
+    };
+    this.$mirror.remove();
+    return rect;
+  };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      return Mirror;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  return Mirror;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-    })();
-    Utils = {
-      contentEditable: function($inputor) {
-        return !!($inputor[0].contentEditable && $inputor[0].contentEditable === 'true');
-      }
-    };
-    methods = {
-      pos: function(pos) {
-        if (pos || pos === 0) {
-          return this.setPos(pos);
-        } else {
-          return this.getPos();
-        }
-      },
-      position: function(pos) {
-        if (oDocument.selection) {
-          return this.getIEPosition(pos);
-        } else {
-          return this.getPosition(pos);
-        }
-      },
-      offset: function(pos) {
-        var offset;
-        offset = this.getOffset(pos);
-        return offset;
-      }
-    };
-    oDocument = null;
-    oWindow = null;
-    oFrame = null;
-    setContextBy = function(settings) {
-      var iframe;
-      if (iframe = settings != null ? settings.iframe : void 0) {
-        oFrame = iframe;
-        oWindow = iframe.contentWindow;
-        return oDocument = iframe.contentDocument || oWindow.document;
-      } else {
-        oFrame = void 0;
-        oWindow = window;
-        return oDocument = document;
-      }
-    };
-    discoveryIframeOf = function($dom) {
-      var error;
-      oDocument = $dom[0].ownerDocument;
-      oWindow = oDocument.defaultView || oDocument.parentWindow;
-      try {
-        return oFrame = oWindow.frameElement;
-      } catch (_error) {
-        error = _error;
-      }
-    };
-    $.fn.caret = function(method, value, settings) {
-      var caret;
-      if (methods[method]) {
-        if ($.isPlainObject(value)) {
-          setContextBy(value);
-          value = void 0;
-        } else {
-          setContextBy(settings);
-        }
-        caret = Utils.contentEditable(this) ? new EditableCaret(this) : new InputCaret(this);
-        return methods[method].apply(caret, [value]);
-      } else {
-        return $.error("Method " + method + " does not exist on jQuery.caret");
-      }
-    };
-    $.fn.caret.EditableCaret = EditableCaret;
-    $.fn.caret.InputCaret = InputCaret;
-    $.fn.caret.Utils = Utils;
-    return $.fn.caret.apis = methods;
-  });
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+})();
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-}).call(this);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+Utils = {
+  contentEditable: function($inputor) {
+    return !!($inputor[0].contentEditable && $inputor[0].contentEditable === 'true');
+  }
+};
+
+methods = {
+  pos: function(pos) {
+    if (pos || pos === 0) {
+      return this.setPos(pos);
+    } else {
+      return this.getPos();
+    }
+  },
+  position: function(pos) {
+    if (oDocument.selection) {
+      return this.getIEPosition(pos);
+    } else {
+      return this.getPosition(pos);
+    }
+  },
+  offset: function(pos) {
+    var offset;
+    offset = this.getOffset(pos);
+    return offset;
+  }
+};
+
+oDocument = null;
+
+oWindow = null;
+
+oFrame = null;
+
+setContextBy = function(settings) {
+  var iframe;
+  if (iframe = settings != null ? settings.iframe : void 0) {
+    oFrame = iframe;
+    oWindow = iframe.contentWindow;
+    return oDocument = iframe.contentDocument || oWindow.document;
+  } else {
+    oFrame = void 0;
+    oWindow = window;
+    return oDocument = document;
+  }
+};
+
+discoveryIframeOf = function($dom) {
+  var error;
+  oDocument = $dom[0].ownerDocument;
+  oWindow = oDocument.defaultView || oDocument.parentWindow;
+  try {
+    return oFrame = oWindow.frameElement;
+  } catch (_error) {
+    error = _error;
+  }
+};
+
+$.fn.caret = function(method, value, settings) {
+  var caret;
+  if (methods[method]) {
+    if ($.isPlainObject(value)) {
+      setContextBy(value);
+      value = void 0;
+    } else {
+      setContextBy(settings);
+    }
+    caret = Utils.contentEditable(this) ? new EditableCaret(this) : new InputCaret(this);
+    return methods[method].apply(caret, [value]);
+  } else {
+    return $.error("Method " + method + " does not exist on jQuery.caret");
+  }
+};
+
+$.fn.caret.EditableCaret = EditableCaret;
+
+$.fn.caret.InputCaret = InputCaret;
+
+$.fn.caret.Utils = Utils;
+
+$.fn.caret.apis = methods;
+
+
+}));
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/bp-core/js/jquery.caret.js
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svnexecutable"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:executable</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+*
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span></div>

</body>
</html>