Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
/* wiki-toolbox.js */





(function(){

if(document.getElementById('toolbar')!==null){

var addCSSRule=function(sheet,selector,rule){



sheet.insertRule(selector+" { "+rule+" }",sheet.cssRules.length);

};



if(document.getElementById("wiki-table-editor-button")==null){

var editButton=document.createElement("img");

editButton.onclick=function(){SimileWikiToolbox.editTableInPage();};

editButton.alt="Tabelle bearbeiten";

editButton.title="Tabelle bearbeiten";

editButton.src="http://simile.mit.edu/repository/wiki-toolbox/trunk/src/editImg.png";

editButton.style.cursor="pointer";

editButton.id="wiki-table-editor-button";



var insrtButton=document.createElement("img");

insrtButton.onclick=function(){SimileWikiToolbox.insertTableInPage();};

insrtButton.alt="Tabelle einfügen";

insrtButton.title="Tabelle einfügen";

insrtButton.src="http://simile.mit.edu/repository/wiki-toolbox/trunk/src/insrtImg.png"

insrtButton.style.cursor="pointer";

insrtButton.id="wiki-table-insert-button";



var toolbar=document.getElementById("toolbar");

toolbar.appendChild(editButton);

toolbar.appendChild(insrtButton);

}



var style=document.createElement("style");

document.getElementsByTagName("head")[0].appendChild(style);



var sheet=style.sheet;

addCSSRule(sheet,"div.wiki-toolbox-ui","text-align: left");

addCSSRule(sheet,"div.wiki-toolbox-ui","font-size: 10pt");

addCSSRule(sheet,"div.wiki-toolbox-ui","z-index: 1000");

addCSSRule(sheet,"span.wiki-toolbox-button-group-label","color: white");

}

})();



SimileWikiToolbox={};



SimileWikiToolbox.editTableInPage=function(){

var textarea=document.getElementsByTagName("textarea")[0];

var text=textarea.value;

var cursor=textarea.selectionStart;



SimileWikiToolbox.editTableInText(text,cursor,function(text){textarea.value=text;});

};



SimileWikiToolbox.editTableInText=function(text,cursor,onDone,onCancel){

var tableLocation=SimileWikiToolbox.WikiTable.findTable(text,cursor);



var beforeTableText=text.substr(0,tableLocation.tableStart);

var afterTableText=text.substr(tableLocation.tableEnd);

var tableText=text.substring(tableLocation.tableStart,tableLocation.tableEnd);



var parsedResult=SimileWikiToolbox.WikiTable.parseTable(tableText,cursor-tableLocation.tableStart);



SimileWikiToolbox.editTable(

parsedResult.wikiTable,

function(){

if(onDone){

onDone(beforeTableText+parsedResult.wikiTable.toWikiText()+afterTableText);

}

},

function(){

if(onCancel){

onCancel();

}

},

parsedResult.row,

parsedResult.column

);

};



SimileWikiToolbox.insertTableInPage=function(){

var textarea=document.getElementsByTagName("textarea")[0];

var text=textarea.value;

var cursor=textarea.selectionStart;



SimileWikiToolbox.insertTableInText(text,cursor,function(text){textarea.value=text;});

};



SimileWikiToolbox.insertTableInText=function(text,cursor,onDone,onCancel){

var beforeCursorText=text.substr(0,cursor);

var afterCursorText=text.substr(cursor);

var wikiTable=new SimileWikiToolbox.WikiTable("{|\n|-\n!\n!\n|-\n|\n|\n|}");



SimileWikiToolbox.editTable(wikiTable,

function(){

if(onDone){

onDone(beforeCursorText+wikiTable.toWikiText()+afterCursorText);

}

},

function(){

if(onCancel){

onCancel();

}

}

);

};



var WikiTableEditor=null;



SimileWikiToolbox.editTable=function(wikiTable,onDone,onCancel,row,column){

WikiTableEditor=new SimileWikiToolbox.WikiTableEditor(wikiTable,onDone,onCancel,row,column);

};

/* wiki-table-cell.js */





SimileWikiToolbox.WikiTableCell=function(cellText){

this._content={};



if(cellText.indexOf("|")>0){

var set=cellText.substring(0,cellText.indexOf("|"));

var cellText=cellText.substr(cellText.indexOf("|")+1);

this._content.settings=new SimileWikiToolbox.WikiTableCellSettings(set);

};

if(cellText.indexOf("\n")<0){

cellText+="\n";

};

this._content.text=cellText;

};



SimileWikiToolbox.WikiTableCell.prototype.getSettings=function(){

if(this._content.settings){

return this._content.settings;

};

};



SimileWikiToolbox.WikiTableCell.prototype.setSettings=function(text){

this._content.settings=new SimileWikiToolbox.WikiTableCellSettings(text);

};



