summaryrefslogtreecommitdiff
path: root/lib/dijit/_editor/range.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/dijit/_editor/range.js')
-rw-r--r--lib/dijit/_editor/range.js950
1 files changed, 519 insertions, 431 deletions
diff --git a/lib/dijit/_editor/range.js b/lib/dijit/_editor/range.js
index 2b1bd81e3..2e5074583 100644
--- a/lib/dijit/_editor/range.js
+++ b/lib/dijit/_editor/range.js
@@ -1,453 +1,541 @@
/*
- Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+ 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"]){
-dojo._hasResource["dijit._editor.range"]=true;
+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(_1,_2){
-var _3=[],_4=[];
-var _5=_2;
-var _6=_1;
-var _7,n;
-while(_1!=_5){
-var i=0;
-_7=_1.parentNode;
-while((n=_7.childNodes[i++])){
-if(n===_1){
---i;
-break;
-}
-}
-_3.unshift(i);
-_4.unshift(i-_7.childNodes.length);
-_1=_7;
-}
-if(_3.length>0&&_6.nodeType==3){
-n=_6.previousSibling;
-while(n&&n.nodeType==3){
-_3[_3.length-1]--;
-n=n.previousSibling;
-}
-n=_6.nextSibling;
-while(n&&n.nodeType==3){
-_4[_4.length-1]++;
-n=n.nextSibling;
-}
-}
-return {o:_3,r:_4};
-};
-dijit.range.getNode=function(_8,_9){
-if(!dojo.isArray(_8)||_8.length==0){
-return _9;
-}
-var _a=_9;
-dojo.every(_8,function(i){
-if(i>=0&&i<_a.childNodes.length){
-_a=_a.childNodes[i];
-}else{
-_a=null;
-return false;
-}
-return true;
-});
-return _a;
-};
-dijit.range.getCommonAncestor=function(n1,n2,_b){
-_b=_b||n1.ownerDocument.body;
-var _c=function(n){
-var as=[];
-while(n){
-as.unshift(n);
-if(n!==_b){
-n=n.parentNode;
-}else{
-break;
-}
-}
-return as;
-};
-var _d=_c(n1);
-var _e=_c(n2);
-var m=Math.min(_d.length,_e.length);
-var _f=_d[0];
-for(var i=1;i<m;i++){
-if(_d[i]===_e[i]){
-_f=_d[i];
-}else{
-break;
-}
-}
-return _f;
-};
-dijit.range.getAncestor=function(_10,_11,_12){
-_12=_12||_10.ownerDocument.body;
-while(_10&&_10!==_12){
-var _13=_10.nodeName.toUpperCase();
-if(_11.test(_13)){
-return _10;
-}
-_10=_10.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(_14,_15,_16){
-_16=_16||_14.ownerDocument.body;
-_15=_15||dijit.range.BlockTagNames;
-var _17=null,_18;
-while(_14&&_14!==_16){
-var _19=_14.nodeName.toUpperCase();
-if(!_17&&_15.test(_19)){
-_17=_14;
-}
-if(!_18&&(/^(?:BODY|TD|TH|CAPTION)$/).test(_19)){
-_18=_14;
-}
-_14=_14.parentNode;
-}
-return {blockNode:_17,blockContainer:_18||_14.ownerDocument.body};
-};
-dijit.range.atBeginningOfContainer=function(_1a,_1b,_1c){
-var _1d=false;
-var _1e=(_1c==0);
-if(!_1e&&_1b.nodeType==3){
-if(/^[\s\xA0]+$/.test(_1b.nodeValue.substr(0,_1c))){
-_1e=true;
-}
-}
-if(_1e){
-var _1f=_1b;
-_1d=true;
-while(_1f&&_1f!==_1a){
-if(_1f.previousSibling){
-_1d=false;
-break;
-}
-_1f=_1f.parentNode;
-}
-}
-return _1d;
-};
-dijit.range.atEndOfContainer=function(_20,_21,_22){
-var _23=false;
-var _24=(_22==(_21.length||_21.childNodes.length));
-if(!_24&&_21.nodeType==3){
-if(/^[\s\xA0]+$/.test(_21.nodeValue.substr(_22))){
-_24=true;
+
+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;
}
-if(_24){
-var _25=_21;
-_23=true;
-while(_25&&_25!==_20){
-if(_25.nextSibling){
-_23=false;
-break;
+
+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;
}
-_25=_25.parentNode;
+
+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};
}
-return _23;
-};
-dijit.range.adjacentNoneTextNode=function(_26,_27){
-var _28=_26;
-var len=(0-_26.length)||0;
-var _29=_27?"nextSibling":"previousSibling";
-while(_28){
-if(_28.nodeType!=3){
-break;
+
+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;
}
-len+=_28.length;
-_28=_28[_29];
+
+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;
}
-return [_28,len];
-};
-dijit.range._w3c=Boolean(window["getSelection"]);
-dijit.range.create=function(win){
-if(dijit.range._w3c){
-return (win||dojo.global).document.createRange();
-}else{
-return new dijit.range.W3CRange;
+
+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.getSelection=function(win,_2a){
-if(dijit.range._w3c){
-return win.getSelection();
-}else{
-var s=new dijit.range.ie.selection(win);
-if(!_2a){
-s._getCurrentSelection();
+
+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;
+ }
}
-return s;
+
+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,_2b){
-this._ranges.push(r);
-if(!_2b){
-r._select();
-}
-this.rangeCount=this._ranges.length;
-};
-this.removeAllRanges=function(){
-this._ranges=[];
-this.rangeCount=0;
-};
-var _2c=function(){
-var r=win.document.selection.createRange();
-var _2d=win.document.selection.type.toUpperCase();
-if(_2d=="CONTROL"){
-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=_2c();
-if(r){
-this.addRange(r,true);
-}
-};
-},decomposeControlRange:function(_2e){
-var _2f=_2e.item(0),_30=_2e.item(_2e.length-1);
-var _31=_2f.parentNode,_32=_30.parentNode;
-var _33=dijit.range.getIndex(_2f,_31).o;
-var _34=dijit.range.getIndex(_30,_32).o+1;
-return [_31,_33,_32,_34];
-},getEndPoint:function(_35,end){
-var _36=_35.duplicate();
-_36.collapse(!end);
-var _37="EndTo"+(end?"End":"Start");
-var _38=_36.parentElement();
-var _39,_3a,_3b;
-if(_38.childNodes.length>0){
-dojo.every(_38.childNodes,function(_3c,i){
-var _3d;
-if(_3c.nodeType!=3){
-_36.moveToElementText(_3c);
-if(_36.compareEndPoints(_37,_35)>0){
-if(_3b&&_3b.nodeType==3){
-_39=_3b;
-_3d=true;
-}else{
-_39=_38;
-_3a=i;
-return false;
-}
-}else{
-if(i==_38.childNodes.length-1){
-_39=_38;
-_3a=_38.childNodes.length;
-return false;
-}
-}
-}else{
-if(i==_38.childNodes.length-1){
-_39=_3c;
-_3d=true;
-}
-}
-if(_3d&&_39){
-var _3e=dijit.range.adjacentNoneTextNode(_39)[0];
-if(_3e){
-_39=_3e.nextSibling;
-}else{
-_39=_38.firstChild;
-}
-var _3f=dijit.range.adjacentNoneTextNode(_39);
-_3e=_3f[0];
-var _40=_3f[1];
-if(_3e){
-_36.moveToElementText(_3e);
-_36.collapse(false);
-}else{
-_36.moveToElementText(_38);
-}
-_36.setEndPoint(_37,_35);
-_3a=_36.text.length-_40;
-return false;
+ 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;
}
-_3b=_3c;
-return true;
});
-}else{
-_39=_38;
-_3a=0;
-}
-if(!end&&_39.nodeType==1&&_3a==_39.childNodes.length){
-var _41=_39.nextSibling;
-if(_41&&_41.nodeType==3){
-_39=_41;
-_3a=0;
-}
-}
-return [_39,_3a];
-},setEndPoint:function(_42,_43,_44){
-var _45=_42.duplicate(),_46,len;
-if(_43.nodeType!=3){
-if(_44>0){
-_46=_43.childNodes[_44-1];
-if(_46){
-if(_46.nodeType==3){
-_43=_46;
-_44=_46.length;
-}else{
-if(_46.nextSibling&&_46.nextSibling.nodeType==3){
-_43=_46.nextSibling;
-_44=0;
-}else{
-_45.moveToElementText(_46.nextSibling?_46:_43);
-var _47=_46.parentNode;
-var _48=_47.insertBefore(_46.ownerDocument.createTextNode(" "),_46.nextSibling);
-_45.collapse(false);
-_47.removeChild(_48);
-}
-}
-}
-}else{
-_45.moveToElementText(_43);
-_45.collapse(true);
-}
-}
-if(_43.nodeType==3){
-var _49=dijit.range.adjacentNoneTextNode(_43);
-var _4a=_49[0];
-len=_49[1];
-if(_4a){
-_45.moveToElementText(_4a);
-_45.collapse(false);
-if(_4a.contentEditable!="inherit"){
-len++;
-}
-}else{
-_45.moveToElementText(_43.parentNode);
-_45.collapse(true);
-}
-_44+=len;
-if(_44>0){
-if(_45.move("character",_44)!=_44){
-console.error("Error when moving!");
-}
-}
-}
-return _45;
-},decomposeTextRange:function(_4b){
-var _4c=dijit.range.ie.getEndPoint(_4b);
-var _4d=_4c[0],_4e=_4c[1];
-var _4f=_4c[0],_50=_4c[1];
-if(_4b.htmlText.length){
-if(_4b.htmlText==_4b.text){
-_50=_4e+_4b.text.length;
-}else{
-_4c=dijit.range.ie.getEndPoint(_4b,true);
-_4f=_4c[0],_50=_4c[1];
-}
-}
-return [_4d,_4e,_4f,_50];
-},setRange:function(_51,_52,_53,_54,_55,_56){
-var _57=dijit.range.ie.setEndPoint(_51,_52,_53);
-_51.setEndPoint("StartToStart",_57);
-if(!_56){
-var end=dijit.range.ie.setEndPoint(_51,_54,_55);
-}
-_51.setEndPoint("EndToEnd",end||_57);
-return _51;
-}};
-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(_58,_59){
-_59=parseInt(_59);
-if(this.startContainer===_58&&this.startOffset==_59){
-return;
-}
-delete this._cachedBookmark;
-this.startContainer=_58;
-this.startOffset=_59;
-if(!this.endContainer){
-this.setEnd(_58,_59);
-}else{
-this._updateInternal();
-}
-},setEnd:function(_5a,_5b){
-_5b=parseInt(_5b);
-if(this.endContainer===_5a&&this.endOffset==_5b){
-return;
-}
-delete this._cachedBookmark;
-this.endContainer=_5a;
-this.endOffset=_5b;
-if(!this.startContainer){
-this.setStart(_5a,_5b);
-}else{
-this._updateInternal();
-}
-},setStartAfter:function(_5c,_5d){
-this._setPoint("setStart",_5c,_5d,1);
-},setStartBefore:function(_5e,_5f){
-this._setPoint("setStart",_5e,_5f,0);
-},setEndAfter:function(_60,_61){
-this._setPoint("setEnd",_60,_61,1);
-},setEndBefore:function(_62,_63){
-this._setPoint("setEnd",_62,_63,0);
-},_setPoint:function(_64,_65,_66,ext){
-var _67=dijit.range.getIndex(_65,_65.parentNode).o;
-this[_64](_65.parentNode,_67.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(_68){
-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)
+
}