564. File Comparison Report

Produced on Mon May 12 13:06:22 2008 UTC. This report uses XHTML and CSS2, and is best viewed with a reasonably standards compliant browser such as the latest version of Firefox or Internet Explorer. For optimum results when printing this report, use landscape orientation and enable printing of background images and colours in your browser.

564.1 Files compared

# Location File Last Modified
1 Dolphin-v.6.0.5\plugins\tiny_mce\plugins\table editor_plugin.js Thu Sep 20 08:59:04 2007 UTC
2 Dolphin-v.6.1.0\plugins\tiny_mce\plugins\table editor_plugin.js Thu Mar 27 13:53:26 2008 UTC

564.2 Comparison summary

Description Between
Files 1 and 2
Text Blocks Lines
Unchanged 0 0
Changed 1 2
Inserted 0 0
Removed 0 0

564.3 Comparison options

Whitespace
Character case Differences in character case are significant
Line endings Differences in line endings (CR and LF characters) are ignored
CR/LF characters Not shown in the comparison detail

564.4 Active regular expressions

No regular expressions were active.

564.5 Comparison detail

1   tinyMCE.im portPlugin LanguagePa ck('table' );var Tiny MCE_TableP lugin={get Info:funct ion(){retu rn{longnam e:'Tables' ,author:'M oxiecode S ystems AB' ,authorurl :'http://t inymce.mox iecode.com ',infourl: 'http://wi ki.moxieco de.com/ind ex.php/Tin yMCE:Plugi ns/table', version:ti nyMCE.majo rVersion+" ."+tinyMCE .minorVers ion}},init Instance:f unction(in st){if(tin yMCE.isGec ko){var do c=inst.get Doc();tiny MCE.addEve nt(doc,"mo useup",Tin yMCE_Table Plugin._mo useDownHan dler)}inst .tableRowC lipboard=n ull},getCo ntrolHTML: function(c ontrol_nam e){var con trols=new  Array(['ta ble','tabl e.gif','la ng_table_d esc','mceI nsertTable ',true],[' delete_tab le','table _delete.gi f','lang_t able_del', 'mceTableD elete'],[' delete_col ','table_d elete_col. gif','lang _table_del ete_col_de sc','mceTa bleDeleteC ol'],['del ete_row',' table_dele te_row.gif ','lang_ta ble_delete _row_desc' ,'mceTable DeleteRow' ],['col_af ter','tabl e_insert_c ol_after.g if','lang_ table_col_ after_desc ','mceTabl eInsertCol After'],[' col_before ','table_i nsert_col_ before.gif ','lang_ta ble_col_be fore_desc' ,'mceTable InsertColB efore'],[' row_after' ,'table_in sert_row_a fter.gif', 'lang_tabl e_row_afte r_desc','m ceTableIns ertRowAfte r'],['row_ before','t able_inser t_row_befo re.gif','l ang_table_ row_before _desc','mc eTableInse rtRowBefor e'],['row_ props','ta ble_row_pr ops.gif',' lang_table _row_desc' ,'mceTable RowProps', true],['ce ll_props', 'table_cel l_props.gi f','lang_t able_cell_ desc','mce TableCellP rops',true ],['split_ cells','ta ble_split_ cells.gif' ,'lang_tab le_split_c ells_desc' ,'mceTable SplitCells ',true],[' merge_cell s','table_ merge_cell s.gif','la ng_table_m erge_cells _desc','mc eTableMerg eCells',tr ue]);for(v ar i=0;i<c ontrols.le ngth;i++){ var but=co ntrols[i]; var cmd='t inyMCE.exe cInstanceC ommand(\'{ $editor_id }\',\''+bu t[3]+'\',  '+(but.len gth>4?but[ 4]:false)+ (but.lengt h>5?', \'' +but[5]+'\ '':'')+'); return fal se;';if(bu t[0]==cont rol_name)r eturn tiny MCE.getBut tonHTML(co ntrol_name ,but[2],'{ $pluginurl }/images/' +but[1],bu t[3],(but. length>4?b ut[4]:fals e))}if(con trol_name= ="tablecon trols"){va r html=""; html+=tiny MCE.getCon trolHTML(" table");ht ml+=tinyMC E.getContr olHTML("se parator"); html+=tiny MCE.getCon trolHTML(" row_props" );html+=ti nyMCE.getC ontrolHTML ("cell_pro ps");html+ =tinyMCE.g etControlH TML("separ ator");htm l+=tinyMCE .getContro lHTML("row _before"); html+=tiny MCE.getCon trolHTML(" row_after" );html+=ti nyMCE.getC ontrolHTML ("delete_r ow");html+ =tinyMCE.g etControlH TML("separ ator");htm l+=tinyMCE .getContro lHTML("col _before"); html+=tiny MCE.getCon trolHTML(" col_after" );html+=ti nyMCE.getC ontrolHTML ("delete_c ol");html+ =tinyMCE.g etControlH TML("separ ator");htm l+=tinyMCE .getContro lHTML("spl it_cells") ;html+=tin yMCE.getCo ntrolHTML( "merge_cel ls");retur n html}ret urn""},exe cCommand:f unction(ed itor_id,el ement,comm and,user_i nterface,v alue){swit ch(command ){case"mce InsertTabl e":case"mc eTableRowP rops":case "mceTableC ellProps": case"mceTa bleSplitCe lls":case" mceTableMe rgeCells": case"mceTa bleInsertR owBefore": case"mceTa bleInsertR owAfter":c ase"mceTab leDeleteRo w":case"mc eTableInse rtColBefor e":case"mc eTableInse rtColAfter ":case"mce TableDelet eCol":case "mceTableC utRow":cas e"mceTable CopyRow":c ase"mceTab lePasteRow Before":ca se"mceTabl ePasteRowA fter":case "mceTableD elete":var  inst=tiny MCE.getIns tanceById( editor_id) ;inst.exec Command('m ceBeginUnd oLevel');T inyMCE_Tab lePlugin._ doExecComm and(editor _id,elemen t,command, user_inter face,value );inst.exe cCommand(' mceEndUndo Level');re turn true} return fal se},handle NodeChange :function( editor_id, node,undo_ index,undo _levels,vi sual_aid,a ny_selecti on){var co lspan="1", rowspan="1 ",tdElm;va r inst=tin yMCE.getIn stanceById (editor_id );tinyMCE. switchClas s(editor_i d+'_table' ,'mceButto nNormal'); tinyMCE.sw itchClass( editor_id+ '_delete_t able','mce ButtonDisa bled');tin yMCE.switc hClass(edi tor_id+'_r ow_props', 'mceButton Disabled') ;tinyMCE.s witchClass (editor_id +'_cell_pr ops','mceB uttonDisab led');tiny MCE.switch Class(edit or_id+'_ro w_before', 'mceButton Disabled') ;tinyMCE.s witchClass (editor_id +'_row_aft er','mceBu ttonDisabl ed');tinyM CE.switchC lass(edito r_id+'_del ete_row',' mceButtonD isabled'); tinyMCE.sw itchClass( editor_id+ '_col_befo re','mceBu ttonDisabl ed');tinyM CE.switchC lass(edito r_id+'_col _after','m ceButtonDi sabled');t inyMCE.swi tchClass(e ditor_id+' _delete_co l','mceBut tonDisable d');tinyMC E.switchCl ass(editor _id+'_spli t_cells',' mceButtonD isabled'); tinyMCE.sw itchClass( editor_id+ '_merge_ce lls','mceB uttonDisab led');if(t dElm=tinyM CE.getPare ntElement( node,"td,t h")){tinyM CE.switchC lass(edito r_id+'_cel l_props',' mceButtonS elected'); tinyMCE.sw itchClass( editor_id+ '_delete_t able','mce ButtonNorm al');tinyM CE.switchC lass(edito r_id+'_row _before',' mceButtonN ormal');ti nyMCE.swit chClass(ed itor_id+'_ row_after' ,'mceButto nNormal'); tinyMCE.sw itchClass( editor_id+ '_delete_r ow','mceBu ttonNormal ');tinyMCE .switchCla ss(editor_ id+'_col_b efore','mc eButtonNor mal');tiny MCE.switch Class(edit or_id+'_co l_after',' mceButtonN ormal');ti nyMCE.swit chClass(ed itor_id+'_ delete_col ','mceButt onNormal') ;colspan=t inyMCE.get Attrib(tdE lm,"colspa n");rowspa n=tinyMCE. getAttrib( tdElm,"row span");col span=colsp an==""?"1" :colspan;r owspan=row span==""?" 1":rowspan ;if(colspa n!="1"||ro wspan!="1" )tinyMCE.s witchClass (editor_id +'_split_c ells','mce ButtonNorm al')}if(ti nyMCE.getP arentEleme nt(node,"t r"))tinyMC E.switchCl ass(editor _id+'_row_ props','mc eButtonSel ected');if (tinyMCE.g etParentEl ement(node ,"table")) {tinyMCE.s witchClass (editor_id +'_table', 'mceButton Selected') ;tinyMCE.s witchClass (editor_id +'_merge_c ells','mce ButtonNorm al')}},_mo useDownHan dler:funct ion(e){var  elm=tinyM CE.isMSIE? event.srcE lement:e.t arget;var  focusElm=t inyMCE.sel ectedInsta nce.getFoc usElement( );if(elm.n odeName==" BODY"&&(fo cusElm.nod eName=="TD "||focusEl m.nodeName =="TH"||(f ocusElm.pa rentNode&& focusElm.p arentNode. nodeName== "TD")||(fo cusElm.par entNode&&f ocusElm.pa rentNode.n odeName==" TH"))){win dow.setTim eout(funct ion(){var  tableElm=t inyMCE.get ParentElem ent(focusE lm,"table" );tinyMCE. handleVisu alAid(tabl eElm,true, tinyMCE.se ttings['vi sual'],tin yMCE.selec tedInstanc e)},10)}}, _doExecCom mand:funct ion(editor _id,elemen t,command, user_inter face,value ){var inst =tinyMCE.g etInstance ById(edito r_id);var  focusElm=i nst.getFoc usElement( );var trEl m=tinyMCE. getParentE lement(foc usElm,"tr" );var tdEl m=tinyMCE. getParentE lement(foc usElm,"td, th");var t ableElm=ti nyMCE.getP arentEleme nt(focusEl m,"table") ;var doc=i nst.conten tWindow.do cument;var  tableBord er=tableEl m?tableElm .getAttrib ute("borde r"):"";if( trElm&&tdE lm==null)t dElm=trElm .cells[0]; function i nArray(ar, v){for(var  i=0;i<ar. length;i++ ){if(ar[i] .length>0& &inArray(a r[i],v))re turn true; if(ar[i]== v)return t rue}return  false}fun ction make TD(){var n ewTD=doc.c reateEleme nt("td");n ewTD.inner HTML="&nbs p;"}functi on getColR owSpan(td) {var colsp an=tinyMCE .getAttrib (td,"colsp an");var r owspan=tin yMCE.getAt trib(td,"r owspan");c olspan=col span==""?1 :parseInt( colspan);r owspan=row span==""?1 :parseInt( rowspan);r eturn{cols pan:colspa n,rowspan: rowspan}}f unction ge tCellPos(g rid,td){va r x,y;for( y=0;y<grid .length;y+ +){for(x=0 ;x<grid[y] .length;x+ +){if(grid [y][x]==td )return{ce llindex:x, rowindex:y }}}return  null}funct ion getCel l(grid,row ,col){if(g rid[row]&& grid[row][ col])retur n grid[row ][col];ret urn null}f unction ge tTableGrid (table){va r grid=new  Array(),r ows=table. rows,x,y,t d,sd,xstar t,x2,y2;fo r(y=0;y<ro ws.length; y++){for(x =0;x<rows[ y].cells.l ength;x++) {td=rows[y ].cells[x] ;sd=getCol RowSpan(td );for(xsta rt=x;grid[ y]&&grid[y ][xstart]; xstart++); for(y2=y;y 2<y+sd['ro wspan'];y2 ++){if(!gr id[y2])gri d[y2]=new  Array();fo r(x2=xstar t;x2<xstar t+sd['cols pan'];x2++ )grid[y2][ x2]=td}}}r eturn grid }function  trimRow(ta ble,tr,td, new_tr){va r grid=get TableGrid( table),cpo s=getCellP os(grid,td );var cell s,lastElm; if(new_tr. cells.leng th!=tr.chi ldNodes.le ngth){cell s=tr.child Nodes;last Elm=null;f or(var x=0 ;td=getCel l(grid,cpo s.rowindex ,x);x++){v ar remove= true;var s d=getColRo wSpan(td); if(inArray (cells,td) ){new_tr.c hildNodes[ x]._delete =true}else  if((lastE lm==null|| td!=lastEl m)&&sd.col span>1){fo r(var i=x; i<x+td.col Span;i++)n ew_tr.chil dNodes[i]. _delete=tr ue}if((las tElm==null ||td!=last Elm)&&sd.r owspan>1)t d.rowSpan= sd.rowspan +1;lastElm =td}delete Marked(tab leElm)}}fu nction pre vElm(node, name){whil e((node=no de.previou sSibling)! =null){if( node.nodeN ame==name) return nod e}return n ull}functi on nextElm (node,name s){var nam esAr=names .split(',' );while((n ode=node.n extSibling )!=null){f or(var i=0 ;i<namesAr .length;i+ +){if(node .nodeName. toLowerCas e()==names Ar[i].toLo werCase()) return nod e}}return  null}funct ion delete Marked(tbl ){if(tbl.r ows==0)ret urn;var tr =tbl.rows[ 0];do{var  next=nextE lm(tr,"TR" );if(tr._d elete){tr. parentNode .removeChi ld(tr);con tinue}var  td=tr.cell s[0];if(td .cells>1){ do{var nex ttd=nextEl m(td,"TD,T H");if(td. _delete)td .parentNod e.removeCh ild(td)}wh ile((td=ne xttd)!=nul l)}}while( (tr=next)! =null)}fun ction addR ows(td_elm ,tr_elm,ro wspan){td_ elm.rowSpa n=1;var tr Next=nextE lm(tr_elm, "TR");for( var i=1;i< rowspan&&t rNext;i++) {var newTD =doc.creat eElement(" td");newTD .innerHTML ="&nbsp;"; if(tinyMCE .isMSIE)tr Next.inser tBefore(ne wTD,trNext .cells(td_ elm.cellIn dex));else  trNext.in sertBefore (newTD,trN ext.cells[ td_elm.cel lIndex]);t rNext=next Elm(trNext ,"TR")}}fu nction cop yRow(doc,t able,tr){v ar grid=ge tTableGrid (table);va r newTR=tr .cloneNode (false);va r cpos=get CellPos(gr id,tr.cell s[0]);var  lastCell=n ull;var ta bleBorder= tinyMCE.ge tAttrib(ta ble,"borde r");var td Elm=null;f or(var x=0 ;tdElm=get Cell(grid, cpos.rowin dex,x);x++ ){var newT D=null;if( lastCell!= tdElm){for (var i=0;i <tr.cells. length;i++ ){if(tdElm ==tr.cells [i]){newTD =tdElm.clo neNode(tru e);break}} }if(newTD= =null){new TD=doc.cre ateElement ("td");new TD.innerHT ML="&nbsp; "}newTD.co lSpan=1;ne wTD.rowSpa n=1;newTR. appendChil d(newTD);l astCell=td Elm}return  newTR}swi tch(comman d){case"mc eTableRowP rops":if(t rElm==null )return tr ue;if(user _interface ){var temp late=new A rray();tem plate['fil e']='../.. /plugins/t able/row.h tm';templa te['width' ]=380;temp late['heig ht']=295;t emplate['w idth']+=ti nyMCE.getL ang('lang_ table_rowp rops_delta _width',0) ;template[ 'height']+ =tinyMCE.g etLang('la ng_table_r owprops_de lta_height ',0);tinyM CE.openWin dow(templa te,{editor _id:inst.e ditorId,in line:"yes" })}return  true;case" mceTableCe llProps":i f(tdElm==n ull)return  true;if(u ser_interf ace){var t emplate=ne w Array(); template[' file']='.. /../plugin s/table/ce ll.htm';te mplate['wi dth']=380; template[' height']=2 95;templat e['width'] +=tinyMCE. getLang('l ang_table_ cellprops_ delta_widt h',0);temp late['heig ht']+=tiny MCE.getLan g('lang_ta ble_cellpr ops_delta_ height',0) ;tinyMCE.o penWindow( template,{ editor_id: inst.edito rId,inline :"yes"})}r eturn true ;case"mceI nsertTable ":if(user_ interface) {var templ ate=new Ar ray();temp late['file ']='../../ plugins/ta ble/table. htm';templ ate['width ']=380;tem plate['hei ght']=295; template[' width']+=t inyMCE.get Lang('lang _table_tab le_delta_w idth',0);t emplate['h eight']+=t inyMCE.get Lang('lang _table_tab le_delta_h eight',0); tinyMCE.op enWindow(t emplate,{e ditor_id:i nst.editor Id,inline: "yes",acti on:value}) }return tr ue;case"mc eTableDele te":var ta ble=tinyMC E.getParen tElement(i nst.getFoc usElement( ),"table") ;if(table) {table.par entNode.re moveChild( table);ins t.repaint( )}return t rue;case"m ceTableSpl itCells":c ase"mceTab leMergeCel ls":case"m ceTableIns ertRowBefo re":case"m ceTableIns ertRowAfte r":case"mc eTableDele teRow":cas e"mceTable InsertColB efore":cas e"mceTable InsertColA fter":case "mceTableD eleteCol": case"mceTa bleCutRow" :case"mceT ableCopyRo w":case"mc eTablePast eRowBefore ":case"mce TablePaste RowAfter": if(!tableE lm)return  true;if(tr Elm&&table Elm!=trElm .parentNod e)tableElm =trElm.par entNode;if (tableElm& &trElm){sw itch(comma nd){case"m ceTableCut Row":if(!t rElm||!tdE lm)return  true;inst. tableRowCl ipboard=co pyRow(doc, tableElm,t rElm);inst .execComma nd("mceTab leDeleteRo w");break; case"mceTa bleCopyRow ":if(!trEl m||!tdElm) return tru e;inst.tab leRowClipb oard=copyR ow(doc,tab leElm,trEl m);break;c ase"mceTab lePasteRow Before":if (!trElm||! tdElm)retu rn true;va r newTR=in st.tableRo wClipboard .cloneNode (true);var  prevTR=pr evElm(trEl m,"TR");if (prevTR!=n ull)trimRo w(tableElm ,prevTR,pr evTR.cells [0],newTR) ;trElm.par entNode.in sertBefore (newTR,trE lm);break; case"mceTa blePasteRo wAfter":if (!trElm||! tdElm)retu rn true;va r nextTR=n extElm(trE lm,"TR");v ar newTR=i nst.tableR owClipboar d.cloneNod e(true);tr imRow(tabl eElm,trElm ,tdElm,new TR);if(nex tTR==null) trElm.pare ntNode.app endChild(n ewTR);else  nextTR.pa rentNode.i nsertBefor e(newTR,ne xtTR);brea k;case"mce TableInser tRowBefore ":if(!trEl m||!tdElm) return tru e;var grid =getTableG rid(tableE lm);var cp os=getCell Pos(grid,t dElm);var  newTR=doc. createElem ent("tr"); var lastTD Elm=null;c pos.rowind ex--;if(cp os.rowinde x<0)cpos.r owindex=0; for(var x= 0;tdElm=ge tCell(grid ,cpos.rowi ndex,x);x+ +){if(tdEl m!=lastTDE lm){var sd =getColRow Span(tdElm );if(sd['r owspan']== 1){var new TD=doc.cre ateElement ("td");new TD.innerHT ML="&nbsp; ";newTD.co lSpan=tdEl m.colSpan; newTR.appe ndChild(ne wTD)}else  tdElm.rowS pan=sd['ro wspan']+1; lastTDElm= tdElm}}trE lm.parentN ode.insert Before(new TR,trElm); grid=getTa bleGrid(ta bleElm);in st.selecti on.selectN ode(getCel l(grid,cpo s.rowindex +1,cpos.ce llindex),t inyMCE.isG ecko,true) ;break;cas e"mceTable InsertRowA fter":if(! trElm||!td Elm)return  true;var  grid=getTa bleGrid(ta bleElm);va r cpos=get CellPos(gr id,tdElm); var newTR= doc.create Element("t r");var la stTDElm=nu ll;for(var  x=0;tdElm =getCell(g rid,cpos.r owindex,x) ;x++){if(t dElm!=last TDElm){var  sd=getCol RowSpan(td Elm);if(sd ['rowspan' ]==1){var  newTD=doc. createElem ent("td"); newTD.inne rHTML="&nb sp;";newTD .colSpan=t dElm.colSp an;newTR.a ppendChild (newTD)}el se tdElm.r owSpan=sd[ 'rowspan'] +1;lastTDE lm=tdElm}} if(newTR.h asChildNod es()){var  nextTR=nex tElm(trElm ,"TR");if( nextTR)nex tTR.parent Node.inser tBefore(ne wTR,nextTR );else tab leElm.appe ndChild(ne wTR)}grid= getTableGr id(tableEl m);inst.se lection.se lectNode(g etCell(gri d,cpos.row index,cpos .cellindex ),tinyMCE. isGecko,tr ue);break; case"mceTa bleDeleteR ow":if(!tr Elm||!tdEl m)return t rue;var gr id=getTabl eGrid(tabl eElm);var  cpos=getCe llPos(grid ,tdElm);if (grid.leng th==1){tab leElm=tiny MCE.getPar entElement (tableElm, "table");t ableElm.pa rentNode.r emoveChild (tableElm) ;return tr ue}var cel ls=trElm.c ells;var n extTR=next Elm(trElm, "TR");for( var x=0;x< cells.leng th;x++){if (cells[x]. rowSpan>1) {var newTD =cells[x]. cloneNode( true);var  sd=getColR owSpan(cel ls[x]);new TD.rowSpan =sd.rowspa n-1;var ne xtTD=nextT R.cells[x] ;if(nextTD ==null)nex tTR.append Child(newT D);else ne xtTR.inser tBefore(ne wTD,nextTD )}}var las tTDElm=nul l;for(var  x=0;tdElm= getCell(gr id,cpos.ro windex,x); x++){if(td Elm!=lastT DElm){var  sd=getColR owSpan(tdE lm);if(sd. rowspan>1) {tdElm.row Span=sd.ro wspan-1}el se{trElm=t dElm.paren tNode;if(t rElm.paren tNode)trEl m._delete= true}lastT DElm=tdElm }}deleteMa rked(table Elm);cpos. rowindex-- ;if(cpos.r owindex<0) cpos.rowin dex=0;grid =getTableG rid(tableE lm);inst.s election.s electNode( getCell(gr id,cpos.ro windex,0), tinyMCE.is Gecko,true );break;ca se"mceTabl eInsertCol Before":if (!trElm||! tdElm)retu rn true;va r grid=get TableGrid( tableElm); var cpos=g etCellPos( grid,tdElm );var last TDElm=null ;for(var y =0;tdElm=g etCell(gri d,y,cpos.c ellindex); y++){if(td Elm!=lastT DElm){var  sd=getColR owSpan(tdE lm);if(sd[ 'colspan'] ==1){var n ewTD=doc.c reateEleme nt(tdElm.n odeName);n ewTD.inner HTML="&nbs p;";newTD. rowSpan=td Elm.rowSpa n;tdElm.pa rentNode.i nsertBefor e(newTD,td Elm)}else  tdElm.colS pan++;last TDElm=tdEl m}}grid=ge tTableGrid (tableElm) ;inst.sele ction.sele ctNode(get Cell(grid, cpos.rowin dex,cpos.c ellindex+1 ),tinyMCE. isGecko,tr ue);break; case"mceTa bleInsertC olAfter":i f(!trElm|| !tdElm)ret urn true;v ar grid=ge tTableGrid (tableElm) ;var cpos= getCellPos (grid,tdEl m);var las tTDElm=nul l;for(var  y=0;tdElm= getCell(gr id,y,cpos. cellindex) ;y++){if(t dElm!=last TDElm){var  sd=getCol RowSpan(td Elm);if(sd ['colspan' ]==1){var  newTD=doc. createElem ent(tdElm. nodeName); newTD.inne rHTML="&nb sp;";newTD .rowSpan=t dElm.rowSp an;var nex tTD=nextEl m(tdElm,"T D,TH");if( nextTD==nu ll)tdElm.p arentNode. appendChil d(newTD);e lse nextTD .parentNod e.insertBe fore(newTD ,nextTD)}e lse tdElm. colSpan++; lastTDElm= tdElm}}gri d=getTable Grid(table Elm);inst. selection. selectNode (getCell(g rid,cpos.r owindex,cp os.cellind ex),tinyMC E.isGecko, true);brea k;case"mce TableDelet eCol":if(! trElm||!td Elm)return  true;var  grid=getTa bleGrid(ta bleElm);va r cpos=get CellPos(gr id,tdElm); var lastTD Elm=null;i f(grid.len gth>1&&gri d[0].lengt h<=1){tabl eElm=tinyM CE.getPare ntElement( tableElm," table");ta bleElm.par entNode.re moveChild( tableElm); return tru e}for(var  y=0;tdElm= getCell(gr id,y,cpos. cellindex) ;y++){if(t dElm!=last TDElm){var  sd=getCol RowSpan(td Elm);if(sd ['colspan' ]>1)tdElm. colSpan=sd ['colspan' ]-1;else{i f(tdElm.pa rentNode)t dElm.paren tNode.remo veChild(td Elm)}lastT DElm=tdElm }}cpos.cel lindex--;i f(cpos.cel lindex<0)c pos.cellin dex=0;grid =getTableG rid(tableE lm);inst.s election.s electNode( getCell(gr id,cpos.ro windex,0), tinyMCE.is Gecko,true );break;ca se"mceTabl eSplitCell s":if(!trE lm||!tdElm )return tr ue;var spa ndata=getC olRowSpan( tdElm);var  colspan=s pandata["c olspan"];v ar rowspan =spandata[ "rowspan"] ;if(colspa n>1||rowsp an>1){tdEl m.colSpan= 1;for(var  i=1;i<cols pan;i++){v ar newTD=d oc.createE lement("td ");newTD.i nnerHTML=" &nbsp;";tr Elm.insert Before(new TD,nextElm (tdElm,"TD ,TH"));if( rowspan>1) addRows(ne wTD,trElm, rowspan)}a ddRows(tdE lm,trElm,r owspan)}ta bleElm=tin yMCE.getPa rentElemen t(inst.get FocusEleme nt(),"tabl e");break; case"mceTa bleMergeCe lls":var r ows=new Ar ray();var  sel=inst.g etSel();va r grid=get TableGrid( tableElm); if(tinyMCE .isMSIE||s el.rangeCo unt==1){if (user_inte rface){var  template= new Array( );var sp=g etColRowSp an(tdElm); template[' file']='.. /../plugin s/table/me rge_cells. htm';templ ate['width ']=250;tem plate['hei ght']=105+ (tinyMCE.i sNS7?25:0) ;template[ 'width']+= tinyMCE.ge tLang('lan g_table_me rge_cells_ delta_widt h',0);temp late['heig ht']+=tiny MCE.getLan g('lang_ta ble_merge_ cells_delt a_height', 0);tinyMCE .openWindo w(template ,{editor_i d:inst.edi torId,inli ne:"yes",a ction:"upd ate",numco ls:sp.cols pan,numrow s:sp.rowsp an});retur n true}els e{var numR ows=parseI nt(value[' numrows']) ;var numCo ls=parseIn t(value['n umcols']); var cpos=g etCellPos( grid,tdElm );if((""+n umRows)==" NaN")numRo ws=1;if((" "+numCols) =="NaN")nu mCols=1;va r tRows=ta bleElm.row s;for(var  y=cpos.row index;y<gr id.length; y++){var r owCells=ne w Array(); for(var x= cpos.celli ndex;x<gri d[y].lengt h;x++){var  td=getCel l(grid,y,x );if(td&&! inArray(ro ws,td)&&!i nArray(row Cells,td)) {var cp=ge tCellPos(g rid,td);if (cp.cellin dex<cpos.c ellindex+n umCols&&cp .rowindex< cpos.rowin dex+numRow s)rowCells [rowCells. length]=td }}if(rowCe lls.length >0)rows[ro ws.length] =rowCells} }}else{var  cells=new  Array();v ar sel=ins t.getSel() ;var lastT R=null;var  curRow=nu ll;var x1= -1,y1=-1,x 2,y2;if(se l.rangeCou nt<2)retur n true;for (var i=0;i <sel.range Count;i++) {var rng=s el.getRang eAt(i);var  tdElm=rng .startCont ainer.chil dNodes[rng .startOffs et];if(!td Elm)break; if(tdElm.n odeName==" TD")cells[ cells.leng th]=tdElm} var tRows= tableElm.r ows;for(va r y=0;y<tR ows.length ;y++){var  rowCells=n ew Array() ;for(var x =0;x<tRows [y].cells. length;x++ ){var td=t Rows[y].ce lls[x];for (var i=0;i <cells.len gth;i++){i f(td==cell s[i]){rowC ells[rowCe lls.length ]=td}}}if( rowCells.l ength>0)ro ws[rows.le ngth]=rowC ells}var c urRow=new  Array();va r lastTR=n ull;for(va r y=0;y<gr id.length; y++){for(v ar x=0;x<g rid[y].len gth;x++){g rid[y][x]. _selected= false;for( var i=0;i< cells.leng th;i++){if (grid[y][x ]==cells[i ]){if(x1== -1){x1=x;y 1=y}x2=x;y 2=y;grid[y ][x]._sele cted=true} }}}for(var  y=y1;y<=y 2;y++){for (var x=x1; x<=x2;x++) {if(!grid[ y][x]._sel ected){ale rt("Invali d selectio n for merg e.");retur n true}}}} var rowSpa n=1,colSpa n=1;var la stRowSpan= -1;for(var  y=0;y<row s.length;y ++){var ro wColSpan=0 ;for(var x =0;x<rows[ y].length; x++){var s d=getColRo wSpan(rows [y][x]);ro wColSpan+= sd['colspa n'];if(las tRowSpan!= -1&&sd['ro wspan']!=l astRowSpan ){alert("I nvalid sel ection for  merge."); return tru e}lastRowS pan=sd['ro wspan']}if (rowColSpa n>colSpan) colSpan=ro wColSpan;l astRowSpan =-1}var la stColSpan= -1;for(var  x=0;x<row s[0].lengt h;x++){var  colRowSpa n=0;for(va r y=0;y<ro ws.length; y++){var s d=getColRo wSpan(rows [y][x]);co lRowSpan+= sd['rowspa n'];if(las tColSpan!= -1&&sd['co lspan']!=l astColSpan ){alert("I nvalid sel ection for  merge."); return tru e}lastColS pan=sd['co lspan']}if (colRowSpa n>rowSpan) rowSpan=co lRowSpan;l astColSpan =-1}tdElm= rows[0][0] ;tdElm.row Span=rowSp an;tdElm.c olSpan=col Span;for(v ar y=0;y<r ows.length ;y++){for( var x=0;x< rows[y].le ngth;x++){ var html=r ows[y][x]. innerHTML; var chk=ti nyMCE.rege xpReplace( html,"[ \t \r\n]","") ;if(chk!=" <br/>"&&ch k!="<br>"& &chk!="&nb sp;"&&(x+y >0))tdElm. innerHTML+ =html;if(r ows[y][x]! =tdElm&&!r ows[y][x]. _deleted){ var cpos=g etCellPos( grid,rows[ y][x]);var  tr=rows[y ][x].paren tNode;tr.r emoveChild (rows[y][x ]);rows[y] [x]._delet ed=true;if (!tr.hasCh ildNodes() ){tr.paren tNode.remo veChild(tr );var last Cell=null; for(var x= 0;cellElm= getCell(gr id,cpos.ro windex,x); x++){if(ce llElm!=las tCell&&cel lElm.rowSp an>1)cellE lm.rowSpan --;lastCel l=cellElm} if(tdElm.r owSpan>1)t dElm.rowSp an--}}}}br eak}tableE lm=tinyMCE .getParent Element(in st.getFocu sElement() ,"table"); tinyMCE.ha ndleVisual Aid(tableE lm,true,ti nyMCE.sett ings['visu al'],tinyM CE.selecte dInstance) ;tinyMCE.t riggerNode Change();i nst.repain t()}return  true}retu rn false}} ;tinyMCE.a ddPlugin(" table",Tin yMCE_Table Plugin);   1   (function( ){var each =tinymce.e ach;tinymc e.create(' tinymce.pl ugins.Tabl ePlugin',{ init:funct ion(ed,url ){var t=th is;t.edito r=ed;t.url =url;each( [['table', 'table.des c','mceIns ertTable', true],['de lete_table ','table.d el','mceTa bleDelete' ],['delete _col','tab le.delete_ col_desc', 'mceTableD eleteCol'] ,['delete_ row','tabl e.delete_r ow_desc',' mceTableDe leteRow'], ['col_afte r','table. col_after_ desc','mce TableInser tColAfter' ],['col_be fore','tab le.col_bef ore_desc', 'mceTableI nsertColBe fore'],['r ow_after', 'table.row _after_des c','mceTab leInsertRo wAfter'],[ 'row_befor e','table. row_before _desc','mc eTableInse rtRowBefor e'],['row_ props','ta ble.row_de sc','mceTa bleRowProp s',true],[ 'cell_prop s','table. cell_desc' ,'mceTable CellProps' ,true],['s plit_cells ','table.s plit_cells _desc','mc eTableSpli tCells',tr ue],['merg e_cells',' table.merg e_cells_de sc','mceTa bleMergeCe lls',true] ],function (c){ed.add Button(c[0 ],{title:c [1],cmd:c[ 2],ui:c[3] });});ed.o nInit.add( function() {if(ed&&ed .plugins.c ontextmenu ){ed.plugi ns.context menu.onCon textMenu.a dd(functio n(th,m,e){ var sm;if( ed.dom.get Parent(e,' td')||ed.d om.getPare nt(e,'th') ){m.remove All();m.ad d({title:' table.desc ',icon:'ta ble',cmd:' mceInsertT able',ui:t rue,value: {action:'i nsert'}}); m.add({tit le:'table. props_desc ',icon:'ta ble_props' ,cmd:'mceI nsertTable ',ui:true} );m.add({t itle:'tabl e.del',ico n:'delete_ table',cmd :'mceTable Delete',ui :true});m. addSeparat or();sm=m. addMenu({t itle:'tabl e.cell'}); sm.add({ti tle:'table .cell_desc ',icon:'ce ll_props', cmd:'mceTa bleCellPro ps',ui:tru e});sm.add ({title:'t able.split _cells_des c',icon:'s plit_cells ',cmd:'mce TableSplit Cells',ui: true});sm. add({title :'table.me rge_cells_ desc',icon :'merge_ce lls',cmd:' mceTableMe rgeCells', ui:true}); sm=m.addMe nu({title: 'table.row '});sm.add ({title:'t able.row_d esc',icon: 'row_props ',cmd:'mce TableRowPr ops',ui:tr ue});sm.ad d({title:' table.row_ before_des c',icon:'r ow_before' ,cmd:'mceT ableInsert RowBefore' });sm.add( {title:'ta ble.row_af ter_desc', icon:'row_ after',cmd :'mceTable InsertRowA fter'});sm .add({titl e:'table.d elete_row_ desc',icon :'delete_r ow',cmd:'m ceTableDel eteRow'}); sm.addSepa rator();sm .add({titl e:'table.c ut_row_des c',icon:'c ut',cmd:'m ceTableCut Row'});sm. add({title :'table.co py_row_des c',icon:'c opy',cmd:' mceTableCo pyRow'});s m.add({tit le:'table. paste_row_ before_des c',icon:'p aste',cmd: 'mceTableP asteRowBef ore'});sm. add({title :'table.pa ste_row_af ter_desc', icon:'past e',cmd:'mc eTablePast eRowAfter' });sm=m.ad dMenu({tit le:'table. col'});sm. add({title :'table.co l_before_d esc',icon: 'col_befor e',cmd:'mc eTableInse rtColBefor e'});sm.ad d({title:' table.col_ after_desc ',icon:'co l_after',c md:'mceTab leInsertCo lAfter'}); sm.add({ti tle:'table .delete_co l_desc',ic on:'delete _col',cmd: 'mceTableD eleteCol'} );}else m. add({title :'table.de sc',icon:' table',cmd :'mceInser tTable',ui :true});}) ;}});if(ti nymce.isGe cko){ed.on KeyPress.a dd(functio n(ed,e){va r n;if(e.k eyCode==46 ){n=ed.dom .getParent (ed.select ion.getNod e(),'TD,TH ');if(n&&( !n.hasChil dNodes()|| (n.childNo des.length ==1&&n.fir stChild.no deName=='B R')))tinym ce.dom.Eve nt.cancel( e);}});}ed .onKeyDown .add(funct ion(ed,e){ if(e.keyCo de==9&&ed. dom.getPar ent(ed.sel ection.get Node(),'TA BLE'))ed.u ndoManager .add();}); ed.onNodeC hange.add( function(e d,cm,n){va r p=ed.dom .getParent (n,'td,th, caption'); cm.setActi ve('table' ,!!p);if(p &&p.nodeNa me==='CAPT ION')p=nul l;cm.setDi sabled('de lete_table ',!p);cm.s etDisabled ('delete_c ol',!p);cm .setDisabl ed('delete _table',!p );cm.setDi sabled('de lete_row', !p);cm.set Disabled(' col_after' ,!p);cm.se tDisabled( 'col_befor e',!p);cm. setDisable d('row_aft er',!p);cm .setDisabl ed('row_be fore',!p); cm.setDisa bled('row_ props',!p) ;cm.setDis abled('cel l_props',! p);cm.setD isabled('s plit_cells ',!p||(par seInt(ed.d om.getAttr ib(p,'cols pan','1')) <2&&parseI nt(ed.dom. getAttrib( p,'rowspan ','1'))<2) );cm.setDi sabled('me rge_cells' ,!p);});}, execComman d:function (cmd,ui,va l){var ed= this.edito r,b;switch (cmd){case "mceInsert Table":cas e"mceTable RowProps": case"mceTa bleCellPro ps":case"m ceTableSpl itCells":c ase"mceTab leMergeCel ls":case"m ceTableIns ertRowBefo re":case"m ceTableIns ertRowAfte r":case"mc eTableDele teRow":cas e"mceTable InsertColB efore":cas e"mceTable InsertColA fter":case "mceTableD eleteCol": case"mceTa bleCutRow" :case"mceT ableCopyRo w":case"mc eTablePast eRowBefore ":case"mce TablePaste RowAfter": case"mceTa bleDelete" :ed.execCo mmand('mce BeginUndoL evel');thi s._doExecC ommand(cmd ,ui,val);e d.execComm and('mceEn dUndoLevel ');return  true;}retu rn false;} ,getInfo:f unction(){ return{lon gname:'Tab les',autho r:'Moxieco de Systems  AB',autho rurl:'http ://tinymce .moxiecode .com',info url:'http: //wiki.mox iecode.com /index.php /TinyMCE:P lugins/tab le',versio n:tinymce. majorVersi on+"."+tin ymce.minor Version};} ,_doExecCo mmand:func tion(comma nd,user_in terface,va lue){var i nst=this.e ditor,ed=i nst,url=th is.url;var  focusElm= inst.selec tion.getNo de();var t rElm=inst. dom.getPar ent(focusE lm,"tr");v ar tdElm=i nst.dom.ge tParent(fo cusElm,"td ,th");var  tableElm=i nst.dom.ge tParent(fo cusElm,"ta ble");var  doc=inst.c ontentWind ow.documen t;var tabl eBorder=ta bleElm?tab leElm.getA ttribute(" border"):" ";if(trElm &&tdElm==n ull)tdElm= trElm.cell s[0];funct ion inArra y(ar,v){fo r(var i=0; i<ar.lengt h;i++){if( ar[i].leng th>0&&inAr ray(ar[i], v))return  true;if(ar [i]==v)ret urn true;} return fal se;}functi on select( dx,dy){var  td;grid=g etTableGri d(tableElm );dx=dx||0 ;dy=dy||0; dx=Math.ma x(cpos.cel lindex+dx, 0);dy=Math .max(cpos. rowindex+d y,0);inst. execComman d('mceRepa int');td=g etCell(gri d,dy,dx);i f(td){inst .selection .select(td .firstChil d||td);ins t.selectio n.collapse (1);}};fun ction make TD(){var n ewTD=doc.c reateEleme nt("td");i f(!tinymce .isIE)newT D.innerHTM L='<br mce _bogus="1" />';}funct ion getCol RowSpan(td ){var cols pan=inst.d om.getAttr ib(td,"col span");var  rowspan=i nst.dom.ge tAttrib(td ,"rowspan" );colspan= colspan==" "?1:parseI nt(colspan );rowspan= rowspan==" "?1:parseI nt(rowspan );return{c olspan:col span,rowsp an:rowspan };}functio n getCellP os(grid,td ){var x,y; for(y=0;y< grid.lengt h;y++){for (x=0;x<gri d[y].lengt h;x++){if( grid[y][x] ==td)retur n{cellinde x:x,rowind ex:y};}}re turn null; }function  getCell(gr id,row,col ){if(grid[ row]&&grid [row][col] )return gr id[row][co l];return  null;}func tion getTa bleGrid(ta ble){var g rid=[],row s=table.ro ws,x,y,td, sd,xstart, x2,y2;for( y=0;y<rows .length;y+ +){for(x=0 ;x<rows[y] .cells.len gth;x++){t d=rows[y]. cells[x];s d=getColRo wSpan(td); for(xstart =x;grid[y] &&grid[y][ xstart];xs tart++);fo r(y2=y;y2< y+sd['rows pan'];y2++ ){if(!grid [y2])grid[ y2]=[];for (x2=xstart ;x2<xstart +sd['colsp an'];x2++) grid[y2][x 2]=td;}}}r eturn grid ;}function  trimRow(t able,tr,td ,new_tr){v ar grid=ge tTableGrid (table),cp os=getCell Pos(grid,t d);var cel ls,lastElm ;if(new_tr .cells.len gth!=tr.ch ildNodes.l ength){cel ls=tr.chil dNodes;las tElm=null; for(var x= 0;td=getCe ll(grid,cp os.rowinde x,x);x++){ var remove =true;var  sd=getColR owSpan(td) ;if(inArra y(cells,td )){new_tr. childNodes [x]._delet e=true;}el se if((las tElm==null ||td!=last Elm)&&sd.c olspan>1){ for(var i= x;i<x+td.c olSpan;i++ )new_tr.ch ildNodes[i ]._delete= true;}if(( lastElm==n ull||td!=l astElm)&&s d.rowspan> 1)td.rowSp an=sd.rows pan+1;last Elm=td;}de leteMarked (tableElm) ;}}functio n prevElm( node,name) {while((no de=node.pr eviousSibl ing)!=null ){if(node. nodeName== name)retur n node;}re turn null; }function  nextElm(no de,names){ var namesA r=names.sp lit(',');w hile((node =node.next Sibling)!= null){for( var i=0;i< namesAr.le ngth;i++){ if(node.no deName.toL owerCase() ==namesAr[ i].toLower Case())ret urn node;} }return nu ll;}functi on deleteM arked(tbl) {if(tbl.ro ws==0)retu rn;var tr= tbl.rows[0 ];do{var n ext=nextEl m(tr,"TR") ;if(tr._de lete){tr.p arentNode. removeChil d(tr);cont inue;}var  td=tr.cell s[0];if(td .cells>1){ do{var nex ttd=nextEl m(td,"TD,T H");if(td. _delete)td .parentNod e.removeCh ild(td);}w hile((td=n exttd)!=nu ll);}}whil e((tr=next )!=null);} function a ddRows(td_ elm,tr_elm ,rowspan){ td_elm.row Span=1;var  trNext=ne xtElm(tr_e lm,"TR");f or(var i=1 ;i<rowspan &&trNext;i ++){var ne wTD=doc.cr eateElemen t("td");if (!tinymce. isIE)newTD .innerHTML ='<br mce_ bogus="1"/ >';if(tiny mce.isIE)t rNext.inse rtBefore(n ewTD,trNex t.cells(td _elm.cellI ndex));els e trNext.i nsertBefor e(newTD,tr Next.cells [td_elm.ce llIndex]); trNext=nex tElm(trNex t,"TR");}} function c opyRow(doc ,table,tr) {var grid= getTableGr id(table); var newTR= tr.cloneNo de(false); var cpos=g etCellPos( grid,tr.ce lls[0]);va r lastCell =null;var  tableBorde r=inst.dom .getAttrib (table,"bo rder");var  tdElm=nul l;for(var  x=0;tdElm= getCell(gr id,cpos.ro windex,x); x++){var n ewTD=null; if(lastCel l!=tdElm){ for(var i= 0;i<tr.cel ls.length; i++){if(td Elm==tr.ce lls[i]){ne wTD=tdElm. cloneNode( true);brea k;}}}if(ne wTD==null) {newTD=doc .createEle ment("td") ;if(!tinym ce.isIE)ne wTD.innerH TML='<br m ce_bogus=" 1"/>';}new TD.colSpan =1;newTD.r owSpan=1;n ewTR.appen dChild(new TD);lastCe ll=tdElm;} return new TR;}switch (command){ case"mceTa bleRowProp s":if(trEl m==null)re turn true; if(user_in terface){i nst.window Manager.op en({url:ur l+'/row.ht m',width:4 00+parseIn t(inst.get Lang('tabl e.rowprops _delta_wid th',0)),he ight:295+p arseInt(in st.getLang ('table.ro wprops_del ta_height' ,0)),inlin e:1},{plug in_url:url });}return  true;case "mceTableC ellProps": if(tdElm== null)retur n true;if( user_inter face){inst .windowMan ager.open( {url:url+' /cell.htm' ,width:400 +parseInt( inst.getLa ng('table. cellprops_ delta_widt h',0)),hei ght:295+pa rseInt(ins t.getLang( 'table.cel lprops_del ta_height' ,0)),inlin e:1},{plug in_url:url });}return  true;case "mceInsert Table":if( user_inter face){inst .windowMan ager.open( {url:url+' /table.htm ',width:40 0+parseInt (inst.getL ang('table .table_del ta_width', 0)),height :320+parse Int(inst.g etLang('ta ble.table_ delta_heig ht',0)),in line:1},{p lugin_url: url,action :value?val ue.action: 0});}retur n true;cas e"mceTable Delete":va r table=in st.dom.get Parent(ins t.selectio n.getNode( ),"table") ;if(table) {table.par entNode.re moveChild( table);ins t.execComm and('mceRe paint');}r eturn true ;case"mceT ableSplitC ells":case "mceTableM ergeCells" :case"mceT ableInsert RowBefore" :case"mceT ableInsert RowAfter": case"mceTa bleDeleteR ow":case"m ceTableIns ertColBefo re":case"m ceTableIns ertColAfte r":case"mc eTableDele teCol":cas e"mceTable CutRow":ca se"mceTabl eCopyRow": case"mceTa blePasteRo wBefore":c ase"mceTab lePasteRow After":if( !tableElm) return tru e;if(trElm &&tableElm !=trElm.pa rentNode)t ableElm=tr Elm.parent Node;if(ta bleElm&&tr Elm){switc h(command) {case"mceT ableCutRow ":if(!trEl m||!tdElm) return tru e;inst.tab leRowClipb oard=copyR ow(doc,tab leElm,trEl m);inst.ex ecCommand( "mceTableD eleteRow") ;break;cas e"mceTable CopyRow":i f(!trElm|| !tdElm)ret urn true;i nst.tableR owClipboar d=copyRow( doc,tableE lm,trElm); break;case "mceTableP asteRowBef ore":if(!t rElm||!tdE lm)return  true;var n ewTR=inst. tableRowCl ipboard.cl oneNode(tr ue);var pr evTR=prevE lm(trElm," TR");if(pr evTR!=null )trimRow(t ableElm,pr evTR,prevT R.cells[0] ,newTR);tr Elm.parent Node.inser tBefore(ne wTR,trElm) ;break;cas e"mceTable PasteRowAf ter":if(!t rElm||!tdE lm)return  true;var n extTR=next Elm(trElm, "TR");var  newTR=inst .tableRowC lipboard.c loneNode(t rue);trimR ow(tableEl m,trElm,td Elm,newTR) ;if(nextTR ==null)trE lm.parentN ode.append Child(newT R);else ne xtTR.paren tNode.inse rtBefore(n ewTR,nextT R);break;c ase"mceTab leInsertRo wBefore":i f(!trElm|| !tdElm)ret urn true;v ar grid=ge tTableGrid (tableElm) ;var cpos= getCellPos (grid,tdEl m);var new TR=doc.cre ateElement ("tr");var  lastTDElm =null;cpos .rowindex- -;if(cpos. rowindex<0 )cpos.rowi ndex=0;for (var x=0;t dElm=getCe ll(grid,cp os.rowinde x,x);x++){ if(tdElm!= lastTDElm) {var sd=ge tColRowSpa n(tdElm);i f(sd['rows pan']==1){ var newTD= doc.create Element("t d");if(!ti nymce.isIE )newTD.inn erHTML='<b r mce_bogu s="1"/>';n ewTD.colSp an=tdElm.c olSpan;new TR.appendC hild(newTD );}else td Elm.rowSpa n=sd['rows pan']+1;la stTDElm=td Elm;}}trEl m.parentNo de.insertB efore(newT R,trElm);s elect(0,1) ;break;cas e"mceTable InsertRowA fter":if(! trElm||!td Elm)return  true;var  grid=getTa bleGrid(ta bleElm);va r cpos=get CellPos(gr id,tdElm); var newTR= doc.create Element("t r");var la stTDElm=nu ll;for(var  x=0;tdElm =getCell(g rid,cpos.r owindex,x) ;x++){if(t dElm!=last TDElm){var  sd=getCol RowSpan(td Elm);if(sd ['rowspan' ]==1){var  newTD=doc. createElem ent("td"); if(!tinymc e.isIE)new TD.innerHT ML='<br mc e_bogus="1 "/>';newTD .colSpan=t dElm.colSp an;newTR.a ppendChild (newTD);}e lse tdElm. rowSpan=sd ['rowspan' ]+1;lastTD Elm=tdElm; }}if(newTR .hasChildN odes()){va r nextTR=n extElm(trE lm,"TR");i f(nextTR)n extTR.pare ntNode.ins ertBefore( newTR,next TR);else t ableElm.ap pendChild( newTR);}se lect(0,1); break;case "mceTableD eleteRow": if(!trElm| |!tdElm)re turn true; var grid=g etTableGri d(tableElm );var cpos =getCellPo s(grid,tdE lm);if(gri d.length== 1){inst.do m.remove(i nst.dom.ge tParent(ta bleElm,"ta ble"));ret urn true;} var cells= trElm.cell s;var next TR=nextElm (trElm,"TR ");for(var  x=0;x<cel ls.length; x++){if(ce lls[x].row Span>1){va r newTD=ce lls[x].clo neNode(tru e);var sd= getColRowS pan(cells[ x]);newTD. rowSpan=sd .rowspan-1 ;var nextT D=nextTR.c ells[x];if (nextTD==n ull)nextTR .appendChi ld(newTD); else nextT R.insertBe fore(newTD ,nextTD);} }var lastT DElm=null; for(var x= 0;tdElm=ge tCell(grid ,cpos.rowi ndex,x);x+ +){if(tdEl m!=lastTDE lm){var sd =getColRow Span(tdElm );if(sd.ro wspan>1){t dElm.rowSp an=sd.rows pan-1;}els e{trElm=td Elm.parent Node;if(tr Elm.parent Node)trElm ._delete=t rue;}lastT DElm=tdElm ;}}deleteM arked(tabl eElm);sele ct(0,-1);b reak;case" mceTableIn sertColBef ore":if(!t rElm||!tdE lm)return  true;var g rid=getTab leGrid(tab leElm);var  cpos=getC ellPos(gri d,tdElm);v ar lastTDE lm=null;fo r(var y=0; tdElm=getC ell(grid,y ,cpos.cell index);y++ ){if(tdElm !=lastTDEl m){var sd= getColRowS pan(tdElm) ;if(sd['co lspan']==1 ){var newT D=doc.crea teElement( tdElm.node Name);if(! tinymce.is IE)newTD.i nnerHTML=' <br mce_bo gus="1"/>' ;newTD.row Span=tdElm .rowSpan;t dElm.paren tNode.inse rtBefore(n ewTD,tdElm );}else td Elm.colSpa n++;lastTD Elm=tdElm; }}select() ;break;cas e"mceTable InsertColA fter":if(! trElm||!td Elm)return  true;var  grid=getTa bleGrid(ta bleElm);va r cpos=get CellPos(gr id,tdElm); var lastTD Elm=null;f or(var y=0 ;tdElm=get Cell(grid, y,cpos.cel lindex);y+ +){if(tdEl m!=lastTDE lm){var sd =getColRow Span(tdElm );if(sd['c olspan']== 1){var new TD=doc.cre ateElement (tdElm.nod eName);if( !tinymce.i sIE)newTD. innerHTML= '<br mce_b ogus="1"/> ';newTD.ro wSpan=tdEl m.rowSpan; var nextTD =nextElm(t dElm,"TD,T H");if(nex tTD==null) tdElm.pare ntNode.app endChild(n ewTD);else  nextTD.pa rentNode.i nsertBefor e(newTD,ne xtTD);}els e tdElm.co lSpan++;la stTDElm=td Elm;}}sele ct(1);brea k;case"mce TableDelet eCol":if(! trElm||!td Elm)return  true;var  grid=getTa bleGrid(ta bleElm);va r cpos=get CellPos(gr id,tdElm); var lastTD Elm=null;i f(grid.len gth>1&&gri d[0].lengt h<=1){inst .dom.remov e(inst.dom .getParent (tableElm, "table")); return tru e;}for(var  y=0;tdElm =getCell(g rid,y,cpos .cellindex );y++){if( tdElm!=las tTDElm){va r sd=getCo lRowSpan(t dElm);if(s d['colspan ']>1)tdElm .colSpan=s d['colspan ']-1;else{ if(tdElm.p arentNode) tdElm.pare ntNode.rem oveChild(t dElm);}las tTDElm=tdE lm;}}selec t(-1);brea k;case"mce TableSplit Cells":if( !trElm||!t dElm)retur n true;var  spandata= getColRowS pan(tdElm) ;var colsp an=spandat a["colspan "];var row span=spand ata["rowsp an"];if(co lspan>1||r owspan>1){ tdElm.colS pan=1;for( var i=1;i< colspan;i+ +){var new TD=doc.cre ateElement ("td");if( !tinymce.i sIE)newTD. innerHTML= '<br mce_b ogus="1"/> ';trElm.in sertBefore (newTD,nex tElm(tdElm ,"TD,TH")) ;if(rowspa n>1)addRow s(newTD,tr Elm,rowspa n);}addRow s(tdElm,tr Elm,rowspa n);}tableE lm=inst.do m.getParen t(inst.sel ection.get Node(),"ta ble");brea k;case"mce TableMerge Cells":var  rows=[];v ar sel=ins t.selectio n.getSel() ;var grid= getTableGr id(tableEl m);if(tiny mce.isIE|| sel.rangeC ount==1){i f(user_int erface){va r sp=getCo lRowSpan(t dElm);inst .windowMan ager.open( {url:url+' /merge_cel ls.htm',wi dth:240+pa rseInt(ins t.getLang( 'table.mer ge_cells_d elta_width ',0)),heig ht:110+par seInt(inst .getLang(' table.merg e_cells_de lta_height ',0)),inli ne:1},{act ion:"updat e",numcols :sp.colspa n,numrows: sp.rowspan ,plugin_ur l:url});re turn true; }else{var  numRows=pa rseInt(val ue['numrow s']);var n umCols=par seInt(valu e['numcols ']);var cp os=getCell Pos(grid,t dElm);if(( ""+numRows )=="NaN")n umRows=1;i f((""+numC ols)=="NaN ")numCols= 1;var tRow s=tableElm .rows;for( var y=cpos .rowindex; y<grid.len gth;y++){v ar rowCell s=[];for(v ar x=cpos. cellindex; x<grid[y]. length;x++ ){var td=g etCell(gri d,y,x);if( td&&!inArr ay(rows,td )&&!inArra y(rowCells ,td)){var  cp=getCell Pos(grid,t d);if(cp.c ellindex<c pos.cellin dex+numCol s&&cp.rowi ndex<cpos. rowindex+n umRows)row Cells[rowC ells.lengt h]=td;}}if (rowCells. length>0)r ows[rows.l ength]=row Cells;var  td=getCell (grid,cpos .rowindex, cpos.celli ndex);each (ed.dom.se lect('br', td),functi on(e,i){if (i>0&&ed.d om.getAttr ib('mce_bo gus'))ed.d om.remove( e);});}}}e lse{var ce lls=[];var  sel=inst. selection. getSel();v ar lastTR= null;var c urRow=null ;var x1=-1 ,y1=-1,x2, y2;if(sel. rangeCount <2)return  true;for(v ar i=0;i<s el.rangeCo unt;i++){v ar rng=sel .getRangeA t(i);var t dElm=rng.s tartContai ner.childN odes[rng.s tartOffset ];if(!tdEl m)break;if (tdElm.nod eName=="TD ")cells[ce lls.length ]=tdElm;}v ar tRows=t ableElm.ro ws;for(var  y=0;y<tRo ws.length; y++){var r owCells=[] ;for(var x =0;x<tRows [y].cells. length;x++ ){var td=t Rows[y].ce lls[x];for (var i=0;i <cells.len gth;i++){i f(td==cell s[i]){rowC ells[rowCe lls.length ]=td;}}}if (rowCells. length>0)r ows[rows.l ength]=row Cells;}var  curRow=[] ;var lastT R=null;for (var y=0;y <grid.leng th;y++){fo r(var x=0; x<grid[y]. length;x++ ){grid[y][ x]._select ed=false;f or(var i=0 ;i<cells.l ength;i++) {if(grid[y ][x]==cell s[i]){if(x 1==-1){x1= x;y1=y;}x2 =x;y2=y;gr id[y][x]._ selected=t rue;}}}}fo r(var y=y1 ;y<=y2;y++ ){for(var  x=x1;x<=x2 ;x++){if(! grid[y][x] ._selected ){alert("I nvalid sel ection for  merge."); return tru e;}}}}var  rowSpan=1, colSpan=1; var lastRo wSpan=-1;f or(var y=0 ;y<rows.le ngth;y++){ var rowCol Span=0;for (var x=0;x <rows[y].l ength;x++) {var sd=ge tColRowSpa n(rows[y][ x]);rowCol Span+=sd[' colspan']; if(lastRow Span!=-1&& sd['rowspa n']!=lastR owSpan){al ert("Inval id selecti on for mer ge.");retu rn true;}l astRowSpan =sd['rowsp an'];}if(r owColSpan> colSpan)co lSpan=rowC olSpan;las tRowSpan=- 1;}var las tColSpan=- 1;for(var  x=0;x<rows [0].length ;x++){var  colRowSpan =0;for(var  y=0;y<row s.length;y ++){var sd =getColRow Span(rows[ y][x]);col RowSpan+=s d['rowspan '];if(last ColSpan!=- 1&&sd['col span']!=la stColSpan) {alert("In valid sele ction for  merge.");r eturn true ;}lastColS pan=sd['co lspan'];}i f(colRowSp an>rowSpan )rowSpan=c olRowSpan; lastColSpa n=-1;}tdEl m=rows[0][ 0];tdElm.r owSpan=row Span;tdElm .colSpan=c olSpan;for (var y=0;y <rows.leng th;y++){fo r(var x=0; x<rows[y]. length;x++ ){var html =rows[y][x ].innerHTM L;var chk= html.repla ce(/[ \t\r \n]/g,""); if(chk!="< br/>"&&chk !="<br>"&& chk!='<br  mce_bogus= "1"/>'&&(x +y>0))tdEl m.innerHTM L+=html;if (rows[y][x ]!=tdElm&& !rows[y][x ]._deleted ){var cpos =getCellPo s(grid,row s[y][x]);v ar tr=rows [y][x].par entNode;tr .removeChi ld(rows[y] [x]);rows[ y][x]._del eted=true; if(!tr.has ChildNodes ()){tr.par entNode.re moveChild( tr);var la stCell=nul l;for(var  x=0;cellEl m=getCell( grid,cpos. rowindex,x );x++){if( cellElm!=l astCell&&c ellElm.row Span>1)cel lElm.rowSp an--;lastC ell=cellEl m;}if(tdEl m.rowSpan> 1)tdElm.ro wSpan--;}} }}each(ed. dom.select ('br',tdEl m),functio n(e,i){if( i>0&&ed.do m.getAttri b(e,'mce_b ogus'))ed. dom.remove (e);});bre ak;}tableE lm=inst.do m.getParen t(inst.sel ection.get Node(),"ta ble");inst .addVisual (tableElm) ;inst.node Changed(); }return tr ue;}return  false;}}) ;tinymce.P luginManag er.add('ta ble',tinym ce.plugins .TablePlug in);})();