| /* |
| Copyright (c) 2004-2009, 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; |
| } |
| } |
| if(i>=_7.childNodes.length){ |
| dojo.debug("Error finding index of a node in dijit.range.getIndex"); |
| } |
| _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){ |
| var _b=function(n){ |
| var as=[]; |
| while(n){ |
| as.unshift(n); |
| if(n.nodeName!="BODY"){ |
| n=n.parentNode; |
| }else{ |
| break; |
| } |
| } |
| return as; |
| }; |
| var _c=_b(n1); |
| var _d=_b(n2); |
| var m=Math.min(_c.length,_d.length); |
| var _e=_c[0]; |
| for(var i=1;i<m;i++){ |
| if(_c[i]===_d[i]){ |
| _e=_c[i]; |
| }else{ |
| break; |
| } |
| } |
| return _e; |
| }; |
| dijit.range.getAncestor=function(_f,_10,_11){ |
| _11=_11||_f.ownerDocument.body; |
| while(_f&&_f!==_11){ |
| var _12=_f.nodeName.toUpperCase(); |
| if(_10.test(_12)){ |
| return _f; |
| } |
| _f=_f.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(_13,_14,_15){ |
| _15=_15||_13.ownerDocument.body; |
| _14=_14||dijit.range.BlockTagNames; |
| var _16=null,_17; |
| while(_13&&_13!==_15){ |
| var _18=_13.nodeName.toUpperCase(); |
| if(!_16&&_14.test(_18)){ |
| _16=_13; |
| } |
| if(!_17&&(/^(?:BODY|TD|TH|CAPTION)$/).test(_18)){ |
| _17=_13; |
| } |
| _13=_13.parentNode; |
| } |
| return {blockNode:_16,blockContainer:_17||_13.ownerDocument.body}; |
| }; |
| dijit.range.atBeginningOfContainer=function(_19,_1a,_1b){ |
| var _1c=false; |
| var _1d=(_1b==0); |
| if(!_1d&&_1a.nodeType==3){ |
| if(/^[\s\xA0]+$/.test(_1a.nodeValue.substr(0,_1b))){ |
| _1d=true; |
| } |
| } |
| if(_1d){ |
| var _1e=_1a; |
| _1c=true; |
| while(_1e&&_1e!==_19){ |
| if(_1e.previousSibling){ |
| _1c=false; |
| break; |
| } |
| _1e=_1e.parentNode; |
| } |
| } |
| return _1c; |
| }; |
| dijit.range.atEndOfContainer=function(_1f,_20,_21){ |
| var _22=false; |
| var _23=(_21==(_20.length||_20.childNodes.length)); |
| if(!_23&&_20.nodeType==3){ |
| if(/^[\s\xA0]+$/.test(_20.nodeValue.substr(_21))){ |
| _23=true; |
| } |
| } |
| if(_23){ |
| var _24=_20; |
| _22=true; |
| while(_24&&_24!==_1f){ |
| if(_24.nextSibling){ |
| _22=false; |
| break; |
| } |
| _24=_24.parentNode; |
| } |
| } |
| return _22; |
| }; |
| dijit.range.adjacentNoneTextNode=function(_25,_26){ |
| var _27=_25; |
| var len=(0-_25.length)||0; |
| var _28=_26?"nextSibling":"previousSibling"; |
| while(_27){ |
| if(_27.nodeType!=3){ |
| break; |
| } |
| len+=_27.length; |
| _27=_27[_28]; |
| } |
| return [_27,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.getSelection=function(win,_29){ |
| if(dijit.range._w3c){ |
| return win.getSelection(); |
| }else{ |
| var s=new dijit.range.ie.selection(win); |
| if(!_29){ |
| s._getCurrentSelection(); |
| } |
| return s; |
| } |
| }; |
| if(!dijit.range._w3c){ |
| dijit.range.ie={cachedSelection:{},selection:function(win){ |
| this._ranges=[]; |
| this.addRange=function(r,_2a){ |
| this._ranges.push(r); |
| if(!_2a){ |
| r._select(); |
| } |
| this.rangeCount=this._ranges.length; |
| }; |
| this.removeAllRanges=function(){ |
| this._ranges=[]; |
| this.rangeCount=0; |
| }; |
| var _2b=function(){ |
| var r=win.document.selection.createRange(); |
| var _2c=win.document.selection.type.toUpperCase(); |
| if(_2c=="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=_2b(); |
| if(r){ |
| this.addRange(r,true); |
| } |
| }; |
| },decomposeControlRange:function(_2d){ |
| var _2e=_2d.item(0),_2f=_2d.item(_2d.length-1); |
| var _30=_2e.parentNode,_31=_2f.parentNode; |
| var _32=dijit.range.getIndex(_2e,_30).o; |
| var _33=dijit.range.getIndex(_2f,_31).o+1; |
| return [_30,_32,_31,_33]; |
| },getEndPoint:function(_34,end){ |
| var _35=_34.duplicate(); |
| _35.collapse(!end); |
| var _36="EndTo"+(end?"End":"Start"); |
| var _37=_35.parentElement(); |
| var _38,_39,_3a; |
| if(_37.childNodes.length>0){ |
| dojo.every(_37.childNodes,function(_3b,i){ |
| var _3c; |
| if(_3b.nodeType!=3){ |
| _35.moveToElementText(_3b); |
| if(_35.compareEndPoints(_36,_34)>0){ |
| if(_3a&&_3a.nodeType==3){ |
| _38=_3a; |
| _3c=true; |
| }else{ |
| _38=_37; |
| _39=i; |
| return false; |
| } |
| }else{ |
| if(i==_37.childNodes.length-1){ |
| _38=_37; |
| _39=_37.childNodes.length; |
| return false; |
| } |
| } |
| }else{ |
| if(i==_37.childNodes.length-1){ |
| _38=_3b; |
| _3c=true; |
| } |
| } |
| if(_3c&&_38){ |
| var _3d=dijit.range.adjacentNoneTextNode(_38)[0]; |
| if(_3d){ |
| _38=_3d.nextSibling; |
| }else{ |
| _38=_37.firstChild; |
| } |
| var _3e=dijit.range.adjacentNoneTextNode(_38); |
| _3d=_3e[0]; |
| var _3f=_3e[1]; |
| if(_3d){ |
| _35.moveToElementText(_3d); |
| _35.collapse(false); |
| }else{ |
| _35.moveToElementText(_37); |
| } |
| _35.setEndPoint(_36,_34); |
| _39=_35.text.length-_3f; |
| return false; |
| } |
| _3a=_3b; |
| return true; |
| }); |
| }else{ |
| _38=_37; |
| _39=0; |
| } |
| if(!end&&_38.nodeType==1&&_39==_38.childNodes.length){ |
| var _40=_38.nextSibling; |
| if(_40&&_40.nodeType==3){ |
| _38=_40; |
| _39=0; |
| } |
| } |
| return [_38,_39]; |
| },setEndPoint:function(_41,_42,_43){ |
| var _44=_41.duplicate(),_45,len; |
| if(_42.nodeType!=3){ |
| if(_43>0){ |
| _45=_42.childNodes[_43-1]; |
| if(_45.nodeType==3){ |
| _42=_45; |
| _43=_45.length; |
| }else{ |
| if(_45.nextSibling&&_45.nextSibling.nodeType==3){ |
| _42=_45.nextSibling; |
| _43=0; |
| }else{ |
| _44.moveToElementText(_45.nextSibling?_45:_42); |
| var _46=_45.parentNode; |
| var _47=_46.insertBefore(_45.ownerDocument.createTextNode(" "),_45.nextSibling); |
| _44.collapse(false); |
| _46.removeChild(_47); |
| } |
| } |
| }else{ |
| _44.moveToElementText(_42); |
| _44.collapse(true); |
| } |
| } |
| if(_42.nodeType==3){ |
| var _48=dijit.range.adjacentNoneTextNode(_42); |
| var _49=_48[0]; |
| len=_48[1]; |
| if(_49){ |
| _44.moveToElementText(_49); |
| _44.collapse(false); |
| if(_49.contentEditable!="inherit"){ |
| len++; |
| } |
| }else{ |
| _44.moveToElementText(_42.parentNode); |
| _44.collapse(true); |
| } |
| _43+=len; |
| if(_43>0){ |
| if(_44.move("character",_43)!=_43){ |
| console.error("Error when moving!"); |
| } |
| } |
| } |
| return _44; |
| },decomposeTextRange:function(_4a){ |
| var _4b=dijit.range.ie.getEndPoint(_4a); |
| var _4c=_4b[0],_4d=_4b[1]; |
| var _4e=_4b[0],_4f=_4b[1]; |
| if(_4a.htmlText.length){ |
| if(_4a.htmlText==_4a.text){ |
| _4f=_4d+_4a.text.length; |
| }else{ |
| _4b=dijit.range.ie.getEndPoint(_4a,true); |
| _4e=_4b[0],_4f=_4b[1]; |
| } |
| } |
| return [_4c,_4d,_4e,_4f]; |
| },setRange:function(_50,_51,_52,_53,_54,_55){ |
| var _56=dijit.range.ie.setEndPoint(_50,_51,_52); |
| _50.setEndPoint("StartToStart",_56); |
| if(!_55){ |
| var end=dijit.range.ie.setEndPoint(_50,_53,_54); |
| } |
| _50.setEndPoint("EndToEnd",end||_56); |
| return _50; |
| }}; |
| 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(_57,_58){ |
| _58=parseInt(_58); |
| if(this.startContainer===_57&&this.startOffset==_58){ |
| return; |
| } |
| delete this._cachedBookmark; |
| this.startContainer=_57; |
| this.startOffset=_58; |
| if(!this.endContainer){ |
| this.setEnd(_57,_58); |
| }else{ |
| this._updateInternal(); |
| } |
| },setEnd:function(_59,_5a){ |
| _5a=parseInt(_5a); |
| if(this.endContainer===_59&&this.endOffset==_5a){ |
| return; |
| } |
| delete this._cachedBookmark; |
| this.endContainer=_59; |
| this.endOffset=_5a; |
| if(!this.startContainer){ |
| this.setStart(_59,_5a); |
| }else{ |
| this._updateInternal(); |
| } |
| },setStartAfter:function(_5b,_5c){ |
| this._setPoint("setStart",_5b,_5c,1); |
| },setStartBefore:function(_5d,_5e){ |
| this._setPoint("setStart",_5d,_5e,0); |
| },setEndAfter:function(_5f,_60){ |
| this._setPoint("setEnd",_5f,_60,1); |
| },setEndBefore:function(_61,_62){ |
| this._setPoint("setEnd",_61,_62,0); |
| },_setPoint:function(_63,_64,_65,ext){ |
| var _66=dijit.range.getIndex(_64,_64.parentNode).o; |
| this[_63](_64.parentNode,_66.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(_67){ |
| 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; |
| }}); |
| } |
| } |