| /** | 
|  * Created with JetBrains PhpStorm. | 
|  * User: xuheng | 
|  * Date: 12-12-19 | 
|  * Time: 下午4:55 | 
|  * To change this template use File | Settings | File Templates. | 
|  */ | 
| (function () { | 
|     var title = $G("J_title"), | 
|         titleCol = $G("J_titleCol"), | 
|         caption = $G("J_caption"), | 
|         sorttable = $G("J_sorttable"), | 
|         autoSizeContent = $G("J_autoSizeContent"), | 
|         autoSizePage = $G("J_autoSizePage"), | 
|         tone = $G("J_tone"), | 
|         me, | 
|         preview = $G("J_preview"); | 
|   | 
|     var editTable = function () { | 
|         me = this; | 
|         me.init(); | 
|     }; | 
|     editTable.prototype = { | 
|         init:function () { | 
|             var colorPiker = new UE.ui.ColorPicker({ | 
|                     editor:editor | 
|                 }), | 
|                 colorPop = new UE.ui.Popup({ | 
|                     editor:editor, | 
|                     content:colorPiker | 
|                 }); | 
|   | 
|             title.checked = editor.queryCommandState("inserttitle") == -1; | 
|             titleCol.checked = editor.queryCommandState("inserttitlecol") == -1; | 
|             caption.checked = editor.queryCommandState("insertcaption") == -1; | 
|             sorttable.checked = editor.queryCommandState("enablesort") == 1; | 
|   | 
|             var enablesortState = editor.queryCommandState("enablesort"), | 
|                 disablesortState = editor.queryCommandState("disablesort"); | 
|   | 
|             sorttable.checked = !!(enablesortState < 0 && disablesortState >=0); | 
|             sorttable.disabled = !!(enablesortState < 0 && disablesortState < 0); | 
|             sorttable.title = enablesortState < 0 && disablesortState < 0 ? lang.errorMsg:''; | 
|   | 
|             me.createTable(title.checked, titleCol.checked, caption.checked); | 
|             me.setAutoSize(); | 
|             me.setColor(me.getColor()); | 
|   | 
|             domUtils.on(title, "click", me.titleHanler); | 
|             domUtils.on(titleCol, "click", me.titleColHanler); | 
|             domUtils.on(caption, "click", me.captionHanler); | 
|             domUtils.on(sorttable, "click", me.sorttableHanler); | 
|             domUtils.on(autoSizeContent, "click", me.autoSizeContentHanler); | 
|             domUtils.on(autoSizePage, "click", me.autoSizePageHanler); | 
|   | 
|             domUtils.on(tone, "click", function () { | 
|                 colorPop.showAnchor(tone); | 
|             }); | 
|             domUtils.on(document, 'mousedown', function () { | 
|                 colorPop.hide(); | 
|             }); | 
|             colorPiker.addListener("pickcolor", function () { | 
|                 me.setColor(arguments[1]); | 
|                 colorPop.hide(); | 
|             }); | 
|             colorPiker.addListener("picknocolor", function () { | 
|                 me.setColor(""); | 
|                 colorPop.hide(); | 
|             }); | 
|         }, | 
|   | 
|         createTable:function (hasTitle, hasTitleCol, hasCaption) { | 
|             var arr = [], | 
|                 sortSpan = '<span>^</span>'; | 
|             arr.push("<table id='J_example'>"); | 
|             if (hasCaption) { | 
|                 arr.push("<caption>" + lang.captionName + "</caption>") | 
|             } | 
|             if (hasTitle) { | 
|                 arr.push("<tr>"); | 
|                 if(hasTitleCol) { arr.push("<th>" + lang.titleName + "</th>"); } | 
|                 for (var j = 0; j < 5; j++) { | 
|                     arr.push("<th>" + lang.titleName + "</th>"); | 
|                 } | 
|                 arr.push("</tr>"); | 
|             } | 
|             for (var i = 0; i < 6; i++) { | 
|                 arr.push("<tr>"); | 
|                 if(hasTitleCol) { arr.push("<th>" + lang.titleName + "</th>") } | 
|                 for (var k = 0; k < 5; k++) { | 
|                     arr.push("<td>" + lang.cellsName + "</td>") | 
|                 } | 
|                 arr.push("</tr>"); | 
|             } | 
|             arr.push("</table>"); | 
|             preview.innerHTML = arr.join(""); | 
|             this.updateSortSpan(); | 
|         }, | 
|         titleHanler:function () { | 
|             var example = $G("J_example"), | 
|                 frg=document.createDocumentFragment(), | 
|                 color = domUtils.getComputedStyle(domUtils.getElementsByTagName(example, "td")[0], "border-color"), | 
|                 colCount = example.rows[0].children.length; | 
|   | 
|             if (title.checked) { | 
|                 example.insertRow(0); | 
|                 for (var i = 0, node; i < colCount; i++) { | 
|                     node = document.createElement("th"); | 
|                     node.innerHTML = lang.titleName; | 
|                     frg.appendChild(node); | 
|                 } | 
|                 example.rows[0].appendChild(frg); | 
|   | 
|             } else { | 
|                 domUtils.remove(example.rows[0]); | 
|             } | 
|             me.setColor(color); | 
|             me.updateSortSpan(); | 
|         }, | 
|         titleColHanler:function () { | 
|             var example = $G("J_example"), | 
|                 color = domUtils.getComputedStyle(domUtils.getElementsByTagName(example, "td")[0], "border-color"), | 
|                 colArr = example.rows, | 
|                 colCount = colArr.length; | 
|   | 
|             if (titleCol.checked) { | 
|                 for (var i = 0, node; i < colCount; i++) { | 
|                     node = document.createElement("th"); | 
|                     node.innerHTML = lang.titleName; | 
|                     colArr[i].insertBefore(node, colArr[i].children[0]); | 
|                 } | 
|             } else { | 
|                 for (var i = 0; i < colCount; i++) { | 
|                     domUtils.remove(colArr[i].children[0]); | 
|                 } | 
|             } | 
|             me.setColor(color); | 
|             me.updateSortSpan(); | 
|         }, | 
|         captionHanler:function () { | 
|             var example = $G("J_example"); | 
|             if (caption.checked) { | 
|                 var row = document.createElement('caption'); | 
|                 row.innerHTML = lang.captionName; | 
|                 example.insertBefore(row, example.firstChild); | 
|             } else { | 
|                 domUtils.remove(domUtils.getElementsByTagName(example, 'caption')[0]); | 
|             } | 
|         }, | 
|         sorttableHanler:function(){ | 
|             me.updateSortSpan(); | 
|         }, | 
|         autoSizeContentHanler:function () { | 
|             var example = $G("J_example"); | 
|             example.removeAttribute("width"); | 
|         }, | 
|         autoSizePageHanler:function () { | 
|             var example = $G("J_example"); | 
|             var tds = example.getElementsByTagName(example, "td"); | 
|             utils.each(tds, function (td) { | 
|                 td.removeAttribute("width"); | 
|             }); | 
|             example.setAttribute('width', '100%'); | 
|         }, | 
|         updateSortSpan: function(){ | 
|             var example = $G("J_example"), | 
|                 row = example.rows[0]; | 
|   | 
|             var spans = domUtils.getElementsByTagName(example,"span"); | 
|             utils.each(spans,function(span){ | 
|                 span.parentNode.removeChild(span); | 
|             }); | 
|             if (sorttable.checked) { | 
|                 utils.each(row.cells, function(cell, i){ | 
|                     var span = document.createElement("span"); | 
|                     span.innerHTML = "^"; | 
|                     cell.appendChild(span); | 
|                 }); | 
|             } | 
|         }, | 
|         getColor:function () { | 
|             var start = editor.selection.getStart(), color, | 
|                 cell = domUtils.findParentByTagName(start, ["td", "th", "caption"], true); | 
|             color = cell && domUtils.getComputedStyle(cell, "border-color"); | 
|             if (!color)  color = "#DDDDDD"; | 
|             return color; | 
|         }, | 
|         setColor:function (color) { | 
|             var example = $G("J_example"), | 
|                 arr = domUtils.getElementsByTagName(example, "td").concat( | 
|                     domUtils.getElementsByTagName(example, "th"), | 
|                     domUtils.getElementsByTagName(example, "caption") | 
|                 ); | 
|   | 
|             tone.value = color; | 
|             utils.each(arr, function (node) { | 
|                 node.style.borderColor = color; | 
|             }); | 
|   | 
|         }, | 
|         setAutoSize:function () { | 
|             var me = this; | 
|             autoSizePage.checked = true; | 
|             me.autoSizePageHanler(); | 
|         } | 
|     }; | 
|   | 
|     new editTable; | 
|   | 
|     dialog.onok = function () { | 
|         editor.__hasEnterExecCommand = true; | 
|   | 
|         var checks = { | 
|             title:"inserttitle deletetitle", | 
|             titleCol:"inserttitlecol deletetitlecol", | 
|             caption:"insertcaption deletecaption", | 
|             sorttable:"enablesort disablesort" | 
|         }; | 
|         editor.fireEvent('saveScene'); | 
|         for(var i in checks){ | 
|             var cmds = checks[i].split(" "), | 
|                 input = $G("J_" + i); | 
|             if(input["checked"]){ | 
|                 editor.queryCommandState(cmds[0])!=-1 &&editor.execCommand(cmds[0]); | 
|             }else{ | 
|                 editor.queryCommandState(cmds[1])!=-1 &&editor.execCommand(cmds[1]); | 
|             } | 
|         } | 
|   | 
|         editor.execCommand("edittable", tone.value); | 
|         autoSizeContent.checked ?editor.execCommand('adaptbytext') : ""; | 
|         autoSizePage.checked ? editor.execCommand("adaptbywindow") : ""; | 
|         editor.fireEvent('saveScene'); | 
|   | 
|         editor.__hasEnterExecCommand = false; | 
|     }; | 
| })(); |