SimileWikiToolbox.WikiTableCell.prototype.getContent=function(){

return this._content.text;

};



SimileWikiToolbox.WikiTableCell.prototype.setContent=function(text){

this._content.text=text+"\n";

};



SimileWikiToolbox.WikiTableCell.prototype.toWikiText=function(){

if(this.getSettings()!=null){

var setObj=this.getSettings();

var set=setObj.toWikiText()+"|";

}else{

var set="";

};

return set+this._content.text.toString();

};

/* wiki-table-editor.js */





SimileWikiToolbox.WikiTableEditor=function(wikiTable,onDone,onCancel,row,column){

this._wikiTable=wikiTable;

this._undoList=[];

this._redoList=[];

this._redid=true;



var self=this;

var createUIDiv=function(){

var div=document.createElement("div");

div.className="wiki-toolbox-ui";

return div;

};

var createFixedUIDiv=function(left,right,top,bottom){

var div=createUIDiv();

div.style.position="fixed";

return div;

};

var createEdgeBoundDiv=function(left,right,top,bottom){

var div=createFixedUIDiv();

div.style.left=left;

div.style.right=right;

div.style.top=top;

div.style.bottom=bottom;

return div;

};

var createButton=function(parentElmt,label,handler){

var button=document.createElement("button");

button.innerHTML=label;

button.onclick=handler;

parentElmt.appendChild(button);

return button;

};

var createInput=function(parentElmt,value,id){

var input=document.createElement("input");

input.type="text";

input.value=value;

input.id=id;

parentElmt.appendChild(input);

return input;

}

var createButtonGroupLabel=function(label){

var span=document.createElement("span");

span.innerHTML=label;

span.className="wiki-toolbox-button-group-label";

return span;

};

var createToolbarButton=function(image,label,handler){

if(image){

var button=document.createElement("img");

button.src=image;

}else{

var button=document.createElement("button");

button.innerHTML=label;

button.style.marginBottom="5px";

};

button.alt=label;

button.title=label;

button.onclick=handler;

toolbarDiv.appendChild(button);

};





this._toolbarEntries=[];



SimileWikiToolbox.WikiTableEditor.prototype.addToolbarEntry=function(image,label,handler){

this._toolbarEntries.push({image:image,label:label,handler:handler});

};



this.addToolbarEntry("","Rückgängig",function(){self.undoAction()});

this.addToolbarEntry("","Wiederherstellen",function(){self.redoAction()});

this.addToolbarEntry("","Einfügen",function(){self.pasteInTextBox()});





var screen=createEdgeBoundDiv("0px","0px","0px","0px");

screen.style.background="black";

screen.style.opacity="0.7";

document.body.appendChild(screen);





var editingArea=this._editingArea=createEdgeBoundDiv("100px","20px","100px","50px");

editingArea.style.background="white";

editingArea.style.overflow="auto";

document.body.appendChild(editingArea);





var columnDiv=createFixedUIDiv();

columnDiv.style.left="100px";

columnDiv.style.right="400px";

columnDiv.style.top="50px";

columnDiv.style.padding="5px";

document.body.appendChild(columnDiv);



columnDiv.appendChild(createButtonGroupLabel("Spalte einfügen"));

createButton(columnDiv,"Erste",function(evt){

self.insertColumnFirst();

});

createButton(columnDiv,"Letzte",function(evt){

self.insertColumnLast();

});

columnDiv.appendChild(document.createTextNode(" "));

createButton(columnDiv,"Links",function(evt){

self.insertColumnLeft();

});

createButton(columnDiv,"Rechts",function(evt){

self.insertColumnRight();

});







columnDiv.appendChild(createButtonGroupLabel("<br/>Move Column"));

createButton(columnDiv,"Links",function(evt){

self.moveColumnLeft();

});

columnDiv.appendChild(document.createTextNode(" "));

createButton(columnDiv,"Rechts",function(evt){

self.moveColumnRight();

});





var settingsDiv=createFixedUIDiv();

settingsDiv.style.right="20px";

settingsDiv.style.top="30px";

settingsDiv.style.padding="0px";

settingsDiv.appendChild(createButtonGroupLabel("Einstellungen ändern:<br/>"));



createButton(settingsDiv,"Tabelle",function(evt){

self.changeTableSet();

});

createButton(settingsDiv,"Reihe",function(evt){

self.changeRowSet();

});

createButton(settingsDiv,"Spalte",function(evt){

self.changeColSet();

});

createButton(settingsDiv,"Zelle",function(evt){

self.changeCellSet();

});



settingsDiv.appendChild(document.createTextNode(" "));

var input=document.createElement("input");

input.id="settings-input";

input.style.width="300px";

input.value="(press enter to save settings)";

input.onfocus=function(evt){

if(input.value=="saved"||input.value=="currently has no settings"||input.value=="(press enter to save settings)"){

input.value=""

};

};

settingsDiv.appendChild(input);

document.body.appendChild(settingsDiv);





var toolbarDiv=createFixedUIDiv();

toolbarDiv.style.right="20px";

toolbarDiv.style.top="77px";

toolbarDiv.style.padding="0px";

document.body.appendChild(toolbarDiv);

for(i=0;i<this._toolbarEntries.length;i++){

var entry=this._toolbarEntries[i];

createToolbarButton(entry.image,entry.label,entry.handler);

};





var rowDiv=createFixedUIDiv();

rowDiv.style.left="10px";

rowDiv.style.top="100px";

rowDiv.style.width="80px";

rowDiv.style.padding="5px";

document.body.appendChild(rowDiv);



rowDiv.appendChild(createButtonGroupLabel("Insert Row"));

createButton(rowDiv,"Top",function(evt){

self.insertRowFirst();

}).style.width="100%";

createButton(rowDiv,"Bottom",function(evt){

self.insertRowLast();

}).style.width="100%";

createButton(rowDiv,"Above",function(evt){

self.insertRowAbove();

}).style.width="100%";

createButton(rowDiv,"Below",function(evt){

self.insertRowBelow();

}).style.width="100%";







rowDiv.appendChild(createButtonGroupLabel("<br/><br/>Move Row"));

createButton(rowDiv,"Up",function(evt){

self.moveRowUp();

}).style.width="100%";

createButton(rowDiv,"Down",function(evt){

self.moveRowDown();

}).style.width="100%";







rowDiv.appendChild(createButtonGroupLabel("<br/><br/>Delete"));

createButton(rowDiv,"Row",function(evt){

self.deleteRow();

}).style.width="100%";

createButton(rowDiv,"Column",function(evt){

self.deleteCol();

}).style.width="100%";





var finalDiv=createFixedUIDiv();

finalDiv.style.left="100px";

finalDiv.style.right="20px";

finalDiv.style.bottom="0px";

finalDiv.style.height="40px";

finalDiv.style.textAlign="center";

finalDiv.style.padding="5px";

document.body.appendChild(finalDiv);



var dismantle=function(){

document.body.removeChild(screen);

document.body.removeChild(columnDiv);

document.body.removeChild(settingsDiv);

document.body.removeChild(toolbarDiv);

document.body.removeChild(rowDiv);

document.body.removeChild(editingArea);

document.body.removeChild(finalDiv);

};



createButton(finalDiv,"Save",function(){dismantle();if(onDone){onDone();}});

createButton(finalDiv,"Cancel",function(){dismantle();if(onCancel){onCancel();}});



this._renderTable();

};



