root / trunk / web / dojo / dojox / editor / plugins / TablePlugins.js
History | View | Annotate | Download (24.3 KB)
| 1 |
/*
|
|---|---|
| 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 |
} |