]> git.wh0rd.org - tt-rss.git/blobdiff - lib/dijit/_editor/range.js
update dojo to 1.7.3
[tt-rss.git] / lib / dijit / _editor / range.js
index 2e50745832961d7754565fad63c3a8fe7dffa4a2..3c92de47039e752ea8462c5f362453a541a298ef 100644 (file)
@@ -1,541 +1,2 @@
-/*
-       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
-       Available via Academic Free License >= 2.1 OR the modified BSD license.
-       see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._editor.range"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._editor.range"] = true;
-dojo.provide("dijit._editor.range");
-
-
-dijit.range={};
-
-dijit.range.getIndex=function(/*DomNode*/node, /*DomNode*/parent){
-//     dojo.profile.start("dijit.range.getIndex");
-       var ret=[], retR=[];
-       var stop = parent;
-       var onode = node;
-
-       var pnode, n;
-       while(node != stop){
-               var i = 0;
-               pnode = node.parentNode;
-               while((n=pnode.childNodes[i++])){
-                       if(n === node){
-                               --i;
-                               break;
-                       }
-               }
-               //if(i>=pnode.childNodes.length){
-                       //dojo.debug("Error finding index of a node in dijit.range.getIndex");
-               //}
-               ret.unshift(i);
-               retR.unshift(i-pnode.childNodes.length);
-               node = pnode;
-       }
-
-       //normalized() can not be called so often to prevent
-       //invalidating selection/range, so we have to detect
-       //here that any text nodes in a row
-       if(ret.length > 0 && onode.nodeType == 3){
-               n = onode.previousSibling;
-               while(n && n.nodeType == 3){
-                       ret[ret.length-1]--;
-                       n = n.previousSibling;
-               }
-               n = onode.nextSibling;
-               while(n && n.nodeType == 3){
-                       retR[retR.length-1]++;
-                       n = n.nextSibling;
-               }
-       }
-//     dojo.profile.end("dijit.range.getIndex");
-       return {o: ret, r:retR};
-}
-
-dijit.range.getNode = function(/*Array*/index, /*DomNode*/parent){
-       if(!dojo.isArray(index) || index.length == 0){
-               return parent;
-       }
-       var node = parent;
-//     if(!node)debugger
-       dojo.every(index, function(i){
-               if(i >= 0 && i < node.childNodes.length){
-                       node = node.childNodes[i];
-               }else{
-                       node = null;
-                       //console.debug('Error: can not find node with index',index,'under parent node',parent );
-                       return false; //terminate dojo.every
-               }
-               return true; //carry on the every loop
-       });
-
-       return node;
-}
-
-dijit.range.getCommonAncestor = function(n1,n2,root){
-       root = root||n1.ownerDocument.body;
-       var getAncestors = function(n){
-               var as=[];
-               while(n){
-                       as.unshift(n);
-                       if(n !== root){
-                               n = n.parentNode;
-                       }else{
-                               break;
-                       }
-               }
-               return as;
-       };
-       var n1as = getAncestors(n1);
-       var n2as = getAncestors(n2);
-
-       var m = Math.min(n1as.length,n2as.length);
-       var com = n1as[0]; //at least, one element should be in the array: the root (BODY by default)
-       for(var i=1;i<m;i++){
-               if(n1as[i] === n2as[i]){
-                       com = n1as[i]
-               }else{
-                       break;
-               }
-       }
-       return com;
-}
-
-dijit.range.getAncestor = function(/*DomNode*/node, /*RegEx?*/regex, /*DomNode?*/root){
-       root = root || node.ownerDocument.body;
-       while(node && node !== root){
-               var name = node.nodeName.toUpperCase() ;
-               if(regex.test(name)){
-                       return node;
-               }
-
-               node = node.parentNode;
-       }
-       return null;
-}
-
-dijit.range.BlockTagNames = /^(?:P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|DT|DE)$/;
-dijit.range.getBlockAncestor = function(/*DomNode*/node, /*RegEx?*/regex, /*DomNode?*/root){
-       root = root || node.ownerDocument.body;
-       regex = regex || dijit.range.BlockTagNames;
-       var block=null, blockContainer;
-       while(node && node !== root){
-               var name = node.nodeName.toUpperCase() ;
-               if(!block && regex.test(name)){
-                       block = node;
-               }
-               if(!blockContainer && (/^(?:BODY|TD|TH|CAPTION)$/).test(name)){
-                       blockContainer = node;
-               }
-
-               node = node.parentNode;
-       }
-       return {blockNode:block, blockContainer:blockContainer || node.ownerDocument.body};
-}
-
-dijit.range.atBeginningOfContainer = function(/*DomNode*/container, /*DomNode*/node, /*Int*/offset){
-       var atBeginning = false;
-       var offsetAtBeginning = (offset == 0);
-       if(!offsetAtBeginning && node.nodeType == 3){ //if this is a text node, check whether the left part is all space
-               if(/^[\s\xA0]+$/.test(node.nodeValue.substr(0,offset))){
-                       offsetAtBeginning = true;
-               }
-       }
-       if(offsetAtBeginning){
-               var cnode = node;
-               atBeginning = true;
-               while(cnode && cnode !== container){
-                       if(cnode.previousSibling){
-                               atBeginning = false;
-                               break;
-                       }
-                       cnode = cnode.parentNode;
-               }
-       }
-       return atBeginning;
-}
-
-dijit.range.atEndOfContainer = function(/*DomNode*/container, /*DomNode*/node, /*Int*/offset){
-       var atEnd = false;
-       var offsetAtEnd = (offset == (node.length || node.childNodes.length));
-       if(!offsetAtEnd && node.nodeType == 3){ //if this is a text node, check whether the right part is all space
-               if(/^[\s\xA0]+$/.test(node.nodeValue.substr(offset))){
-                       offsetAtEnd = true;
-               }
-       }
-       if(offsetAtEnd){
-               var cnode = node;
-               atEnd = true;
-               while(cnode && cnode !== container){
-                       if(cnode.nextSibling){
-                               atEnd = false;
-                               break;
-                       }
-                       cnode = cnode.parentNode;
-               }
-       }
-       return atEnd;
-}
-
-dijit.range.adjacentNoneTextNode=function(startnode, next){
-       var node = startnode;
-       var len = (0-startnode.length) || 0;
-       var prop = next?'nextSibling':'previousSibling';
-       while(node){
-               if(node.nodeType!=3){
-                       break;
-               }
-               len += node.length
-               node = node[prop];
-       }
-       return [node,len];
-}
-
-dijit.range._w3c = Boolean(window['getSelection']);
-dijit.range.create = function(/*Window?*/win){
-       if(dijit.range._w3c){
-               return (win || dojo.global).document.createRange();
-       }else{//IE
-               return new dijit.range.W3CRange;
-       }
-}
-
-dijit.range.getSelection = function(/*Window*/win, /*Boolean?*/ignoreUpdate){
-       if(dijit.range._w3c){
-               return win.getSelection();
-       }else{//IE
-               var s = new dijit.range.ie.selection(win);
-               if(!ignoreUpdate){
-                       s._getCurrentSelection();
-               }
-               return s;
-       }
-}
-
-if(!dijit.range._w3c){
-       dijit.range.ie={
-               cachedSelection: {},
-               selection: function(win){
-                       this._ranges = [];
-                       this.addRange = function(r, /*boolean*/internal){
-                               this._ranges.push(r);
-                               if(!internal){
-                                       r._select();
-                               }
-                               this.rangeCount = this._ranges.length;
-                       };
-                       this.removeAllRanges = function(){
-                               //don't detach, the range may be used later
-//                             for(var i=0;i<this._ranges.length;i++){
-//                                     this._ranges[i].detach();
-//                             }
-                               this._ranges = [];
-                               this.rangeCount = 0;
-                       };
-                       var _initCurrentRange = function(){
-                               var r = win.document.selection.createRange();
-                               var type=win.document.selection.type.toUpperCase();
-                               if(type == "CONTROL"){
-                                       //TODO: multiple range selection(?)
-                                       return new dijit.range.W3CRange(dijit.range.ie.decomposeControlRange(r));
-                               }else{
-                                       return new dijit.range.W3CRange(dijit.range.ie.decomposeTextRange(r));
-                               }
-                       };
-                       this.getRangeAt = function(i){
-                               return this._ranges[i];
-                       };
-                       this._getCurrentSelection = function(){
-                               this.removeAllRanges();
-                               var r=_initCurrentRange();
-                               if(r){
-                                       this.addRange(r, true);
-                               }
-                       };
-               },
-               decomposeControlRange: function(range){
-                       var firstnode = range.item(0), lastnode = range.item(range.length-1);
-                       var startContainer = firstnode.parentNode, endContainer = lastnode.parentNode;
-                       var startOffset = dijit.range.getIndex(firstnode, startContainer).o;
-                       var endOffset = dijit.range.getIndex(lastnode, endContainer).o+1;
-                       return [startContainer, startOffset,endContainer, endOffset];
-               },
-               getEndPoint: function(range, end){
-                       var atmrange = range.duplicate();
-                       atmrange.collapse(!end);
-                       var cmpstr = 'EndTo' + (end?'End':'Start');
-                       var parentNode = atmrange.parentElement();
-
-                       var startnode, startOffset, lastNode;
-                       if(parentNode.childNodes.length>0){
-                               dojo.every(parentNode.childNodes, function(node,i){
-                                       var calOffset;
-                                       if(node.nodeType != 3){
-                                               atmrange.moveToElementText(node);
-
-                                               if(atmrange.compareEndPoints(cmpstr,range) > 0){
-                                                       //startnode = node.previousSibling;
-                                                       if(lastNode && lastNode.nodeType == 3){
-                                                               //where shall we put the start? in the text node or after?
-                                                               startnode = lastNode;
-                                                               calOffset = true;
-                                                       }else{
-                                                               startnode = parentNode;
-                                                               startOffset = i;
-                                                               return false;
-                                                       }
-                                               }else{
-                                                       if(i == parentNode.childNodes.length-1){
-                                                               startnode = parentNode;
-                                                               startOffset = parentNode.childNodes.length;
-                                                               return false;
-                                                       }
-                                               }
-                                       }else{
-                                               if(i == parentNode.childNodes.length-1){//at the end of this node
-                                                       startnode = node;
-                                                       calOffset = true;
-                                               }
-                                       }
-               //                      try{
-                                               if(calOffset && startnode){
-                                                       var prevnode = dijit.range.adjacentNoneTextNode(startnode)[0];
-                                                       if(prevnode){
-                                                               startnode = prevnode.nextSibling;
-                                                       }else{
-                                                               startnode = parentNode.firstChild; //firstChild must be a text node
-                                                       }
-                                                       var prevnodeobj = dijit.range.adjacentNoneTextNode(startnode);
-                                                       prevnode = prevnodeobj[0];
-                                                       var lenoffset = prevnodeobj[1];
-                                                       if(prevnode){
-                                                               atmrange.moveToElementText(prevnode);
-                                                               atmrange.collapse(false);
-                                                       }else{
-                                                               atmrange.moveToElementText(parentNode);
-                                                       }
-                                                       atmrange.setEndPoint(cmpstr, range);
-                                                       startOffset = atmrange.text.length-lenoffset;
-
-                                                       return false;
-                                               }
-               //                      }catch(e){ debugger }
-                                       lastNode = node;
-                                       return true;
-                               });
-                       }else{
-                               startnode = parentNode;
-                               startOffset = 0;
-                       }
-
-                       //if at the end of startnode and we are dealing with start container, then
-                       //move the startnode to nextSibling if it is a text node
-                       //TODO: do this for end container?
-                       if(!end && startnode.nodeType == 1 && startOffset == startnode.childNodes.length){
-                               var nextnode=startnode.nextSibling;
-                               if(nextnode && nextnode.nodeType == 3){
-                                       startnode = nextnode;
-                                       startOffset = 0;
-                               }
-                       }
-                       return [startnode, startOffset];
-               },
-               setEndPoint: function(range, container, offset){
-                       //text node
-                       var atmrange = range.duplicate(), node, len;
-                       if(container.nodeType!=3){ //normal node
-                               if(offset > 0){
-                                       node = container.childNodes[offset-1];
-                                       if(node){
-                                               if(node.nodeType == 3){
-                                                       container = node;
-                                                       offset = node.length;
-                                                       //pass through
-                                               }else{
-                                                       if(node.nextSibling && node.nextSibling.nodeType == 3){
-                                                               container=node.nextSibling;
-                                                               offset=0;
-                                                               //pass through
-                                                       }else{
-                                                               atmrange.moveToElementText(node.nextSibling?node:container);
-                                                               var parent = node.parentNode;
-                                                               var tempNode = parent.insertBefore(node.ownerDocument.createTextNode(' '), node.nextSibling);
-                                                               atmrange.collapse(false);
-                                                               parent.removeChild(tempNode);
-                                                       }
-                                               }
-                                       }
-                               }else{
-                                       atmrange.moveToElementText(container);
-                                       atmrange.collapse(true);
-                               }
-                       }
-                       if(container.nodeType == 3){
-                               var prevnodeobj = dijit.range.adjacentNoneTextNode(container);
-                               var prevnode = prevnodeobj[0];
-                               len = prevnodeobj[1];
-                               if(prevnode){
-                                       atmrange.moveToElementText(prevnode);
-                                       atmrange.collapse(false);
-                                       //if contentEditable is not inherit, the above collapse won't make the end point
-                                       //in the correctly position: it always has a -1 offset, so compensate it
-                                       if(prevnode.contentEditable!='inherit'){
-                                               len++;
-                                       }
-                               }else{
-                                       atmrange.moveToElementText(container.parentNode);
-                                       atmrange.collapse(true);
-                               }
-
-                               offset += len;
-                               if(offset>0){
-                                       if(atmrange.move('character',offset) != offset){
-                                               console.error('Error when moving!');
-                                       }
-                               }
-                       }
-
-                       return atmrange;
-               },
-               decomposeTextRange: function(range){
-                       var tmpary = dijit.range.ie.getEndPoint(range);
-                       var startContainer = tmpary[0], startOffset = tmpary[1];
-                       var endContainer = tmpary[0], endOffset = tmpary[1];
-
-                       if(range.htmlText.length){
-                               if(range.htmlText == range.text){ //in the same text node
-                                       endOffset = startOffset+range.text.length;
-                               }else{
-                                       tmpary = dijit.range.ie.getEndPoint(range,true);
-                                       endContainer = tmpary[0], endOffset = tmpary[1];
-//                                     if(startContainer.tagName == "BODY"){
-//                                             startContainer = startContainer.firstChild;
-//                                     }
-                               }
-                       }
-                       return [startContainer, startOffset, endContainer, endOffset];
-               },
-               setRange: function(range, startContainer,
-                       startOffset, endContainer, endOffset, collapsed){
-                       var start=dijit.range.ie.setEndPoint(range, startContainer, startOffset);
-
-                       range.setEndPoint('StartToStart',start);
-                       if(!collapsed){
-                               var end=dijit.range.ie.setEndPoint(range, endContainer, endOffset);
-                       }
-                       range.setEndPoint('EndToEnd',end || start);
-
-                       return range;
-               }
-       }
-
-dojo.declare("dijit.range.W3CRange",null, {
-       constructor: function(){
-               if(arguments.length>0){
-                       this.setStart(arguments[0][0],arguments[0][1]);
-                       this.setEnd(arguments[0][2],arguments[0][3]);
-               }else{
-                       this.commonAncestorContainer = null;
-                       this.startContainer = null;
-                       this.startOffset = 0;
-                       this.endContainer = null;
-                       this.endOffset = 0;
-                       this.collapsed = true;
-               }
-       },
-       _updateInternal: function(){
-               if(this.startContainer !== this.endContainer){
-                       this.commonAncestorContainer = dijit.range.getCommonAncestor(this.startContainer, this.endContainer);
-               }else{
-                       this.commonAncestorContainer = this.startContainer;
-               }
-               this.collapsed = (this.startContainer === this.endContainer) && (this.startOffset == this.endOffset);
-       },
-       setStart: function(node, offset){
-               offset=parseInt(offset);
-               if(this.startContainer === node && this.startOffset == offset){
-                       return;
-               }
-               delete this._cachedBookmark;
-
-               this.startContainer = node;
-               this.startOffset = offset;
-               if(!this.endContainer){
-                       this.setEnd(node, offset);
-               }else{
-                       this._updateInternal();
-               }
-       },
-       setEnd: function(node, offset){
-               offset=parseInt(offset);
-               if(this.endContainer === node && this.endOffset == offset){
-                       return;
-               }
-               delete this._cachedBookmark;
-
-               this.endContainer = node;
-               this.endOffset = offset;
-               if(!this.startContainer){
-                       this.setStart(node, offset);
-               }else{
-                       this._updateInternal();
-               }
-       },
-       setStartAfter: function(node, offset){
-               this._setPoint('setStart', node, offset, 1);
-       },
-       setStartBefore: function(node, offset){
-               this._setPoint('setStart', node, offset, 0);
-       },
-       setEndAfter: function(node, offset){
-               this._setPoint('setEnd', node, offset, 1);
-       },
-       setEndBefore: function(node, offset){
-               this._setPoint('setEnd', node, offset, 0);
-       },
-       _setPoint: function(what, node, offset, ext){
-               var index = dijit.range.getIndex(node, node.parentNode).o;
-               this[what](node.parentNode, index.pop()+ext);
-       },
-       _getIERange: function(){
-               var r = (this._body || this.endContainer.ownerDocument.body).createTextRange();
-               dijit.range.ie.setRange(r, this.startContainer, this.startOffset, this.endContainer, this.endOffset, this.collapsed);
-               return r;
-       },
-       getBookmark: function(body){
-               this._getIERange();
-               return this._cachedBookmark;
-       },
-       _select: function(){
-               var r = this._getIERange();
-               r.select();
-       },
-       deleteContents: function(){
-               var r = this._getIERange();
-               r.pasteHTML('');
-               this.endContainer = this.startContainer;
-               this.endOffset = this.startOffset;
-               this.collapsed = true;
-       },
-       cloneRange: function(){
-               var r = new dijit.range.W3CRange([this.startContainer,this.startOffset,
-                       this.endContainer,this.endOffset]);
-               r._body = this._body;
-               return r;
-       },
-       detach: function(){
-               this._body = null;
-               this.commonAncestorContainer = null;
-               this.startContainer = null;
-               this.startOffset = 0;
-               this.endContainer = null;
-               this.endOffset = 0;
-               this.collapsed = true;
-}
-});
-} //if(!dijit.range._w3c)
-
-}
+//>>built
+define("dijit/_editor/range",["dojo/_base/array","dojo/_base/declare","dojo/_base/lang","dojo/_base/window",".."],function(_1,_2,_3,_4,_5){_5.range={};_5.range.getIndex=function(_6,_7){var _8=[],_9=[];var _a=_6;var _b,n;while(_6!=_7){var i=0;_b=_6.parentNode;while((n=_b.childNodes[i++])){if(n===_6){--i;break;}}_8.unshift(i);_9.unshift(i-_b.childNodes.length);_6=_b;}if(_8.length>0&&_a.nodeType==3){n=_a.previousSibling;while(n&&n.nodeType==3){_8[_8.length-1]--;n=n.previousSibling;}n=_a.nextSibling;while(n&&n.nodeType==3){_9[_9.length-1]++;n=n.nextSibling;}}return {o:_8,r:_9};};_5.range.getNode=function(_c,_d){if(!_3.isArray(_c)||_c.length==0){return _d;}var _e=_d;_1.every(_c,function(i){if(i>=0&&i<_e.childNodes.length){_e=_e.childNodes[i];}else{_e=null;return false;}return true;});return _e;};_5.range.getCommonAncestor=function(n1,n2,_f){_f=_f||n1.ownerDocument.body;var _10=function(n){var as=[];while(n){as.unshift(n);if(n!==_f){n=n.parentNode;}else{break;}}return as;};var _11=_10(n1);var _12=_10(n2);var m=Math.min(_11.length,_12.length);var com=_11[0];for(var i=1;i<m;i++){if(_11[i]===_12[i]){com=_11[i];}else{break;}}return com;};_5.range.getAncestor=function(_13,_14,_15){_15=_15||_13.ownerDocument.body;while(_13&&_13!==_15){var _16=_13.nodeName.toUpperCase();if(_14.test(_16)){return _13;}_13=_13.parentNode;}return null;};_5.range.BlockTagNames=/^(?:P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|DT|DE)$/;_5.range.getBlockAncestor=function(_17,_18,_19){_19=_19||_17.ownerDocument.body;_18=_18||_5.range.BlockTagNames;var _1a=null,_1b;while(_17&&_17!==_19){var _1c=_17.nodeName.toUpperCase();if(!_1a&&_18.test(_1c)){_1a=_17;}if(!_1b&&(/^(?:BODY|TD|TH|CAPTION)$/).test(_1c)){_1b=_17;}_17=_17.parentNode;}return {blockNode:_1a,blockContainer:_1b||_17.ownerDocument.body};};_5.range.atBeginningOfContainer=function(_1d,_1e,_1f){var _20=false;var _21=(_1f==0);if(!_21&&_1e.nodeType==3){if(/^[\s\xA0]+$/.test(_1e.nodeValue.substr(0,_1f))){_21=true;}}if(_21){var _22=_1e;_20=true;while(_22&&_22!==_1d){if(_22.previousSibling){_20=false;break;}_22=_22.parentNode;}}return _20;};_5.range.atEndOfContainer=function(_23,_24,_25){var _26=false;var _27=(_25==(_24.length||_24.childNodes.length));if(!_27&&_24.nodeType==3){if(/^[\s\xA0]+$/.test(_24.nodeValue.substr(_25))){_27=true;}}if(_27){var _28=_24;_26=true;while(_28&&_28!==_23){if(_28.nextSibling){_26=false;break;}_28=_28.parentNode;}}return _26;};_5.range.adjacentNoneTextNode=function(_29,_2a){var _2b=_29;var len=(0-_29.length)||0;var _2c=_2a?"nextSibling":"previousSibling";while(_2b){if(_2b.nodeType!=3){break;}len+=_2b.length;_2b=_2b[_2c];}return [_2b,len];};_5.range._w3c=Boolean(window["getSelection"]);_5.range.create=function(_2d){if(_5.range._w3c){return (_2d||_4.global).document.createRange();}else{return new _5.range.W3CRange;}};_5.range.getSelection=function(win,_2e){if(_5.range._w3c){return win.getSelection();}else{var s=new _5.range.ie.selection(win);if(!_2e){s._getCurrentSelection();}return s;}};if(!_5.range._w3c){_5.range.ie={cachedSelection:{},selection:function(win){this._ranges=[];this.addRange=function(r,_2f){this._ranges.push(r);if(!_2f){r._select();}this.rangeCount=this._ranges.length;};this.removeAllRanges=function(){this._ranges=[];this.rangeCount=0;};var _30=function(){var r=win.document.selection.createRange();var _31=win.document.selection.type.toUpperCase();if(_31=="CONTROL"){return new _5.range.W3CRange(_5.range.ie.decomposeControlRange(r));}else{return new _5.range.W3CRange(_5.range.ie.decomposeTextRange(r));}};this.getRangeAt=function(i){return this._ranges[i];};this._getCurrentSelection=function(){this.removeAllRanges();var r=_30();if(r){this.addRange(r,true);this.isCollapsed=r.collapsed;}else{this.isCollapsed=true;}};},decomposeControlRange:function(_32){var _33=_32.item(0),_34=_32.item(_32.length-1);var _35=_33.parentNode,_36=_34.parentNode;var _37=_5.range.getIndex(_33,_35).o[0];var _38=_5.range.getIndex(_34,_36).o[0]+1;return [_35,_37,_36,_38];},getEndPoint:function(_39,end){var _3a=_39.duplicate();_3a.collapse(!end);var _3b="EndTo"+(end?"End":"Start");var _3c=_3a.parentElement();var _3d,_3e,_3f;if(_3c.childNodes.length>0){_1.every(_3c.childNodes,function(_40,i){var _41;if(_40.nodeType!=3){_3a.moveToElementText(_40);if(_3a.compareEndPoints(_3b,_39)>0){if(_3f&&_3f.nodeType==3){_3d=_3f;_41=true;}else{_3d=_3c;_3e=i;return false;}}else{if(i==_3c.childNodes.length-1){_3d=_3c;_3e=_3c.childNodes.length;return false;}}}else{if(i==_3c.childNodes.length-1){_3d=_40;_41=true;}}if(_41&&_3d){var _42=_5.range.adjacentNoneTextNode(_3d)[0];if(_42){_3d=_42.nextSibling;}else{_3d=_3c.firstChild;}var _43=_5.range.adjacentNoneTextNode(_3d);_42=_43[0];var _44=_43[1];if(_42){_3a.moveToElementText(_42);_3a.collapse(false);}else{_3a.moveToElementText(_3c);}_3a.setEndPoint(_3b,_39);_3e=_3a.text.length-_44;return false;}_3f=_40;return true;});}else{_3d=_3c;_3e=0;}if(!end&&_3d.nodeType==1&&_3e==_3d.childNodes.length){var _45=_3d.nextSibling;if(_45&&_45.nodeType==3){_3d=_45;_3e=0;}}return [_3d,_3e];},setEndPoint:function(_46,_47,_48){var _49=_46.duplicate(),_4a,len;if(_47.nodeType!=3){if(_48>0){_4a=_47.childNodes[_48-1];if(_4a){if(_4a.nodeType==3){_47=_4a;_48=_4a.length;}else{if(_4a.nextSibling&&_4a.nextSibling.nodeType==3){_47=_4a.nextSibling;_48=0;}else{_49.moveToElementText(_4a.nextSibling?_4a:_47);var _4b=_4a.parentNode;var _4c=_4b.insertBefore(_4a.ownerDocument.createTextNode(" "),_4a.nextSibling);_49.collapse(false);_4b.removeChild(_4c);}}}}else{_49.moveToElementText(_47);_49.collapse(true);}}if(_47.nodeType==3){var _4d=_5.range.adjacentNoneTextNode(_47);var _4e=_4d[0];len=_4d[1];if(_4e){_49.moveToElementText(_4e);_49.collapse(false);if(_4e.contentEditable!="inherit"){len++;}}else{_49.moveToElementText(_47.parentNode);_49.collapse(true);}_48+=len;if(_48>0){if(_49.move("character",_48)!=_48){console.error("Error when moving!");}}}return _49;},decomposeTextRange:function(_4f){var _50=_5.range.ie.getEndPoint(_4f);var _51=_50[0],_52=_50[1];var _53=_50[0],_54=_50[1];if(_4f.htmlText.length){if(_4f.htmlText==_4f.text){_54=_52+_4f.text.length;}else{_50=_5.range.ie.getEndPoint(_4f,true);_53=_50[0],_54=_50[1];}}return [_51,_52,_53,_54];},setRange:function(_55,_56,_57,_58,_59,_5a){var _5b=_5.range.ie.setEndPoint(_55,_56,_57);_55.setEndPoint("StartToStart",_5b);if(!_5a){var end=_5.range.ie.setEndPoint(_55,_58,_59);}_55.setEndPoint("EndToEnd",end||_5b);return _55;}};_2("dijit.range.W3CRange",null,{constructor:function(){if(arguments.length>0){this.setStart(arguments[0][0],arguments[0][1]);this.setEnd(arguments[0][2],arguments[0][3]);}else{this.commonAncestorContainer=null;this.startContainer=null;this.startOffset=0;this.endContainer=null;this.endOffset=0;this.collapsed=true;}},_updateInternal:function(){if(this.startContainer!==this.endContainer){this.commonAncestorContainer=_5.range.getCommonAncestor(this.startContainer,this.endContainer);}else{this.commonAncestorContainer=this.startContainer;}this.collapsed=(this.startContainer===this.endContainer)&&(this.startOffset==this.endOffset);},setStart:function(_5c,_5d){_5d=parseInt(_5d);if(this.startContainer===_5c&&this.startOffset==_5d){return;}delete this._cachedBookmark;this.startContainer=_5c;this.startOffset=_5d;if(!this.endContainer){this.setEnd(_5c,_5d);}else{this._updateInternal();}},setEnd:function(_5e,_5f){_5f=parseInt(_5f);if(this.endContainer===_5e&&this.endOffset==_5f){return;}delete this._cachedBookmark;this.endContainer=_5e;this.endOffset=_5f;if(!this.startContainer){this.setStart(_5e,_5f);}else{this._updateInternal();}},setStartAfter:function(_60,_61){this._setPoint("setStart",_60,_61,1);},setStartBefore:function(_62,_63){this._setPoint("setStart",_62,_63,0);},setEndAfter:function(_64,_65){this._setPoint("setEnd",_64,_65,1);},setEndBefore:function(_66,_67){this._setPoint("setEnd",_66,_67,0);},_setPoint:function(_68,_69,_6a,ext){var _6b=_5.range.getIndex(_69,_69.parentNode).o;this[_68](_69.parentNode,_6b.pop()+ext);},_getIERange:function(){var r=(this._body||this.endContainer.ownerDocument.body).createTextRange();_5.range.ie.setRange(r,this.startContainer,this.startOffset,this.endContainer,this.endOffset,this.collapsed);return r;},getBookmark:function(){this._getIERange();return this._cachedBookmark;},_select:function(){var r=this._getIERange();r.select();},deleteContents:function(){var s=this.startContainer,r=this._getIERange();if(s.nodeType===3&&!this.startOffset){this.setStartBefore(s);}r.pasteHTML("");this.endContainer=this.startContainer;this.endOffset=this.startOffset;this.collapsed=true;},cloneRange:function(){var r=new _5.range.W3CRange([this.startContainer,this.startOffset,this.endContainer,this.endOffset]);r._body=this._body;return r;},detach:function(){this._body=null;this.commonAncestorContainer=null;this.startContainer=null;this.startOffset=0;this.endContainer=null;this.endOffset=0;this.collapsed=true;}});}return _5.range;});
\ No newline at end of file