SimileWikiToolbox.WikiTableEditor.prototype.pasteInTextBox=function(){



var self=this;



this._removeCellEditingUI();



var pasteDiv=document.createElement("div");

pasteDiv.id="paste-div";

pasteDiv.style.top="150px";

pasteDiv.style.bottom="150px";

pasteDiv.style.left="300px";

pasteDiv.style.right="300px";

pasteDiv.style.position="absolute";

pasteDiv.style.zIndex="2000";



var pasteArea=document.createElement("textarea");

pasteArea.style.height="200px";

pasteArea.id="text-paste-area";

pasteArea.style.backgroundColor="#ddd";

pasteArea.defaultValue="Paste tab-separated values here."

pasteArea.focus();



var okButton=document.createElement("button");

okButton.innerHTML="OK";

okButton.onclick=function(){self.insertTabVals();};



var cancelButton=document.createElement("button");

cancelButton.innerHTML="Cancel";

cancelButton.onclick=function(){self.removePasteDiv();};



pasteDiv.appendChild(pasteArea);

pasteDiv.appendChild(okButton);

pasteDiv.appendChild(cancelButton);

document.body.appendChild(pasteDiv);



};



SimileWikiToolbox.WikiTableEditor.prototype.removePasteDiv=function(){

var div=document.getElementById("paste-div");

document.body.removeChild(div);

};



