Parchment.Plugins.Table={type:"button",attributes_whitelist:{table:{"class":/with-out-border|with-border|t-editor|full-width|natural-width|t-user-list/}},empty_node_whitelist:{td:function(){return true}},init:function(){document.addEvent("load",function(){document.execCommand("enableInlineTableEditing",false,false)});this.parchment.editor.addEvents({click:function(){if(this.menu){this.menu.destroy()}}.bind(this),contextmenu:this.contextMenu.bind(this)});this.buildToolbar()},callback:function(a){this.parchment.editor.focus();this.parchment.insertCage(this.buildTableHTML(prompt("Rows?","4"),prompt("Columns?","3")))},buildTableHTML:function(c,d){d=parseInt(d,10)?parseInt(d,10):4;c=parseInt(c,10)?parseInt(c,10):3;var b="<thead><tr>"+Array(d+1).join("<th>Column Head</th>")+"</tr></thead>",a="<tbody>"+Array(c+1).join("<tr>"+Array(d+1).join("<td>&nbsp;</td>")+"</tr>")+"</tbody>";return'<table class="t-editor with-border full-width">'+b+a+"</table>"},buildToolbar:function(){this.toolbar=new Parchment.Utils.Toolbar(this.parchment.editor,{"class":"table",relay:"table",display:{borders:[{command:"toggleborders",text:"on"}],header:[{command:"toggleheader",text:"on"}],position:[{command:"moveup",text:"U"},{command:"movedown",text:"D"}],table:[{command:"togglewidth",text:"max-width"},{command:"removetable",text:"delete"},{command:"breakout",text:"magic show"}]}});this.toolbar.addEvents({showtoolbar:function(a){this.setToolbarButtons(a)}.bind(this),command:this.tableCommand.bind(this)})},setToolbarButtons:function(a){this.toolbar.toolbar.getElements("button").removeClass("on");if(a.hasClass("full-width")){this.toolbar.toolbar.getElement(".togglewidth").addClass("on")}if(a.hasClass("with-border")){this.toolbar.toolbar.getElement(".toggleborders").addClass("on")}if(a.getElement("thead")){this.toolbar.toolbar.getElement(".toggleheader").addClass("on")}},tableCommand:function(g){var d=this.toolbar.toolbar.retrieve("cage"),c=this.parchment.getSelectionObject(),a=this.parchment.getRangeObject(c),f;switch(g){case"toggleheader":if(d.getElement("thead")){d.getElement("thead").destroy()}else{var b="<tr>"+Array(d.getElement("tr").getElements("td").length+1).join("<th>Column Head</th>")+"</tr>",e=new Element("thead",{html:b});e.inject(d,"top")}break;case"removetable":a.selectNode(d);a.deleteContents();break;case"toggleborders":d.toggleClass("with-border");break;case"togglewidth":d.toggleClass("full-width");break;case"moveup":f=d.getPrevious();if(f){d.inject(f,"before")}break;case"movedown":f=d.getNext();if(f){d.inject(f,"after")}break;case"breakout":d.getElements("td").each(function(h){while(h.firstChild){d.parentNode.insertBefore(h.firstChild,d)}d.parentNode.insertBefore(document.createElement("br"),d)});d.destroy();this.parchment.clean({add_paragraphs:true});break;default:break}this.setToolbarButtons(d);this.toolbar.setPosition(d)},contextMenu:function(c){var b=c.target,f=0,d=false;while(b&&b!=this.parchment.editor){d=d||(b.nodeName.test(/td/i)?b:false);f=Math.max(f,b.getStyle("z-index").toInt()||0);b=b.parentNode;if(d){break}}if(!d){return}c.stop();if(this.menu){this.menu.destroy()}this.menu=new Element("div.parchment-2-edit-menu").setStyles({top:c.page.y,left:c.page.x}).inject(document.body);if(!!f){this.menu.setStyle("z-index",f+1)}var a=[{command:"addrowbefore",text:"Insert Row Up"},{command:"addrowafter",text:"Insert Row Down"},{command:"addcolbefore",text:"Insert Column Left"},{command:"addcolafter",text:"Insert Column Right"},{command:"removerow",text:"Delete Row"},{command:"removecol",text:"Delete Column"}];a.each(function(h){var e=new Element("button",{text:h.text,type:"button"}).addEvent("click",this.cellCommand.pass([d,h.command],this)).inject(this.menu);var g=new Element("br").inject(this.menu)}.bind(this))},cellCommand:function(b,d){this.menu.destroy();var a=b.cellIndex,j=b.parentNode.rowIndex,i=b,f=false,c=document.createElement("div"),h=this.parchment.getSelectionObject(),e=this.parchment.getRangeObject(h);while(i.nodeName.toLowerCase()!=="table"){i=i.parentNode}f=i.cloneNode(true);c.appendChild(f);switch(d){case"addrowbefore":this.addRow(f,j,"before");break;case"addrowafter":this.addRow(f,j,"after");break;case"addcolbefore":this.addCol(f,a,"before");break;case"addcolafter":this.addCol(f,a,"after");break;case"removerow":f.getElementsByTagName("tr")[j].parentNode.removeChild(f.getElementsByTagName("tr")[j]);break;case"removecol":f.getElements("tr > *:nth-child("+(a+1)+")").destroy();break;default:return}if(this.parchment.browser.webkit||this.parchment.browser.msie){var g=document.createElement("span");i.parentNode.insertBefore(g,i);g.appendChild(i);g.innerHTML="&nbsp;"+g.innerHTML+"&nbsp;";i=g}e.selectNode(i);h.removeAllRanges();h.addRange(e);this.parchment.saveSelection();this.parchment.insertHTML(c.innerHTML)},addRow:function(h,f,a){var b=h.getElementsByTagName("tr")[f],d=b.childNodes.length;var e=document.createElement("tr");for(var g=0;g<d;g++){e.appendChild(document.createElement("td"))}e.inject(b,a)},addCol:function(c,b,a){c.getElements("tr").each(function(e){var d=e.childNodes[b].nodeName.toLowerCase()=="th"?new Element("th"):new Element("td");d.inject(e.childNodes[b],a)})}};
