132 lines
3.4 KiB
JavaScript
132 lines
3.4 KiB
JavaScript
//>>built
|
||
define("dojox/editor/plugins/AutoUrlLink",["dojo","dijit","dojox","dijit/_editor/range","dijit/_editor/selection","dijit/_editor/_Plugin","dijit/form/Button","dojo/_base/connect","dojo/_base/declare","dojo/string"],function(_1,_2,_3){
|
||
_1.declare("dojox.editor.plugins.AutoUrlLink",[_2._editor._Plugin],{_template:"<a _djrealurl='${url}' href='${url}'>${url}</a>",setEditor:function(_4){
|
||
this.editor=_4;
|
||
if(!_1.isIE){
|
||
_1.some(_4._plugins,function(_5){
|
||
if(_5.isInstanceOf(_2._editor.plugins.EnterKeyHandling)){
|
||
this.blockNodeForEnter=_5.blockNodeForEnter;
|
||
return true;
|
||
}
|
||
return false;
|
||
},this);
|
||
this.connect(_4,"onKeyPress","_keyPress");
|
||
this.connect(_4,"onClick","_recognize");
|
||
this.connect(_4,"onBlur","_recognize");
|
||
}
|
||
},_keyPress:function(_6){
|
||
var ks=_1.keys,v=118,V=86,kc=_6.keyCode,cc=_6.charCode;
|
||
if(cc==ks.SPACE||(_6.ctrlKey&&(cc==v||cc==V))){
|
||
setTimeout(_1.hitch(this,"_recognize"),0);
|
||
}else{
|
||
if(kc==ks.ENTER){
|
||
setTimeout(_1.hitch(this,function(){
|
||
this._recognize({enter:true});
|
||
}),0);
|
||
}else{
|
||
this._saved=this.editor.window.getSelection().anchorNode;
|
||
}
|
||
}
|
||
},_recognize:function(_7){
|
||
var _8=this._template,_9=_7?_7.enter:false,ed=this.editor,_a=ed.window.getSelection();
|
||
if(_a){
|
||
var _b=_9?this._findLastEditingNode(_a.anchorNode):(this._saved||_a.anchorNode),bm=this._saved=_a.anchorNode,_c=_a.anchorOffset;
|
||
if(_b.nodeType==3&&!this._inLink(_b)){
|
||
var _d=false,_e=this._findUrls(_b,bm,_c),_f=ed.document.createRange(),_10,_11=0,_12=(bm==_b);
|
||
_10=_e.shift();
|
||
while(_10){
|
||
_f.setStart(_b,_10.start);
|
||
_f.setEnd(_b,_10.end);
|
||
_a.removeAllRanges();
|
||
_a.addRange(_f);
|
||
ed.execCommand("insertHTML",_1.string.substitute(_8,{url:_f.toString()}));
|
||
_11+=_10.end;
|
||
_10=_e.shift();
|
||
_d=true;
|
||
}
|
||
if(_12&&(_c=_c-_11)<=0){
|
||
return;
|
||
}
|
||
if(!_d){
|
||
return;
|
||
}
|
||
try{
|
||
_f.setStart(bm,0);
|
||
_f.setEnd(bm,_c);
|
||
_a.removeAllRanges();
|
||
_a.addRange(_f);
|
||
_1.withGlobal(ed.window,"collapse",_2._editor.selection,[]);
|
||
}
|
||
catch(e){
|
||
}
|
||
}
|
||
}
|
||
},_inLink:function(_13){
|
||
var _14=this.editor.editNode,_15=false,_16;
|
||
_13=_13.parentNode;
|
||
while(_13&&_13!==_14){
|
||
_16=_13.tagName?_13.tagName.toLowerCase():"";
|
||
if(_16=="a"){
|
||
_15=true;
|
||
break;
|
||
}
|
||
_13=_13.parentNode;
|
||
}
|
||
return _15;
|
||
},_findLastEditingNode:function(_17){
|
||
var _18=_2.range.BlockTagNames,_19=this.editor.editNode,_1a;
|
||
if(!_17){
|
||
return _17;
|
||
}
|
||
if(this.blockNodeForEnter=="BR"&&(!(_1a=_2.range.getBlockAncestor(_17,null,_19).blockNode)||_1a.tagName.toUpperCase()!="LI")){
|
||
while((_17=_17.previousSibling)&&_17.nodeType!=3){
|
||
}
|
||
}else{
|
||
if((_1a||(_1a=_2.range.getBlockAncestor(_17,null,_19).blockNode))&&_1a.tagName.toUpperCase()=="LI"){
|
||
_17=_1a;
|
||
}else{
|
||
_17=_2.range.getBlockAncestor(_17,null,_19).blockNode;
|
||
}
|
||
while((_17=_17.previousSibling)&&!(_17.tagName&&_17.tagName.match(_18))){
|
||
}
|
||
if(_17){
|
||
_17=_17.lastChild;
|
||
while(_17){
|
||
if(_17.nodeType==3&&_1.trim(_17.nodeValue)!=""){
|
||
break;
|
||
}else{
|
||
if(_17.nodeType==1){
|
||
_17=_17.lastChild;
|
||
}else{
|
||
_17=_17.previousSibling;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return _17;
|
||
},_findUrls:function(_1b,bm,_1c){
|
||
var _1d=/(http|https|ftp):\/\/[^\s]+/ig,_1e=[],_1f=0,_20=_1b.nodeValue,_21,ch;
|
||
if(_1b===bm&&_1c<_20.length){
|
||
_20=_20.substr(0,_1c);
|
||
}
|
||
while((_21=_1d.exec(_20))!=null){
|
||
if(_21.index==0||(ch=_20.charAt(_21.index-1))==" "||ch==" "){
|
||
_1e.push({start:_21.index-_1f,end:_21.index+_21[0].length-_1f});
|
||
_1f=_21.index+_21[0].length;
|
||
}
|
||
}
|
||
return _1e;
|
||
}});
|
||
_1.subscribe(_2._scopeName+".Editor.getPlugin",null,function(o){
|
||
if(o.plugin){
|
||
return;
|
||
}
|
||
var _22=o.args.name.toLowerCase();
|
||
if(_22==="autourllink"){
|
||
o.plugin=new _3.editor.plugins.AutoUrlLink();
|
||
}
|
||
});
|
||
return _3.editor.plugins.AutoUrlLink;
|
||
});
|