Project

General

Profile

Statistics
| Revision:

root / trunk / web / dojo / dijit / _editor / plugins / ViewSource.js

History | View | Annotate | Download (8.28 KB)

1 9 andrej.cim
/*
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
5
*/
6
7
8
if(!dojo._hasResource["dijit._editor.plugins.ViewSource"]){
9
dojo._hasResource["dijit._editor.plugins.ViewSource"]=true;
10
dojo.provide("dijit._editor.plugins.ViewSource");
11
dojo.require("dojo.window");
12
dojo.require("dojo.i18n");
13
dojo.require("dijit._editor._Plugin");
14
dojo.require("dijit.form.Button");
15
dojo.requireLocalization("dijit._editor","commands",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");
16
dojo.declare("dijit._editor.plugins.ViewSource",dijit._editor._Plugin,{stripScripts:true,stripComments:true,stripIFrames:true,readOnly:false,_fsPlugin:null,toggle:function(){
17
if(dojo.isWebKit){
18
this._vsFocused=true;
19
}
20
this.button.set("checked",!this.button.get("checked"));
21
},_initButton:function(){
22
var _1=dojo.i18n.getLocalization("dijit._editor","commands"),_2=this.editor;
23
this.button=new dijit.form.ToggleButton({label:_1["viewSource"],dir:_2.dir,lang:_2.lang,showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"ViewSource",tabIndex:"-1",onChange:dojo.hitch(this,"_showSource")});
24
if(dojo.isIE==7){
25
this._ieFixNode=dojo.create("div",{style:{opacity:"0",zIndex:"-1000",position:"absolute",top:"-1000px"}},dojo.body());
26
}
27
this.button.set("readOnly",false);
28
},setEditor:function(_3){
29
this.editor=_3;
30
this._initButton();
31
this.editor.addKeyHandler(dojo.keys.F12,true,true,dojo.hitch(this,function(e){
32
this.button.focus();
33
this.toggle();
34
dojo.stopEvent(e);
35
setTimeout(dojo.hitch(this,function(){
36
this.editor.focus();
37
}),100);
38
}));
39
},_showSource:function(_4){
40
var ed=this.editor;
41
var _5=ed._plugins;
42
var _6;
43
this._sourceShown=_4;
44
var _7=this;
45
try{
46
if(!this.sourceArea){
47
this._createSourceView();
48
}
49
if(_4){
50
ed._sourceQueryCommandEnabled=ed.queryCommandEnabled;
51
ed.queryCommandEnabled=function(_8){
52
var _9=_8.toLowerCase();
53
if(_9==="viewsource"){
54
return true;
55
}else{
56
return false;
57
}
58
};
59
this.editor.onDisplayChanged();
60
_6=ed.get("value");
61
_6=this._filter(_6);
62
ed.set("value",_6);
63
this._pluginList=[];
64
this._disabledPlugins=dojo.filter(_5,function(p){
65
if(p&&p.button&&!p.button.get("disabled")&&!(p instanceof dijit._editor.plugins.ViewSource)){
66
p._vs_updateState=p.updateState;
67
p.updateState=function(){
68
return false;
69
};
70
p.button.set("disabled",true);
71
if(p.command){
72
switch(p.command){
73
case "bold":
74
case "italic":
75
case "underline":
76
case "strikethrough":
77
case "superscript":
78
case "subscript":
79
p.button.set("checked",false);
80
break;
81
default:
82
break;
83
}
84
}
85
return true;
86
}
87
});
88
if(this._fsPlugin){
89
this._fsPlugin._getAltViewNode=function(){
90
return _7.sourceArea;
91
};
92
}
93
this.sourceArea.value=_6;
94
var is=dojo.marginBox(ed.iframe.parentNode);
95
dojo.marginBox(this.sourceArea,{w:is.w,h:is.h});
96
dojo.style(ed.iframe,"display","none");
97
dojo.style(this.sourceArea,{display:"block"});
98
var _a=function(){
99
var vp=dojo.window.getBox();
100
if("_prevW" in this&&"_prevH" in this){
101
if(vp.w===this._prevW&&vp.h===this._prevH){
102
return;
103
}else{
104
this._prevW=vp.w;
105
this._prevH=vp.h;
106
}
107
}else{
108
this._prevW=vp.w;
109
this._prevH=vp.h;
110
}
111
if(this._resizer){
112
clearTimeout(this._resizer);
113
delete this._resizer;
114
}
115
this._resizer=setTimeout(dojo.hitch(this,function(){
116
delete this._resizer;
117
this._resize();
118
}),10);
119
};
120
this._resizeHandle=dojo.connect(window,"onresize",this,_a);
121
setTimeout(dojo.hitch(this,this._resize),100);
122
this.editor.onNormalizedDisplayChanged();
123
}else{
124
if(!ed._sourceQueryCommandEnabled){
125
return;
126
}
127
dojo.disconnect(this._resizeHandle);
128
delete this._resizeHandle;
129
ed.queryCommandEnabled=ed._sourceQueryCommandEnabled;
130
if(!this._readOnly){
131
_6=this.sourceArea.value;
132
_6=this._filter(_6);
133
ed.beginEditing();
134
ed.set("value",_6);
135
ed.endEditing();
136
}
137
dojo.forEach(this._disabledPlugins,function(p){
138
p.button.set("disabled",false);
139
if(p._vs_updateState){
140
p.updateState=p._vs_updateState;
141
}
142
});
143
this._disabledPlugins=null;
144
dojo.style(this.sourceArea,"display","none");
145
dojo.style(ed.iframe,"display","block");
146
delete ed._sourceQueryCommandEnabled;
147
this.editor.onDisplayChanged();
148
}
149
setTimeout(dojo.hitch(this,function(){
150
var _b=ed.domNode.parentNode;
151
if(_b){
152
var _c=dijit.getEnclosingWidget(_b);
153
if(_c&&_c.resize){
154
_c.resize();
155
}
156
}
157
ed.resize();
158
}),300);
159
}
160
catch(e){
161
}
162
},_resize:function(){
163
var ed=this.editor;
164
var _d=ed.getHeaderHeight();
165
var fH=ed.getFooterHeight();
166
var eb=dojo.position(ed.domNode);
167
var _e=dojo._getPadBorderExtents(ed.iframe.parentNode);
168
var _f=dojo._getMarginExtents(ed.iframe.parentNode);
169
var _10=dojo._getPadBorderExtents(ed.domNode);
170
var _11=dojo._getMarginExtents(ed.domNode);
171
var edb={w:eb.w-(_10.w+_11.w),h:eb.h-(_d+_10.h+_11.h+fH)};
172
if(this._fsPlugin&&this._fsPlugin.isFullscreen){
173
var vp=dojo.window.getBox();
174
edb.w=(vp.w-_10.w);
175
edb.h=(vp.h-(_d+_10.h+fH));
176
}
177
if(dojo.isIE){
178
edb.h-=2;
179
}
180
if(this._ieFixNode){
181
var _12=-this._ieFixNode.offsetTop/1000;
182
edb.w=Math.floor((edb.w+0.9)/_12);
183
edb.h=Math.floor((edb.h+0.9)/_12);
184
}
185
dojo.marginBox(this.sourceArea,{w:edb.w-(_e.w+_f.w),h:edb.h-(_e.h+_f.h)});
186
dojo.marginBox(ed.iframe.parentNode,{h:edb.h});
187
},_createSourceView:function(){
188
var ed=this.editor;
189
var _13=ed._plugins;
190
this.sourceArea=dojo.create("textarea");
191
if(this.readOnly){
192
dojo.attr(this.sourceArea,"readOnly",true);
193
this._readOnly=true;
194
}
195
dojo.style(this.sourceArea,{padding:"0px",margin:"0px",borderWidth:"0px",borderStyle:"none"});
196
dojo.place(this.sourceArea,ed.iframe,"before");
197
if(dojo.isIE&&ed.iframe.parentNode.lastChild!==ed.iframe){
198
dojo.style(ed.iframe.parentNode.lastChild,{width:"0px",height:"0px",padding:"0px",margin:"0px",borderWidth:"0px",borderStyle:"none"});
199
}
200
ed._viewsource_oldFocus=ed.focus;
201
var _14=this;
202
ed.focus=function(){
203
if(_14._sourceShown){
204
_14.setSourceAreaCaret();
205
}else{
206
try{
207
if(this._vsFocused){
208
delete this._vsFocused;
209
dijit.focus(ed.editNode);
210
}else{
211
ed._viewsource_oldFocus();
212
}
213
}
214
catch(e){
215
}
216
}
217
};
218
var i,p;
219
for(i=0;i<_13.length;i++){
220
p=_13[i];
221
if(p&&(p.declaredClass==="dijit._editor.plugins.FullScreen"||p.declaredClass===(dijit._scopeName+"._editor.plugins.FullScreen"))){
222
this._fsPlugin=p;
223
break;
224
}
225
}
226
if(this._fsPlugin){
227
this._fsPlugin._viewsource_getAltViewNode=this._fsPlugin._getAltViewNode;
228
this._fsPlugin._getAltViewNode=function(){
229
return _14._sourceShown?_14.sourceArea:this._viewsource_getAltViewNode();
230
};
231
}
232
this.connect(this.sourceArea,"onkeydown",dojo.hitch(this,function(e){
233
if(this._sourceShown&&e.keyCode==dojo.keys.F12&&e.ctrlKey&&e.shiftKey){
234
this.button.focus();
235
this.button.set("checked",false);
236
setTimeout(dojo.hitch(this,function(){
237
ed.focus();
238
}),100);
239
dojo.stopEvent(e);
240
}
241
}));
242
},_stripScripts:function(_15){
243
if(_15){
244
_15=_15.replace(/<\s*script[^>]*>((.|\s)*?)<\\?\/\s*script\s*>/ig,"");
245
_15=_15.replace(/<\s*script\b([^<>]|\s)*>?/ig,"");
246
_15=_15.replace(/<[^>]*=(\s|)*[("|')]javascript:[^$1][(\s|.)]*[$1][^>]*>/ig,"");
247
}
248
return _15;
249
},_stripComments:function(_16){
250
if(_16){
251
_16=_16.replace(/<!--(.|\s){1,}?-->/g,"");
252
}
253
return _16;
254
},_stripIFrames:function(_17){
255
if(_17){
256
_17=_17.replace(/<\s*iframe[^>]*>((.|\s)*?)<\\?\/\s*iframe\s*>/ig,"");
257
}
258
return _17;
259
},_filter:function(_18){
260
if(_18){
261
if(this.stripScripts){
262
_18=this._stripScripts(_18);
263
}
264
if(this.stripComments){
265
_18=this._stripComments(_18);
266
}
267
if(this.stripIFrames){
268
_18=this._stripIFrames(_18);
269
}
270
}
271
return _18;
272
},setSourceAreaCaret:function(){
273
var win=dojo.global;
274
var _19=this.sourceArea;
275
dijit.focus(_19);
276
if(this._sourceShown&&!this.readOnly){
277
if(dojo.isIE){
278
if(this.sourceArea.createTextRange){
279
var _1a=_19.createTextRange();
280
_1a.collapse(true);
281
_1a.moveStart("character",-99999);
282
_1a.moveStart("character",0);
283
_1a.moveEnd("character",0);
284
_1a.select();
285
}
286
}else{
287
if(win.getSelection){
288
if(_19.setSelectionRange){
289
_19.setSelectionRange(0,0);
290
}
291
}
292
}
293
}
294
},destroy:function(){
295
if(this._ieFixNode){
296
dojo.body().removeChild(this._ieFixNode);
297
}
298
if(this._resizer){
299
clearTimeout(this._resizer);
300
delete this._resizer;
301
}
302
if(this._resizeHandle){
303
dojo.disconnect(this._resizeHandle);
304
delete this._resizeHandle;
305
}
306
this.inherited(arguments);
307
}});
308
dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
309
if(o.plugin){
310
return;
311
}
312
var _1b=o.args.name.toLowerCase();
313
if(_1b==="viewsource"){
314
o.plugin=new dijit._editor.plugins.ViewSource({readOnly:("readOnly" in o.args)?o.args.readOnly:false,stripComments:("stripComments" in o.args)?o.args.stripComments:true,stripScripts:("stripScripts" in o.args)?o.args.stripScripts:true,stripIFrames:("stripIFrames" in o.args)?o.args.stripIFrames:true});
315
}
316
});
317
}