a:54:{s:9:"#provides";s:19:"dijit._editor.range";s:9:"#resource";s:16:"_editor/range.js";s:20:"dijit.range.W3CRange";a:4:{s:4:"type";s:8:"Function";s:6:"source";s:312:" 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; }";s:9:"classlike";b:1;s:7:"summary";s:0:"";}s:36:"dijit.range.W3CRange._updateInternal";a:5:{s:9:"prototype";s:20:"dijit.range.W3CRange";s:4:"type";s:8:"Function";s:6:"source";s:325:" 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);";s:7:"private";b:1;s:7:"summary";s:0:"";}s:29:"dijit.range.W3CRange.setStart";a:5:{s:9:"prototype";s:20:"dijit.range.W3CRange";s:4:"type";s:8:"Function";s:10:"parameters";a:2:{s:4:"node";a:1:{s:4:"type";s:0:"";}s:6:"offset";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:295:" 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(); }";s:7:"summary";s:0:"";}s:27:"dijit.range.W3CRange.setEnd";a:5:{s:9:"prototype";s:20:"dijit.range.W3CRange";s:4:"type";s:8:"Function";s:10:"parameters";a:2:{s:4:"node";a:1:{s:4:"type";s:0:"";}s:6:"offset";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:291:" 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(); }";s:7:"summary";s:0:"";}s:34:"dijit.range.W3CRange.setStartAfter";a:5:{s:9:"prototype";s:20:"dijit.range.W3CRange";s:4:"type";s:8:"Function";s:10:"parameters";a:2:{s:4:"node";a:1:{s:4:"type";s:0:"";}s:6:"offset";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:46:" this._setPoint('setStart', node, offset, 1);";s:7:"summary";s:0:"";}s:35:"dijit.range.W3CRange.setStartBefore";a:5:{s:9:"prototype";s:20:"dijit.range.W3CRange";s:4:"type";s:8:"Function";s:10:"parameters";a:2:{s:4:"node";a:1:{s:4:"type";s:0:"";}s:6:"offset";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:46:" this._setPoint('setStart', node, offset, 0);";s:7:"summary";s:0:"";}s:32:"dijit.range.W3CRange.setEndAfter";a:5:{s:9:"prototype";s:20:"dijit.range.W3CRange";s:4:"type";s:8:"Function";s:10:"parameters";a:2:{s:4:"node";a:1:{s:4:"type";s:0:"";}s:6:"offset";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:44:" this._setPoint('setEnd', node, offset, 1);";s:7:"summary";s:0:"";}s:33:"dijit.range.W3CRange.setEndBefore";a:5:{s:9:"prototype";s:20:"dijit.range.W3CRange";s:4:"type";s:8:"Function";s:10:"parameters";a:2:{s:4:"node";a:1:{s:4:"type";s:0:"";}s:6:"offset";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:44:" this._setPoint('setEnd', node, offset, 0);";s:7:"summary";s:0:"";}s:30:"dijit.range.W3CRange._setPoint";a:6:{s:9:"prototype";s:20:"dijit.range.W3CRange";s:4:"type";s:8:"Function";s:10:"parameters";a:4:{s:4:"what";a:1:{s:4:"type";s:0:"";}s:4:"node";a:1:{s:4:"type";s:0:"";}s:6:"offset";a:1:{s:4:"type";s:0:"";}s:3:"ext";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:108:" var index = dijit.range.getIndex(node, node.parentNode).o; this[what](node.parentNode, index.pop()+ext);";s:7:"private";b:1;s:7:"summary";s:0:"";}s:32:"dijit.range.W3CRange._getIERange";a:5:{s:9:"prototype";s:20:"dijit.range.W3CRange";s:4:"type";s:8:"Function";s:6:"source";s:209:" 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;";s:7:"private";b:1;s:7:"summary";s:0:"";}s:32:"dijit.range.W3CRange.getBookmark";a:5:{s:9:"prototype";s:20:"dijit.range.W3CRange";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:4:"body";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:52:" this._getIERange(); return this._cachedBookmark;";s:7:"summary";s:0:"";}s:28:"dijit.range.W3CRange._select";a:5:{s:9:"prototype";s:20:"dijit.range.W3CRange";s:4:"type";s:8:"Function";s:6:"source";s:43:" var r = this._getIERange(); r.select();";s:7:"private";b:1;s:7:"summary";s:0:"";}s:35:"dijit.range.W3CRange.deleteContents";a:4:{s:9:"prototype";s:20:"dijit.range.W3CRange";s:4:"type";s:8:"Function";s:6:"source";s:153:" var r = this._getIERange(); r.pasteHTML(''); this.endContainer = this.startContainer; this.endOffset = this.startOffset; this.collapsed = true;";s:7:"summary";s:0:"";}s:31:"dijit.range.W3CRange.cloneRange";a:4:{s:9:"prototype";s:20:"dijit.range.W3CRange";s:4:"type";s:8:"Function";s:6:"source";s:148:" var r = new dijit.range.W3CRange([this.startContainer,this.startOffset, this.endContainer,this.endOffset]); r._body = this._body; return r;";s:7:"summary";s:0:"";}s:27:"dijit.range.W3CRange.detach";a:4:{s:9:"prototype";s:20:"dijit.range.W3CRange";s:4:"type";s:8:"Function";s:6:"source";s:188:" this._body = null; this.commonAncestorContainer = null; this.startContainer = null; this.startOffset = 0; this.endContainer = null; this.endOffset = 0; this.collapsed = true;";s:7:"summary";s:0:"";}s:44:"dijit.range.W3CRange.commonAncestorContainer";a:2:{s:8:"instance";s:20:"dijit.range.W3CRange";s:7:"summary";s:0:"";}s:30:"dijit.range.W3CRange.collapsed";a:2:{s:8:"instance";s:20:"dijit.range.W3CRange";s:7:"summary";s:0:"";}s:35:"dijit.range.W3CRange.startContainer";a:2:{s:8:"instance";s:20:"dijit.range.W3CRange";s:7:"summary";s:0:"";}s:32:"dijit.range.W3CRange.startOffset";a:2:{s:8:"instance";s:20:"dijit.range.W3CRange";s:7:"summary";s:0:"";}s:33:"dijit.range.W3CRange.endContainer";a:2:{s:8:"instance";s:20:"dijit.range.W3CRange";s:7:"summary";s:0:"";}s:30:"dijit.range.W3CRange.endOffset";a:2:{s:8:"instance";s:20:"dijit.range.W3CRange";s:7:"summary";s:0:"";}s:26:"dijit.range.W3CRange._body";a:3:{s:8:"instance";s:20:"dijit.range.W3CRange";s:7:"private";b:1;s:7:"summary";s:0:"";}s:11:"dijit.range";a:2:{s:4:"type";s:6:"Object";s:7:"summary";s:0:"";}s:14:"dijit.range.ie";a:2:{s:4:"type";s:6:"Object";s:7:"summary";s:0:"";}s:30:"dijit.range.ie.cachedSelection";a:2:{s:4:"type";s:6:"Object";s:7:"summary";s:0:"";}s:24:"dijit.range.ie.selection";a:5:{s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:3:"win";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:1032:" 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=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){ var getAncestors = function(n){ var as=[]; while(n){ as.unshift(n); if(n.nodeName!='BODY'){ 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;i0){ 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 share 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!=3 && startOffset == startnode.childNodes.length){ if(startnode.nextSibling && startnode.nextSibling.nodeType==3){ startnode = startnode.nextSibling; startOffset = 0; } } return [startnode, startOffset];";s:7:"summary";s:0:"";}s:26:"dijit.range.ie.setEndPoint";a:5:{s:4:"type";s:8:"Function";s:10:"parameters";a:3:{s:5:"range";a:1:{s:4:"type";s:0:"";}s:9:"container";a:1:{s:4:"type";s:0:"";}s:6:"offset";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:10525:"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){ var getAncestors = function(n){ var as=[]; while(n){ as.unshift(n); if(n.nodeName!='BODY'){ 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;i0){ 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 share 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!=3 && startOffset == startnode.childNodes.length){ if(startnode.nextSibling && startnode.nextSibling.nodeType==3){ startnode = startnode.nextSibling; 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.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 tempnode=node.parentNode.insertBefore(document.createTextNode(' '),node.nextSibling); atmrange.collapse(false); tempnode.parentNode.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;";s:7:"returns";s:44:"terminate dojo.every|carry on the every loop";s:7:"summary";s:0:"";}s:33:"dijit.range.ie.decomposeTextRange";a:4:{s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:5:"range";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:508:" var tmpary = dijit.range.ie.getEndPoint(range); var startContainter = tmpary[0], startOffset = tmpary[1]; var endContainter = 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); endContainter = tmpary[0], endOffset = tmpary[1]; } } return [startContainter, startOffset,endContainter, endOffset];";s:7:"summary";s:0:"";}s:23:"dijit.range.ie.setRange";a:4:{s:4:"type";s:8:"Function";s:10:"parameters";a:6:{s:5:"range";a:1:{s:4:"type";s:0:"";}s:15:"startContainter";a:1:{s:4:"type";s:0:"";}s:11:"startOffset";a:1:{s:4:"type";s:0:"";}s:13:"endContainter";a:1:{s:4:"type";s:0:"";}s:9:"endOffset";a:1:{s:4:"type";s:0:"";}s:9:"collapsed";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:285:" var start=dijit.range.ie.setEndPoint(range, startContainter, startOffset); range.setEndPoint('StartToStart',start); if(!collapsed){ var end=dijit.range.ie.setEndPoint(range, endContainter, endOffset); } range.setEndPoint('EndToEnd',end||start); return range;";s:7:"summary";s:0:"";}s:20:"dijit.range.getIndex";a:4:{s:4:"type";s:8:"Function";s:10:"parameters";a:2:{s:4:"node";a:1:{s:4:"type";s:7:"DomNode";}s:6:"parent";a:1:{s:4:"type";s:7:"DomNode";}}s:6:"source";s:1061:"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};";s:7:"summary";s:0:"";}s:19:"dijit.range.getNode";a:5:{s:4:"type";s:8:"Function";s:10:"parameters";a:2:{s:5:"index";a:1:{s:4:"type";s:5:"Array";}s:6:"parent";a:1:{s:4:"type";s:7:"DomNode";}}s:6:"source";s:429:" 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;";s:7:"returns";s:44:"terminate dojo.every|carry on the every loop";s:7:"summary";s:0:"";}s:29:"dijit.range.getCommonAncestor";a:4:{s:4:"type";s:8:"Function";s:10:"parameters";a:2:{s:2:"n1";a:1:{s:4:"type";s:0:"";}s:2:"n2";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:476:" var getAncestors = function(n){ var as=[]; while(n){ as.unshift(n); if(n.nodeName!='BODY'){ 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