SimileWikiToolbox.WikiTableEditor.prototype.insertTabVals=function(){

var self=this;



var oldCol=this._currentCol;

var oldRow=this._currentRow;

var values=document.getElementById("text-paste-area").value;

var pasteVals=[];

var theRow=values.split("\n");



this.removePasteDiv();

for(i=0;i<theRow.length;i++){

pasteVals.push(theRow[i].split("\t"));

};



this.doAction(

function(){

self._currentRow=oldRow;

for(j=0;j<pasteVals.length;j++){

self._currentCol=oldCol;

if(j==0&&self._wikiTable.getRow(self._currentRow).getCell(self._currentCol).getContent()!="\n"){

var newRow=oldRow++;

self._currentRow++;

self._wikiTable.insertRow(self._currentRow);

};

if(j>0){

self._wikiTable.insertRow(self._currentRow+1);

self._currentRow++;

};

var oneRow=pasteVals[j];

for(k=0;k<oneRow.length;k++){

if(!self._wikiTable.getRow(self._currentRow).getCell(self._currentCol)){

for(m=0;m<self._wikiTable.getRowCount();m++){

self._wikiTable.getRow(m).insertCell(self._currentCol);

};

};

self._wikiTable.getRow(self._currentRow).getCell(self._currentCol).setContent(oneRow[k]);

self._currentCol++;

};

};

self._currentCol=oldCol;

self._currentRow=newRow?newRow:oldRow;



self._removeCellEditingUI();

self._renderTable();

},

function(){

self._removeCellEditingUI();

oldRow--;

for(n=0;n<pasteVals.length;n++){

self._wikiTable.removeRow(oldRow+1);

};

self._renderTable();

}

);



};



SimileWikiToolbox.WikiTableEditor.prototype.insertRowFirst=function(){

var self=this;



this.doAction(

function(){

self._removeCellEditingUI();

self._wikiTable.insertRow(0);

self._currentRow++;

self._renderTable();

},

function(){

self._removeCellEditingUI();

self._wikiTable.removeRow(0);

self._renderTable();

}

);

};



SimileWikiToolbox.WikiTableEditor.prototype.insertRowLast=function(){

var self=this;



this.doAction(

function(){

self._removeCellEditingUI();

self._wikiTable.insertRow(self._wikiTable.getRowCount());

self._renderTable();

},

function(){

self._removeCellEditingUI();

self._wikiTable.removeRow(self._wikiTable.getRowCount()-1);

self._renderTable();

}

);

};



SimileWikiToolbox.WikiTableEditor.prototype.insertRowAbove=function(){

var self=this;

var row=this._currentRow



this.doAction(

function(){

self._removeCellEditingUI();

self._wikiTable.insertRow(row);

self._currentRow++;

self._renderTable();

},

function(){

self._removeCellEditingUI();

self._wikiTable.removeRow(row);

self._currentRow--;

self._renderTable();

}

);

};



SimileWikiToolbox.WikiTableEditor.prototype.insertRowBelow=function(){

var self=this;

var row=this._currentRow;



this.doAction(

function(){

self._removeCellEditingUI();

self._wikiTable.insertRow(row+1);

self._renderTable();

},

function(){

self._removeCellEditingUI();

self._wikiTable.removeRow(row+1);

self._renderTable();

}

);

};



SimileWikiToolbox.WikiTableEditor.prototype.insertColumnFirst=function(){

var self=this;



this.doAction(

function(){

self._removeCellEditingUI();

self._wikiTable.insertColumn(0);

self._currentCol++;

self._renderTable();

},

function(){

self._removeCellEditingUI();

self._wikiTable.removeColumn(0);

self._renderTable();

}

);

};



SimileWikiToolbox.WikiTableEditor.prototype.insertColumnLast=function(){

var self=this;



this.doAction(

function(){

self._removeCellEditingUI();

self._wikiTable.insertColumn(self._wikiTable.getColumnCount());

self._renderTable();

},

function(){

self._removeCellEditingUI();

self._wikiTable.removeColumn(self._wikiTable.getColumnCount()-1);

self._renderTable();

}

);

};



SimileWikiToolbox.WikiTableEditor.prototype.insertColumnLeft=function(){

var self=this;

var col=this._currentCol;



this.doAction(

function(){

self._removeCellEditingUI();

self._wikiTable.insertColumn(col);

self._currentCol++;

self._renderTable();

},

function(){

self._removeCellEditingUI();

self._wikiTable.removeColumn(col);

self._currentCol--;

self._renderTable();

}

);

};



SimileWikiToolbox.WikiTableEditor.prototype.insertColumnRight=function(){

var self=this;

var col=this._currentCol;



this.doAction(

function(){

self._removeCellEditingUI();

self._wikiTable.insertColumn(col+1);

self._renderTable();

},

function(){

self._removeCellEditingUI();

self._wikiTable.removeColumn(col+1);

self._renderTable();

}

);

};



SimileWikiToolbox.WikiTableEditor.prototype.moveRowUp=function(){

var self=this;

var row=this._currentRow;



this.doAction(

function(){

self._removeCellEditingUI();

self._wikiTable.moveRow(row,row-1);

self._currentRow=row-1;

self._renderTable();

},

function(){

self._removeCellEditingUI();

self._wikiTable.moveRow(row-1,row);

self._currentRow=row;

self._renderTable();

}

);

};



