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 | } |