]>
git.wh0rd.org - tt-rss.git/blob - lib/dijit/_editor/plugins/LinkDialog.js
2 Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
3 Available via Academic Free License >= 2.1 OR the modified BSD license.
4 see: http://dojotoolkit.org/license for details
8 if (! dojo
. _hasResource
[ "dijit._editor.plugins.LinkDialog" ]){
9 dojo
. _hasResource
[ "dijit._editor.plugins.LinkDialog" ]= true ;
10 dojo
. provide ( "dijit._editor.plugins.LinkDialog" );
11 dojo
. require ( "dijit._Widget" );
12 dojo
. require ( "dijit._Templated" );
13 dojo
. require ( "dijit._editor._Plugin" );
14 dojo
. require ( "dijit.TooltipDialog" );
15 dojo
. require ( "dijit.form.Button" );
16 dojo
. require ( "dijit.form.ValidationTextBox" );
17 dojo
. require ( "dijit.form.Select" );
18 dojo
. require ( "dijit._editor.range" );
19 dojo
. require ( "dojo.i18n" );
20 dojo
. require ( "dojo.string" );
21 dojo
. requireLocalization ( "dijit" , "common" , null , "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw" );
22 dojo
. requireLocalization ( "dijit._editor" , "LinkDialog" , null , "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw" );
23 dojo
. declare ( "dijit._editor.plugins.LinkDialog" , dijit
. _editor
. _Plugin
,{ buttonClass
: dijit
. form
. DropDownButton
, useDefaultCommand
: false , urlRegExp
: "((https?|ftps?|file) \\ ://|./|/|)(/[a-zA-Z]{1,1}:/|)(((?:(?:[ \\ da-zA-Z](?:[- \\ da-zA-Z]{0,61}[ \\ da-zA-Z])?) \\ .)*(?:[a-zA-Z](?:[- \\ da-zA-Z]{0,80}[ \\ da-zA-Z])?) \\ .?)|((( \\ d|[1-9] \\ d|1 \\ d \\ d|2[0-4] \\ d|25[0-5]) \\ .){3}( \\ d|[1-9] \\ d|1 \\ d \\ d|2[0-4] \\ d|25[0-5])|(0[xX]0*[ \\ da-fA-F]?[ \\ da-fA-F] \\ .){3}0[xX]0*[ \\ da-fA-F]?[ \\ da-fA-F]|(0+[0-3][0-7][0-7] \\ .){3}0+[0-3][0-7][0-7]|(0|[1-9] \\ d{0,8}|[1-3] \\ d{9}|4[01] \\ d{8}|42[0-8] \\ d{7}|429[0-3] \\ d{6}|4294[0-8] \\ d{5}|42949[0-5] \\ d{4}|429496[0-6] \\ d{3}|4294967[01] \\ d{2}|42949672[0-8] \\ d|429496729[0-5])|0[xX]0*[ \\ da-fA-F]{1,8}|([ \\ da-fA-F]{1,4} \\ :){7}[ \\ da-fA-F]{1,4}|([ \\ da-fA-F]{1,4} \\ :){6}(( \\ d|[1-9] \\ d|1 \\ d \\ d|2[0-4] \\ d|25[0-5]) \\ .){3}( \\ d|[1-9] \\ d|1 \\ d \\ d|2[0-4] \\ d|25[0-5])))( \\ : \\ d+)?(/(?:[^?# \\ s/]+/)*(?:[^?# \\ s/]+(?: \\ ?[^?# \\ s/]*)?(?:#.*)?)?)?" , emailRegExp
: "<?(mailto \\ :)([!#-'*+ \\ - \\ /-9=?A-Z^-~]+[.])*[!#-'*+ \\ - \\ /-9=?A-Z^-~]+" + "@" + "((?:(?:[ \\ da-zA-Z](?:[- \\ da-zA-Z]{0,61}[ \\ da-zA-Z])?) \\ .)+(?:[a-zA-Z](?:[- \\ da-zA-Z]{0,6}[ \\ da-zA-Z])?) \\ .?)|localhost|^[^-][a-zA-Z0-9_-]*>?" , htmlTemplate
: "<a href= \" ${urlInput} \" _djrealurl= \" ${urlInput} \" " + " target= \" ${targetSelect} \" " + "> ${textInput} </a>" , tag
: "a" , _hostRxp
: new RegExp ( "^((([^ \\ [:]+):)?([^@]+)@)?( \\ [([^ \\ ]]+) \\ ]|([^ \\ [:]*))(:([0-9]+))?$" ), _userAtRxp
: new RegExp ( "^([!#-'*+ \\ - \\ /-9=?A-Z^-~]+[.])*[!#-'*+ \\ - \\ /-9=?A-Z^-~]+@" , "i" ), linkDialogTemplate
:[ "<table><tr><td>" , "<label for=' ${id} _urlInput'> ${url} </label>" , "</td><td>" , "<input dojoType='dijit.form.ValidationTextBox' required='true' " + "id=' ${id} _urlInput' name='urlInput' intermediateChanges='true'>" , "</td></tr><tr><td>" , "<label for=' ${id} _textInput'> ${text} </label>" , "</td><td>" , "<input dojoType='dijit.form.ValidationTextBox' required='true' id=' ${id} _textInput' " + "name='textInput' intermediateChanges='true'>" , "</td></tr><tr><td>" , "<label for=' ${id} _targetSelect'> ${target} </label>" , "</td><td>" , "<select id=' ${id} _targetSelect' name='targetSelect' dojoType='dijit.form.Select'>" , "<option selected='selected' value='_self'> ${currentWindow} </option>" , "<option value='_blank'> ${newWindow} </option>" , "<option value='_top'> ${topWindow} </option>" , "<option value='_parent'> ${parentWindow} </option>" , "</select>" , "</td></tr><tr><td colspan='2'>" , "<button dojoType='dijit.form.Button' type='submit' id=' ${id} _setButton'> ${set} </button>" , "<button dojoType='dijit.form.Button' type='button' id=' ${id} _cancelButton'> ${buttonCancel} </button>" , "</td></tr></table>" ]. join ( "" ), _initButton : function (){
25 this . tag
= this . command
== "insertImage" ? "img" : "a" ;
26 var _2
= dojo
. mixin ( dojo
. i18n
. getLocalization ( "dijit" , "common" , this . lang
), dojo
. i18n
. getLocalization ( "dijit._editor" , "LinkDialog" , this . lang
));
27 var _3
=( this . dropDown
= new dijit
. TooltipDialog ({ title
: _2
[ this . command
+ "Title" ], execute
: dojo
. hitch ( this , "setValue" ), onOpen : function (){
29 dijit
. TooltipDialog
. prototype . onOpen
. apply ( this , arguments
);
30 }, onCancel : function (){
31 setTimeout ( dojo
. hitch ( _1
, "_onCloseDialog" ), 0 );
33 _2
. urlRegExp
= this . urlRegExp
;
34 _2
. id
= dijit
. getUniqueId ( this . editor
. id
);
36 this . _setContent ( _3
. title
+ "<div style='border-bottom: 1px black solid;padding-bottom:2pt;margin-bottom:4pt'></div>" + dojo
. string
. substitute ( this . linkDialogTemplate
, _2
));
38 this . _urlInput
= dijit
. byId ( this . _uniqueId
+ "_urlInput" );
39 this . _textInput
= dijit
. byId ( this . _uniqueId
+ "_textInput" );
40 this . _setButton
= dijit
. byId ( this . _uniqueId
+ "_setButton" );
41 this . connect ( dijit
. byId ( this . _uniqueId
+ "_cancelButton" ), "onClick" , function (){
42 this . dropDown
. onCancel ();
45 this . connect ( this . _urlInput
, "onChange" , "_checkAndFixInput" );
48 this . connect ( this . _textInput
, "onChange" , "_checkAndFixInput" );
50 this . _urlRegExp
= new RegExp ( "^" + this . urlRegExp
+ "$" , "i" );
51 this . _emailRegExp
= new RegExp ( "^" + this . emailRegExp
+ "$" , "i" );
52 this . _urlInput
. isValid
= dojo
. hitch ( this , function (){
53 var _4
= this . _urlInput
. get ( "value" );
54 return this . _urlRegExp
. test ( _4
)|| this . _emailRegExp
. test ( _4
);
56 this . _connectTagEvents ();
57 this . inherited ( arguments
);
58 }, _checkAndFixInput : function (){
60 var _6
= this . _urlInput
. get ( "value" );
66 if ( _8
. indexOf ( "mailto:" )!== 0 ){
67 if ( _8
. indexOf ( "/" )> 0 ){
68 if ( _8
. indexOf ( "://" )===- 1 ){
69 if ( _8
. charAt ( 0 )!== "/" && _8
. indexOf ( "./" )!== 0 ){
70 if ( _5
. _hostRxp
. test ( _8
)){
76 if ( _5
. _userAtRxp
. test ( _8
)){
83 _5
. _urlInput
. set ( "value" , "http://" + _8
);
86 _5
. _urlInput
. set ( "value" , "mailto:" + _8
);
88 _5
. _setButton
. set ( "disabled" ,! _5
. _isValid ());
90 if ( this . _delayedCheck
){
91 clearTimeout ( this . _delayedCheck
);
92 this . _delayedCheck
= null ;
94 this . _delayedCheck
= setTimeout ( function (){
97 }, _connectTagEvents : function (){
98 this . editor
. onLoadDeferred
. addCallback ( dojo
. hitch ( this , function (){
99 this . connect ( this . editor
. editNode
, "ondblclick" , this . _onDblClick
);
101 }, _isValid : function (){
102 return this . _urlInput
. isValid ()&& this . _textInput
. isValid ();
103 }, _setContent : function ( _b
){
104 this . dropDown
. set ( "content" , _b
);
105 }, _checkValues : function ( _c
){
107 _c
. urlInput
= _c
. urlInput
. replace (/ "/g," & quot
; ");
110 },setValue:function(_d){
111 this._onCloseDialog();
113 var _e=dijit.range.getSelection(this.editor.window);
114 var _f=_e.getRangeAt(0);
115 var a=_f.endContainer;
119 if(a&&(a.nodeName&&a.nodeName.toLowerCase()!==this.tag)){
120 a=dojo.withGlobal(this.editor.window," getSelectedElement
",dijit._editor.selection,[this.tag]);
122 if(a&&(a.nodeName&&a.nodeName.toLowerCase()===this.tag)){
123 if(this.editor.queryCommandEnabled(" unlink
")){
124 dojo.withGlobal(this.editor.window," selectElementChildren
",dijit._editor.selection,[a]);
125 this.editor.execCommand(" unlink
");
129 _d=this._checkValues(_d);
130 this.editor.execCommand(" inserthtml
",dojo.string.substitute(this.htmlTemplate,_d));
131 },_onCloseDialog:function(){
133 },_getCurrentValues:function(a){
135 if(a&&a.tagName.toLowerCase()===this.tag){
136 url=a.getAttribute(" _djrealurl
")||a.getAttribute(" href
");
137 _11=a.getAttribute(" target
")||" _self
";
138 _10=a.textContent||a.innerText;
139 dojo.withGlobal(this.editor.window," selectElement
",dijit._editor.selection,[a,true]);
141 _10=dojo.withGlobal(this.editor.window,dijit._editor.selection.getSelectedText);
143 return {urlInput:url||" ",textInput:_10||" ",targetSelect:_11||" "};
144 },_onOpenDialog:function(){
147 var sel=dijit.range.getSelection(this.editor.window);
148 var _12=sel.getRangeAt(0);
153 if(a&&(a.nodeName&&a.nodeName.toLowerCase()!==this.tag)){
154 a=dojo.withGlobal(this.editor.window," getSelectedElement
",dijit._editor.selection,[this.tag]);
157 a=dojo.withGlobal(this.editor.window," getAncestorElement
",dijit._editor.selection,[this.tag]);
159 this.dropDown.reset();
160 this._setButton.set(" disabled
",true);
161 this.dropDown.set(" value
",this._getCurrentValues(a));
162 },_onDblClick:function(e){
165 var tg=t.tagName?t.tagName.toLowerCase():" ";
166 if(tg===this.tag&&dojo.attr(t," href
")){
167 dojo.withGlobal(this.editor.window," selectElement
",dijit._editor.selection,[t]);
168 this.editor.onDisplayChanged();
169 setTimeout(dojo.hitch(this,function(){
170 this.button.set(" disabled
",false);
171 this.button.openDropDown();
176 dojo.declare(" dijit
. _editor
. plugins
. ImgLinkDialog
",[dijit._editor.plugins.LinkDialog],{linkDialogTemplate:[" < table
>< tr
>< td
> "," < label
for = ' ${id} _urlInput' > ${url}
< /label>","</ td
>< td
> "," < input dojoType
= 'dijit.form.ValidationTextBox' regExp
= ' ${urlRegExp} ' "+" required
= 'true' id
= ' ${id} _urlInput' name
= 'urlInput' intermediateChanges
= 'true' > "," < /td></ tr
>< tr
>< td
> "," < label
for = ' ${id} _textInput' > ${text}
< /label>","</ td
>< td
> "," < input dojoType
= 'dijit.form.ValidationTextBox' required
= 'false' id
= ' ${id} _textInput' "+" name
= 'textInput' intermediateChanges
= 'true' > "," < /td></ tr
>< tr
>< td
> "," < /td><td>","</ td
>< /tr><tr><td colspan='2'>","<button dojoType='dijit.form.Button' type='submit' id='${id}_setButton'>${set}</ button
> "," < button dojoType
= 'dijit.form.Button' type
= 'button' id
= ' ${id} _cancelButton' > ${buttonCancel}
< /button>","</ td
>< /tr></ table
> "].join(" "),htmlTemplate:" < img src
= \" ${urlInput}
\" _djrealurl
= \" ${urlInput}
\" alt
= \" ${textInput}
\" /> ",tag:" img
",_getCurrentValues:function(img){
178 if(img&&img.tagName.toLowerCase()===this.tag){
179 url=img.getAttribute(" _djrealurl
")||img.getAttribute(" src
");
180 _13=img.getAttribute(" alt
");
181 dojo.withGlobal(this.editor.window," selectElement
",dijit._editor.selection,[img,true]);
183 _13=dojo.withGlobal(this.editor.window,dijit._editor.selection.getSelectedText);
185 return {urlInput:url||" ",textInput:_13||" "};
186 },_isValid:function(){
187 return this._urlInput.isValid();
188 },_connectTagEvents:function(){
189 this.inherited(arguments);
190 this.editor.onLoadDeferred.addCallback(dojo.hitch(this,function(){
191 this.connect(this.editor.editNode," onmousedown
",this._selectTag);
193 },_selectTag:function(e){
196 var tg=t.tagName?t.tagName.toLowerCase():" ";
198 dojo.withGlobal(this.editor.window," selectElement
",dijit._editor.selection,[t]);
201 },_checkValues:function(_14){
202 if(_14&&_14.urlInput){
203 _14.urlInput=_14.urlInput.replace(/" / g
, """ );
205 if ( _14
&& _14
. textInput
){
206 _14
. textInput
= _14
. textInput
. replace (/ "/g," & quot
; ");
209 },_onDblClick:function(e){
212 var tg=t.tagName?t.tagName.toLowerCase():" ";
213 if(tg===this.tag&&dojo.attr(t," src
")){
214 dojo.withGlobal(this.editor.window," selectElement
",dijit._editor.selection,[t]);
215 this.editor.onDisplayChanged();
216 setTimeout(dojo.hitch(this,function(){
217 this.button.set(" disabled
",false);
218 this.button.openDropDown();
223 dojo.subscribe(dijit._scopeName+" . Editor
. getPlugin
",null,function(o){
229 o.plugin=new dijit._editor.plugins.LinkDialog({command:o.args.name});
232 o.plugin=new dijit._editor.plugins.ImgLinkDialog({command:o.args.name});