SimileWikiToolbox.WikiTableEditor.prototype.moveRowDown=function(){

var self=this;

var row=this._currentRow;



this.doAction(

function(){

self._removeCellEditingUI();

self._wikiTable.moveRow(row,row+1);

self._currentRow=row+1;

self._renderTable();

},

function(){

self._removeCellEditingUI();

self._wikiTable.moveRow(row+1,row);

self._currentRow=row;

self._renderTable();

}

);

};



SimileWikiToolbox.WikiTableEditor.prototype.moveColumnLeft=function(){

var self=this;

var col=this._currentCol;



this.doAction(

function(){

self._removeCellEditingUI();

self._wikiTable.moveColumn(col,col-1);

self._currentCol=col-1;

self._renderTable();

},

function(){

self._removeCellEditingUI();

self._wikiTable.moveColumn(col-1,col);

self._currentCol=col;

self._renderTable();

}

);

};



SimileWikiToolbox.WikiTableEditor.prototype.moveColumnRight=function(){

var self=this;

var col=this._currentCol;



this.doAction(

function(){

self._removeCellEditingUI();

self._wikiTable.moveColumn(col,col+1);

self._currentCol=col+1;

self._renderTable();

},

function(){

self._removeCellEditingUI();

self._wikiTable.moveColumn(col+1,col);

self._currentCol=col;

self._renderTable();

}

);

};



SimileWikiToolbox.WikiTableEditor.prototype.deleteRow=function(){

var self=this;

var row=this._currentRow

var rowVal=this._wikiTable.getRow(row);



this.doAction(

function(){

self._removeCellEditingUI();

self._wikiTable.removeRow(row);

self._currentRow--;

self._renderTable();

},

function(){

self._removeCellEditingUI();

self._wikiTable._rows.splice(row,0,rowVal);

self._currentRow++;

self._renderTable();

}

);

};



SimileWikiToolbox.WikiTableEditor.prototype.deleteCol=function(){

var self=this;

var col=this._currentCol;

var colVal=[];



this.doAction(

function(){

self._removeCellEditingUI();

for(var i=0;i<self._wikiTable.getRowCount();i++){

if(self._wikiTable.getRow(i).getCell(col)){

colVal.push(self._wikiTable._rows[i]._row.cells.splice(col,1));

};

};

self._renderTable();

},

function(){

self._removeCellEditingUI();

for(var j=0;j<self._wikiTable.getRowCount();j++){

if(self._wikiTable.getRow(j).getCell(col)){

var cellVal=colVal[j];

self._wikiTable._rows[j]._row.cells.splice(col,0,cellVal[0]);

};

};

self._renderTable();

}

);

};



SimileWikiToolbox.WikiTableEditor.prototype.changeTableSet=function(){

var self=this;



var text=document.getElementById("settings-input");

var table=this._wikiTable;

var settings=table.getSettings()!=null?table.getSettings():"";

text.value=settings==""?"currently has no settings":settings.toWikiText();

text.blur();



text.onkeydown=function(event){

window.event?keynum=event.keycode:keynum=event.which;

if(keynum=="13"){

table.setSettings(text.value);

text.value="saved";

};

};

};



SimileWikiToolbox.WikiTableEditor.prototype.changeRowSet=function(){

var self=this;



var text=document.getElementById("settings-input");

if(!this._currentRow){

text.value="no row selected";

};

try{

var row=this._wikiTable.getRow(this._currentRow);

var settings=row.getSettings()!=null?row.getSettings():"";

text.value=settings==""?"currently has no settings":settings.toWikiText();

text.blur();

}catch(e){};



text.onkeydown=function(event){

window.event?keynum=event.keycode:keynum=event.which;

if(keynum=="13"){

row.setSettings(text.value);

text.value="saved";

};

};

};



SimileWikiToolbox.WikiTableEditor.prototype.changeColSet=function(){

var self=this;



var text=document.getElementById("settings-input");

if(!this._currentCol){

text.value="no column selected";

};

try{

for(i=0;i<this._wikiTable.getRowCount();i++){

var col=this._wikiTable.getRow(i).getCell(this._currentCol);

var settings=col.getSettings()!=null?col.getSettings():"";

if(settings==""){

break;

};

};

text.value=settings==""?"currently has no settings":settings.toWikiText();

text.blur();

}catch(e){};



text.onkeydown=function(event){

window.event?keynum=event.keycode:keynum=event.which;

if(keynum=="13"){

for(j=0;j<self._wikiTable.getRowCount();j++){

var cell=self._wikiTable.getRow(j).getCell(self._currentCol);

cell.setSettings(text.value);

};

text.value="saved";

};

};

};



