Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F6064196
editor_plugin.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
17 KB
Referenced Files
None
Subscribers
None
editor_plugin.js
View Options
(
function
(
d
){
var
e
=
d
.
each
;
function
c
(
g
,
h
){
var
j
=
h
.
ownerDocument
,
f
=
j
.
createRange
(),
k
;
f
.
setStartBefore
(
h
);
f
.
setEnd
(
g
.
endContainer
,
g
.
endOffset
);
k
=
j
.
createElement
(
"body"
);
k
.
appendChild
(
f
.
cloneContents
());
return
k
.
innerHTML
.
replace
(
/<(br|img|object|embed|input|textarea)[^>]*>/gi
,
"-"
).
replace
(
/<[^>]+>/g
,
""
).
length
==
0
}
function
a
(
g
,
f
){
return
parseInt
(
g
.
getAttribute
(
f
)
||
1
)}
function
b
(
H
,
G
,
K
){
var
g
,
L
,
D
,
o
;
t
();
o
=
G
.
getParent
(
K
.
getStart
(),
"th,td"
);
if
(
o
){
L
=
F
(
o
);
D
=
I
();
o
=
z
(
L
.
x
,
L
.
y
)}
function
A
(
N
,
M
){
N
=
N
.
cloneNode
(
M
);
N
.
removeAttribute
(
"id"
);
return
N
}
function
t
(){
var
M
=
0
;
g
=
[];
e
([
"thead"
,
"tbody"
,
"tfoot"
],
function
(
N
){
var
O
=
G
.
select
(
"> "
+
N
+
" tr"
,
H
);
e
(
O
,
function
(
P
,
Q
){
Q
+=
M
;
e
(
G
.
select
(
"> td, > th"
,
P
),
function
(
W
,
R
){
var
S
,
T
,
U
,
V
;
if
(
g
[
Q
]){
while
(
g
[
Q
][
R
]){
R
++
}}
U
=
a
(
W
,
"rowspan"
);
V
=
a
(
W
,
"colspan"
);
for
(
T
=
Q
;
T
<
Q
+
U
;
T
++
){
if
(
!
g
[
T
]){
g
[
T
]
=
[]}
for
(
S
=
R
;
S
<
R
+
V
;
S
++
){
g
[
T
][
S
]
=
{
part
:
N
,
real
:
T
==
Q
&&
S
==
R
,
elm
:
W
,
rowspan
:
U
,
colspan
:
V
}}}})});
M
+=
O
.
length
})}
function
z
(
M
,
O
){
var
N
;
N
=
g
[
O
];
if
(
N
){
return
N
[
M
]}}
function
s
(
O
,
M
,
N
){
if
(
O
){
N
=
parseInt
(
N
);
if
(
N
===
1
){
O
.
removeAttribute
(
M
,
1
)}
else
{
O
.
setAttribute
(
M
,
N
,
1
)}}}
function
j
(
M
){
return
M
&&
(
G
.
hasClass
(
M
.
elm
,
"mceSelected"
)
||
M
==
o
)}
function
k
(){
var
M
=
[];
e
(
H
.
rows
,
function
(
N
){
e
(
N
.
cells
,
function
(
O
){
if
(
G
.
hasClass
(
O
,
"mceSelected"
)
||
O
==
o
.
elm
){
M
.
push
(
N
);
return
false
}})});
return
M
}
function
r
(){
var
M
=
G
.
createRng
();
M
.
setStartAfter
(
H
);
M
.
setEndAfter
(
H
);
K
.
setRng
(
M
);
G
.
remove
(
H
)}
function
f
(
M
){
var
N
;
d
.
walk
(
M
,
function
(
P
){
var
O
;
if
(
P
.
nodeType
==
3
){
e
(
G
.
getParents
(
P
.
parentNode
,
null
,
M
).
reverse
(),
function
(
Q
){
Q
=
A
(
Q
,
false
);
if
(
!
N
){
N
=
O
=
Q
}
else
{
if
(
O
){
O
.
appendChild
(
Q
)}}
O
=
Q
});
if
(
O
){
O
.
innerHTML
=
d
.
isIE
?
" "
:
'<br data-mce-bogus="1" />'
}
return
false
}},
"childNodes"
);
M
=
A
(
M
,
false
);
s
(
M
,
"rowSpan"
,
1
);
s
(
M
,
"colSpan"
,
1
);
if
(
N
){
M
.
appendChild
(
N
)}
else
{
if
(
!
d
.
isIE
){
M
.
innerHTML
=
'<br data-mce-bogus="1" />'
}}
return
M
}
function
q
(){
var
M
=
G
.
createRng
();
e
(
G
.
select
(
"tr"
,
H
),
function
(
N
){
if
(
N
.
cells
.
length
==
0
){
G
.
remove
(
N
)}});
if
(
G
.
select
(
"tr"
,
H
).
length
==
0
){
M
.
setStartAfter
(
H
);
M
.
setEndAfter
(
H
);
K
.
setRng
(
M
);
G
.
remove
(
H
);
return
}
e
(
G
.
select
(
"thead,tbody,tfoot"
,
H
),
function
(
N
){
if
(
N
.
rows
.
length
==
0
){
G
.
remove
(
N
)}});
t
();
row
=
g
[
Math
.
min
(
g
.
length
-
1
,
L
.
y
)];
if
(
row
){
K
.
select
(
row
[
Math
.
min
(
row
.
length
-
1
,
L
.
x
)].
elm
,
true
);
K
.
collapse
(
true
)}}
function
u
(
S
,
Q
,
U
,
R
){
var
P
,
N
,
M
,
O
,
T
;
P
=
g
[
Q
][
S
].
elm
.
parentNode
;
for
(
M
=
1
;
M
<=
U
;
M
++
){
P
=
G
.
getNext
(
P
,
"tr"
);
if
(
P
){
for
(
N
=
S
;
N
>=
0
;
N
--
){
T
=
g
[
Q
+
M
][
N
].
elm
;
if
(
T
.
parentNode
==
P
){
for
(
O
=
1
;
O
<=
R
;
O
++
){
G
.
insertAfter
(
f
(
T
),
T
)}
break
}}
if
(
N
==-
1
){
for
(
O
=
1
;
O
<=
R
;
O
++
){
P
.
insertBefore
(
f
(
P
.
cells
[
0
]),
P
.
cells
[
0
])}}}}}
function
C
(){
e
(
g
,
function
(
M
,
N
){
e
(
M
,
function
(
P
,
O
){
var
S
,
R
,
T
,
Q
;
if
(
j
(
P
)){
P
=
P
.
elm
;
S
=
a
(
P
,
"colspan"
);
R
=
a
(
P
,
"rowspan"
);
if
(
S
>
1
||
R
>
1
){
s
(
P
,
"rowSpan"
,
1
);
s
(
P
,
"colSpan"
,
1
);
for
(
Q
=
0
;
Q
<
S
-
1
;
Q
++
){
G
.
insertAfter
(
f
(
P
),
P
)}
u
(
O
,
N
,
R
-
1
,
S
)}}})})}
function
p
(
V
,
S
,
Y
){
var
P
,
O
,
X
,
W
,
U
,
R
,
T
,
M
,
V
,
N
,
Q
;
if
(
V
){
pos
=
F
(
V
);
P
=
pos
.
x
;
O
=
pos
.
y
;
X
=
P
+
(
S
-
1
);
W
=
O
+
(
Y
-
1
)}
else
{
L
=
D
=
null
;
e
(
g
,
function
(
Z
,
aa
){
e
(
Z
,
function
(
ac
,
ab
){
if
(
j
(
ac
)){
if
(
!
L
){
L
=
{
x
:
ab
,
y
:
aa
}}
D
=
{
x
:
ab
,
y
:
aa
}}})});
P
=
L
.
x
;
O
=
L
.
y
;
X
=
D
.
x
;
W
=
D
.
y
}
T
=
z
(
P
,
O
);
M
=
z
(
X
,
W
);
if
(
T
&&
M
&&
T
.
part
==
M
.
part
){
C
();
t
();
T
=
z
(
P
,
O
).
elm
;
s
(
T
,
"colSpan"
,(
X
-
P
)
+
1
);
s
(
T
,
"rowSpan"
,(
W
-
O
)
+
1
);
for
(
R
=
O
;
R
<=
W
;
R
++
){
for
(
U
=
P
;
U
<=
X
;
U
++
){
if
(
!
g
[
R
]
||!
g
[
R
][
U
]){
continue
}
V
=
g
[
R
][
U
].
elm
;
if
(
V
!=
T
){
N
=
d
.
grep
(
V
.
childNodes
);
e
(
N
,
function
(
Z
){
T
.
appendChild
(
Z
)});
if
(
N
.
length
){
N
=
d
.
grep
(
T
.
childNodes
);
Q
=
0
;
e
(
N
,
function
(
Z
){
if
(
Z
.
nodeName
==
"BR"
&&
G
.
getAttrib
(
Z
,
"data-mce-bogus"
)
&&
Q
++<
N
.
length
-
1
){
T
.
removeChild
(
Z
)}})}
G
.
remove
(
V
)}}}
q
()}}
function
l
(
Q
){
var
M
,
S
,
P
,
R
,
T
,
U
,
N
,
V
,
O
;
e
(
g
,
function
(
W
,
X
){
e
(
W
,
function
(
Z
,
Y
){
if
(
j
(
Z
)){
Z
=
Z
.
elm
;
T
=
Z
.
parentNode
;
U
=
A
(
T
,
false
);
M
=
X
;
if
(
Q
){
return
false
}}});
if
(
Q
){
return
!
M
}});
for
(
R
=
0
;
R
<
g
[
0
].
length
;
R
++
){
if
(
!
g
[
M
][
R
]){
continue
}
S
=
g
[
M
][
R
].
elm
;
if
(
S
!=
P
){
if
(
!
Q
){
O
=
a
(
S
,
"rowspan"
);
if
(
O
>
1
){
s
(
S
,
"rowSpan"
,
O
+
1
);
continue
}}
else
{
if
(
M
>
0
&&
g
[
M
-
1
][
R
]){
V
=
g
[
M
-
1
][
R
].
elm
;
O
=
a
(
V
,
"rowSpan"
);
if
(
O
>
1
){
s
(
V
,
"rowSpan"
,
O
+
1
);
continue
}}}
N
=
f
(
S
);
s
(
N
,
"colSpan"
,
S
.
colSpan
);
U
.
appendChild
(
N
);
P
=
S
}}
if
(
U
.
hasChildNodes
()){
if
(
!
Q
){
G
.
insertAfter
(
U
,
T
)}
else
{
T
.
parentNode
.
insertBefore
(
U
,
T
)}}}
function
h
(
N
){
var
O
,
M
;
e
(
g
,
function
(
P
,
Q
){
e
(
P
,
function
(
S
,
R
){
if
(
j
(
S
)){
O
=
R
;
if
(
N
){
return
false
}}});
if
(
N
){
return
!
O
}});
e
(
g
,
function
(
S
,
T
){
var
P
,
Q
,
R
;
if
(
!
S
[
O
]){
return
}
P
=
S
[
O
].
elm
;
if
(
P
!=
M
){
R
=
a
(
P
,
"colspan"
);
Q
=
a
(
P
,
"rowspan"
);
if
(
R
==
1
){
if
(
!
N
){
G
.
insertAfter
(
f
(
P
),
P
);
u
(
O
,
T
,
Q
-
1
,
R
)}
else
{
P
.
parentNode
.
insertBefore
(
f
(
P
),
P
);
u
(
O
,
T
,
Q
-
1
,
R
)}}
else
{
s
(
P
,
"colSpan"
,
P
.
colSpan
+
1
)}
M
=
P
}})}
function
n
(){
var
M
=
[];
e
(
g
,
function
(
N
,
O
){
e
(
N
,
function
(
Q
,
P
){
if
(
j
(
Q
)
&&
d
.
inArray
(
M
,
P
)
===-
1
){
e
(
g
,
function
(
T
){
var
R
=
T
[
P
].
elm
,
S
;
S
=
a
(
R
,
"colSpan"
);
if
(
S
>
1
){
s
(
R
,
"colSpan"
,
S
-
1
)}
else
{
G
.
remove
(
R
)}});
M
.
push
(
P
)}})});
q
()}
function
m
(){
var
N
;
function
M
(
Q
){
var
P
,
R
,
O
;
P
=
G
.
getNext
(
Q
,
"tr"
);
e
(
Q
.
cells
,
function
(
S
){
var
T
=
a
(
S
,
"rowSpan"
);
if
(
T
>
1
){
s
(
S
,
"rowSpan"
,
T
-
1
);
R
=
F
(
S
);
u
(
R
.
x
,
R
.
y
,
1
,
1
)}});
R
=
F
(
Q
.
cells
[
0
]);
e
(
g
[
R
.
y
],
function
(
S
){
var
T
;
S
=
S
.
elm
;
if
(
S
!=
O
){
T
=
a
(
S
,
"rowSpan"
);
if
(
T
<=
1
){
G
.
remove
(
S
)}
else
{
s
(
S
,
"rowSpan"
,
T
-
1
)}
O
=
S
}})}
N
=
k
();
e
(
N
.
reverse
(),
function
(
O
){
M
(
O
)});
q
()}
function
E
(){
var
M
=
k
();
G
.
remove
(
M
);
q
();
return
M
}
function
J
(){
var
M
=
k
();
e
(
M
,
function
(
O
,
N
){
M
[
N
]
=
A
(
O
,
true
)});
return
M
}
function
B
(
O
,
N
){
var
P
=
k
(),
M
=
P
[
N
?
0
:
P
.
length
-
1
],
Q
=
M
.
cells
.
length
;
e
(
g
,
function
(
S
){
var
R
;
Q
=
0
;
e
(
S
,
function
(
U
,
T
){
if
(
U
.
real
){
Q
+=
U
.
colspan
}
if
(
U
.
elm
.
parentNode
==
M
){
R
=
1
}});
if
(
R
){
return
false
}});
if
(
!
N
){
O
.
reverse
()}
e
(
O
,
function
(
T
){
var
S
=
T
.
cells
.
length
,
R
;
for
(
i
=
0
;
i
<
S
;
i
++
){
R
=
T
.
cells
[
i
];
s
(
R
,
"colSpan"
,
1
);
s
(
R
,
"rowSpan"
,
1
)}
for
(
i
=
S
;
i
<
Q
;
i
++
){
T
.
appendChild
(
f
(
T
.
cells
[
S
-
1
]))}
for
(
i
=
Q
;
i
<
S
;
i
++
){
G
.
remove
(
T
.
cells
[
i
])}
if
(
N
){
M
.
parentNode
.
insertBefore
(
T
,
M
)}
else
{
G
.
insertAfter
(
T
,
M
)}});
G
.
removeClass
(
G
.
select
(
"td.mceSelected,th.mceSelected"
),
"mceSelected"
)}
function
F
(
M
){
var
N
;
e
(
g
,
function
(
O
,
P
){
e
(
O
,
function
(
R
,
Q
){
if
(
R
.
elm
==
M
){
N
=
{
x
:
Q
,
y
:
P
};
return
false
}});
return
!
N
});
return
N
}
function
w
(
M
){
L
=
F
(
M
)}
function
I
(){
var
O
,
N
,
M
;
N
=
M
=
0
;
e
(
g
,
function
(
P
,
Q
){
e
(
P
,
function
(
S
,
R
){
var
U
,
T
;
if
(
j
(
S
)){
S
=
g
[
Q
][
R
];
if
(
R
>
N
){
N
=
R
}
if
(
Q
>
M
){
M
=
Q
}
if
(
S
.
real
){
U
=
S
.
colspan
-
1
;
T
=
S
.
rowspan
-
1
;
if
(
U
){
if
(
R
+
U
>
N
){
N
=
R
+
U
}}
if
(
T
){
if
(
Q
+
T
>
M
){
M
=
Q
+
T
}}}}})});
return
{
x
:
N
,
y
:
M
}}
function
v
(
S
){
var
P
,
O
,
U
,
T
,
N
,
M
,
Q
,
R
;
D
=
F
(
S
);
if
(
L
&&
D
){
P
=
Math
.
min
(
L
.
x
,
D
.
x
);
O
=
Math
.
min
(
L
.
y
,
D
.
y
);
U
=
Math
.
max
(
L
.
x
,
D
.
x
);
T
=
Math
.
max
(
L
.
y
,
D
.
y
);
N
=
U
;
M
=
T
;
for
(
y
=
O
;
y
<=
M
;
y
++
){
S
=
g
[
y
][
P
];
if
(
!
S
.
real
){
if
(
P
-
(
S
.
colspan
-
1
)
<
P
){
P
-=
S
.
colspan
-
1
}}}
for
(
x
=
P
;
x
<=
N
;
x
++
){
S
=
g
[
O
][
x
];
if
(
!
S
.
real
){
if
(
O
-
(
S
.
rowspan
-
1
)
<
O
){
O
-=
S
.
rowspan
-
1
}}}
for
(
y
=
O
;
y
<=
T
;
y
++
){
for
(
x
=
P
;
x
<=
U
;
x
++
){
S
=
g
[
y
][
x
];
if
(
S
.
real
){
Q
=
S
.
colspan
-
1
;
R
=
S
.
rowspan
-
1
;
if
(
Q
){
if
(
x
+
Q
>
N
){
N
=
x
+
Q
}}
if
(
R
){
if
(
y
+
R
>
M
){
M
=
y
+
R
}}}}}
G
.
removeClass
(
G
.
select
(
"td.mceSelected,th.mceSelected"
),
"mceSelected"
);
for
(
y
=
O
;
y
<=
M
;
y
++
){
for
(
x
=
P
;
x
<=
N
;
x
++
){
if
(
g
[
y
][
x
]){
G
.
addClass
(
g
[
y
][
x
].
elm
,
"mceSelected"
)}}}}}
d
.
extend
(
this
,{
deleteTable
:
r
,
split
:
C
,
merge
:
p
,
insertRow
:
l
,
insertCol
:
h
,
deleteCols
:
n
,
deleteRows
:
m
,
cutRows
:
E
,
copyRows
:
J
,
pasteRows
:
B
,
getPos
:
F
,
setStartCell
:
w
,
setEndCell
:
v
})}
d
.
create
(
"tinymce.plugins.TablePlugin"
,{
init
:
function
(
g
,
h
){
var
f
,
m
,
j
=
true
;
function
l
(
p
){
var
o
=
g
.
selection
,
n
=
g
.
dom
.
getParent
(
p
||
o
.
getNode
(),
"table"
);
if
(
n
){
return
new
b
(
n
,
g
.
dom
,
o
)}}
function
k
(){
g
.
getBody
().
style
.
webkitUserSelect
=
""
;
if
(
j
){
g
.
dom
.
removeClass
(
g
.
dom
.
select
(
"td.mceSelected,th.mceSelected"
),
"mceSelected"
);
j
=
false
}}
e
([[
"table"
,
"table.desc"
,
"mceInsertTable"
,
true
],[
"delete_table"
,
"table.del"
,
"mceTableDelete"
],[
"delete_col"
,
"table.delete_col_desc"
,
"mceTableDeleteCol"
],[
"delete_row"
,
"table.delete_row_desc"
,
"mceTableDeleteRow"
],[
"col_after"
,
"table.col_after_desc"
,
"mceTableInsertColAfter"
],[
"col_before"
,
"table.col_before_desc"
,
"mceTableInsertColBefore"
],[
"row_after"
,
"table.row_after_desc"
,
"mceTableInsertRowAfter"
],[
"row_before"
,
"table.row_before_desc"
,
"mceTableInsertRowBefore"
],[
"row_props"
,
"table.row_desc"
,
"mceTableRowProps"
,
true
],[
"cell_props"
,
"table.cell_desc"
,
"mceTableCellProps"
,
true
],[
"split_cells"
,
"table.split_cells_desc"
,
"mceTableSplitCells"
,
true
],[
"merge_cells"
,
"table.merge_cells_desc"
,
"mceTableMergeCells"
,
true
]],
function
(
n
){
g
.
addButton
(
n
[
0
],{
title
:
n
[
1
],
cmd
:
n
[
2
],
ui
:
n
[
3
]})});
if
(
!
d
.
isIE
){
g
.
onClick
.
add
(
function
(
n
,
o
){
o
=
o
.
target
;
if
(
o
.
nodeName
===
"TABLE"
){
n
.
selection
.
select
(
o
);
n
.
nodeChanged
()}})}
g
.
onPreProcess
.
add
(
function
(
o
,
p
){
var
n
,
q
,
r
,
t
=
o
.
dom
,
s
;
n
=
t
.
select
(
"table"
,
p
.
node
);
q
=
n
.
length
;
while
(
q
--
){
r
=
n
[
q
];
t
.
setAttrib
(
r
,
"data-mce-style"
,
""
);
if
((
s
=
t
.
getAttrib
(
r
,
"width"
))){
t
.
setStyle
(
r
,
"width"
,
s
);
t
.
setAttrib
(
r
,
"width"
,
""
)}
if
((
s
=
t
.
getAttrib
(
r
,
"height"
))){
t
.
setStyle
(
r
,
"height"
,
s
);
t
.
setAttrib
(
r
,
"height"
,
""
)}}});
g
.
onNodeChange
.
add
(
function
(
q
,
o
,
s
){
var
r
;
s
=
q
.
selection
.
getStart
();
r
=
q
.
dom
.
getParent
(
s
,
"td,th,caption"
);
o
.
setActive
(
"table"
,
s
.
nodeName
===
"TABLE"
||!!
r
);
if
(
r
&&
r
.
nodeName
===
"CAPTION"
){
r
=
0
}
o
.
setDisabled
(
"delete_table"
,
!
r
);
o
.
setDisabled
(
"delete_col"
,
!
r
);
o
.
setDisabled
(
"delete_table"
,
!
r
);
o
.
setDisabled
(
"delete_row"
,
!
r
);
o
.
setDisabled
(
"col_after"
,
!
r
);
o
.
setDisabled
(
"col_before"
,
!
r
);
o
.
setDisabled
(
"row_after"
,
!
r
);
o
.
setDisabled
(
"row_before"
,
!
r
);
o
.
setDisabled
(
"row_props"
,
!
r
);
o
.
setDisabled
(
"cell_props"
,
!
r
);
o
.
setDisabled
(
"split_cells"
,
!
r
);
o
.
setDisabled
(
"merge_cells"
,
!
r
)});
g
.
onInit
.
add
(
function
(
r
){
var
p
,
t
,
q
=
r
.
dom
,
u
;
f
=
r
.
windowManager
;
r
.
onMouseDown
.
add
(
function
(
w
,
z
){
if
(
z
.
button
!=
2
){
k
();
t
=
q
.
getParent
(
z
.
target
,
"td,th"
);
p
=
q
.
getParent
(
t
,
"table"
)}});
q
.
bind
(
r
.
getDoc
(),
"mouseover"
,
function
(
C
){
var
A
,
z
,
B
=
C
.
target
;
if
(
t
&&
(
u
||
B
!=
t
)
&&
(
B
.
nodeName
==
"TD"
||
B
.
nodeName
==
"TH"
)){
z
=
q
.
getParent
(
B
,
"table"
);
if
(
z
==
p
){
if
(
!
u
){
u
=
l
(
z
);
u
.
setStartCell
(
t
);
r
.
getBody
().
style
.
webkitUserSelect
=
"none"
}
u
.
setEndCell
(
B
);
j
=
true
}
A
=
r
.
selection
.
getSel
();
try
{
if
(
A
.
removeAllRanges
){
A
.
removeAllRanges
()}
else
{
A
.
empty
()}}
catch
(
w
){}
C
.
preventDefault
()}});
r
.
onMouseUp
.
add
(
function
(
F
,
G
){
var
z
,
B
=
F
.
selection
,
H
,
I
=
B
.
getSel
(),
w
,
C
,
A
,
E
;
if
(
t
){
if
(
u
){
F
.
getBody
().
style
.
webkitUserSelect
=
""
}
function
D
(
J
,
L
){
var
K
=
new
d
.
dom
.
TreeWalker
(
J
,
J
);
do
{
if
(
J
.
nodeType
==
3
&&
d
.
trim
(
J
.
nodeValue
).
length
!=
0
){
if
(
L
){
z
.
setStart
(
J
,
0
)}
else
{
z
.
setEnd
(
J
,
J
.
nodeValue
.
length
)}
return
}
if
(
J
.
nodeName
==
"BR"
){
if
(
L
){
z
.
setStartBefore
(
J
)}
else
{
z
.
setEndBefore
(
J
)}
return
}}
while
(
J
=
(
L
?
K
.
next
()
:
K
.
prev
()))}
H
=
q
.
select
(
"td.mceSelected,th.mceSelected"
);
if
(
H
.
length
>
0
){
z
=
q
.
createRng
();
C
=
H
[
0
];
E
=
H
[
H
.
length
-
1
];
z
.
setStartBefore
(
C
);
z
.
setEndAfter
(
C
);
D
(
C
,
1
);
w
=
new
d
.
dom
.
TreeWalker
(
C
,
q
.
getParent
(
H
[
0
],
"table"
));
do
{
if
(
C
.
nodeName
==
"TD"
||
C
.
nodeName
==
"TH"
){
if
(
!
q
.
hasClass
(
C
,
"mceSelected"
)){
break
}
A
=
C
}}
while
(
C
=
w
.
next
());
D
(
A
);
B
.
setRng
(
z
)}
F
.
nodeChanged
();
t
=
u
=
p
=
null
}});
r
.
onKeyUp
.
add
(
function
(
w
,
z
){
k
()});
r
.
onKeyDown
.
add
(
function
(
w
,
z
){
n
(
w
)});
r
.
onMouseDown
.
add
(
function
(
w
,
z
){
if
(
z
.
button
!=
2
){
n
(
w
)}});
function
o
(
D
,
z
,
A
,
F
){
var
B
=
3
,
G
=
D
.
dom
.
getParent
(
z
.
startContainer
,
"TABLE"
),
C
,
w
,
E
;
if
(
G
){
C
=
G
.
parentNode
}
w
=
z
.
startContainer
.
nodeType
==
B
&&
z
.
startOffset
==
0
&&
z
.
endOffset
==
0
&&
F
&&
(
A
.
nodeName
==
"TR"
||
A
==
C
);
E
=
(
A
.
nodeName
==
"TD"
||
A
.
nodeName
==
"TH"
)
&&!
F
;
return
w
||
E
}
function
n
(
A
){
if
(
!
d
.
isWebKit
){
return
}
var
z
=
A
.
selection
.
getRng
();
var
C
=
A
.
selection
.
getNode
();
var
B
=
A
.
dom
.
getParent
(
z
.
startContainer
,
"TD,TH"
);
if
(
!
o
(
A
,
z
,
C
,
B
)){
return
}
if
(
!
B
){
B
=
C
}
var
w
=
B
.
lastChild
;
while
(
w
.
lastChild
){
w
=
w
.
lastChild
}
z
.
setEnd
(
w
,
w
.
nodeValue
.
length
);
A
.
selection
.
setRng
(
z
)}
r
.
plugins
.
table
.
fixTableCellSelection
=
n
;
if
(
r
&&
r
.
plugins
.
contextmenu
){
r
.
plugins
.
contextmenu
.
onContextMenu
.
add
(
function
(
A
,
w
,
C
){
var
D
,
B
=
r
.
selection
,
z
=
B
.
getNode
()
||
r
.
getBody
();
if
(
r
.
dom
.
getParent
(
C
,
"td"
)
||
r
.
dom
.
getParent
(
C
,
"th"
)
||
r
.
dom
.
select
(
"td.mceSelected,th.mceSelected"
).
length
){
w
.
removeAll
();
if
(
z
.
nodeName
==
"A"
&&!
r
.
dom
.
getAttrib
(
z
,
"name"
)){
w
.
add
({
title
:
"advanced.link_desc"
,
icon
:
"link"
,
cmd
:
r
.
plugins
.
advlink
?
"mceAdvLink"
:
"mceLink"
,
ui
:
true
});
w
.
add
({
title
:
"advanced.unlink_desc"
,
icon
:
"unlink"
,
cmd
:
"UnLink"
});
w
.
addSeparator
()}
if
(
z
.
nodeName
==
"IMG"
&&
z
.
className
.
indexOf
(
"mceItem"
)
==-
1
){
w
.
add
({
title
:
"advanced.image_desc"
,
icon
:
"image"
,
cmd
:
r
.
plugins
.
advimage
?
"mceAdvImage"
:
"mceImage"
,
ui
:
true
});
w
.
addSeparator
()}
w
.
add
({
title
:
"table.desc"
,
icon
:
"table"
,
cmd
:
"mceInsertTable"
,
value
:
{
action
:
"insert"
}});
w
.
add
({
title
:
"table.props_desc"
,
icon
:
"table_props"
,
cmd
:
"mceInsertTable"
});
w
.
add
({
title
:
"table.del"
,
icon
:
"delete_table"
,
cmd
:
"mceTableDelete"
});
w
.
addSeparator
();
D
=
w
.
addMenu
({
title
:
"table.cell"
});
D
.
add
({
title
:
"table.cell_desc"
,
icon
:
"cell_props"
,
cmd
:
"mceTableCellProps"
});
D
.
add
({
title
:
"table.split_cells_desc"
,
icon
:
"split_cells"
,
cmd
:
"mceTableSplitCells"
});
D
.
add
({
title
:
"table.merge_cells_desc"
,
icon
:
"merge_cells"
,
cmd
:
"mceTableMergeCells"
});
D
=
w
.
addMenu
({
title
:
"table.row"
});
D
.
add
({
title
:
"table.row_desc"
,
icon
:
"row_props"
,
cmd
:
"mceTableRowProps"
});
D
.
add
({
title
:
"table.row_before_desc"
,
icon
:
"row_before"
,
cmd
:
"mceTableInsertRowBefore"
});
D
.
add
({
title
:
"table.row_after_desc"
,
icon
:
"row_after"
,
cmd
:
"mceTableInsertRowAfter"
});
D
.
add
({
title
:
"table.delete_row_desc"
,
icon
:
"delete_row"
,
cmd
:
"mceTableDeleteRow"
});
D
.
addSeparator
();
D
.
add
({
title
:
"table.cut_row_desc"
,
icon
:
"cut"
,
cmd
:
"mceTableCutRow"
});
D
.
add
({
title
:
"table.copy_row_desc"
,
icon
:
"copy"
,
cmd
:
"mceTableCopyRow"
});
D
.
add
({
title
:
"table.paste_row_before_desc"
,
icon
:
"paste"
,
cmd
:
"mceTablePasteRowBefore"
}).
setDisabled
(
!
m
);
D
.
add
({
title
:
"table.paste_row_after_desc"
,
icon
:
"paste"
,
cmd
:
"mceTablePasteRowAfter"
}).
setDisabled
(
!
m
);
D
=
w
.
addMenu
({
title
:
"table.col"
});
D
.
add
({
title
:
"table.col_before_desc"
,
icon
:
"col_before"
,
cmd
:
"mceTableInsertColBefore"
});
D
.
add
({
title
:
"table.col_after_desc"
,
icon
:
"col_after"
,
cmd
:
"mceTableInsertColAfter"
});
D
.
add
({
title
:
"table.delete_col_desc"
,
icon
:
"delete_col"
,
cmd
:
"mceTableDeleteCol"
})}
else
{
w
.
add
({
title
:
"table.desc"
,
icon
:
"table"
,
cmd
:
"mceInsertTable"
})}})}
if
(
d
.
isWebKit
){
function
v
(
C
,
N
){
var
L
=
d
.
VK
;
var
Q
=
N
.
keyCode
;
function
O
(
Y
,
U
,
S
){
var
T
=
Y
?
"previousSibling"
:
"nextSibling"
;
var
Z
=
C
.
dom
.
getParent
(
U
,
"tr"
);
var
X
=
Z
[
T
];
if
(
X
){
z
(
C
,
U
,
X
,
Y
);
d
.
dom
.
Event
.
cancel
(
S
);
return
true
}
else
{
var
aa
=
C
.
dom
.
getParent
(
Z
,
"table"
);
var
W
=
Z
.
parentNode
;
var
R
=
W
.
nodeName
.
toLowerCase
();
if
(
R
===
"tbody"
||
R
===
(
Y
?
"tfoot"
:
"thead"
)){
var
V
=
w
(
Y
,
aa
,
W
,
"tbody"
);
if
(
V
!==
null
){
return
K
(
Y
,
V
,
U
,
S
)}}
return
M
(
Y
,
Z
,
T
,
aa
,
S
)}}
function
w
(
V
,
T
,
U
,
X
){
var
S
=
C
.
dom
.
select
(
">"
+
X
,
T
);
var
R
=
S
.
indexOf
(
U
);
if
(
V
&&
R
===
0
||!
V
&&
R
===
S
.
length
-
1
){
return
B
(
V
,
T
)}
else
{
if
(
R
===-
1
){
var
W
=
U
.
tagName
.
toLowerCase
()
===
"thead"
?
0
:
S
.
length
-
1
;
return
S
[
W
]}
else
{
return
S
[
R
+
(
V
?-
1
:
1
)]}}}
function
B
(
U
,
T
){
var
S
=
U
?
"thead"
:
"tfoot"
;
var
R
=
C
.
dom
.
select
(
">"
+
S
,
T
);
return
R
.
length
!==
0
?
R
[
0
]
:
null
}
function
K
(
V
,
T
,
S
,
U
){
var
R
=
J
(
T
,
V
);
R
&&
z
(
C
,
S
,
R
,
V
);
d
.
dom
.
Event
.
cancel
(
U
);
return
true
}
function
M
(
Y
,
U
,
R
,
X
,
W
){
var
S
=
X
[
R
];
if
(
S
){
F
(
S
);
return
true
}
else
{
var
V
=
C
.
dom
.
getParent
(
X
,
"td,th"
);
if
(
V
){
return
O
(
Y
,
V
,
W
)}
else
{
var
T
=
J
(
U
,
!
Y
);
F
(
T
);
return
d
.
dom
.
Event
.
cancel
(
W
)}}}
function
J
(
S
,
R
){
var
T
=
S
&&
S
[
R
?
"lastChild"
:
"firstChild"
];
return
T
&&
T
.
nodeName
===
"BR"
?
C
.
dom
.
getParent
(
T
,
"td,th"
)
:
T
}
function
F
(
R
){
C
.
selection
.
setCursorLocation
(
R
,
0
)}
function
A
(){
return
Q
==
L
.
UP
||
Q
==
L
.
DOWN
}
function
D
(
R
){
var
T
=
R
.
selection
.
getNode
();
var
S
=
R
.
dom
.
getParent
(
T
,
"tr"
);
return
S
!==
null
}
function
P
(
S
){
var
R
=
0
;
var
T
=
S
;
while
(
T
.
previousSibling
){
T
=
T
.
previousSibling
;
R
=
R
+
a
(
T
,
"colspan"
)}
return
R
}
function
E
(
T
,
R
){
var
U
=
0
;
var
S
=
0
;
e
(
T
.
children
,
function
(
V
,
W
){
U
=
U
+
a
(
V
,
"colspan"
);
S
=
W
;
if
(
U
>
R
){
return
false
}});
return
S
}
function
z
(
T
,
W
,
Y
,
V
){
var
X
=
P
(
T
.
dom
.
getParent
(
W
,
"td,th"
));
var
S
=
E
(
Y
,
X
);
var
R
=
Y
.
childNodes
[
S
];
var
U
=
J
(
R
,
V
);
F
(
U
||
R
)}
function
H
(
R
){
var
T
=
C
.
selection
.
getNode
();
var
U
=
C
.
dom
.
getParent
(
T
,
"td,th"
);
var
S
=
C
.
dom
.
getParent
(
R
,
"td,th"
);
return
U
&&
U
!==
S
&&
I
(
U
,
S
)}
function
I
(
S
,
R
){
return
C
.
dom
.
getParent
(
S
,
"TABLE"
)
===
C
.
dom
.
getParent
(
R
,
"TABLE"
)}
if
(
A
()
&&
D
(
C
)){
var
G
=
C
.
selection
.
getNode
();
setTimeout
(
function
(){
if
(
H
(
G
)){
O
(
!
N
.
shiftKey
&&
Q
===
L
.
UP
,
G
,
N
)}},
0
)}}
r
.
onKeyDown
.
add
(
v
)}
function
s
(){
var
w
;
for
(
w
=
r
.
getBody
().
lastChild
;
w
&&
w
.
nodeType
==
3
&&!
w
.
nodeValue
.
length
;
w
=
w
.
previousSibling
){}
if
(
w
&&
w
.
nodeName
==
"TABLE"
){
if
(
r
.
settings
.
forced_root_block
){
r
.
dom
.
add
(
r
.
getBody
(),
r
.
settings
.
forced_root_block
,
null
,
d
.
isIE
?
" "
:
'<br data-mce-bogus="1" />'
)}
else
{
r
.
dom
.
add
(
r
.
getBody
(),
"br"
,{
"data-mce-bogus"
:
"1"
})}}}
if
(
d
.
isGecko
){
r
.
onKeyDown
.
add
(
function
(
z
,
B
){
var
w
,
A
,
C
=
z
.
dom
;
if
(
B
.
keyCode
==
37
||
B
.
keyCode
==
38
){
w
=
z
.
selection
.
getRng
();
A
=
C
.
getParent
(
w
.
startContainer
,
"table"
);
if
(
A
&&
z
.
getBody
().
firstChild
==
A
){
if
(
c
(
w
,
A
)){
w
=
C
.
createRng
();
w
.
setStartBefore
(
A
);
w
.
setEndBefore
(
A
);
z
.
selection
.
setRng
(
w
);
B
.
preventDefault
()}}}})}
r
.
onKeyUp
.
add
(
s
);
r
.
onSetContent
.
add
(
s
);
r
.
onVisualAid
.
add
(
s
);
r
.
onPreProcess
.
add
(
function
(
w
,
A
){
var
z
=
A
.
node
.
lastChild
;
if
(
z
&&
(
z
.
nodeName
==
"BR"
||
(
z
.
childNodes
.
length
==
1
&&
(
z
.
firstChild
.
nodeName
==
"BR"
||
z
.
firstChild
.
nodeValue
==
"\u00a0"
)))
&&
z
.
previousSibling
&&
z
.
previousSibling
.
nodeName
==
"TABLE"
){
w
.
dom
.
remove
(
z
)}});
if
(
d
.
isGecko
){
r
.
onKeyDown
.
add
(
function
(
z
,
B
){
if
(
B
.
keyCode
===
d
.
VK
.
ENTER
&&
B
.
shiftKey
){
var
A
=
z
.
selection
.
getRng
().
startContainer
;
var
C
=
q
.
getParent
(
A
,
"td,th"
);
if
(
C
){
var
w
=
z
.
getDoc
().
createTextNode
(
"\uFEFF"
);
q
.
insertAfter
(
w
,
A
)}}})}
s
();
r
.
startContent
=
r
.
getContent
({
format
:
"raw"
})});
e
({
mceTableSplitCells
:
function
(
n
){
n
.
split
()},
mceTableMergeCells
:
function
(
o
){
var
p
,
q
,
n
;
n
=
g
.
dom
.
getParent
(
g
.
selection
.
getNode
(),
"th,td"
);
if
(
n
){
p
=
n
.
rowSpan
;
q
=
n
.
colSpan
}
if
(
!
g
.
dom
.
select
(
"td.mceSelected,th.mceSelected"
).
length
){
f
.
open
({
url
:
h
+
"/merge_cells.htm"
,
width
:
240
+
parseInt
(
g
.
getLang
(
"table.merge_cells_delta_width"
,
0
)),
height
:
110
+
parseInt
(
g
.
getLang
(
"table.merge_cells_delta_height"
,
0
)),
inline
:
1
},{
rows
:
p
,
cols
:
q
,
onaction
:
function
(
r
){
o
.
merge
(
n
,
r
.
cols
,
r
.
rows
)},
plugin_url
:
h
})}
else
{
o
.
merge
()}},
mceTableInsertRowBefore
:
function
(
n
){
n
.
insertRow
(
true
)},
mceTableInsertRowAfter
:
function
(
n
){
n
.
insertRow
()},
mceTableInsertColBefore
:
function
(
n
){
n
.
insertCol
(
true
)},
mceTableInsertColAfter
:
function
(
n
){
n
.
insertCol
()},
mceTableDeleteCol
:
function
(
n
){
n
.
deleteCols
()},
mceTableDeleteRow
:
function
(
n
){
n
.
deleteRows
()},
mceTableCutRow
:
function
(
n
){
m
=
n
.
cutRows
()},
mceTableCopyRow
:
function
(
n
){
m
=
n
.
copyRows
()},
mceTablePasteRowBefore
:
function
(
n
){
n
.
pasteRows
(
m
,
true
)},
mceTablePasteRowAfter
:
function
(
n
){
n
.
pasteRows
(
m
)},
mceTableDelete
:
function
(
n
){
n
.
deleteTable
()}},
function
(
o
,
n
){
g
.
addCommand
(
n
,
function
(){
var
p
=
l
();
if
(
p
){
o
(
p
);
g
.
execCommand
(
"mceRepaint"
);
k
()}})});
e
({
mceInsertTable
:
function
(
n
){
f
.
open
({
url
:
h
+
"/table.htm"
,
width
:
400
+
parseInt
(
g
.
getLang
(
"table.table_delta_width"
,
0
)),
height
:
320
+
parseInt
(
g
.
getLang
(
"table.table_delta_height"
,
0
)),
inline
:
1
},{
plugin_url
:
h
,
action
:
n
?
n
.
action
:
0
})},
mceTableRowProps
:
function
(){
f
.
open
({
url
:
h
+
"/row.htm"
,
width
:
400
+
parseInt
(
g
.
getLang
(
"table.rowprops_delta_width"
,
0
)),
height
:
295
+
parseInt
(
g
.
getLang
(
"table.rowprops_delta_height"
,
0
)),
inline
:
1
},{
plugin_url
:
h
})},
mceTableCellProps
:
function
(){
f
.
open
({
url
:
h
+
"/cell.htm"
,
width
:
400
+
parseInt
(
g
.
getLang
(
"table.cellprops_delta_width"
,
0
)),
height
:
295
+
parseInt
(
g
.
getLang
(
"table.cellprops_delta_height"
,
0
)),
inline
:
1
},{
plugin_url
:
h
})}},
function
(
o
,
n
){
g
.
addCommand
(
n
,
function
(
p
,
q
){
o
(
q
)})})}});
d
.
PluginManager
.
add
(
"table"
,
d
.
plugins
.
TablePlugin
)})(
tinymce
);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, May 22, 4:18 AM (1 d, 14 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
706568
Default Alt Text
editor_plugin.js (17 KB)
Attached To
Mode
R3 roundcubemail
Attached
Detach File
Event Timeline
Log In to Comment