/* Copyright (c) 2004-2010, 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; 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;i0){ 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; } _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; }}); } }