SimileWikiToolbox.WikiTableEditor.prototype.changeCellSet=function(){

var self=this;



var text=document.getElementById("settings-input");

if(!this._currentCol){

text.value="no cell selected";

};

try{

var cell=this._wikiTable.getRow(this._currentRow).getCell(this._currentCol);

var settings=cell.getSettings()!=null?cell.getSettings():"";

text.value=settings==""?"currently has no settings":settings.toWikiText();

text.blur();

}catch(e){};



text.onkeydown=function(event){

window.event?keynum=event.keycode:keynum=event.which;

if(keynum=="13"){

cell.setSettings(text.value);

text.value="saved";

};

};

};



SimileWikiToolbox.WikiTableEditor.prototype._renderTable=function(){

var wikiTable=this._wikiTable;

var div=this._editingArea;



div.innerHTML="";



var self=this;

var installHandlers=function(td,row,col){

td.onclick=function(){

self._focusOnCell(td,row,col);

};

};



var table=document.createElement("table");

table.border="1";

table.style.textAlign="left";

div.appendChild(table);



for(var i=0;i<wikiTable.getRowCount();i++){

var row=wikiTable.getRow(i);

var tr=table.insertRow(i);

for(var j=0;j<wikiTable.getColumnCount();j++){

var td=document.createElement(row.isHead?"th":"td");

tr.appendChild(td);



if(row.getCell(j)||row.getCell(j)==""){

this._renderCell(td,row.getCell(j));

installHandlers(td,i,j);

}else{

this._renderCell(td,"");

installHandlers(td,i,j);

};



if(i==this._currentRow&&j==this._currentCol){

this._focusOnCell(td,i,j);

}

};

};

};



SimileWikiToolbox.WikiTableEditor.prototype._focusOnCell=function(td,row,col){

var self=this;



this._removeCellEditingUI();



this._currentRow=row;

this._currentCol=col;

this._currentTD=td;



var cell=this._wikiTable.getRow(row).getCell(col);



var textBox=document.createElement("input");

textBox.style.border="none";

textBox.style.padding="0";

textBox.style.margin="0";

textBox.style.background="#FFFFE0";

textBox.style.width=td.offsetWidth+"px";

textBox.style.height=td.offsetHeight+"px";

textBox.value=cell.getContent();



var currentText=cell.getContent();



textBox.onkeydown=function(event){

window.event?keynum=event.keycode:keynum=event.which;

if(keynum=="13"){

self._removeCellEditingUI();

};

};



td.innerHTML="";

td.appendChild(textBox);



textBox.focus();

};



SimileWikiToolbox.WikiTableEditor.prototype._removeCellEditingUI=function(){

if(this._currentTD){

var cell=this._wikiTable.getRow(this._currentRow).getCell(this._currentCol);

if(cell){

cell.setContent(this._currentTD.firstChild.value);

}



this._renderCell(this._currentTD,cell);

this._currentTD=null;

}

};



SimileWikiToolbox.WikiTableEditor.prototype._renderCell=function(td,cell){

if(cell){

var content=cell.getContent();

if(content==""||content==null||content=="\n"){

var emptyDiv=document.createElement("div");

emptyDiv.style.width="80px";

emptyDiv.style.height="20px";

td.appendChild(emptyDiv);

}else if(content.search(/.jpg/i)>0||content.search(/.png/i)>0||content.search(/.gif/i)>0){

td.innerHTML="<img src = '"+content+"' height = '100px' width = '100px'/>";

}else{

td.innerHTML=content;

}

}else{

td.innerHTML="";

};

};



SimileWikiToolbox.WikiTableEditor.prototype.doAction=function(doFunc,undoFunc){

this._undoList.unshift({

doFunc:doFunc,

undoFunc:undoFunc

});

this._undoList[0].doFunc();

};



SimileWikiToolbox.WikiTableEditor.prototype.undoAction=function(){

var undo=this._undoList;

var redo=this._redoList;



if(undo[0]){

if(undo[1]&&this._redid==false){

undo.shift();

};

var lastAction=undo[0];

this._redid=false;

this._removeCellEditingUI();

redo.unshift({func:lastAction.doFunc});

lastAction.undoFunc();

this._renderTable();

};

};



SimileWikiToolbox.WikiTableEditor.prototype.redoAction=function(){

var redo=this._redoList;



if(redo[0]){

this._removeCellEditingUI();

var action=redo.shift();

action.func();

this._redid=true;

this._renderTable();

};

};



/* wiki-table-row.js */





