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
=" ";
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="
"}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="
";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="
";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);})();
|