root / trunk / web / dojo / dojox / editor / plugins / TablePlugins.js
History | View | Annotate | Download (24.3 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["dojox.editor.plugins.TablePlugins"]){ |
||
9 | dojo._hasResource["dojox.editor.plugins.TablePlugins"]=true; |
||
10 | dojo.provide("dojox.editor.plugins.TablePlugins");
|
||
11 | dojo.require("dijit._editor._Plugin");
|
||
12 | dojo.require("dijit._editor.selection");
|
||
13 | dojo.require("dijit.Menu");
|
||
14 | dojo.require("dojo.i18n");
|
||
15 | dojo.requireLocalization("dojox.editor.plugins","TableDialog",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.experimental("dojox.editor.plugins.TablePlugins");
|
||
17 | dojo.declare("dojox.editor.plugins._TableHandler",dijit._editor._Plugin,{tablesConnected:false,currentlyAvailable:false,alwaysAvailable:false,availableCurrentlySet:false,initialized:false,tableData:null,shiftKeyDown:false,editorDomNode:null,undoEnabled:true,refCount:0,doMixins:function(){ |
||
18 | dojo.mixin(this.editor,{getAncestorElement:function(_1){ |
||
19 | return dojo.withGlobal(this.window,"getAncestorElement",dijit._editor.selection,[_1]); |
||
20 | },hasAncestorElement:function(_2){ |
||
21 | return dojo.withGlobal(this.window,"hasAncestorElement",dijit._editor.selection,[_2]); |
||
22 | },selectElement:function(_3){ |
||
23 | dojo.withGlobal(this.window,"selectElement",dijit._editor.selection,[_3]); |
||
24 | },byId:function(id){ |
||
25 | return dojo.withGlobal(this.window,"byId",dojo,[id]); |
||
26 | },query:function(_4,_5,_6){ |
||
27 | var ar=dojo.withGlobal(this.window,"query",dojo,[_4,_5]); |
||
28 | return (_6)?ar[0]:ar; |
||
29 | }}); |
||
30 | },initialize:function(_7){ |
||
31 | this.refCount++;
|
||
32 | _7.customUndo=true;
|
||
33 | if(this.initialized){ |
||
34 | return;
|
||
35 | } |
||
36 | this.initialized=true; |
||
37 | this.editor=_7;
|
||
38 | this.editor._tablePluginHandler=this; |
||
39 | _7.onLoadDeferred.addCallback(dojo.hitch(this,function(){ |
||
40 | this.editorDomNode=this.editor.editNode||this.editor.iframe.document.body.firstChild; |
||
41 | this._myListeners=[];
|
||
42 | this._myListeners.push(dojo.connect(this.editorDomNode,"mouseup",this.editor,"onClick")); |
||
43 | this._myListeners.push(dojo.connect(this.editor,"onDisplayChanged",this,"checkAvailable")); |
||
44 | this._myListeners.push(dojo.connect(this.editor,"onBlur",this,"checkAvailable")); |
||
45 | this.doMixins();
|
||
46 | this.connectDraggable();
|
||
47 | })); |
||
48 | },getTableInfo:function(_8){ |
||
49 | if(_8){
|
||
50 | this._tempStoreTableData(false); |
||
51 | } |
||
52 | if(this.tableData){ |
||
53 | return this.tableData; |
||
54 | } |
||
55 | var tr,_9,td,_a,_b,_c,_d,_e;
|
||
56 | td=this.editor.getAncestorElement("td"); |
||
57 | if(td){
|
||
58 | tr=td.parentNode; |
||
59 | } |
||
60 | _b=this.editor.getAncestorElement("table"); |
||
61 | _a=dojo.query("td",_b);
|
||
62 | _a.forEach(function(d,i){
|
||
63 | if(td==d){
|
||
64 | _d=i; |
||
65 | } |
||
66 | }); |
||
67 | _9=dojo.query("tr",_b);
|
||
68 | _9.forEach(function(r,i){
|
||
69 | if(tr==r){
|
||
70 | _e=i; |
||
71 | } |
||
72 | }); |
||
73 | _c=_a.length/_9.length; |
||
74 | var o={tbl:_b,td:td,tr:tr,trs:_9,tds:_a,rows:_9.length,cols:_c,tdIndex:_d,trIndex:_e,colIndex:_d%_c}; |
||
75 | this.tableData=o;
|
||
76 | this._tempStoreTableData(500); |
||
77 | return this.tableData; |
||
78 | },connectDraggable:function(){ |
||
79 | if(!dojo.isIE){
|
||
80 | return;
|
||
81 | } |
||
82 | this.editorDomNode.ondragstart=dojo.hitch(this,"onDragStart"); |
||
83 | this.editorDomNode.ondragend=dojo.hitch(this,"onDragEnd"); |
||
84 | },onDragStart:function(){ |
||
85 | var e=window.event;
|
||
86 | if(!e.srcElement.id){
|
||
87 | e.srcElement.id="tbl_"+(new Date().getTime()); |
||
88 | } |
||
89 | },onDragEnd:function(){ |
||
90 | var e=window.event;
|
||
91 | var _f=e.srcElement;
|
||
92 | var id=_f.id;
|
||
93 | var win=this.editor.window; |
||
94 | if(_f.tagName.toLowerCase()=="table"){ |
||
95 | setTimeout(function(){
|
||
96 | var _10=dojo.withGlobal(win,"byId",dojo,[id]); |
||
97 | dojo.removeAttr(_10,"align");
|
||
98 | },100);
|
||
99 | } |
||
100 | },checkAvailable:function(){ |
||
101 | if(this.availableCurrentlySet){ |
||
102 | return this.currentlyAvailable; |
||
103 | } |
||
104 | if(!this.editor){ |
||
105 | return false; |
||
106 | } |
||
107 | if(this.alwaysAvailable){ |
||
108 | return true; |
||
109 | } |
||
110 | this.currentlyAvailable=this.editor._focused?this.editor.hasAncestorElement("table"):false; |
||
111 | if(this.currentlyAvailable){ |
||
112 | this.connectTableKeys();
|
||
113 | }else{
|
||
114 | this.disconnectTableKeys();
|
||
115 | } |
||
116 | this._tempAvailability(500); |
||
117 | dojo.publish(this.editor.id+"_tablePlugins",[this.currentlyAvailable]); |
||
118 | return this.currentlyAvailable; |
||
119 | },_prepareTable:function(tbl){ |
||
120 | var tds=this.editor.query("td",tbl); |
||
121 | if(!tds[0].id){ |
||
122 | tds.forEach(function(td,i){
|
||
123 | if(!td.id){
|
||
124 | td.id="tdid"+i+this.getTimeStamp(); |
||
125 | } |
||
126 | },this);
|
||
127 | } |
||
128 | return tds;
|
||
129 | },getTimeStamp:function(){ |
||
130 | return Math.floor(new Date().getTime()*1e-8); |
||
131 | },_tempStoreTableData:function(_11){ |
||
132 | if(_11===true){ |
||
133 | }else{
|
||
134 | if(_11===false){ |
||
135 | this.tableData=null; |
||
136 | }else{
|
||
137 | if(_11===undefined){ |
||
138 | console.warn("_tempStoreTableData must be passed an argument");
|
||
139 | }else{
|
||
140 | setTimeout(dojo.hitch(this,function(){ |
||
141 | this.tableData=null; |
||
142 | }),_11); |
||
143 | } |
||
144 | } |
||
145 | } |
||
146 | },_tempAvailability:function(_12){ |
||
147 | if(_12===true){ |
||
148 | this.availableCurrentlySet=true; |
||
149 | }else{
|
||
150 | if(_12===false){ |
||
151 | this.availableCurrentlySet=false; |
||
152 | }else{
|
||
153 | if(_12===undefined){ |
||
154 | console.warn("_tempAvailability must be passed an argument");
|
||
155 | }else{
|
||
156 | this.availableCurrentlySet=true; |
||
157 | setTimeout(dojo.hitch(this,function(){ |
||
158 | this.availableCurrentlySet=false; |
||
159 | }),_12); |
||
160 | } |
||
161 | } |
||
162 | } |
||
163 | },connectTableKeys:function(){ |
||
164 | if(this.tablesConnected){ |
||
165 | return;
|
||
166 | } |
||
167 | this.tablesConnected=true; |
||
168 | var _13=(this.editor.iframe)?this.editor.document:this.editor.editNode; |
||
169 | this.cnKeyDn=dojo.connect(_13,"onkeydown",this,"onKeyDown"); |
||
170 | this.cnKeyUp=dojo.connect(_13,"onkeyup",this,"onKeyUp"); |
||
171 | this._myListeners.push(dojo.connect(_13,"onkeypress",this,"onKeyUp")); |
||
172 | },disconnectTableKeys:function(){ |
||
173 | dojo.disconnect(this.cnKeyDn);
|
||
174 | dojo.disconnect(this.cnKeyUp);
|
||
175 | this.tablesConnected=false; |
||
176 | },onKeyDown:function(evt){ |
||
177 | var key=evt.keyCode;
|
||
178 | if(key==16){ |
||
179 | this.shiftKeyDown=true; |
||
180 | } |
||
181 | if(key==9){ |
||
182 | var o=this.getTableInfo(); |
||
183 | o.tdIndex=(this.shiftKeyDown)?o.tdIndex-1:tabTo=o.tdIndex+1; |
||
184 | if(o.tdIndex>=0&&o.tdIndex<o.tds.length){ |
||
185 | this.editor.selectElement(o.tds[o.tdIndex]);
|
||
186 | this.currentlyAvailable=true; |
||
187 | this._tempAvailability(true); |
||
188 | this._tempStoreTableData(true); |
||
189 | this.stopEvent=true; |
||
190 | }else{
|
||
191 | this.stopEvent=false; |
||
192 | this.onDisplayChanged();
|
||
193 | } |
||
194 | if(this.stopEvent){ |
||
195 | dojo.stopEvent(evt); |
||
196 | } |
||
197 | } |
||
198 | },onKeyUp:function(evt){ |
||
199 | var key=evt.keyCode;
|
||
200 | if(key==16){ |
||
201 | this.shiftKeyDown=false; |
||
202 | } |
||
203 | if(key==37||key==38||key==39||key==40){ |
||
204 | this.onDisplayChanged();
|
||
205 | } |
||
206 | if(key==9&&this.stopEvent){ |
||
207 | dojo.stopEvent(evt); |
||
208 | } |
||
209 | },onDisplayChanged:function(){ |
||
210 | this.currentlyAvailable=false; |
||
211 | this._tempStoreTableData(false); |
||
212 | this._tempAvailability(false); |
||
213 | this.checkAvailable();
|
||
214 | },uninitialize:function(_14){ |
||
215 | if(this.editor==_14){ |
||
216 | this.refCount--;
|
||
217 | if(!this.refCount&&this.initialized){ |
||
218 | if(this.tablesConnected){ |
||
219 | this.disconnectTableKeys();
|
||
220 | } |
||
221 | this.initialized=false; |
||
222 | dojo.forEach(this._myListeners,function(l){ |
||
223 | dojo.disconnect(l); |
||
224 | }); |
||
225 | delete this._myListeners; |
||
226 | delete this.editor._tablePluginHandler; |
||
227 | delete this.editor; |
||
228 | } |
||
229 | this.inherited(arguments); |
||
230 | } |
||
231 | }}); |
||
232 | dojo.declare("dojox.editor.plugins.TablePlugins",dijit._editor._Plugin,{iconClassPrefix:"editorIcon",useDefaultCommand:false,buttonClass:dijit.form.Button,commandName:"",label:"",alwaysAvailable:false,undoEnabled:true,onDisplayChanged:function(_15){ |
||
233 | if(!this.alwaysAvailable){ |
||
234 | this.available=_15;
|
||
235 | this.button.set("disabled",!this.available); |
||
236 | } |
||
237 | },setEditor:function(_16){ |
||
238 | this.editor=_16;
|
||
239 | this.editor.customUndo=true; |
||
240 | this.inherited(arguments); |
||
241 | this._availableTopic=dojo.subscribe(this.editor.id+"_tablePlugins",this,"onDisplayChanged"); |
||
242 | this.onEditorLoaded();
|
||
243 | },onEditorLoaded:function(){ |
||
244 | if(!this.editor._tablePluginHandler){ |
||
245 | var _17=new dojox.editor.plugins._TableHandler(); |
||
246 | _17.initialize(this.editor);
|
||
247 | }else{
|
||
248 | this.editor._tablePluginHandler.initialize(this.editor); |
||
249 | } |
||
250 | },selectTable:function(){ |
||
251 | var o=this.getTableInfo(); |
||
252 | if(o&&o.tbl){
|
||
253 | dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[o.tbl]); |
||
254 | } |
||
255 | },_initButton:function(){ |
||
256 | this.command=this.commandName; |
||
257 | this.label=this.editor.commands[this.command]=this._makeTitle(this.command); |
||
258 | this.inherited(arguments); |
||
259 | delete this.command; |
||
260 | this.connect(this.button,"onClick","modTable"); |
||
261 | this.onDisplayChanged(false); |
||
262 | },modTable:function(cmd,_18){ |
||
263 | this.begEdit();
|
||
264 | var o=this.getTableInfo(); |
||
265 | var sw=(dojo.isString(cmd))?cmd:this.commandName; |
||
266 | var r,c,i;
|
||
267 | var _19=false; |
||
268 | if(dojo.isIE){
|
||
269 | this.editor.focus();
|
||
270 | } |
||
271 | switch(sw){
|
||
272 | case "insertTableRowBefore": |
||
273 | r=o.tbl.insertRow(o.trIndex); |
||
274 | for(i=0;i<o.cols;i++){ |
||
275 | c=r.insertCell(-1);
|
||
276 | c.innerHTML=" ";
|
||
277 | } |
||
278 | break;
|
||
279 | case "insertTableRowAfter": |
||
280 | r=o.tbl.insertRow(o.trIndex+1);
|
||
281 | for(i=0;i<o.cols;i++){ |
||
282 | c=r.insertCell(-1);
|
||
283 | c.innerHTML=" ";
|
||
284 | } |
||
285 | break;
|
||
286 | case "insertTableColumnBefore": |
||
287 | o.trs.forEach(function(r){
|
||
288 | c=r.insertCell(o.colIndex); |
||
289 | c.innerHTML=" ";
|
||
290 | }); |
||
291 | _19=true;
|
||
292 | break;
|
||
293 | case "insertTableColumnAfter": |
||
294 | o.trs.forEach(function(r){
|
||
295 | c=r.insertCell(o.colIndex+1);
|
||
296 | c.innerHTML=" ";
|
||
297 | }); |
||
298 | _19=true;
|
||
299 | break;
|
||
300 | case "deleteTableRow": |
||
301 | o.tbl.deleteRow(o.trIndex); |
||
302 | break;
|
||
303 | case "deleteTableColumn": |
||
304 | o.trs.forEach(function(tr){
|
||
305 | tr.deleteCell(o.colIndex); |
||
306 | }); |
||
307 | _19=true;
|
||
308 | break;
|
||
309 | case "modifyTable": |
||
310 | break;
|
||
311 | case "insertTable": |
||
312 | break;
|
||
313 | } |
||
314 | if(_19){
|
||
315 | this.makeColumnsEven();
|
||
316 | } |
||
317 | this.endEdit();
|
||
318 | },begEdit:function(){ |
||
319 | if(this.editor._tablePluginHandler.undoEnabled){ |
||
320 | if(this.editor.customUndo){ |
||
321 | this.editor.beginEditing();
|
||
322 | }else{
|
||
323 | this.valBeforeUndo=this.editor.getValue(); |
||
324 | } |
||
325 | } |
||
326 | },endEdit:function(){ |
||
327 | if(this.editor._tablePluginHandler.undoEnabled){ |
||
328 | if(this.editor.customUndo){ |
||
329 | this.editor.endEditing();
|
||
330 | }else{
|
||
331 | var _1a=this.editor.getValue(); |
||
332 | this.editor.setValue(this.valBeforeUndo); |
||
333 | this.editor.replaceValue(_1a);
|
||
334 | } |
||
335 | this.editor.onDisplayChanged();
|
||
336 | } |
||
337 | },makeColumnsEven:function(){ |
||
338 | setTimeout(dojo.hitch(this,function(){ |
||
339 | var o=this.getTableInfo(true); |
||
340 | var w=Math.floor(100/o.cols); |
||
341 | o.tds.forEach(function(d){
|
||
342 | dojo.attr(d,"width",w+"%"); |
||
343 | }); |
||
344 | }),10);
|
||
345 | },getTableInfo:function(_1b){ |
||
346 | return this.editor._tablePluginHandler.getTableInfo(_1b); |
||
347 | },_makeTitle:function(str){ |
||
348 | var ns=[];
|
||
349 | dojo.forEach(str,function(c,i){
|
||
350 | if(c.charCodeAt(0)<91&&i>0&&ns[i-1].charCodeAt(0)!=32){ |
||
351 | ns.push(" ");
|
||
352 | } |
||
353 | if(i===0){ |
||
354 | c=c.toUpperCase(); |
||
355 | } |
||
356 | ns.push(c); |
||
357 | }); |
||
358 | return ns.join(""); |
||
359 | },getSelectedCells:function(){ |
||
360 | var _1c=[];
|
||
361 | var tbl=this.getTableInfo().tbl; |
||
362 | this.editor._tablePluginHandler._prepareTable(tbl);
|
||
363 | var e=this.editor; |
||
364 | var _1d=dojo.withGlobal(e.window,"getSelectedHtml",dijit._editor.selection,[null]); |
||
365 | var str=_1d.match(/id="*\w*"*/g); |
||
366 | dojo.forEach(str,function(a){
|
||
367 | var id=a.substring(3,a.length); |
||
368 | if(id.charAt(0)=="\""&&id.charAt(id.length-1)=="\""){ |
||
369 | id=id.substring(1,id.length-1); |
||
370 | } |
||
371 | var _1e=e.byId(id);
|
||
372 | if(_1e&&_1e.tagName.toLowerCase()=="td"){ |
||
373 | _1c.push(_1e); |
||
374 | } |
||
375 | },this);
|
||
376 | if(!_1c.length){
|
||
377 | var sel=dijit.range.getSelection(e.window);
|
||
378 | if(sel.rangeCount){
|
||
379 | var r=sel.getRangeAt(0); |
||
380 | var _1f=r.startContainer;
|
||
381 | while(_1f&&_1f!=e.editNode&&_1f!=e.document){
|
||
382 | if(_1f.nodeType===1){ |
||
383 | var tg=_1f.tagName?_1f.tagName.toLowerCase():""; |
||
384 | if(tg==="td"){ |
||
385 | return [_1f];
|
||
386 | } |
||
387 | } |
||
388 | _1f=_1f.parentNode; |
||
389 | } |
||
390 | } |
||
391 | } |
||
392 | return _1c;
|
||
393 | },destroy:function(){ |
||
394 | this.inherited(arguments); |
||
395 | dojo.unsubscribe(this._availableTopic);
|
||
396 | this.editor._tablePluginHandler.uninitialize(this.editor); |
||
397 | }}); |
||
398 | dojo.declare("dojox.editor.plugins.TableContextMenu",dojox.editor.plugins.TablePlugins,{constructor:function(){ |
||
399 | this.connect(this,"setEditor",function(_20){ |
||
400 | _20.onLoadDeferred.addCallback(dojo.hitch(this,function(){ |
||
401 | this._createContextMenu();
|
||
402 | })); |
||
403 | this.button.domNode.style.display="none"; |
||
404 | }); |
||
405 | },_initButton:function(){ |
||
406 | this.inherited(arguments); |
||
407 | if(this.commandName=="tableContextMenu"){ |
||
408 | this.button.domNode.display="none"; |
||
409 | } |
||
410 | },_createContextMenu:function(){ |
||
411 | var _21=new dijit.Menu({targetNodeIds:[this.editor.iframe]}); |
||
412 | var _22=dojo.i18n.getLocalization("dojox.editor.plugins","TableDialog",this.lang); |
||
413 | _21.addChild(new dijit.MenuItem({label:_22.selectTableLabel,onClick:dojo.hitch(this,"selectTable")})); |
||
414 | _21.addChild(new dijit.MenuSeparator());
|
||
415 | _21.addChild(new dijit.MenuItem({label:_22.insertTableRowBeforeLabel,onClick:dojo.hitch(this,"modTable","insertTableRowBefore")})); |
||
416 | _21.addChild(new dijit.MenuItem({label:_22.insertTableRowAfterLabel,onClick:dojo.hitch(this,"modTable","insertTableRowAfter")})); |
||
417 | _21.addChild(new dijit.MenuItem({label:_22.insertTableColumnBeforeLabel,onClick:dojo.hitch(this,"modTable","insertTableColumnBefore")})); |
||
418 | _21.addChild(new dijit.MenuItem({label:_22.insertTableColumnAfterLabel,onClick:dojo.hitch(this,"modTable","insertTableColumnAfter")})); |
||
419 | _21.addChild(new dijit.MenuSeparator());
|
||
420 | _21.addChild(new dijit.MenuItem({label:_22.deleteTableRowLabel,onClick:dojo.hitch(this,"modTable","deleteTableRow")})); |
||
421 | _21.addChild(new dijit.MenuItem({label:_22.deleteTableColumnLabel,onClick:dojo.hitch(this,"modTable","deleteTableColumn")})); |
||
422 | this.menu=_21;
|
||
423 | }}); |
||
424 | dojo.declare("dojox.editor.plugins.InsertTable",dojox.editor.plugins.TablePlugins,{alwaysAvailable:true,modTable:function(){ |
||
425 | var w=new dojox.editor.plugins.EditorTableDialog({}); |
||
426 | w.show(); |
||
427 | var c=dojo.connect(w,"onBuildTable",this,function(obj){ |
||
428 | dojo.disconnect(c); |
||
429 | var res=this.editor.execCommand("inserthtml",obj.htmlText); |
||
430 | }); |
||
431 | }}); |
||
432 | dojo.declare("dojox.editor.plugins.ModifyTable",dojox.editor.plugins.TablePlugins,{modTable:function(){ |
||
433 | if(!this.editor._tablePluginHandler.checkAvailable()){ |
||
434 | return;
|
||
435 | } |
||
436 | var o=this.getTableInfo(); |
||
437 | var w=new dojox.editor.plugins.EditorModifyTableDialog({table:o.tbl}); |
||
438 | w.show(); |
||
439 | this.connect(w,"onSetTable",function(_23){ |
||
440 | var o=this.getTableInfo(); |
||
441 | dojo.attr(o.td,"bgcolor",_23);
|
||
442 | }); |
||
443 | }}); |
||
444 | dojo.declare("dojox.editor.plugins.ColorTableCell",dojox.editor.plugins.TablePlugins,{constructor:function(){ |
||
445 | this.buttonClass=dijit.form.DropDownButton;
|
||
446 | this.dropDown=new dijit.ColorPalette(); |
||
447 | this.connect(this.dropDown,"onChange",function(_24){ |
||
448 | this.modTable(null,_24); |
||
449 | }); |
||
450 | },_initButton:function(){ |
||
451 | this.command=this.commandName; |
||
452 | this.label=this.editor.commands[this.command]=this._makeTitle(this.command); |
||
453 | this.inherited(arguments); |
||
454 | delete this.command; |
||
455 | this.onDisplayChanged(false); |
||
456 | },modTable:function(cmd,_25){ |
||
457 | this.begEdit();
|
||
458 | var o=this.getTableInfo(); |
||
459 | var tds=this.getSelectedCells(o.tbl); |
||
460 | dojo.forEach(tds,function(td){
|
||
461 | dojo.style(td,"backgroundColor",_25);
|
||
462 | }); |
||
463 | this.endEdit();
|
||
464 | }}); |
||
465 | dojo.provide("dojox.editor.plugins.EditorTableDialog");
|
||
466 | dojo.require("dijit.Dialog");
|
||
467 | dojo.require("dijit.form.TextBox");
|
||
468 | dojo.require("dijit.form.FilteringSelect");
|
||
469 | dojo.require("dijit.form.Button");
|
||
470 | dojo.declare("dojox.editor.plugins.EditorTableDialog",[dijit.Dialog],{baseClass:"EditorTableDialog",widgetsInTemplate:true,templateString:dojo.cache("dojox.editor.plugins","resources/insertTable.html","<div class=\"dijitDialog\" tabindex=\"-1\" waiRole=\"dialog\" waiState=\"labelledby-${id}_title\">\n\t<div dojoAttachPoint=\"titleBar\" class=\"dijitDialogTitleBar\">\n\t<span dojoAttachPoint=\"titleNode\" class=\"dijitDialogTitle\" id=\"${id}_title\">${insertTableTitle}</span>\n\t<span dojoAttachPoint=\"closeButtonNode\" class=\"dijitDialogCloseIcon\" dojoAttachEvent=\"onclick: onCancel\" title=\"${buttonCancel}\">\n\t\t<span dojoAttachPoint=\"closeText\" class=\"closeText\" title=\"${buttonCancel}\">x</span>\n\t</span>\n\t</div>\n <div dojoAttachPoint=\"containerNode\" class=\"dijitDialogPaneContent\">\n <table class=\"etdTable\"><tr>\n <td class=\"left\">\n <span dojoAttachPoint=\"selectRow\" dojoType=\"dijit.form.TextBox\" value=\"2\"></span>\n <label>${rows}</label>\n </td><td class=\"right\">\n <span dojoAttachPoint=\"selectCol\" dojoType=\"dijit.form.TextBox\" value=\"2\"></span>\n <label>${columns}</label>\n </td></tr><tr><td>\n <span dojoAttachPoint=\"selectWidth\" dojoType=\"dijit.form.TextBox\" value=\"100\"></span>\n <label>${tableWidth}</label>\n </td><td>\n <select dojoAttachPoint=\"selectWidthType\" hasDownArrow=\"true\" dojoType=\"dijit.form.FilteringSelect\">\n <option value=\"percent\">${percent}</option>\n <option value=\"pixels\">${pixels}</option>\n </select></td></tr>\n <tr><td>\n <span dojoAttachPoint=\"selectBorder\" dojoType=\"dijit.form.TextBox\" value=\"1\"></span>\n <label>${borderThickness}</label></td>\n <td>\n ${pixels}\n </td></tr><tr><td>\n <span dojoAttachPoint=\"selectPad\" dojoType=\"dijit.form.TextBox\" value=\"0\"></span>\n <label>${cellPadding}</label></td>\n <td class=\"cellpad\"></td></tr><tr><td>\n <span dojoAttachPoint=\"selectSpace\" dojoType=\"dijit.form.TextBox\" value=\"0\"></span>\n <label>${cellSpacing}</label>\n </td><td class=\"cellspace\"></td></tr></table>\n <div class=\"dialogButtonContainer\">\n <div dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick: onInsert\">${buttonInsert}</div>\n <div dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick: onCancel\">${buttonCancel}</div>\n </div>\n\t</div>\n</div>\n"),postMixInProperties:function(){ |
||
471 | var _26=dojo.i18n.getLocalization("dojox.editor.plugins","TableDialog",this.lang); |
||
472 | dojo.mixin(this,_26);
|
||
473 | this.inherited(arguments); |
||
474 | },postCreate:function(){ |
||
475 | dojo.addClass(this.domNode,this.baseClass); |
||
476 | this.inherited(arguments); |
||
477 | },onInsert:function(){ |
||
478 | var _27=this.selectRow.get("value")||1,_28=this.selectCol.get("value")||1,_29=this.selectWidth.get("value"),_2a=this.selectWidthType.get("value"),_2b=this.selectBorder.get("value"),pad=this.selectPad.get("value"),_2c=this.selectSpace.get("value"),_2d="tbl_"+(new Date().getTime()),t="<table id=\""+_2d+"\"width=\""+_29+((_2a=="percent")?"%":"")+"\" border=\""+_2b+"\" cellspacing=\""+_2c+"\" cellpadding=\""+pad+"\">\n"; |
||
479 | for(var r=0;r<_27;r++){ |
||
480 | t+="\t<tr>\n";
|
||
481 | for(var c=0;c<_28;c++){ |
||
482 | t+="\t\t<td width=\""+(Math.floor(100/_28))+"%\"> </td>\n"; |
||
483 | } |
||
484 | t+="\t</tr>\n";
|
||
485 | } |
||
486 | t+="</table>";
|
||
487 | this.onBuildTable({htmlText:t,id:_2d}); |
||
488 | var cl=dojo.connect(this,"onHide",function(){ |
||
489 | dojo.disconnect(cl); |
||
490 | var _2e=this; |
||
491 | setTimeout(function(){
|
||
492 | _2e.destroyRecursive(); |
||
493 | },10);
|
||
494 | }); |
||
495 | this.hide();
|
||
496 | },onCancel:function(){ |
||
497 | var c=dojo.connect(this,"onHide",function(){ |
||
498 | dojo.disconnect(c); |
||
499 | var _2f=this; |
||
500 | setTimeout(function(){
|
||
501 | _2f.destroyRecursive(); |
||
502 | },10);
|
||
503 | }); |
||
504 | },onBuildTable:function(_30){ |
||
505 | }}); |
||
506 | dojo.provide("dojox.editor.plugins.EditorModifyTableDialog");
|
||
507 | dojo.require("dijit.ColorPalette");
|
||
508 | dojo.declare("dojox.editor.plugins.EditorModifyTableDialog",[dijit.Dialog],{baseClass:"EditorTableDialog",widgetsInTemplate:true,table:null,tableAtts:{},templateString:dojo.cache("dojox.editor.plugins","resources/modifyTable.html","<div class=\"dijitDialog\" tabindex=\"-1\" waiRole=\"dialog\" waiState=\"labelledby-${id}_title\">\n\t<div dojoAttachPoint=\"titleBar\" class=\"dijitDialogTitleBar\">\n\t<span dojoAttachPoint=\"titleNode\" class=\"dijitDialogTitle\" id=\"${id}_title\">${modifyTableTitle}</span>\n\t<span dojoAttachPoint=\"closeButtonNode\" class=\"dijitDialogCloseIcon\" dojoAttachEvent=\"onclick: onCancel\" title=\"${buttonCancel}\">\n\t\t<span dojoAttachPoint=\"closeText\" class=\"closeText\" title=\"${buttonCancel}\">x</span>\n\t</span>\n\t</div>\n <div dojoAttachPoint=\"containerNode\" class=\"dijitDialogPaneContent\">\n <table class=\"etdTable\">\n <tr><td class=\"left\">\n <span class=\"colorSwatchBtn\" dojoAttachPoint=\"backgroundCol\"></span>\n <label>${backgroundColor}</label>\n </td><td class=\"right\">\n <span class=\"colorSwatchBtn\" dojoAttachPoint=\"borderCol\"></span>\n <label>${borderColor}</label>\n </td></tr><tr><td>\n <span dojoAttachPoint=\"selectBorder\" dojoType=\"dijit.form.TextBox\" value=\"1\"></span>\n <label>${borderThickness}</label>\n </td><td>\n ${pixels}\n </td></tr><tr><td>\n <select class=\"floatDijit\" dojoAttachPoint=\"selectAlign\" dojoType=\"dijit.form.FilteringSelect\">\n <option value=\"default\">${default}</option>\n <option value=\"left\">${left}</option>\n <option value=\"center\">${center}</option>\n <option value=\"right\">${right}</option>\n </select>\n <label>${align}</label>\n </td><td></td></tr><tr><td>\n <span dojoAttachPoint=\"selectWidth\" dojoType=\"dijit.form.TextBox\" value=\"100\"></span>\n <label>${tableWidth}</label>\n </td><td>\n <select dojoAttachPoint=\"selectWidthType\" hasDownArrow=\"true\" dojoType=\"dijit.form.FilteringSelect\">\n <option value=\"percent\">${percent}</option>\n <option value=\"pixels\">${pixels}</option>\n </select>\n </td></tr><tr><td>\n <span dojoAttachPoint=\"selectPad\" dojoType=\"dijit.form.TextBox\" value=\"0\"></span>\n <label>${cellPadding}</label></td>\n <td class=\"cellpad\"></td></tr><tr><td>\n <span dojoAttachPoint=\"selectSpace\" dojoType=\"dijit.form.TextBox\" value=\"0\"></span>\n <label>${cellSpacing}</label>\n </td><td class=\"cellspace\"></td></tr>\n </table>\n <div class=\"dialogButtonContainer\">\n <div dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick: onSet\">${buttonSet}</div>\n <div dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick: onCancel\">${buttonCancel}</div>\n </div>\n\t</div>\n</div>\n"),postMixInProperties:function(){ |
||
509 | var _31=dojo.i18n.getLocalization("dojox.editor.plugins","TableDialog",this.lang); |
||
510 | dojo.mixin(this,_31);
|
||
511 | this.inherited(arguments); |
||
512 | },postCreate:function(){ |
||
513 | dojo.addClass(this.domNode,this.baseClass); |
||
514 | this.inherited(arguments); |
||
515 | this._cleanupWidgets=[];
|
||
516 | var w1=new dijit.ColorPalette({}); |
||
517 | this.connect(w1,"onChange",function(_32){ |
||
518 | dijit.popup.close(w1); |
||
519 | this.setBrdColor(_32);
|
||
520 | }); |
||
521 | this.connect(w1,"onBlur",function(){ |
||
522 | dijit.popup.close(w1); |
||
523 | }); |
||
524 | this.connect(this.borderCol,"click",function(){ |
||
525 | dijit.popup.open({popup:w1,around:this.borderCol}); |
||
526 | w1.focus(); |
||
527 | }); |
||
528 | var w2=new dijit.ColorPalette({}); |
||
529 | this.connect(w2,"onChange",function(_33){ |
||
530 | dijit.popup.close(w2); |
||
531 | this.setBkColor(_33);
|
||
532 | }); |
||
533 | this.connect(w2,"onBlur",function(){ |
||
534 | dijit.popup.close(w2); |
||
535 | }); |
||
536 | this.connect(this.backgroundCol,"click",function(){ |
||
537 | dijit.popup.open({popup:w2,around:this.backgroundCol}); |
||
538 | w2.focus(); |
||
539 | }); |
||
540 | this._cleanupWidgets.push(w1);
|
||
541 | this._cleanupWidgets.push(w2);
|
||
542 | this.setBrdColor(dojo.attr(this.table,"bordercolor")); |
||
543 | this.setBkColor(dojo.attr(this.table,"bgcolor")); |
||
544 | var w=dojo.attr(this.table,"width"); |
||
545 | if(!w){
|
||
546 | w=this.table.style.width;
|
||
547 | } |
||
548 | var p="pixels"; |
||
549 | if(dojo.isString(w)&&w.indexOf("%")>-1){ |
||
550 | p="percent";
|
||
551 | w=w.replace(/%/,""); |
||
552 | } |
||
553 | if(w){
|
||
554 | this.selectWidth.set("value",w); |
||
555 | this.selectWidthType.set("value",p); |
||
556 | }else{
|
||
557 | this.selectWidth.set("value",""); |
||
558 | this.selectWidthType.set("value","percent"); |
||
559 | } |
||
560 | this.selectBorder.set("value",dojo.attr(this.table,"border")); |
||
561 | this.selectPad.set("value",dojo.attr(this.table,"cellPadding")); |
||
562 | this.selectSpace.set("value",dojo.attr(this.table,"cellSpacing")); |
||
563 | this.selectAlign.set("value",dojo.attr(this.table,"align")); |
||
564 | },setBrdColor:function(_34){ |
||
565 | this.brdColor=_34;
|
||
566 | dojo.style(this.borderCol,"backgroundColor",_34); |
||
567 | },setBkColor:function(_35){ |
||
568 | this.bkColor=_35;
|
||
569 | dojo.style(this.backgroundCol,"backgroundColor",_35); |
||
570 | },onSet:function(){ |
||
571 | dojo.attr(this.table,"borderColor",this.brdColor); |
||
572 | dojo.attr(this.table,"bgColor",this.bkColor); |
||
573 | if(this.selectWidth.get("value")){ |
||
574 | dojo.style(this.table,"width",""); |
||
575 | dojo.attr(this.table,"width",(this.selectWidth.get("value")+((this.selectWidthType.get("value")=="pixels")?"":"%"))); |
||
576 | } |
||
577 | dojo.attr(this.table,"border",this.selectBorder.get("value")); |
||
578 | dojo.attr(this.table,"cellPadding",this.selectPad.get("value")); |
||
579 | dojo.attr(this.table,"cellSpacing",this.selectSpace.get("value")); |
||
580 | dojo.attr(this.table,"align",this.selectAlign.get("value")); |
||
581 | var c=dojo.connect(this,"onHide",function(){ |
||
582 | dojo.disconnect(c); |
||
583 | var _36=this; |
||
584 | setTimeout(function(){
|
||
585 | _36.destroyRecursive(); |
||
586 | },10);
|
||
587 | }); |
||
588 | this.hide();
|
||
589 | },onCancel:function(){ |
||
590 | var c=dojo.connect(this,"onHide",function(){ |
||
591 | dojo.disconnect(c); |
||
592 | var _37=this; |
||
593 | setTimeout(function(){
|
||
594 | _37.destroyRecursive(); |
||
595 | },10);
|
||
596 | }); |
||
597 | },onSetTable:function(_38){ |
||
598 | },destroy:function(){ |
||
599 | this.inherited(arguments); |
||
600 | dojo.forEach(this._cleanupWidgets,function(w){ |
||
601 | if(w&&w.destroy){
|
||
602 | w.destroy(); |
||
603 | } |
||
604 | }); |
||
605 | delete this._cleanupWidgets; |
||
606 | }}); |
||
607 | dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){ |
||
608 | if(o.plugin){
|
||
609 | return;
|
||
610 | } |
||
611 | if(o.args&&o.args.command){
|
||
612 | var cmd=o.args.command.charAt(0).toLowerCase()+o.args.command.substring(1,o.args.command.length); |
||
613 | switch(cmd){
|
||
614 | case "insertTableRowBefore": |
||
615 | case "insertTableRowAfter": |
||
616 | case "insertTableColumnBefore": |
||
617 | case "insertTableColumnAfter": |
||
618 | case "deleteTableRow": |
||
619 | case "deleteTableColumn": |
||
620 | o.plugin=new dojox.editor.plugins.TablePlugins({commandName:cmd}); |
||
621 | break;
|
||
622 | case "colorTableCell": |
||
623 | o.plugin=new dojox.editor.plugins.ColorTableCell({commandName:cmd}); |
||
624 | break;
|
||
625 | case "modifyTable": |
||
626 | o.plugin=new dojox.editor.plugins.ModifyTable({commandName:cmd}); |
||
627 | break;
|
||
628 | case "insertTable": |
||
629 | o.plugin=new dojox.editor.plugins.InsertTable({commandName:cmd}); |
||
630 | break;
|
||
631 | case "tableContextMenu": |
||
632 | o.plugin=new dojox.editor.plugins.TableContextMenu({commandName:cmd}); |
||
633 | break;
|
||
634 | } |
||
635 | } |
||
636 | }); |
||
637 | } |