SimileWikiToolbox.WikiTableRow=function(rowText){

if(rowText==null){

this._row={

isHead:false,

cells:[]

};

}else{

this._row={

isHead:rowText.indexOf("!")>=0,

cells:[]

};



if(rowText.search("[a-z]")<rowText.indexOf("\n")){

var string=rowText.substring(rowText.search("[a-z]"),rowText.indexOf("\n"));

rowText=rowText.substr(rowText.indexOf("\n"));

this._row.settings=new SimileWikiToolbox.WikiTableRowSettings(string);

};



if(this._row.isHead){

if(rowText.indexOf("!!")>0){

var cellTexts=rowText.substr(2).split("!!");

}else{

var cellTexts=rowText.substr(2).split("\n!");

};

}else{

if(rowText.indexOf("||")>0){

var cellTexts=rowText.substr(2).split("||");

}else{

var cellTexts=rowText.substr(2).split("\n|");

};

};



for(var j=0;j<cellTexts.length;j++){

this._row.cells.push(new SimileWikiToolbox.WikiTableCell(cellTexts[j]));

};

};

};



SimileWikiToolbox.WikiTableRow.prototype.isHeaderRow=function(){

return this._row.isHead;

};



SimileWikiToolbox.WikiTableRow.prototype.setHeader=function(value){

this._row.isHead=value;

};



SimileWikiToolbox.WikiTableRow.prototype.getSettings=function(){

if(this._row.settings){

return this._row.settings;

};

};



SimileWikiToolbox.WikiTableRow.prototype.setSettings=function(text){

this._row.settings=new SimileWikiToolbox.WikiTableRowSettings(text);

};



SimileWikiToolbox.WikiTableRow.prototype.getCells=function(){

return this._row.cells;

};



SimileWikiToolbox.WikiTableRow.prototype.getCellCount=function(){

return this._row.cells.length;

};



SimileWikiToolbox.WikiTableRow.prototype.getCell=function(index){

return this._row.cells[index];

};



SimileWikiToolbox.WikiTableRow.prototype.insertCell=function(index){

if(index||index==0){

this._row.cells.splice(index,0,new SimileWikiToolbox.WikiTableCell("\n"));

}else{this._row.cells.push(new SimileWikiToolbox.WikiTableCell("\n"));};

};



SimileWikiToolbox.WikiTableRow.prototype.toWikiText=function(){

if(this.getSettings()!=null){

var setObj=this.getSettings();

var set=setObj.toWikiText();

}else{

var set="";

};

if(this.isHeaderRow()){

var headerArray=[];

for(var j=0;j<this.getCellCount();j++){

headerArray.push(this.getCell(j).toWikiText());

};

return"|-"+set+"\n!"+headerArray.join("!");

}else{

var rowArray=[];

for(var k=0;k<this.getCellCount();k++){

rowArray.push(this.getCell(k).toWikiText());

};

return"|-"+set+"\n|"+rowArray.join("|");

};

};

/* cell-settings.js */





SimileWikiToolbox.WikiTableCellSettings=function(settings){

this._cellSettings={settings:[]};



var settingsArr=settings.split(";");



for(i=0;i<settingsArr.length;i++){

this._cellSettings.settings.push(settingsArr[i]);

};

};



SimileWikiToolbox.WikiTableCellSettings.prototype.toWikiText=function(){

return this._cellSettings.settings.join(";");

};

/* row-settings.js */





SimileWikiToolbox.WikiTableRowSettings=function(settings){

this._rowSettings={settings:[]};



var settingsArr=settings.split(";");



for(i=0;i<settingsArr.length;i++){

this._rowSettings.settings.push(settingsArr[i]);

};

};



SimileWikiToolbox.WikiTableRowSettings.prototype.toWikiText=function(){

return this._rowSettings.settings.join(";");

};

/* table-settings.js */





SimileWikiToolbox.WikiTableSettings=function(settings){

this._tableSettings={settings:[]};



var settingsArr=settings.split(";");



for(i=0;i<settingsArr.length;i++){

this._tableSettings.settings.push(settingsArr[i]);

};

};



SimileWikiToolbox.WikiTableSettings.prototype.toWikiText=function(){

return this._tableSettings.settings.join(";");

};

/* wiki-table.js */





SimileWikiToolbox.WikiTable=function(tableText){

this._rows=[];

if(tableText){

if(tableText.indexOf("id=")>=0){

var start=tableText.indexOf("id=");

var idEnd=tableText.indexOf("\"",start+4);

var end=tableText.indexOf("\n");

var beginning=tableText.substring(2,start);

var ending=tableText.substring(idEnd+1,tableText.indexOf("\n"));

var settingStr=beginning.concat(ending);

}else if(tableText.search("[a-z]")<tableText.indexOf("\n")){

var start=2;

var end=tableText.indexOf("\n");

var settingStr=tableText.substring(start,end);

};



if(settingStr){

this._settings=new SimileWikiToolbox.WikiTableSettings(settingStr);

if(idEnd){

var rowTexts=tableText.substring(end+3,tableText.length-2).split("|-");

var idText=tableText.substring(start,idEnd+2)

rowTexts.unshift(idText);

}else{

var rowTexts=tableText.substring(end+3,tableText.length-2).split("|-");

};

}else{

var rowTexts=tableText.substring(2,tableText.length-2).split("|-");

};



this._tablePrologue=rowTexts[0];



for(var i=1;i<rowTexts.length;i++){

var row=new SimileWikiToolbox.WikiTableRow(rowTexts[i]);

this._rows.push(row);

};

}else{

this._rows.push(new SimileWikiToolbox.WikiTableRow());

};

};



