/** 
 | 
 * 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; 
 | 
    }; 
 | 
})(); 
 |