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