SimileWikiToolbox.WikiTable.findTable=function(text,cursor){

var beforeCursor=text.substr(0,cursor);

var afterCursor=text.substr(cursor);



var tableStart=beforeCursor.lastIndexOf("{|");

if(tableStart<0){

tableStart=afterCursor.indexOf("{|");

if(tableStart>=0){

tableStart+=beforeCursor.length;

}else{

alert("No table to edit");

return;

}

}



var tableEnd=text.indexOf("|}");

if(tableEnd<0){

alert("Table has no end");

return;

}else{

tableEnd+=2;

}



return{tableStart:tableStart,tableEnd:tableEnd};

};



SimileWikiToolbox.WikiTable.parseTable=function(text,cursor){

var table=new SimileWikiToolbox.WikiTable(text);

var cursorRow=0;

var cursorCol=0;



return{

wikiTable:table,

cursorRow:cursorRow,

cursorCol:cursorCol

};

};



SimileWikiToolbox.WikiTable.prototype.getSettings=function(){

if(this._settings){

return this._settings;

};

};



SimileWikiToolbox.WikiTable.prototype.setSettings=function(text){

this._settings=new SimileWikiToolbox.WikiTableSettings(text);

};



SimileWikiToolbox.WikiTable.prototype.getRowCount=function(){

return this._rows.length;

};



SimileWikiToolbox.WikiTable.prototype.getColumnCount=function(){

return this._rows[0].getCellCount();

};



SimileWikiToolbox.WikiTable.prototype.getRow=function(rowIndex){

return this._rows[rowIndex];

};



SimileWikiToolbox.WikiTable.prototype.setHeaderRow=function(row){

for(var i=0;i<this.getRowCount();i++){

if(this.getRow(i).isHeaderRow){this.getRow(i).setHeader(false);};

};

row.setHeader(true);

};



SimileWikiToolbox.WikiTable.prototype.insertRow=function(index){

var newRow=new SimileWikiToolbox.WikiTableRow();

for(var i=0;i<this.getColumnCount();i++){

newRow.insertCell();

};

if(index==0){this.setHeaderRow(newRow);};

this._rows.splice(index,0,newRow);

};



SimileWikiToolbox.WikiTable.prototype.insertColumn=function(index){

for(var i=0;i<this.getRowCount();i++){

if(this.getRow(i).getCellCount()<index){

for(j=this.getRow(i).getCellCount();j<index+2;j++){

this.getRow(i).insertCell(j);

};

}else{this.getRow(i).insertCell(index);};

};

};



SimileWikiToolbox.WikiTable.prototype.moveRow=function(fromIndex,toIndex){

if(fromIndex==0){this.setHeaderRow(this.getRow(1));};

if(toIndex==0){this.setHeaderRow(this.getRow(fromIndex));};

var movingRow=this.getRow(fromIndex);

this._rows.splice(fromIndex,1);

this._rows.splice(toIndex,0,movingRow);

};



SimileWikiToolbox.WikiTable.prototype.moveColumn=function(fromIndex,toIndex){

for(var i=0;i<self.getRowCount();i++){

var movingCell=self.getRow(i).getCell(fromIndex);

self._rows[i]._row.cells.splice(fromIndex,1);

self._rows[i]._row.cells.splice(toIndex,0,movingCell);

};

};



SimileWikiToolbox.WikiTable.prototype.removeRow=function(index){

if(index==0){this.setHeaderRow(this.getRow(1));};

this._rows.splice(index,1);

};



SimileWikiToolbox.WikiTable.prototype.removeColumn=function(index){

for(var i=0;i<this.getRowCount();i++){

if(this.getRow(i).getCell(index)){

this._rows[i]._row.cells.splice(index,1);

};

};

};



SimileWikiToolbox.WikiTable.prototype.toWikiText=function(){

if(this.getSettings()!=null){

var setObj=this.getSettings();

var set=setObj.toWikiText()+" ";

}else{

var set="";

};

var arr=[];

for(var i=0;i<this.getRowCount();i++){

arr.push(this.getRow(i).toWikiText());

};

return"{|"+set+this._tablePrologue+arr.join("")+"|}";

};