Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F3310315
tiny_mce.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
193 KB
Referenced Files
None
Subscribers
None
tiny_mce.js
View Options
(
function
(
d
){
var
a
=
/^\s*|\s*$/g
,
e
,
c
=
"B"
.
replace
(
/A(.)|B/
,
"$1"
)
===
"$1"
;
var
b
=
{
majorVersion
:
"3"
,
minorVersion
:
"4.2"
,
releaseDate
:
"2011-04-07"
,
_init
:
function
(){
var
s
=
this
,
q
=
document
,
o
=
navigator
,
g
=
o
.
userAgent
,
m
,
f
,
l
,
k
,
j
,
r
;
s
.
isOpera
=
d
.
opera
&&
opera
.
buildNumber
;
s
.
isWebKit
=
/WebKit/
.
test
(
g
);
s
.
isIE
=!
s
.
isWebKit
&&!
s
.
isOpera
&&
(
/MSIE/gi
).
test
(
g
)
&&
(
/Explorer/gi
).
test
(
o
.
appName
);
s
.
isIE6
=
s
.
isIE
&&
/MSIE [56]/
.
test
(
g
);
s
.
isGecko
=!
s
.
isWebKit
&&
/Gecko/
.
test
(
g
);
s
.
isMac
=
g
.
indexOf
(
"Mac"
)
!=-
1
;
s
.
isAir
=
/adobeair/i
.
test
(
g
);
s
.
isIDevice
=
/(iPad|iPhone)/
.
test
(
g
);
if
(
d
.
tinyMCEPreInit
){
s
.
suffix
=
tinyMCEPreInit
.
suffix
;
s
.
baseURL
=
tinyMCEPreInit
.
base
;
s
.
query
=
tinyMCEPreInit
.
query
;
return
}
s
.
suffix
=
""
;
f
=
q
.
getElementsByTagName
(
"base"
);
for
(
m
=
0
;
m
<
f
.
length
;
m
++
){
if
(
r
=
f
[
m
].
href
){
if
(
/^https?:\/\/[^\/]+$/
.
test
(
r
)){
r
+=
"/"
}
k
=
r
?
r
.
match
(
/.*\//
)[
0
]
:
""
}}
function
h
(
i
){
if
(
i
.
src
&&
/tiny_mce(|_gzip|_jquery|_prototype|_full)(_dev|_src)?.js/
.
test
(
i
.
src
)){
if
(
/_(src|dev)\.js/g
.
test
(
i
.
src
)){
s
.
suffix
=
"_src"
}
if
((
j
=
i
.
src
.
indexOf
(
"?"
))
!=-
1
){
s
.
query
=
i
.
src
.
substring
(
j
+
1
)}
s
.
baseURL
=
i
.
src
.
substring
(
0
,
i
.
src
.
lastIndexOf
(
"/"
));
if
(
k
&&
s
.
baseURL
.
indexOf
(
"://"
)
==-
1
&&
s
.
baseURL
.
indexOf
(
"/"
)
!==
0
){
s
.
baseURL
=
k
+
s
.
baseURL
}
return
s
.
baseURL
}
return
null
}
f
=
q
.
getElementsByTagName
(
"script"
);
for
(
m
=
0
;
m
<
f
.
length
;
m
++
){
if
(
h
(
f
[
m
])){
return
}}
l
=
q
.
getElementsByTagName
(
"head"
)[
0
];
if
(
l
){
f
=
l
.
getElementsByTagName
(
"script"
);
for
(
m
=
0
;
m
<
f
.
length
;
m
++
){
if
(
h
(
f
[
m
])){
return
}}}
return
},
is
:
function
(
g
,
f
){
if
(
!
f
){
return
g
!==
e
}
if
(
f
==
"array"
&&
(
g
.
hasOwnProperty
&&
g
instanceof
Array
)){
return
true
}
return
typeof
(
g
)
==
f
},
makeMap
:
function
(
f
,
j
,
h
){
var
g
;
f
=
f
||
[];
j
=
j
||
","
;
if
(
typeof
(
f
)
==
"string"
){
f
=
f
.
split
(
j
)}
h
=
h
||
{};
g
=
f
.
length
;
while
(
g
--
){
h
[
f
[
g
]]
=
{}}
return
h
},
each
:
function
(
i
,
f
,
h
){
var
j
,
g
;
if
(
!
i
){
return
0
}
h
=
h
||
i
;
if
(
i
.
length
!==
e
){
for
(
j
=
0
,
g
=
i
.
length
;
j
<
g
;
j
++
){
if
(
f
.
call
(
h
,
i
[
j
],
j
,
i
)
===
false
){
return
0
}}}
else
{
for
(
j
in
i
){
if
(
i
.
hasOwnProperty
(
j
)){
if
(
f
.
call
(
h
,
i
[
j
],
j
,
i
)
===
false
){
return
0
}}}}
return
1
},
map
:
function
(
g
,
h
){
var
i
=
[];
b
.
each
(
g
,
function
(
f
){
i
.
push
(
h
(
f
))});
return
i
},
grep
:
function
(
g
,
h
){
var
i
=
[];
b
.
each
(
g
,
function
(
f
){
if
(
!
h
||
h
(
f
)){
i
.
push
(
f
)}});
return
i
},
inArray
:
function
(
g
,
h
){
var
j
,
f
;
if
(
g
){
for
(
j
=
0
,
f
=
g
.
length
;
j
<
f
;
j
++
){
if
(
g
[
j
]
===
h
){
return
j
}}}
return
-
1
},
extend
:
function
(
k
,
j
){
var
h
,
g
,
f
=
arguments
;
for
(
h
=
1
,
g
=
f
.
length
;
h
<
g
;
h
++
){
j
=
f
[
h
];
b
.
each
(
j
,
function
(
i
,
l
){
if
(
i
!==
e
){
k
[
l
]
=
i
}})}
return
k
},
trim
:
function
(
f
){
return
(
f
?
""
+
f
:
""
).
replace
(
a
,
""
)},
create
:
function
(
o
,
f
,
j
){
var
n
=
this
,
g
,
i
,
k
,
l
,
h
,
m
=
0
;
o
=
/^((static) )?([\w.]+)(:([\w.]+))?/
.
exec
(
o
);
k
=
o
[
3
].
match
(
/(^|\.)(\w+)$/i
)[
2
];
i
=
n
.
createNS
(
o
[
3
].
replace
(
/\.\w+$/
,
""
),
j
);
if
(
i
[
k
]){
return
}
if
(
o
[
2
]
==
"static"
){
i
[
k
]
=
f
;
if
(
this
.
onCreate
){
this
.
onCreate
(
o
[
2
],
o
[
3
],
i
[
k
])}
return
}
if
(
!
f
[
k
]){
f
[
k
]
=
function
(){};
m
=
1
}
i
[
k
]
=
f
[
k
];
n
.
extend
(
i
[
k
].
prototype
,
f
);
if
(
o
[
5
]){
g
=
n
.
resolve
(
o
[
5
]).
prototype
;
l
=
o
[
5
].
match
(
/\.(\w+)$/i
)[
1
];
h
=
i
[
k
];
if
(
m
){
i
[
k
]
=
function
(){
return
g
[
l
].
apply
(
this
,
arguments
)}}
else
{
i
[
k
]
=
function
(){
this
.
parent
=
g
[
l
];
return
h
.
apply
(
this
,
arguments
)}}
i
[
k
].
prototype
[
k
]
=
i
[
k
];
n
.
each
(
g
,
function
(
p
,
q
){
i
[
k
].
prototype
[
q
]
=
g
[
q
]});
n
.
each
(
f
,
function
(
p
,
q
){
if
(
g
[
q
]){
i
[
k
].
prototype
[
q
]
=
function
(){
this
.
parent
=
g
[
q
];
return
p
.
apply
(
this
,
arguments
)}}
else
{
if
(
q
!=
k
){
i
[
k
].
prototype
[
q
]
=
p
}}})}
n
.
each
(
f
[
"static"
],
function
(
p
,
q
){
i
[
k
][
q
]
=
p
});
if
(
this
.
onCreate
){
this
.
onCreate
(
o
[
2
],
o
[
3
],
i
[
k
].
prototype
)}},
walk
:
function
(
i
,
h
,
j
,
g
){
g
=
g
||
this
;
if
(
i
){
if
(
j
){
i
=
i
[
j
]}
b
.
each
(
i
,
function
(
k
,
f
){
if
(
h
.
call
(
g
,
k
,
f
,
j
)
===
false
){
return
false
}
b
.
walk
(
k
,
h
,
j
,
g
)})}},
createNS
:
function
(
j
,
h
){
var
g
,
f
;
h
=
h
||
d
;
j
=
j
.
split
(
"."
);
for
(
g
=
0
;
g
<
j
.
length
;
g
++
){
f
=
j
[
g
];
if
(
!
h
[
f
]){
h
[
f
]
=
{}}
h
=
h
[
f
]}
return
h
},
resolve
:
function
(
j
,
h
){
var
g
,
f
;
h
=
h
||
d
;
j
=
j
.
split
(
"."
);
for
(
g
=
0
,
f
=
j
.
length
;
g
<
f
;
g
++
){
h
=
h
[
j
[
g
]];
if
(
!
h
){
break
}}
return
h
},
addUnload
:
function
(
j
,
i
){
var
h
=
this
;
j
=
{
func
:
j
,
scope
:
i
||
this
};
if
(
!
h
.
unloads
){
function
g
(){
var
f
=
h
.
unloads
,
l
,
m
;
if
(
f
){
for
(
m
in
f
){
l
=
f
[
m
];
if
(
l
&&
l
.
func
){
l
.
func
.
call
(
l
.
scope
,
1
)}}
if
(
d
.
detachEvent
){
d
.
detachEvent
(
"onbeforeunload"
,
k
);
d
.
detachEvent
(
"onunload"
,
g
)}
else
{
if
(
d
.
removeEventListener
){
d
.
removeEventListener
(
"unload"
,
g
,
false
)}}
h
.
unloads
=
l
=
f
=
w
=
g
=
0
;
if
(
d
.
CollectGarbage
){
CollectGarbage
()}}}
function
k
(){
var
l
=
document
;
if
(
l
.
readyState
==
"interactive"
){
function
f
(){
l
.
detachEvent
(
"onstop"
,
f
);
if
(
g
){
g
()}
l
=
0
}
if
(
l
){
l
.
attachEvent
(
"onstop"
,
f
)}
d
.
setTimeout
(
function
(){
if
(
l
){
l
.
detachEvent
(
"onstop"
,
f
)}},
0
)}}
if
(
d
.
attachEvent
){
d
.
attachEvent
(
"onunload"
,
g
);
d
.
attachEvent
(
"onbeforeunload"
,
k
)}
else
{
if
(
d
.
addEventListener
){
d
.
addEventListener
(
"unload"
,
g
,
false
)}}
h
.
unloads
=
[
j
]}
else
{
h
.
unloads
.
push
(
j
)}
return
j
},
removeUnload
:
function
(
i
){
var
g
=
this
.
unloads
,
h
=
null
;
b
.
each
(
g
,
function
(
j
,
f
){
if
(
j
&&
j
.
func
==
i
){
g
.
splice
(
f
,
1
);
h
=
i
;
return
false
}});
return
h
},
explode
:
function
(
f
,
g
){
return
f
?
b
.
map
(
f
.
split
(
g
||
","
),
b
.
trim
)
:
f
},
_addVer
:
function
(
g
){
var
f
;
if
(
!
this
.
query
){
return
g
}
f
=
(
g
.
indexOf
(
"?"
)
==-
1
?
"?"
:
"&"
)
+
this
.
query
;
if
(
g
.
indexOf
(
"#"
)
==-
1
){
return
g
+
f
}
return
g
.
replace
(
"#"
,
f
+
"#"
)},
_replace
:
function
(
h
,
f
,
g
){
if
(
c
){
return
g
.
replace
(
h
,
function
(){
var
l
=
f
,
j
=
arguments
,
k
;
for
(
k
=
0
;
k
<
j
.
length
-
2
;
k
++
){
if
(
j
[
k
]
===
e
){
l
=
l
.
replace
(
new
RegExp
(
"\\$"
+
k
,
"g"
),
""
)}
else
{
l
=
l
.
replace
(
new
RegExp
(
"\\$"
+
k
,
"g"
),
j
[
k
])}}
return
l
})}
return
g
.
replace
(
h
,
f
)}};
b
.
_init
();
d
.
tinymce
=
d
.
tinyMCE
=
b
})(
window
);
tinymce
.
create
(
"tinymce.util.Dispatcher"
,{
scope
:
null
,
listeners
:
null
,
Dispatcher
:
function
(
a
){
this
.
scope
=
a
||
this
;
this
.
listeners
=
[]},
add
:
function
(
a
,
b
){
this
.
listeners
.
push
({
cb
:
a
,
scope
:
b
||
this
.
scope
});
return
a
},
addToTop
:
function
(
a
,
b
){
this
.
listeners
.
unshift
({
cb
:
a
,
scope
:
b
||
this
.
scope
});
return
a
},
remove
:
function
(
a
){
var
b
=
this
.
listeners
,
c
=
null
;
tinymce
.
each
(
b
,
function
(
e
,
d
){
if
(
a
==
e
.
cb
){
c
=
a
;
b
.
splice
(
d
,
1
);
return
false
}});
return
c
},
dispatch
:
function
(){
var
f
,
d
=
arguments
,
e
,
b
=
this
.
listeners
,
g
;
for
(
e
=
0
;
e
<
b
.
length
;
e
++
){
g
=
b
[
e
];
f
=
g
.
cb
.
apply
(
g
.
scope
,
d
);
if
(
f
===
false
){
break
}}
return
f
}});(
function
(){
var
a
=
tinymce
.
each
;
tinymce
.
create
(
"tinymce.util.URI"
,{
URI
:
function
(
e
,
g
){
var
f
=
this
,
h
,
d
,
c
;
e
=
tinymce
.
trim
(
e
);
g
=
f
.
settings
=
g
||
{};
if
(
/^(mailto|tel|news|javascript|about|data):/i
.
test
(
e
)
||
/^\s*#/
.
test
(
e
)){
f
.
source
=
e
;
return
}
if
(
e
.
indexOf
(
"/"
)
===
0
&&
e
.
indexOf
(
"//"
)
!==
0
){
e
=
(
g
.
base_uri
?
g
.
base_uri
.
protocol
||
"http"
:
"http"
)
+
"://mce_host"
+
e
}
if
(
!
/^\w*:?\/\//
.
test
(
e
)){
e
=
(
g
.
base_uri
.
protocol
||
"http"
)
+
"://mce_host"
+
f
.
toAbsPath
(
g
.
base_uri
.
path
,
e
)}
e
=
e
.
replace
(
/@@/g
,
"(mce_at)"
);
e
=
/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
.
exec
(
e
);
a
([
"source"
,
"protocol"
,
"authority"
,
"userInfo"
,
"user"
,
"password"
,
"host"
,
"port"
,
"relative"
,
"path"
,
"directory"
,
"file"
,
"query"
,
"anchor"
],
function
(
b
,
j
){
var
k
=
e
[
j
];
if
(
k
){
k
=
k
.
replace
(
/\(mce_at\)/g
,
"@@"
)}
f
[
b
]
=
k
});
if
(
c
=
g
.
base_uri
){
if
(
!
f
.
protocol
){
f
.
protocol
=
c
.
protocol
}
if
(
!
f
.
userInfo
){
f
.
userInfo
=
c
.
userInfo
}
if
(
!
f
.
port
&&
f
.
host
==
"mce_host"
){
f
.
port
=
c
.
port
}
if
(
!
f
.
host
||
f
.
host
==
"mce_host"
){
f
.
host
=
c
.
host
}
f
.
source
=
""
}},
setPath
:
function
(
c
){
var
b
=
this
;
c
=
/^(.*?)\/?(\w+)?$/
.
exec
(
c
);
b
.
path
=
c
[
0
];
b
.
directory
=
c
[
1
];
b
.
file
=
c
[
2
];
b
.
source
=
""
;
b
.
getURI
()},
toRelative
:
function
(
b
){
var
c
=
this
,
d
;
if
(
b
===
"./"
){
return
b
}
b
=
new
tinymce
.
util
.
URI
(
b
,{
base_uri
:
c
});
if
((
b
.
host
!=
"mce_host"
&&
c
.
host
!=
b
.
host
&&
b
.
host
)
||
c
.
port
!=
b
.
port
||
c
.
protocol
!=
b
.
protocol
){
return
b
.
getURI
()}
d
=
c
.
toRelPath
(
c
.
path
,
b
.
path
);
if
(
b
.
query
){
d
+=
"?"
+
b
.
query
}
if
(
b
.
anchor
){
d
+=
"#"
+
b
.
anchor
}
return
d
},
toAbsolute
:
function
(
b
,
c
){
var
b
=
new
tinymce
.
util
.
URI
(
b
,{
base_uri
:
this
});
return
b
.
getURI
(
this
.
host
==
b
.
host
&&
this
.
protocol
==
b
.
protocol
?
c
:
0
)},
toRelPath
:
function
(
g
,
h
){
var
c
,
f
=
0
,
d
=
""
,
e
,
b
;
g
=
g
.
substring
(
0
,
g
.
lastIndexOf
(
"/"
));
g
=
g
.
split
(
"/"
);
c
=
h
.
split
(
"/"
);
if
(
g
.
length
>=
c
.
length
){
for
(
e
=
0
,
b
=
g
.
length
;
e
<
b
;
e
++
){
if
(
e
>=
c
.
length
||
g
[
e
]
!=
c
[
e
]){
f
=
e
+
1
;
break
}}}
if
(
g
.
length
<
c
.
length
){
for
(
e
=
0
,
b
=
c
.
length
;
e
<
b
;
e
++
){
if
(
e
>=
g
.
length
||
g
[
e
]
!=
c
[
e
]){
f
=
e
+
1
;
break
}}}
if
(
f
==
1
){
return
h
}
for
(
e
=
0
,
b
=
g
.
length
-
(
f
-
1
);
e
<
b
;
e
++
){
d
+=
"../"
}
for
(
e
=
f
-
1
,
b
=
c
.
length
;
e
<
b
;
e
++
){
if
(
e
!=
f
-
1
){
d
+=
"/"
+
c
[
e
]}
else
{
d
+=
c
[
e
]}}
return
d
},
toAbsPath
:
function
(
e
,
f
){
var
c
,
b
=
0
,
h
=
[],
d
,
g
;
d
=
/\/$/
.
test
(
f
)
?
"/"
:
""
;
e
=
e
.
split
(
"/"
);
f
=
f
.
split
(
"/"
);
a
(
e
,
function
(
i
){
if
(
i
){
h
.
push
(
i
)}});
e
=
h
;
for
(
c
=
f
.
length
-
1
,
h
=
[];
c
>=
0
;
c
--
){
if
(
f
[
c
].
length
==
0
||
f
[
c
]
==
"."
){
continue
}
if
(
f
[
c
]
==
".."
){
b
++
;
continue
}
if
(
b
>
0
){
b
--
;
continue
}
h
.
push
(
f
[
c
])}
c
=
e
.
length
-
b
;
if
(
c
<=
0
){
g
=
h
.
reverse
().
join
(
"/"
)}
else
{
g
=
e
.
slice
(
0
,
c
).
join
(
"/"
)
+
"/"
+
h
.
reverse
().
join
(
"/"
)}
if
(
g
.
indexOf
(
"/"
)
!==
0
){
g
=
"/"
+
g
}
if
(
d
&&
g
.
lastIndexOf
(
"/"
)
!==
g
.
length
-
1
){
g
+=
d
}
return
g
},
getURI
:
function
(
d
){
var
c
,
b
=
this
;
if
(
!
b
.
source
||
d
){
c
=
""
;
if
(
!
d
){
if
(
b
.
protocol
){
c
+=
b
.
protocol
+
"://"
}
if
(
b
.
userInfo
){
c
+=
b
.
userInfo
+
"@"
}
if
(
b
.
host
){
c
+=
b
.
host
}
if
(
b
.
port
){
c
+=
":"
+
b
.
port
}}
if
(
b
.
path
){
c
+=
b
.
path
}
if
(
b
.
query
){
c
+=
"?"
+
b
.
query
}
if
(
b
.
anchor
){
c
+=
"#"
+
b
.
anchor
}
b
.
source
=
c
}
return
b
.
source
}})})();(
function
(){
var
a
=
tinymce
.
each
;
tinymce
.
create
(
"static tinymce.util.Cookie"
,{
getHash
:
function
(
d
){
var
b
=
this
.
get
(
d
),
c
;
if
(
b
){
a
(
b
.
split
(
"&"
),
function
(
e
){
e
=
e
.
split
(
"="
);
c
=
c
||
{};
c
[
unescape
(
e
[
0
])]
=
unescape
(
e
[
1
])})}
return
c
},
setHash
:
function
(
j
,
b
,
g
,
f
,
i
,
c
){
var
h
=
""
;
a
(
b
,
function
(
e
,
d
){
h
+=
(
!
h
?
""
:
"&"
)
+
escape
(
d
)
+
"="
+
escape
(
e
)});
this
.
set
(
j
,
h
,
g
,
f
,
i
,
c
)},
get
:
function
(
i
){
var
h
=
document
.
cookie
,
g
,
f
=
i
+
"="
,
d
;
if
(
!
h
){
return
}
d
=
h
.
indexOf
(
"; "
+
f
);
if
(
d
==-
1
){
d
=
h
.
indexOf
(
f
);
if
(
d
!=
0
){
return
null
}}
else
{
d
+=
2
}
g
=
h
.
indexOf
(
";"
,
d
);
if
(
g
==-
1
){
g
=
h
.
length
}
return
unescape
(
h
.
substring
(
d
+
f
.
length
,
g
))},
set
:
function
(
i
,
b
,
g
,
f
,
h
,
c
){
document
.
cookie
=
i
+
"="
+
escape
(
b
)
+
((
g
)
?
"; expires="
+
g
.
toGMTString
()
:
""
)
+
((
f
)
?
"; path="
+
escape
(
f
)
:
""
)
+
((
h
)
?
"; domain="
+
h
:
""
)
+
((
c
)
?
"; secure"
:
""
)},
remove
:
function
(
e
,
b
){
var
c
=
new
Date
();
c
.
setTime
(
c
.
getTime
()
-
1000
);
this
.
set
(
e
,
""
,
c
,
b
,
c
)}})})();(
function
(){
function
serialize
(
o
,
quote
){
var
i
,
v
,
t
;
quote
=
quote
||
'"'
;
if
(
o
==
null
){
return
"null"
}
t
=
typeof
o
;
if
(
t
==
"string"
){
v
=
"\bb\tt\nn\ff\rr\"\"''\\\\"
;
return
quote
+
o
.
replace
(
/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g
,
function
(
a
,
b
){
if
(
quote
===
'"'
&&
a
===
"'"
){
return
a
}
i
=
v
.
indexOf
(
b
);
if
(
i
+
1
){
return
"\\"
+
v
.
charAt
(
i
+
1
)}
a
=
b
.
charCodeAt
().
toString
(
16
);
return
"\\u"
+
"0000"
.
substring
(
a
.
length
)
+
a
})
+
quote
}
if
(
t
==
"object"
){
if
(
o
.
hasOwnProperty
&&
o
instanceof
Array
){
for
(
i
=
0
,
v
=
"["
;
i
<
o
.
length
;
i
++
){
v
+=
(
i
>
0
?
","
:
""
)
+
serialize
(
o
[
i
],
quote
)}
return
v
+
"]"
}
v
=
"{"
;
for
(
i
in
o
){
v
+=
typeof
o
[
i
]
!=
"function"
?
(
v
.
length
>
1
?
","
+
quote
:
quote
)
+
i
+
quote
+
":"
+
serialize
(
o
[
i
],
quote
)
:
""
}
return
v
+
"}"
}
return
""
+
o
}
tinymce
.
util
.
JSON
=
{
serialize
:
serialize
,
parse
:
function
(
s
){
try
{
return
eval
(
"("
+
s
+
")"
)}
catch
(
ex
){}}}})();
tinymce
.
create
(
"static tinymce.util.XHR"
,{
send
:
function
(
g
){
var
a
,
e
,
b
=
window
,
h
=
0
;
g
.
scope
=
g
.
scope
||
this
;
g
.
success_scope
=
g
.
success_scope
||
g
.
scope
;
g
.
error_scope
=
g
.
error_scope
||
g
.
scope
;
g
.
async
=
g
.
async
===
false
?
false
:
true
;
g
.
data
=
g
.
data
||
""
;
function
d
(
i
){
a
=
0
;
try
{
a
=
new
ActiveXObject
(
i
)}
catch
(
c
){}
return
a
}
a
=
b
.
XMLHttpRequest
?
new
XMLHttpRequest
()
:
d
(
"Microsoft.XMLHTTP"
)
||
d
(
"Msxml2.XMLHTTP"
);
if
(
a
){
if
(
a
.
overrideMimeType
){
a
.
overrideMimeType
(
g
.
content_type
)}
a
.
open
(
g
.
type
||
(
g
.
data
?
"POST"
:
"GET"
),
g
.
url
,
g
.
async
);
if
(
g
.
content_type
){
a
.
setRequestHeader
(
"Content-Type"
,
g
.
content_type
)}
a
.
setRequestHeader
(
"X-Requested-With"
,
"XMLHttpRequest"
);
a
.
send
(
g
.
data
);
function
f
(){
if
(
!
g
.
async
||
a
.
readyState
==
4
||
h
++>
10000
){
if
(
g
.
success
&&
h
<
10000
&&
a
.
status
==
200
){
g
.
success
.
call
(
g
.
success_scope
,
""
+
a
.
responseText
,
a
,
g
)}
else
{
if
(
g
.
error
){
g
.
error
.
call
(
g
.
error_scope
,
h
>
10000
?
"TIMED_OUT"
:
"GENERAL"
,
a
,
g
)}}
a
=
null
}
else
{
b
.
setTimeout
(
f
,
10
)}}
if
(
!
g
.
async
){
return
f
()}
e
=
b
.
setTimeout
(
f
,
10
)}}});(
function
(){
var
c
=
tinymce
.
extend
,
b
=
tinymce
.
util
.
JSON
,
a
=
tinymce
.
util
.
XHR
;
tinymce
.
create
(
"tinymce.util.JSONRequest"
,{
JSONRequest
:
function
(
d
){
this
.
settings
=
c
({},
d
);
this
.
count
=
0
},
send
:
function
(
f
){
var
e
=
f
.
error
,
d
=
f
.
success
;
f
=
c
(
this
.
settings
,
f
);
f
.
success
=
function
(
h
,
g
){
h
=
b
.
parse
(
h
);
if
(
typeof
(
h
)
==
"undefined"
){
h
=
{
error
:
"JSON Parse error."
}}
if
(
h
.
error
){
e
.
call
(
f
.
error_scope
||
f
.
scope
,
h
.
error
,
g
)}
else
{
d
.
call
(
f
.
success_scope
||
f
.
scope
,
h
.
result
)}};
f
.
error
=
function
(
h
,
g
){
if
(
e
){
e
.
call
(
f
.
error_scope
||
f
.
scope
,
h
,
g
)}};
f
.
data
=
b
.
serialize
({
id
:
f
.
id
||
"c"
+
(
this
.
count
++
),
method
:
f
.
method
,
params
:
f
.
params
});
f
.
content_type
=
"application/json"
;
a
.
send
(
f
)},
"static"
:
{
sendRPC
:
function
(
d
){
return
new
tinymce
.
util
.
JSONRequest
().
send
(
d
)}}})}());(
function
(
j
){
var
a
,
g
,
d
,
k
=
/[&\"\u007E-\uD7FF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g
,
b
=
/[<>&\u007E-\uD7FF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g
,
f
=
/[<>&\"\']/g
,
c
=
/&(#)?([\w]+);/g
,
i
=
{
128
:
"\u20AC"
,
130
:
"\u201A"
,
131
:
"\u0192"
,
132
:
"\u201E"
,
133
:
"\u2026"
,
134
:
"\u2020"
,
135
:
"\u2021"
,
136
:
"\u02C6"
,
137
:
"\u2030"
,
138
:
"\u0160"
,
139
:
"\u2039"
,
140
:
"\u0152"
,
142
:
"\u017D"
,
145
:
"\u2018"
,
146
:
"\u2019"
,
147
:
"\u201C"
,
148
:
"\u201D"
,
149
:
"\u2022"
,
150
:
"\u2013"
,
151
:
"\u2014"
,
152
:
"\u02DC"
,
153
:
"\u2122"
,
154
:
"\u0161"
,
155
:
"\u203A"
,
156
:
"\u0153"
,
158
:
"\u017E"
,
159
:
"\u0178"
};
g
=
{
'"'
:
"""
,
"'"
:
"'"
,
"<"
:
"<"
,
">"
:
">"
,
"&"
:
"&"
};
d
=
{
"<"
:
"<"
,
">"
:
">"
,
"&"
:
"&"
,
"""
:
'"'
,
"'"
:
"'"
};
function
h
(
l
){
var
m
;
m
=
document
.
createElement
(
"div"
);
m
.
innerHTML
=
l
;
return
m
.
textContent
||
m
.
innerText
||
l
}
function
e
(
m
,
p
){
var
n
,
o
,
l
,
q
=
{};
if
(
m
){
m
=
m
.
split
(
","
);
p
=
p
||
10
;
for
(
n
=
0
;
n
<
m
.
length
;
n
+=
2
){
o
=
String
.
fromCharCode
(
parseInt
(
m
[
n
],
p
));
if
(
!
g
[
o
]){
l
=
"&"
+
m
[
n
+
1
]
+
";"
;
q
[
o
]
=
l
;
q
[
l
]
=
o
}}
return
q
}}
a
=
e
(
"50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro"
,
32
);
j
.
html
=
j
.
html
||
{};
j
.
html
.
Entities
=
{
encodeRaw
:
function
(
m
,
l
){
return
m
.
replace
(
l
?
k
:
b
,
function
(
n
){
return
g
[
n
]
||
n
})},
encodeAllRaw
:
function
(
l
){
return
(
""
+
l
).
replace
(
f
,
function
(
m
){
return
g
[
m
]
||
m
})},
encodeNumeric
:
function
(
m
,
l
){
return
m
.
replace
(
l
?
k
:
b
,
function
(
n
){
if
(
n
.
length
>
1
){
return
"&#"
+
(((
n
.
charCodeAt
(
0
)
-
55296
)
*
1024
)
+
(
n
.
charCodeAt
(
1
)
-
56320
)
+
65536
)
+
";"
}
return
g
[
n
]
||
"&#"
+
n
.
charCodeAt
(
0
)
+
";"
})},
encodeNamed
:
function
(
n
,
l
,
m
){
m
=
m
||
a
;
return
n
.
replace
(
l
?
k
:
b
,
function
(
o
){
return
g
[
o
]
||
m
[
o
]
||
o
})},
getEncodeFunc
:
function
(
l
,
o
){
var
p
=
j
.
html
.
Entities
;
o
=
e
(
o
)
||
a
;
function
m
(
r
,
q
){
return
r
.
replace
(
q
?
k
:
b
,
function
(
s
){
return
g
[
s
]
||
o
[
s
]
||
"&#"
+
s
.
charCodeAt
(
0
)
+
";"
||
s
})}
function
n
(
r
,
q
){
return
p
.
encodeNamed
(
r
,
q
,
o
)}
l
=
j
.
makeMap
(
l
.
replace
(
/\+/g
,
","
));
if
(
l
.
named
&&
l
.
numeric
){
return
m
}
if
(
l
.
named
){
if
(
o
){
return
n
}
return
p
.
encodeNamed
}
if
(
l
.
numeric
){
return
p
.
encodeNumeric
}
return
p
.
encodeRaw
},
decode
:
function
(
l
){
return
l
.
replace
(
c
,
function
(
n
,
m
,
o
){
if
(
m
){
o
=
parseInt
(
o
);
if
(
o
>
65535
){
o
-=
65536
;
return
String
.
fromCharCode
(
55296
+
(
o
>>
10
),
56320
+
(
o
&
1023
))}
else
{
return
i
[
o
]
||
String
.
fromCharCode
(
o
)}}
return
d
[
n
]
||
a
[
n
]
||
h
(
n
)})}}})(
tinymce
);
tinymce
.
html
.
Styles
=
function
(
d
,
f
){
var
k
=
/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi
,
h
=
/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi
,
b
=
/\s*([^:]+):\s*([^;]+);?/g
,
l
=
/\s+$/
,
m
=
/rgb/
,
e
,
g
,
a
=
{},
j
;
d
=
d
||
{};
j
=
"\\\" \\' \\; \\: ; : _"
.
split
(
" "
);
for
(
g
=
0
;
g
<
j
.
length
;
g
++
){
a
[
j
[
g
]]
=
"_"
+
g
;
a
[
"_"
+
g
]
=
j
[
g
]}
function
c
(
n
,
q
,
p
,
i
){
function
o
(
r
){
r
=
parseInt
(
r
).
toString
(
16
);
return
r
.
length
>
1
?
r
:
"0"
+
r
}
return
"#"
+
o
(
q
)
+
o
(
p
)
+
o
(
i
)}
return
{
toHex
:
function
(
i
){
return
i
.
replace
(
k
,
c
)},
parse
:
function
(
r
){
var
y
=
{},
p
,
n
,
v
,
q
,
u
=
d
.
url_converter
,
x
=
d
.
url_converter_scope
||
this
;
function
o
(
C
,
F
){
var
E
,
B
,
A
,
D
;
E
=
y
[
C
+
"-top"
+
F
];
if
(
!
E
){
return
}
B
=
y
[
C
+
"-right"
+
F
];
if
(
E
!=
B
){
return
}
A
=
y
[
C
+
"-bottom"
+
F
];
if
(
B
!=
A
){
return
}
D
=
y
[
C
+
"-left"
+
F
];
if
(
A
!=
D
){
return
}
y
[
C
+
F
]
=
D
;
delete
y
[
C
+
"-top"
+
F
];
delete
y
[
C
+
"-right"
+
F
];
delete
y
[
C
+
"-bottom"
+
F
];
delete
y
[
C
+
"-left"
+
F
]}
function
t
(
B
){
var
C
=
y
[
B
],
A
;
if
(
!
C
||
C
.
indexOf
(
" "
)
<
0
){
return
}
C
=
C
.
split
(
" "
);
A
=
C
.
length
;
while
(
A
--
){
if
(
C
[
A
]
!==
C
[
0
]){
return
false
}}
y
[
B
]
=
C
[
0
];
return
true
}
function
z
(
C
,
B
,
A
,
D
){
if
(
!
t
(
B
)){
return
}
if
(
!
t
(
A
)){
return
}
if
(
!
t
(
D
)){
return
}
y
[
C
]
=
y
[
B
]
+
" "
+
y
[
A
]
+
" "
+
y
[
D
];
delete
y
[
B
];
delete
y
[
A
];
delete
y
[
D
]}
function
s
(
A
){
q
=
true
;
return
a
[
A
]}
function
i
(
B
,
A
){
if
(
q
){
B
=
B
.
replace
(
/_[0-9]/g
,
function
(
C
){
return
a
[
C
]})}
if
(
!
A
){
B
=
B
.
replace
(
/\\([\'\";:])/g
,
"$1"
)}
return
B
}
if
(
r
){
r
=
r
.
replace
(
/\\[\"\';:_]/g
,
s
).
replace
(
/\"[^\"]+\"|\'[^\']+\'/g
,
function
(
A
){
return
A
.
replace
(
/[;:]/g
,
s
)});
while
(
p
=
b
.
exec
(
r
)){
n
=
p
[
1
].
replace
(
l
,
""
).
toLowerCase
();
v
=
p
[
2
].
replace
(
l
,
""
);
if
(
n
&&
v
.
length
>
0
){
if
(
n
===
"font-weight"
&&
v
===
"700"
){
v
=
"bold"
}
else
{
if
(
n
===
"color"
||
n
===
"background-color"
){
v
=
v
.
toLowerCase
()}}
v
=
v
.
replace
(
k
,
c
);
v
=
v
.
replace
(
h
,
function
(
B
,
A
,
E
,
D
,
F
,
C
){
F
=
F
||
C
;
if
(
F
){
F
=
i
(
F
);
return
"'"
+
F
.
replace
(
/\'/g
,
"\\'"
)
+
"'"
}
A
=
i
(
A
||
E
||
D
);
if
(
u
){
A
=
u
.
call
(
x
,
A
,
"style"
)}
return
"url('"
+
A
.
replace
(
/\'/g
,
"\\'"
)
+
"')"
});
y
[
n
]
=
q
?
i
(
v
,
true
)
:
v
}
b
.
lastIndex
=
p
.
index
+
p
[
0
].
length
}
o
(
"border"
,
""
);
o
(
"border"
,
"-width"
);
o
(
"border"
,
"-color"
);
o
(
"border"
,
"-style"
);
o
(
"padding"
,
""
);
o
(
"margin"
,
""
);
z
(
"border"
,
"border-width"
,
"border-style"
,
"border-color"
);
if
(
y
.
border
===
"medium none"
){
delete
y
.
border
}}
return
y
},
serialize
:
function
(
p
,
r
){
var
o
=
""
,
n
,
q
;
function
i
(
t
){
var
x
,
u
,
s
,
t
,
v
;
x
=
f
.
styles
[
t
];
if
(
x
){
for
(
u
=
0
,
s
=
x
.
length
;
u
<
s
;
u
++
){
t
=
x
[
u
];
v
=
p
[
t
];
if
(
v
!==
e
&&
v
.
length
>
0
){
o
+=
(
o
.
length
>
0
?
" "
:
""
)
+
t
+
": "
+
v
+
";"
}}}}
if
(
r
&&
f
&&
f
.
styles
){
i
(
"*"
);
i
(
n
)}
else
{
for
(
n
in
p
){
q
=
p
[
n
];
if
(
q
!==
e
&&
q
.
length
>
0
){
o
+=
(
o
.
length
>
0
?
" "
:
""
)
+
n
+
": "
+
q
+
";"
}}}
return
o
}}};(
function
(
l
){
var
g
=
{},
i
,
k
,
f
,
d
,
b
,
e
,
c
=
l
.
makeMap
,
j
=
l
.
each
;
function
h
(
n
,
m
){
return
n
.
split
(
m
||
","
)}
function
a
(
q
,
p
){
var
n
,
o
=
{};
function
m
(
r
){
return
r
.
replace
(
/[A-Z]+/g
,
function
(
s
){
return
m
(
q
[
s
])})}
for
(
n
in
q
){
if
(
q
.
hasOwnProperty
(
n
)){
q
[
n
]
=
m
(
q
[
n
])}}
m
(
p
).
replace
(
/#/g
,
"#text"
).
replace
(
/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g
,
function
(
u
,
s
,
r
,
t
){
r
=
h
(
r
,
"|"
);
o
[
s
]
=
{
attributes
:
c
(
r
),
attributesOrder
:
r
,
children
:
c
(
t
,
"|"
,{
"#comment"
:
{}})}});
return
o
}
k
=
"h1,h2,h3,h4,h5,h6,hr,p,div,address,pre,form,table,tbody,thead,tfoot,th,tr,td,li,ol,ul,caption,blockquote,center,dl,dt,dd,dir,fieldset,noscript,menu,isindex,samp,header,footer,article,section,hgroup"
;
k
=
c
(
k
,
","
,
c
(
k
.
toUpperCase
()));
g
=
a
({
Z
:
"H|K|N|O|P"
,
Y
:
"X|form|R|Q"
,
ZG
:
"E|span|width|align|char|charoff|valign"
,
X
:
"p|T|div|U|W|isindex|fieldset|table"
,
ZF
:
"E|align|char|charoff|valign"
,
W
:
"pre|hr|blockquote|address|center|noframes"
,
ZE
:
"abbr|axis|headers|scope|rowspan|colspan|align|char|charoff|valign|nowrap|bgcolor|width|height"
,
ZD
:
"[E][S]"
,
U
:
"ul|ol|dl|menu|dir"
,
ZC
:
"p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q"
,
T
:
"h1|h2|h3|h4|h5|h6"
,
ZB
:
"X|S|Q"
,
S
:
"R|P"
,
ZA
:
"a|G|J|M|O|P"
,
R
:
"a|H|K|N|O"
,
Q
:
"noscript|P"
,
P
:
"ins|del|script"
,
O
:
"input|select|textarea|label|button"
,
N
:
"M|L"
,
M
:
"em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym"
,
L
:
"sub|sup"
,
K
:
"J|I"
,
J
:
"tt|i|b|u|s|strike"
,
I
:
"big|small|font|basefont"
,
H
:
"G|F"
,
G
:
"br|span|bdo"
,
F
:
"object|applet|img|map|iframe"
,
E
:
"A|B|C"
,
D
:
"accesskey|tabindex|onfocus|onblur"
,
C
:
"onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup"
,
B
:
"lang|xml:lang|dir"
,
A
:
"id|class|style|title"
},
"script[id|charset|type|language|src|defer|xml:space][]style[B|id|type|media|title|xml:space][]object[E|declare|classid|codebase|data|type|codetype|archive|standby|width|height|usemap|name|tabindex|align|border|hspace|vspace][#|param|Y]param[id|name|value|valuetype|type][]p[E|align][#|S]a[E|D|charset|type|name|href|hreflang|rel|rev|shape|coords|target][#|Z]br[A|clear][]span[E][#|S]bdo[A|C|B][#|S]applet[A|codebase|archive|code|object|alt|name|width|height|align|hspace|vspace][#|param|Y]h1[E|align][#|S]img[E|src|alt|name|longdesc|width|height|usemap|ismap|align|border|hspace|vspace][]map[B|C|A|name][X|form|Q|area]h2[E|align][#|S]iframe[A|longdesc|name|src|frameborder|marginwidth|marginheight|scrolling|align|width|height][#|Y]h3[E|align][#|S]tt[E][#|S]i[E][#|S]b[E][#|S]u[E][#|S]s[E][#|S]strike[E][#|S]big[E][#|S]small[E][#|S]font[A|B|size|color|face][#|S]basefont[id|size|color|face][]em[E][#|S]strong[E][#|S]dfn[E][#|S]code[E][#|S]q[E|cite][#|S]samp[E][#|S]kbd[E][#|S]var[E][#|S]cite[E][#|S]abbr[E][#|S]acronym[E][#|S]sub[E][#|S]sup[E][#|S]input[E|D|type|name|value|checked|disabled|readonly|size|maxlength|src|alt|usemap|onselect|onchange|accept|align][]select[E|name|size|multiple|disabled|tabindex|onfocus|onblur|onchange][optgroup|option]optgroup[E|disabled|label][option]option[E|selected|disabled|label|value][]textarea[E|D|name|rows|cols|disabled|readonly|onselect|onchange][]label[E|for|accesskey|onfocus|onblur][#|S]button[E|D|name|value|type|disabled][#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]h4[E|align][#|S]ins[E|cite|datetime][#|Y]h5[E|align][#|S]del[E|cite|datetime][#|Y]h6[E|align][#|S]div[E|align][#|Y]ul[E|type|compact][li]li[E|type|value][#|Y]ol[E|type|compact|start][li]dl[E|compact][dt|dd]dt[E][#|S]dd[E][#|Y]menu[E|compact][li]dir[E|compact][li]pre[E|width|xml:space][#|ZA]hr[E|align|noshade|size|width][]blockquote[E|cite][#|Y]address[E][#|S|p]center[E][#|Y]noframes[E][#|Y]isindex[A|B|prompt][]fieldset[E][#|legend|Y]legend[E|accesskey|align][#|S]table[E|summary|width|border|frame|rules|cellspacing|cellpadding|align|bgcolor][caption|col|colgroup|thead|tfoot|tbody|tr]caption[E|align][#|S]col[ZG][]colgroup[ZG][col]thead[ZF][tr]tr[ZF|bgcolor][th|td]th[E|ZE][#|Y]form[E|action|method|name|enctype|onsubmit|onreset|accept|accept-charset|target][#|X|R|Q]noscript[E][#|Y]td[E|ZE][#|Y]tfoot[ZF][tr]tbody[ZF][tr]area[E|D|shape|coords|href|nohref|alt|target][]base[id|href|target][]body[E|onload|onunload|background|bgcolor|text|link|vlink|alink][#|Y]"
);
i
=
c
(
"checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected,preload,autoplay,loop,controls"
);
f
=
c
(
"area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed,source"
);
d
=
l
.
extend
(
c
(
"td,th,iframe,video,object"
),
f
);
b
=
c
(
"pre,script,style"
);
e
=
c
(
"colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr"
);
l
.
html
.
Schema
=
function
(
p
){
var
x
=
this
,
m
=
{},
n
=
{},
u
=
[],
o
;
p
=
p
||
{};
if
(
p
.
verify_html
===
false
){
p
.
valid_elements
=
"*[*]"
}
if
(
p
.
valid_styles
){
o
=
{};
j
(
p
.
valid_styles
,
function
(
z
,
y
){
o
[
y
]
=
l
.
explode
(
z
)})}
function
v
(
y
){
return
new
RegExp
(
"^"
+
y
.
replace
(
/([?+*])/g
,
".$1"
)
+
"$"
)}
function
r
(
F
){
var
E
,
A
,
T
,
P
,
U
,
z
,
C
,
O
,
R
,
K
,
S
,
W
,
I
,
D
,
Q
,
y
,
M
,
B
,
V
,
X
,
J
,
N
,
H
=
/^([#+-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/
,
L
=
/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/
,
G
=
/[*?+]/
;
if
(
F
){
F
=
h
(
F
);
if
(
m
[
"@"
]){
M
=
m
[
"@"
].
attributes
;
B
=
m
[
"@"
].
attributesOrder
}
for
(
E
=
0
,
A
=
F
.
length
;
E
<
A
;
E
++
){
z
=
H
.
exec
(
F
[
E
]);
if
(
z
){
Q
=
z
[
1
];
K
=
z
[
2
];
y
=
z
[
3
];
R
=
z
[
4
];
I
=
{};
D
=
[];
C
=
{
attributes
:
I
,
attributesOrder
:
D
};
if
(
Q
===
"#"
){
C
.
paddEmpty
=
true
}
if
(
Q
===
"-"
){
C
.
removeEmpty
=
true
}
if
(
M
){
for
(
X
in
M
){
I
[
X
]
=
M
[
X
]}
D
.
push
.
apply
(
D
,
B
)}
if
(
R
){
R
=
h
(
R
,
"|"
);
for
(
T
=
0
,
P
=
R
.
length
;
T
<
P
;
T
++
){
z
=
L
.
exec
(
R
[
T
]);
if
(
z
){
O
=
{};
W
=
z
[
1
];
S
=
z
[
2
].
replace
(
/::/g
,
":"
);
Q
=
z
[
3
];
N
=
z
[
4
];
if
(
W
===
"!"
){
C
.
attributesRequired
=
C
.
attributesRequired
||
[];
C
.
attributesRequired
.
push
(
S
);
O
.
required
=
true
}
if
(
W
===
"-"
){
delete
I
[
S
];
D
.
splice
(
l
.
inArray
(
D
,
S
),
1
);
continue
}
if
(
Q
){
if
(
Q
===
"="
){
C
.
attributesDefault
=
C
.
attributesDefault
||
[];
C
.
attributesDefault
.
push
({
name
:
S
,
value
:
N
});
O
.
defaultValue
=
N
}
if
(
Q
===
":"
){
C
.
attributesForced
=
C
.
attributesForced
||
[];
C
.
attributesForced
.
push
({
name
:
S
,
value
:
N
});
O
.
forcedValue
=
N
}
if
(
Q
===
"<"
){
O
.
validValues
=
c
(
N
,
"?"
)}}
if
(
G
.
test
(
S
)){
C
.
attributePatterns
=
C
.
attributePatterns
||
[];
O
.
pattern
=
v
(
S
);
C
.
attributePatterns
.
push
(
O
)}
else
{
if
(
!
I
[
S
]){
D
.
push
(
S
)}
I
[
S
]
=
O
}}}}
if
(
!
M
&&
K
==
"@"
){
M
=
I
;
B
=
D
}
if
(
y
){
C
.
outputName
=
K
;
m
[
y
]
=
C
}
if
(
G
.
test
(
K
)){
C
.
pattern
=
v
(
K
);
u
.
push
(
C
)}
else
{
m
[
K
]
=
C
}}}}}
function
t
(
y
){
m
=
{};
u
=
[];
r
(
y
);
j
(
g
,
function
(
A
,
z
){
n
[
z
]
=
A
.
children
})}
function
q
(
z
){
var
y
=
/^(~)?(.+)$/
;
if
(
z
){
j
(
h
(
z
),
function
(
C
){
var
B
=
y
.
exec
(
C
),
D
=
B
[
1
]
===
"~"
?
"span"
:
"div"
,
A
=
B
[
2
];
n
[
A
]
=
n
[
D
];
j
(
n
,
function
(
E
,
F
){
if
(
E
[
D
]){
E
[
A
]
=
E
[
D
]}})})}}
function
s
(
z
){
var
y
=
/^([+\-]?)(\w+)\[([^\]]+)\]$/
;
if
(
z
){
j
(
h
(
z
),
function
(
D
){
var
C
=
y
.
exec
(
D
),
A
,
B
;
if
(
C
){
B
=
C
[
1
];
if
(
B
){
A
=
n
[
C
[
2
]]}
else
{
A
=
n
[
C
[
2
]]
=
{
"#comment"
:
{}}}
A
=
n
[
C
[
2
]];
j
(
h
(
C
[
3
],
"|"
),
function
(
E
){
if
(
B
===
"-"
){
delete
A
[
E
]}
else
{
A
[
E
]
=
{}}})}})}}
if
(
!
p
.
valid_elements
){
j
(
g
,
function
(
z
,
y
){
m
[
y
]
=
{
attributes
:
z
.
attributes
,
attributesOrder
:
z
.
attributesOrder
};
n
[
y
]
=
z
.
children
});
j
(
h
(
"strong/b,em/i"
),
function
(
y
){
y
=
h
(
y
,
"/"
);
m
[
y
[
1
]].
outputName
=
y
[
0
]});
m
.
img
.
attributesDefault
=
[{
name
:
"alt"
,
value
:
""
}];
j
(
h
(
"ol,ul,li,sub,sup,blockquote,tr,div,span,font,a,table,tbody"
),
function
(
y
){
m
[
y
].
removeEmpty
=
true
});
j
(
h
(
"p,h1,h2,h3,h4,h5,h6,th,td,pre,div,address,caption"
),
function
(
y
){
m
[
y
].
paddEmpty
=
true
})}
else
{
t
(
p
.
valid_elements
)}
q
(
p
.
custom_elements
);
s
(
p
.
valid_children
);
r
(
p
.
extended_valid_elements
);
s
(
"+ol[ul|ol],+ul[ul|ol]"
);
if
(
p
.
invalid_elements
){
l
.
each
(
l
.
explode
(
p
.
invalid_elements
),
function
(
y
){
if
(
m
[
y
]){
delete
m
[
y
]}})}
x
.
children
=
n
;
x
.
styles
=
o
;
x
.
getBoolAttrs
=
function
(){
return
i
};
x
.
getBlockElements
=
function
(){
return
k
};
x
.
getShortEndedElements
=
function
(){
return
f
};
x
.
getSelfClosingElements
=
function
(){
return
e
};
x
.
getNonEmptyElements
=
function
(){
return
d
};
x
.
getWhiteSpaceElements
=
function
(){
return
b
};
x
.
isValidChild
=
function
(
y
,
A
){
var
z
=
n
[
y
];
return
!!
(
z
&&
z
[
A
])};
x
.
getElementRule
=
function
(
y
){
var
A
=
m
[
y
],
z
;
if
(
A
){
return
A
}
z
=
u
.
length
;
while
(
z
--
){
A
=
u
[
z
];
if
(
A
.
pattern
.
test
(
y
)){
return
A
}}};
x
.
addValidElements
=
r
;
x
.
setValidElements
=
t
;
x
.
addCustomElements
=
q
;
x
.
addValidChildren
=
s
};
l
.
html
.
Schema
.
boolAttrMap
=
i
;
l
.
html
.
Schema
.
blockElementsMap
=
k
})(
tinymce
);(
function
(
a
){
a
.
html
.
SaxParser
=
function
(
c
,
e
){
var
b
=
this
,
d
=
function
(){};
c
=
c
||
{};
b
.
schema
=
e
=
e
||
new
a
.
html
.
Schema
();
if
(
c
.
fix_self_closing
!==
false
){
c
.
fix_self_closing
=
true
}
a
.
each
(
"comment cdata text start end pi doctype"
.
split
(
" "
),
function
(
f
){
if
(
f
){
b
[
f
]
=
c
[
f
]
||
d
}});
b
.
parse
=
function
(
q
){
var
A
=
this
,
f
,
m
=
0
,
G
,
j
,
l
=
[],
B
,
K
,
t
,
N
,
F
,
k
,
p
,
x
,
I
,
r
,
E
,
o
,
J
,
n
,
H
,
M
,
L
,
z
,
D
,
h
,
g
,
u
,
s
=
0
,
v
=
a
.
html
.
Entities
.
decode
,
y
;
function
C
(
O
){
var
Q
,
P
;
Q
=
l
.
length
;
while
(
Q
--
){
if
(
l
[
Q
].
name
===
O
){
break
}}
if
(
Q
>=
0
){
for
(
P
=
l
.
length
-
1
;
P
>=
Q
;
P
--
){
O
=
l
[
P
];
if
(
O
.
valid
){
A
.
end
(
O
.
name
)}}
l
.
length
=
Q
}}
D
=
new
RegExp
(
"<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([^\\s\\/<>]+)\\s*((?:[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*)>))"
,
"g"
);
h
=
/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:\\.|[^\"])*)\")|(?:\'((?:\\.|[^\'])*)\')|([^>\s]+)))?/g
;
g
=
{
script
:
/<\/script[^>]*>/gi
,
style
:
/<\/style[^>]*>/gi
,
noscript
:
/<\/noscript[^>]*>/gi
};
F
=
e
.
getShortEndedElements
();
z
=
e
.
getSelfClosingElements
();
k
=
e
.
getBoolAttrs
();
x
=
c
.
validate
;
y
=
c
.
fix_self_closing
;
while
(
f
=
D
.
exec
(
q
)){
if
(
m
<
f
.
index
){
A
.
text
(
v
(
q
.
substr
(
m
,
f
.
index
-
m
)))}
if
(
G
=
f
[
6
]){
C
(
G
.
toLowerCase
())}
else
{
if
(
G
=
f
[
7
]){
G
=
G
.
toLowerCase
();
p
=
G
in
F
;
if
(
y
&&
z
[
G
]
&&
l
.
length
>
0
&&
l
[
l
.
length
-
1
].
name
===
G
){
C
(
G
)}
if
(
!
x
||
(
I
=
e
.
getElementRule
(
G
))){
r
=
true
;
if
(
x
){
J
=
I
.
attributes
;
n
=
I
.
attributePatterns
}
if
(
o
=
f
[
8
]){
B
=
[];
B
.
map
=
{};
o
.
replace
(
h
,
function
(
P
,
O
,
T
,
S
,
R
){
var
U
,
Q
;
O
=
O
.
toLowerCase
();
T
=
O
in
k
?
O
:
v
(
T
||
S
||
R
||
""
);
if
(
x
&&
O
.
indexOf
(
"data-"
)
!==
0
){
U
=
J
[
O
];
if
(
!
U
&&
n
){
Q
=
n
.
length
;
while
(
Q
--
){
U
=
n
[
Q
];
if
(
U
.
pattern
.
test
(
O
)){
break
}}
if
(
Q
===-
1
){
U
=
null
}}
if
(
!
U
){
return
}
if
(
U
.
validValues
&&!
(
T
in
U
.
validValues
)){
return
}}
B
.
map
[
O
]
=
T
;
B
.
push
({
name
:
O
,
value
:
T
})})}
else
{
B
=
[];
B
.
map
=
{}}
if
(
x
){
H
=
I
.
attributesRequired
;
M
=
I
.
attributesDefault
;
L
=
I
.
attributesForced
;
if
(
L
){
K
=
L
.
length
;
while
(
K
--
){
E
=
L
[
K
];
N
=
E
.
name
;
u
=
E
.
value
;
if
(
u
===
"{$uid}"
){
u
=
"mce_"
+
s
++
}
B
.
map
[
N
]
=
u
;
B
.
push
({
name
:
N
,
value
:
u
})}}
if
(
M
){
K
=
M
.
length
;
while
(
K
--
){
E
=
M
[
K
];
N
=
E
.
name
;
if
(
!
(
N
in
B
.
map
)){
u
=
E
.
value
;
if
(
u
===
"{$uid}"
){
u
=
"mce_"
+
s
++
}
B
.
map
[
N
]
=
u
;
B
.
push
({
name
:
N
,
value
:
u
})}}}
if
(
H
){
K
=
H
.
length
;
while
(
K
--
){
if
(
H
[
K
]
in
B
.
map
){
break
}}
if
(
K
===-
1
){
r
=
false
}}
if
(
B
.
map
[
"data-mce-bogus"
]){
r
=
false
}}
if
(
r
){
A
.
start
(
G
,
B
,
p
)}}
else
{
r
=
false
}
if
(
j
=
g
[
G
]){
j
.
lastIndex
=
m
=
f
.
index
+
f
[
0
].
length
;
if
(
f
=
j
.
exec
(
q
)){
if
(
r
){
t
=
q
.
substr
(
m
,
f
.
index
-
m
)}
m
=
f
.
index
+
f
[
0
].
length
}
else
{
t
=
q
.
substr
(
m
);
m
=
q
.
length
}
if
(
r
&&
t
.
length
>
0
){
A
.
text
(
t
,
true
)}
if
(
r
){
A
.
end
(
G
)}
D
.
lastIndex
=
m
;
continue
}
if
(
!
p
){
if
(
!
o
||
o
.
indexOf
(
"/"
)
!=
o
.
length
-
1
){
l
.
push
({
name
:
G
,
valid
:
r
})}
else
{
if
(
r
){
A
.
end
(
G
)}}}}
else
{
if
(
G
=
f
[
1
]){
A
.
comment
(
G
)}
else
{
if
(
G
=
f
[
2
]){
A
.
cdata
(
G
)}
else
{
if
(
G
=
f
[
3
]){
A
.
doctype
(
G
)}
else
{
if
(
G
=
f
[
4
]){
A
.
pi
(
G
,
f
[
5
])}}}}}}
m
=
f
.
index
+
f
[
0
].
length
}
if
(
m
<
q
.
length
){
A
.
text
(
v
(
q
.
substr
(
m
)))}
for
(
K
=
l
.
length
-
1
;
K
>=
0
;
K
--
){
G
=
l
[
K
];
if
(
G
.
valid
){
A
.
end
(
G
.
name
)}}}}})(
tinymce
);(
function
(
d
){
var
c
=
/^[ \t\r\n]*$/
,
e
=
{
"#text"
:
3
,
"#comment"
:
8
,
"#cdata"
:
4
,
"#pi"
:
7
,
"#doctype"
:
10
,
"#document-fragment"
:
11
};
function
a
(
k
,
l
,
j
){
var
i
,
h
,
f
=
j
?
"lastChild"
:
"firstChild"
,
g
=
j
?
"prev"
:
"next"
;
if
(
k
[
f
]){
return
k
[
f
]}
if
(
k
!==
l
){
i
=
k
[
g
];
if
(
i
){
return
i
}
for
(
h
=
k
.
parent
;
h
&&
h
!==
l
;
h
=
h
.
parent
){
i
=
h
[
g
];
if
(
i
){
return
i
}}}}
function
b
(
f
,
g
){
this
.
name
=
f
;
this
.
type
=
g
;
if
(
g
===
1
){
this
.
attributes
=
[];
this
.
attributes
.
map
=
{}}}
d
.
extend
(
b
.
prototype
,{
replace
:
function
(
g
){
var
f
=
this
;
if
(
g
.
parent
){
g
.
remove
()}
f
.
insert
(
g
,
f
);
f
.
remove
();
return
f
},
attr
:
function
(
h
,
l
){
var
f
=
this
,
g
,
j
,
k
;
if
(
typeof
h
!==
"string"
){
for
(
j
in
h
){
f
.
attr
(
j
,
h
[
j
])}
return
f
}
if
(
g
=
f
.
attributes
){
if
(
l
!==
k
){
if
(
l
===
null
){
if
(
h
in
g
.
map
){
delete
g
.
map
[
h
];
j
=
g
.
length
;
while
(
j
--
){
if
(
g
[
j
].
name
===
h
){
g
=
g
.
splice
(
j
,
1
);
return
f
}}}
return
f
}
if
(
h
in
g
.
map
){
j
=
g
.
length
;
while
(
j
--
){
if
(
g
[
j
].
name
===
h
){
g
[
j
].
value
=
l
;
break
}}}
else
{
g
.
push
({
name
:
h
,
value
:
l
})}
g
.
map
[
h
]
=
l
;
return
f
}
else
{
return
g
.
map
[
h
]}}},
clone
:
function
(){
var
g
=
this
,
n
=
new
b
(
g
.
name
,
g
.
type
),
h
,
f
,
m
,
j
,
k
;
if
(
m
=
g
.
attributes
){
k
=
[];
k
.
map
=
{};
for
(
h
=
0
,
f
=
m
.
length
;
h
<
f
;
h
++
){
j
=
m
[
h
];
if
(
j
.
name
!==
"id"
){
k
[
k
.
length
]
=
{
name
:
j
.
name
,
value
:
j
.
value
};
k
.
map
[
j
.
name
]
=
j
.
value
}}
n
.
attributes
=
k
}
n
.
value
=
g
.
value
;
n
.
shortEnded
=
g
.
shortEnded
;
return
n
},
wrap
:
function
(
g
){
var
f
=
this
;
f
.
parent
.
insert
(
g
,
f
);
g
.
append
(
f
);
return
f
},
unwrap
:
function
(){
var
f
=
this
,
h
,
g
;
for
(
h
=
f
.
firstChild
;
h
;){
g
=
h
.
next
;
f
.
insert
(
h
,
f
,
true
);
h
=
g
}
f
.
remove
()},
remove
:
function
(){
var
f
=
this
,
h
=
f
.
parent
,
g
=
f
.
next
,
i
=
f
.
prev
;
if
(
h
){
if
(
h
.
firstChild
===
f
){
h
.
firstChild
=
g
;
if
(
g
){
g
.
prev
=
null
}}
else
{
i
.
next
=
g
}
if
(
h
.
lastChild
===
f
){
h
.
lastChild
=
i
;
if
(
i
){
i
.
next
=
null
}}
else
{
g
.
prev
=
i
}
f
.
parent
=
f
.
next
=
f
.
prev
=
null
}
return
f
},
append
:
function
(
h
){
var
f
=
this
,
g
;
if
(
h
.
parent
){
h
.
remove
()}
g
=
f
.
lastChild
;
if
(
g
){
g
.
next
=
h
;
h
.
prev
=
g
;
f
.
lastChild
=
h
}
else
{
f
.
lastChild
=
f
.
firstChild
=
h
}
h
.
parent
=
f
;
return
h
},
insert
:
function
(
h
,
f
,
i
){
var
g
;
if
(
h
.
parent
){
h
.
remove
()}
g
=
f
.
parent
||
this
;
if
(
i
){
if
(
f
===
g
.
firstChild
){
g
.
firstChild
=
h
}
else
{
f
.
prev
.
next
=
h
}
h
.
prev
=
f
.
prev
;
h
.
next
=
f
;
f
.
prev
=
h
}
else
{
if
(
f
===
g
.
lastChild
){
g
.
lastChild
=
h
}
else
{
f
.
next
.
prev
=
h
}
h
.
next
=
f
.
next
;
h
.
prev
=
f
;
f
.
next
=
h
}
h
.
parent
=
g
;
return
h
},
getAll
:
function
(
g
){
var
f
=
this
,
h
,
i
=
[];
for
(
h
=
f
.
firstChild
;
h
;
h
=
a
(
h
,
f
)){
if
(
h
.
name
===
g
){
i
.
push
(
h
)}}
return
i
},
empty
:
function
(){
var
g
=
this
,
f
,
h
,
j
;
if
(
g
.
firstChild
){
f
=
[];
for
(
j
=
g
.
firstChild
;
j
;
j
=
a
(
j
,
g
)){
f
.
push
(
j
)}
h
=
f
.
length
;
while
(
h
--
){
j
=
f
[
h
];
j
.
parent
=
j
.
firstChild
=
j
.
lastChild
=
j
.
next
=
j
.
prev
=
null
}}
g
.
firstChild
=
g
.
lastChild
=
null
;
return
g
},
isEmpty
:
function
(
k
){
var
f
=
this
,
j
=
f
.
firstChild
,
h
,
g
;
if
(
j
){
do
{
if
(
j
.
type
===
1
){
if
(
j
.
attributes
.
map
[
"data-mce-bogus"
]){
continue
}
if
(
k
[
j
.
name
]){
return
false
}
h
=
j
.
attributes
.
length
;
while
(
h
--
){
g
=
j
.
attributes
[
h
].
name
;
if
(
g
===
"name"
||
g
.
indexOf
(
"data-"
)
===
0
){
return
false
}}}
if
((
j
.
type
===
3
&&!
c
.
test
(
j
.
value
))){
return
false
}}
while
(
j
=
a
(
j
,
f
))}
return
true
}});
d
.
extend
(
b
,{
create
:
function
(
g
,
f
){
var
i
,
h
;
i
=
new
b
(
g
,
e
[
g
]
||
1
);
if
(
f
){
for
(
h
in
f
){
i
.
attr
(
h
,
f
[
h
])}}
return
i
}});
d
.
html
.
Node
=
b
})(
tinymce
);(
function
(
b
){
var
a
=
b
.
html
.
Node
;
b
.
html
.
DomParser
=
function
(
g
,
h
){
var
f
=
this
,
e
=
{},
d
=
[],
i
=
{},
c
=
{};
g
=
g
||
{};
g
.
validate
=
"validate"
in
g
?
g
.
validate
:
true
;
g
.
root_name
=
g
.
root_name
||
"body"
;
f
.
schema
=
h
=
h
||
new
b
.
html
.
Schema
();
function
j
(
m
){
var
o
,
p
,
x
,
v
,
z
,
n
,
q
,
l
,
t
,
u
,
k
,
s
,
y
,
r
;
s
=
b
.
makeMap
(
"tr,td,th,tbody,thead,tfoot,table"
);
k
=
h
.
getNonEmptyElements
();
for
(
o
=
0
;
o
<
m
.
length
;
o
++
){
p
=
m
[
o
];
if
(
!
p
.
parent
){
continue
}
v
=
[
p
];
for
(
x
=
p
.
parent
;
x
&&!
h
.
isValidChild
(
x
.
name
,
p
.
name
)
&&!
s
[
x
.
name
];
x
=
x
.
parent
){
v
.
push
(
x
)}
if
(
x
&&
v
.
length
>
1
){
v
.
reverse
();
z
=
n
=
f
.
filterNode
(
v
[
0
].
clone
());
for
(
t
=
0
;
t
<
v
.
length
-
1
;
t
++
){
if
(
h
.
isValidChild
(
n
.
name
,
v
[
t
].
name
)){
q
=
f
.
filterNode
(
v
[
t
].
clone
());
n
.
append
(
q
)}
else
{
q
=
n
}
for
(
l
=
v
[
t
].
firstChild
;
l
&&
l
!=
v
[
t
+
1
];){
r
=
l
.
next
;
q
.
append
(
l
);
l
=
r
}
n
=
q
}
if
(
!
z
.
isEmpty
(
k
)){
x
.
insert
(
z
,
v
[
0
],
true
);
x
.
insert
(
p
,
z
)}
else
{
x
.
insert
(
p
,
v
[
0
],
true
)}
x
=
v
[
0
];
if
(
x
.
isEmpty
(
k
)
||
x
.
firstChild
===
x
.
lastChild
&&
x
.
firstChild
.
name
===
"br"
){
x
.
empty
().
remove
()}}
else
{
if
(
p
.
parent
){
if
(
p
.
name
===
"li"
){
y
=
p
.
prev
;
if
(
y
&&
(
y
.
name
===
"ul"
||
y
.
name
===
"ul"
)){
y
.
append
(
p
);
continue
}
y
=
p
.
next
;
if
(
y
&&
(
y
.
name
===
"ul"
||
y
.
name
===
"ul"
)){
y
.
insert
(
p
,
y
.
firstChild
,
true
);
continue
}
p
.
wrap
(
f
.
filterNode
(
new
a
(
"ul"
,
1
)));
continue
}
if
(
h
.
isValidChild
(
p
.
parent
.
name
,
"div"
)
&&
h
.
isValidChild
(
"div"
,
p
.
name
)){
p
.
wrap
(
f
.
filterNode
(
new
a
(
"div"
,
1
)))}
else
{
if
(
p
.
name
===
"style"
||
p
.
name
===
"script"
){
p
.
empty
().
remove
()}
else
{
p
.
unwrap
()}}}}}}
f
.
filterNode
=
function
(
m
){
var
l
,
k
,
n
;
if
(
k
in
e
){
n
=
i
[
k
];
if
(
n
){
n
.
push
(
m
)}
else
{
i
[
k
]
=
[
m
]}}
l
=
d
.
length
;
while
(
l
--
){
k
=
d
[
l
].
name
;
if
(
k
in
m
.
attributes
.
map
){
n
=
c
[
k
];
if
(
n
){
n
.
push
(
m
)}
else
{
c
[
k
]
=
[
m
]}}}
return
m
};
f
.
addNodeFilter
=
function
(
k
,
l
){
b
.
each
(
b
.
explode
(
k
),
function
(
m
){
var
n
=
e
[
m
];
if
(
!
n
){
e
[
m
]
=
n
=
[]}
n
.
push
(
l
)})};
f
.
addAttributeFilter
=
function
(
k
,
l
){
b
.
each
(
b
.
explode
(
k
),
function
(
m
){
var
n
;
for
(
n
=
0
;
n
<
d
.
length
;
n
++
){
if
(
d
[
n
].
name
===
m
){
d
[
n
].
callbacks
.
push
(
l
);
return
}}
d
.
push
({
name
:
m
,
callbacks
:
[
l
]})})};
f
.
parse
=
function
(
u
,
m
){
var
n
,
F
,
z
,
y
,
B
,
A
,
v
,
q
,
D
,
I
,
x
,
o
,
C
,
H
=
[],
s
,
k
,
r
,
p
,
t
;
m
=
m
||
{};
i
=
{};
c
=
{};
o
=
b
.
extend
(
b
.
makeMap
(
"script,style,head,html,body,title,meta,param"
),
h
.
getBlockElements
());
t
=
h
.
getNonEmptyElements
();
p
=
h
.
children
;
x
=
g
.
validate
;
r
=
h
.
getWhiteSpaceElements
();
C
=
/^[ \t\r\n]+/
;
s
=
/[ \t\r\n]+$/
;
k
=
/[ \t\r\n]+/g
;
function
G
(
l
,
J
){
var
K
=
new
a
(
l
,
J
),
L
;
if
(
l
in
e
){
L
=
i
[
l
];
if
(
L
){
L
.
push
(
K
)}
else
{
i
[
l
]
=
[
K
]}}
return
K
}
function
E
(
K
){
var
L
,
l
,
J
;
for
(
L
=
K
.
prev
;
L
&&
L
.
type
===
3
;){
l
=
L
.
value
.
replace
(
s
,
""
);
if
(
l
.
length
>
0
){
L
.
value
=
l
;
L
=
L
.
prev
}
else
{
J
=
L
.
prev
;
L
.
remove
();
L
=
J
}}}
n
=
new
b
.
html
.
SaxParser
({
validate
:
x
,
fix_self_closing
:!
x
,
cdata
:
function
(
l
){
z
.
append
(
G
(
"#cdata"
,
4
)).
value
=
l
},
text
:
function
(
K
,
l
){
var
J
;
if
(
!
r
[
z
.
name
]){
K
=
K
.
replace
(
k
,
" "
);
if
(
z
.
lastChild
&&
o
[
z
.
lastChild
.
name
]){
K
=
K
.
replace
(
C
,
""
)}}
if
(
K
.
length
!==
0
){
J
=
G
(
"#text"
,
3
);
J
.
raw
=!!
l
;
z
.
append
(
J
).
value
=
K
}},
comment
:
function
(
l
){
z
.
append
(
G
(
"#comment"
,
8
)).
value
=
l
},
pi
:
function
(
l
,
J
){
z
.
append
(
G
(
l
,
7
)).
value
=
J
;
E
(
z
)},
doctype
:
function
(
J
){
var
l
;
l
=
z
.
append
(
G
(
"#doctype"
,
10
));
l
.
value
=
J
;
E
(
z
)},
start
:
function
(
l
,
R
,
K
){
var
P
,
M
,
L
,
J
,
N
,
S
,
Q
,
O
;
L
=
x
?
h
.
getElementRule
(
l
)
:
{};
if
(
L
){
P
=
G
(
L
.
outputName
||
l
,
1
);
P
.
attributes
=
R
;
P
.
shortEnded
=
K
;
z
.
append
(
P
);
O
=
p
[
z
.
name
];
if
(
O
&&
p
[
P
.
name
]
&&!
O
[
P
.
name
]){
H
.
push
(
P
)}
M
=
d
.
length
;
while
(
M
--
){
N
=
d
[
M
].
name
;
if
(
N
in
R
.
map
){
D
=
c
[
N
];
if
(
D
){
D
.
push
(
P
)}
else
{
c
[
N
]
=
[
P
]}}}
if
(
o
[
l
]){
E
(
P
)}
if
(
!
K
){
z
=
P
}}},
end
:
function
(
l
){
var
N
,
K
,
M
,
J
,
L
;
K
=
x
?
h
.
getElementRule
(
l
)
:
{};
if
(
K
){
if
(
o
[
l
]){
if
(
!
r
[
z
.
name
]){
for
(
N
=
z
.
firstChild
;
N
&&
N
.
type
===
3
;){
M
=
N
.
value
.
replace
(
C
,
""
);
if
(
M
.
length
>
0
){
N
.
value
=
M
;
N
=
N
.
next
}
else
{
J
=
N
.
next
;
N
.
remove
();
N
=
J
}}
for
(
N
=
z
.
lastChild
;
N
&&
N
.
type
===
3
;){
M
=
N
.
value
.
replace
(
s
,
""
);
if
(
M
.
length
>
0
){
N
.
value
=
M
;
N
=
N
.
prev
}
else
{
J
=
N
.
prev
;
N
.
remove
();
N
=
J
}}}
N
=
z
.
prev
;
if
(
N
&&
N
.
type
===
3
){
M
=
N
.
value
.
replace
(
C
,
""
);
if
(
M
.
length
>
0
){
N
.
value
=
M
}
else
{
N
.
remove
()}}}
if
(
K
.
removeEmpty
||
K
.
paddEmpty
){
if
(
z
.
isEmpty
(
t
)){
if
(
K
.
paddEmpty
){
z
.
empty
().
append
(
new
a
(
"#text"
,
"3"
)).
value
=
"\u00a0"
}
else
{
if
(
!
z
.
attributes
.
map
.
name
){
L
=
z
.
parent
;
z
.
empty
().
remove
();
z
=
L
;
return
}}}}
z
=
z
.
parent
}}},
h
);
F
=
z
=
new
a
(
g
.
root_name
,
11
);
n
.
parse
(
u
);
if
(
x
){
j
(
H
)}
for
(
I
in
i
){
D
=
e
[
I
];
y
=
i
[
I
];
v
=
y
.
length
;
while
(
v
--
){
if
(
!
y
[
v
].
parent
){
y
.
splice
(
v
,
1
)}}
for
(
B
=
0
,
A
=
D
.
length
;
B
<
A
;
B
++
){
D
[
B
](
y
,
I
,
m
)}}
for
(
B
=
0
,
A
=
d
.
length
;
B
<
A
;
B
++
){
D
=
d
[
B
];
if
(
D
.
name
in
c
){
y
=
c
[
D
.
name
];
v
=
y
.
length
;
while
(
v
--
){
if
(
!
y
[
v
].
parent
){
y
.
splice
(
v
,
1
)}}
for
(
v
=
0
,
q
=
D
.
callbacks
.
length
;
v
<
q
;
v
++
){
D
.
callbacks
[
v
](
y
,
D
.
name
,
m
)}}}
return
F
};
if
(
g
.
remove_trailing_brs
){
f
.
addNodeFilter
(
"br"
,
function
(
n
,
m
){
var
r
,
q
=
n
.
length
,
o
,
u
=
h
.
getBlockElements
(),
k
=
h
.
getNonEmptyElements
(),
s
,
p
,
t
;
for
(
r
=
0
;
r
<
q
;
r
++
){
o
=
n
[
r
];
s
=
o
.
parent
;
if
(
u
[
o
.
parent
.
name
]
&&
o
===
s
.
lastChild
){
p
=
o
.
prev
;
while
(
p
){
t
=
p
.
name
;
if
(
t
!==
"span"
||
p
.
attr
(
"data-mce-type"
)
!==
"bookmark"
){
if
(
t
!==
"br"
){
break
}
if
(
t
===
"br"
){
o
=
null
;
break
}}
p
=
p
.
prev
}
if
(
o
){
o
.
remove
();
if
(
s
.
isEmpty
(
k
)){
elementRule
=
h
.
getElementRule
(
s
.
name
);
if
(
elementRule
.
removeEmpty
){
s
.
remove
()}
else
{
if
(
elementRule
.
paddEmpty
){
s
.
empty
().
append
(
new
b
.
html
.
Node
(
"#text"
,
3
)).
value
=
"\u00a0"
}}}}}}})}}})(
tinymce
);
tinymce
.
html
.
Writer
=
function
(
e
){
var
c
=
[],
a
,
b
,
d
,
f
,
g
;
e
=
e
||
{};
a
=
e
.
indent
;
b
=
tinymce
.
makeMap
(
e
.
indent_before
||
""
);
d
=
tinymce
.
makeMap
(
e
.
indent_after
||
""
);
f
=
tinymce
.
html
.
Entities
.
getEncodeFunc
(
e
.
entity_encoding
||
"raw"
,
e
.
entities
);
g
=
e
.
element_format
==
"html"
;
return
{
start
:
function
(
m
,
k
,
p
){
var
n
,
j
,
h
,
o
;
if
(
a
&&
b
[
m
]
&&
c
.
length
>
0
){
o
=
c
[
c
.
length
-
1
];
if
(
o
.
length
>
0
&&
o
!==
"\n"
){
c
.
push
(
"\n"
)}}
c
.
push
(
"<"
,
m
);
if
(
k
){
for
(
n
=
0
,
j
=
k
.
length
;
n
<
j
;
n
++
){
h
=
k
[
n
];
c
.
push
(
" "
,
h
.
name
,
'="'
,
f
(
h
.
value
,
true
),
'"'
)}}
if
(
!
p
||
g
){
c
[
c
.
length
]
=
">"
}
else
{
c
[
c
.
length
]
=
" />"
}
if
(
p
&&
a
&&
d
[
m
]
&&
c
.
length
>
0
){
o
=
c
[
c
.
length
-
1
];
if
(
o
.
length
>
0
&&
o
!==
"\n"
){
c
.
push
(
"\n"
)}}},
end
:
function
(
h
){
var
i
;
c
.
push
(
"</"
,
h
,
">"
);
if
(
a
&&
d
[
h
]
&&
c
.
length
>
0
){
i
=
c
[
c
.
length
-
1
];
if
(
i
.
length
>
0
&&
i
!==
"\n"
){
c
.
push
(
"\n"
)}}},
text
:
function
(
i
,
h
){
if
(
i
.
length
>
0
){
c
[
c
.
length
]
=
h
?
i
:
f
(
i
)}},
cdata
:
function
(
h
){
c
.
push
(
"<![CDATA["
,
h
,
"]]>"
)},
comment
:
function
(
h
){
c
.
push
(
"<!--"
,
h
,
"-->"
)},
pi
:
function
(
h
,
i
){
if
(
i
){
c
.
push
(
"<?"
,
h
,
" "
,
i
,
"?>"
)}
else
{
c
.
push
(
"<?"
,
h
,
"?>"
)}
if
(
a
){
c
.
push
(
"\n"
)}},
doctype
:
function
(
h
){
c
.
push
(
"<!DOCTYPE"
,
h
,
">"
,
a
?
"\n"
:
""
)},
reset
:
function
(){
c
.
length
=
0
},
getContent
:
function
(){
return
c
.
join
(
""
).
replace
(
/\n$/
,
""
)}}};(
function
(
a
){
a
.
html
.
Serializer
=
function
(
c
,
d
){
var
b
=
this
,
e
=
new
a
.
html
.
Writer
(
c
);
c
=
c
||
{};
c
.
validate
=
"validate"
in
c
?
c
.
validate
:
true
;
b
.
schema
=
d
=
d
||
new
a
.
html
.
Schema
();
b
.
writer
=
e
;
b
.
serialize
=
function
(
h
){
var
g
,
i
;
i
=
c
.
validate
;
g
=
{
3
:
function
(
k
,
j
){
e
.
text
(
k
.
value
,
k
.
raw
)},
8
:
function
(
j
){
e
.
comment
(
j
.
value
)},
7
:
function
(
j
){
e
.
pi
(
j
.
name
,
j
.
value
)},
10
:
function
(
j
){
e
.
doctype
(
j
.
value
)},
4
:
function
(
j
){
e
.
cdata
(
j
.
value
)},
11
:
function
(
j
){
if
((
j
=
j
.
firstChild
)){
do
{
f
(
j
)}
while
(
j
=
j
.
next
)}}};
e
.
reset
();
function
f
(
k
){
var
t
=
g
[
k
.
type
],
j
,
o
,
s
,
r
,
p
,
u
,
n
,
m
,
q
;
if
(
!
t
){
j
=
k
.
name
;
o
=
k
.
shortEnded
;
s
=
k
.
attributes
;
if
(
i
&&
s
&&
s
.
length
>
1
){
u
=
[];
u
.
map
=
{};
q
=
d
.
getElementRule
(
k
.
name
);
for
(
n
=
0
,
m
=
q
.
attributesOrder
.
length
;
n
<
m
;
n
++
){
r
=
q
.
attributesOrder
[
n
];
if
(
r
in
s
.
map
){
p
=
s
.
map
[
r
];
u
.
map
[
r
]
=
p
;
u
.
push
({
name
:
r
,
value
:
p
})}}
for
(
n
=
0
,
m
=
s
.
length
;
n
<
m
;
n
++
){
r
=
s
[
n
].
name
;
if
(
!
(
r
in
u
.
map
)){
p
=
s
.
map
[
r
];
u
.
map
[
r
]
=
p
;
u
.
push
({
name
:
r
,
value
:
p
})}}
s
=
u
}
e
.
start
(
k
.
name
,
s
,
o
);
if
(
!
o
){
if
((
k
=
k
.
firstChild
)){
do
{
f
(
k
)}
while
(
k
=
k
.
next
)}
e
.
end
(
j
)}}
else
{
t
(
k
)}}
if
(
h
.
type
==
1
&&!
c
.
inner
){
f
(
h
)}
else
{
g
[
11
](
h
)}
return
e
.
getContent
()}}})(
tinymce
);(
function
(
h
){
var
f
=
h
.
each
,
e
=
h
.
is
,
d
=
h
.
isWebKit
,
b
=
h
.
isIE
,
c
=
h
.
html
.
Entities
,
a
=
/^([a-z0-9],?)+$/i
,
g
=
h
.
html
.
Schema
.
blockElementsMap
,
i
=
/^[ \t\r\n]*$/
;
h
.
create
(
"tinymce.dom.DOMUtils"
,{
doc
:
null
,
root
:
null
,
files
:
null
,
pixelStyles
:
/^(top|left|bottom|right|width|height|borderWidth)$/
,
props
:
{
"for"
:
"htmlFor"
,
"class"
:
"className"
,
className
:
"className"
,
checked
:
"checked"
,
disabled
:
"disabled"
,
maxlength
:
"maxLength"
,
readonly
:
"readOnly"
,
selected
:
"selected"
,
value
:
"value"
,
id
:
"id"
,
name
:
"name"
,
type
:
"type"
},
DOMUtils
:
function
(
n
,
l
){
var
k
=
this
,
j
;
k
.
doc
=
n
;
k
.
win
=
window
;
k
.
files
=
{};
k
.
cssFlicker
=
false
;
k
.
counter
=
0
;
k
.
stdMode
=!
h
.
isIE
||
n
.
documentMode
>=
8
;
k
.
boxModel
=!
h
.
isIE
||
n
.
compatMode
==
"CSS1Compat"
||
k
.
stdMode
;
k
.
hasOuterHTML
=
"outerHTML"
in
n
.
createElement
(
"a"
);
k
.
settings
=
l
=
h
.
extend
({
keep_values
:
false
,
hex_colors
:
1
},
l
);
k
.
schema
=
l
.
schema
;
k
.
styles
=
new
h
.
html
.
Styles
({
url_converter
:
l
.
url_converter
,
url_converter_scope
:
l
.
url_converter_scope
},
l
.
schema
);
if
(
h
.
isIE6
){
try
{
n
.
execCommand
(
"BackgroundImageCache"
,
false
,
true
)}
catch
(
m
){
k
.
cssFlicker
=
true
}}
if
(
b
){(
"abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video"
).
replace
(
/\w+/g
,
function
(
o
){
n
.
createElement
(
o
)})}
h
.
addUnload
(
k
.
destroy
,
k
)},
getRoot
:
function
(){
var
j
=
this
,
k
=
j
.
settings
;
return
(
k
&&
j
.
get
(
k
.
root_element
))
||
j
.
doc
.
body
},
getViewPort
:
function
(
k
){
var
l
,
j
;
k
=!
k
?
this
.
win
:
k
;
l
=
k
.
document
;
j
=
this
.
boxModel
?
l
.
documentElement
:
l
.
body
;
return
{
x
:
k
.
pageXOffset
||
j
.
scrollLeft
,
y
:
k
.
pageYOffset
||
j
.
scrollTop
,
w
:
k
.
innerWidth
||
j
.
clientWidth
,
h
:
k
.
innerHeight
||
j
.
clientHeight
}},
getRect
:
function
(
m
){
var
l
,
j
=
this
,
k
;
m
=
j
.
get
(
m
);
l
=
j
.
getPos
(
m
);
k
=
j
.
getSize
(
m
);
return
{
x
:
l
.
x
,
y
:
l
.
y
,
w
:
k
.
w
,
h
:
k
.
h
}},
getSize
:
function
(
m
){
var
k
=
this
,
j
,
l
;
m
=
k
.
get
(
m
);
j
=
k
.
getStyle
(
m
,
"width"
);
l
=
k
.
getStyle
(
m
,
"height"
);
if
(
j
.
indexOf
(
"px"
)
===-
1
){
j
=
0
}
if
(
l
.
indexOf
(
"px"
)
===-
1
){
l
=
0
}
return
{
w
:
parseInt
(
j
)
||
m
.
offsetWidth
||
m
.
clientWidth
,
h
:
parseInt
(
l
)
||
m
.
offsetHeight
||
m
.
clientHeight
}},
getParent
:
function
(
l
,
k
,
j
){
return
this
.
getParents
(
l
,
k
,
j
,
false
)},
getParents
:
function
(
u
,
p
,
l
,
s
){
var
k
=
this
,
j
,
m
=
k
.
settings
,
q
=
[];
u
=
k
.
get
(
u
);
s
=
s
===
undefined
;
if
(
m
.
strict_root
){
l
=
l
||
k
.
getRoot
()}
if
(
e
(
p
,
"string"
)){
j
=
p
;
if
(
p
===
"*"
){
p
=
function
(
o
){
return
o
.
nodeType
==
1
}}
else
{
p
=
function
(
o
){
return
k
.
is
(
o
,
j
)}}}
while
(
u
){
if
(
u
==
l
||!
u
.
nodeType
||
u
.
nodeType
===
9
){
break
}
if
(
!
p
||
p
(
u
)){
if
(
s
){
q
.
push
(
u
)}
else
{
return
u
}}
u
=
u
.
parentNode
}
return
s
?
q
:
null
},
get
:
function
(
j
){
var
k
;
if
(
j
&&
this
.
doc
&&
typeof
(
j
)
==
"string"
){
k
=
j
;
j
=
this
.
doc
.
getElementById
(
j
);
if
(
j
&&
j
.
id
!==
k
){
return
this
.
doc
.
getElementsByName
(
k
)[
1
]}}
return
j
},
getNext
:
function
(
k
,
j
){
return
this
.
_findSib
(
k
,
j
,
"nextSibling"
)},
getPrev
:
function
(
k
,
j
){
return
this
.
_findSib
(
k
,
j
,
"previousSibling"
)},
select
:
function
(
l
,
k
){
var
j
=
this
;
return
h
.
dom
.
Sizzle
(
l
,
j
.
get
(
k
)
||
j
.
get
(
j
.
settings
.
root_element
)
||
j
.
doc
,[])},
is
:
function
(
l
,
j
){
var
k
;
if
(
l
.
length
===
undefined
){
if
(
j
===
"*"
){
return
l
.
nodeType
==
1
}
if
(
a
.
test
(
j
)){
j
=
j
.
toLowerCase
().
split
(
/,/
);
l
=
l
.
nodeName
.
toLowerCase
();
for
(
k
=
j
.
length
-
1
;
k
>=
0
;
k
--
){
if
(
j
[
k
]
==
l
){
return
true
}}
return
false
}}
return
h
.
dom
.
Sizzle
.
matches
(
j
,
l
.
nodeType
?
[
l
]
:
l
).
length
>
0
},
add
:
function
(
m
,
q
,
j
,
l
,
o
){
var
k
=
this
;
return
this
.
run
(
m
,
function
(
s
){
var
r
,
n
;
r
=
e
(
q
,
"string"
)
?
k
.
doc
.
createElement
(
q
)
:
q
;
k
.
setAttribs
(
r
,
j
);
if
(
l
){
if
(
l
.
nodeType
){
r
.
appendChild
(
l
)}
else
{
k
.
setHTML
(
r
,
l
)}}
return
!
o
?
s
.
appendChild
(
r
)
:
r
})},
create
:
function
(
l
,
j
,
k
){
return
this
.
add
(
this
.
doc
.
createElement
(
l
),
l
,
j
,
k
,
1
)},
createHTML
:
function
(
r
,
j
,
p
){
var
q
=
""
,
m
=
this
,
l
;
q
+=
"<"
+
r
;
for
(
l
in
j
){
if
(
j
.
hasOwnProperty
(
l
)){
q
+=
" "
+
l
+
'="'
+
m
.
encode
(
j
[
l
])
+
'"'
}}
if
(
typeof
(
p
)
!=
"undefined"
){
return
q
+
">"
+
p
+
"</"
+
r
+
">"
}
return
q
+
" />"
},
remove
:
function
(
j
,
k
){
return
this
.
run
(
j
,
function
(
m
){
var
n
,
l
=
m
.
parentNode
;
if
(
!
l
){
return
null
}
if
(
k
){
while
(
n
=
m
.
firstChild
){
if
(
!
h
.
isIE
||
n
.
nodeType
!==
3
||
n
.
nodeValue
){
l
.
insertBefore
(
n
,
m
)}
else
{
m
.
removeChild
(
n
)}}}
return
l
.
removeChild
(
m
)})},
setStyle
:
function
(
m
,
j
,
k
){
var
l
=
this
;
return
l
.
run
(
m
,
function
(
p
){
var
o
,
n
;
o
=
p
.
style
;
j
=
j
.
replace
(
/-(\D)/g
,
function
(
r
,
q
){
return
q
.
toUpperCase
()});
if
(
l
.
pixelStyles
.
test
(
j
)
&&
(
h
.
is
(
k
,
"number"
)
||
/^[\-0-9\.]+$/
.
test
(
k
))){
k
+=
"px"
}
switch
(
j
){
case
"opacity"
:
if
(
b
){
o
.
filter
=
k
===
""
?
""
:
"alpha(opacity="
+
(
k
*
100
)
+
")"
;
if
(
!
m
.
currentStyle
||!
m
.
currentStyle
.
hasLayout
){
o
.
display
=
"inline-block"
}}
o
[
j
]
=
o
[
"-moz-opacity"
]
=
o
[
"-khtml-opacity"
]
=
k
||
""
;
break
;
case
"float"
:
b
?
o
.
styleFloat
=
k
:
o
.
cssFloat
=
k
;
break
;
default
:
o
[
j
]
=
k
||
""
}
if
(
l
.
settings
.
update_styles
){
l
.
setAttrib
(
p
,
"data-mce-style"
)}})},
getStyle
:
function
(
m
,
j
,
l
){
m
=
this
.
get
(
m
);
if
(
!
m
){
return
}
if
(
this
.
doc
.
defaultView
&&
l
){
j
=
j
.
replace
(
/[A-Z]/g
,
function
(
n
){
return
"-"
+
n
});
try
{
return
this
.
doc
.
defaultView
.
getComputedStyle
(
m
,
null
).
getPropertyValue
(
j
)}
catch
(
k
){
return
null
}}
j
=
j
.
replace
(
/-(\D)/g
,
function
(
o
,
n
){
return
n
.
toUpperCase
()});
if
(
j
==
"float"
){
j
=
b
?
"styleFloat"
:
"cssFloat"
}
if
(
m
.
currentStyle
&&
l
){
return
m
.
currentStyle
[
j
]}
return
m
.
style
?
m
.
style
[
j
]
:
undefined
},
setStyles
:
function
(
m
,
n
){
var
k
=
this
,
l
=
k
.
settings
,
j
;
j
=
l
.
update_styles
;
l
.
update_styles
=
0
;
f
(
n
,
function
(
o
,
p
){
k
.
setStyle
(
m
,
p
,
o
)});
l
.
update_styles
=
j
;
if
(
l
.
update_styles
){
k
.
setAttrib
(
m
,
l
.
cssText
)}},
removeAllAttribs
:
function
(
j
){
return
this
.
run
(
j
,
function
(
m
){
var
l
,
k
=
m
.
attributes
;
for
(
l
=
k
.
length
-
1
;
l
>=
0
;
l
--
){
m
.
removeAttributeNode
(
k
.
item
(
l
))}})},
setAttrib
:
function
(
l
,
m
,
j
){
var
k
=
this
;
if
(
!
l
||!
m
){
return
}
if
(
k
.
settings
.
strict
){
m
=
m
.
toLowerCase
()}
return
this
.
run
(
l
,
function
(
o
){
var
n
=
k
.
settings
;
switch
(
m
){
case
"style"
:
if
(
!
e
(
j
,
"string"
)){
f
(
j
,
function
(
p
,
q
){
k
.
setStyle
(
o
,
q
,
p
)});
return
}
if
(
n
.
keep_values
){
if
(
j
&&!
k
.
_isRes
(
j
)){
o
.
setAttribute
(
"data-mce-style"
,
j
,
2
)}
else
{
o
.
removeAttribute
(
"data-mce-style"
,
2
)}}
o
.
style
.
cssText
=
j
;
break
;
case
"class"
:
o
.
className
=
j
||
""
;
break
;
case
"src"
:
case
"href"
:
if
(
n
.
keep_values
){
if
(
n
.
url_converter
){
j
=
n
.
url_converter
.
call
(
n
.
url_converter_scope
||
k
,
j
,
m
,
o
)}
k
.
setAttrib
(
o
,
"data-mce-"
+
m
,
j
,
2
)}
break
;
case
"shape"
:
o
.
setAttribute
(
"data-mce-style"
,
j
);
break
}
if
(
e
(
j
)
&&
j
!==
null
&&
j
.
length
!==
0
){
o
.
setAttribute
(
m
,
""
+
j
,
2
)}
else
{
o
.
removeAttribute
(
m
,
2
)}})},
setAttribs
:
function
(
k
,
l
){
var
j
=
this
;
return
this
.
run
(
k
,
function
(
m
){
f
(
l
,
function
(
o
,
p
){
j
.
setAttrib
(
m
,
p
,
o
)})})},
getAttrib
:
function
(
m
,
o
,
l
){
var
j
,
k
=
this
;
m
=
k
.
get
(
m
);
if
(
!
m
||
m
.
nodeType
!==
1
){
return
false
}
if
(
!
e
(
l
)){
l
=
""
}
if
(
/^(src|href|style|coords|shape)$/
.
test
(
o
)){
j
=
m
.
getAttribute
(
"data-mce-"
+
o
);
if
(
j
){
return
j
}}
if
(
b
&&
k
.
props
[
o
]){
j
=
m
[
k
.
props
[
o
]];
j
=
j
&&
j
.
nodeValue
?
j
.
nodeValue
:
j
}
if
(
!
j
){
j
=
m
.
getAttribute
(
o
,
2
)}
if
(
/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/
.
test
(
o
)){
if
(
m
[
k
.
props
[
o
]]
===
true
&&
j
===
""
){
return
o
}
return
j
?
o
:
""
}
if
(
m
.
nodeName
===
"FORM"
&&
m
.
getAttributeNode
(
o
)){
return
m
.
getAttributeNode
(
o
).
nodeValue
}
if
(
o
===
"style"
){
j
=
j
||
m
.
style
.
cssText
;
if
(
j
){
j
=
k
.
serializeStyle
(
k
.
parseStyle
(
j
),
m
.
nodeName
);
if
(
k
.
settings
.
keep_values
&&!
k
.
_isRes
(
j
)){
m
.
setAttribute
(
"data-mce-style"
,
j
)}}}
if
(
d
&&
o
===
"class"
&&
j
){
j
=
j
.
replace
(
/(apple|webkit)\-[a-z\-]+/gi
,
""
)}
if
(
b
){
switch
(
o
){
case
"rowspan"
:
case
"colspan"
:
if
(
j
===
1
){
j
=
""
}
break
;
case
"size"
:
if
(
j
===
"+0"
||
j
===
20
||
j
===
0
){
j
=
""
}
break
;
case
"width"
:
case
"height"
:
case
"vspace"
:
case
"checked"
:
case
"disabled"
:
case
"readonly"
:
if
(
j
===
0
){
j
=
""
}
break
;
case
"hspace"
:
if
(
j
===-
1
){
j
=
""
}
break
;
case
"maxlength"
:
case
"tabindex"
:
if
(
j
===
32768
||
j
===
2147483647
||
j
===
"32768"
){
j
=
""
}
break
;
case
"multiple"
:
case
"compact"
:
case
"noshade"
:
case
"nowrap"
:
if
(
j
===
65535
){
return
o
}
return
l
;
case
"shape"
:
j
=
j
.
toLowerCase
();
break
;
default
:
if
(
o
.
indexOf
(
"on"
)
===
0
&&
j
){
j
=
h
.
_replace
(
/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/
,
"$1"
,
""
+
j
)}}}
return
(
j
!==
undefined
&&
j
!==
null
&&
j
!==
""
)
?
""
+
j
:
l
},
getPos
:
function
(
s
,
m
){
var
k
=
this
,
j
=
0
,
q
=
0
,
o
,
p
=
k
.
doc
,
l
;
s
=
k
.
get
(
s
);
m
=
m
||
p
.
body
;
if
(
s
){
if
(
b
&&!
k
.
stdMode
){
s
=
s
.
getBoundingClientRect
();
o
=
k
.
boxModel
?
p
.
documentElement
:
p
.
body
;
j
=
k
.
getStyle
(
k
.
select
(
"html"
)[
0
],
"borderWidth"
);
j
=
(
j
==
"medium"
||
k
.
boxModel
&&!
k
.
isIE6
)
&&
2
||
j
;
return
{
x
:
s
.
left
+
o
.
scrollLeft
-
j
,
y
:
s
.
top
+
o
.
scrollTop
-
j
}}
l
=
s
;
while
(
l
&&
l
!=
m
&&
l
.
nodeType
){
j
+=
l
.
offsetLeft
||
0
;
q
+=
l
.
offsetTop
||
0
;
l
=
l
.
offsetParent
}
l
=
s
.
parentNode
;
while
(
l
&&
l
!=
m
&&
l
.
nodeType
){
j
-=
l
.
scrollLeft
||
0
;
q
-=
l
.
scrollTop
||
0
;
l
=
l
.
parentNode
}}
return
{
x
:
j
,
y
:
q
}},
parseStyle
:
function
(
j
){
return
this
.
styles
.
parse
(
j
)},
serializeStyle
:
function
(
k
,
j
){
return
this
.
styles
.
serialize
(
k
,
j
)},
loadCSS
:
function
(
j
){
var
l
=
this
,
m
=
l
.
doc
,
k
;
if
(
!
j
){
j
=
""
}
k
=
l
.
select
(
"head"
)[
0
];
f
(
j
.
split
(
","
),
function
(
n
){
var
o
;
if
(
l
.
files
[
n
]){
return
}
l
.
files
[
n
]
=
true
;
o
=
l
.
create
(
"link"
,{
rel
:
"stylesheet"
,
href
:
h
.
_addVer
(
n
)});
if
(
b
&&
m
.
documentMode
&&
m
.
recalc
){
o
.
onload
=
function
(){
if
(
m
.
recalc
){
m
.
recalc
()}
o
.
onload
=
null
}}
k
.
appendChild
(
o
)})},
addClass
:
function
(
j
,
k
){
return
this
.
run
(
j
,
function
(
l
){
var
m
;
if
(
!
k
){
return
0
}
if
(
this
.
hasClass
(
l
,
k
)){
return
l
.
className
}
m
=
this
.
removeClass
(
l
,
k
);
return
l
.
className
=
(
m
!=
""
?
(
m
+
" "
)
:
""
)
+
k
})},
removeClass
:
function
(
l
,
m
){
var
j
=
this
,
k
;
return
j
.
run
(
l
,
function
(
o
){
var
n
;
if
(
j
.
hasClass
(
o
,
m
)){
if
(
!
k
){
k
=
new
RegExp
(
"(^|\\s+)"
+
m
+
"(\\s+|$)"
,
"g"
)}
n
=
o
.
className
.
replace
(
k
,
" "
);
n
=
h
.
trim
(
n
!=
" "
?
n
:
""
);
o
.
className
=
n
;
if
(
!
n
){
o
.
removeAttribute
(
"class"
);
o
.
removeAttribute
(
"className"
)}
return
n
}
return
o
.
className
})},
hasClass
:
function
(
k
,
j
){
k
=
this
.
get
(
k
);
if
(
!
k
||!
j
){
return
false
}
return
(
" "
+
k
.
className
+
" "
).
indexOf
(
" "
+
j
+
" "
)
!==-
1
},
show
:
function
(
j
){
return
this
.
setStyle
(
j
,
"display"
,
"block"
)},
hide
:
function
(
j
){
return
this
.
setStyle
(
j
,
"display"
,
"none"
)},
isHidden
:
function
(
j
){
j
=
this
.
get
(
j
);
return
!
j
||
j
.
style
.
display
==
"none"
||
this
.
getStyle
(
j
,
"display"
)
==
"none"
},
uniqueId
:
function
(
j
){
return
(
!
j
?
"mce_"
:
j
)
+
(
this
.
counter
++
)},
setHTML
:
function
(
l
,
k
){
var
j
=
this
;
return
j
.
run
(
l
,
function
(
n
){
if
(
b
){
while
(
n
.
firstChild
){
n
.
removeChild
(
n
.
firstChild
)}
try
{
n
.
innerHTML
=
"<br />"
+
k
;
n
.
removeChild
(
n
.
firstChild
)}
catch
(
m
){
n
=
j
.
create
(
"div"
);
n
.
innerHTML
=
"<br />"
+
k
;
f
(
n
.
childNodes
,
function
(
p
,
o
){
if
(
o
){
n
.
appendChild
(
p
)}})}}
else
{
n
.
innerHTML
=
k
}
return
k
})},
getOuterHTML
:
function
(
l
){
var
k
,
j
=
this
;
l
=
j
.
get
(
l
);
if
(
!
l
){
return
null
}
if
(
l
.
nodeType
===
1
&&
j
.
hasOuterHTML
){
return
l
.
outerHTML
}
k
=
(
l
.
ownerDocument
||
j
.
doc
).
createElement
(
"body"
);
k
.
appendChild
(
l
.
cloneNode
(
true
));
return
k
.
innerHTML
},
setOuterHTML
:
function
(
m
,
k
,
n
){
var
j
=
this
;
function
l
(
p
,
o
,
r
){
var
s
,
q
;
q
=
r
.
createElement
(
"body"
);
q
.
innerHTML
=
o
;
s
=
q
.
lastChild
;
while
(
s
){
j
.
insertAfter
(
s
.
cloneNode
(
true
),
p
);
s
=
s
.
previousSibling
}
j
.
remove
(
p
)}
return
this
.
run
(
m
,
function
(
p
){
p
=
j
.
get
(
p
);
if
(
p
.
nodeType
==
1
){
n
=
n
||
p
.
ownerDocument
||
j
.
doc
;
if
(
b
){
try
{
if
(
b
&&
p
.
nodeType
==
1
){
p
.
outerHTML
=
k
}
else
{
l
(
p
,
k
,
n
)}}
catch
(
o
){
l
(
p
,
k
,
n
)}}
else
{
l
(
p
,
k
,
n
)}}})},
decode
:
c
.
decode
,
encode
:
c
.
encodeAllRaw
,
insertAfter
:
function
(
j
,
k
){
k
=
this
.
get
(
k
);
return
this
.
run
(
j
,
function
(
m
){
var
l
,
n
;
l
=
k
.
parentNode
;
n
=
k
.
nextSibling
;
if
(
n
){
l
.
insertBefore
(
m
,
n
)}
else
{
l
.
appendChild
(
m
)}
return
m
})},
isBlock
:
function
(
k
){
var
j
=
k
.
nodeType
;
if
(
j
){
return
!!
(
j
===
1
&&
g
[
k
.
nodeName
])}
return
!!
g
[
k
]},
replace
:
function
(
p
,
m
,
j
){
var
l
=
this
;
if
(
e
(
m
,
"array"
)){
p
=
p
.
cloneNode
(
true
)}
return
l
.
run
(
m
,
function
(
k
){
if
(
j
){
f
(
h
.
grep
(
k
.
childNodes
),
function
(
n
){
p
.
appendChild
(
n
)})}
return
k
.
parentNode
.
replaceChild
(
p
,
k
)})},
rename
:
function
(
m
,
j
){
var
l
=
this
,
k
;
if
(
m
.
nodeName
!=
j
.
toUpperCase
()){
k
=
l
.
create
(
j
);
f
(
l
.
getAttribs
(
m
),
function
(
n
){
l
.
setAttrib
(
k
,
n
.
nodeName
,
l
.
getAttrib
(
m
,
n
.
nodeName
))});
l
.
replace
(
k
,
m
,
1
)}
return
k
||
m
},
findCommonAncestor
:
function
(
l
,
j
){
var
m
=
l
,
k
;
while
(
m
){
k
=
j
;
while
(
k
&&
m
!=
k
){
k
=
k
.
parentNode
}
if
(
m
==
k
){
break
}
m
=
m
.
parentNode
}
if
(
!
m
&&
l
.
ownerDocument
){
return
l
.
ownerDocument
.
documentElement
}
return
m
},
toHex
:
function
(
j
){
var
l
=
/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i
.
exec
(
j
);
function
k
(
m
){
m
=
parseInt
(
m
).
toString
(
16
);
return
m
.
length
>
1
?
m
:
"0"
+
m
}
if
(
l
){
j
=
"#"
+
k
(
l
[
1
])
+
k
(
l
[
2
])
+
k
(
l
[
3
]);
return
j
}
return
j
},
getClasses
:
function
(){
var
n
=
this
,
j
=
[],
m
,
o
=
{},
p
=
n
.
settings
.
class_filter
,
l
;
if
(
n
.
classes
){
return
n
.
classes
}
function
q
(
r
){
f
(
r
.
imports
,
function
(
s
){
q
(
s
)});
f
(
r
.
cssRules
||
r
.
rules
,
function
(
s
){
switch
(
s
.
type
||
1
){
case
1
:
if
(
s
.
selectorText
){
f
(
s
.
selectorText
.
split
(
","
),
function
(
t
){
t
=
t
.
replace
(
/^\s*|\s*$|^\s\./g
,
""
);
if
(
/\.mce/
.
test
(
t
)
||!
/\.[\w\-]+$/
.
test
(
t
)){
return
}
l
=
t
;
t
=
h
.
_replace
(
/.*\.([a-z0-9_\-]+).*/i
,
"$1"
,
t
);
if
(
p
&&!
(
t
=
p
(
t
,
l
))){
return
}
if
(
!
o
[
t
]){
j
.
push
({
"class"
:
t
});
o
[
t
]
=
1
}})}
break
;
case
3
:
q
(
s
.
styleSheet
);
break
}})}
try
{
f
(
n
.
doc
.
styleSheets
,
q
)}
catch
(
k
){}
if
(
j
.
length
>
0
){
n
.
classes
=
j
}
return
j
},
run
:
function
(
m
,
l
,
k
){
var
j
=
this
,
n
;
if
(
j
.
doc
&&
typeof
(
m
)
===
"string"
){
m
=
j
.
get
(
m
)}
if
(
!
m
){
return
false
}
k
=
k
||
this
;
if
(
!
m
.
nodeType
&&
(
m
.
length
||
m
.
length
===
0
)){
n
=
[];
f
(
m
,
function
(
p
,
o
){
if
(
p
){
if
(
typeof
(
p
)
==
"string"
){
p
=
j
.
doc
.
getElementById
(
p
)}
n
.
push
(
l
.
call
(
k
,
p
,
o
))}});
return
n
}
return
l
.
call
(
k
,
m
)},
getAttribs
:
function
(
k
){
var
j
;
k
=
this
.
get
(
k
);
if
(
!
k
){
return
[]}
if
(
b
){
j
=
[];
if
(
k
.
nodeName
==
"OBJECT"
){
return
k
.
attributes
}
if
(
k
.
nodeName
===
"OPTION"
&&
this
.
getAttrib
(
k
,
"selected"
)){
j
.
push
({
specified
:
1
,
nodeName
:
"selected"
})}
k
.
cloneNode
(
false
).
outerHTML
.
replace
(
/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi
,
""
).
replace
(
/[\w:\-]+/gi
,
function
(
l
){
j
.
push
({
specified
:
1
,
nodeName
:
l
})});
return
j
}
return
k
.
attributes
},
isEmpty
:
function
(
o
,
p
){
var
k
=
this
,
m
,
j
,
n
,
q
,
l
;
o
=
o
.
firstChild
;
if
(
o
){
q
=
new
h
.
dom
.
TreeWalker
(
o
);
p
=
p
||
k
.
schema
?
k
.
schema
.
getNonEmptyElements
()
:
null
;
do
{
n
=
o
.
nodeType
;
if
(
n
===
1
){
if
(
o
.
getAttribute
(
"data-mce-bogus"
)){
continue
}
if
(
p
&&
p
[
o
.
nodeName
.
toLowerCase
()]){
return
false
}
j
=
k
.
getAttribs
(
o
);
m
=
o
.
attributes
.
length
;
while
(
m
--
){
l
=
o
.
attributes
[
m
].
nodeName
;
if
(
l
===
"name"
||
l
.
indexOf
(
"data-"
)
===
0
){
return
false
}}}
if
((
n
===
3
&&!
i
.
test
(
o
.
nodeValue
))){
return
false
}}
while
(
o
=
q
.
next
())}
return
true
},
destroy
:
function
(
k
){
var
j
=
this
;
if
(
j
.
events
){
j
.
events
.
destroy
()}
j
.
win
=
j
.
doc
=
j
.
root
=
j
.
events
=
null
;
if
(
!
k
){
h
.
removeUnload
(
j
.
destroy
)}},
createRng
:
function
(){
var
j
=
this
.
doc
;
return
j
.
createRange
?
j
.
createRange
()
:
new
h
.
dom
.
Range
(
this
)},
nodeIndex
:
function
(
o
,
p
){
var
j
=
0
,
m
,
n
,
l
,
k
;
if
(
o
){
for
(
m
=
o
.
nodeType
,
o
=
o
.
previousSibling
,
n
=
o
;
o
;
o
=
o
.
previousSibling
){
l
=
o
.
nodeType
;
if
(
p
&&
l
==
3
){
k
=
false
;
try
{
k
=
o
.
nodeValue
.
length
}
catch
(
q
){}
if
(
l
==
m
||!
k
){
continue
}}
j
++
;
m
=
l
}}
return
j
},
split
:
function
(
n
,
m
,
q
){
var
s
=
this
,
j
=
s
.
createRng
(),
o
,
l
,
p
;
function
k
(
v
){
var
t
,
r
=
v
.
childNodes
,
u
=
v
.
nodeType
;
if
(
u
==
1
&&
v
.
getAttribute
(
"data-mce-type"
)
==
"bookmark"
){
return
}
for
(
t
=
r
.
length
-
1
;
t
>=
0
;
t
--
){
k
(
r
[
t
])}
if
(
u
!=
9
){
if
(
u
==
3
&&
v
.
nodeValue
.
length
>
0
){
if
(
!
s
.
isBlock
(
v
.
parentNode
)
||
h
.
trim
(
v
.
nodeValue
).
length
>
0
){
return
}}
else
{
if
(
u
==
1
){
r
=
v
.
childNodes
;
if
(
r
.
length
==
1
&&
r
[
0
]
&&
r
[
0
].
nodeType
==
1
&&
r
[
0
].
getAttribute
(
"data-mce-type"
)
==
"bookmark"
){
v
.
parentNode
.
insertBefore
(
r
[
0
],
v
)}
if
(
r
.
length
||
/^(br|hr|input|img)$/i
.
test
(
v
.
nodeName
)){
return
}}}
s
.
remove
(
v
)}
return
v
}
if
(
n
&&
m
){
j
.
setStart
(
n
.
parentNode
,
s
.
nodeIndex
(
n
));
j
.
setEnd
(
m
.
parentNode
,
s
.
nodeIndex
(
m
));
o
=
j
.
extractContents
();
j
=
s
.
createRng
();
j
.
setStart
(
m
.
parentNode
,
s
.
nodeIndex
(
m
)
+
1
);
j
.
setEnd
(
n
.
parentNode
,
s
.
nodeIndex
(
n
)
+
1
);
l
=
j
.
extractContents
();
p
=
n
.
parentNode
;
p
.
insertBefore
(
k
(
o
),
n
);
if
(
q
){
p
.
replaceChild
(
q
,
m
)}
else
{
p
.
insertBefore
(
m
,
n
)}
p
.
insertBefore
(
k
(
l
),
n
);
s
.
remove
(
n
);
return
q
||
m
}},
bind
:
function
(
n
,
j
,
m
,
l
){
var
k
=
this
;
if
(
!
k
.
events
){
k
.
events
=
new
h
.
dom
.
EventUtils
()}
return
k
.
events
.
add
(
n
,
j
,
m
,
l
||
this
)},
unbind
:
function
(
m
,
j
,
l
){
var
k
=
this
;
if
(
!
k
.
events
){
k
.
events
=
new
h
.
dom
.
EventUtils
()}
return
k
.
events
.
remove
(
m
,
j
,
l
)},
_findSib
:
function
(
m
,
j
,
k
){
var
l
=
this
,
n
=
j
;
if
(
m
){
if
(
e
(
n
,
"string"
)){
n
=
function
(
o
){
return
l
.
is
(
o
,
j
)}}
for
(
m
=
m
[
k
];
m
;
m
=
m
[
k
]){
if
(
n
(
m
)){
return
m
}}}
return
null
},
_isRes
:
function
(
j
){
return
/^(top|left|bottom|right|width|height)/i
.
test
(
j
)
||
/;\s*(top|left|bottom|right|width|height)/i
.
test
(
j
)}});
h
.
DOM
=
new
h
.
dom
.
DOMUtils
(
document
,{
process_html
:
0
})})(
tinymce
);(
function
(
a
){
function
b
(
c
){
var
N
=
this
,
e
=
c
.
doc
,
S
=
0
,
E
=
1
,
j
=
2
,
D
=
true
,
R
=
false
,
U
=
"startOffset"
,
h
=
"startContainer"
,
P
=
"endContainer"
,
z
=
"endOffset"
,
k
=
tinymce
.
extend
,
n
=
c
.
nodeIndex
;
k
(
N
,{
startContainer
:
e
,
startOffset
:
0
,
endContainer
:
e
,
endOffset
:
0
,
collapsed
:
D
,
commonAncestorContainer
:
e
,
START_TO_START
:
0
,
START_TO_END
:
1
,
END_TO_END
:
2
,
END_TO_START
:
3
,
setStart
:
q
,
setEnd
:
s
,
setStartBefore
:
g
,
setStartAfter
:
I
,
setEndBefore
:
J
,
setEndAfter
:
u
,
collapse
:
A
,
selectNode
:
x
,
selectNodeContents
:
F
,
compareBoundaryPoints
:
v
,
deleteContents
:
p
,
extractContents
:
H
,
cloneContents
:
d
,
insertNode
:
C
,
surroundContents
:
M
,
cloneRange
:
K
});
function
q
(
V
,
t
){
B
(
D
,
V
,
t
)}
function
s
(
V
,
t
){
B
(
R
,
V
,
t
)}
function
g
(
t
){
q
(
t
.
parentNode
,
n
(
t
))}
function
I
(
t
){
q
(
t
.
parentNode
,
n
(
t
)
+
1
)}
function
J
(
t
){
s
(
t
.
parentNode
,
n
(
t
))}
function
u
(
t
){
s
(
t
.
parentNode
,
n
(
t
)
+
1
)}
function
A
(
t
){
if
(
t
){
N
[
P
]
=
N
[
h
];
N
[
z
]
=
N
[
U
]}
else
{
N
[
h
]
=
N
[
P
];
N
[
U
]
=
N
[
z
]}
N
.
collapsed
=
D
}
function
x
(
t
){
g
(
t
);
u
(
t
)}
function
F
(
t
){
q
(
t
,
0
);
s
(
t
,
t
.
nodeType
===
1
?
t
.
childNodes
.
length
:
t
.
nodeValue
.
length
)}
function
v
(
Y
,
t
){
var
ab
=
N
[
h
],
W
=
N
[
U
],
aa
=
N
[
P
],
V
=
N
[
z
],
Z
=
t
.
startContainer
,
ad
=
t
.
startOffset
,
X
=
t
.
endContainer
,
ac
=
t
.
endOffset
;
if
(
Y
===
0
){
return
G
(
ab
,
W
,
Z
,
ad
)}
if
(
Y
===
1
){
return
G
(
aa
,
V
,
Z
,
ad
)}
if
(
Y
===
2
){
return
G
(
aa
,
V
,
X
,
ac
)}
if
(
Y
===
3
){
return
G
(
ab
,
W
,
X
,
ac
)}}
function
p
(){
m
(
j
)}
function
H
(){
return
m
(
S
)}
function
d
(){
return
m
(
E
)}
function
C
(
Y
){
var
V
=
this
[
h
],
t
=
this
[
U
],
X
,
W
;
if
((
V
.
nodeType
===
3
||
V
.
nodeType
===
4
)
&&
V
.
nodeValue
){
if
(
!
t
){
V
.
parentNode
.
insertBefore
(
Y
,
V
)}
else
{
if
(
t
>=
V
.
nodeValue
.
length
){
c
.
insertAfter
(
Y
,
V
)}
else
{
X
=
V
.
splitText
(
t
);
V
.
parentNode
.
insertBefore
(
Y
,
X
)}}}
else
{
if
(
V
.
childNodes
.
length
>
0
){
W
=
V
.
childNodes
[
t
]}
if
(
W
){
V
.
insertBefore
(
Y
,
W
)}
else
{
V
.
appendChild
(
Y
)}}}
function
M
(
V
){
var
t
=
N
.
extractContents
();
N
.
insertNode
(
V
);
V
.
appendChild
(
t
);
N
.
selectNode
(
V
)}
function
K
(){
return
k
(
new
b
(
c
),{
startContainer
:
N
[
h
],
startOffset
:
N
[
U
],
endContainer
:
N
[
P
],
endOffset
:
N
[
z
],
collapsed
:
N
.
collapsed
,
commonAncestorContainer
:
N
.
commonAncestorContainer
})}
function
O
(
t
,
V
){
var
W
;
if
(
t
.
nodeType
==
3
){
return
t
}
if
(
V
<
0
){
return
t
}
W
=
t
.
firstChild
;
while
(
W
&&
V
>
0
){
--
V
;
W
=
W
.
nextSibling
}
if
(
W
){
return
W
}
return
t
}
function
l
(){
return
(
N
[
h
]
==
N
[
P
]
&&
N
[
U
]
==
N
[
z
])}
function
G
(
X
,
Z
,
V
,
Y
){
var
aa
,
W
,
t
,
ab
,
ad
,
ac
;
if
(
X
==
V
){
if
(
Z
==
Y
){
return
0
}
if
(
Z
<
Y
){
return
-
1
}
return
1
}
aa
=
V
;
while
(
aa
&&
aa
.
parentNode
!=
X
){
aa
=
aa
.
parentNode
}
if
(
aa
){
W
=
0
;
t
=
X
.
firstChild
;
while
(
t
!=
aa
&&
W
<
Z
){
W
++
;
t
=
t
.
nextSibling
}
if
(
Z
<=
W
){
return
-
1
}
return
1
}
aa
=
X
;
while
(
aa
&&
aa
.
parentNode
!=
V
){
aa
=
aa
.
parentNode
}
if
(
aa
){
W
=
0
;
t
=
V
.
firstChild
;
while
(
t
!=
aa
&&
W
<
Y
){
W
++
;
t
=
t
.
nextSibling
}
if
(
W
<
Y
){
return
-
1
}
return
1
}
ab
=
c
.
findCommonAncestor
(
X
,
V
);
ad
=
X
;
while
(
ad
&&
ad
.
parentNode
!=
ab
){
ad
=
ad
.
parentNode
}
if
(
!
ad
){
ad
=
ab
}
ac
=
V
;
while
(
ac
&&
ac
.
parentNode
!=
ab
){
ac
=
ac
.
parentNode
}
if
(
!
ac
){
ac
=
ab
}
if
(
ad
==
ac
){
return
0
}
t
=
ab
.
firstChild
;
while
(
t
){
if
(
t
==
ad
){
return
-
1
}
if
(
t
==
ac
){
return
1
}
t
=
t
.
nextSibling
}}
function
B
(
V
,
Y
,
X
){
var
t
,
W
;
if
(
V
){
N
[
h
]
=
Y
;
N
[
U
]
=
X
}
else
{
N
[
P
]
=
Y
;
N
[
z
]
=
X
}
t
=
N
[
P
];
while
(
t
.
parentNode
){
t
=
t
.
parentNode
}
W
=
N
[
h
];
while
(
W
.
parentNode
){
W
=
W
.
parentNode
}
if
(
W
==
t
){
if
(
G
(
N
[
h
],
N
[
U
],
N
[
P
],
N
[
z
])
>
0
){
N
.
collapse
(
V
)}}
else
{
N
.
collapse
(
V
)}
N
.
collapsed
=
l
();
N
.
commonAncestorContainer
=
c
.
findCommonAncestor
(
N
[
h
],
N
[
P
])}
function
m
(
ab
){
var
aa
,
X
=
0
,
ad
=
0
,
V
,
Z
,
W
,
Y
,
t
,
ac
;
if
(
N
[
h
]
==
N
[
P
]){
return
f
(
ab
)}
for
(
aa
=
N
[
P
],
V
=
aa
.
parentNode
;
V
;
aa
=
V
,
V
=
V
.
parentNode
){
if
(
V
==
N
[
h
]){
return
r
(
aa
,
ab
)}
++
X
}
for
(
aa
=
N
[
h
],
V
=
aa
.
parentNode
;
V
;
aa
=
V
,
V
=
V
.
parentNode
){
if
(
V
==
N
[
P
]){
return
T
(
aa
,
ab
)}
++
ad
}
Z
=
ad
-
X
;
W
=
N
[
h
];
while
(
Z
>
0
){
W
=
W
.
parentNode
;
Z
--
}
Y
=
N
[
P
];
while
(
Z
<
0
){
Y
=
Y
.
parentNode
;
Z
++
}
for
(
t
=
W
.
parentNode
,
ac
=
Y
.
parentNode
;
t
!=
ac
;
t
=
t
.
parentNode
,
ac
=
ac
.
parentNode
){
W
=
t
;
Y
=
ac
}
return
o
(
W
,
Y
,
ab
)}
function
f
(
Z
){
var
ab
,
Y
,
X
,
aa
,
t
,
W
,
V
;
if
(
Z
!=
j
){
ab
=
e
.
createDocumentFragment
()}
if
(
N
[
U
]
==
N
[
z
]){
return
ab
}
if
(
N
[
h
].
nodeType
==
3
){
Y
=
N
[
h
].
nodeValue
;
X
=
Y
.
substring
(
N
[
U
],
N
[
z
]);
if
(
Z
!=
E
){
N
[
h
].
deleteData
(
N
[
U
],
N
[
z
]
-
N
[
U
]);
N
.
collapse
(
D
)}
if
(
Z
==
j
){
return
}
ab
.
appendChild
(
e
.
createTextNode
(
X
));
return
ab
}
aa
=
O
(
N
[
h
],
N
[
U
]);
t
=
N
[
z
]
-
N
[
U
];
while
(
t
>
0
){
W
=
aa
.
nextSibling
;
V
=
y
(
aa
,
Z
);
if
(
ab
){
ab
.
appendChild
(
V
)}
--
t
;
aa
=
W
}
if
(
Z
!=
E
){
N
.
collapse
(
D
)}
return
ab
}
function
r
(
ab
,
Y
){
var
aa
,
Z
,
V
,
t
,
X
,
W
;
if
(
Y
!=
j
){
aa
=
e
.
createDocumentFragment
()}
Z
=
i
(
ab
,
Y
);
if
(
aa
){
aa
.
appendChild
(
Z
)}
V
=
n
(
ab
);
t
=
V
-
N
[
U
];
if
(
t
<=
0
){
if
(
Y
!=
E
){
N
.
setEndBefore
(
ab
);
N
.
collapse
(
R
)}
return
aa
}
Z
=
ab
.
previousSibling
;
while
(
t
>
0
){
X
=
Z
.
previousSibling
;
W
=
y
(
Z
,
Y
);
if
(
aa
){
aa
.
insertBefore
(
W
,
aa
.
firstChild
)}
--
t
;
Z
=
X
}
if
(
Y
!=
E
){
N
.
setEndBefore
(
ab
);
N
.
collapse
(
R
)}
return
aa
}
function
T
(
Z
,
Y
){
var
ab
,
V
,
aa
,
t
,
X
,
W
;
if
(
Y
!=
j
){
ab
=
e
.
createDocumentFragment
()}
aa
=
Q
(
Z
,
Y
);
if
(
ab
){
ab
.
appendChild
(
aa
)}
V
=
n
(
Z
);
++
V
;
t
=
N
[
z
]
-
V
;
aa
=
Z
.
nextSibling
;
while
(
t
>
0
){
X
=
aa
.
nextSibling
;
W
=
y
(
aa
,
Y
);
if
(
ab
){
ab
.
appendChild
(
W
)}
--
t
;
aa
=
X
}
if
(
Y
!=
E
){
N
.
setStartAfter
(
Z
);
N
.
collapse
(
D
)}
return
ab
}
function
o
(
Z
,
t
,
ac
){
var
W
,
ae
,
Y
,
aa
,
ab
,
V
,
ad
,
X
;
if
(
ac
!=
j
){
ae
=
e
.
createDocumentFragment
()}
W
=
Q
(
Z
,
ac
);
if
(
ae
){
ae
.
appendChild
(
W
)}
Y
=
Z
.
parentNode
;
aa
=
n
(
Z
);
ab
=
n
(
t
);
++
aa
;
V
=
ab
-
aa
;
ad
=
Z
.
nextSibling
;
while
(
V
>
0
){
X
=
ad
.
nextSibling
;
W
=
y
(
ad
,
ac
);
if
(
ae
){
ae
.
appendChild
(
W
)}
ad
=
X
;
--
V
}
W
=
i
(
t
,
ac
);
if
(
ae
){
ae
.
appendChild
(
W
)}
if
(
ac
!=
E
){
N
.
setStartAfter
(
Z
);
N
.
collapse
(
D
)}
return
ae
}
function
i
(
aa
,
ab
){
var
W
=
O
(
N
[
P
],
N
[
z
]
-
1
),
ac
,
Z
,
Y
,
t
,
V
,
X
=
W
!=
N
[
P
];
if
(
W
==
aa
){
return
L
(
W
,
X
,
R
,
ab
)}
ac
=
W
.
parentNode
;
Z
=
L
(
ac
,
R
,
R
,
ab
);
while
(
ac
){
while
(
W
){
Y
=
W
.
previousSibling
;
t
=
L
(
W
,
X
,
R
,
ab
);
if
(
ab
!=
j
){
Z
.
insertBefore
(
t
,
Z
.
firstChild
)}
X
=
D
;
W
=
Y
}
if
(
ac
==
aa
){
return
Z
}
W
=
ac
.
previousSibling
;
ac
=
ac
.
parentNode
;
V
=
L
(
ac
,
R
,
R
,
ab
);
if
(
ab
!=
j
){
V
.
appendChild
(
Z
)}
Z
=
V
}}
function
Q
(
aa
,
ab
){
var
X
=
O
(
N
[
h
],
N
[
U
]),
Y
=
X
!=
N
[
h
],
ac
,
Z
,
W
,
t
,
V
;
if
(
X
==
aa
){
return
L
(
X
,
Y
,
D
,
ab
)}
ac
=
X
.
parentNode
;
Z
=
L
(
ac
,
R
,
D
,
ab
);
while
(
ac
){
while
(
X
){
W
=
X
.
nextSibling
;
t
=
L
(
X
,
Y
,
D
,
ab
);
if
(
ab
!=
j
){
Z
.
appendChild
(
t
)}
Y
=
D
;
X
=
W
}
if
(
ac
==
aa
){
return
Z
}
X
=
ac
.
nextSibling
;
ac
=
ac
.
parentNode
;
V
=
L
(
ac
,
R
,
D
,
ab
);
if
(
ab
!=
j
){
V
.
appendChild
(
Z
)}
Z
=
V
}}
function
L
(
t
,
Y
,
ab
,
ac
){
var
X
,
W
,
Z
,
V
,
aa
;
if
(
Y
){
return
y
(
t
,
ac
)}
if
(
t
.
nodeType
==
3
){
X
=
t
.
nodeValue
;
if
(
ab
){
V
=
N
[
U
];
W
=
X
.
substring
(
V
);
Z
=
X
.
substring
(
0
,
V
)}
else
{
V
=
N
[
z
];
W
=
X
.
substring
(
0
,
V
);
Z
=
X
.
substring
(
V
)}
if
(
ac
!=
E
){
t
.
nodeValue
=
Z
}
if
(
ac
==
j
){
return
}
aa
=
t
.
cloneNode
(
R
);
aa
.
nodeValue
=
W
;
return
aa
}
if
(
ac
==
j
){
return
}
return
t
.
cloneNode
(
R
)}
function
y
(
V
,
t
){
if
(
t
!=
j
){
return
t
==
E
?
V
.
cloneNode
(
D
)
:
V
}
V
.
parentNode
.
removeChild
(
V
)}}
a
.
Range
=
b
})(
tinymce
.
dom
);(
function
(){
function
a
(
g
){
var
i
=
this
,
j
=
"\uFEFF"
,
e
,
h
,
d
=
g
.
dom
,
c
=
true
,
f
=
false
;
function
b
(){
var
n
=
g
.
getRng
(),
k
=
d
.
createRng
(),
m
,
o
;
m
=
n
.
item
?
n
.
item
(
0
)
:
n
.
parentElement
();
if
(
m
.
ownerDocument
!=
d
.
doc
){
return
k
}
o
=
g
.
isCollapsed
();
if
(
n
.
item
||!
m
.
hasChildNodes
()){
if
(
o
){
k
.
setStart
(
m
,
0
);
k
.
setEnd
(
m
,
0
)}
else
{
k
.
setStart
(
m
.
parentNode
,
d
.
nodeIndex
(
m
));
k
.
setEnd
(
k
.
startContainer
,
k
.
startOffset
+
1
)}
return
k
}
function
l
(
s
){
var
u
,
q
,
t
,
p
,
A
=
0
,
x
,
y
,
z
,
r
,
v
;
r
=
n
.
duplicate
();
r
.
collapse
(
s
);
u
=
d
.
create
(
"a"
);
z
=
r
.
parentElement
();
if
(
!
z
.
hasChildNodes
()){
k
[
s
?
"setStart"
:
"setEnd"
](
z
,
0
);
return
}
z
.
appendChild
(
u
);
r
.
moveToElementText
(
u
);
v
=
n
.
compareEndPoints
(
s
?
"StartToStart"
:
"EndToEnd"
,
r
);
if
(
v
>
0
){
k
[
s
?
"setStartAfter"
:
"setEndAfter"
](
z
);
d
.
remove
(
u
);
return
}
p
=
tinymce
.
grep
(
z
.
childNodes
);
x
=
p
.
length
-
1
;
while
(
A
<=
x
){
y
=
Math
.
floor
((
A
+
x
)
/
2
);
z
.
insertBefore
(
u
,
p
[
y
]);
r
.
moveToElementText
(
u
);
v
=
n
.
compareEndPoints
(
s
?
"StartToStart"
:
"EndToEnd"
,
r
);
if
(
v
>
0
){
A
=
y
+
1
}
else
{
if
(
v
<
0
){
x
=
y
-
1
}
else
{
found
=
true
;
break
}}}
q
=
v
>
0
||
y
==
0
?
u
.
nextSibling
:
u
.
previousSibling
;
if
(
q
.
nodeType
==
1
){
d
.
remove
(
u
);
t
=
d
.
nodeIndex
(
q
);
q
=
q
.
parentNode
;
if
(
!
s
||
y
>
0
){
t
++
}}
else
{
if
(
v
>
0
||
y
==
0
){
r
.
setEndPoint
(
s
?
"StartToStart"
:
"EndToEnd"
,
n
);
t
=
r
.
text
.
length
}
else
{
r
.
setEndPoint
(
s
?
"StartToStart"
:
"EndToEnd"
,
n
);
t
=
q
.
nodeValue
.
length
-
r
.
text
.
length
}
d
.
remove
(
u
)}
k
[
s
?
"setStart"
:
"setEnd"
](
q
,
t
)}
l
(
true
);
if
(
!
o
){
l
()}
return
k
}
this
.
addRange
=
function
(
k
){
var
p
,
n
,
m
,
r
,
u
,
s
,
t
=
g
.
dom
.
doc
,
o
=
t
.
body
;
function
l
(
B
){
var
x
,
A
,
v
,
z
,
y
;
v
=
d
.
create
(
"a"
);
x
=
B
?
m
:
u
;
A
=
B
?
r
:
s
;
z
=
p
.
duplicate
();
if
(
x
==
t
||
x
==
t
.
documentElement
){
x
=
o
;
A
=
0
}
if
(
x
.
nodeType
==
3
){
x
.
parentNode
.
insertBefore
(
v
,
x
);
z
.
moveToElementText
(
v
);
z
.
moveStart
(
"character"
,
A
);
d
.
remove
(
v
);
p
.
setEndPoint
(
B
?
"StartToStart"
:
"EndToEnd"
,
z
)}
else
{
y
=
x
.
childNodes
;
if
(
y
.
length
){
if
(
A
>=
y
.
length
){
d
.
insertAfter
(
v
,
y
[
y
.
length
-
1
])}
else
{
x
.
insertBefore
(
v
,
y
[
A
])}
z
.
moveToElementText
(
v
)}
else
{
v
=
t
.
createTextNode
(
j
);
x
.
appendChild
(
v
);
z
.
moveToElementText
(
v
.
parentNode
);
z
.
collapse
(
c
)}
p
.
setEndPoint
(
B
?
"StartToStart"
:
"EndToEnd"
,
z
);
d
.
remove
(
v
)}}
this
.
destroy
();
m
=
k
.
startContainer
;
r
=
k
.
startOffset
;
u
=
k
.
endContainer
;
s
=
k
.
endOffset
;
p
=
o
.
createTextRange
();
if
(
m
==
u
&&
m
.
nodeType
==
1
&&
r
==
s
-
1
){
if
(
r
==
s
-
1
){
try
{
n
=
o
.
createControlRange
();
n
.
addElement
(
m
.
childNodes
[
r
]);
n
.
select
();
return
}
catch
(
q
){}}}
l
(
true
);
l
();
p
.
select
()};
this
.
getRangeAt
=
function
(){
if
(
!
e
||!
tinymce
.
dom
.
RangeUtils
.
compareRanges
(
h
,
g
.
getRng
())){
e
=
b
();
h
=
g
.
getRng
()}
try
{
e
.
startContainer
.
nextSibling
}
catch
(
k
){
e
=
b
();
h
=
null
}
return
e
};
this
.
destroy
=
function
(){
h
=
e
=
null
}}
tinymce
.
dom
.
TridentSelection
=
a
})();(
function
(){
var
p
=
/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g
,
j
=
0
,
d
=
Object
.
prototype
.
toString
,
o
=
false
,
i
=
true
;[
0
,
0
].
sort
(
function
(){
i
=
false
;
return
0
});
var
b
=
function
(
v
,
e
,
z
,
A
){
z
=
z
||
[];
e
=
e
||
document
;
var
C
=
e
;
if
(
e
.
nodeType
!==
1
&&
e
.
nodeType
!==
9
){
return
[]}
if
(
!
v
||
typeof
v
!==
"string"
){
return
z
}
var
x
=
[],
s
,
E
,
H
,
r
,
u
=
true
,
t
=
b
.
isXML
(
e
),
B
=
v
,
D
,
G
,
F
,
y
;
do
{
p
.
exec
(
""
);
s
=
p
.
exec
(
B
);
if
(
s
){
B
=
s
[
3
];
x
.
push
(
s
[
1
]);
if
(
s
[
2
]){
r
=
s
[
3
];
break
}}}
while
(
s
);
if
(
x
.
length
>
1
&&
k
.
exec
(
v
)){
if
(
x
.
length
===
2
&&
f
.
relative
[
x
[
0
]]){
E
=
h
(
x
[
0
]
+
x
[
1
],
e
)}
else
{
E
=
f
.
relative
[
x
[
0
]]
?
[
e
]
:
b
(
x
.
shift
(),
e
);
while
(
x
.
length
){
v
=
x
.
shift
();
if
(
f
.
relative
[
v
]){
v
+=
x
.
shift
()}
E
=
h
(
v
,
E
)}}}
else
{
if
(
!
A
&&
x
.
length
>
1
&&
e
.
nodeType
===
9
&&!
t
&&
f
.
match
.
ID
.
test
(
x
[
0
])
&&!
f
.
match
.
ID
.
test
(
x
[
x
.
length
-
1
])){
D
=
b
.
find
(
x
.
shift
(),
e
,
t
);
e
=
D
.
expr
?
b
.
filter
(
D
.
expr
,
D
.
set
)[
0
]
:
D
.
set
[
0
]}
if
(
e
){
D
=
A
?
{
expr
:
x
.
pop
(),
set
:
a
(
A
)}
:
b
.
find
(
x
.
pop
(),
x
.
length
===
1
&&
(
x
[
0
]
===
"~"
||
x
[
0
]
===
"+"
)
&&
e
.
parentNode
?
e
.
parentNode
:
e
,
t
);
E
=
D
.
expr
?
b
.
filter
(
D
.
expr
,
D
.
set
)
:
D
.
set
;
if
(
x
.
length
>
0
){
H
=
a
(
E
)}
else
{
u
=
false
}
while
(
x
.
length
){
G
=
x
.
pop
();
F
=
G
;
if
(
!
f
.
relative
[
G
]){
G
=
""
}
else
{
F
=
x
.
pop
()}
if
(
F
==
null
){
F
=
e
}
f
.
relative
[
G
](
H
,
F
,
t
)}}
else
{
H
=
x
=
[]}}
if
(
!
H
){
H
=
E
}
if
(
!
H
){
b
.
error
(
G
||
v
)}
if
(
d
.
call
(
H
)
===
"[object Array]"
){
if
(
!
u
){
z
.
push
.
apply
(
z
,
H
)}
else
{
if
(
e
&&
e
.
nodeType
===
1
){
for
(
y
=
0
;
H
[
y
]
!=
null
;
y
++
){
if
(
H
[
y
]
&&
(
H
[
y
]
===
true
||
H
[
y
].
nodeType
===
1
&&
b
.
contains
(
e
,
H
[
y
]))){
z
.
push
(
E
[
y
])}}}
else
{
for
(
y
=
0
;
H
[
y
]
!=
null
;
y
++
){
if
(
H
[
y
]
&&
H
[
y
].
nodeType
===
1
){
z
.
push
(
E
[
y
])}}}}}
else
{
a
(
H
,
z
)}
if
(
r
){
b
(
r
,
C
,
z
,
A
);
b
.
uniqueSort
(
z
)}
return
z
};
b
.
uniqueSort
=
function
(
r
){
if
(
c
){
o
=
i
;
r
.
sort
(
c
);
if
(
o
){
for
(
var
e
=
1
;
e
<
r
.
length
;
e
++
){
if
(
r
[
e
]
===
r
[
e
-
1
]){
r
.
splice
(
e
--
,
1
)}}}}
return
r
};
b
.
matches
=
function
(
e
,
r
){
return
b
(
e
,
null
,
null
,
r
)};
b
.
find
=
function
(
y
,
e
,
z
){
var
x
;
if
(
!
y
){
return
[]}
for
(
var
t
=
0
,
s
=
f
.
order
.
length
;
t
<
s
;
t
++
){
var
v
=
f
.
order
[
t
],
u
;
if
((
u
=
f
.
leftMatch
[
v
].
exec
(
y
))){
var
r
=
u
[
1
];
u
.
splice
(
1
,
1
);
if
(
r
.
substr
(
r
.
length
-
1
)
!==
"\\"
){
u
[
1
]
=
(
u
[
1
]
||
""
).
replace
(
/\\/g
,
""
);
x
=
f
.
find
[
v
](
u
,
e
,
z
);
if
(
x
!=
null
){
y
=
y
.
replace
(
f
.
match
[
v
],
""
);
break
}}}}
if
(
!
x
){
x
=
e
.
getElementsByTagName
(
"*"
)}
return
{
set
:
x
,
expr
:
y
}};
b
.
filter
=
function
(
C
,
B
,
F
,
u
){
var
s
=
C
,
H
=
[],
z
=
B
,
x
,
e
,
y
=
B
&&
B
[
0
]
&&
b
.
isXML
(
B
[
0
]);
while
(
C
&&
B
.
length
){
for
(
var
A
in
f
.
filter
){
if
((
x
=
f
.
leftMatch
[
A
].
exec
(
C
))
!=
null
&&
x
[
2
]){
var
r
=
f
.
filter
[
A
],
G
,
E
,
t
=
x
[
1
];
e
=
false
;
x
.
splice
(
1
,
1
);
if
(
t
.
substr
(
t
.
length
-
1
)
===
"\\"
){
continue
}
if
(
z
===
H
){
H
=
[]}
if
(
f
.
preFilter
[
A
]){
x
=
f
.
preFilter
[
A
](
x
,
z
,
F
,
H
,
u
,
y
);
if
(
!
x
){
e
=
G
=
true
}
else
{
if
(
x
===
true
){
continue
}}}
if
(
x
){
for
(
var
v
=
0
;(
E
=
z
[
v
])
!=
null
;
v
++
){
if
(
E
){
G
=
r
(
E
,
x
,
v
,
z
);
var
D
=
u
^!!
G
;
if
(
F
&&
G
!=
null
){
if
(
D
){
e
=
true
}
else
{
z
[
v
]
=
false
}}
else
{
if
(
D
){
H
.
push
(
E
);
e
=
true
}}}}}
if
(
G
!==
undefined
){
if
(
!
F
){
z
=
H
}
C
=
C
.
replace
(
f
.
match
[
A
],
""
);
if
(
!
e
){
return
[]}
break
}}}
if
(
C
===
s
){
if
(
e
==
null
){
b
.
error
(
C
)}
else
{
break
}}
s
=
C
}
return
z
};
b
.
error
=
function
(
e
){
throw
"Syntax error, unrecognized expression: "
+
e
};
var
f
=
b
.
selectors
=
{
order
:
[
"ID"
,
"NAME"
,
"TAG"
],
match
:
{
ID
:
/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/
,
CLASS
:
/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/
,
NAME
:
/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/
,
ATTR
:
/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/
,
TAG
:
/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/
,
CHILD
:
/:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/
,
POS
:
/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/
,
PSEUDO
:
/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
},
leftMatch
:
{},
attrMap
:
{
"class"
:
"className"
,
"for"
:
"htmlFor"
},
attrHandle
:
{
href
:
function
(
e
){
return
e
.
getAttribute
(
"href"
)}},
relative
:
{
"+"
:
function
(
x
,
r
){
var
t
=
typeof
r
===
"string"
,
v
=
t
&&!
/\W/
.
test
(
r
),
y
=
t
&&!
v
;
if
(
v
){
r
=
r
.
toLowerCase
()}
for
(
var
s
=
0
,
e
=
x
.
length
,
u
;
s
<
e
;
s
++
){
if
((
u
=
x
[
s
])){
while
((
u
=
u
.
previousSibling
)
&&
u
.
nodeType
!==
1
){}
x
[
s
]
=
y
||
u
&&
u
.
nodeName
.
toLowerCase
()
===
r
?
u
||
false
:
u
===
r
}}
if
(
y
){
b
.
filter
(
r
,
x
,
true
)}},
">"
:
function
(
x
,
r
){
var
u
=
typeof
r
===
"string"
,
v
,
s
=
0
,
e
=
x
.
length
;
if
(
u
&&!
/\W/
.
test
(
r
)){
r
=
r
.
toLowerCase
();
for
(;
s
<
e
;
s
++
){
v
=
x
[
s
];
if
(
v
){
var
t
=
v
.
parentNode
;
x
[
s
]
=
t
.
nodeName
.
toLowerCase
()
===
r
?
t
:
false
}}}
else
{
for
(;
s
<
e
;
s
++
){
v
=
x
[
s
];
if
(
v
){
x
[
s
]
=
u
?
v
.
parentNode
:
v
.
parentNode
===
r
}}
if
(
u
){
b
.
filter
(
r
,
x
,
true
)}}},
""
:
function
(
t
,
r
,
v
){
var
s
=
j
++
,
e
=
q
,
u
;
if
(
typeof
r
===
"string"
&&!
/\W/
.
test
(
r
)){
r
=
r
.
toLowerCase
();
u
=
r
;
e
=
n
}
e
(
"parentNode"
,
r
,
s
,
t
,
u
,
v
)},
"~"
:
function
(
t
,
r
,
v
){
var
s
=
j
++
,
e
=
q
,
u
;
if
(
typeof
r
===
"string"
&&!
/\W/
.
test
(
r
)){
r
=
r
.
toLowerCase
();
u
=
r
;
e
=
n
}
e
(
"previousSibling"
,
r
,
s
,
t
,
u
,
v
)}},
find
:
{
ID
:
function
(
r
,
s
,
t
){
if
(
typeof
s
.
getElementById
!==
"undefined"
&&!
t
){
var
e
=
s
.
getElementById
(
r
[
1
]);
return
e
?
[
e
]
:
[]}},
NAME
:
function
(
s
,
v
){
if
(
typeof
v
.
getElementsByName
!==
"undefined"
){
var
r
=
[],
u
=
v
.
getElementsByName
(
s
[
1
]);
for
(
var
t
=
0
,
e
=
u
.
length
;
t
<
e
;
t
++
){
if
(
u
[
t
].
getAttribute
(
"name"
)
===
s
[
1
]){
r
.
push
(
u
[
t
])}}
return
r
.
length
===
0
?
null
:
r
}},
TAG
:
function
(
e
,
r
){
return
r
.
getElementsByTagName
(
e
[
1
])}},
preFilter
:
{
CLASS
:
function
(
t
,
r
,
s
,
e
,
x
,
y
){
t
=
" "
+
t
[
1
].
replace
(
/\\/g
,
""
)
+
" "
;
if
(
y
){
return
t
}
for
(
var
u
=
0
,
v
;(
v
=
r
[
u
])
!=
null
;
u
++
){
if
(
v
){
if
(
x
^
(
v
.
className
&&
(
" "
+
v
.
className
+
" "
).
replace
(
/[\t\n]/g
,
" "
).
indexOf
(
t
)
>=
0
)){
if
(
!
s
){
e
.
push
(
v
)}}
else
{
if
(
s
){
r
[
u
]
=
false
}}}}
return
false
},
ID
:
function
(
e
){
return
e
[
1
].
replace
(
/\\/g
,
""
)},
TAG
:
function
(
r
,
e
){
return
r
[
1
].
toLowerCase
()},
CHILD
:
function
(
e
){
if
(
e
[
1
]
===
"nth"
){
var
r
=
/(-?)(\d*)n((?:\+|-)?\d*)/
.
exec
(
e
[
2
]
===
"even"
&&
"2n"
||
e
[
2
]
===
"odd"
&&
"2n+1"
||!
/\D/
.
test
(
e
[
2
])
&&
"0n+"
+
e
[
2
]
||
e
[
2
]);
e
[
2
]
=
(
r
[
1
]
+
(
r
[
2
]
||
1
))
-
0
;
e
[
3
]
=
r
[
3
]
-
0
}
e
[
0
]
=
j
++
;
return
e
},
ATTR
:
function
(
u
,
r
,
s
,
e
,
v
,
x
){
var
t
=
u
[
1
].
replace
(
/\\/g
,
""
);
if
(
!
x
&&
f
.
attrMap
[
t
]){
u
[
1
]
=
f
.
attrMap
[
t
]}
if
(
u
[
2
]
===
"~="
){
u
[
4
]
=
" "
+
u
[
4
]
+
" "
}
return
u
},
PSEUDO
:
function
(
u
,
r
,
s
,
e
,
v
){
if
(
u
[
1
]
===
"not"
){
if
((
p
.
exec
(
u
[
3
])
||
""
).
length
>
1
||
/^\w/
.
test
(
u
[
3
])){
u
[
3
]
=
b
(
u
[
3
],
null
,
null
,
r
)}
else
{
var
t
=
b
.
filter
(
u
[
3
],
r
,
s
,
true
^
v
);
if
(
!
s
){
e
.
push
.
apply
(
e
,
t
)}
return
false
}}
else
{
if
(
f
.
match
.
POS
.
test
(
u
[
0
])
||
f
.
match
.
CHILD
.
test
(
u
[
0
])){
return
true
}}
return
u
},
POS
:
function
(
e
){
e
.
unshift
(
true
);
return
e
}},
filters
:
{
enabled
:
function
(
e
){
return
e
.
disabled
===
false
&&
e
.
type
!==
"hidden"
},
disabled
:
function
(
e
){
return
e
.
disabled
===
true
},
checked
:
function
(
e
){
return
e
.
checked
===
true
},
selected
:
function
(
e
){
e
.
parentNode
.
selectedIndex
;
return
e
.
selected
===
true
},
parent
:
function
(
e
){
return
!!
e
.
firstChild
},
empty
:
function
(
e
){
return
!
e
.
firstChild
},
has
:
function
(
s
,
r
,
e
){
return
!!
b
(
e
[
3
],
s
).
length
},
header
:
function
(
e
){
return
(
/h\d/i
).
test
(
e
.
nodeName
)},
text
:
function
(
e
){
return
"text"
===
e
.
type
},
radio
:
function
(
e
){
return
"radio"
===
e
.
type
},
checkbox
:
function
(
e
){
return
"checkbox"
===
e
.
type
},
file
:
function
(
e
){
return
"file"
===
e
.
type
},
password
:
function
(
e
){
return
"password"
===
e
.
type
},
submit
:
function
(
e
){
return
"submit"
===
e
.
type
},
image
:
function
(
e
){
return
"image"
===
e
.
type
},
reset
:
function
(
e
){
return
"reset"
===
e
.
type
},
button
:
function
(
e
){
return
"button"
===
e
.
type
||
e
.
nodeName
.
toLowerCase
()
===
"button"
},
input
:
function
(
e
){
return
(
/input|select|textarea|button/i
).
test
(
e
.
nodeName
)}},
setFilters
:
{
first
:
function
(
r
,
e
){
return
e
===
0
},
last
:
function
(
s
,
r
,
e
,
t
){
return
r
===
t
.
length
-
1
},
even
:
function
(
r
,
e
){
return
e
%
2
===
0
},
odd
:
function
(
r
,
e
){
return
e
%
2
===
1
},
lt
:
function
(
s
,
r
,
e
){
return
r
<
e
[
3
]
-
0
},
gt
:
function
(
s
,
r
,
e
){
return
r
>
e
[
3
]
-
0
},
nth
:
function
(
s
,
r
,
e
){
return
e
[
3
]
-
0
===
r
},
eq
:
function
(
s
,
r
,
e
){
return
e
[
3
]
-
0
===
r
}},
filter
:
{
PSEUDO
:
function
(
s
,
y
,
x
,
z
){
var
e
=
y
[
1
],
r
=
f
.
filters
[
e
];
if
(
r
){
return
r
(
s
,
x
,
y
,
z
)}
else
{
if
(
e
===
"contains"
){
return
(
s
.
textContent
||
s
.
innerText
||
b
.
getText
([
s
])
||
""
).
indexOf
(
y
[
3
])
>=
0
}
else
{
if
(
e
===
"not"
){
var
t
=
y
[
3
];
for
(
var
v
=
0
,
u
=
t
.
length
;
v
<
u
;
v
++
){
if
(
t
[
v
]
===
s
){
return
false
}}
return
true
}
else
{
b
.
error
(
"Syntax error, unrecognized expression: "
+
e
)}}}},
CHILD
:
function
(
e
,
t
){
var
x
=
t
[
1
],
r
=
e
;
switch
(
x
){
case
"only"
:
case
"first"
:
while
((
r
=
r
.
previousSibling
)){
if
(
r
.
nodeType
===
1
){
return
false
}}
if
(
x
===
"first"
){
return
true
}
r
=
e
;
case
"last"
:
while
((
r
=
r
.
nextSibling
)){
if
(
r
.
nodeType
===
1
){
return
false
}}
return
true
;
case
"nth"
:
var
s
=
t
[
2
],
A
=
t
[
3
];
if
(
s
===
1
&&
A
===
0
){
return
true
}
var
v
=
t
[
0
],
z
=
e
.
parentNode
;
if
(
z
&&
(
z
.
sizcache
!==
v
||!
e
.
nodeIndex
)){
var
u
=
0
;
for
(
r
=
z
.
firstChild
;
r
;
r
=
r
.
nextSibling
){
if
(
r
.
nodeType
===
1
){
r
.
nodeIndex
=++
u
}}
z
.
sizcache
=
v
}
var
y
=
e
.
nodeIndex
-
A
;
if
(
s
===
0
){
return
y
===
0
}
else
{
return
(
y
%
s
===
0
&&
y
/
s
>=
0
)}}},
ID
:
function
(
r
,
e
){
return
r
.
nodeType
===
1
&&
r
.
getAttribute
(
"id"
)
===
e
},
TAG
:
function
(
r
,
e
){
return
(
e
===
"*"
&&
r
.
nodeType
===
1
)
||
r
.
nodeName
.
toLowerCase
()
===
e
},
CLASS
:
function
(
r
,
e
){
return
(
" "
+
(
r
.
className
||
r
.
getAttribute
(
"class"
))
+
" "
).
indexOf
(
e
)
>-
1
},
ATTR
:
function
(
v
,
t
){
var
s
=
t
[
1
],
e
=
f
.
attrHandle
[
s
]
?
f
.
attrHandle
[
s
](
v
)
:
v
[
s
]
!=
null
?
v
[
s
]
:
v
.
getAttribute
(
s
),
x
=
e
+
""
,
u
=
t
[
2
],
r
=
t
[
4
];
return
e
==
null
?
u
===
"!="
:
u
===
"="
?
x
===
r
:
u
===
"*="
?
x
.
indexOf
(
r
)
>=
0
:
u
===
"~="
?
(
" "
+
x
+
" "
).
indexOf
(
r
)
>=
0
:!
r
?
x
&&
e
!==
false
:
u
===
"!="
?
x
!==
r
:
u
===
"^="
?
x
.
indexOf
(
r
)
===
0
:
u
===
"$="
?
x
.
substr
(
x
.
length
-
r
.
length
)
===
r
:
u
===
"|="
?
x
===
r
||
x
.
substr
(
0
,
r
.
length
+
1
)
===
r
+
"-"
:
false
},
POS
:
function
(
u
,
r
,
s
,
v
){
var
e
=
r
[
2
],
t
=
f
.
setFilters
[
e
];
if
(
t
){
return
t
(
u
,
s
,
r
,
v
)}}}};
var
k
=
f
.
match
.
POS
,
g
=
function
(
r
,
e
){
return
"\\"
+
(
e
-
0
+
1
)};
for
(
var
m
in
f
.
match
){
f
.
match
[
m
]
=
new
RegExp
(
f
.
match
[
m
].
source
+
(
/(?![^\[]*\])(?![^\(]*\))/
.
source
));
f
.
leftMatch
[
m
]
=
new
RegExp
(
/(^(?:.|\r|\n)*?)/
.
source
+
f
.
match
[
m
].
source
.
replace
(
/\\(\d+)/g
,
g
))}
var
a
=
function
(
r
,
e
){
r
=
Array
.
prototype
.
slice
.
call
(
r
,
0
);
if
(
e
){
e
.
push
.
apply
(
e
,
r
);
return
e
}
return
r
};
try
{
Array
.
prototype
.
slice
.
call
(
document
.
documentElement
.
childNodes
,
0
)[
0
].
nodeType
}
catch
(
l
){
a
=
function
(
u
,
t
){
var
r
=
t
||
[],
s
=
0
;
if
(
d
.
call
(
u
)
===
"[object Array]"
){
Array
.
prototype
.
push
.
apply
(
r
,
u
)}
else
{
if
(
typeof
u
.
length
===
"number"
){
for
(
var
e
=
u
.
length
;
s
<
e
;
s
++
){
r
.
push
(
u
[
s
])}}
else
{
for
(;
u
[
s
];
s
++
){
r
.
push
(
u
[
s
])}}}
return
r
}}
var
c
;
if
(
document
.
documentElement
.
compareDocumentPosition
){
c
=
function
(
r
,
e
){
if
(
!
r
.
compareDocumentPosition
||!
e
.
compareDocumentPosition
){
if
(
r
==
e
){
o
=
true
}
return
r
.
compareDocumentPosition
?-
1
:
1
}
var
s
=
r
.
compareDocumentPosition
(
e
)
&
4
?-
1
:
r
===
e
?
0
:
1
;
if
(
s
===
0
){
o
=
true
}
return
s
}}
else
{
if
(
"sourceIndex"
in
document
.
documentElement
){
c
=
function
(
r
,
e
){
if
(
!
r
.
sourceIndex
||!
e
.
sourceIndex
){
if
(
r
==
e
){
o
=
true
}
return
r
.
sourceIndex
?-
1
:
1
}
var
s
=
r
.
sourceIndex
-
e
.
sourceIndex
;
if
(
s
===
0
){
o
=
true
}
return
s
}}
else
{
if
(
document
.
createRange
){
c
=
function
(
t
,
r
){
if
(
!
t
.
ownerDocument
||!
r
.
ownerDocument
){
if
(
t
==
r
){
o
=
true
}
return
t
.
ownerDocument
?-
1
:
1
}
var
s
=
t
.
ownerDocument
.
createRange
(),
e
=
r
.
ownerDocument
.
createRange
();
s
.
setStart
(
t
,
0
);
s
.
setEnd
(
t
,
0
);
e
.
setStart
(
r
,
0
);
e
.
setEnd
(
r
,
0
);
var
u
=
s
.
compareBoundaryPoints
(
Range
.
START_TO_END
,
e
);
if
(
u
===
0
){
o
=
true
}
return
u
}}}}
b
.
getText
=
function
(
e
){
var
r
=
""
,
t
;
for
(
var
s
=
0
;
e
[
s
];
s
++
){
t
=
e
[
s
];
if
(
t
.
nodeType
===
3
||
t
.
nodeType
===
4
){
r
+=
t
.
nodeValue
}
else
{
if
(
t
.
nodeType
!==
8
){
r
+=
b
.
getText
(
t
.
childNodes
)}}}
return
r
};(
function
(){
var
r
=
document
.
createElement
(
"div"
),
s
=
"script"
+
(
new
Date
()).
getTime
();
r
.
innerHTML
=
"<a name='"
+
s
+
"'/>"
;
var
e
=
document
.
documentElement
;
e
.
insertBefore
(
r
,
e
.
firstChild
);
if
(
document
.
getElementById
(
s
)){
f
.
find
.
ID
=
function
(
u
,
v
,
x
){
if
(
typeof
v
.
getElementById
!==
"undefined"
&&!
x
){
var
t
=
v
.
getElementById
(
u
[
1
]);
return
t
?
t
.
id
===
u
[
1
]
||
typeof
t
.
getAttributeNode
!==
"undefined"
&&
t
.
getAttributeNode
(
"id"
).
nodeValue
===
u
[
1
]
?
[
t
]
:
undefined
:
[]}};
f
.
filter
.
ID
=
function
(
v
,
t
){
var
u
=
typeof
v
.
getAttributeNode
!==
"undefined"
&&
v
.
getAttributeNode
(
"id"
);
return
v
.
nodeType
===
1
&&
u
&&
u
.
nodeValue
===
t
}}
e
.
removeChild
(
r
);
e
=
r
=
null
})();(
function
(){
var
e
=
document
.
createElement
(
"div"
);
e
.
appendChild
(
document
.
createComment
(
""
));
if
(
e
.
getElementsByTagName
(
"*"
).
length
>
0
){
f
.
find
.
TAG
=
function
(
r
,
v
){
var
u
=
v
.
getElementsByTagName
(
r
[
1
]);
if
(
r
[
1
]
===
"*"
){
var
t
=
[];
for
(
var
s
=
0
;
u
[
s
];
s
++
){
if
(
u
[
s
].
nodeType
===
1
){
t
.
push
(
u
[
s
])}}
u
=
t
}
return
u
}}
e
.
innerHTML
=
"<a href='#'></a>"
;
if
(
e
.
firstChild
&&
typeof
e
.
firstChild
.
getAttribute
!==
"undefined"
&&
e
.
firstChild
.
getAttribute
(
"href"
)
!==
"#"
){
f
.
attrHandle
.
href
=
function
(
r
){
return
r
.
getAttribute
(
"href"
,
2
)}}
e
=
null
})();
if
(
document
.
querySelectorAll
){(
function
(){
var
e
=
b
,
s
=
document
.
createElement
(
"div"
);
s
.
innerHTML
=
"<p class='TEST'></p>"
;
if
(
s
.
querySelectorAll
&&
s
.
querySelectorAll
(
".TEST"
).
length
===
0
){
return
}
b
=
function
(
x
,
v
,
t
,
u
){
v
=
v
||
document
;
if
(
!
u
&&
v
.
nodeType
===
9
&&!
b
.
isXML
(
v
)){
try
{
return
a
(
v
.
querySelectorAll
(
x
),
t
)}
catch
(
y
){}}
return
e
(
x
,
v
,
t
,
u
)};
for
(
var
r
in
e
){
b
[
r
]
=
e
[
r
]}
s
=
null
})()}(
function
(){
var
e
=
document
.
createElement
(
"div"
);
e
.
innerHTML
=
"<div class='test e'></div><div class='test'></div>"
;
if
(
!
e
.
getElementsByClassName
||
e
.
getElementsByClassName
(
"e"
).
length
===
0
){
return
}
e
.
lastChild
.
className
=
"e"
;
if
(
e
.
getElementsByClassName
(
"e"
).
length
===
1
){
return
}
f
.
order
.
splice
(
1
,
0
,
"CLASS"
);
f
.
find
.
CLASS
=
function
(
r
,
s
,
t
){
if
(
typeof
s
.
getElementsByClassName
!==
"undefined"
&&!
t
){
return
s
.
getElementsByClassName
(
r
[
1
])}};
e
=
null
})();
function
n
(
r
,
x
,
v
,
A
,
y
,
z
){
for
(
var
t
=
0
,
s
=
A
.
length
;
t
<
s
;
t
++
){
var
e
=
A
[
t
];
if
(
e
){
e
=
e
[
r
];
var
u
=
false
;
while
(
e
){
if
(
e
.
sizcache
===
v
){
u
=
A
[
e
.
sizset
];
break
}
if
(
e
.
nodeType
===
1
&&!
z
){
e
.
sizcache
=
v
;
e
.
sizset
=
t
}
if
(
e
.
nodeName
.
toLowerCase
()
===
x
){
u
=
e
;
break
}
e
=
e
[
r
]}
A
[
t
]
=
u
}}}
function
q
(
r
,
x
,
v
,
A
,
y
,
z
){
for
(
var
t
=
0
,
s
=
A
.
length
;
t
<
s
;
t
++
){
var
e
=
A
[
t
];
if
(
e
){
e
=
e
[
r
];
var
u
=
false
;
while
(
e
){
if
(
e
.
sizcache
===
v
){
u
=
A
[
e
.
sizset
];
break
}
if
(
e
.
nodeType
===
1
){
if
(
!
z
){
e
.
sizcache
=
v
;
e
.
sizset
=
t
}
if
(
typeof
x
!==
"string"
){
if
(
e
===
x
){
u
=
true
;
break
}}
else
{
if
(
b
.
filter
(
x
,[
e
]).
length
>
0
){
u
=
e
;
break
}}}
e
=
e
[
r
]}
A
[
t
]
=
u
}}}
b
.
contains
=
document
.
compareDocumentPosition
?
function
(
r
,
e
){
return
!!
(
r
.
compareDocumentPosition
(
e
)
&
16
)}
:
function
(
r
,
e
){
return
r
!==
e
&&
(
r
.
contains
?
r
.
contains
(
e
)
:
true
)};
b
.
isXML
=
function
(
e
){
var
r
=
(
e
?
e
.
ownerDocument
||
e
:
0
).
documentElement
;
return
r
?
r
.
nodeName
!==
"HTML"
:
false
};
var
h
=
function
(
e
,
y
){
var
t
=
[],
u
=
""
,
v
,
s
=
y
.
nodeType
?
[
y
]
:
y
;
while
((
v
=
f
.
match
.
PSEUDO
.
exec
(
e
))){
u
+=
v
[
0
];
e
=
e
.
replace
(
f
.
match
.
PSEUDO
,
""
)}
e
=
f
.
relative
[
e
]
?
e
+
"*"
:
e
;
for
(
var
x
=
0
,
r
=
s
.
length
;
x
<
r
;
x
++
){
b
(
e
,
s
[
x
],
t
)}
return
b
.
filter
(
u
,
t
)};
window
.
tinymce
.
dom
.
Sizzle
=
b
})();(
function
(
d
){
var
f
=
d
.
each
,
c
=
d
.
DOM
,
b
=
d
.
isIE
,
e
=
d
.
isWebKit
,
a
;
d
.
create
(
"tinymce.dom.EventUtils"
,{
EventUtils
:
function
(){
this
.
inits
=
[];
this
.
events
=
[]},
add
:
function
(
m
,
p
,
l
,
j
){
var
g
,
h
=
this
,
i
=
h
.
events
,
k
;
if
(
p
instanceof
Array
){
k
=
[];
f
(
p
,
function
(
o
){
k
.
push
(
h
.
add
(
m
,
o
,
l
,
j
))});
return
k
}
if
(
m
&&
m
.
hasOwnProperty
&&
m
instanceof
Array
){
k
=
[];
f
(
m
,
function
(
n
){
n
=
c
.
get
(
n
);
k
.
push
(
h
.
add
(
n
,
p
,
l
,
j
))});
return
k
}
m
=
c
.
get
(
m
);
if
(
!
m
){
return
}
g
=
function
(
n
){
if
(
h
.
disabled
){
return
}
n
=
n
||
window
.
event
;
if
(
n
&&
b
){
if
(
!
n
.
target
){
n
.
target
=
n
.
srcElement
}
d
.
extend
(
n
,
h
.
_stoppers
)}
if
(
!
j
){
return
l
(
n
)}
return
l
.
call
(
j
,
n
)};
if
(
p
==
"unload"
){
d
.
unloads
.
unshift
({
func
:
g
});
return
g
}
if
(
p
==
"init"
){
if
(
h
.
domLoaded
){
g
()}
else
{
h
.
inits
.
push
(
g
)}
return
g
}
i
.
push
({
obj
:
m
,
name
:
p
,
func
:
l
,
cfunc
:
g
,
scope
:
j
});
h
.
_add
(
m
,
p
,
g
);
return
l
},
remove
:
function
(
l
,
m
,
k
){
var
h
=
this
,
g
=
h
.
events
,
i
=
false
,
j
;
if
(
l
&&
l
.
hasOwnProperty
&&
l
instanceof
Array
){
j
=
[];
f
(
l
,
function
(
n
){
n
=
c
.
get
(
n
);
j
.
push
(
h
.
remove
(
n
,
m
,
k
))});
return
j
}
l
=
c
.
get
(
l
);
f
(
g
,
function
(
o
,
n
){
if
(
o
.
obj
==
l
&&
o
.
name
==
m
&&
(
!
k
||
(
o
.
func
==
k
||
o
.
cfunc
==
k
))){
g
.
splice
(
n
,
1
);
h
.
_remove
(
l
,
m
,
o
.
cfunc
);
i
=
true
;
return
false
}});
return
i
},
clear
:
function
(
l
){
var
j
=
this
,
g
=
j
.
events
,
h
,
k
;
if
(
l
){
l
=
c
.
get
(
l
);
for
(
h
=
g
.
length
-
1
;
h
>=
0
;
h
--
){
k
=
g
[
h
];
if
(
k
.
obj
===
l
){
j
.
_remove
(
k
.
obj
,
k
.
name
,
k
.
cfunc
);
k
.
obj
=
k
.
cfunc
=
null
;
g
.
splice
(
h
,
1
)}}}},
cancel
:
function
(
g
){
if
(
!
g
){
return
false
}
this
.
stop
(
g
);
return
this
.
prevent
(
g
)},
stop
:
function
(
g
){
if
(
g
.
stopPropagation
){
g
.
stopPropagation
()}
else
{
g
.
cancelBubble
=
true
}
return
false
},
prevent
:
function
(
g
){
if
(
g
.
preventDefault
){
g
.
preventDefault
()}
else
{
g
.
returnValue
=
false
}
return
false
},
destroy
:
function
(){
var
g
=
this
;
f
(
g
.
events
,
function
(
j
,
h
){
g
.
_remove
(
j
.
obj
,
j
.
name
,
j
.
cfunc
);
j
.
obj
=
j
.
cfunc
=
null
});
g
.
events
=
[];
g
=
null
},
_add
:
function
(
h
,
i
,
g
){
if
(
h
.
attachEvent
){
h
.
attachEvent
(
"on"
+
i
,
g
)}
else
{
if
(
h
.
addEventListener
){
h
.
addEventListener
(
i
,
g
,
false
)}
else
{
h
[
"on"
+
i
]
=
g
}}},
_remove
:
function
(
i
,
j
,
h
){
if
(
i
){
try
{
if
(
i
.
detachEvent
){
i
.
detachEvent
(
"on"
+
j
,
h
)}
else
{
if
(
i
.
removeEventListener
){
i
.
removeEventListener
(
j
,
h
,
false
)}
else
{
i
[
"on"
+
j
]
=
null
}}}
catch
(
g
){}}},
_pageInit
:
function
(
h
){
var
g
=
this
;
if
(
g
.
domLoaded
){
return
}
g
.
domLoaded
=
true
;
f
(
g
.
inits
,
function
(
i
){
i
()});
g
.
inits
=
[]},
_wait
:
function
(
i
){
var
g
=
this
,
h
=
i
.
document
;
if
(
i
.
tinyMCE_GZ
&&
tinyMCE_GZ
.
loaded
){
g
.
domLoaded
=
1
;
return
}
if
(
h
.
attachEvent
){
h
.
attachEvent
(
"onreadystatechange"
,
function
(){
if
(
h
.
readyState
===
"complete"
){
h
.
detachEvent
(
"onreadystatechange"
,
arguments
.
callee
);
g
.
_pageInit
(
i
)}});
if
(
h
.
documentElement
.
doScroll
&&
i
==
i
.
top
){(
function
(){
if
(
g
.
domLoaded
){
return
}
try
{
h
.
documentElement
.
doScroll
(
"left"
)}
catch
(
j
){
setTimeout
(
arguments
.
callee
,
0
);
return
}
g
.
_pageInit
(
i
)})()}}
else
{
if
(
h
.
addEventListener
){
g
.
_add
(
i
,
"DOMContentLoaded"
,
function
(){
g
.
_pageInit
(
i
)})}}
g
.
_add
(
i
,
"load"
,
function
(){
g
.
_pageInit
(
i
)})},
_stoppers
:
{
preventDefault
:
function
(){
this
.
returnValue
=
false
},
stopPropagation
:
function
(){
this
.
cancelBubble
=
true
}}});
a
=
d
.
dom
.
Event
=
new
d
.
dom
.
EventUtils
();
a
.
_wait
(
window
);
d
.
addUnload
(
function
(){
a
.
destroy
()})})(
tinymce
);(
function
(
a
){
a
.
dom
.
Element
=
function
(
f
,
d
){
var
b
=
this
,
e
,
c
;
b
.
settings
=
d
=
d
||
{};
b
.
id
=
f
;
b
.
dom
=
e
=
d
.
dom
||
a
.
DOM
;
if
(
!
a
.
isIE
){
c
=
e
.
get
(
b
.
id
)}
a
.
each
((
"getPos,getRect,getParent,add,setStyle,getStyle,setStyles,setAttrib,setAttribs,getAttrib,addClass,removeClass,hasClass,getOuterHTML,setOuterHTML,remove,show,hide,isHidden,setHTML,get"
).
split
(
/,/
),
function
(
g
){
b
[
g
]
=
function
(){
var
h
=
[
f
],
j
;
for
(
j
=
0
;
j
<
arguments
.
length
;
j
++
){
h
.
push
(
arguments
[
j
])}
h
=
e
[
g
].
apply
(
e
,
h
);
b
.
update
(
g
);
return
h
}});
a
.
extend
(
b
,{
on
:
function
(
i
,
h
,
g
){
return
a
.
dom
.
Event
.
add
(
b
.
id
,
i
,
h
,
g
)},
getXY
:
function
(){
return
{
x
:
parseInt
(
b
.
getStyle
(
"left"
)),
y
:
parseInt
(
b
.
getStyle
(
"top"
))}},
getSize
:
function
(){
var
g
=
e
.
get
(
b
.
id
);
return
{
w
:
parseInt
(
b
.
getStyle
(
"width"
)
||
g
.
clientWidth
),
h
:
parseInt
(
b
.
getStyle
(
"height"
)
||
g
.
clientHeight
)}},
moveTo
:
function
(
g
,
h
){
b
.
setStyles
({
left
:
g
,
top
:
h
})},
moveBy
:
function
(
g
,
i
){
var
h
=
b
.
getXY
();
b
.
moveTo
(
h
.
x
+
g
,
h
.
y
+
i
)},
resizeTo
:
function
(
g
,
i
){
b
.
setStyles
({
width
:
g
,
height
:
i
})},
resizeBy
:
function
(
g
,
j
){
var
i
=
b
.
getSize
();
b
.
resizeTo
(
i
.
w
+
g
,
i
.
h
+
j
)},
update
:
function
(
h
){
var
g
;
if
(
a
.
isIE6
&&
d
.
blocker
){
h
=
h
||
""
;
if
(
h
.
indexOf
(
"get"
)
===
0
||
h
.
indexOf
(
"has"
)
===
0
||
h
.
indexOf
(
"is"
)
===
0
){
return
}
if
(
h
==
"remove"
){
e
.
remove
(
b
.
blocker
);
return
}
if
(
!
b
.
blocker
){
b
.
blocker
=
e
.
uniqueId
();
g
=
e
.
add
(
d
.
container
||
e
.
getRoot
(),
"iframe"
,{
id
:
b
.
blocker
,
style
:
"position:absolute;"
,
frameBorder
:
0
,
src
:
'javascript:""'
});
e
.
setStyle
(
g
,
"opacity"
,
0
)}
else
{
g
=
e
.
get
(
b
.
blocker
)}
e
.
setStyles
(
g
,{
left
:
b
.
getStyle
(
"left"
,
1
),
top
:
b
.
getStyle
(
"top"
,
1
),
width
:
b
.
getStyle
(
"width"
,
1
),
height
:
b
.
getStyle
(
"height"
,
1
),
display
:
b
.
getStyle
(
"display"
,
1
),
zIndex
:
parseInt
(
b
.
getStyle
(
"zIndex"
,
1
)
||
0
)
-
1
})}}})}})(
tinymce
);(
function
(
c
){
function
e
(
f
){
return
f
.
replace
(
/[\n\r]+/g
,
""
)}
var
b
=
c
.
is
,
a
=
c
.
isIE
,
d
=
c
.
each
;
c
.
create
(
"tinymce.dom.Selection"
,{
Selection
:
function
(
i
,
h
,
g
){
var
f
=
this
;
f
.
dom
=
i
;
f
.
win
=
h
;
f
.
serializer
=
g
;
d
([
"onBeforeSetContent"
,
"onBeforeGetContent"
,
"onSetContent"
,
"onGetContent"
],
function
(
j
){
f
[
j
]
=
new
c
.
util
.
Dispatcher
(
f
)});
if
(
!
f
.
win
.
getSelection
){
f
.
tridentSel
=
new
c
.
dom
.
TridentSelection
(
f
)}
if
(
c
.
isIE
&&
i
.
boxModel
){
this
.
_fixIESelection
()}
c
.
addUnload
(
f
.
destroy
,
f
)},
getContent
:
function
(
g
){
var
f
=
this
,
h
=
f
.
getRng
(),
l
=
f
.
dom
.
create
(
"body"
),
j
=
f
.
getSel
(),
i
,
k
,
m
;
g
=
g
||
{};
i
=
k
=
""
;
g
.
get
=
true
;
g
.
format
=
g
.
format
||
"html"
;
f
.
onBeforeGetContent
.
dispatch
(
f
,
g
);
if
(
g
.
format
==
"text"
){
return
f
.
isCollapsed
()
?
""
:
(
h
.
text
||
(
j
.
toString
?
j
.
toString
()
:
""
))}
if
(
h
.
cloneContents
){
m
=
h
.
cloneContents
();
if
(
m
){
l
.
appendChild
(
m
)}}
else
{
if
(
b
(
h
.
item
)
||
b
(
h
.
htmlText
)){
l
.
innerHTML
=
h
.
item
?
h
.
item
(
0
).
outerHTML
:
h
.
htmlText
}
else
{
l
.
innerHTML
=
h
.
toString
()}}
if
(
/^\s/
.
test
(
l
.
innerHTML
)){
i
=
" "
}
if
(
/\s+$/
.
test
(
l
.
innerHTML
)){
k
=
" "
}
g
.
getInner
=
true
;
g
.
content
=
f
.
isCollapsed
()
?
""
:
i
+
f
.
serializer
.
serialize
(
l
,
g
)
+
k
;
f
.
onGetContent
.
dispatch
(
f
,
g
);
return
g
.
content
},
setContent
:
function
(
k
,
j
){
var
h
=
this
,
f
=
h
.
getRng
(),
i
,
l
=
h
.
win
.
document
,
m
,
g
;
j
=
j
||
{
format
:
"html"
};
j
.
set
=
true
;
k
=
j
.
content
=
k
;
if
(
!
j
.
no_events
){
h
.
onBeforeSetContent
.
dispatch
(
h
,
j
)}
k
=
j
.
content
;
if
(
f
.
insertNode
){
k
+=
'<span id="__caret">_</span>'
;
if
(
f
.
startContainer
==
l
&&
f
.
endContainer
==
l
){
l
.
body
.
innerHTML
=
k
}
else
{
f
.
deleteContents
();
if
(
l
.
body
.
childNodes
.
length
==
0
){
l
.
body
.
innerHTML
=
k
}
else
{
if
(
f
.
createContextualFragment
){
f
.
insertNode
(
f
.
createContextualFragment
(
k
))}
else
{
m
=
l
.
createDocumentFragment
();
g
=
l
.
createElement
(
"div"
);
m
.
appendChild
(
g
);
g
.
outerHTML
=
k
;
f
.
insertNode
(
m
)}}}
i
=
h
.
dom
.
get
(
"__caret"
);
f
=
l
.
createRange
();
f
.
setStartBefore
(
i
);
f
.
setEndBefore
(
i
);
h
.
setRng
(
f
);
h
.
dom
.
remove
(
"__caret"
);
h
.
setRng
(
f
)}
else
{
if
(
f
.
item
){
l
.
execCommand
(
"Delete"
,
false
,
null
);
f
=
h
.
getRng
()}
f
.
pasteHTML
(
k
)}
if
(
!
j
.
no_events
){
h
.
onSetContent
.
dispatch
(
h
,
j
)}},
getStart
:
function
(){
var
g
=
this
.
getRng
(),
h
,
f
,
j
,
i
;
if
(
g
.
duplicate
||
g
.
item
){
if
(
g
.
item
){
return
g
.
item
(
0
)}
j
=
g
.
duplicate
();
j
.
collapse
(
1
);
h
=
j
.
parentElement
();
f
=
i
=
g
.
parentElement
();
while
(
i
=
i
.
parentNode
){
if
(
i
==
h
){
h
=
f
;
break
}}
return
h
}
else
{
h
=
g
.
startContainer
;
if
(
h
.
nodeType
==
1
&&
h
.
hasChildNodes
()){
h
=
h
.
childNodes
[
Math
.
min
(
h
.
childNodes
.
length
-
1
,
g
.
startOffset
)]}
if
(
h
&&
h
.
nodeType
==
3
){
return
h
.
parentNode
}
return
h
}},
getEnd
:
function
(){
var
g
=
this
,
h
=
g
.
getRng
(),
i
,
f
;
if
(
h
.
duplicate
||
h
.
item
){
if
(
h
.
item
){
return
h
.
item
(
0
)}
h
=
h
.
duplicate
();
h
.
collapse
(
0
);
i
=
h
.
parentElement
();
if
(
i
&&
i
.
nodeName
==
"BODY"
){
return
i
.
lastChild
||
i
}
return
i
}
else
{
i
=
h
.
endContainer
;
f
=
h
.
endOffset
;
if
(
i
.
nodeType
==
1
&&
i
.
hasChildNodes
()){
i
=
i
.
childNodes
[
f
>
0
?
f
-
1
:
f
]}
if
(
i
&&
i
.
nodeType
==
3
){
return
i
.
parentNode
}
return
i
}},
getBookmark
:
function
(
r
,
s
){
var
v
=
this
,
m
=
v
.
dom
,
g
,
j
,
i
,
n
,
h
,
o
,
p
,
l
=
"\uFEFF"
,
u
;
function
f
(
x
,
y
){
var
t
=
0
;
d
(
m
.
select
(
x
),
function
(
A
,
z
){
if
(
A
==
y
){
t
=
z
}});
return
t
}
if
(
r
==
2
){
function
k
(){
var
x
=
v
.
getRng
(
true
),
t
=
m
.
getRoot
(),
y
=
{};
function
z
(
C
,
H
){
var
B
=
C
[
H
?
"startContainer"
:
"endContainer"
],
G
=
C
[
H
?
"startOffset"
:
"endOffset"
],
A
=
[],
D
,
F
,
E
=
0
;
if
(
B
.
nodeType
==
3
){
if
(
s
){
for
(
D
=
B
.
previousSibling
;
D
&&
D
.
nodeType
==
3
;
D
=
D
.
previousSibling
){
G
+=
D
.
nodeValue
.
length
}}
A
.
push
(
G
)}
else
{
F
=
B
.
childNodes
;
if
(
G
>=
F
.
length
&&
F
.
length
){
E
=
1
;
G
=
Math
.
max
(
0
,
F
.
length
-
1
)}
A
.
push
(
v
.
dom
.
nodeIndex
(
F
[
G
],
s
)
+
E
)}
for
(;
B
&&
B
!=
t
;
B
=
B
.
parentNode
){
A
.
push
(
v
.
dom
.
nodeIndex
(
B
,
s
))}
return
A
}
y
.
start
=
z
(
x
,
true
);
if
(
!
v
.
isCollapsed
()){
y
.
end
=
z
(
x
)}
return
y
}
return
k
()}
if
(
r
){
return
{
rng
:
v
.
getRng
()}}
g
=
v
.
getRng
();
i
=
m
.
uniqueId
();
n
=
tinyMCE
.
activeEditor
.
selection
.
isCollapsed
();
u
=
"overflow:hidden;line-height:0px"
;
if
(
g
.
duplicate
||
g
.
item
){
if
(
!
g
.
item
){
j
=
g
.
duplicate
();
try
{
g
.
collapse
();
g
.
pasteHTML
(
'<span data-mce-type="bookmark" id="'
+
i
+
'_start" style="'
+
u
+
'">'
+
l
+
"</span>"
);
if
(
!
n
){
j
.
collapse
(
false
);
g
.
moveToElementText
(
j
.
parentElement
());
if
(
g
.
compareEndPoints
(
"StartToEnd"
,
j
)
==
0
){
j
.
move
(
"character"
,
-
1
)}
j
.
pasteHTML
(
'<span data-mce-type="bookmark" id="'
+
i
+
'_end" style="'
+
u
+
'">'
+
l
+
"</span>"
)}}
catch
(
q
){
return
null
}}
else
{
o
=
g
.
item
(
0
);
h
=
o
.
nodeName
;
return
{
name
:
h
,
index
:
f
(
h
,
o
)}}}
else
{
o
=
v
.
getNode
();
h
=
o
.
nodeName
;
if
(
h
==
"IMG"
){
return
{
name
:
h
,
index
:
f
(
h
,
o
)}}
j
=
g
.
cloneRange
();
if
(
!
n
){
j
.
collapse
(
false
);
j
.
insertNode
(
m
.
create
(
"span"
,{
"data-mce-type"
:
"bookmark"
,
id
:
i
+
"_end"
,
style
:
u
},
l
))}
g
.
collapse
(
true
);
g
.
insertNode
(
m
.
create
(
"span"
,{
"data-mce-type"
:
"bookmark"
,
id
:
i
+
"_start"
,
style
:
u
},
l
))}
v
.
moveToBookmark
({
id
:
i
,
keep
:
1
});
return
{
id
:
i
}},
moveToBookmark
:
function
(
n
){
var
r
=
this
,
l
=
r
.
dom
,
i
,
h
,
f
,
q
,
j
,
s
,
o
,
p
;
if
(
r
.
tridentSel
){
r
.
tridentSel
.
destroy
()}
if
(
n
){
if
(
n
.
start
){
f
=
l
.
createRng
();
q
=
l
.
getRoot
();
function
g
(
z
){
var
t
=
n
[
z
?
"start"
:
"end"
],
v
,
x
,
y
,
u
;
if
(
t
){
y
=
t
[
0
];
for
(
x
=
q
,
v
=
t
.
length
-
1
;
v
>=
1
;
v
--
){
u
=
x
.
childNodes
;
if
(
t
[
v
]
>
u
.
length
-
1
){
return
}
x
=
u
[
t
[
v
]]}
if
(
x
.
nodeType
===
3
){
y
=
Math
.
min
(
t
[
0
],
x
.
nodeValue
.
length
)}
if
(
x
.
nodeType
===
1
){
y
=
Math
.
min
(
t
[
0
],
x
.
childNodes
.
length
)}
if
(
z
){
f
.
setStart
(
x
,
y
)}
else
{
f
.
setEnd
(
x
,
y
)}}
return
true
}
if
(
g
(
true
)
&&
g
()){
r
.
setRng
(
f
)}}
else
{
if
(
n
.
id
){
function
k
(
A
){
var
u
=
l
.
get
(
n
.
id
+
"_"
+
A
),
z
,
t
,
x
,
y
,
v
=
n
.
keep
;
if
(
u
){
z
=
u
.
parentNode
;
if
(
A
==
"start"
){
if
(
!
v
){
t
=
l
.
nodeIndex
(
u
)}
else
{
z
=
u
.
firstChild
;
t
=
1
}
j
=
s
=
z
;
o
=
p
=
t
}
else
{
if
(
!
v
){
t
=
l
.
nodeIndex
(
u
)}
else
{
z
=
u
.
firstChild
;
t
=
1
}
s
=
z
;
p
=
t
}
if
(
!
v
){
y
=
u
.
previousSibling
;
x
=
u
.
nextSibling
;
d
(
c
.
grep
(
u
.
childNodes
),
function
(
B
){
if
(
B
.
nodeType
==
3
){
B
.
nodeValue
=
B
.
nodeValue
.
replace
(
/\uFEFF/g
,
""
)}});
while
(
u
=
l
.
get
(
n
.
id
+
"_"
+
A
)){
l
.
remove
(
u
,
1
)}
if
(
y
&&
x
&&
y
.
nodeType
==
x
.
nodeType
&&
y
.
nodeType
==
3
&&!
c
.
isOpera
){
t
=
y
.
nodeValue
.
length
;
y
.
appendData
(
x
.
nodeValue
);
l
.
remove
(
x
);
if
(
A
==
"start"
){
j
=
s
=
y
;
o
=
p
=
t
}
else
{
s
=
y
;
p
=
t
}}}}}
function
m
(
t
){
if
(
l
.
isBlock
(
t
)
&&!
t
.
innerHTML
){
t
.
innerHTML
=!
a
?
'<br data-mce-bogus="1" />'
:
" "
}
return
t
}
k
(
"start"
);
k
(
"end"
);
if
(
j
){
f
=
l
.
createRng
();
f
.
setStart
(
m
(
j
),
o
);
f
.
setEnd
(
m
(
s
),
p
);
r
.
setRng
(
f
)}}
else
{
if
(
n
.
name
){
r
.
select
(
l
.
select
(
n
.
name
)[
n
.
index
])}
else
{
if
(
n
.
rng
){
r
.
setRng
(
n
.
rng
)}}}}}},
select
:
function
(
k
,
j
){
var
i
=
this
,
l
=
i
.
dom
,
g
=
l
.
createRng
(),
f
;
if
(
k
){
f
=
l
.
nodeIndex
(
k
);
g
.
setStart
(
k
.
parentNode
,
f
);
g
.
setEnd
(
k
.
parentNode
,
f
+
1
);
if
(
j
){
function
h
(
m
,
o
){
var
n
=
new
c
.
dom
.
TreeWalker
(
m
,
m
);
do
{
if
(
m
.
nodeType
==
3
&&
c
.
trim
(
m
.
nodeValue
).
length
!=
0
){
if
(
o
){
g
.
setStart
(
m
,
0
)}
else
{
g
.
setEnd
(
m
,
m
.
nodeValue
.
length
)}
return
}
if
(
m
.
nodeName
==
"BR"
){
if
(
o
){
g
.
setStartBefore
(
m
)}
else
{
g
.
setEndBefore
(
m
)}
return
}}
while
(
m
=
(
o
?
n
.
next
()
:
n
.
prev
()))}
h
(
k
,
1
);
h
(
k
)}
i
.
setRng
(
g
)}
return
k
},
isCollapsed
:
function
(){
var
f
=
this
,
h
=
f
.
getRng
(),
g
=
f
.
getSel
();
if
(
!
h
||
h
.
item
){
return
false
}
if
(
h
.
compareEndPoints
){
return
h
.
compareEndPoints
(
"StartToEnd"
,
h
)
===
0
}
return
!
g
||
h
.
collapsed
},
collapse
:
function
(
f
){
var
h
=
this
,
g
=
h
.
getRng
(),
i
;
if
(
g
.
item
){
i
=
g
.
item
(
0
);
g
=
h
.
win
.
document
.
body
.
createTextRange
();
g
.
moveToElementText
(
i
)}
g
.
collapse
(
!!
f
);
h
.
setRng
(
g
)},
getSel
:
function
(){
var
g
=
this
,
f
=
this
.
win
;
return
f
.
getSelection
?
f
.
getSelection
()
:
f
.
document
.
selection
},
getRng
:
function
(
l
){
var
g
=
this
,
h
,
i
,
k
,
j
=
g
.
win
.
document
;
if
(
l
&&
g
.
tridentSel
){
return
g
.
tridentSel
.
getRangeAt
(
0
)}
try
{
if
(
h
=
g
.
getSel
()){
i
=
h
.
rangeCount
>
0
?
h
.
getRangeAt
(
0
)
:
(
h
.
createRange
?
h
.
createRange
()
:
j
.
createRange
())}}
catch
(
f
){}
if
(
c
.
isIE
&&
i
&&
i
.
setStart
&&
j
.
selection
.
createRange
().
item
){
k
=
j
.
selection
.
createRange
().
item
(
0
);
i
=
j
.
createRange
();
i
.
setStartBefore
(
k
);
i
.
setEndAfter
(
k
)}
if
(
!
i
){
i
=
j
.
createRange
?
j
.
createRange
()
:
j
.
body
.
createTextRange
()}
if
(
g
.
selectedRange
&&
g
.
explicitRange
){
if
(
i
.
compareBoundaryPoints
(
i
.
START_TO_START
,
g
.
selectedRange
)
===
0
&&
i
.
compareBoundaryPoints
(
i
.
END_TO_END
,
g
.
selectedRange
)
===
0
){
i
=
g
.
explicitRange
}
else
{
g
.
selectedRange
=
null
;
g
.
explicitRange
=
null
}}
return
i
},
setRng
:
function
(
i
){
var
h
,
g
=
this
;
if
(
!
g
.
tridentSel
){
h
=
g
.
getSel
();
if
(
h
){
g
.
explicitRange
=
i
;
try
{
h
.
removeAllRanges
()}
catch
(
f
){}
h
.
addRange
(
i
);
g
.
selectedRange
=
h
.
getRangeAt
(
0
)}}
else
{
if
(
i
.
cloneRange
){
g
.
tridentSel
.
addRange
(
i
);
return
}
try
{
i
.
select
()}
catch
(
f
){}}},
setNode
:
function
(
g
){
var
f
=
this
;
f
.
setContent
(
f
.
dom
.
getOuterHTML
(
g
));
return
g
},
getNode
:
function
(){
var
h
=
this
,
g
=
h
.
getRng
(),
i
=
h
.
getSel
(),
l
,
k
=
g
.
startContainer
,
f
=
g
.
endContainer
;
if
(
!
g
){
return
h
.
dom
.
getRoot
()}
if
(
g
.
setStart
){
l
=
g
.
commonAncestorContainer
;
if
(
!
g
.
collapsed
){
if
(
g
.
startContainer
==
g
.
endContainer
){
if
(
g
.
endOffset
-
g
.
startOffset
<
2
){
if
(
g
.
startContainer
.
hasChildNodes
()){
l
=
g
.
startContainer
.
childNodes
[
g
.
startOffset
]}}}
if
(
k
.
nodeType
===
3
&&
f
.
nodeType
===
3
){
function
j
(
p
,
m
){
var
o
=
p
;
while
(
p
&&
p
.
nodeType
===
3
&&
p
.
length
===
0
){
p
=
m
?
p
.
nextSibling
:
p
.
previousSibling
}
return
p
||
o
}
if
(
k
.
length
===
g
.
startOffset
){
k
=
j
(
k
.
nextSibling
,
true
)}
else
{
k
=
k
.
parentNode
}
if
(
g
.
endOffset
===
0
){
f
=
j
(
f
.
previousSibling
,
false
)}
else
{
f
=
f
.
parentNode
}
if
(
k
&&
k
===
f
){
return
k
}}}
if
(
l
&&
l
.
nodeType
==
3
){
return
l
.
parentNode
}
return
l
}
return
g
.
item
?
g
.
item
(
0
)
:
g
.
parentElement
()},
getSelectedBlocks
:
function
(
g
,
f
){
var
i
=
this
,
j
=
i
.
dom
,
m
,
h
,
l
,
k
=
[];
m
=
j
.
getParent
(
g
||
i
.
getStart
(),
j
.
isBlock
);
h
=
j
.
getParent
(
f
||
i
.
getEnd
(),
j
.
isBlock
);
if
(
m
){
k
.
push
(
m
)}
if
(
m
&&
h
&&
m
!=
h
){
l
=
m
;
while
((
l
=
l
.
nextSibling
)
&&
l
!=
h
){
if
(
j
.
isBlock
(
l
)){
k
.
push
(
l
)}}}
if
(
h
&&
m
!=
h
){
k
.
push
(
h
)}
return
k
},
destroy
:
function
(
g
){
var
f
=
this
;
f
.
win
=
null
;
if
(
f
.
tridentSel
){
f
.
tridentSel
.
destroy
()}
if
(
!
g
){
c
.
removeUnload
(
f
.
destroy
)}},
_fixIESelection
:
function
(){
var
g
=
this
.
dom
,
m
=
g
.
doc
,
h
=
m
.
body
,
j
,
n
,
f
;
m
.
documentElement
.
unselectable
=
true
;
function
i
(
o
,
r
){
var
p
=
h
.
createTextRange
();
try
{
p
.
moveToPoint
(
o
,
r
)}
catch
(
q
){
p
=
null
}
return
p
}
function
l
(
p
){
var
o
;
if
(
p
.
button
){
o
=
i
(
p
.
x
,
p
.
y
);
if
(
o
){
if
(
o
.
compareEndPoints
(
"StartToStart"
,
n
)
>
0
){
o
.
setEndPoint
(
"StartToStart"
,
n
)}
else
{
o
.
setEndPoint
(
"EndToEnd"
,
n
)}
o
.
select
()}}
else
{
k
()}}
function
k
(){
var
o
=
m
.
selection
.
createRange
();
if
(
n
&&!
o
.
item
&&
o
.
compareEndPoints
(
"StartToEnd"
,
o
)
===
0
){
n
.
select
()}
g
.
unbind
(
m
,
"mouseup"
,
k
);
g
.
unbind
(
m
,
"mousemove"
,
l
);
n
=
j
=
0
}
g
.
bind
(
m
,[
"mousedown"
,
"contextmenu"
],
function
(
o
){
if
(
o
.
target
.
nodeName
===
"HTML"
){
if
(
j
){
k
()}
f
=
m
.
documentElement
;
if
(
f
.
scrollHeight
>
f
.
clientHeight
){
return
}
j
=
1
;
n
=
i
(
o
.
x
,
o
.
y
);
if
(
n
){
g
.
bind
(
m
,
"mouseup"
,
k
);
g
.
bind
(
m
,
"mousemove"
,
l
);
g
.
win
.
focus
();
n
.
select
()}}})}})})(
tinymce
);(
function
(
a
){
a
.
dom
.
Serializer
=
function
(
e
,
i
,
f
){
var
h
,
b
,
d
=
a
.
isIE
,
g
=
a
.
each
,
c
;
if
(
!
e
.
apply_source_formatting
){
e
.
indent
=
false
}
e
.
remove_trailing_brs
=
true
;
i
=
i
||
a
.
DOM
;
f
=
f
||
new
a
.
html
.
Schema
(
e
);
e
.
entity_encoding
=
e
.
entity_encoding
||
"named"
;
h
=
new
a
.
util
.
Dispatcher
(
self
);
b
=
new
a
.
util
.
Dispatcher
(
self
);
c
=
new
a
.
html
.
DomParser
(
e
,
f
);
c
.
addAttributeFilter
(
"src,href,style"
,
function
(
k
,
j
){
var
o
=
k
.
length
,
l
,
q
,
n
=
"data-mce-"
+
j
,
p
=
e
.
url_converter
,
r
=
e
.
url_converter_scope
,
m
;
while
(
o
--
){
l
=
k
[
o
];
q
=
l
.
attributes
.
map
[
n
];
if
(
q
!==
m
){
l
.
attr
(
j
,
q
.
length
>
0
?
q
:
null
);
l
.
attr
(
n
,
null
)}
else
{
q
=
l
.
attributes
.
map
[
j
];
if
(
j
===
"style"
){
q
=
i
.
serializeStyle
(
i
.
parseStyle
(
q
),
l
.
name
)}
else
{
if
(
p
){
q
=
p
.
call
(
r
,
q
,
j
,
l
.
name
)}}
l
.
attr
(
j
,
q
.
length
>
0
?
q
:
null
)}}});
c
.
addAttributeFilter
(
"class"
,
function
(
j
,
k
){
var
l
=
j
.
length
,
m
,
n
;
while
(
l
--
){
m
=
j
[
l
];
n
=
m
.
attr
(
"class"
).
replace
(
/\s*mce(Item\w+|Selected)\s*/g
,
""
);
m
.
attr
(
"class"
,
n
.
length
>
0
?
n
:
null
)}});
c
.
addAttributeFilter
(
"data-mce-type"
,
function
(
j
,
l
,
k
){
var
m
=
j
.
length
,
n
;
while
(
m
--
){
n
=
j
[
m
];
if
(
n
.
attributes
.
map
[
"data-mce-type"
]
===
"bookmark"
&&!
k
.
cleanup
){
n
.
remove
()}}});
c
.
addNodeFilter
(
"script,style"
,
function
(
k
,
l
){
var
m
=
k
.
length
,
n
,
o
;
function
j
(
p
){
return
p
.
replace
(
/(<!--\[CDATA\[|\]\]-->)/g
,
"\n"
).
replace
(
/^[\r\n]*|[\r\n]*$/g
,
""
).
replace
(
/^\s*(\/\/\s*<!--|\/\/\s*<!\[CDATA\[|<!--|<!\[CDATA\[)[\r\n]*/g
,
""
).
replace
(
/\s*(\/\/\s*\]\]>|\/\/\s*-->|\]\]>|-->|\]\]-->)\s*$/g
,
""
)}
while
(
m
--
){
n
=
k
[
m
];
o
=
n
.
firstChild
?
n
.
firstChild
.
value
:
""
;
if
(
l
===
"script"
){
n
.
attr
(
"type"
,(
n
.
attr
(
"type"
)
||
"text/javascript"
).
replace
(
/^mce\-/
,
""
));
if
(
o
.
length
>
0
){
n
.
firstChild
.
value
=
"// <![CDATA[\n"
+
j
(
o
)
+
"\n// ]]>"
}}
else
{
if
(
o
.
length
>
0
){
n
.
firstChild
.
value
=
"<!--\n"
+
j
(
o
)
+
"\n-->"
}}}});
c
.
addNodeFilter
(
"#comment"
,
function
(
j
,
k
){
var
l
=
j
.
length
,
m
;
while
(
l
--
){
m
=
j
[
l
];
if
(
m
.
value
.
indexOf
(
"[CDATA["
)
===
0
){
m
.
name
=
"#cdata"
;
m
.
type
=
4
;
m
.
value
=
m
.
value
.
replace
(
/^\[CDATA\[|\]\]$/g
,
""
)}
else
{
if
(
m
.
value
.
indexOf
(
"mce:protected "
)
===
0
){
m
.
name
=
"#text"
;
m
.
type
=
3
;
m
.
raw
=
true
;
m
.
value
=
unescape
(
m
.
value
).
substr
(
14
)}}}});
c
.
addNodeFilter
(
"xml:namespace,input"
,
function
(
j
,
k
){
var
l
=
j
.
length
,
m
;
while
(
l
--
){
m
=
j
[
l
];
if
(
m
.
type
===
7
){
m
.
remove
()}
else
{
if
(
m
.
type
===
1
){
if
(
k
===
"input"
&&!
(
"type"
in
m
.
attributes
.
map
)){
m
.
attr
(
"type"
,
"text"
)}}}}});
if
(
e
.
fix_list_elements
){
c
.
addNodeFilter
(
"ul,ol"
,
function
(
k
,
l
){
var
m
=
k
.
length
,
n
,
j
;
while
(
m
--
){
n
=
k
[
m
];
j
=
n
.
parent
;
if
(
j
.
name
===
"ul"
||
j
.
name
===
"ol"
){
if
(
n
.
prev
&&
n
.
prev
.
name
===
"li"
){
n
.
prev
.
append
(
n
)}}}})}
c
.
addAttributeFilter
(
"data-mce-src,data-mce-href,data-mce-style"
,
function
(
j
,
k
){
var
l
=
j
.
length
;
while
(
l
--
){
j
[
l
].
attr
(
k
,
null
)}});
return
{
schema
:
f
,
addNodeFilter
:
c
.
addNodeFilter
,
addAttributeFilter
:
c
.
addAttributeFilter
,
onPreProcess
:
h
,
onPostProcess
:
b
,
serialize
:
function
(
o
,
m
){
var
l
,
p
,
k
,
j
,
n
;
if
(
d
&&
i
.
select
(
"script,style,select"
).
length
>
0
){
n
=
o
.
innerHTML
;
o
=
o
.
cloneNode
(
false
);
i
.
setHTML
(
o
,
n
)}
else
{
o
=
o
.
cloneNode
(
true
)}
l
=
o
.
ownerDocument
.
implementation
;
if
(
l
.
createHTMLDocument
){
p
=
l
.
createHTMLDocument
(
""
);
g
(
o
.
nodeName
==
"BODY"
?
o
.
childNodes
:
[
o
],
function
(
q
){
p
.
body
.
appendChild
(
p
.
importNode
(
q
,
true
))});
if
(
o
.
nodeName
!=
"BODY"
){
o
=
p
.
body
.
firstChild
}
else
{
o
=
p
.
body
}
k
=
i
.
doc
;
i
.
doc
=
p
}
m
=
m
||
{};
m
.
format
=
m
.
format
||
"html"
;
if
(
!
m
.
no_events
){
m
.
node
=
o
;
h
.
dispatch
(
self
,
m
)}
j
=
new
a
.
html
.
Serializer
(
e
,
f
);
m
.
content
=
j
.
serialize
(
c
.
parse
(
m
.
getInner
?
o
.
innerHTML
:
a
.
trim
(
i
.
getOuterHTML
(
o
),
m
),
m
));
if
(
!
m
.
cleanup
){
m
.
content
=
m
.
content
.
replace
(
/\uFEFF/g
,
""
)}
if
(
!
m
.
no_events
){
b
.
dispatch
(
self
,
m
)}
if
(
k
){
i
.
doc
=
k
}
m
.
node
=
null
;
return
m
.
content
},
addRules
:
function
(
j
){
f
.
addValidElements
(
j
)},
setRules
:
function
(
j
){
f
.
setValidElements
(
j
)}}}})(
tinymce
);(
function
(
a
){
a
.
dom
.
ScriptLoader
=
function
(
h
){
var
c
=
0
,
k
=
1
,
i
=
2
,
l
=
{},
j
=
[],
f
=
{},
d
=
[],
g
=
0
,
e
;
function
b
(
m
,
v
){
var
x
=
this
,
q
=
a
.
DOM
,
s
,
o
,
r
,
n
;
function
p
(){
q
.
remove
(
n
);
if
(
s
){
s
.
onreadystatechange
=
s
.
onload
=
s
=
null
}
v
()}
function
u
(){
if
(
typeof
(
console
)
!==
"undefined"
&&
console
.
log
){
console
.
log
(
"Failed to load: "
+
m
)}}
n
=
q
.
uniqueId
();
if
(
a
.
isIE6
){
o
=
new
a
.
util
.
URI
(
m
);
r
=
location
;
if
(
o
.
host
==
r
.
hostname
&&
o
.
port
==
r
.
port
&&
(
o
.
protocol
+
":"
)
==
r
.
protocol
&&
o
.
protocol
.
toLowerCase
()
!=
"file"
){
a
.
util
.
XHR
.
send
({
url
:
a
.
_addVer
(
o
.
getURI
()),
success
:
function
(
y
){
var
t
=
q
.
create
(
"script"
,{
type
:
"text/javascript"
});
t
.
text
=
y
;
document
.
getElementsByTagName
(
"head"
)[
0
].
appendChild
(
t
);
q
.
remove
(
t
);
p
()},
error
:
u
});
return
}}
s
=
q
.
create
(
"script"
,{
id
:
n
,
type
:
"text/javascript"
,
src
:
a
.
_addVer
(
m
)});
if
(
!
a
.
isIE
){
s
.
onload
=
p
}
s
.
onerror
=
u
;
if
(
!
a
.
isOpera
){
s
.
onreadystatechange
=
function
(){
var
t
=
s
.
readyState
;
if
(
t
==
"complete"
||
t
==
"loaded"
){
p
()}}}(
document
.
getElementsByTagName
(
"head"
)[
0
]
||
document
.
body
).
appendChild
(
s
)}
this
.
isDone
=
function
(
m
){
return
l
[
m
]
==
i
};
this
.
markDone
=
function
(
m
){
l
[
m
]
=
i
};
this
.
add
=
this
.
load
=
function
(
m
,
q
,
n
){
var
o
,
p
=
l
[
m
];
if
(
p
==
e
){
j
.
push
(
m
);
l
[
m
]
=
c
}
if
(
q
){
if
(
!
f
[
m
]){
f
[
m
]
=
[]}
f
[
m
].
push
({
func
:
q
,
scope
:
n
||
this
})}};
this
.
loadQueue
=
function
(
n
,
m
){
this
.
loadScripts
(
j
,
n
,
m
)};
this
.
loadScripts
=
function
(
m
,
q
,
p
){
var
o
;
function
n
(
r
){
a
.
each
(
f
[
r
],
function
(
s
){
s
.
func
.
call
(
s
.
scope
)});
f
[
r
]
=
e
}
d
.
push
({
func
:
q
,
scope
:
p
||
this
});
o
=
function
(){
var
r
=
a
.
grep
(
m
);
m
.
length
=
0
;
a
.
each
(
r
,
function
(
s
){
if
(
l
[
s
]
==
i
){
n
(
s
);
return
}
if
(
l
[
s
]
!=
k
){
l
[
s
]
=
k
;
g
++
;
b
(
s
,
function
(){
l
[
s
]
=
i
;
g
--
;
n
(
s
);
o
()})}});
if
(
!
g
){
a
.
each
(
d
,
function
(
s
){
s
.
func
.
call
(
s
.
scope
)});
d
.
length
=
0
}};
o
()}};
a
.
ScriptLoader
=
new
a
.
dom
.
ScriptLoader
()})(
tinymce
);
tinymce
.
dom
.
TreeWalker
=
function
(
a
,
c
){
var
b
=
a
;
function
d
(
i
,
f
,
e
,
j
){
var
h
,
g
;
if
(
i
){
if
(
!
j
&&
i
[
f
]){
return
i
[
f
]}
if
(
i
!=
c
){
h
=
i
[
e
];
if
(
h
){
return
h
}
for
(
g
=
i
.
parentNode
;
g
&&
g
!=
c
;
g
=
g
.
parentNode
){
h
=
g
[
e
];
if
(
h
){
return
h
}}}}}
this
.
current
=
function
(){
return
b
};
this
.
next
=
function
(
e
){
return
(
b
=
d
(
b
,
"firstChild"
,
"nextSibling"
,
e
))};
this
.
prev
=
function
(
e
){
return
(
b
=
d
(
b
,
"lastChild"
,
"previousSibling"
,
e
))}};(
function
(
a
){
a
.
dom
.
RangeUtils
=
function
(
c
){
var
b
=
"\uFEFF"
;
this
.
walk
=
function
(
d
,
r
){
var
h
=
d
.
startContainer
,
k
=
d
.
startOffset
,
s
=
d
.
endContainer
,
l
=
d
.
endOffset
,
i
,
f
,
n
,
g
,
q
,
p
,
e
;
e
=
c
.
select
(
"td.mceSelected,th.mceSelected"
);
if
(
e
.
length
>
0
){
a
.
each
(
e
,
function
(
t
){
r
([
t
])});
return
}
function
o
(
v
,
u
,
t
){
var
x
=
[];
for
(;
v
&&
v
!=
t
;
v
=
v
[
u
]){
x
.
push
(
v
)}
return
x
}
function
m
(
u
,
t
){
do
{
if
(
u
.
parentNode
==
t
){
return
u
}
u
=
u
.
parentNode
}
while
(
u
)}
function
j
(
v
,
u
,
x
){
var
t
=
x
?
"nextSibling"
:
"previousSibling"
;
for
(
g
=
v
,
q
=
g
.
parentNode
;
g
&&
g
!=
u
;
g
=
q
){
q
=
g
.
parentNode
;
p
=
o
(
g
==
v
?
g
:
g
[
t
],
t
);
if
(
p
.
length
){
if
(
!
x
){
p
.
reverse
()}
r
(
p
)}}}
if
(
h
.
nodeType
==
1
&&
h
.
hasChildNodes
()){
h
=
h
.
childNodes
[
k
]}
if
(
s
.
nodeType
==
1
&&
s
.
hasChildNodes
()){
s
=
s
.
childNodes
[
Math
.
min
(
l
-
1
,
s
.
childNodes
.
length
-
1
)]}
i
=
c
.
findCommonAncestor
(
h
,
s
);
if
(
h
==
s
){
return
r
([
h
])}
for
(
g
=
h
;
g
;
g
=
g
.
parentNode
){
if
(
g
==
s
){
return
j
(
h
,
i
,
true
)}
if
(
g
==
i
){
break
}}
for
(
g
=
s
;
g
;
g
=
g
.
parentNode
){
if
(
g
==
h
){
return
j
(
s
,
i
)}
if
(
g
==
i
){
break
}}
f
=
m
(
h
,
i
)
||
h
;
n
=
m
(
s
,
i
)
||
s
;
j
(
h
,
f
,
true
);
p
=
o
(
f
==
h
?
f
:
f
.
nextSibling
,
"nextSibling"
,
n
==
s
?
n
.
nextSibling
:
n
);
if
(
p
.
length
){
r
(
p
)}
j
(
s
,
n
)}};
a
.
dom
.
RangeUtils
.
compareRanges
=
function
(
c
,
b
){
if
(
c
&&
b
){
if
(
c
.
item
||
c
.
duplicate
){
if
(
c
.
item
&&
b
.
item
&&
c
.
item
(
0
)
===
b
.
item
(
0
)){
return
true
}
if
(
c
.
isEqual
&&
b
.
isEqual
&&
b
.
isEqual
(
c
)){
return
true
}}
else
{
return
c
.
startContainer
==
b
.
startContainer
&&
c
.
startOffset
==
b
.
startOffset
}}
return
false
}})(
tinymce
);(
function
(
b
){
var
a
=
b
.
dom
.
Event
,
c
=
b
.
each
;
b
.
create
(
"tinymce.ui.KeyboardNavigation"
,{
KeyboardNavigation
:
function
(
e
,
f
){
var
p
=
this
,
m
=
e
.
root
,
l
=
e
.
items
,
n
=
e
.
enableUpDown
,
i
=
e
.
enableLeftRight
||!
e
.
enableUpDown
,
k
=
e
.
excludeFromTabOrder
,
j
,
h
,
o
,
d
,
g
;
f
=
f
||
b
.
DOM
;
j
=
function
(
q
){
g
=
q
.
target
.
id
};
h
=
function
(
q
){
f
.
setAttrib
(
q
.
target
.
id
,
"tabindex"
,
"-1"
)};
d
=
function
(
q
){
var
r
=
f
.
get
(
g
);
f
.
setAttrib
(
r
,
"tabindex"
,
"0"
);
r
.
focus
()};
p
.
focus
=
function
(){
f
.
get
(
g
).
focus
()};
p
.
destroy
=
function
(){
c
(
l
,
function
(
q
){
f
.
unbind
(
f
.
get
(
q
.
id
),
"focus"
,
j
);
f
.
unbind
(
f
.
get
(
q
.
id
),
"blur"
,
h
)});
f
.
unbind
(
f
.
get
(
m
),
"focus"
,
d
);
f
.
unbind
(
f
.
get
(
m
),
"keydown"
,
o
);
l
=
f
=
m
=
p
.
focus
=
j
=
h
=
o
=
d
=
null
;
p
.
destroy
=
function
(){}};
p
.
moveFocus
=
function
(
u
,
r
){
var
q
=-
1
,
t
=
p
.
controls
,
s
;
if
(
!
g
){
return
}
c
(
l
,
function
(
x
,
v
){
if
(
x
.
id
===
g
){
q
=
v
;
return
false
}});
q
+=
u
;
if
(
q
<
0
){
q
=
l
.
length
-
1
}
else
{
if
(
q
>=
l
.
length
){
q
=
0
}}
s
=
l
[
q
];
f
.
setAttrib
(
g
,
"tabindex"
,
"-1"
);
f
.
setAttrib
(
s
.
id
,
"tabindex"
,
"0"
);
f
.
get
(
s
.
id
).
focus
();
if
(
e
.
actOnFocus
){
e
.
onAction
(
s
.
id
)}
if
(
r
){
a
.
cancel
(
r
)}};
o
=
function
(
y
){
var
u
=
37
,
t
=
39
,
x
=
38
,
z
=
40
,
q
=
27
,
s
=
14
,
r
=
13
,
v
=
32
;
switch
(
y
.
keyCode
){
case
u
:
if
(
i
){
p
.
moveFocus
(
-
1
)}
break
;
case
t
:
if
(
i
){
p
.
moveFocus
(
1
)}
break
;
case
x
:
if
(
n
){
p
.
moveFocus
(
-
1
)}
break
;
case
z
:
if
(
n
){
p
.
moveFocus
(
1
)}
break
;
case
q
:
if
(
e
.
onCancel
){
e
.
onCancel
();
a
.
cancel
(
y
)}
break
;
case
s
:
case
r
:
case
v
:
if
(
e
.
onAction
){
e
.
onAction
(
g
);
a
.
cancel
(
y
)}
break
}};
c
(
l
,
function
(
s
,
q
){
var
r
;
if
(
!
s
.
id
){
s
.
id
=
f
.
uniqueId
(
"_mce_item_"
)}
if
(
k
){
f
.
bind
(
s
.
id
,
"blur"
,
h
);
r
=
"-1"
}
else
{
r
=
(
q
===
0
?
"0"
:
"-1"
)}
f
.
setAttrib
(
s
.
id
,
"tabindex"
,
r
);
f
.
bind
(
f
.
get
(
s
.
id
),
"focus"
,
j
)});
if
(
l
[
0
]){
g
=
l
[
0
].
id
}
f
.
setAttrib
(
m
,
"tabindex"
,
"-1"
);
f
.
bind
(
f
.
get
(
m
),
"focus"
,
d
);
f
.
bind
(
f
.
get
(
m
),
"keydown"
,
o
)}})})(
tinymce
);(
function
(
c
){
var
b
=
c
.
DOM
,
a
=
c
.
is
;
c
.
create
(
"tinymce.ui.Control"
,{
Control
:
function
(
f
,
e
,
d
){
this
.
id
=
f
;
this
.
settings
=
e
=
e
||
{};
this
.
rendered
=
false
;
this
.
onRender
=
new
c
.
util
.
Dispatcher
(
this
);
this
.
classPrefix
=
""
;
this
.
scope
=
e
.
scope
||
this
;
this
.
disabled
=
0
;
this
.
active
=
0
;
this
.
editor
=
d
},
setAriaProperty
:
function
(
f
,
e
){
var
d
=
b
.
get
(
this
.
id
+
"_aria"
)
||
b
.
get
(
this
.
id
);
if
(
d
){
b
.
setAttrib
(
d
,
"aria-"
+
f
,
!!
e
)}},
focus
:
function
(){
b
.
get
(
this
.
id
).
focus
()},
setDisabled
:
function
(
d
){
if
(
d
!=
this
.
disabled
){
this
.
setAriaProperty
(
"disabled"
,
d
);
this
.
setState
(
"Disabled"
,
d
);
this
.
setState
(
"Enabled"
,
!
d
);
this
.
disabled
=
d
}},
isDisabled
:
function
(){
return
this
.
disabled
},
setActive
:
function
(
d
){
if
(
d
!=
this
.
active
){
this
.
setState
(
"Active"
,
d
);
this
.
active
=
d
;
this
.
setAriaProperty
(
"pressed"
,
d
)}},
isActive
:
function
(){
return
this
.
active
},
setState
:
function
(
f
,
d
){
var
e
=
b
.
get
(
this
.
id
);
f
=
this
.
classPrefix
+
f
;
if
(
d
){
b
.
addClass
(
e
,
f
)}
else
{
b
.
removeClass
(
e
,
f
)}},
isRendered
:
function
(){
return
this
.
rendered
},
renderHTML
:
function
(){},
renderTo
:
function
(
d
){
b
.
setHTML
(
d
,
this
.
renderHTML
())},
postRender
:
function
(){
var
e
=
this
,
d
;
if
(
a
(
e
.
disabled
)){
d
=
e
.
disabled
;
e
.
disabled
=-
1
;
e
.
setDisabled
(
d
)}
if
(
a
(
e
.
active
)){
d
=
e
.
active
;
e
.
active
=-
1
;
e
.
setActive
(
d
)}},
remove
:
function
(){
b
.
remove
(
this
.
id
);
this
.
destroy
()},
destroy
:
function
(){
c
.
dom
.
Event
.
clear
(
this
.
id
)}})})(
tinymce
);
tinymce
.
create
(
"tinymce.ui.Container:tinymce.ui.Control"
,{
Container
:
function
(
c
,
b
,
a
){
this
.
parent
(
c
,
b
,
a
);
this
.
controls
=
[];
this
.
lookup
=
{}},
add
:
function
(
a
){
this
.
lookup
[
a
.
id
]
=
a
;
this
.
controls
.
push
(
a
);
return
a
},
get
:
function
(
a
){
return
this
.
lookup
[
a
]}});
tinymce
.
create
(
"tinymce.ui.Separator:tinymce.ui.Control"
,{
Separator
:
function
(
b
,
a
){
this
.
parent
(
b
,
a
);
this
.
classPrefix
=
"mceSeparator"
;
this
.
setDisabled
(
true
)},
renderHTML
:
function
(){
return
tinymce
.
DOM
.
createHTML
(
"span"
,{
"class"
:
this
.
classPrefix
,
role
:
"separator"
,
"aria-orientation"
:
"vertical"
,
tabindex
:
"-1"
})}});(
function
(
d
){
var
c
=
d
.
is
,
b
=
d
.
DOM
,
e
=
d
.
each
,
a
=
d
.
walk
;
d
.
create
(
"tinymce.ui.MenuItem:tinymce.ui.Control"
,{
MenuItem
:
function
(
g
,
f
){
this
.
parent
(
g
,
f
);
this
.
classPrefix
=
"mceMenuItem"
},
setSelected
:
function
(
f
){
this
.
setState
(
"Selected"
,
f
);
this
.
setAriaProperty
(
"checked"
,
!!
f
);
this
.
selected
=
f
},
isSelected
:
function
(){
return
this
.
selected
},
postRender
:
function
(){
var
f
=
this
;
f
.
parent
();
if
(
c
(
f
.
selected
)){
f
.
setSelected
(
f
.
selected
)}}})})(
tinymce
);(
function
(
d
){
var
c
=
d
.
is
,
b
=
d
.
DOM
,
e
=
d
.
each
,
a
=
d
.
walk
;
d
.
create
(
"tinymce.ui.Menu:tinymce.ui.MenuItem"
,{
Menu
:
function
(
h
,
g
){
var
f
=
this
;
f
.
parent
(
h
,
g
);
f
.
items
=
{};
f
.
collapsed
=
false
;
f
.
menuCount
=
0
;
f
.
onAddItem
=
new
d
.
util
.
Dispatcher
(
this
)},
expand
:
function
(
g
){
var
f
=
this
;
if
(
g
){
a
(
f
,
function
(
h
){
if
(
h
.
expand
){
h
.
expand
()}},
"items"
,
f
)}
f
.
collapsed
=
false
},
collapse
:
function
(
g
){
var
f
=
this
;
if
(
g
){
a
(
f
,
function
(
h
){
if
(
h
.
collapse
){
h
.
collapse
()}},
"items"
,
f
)}
f
.
collapsed
=
true
},
isCollapsed
:
function
(){
return
this
.
collapsed
},
add
:
function
(
f
){
if
(
!
f
.
settings
){
f
=
new
d
.
ui
.
MenuItem
(
f
.
id
||
b
.
uniqueId
(),
f
)}
this
.
onAddItem
.
dispatch
(
this
,
f
);
return
this
.
items
[
f
.
id
]
=
f
},
addSeparator
:
function
(){
return
this
.
add
({
separator
:
true
})},
addMenu
:
function
(
f
){
if
(
!
f
.
collapse
){
f
=
this
.
createMenu
(
f
)}
this
.
menuCount
++
;
return
this
.
add
(
f
)},
hasMenus
:
function
(){
return
this
.
menuCount
!==
0
},
remove
:
function
(
f
){
delete
this
.
items
[
f
.
id
]},
removeAll
:
function
(){
var
f
=
this
;
a
(
f
,
function
(
g
){
if
(
g
.
removeAll
){
g
.
removeAll
()}
else
{
g
.
remove
()}
g
.
destroy
()},
"items"
,
f
);
f
.
items
=
{}},
createMenu
:
function
(
g
){
var
f
=
new
d
.
ui
.
Menu
(
g
.
id
||
b
.
uniqueId
(),
g
);
f
.
onAddItem
.
add
(
this
.
onAddItem
.
dispatch
,
this
.
onAddItem
);
return
f
}})})(
tinymce
);(
function
(
e
){
var
d
=
e
.
is
,
c
=
e
.
DOM
,
f
=
e
.
each
,
a
=
e
.
dom
.
Event
,
b
=
e
.
dom
.
Element
;
e
.
create
(
"tinymce.ui.DropMenu:tinymce.ui.Menu"
,{
DropMenu
:
function
(
h
,
g
){
g
=
g
||
{};
g
.
container
=
g
.
container
||
c
.
doc
.
body
;
g
.
offset_x
=
g
.
offset_x
||
0
;
g
.
offset_y
=
g
.
offset_y
||
0
;
g
.
vp_offset_x
=
g
.
vp_offset_x
||
0
;
g
.
vp_offset_y
=
g
.
vp_offset_y
||
0
;
if
(
d
(
g
.
icons
)
&&!
g
.
icons
){
g
[
"class"
]
+=
" mceNoIcons"
}
this
.
parent
(
h
,
g
);
this
.
onShowMenu
=
new
e
.
util
.
Dispatcher
(
this
);
this
.
onHideMenu
=
new
e
.
util
.
Dispatcher
(
this
);
this
.
classPrefix
=
"mceMenu"
},
createMenu
:
function
(
j
){
var
h
=
this
,
i
=
h
.
settings
,
g
;
j
.
container
=
j
.
container
||
i
.
container
;
j
.
parent
=
h
;
j
.
constrain
=
j
.
constrain
||
i
.
constrain
;
j
[
"class"
]
=
j
[
"class"
]
||
i
[
"class"
];
j
.
vp_offset_x
=
j
.
vp_offset_x
||
i
.
vp_offset_x
;
j
.
vp_offset_y
=
j
.
vp_offset_y
||
i
.
vp_offset_y
;
j
.
keyboard_focus
=
i
.
keyboard_focus
;
g
=
new
e
.
ui
.
DropMenu
(
j
.
id
||
c
.
uniqueId
(),
j
);
g
.
onAddItem
.
add
(
h
.
onAddItem
.
dispatch
,
h
.
onAddItem
);
return
g
},
focus
:
function
(){
var
g
=
this
;
if
(
g
.
keyboardNav
){
g
.
keyboardNav
.
focus
()}},
update
:
function
(){
var
i
=
this
,
j
=
i
.
settings
,
g
=
c
.
get
(
"menu_"
+
i
.
id
+
"_tbl"
),
l
=
c
.
get
(
"menu_"
+
i
.
id
+
"_co"
),
h
,
k
;
h
=
j
.
max_width
?
Math
.
min
(
g
.
clientWidth
,
j
.
max_width
)
:
g
.
clientWidth
;
k
=
j
.
max_height
?
Math
.
min
(
g
.
clientHeight
,
j
.
max_height
)
:
g
.
clientHeight
;
if
(
!
c
.
boxModel
){
i
.
element
.
setStyles
({
width
:
h
+
2
,
height
:
k
+
2
})}
else
{
i
.
element
.
setStyles
({
width
:
h
,
height
:
k
})}
if
(
j
.
max_width
){
c
.
setStyle
(
l
,
"width"
,
h
)}
if
(
j
.
max_height
){
c
.
setStyle
(
l
,
"height"
,
k
);
if
(
g
.
clientHeight
<
j
.
max_height
){
c
.
setStyle
(
l
,
"overflow"
,
"hidden"
)}}},
showMenu
:
function
(
p
,
n
,
r
){
var
z
=
this
,
A
=
z
.
settings
,
o
,
g
=
c
.
getViewPort
(),
u
,
l
,
v
,
q
,
i
=
2
,
k
,
j
,
m
=
z
.
classPrefix
;
z
.
collapse
(
1
);
if
(
z
.
isMenuVisible
){
return
}
if
(
!
z
.
rendered
){
o
=
c
.
add
(
z
.
settings
.
container
,
z
.
renderNode
());
f
(
z
.
items
,
function
(
h
){
h
.
postRender
()});
z
.
element
=
new
b
(
"menu_"
+
z
.
id
,{
blocker
:
1
,
container
:
A
.
container
})}
else
{
o
=
c
.
get
(
"menu_"
+
z
.
id
)}
if
(
!
e
.
isOpera
){
c
.
setStyles
(
o
,{
left
:-
65535
,
top
:-
65535
})}
c
.
show
(
o
);
z
.
update
();
p
+=
A
.
offset_x
||
0
;
n
+=
A
.
offset_y
||
0
;
g
.
w
-=
4
;
g
.
h
-=
4
;
if
(
A
.
constrain
){
u
=
o
.
clientWidth
-
i
;
l
=
o
.
clientHeight
-
i
;
v
=
g
.
x
+
g
.
w
;
q
=
g
.
y
+
g
.
h
;
if
((
p
+
A
.
vp_offset_x
+
u
)
>
v
){
p
=
r
?
r
-
u
:
Math
.
max
(
0
,(
v
-
A
.
vp_offset_x
)
-
u
)}
if
((
n
+
A
.
vp_offset_y
+
l
)
>
q
){
n
=
Math
.
max
(
0
,(
q
-
A
.
vp_offset_y
)
-
l
)}}
c
.
setStyles
(
o
,{
left
:
p
,
top
:
n
});
z
.
element
.
update
();
z
.
isMenuVisible
=
1
;
z
.
mouseClickFunc
=
a
.
add
(
o
,
"click"
,
function
(
s
){
var
h
;
s
=
s
.
target
;
if
(
s
&&
(
s
=
c
.
getParent
(
s
,
"tr"
))
&&!
c
.
hasClass
(
s
,
m
+
"ItemSub"
)){
h
=
z
.
items
[
s
.
id
];
if
(
h
.
isDisabled
()){
return
}
k
=
z
;
while
(
k
){
if
(
k
.
hideMenu
){
k
.
hideMenu
()}
k
=
k
.
settings
.
parent
}
if
(
h
.
settings
.
onclick
){
h
.
settings
.
onclick
(
s
)}
return
a
.
cancel
(
s
)}});
if
(
z
.
hasMenus
()){
z
.
mouseOverFunc
=
a
.
add
(
o
,
"mouseover"
,
function
(
x
){
var
h
,
t
,
s
;
x
=
x
.
target
;
if
(
x
&&
(
x
=
c
.
getParent
(
x
,
"tr"
))){
h
=
z
.
items
[
x
.
id
];
if
(
z
.
lastMenu
){
z
.
lastMenu
.
collapse
(
1
)}
if
(
h
.
isDisabled
()){
return
}
if
(
x
&&
c
.
hasClass
(
x
,
m
+
"ItemSub"
)){
t
=
c
.
getRect
(
x
);
h
.
showMenu
((
t
.
x
+
t
.
w
-
i
),
t
.
y
-
i
,
t
.
x
);
z
.
lastMenu
=
h
;
c
.
addClass
(
c
.
get
(
h
.
id
).
firstChild
,
m
+
"ItemActive"
)}}})}
a
.
add
(
o
,
"keydown"
,
z
.
_keyHandler
,
z
);
z
.
onShowMenu
.
dispatch
(
z
);
if
(
A
.
keyboard_focus
){
z
.
_setupKeyboardNav
()}},
hideMenu
:
function
(
j
){
var
g
=
this
,
i
=
c
.
get
(
"menu_"
+
g
.
id
),
h
;
if
(
!
g
.
isMenuVisible
){
return
}
if
(
g
.
keyboardNav
){
g
.
keyboardNav
.
destroy
()}
a
.
remove
(
i
,
"mouseover"
,
g
.
mouseOverFunc
);
a
.
remove
(
i
,
"click"
,
g
.
mouseClickFunc
);
a
.
remove
(
i
,
"keydown"
,
g
.
_keyHandler
);
c
.
hide
(
i
);
g
.
isMenuVisible
=
0
;
if
(
!
j
){
g
.
collapse
(
1
)}
if
(
g
.
element
){
g
.
element
.
hide
()}
if
(
h
=
c
.
get
(
g
.
id
)){
c
.
removeClass
(
h
.
firstChild
,
g
.
classPrefix
+
"ItemActive"
)}
g
.
onHideMenu
.
dispatch
(
g
)},
add
:
function
(
i
){
var
g
=
this
,
h
;
i
=
g
.
parent
(
i
);
if
(
g
.
isRendered
&&
(
h
=
c
.
get
(
"menu_"
+
g
.
id
))){
g
.
_add
(
c
.
select
(
"tbody"
,
h
)[
0
],
i
)}
return
i
},
collapse
:
function
(
g
){
this
.
parent
(
g
);
this
.
hideMenu
(
1
)},
remove
:
function
(
g
){
c
.
remove
(
g
.
id
);
this
.
destroy
();
return
this
.
parent
(
g
)},
destroy
:
function
(){
var
g
=
this
,
h
=
c
.
get
(
"menu_"
+
g
.
id
);
if
(
g
.
keyboardNav
){
g
.
keyboardNav
.
destroy
()}
a
.
remove
(
h
,
"mouseover"
,
g
.
mouseOverFunc
);
a
.
remove
(
c
.
select
(
"a"
,
h
),
"focus"
,
g
.
mouseOverFunc
);
a
.
remove
(
h
,
"click"
,
g
.
mouseClickFunc
);
a
.
remove
(
h
,
"keydown"
,
g
.
_keyHandler
);
if
(
g
.
element
){
g
.
element
.
remove
()}
c
.
remove
(
h
)},
renderNode
:
function
(){
var
i
=
this
,
j
=
i
.
settings
,
l
,
h
,
k
,
g
;
g
=
c
.
create
(
"div"
,{
role
:
"listbox"
,
id
:
"menu_"
+
i
.
id
,
"class"
:
j
[
"class"
],
style
:
"position:absolute;left:0;top:0;z-index:200000;outline:0"
});
if
(
i
.
settings
.
parent
){
c
.
setAttrib
(
g
,
"aria-parent"
,
"menu_"
+
i
.
settings
.
parent
.
id
)}
k
=
c
.
add
(
g
,
"div"
,{
role
:
"presentation"
,
id
:
"menu_"
+
i
.
id
+
"_co"
,
"class"
:
i
.
classPrefix
+
(
j
[
"class"
]
?
" "
+
j
[
"class"
]
:
""
)});
i
.
element
=
new
b
(
"menu_"
+
i
.
id
,{
blocker
:
1
,
container
:
j
.
container
});
if
(
j
.
menu_line
){
c
.
add
(
k
,
"span"
,{
"class"
:
i
.
classPrefix
+
"Line"
})}
l
=
c
.
add
(
k
,
"table"
,{
role
:
"presentation"
,
id
:
"menu_"
+
i
.
id
+
"_tbl"
,
border
:
0
,
cellPadding
:
0
,
cellSpacing
:
0
});
h
=
c
.
add
(
l
,
"tbody"
);
f
(
i
.
items
,
function
(
m
){
i
.
_add
(
h
,
m
)});
i
.
rendered
=
true
;
return
g
},
_setupKeyboardNav
:
function
(){
var
i
,
h
,
g
=
this
;
i
=
c
.
select
(
"#menu_"
+
g
.
id
)[
0
];
h
=
c
.
select
(
"a[role=option]"
,
"menu_"
+
g
.
id
);
h
.
splice
(
0
,
0
,
i
);
g
.
keyboardNav
=
new
e
.
ui
.
KeyboardNavigation
({
root
:
"menu_"
+
g
.
id
,
items
:
h
,
onCancel
:
function
(){
g
.
hideMenu
()},
enableUpDown
:
true
});
i
.
focus
()},
_keyHandler
:
function
(
g
){
var
h
=
this
,
i
;
switch
(
g
.
keyCode
){
case
37
:
if
(
h
.
settings
.
parent
){
h
.
hideMenu
();
h
.
settings
.
parent
.
focus
();
a
.
cancel
(
g
)}
break
;
case
39
:
if
(
h
.
mouseOverFunc
){
h
.
mouseOverFunc
(
g
)}
break
}},
_add
:
function
(
j
,
h
){
var
i
,
q
=
h
.
settings
,
p
,
l
,
k
,
m
=
this
.
classPrefix
,
g
;
if
(
q
.
separator
){
l
=
c
.
add
(
j
,
"tr"
,{
id
:
h
.
id
,
"class"
:
m
+
"ItemSeparator"
});
c
.
add
(
l
,
"td"
,{
"class"
:
m
+
"ItemSeparator"
});
if
(
i
=
l
.
previousSibling
){
c
.
addClass
(
i
,
"mceLast"
)}
return
}
i
=
l
=
c
.
add
(
j
,
"tr"
,{
id
:
h
.
id
,
"class"
:
m
+
"Item "
+
m
+
"ItemEnabled"
});
i
=
k
=
c
.
add
(
i
,
q
.
titleItem
?
"th"
:
"td"
);
i
=
p
=
c
.
add
(
i
,
"a"
,{
id
:
h
.
id
+
"_aria"
,
role
:
q
.
titleItem
?
"presentation"
:
"option"
,
href
:
"javascript:;"
,
onclick
:
"return false;"
,
onmousedown
:
"return false;"
});
if
(
q
.
parent
){
c
.
setAttrib
(
p
,
"aria-haspopup"
,
"true"
);
c
.
setAttrib
(
p
,
"aria-owns"
,
"menu_"
+
h
.
id
)}
c
.
addClass
(
k
,
q
[
"class"
]);
g
=
c
.
add
(
i
,
"span"
,{
"class"
:
"mceIcon"
+
(
q
.
icon
?
" mce_"
+
q
.
icon
:
""
)});
if
(
q
.
icon_src
){
c
.
add
(
g
,
"img"
,{
src
:
q
.
icon_src
})}
i
=
c
.
add
(
i
,
q
.
element
||
"span"
,{
"class"
:
"mceText"
,
title
:
h
.
settings
.
title
},
h
.
settings
.
title
);
if
(
h
.
settings
.
style
){
c
.
setAttrib
(
i
,
"style"
,
h
.
settings
.
style
)}
if
(
j
.
childNodes
.
length
==
1
){
c
.
addClass
(
l
,
"mceFirst"
)}
if
((
i
=
l
.
previousSibling
)
&&
c
.
hasClass
(
i
,
m
+
"ItemSeparator"
)){
c
.
addClass
(
l
,
"mceFirst"
)}
if
(
h
.
collapse
){
c
.
addClass
(
l
,
m
+
"ItemSub"
)}
if
(
i
=
l
.
previousSibling
){
c
.
removeClass
(
i
,
"mceLast"
)}
c
.
addClass
(
l
,
"mceLast"
)}})})(
tinymce
);(
function
(
b
){
var
a
=
b
.
DOM
;
b
.
create
(
"tinymce.ui.Button:tinymce.ui.Control"
,{
Button
:
function
(
e
,
d
,
c
){
this
.
parent
(
e
,
d
,
c
);
this
.
classPrefix
=
"mceButton"
},
renderHTML
:
function
(){
var
f
=
this
.
classPrefix
,
e
=
this
.
settings
,
d
,
c
;
c
=
a
.
encode
(
e
.
label
||
""
);
d
=
'<a role="button" id="'
+
this
.
id
+
'" href="javascript:;" class="'
+
f
+
" "
+
f
+
"Enabled "
+
e
[
"class"
]
+
(
c
?
" "
+
f
+
"Labeled"
:
""
)
+
'" onmousedown="return false;" onclick="return false;" aria-labelledby="'
+
this
.
id
+
'_voice" title="'
+
a
.
encode
(
e
.
title
)
+
'">'
;
if
(
e
.
image
){
d
+=
'<img class="mceIcon" src="'
+
e
.
image
+
'" alt="'
+
a
.
encode
(
e
.
title
)
+
'" />'
+
c
}
else
{
d
+=
'<span class="mceIcon '
+
e
[
"class"
]
+
'"></span>'
+
(
c
?
'<span class="'
+
f
+
'Label">'
+
c
+
"</span>"
:
""
)}
d
+=
'<span class="mceVoiceLabel mceIconOnly" style="display: none;" id="'
+
this
.
id
+
'_voice">'
+
e
.
title
+
"</span>"
;
d
+=
"</a>"
;
return
d
},
postRender
:
function
(){
var
c
=
this
,
d
=
c
.
settings
;
b
.
dom
.
Event
.
add
(
c
.
id
,
"click"
,
function
(
f
){
if
(
!
c
.
isDisabled
()){
return
d
.
onclick
.
call
(
d
.
scope
,
f
)}})}})})(
tinymce
);(
function
(
d
){
var
c
=
d
.
DOM
,
b
=
d
.
dom
.
Event
,
e
=
d
.
each
,
a
=
d
.
util
.
Dispatcher
;
d
.
create
(
"tinymce.ui.ListBox:tinymce.ui.Control"
,{
ListBox
:
function
(
i
,
h
,
f
){
var
g
=
this
;
g
.
parent
(
i
,
h
,
f
);
g
.
items
=
[];
g
.
onChange
=
new
a
(
g
);
g
.
onPostRender
=
new
a
(
g
);
g
.
onAdd
=
new
a
(
g
);
g
.
onRenderMenu
=
new
d
.
util
.
Dispatcher
(
this
);
g
.
classPrefix
=
"mceListBox"
},
select
:
function
(
h
){
var
g
=
this
,
j
,
i
;
if
(
h
==
undefined
){
return
g
.
selectByIndex
(
-
1
)}
if
(
h
&&
h
.
call
){
i
=
h
}
else
{
i
=
function
(
f
){
return
f
==
h
}}
if
(
h
!=
g
.
selectedValue
){
e
(
g
.
items
,
function
(
k
,
f
){
if
(
i
(
k
.
value
)){
j
=
1
;
g
.
selectByIndex
(
f
);
return
false
}});
if
(
!
j
){
g
.
selectByIndex
(
-
1
)}}},
selectByIndex
:
function
(
f
){
var
g
=
this
,
h
,
i
;
if
(
f
!=
g
.
selectedIndex
){
h
=
c
.
get
(
g
.
id
+
"_text"
);
i
=
g
.
items
[
f
];
if
(
i
){
g
.
selectedValue
=
i
.
value
;
g
.
selectedIndex
=
f
;
c
.
setHTML
(
h
,
c
.
encode
(
i
.
title
));
c
.
removeClass
(
h
,
"mceTitle"
);
c
.
setAttrib
(
g
.
id
,
"aria-valuenow"
,
i
.
title
)}
else
{
c
.
setHTML
(
h
,
c
.
encode
(
g
.
settings
.
title
));
c
.
addClass
(
h
,
"mceTitle"
);
g
.
selectedValue
=
g
.
selectedIndex
=
null
;
c
.
setAttrib
(
g
.
id
,
"aria-valuenow"
,
g
.
settings
.
title
)}
h
=
0
}},
add
:
function
(
i
,
f
,
h
){
var
g
=
this
;
h
=
h
||
{};
h
=
d
.
extend
(
h
,{
title
:
i
,
value
:
f
});
g
.
items
.
push
(
h
);
g
.
onAdd
.
dispatch
(
g
,
h
)},
getLength
:
function
(){
return
this
.
items
.
length
},
renderHTML
:
function
(){
var
i
=
""
,
f
=
this
,
g
=
f
.
settings
,
j
=
f
.
classPrefix
;
i
=
'<span role="button" aria-haspopup="true" aria-labelledby="'
+
f
.
id
+
'_text" aria-describedby="'
+
f
.
id
+
'_voiceDesc"><table role="presentation" tabindex="0" id="'
+
f
.
id
+
'" cellpadding="0" cellspacing="0" class="'
+
j
+
" "
+
j
+
"Enabled"
+
(
g
[
"class"
]
?
(
" "
+
g
[
"class"
])
:
""
)
+
'"><tbody><tr>'
;
i
+=
"<td>"
+
c
.
createHTML
(
"span"
,{
id
:
f
.
id
+
"_voiceDesc"
,
"class"
:
"voiceLabel"
,
style
:
"display:none;"
},
f
.
settings
.
title
);
i
+=
c
.
createHTML
(
"a"
,{
id
:
f
.
id
+
"_text"
,
tabindex
:-
1
,
href
:
"javascript:;"
,
"class"
:
"mceText"
,
onclick
:
"return false;"
,
onmousedown
:
"return false;"
},
c
.
encode
(
f
.
settings
.
title
))
+
"</td>"
;
i
+=
"<td>"
+
c
.
createHTML
(
"a"
,{
id
:
f
.
id
+
"_open"
,
tabindex
:-
1
,
href
:
"javascript:;"
,
"class"
:
"mceOpen"
,
onclick
:
"return false;"
,
onmousedown
:
"return false;"
},
'<span><span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span></span>'
)
+
"</td>"
;
i
+=
"</tr></tbody></table></span>"
;
return
i
},
showMenu
:
function
(){
var
g
=
this
,
j
,
i
,
h
=
c
.
get
(
this
.
id
),
f
;
if
(
g
.
isDisabled
()
||
g
.
items
.
length
==
0
){
return
}
if
(
g
.
menu
&&
g
.
menu
.
isMenuVisible
){
return
g
.
hideMenu
()}
if
(
!
g
.
isMenuRendered
){
g
.
renderMenu
();
g
.
isMenuRendered
=
true
}
j
=
c
.
getPos
(
this
.
settings
.
menu_container
);
i
=
c
.
getPos
(
h
);
f
=
g
.
menu
;
f
.
settings
.
offset_x
=
i
.
x
;
f
.
settings
.
offset_y
=
i
.
y
;
f
.
settings
.
keyboard_focus
=!
d
.
isOpera
;
if
(
g
.
oldID
){
f
.
items
[
g
.
oldID
].
setSelected
(
0
)}
e
(
g
.
items
,
function
(
k
){
if
(
k
.
value
===
g
.
selectedValue
){
f
.
items
[
k
.
id
].
setSelected
(
1
);
g
.
oldID
=
k
.
id
}});
f
.
showMenu
(
0
,
h
.
clientHeight
);
b
.
add
(
c
.
doc
,
"mousedown"
,
g
.
hideMenu
,
g
);
c
.
addClass
(
g
.
id
,
g
.
classPrefix
+
"Selected"
)},
hideMenu
:
function
(
g
){
var
f
=
this
;
if
(
f
.
menu
&&
f
.
menu
.
isMenuVisible
){
c
.
removeClass
(
f
.
id
,
f
.
classPrefix
+
"Selected"
);
if
(
g
&&
g
.
type
==
"mousedown"
&&
(
g
.
target
.
id
==
f
.
id
+
"_text"
||
g
.
target
.
id
==
f
.
id
+
"_open"
)){
return
}
if
(
!
g
||!
c
.
getParent
(
g
.
target
,
".mceMenu"
)){
c
.
removeClass
(
f
.
id
,
f
.
classPrefix
+
"Selected"
);
b
.
remove
(
c
.
doc
,
"mousedown"
,
f
.
hideMenu
,
f
);
f
.
menu
.
hideMenu
()}}},
renderMenu
:
function
(){
var
g
=
this
,
f
;
f
=
g
.
settings
.
control_manager
.
createDropMenu
(
g
.
id
+
"_menu"
,{
menu_line
:
1
,
"class"
:
g
.
classPrefix
+
"Menu mceNoIcons"
,
max_width
:
150
,
max_height
:
150
});
f
.
onHideMenu
.
add
(
function
(){
g
.
hideMenu
();
g
.
focus
()});
f
.
add
({
title
:
g
.
settings
.
title
,
"class"
:
"mceMenuItemTitle"
,
onclick
:
function
(){
if
(
g
.
settings
.
onselect
(
""
)
!==
false
){
g
.
select
(
""
)}}});
e
(
g
.
items
,
function
(
h
){
if
(
h
.
value
===
undefined
){
f
.
add
({
title
:
h
.
title
,
"class"
:
"mceMenuItemTitle"
,
onclick
:
function
(){
if
(
g
.
settings
.
onselect
(
""
)
!==
false
){
g
.
select
(
""
)}}})}
else
{
h
.
id
=
c
.
uniqueId
();
h
.
onclick
=
function
(){
if
(
g
.
settings
.
onselect
(
h
.
value
)
!==
false
){
g
.
select
(
h
.
value
)}};
f
.
add
(
h
)}});
g
.
onRenderMenu
.
dispatch
(
g
,
f
);
g
.
menu
=
f
},
postRender
:
function
(){
var
f
=
this
,
g
=
f
.
classPrefix
;
b
.
add
(
f
.
id
,
"click"
,
f
.
showMenu
,
f
);
b
.
add
(
f
.
id
,
"keydown"
,
function
(
h
){
if
(
h
.
keyCode
==
32
){
f
.
showMenu
(
h
);
b
.
cancel
(
h
)}});
b
.
add
(
f
.
id
,
"focus"
,
function
(){
if
(
!
f
.
_focused
){
f
.
keyDownHandler
=
b
.
add
(
f
.
id
,
"keydown"
,
function
(
h
){
if
(
h
.
keyCode
==
40
){
f
.
showMenu
();
b
.
cancel
(
h
)}});
f
.
keyPressHandler
=
b
.
add
(
f
.
id
,
"keypress"
,
function
(
i
){
var
h
;
if
(
i
.
keyCode
==
13
){
h
=
f
.
selectedValue
;
f
.
selectedValue
=
null
;
b
.
cancel
(
i
);
f
.
settings
.
onselect
(
h
)}})}
f
.
_focused
=
1
});
b
.
add
(
f
.
id
,
"blur"
,
function
(){
b
.
remove
(
f
.
id
,
"keydown"
,
f
.
keyDownHandler
);
b
.
remove
(
f
.
id
,
"keypress"
,
f
.
keyPressHandler
);
f
.
_focused
=
0
});
if
(
d
.
isIE6
||!
c
.
boxModel
){
b
.
add
(
f
.
id
,
"mouseover"
,
function
(){
if
(
!
c
.
hasClass
(
f
.
id
,
g
+
"Disabled"
)){
c
.
addClass
(
f
.
id
,
g
+
"Hover"
)}});
b
.
add
(
f
.
id
,
"mouseout"
,
function
(){
if
(
!
c
.
hasClass
(
f
.
id
,
g
+
"Disabled"
)){
c
.
removeClass
(
f
.
id
,
g
+
"Hover"
)}})}
f
.
onPostRender
.
dispatch
(
f
,
c
.
get
(
f
.
id
))},
destroy
:
function
(){
this
.
parent
();
b
.
clear
(
this
.
id
+
"_text"
);
b
.
clear
(
this
.
id
+
"_open"
)}})})(
tinymce
);(
function
(
d
){
var
c
=
d
.
DOM
,
b
=
d
.
dom
.
Event
,
e
=
d
.
each
,
a
=
d
.
util
.
Dispatcher
;
d
.
create
(
"tinymce.ui.NativeListBox:tinymce.ui.ListBox"
,{
NativeListBox
:
function
(
g
,
f
){
this
.
parent
(
g
,
f
);
this
.
classPrefix
=
"mceNativeListBox"
},
setDisabled
:
function
(
f
){
c
.
get
(
this
.
id
).
disabled
=
f
;
this
.
setAriaProperty
(
"disabled"
,
f
)},
isDisabled
:
function
(){
return
c
.
get
(
this
.
id
).
disabled
},
select
:
function
(
h
){
var
g
=
this
,
j
,
i
;
if
(
h
==
undefined
){
return
g
.
selectByIndex
(
-
1
)}
if
(
h
&&
h
.
call
){
i
=
h
}
else
{
i
=
function
(
f
){
return
f
==
h
}}
if
(
h
!=
g
.
selectedValue
){
e
(
g
.
items
,
function
(
k
,
f
){
if
(
i
(
k
.
value
)){
j
=
1
;
g
.
selectByIndex
(
f
);
return
false
}});
if
(
!
j
){
g
.
selectByIndex
(
-
1
)}}},
selectByIndex
:
function
(
f
){
c
.
get
(
this
.
id
).
selectedIndex
=
f
+
1
;
this
.
selectedValue
=
this
.
items
[
f
]
?
this
.
items
[
f
].
value
:
null
},
add
:
function
(
j
,
g
,
f
){
var
i
,
h
=
this
;
f
=
f
||
{};
f
.
value
=
g
;
if
(
h
.
isRendered
()){
c
.
add
(
c
.
get
(
this
.
id
),
"option"
,
f
,
j
)}
i
=
{
title
:
j
,
value
:
g
,
attribs
:
f
};
h
.
items
.
push
(
i
);
h
.
onAdd
.
dispatch
(
h
,
i
)},
getLength
:
function
(){
return
this
.
items
.
length
},
renderHTML
:
function
(){
var
g
,
f
=
this
;
g
=
c
.
createHTML
(
"option"
,{
value
:
""
},
"-- "
+
f
.
settings
.
title
+
" --"
);
e
(
f
.
items
,
function
(
h
){
g
+=
c
.
createHTML
(
"option"
,{
value
:
h
.
value
},
h
.
title
)});
g
=
c
.
createHTML
(
"select"
,{
id
:
f
.
id
,
"class"
:
"mceNativeListBox"
,
"aria-labelledby"
:
f
.
id
+
"_aria"
},
g
);
g
+=
c
.
createHTML
(
"span"
,{
id
:
f
.
id
+
"_aria"
,
style
:
"display: none"
},
f
.
settings
.
title
);
return
g
},
postRender
:
function
(){
var
g
=
this
,
h
,
i
=
true
;
g
.
rendered
=
true
;
function
f
(
k
){
var
j
=
g
.
items
[
k
.
target
.
selectedIndex
-
1
];
if
(
j
&&
(
j
=
j
.
value
)){
g
.
onChange
.
dispatch
(
g
,
j
);
if
(
g
.
settings
.
onselect
){
g
.
settings
.
onselect
(
j
)}}}
b
.
add
(
g
.
id
,
"change"
,
f
);
b
.
add
(
g
.
id
,
"keydown"
,
function
(
k
){
var
j
;
b
.
remove
(
g
.
id
,
"change"
,
h
);
i
=
false
;
j
=
b
.
add
(
g
.
id
,
"blur"
,
function
(){
if
(
i
){
return
}
i
=
true
;
b
.
add
(
g
.
id
,
"change"
,
f
);
b
.
remove
(
g
.
id
,
"blur"
,
j
)});
if
(
k
.
keyCode
==
13
||
k
.
keyCode
==
32
){
f
(
k
);
return
b
.
cancel
(
k
)}});
g
.
onPostRender
.
dispatch
(
g
,
c
.
get
(
g
.
id
))}})})(
tinymce
);(
function
(
c
){
var
b
=
c
.
DOM
,
a
=
c
.
dom
.
Event
,
d
=
c
.
each
;
c
.
create
(
"tinymce.ui.MenuButton:tinymce.ui.Button"
,{
MenuButton
:
function
(
g
,
f
,
e
){
this
.
parent
(
g
,
f
,
e
);
this
.
onRenderMenu
=
new
c
.
util
.
Dispatcher
(
this
);
f
.
menu_container
=
f
.
menu_container
||
b
.
doc
.
body
},
showMenu
:
function
(){
var
g
=
this
,
j
,
i
,
h
=
b
.
get
(
g
.
id
),
f
;
if
(
g
.
isDisabled
()){
return
}
if
(
!
g
.
isMenuRendered
){
g
.
renderMenu
();
g
.
isMenuRendered
=
true
}
if
(
g
.
isMenuVisible
){
return
g
.
hideMenu
()}
j
=
b
.
getPos
(
g
.
settings
.
menu_container
);
i
=
b
.
getPos
(
h
);
f
=
g
.
menu
;
f
.
settings
.
offset_x
=
i
.
x
;
f
.
settings
.
offset_y
=
i
.
y
;
f
.
settings
.
vp_offset_x
=
i
.
x
;
f
.
settings
.
vp_offset_y
=
i
.
y
;
f
.
settings
.
keyboard_focus
=
g
.
_focused
;
f
.
showMenu
(
0
,
h
.
clientHeight
);
a
.
add
(
b
.
doc
,
"mousedown"
,
g
.
hideMenu
,
g
);
g
.
setState
(
"Selected"
,
1
);
g
.
isMenuVisible
=
1
},
renderMenu
:
function
(){
var
f
=
this
,
e
;
e
=
f
.
settings
.
control_manager
.
createDropMenu
(
f
.
id
+
"_menu"
,{
menu_line
:
1
,
"class"
:
this
.
classPrefix
+
"Menu"
,
icons
:
f
.
settings
.
icons
});
e
.
onHideMenu
.
add
(
function
(){
f
.
hideMenu
();
f
.
focus
()});
f
.
onRenderMenu
.
dispatch
(
f
,
e
);
f
.
menu
=
e
},
hideMenu
:
function
(
g
){
var
f
=
this
;
if
(
g
&&
g
.
type
==
"mousedown"
&&
b
.
getParent
(
g
.
target
,
function
(
h
){
return
h
.
id
===
f
.
id
||
h
.
id
===
f
.
id
+
"_open"
})){
return
}
if
(
!
g
||!
b
.
getParent
(
g
.
target
,
".mceMenu"
)){
f
.
setState
(
"Selected"
,
0
);
a
.
remove
(
b
.
doc
,
"mousedown"
,
f
.
hideMenu
,
f
);
if
(
f
.
menu
){
f
.
menu
.
hideMenu
()}}
f
.
isMenuVisible
=
0
},
postRender
:
function
(){
var
e
=
this
,
f
=
e
.
settings
;
a
.
add
(
e
.
id
,
"click"
,
function
(){
if
(
!
e
.
isDisabled
()){
if
(
f
.
onclick
){
f
.
onclick
(
e
.
value
)}
e
.
showMenu
()}})}})})(
tinymce
);(
function
(
c
){
var
b
=
c
.
DOM
,
a
=
c
.
dom
.
Event
,
d
=
c
.
each
;
c
.
create
(
"tinymce.ui.SplitButton:tinymce.ui.MenuButton"
,{
SplitButton
:
function
(
g
,
f
,
e
){
this
.
parent
(
g
,
f
,
e
);
this
.
classPrefix
=
"mceSplitButton"
},
renderHTML
:
function
(){
var
i
,
f
=
this
,
g
=
f
.
settings
,
e
;
i
=
"<tbody><tr>"
;
if
(
g
.
image
){
e
=
b
.
createHTML
(
"img "
,{
src
:
g
.
image
,
role
:
"presentation"
,
"class"
:
"mceAction "
+
g
[
"class"
]})}
else
{
e
=
b
.
createHTML
(
"span"
,{
"class"
:
"mceAction "
+
g
[
"class"
]},
""
)}
e
+=
b
.
createHTML
(
"span"
,{
"class"
:
"mceVoiceLabel mceIconOnly"
,
id
:
f
.
id
+
"_voice"
,
style
:
"display:none;"
},
g
.
title
);
i
+=
"<td >"
+
b
.
createHTML
(
"a"
,{
role
:
"button"
,
id
:
f
.
id
+
"_action"
,
tabindex
:
"-1"
,
href
:
"javascript:;"
,
"class"
:
"mceAction "
+
g
[
"class"
],
onclick
:
"return false;"
,
onmousedown
:
"return false;"
,
title
:
g
.
title
},
e
)
+
"</td>"
;
e
=
b
.
createHTML
(
"span"
,{
"class"
:
"mceOpen "
+
g
[
"class"
]},
'<span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span>'
);
i
+=
"<td >"
+
b
.
createHTML
(
"a"
,{
role
:
"button"
,
id
:
f
.
id
+
"_open"
,
tabindex
:
"-1"
,
href
:
"javascript:;"
,
"class"
:
"mceOpen "
+
g
[
"class"
],
onclick
:
"return false;"
,
onmousedown
:
"return false;"
,
title
:
g
.
title
},
e
)
+
"</td>"
;
i
+=
"</tr></tbody>"
;
i
=
b
.
createHTML
(
"table"
,{
id
:
f
.
id
,
role
:
"presentation"
,
tabindex
:
"0"
,
"class"
:
"mceSplitButton mceSplitButtonEnabled "
+
g
[
"class"
],
cellpadding
:
"0"
,
cellspacing
:
"0"
,
title
:
g
.
title
},
i
);
return
b
.
createHTML
(
"span"
,{
role
:
"button"
,
"aria-labelledby"
:
f
.
id
+
"_voice"
,
"aria-haspopup"
:
"true"
},
i
)},
postRender
:
function
(){
var
e
=
this
,
g
=
e
.
settings
,
f
;
if
(
g
.
onclick
){
f
=
function
(
h
){
if
(
!
e
.
isDisabled
()){
g
.
onclick
(
e
.
value
);
a
.
cancel
(
h
)}};
a
.
add
(
e
.
id
+
"_action"
,
"click"
,
f
);
a
.
add
(
e
.
id
,[
"click"
,
"keydown"
],
function
(
h
){
var
k
=
32
,
m
=
14
,
i
=
13
,
j
=
38
,
l
=
40
;
if
((
h
.
keyCode
===
32
||
h
.
keyCode
===
13
||
h
.
keyCode
===
14
)
&&!
h
.
altKey
&&!
h
.
ctrlKey
&&!
h
.
metaKey
){
f
();
a
.
cancel
(
h
)}
else
{
if
(
h
.
type
===
"click"
||
h
.
keyCode
===
l
){
e
.
showMenu
();
a
.
cancel
(
h
)}}})}
a
.
add
(
e
.
id
+
"_open"
,
"click"
,
function
(
h
){
e
.
showMenu
();
a
.
cancel
(
h
)});
a
.
add
([
e
.
id
,
e
.
id
+
"_open"
],
"focus"
,
function
(){
e
.
_focused
=
1
});
a
.
add
([
e
.
id
,
e
.
id
+
"_open"
],
"blur"
,
function
(){
e
.
_focused
=
0
});
if
(
c
.
isIE6
||!
b
.
boxModel
){
a
.
add
(
e
.
id
,
"mouseover"
,
function
(){
if
(
!
b
.
hasClass
(
e
.
id
,
"mceSplitButtonDisabled"
)){
b
.
addClass
(
e
.
id
,
"mceSplitButtonHover"
)}});
a
.
add
(
e
.
id
,
"mouseout"
,
function
(){
if
(
!
b
.
hasClass
(
e
.
id
,
"mceSplitButtonDisabled"
)){
b
.
removeClass
(
e
.
id
,
"mceSplitButtonHover"
)}})}},
destroy
:
function
(){
this
.
parent
();
a
.
clear
(
this
.
id
+
"_action"
);
a
.
clear
(
this
.
id
+
"_open"
);
a
.
clear
(
this
.
id
)}})})(
tinymce
);(
function
(
d
){
var
c
=
d
.
DOM
,
a
=
d
.
dom
.
Event
,
b
=
d
.
is
,
e
=
d
.
each
;
d
.
create
(
"tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton"
,{
ColorSplitButton
:
function
(
i
,
h
,
f
){
var
g
=
this
;
g
.
parent
(
i
,
h
,
f
);
g
.
settings
=
h
=
d
.
extend
({
colors
:
"000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF"
,
grid_width
:
8
,
default_color
:
"#888888"
},
g
.
settings
);
g
.
onShowMenu
=
new
d
.
util
.
Dispatcher
(
g
);
g
.
onHideMenu
=
new
d
.
util
.
Dispatcher
(
g
);
g
.
value
=
h
.
default_color
},
showMenu
:
function
(){
var
f
=
this
,
g
,
j
,
i
,
h
;
if
(
f
.
isDisabled
()){
return
}
if
(
!
f
.
isMenuRendered
){
f
.
renderMenu
();
f
.
isMenuRendered
=
true
}
if
(
f
.
isMenuVisible
){
return
f
.
hideMenu
()}
i
=
c
.
get
(
f
.
id
);
c
.
show
(
f
.
id
+
"_menu"
);
c
.
addClass
(
i
,
"mceSplitButtonSelected"
);
h
=
c
.
getPos
(
i
);
c
.
setStyles
(
f
.
id
+
"_menu"
,{
left
:
h
.
x
,
top
:
h
.
y
+
i
.
clientHeight
,
zIndex
:
200000
});
i
=
0
;
a
.
add
(
c
.
doc
,
"mousedown"
,
f
.
hideMenu
,
f
);
f
.
onShowMenu
.
dispatch
(
f
);
if
(
f
.
_focused
){
f
.
_keyHandler
=
a
.
add
(
f
.
id
+
"_menu"
,
"keydown"
,
function
(
k
){
if
(
k
.
keyCode
==
27
){
f
.
hideMenu
()}});
c
.
select
(
"a"
,
f
.
id
+
"_menu"
)[
0
].
focus
()}
f
.
isMenuVisible
=
1
},
hideMenu
:
function
(
g
){
var
f
=
this
;
if
(
f
.
isMenuVisible
){
if
(
g
&&
g
.
type
==
"mousedown"
&&
c
.
getParent
(
g
.
target
,
function
(
h
){
return
h
.
id
===
f
.
id
+
"_open"
})){
return
}
if
(
!
g
||!
c
.
getParent
(
g
.
target
,
".mceSplitButtonMenu"
)){
c
.
removeClass
(
f
.
id
,
"mceSplitButtonSelected"
);
a
.
remove
(
c
.
doc
,
"mousedown"
,
f
.
hideMenu
,
f
);
a
.
remove
(
f
.
id
+
"_menu"
,
"keydown"
,
f
.
_keyHandler
);
c
.
hide
(
f
.
id
+
"_menu"
)}
f
.
isMenuVisible
=
0
}},
renderMenu
:
function
(){
var
p
=
this
,
h
,
k
=
0
,
q
=
p
.
settings
,
g
,
j
,
l
,
o
,
f
;
o
=
c
.
add
(
q
.
menu_container
,
"div"
,{
role
:
"listbox"
,
id
:
p
.
id
+
"_menu"
,
"class"
:
q
.
menu_class
+
" "
+
q
[
"class"
],
style
:
"position:absolute;left:0;top:-1000px;"
});
h
=
c
.
add
(
o
,
"div"
,{
"class"
:
q
[
"class"
]
+
" mceSplitButtonMenu"
});
c
.
add
(
h
,
"span"
,{
"class"
:
"mceMenuLine"
});
g
=
c
.
add
(
h
,
"table"
,{
role
:
"presentation"
,
"class"
:
"mceColorSplitMenu"
});
j
=
c
.
add
(
g
,
"tbody"
);
k
=
0
;
e
(
b
(
q
.
colors
,
"array"
)
?
q
.
colors
:
q
.
colors
.
split
(
","
),
function
(
i
){
i
=
i
.
replace
(
/^#/
,
""
);
if
(
!
k
--
){
l
=
c
.
add
(
j
,
"tr"
);
k
=
q
.
grid_width
-
1
}
g
=
c
.
add
(
l
,
"td"
);
g
=
c
.
add
(
g
,
"a"
,{
role
:
"option"
,
href
:
"javascript:;"
,
style
:
{
backgroundColor
:
"#"
+
i
},
title
:
p
.
editor
.
getLang
(
"colors."
+
i
,
i
),
"data-mce-color"
:
"#"
+
i
});
if
(
p
.
editor
.
forcedHighContrastMode
){
g
=
c
.
add
(
g
,
"canvas"
,{
width
:
16
,
height
:
16
,
"aria-hidden"
:
"true"
});
if
(
g
.
getContext
&&
(
f
=
g
.
getContext
(
"2d"
))){
f
.
fillStyle
=
"#"
+
i
;
f
.
fillRect
(
0
,
0
,
16
,
16
)}
else
{
c
.
remove
(
g
)}}});
if
(
q
.
more_colors_func
){
g
=
c
.
add
(
j
,
"tr"
);
g
=
c
.
add
(
g
,
"td"
,{
colspan
:
q
.
grid_width
,
"class"
:
"mceMoreColors"
});
g
=
c
.
add
(
g
,
"a"
,{
role
:
"option"
,
id
:
p
.
id
+
"_more"
,
href
:
"javascript:;"
,
onclick
:
"return false;"
,
"class"
:
"mceMoreColors"
},
q
.
more_colors_title
);
a
.
add
(
g
,
"click"
,
function
(
i
){
q
.
more_colors_func
.
call
(
q
.
more_colors_scope
||
this
);
return
a
.
cancel
(
i
)})}
c
.
addClass
(
h
,
"mceColorSplitMenu"
);
new
d
.
ui
.
KeyboardNavigation
({
root
:
p
.
id
+
"_menu"
,
items
:
c
.
select
(
"a"
,
p
.
id
+
"_menu"
),
onCancel
:
function
(){
p
.
hideMenu
();
p
.
focus
()}});
a
.
add
(
p
.
id
+
"_menu"
,
"mousedown"
,
function
(
i
){
return
a
.
cancel
(
i
)});
a
.
add
(
p
.
id
+
"_menu"
,
"click"
,
function
(
i
){
var
m
;
i
=
c
.
getParent
(
i
.
target
,
"a"
,
j
);
if
(
i
&&
i
.
nodeName
.
toLowerCase
()
==
"a"
&&
(
m
=
i
.
getAttribute
(
"data-mce-color"
))){
p
.
setColor
(
m
)}
return
a
.
cancel
(
i
)});
return
o
},
setColor
:
function
(
f
){
this
.
displayColor
(
f
);
this
.
hideMenu
();
this
.
settings
.
onselect
(
f
)},
displayColor
:
function
(
g
){
var
f
=
this
;
c
.
setStyle
(
f
.
id
+
"_preview"
,
"backgroundColor"
,
g
);
f
.
value
=
g
},
postRender
:
function
(){
var
f
=
this
,
g
=
f
.
id
;
f
.
parent
();
c
.
add
(
g
+
"_action"
,
"div"
,{
id
:
g
+
"_preview"
,
"class"
:
"mceColorPreview"
});
c
.
setStyle
(
f
.
id
+
"_preview"
,
"backgroundColor"
,
f
.
value
)},
destroy
:
function
(){
this
.
parent
();
a
.
clear
(
this
.
id
+
"_menu"
);
a
.
clear
(
this
.
id
+
"_more"
);
c
.
remove
(
this
.
id
+
"_menu"
)}})})(
tinymce
);(
function
(
b
){
var
d
=
b
.
DOM
,
c
=
b
.
each
,
a
=
b
.
dom
.
Event
;
b
.
create
(
"tinymce.ui.ToolbarGroup:tinymce.ui.Container"
,{
renderHTML
:
function
(){
var
f
=
this
,
i
=
[],
e
=
f
.
controls
,
j
=
b
.
each
,
g
=
f
.
settings
;
i
.
push
(
'<div id="'
+
f
.
id
+
'" role="group" aria-labelledby="'
+
f
.
id
+
'_voice">'
);
i
.
push
(
"<span role='application'>"
);
i
.
push
(
'<span id="'
+
f
.
id
+
'_voice" class="mceVoiceLabel" style="display:none;">'
+
d
.
encode
(
g
.
name
)
+
"</span>"
);
j
(
e
,
function
(
h
){
i
.
push
(
h
.
renderHTML
())});
i
.
push
(
"</span>"
);
i
.
push
(
"</div>"
);
return
i
.
join
(
""
)},
focus
:
function
(){
this
.
keyNav
.
focus
()},
postRender
:
function
(){
var
f
=
this
,
e
=
[];
c
(
f
.
controls
,
function
(
g
){
c
(
g
.
controls
,
function
(
h
){
if
(
h
.
id
){
e
.
push
(
h
)}})});
f
.
keyNav
=
new
b
.
ui
.
KeyboardNavigation
({
root
:
f
.
id
,
items
:
e
,
onCancel
:
function
(){
f
.
editor
.
focus
()},
excludeFromTabOrder
:!
f
.
settings
.
tab_focus_toolbar
})},
destroy
:
function
(){
var
e
=
this
;
e
.
parent
();
e
.
keyNav
.
destroy
();
a
.
clear
(
e
.
id
)}})})(
tinymce
);(
function
(
a
){
var
c
=
a
.
DOM
,
b
=
a
.
each
;
a
.
create
(
"tinymce.ui.Toolbar:tinymce.ui.Container"
,{
renderHTML
:
function
(){
var
m
=
this
,
f
=
""
,
j
,
k
,
n
=
m
.
settings
,
e
,
d
,
g
,
l
;
l
=
m
.
controls
;
for
(
e
=
0
;
e
<
l
.
length
;
e
++
){
k
=
l
[
e
];
d
=
l
[
e
-
1
];
g
=
l
[
e
+
1
];
if
(
e
===
0
){
j
=
"mceToolbarStart"
;
if
(
k
.
Button
){
j
+=
" mceToolbarStartButton"
}
else
{
if
(
k
.
SplitButton
){
j
+=
" mceToolbarStartSplitButton"
}
else
{
if
(
k
.
ListBox
){
j
+=
" mceToolbarStartListBox"
}}}
f
+=
c
.
createHTML
(
"td"
,{
"class"
:
j
},
c
.
createHTML
(
"span"
,
null
,
"<!-- IE -->"
))}
if
(
d
&&
k
.
ListBox
){
if
(
d
.
Button
||
d
.
SplitButton
){
f
+=
c
.
createHTML
(
"td"
,{
"class"
:
"mceToolbarEnd"
},
c
.
createHTML
(
"span"
,
null
,
"<!-- IE -->"
))}}
if
(
c
.
stdMode
){
f
+=
'<td style="position: relative">'
+
k
.
renderHTML
()
+
"</td>"
}
else
{
f
+=
"<td>"
+
k
.
renderHTML
()
+
"</td>"
}
if
(
g
&&
k
.
ListBox
){
if
(
g
.
Button
||
g
.
SplitButton
){
f
+=
c
.
createHTML
(
"td"
,{
"class"
:
"mceToolbarStart"
},
c
.
createHTML
(
"span"
,
null
,
"<!-- IE -->"
))}}}
j
=
"mceToolbarEnd"
;
if
(
k
.
Button
){
j
+=
" mceToolbarEndButton"
}
else
{
if
(
k
.
SplitButton
){
j
+=
" mceToolbarEndSplitButton"
}
else
{
if
(
k
.
ListBox
){
j
+=
" mceToolbarEndListBox"
}}}
f
+=
c
.
createHTML
(
"td"
,{
"class"
:
j
},
c
.
createHTML
(
"span"
,
null
,
"<!-- IE -->"
));
return
c
.
createHTML
(
"table"
,{
id
:
m
.
id
,
"class"
:
"mceToolbar"
+
(
n
[
"class"
]
?
" "
+
n
[
"class"
]
:
""
),
cellpadding
:
"0"
,
cellspacing
:
"0"
,
align
:
m
.
settings
.
align
||
""
,
role
:
"presentation"
,
tabindex
:
"-1"
},
"<tbody><tr>"
+
f
+
"</tr></tbody>"
)}})})(
tinymce
);(
function
(
b
){
var
a
=
b
.
util
.
Dispatcher
,
c
=
b
.
each
;
b
.
create
(
"tinymce.AddOnManager"
,{
AddOnManager
:
function
(){
var
d
=
this
;
d
.
items
=
[];
d
.
urls
=
{};
d
.
lookup
=
{};
d
.
onAdd
=
new
a
(
d
)},
get
:
function
(
d
){
return
this
.
lookup
[
d
]},
requireLangPack
:
function
(
e
){
var
d
=
b
.
settings
;
if
(
d
&&
d
.
language
&&
d
.
language_load
!==
false
){
b
.
ScriptLoader
.
add
(
this
.
urls
[
e
]
+
"/langs/"
+
d
.
language
+
".js"
)}},
add
:
function
(
e
,
d
){
this
.
items
.
push
(
d
);
this
.
lookup
[
e
]
=
d
;
this
.
onAdd
.
dispatch
(
this
,
e
,
d
);
return
d
},
load
:
function
(
h
,
e
,
d
,
g
){
var
f
=
this
;
if
(
f
.
urls
[
h
]){
return
}
if
(
e
.
indexOf
(
"/"
)
!=
0
&&
e
.
indexOf
(
"://"
)
==-
1
){
e
=
b
.
baseURL
+
"/"
+
e
}
f
.
urls
[
h
]
=
e
.
substring
(
0
,
e
.
lastIndexOf
(
"/"
));
if
(
!
f
.
lookup
[
h
]){
b
.
ScriptLoader
.
add
(
e
,
d
,
g
)}}});
b
.
PluginManager
=
new
b
.
AddOnManager
();
b
.
ThemeManager
=
new
b
.
AddOnManager
()}(
tinymce
));(
function
(
j
){
var
g
=
j
.
each
,
d
=
j
.
extend
,
k
=
j
.
DOM
,
i
=
j
.
dom
.
Event
,
f
=
j
.
ThemeManager
,
b
=
j
.
PluginManager
,
e
=
j
.
explode
,
h
=
j
.
util
.
Dispatcher
,
a
,
c
=
0
;
j
.
documentBaseURL
=
window
.
location
.
href
.
replace
(
/[\?#].*$/
,
""
).
replace
(
/[\/\\][^\/]+$/
,
""
);
if
(
!
/[\/\\]$/
.
test
(
j
.
documentBaseURL
)){
j
.
documentBaseURL
+=
"/"
}
j
.
baseURL
=
new
j
.
util
.
URI
(
j
.
documentBaseURL
).
toAbsolute
(
j
.
baseURL
);
j
.
baseURI
=
new
j
.
util
.
URI
(
j
.
baseURL
);
j
.
onBeforeUnload
=
new
h
(
j
);
i
.
add
(
window
,
"beforeunload"
,
function
(
l
){
j
.
onBeforeUnload
.
dispatch
(
j
,
l
)});
j
.
onAddEditor
=
new
h
(
j
);
j
.
onRemoveEditor
=
new
h
(
j
);
j
.
EditorManager
=
d
(
j
,{
editors
:
[],
i18n
:
{},
activeEditor
:
null
,
init
:
function
(
q
){
var
n
=
this
,
p
,
l
=
j
.
ScriptLoader
,
u
,
o
=
[],
m
;
function
r
(
x
,
y
,
t
){
var
v
=
x
[
y
];
if
(
!
v
){
return
}
if
(
j
.
is
(
v
,
"string"
)){
t
=
v
.
replace
(
/\.\w+$/
,
""
);
t
=
t
?
j
.
resolve
(
t
)
:
0
;
v
=
j
.
resolve
(
v
)}
return
v
.
apply
(
t
||
this
,
Array
.
prototype
.
slice
.
call
(
arguments
,
2
))}
q
=
d
({
theme
:
"simple"
,
language
:
"en"
},
q
);
n
.
settings
=
q
;
i
.
add
(
document
,
"init"
,
function
(){
var
s
,
v
;
r
(
q
,
"onpageload"
);
switch
(
q
.
mode
){
case
"exact"
:
s
=
q
.
elements
||
""
;
if
(
s
.
length
>
0
){
g
(
e
(
s
),
function
(
x
){
if
(
k
.
get
(
x
)){
m
=
new
j
.
Editor
(
x
,
q
);
o
.
push
(
m
);
m
.
render
(
1
)}
else
{
g
(
document
.
forms
,
function
(
y
){
g
(
y
.
elements
,
function
(
z
){
if
(
z
.
name
===
x
){
x
=
"mce_editor_"
+
c
++
;
k
.
setAttrib
(
z
,
"id"
,
x
);
m
=
new
j
.
Editor
(
x
,
q
);
o
.
push
(
m
);
m
.
render
(
1
)}})})}})}
break
;
case
"textareas"
:
case
"specific_textareas"
:
function
t
(
y
,
x
){
return
x
.
constructor
===
RegExp
?
x
.
test
(
y
.
className
)
:
k
.
hasClass
(
y
,
x
)}
g
(
k
.
select
(
"textarea"
),
function
(
x
){
if
(
q
.
editor_deselector
&&
t
(
x
,
q
.
editor_deselector
)){
return
}
if
(
!
q
.
editor_selector
||
t
(
x
,
q
.
editor_selector
)){
u
=
k
.
get
(
x
.
name
);
if
(
!
x
.
id
&&!
u
){
x
.
id
=
x
.
name
}
if
(
!
x
.
id
||
n
.
get
(
x
.
id
)){
x
.
id
=
k
.
uniqueId
()}
m
=
new
j
.
Editor
(
x
.
id
,
q
);
o
.
push
(
m
);
m
.
render
(
1
)}});
break
}
if
(
q
.
oninit
){
s
=
v
=
0
;
g
(
o
,
function
(
x
){
v
++
;
if
(
!
x
.
initialized
){
x
.
onInit
.
add
(
function
(){
s
++
;
if
(
s
==
v
){
r
(
q
,
"oninit"
)}})}
else
{
s
++
}
if
(
s
==
v
){
r
(
q
,
"oninit"
)}})}})},
get
:
function
(
l
){
if
(
l
===
a
){
return
this
.
editors
}
return
this
.
editors
[
l
]},
getInstanceById
:
function
(
l
){
return
this
.
get
(
l
)},
add
:
function
(
m
){
var
l
=
this
,
n
=
l
.
editors
;
n
[
m
.
id
]
=
m
;
n
.
push
(
m
);
l
.
_setActive
(
m
);
l
.
onAddEditor
.
dispatch
(
l
,
m
);
return
m
},
remove
:
function
(
n
){
var
m
=
this
,
l
,
o
=
m
.
editors
;
if
(
!
o
[
n
.
id
]){
return
null
}
delete
o
[
n
.
id
];
for
(
l
=
0
;
l
<
o
.
length
;
l
++
){
if
(
o
[
l
]
==
n
){
o
.
splice
(
l
,
1
);
break
}}
if
(
m
.
activeEditor
==
n
){
m
.
_setActive
(
o
[
0
])}
n
.
destroy
();
m
.
onRemoveEditor
.
dispatch
(
m
,
n
);
return
n
},
execCommand
:
function
(
r
,
p
,
o
){
var
q
=
this
,
n
=
q
.
get
(
o
),
l
;
switch
(
r
){
case
"mceFocus"
:
n
.
focus
();
return
true
;
case
"mceAddEditor"
:
case
"mceAddControl"
:
if
(
!
q
.
get
(
o
)){
new
j
.
Editor
(
o
,
q
.
settings
).
render
()}
return
true
;
case
"mceAddFrameControl"
:
l
=
o
.
window
;
l
.
tinyMCE
=
tinyMCE
;
l
.
tinymce
=
j
;
j
.
DOM
.
doc
=
l
.
document
;
j
.
DOM
.
win
=
l
;
n
=
new
j
.
Editor
(
o
.
element_id
,
o
);
n
.
render
();
if
(
j
.
isIE
){
function
m
(){
n
.
destroy
();
l
.
detachEvent
(
"onunload"
,
m
);
l
=
l
.
tinyMCE
=
l
.
tinymce
=
null
}
l
.
attachEvent
(
"onunload"
,
m
)}
o
.
page_window
=
null
;
return
true
;
case
"mceRemoveEditor"
:
case
"mceRemoveControl"
:
if
(
n
){
n
.
remove
()}
return
true
;
case
"mceToggleEditor"
:
if
(
!
n
){
q
.
execCommand
(
"mceAddControl"
,
0
,
o
);
return
true
}
if
(
n
.
isHidden
()){
n
.
show
()}
else
{
n
.
hide
()}
return
true
}
if
(
q
.
activeEditor
){
return
q
.
activeEditor
.
execCommand
(
r
,
p
,
o
)}
return
false
},
execInstanceCommand
:
function
(
p
,
o
,
n
,
m
){
var
l
=
this
.
get
(
p
);
if
(
l
){
return
l
.
execCommand
(
o
,
n
,
m
)}
return
false
},
triggerSave
:
function
(){
g
(
this
.
editors
,
function
(
l
){
l
.
save
()})},
addI18n
:
function
(
n
,
q
){
var
l
,
m
=
this
.
i18n
;
if
(
!
j
.
is
(
n
,
"string"
)){
g
(
n
,
function
(
r
,
p
){
g
(
r
,
function
(
t
,
s
){
g
(
t
,
function
(
v
,
u
){
if
(
s
===
"common"
){
m
[
p
+
"."
+
u
]
=
v
}
else
{
m
[
p
+
"."
+
s
+
"."
+
u
]
=
v
}})})})}
else
{
g
(
q
,
function
(
r
,
p
){
m
[
n
+
"."
+
p
]
=
r
})}},
_setActive
:
function
(
l
){
this
.
selectedInstance
=
this
.
activeEditor
=
l
}})})(
tinymce
);(
function
(
m
){
var
n
=
m
.
DOM
,
j
=
m
.
dom
.
Event
,
f
=
m
.
extend
,
k
=
m
.
util
.
Dispatcher
,
i
=
m
.
each
,
a
=
m
.
isGecko
,
b
=
m
.
isIE
,
e
=
m
.
isWebKit
,
d
=
m
.
is
,
h
=
m
.
ThemeManager
,
c
=
m
.
PluginManager
,
o
=
m
.
inArray
,
l
=
m
.
grep
,
g
=
m
.
explode
;
m
.
create
(
"tinymce.Editor"
,{
Editor
:
function
(
r
,
q
){
var
p
=
this
;
p
.
id
=
p
.
editorId
=
r
;
p
.
execCommands
=
{};
p
.
queryStateCommands
=
{};
p
.
queryValueCommands
=
{};
p
.
isNotDirty
=
false
;
p
.
plugins
=
{};
i
([
"onPreInit"
,
"onBeforeRenderUI"
,
"onPostRender"
,
"onInit"
,
"onRemove"
,
"onActivate"
,
"onDeactivate"
,
"onClick"
,
"onEvent"
,
"onMouseUp"
,
"onMouseDown"
,
"onDblClick"
,
"onKeyDown"
,
"onKeyUp"
,
"onKeyPress"
,
"onContextMenu"
,
"onSubmit"
,
"onReset"
,
"onPaste"
,
"onPreProcess"
,
"onPostProcess"
,
"onBeforeSetContent"
,
"onBeforeGetContent"
,
"onSetContent"
,
"onGetContent"
,
"onLoadContent"
,
"onSaveContent"
,
"onNodeChange"
,
"onChange"
,
"onBeforeExecCommand"
,
"onExecCommand"
,
"onUndo"
,
"onRedo"
,
"onVisualAid"
,
"onSetProgressState"
],
function
(
s
){
p
[
s
]
=
new
k
(
p
)});
p
.
settings
=
q
=
f
({
id
:
r
,
language
:
"en"
,
docs_language
:
"en"
,
theme
:
"simple"
,
skin
:
"default"
,
delta_width
:
0
,
delta_height
:
0
,
popup_css
:
""
,
plugins
:
""
,
document_base_url
:
m
.
documentBaseURL
,
add_form_submit_trigger
:
1
,
submit_patch
:
1
,
add_unload_trigger
:
1
,
convert_urls
:
1
,
relative_urls
:
1
,
remove_script_host
:
1
,
table_inline_editing
:
0
,
object_resizing
:
1
,
cleanup
:
1
,
accessibility_focus
:
1
,
custom_shortcuts
:
1
,
custom_undo_redo_keyboard_shortcuts
:
1
,
custom_undo_redo_restore_selection
:
1
,
custom_undo_redo
:
1
,
doctype
:
m
.
isIE6
?
'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">'
:
"<!DOCTYPE>"
,
visual_table_class
:
"mceItemTable"
,
visual
:
1
,
font_size_style_values
:
"xx-small,x-small,small,medium,large,x-large,xx-large"
,
apply_source_formatting
:
1
,
directionality
:
"ltr"
,
forced_root_block
:
"p"
,
hidden_input
:
1
,
padd_empty_editor
:
1
,
render_ui
:
1
,
init_theme
:
1
,
force_p_newlines
:
1
,
indentation
:
"30px"
,
keep_styles
:
1
,
fix_table_elements
:
1
,
inline_styles
:
1
,
convert_fonts_to_spans
:
true
,
indent
:
"simple"
,
indent_before
:
"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr"
,
indent_after
:
"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr"
,
validate
:
true
,
entity_encoding
:
"named"
,
url_converter
:
p
.
convertURL
,
url_converter_scope
:
p
,
ie7_compat
:
true
},
q
);
p
.
documentBaseURI
=
new
m
.
util
.
URI
(
q
.
document_base_url
||
m
.
documentBaseURL
,{
base_uri
:
tinyMCE
.
baseURI
});
p
.
baseURI
=
m
.
baseURI
;
p
.
contentCSS
=
[];
p
.
execCallback
(
"setup"
,
p
)},
render
:
function
(
r
){
var
u
=
this
,
v
=
u
.
settings
,
x
=
u
.
id
,
p
=
m
.
ScriptLoader
;
if
(
!
j
.
domLoaded
){
j
.
add
(
document
,
"init"
,
function
(){
u
.
render
()});
return
}
tinyMCE
.
settings
=
v
;
if
(
!
u
.
getElement
()){
return
}
if
(
m
.
isIDevice
){
return
}
if
(
!
/TEXTAREA|INPUT/i
.
test
(
u
.
getElement
().
nodeName
)
&&
v
.
hidden_input
&&
n
.
getParent
(
x
,
"form"
)){
n
.
insertAfter
(
n
.
create
(
"input"
,{
type
:
"hidden"
,
name
:
x
}),
x
)}
if
(
m
.
WindowManager
){
u
.
windowManager
=
new
m
.
WindowManager
(
u
)}
if
(
v
.
encoding
==
"xml"
){
u
.
onGetContent
.
add
(
function
(
s
,
t
){
if
(
t
.
save
){
t
.
content
=
n
.
encode
(
t
.
content
)}})}
if
(
v
.
add_form_submit_trigger
){
u
.
onSubmit
.
addToTop
(
function
(){
if
(
u
.
initialized
){
u
.
save
();
u
.
isNotDirty
=
1
}})}
if
(
v
.
add_unload_trigger
){
u
.
_beforeUnload
=
tinyMCE
.
onBeforeUnload
.
add
(
function
(){
if
(
u
.
initialized
&&!
u
.
destroyed
&&!
u
.
isHidden
()){
u
.
save
({
format
:
"raw"
,
no_events
:
true
})}})}
m
.
addUnload
(
u
.
destroy
,
u
);
if
(
v
.
submit_patch
){
u
.
onBeforeRenderUI
.
add
(
function
(){
var
s
=
u
.
getElement
().
form
;
if
(
!
s
){
return
}
if
(
s
.
_mceOldSubmit
){
return
}
if
(
!
s
.
submit
.
nodeType
&&!
s
.
submit
.
length
){
u
.
formElement
=
s
;
s
.
_mceOldSubmit
=
s
.
submit
;
s
.
submit
=
function
(){
m
.
triggerSave
();
u
.
isNotDirty
=
1
;
return
u
.
formElement
.
_mceOldSubmit
(
u
.
formElement
)}}
s
=
null
})}
function
q
(){
if
(
v
.
language
&&
v
.
language_load
!==
false
){
p
.
add
(
m
.
baseURL
+
"/langs/"
+
v
.
language
+
".js"
)}
if
(
v
.
theme
&&
v
.
theme
.
charAt
(
0
)
!=
"-"
&&!
h
.
urls
[
v
.
theme
]){
h
.
load
(
v
.
theme
,
"themes/"
+
v
.
theme
+
"/editor_template"
+
m
.
suffix
+
".js"
)}
i
(
g
(
v
.
plugins
),
function
(
s
){
if
(
s
&&
s
.
charAt
(
0
)
!=
"-"
&&!
c
.
urls
[
s
]){
if
(
s
==
"safari"
){
return
}
c
.
load
(
s
,
"plugins/"
+
s
+
"/editor_plugin"
+
m
.
suffix
+
".js"
)}});
p
.
loadQueue
(
function
(){
if
(
!
u
.
removed
){
u
.
init
()}})}
q
()},
init
:
function
(){
var
r
,
F
=
this
,
G
=
F
.
settings
,
C
,
z
,
B
=
F
.
getElement
(),
q
,
p
,
D
,
x
,
A
,
E
,
y
;
m
.
add
(
F
);
G
.
aria_label
=
G
.
aria_label
||
n
.
getAttrib
(
B
,
"aria-label"
,
F
.
getLang
(
"aria.rich_text_area"
));
if
(
G
.
theme
){
G
.
theme
=
G
.
theme
.
replace
(
/-/
,
""
);
q
=
h
.
get
(
G
.
theme
);
F
.
theme
=
new
q
();
if
(
F
.
theme
.
init
&&
G
.
init_theme
){
F
.
theme
.
init
(
F
,
h
.
urls
[
G
.
theme
]
||
m
.
documentBaseURL
.
replace
(
/\/$/
,
""
))}}
i
(
g
(
G
.
plugins
.
replace
(
/\-/g
,
""
)),
function
(
H
){
var
I
=
c
.
get
(
H
),
t
=
c
.
urls
[
H
]
||
m
.
documentBaseURL
.
replace
(
/\/$/
,
""
),
s
;
if
(
I
){
s
=
new
I
(
F
,
t
);
F
.
plugins
[
H
]
=
s
;
if
(
s
.
init
){
s
.
init
(
F
,
t
)}}});
if
(
G
.
popup_css
!==
false
){
if
(
G
.
popup_css
){
G
.
popup_css
=
F
.
documentBaseURI
.
toAbsolute
(
G
.
popup_css
)}
else
{
G
.
popup_css
=
F
.
baseURI
.
toAbsolute
(
"themes/"
+
G
.
theme
+
"/skins/"
+
G
.
skin
+
"/dialog.css"
)}}
if
(
G
.
popup_css_add
){
G
.
popup_css
+=
","
+
F
.
documentBaseURI
.
toAbsolute
(
G
.
popup_css_add
)}
F
.
controlManager
=
new
m
.
ControlManager
(
F
);
if
(
G
.
custom_undo_redo
){
F
.
onBeforeExecCommand
.
add
(
function
(
t
,
H
,
u
,
I
,
s
){
if
(
H
!=
"Undo"
&&
H
!=
"Redo"
&&
H
!=
"mceRepaint"
&&
(
!
s
||!
s
.
skip_undo
)){
F
.
undoManager
.
beforeChange
()}});
F
.
onExecCommand
.
add
(
function
(
t
,
H
,
u
,
I
,
s
){
if
(
H
!=
"Undo"
&&
H
!=
"Redo"
&&
H
!=
"mceRepaint"
&&
(
!
s
||!
s
.
skip_undo
)){
F
.
undoManager
.
add
()}})}
F
.
onExecCommand
.
add
(
function
(
s
,
t
){
if
(
!
/^(FontName|FontSize)$/
.
test
(
t
)){
F
.
nodeChanged
()}});
if
(
a
){
function
v
(
s
,
t
){
if
(
!
t
||!
t
.
initial
){
F
.
execCommand
(
"mceRepaint"
)}}
F
.
onUndo
.
add
(
v
);
F
.
onRedo
.
add
(
v
);
F
.
onSetContent
.
add
(
v
)}
F
.
onBeforeRenderUI
.
dispatch
(
F
,
F
.
controlManager
);
if
(
G
.
render_ui
){
C
=
G
.
width
||
B
.
style
.
width
||
B
.
offsetWidth
;
z
=
G
.
height
||
B
.
style
.
height
||
B
.
offsetHeight
;
F
.
orgDisplay
=
B
.
style
.
display
;
E
=
/^[0-9\.]+(|px)$/i
;
if
(
E
.
test
(
""
+
C
)){
C
=
Math
.
max
(
parseInt
(
C
)
+
(
q
.
deltaWidth
||
0
),
100
)}
if
(
E
.
test
(
""
+
z
)){
z
=
Math
.
max
(
parseInt
(
z
)
+
(
q
.
deltaHeight
||
0
),
100
)}
q
=
F
.
theme
.
renderUI
({
targetNode
:
B
,
width
:
C
,
height
:
z
,
deltaWidth
:
G
.
delta_width
,
deltaHeight
:
G
.
delta_height
});
F
.
editorContainer
=
q
.
editorContainer
}
if
(
document
.
domain
&&
location
.
hostname
!=
document
.
domain
){
m
.
relaxedDomain
=
document
.
domain
}
n
.
setStyles
(
q
.
sizeContainer
||
q
.
editorContainer
,{
width
:
C
,
height
:
z
});
if
(
G
.
content_css
){
m
.
each
(
g
(
G
.
content_css
),
function
(
s
){
F
.
contentCSS
.
push
(
F
.
documentBaseURI
.
toAbsolute
(
s
))})}
z
=
(
q
.
iframeHeight
||
z
)
+
(
typeof
(
z
)
==
"number"
?
(
q
.
deltaHeight
||
0
)
:
""
);
if
(
z
<
100
){
z
=
100
}
F
.
iframeHTML
=
G
.
doctype
+
'<html><head xmlns="http://www.w3.org/1999/xhtml">'
;
if
(
G
.
document_base_url
!=
m
.
documentBaseURL
){
F
.
iframeHTML
+=
'<base href="'
+
F
.
documentBaseURI
.
getURI
()
+
'" />'
}
if
(
G
.
ie7_compat
){
F
.
iframeHTML
+=
'<meta http-equiv="X-UA-Compatible" content="IE=7" />'
}
else
{
F
.
iframeHTML
+=
'<meta http-equiv="X-UA-Compatible" content="IE=edge" />'
}
F
.
iframeHTML
+=
'<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'
;
if
(
!
a
||!
/Firefox\/2/
.
test
(
navigator
.
userAgent
)){
for
(
y
=
0
;
y
<
F
.
contentCSS
.
length
;
y
++
){
F
.
iframeHTML
+=
'<link type="text/css" rel="stylesheet" href="'
+
F
.
contentCSS
[
y
]
+
'" />'
}
F
.
contentCSS
=
[]}
x
=
G
.
body_id
||
"tinymce"
;
if
(
x
.
indexOf
(
"="
)
!=-
1
){
x
=
F
.
getParam
(
"body_id"
,
""
,
"hash"
);
x
=
x
[
F
.
id
]
||
x
}
A
=
G
.
body_class
||
""
;
if
(
A
.
indexOf
(
"="
)
!=-
1
){
A
=
F
.
getParam
(
"body_class"
,
""
,
"hash"
);
A
=
A
[
F
.
id
]
||
""
}
F
.
iframeHTML
+=
'</head><body id="'
+
x
+
'" class="mceContentBody '
+
A
+
'"></body></html>'
;
if
(
m
.
relaxedDomain
&&
(
b
||
(
m
.
isOpera
&&
parseFloat
(
opera
.
version
())
<
11
))){
D
=
'javascript:(function(){document.open();document.domain="'
+
document
.
domain
+
'";var ed = window.parent.tinyMCE.get("'
+
F
.
id
+
'");document.write(ed.iframeHTML);document.close();ed.setupIframe();})()'
}
r
=
n
.
add
(
q
.
iframeContainer
,
"iframe"
,{
id
:
F
.
id
+
"_ifr"
,
src
:
D
||
'javascript:""'
,
frameBorder
:
"0"
,
title
:
G
.
aria_label
,
style
:
{
width
:
"100%"
,
height
:
z
}});
F
.
contentAreaContainer
=
q
.
iframeContainer
;
n
.
get
(
q
.
editorContainer
).
style
.
display
=
F
.
orgDisplay
;
n
.
get
(
F
.
id
).
style
.
display
=
"none"
;
n
.
setAttrib
(
F
.
id
,
"aria-hidden"
,
true
);
if
(
!
m
.
relaxedDomain
||!
D
){
F
.
setupIframe
()}
B
=
r
=
q
=
null
},
setupIframe
:
function
(){
var
r
=
this
,
x
=
r
.
settings
,
y
=
n
.
get
(
r
.
id
),
z
=
r
.
getDoc
(),
v
,
p
;
if
(
!
b
||!
m
.
relaxedDomain
){
z
.
open
();
z
.
write
(
r
.
iframeHTML
);
z
.
close
();
if
(
m
.
relaxedDomain
){
z
.
domain
=
m
.
relaxedDomain
}}
if
(
!
b
){
try
{
if
(
!
x
.
readonly
){
z
.
designMode
=
"On"
}}
catch
(
q
){}}
if
(
b
){
p
=
r
.
getBody
();
n
.
hide
(
p
);
if
(
!
x
.
readonly
){
p
.
contentEditable
=
true
}
n
.
show
(
p
)}
r
.
schema
=
new
m
.
html
.
Schema
(
x
);
r
.
dom
=
new
m
.
dom
.
DOMUtils
(
r
.
getDoc
(),{
keep_values
:
true
,
url_converter
:
r
.
convertURL
,
url_converter_scope
:
r
,
hex_colors
:
x
.
force_hex_style_colors
,
class_filter
:
x
.
class_filter
,
update_styles
:
1
,
fix_ie_paragraphs
:
1
,
schema
:
r
.
schema
});
r
.
parser
=
new
m
.
html
.
DomParser
(
x
,
r
.
schema
);
r
.
parser
.
addAttributeFilter
(
"name"
,
function
(
s
,
t
){
var
B
=
s
.
length
,
D
,
A
,
C
,
E
;
while
(
B
--
){
E
=
s
[
B
];
if
(
E
.
name
===
"a"
&&
E
.
firstChild
){
C
=
E
.
parent
;
D
=
E
.
lastChild
;
do
{
A
=
D
.
prev
;
C
.
insert
(
D
,
E
);
D
=
A
}
while
(
D
)}}});
r
.
parser
.
addAttributeFilter
(
"src,href,style"
,
function
(
s
,
t
){
var
A
=
s
.
length
,
B
,
D
=
r
.
dom
,
C
;
while
(
A
--
){
B
=
s
[
A
];
C
=
B
.
attr
(
t
);
if
(
t
===
"style"
){
B
.
attr
(
"data-mce-style"
,
D
.
serializeStyle
(
D
.
parseStyle
(
C
),
B
.
name
))}
else
{
B
.
attr
(
"data-mce-"
+
t
,
r
.
convertURL
(
C
,
t
,
B
.
name
))}}});
r
.
parser
.
addNodeFilter
(
"script"
,
function
(
s
,
t
){
var
A
=
s
.
length
;
while
(
A
--
){
s
[
A
].
attr
(
"type"
,
"mce-text/javascript"
)}});
r
.
parser
.
addNodeFilter
(
"#cdata"
,
function
(
s
,
t
){
var
A
=
s
.
length
,
B
;
while
(
A
--
){
B
=
s
[
A
];
B
.
type
=
8
;
B
.
name
=
"#comment"
;
B
.
value
=
"[CDATA["
+
B
.
value
+
"]]"
}});
r
.
parser
.
addNodeFilter
(
"p,h1,h2,h3,h4,h5,h6,div"
,
function
(
t
,
A
){
var
B
=
t
.
length
,
C
,
s
=
r
.
schema
.
getNonEmptyElements
();
while
(
B
--
){
C
=
t
[
B
];
if
(
C
.
isEmpty
(
s
)){
C
.
empty
().
append
(
new
m
.
html
.
Node
(
"br"
,
1
)).
shortEnded
=
true
}}});
r
.
serializer
=
new
m
.
dom
.
Serializer
(
x
,
r
.
dom
,
r
.
schema
);
r
.
selection
=
new
m
.
dom
.
Selection
(
r
.
dom
,
r
.
getWin
(),
r
.
serializer
);
r
.
formatter
=
new
m
.
Formatter
(
this
);
r
.
formatter
.
register
({
alignleft
:
[{
selector
:
"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li"
,
styles
:
{
textAlign
:
"left"
}},{
selector
:
"img,table"
,
collapsed
:
false
,
styles
:
{
"float"
:
"left"
}}],
aligncenter
:
[{
selector
:
"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li"
,
styles
:
{
textAlign
:
"center"
}},{
selector
:
"img"
,
collapsed
:
false
,
styles
:
{
display
:
"block"
,
marginLeft
:
"auto"
,
marginRight
:
"auto"
}},{
selector
:
"table"
,
collapsed
:
false
,
styles
:
{
marginLeft
:
"auto"
,
marginRight
:
"auto"
}}],
alignright
:
[{
selector
:
"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li"
,
styles
:
{
textAlign
:
"right"
}},{
selector
:
"img,table"
,
collapsed
:
false
,
styles
:
{
"float"
:
"right"
}}],
alignfull
:
[{
selector
:
"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li"
,
styles
:
{
textAlign
:
"justify"
}}],
bold
:
[{
inline
:
"strong"
,
remove
:
"all"
},{
inline
:
"span"
,
styles
:
{
fontWeight
:
"bold"
}},{
inline
:
"b"
,
remove
:
"all"
}],
italic
:
[{
inline
:
"em"
,
remove
:
"all"
},{
inline
:
"span"
,
styles
:
{
fontStyle
:
"italic"
}},{
inline
:
"i"
,
remove
:
"all"
}],
underline
:
[{
inline
:
"span"
,
styles
:
{
textDecoration
:
"underline"
},
exact
:
true
},{
inline
:
"u"
,
remove
:
"all"
}],
strikethrough
:
[{
inline
:
"span"
,
styles
:
{
textDecoration
:
"line-through"
},
exact
:
true
},{
inline
:
"strike"
,
remove
:
"all"
}],
forecolor
:
{
inline
:
"span"
,
styles
:
{
color
:
"%value"
},
wrap_links
:
false
},
hilitecolor
:
{
inline
:
"span"
,
styles
:
{
backgroundColor
:
"%value"
},
wrap_links
:
false
},
fontname
:
{
inline
:
"span"
,
styles
:
{
fontFamily
:
"%value"
}},
fontsize
:
{
inline
:
"span"
,
styles
:
{
fontSize
:
"%value"
}},
fontsize_class
:
{
inline
:
"span"
,
attributes
:
{
"class"
:
"%value"
}},
blockquote
:
{
block
:
"blockquote"
,
wrapper
:
1
,
remove
:
"all"
},
subscript
:
{
inline
:
"sub"
},
superscript
:
{
inline
:
"sup"
},
removeformat
:
[{
selector
:
"b,strong,em,i,font,u,strike"
,
remove
:
"all"
,
split
:
true
,
expand
:
false
,
block_expand
:
true
,
deep
:
true
},{
selector
:
"span"
,
attributes
:
[
"style"
,
"class"
],
remove
:
"empty"
,
split
:
true
,
expand
:
false
,
deep
:
true
},{
selector
:
"*"
,
attributes
:
[
"style"
,
"class"
],
split
:
false
,
expand
:
false
,
deep
:
true
}]});
i
(
"p h1 h2 h3 h4 h5 h6 div address pre div code dt dd samp"
.
split
(
/\s/
),
function
(
s
){
r
.
formatter
.
register
(
s
,{
block
:
s
,
remove
:
"all"
})});
r
.
formatter
.
register
(
r
.
settings
.
formats
);
r
.
undoManager
=
new
m
.
UndoManager
(
r
);
r
.
undoManager
.
onAdd
.
add
(
function
(
t
,
s
){
if
(
t
.
hasUndo
()){
return
r
.
onChange
.
dispatch
(
r
,
s
,
t
)}});
r
.
undoManager
.
onUndo
.
add
(
function
(
t
,
s
){
return
r
.
onUndo
.
dispatch
(
r
,
s
,
t
)});
r
.
undoManager
.
onRedo
.
add
(
function
(
t
,
s
){
return
r
.
onRedo
.
dispatch
(
r
,
s
,
t
)});
r
.
forceBlocks
=
new
m
.
ForceBlocks
(
r
,{
forced_root_block
:
x
.
forced_root_block
});
r
.
editorCommands
=
new
m
.
EditorCommands
(
r
);
r
.
serializer
.
onPreProcess
.
add
(
function
(
s
,
t
){
return
r
.
onPreProcess
.
dispatch
(
r
,
t
,
s
)});
r
.
serializer
.
onPostProcess
.
add
(
function
(
s
,
t
){
return
r
.
onPostProcess
.
dispatch
(
r
,
t
,
s
)});
r
.
onPreInit
.
dispatch
(
r
);
if
(
!
x
.
gecko_spellcheck
){
r
.
getBody
().
spellcheck
=
0
}
if
(
!
x
.
readonly
){
r
.
_addEvents
()}
r
.
controlManager
.
onPostRender
.
dispatch
(
r
,
r
.
controlManager
);
r
.
onPostRender
.
dispatch
(
r
);
if
(
x
.
directionality
){
r
.
getBody
().
dir
=
x
.
directionality
}
if
(
x
.
nowrap
){
r
.
getBody
().
style
.
whiteSpace
=
"nowrap"
}
if
(
x
.
handle_node_change_callback
){
r
.
onNodeChange
.
add
(
function
(
t
,
s
,
A
){
r
.
execCallback
(
"handle_node_change_callback"
,
r
.
id
,
A
,
-
1
,
-
1
,
true
,
r
.
selection
.
isCollapsed
())})}
if
(
x
.
save_callback
){
r
.
onSaveContent
.
add
(
function
(
s
,
A
){
var
t
=
r
.
execCallback
(
"save_callback"
,
r
.
id
,
A
.
content
,
r
.
getBody
());
if
(
t
){
A
.
content
=
t
}})}
if
(
x
.
onchange_callback
){
r
.
onChange
.
add
(
function
(
t
,
s
){
r
.
execCallback
(
"onchange_callback"
,
r
,
s
)})}
if
(
x
.
protect
){
r
.
onBeforeSetContent
.
add
(
function
(
s
,
t
){
if
(
x
.
protect
){
i
(
x
.
protect
,
function
(
A
){
t
.
content
=
t
.
content
.
replace
(
A
,
function
(
B
){
return
"<!--mce:protected "
+
escape
(
B
)
+
"-->"
})})}})}
if
(
x
.
convert_newlines_to_brs
){
r
.
onBeforeSetContent
.
add
(
function
(
s
,
t
){
if
(
t
.
initial
){
t
.
content
=
t
.
content
.
replace
(
/\r?\n/g
,
"<br />"
)}})}
if
(
x
.
preformatted
){
r
.
onPostProcess
.
add
(
function
(
s
,
t
){
t
.
content
=
t
.
content
.
replace
(
/^\s*<pre.*?>/
,
""
);
t
.
content
=
t
.
content
.
replace
(
/<\/pre>\s*$/
,
""
);
if
(
t
.
set
){
t
.
content
=
'<pre class="mceItemHidden">'
+
t
.
content
+
"</pre>"
}})}
if
(
x
.
verify_css_classes
){
r
.
serializer
.
attribValueFilter
=
function
(
C
,
A
){
var
B
,
t
;
if
(
C
==
"class"
){
if
(
!
r
.
classesRE
){
t
=
r
.
dom
.
getClasses
();
if
(
t
.
length
>
0
){
B
=
""
;
i
(
t
,
function
(
s
){
B
+=
(
B
?
"|"
:
""
)
+
s
[
"class"
]});
r
.
classesRE
=
new
RegExp
(
"("
+
B
+
")"
,
"gi"
)}}
return
!
r
.
classesRE
||
/(\bmceItem\w+\b|\bmceTemp\w+\b)/g
.
test
(
A
)
||
r
.
classesRE
.
test
(
A
)
?
A
:
""
}
return
A
}}
if
(
x
.
cleanup_callback
){
r
.
onBeforeSetContent
.
add
(
function
(
s
,
t
){
t
.
content
=
r
.
execCallback
(
"cleanup_callback"
,
"insert_to_editor"
,
t
.
content
,
t
)});
r
.
onPreProcess
.
add
(
function
(
s
,
t
){
if
(
t
.
set
){
r
.
execCallback
(
"cleanup_callback"
,
"insert_to_editor_dom"
,
t
.
node
,
t
)}
if
(
t
.
get
){
r
.
execCallback
(
"cleanup_callback"
,
"get_from_editor_dom"
,
t
.
node
,
t
)}});
r
.
onPostProcess
.
add
(
function
(
s
,
t
){
if
(
t
.
set
){
t
.
content
=
r
.
execCallback
(
"cleanup_callback"
,
"insert_to_editor"
,
t
.
content
,
t
)}
if
(
t
.
get
){
t
.
content
=
r
.
execCallback
(
"cleanup_callback"
,
"get_from_editor"
,
t
.
content
,
t
)}})}
if
(
x
.
save_callback
){
r
.
onGetContent
.
add
(
function
(
s
,
t
){
if
(
t
.
save
){
t
.
content
=
r
.
execCallback
(
"save_callback"
,
r
.
id
,
t
.
content
,
r
.
getBody
())}})}
if
(
x
.
handle_event_callback
){
r
.
onEvent
.
add
(
function
(
s
,
t
,
A
){
if
(
r
.
execCallback
(
"handle_event_callback"
,
t
,
s
,
A
)
===
false
){
j
.
cancel
(
t
)}})}
r
.
onSetContent
.
add
(
function
(){
r
.
addVisual
(
r
.
getBody
())});
if
(
x
.
padd_empty_editor
){
r
.
onPostProcess
.
add
(
function
(
s
,
t
){
t
.
content
=
t
.
content
.
replace
(
/^(<p[^>]*>( | |\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/
,
""
)})}
if
(
a
){
function
u
(
s
,
t
){
i
(
s
.
dom
.
select
(
"a"
),
function
(
B
){
var
A
=
B
.
parentNode
;
if
(
s
.
dom
.
isBlock
(
A
)
&&
A
.
lastChild
===
B
){
s
.
dom
.
add
(
A
,
"br"
,{
"data-mce-bogus"
:
1
})}})}
r
.
onExecCommand
.
add
(
function
(
s
,
t
){
if
(
t
===
"CreateLink"
){
u
(
s
)}});
r
.
onSetContent
.
add
(
r
.
selection
.
onSetContent
.
add
(
u
));
if
(
!
x
.
readonly
){
try
{
z
.
designMode
=
"Off"
;
z
.
designMode
=
"On"
}
catch
(
q
){}}}
setTimeout
(
function
(){
if
(
r
.
removed
){
return
}
r
.
load
({
initial
:
true
,
format
:
"html"
});
r
.
startContent
=
r
.
getContent
({
format
:
"raw"
});
r
.
undoManager
.
add
();
r
.
initialized
=
true
;
r
.
onInit
.
dispatch
(
r
);
r
.
execCallback
(
"setupcontent_callback"
,
r
.
id
,
r
.
getBody
(),
r
.
getDoc
());
r
.
execCallback
(
"init_instance_callback"
,
r
);
r
.
focus
(
true
);
r
.
nodeChanged
({
initial
:
1
});
i
(
r
.
contentCSS
,
function
(
s
){
r
.
dom
.
loadCSS
(
s
)});
if
(
x
.
auto_focus
){
setTimeout
(
function
(){
var
s
=
m
.
get
(
x
.
auto_focus
);
s
.
selection
.
select
(
s
.
getBody
(),
1
);
s
.
selection
.
collapse
(
1
);
s
.
getWin
().
focus
()},
100
)}},
1
);
y
=
null
},
focus
:
function
(
s
){
var
x
,
q
=
this
,
v
=
q
.
settings
.
content_editable
,
r
,
p
,
u
=
q
.
getDoc
();
if
(
!
s
){
r
=
q
.
selection
.
getRng
();
if
(
r
.
item
){
p
=
r
.
item
(
0
)}
if
(
!
v
){
q
.
getWin
().
focus
()}
if
(
p
&&
p
.
ownerDocument
==
u
){
r
=
u
.
body
.
createControlRange
();
r
.
addElement
(
p
);
r
.
select
()}}
if
(
m
.
activeEditor
!=
q
){
if
((
x
=
m
.
activeEditor
)
!=
null
){
x
.
onDeactivate
.
dispatch
(
x
,
q
)}
q
.
onActivate
.
dispatch
(
q
,
x
)}
m
.
_setActive
(
q
)},
execCallback
:
function
(
u
){
var
p
=
this
,
r
=
p
.
settings
[
u
],
q
;
if
(
!
r
){
return
}
if
(
p
.
callbackLookup
&&
(
q
=
p
.
callbackLookup
[
u
])){
r
=
q
.
func
;
q
=
q
.
scope
}
if
(
d
(
r
,
"string"
)){
q
=
r
.
replace
(
/\.\w+$/
,
""
);
q
=
q
?
m
.
resolve
(
q
)
:
0
;
r
=
m
.
resolve
(
r
);
p
.
callbackLookup
=
p
.
callbackLookup
||
{};
p
.
callbackLookup
[
u
]
=
{
func
:
r
,
scope
:
q
}}
return
r
.
apply
(
q
||
p
,
Array
.
prototype
.
slice
.
call
(
arguments
,
1
))},
translate
:
function
(
p
){
var
r
=
this
.
settings
.
language
||
"en"
,
q
=
m
.
i18n
;
if
(
!
p
){
return
""
}
return
q
[
r
+
"."
+
p
]
||
p
.
replace
(
/{\#([^}]+)\}/g
,
function
(
t
,
s
){
return
q
[
r
+
"."
+
s
]
||
"{#"
+
s
+
"}"
})},
getLang
:
function
(
q
,
p
){
return
m
.
i18n
[(
this
.
settings
.
language
||
"en"
)
+
"."
+
q
]
||
(
d
(
p
)
?
p
:
"{#"
+
q
+
"}"
)},
getParam
:
function
(
u
,
r
,
p
){
var
s
=
m
.
trim
,
q
=
d
(
this
.
settings
[
u
])
?
this
.
settings
[
u
]
:
r
,
t
;
if
(
p
===
"hash"
){
t
=
{};
if
(
d
(
q
,
"string"
)){
i
(
q
.
indexOf
(
"="
)
>
0
?
q
.
split
(
/[;,](?![^=;,]*(?:[;,]|$))/
)
:
q
.
split
(
","
),
function
(
x
){
x
=
x
.
split
(
"="
);
if
(
x
.
length
>
1
){
t
[
s
(
x
[
0
])]
=
s
(
x
[
1
])}
else
{
t
[
s
(
x
[
0
])]
=
s
(
x
)}})}
else
{
t
=
q
}
return
t
}
return
q
},
nodeChanged
:
function
(
r
){
var
p
=
this
,
q
=
p
.
selection
,
u
=
q
.
getStart
()
||
p
.
getBody
();
if
(
p
.
initialized
){
r
=
r
||
{};
u
=
b
&&
u
.
ownerDocument
!=
p
.
getDoc
()
?
p
.
getBody
()
:
u
;
r
.
parents
=
[];
p
.
dom
.
getParent
(
u
,
function
(
s
){
if
(
s
.
nodeName
==
"BODY"
){
return
true
}
r
.
parents
.
push
(
s
)});
p
.
onNodeChange
.
dispatch
(
p
,
r
?
r
.
controlManager
||
p
.
controlManager
:
p
.
controlManager
,
u
,
q
.
isCollapsed
(),
r
)}},
addButton
:
function
(
r
,
q
){
var
p
=
this
;
p
.
buttons
=
p
.
buttons
||
{};
p
.
buttons
[
r
]
=
q
},
addCommand
:
function
(
p
,
r
,
q
){
this
.
execCommands
[
p
]
=
{
func
:
r
,
scope
:
q
||
this
}},
addQueryStateHandler
:
function
(
p
,
r
,
q
){
this
.
queryStateCommands
[
p
]
=
{
func
:
r
,
scope
:
q
||
this
}},
addQueryValueHandler
:
function
(
p
,
r
,
q
){
this
.
queryValueCommands
[
p
]
=
{
func
:
r
,
scope
:
q
||
this
}},
addShortcut
:
function
(
r
,
u
,
p
,
s
){
var
q
=
this
,
v
;
if
(
!
q
.
settings
.
custom_shortcuts
){
return
false
}
q
.
shortcuts
=
q
.
shortcuts
||
{};
if
(
d
(
p
,
"string"
)){
v
=
p
;
p
=
function
(){
q
.
execCommand
(
v
,
false
,
null
)}}
if
(
d
(
p
,
"object"
)){
v
=
p
;
p
=
function
(){
q
.
execCommand
(
v
[
0
],
v
[
1
],
v
[
2
])}}
i
(
g
(
r
),
function
(
t
){
var
x
=
{
func
:
p
,
scope
:
s
||
this
,
desc
:
u
,
alt
:
false
,
ctrl
:
false
,
shift
:
false
};
i
(
g
(
t
,
"+"
),
function
(
y
){
switch
(
y
){
case
"alt"
:
case
"ctrl"
:
case
"shift"
:
x
[
y
]
=
true
;
break
;
default
:
x
.
charCode
=
y
.
charCodeAt
(
0
);
x
.
keyCode
=
y
.
toUpperCase
().
charCodeAt
(
0
)}});
q
.
shortcuts
[(
x
.
ctrl
?
"ctrl"
:
""
)
+
","
+
(
x
.
alt
?
"alt"
:
""
)
+
","
+
(
x
.
shift
?
"shift"
:
""
)
+
","
+
x
.
keyCode
]
=
x
});
return
true
},
execCommand
:
function
(
x
,
v
,
z
,
p
){
var
r
=
this
,
u
=
0
,
y
,
q
;
if
(
!
/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/
.
test
(
x
)
&&
(
!
p
||!
p
.
skip_focus
)){
r
.
focus
()}
y
=
{};
r
.
onBeforeExecCommand
.
dispatch
(
r
,
x
,
v
,
z
,
y
);
if
(
y
.
terminate
){
return
false
}
if
(
r
.
execCallback
(
"execcommand_callback"
,
r
.
id
,
r
.
selection
.
getNode
(),
x
,
v
,
z
)){
r
.
onExecCommand
.
dispatch
(
r
,
x
,
v
,
z
,
p
);
return
true
}
if
(
y
=
r
.
execCommands
[
x
]){
q
=
y
.
func
.
call
(
y
.
scope
,
v
,
z
);
if
(
q
!==
true
){
r
.
onExecCommand
.
dispatch
(
r
,
x
,
v
,
z
,
p
);
return
q
}}
i
(
r
.
plugins
,
function
(
s
){
if
(
s
.
execCommand
&&
s
.
execCommand
(
x
,
v
,
z
)){
r
.
onExecCommand
.
dispatch
(
r
,
x
,
v
,
z
,
p
);
u
=
1
;
return
false
}});
if
(
u
){
return
true
}
if
(
r
.
theme
&&
r
.
theme
.
execCommand
&&
r
.
theme
.
execCommand
(
x
,
v
,
z
)){
r
.
onExecCommand
.
dispatch
(
r
,
x
,
v
,
z
,
p
);
return
true
}
if
(
r
.
editorCommands
.
execCommand
(
x
,
v
,
z
)){
r
.
onExecCommand
.
dispatch
(
r
,
x
,
v
,
z
,
p
);
return
true
}
r
.
getDoc
().
execCommand
(
x
,
v
,
z
);
r
.
onExecCommand
.
dispatch
(
r
,
x
,
v
,
z
,
p
)},
queryCommandState
:
function
(
u
){
var
q
=
this
,
v
,
r
;
if
(
q
.
_isHidden
()){
return
}
if
(
v
=
q
.
queryStateCommands
[
u
]){
r
=
v
.
func
.
call
(
v
.
scope
);
if
(
r
!==
true
){
return
r
}}
v
=
q
.
editorCommands
.
queryCommandState
(
u
);
if
(
v
!==-
1
){
return
v
}
try
{
return
this
.
getDoc
().
queryCommandState
(
u
)}
catch
(
p
){}},
queryCommandValue
:
function
(
v
){
var
q
=
this
,
u
,
r
;
if
(
q
.
_isHidden
()){
return
}
if
(
u
=
q
.
queryValueCommands
[
v
]){
r
=
u
.
func
.
call
(
u
.
scope
);
if
(
r
!==
true
){
return
r
}}
u
=
q
.
editorCommands
.
queryCommandValue
(
v
);
if
(
d
(
u
)){
return
u
}
try
{
return
this
.
getDoc
().
queryCommandValue
(
v
)}
catch
(
p
){}},
show
:
function
(){
var
p
=
this
;
n
.
show
(
p
.
getContainer
());
n
.
hide
(
p
.
id
);
p
.
load
()},
hide
:
function
(){
var
p
=
this
,
q
=
p
.
getDoc
();
if
(
b
&&
q
){
q
.
execCommand
(
"SelectAll"
)}
p
.
save
();
n
.
hide
(
p
.
getContainer
());
n
.
setStyle
(
p
.
id
,
"display"
,
p
.
orgDisplay
)},
isHidden
:
function
(){
return
!
n
.
isHidden
(
this
.
id
)},
setProgressState
:
function
(
p
,
q
,
r
){
this
.
onSetProgressState
.
dispatch
(
this
,
p
,
q
,
r
);
return
p
},
load
:
function
(
s
){
var
p
=
this
,
r
=
p
.
getElement
(),
q
;
if
(
r
){
s
=
s
||
{};
s
.
load
=
true
;
q
=
p
.
setContent
(
d
(
r
.
value
)
?
r
.
value
:
r
.
innerHTML
,
s
);
s
.
element
=
r
;
if
(
!
s
.
no_events
){
p
.
onLoadContent
.
dispatch
(
p
,
s
)}
s
.
element
=
r
=
null
;
return
q
}},
save
:
function
(
u
){
var
p
=
this
,
s
=
p
.
getElement
(),
q
,
r
;
if
(
!
s
||!
p
.
initialized
){
return
}
u
=
u
||
{};
u
.
save
=
true
;
if
(
!
u
.
no_events
){
p
.
undoManager
.
typing
=
false
;
p
.
undoManager
.
add
()}
u
.
element
=
s
;
q
=
u
.
content
=
p
.
getContent
(
u
);
if
(
!
u
.
no_events
){
p
.
onSaveContent
.
dispatch
(
p
,
u
)}
q
=
u
.
content
;
if
(
!
/TEXTAREA|INPUT/i
.
test
(
s
.
nodeName
)){
s
.
innerHTML
=
q
;
if
(
r
=
n
.
getParent
(
p
.
id
,
"form"
)){
i
(
r
.
elements
,
function
(
t
){
if
(
t
.
name
==
p
.
id
){
t
.
value
=
q
;
return
false
}})}}
else
{
s
.
value
=
q
}
u
.
element
=
s
=
null
;
return
q
},
setContent
:
function
(
t
,
s
){
var
r
=
this
,
q
,
p
=
r
.
getBody
();
s
=
s
||
{};
s
.
format
=
s
.
format
||
"html"
;
s
.
set
=
true
;
s
.
content
=
t
;
if
(
!
s
.
no_events
){
r
.
onBeforeSetContent
.
dispatch
(
r
,
s
)}
t
=
s
.
content
;
if
(
!
m
.
isIE
&&
(
t
.
length
===
0
||
/^\s+$/
.
test
(
t
))){
p
.
innerHTML
=
'<br data-mce-bogus="1" />'
;
return
}
if
(
s
.
format
!==
"raw"
){
t
=
new
m
.
html
.
Serializer
({},
r
.
schema
).
serialize
(
r
.
parser
.
parse
(
t
))}
s
.
content
=
m
.
trim
(
t
);
r
.
dom
.
setHTML
(
p
,
s
.
content
);
if
(
!
s
.
no_events
){
r
.
onSetContent
.
dispatch
(
r
,
s
)}
return
s
.
content
},
getContent
:
function
(
q
){
var
p
=
this
,
r
;
q
=
q
||
{};
q
.
format
=
q
.
format
||
"html"
;
q
.
get
=
true
;
if
(
!
q
.
no_events
){
p
.
onBeforeGetContent
.
dispatch
(
p
,
q
)}
if
(
q
.
format
==
"raw"
){
r
=
p
.
getBody
().
innerHTML
}
else
{
r
=
p
.
serializer
.
serialize
(
p
.
getBody
(),
q
)}
q
.
content
=
m
.
trim
(
r
);
if
(
!
q
.
no_events
){
p
.
onGetContent
.
dispatch
(
p
,
q
)}
return
q
.
content
},
isDirty
:
function
(){
var
p
=
this
;
return
m
.
trim
(
p
.
startContent
)
!=
m
.
trim
(
p
.
getContent
({
format
:
"raw"
,
no_events
:
1
}))
&&!
p
.
isNotDirty
},
getContainer
:
function
(){
var
p
=
this
;
if
(
!
p
.
container
){
p
.
container
=
n
.
get
(
p
.
editorContainer
||
p
.
id
+
"_parent"
)}
return
p
.
container
},
getContentAreaContainer
:
function
(){
return
this
.
contentAreaContainer
},
getElement
:
function
(){
return
n
.
get
(
this
.
settings
.
content_element
||
this
.
id
)},
getWin
:
function
(){
var
p
=
this
,
q
;
if
(
!
p
.
contentWindow
){
q
=
n
.
get
(
p
.
id
+
"_ifr"
);
if
(
q
){
p
.
contentWindow
=
q
.
contentWindow
}}
return
p
.
contentWindow
},
getDoc
:
function
(){
var
q
=
this
,
p
;
if
(
!
q
.
contentDocument
){
p
=
q
.
getWin
();
if
(
p
){
q
.
contentDocument
=
p
.
document
}}
return
q
.
contentDocument
},
getBody
:
function
(){
return
this
.
bodyElement
||
this
.
getDoc
().
body
},
convertURL
:
function
(
p
,
x
,
v
){
var
q
=
this
,
r
=
q
.
settings
;
if
(
r
.
urlconverter_callback
){
return
q
.
execCallback
(
"urlconverter_callback"
,
p
,
v
,
true
,
x
)}
if
(
!
r
.
convert_urls
||
(
v
&&
v
.
nodeName
==
"LINK"
)
||
p
.
indexOf
(
"file:"
)
===
0
){
return
p
}
if
(
r
.
relative_urls
){
return
q
.
documentBaseURI
.
toRelative
(
p
)}
p
=
q
.
documentBaseURI
.
toAbsolute
(
p
,
r
.
remove_script_host
);
return
p
},
addVisual
:
function
(
r
){
var
p
=
this
,
q
=
p
.
settings
;
r
=
r
||
p
.
getBody
();
if
(
!
d
(
p
.
hasVisual
)){
p
.
hasVisual
=
q
.
visual
}
i
(
p
.
dom
.
select
(
"table,a"
,
r
),
function
(
t
){
var
s
;
switch
(
t
.
nodeName
){
case
"TABLE"
:
s
=
p
.
dom
.
getAttrib
(
t
,
"border"
);
if
(
!
s
||
s
==
"0"
){
if
(
p
.
hasVisual
){
p
.
dom
.
addClass
(
t
,
q
.
visual_table_class
)}
else
{
p
.
dom
.
removeClass
(
t
,
q
.
visual_table_class
)}}
return
;
case
"A"
:
s
=
p
.
dom
.
getAttrib
(
t
,
"name"
);
if
(
s
){
if
(
p
.
hasVisual
){
p
.
dom
.
addClass
(
t
,
"mceItemAnchor"
)}
else
{
p
.
dom
.
removeClass
(
t
,
"mceItemAnchor"
)}}
return
}});
p
.
onVisualAid
.
dispatch
(
p
,
r
,
p
.
hasVisual
)},
remove
:
function
(){
var
p
=
this
,
q
=
p
.
getContainer
();
p
.
removed
=
1
;
p
.
hide
();
p
.
execCallback
(
"remove_instance_callback"
,
p
);
p
.
onRemove
.
dispatch
(
p
);
p
.
onExecCommand
.
listeners
=
[];
m
.
remove
(
p
);
n
.
remove
(
q
)},
destroy
:
function
(
q
){
var
p
=
this
;
if
(
p
.
destroyed
){
return
}
if
(
!
q
){
m
.
removeUnload
(
p
.
destroy
);
tinyMCE
.
onBeforeUnload
.
remove
(
p
.
_beforeUnload
);
if
(
p
.
theme
&&
p
.
theme
.
destroy
){
p
.
theme
.
destroy
()}
p
.
controlManager
.
destroy
();
p
.
selection
.
destroy
();
p
.
dom
.
destroy
();
if
(
!
p
.
settings
.
content_editable
){
j
.
clear
(
p
.
getWin
());
j
.
clear
(
p
.
getDoc
())}
j
.
clear
(
p
.
getBody
());
j
.
clear
(
p
.
formElement
)}
if
(
p
.
formElement
){
p
.
formElement
.
submit
=
p
.
formElement
.
_mceOldSubmit
;
p
.
formElement
.
_mceOldSubmit
=
null
}
p
.
contentAreaContainer
=
p
.
formElement
=
p
.
container
=
p
.
settings
.
content_element
=
p
.
bodyElement
=
p
.
contentDocument
=
p
.
contentWindow
=
null
;
if
(
p
.
selection
){
p
.
selection
=
p
.
selection
.
win
=
p
.
selection
.
dom
=
p
.
selection
.
dom
.
doc
=
null
}
p
.
destroyed
=
1
},
_addEvents
:
function
(){
var
B
=
this
,
r
,
C
=
B
.
settings
,
q
=
B
.
dom
,
x
=
{
mouseup
:
"onMouseUp"
,
mousedown
:
"onMouseDown"
,
click
:
"onClick"
,
keyup
:
"onKeyUp"
,
keydown
:
"onKeyDown"
,
keypress
:
"onKeyPress"
,
submit
:
"onSubmit"
,
reset
:
"onReset"
,
contextmenu
:
"onContextMenu"
,
dblclick
:
"onDblClick"
,
paste
:
"onPaste"
};
function
p
(
t
,
D
){
var
s
=
t
.
type
;
if
(
B
.
removed
){
return
}
if
(
B
.
onEvent
.
dispatch
(
B
,
t
,
D
)
!==
false
){
B
[
x
[
t
.
fakeType
||
t
.
type
]].
dispatch
(
B
,
t
,
D
)}}
i
(
x
,
function
(
t
,
s
){
switch
(
s
){
case
"contextmenu"
:
q
.
bind
(
B
.
getDoc
(),
s
,
p
);
break
;
case
"paste"
:
q
.
bind
(
B
.
getBody
(),
s
,
function
(
D
){
p
(
D
)});
break
;
case
"submit"
:
case
"reset"
:
q
.
bind
(
B
.
getElement
().
form
||
n
.
getParent
(
B
.
id
,
"form"
),
s
,
p
);
break
;
default
:
q
.
bind
(
C
.
content_editable
?
B
.
getBody
()
:
B
.
getDoc
(),
s
,
p
)}});
q
.
bind
(
C
.
content_editable
?
B
.
getBody
()
:
(
a
?
B
.
getDoc
()
:
B
.
getWin
()),
"focus"
,
function
(
s
){
B
.
focus
(
true
)});
if
(
m
.
isGecko
){
q
.
bind
(
B
.
getDoc
(),
"DOMNodeInserted"
,
function
(
t
){
var
s
;
t
=
t
.
target
;
if
(
t
.
nodeType
===
1
&&
t
.
nodeName
===
"IMG"
&&
(
s
=
t
.
getAttribute
(
"data-mce-src"
))){
t
.
src
=
B
.
documentBaseURI
.
toAbsolute
(
s
)}})}
if
(
a
){
function
u
(){
var
E
=
this
,
G
=
E
.
getDoc
(),
F
=
E
.
settings
;
if
(
a
&&!
F
.
readonly
){
if
(
E
.
_isHidden
()){
try
{
if
(
!
F
.
content_editable
){
G
.
designMode
=
"On"
}}
catch
(
D
){}}
try
{
G
.
execCommand
(
"styleWithCSS"
,
0
,
false
)}
catch
(
D
){
if
(
!
E
.
_isHidden
()){
try
{
G
.
execCommand
(
"useCSS"
,
0
,
true
)}
catch
(
D
){}}}
if
(
!
F
.
table_inline_editing
){
try
{
G
.
execCommand
(
"enableInlineTableEditing"
,
false
,
false
)}
catch
(
D
){}}
if
(
!
F
.
object_resizing
){
try
{
G
.
execCommand
(
"enableObjectResizing"
,
false
,
false
)}
catch
(
D
){}}}}
B
.
onBeforeExecCommand
.
add
(
u
);
B
.
onMouseDown
.
add
(
u
)}
if
(
m
.
isWebKit
){
B
.
onClick
.
add
(
function
(
s
,
t
){
t
=
t
.
target
;
if
(
t
.
nodeName
==
"IMG"
||
(
t
.
nodeName
==
"A"
&&
q
.
hasClass
(
t
,
"mceItemAnchor"
))){
B
.
selection
.
getSel
().
setBaseAndExtent
(
t
,
0
,
t
,
1
);
B
.
nodeChanged
()}})}
B
.
onMouseUp
.
add
(
B
.
nodeChanged
);
B
.
onKeyUp
.
add
(
function
(
s
,
t
){
var
D
=
t
.
keyCode
;
if
((
D
>=
33
&&
D
<=
36
)
||
(
D
>=
37
&&
D
<=
40
)
||
D
==
13
||
D
==
45
||
D
==
46
||
D
==
8
||
(
m
.
isMac
&&
(
D
==
91
||
D
==
93
))
||
t
.
ctrlKey
){
B
.
nodeChanged
()}});
B
.
onReset
.
add
(
function
(){
B
.
setContent
(
B
.
startContent
,{
format
:
"raw"
})});
if
(
C
.
custom_shortcuts
){
if
(
C
.
custom_undo_redo_keyboard_shortcuts
){
B
.
addShortcut
(
"ctrl+z"
,
B
.
getLang
(
"undo_desc"
),
"Undo"
);
B
.
addShortcut
(
"ctrl+y"
,
B
.
getLang
(
"redo_desc"
),
"Redo"
)}
B
.
addShortcut
(
"ctrl+b"
,
B
.
getLang
(
"bold_desc"
),
"Bold"
);
B
.
addShortcut
(
"ctrl+i"
,
B
.
getLang
(
"italic_desc"
),
"Italic"
);
B
.
addShortcut
(
"ctrl+u"
,
B
.
getLang
(
"underline_desc"
),
"Underline"
);
for
(
r
=
1
;
r
<=
6
;
r
++
){
B
.
addShortcut
(
"ctrl+"
+
r
,
""
,[
"FormatBlock"
,
false
,
"h"
+
r
])}
B
.
addShortcut
(
"ctrl+7"
,
""
,[
"FormatBlock"
,
false
,
"<p>"
]);
B
.
addShortcut
(
"ctrl+8"
,
""
,[
"FormatBlock"
,
false
,
"<div>"
]);
B
.
addShortcut
(
"ctrl+9"
,
""
,[
"FormatBlock"
,
false
,
"<address>"
]);
function
v
(
t
){
var
s
=
null
;
if
(
!
t
.
altKey
&&!
t
.
ctrlKey
&&!
t
.
metaKey
){
return
s
}
i
(
B
.
shortcuts
,
function
(
D
){
if
(
m
.
isMac
&&
D
.
ctrl
!=
t
.
metaKey
){
return
}
else
{
if
(
!
m
.
isMac
&&
D
.
ctrl
!=
t
.
ctrlKey
){
return
}}
if
(
D
.
alt
!=
t
.
altKey
){
return
}
if
(
D
.
shift
!=
t
.
shiftKey
){
return
}
if
(
t
.
keyCode
==
D
.
keyCode
||
(
t
.
charCode
&&
t
.
charCode
==
D
.
charCode
)){
s
=
D
;
return
false
}});
return
s
}
B
.
onKeyUp
.
add
(
function
(
s
,
t
){
var
D
=
v
(
t
);
if
(
D
){
return
j
.
cancel
(
t
)}});
B
.
onKeyPress
.
add
(
function
(
s
,
t
){
var
D
=
v
(
t
);
if
(
D
){
return
j
.
cancel
(
t
)}});
B
.
onKeyDown
.
add
(
function
(
s
,
t
){
var
D
=
v
(
t
);
if
(
D
){
D
.
func
.
call
(
D
.
scope
);
return
j
.
cancel
(
t
)}})}
if
(
m
.
isIE
){
q
.
bind
(
B
.
getDoc
(),
"controlselect"
,
function
(
D
){
var
t
=
B
.
resizeInfo
,
s
;
D
=
D
.
target
;
if
(
D
.
nodeName
!==
"IMG"
){
return
}
if
(
t
){
q
.
unbind
(
t
.
node
,
t
.
ev
,
t
.
cb
)}
if
(
!
q
.
hasClass
(
D
,
"mceItemNoResize"
)){
ev
=
"resizeend"
;
s
=
q
.
bind
(
D
,
ev
,
function
(
F
){
var
E
;
F
=
F
.
target
;
if
(
E
=
q
.
getStyle
(
F
,
"width"
)){
q
.
setAttrib
(
F
,
"width"
,
E
.
replace
(
/[^0-9%]+/g
,
""
));
q
.
setStyle
(
F
,
"width"
,
""
)}
if
(
E
=
q
.
getStyle
(
F
,
"height"
)){
q
.
setAttrib
(
F
,
"height"
,
E
.
replace
(
/[^0-9%]+/g
,
""
));
q
.
setStyle
(
F
,
"height"
,
""
)}})}
else
{
ev
=
"resizestart"
;
s
=
q
.
bind
(
D
,
"resizestart"
,
j
.
cancel
,
j
)}
t
=
B
.
resizeInfo
=
{
node
:
D
,
ev
:
ev
,
cb
:
s
}});
B
.
onKeyDown
.
add
(
function
(
s
,
D
){
var
t
;
switch
(
D
.
keyCode
){
case
8
:
t
=
B
.
getDoc
().
selection
;
if
(
t
.
createRange
&&
t
.
createRange
().
item
){
s
.
dom
.
remove
(
t
.
createRange
().
item
(
0
));
return
j
.
cancel
(
D
)}}})}
if
(
m
.
isOpera
){
B
.
onClick
.
add
(
function
(
s
,
t
){
j
.
prevent
(
t
)})}
if
(
C
.
custom_undo_redo
){
function
y
(){
B
.
undoManager
.
typing
=
false
;
B
.
undoManager
.
add
()}
q
.
bind
(
B
.
getDoc
(),
"focusout"
,
function
(
s
){
if
(
!
B
.
removed
&&
B
.
undoManager
.
typing
){
y
()}});
B
.
dom
.
bind
(
B
.
dom
.
getRoot
(),
"dragend"
,
function
(
s
){
y
()});
B
.
onKeyUp
.
add
(
function
(
t
,
F
){
var
s
,
E
,
D
;
if
(
b
&&
F
.
keyCode
==
8
){
s
=
B
.
selection
.
getRng
();
if
(
s
.
parentElement
){
E
=
s
.
parentElement
();
D
=
B
.
selection
.
getBookmark
();
E
.
innerHTML
=
E
.
innerHTML
;
B
.
selection
.
moveToBookmark
(
D
)}}
if
((
F
.
keyCode
>=
33
&&
F
.
keyCode
<=
36
)
||
(
F
.
keyCode
>=
37
&&
F
.
keyCode
<=
40
)
||
F
.
keyCode
==
13
||
F
.
keyCode
==
45
||
F
.
ctrlKey
){
y
()}});
B
.
onKeyDown
.
add
(
function
(
t
,
H
){
var
s
,
F
,
E
,
G
=
H
.
keyCode
;
if
(
b
&&
G
==
46
){
s
=
B
.
selection
.
getRng
();
if
(
s
.
parentElement
){
F
=
s
.
parentElement
();
if
(
!
B
.
undoManager
.
typing
){
B
.
undoManager
.
beforeChange
();
B
.
undoManager
.
typing
=
true
;
B
.
undoManager
.
add
()}
if
(
H
.
ctrlKey
){
s
.
moveEnd
(
"word"
,
1
);
s
.
select
()}
B
.
selection
.
getSel
().
clear
();
if
(
s
.
parentElement
()
==
F
){
E
=
B
.
selection
.
getBookmark
();
try
{
F
.
innerHTML
=
F
.
innerHTML
}
catch
(
D
){}
B
.
selection
.
moveToBookmark
(
E
)}
H
.
preventDefault
();
return
}}
if
((
G
>=
33
&&
G
<=
36
)
||
(
G
>=
37
&&
G
<=
40
)
||
G
==
13
||
G
==
45
){
if
(
m
.
isIE
&&
G
==
13
){
B
.
undoManager
.
beforeChange
()}
if
(
B
.
undoManager
.
typing
){
y
()}
return
}
if
((
G
<
16
||
G
>
20
)
&&
G
!=
224
&&
G
!=
91
&&!
B
.
undoManager
.
typing
){
B
.
undoManager
.
beforeChange
();
B
.
undoManager
.
add
();
B
.
undoManager
.
typing
=
true
}});
B
.
onMouseDown
.
add
(
function
(){
if
(
B
.
undoManager
.
typing
){
y
()}})}
if
(
m
.
isGecko
){
function
A
(){
var
s
=
B
.
dom
.
getAttribs
(
B
.
selection
.
getStart
().
cloneNode
(
false
));
return
function
(){
var
t
=
B
.
selection
.
getStart
();
B
.
dom
.
removeAllAttribs
(
t
);
i
(
s
,
function
(
D
){
t
.
setAttributeNode
(
D
.
cloneNode
(
true
))})}}
function
z
(){
var
t
=
B
.
selection
;
return
!
t
.
isCollapsed
()
&&
t
.
getStart
()
!=
t
.
getEnd
()}
B
.
onKeyPress
.
add
(
function
(
s
,
D
){
var
t
;
if
((
D
.
keyCode
==
8
||
D
.
keyCode
==
46
)
&&
z
()){
t
=
A
();
B
.
getDoc
().
execCommand
(
"delete"
,
false
,
null
);
t
();
return
j
.
cancel
(
D
)}});
B
.
dom
.
bind
(
B
.
getDoc
(),
"cut"
,
function
(
t
){
var
s
;
if
(
z
()){
s
=
A
();
B
.
onKeyUp
.
addToTop
(
j
.
cancel
,
j
);
setTimeout
(
function
(){
s
();
B
.
onKeyUp
.
remove
(
j
.
cancel
,
j
)},
0
)}})}},
_isHidden
:
function
(){
var
p
;
if
(
!
a
){
return
0
}
p
=
this
.
selection
.
getSel
();
return
(
!
p
||!
p
.
rangeCount
||
p
.
rangeCount
==
0
)}})})(
tinymce
);(
function
(
c
){
var
d
=
c
.
each
,
e
,
a
=
true
,
b
=
false
;
c
.
EditorCommands
=
function
(
n
){
var
l
=
n
.
dom
,
p
=
n
.
selection
,
j
=
{
state
:
{},
exec
:
{},
value
:
{}},
k
=
n
.
settings
,
o
;
function
q
(
y
,
x
,
v
){
var
u
;
y
=
y
.
toLowerCase
();
if
(
u
=
j
.
exec
[
y
]){
u
(
y
,
x
,
v
);
return
a
}
return
b
}
function
m
(
v
){
var
u
;
v
=
v
.
toLowerCase
();
if
(
u
=
j
.
state
[
v
]){
return
u
(
v
)}
return
-
1
}
function
h
(
v
){
var
u
;
v
=
v
.
toLowerCase
();
if
(
u
=
j
.
value
[
v
]){
return
u
(
v
)}
return
b
}
function
t
(
u
,
v
){
v
=
v
||
"exec"
;
d
(
u
,
function
(
y
,
x
){
d
(
x
.
toLowerCase
().
split
(
","
),
function
(
z
){
j
[
v
][
z
]
=
y
})})}
c
.
extend
(
this
,{
execCommand
:
q
,
queryCommandState
:
m
,
queryCommandValue
:
h
,
addCommands
:
t
});
function
f
(
x
,
v
,
u
){
if
(
v
===
e
){
v
=
b
}
if
(
u
===
e
){
u
=
null
}
return
n
.
getDoc
().
execCommand
(
x
,
v
,
u
)}
function
s
(
u
){
return
n
.
formatter
.
match
(
u
)}
function
r
(
u
,
v
){
n
.
formatter
.
toggle
(
u
,
v
?
{
value
:
v
}
:
e
)}
function
i
(
u
){
o
=
p
.
getBookmark
(
u
)}
function
g
(){
p
.
moveToBookmark
(
o
)}
t
({
"mceResetDesignMode,mceBeginUndoLevel"
:
function
(){},
"mceEndUndoLevel,mceAddUndoLevel"
:
function
(){
n
.
undoManager
.
add
()},
"Cut,Copy,Paste"
:
function
(
y
){
var
x
=
n
.
getDoc
(),
u
;
try
{
f
(
y
)}
catch
(
v
){
u
=
a
}
if
(
u
||!
x
.
queryCommandSupported
(
y
)){
if
(
c
.
isGecko
){
n
.
windowManager
.
confirm
(
n
.
getLang
(
"clipboard_msg"
),
function
(
z
){
if
(
z
){
open
(
"http://www.mozilla.org/editor/midasdemo/securityprefs.html"
,
"_blank"
)}})}
else
{
n
.
windowManager
.
alert
(
n
.
getLang
(
"clipboard_no_support"
))}}},
unlink
:
function
(
u
){
if
(
p
.
isCollapsed
()){
p
.
select
(
p
.
getNode
())}
f
(
u
);
p
.
collapse
(
b
)},
"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull"
:
function
(
u
){
var
v
=
u
.
substring
(
7
);
d
(
"left,center,right,full"
.
split
(
","
),
function
(
x
){
if
(
v
!=
x
){
n
.
formatter
.
remove
(
"align"
+
x
)}});
r
(
"align"
+
v
);
q
(
"mceRepaint"
)},
"InsertUnorderedList,InsertOrderedList"
:
function
(
x
){
var
u
,
v
;
f
(
x
);
u
=
l
.
getParent
(
p
.
getNode
(),
"ol,ul"
);
if
(
u
){
v
=
u
.
parentNode
;
if
(
/^(H[1-6]|P|ADDRESS|PRE)$/
.
test
(
v
.
nodeName
)){
i
();
l
.
split
(
v
,
u
);
g
()}}},
"Bold,Italic,Underline,Strikethrough,Superscript,Subscript"
:
function
(
u
){
r
(
u
)},
"ForeColor,HiliteColor,FontName"
:
function
(
x
,
v
,
u
){
r
(
x
,
u
)},
FontSize
:
function
(
y
,
x
,
v
){
var
u
,
z
;
if
(
v
>=
1
&&
v
<=
7
){
z
=
c
.
explode
(
k
.
font_size_style_values
);
u
=
c
.
explode
(
k
.
font_size_classes
);
if
(
u
){
v
=
u
[
v
-
1
]
||
v
}
else
{
v
=
z
[
v
-
1
]
||
v
}}
r
(
y
,
v
)},
RemoveFormat
:
function
(
u
){
n
.
formatter
.
remove
(
u
)},
mceBlockQuote
:
function
(
u
){
r
(
"blockquote"
)},
FormatBlock
:
function
(
x
,
v
,
u
){
return
r
(
u
||
"p"
)},
mceCleanup
:
function
(){
var
u
=
p
.
getBookmark
();
n
.
setContent
(
n
.
getContent
({
cleanup
:
a
}),{
cleanup
:
a
});
p
.
moveToBookmark
(
u
)},
mceRemoveNode
:
function
(
y
,
x
,
v
){
var
u
=
v
||
p
.
getNode
();
if
(
u
!=
n
.
getBody
()){
i
();
n
.
dom
.
remove
(
u
,
a
);
g
()}},
mceSelectNodeDepth
:
function
(
y
,
x
,
v
){
var
u
=
0
;
l
.
getParent
(
p
.
getNode
(),
function
(
z
){
if
(
z
.
nodeType
==
1
&&
u
++==
v
){
p
.
select
(
z
);
return
b
}},
n
.
getBody
())},
mceSelectNode
:
function
(
x
,
v
,
u
){
p
.
select
(
u
)},
mceInsertContent
:
function
(
z
,
D
,
E
){
var
C
,
u
,
x
,
F
,
y
,
u
,
A
,
G
,
B
;
function
v
(
I
,
J
,
H
){
var
K
=
new
c
.
dom
.
TreeWalker
(
H
?
I
.
nextSibling
:
I
.
previousSibling
,
J
);
while
((
I
=
K
.
current
())){
if
((
I
.
nodeType
==
3
&&
c
.
trim
(
I
.
nodeValue
).
length
)
||
I
.
nodeName
==
"BR"
||
I
.
nodeName
==
"IMG"
){
return
I
}
if
(
H
){
K
.
next
()}
else
{
K
.
prev
()}}}
B
=
{
content
:
E
,
format
:
"html"
};
p
.
onBeforeSetContent
.
dispatch
(
p
,
B
);
E
=
B
.
content
;
if
(
E
.
indexOf
(
"{$caret}"
)
==-
1
){
E
+=
"{$caret}"
}
p
.
setContent
(
'<span id="__mce">\uFEFF</span>'
,{
no_events
:
false
});
l
.
setOuterHTML
(
"__mce"
,
E
.
replace
(
/\{\$caret\}/
,
'<span data-mce-type="bookmark" id="__mce">\uFEFF</span>'
));
C
=
l
.
select
(
"#__mce"
)[
0
];
x
=
l
.
getRoot
();
if
(
C
.
previousSibling
&&
l
.
isBlock
(
C
.
previousSibling
)
||
C
.
parentNode
==
x
){
y
=
v
(
C
,
x
);
if
(
y
){
if
(
y
.
nodeName
==
"BR"
){
y
.
parentNode
.
insertBefore
(
C
,
y
)}
else
{
l
.
insertAfter
(
C
,
y
)}}}
while
(
C
){
if
(
C
===
x
){
l
.
setOuterHTML
(
F
,
new
c
.
html
.
Serializer
({},
n
.
schema
).
serialize
(
n
.
parser
.
parse
(
l
.
getOuterHTML
(
F
))));
break
}
F
=
C
;
C
=
C
.
parentNode
}
C
=
l
.
select
(
"#__mce"
)[
0
];
if
(
C
){
y
=
v
(
C
,
x
)
||
v
(
C
,
x
,
true
);
l
.
remove
(
C
);
if
(
y
){
u
=
l
.
createRng
();
if
(
y
.
nodeType
==
3
){
u
.
setStart
(
y
,
y
.
length
);
u
.
setEnd
(
y
,
y
.
length
)}
else
{
if
(
y
.
nodeName
==
"BR"
){
u
.
setStartBefore
(
y
);
u
.
setEndBefore
(
y
)}
else
{
u
.
setStartAfter
(
y
);
u
.
setEndAfter
(
y
)}}
p
.
setRng
(
u
);
if
(
!
c
.
isIE
){
y
=
l
.
create
(
"span"
,
null
,
"\u00a0"
);
u
.
insertNode
(
y
);
A
=
l
.
getRect
(
y
);
G
=
l
.
getViewPort
(
n
.
getWin
());
if
((
A
.
y
>
G
.
y
+
G
.
h
||
A
.
y
<
G
.
y
)
||
(
A
.
x
>
G
.
x
+
G
.
w
||
A
.
x
<
G
.
x
)){
n
.
getBody
().
scrollLeft
=
A
.
x
;
n
.
getBody
().
scrollTop
=
A
.
y
}
l
.
remove
(
y
)}
p
.
collapse
(
true
)}}
p
.
onSetContent
.
dispatch
(
p
,
B
);
n
.
addVisual
()},
mceInsertRawHTML
:
function
(
x
,
v
,
u
){
p
.
setContent
(
"tiny_mce_marker"
);
n
.
setContent
(
n
.
getContent
().
replace
(
/tiny_mce_marker/g
,
function
(){
return
u
}))},
mceSetContent
:
function
(
x
,
v
,
u
){
n
.
setContent
(
u
)},
"Indent,Outdent"
:
function
(
y
){
var
v
,
u
,
x
;
v
=
k
.
indentation
;
u
=
/[a-z%]+$/i
.
exec
(
v
);
v
=
parseInt
(
v
);
if
(
!
m
(
"InsertUnorderedList"
)
&&!
m
(
"InsertOrderedList"
)){
d
(
p
.
getSelectedBlocks
(),
function
(
z
){
if
(
y
==
"outdent"
){
x
=
Math
.
max
(
0
,
parseInt
(
z
.
style
.
paddingLeft
||
0
)
-
v
);
l
.
setStyle
(
z
,
"paddingLeft"
,
x
?
x
+
u
:
""
)}
else
{
l
.
setStyle
(
z
,
"paddingLeft"
,(
parseInt
(
z
.
style
.
paddingLeft
||
0
)
+
v
)
+
u
)}})}
else
{
f
(
y
)}},
mceRepaint
:
function
(){
var
v
;
if
(
c
.
isGecko
){
try
{
i
(
a
);
if
(
p
.
getSel
()){
p
.
getSel
().
selectAllChildren
(
n
.
getBody
())}
p
.
collapse
(
a
);
g
()}
catch
(
u
){}}},
mceToggleFormat
:
function
(
x
,
v
,
u
){
n
.
formatter
.
toggle
(
u
)},
InsertHorizontalRule
:
function
(){
n
.
execCommand
(
"mceInsertContent"
,
false
,
"<hr />"
)},
mceToggleVisualAid
:
function
(){
n
.
hasVisual
=!
n
.
hasVisual
;
n
.
addVisual
()},
mceReplaceContent
:
function
(
x
,
v
,
u
){
n
.
execCommand
(
"mceInsertContent"
,
false
,
u
.
replace
(
/\{\$selection\}/g
,
p
.
getContent
({
format
:
"text"
})))},
mceInsertLink
:
function
(
A
,
z
,
y
){
var
x
=
l
.
getParent
(
p
.
getNode
(),
"a"
),
v
,
u
;
if
(
c
.
is
(
y
,
"string"
)){
y
=
{
href
:
y
}}
y
.
href
=
y
.
href
.
replace
(
" "
,
"%20"
);
if
(
!
x
){
if
(
c
.
isWebKit
){
v
=
l
.
getParent
(
p
.
getNode
(),
"img"
);
if
(
v
){
u
=
v
.
style
.
cssFloat
;
v
.
style
.
cssFloat
=
null
}}
f
(
"CreateLink"
,
b
,
"javascript:mctmp(0);"
);
if
(
u
){
v
.
style
.
cssFloat
=
u
}
d
(
l
.
select
(
"a[href='javascript:mctmp(0);']"
),
function
(
B
){
l
.
setAttribs
(
B
,
y
)})}
else
{
if
(
y
.
href
){
l
.
setAttribs
(
x
,
y
)}
else
{
n
.
dom
.
remove
(
x
,
a
)}}},
selectAll
:
function
(){
var
v
=
l
.
getRoot
(),
u
=
l
.
createRng
();
u
.
setStart
(
v
,
0
);
u
.
setEnd
(
v
,
v
.
childNodes
.
length
);
n
.
selection
.
setRng
(
u
)}});
t
({
"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull"
:
function
(
u
){
return
s
(
"align"
+
u
.
substring
(
7
))},
"Bold,Italic,Underline,Strikethrough,Superscript,Subscript"
:
function
(
u
){
return
s
(
u
)},
mceBlockQuote
:
function
(){
return
s
(
"blockquote"
)},
Outdent
:
function
(){
var
u
;
if
(
k
.
inline_styles
){
if
((
u
=
l
.
getParent
(
p
.
getStart
(),
l
.
isBlock
))
&&
parseInt
(
u
.
style
.
paddingLeft
)
>
0
){
return
a
}
if
((
u
=
l
.
getParent
(
p
.
getEnd
(),
l
.
isBlock
))
&&
parseInt
(
u
.
style
.
paddingLeft
)
>
0
){
return
a
}}
return
m
(
"InsertUnorderedList"
)
||
m
(
"InsertOrderedList"
)
||
(
!
k
.
inline_styles
&&!!
l
.
getParent
(
p
.
getNode
(),
"BLOCKQUOTE"
))},
"InsertUnorderedList,InsertOrderedList"
:
function
(
u
){
return
l
.
getParent
(
p
.
getNode
(),
u
==
"insertunorderedlist"
?
"UL"
:
"OL"
)}},
"state"
);
t
({
"FontSize,FontName"
:
function
(
x
){
var
v
=
0
,
u
;
if
(
u
=
l
.
getParent
(
p
.
getNode
(),
"span"
)){
if
(
x
==
"fontsize"
){
v
=
u
.
style
.
fontSize
}
else
{
v
=
u
.
style
.
fontFamily
.
replace
(
/, /g
,
","
).
replace
(
/[\'\"]/g
,
""
).
toLowerCase
()}}
return
v
}},
"value"
);
if
(
k
.
custom_undo_redo
){
t
({
Undo
:
function
(){
n
.
undoManager
.
undo
()},
Redo
:
function
(){
n
.
undoManager
.
redo
()}})}}})(
tinymce
);(
function
(
b
){
var
a
=
b
.
util
.
Dispatcher
;
b
.
UndoManager
=
function
(
e
){
var
c
,
d
=
0
,
g
=
[];
function
f
(){
return
b
.
trim
(
e
.
getContent
({
format
:
"raw"
,
no_events
:
1
}))}
return
c
=
{
typing
:
false
,
onAdd
:
new
a
(
c
),
onUndo
:
new
a
(
c
),
onRedo
:
new
a
(
c
),
beforeChange
:
function
(){
if
(
g
[
d
]){
g
[
d
].
beforeBookmark
=
e
.
selection
.
getBookmark
(
2
,
true
)}},
add
:
function
(
l
){
var
h
,
j
=
e
.
settings
,
k
;
l
=
l
||
{};
l
.
content
=
f
();
k
=
g
[
d
];
if
(
k
&&
k
.
content
==
l
.
content
){
return
null
}
if
(
j
.
custom_undo_redo_levels
){
if
(
g
.
length
>
j
.
custom_undo_redo_levels
){
for
(
h
=
0
;
h
<
g
.
length
-
1
;
h
++
){
g
[
h
]
=
g
[
h
+
1
]}
g
.
length
--
;
d
=
g
.
length
}}
l
.
bookmark
=
e
.
selection
.
getBookmark
(
2
,
true
);
if
(
d
<
g
.
length
-
1
){
g
.
length
=
d
+
1
}
g
.
push
(
l
);
d
=
g
.
length
-
1
;
c
.
onAdd
.
dispatch
(
c
,
l
);
e
.
isNotDirty
=
0
;
return
l
},
undo
:
function
(){
var
j
,
h
;
if
(
c
.
typing
){
c
.
add
();
c
.
typing
=
false
}
if
(
d
>
0
){
j
=
g
[
--
d
];
e
.
setContent
(
j
.
content
,{
format
:
"raw"
});
e
.
selection
.
moveToBookmark
(
j
.
beforeBookmark
);
c
.
onUndo
.
dispatch
(
c
,
j
)}
return
j
},
redo
:
function
(){
var
h
;
if
(
d
<
g
.
length
-
1
){
h
=
g
[
++
d
];
e
.
setContent
(
h
.
content
,{
format
:
"raw"
});
e
.
selection
.
moveToBookmark
(
h
.
bookmark
);
c
.
onRedo
.
dispatch
(
c
,
h
)}
return
h
},
clear
:
function
(){
g
=
[];
d
=
0
;
c
.
typing
=
false
},
hasUndo
:
function
(){
return
d
>
0
||
this
.
typing
},
hasRedo
:
function
(){
return
d
<
g
.
length
-
1
&&!
this
.
typing
}}}})(
tinymce
);(
function
(
l
){
var
j
=
l
.
dom
.
Event
,
c
=
l
.
isIE
,
a
=
l
.
isGecko
,
b
=
l
.
isOpera
,
i
=
l
.
each
,
h
=
l
.
extend
,
d
=
true
,
g
=
false
;
function
k
(
o
){
var
p
,
n
,
m
;
do
{
if
(
/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/
.
test
(
o
.
nodeName
)){
if
(
p
){
n
=
o
.
cloneNode
(
false
);
n
.
appendChild
(
p
);
p
=
n
}
else
{
p
=
m
=
o
.
cloneNode
(
false
)}
p
.
removeAttribute
(
"id"
)}}
while
(
o
=
o
.
parentNode
);
if
(
p
){
return
{
wrapper
:
p
,
inner
:
m
}}}
function
f
(
n
,
o
){
var
m
=
o
.
ownerDocument
.
createRange
();
m
.
setStart
(
n
.
endContainer
,
n
.
endOffset
);
m
.
setEndAfter
(
o
);
return
m
.
cloneContents
().
textContent
.
length
==
0
}
function
e
(
o
,
q
,
m
){
var
n
,
p
;
if
(
q
.
isEmpty
(
m
)){
n
=
q
.
getParent
(
m
,
"ul,ol"
);
if
(
!
q
.
getParent
(
n
.
parentNode
,
"ul,ol"
)){
q
.
split
(
n
,
m
);
p
=
q
.
create
(
"p"
,
0
,
'<br data-mce-bogus="1" />'
);
q
.
replace
(
p
,
m
);
o
.
select
(
p
,
1
)}
return
g
}
return
d
}
l
.
create
(
"tinymce.ForceBlocks"
,{
ForceBlocks
:
function
(
m
){
var
n
=
this
,
o
=
m
.
settings
,
p
;
n
.
editor
=
m
;
n
.
dom
=
m
.
dom
;
p
=
(
o
.
forced_root_block
||
"p"
).
toLowerCase
();
o
.
element
=
p
.
toUpperCase
();
m
.
onPreInit
.
add
(
n
.
setup
,
n
);
if
(
o
.
forced_root_block
){
m
.
onInit
.
add
(
n
.
forceRoots
,
n
);
m
.
onSetContent
.
add
(
n
.
forceRoots
,
n
);
m
.
onBeforeGetContent
.
add
(
n
.
forceRoots
,
n
);
m
.
onExecCommand
.
add
(
function
(
q
,
r
){
if
(
r
==
"mceInsertContent"
){
n
.
forceRoots
();
q
.
nodeChanged
()}})}},
setup
:
function
(){
var
n
=
this
,
m
=
n
.
editor
,
p
=
m
.
settings
,
r
=
m
.
dom
,
o
=
m
.
selection
;
if
(
p
.
forced_root_block
){
m
.
onBeforeExecCommand
.
add
(
n
.
forceRoots
,
n
);
m
.
onKeyUp
.
add
(
n
.
forceRoots
,
n
);
m
.
onPreProcess
.
add
(
n
.
forceRoots
,
n
)}
if
(
p
.
force_br_newlines
){
if
(
c
){
m
.
onKeyPress
.
add
(
function
(
s
,
t
){
var
u
;
if
(
t
.
keyCode
==
13
&&
o
.
getNode
().
nodeName
!=
"LI"
){
o
.
setContent
(
'<br id="__" /> '
,{
format
:
"raw"
});
u
=
r
.
get
(
"__"
);
u
.
removeAttribute
(
"id"
);
o
.
select
(
u
);
o
.
collapse
();
return
j
.
cancel
(
t
)}})}}
if
(
p
.
force_p_newlines
){
if
(
!
c
){
m
.
onKeyPress
.
add
(
function
(
s
,
t
){
if
(
t
.
keyCode
==
13
&&!
t
.
shiftKey
&&!
n
.
insertPara
(
t
)){
j
.
cancel
(
t
)}})}
else
{
l
.
addUnload
(
function
(){
n
.
_previousFormats
=
0
});
m
.
onKeyPress
.
add
(
function
(
s
,
t
){
n
.
_previousFormats
=
0
;
if
(
t
.
keyCode
==
13
&&!
t
.
shiftKey
&&
s
.
selection
.
isCollapsed
()
&&
p
.
keep_styles
){
n
.
_previousFormats
=
k
(
s
.
selection
.
getStart
())}});
m
.
onKeyUp
.
add
(
function
(
t
,
v
){
if
(
v
.
keyCode
==
13
&&!
v
.
shiftKey
){
var
u
=
t
.
selection
.
getStart
(),
s
=
n
.
_previousFormats
;
if
(
!
u
.
hasChildNodes
()
&&
s
){
u
=
r
.
getParent
(
u
,
r
.
isBlock
);
if
(
u
&&
u
.
nodeName
!=
"LI"
){
u
.
innerHTML
=
""
;
if
(
n
.
_previousFormats
){
u
.
appendChild
(
s
.
wrapper
);
s
.
inner
.
innerHTML
=
"\uFEFF"
}
else
{
u
.
innerHTML
=
"\uFEFF"
}
o
.
select
(
u
,
1
);
o
.
collapse
(
true
);
t
.
getDoc
().
execCommand
(
"Delete"
,
false
,
null
);
n
.
_previousFormats
=
0
}}}})}
if
(
a
){
m
.
onKeyDown
.
add
(
function
(
s
,
t
){
if
((
t
.
keyCode
==
8
||
t
.
keyCode
==
46
)
&&!
t
.
shiftKey
){
n
.
backspaceDelete
(
t
,
t
.
keyCode
==
8
)}})}}
if
(
l
.
isWebKit
){
function
q
(
t
){
var
s
=
o
.
getRng
(),
u
,
y
=
r
.
create
(
"div"
,
null
,
" "
),
x
,
v
=
r
.
getViewPort
(
t
.
getWin
()).
h
;
s
.
insertNode
(
u
=
r
.
create
(
"br"
));
s
.
setStartAfter
(
u
);
s
.
setEndAfter
(
u
);
o
.
setRng
(
s
);
if
(
o
.
getSel
().
focusNode
==
u
.
previousSibling
){
o
.
select
(
r
.
insertAfter
(
r
.
doc
.
createTextNode
(
"\u00a0"
),
u
));
o
.
collapse
(
d
)}
r
.
insertAfter
(
y
,
u
);
x
=
r
.
getPos
(
y
).
y
;
r
.
remove
(
y
);
if
(
x
>
v
){
t
.
getWin
().
scrollTo
(
0
,
x
)}}
m
.
onKeyPress
.
add
(
function
(
s
,
t
){
if
(
t
.
keyCode
==
13
&&
(
t
.
shiftKey
||
(
p
.
force_br_newlines
&&!
r
.
getParent
(
o
.
getNode
(),
"h1,h2,h3,h4,h5,h6,ol,ul"
)))){
q
(
s
);
j
.
cancel
(
t
)}})}
if
(
c
){
if
(
p
.
element
!=
"P"
){
m
.
onKeyPress
.
add
(
function
(
s
,
t
){
n
.
lastElm
=
o
.
getNode
().
nodeName
});
m
.
onKeyUp
.
add
(
function
(
t
,
u
){
var
x
,
v
=
o
.
getNode
(),
s
=
t
.
getBody
();
if
(
s
.
childNodes
.
length
===
1
&&
v
.
nodeName
==
"P"
){
v
=
r
.
rename
(
v
,
p
.
element
);
o
.
select
(
v
);
o
.
collapse
();
t
.
nodeChanged
()}
else
{
if
(
u
.
keyCode
==
13
&&!
u
.
shiftKey
&&
n
.
lastElm
!=
"P"
){
x
=
r
.
getParent
(
v
,
"p"
);
if
(
x
){
r
.
rename
(
x
,
p
.
element
);
t
.
nodeChanged
()}}}})}}},
find
:
function
(
u
,
p
,
q
){
var
o
=
this
.
editor
,
m
=
o
.
getDoc
().
createTreeWalker
(
u
,
4
,
null
,
g
),
r
=-
1
;
while
(
u
=
m
.
nextNode
()){
r
++
;
if
(
p
==
0
&&
u
==
q
){
return
r
}
if
(
p
==
1
&&
r
==
q
){
return
u
}}
return
-
1
},
forceRoots
:
function
(
v
,
H
){
var
y
=
this
,
v
=
y
.
editor
,
L
=
v
.
getBody
(),
I
=
v
.
getDoc
(),
O
=
v
.
selection
,
z
=
O
.
getSel
(),
A
=
O
.
getRng
(),
M
=-
2
,
u
,
F
,
m
,
o
,
J
=-
16777215
;
var
K
,
p
,
N
,
E
,
B
,
q
=
L
.
childNodes
,
D
,
C
,
x
;
for
(
D
=
q
.
length
-
1
;
D
>=
0
;
D
--
){
K
=
q
[
D
];
if
(
K
.
nodeType
===
1
&&
K
.
getAttribute
(
"data-mce-type"
)){
p
=
null
;
continue
}
if
(
K
.
nodeType
===
3
||
(
!
y
.
dom
.
isBlock
(
K
)
&&
K
.
nodeType
!==
8
&&!
/^(script|mce:script|style|mce:style)$/i
.
test
(
K
.
nodeName
))){
if
(
!
p
){
if
(
K
.
nodeType
!=
3
||
/[^\s]/g
.
test
(
K
.
nodeValue
)){
if
(
M
==-
2
&&
A
){
if
(
!
c
||
A
.
setStart
){
if
(
A
.
startContainer
.
nodeType
==
1
&&
(
C
=
A
.
startContainer
.
childNodes
[
A
.
startOffset
])
&&
C
.
nodeType
==
1
){
x
=
C
.
getAttribute
(
"id"
);
C
.
setAttribute
(
"id"
,
"__mce"
)}
else
{
if
(
v
.
dom
.
getParent
(
A
.
startContainer
,
function
(
n
){
return
n
===
L
})){
F
=
A
.
startOffset
;
m
=
A
.
endOffset
;
M
=
y
.
find
(
L
,
0
,
A
.
startContainer
);
u
=
y
.
find
(
L
,
0
,
A
.
endContainer
)}}}
else
{
if
(
A
.
item
){
o
=
I
.
body
.
createTextRange
();
o
.
moveToElementText
(
A
.
item
(
0
));
A
=
o
}
o
=
I
.
body
.
createTextRange
();
o
.
moveToElementText
(
L
);
o
.
collapse
(
1
);
N
=
o
.
move
(
"character"
,
J
)
*-
1
;
o
=
A
.
duplicate
();
o
.
collapse
(
1
);
E
=
o
.
move
(
"character"
,
J
)
*-
1
;
o
=
A
.
duplicate
();
o
.
collapse
(
0
);
B
=
(
o
.
move
(
"character"
,
J
)
*-
1
)
-
E
;
M
=
E
-
N
;
u
=
B
}}
p
=
v
.
dom
.
create
(
v
.
settings
.
forced_root_block
);
K
.
parentNode
.
replaceChild
(
p
,
K
);
p
.
appendChild
(
K
)}}
else
{
if
(
p
.
hasChildNodes
()){
p
.
insertBefore
(
K
,
p
.
firstChild
)}
else
{
p
.
appendChild
(
K
)}}}
else
{
p
=
null
}}
if
(
M
!=-
2
){
if
(
!
c
||
A
.
setStart
){
p
=
L
.
getElementsByTagName
(
v
.
settings
.
element
)[
0
];
A
=
I
.
createRange
();
if
(
M
!=-
1
){
A
.
setStart
(
y
.
find
(
L
,
1
,
M
),
F
)}
else
{
A
.
setStart
(
p
,
0
)}
if
(
u
!=-
1
){
A
.
setEnd
(
y
.
find
(
L
,
1
,
u
),
m
)}
else
{
A
.
setEnd
(
p
,
0
)}
if
(
z
){
z
.
removeAllRanges
();
z
.
addRange
(
A
)}}
else
{
try
{
A
=
z
.
createRange
();
A
.
moveToElementText
(
L
);
A
.
collapse
(
1
);
A
.
moveStart
(
"character"
,
M
);
A
.
moveEnd
(
"character"
,
u
);
A
.
select
()}
catch
(
G
){}}}
else
{
if
((
!
c
||
A
.
setStart
)
&&
(
C
=
v
.
dom
.
get
(
"__mce"
))){
if
(
x
){
C
.
setAttribute
(
"id"
,
x
)}
else
{
C
.
removeAttribute
(
"id"
)}
A
=
I
.
createRange
();
A
.
setStartBefore
(
C
);
A
.
setEndBefore
(
C
);
O
.
setRng
(
A
)}}},
getParentBlock
:
function
(
o
){
var
m
=
this
.
dom
;
return
m
.
getParent
(
o
,
m
.
isBlock
)},
insertPara
:
function
(
R
){
var
F
=
this
,
v
=
F
.
editor
,
N
=
v
.
dom
,
S
=
v
.
getDoc
(),
W
=
v
.
settings
,
G
=
v
.
selection
.
getSel
(),
H
=
G
.
getRangeAt
(
0
),
V
=
S
.
body
;
var
K
,
L
,
I
,
P
,
O
,
q
,
o
,
u
,
z
,
m
,
D
,
U
,
p
,
x
,
J
,
M
=
N
.
getViewPort
(
v
.
getWin
()),
C
,
E
,
B
;
v
.
undoManager
.
beforeChange
();
K
=
S
.
createRange
();
K
.
setStart
(
G
.
anchorNode
,
G
.
anchorOffset
);
K
.
collapse
(
d
);
L
=
S
.
createRange
();
L
.
setStart
(
G
.
focusNode
,
G
.
focusOffset
);
L
.
collapse
(
d
);
I
=
K
.
compareBoundaryPoints
(
K
.
START_TO_END
,
L
)
<
0
;
P
=
I
?
G
.
anchorNode
:
G
.
focusNode
;
O
=
I
?
G
.
anchorOffset
:
G
.
focusOffset
;
q
=
I
?
G
.
focusNode
:
G
.
anchorNode
;
o
=
I
?
G
.
focusOffset
:
G
.
anchorOffset
;
if
(
P
===
q
&&
/^(TD|TH)$/
.
test
(
P
.
nodeName
)){
if
(
P
.
firstChild
.
nodeName
==
"BR"
){
N
.
remove
(
P
.
firstChild
)}
if
(
P
.
childNodes
.
length
==
0
){
v
.
dom
.
add
(
P
,
W
.
element
,
null
,
"<br />"
);
U
=
v
.
dom
.
add
(
P
,
W
.
element
,
null
,
"<br />"
)}
else
{
J
=
P
.
innerHTML
;
P
.
innerHTML
=
""
;
v
.
dom
.
add
(
P
,
W
.
element
,
null
,
J
);
U
=
v
.
dom
.
add
(
P
,
W
.
element
,
null
,
"<br />"
)}
H
=
S
.
createRange
();
H
.
selectNodeContents
(
U
);
H
.
collapse
(
1
);
v
.
selection
.
setRng
(
H
);
return
g
}
if
(
P
==
V
&&
q
==
V
&&
V
.
firstChild
&&
v
.
dom
.
isBlock
(
V
.
firstChild
)){
P
=
q
=
P
.
firstChild
;
O
=
o
=
0
;
K
=
S
.
createRange
();
K
.
setStart
(
P
,
0
);
L
=
S
.
createRange
();
L
.
setStart
(
q
,
0
)}
P
=
P
.
nodeName
==
"HTML"
?
S
.
body
:
P
;
P
=
P
.
nodeName
==
"BODY"
?
P
.
firstChild
:
P
;
q
=
q
.
nodeName
==
"HTML"
?
S
.
body
:
q
;
q
=
q
.
nodeName
==
"BODY"
?
q
.
firstChild
:
q
;
u
=
F
.
getParentBlock
(
P
);
z
=
F
.
getParentBlock
(
q
);
m
=
u
?
u
.
nodeName
:
W
.
element
;
if
(
J
=
F
.
dom
.
getParent
(
u
,
"li,pre"
)){
if
(
J
.
nodeName
==
"LI"
){
return
e
(
v
.
selection
,
F
.
dom
,
J
)}
return
d
}
if
(
u
&&
(
u
.
nodeName
==
"CAPTION"
||
/absolute|relative|fixed/gi
.
test
(
N
.
getStyle
(
u
,
"position"
,
1
)))){
m
=
W
.
element
;
u
=
null
}
if
(
z
&&
(
z
.
nodeName
==
"CAPTION"
||
/absolute|relative|fixed/gi
.
test
(
N
.
getStyle
(
u
,
"position"
,
1
)))){
m
=
W
.
element
;
z
=
null
}
if
(
/(TD|TABLE|TH|CAPTION)/
.
test
(
m
)
||
(
u
&&
m
==
"DIV"
&&
/left|right/gi
.
test
(
N
.
getStyle
(
u
,
"float"
,
1
)))){
m
=
W
.
element
;
u
=
z
=
null
}
D
=
(
u
&&
u
.
nodeName
==
m
)
?
u
.
cloneNode
(
0
)
:
v
.
dom
.
create
(
m
);
U
=
(
z
&&
z
.
nodeName
==
m
)
?
z
.
cloneNode
(
0
)
:
v
.
dom
.
create
(
m
);
U
.
removeAttribute
(
"id"
);
if
(
/^(H[1-6])$/
.
test
(
m
)
&&
f
(
H
,
u
)){
U
=
v
.
dom
.
create
(
W
.
element
)}
J
=
p
=
P
;
do
{
if
(
J
==
V
||
J
.
nodeType
==
9
||
F
.
dom
.
isBlock
(
J
)
||
/(TD|TABLE|TH|CAPTION)/
.
test
(
J
.
nodeName
)){
break
}
p
=
J
}
while
((
J
=
J
.
previousSibling
?
J
.
previousSibling
:
J
.
parentNode
));
J
=
x
=
q
;
do
{
if
(
J
==
V
||
J
.
nodeType
==
9
||
F
.
dom
.
isBlock
(
J
)
||
/(TD|TABLE|TH|CAPTION)/
.
test
(
J
.
nodeName
)){
break
}
x
=
J
}
while
((
J
=
J
.
nextSibling
?
J
.
nextSibling
:
J
.
parentNode
));
if
(
p
.
nodeName
==
m
){
K
.
setStart
(
p
,
0
)}
else
{
K
.
setStartBefore
(
p
)}
K
.
setEnd
(
P
,
O
);
D
.
appendChild
(
K
.
cloneContents
()
||
S
.
createTextNode
(
""
));
try
{
L
.
setEndAfter
(
x
)}
catch
(
Q
){}
L
.
setStart
(
q
,
o
);
U
.
appendChild
(
L
.
cloneContents
()
||
S
.
createTextNode
(
""
));
H
=
S
.
createRange
();
if
(
!
p
.
previousSibling
&&
p
.
parentNode
.
nodeName
==
m
){
H
.
setStartBefore
(
p
.
parentNode
)}
else
{
if
(
K
.
startContainer
.
nodeName
==
m
&&
K
.
startOffset
==
0
){
H
.
setStartBefore
(
K
.
startContainer
)}
else
{
H
.
setStart
(
K
.
startContainer
,
K
.
startOffset
)}}
if
(
!
x
.
nextSibling
&&
x
.
parentNode
.
nodeName
==
m
){
H
.
setEndAfter
(
x
.
parentNode
)}
else
{
H
.
setEnd
(
L
.
endContainer
,
L
.
endOffset
)}
H
.
deleteContents
();
if
(
b
){
v
.
getWin
().
scrollTo
(
0
,
M
.
y
)}
if
(
D
.
firstChild
&&
D
.
firstChild
.
nodeName
==
m
){
D
.
innerHTML
=
D
.
firstChild
.
innerHTML
}
if
(
U
.
firstChild
&&
U
.
firstChild
.
nodeName
==
m
){
U
.
innerHTML
=
U
.
firstChild
.
innerHTML
}
if
(
N
.
isEmpty
(
D
)){
D
.
innerHTML
=
"<br />"
}
function
T
(
y
,
s
){
var
r
=
[],
Y
,
X
,
t
;
y
.
innerHTML
=
""
;
if
(
W
.
keep_styles
){
X
=
s
;
do
{
if
(
/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/
.
test
(
X
.
nodeName
)){
Y
=
X
.
cloneNode
(
g
);
N
.
setAttrib
(
Y
,
"id"
,
""
);
r
.
push
(
Y
)}}
while
(
X
=
X
.
parentNode
)}
if
(
r
.
length
>
0
){
for
(
t
=
r
.
length
-
1
,
Y
=
y
;
t
>=
0
;
t
--
){
Y
=
Y
.
appendChild
(
r
[
t
])}
r
[
0
].
innerHTML
=
b
?
"\u00a0"
:
"<br />"
;
return
r
[
0
]}
else
{
y
.
innerHTML
=
b
?
"\u00a0"
:
"<br />"
}}
if
(
N
.
isEmpty
(
U
)){
B
=
T
(
U
,
q
)}
if
(
b
&&
parseFloat
(
opera
.
version
())
<
9.5
){
H
.
insertNode
(
D
);
H
.
insertNode
(
U
)}
else
{
H
.
insertNode
(
U
);
H
.
insertNode
(
D
)}
U
.
normalize
();
D
.
normalize
();
function
A
(
r
){
return
S
.
createTreeWalker
(
r
,
NodeFilter
.
SHOW_TEXT
,
null
,
g
).
nextNode
()
||
r
}
H
=
S
.
createRange
();
H
.
selectNodeContents
(
a
?
A
(
B
||
U
)
:
B
||
U
);
H
.
collapse
(
1
);
G
.
removeAllRanges
();
G
.
addRange
(
H
);
C
=
v
.
dom
.
getPos
(
U
).
y
;
if
(
C
<
M
.
y
||
C
+
25
>
M
.
y
+
M
.
h
){
v
.
getWin
().
scrollTo
(
0
,
C
<
M
.
y
?
C
:
C
-
M
.
h
+
25
)}
v
.
undoManager
.
add
();
return
g
},
backspaceDelete
:
function
(
u
,
B
){
var
C
=
this
,
s
=
C
.
editor
,
y
=
s
.
getBody
(),
q
=
s
.
dom
,
p
,
v
=
s
.
selection
,
o
=
v
.
getRng
(),
x
=
o
.
startContainer
,
p
,
z
,
A
,
m
;
if
(
!
B
&&
o
.
collapsed
&&
x
.
nodeType
==
1
&&
o
.
startOffset
==
x
.
childNodes
.
length
){
m
=
new
l
.
dom
.
TreeWalker
(
x
.
lastChild
,
x
);
for
(
p
=
x
.
lastChild
;
p
;
p
=
m
.
prev
()){
if
(
p
.
nodeType
==
3
){
o
.
setStart
(
p
,
p
.
nodeValue
.
length
);
o
.
collapse
(
true
);
v
.
setRng
(
o
);
return
}}}
if
(
x
&&
s
.
dom
.
isBlock
(
x
)
&&!
/^(TD|TH)$/
.
test
(
x
.
nodeName
)
&&
B
){
if
(
x
.
childNodes
.
length
==
0
||
(
x
.
childNodes
.
length
==
1
&&
x
.
firstChild
.
nodeName
==
"BR"
)){
p
=
x
;
while
((
p
=
p
.
previousSibling
)
&&!
s
.
dom
.
isBlock
(
p
)){}
if
(
p
){
if
(
x
!=
y
.
firstChild
){
z
=
s
.
dom
.
doc
.
createTreeWalker
(
p
,
NodeFilter
.
SHOW_TEXT
,
null
,
g
);
while
(
A
=
z
.
nextNode
()){
p
=
A
}
o
=
s
.
getDoc
().
createRange
();
o
.
setStart
(
p
,
p
.
nodeValue
?
p
.
nodeValue
.
length
:
0
);
o
.
setEnd
(
p
,
p
.
nodeValue
?
p
.
nodeValue
.
length
:
0
);
v
.
setRng
(
o
);
s
.
dom
.
remove
(
x
)}
return
j
.
cancel
(
u
)}}}}})})(
tinymce
);(
function
(
c
){
var
b
=
c
.
DOM
,
a
=
c
.
dom
.
Event
,
d
=
c
.
each
,
e
=
c
.
extend
;
c
.
create
(
"tinymce.ControlManager"
,{
ControlManager
:
function
(
f
,
j
){
var
h
=
this
,
g
;
j
=
j
||
{};
h
.
editor
=
f
;
h
.
controls
=
{};
h
.
onAdd
=
new
c
.
util
.
Dispatcher
(
h
);
h
.
onPostRender
=
new
c
.
util
.
Dispatcher
(
h
);
h
.
prefix
=
j
.
prefix
||
f
.
id
+
"_"
;
h
.
_cls
=
{};
h
.
onPostRender
.
add
(
function
(){
d
(
h
.
controls
,
function
(
i
){
i
.
postRender
()})})},
get
:
function
(
f
){
return
this
.
controls
[
this
.
prefix
+
f
]
||
this
.
controls
[
f
]},
setActive
:
function
(
h
,
f
){
var
g
=
null
;
if
(
g
=
this
.
get
(
h
)){
g
.
setActive
(
f
)}
return
g
},
setDisabled
:
function
(
h
,
f
){
var
g
=
null
;
if
(
g
=
this
.
get
(
h
)){
g
.
setDisabled
(
f
)}
return
g
},
add
:
function
(
g
){
var
f
=
this
;
if
(
g
){
f
.
controls
[
g
.
id
]
=
g
;
f
.
onAdd
.
dispatch
(
g
,
f
)}
return
g
},
createControl
:
function
(
i
){
var
h
,
g
=
this
,
f
=
g
.
editor
;
d
(
f
.
plugins
,
function
(
j
){
if
(
j
.
createControl
){
h
=
j
.
createControl
(
i
,
g
);
if
(
h
){
return
false
}}});
switch
(
i
){
case
"|"
:
case
"separator"
:
return
g
.
createSeparator
()}
if
(
!
h
&&
f
.
buttons
&&
(
h
=
f
.
buttons
[
i
])){
return
g
.
createButton
(
i
,
h
)}
return
g
.
add
(
h
)},
createDropMenu
:
function
(
f
,
n
,
h
){
var
m
=
this
,
i
=
m
.
editor
,
j
,
g
,
k
,
l
;
n
=
e
({
"class"
:
"mceDropDown"
,
constrain
:
i
.
settings
.
constrain_menus
},
n
);
n
[
"class"
]
=
n
[
"class"
]
+
" "
+
i
.
getParam
(
"skin"
)
+
"Skin"
;
if
(
k
=
i
.
getParam
(
"skin_variant"
)){
n
[
"class"
]
+=
" "
+
i
.
getParam
(
"skin"
)
+
"Skin"
+
k
.
substring
(
0
,
1
).
toUpperCase
()
+
k
.
substring
(
1
)}
f
=
m
.
prefix
+
f
;
l
=
h
||
m
.
_cls
.
dropmenu
||
c
.
ui
.
DropMenu
;
j
=
m
.
controls
[
f
]
=
new
l
(
f
,
n
);
j
.
onAddItem
.
add
(
function
(
r
,
q
){
var
p
=
q
.
settings
;
p
.
title
=
i
.
getLang
(
p
.
title
,
p
.
title
);
if
(
!
p
.
onclick
){
p
.
onclick
=
function
(
o
){
if
(
p
.
cmd
){
i
.
execCommand
(
p
.
cmd
,
p
.
ui
||
false
,
p
.
value
)}}}});
i
.
onRemove
.
add
(
function
(){
j
.
destroy
()});
if
(
c
.
isIE
){
j
.
onShowMenu
.
add
(
function
(){
i
.
focus
();
g
=
i
.
selection
.
getBookmark
(
1
)});
j
.
onHideMenu
.
add
(
function
(){
if
(
g
){
i
.
selection
.
moveToBookmark
(
g
);
g
=
0
}})}
return
m
.
add
(
j
)},
createListBox
:
function
(
m
,
i
,
l
){
var
h
=
this
,
g
=
h
.
editor
,
j
,
k
,
f
;
if
(
h
.
get
(
m
)){
return
null
}
i
.
title
=
g
.
translate
(
i
.
title
);
i
.
scope
=
i
.
scope
||
g
;
if
(
!
i
.
onselect
){
i
.
onselect
=
function
(
n
){
g
.
execCommand
(
i
.
cmd
,
i
.
ui
||
false
,
n
||
i
.
value
)}}
i
=
e
({
title
:
i
.
title
,
"class"
:
"mce_"
+
m
,
scope
:
i
.
scope
,
control_manager
:
h
},
i
);
m
=
h
.
prefix
+
m
;
if
(
g
.
settings
.
use_native_selects
){
k
=
new
c
.
ui
.
NativeListBox
(
m
,
i
)}
else
{
f
=
l
||
h
.
_cls
.
listbox
||
c
.
ui
.
ListBox
;
k
=
new
f
(
m
,
i
,
g
)}
h
.
controls
[
m
]
=
k
;
if
(
c
.
isWebKit
){
k
.
onPostRender
.
add
(
function
(
p
,
o
){
a
.
add
(
o
,
"mousedown"
,
function
(){
g
.
bookmark
=
g
.
selection
.
getBookmark
(
1
)});
a
.
add
(
o
,
"focus"
,
function
(){
g
.
selection
.
moveToBookmark
(
g
.
bookmark
);
g
.
bookmark
=
null
})})}
if
(
k
.
hideMenu
){
g
.
onMouseDown
.
add
(
k
.
hideMenu
,
k
)}
return
h
.
add
(
k
)},
createButton
:
function
(
m
,
i
,
l
){
var
h
=
this
,
g
=
h
.
editor
,
j
,
k
,
f
;
if
(
h
.
get
(
m
)){
return
null
}
i
.
title
=
g
.
translate
(
i
.
title
);
i
.
label
=
g
.
translate
(
i
.
label
);
i
.
scope
=
i
.
scope
||
g
;
if
(
!
i
.
onclick
&&!
i
.
menu_button
){
i
.
onclick
=
function
(){
g
.
execCommand
(
i
.
cmd
,
i
.
ui
||
false
,
i
.
value
)}}
i
=
e
({
title
:
i
.
title
,
"class"
:
"mce_"
+
m
,
unavailable_prefix
:
g
.
getLang
(
"unavailable"
,
""
),
scope
:
i
.
scope
,
control_manager
:
h
},
i
);
m
=
h
.
prefix
+
m
;
if
(
i
.
menu_button
){
f
=
l
||
h
.
_cls
.
menubutton
||
c
.
ui
.
MenuButton
;
k
=
new
f
(
m
,
i
,
g
);
g
.
onMouseDown
.
add
(
k
.
hideMenu
,
k
)}
else
{
f
=
h
.
_cls
.
button
||
c
.
ui
.
Button
;
k
=
new
f
(
m
,
i
)}
return
h
.
add
(
k
)},
createMenuButton
:
function
(
h
,
f
,
g
){
f
=
f
||
{};
f
.
menu_button
=
1
;
return
this
.
createButton
(
h
,
f
,
g
)},
createSplitButton
:
function
(
m
,
i
,
l
){
var
h
=
this
,
g
=
h
.
editor
,
j
,
k
,
f
;
if
(
h
.
get
(
m
)){
return
null
}
i
.
title
=
g
.
translate
(
i
.
title
);
i
.
scope
=
i
.
scope
||
g
;
if
(
!
i
.
onclick
){
i
.
onclick
=
function
(
n
){
g
.
execCommand
(
i
.
cmd
,
i
.
ui
||
false
,
n
||
i
.
value
)}}
if
(
!
i
.
onselect
){
i
.
onselect
=
function
(
n
){
g
.
execCommand
(
i
.
cmd
,
i
.
ui
||
false
,
n
||
i
.
value
)}}
i
=
e
({
title
:
i
.
title
,
"class"
:
"mce_"
+
m
,
scope
:
i
.
scope
,
control_manager
:
h
},
i
);
m
=
h
.
prefix
+
m
;
f
=
l
||
h
.
_cls
.
splitbutton
||
c
.
ui
.
SplitButton
;
k
=
h
.
add
(
new
f
(
m
,
i
,
g
));
g
.
onMouseDown
.
add
(
k
.
hideMenu
,
k
);
return
k
},
createColorSplitButton
:
function
(
f
,
n
,
h
){
var
l
=
this
,
j
=
l
.
editor
,
i
,
k
,
m
,
g
;
if
(
l
.
get
(
f
)){
return
null
}
n
.
title
=
j
.
translate
(
n
.
title
);
n
.
scope
=
n
.
scope
||
j
;
if
(
!
n
.
onclick
){
n
.
onclick
=
function
(
o
){
if
(
c
.
isIE
){
g
=
j
.
selection
.
getBookmark
(
1
)}
j
.
execCommand
(
n
.
cmd
,
n
.
ui
||
false
,
o
||
n
.
value
)}}
if
(
!
n
.
onselect
){
n
.
onselect
=
function
(
o
){
j
.
execCommand
(
n
.
cmd
,
n
.
ui
||
false
,
o
||
n
.
value
)}}
n
=
e
({
title
:
n
.
title
,
"class"
:
"mce_"
+
f
,
menu_class
:
j
.
getParam
(
"skin"
)
+
"Skin"
,
scope
:
n
.
scope
,
more_colors_title
:
j
.
getLang
(
"more_colors"
)},
n
);
f
=
l
.
prefix
+
f
;
m
=
h
||
l
.
_cls
.
colorsplitbutton
||
c
.
ui
.
ColorSplitButton
;
k
=
new
m
(
f
,
n
,
j
);
j
.
onMouseDown
.
add
(
k
.
hideMenu
,
k
);
j
.
onRemove
.
add
(
function
(){
k
.
destroy
()});
if
(
c
.
isIE
){
k
.
onShowMenu
.
add
(
function
(){
j
.
focus
();
g
=
j
.
selection
.
getBookmark
(
1
)});
k
.
onHideMenu
.
add
(
function
(){
if
(
g
){
j
.
selection
.
moveToBookmark
(
g
);
g
=
0
}})}
return
l
.
add
(
k
)},
createToolbar
:
function
(
k
,
h
,
j
){
var
i
,
g
=
this
,
f
;
k
=
g
.
prefix
+
k
;
f
=
j
||
g
.
_cls
.
toolbar
||
c
.
ui
.
Toolbar
;
i
=
new
f
(
k
,
h
,
g
.
editor
);
if
(
g
.
get
(
k
)){
return
null
}
return
g
.
add
(
i
)},
createToolbarGroup
:
function
(
k
,
h
,
j
){
var
i
,
g
=
this
,
f
;
k
=
g
.
prefix
+
k
;
f
=
j
||
this
.
_cls
.
toolbarGroup
||
c
.
ui
.
ToolbarGroup
;
i
=
new
f
(
k
,
h
,
g
.
editor
);
if
(
g
.
get
(
k
)){
return
null
}
return
g
.
add
(
i
)},
createSeparator
:
function
(
g
){
var
f
=
g
||
this
.
_cls
.
separator
||
c
.
ui
.
Separator
;
return
new
f
()},
setControlType
:
function
(
g
,
f
){
return
this
.
_cls
[
g
.
toLowerCase
()]
=
f
},
destroy
:
function
(){
d
(
this
.
controls
,
function
(
f
){
f
.
destroy
()});
this
.
controls
=
null
}})})(
tinymce
);(
function
(
d
){
var
a
=
d
.
util
.
Dispatcher
,
e
=
d
.
each
,
c
=
d
.
isIE
,
b
=
d
.
isOpera
;
d
.
create
(
"tinymce.WindowManager"
,{
WindowManager
:
function
(
f
){
var
g
=
this
;
g
.
editor
=
f
;
g
.
onOpen
=
new
a
(
g
);
g
.
onClose
=
new
a
(
g
);
g
.
params
=
{};
g
.
features
=
{}},
open
:
function
(
z
,
h
){
var
v
=
this
,
k
=
""
,
n
,
m
,
i
=
v
.
editor
.
settings
.
dialog_type
==
"modal"
,
q
,
o
,
j
,
g
=
d
.
DOM
.
getViewPort
(),
r
;
z
=
z
||
{};
h
=
h
||
{};
o
=
b
?
g
.
w
:
screen
.
width
;
j
=
b
?
g
.
h
:
screen
.
height
;
z
.
name
=
z
.
name
||
"mc_"
+
new
Date
().
getTime
();
z
.
width
=
parseInt
(
z
.
width
||
320
);
z
.
height
=
parseInt
(
z
.
height
||
240
);
z
.
resizable
=
true
;
z
.
left
=
z
.
left
||
parseInt
(
o
/
2
)
-
(
z
.
width
/
2
);
z
.
top
=
z
.
top
||
parseInt
(
j
/
2
)
-
(
z
.
height
/
2
);
h
.
inline
=
false
;
h
.
mce_width
=
z
.
width
;
h
.
mce_height
=
z
.
height
;
h
.
mce_auto_focus
=
z
.
auto_focus
;
if
(
i
){
if
(
c
){
z
.
center
=
true
;
z
.
help
=
false
;
z
.
dialogWidth
=
z
.
width
+
"px"
;
z
.
dialogHeight
=
z
.
height
+
"px"
;
z
.
scroll
=
z
.
scrollbars
||
false
}}
e
(
z
,
function
(
p
,
f
){
if
(
d
.
is
(
p
,
"boolean"
)){
p
=
p
?
"yes"
:
"no"
}
if
(
!
/^(name|url)$/
.
test
(
f
)){
if
(
c
&&
i
){
k
+=
(
k
?
";"
:
""
)
+
f
+
":"
+
p
}
else
{
k
+=
(
k
?
","
:
""
)
+
f
+
"="
+
p
}}});
v
.
features
=
z
;
v
.
params
=
h
;
v
.
onOpen
.
dispatch
(
v
,
z
,
h
);
r
=
z
.
url
||
z
.
file
;
r
=
d
.
_addVer
(
r
);
try
{
if
(
c
&&
i
){
q
=
1
;
window
.
showModalDialog
(
r
,
window
,
k
)}
else
{
q
=
window
.
open
(
r
,
z
.
name
,
k
)}}
catch
(
l
){}
if
(
!
q
){
alert
(
v
.
editor
.
getLang
(
"popup_blocked"
))}},
close
:
function
(
f
){
f
.
close
();
this
.
onClose
.
dispatch
(
this
)},
createInstance
:
function
(
i
,
h
,
g
,
m
,
l
,
k
){
var
j
=
d
.
resolve
(
i
);
return
new
j
(
h
,
g
,
m
,
l
,
k
)},
confirm
:
function
(
h
,
f
,
i
,
g
){
g
=
g
||
window
;
f
.
call
(
i
||
this
,
g
.
confirm
(
this
.
_decode
(
this
.
editor
.
getLang
(
h
,
h
))))},
alert
:
function
(
h
,
f
,
j
,
g
){
var
i
=
this
;
g
=
g
||
window
;
g
.
alert
(
i
.
_decode
(
i
.
editor
.
getLang
(
h
,
h
)));
if
(
f
){
f
.
call
(
j
||
i
)}},
resizeBy
:
function
(
f
,
g
,
h
){
h
.
resizeBy
(
f
,
g
)},
_decode
:
function
(
f
){
return
d
.
DOM
.
decode
(
f
).
replace
(
/\\n/g
,
"\n"
)}})}(
tinymce
));(
function
(
a
){
a
.
Formatter
=
function
(
V
){
var
M
=
{},
O
=
a
.
each
,
c
=
V
.
dom
,
q
=
V
.
selection
,
t
=
a
.
dom
.
TreeWalker
,
K
=
new
a
.
dom
.
RangeUtils
(
c
),
d
=
V
.
schema
.
isValidChild
,
F
=
c
.
isBlock
,
l
=
V
.
settings
.
forced_root_block
,
s
=
c
.
nodeIndex
,
E
=
"\uFEFF"
,
e
=
/^(src|href|style)$/
,
S
=
false
,
B
=
true
,
p
,
P
=
{
apply
:
[],
remove
:
[]};
function
z
(
W
){
return
W
instanceof
Array
}
function
m
(
X
,
W
){
return
c
.
getParents
(
X
,
W
,
c
.
getRoot
())}
function
b
(
W
){
return
W
.
nodeType
===
1
&&
(
W
.
face
===
"mceinline"
||
W
.
style
.
fontFamily
===
"mceinline"
)}
function
R
(
W
){
return
W
?
M
[
W
]
:
M
}
function
k
(
W
,
X
){
if
(
W
){
if
(
typeof
(
W
)
!==
"string"
){
O
(
W
,
function
(
Z
,
Y
){
k
(
Y
,
Z
)})}
else
{
X
=
X
.
length
?
X
:
[
X
];
O
(
X
,
function
(
Y
){
if
(
Y
.
deep
===
p
){
Y
.
deep
=!
Y
.
selector
}
if
(
Y
.
split
===
p
){
Y
.
split
=!
Y
.
selector
||
Y
.
inline
}
if
(
Y
.
remove
===
p
&&
Y
.
selector
&&!
Y
.
inline
){
Y
.
remove
=
"none"
}
if
(
Y
.
selector
&&
Y
.
inline
){
Y
.
mixed
=
true
;
Y
.
block_expand
=
true
}
if
(
typeof
(
Y
.
classes
)
===
"string"
){
Y
.
classes
=
Y
.
classes
.
split
(
/\s+/
)}});
M
[
W
]
=
X
}}}
var
i
=
function
(
X
){
var
W
;
V
.
dom
.
getParent
(
X
,
function
(
Y
){
W
=
V
.
dom
.
getStyle
(
Y
,
"text-decoration"
);
return
W
&&
W
!==
"none"
});
return
W
};
var
I
=
function
(
W
){
var
X
;
if
(
W
.
nodeType
===
1
&&
W
.
parentNode
&&
W
.
parentNode
.
nodeType
===
1
){
X
=
i
(
W
.
parentNode
);
if
(
V
.
dom
.
getStyle
(
W
,
"color"
)
&&
X
){
V
.
dom
.
setStyle
(
W
,
"text-decoration"
,
X
)}
else
{
if
(
V
.
dom
.
getStyle
(
W
,
"textdecoration"
)
===
X
){
V
.
dom
.
setStyle
(
W
,
"text-decoration"
,
null
)}}}};
function
T
(
Y
,
af
,
aa
){
var
ab
=
R
(
Y
),
ag
=
ab
[
0
],
ae
,
X
,
ad
,
ac
=
q
.
isCollapsed
();
function
Z
(
ak
){
var
aj
=
ak
.
startContainer
,
an
=
ak
.
startOffset
,
am
,
al
;
if
(
aj
.
nodeType
==
1
||
aj
.
nodeValue
===
""
){
aj
=
aj
.
nodeType
==
1
?
aj
.
childNodes
[
an
]
:
aj
;
if
(
aj
){
am
=
new
t
(
aj
,
aj
.
parentNode
);
for
(
al
=
am
.
current
();
al
;
al
=
am
.
next
()){
if
(
al
.
nodeType
==
3
&&!
f
(
al
)){
ak
.
setStart
(
al
,
0
);
break
}}}}
return
ak
}
function
W
(
ak
,
aj
){
aj
=
aj
||
ag
;
if
(
ak
){
O
(
aj
.
styles
,
function
(
am
,
al
){
c
.
setStyle
(
ak
,
al
,
r
(
am
,
af
))});
O
(
aj
.
attributes
,
function
(
am
,
al
){
c
.
setAttrib
(
ak
,
al
,
r
(
am
,
af
))});
O
(
aj
.
classes
,
function
(
al
){
al
=
r
(
al
,
af
);
if
(
!
c
.
hasClass
(
ak
,
al
)){
c
.
addClass
(
ak
,
al
)}})}}
function
ah
(
ak
){
var
aj
=
[],
am
,
al
;
am
=
ag
.
inline
||
ag
.
block
;
al
=
c
.
create
(
am
);
W
(
al
);
K
.
walk
(
ak
,
function
(
an
){
var
ao
;
function
ap
(
aq
){
var
au
=
aq
.
nodeName
.
toLowerCase
(),
at
=
aq
.
parentNode
.
nodeName
.
toLowerCase
(),
ar
;
if
(
g
(
au
,
"br"
)){
ao
=
0
;
if
(
ag
.
block
){
c
.
remove
(
aq
)}
return
}
if
(
ag
.
wrapper
&&
x
(
aq
,
Y
,
af
)){
ao
=
0
;
return
}
if
(
ag
.
block
&&!
ag
.
wrapper
&&
G
(
au
)){
aq
=
c
.
rename
(
aq
,
am
);
W
(
aq
);
aj
.
push
(
aq
);
ao
=
0
;
return
}
if
(
ag
.
selector
){
O
(
ab
,
function
(
av
){
if
(
"collapsed"
in
av
&&
av
.
collapsed
!==
ac
){
return
}
if
(
c
.
is
(
aq
,
av
.
selector
)
&&!
b
(
aq
)){
W
(
aq
,
av
);
ar
=
true
}});
if
(
!
ag
.
inline
||
ar
){
ao
=
0
;
return
}}
if
(
d
(
am
,
au
)
&&
d
(
at
,
am
)
&&!
(
aq
.
nodeType
===
3
&&
aq
.
nodeValue
.
length
===
1
&&
aq
.
nodeValue
.
charCodeAt
(
0
)
===
65279
)){
if
(
!
ao
){
ao
=
al
.
cloneNode
(
S
);
aq
.
parentNode
.
insertBefore
(
ao
,
aq
);
aj
.
push
(
ao
)}
ao
.
appendChild
(
aq
)}
else
{
ao
=
0
;
O
(
a
.
grep
(
aq
.
childNodes
),
ap
);
ao
=
0
}}
O
(
an
,
ap
)});
if
(
ag
.
wrap_links
===
false
){
O
(
aj
,
function
(
an
){
function
ao
(
at
){
var
ar
,
aq
,
ap
;
if
(
at
.
nodeName
===
"A"
){
aq
=
al
.
cloneNode
(
S
);
aj
.
push
(
aq
);
ap
=
a
.
grep
(
at
.
childNodes
);
for
(
ar
=
0
;
ar
<
ap
.
length
;
ar
++
){
aq
.
appendChild
(
ap
[
ar
])}
at
.
appendChild
(
aq
)}
O
(
a
.
grep
(
at
.
childNodes
),
ao
)}
ao
(
an
)})}
O
(
aj
,
function
(
ap
){
var
an
;
function
aq
(
at
){
var
ar
=
0
;
O
(
at
.
childNodes
,
function
(
au
){
if
(
!
f
(
au
)
&&!
H
(
au
)){
ar
++
}});
return
ar
}
function
ao
(
ar
){
var
au
,
at
;
O
(
ar
.
childNodes
,
function
(
av
){
if
(
av
.
nodeType
==
1
&&!
H
(
av
)
&&!
b
(
av
)){
au
=
av
;
return
S
}});
if
(
au
&&
h
(
au
,
ag
)){
at
=
au
.
cloneNode
(
S
);
W
(
at
);
c
.
replace
(
at
,
ar
,
B
);
c
.
remove
(
au
,
1
)}
return
at
||
ar
}
an
=
aq
(
ap
);
if
((
aj
.
length
>
1
||!
F
(
ap
))
&&
an
===
0
){
c
.
remove
(
ap
,
1
);
return
}
if
(
ag
.
inline
||
ag
.
wrapper
){
if
(
!
ag
.
exact
&&
an
===
1
){
ap
=
ao
(
ap
)}
O
(
ab
,
function
(
ar
){
O
(
c
.
select
(
ar
.
inline
,
ap
),
function
(
au
){
var
at
;
if
(
ar
.
wrap_links
===
false
){
at
=
au
.
parentNode
;
do
{
if
(
at
.
nodeName
===
"A"
){
return
}}
while
(
at
=
at
.
parentNode
)}
U
(
ar
,
af
,
au
,
ar
.
exact
?
au
:
null
)})});
if
(
x
(
ap
.
parentNode
,
Y
,
af
)){
c
.
remove
(
ap
,
1
);
ap
=
0
;
return
B
}
if
(
ag
.
merge_with_parents
){
c
.
getParent
(
ap
.
parentNode
,
function
(
ar
){
if
(
x
(
ar
,
Y
,
af
)){
c
.
remove
(
ap
,
1
);
ap
=
0
;
return
B
}})}
if
(
ap
){
ap
=
u
(
C
(
ap
),
ap
);
ap
=
u
(
ap
,
C
(
ap
,
B
))}}})}
if
(
ag
){
if
(
aa
){
X
=
c
.
createRng
();
X
.
setStartBefore
(
aa
);
X
.
setEndAfter
(
aa
);
ah
(
o
(
X
,
ab
))}
else
{
if
(
!
ac
||!
ag
.
inline
||
c
.
select
(
"td.mceSelected,th.mceSelected"
).
length
){
var
ai
=
V
.
selection
.
getNode
();
ae
=
q
.
getBookmark
();
ah
(
o
(
q
.
getRng
(
B
),
ab
));
if
(
ag
.
styles
&&
(
ag
.
styles
.
color
||
ag
.
styles
.
textDecoration
)){
a
.
walk
(
ai
,
I
,
"childNodes"
);
I
(
ai
)}
q
.
moveToBookmark
(
ae
);
q
.
setRng
(
Z
(
q
.
getRng
(
B
)));
V
.
nodeChanged
()}
else
{
Q
(
"apply"
,
Y
,
af
)}}}}
function
A
(
Y
,
ah
,
ab
){
var
ac
=
R
(
Y
),
aj
=
ac
[
0
],
ag
,
af
,
X
;
function
aa
(
am
){
var
al
=
am
.
startContainer
,
ar
=
am
.
startOffset
,
aq
,
ap
,
an
,
ao
;
if
(
al
.
nodeType
==
3
&&
ar
>=
al
.
nodeValue
.
length
-
1
){
al
=
al
.
parentNode
;
ar
=
s
(
al
)
+
1
}
if
(
al
.
nodeType
==
1
){
an
=
al
.
childNodes
;
al
=
an
[
Math
.
min
(
ar
,
an
.
length
-
1
)];
aq
=
new
t
(
al
);
if
(
ar
>
an
.
length
-
1
){
aq
.
next
()}
for
(
ap
=
aq
.
current
();
ap
;
ap
=
aq
.
next
()){
if
(
ap
.
nodeType
==
3
&&!
f
(
ap
)){
ao
=
c
.
create
(
"a"
,
null
,
E
);
ap
.
parentNode
.
insertBefore
(
ao
,
ap
);
am
.
setStart
(
ap
,
0
);
q
.
setRng
(
am
);
c
.
remove
(
ao
);
return
}}}}
function
Z
(
ao
){
var
an
,
am
,
al
;
an
=
a
.
grep
(
ao
.
childNodes
);
for
(
am
=
0
,
al
=
ac
.
length
;
am
<
al
;
am
++
){
if
(
U
(
ac
[
am
],
ah
,
ao
,
ao
)){
break
}}
if
(
aj
.
deep
){
for
(
am
=
0
,
al
=
an
.
length
;
am
<
al
;
am
++
){
Z
(
an
[
am
])}}}
function
ad
(
al
){
var
am
;
O
(
m
(
al
.
parentNode
).
reverse
(),
function
(
an
){
var
ao
;
if
(
!
am
&&
an
.
id
!=
"_start"
&&
an
.
id
!=
"_end"
){
ao
=
x
(
an
,
Y
,
ah
);
if
(
ao
&&
ao
.
split
!==
false
){
am
=
an
}}});
return
am
}
function
W
(
ao
,
al
,
aq
,
au
){
var
av
,
at
,
ar
,
an
,
ap
,
am
;
if
(
ao
){
am
=
ao
.
parentNode
;
for
(
av
=
al
.
parentNode
;
av
&&
av
!=
am
;
av
=
av
.
parentNode
){
at
=
av
.
cloneNode
(
S
);
for
(
ap
=
0
;
ap
<
ac
.
length
;
ap
++
){
if
(
U
(
ac
[
ap
],
ah
,
at
,
at
)){
at
=
0
;
break
}}
if
(
at
){
if
(
ar
){
at
.
appendChild
(
ar
)}
if
(
!
an
){
an
=
at
}
ar
=
at
}}
if
(
au
&&
(
!
aj
.
mixed
||!
F
(
ao
))){
al
=
c
.
split
(
ao
,
al
)}
if
(
ar
){
aq
.
parentNode
.
insertBefore
(
ar
,
aq
);
an
.
appendChild
(
aq
)}}
return
al
}
function
ai
(
al
){
return
W
(
ad
(
al
),
al
,
al
,
true
)}
function
ae
(
an
){
var
am
=
c
.
get
(
an
?
"_start"
:
"_end"
),
al
=
am
[
an
?
"firstChild"
:
"lastChild"
];
if
(
H
(
al
)){
al
=
al
[
an
?
"firstChild"
:
"lastChild"
]}
c
.
remove
(
am
,
true
);
return
al
}
function
ak
(
al
){
var
am
,
an
;
al
=
o
(
al
,
ac
,
B
);
if
(
aj
.
split
){
am
=
J
(
al
,
B
);
an
=
J
(
al
);
if
(
am
!=
an
){
am
=
N
(
am
,
"span"
,{
id
:
"_start"
,
"data-mce-type"
:
"bookmark"
});
an
=
N
(
an
,
"span"
,{
id
:
"_end"
,
"data-mce-type"
:
"bookmark"
});
ai
(
am
);
ai
(
an
);
am
=
ae
(
B
);
an
=
ae
()}
else
{
am
=
an
=
ai
(
am
)}
al
.
startContainer
=
am
.
parentNode
;
al
.
startOffset
=
s
(
am
);
al
.
endContainer
=
an
.
parentNode
;
al
.
endOffset
=
s
(
an
)
+
1
}
K
.
walk
(
al
,
function
(
ao
){
O
(
ao
,
function
(
ap
){
Z
(
ap
);
if
(
ap
.
nodeType
===
1
&&
V
.
dom
.
getStyle
(
ap
,
"text-decoration"
)
===
"underline"
&&
ap
.
parentNode
&&
i
(
ap
.
parentNode
)
===
"underline"
){
U
({
deep
:
false
,
exact
:
true
,
inline
:
"span"
,
styles
:
{
textDecoration
:
"underline"
}},
null
,
ap
)}})})}
if
(
ab
){
X
=
c
.
createRng
();
X
.
setStartBefore
(
ab
);
X
.
setEndAfter
(
ab
);
ak
(
X
);
return
}
if
(
!
q
.
isCollapsed
()
||!
aj
.
inline
||
c
.
select
(
"td.mceSelected,th.mceSelected"
).
length
){
ag
=
q
.
getBookmark
();
ak
(
q
.
getRng
(
B
));
q
.
moveToBookmark
(
ag
);
if
(
j
(
Y
,
ah
,
q
.
getStart
())){
aa
(
q
.
getRng
(
true
))}
V
.
nodeChanged
()}
else
{
Q
(
"remove"
,
Y
,
ah
)}}
function
D
(
X
,
Z
,
Y
){
var
W
=
R
(
X
);
if
(
j
(
X
,
Z
,
Y
)
&&
(
!
(
"toggle"
in
W
[
0
])
||
W
[
0
][
"toggle"
])){
A
(
X
,
Z
,
Y
)}
else
{
T
(
X
,
Z
,
Y
)}}
function
x
(
X
,
W
,
ac
,
aa
){
var
Y
=
R
(
W
),
ad
,
ab
,
Z
;
function
ae
(
ai
,
ak
,
al
){
var
ah
,
aj
,
af
=
ak
[
al
],
ag
;
if
(
af
){
if
(
af
.
length
===
p
){
for
(
ah
in
af
){
if
(
af
.
hasOwnProperty
(
ah
)){
if
(
al
===
"attributes"
){
aj
=
c
.
getAttrib
(
ai
,
ah
)}
else
{
aj
=
L
(
ai
,
ah
)}
if
(
aa
&&!
aj
&&!
ak
.
exact
){
return
}
if
((
!
aa
||
ak
.
exact
)
&&!
g
(
aj
,
r
(
af
[
ah
],
ac
))){
return
}}}}
else
{
for
(
ag
=
0
;
ag
<
af
.
length
;
ag
++
){
if
(
al
===
"attributes"
?
c
.
getAttrib
(
ai
,
af
[
ag
])
:
L
(
ai
,
af
[
ag
])){
return
ak
}}}}
return
ak
}
if
(
Y
&&
X
){
for
(
ab
=
0
;
ab
<
Y
.
length
;
ab
++
){
ad
=
Y
[
ab
];
if
(
h
(
X
,
ad
)
&&
ae
(
X
,
ad
,
"attributes"
)
&&
ae
(
X
,
ad
,
"styles"
)){
if
(
Z
=
ad
.
classes
){
for
(
ab
=
0
;
ab
<
Z
.
length
;
ab
++
){
if
(
!
c
.
hasClass
(
X
,
Z
[
ab
])){
return
}}}
return
ad
}}}}
function
j
(
Y
,
ab
,
aa
){
var
X
,
Z
;
function
W
(
ac
){
ac
=
c
.
getParent
(
ac
,
function
(
ad
){
return
!!
x
(
ad
,
Y
,
ab
,
true
)});
return
x
(
ac
,
Y
,
ab
)}
if
(
aa
){
return
W
(
aa
)}
if
(
q
.
isCollapsed
()){
for
(
Z
=
P
.
apply
.
length
-
1
;
Z
>=
0
;
Z
--
){
if
(
P
.
apply
[
Z
].
name
==
Y
){
return
true
}}
for
(
Z
=
P
.
remove
.
length
-
1
;
Z
>=
0
;
Z
--
){
if
(
P
.
remove
[
Z
].
name
==
Y
){
return
false
}}
return
W
(
q
.
getNode
())}
aa
=
q
.
getNode
();
if
(
W
(
aa
)){
return
B
}
X
=
q
.
getStart
();
if
(
X
!=
aa
){
if
(
W
(
X
)){
return
B
}}
return
S
}
function
v
(
ad
,
ac
){
var
aa
,
ab
=
[],
Z
=
{},
Y
,
X
,
W
;
if
(
q
.
isCollapsed
()){
for
(
X
=
0
;
X
<
ad
.
length
;
X
++
){
for
(
Y
=
P
.
remove
.
length
-
1
;
Y
>=
0
;
Y
--
){
W
=
ad
[
X
];
if
(
P
.
remove
[
Y
].
name
==
W
){
Z
[
W
]
=
true
;
break
}}}
for
(
Y
=
P
.
apply
.
length
-
1
;
Y
>=
0
;
Y
--
){
for
(
X
=
0
;
X
<
ad
.
length
;
X
++
){
W
=
ad
[
X
];
if
(
!
Z
[
W
]
&&
P
.
apply
[
Y
].
name
==
W
){
Z
[
W
]
=
true
;
ab
.
push
(
W
)}}}}
aa
=
q
.
getStart
();
c
.
getParent
(
aa
,
function
(
ag
){
var
af
,
ae
;
for
(
af
=
0
;
af
<
ad
.
length
;
af
++
){
ae
=
ad
[
af
];
if
(
!
Z
[
ae
]
&&
x
(
ag
,
ae
,
ac
)){
Z
[
ae
]
=
true
;
ab
.
push
(
ae
)}}});
return
ab
}
function
y
(
aa
){
var
ac
=
R
(
aa
),
Z
,
Y
,
ab
,
X
,
W
;
if
(
ac
){
Z
=
q
.
getStart
();
Y
=
m
(
Z
);
for
(
X
=
ac
.
length
-
1
;
X
>=
0
;
X
--
){
W
=
ac
[
X
].
selector
;
if
(
!
W
){
return
B
}
for
(
ab
=
Y
.
length
-
1
;
ab
>=
0
;
ab
--
){
if
(
c
.
is
(
Y
[
ab
],
W
)){
return
B
}}}}
return
S
}
a
.
extend
(
this
,{
get
:
R
,
register
:
k
,
apply
:
T
,
remove
:
A
,
toggle
:
D
,
match
:
j
,
matchAll
:
v
,
matchNode
:
x
,
canApply
:
y
});
function
h
(
W
,
X
){
if
(
g
(
W
,
X
.
inline
)){
return
B
}
if
(
g
(
W
,
X
.
block
)){
return
B
}
if
(
X
.
selector
){
return
c
.
is
(
W
,
X
.
selector
)}}
function
g
(
X
,
W
){
X
=
X
||
""
;
W
=
W
||
""
;
X
=
""
+
(
X
.
nodeName
||
X
);
W
=
""
+
(
W
.
nodeName
||
W
);
return
X
.
toLowerCase
()
==
W
.
toLowerCase
()}
function
L
(
X
,
W
){
var
Y
=
c
.
getStyle
(
X
,
W
);
if
(
W
==
"color"
||
W
==
"backgroundColor"
){
Y
=
c
.
toHex
(
Y
)}
if
(
W
==
"fontWeight"
&&
Y
==
700
){
Y
=
"bold"
}
return
""
+
Y
}
function
r
(
W
,
X
){
if
(
typeof
(
W
)
!=
"string"
){
W
=
W
(
X
)}
else
{
if
(
X
){
W
=
W
.
replace
(
/%(\w+)/g
,
function
(
Z
,
Y
){
return
X
[
Y
]
||
Z
})}}
return
W
}
function
f
(
W
){
return
W
&&
W
.
nodeType
===
3
&&
/^([\s\r\n]+|)$/
.
test
(
W
.
nodeValue
)}
function
N
(
Y
,
X
,
W
){
var
Z
=
c
.
create
(
X
,
W
);
Y
.
parentNode
.
insertBefore
(
Z
,
Y
);
Z
.
appendChild
(
Y
);
return
Z
}
function
o
(
W
,
ag
,
Z
){
var
Y
=
W
.
startContainer
,
ad
=
W
.
startOffset
,
aj
=
W
.
endContainer
,
ae
=
W
.
endOffset
,
ai
,
af
,
ac
;
function
ah
(
am
,
an
,
ak
,
al
){
var
ao
,
ap
;
al
=
al
||
c
.
getRoot
();
for
(;;){
ao
=
am
.
parentNode
;
if
(
ao
==
al
||
(
!
ag
[
0
].
block_expand
&&
F
(
ao
))){
return
am
}
for
(
ai
=
ao
[
an
];
ai
&&
ai
!=
am
;
ai
=
ai
[
ak
]){
if
(
ai
.
nodeType
==
1
&&!
H
(
ai
)){
return
am
}
if
(
ai
.
nodeType
==
3
&&!
f
(
ai
)){
return
am
}}
am
=
am
.
parentNode
}
return
am
}
function
ab
(
ak
,
al
){
if
(
al
===
p
){
al
=
ak
.
nodeType
===
3
?
ak
.
length
:
ak
.
childNodes
.
length
}
while
(
ak
&&
ak
.
hasChildNodes
()){
ak
=
ak
.
childNodes
[
al
];
if
(
ak
){
al
=
ak
.
nodeType
===
3
?
ak
.
length
:
ak
.
childNodes
.
length
}}
return
{
node
:
ak
,
offset
:
al
}}
if
(
Y
.
nodeType
==
1
&&
Y
.
hasChildNodes
()){
af
=
Y
.
childNodes
.
length
-
1
;
Y
=
Y
.
childNodes
[
ad
>
af
?
af
:
ad
];
if
(
Y
.
nodeType
==
3
){
ad
=
0
}}
if
(
aj
.
nodeType
==
1
&&
aj
.
hasChildNodes
()){
af
=
aj
.
childNodes
.
length
-
1
;
aj
=
aj
.
childNodes
[
ae
>
af
?
af
:
ae
-
1
];
if
(
aj
.
nodeType
==
3
){
ae
=
aj
.
nodeValue
.
length
}}
if
(
H
(
Y
.
parentNode
)){
Y
=
Y
.
parentNode
}
if
(
H
(
Y
)){
Y
=
Y
.
nextSibling
||
Y
}
if
(
H
(
aj
.
parentNode
)){
ae
=
c
.
nodeIndex
(
aj
);
aj
=
aj
.
parentNode
}
if
(
H
(
aj
)
&&
aj
.
previousSibling
){
aj
=
aj
.
previousSibling
;
ae
=
aj
.
length
}
if
(
ag
[
0
].
inline
){
ac
=
ab
(
aj
,
ae
);
if
(
ac
.
node
){
while
(
ac
.
node
&&
ac
.
offset
===
0
&&
ac
.
node
.
previousSibling
){
ac
=
ab
(
ac
.
node
.
previousSibling
)}
if
(
ac
.
node
&&
ac
.
offset
>
0
&&
ac
.
node
.
nodeType
===
3
&&
ac
.
node
.
nodeValue
.
charAt
(
ac
.
offset
-
1
)
===
" "
){
if
(
ac
.
offset
>
1
){
aj
=
ac
.
node
;
aj
.
splitText
(
ac
.
offset
-
1
)}
else
{
if
(
ac
.
node
.
previousSibling
){
aj
=
ac
.
node
.
previousSibling
}}}}}
if
(
ag
[
0
].
inline
||
ag
[
0
].
block_expand
){
Y
=
ah
(
Y
,
"firstChild"
,
"nextSibling"
);
aj
=
ah
(
aj
,
"lastChild"
,
"previousSibling"
)}
if
(
ag
[
0
].
selector
&&
ag
[
0
].
expand
!==
S
&&!
ag
[
0
].
inline
){
function
aa
(
al
,
ak
){
var
am
,
an
,
ap
,
ao
;
if
(
al
.
nodeType
==
3
&&
al
.
nodeValue
.
length
==
0
&&
al
[
ak
]){
al
=
al
[
ak
]}
am
=
m
(
al
);
for
(
an
=
0
;
an
<
am
.
length
;
an
++
){
for
(
ap
=
0
;
ap
<
ag
.
length
;
ap
++
){
ao
=
ag
[
ap
];
if
(
"collapsed"
in
ao
&&
ao
.
collapsed
!==
W
.
collapsed
){
continue
}
if
(
c
.
is
(
am
[
an
],
ao
.
selector
)){
return
am
[
an
]}}}
return
al
}
Y
=
aa
(
Y
,
"previousSibling"
);
aj
=
aa
(
aj
,
"nextSibling"
)}
if
(
ag
[
0
].
block
||
ag
[
0
].
selector
){
function
X
(
al
,
ak
,
an
){
var
am
;
if
(
!
ag
[
0
].
wrapper
){
am
=
c
.
getParent
(
al
,
ag
[
0
].
block
)}
if
(
!
am
){
am
=
c
.
getParent
(
al
.
nodeType
==
3
?
al
.
parentNode
:
al
,
F
)}
if
(
am
&&
ag
[
0
].
wrapper
){
am
=
m
(
am
,
"ul,ol"
).
reverse
()[
0
]
||
am
}
if
(
!
am
){
am
=
al
;
while
(
am
[
ak
]
&&!
F
(
am
[
ak
])){
am
=
am
[
ak
];
if
(
g
(
am
,
"br"
)){
break
}}}
return
am
||
al
}
Y
=
X
(
Y
,
"previousSibling"
);
aj
=
X
(
aj
,
"nextSibling"
);
if
(
ag
[
0
].
block
){
if
(
!
F
(
Y
)){
Y
=
ah
(
Y
,
"firstChild"
,
"nextSibling"
)}
if
(
!
F
(
aj
)){
aj
=
ah
(
aj
,
"lastChild"
,
"previousSibling"
)}}}
if
(
Y
.
nodeType
==
1
){
ad
=
s
(
Y
);
Y
=
Y
.
parentNode
}
if
(
aj
.
nodeType
==
1
){
ae
=
s
(
aj
)
+
1
;
aj
=
aj
.
parentNode
}
return
{
startContainer
:
Y
,
startOffset
:
ad
,
endContainer
:
aj
,
endOffset
:
ae
}}
function
U
(
ac
,
ab
,
Z
,
W
){
var
Y
,
X
,
aa
;
if
(
!
h
(
Z
,
ac
)){
return
S
}
if
(
ac
.
remove
!=
"all"
){
O
(
ac
.
styles
,
function
(
ae
,
ad
){
ae
=
r
(
ae
,
ab
);
if
(
typeof
(
ad
)
===
"number"
){
ad
=
ae
;
W
=
0
}
if
(
!
W
||
g
(
L
(
W
,
ad
),
ae
)){
c
.
setStyle
(
Z
,
ad
,
""
)}
aa
=
1
});
if
(
aa
&&
c
.
getAttrib
(
Z
,
"style"
)
==
""
){
Z
.
removeAttribute
(
"style"
);
Z
.
removeAttribute
(
"data-mce-style"
)}
O
(
ac
.
attributes
,
function
(
af
,
ad
){
var
ae
;
af
=
r
(
af
,
ab
);
if
(
typeof
(
ad
)
===
"number"
){
ad
=
af
;
W
=
0
}
if
(
!
W
||
g
(
c
.
getAttrib
(
W
,
ad
),
af
)){
if
(
ad
==
"class"
){
af
=
c
.
getAttrib
(
Z
,
ad
);
if
(
af
){
ae
=
""
;
O
(
af
.
split
(
/\s+/
),
function
(
ag
){
if
(
/mce\w+/
.
test
(
ag
)){
ae
+=
(
ae
?
" "
:
""
)
+
ag
}});
if
(
ae
){
c
.
setAttrib
(
Z
,
ad
,
ae
);
return
}}}
if
(
ad
==
"class"
){
Z
.
removeAttribute
(
"className"
)}
if
(
e
.
test
(
ad
)){
Z
.
removeAttribute
(
"data-mce-"
+
ad
)}
Z
.
removeAttribute
(
ad
)}});
O
(
ac
.
classes
,
function
(
ad
){
ad
=
r
(
ad
,
ab
);
if
(
!
W
||
c
.
hasClass
(
W
,
ad
)){
c
.
removeClass
(
Z
,
ad
)}});
X
=
c
.
getAttribs
(
Z
);
for
(
Y
=
0
;
Y
<
X
.
length
;
Y
++
){
if
(
X
[
Y
].
nodeName
.
indexOf
(
"_"
)
!==
0
){
return
S
}}}
if
(
ac
.
remove
!=
"none"
){
n
(
Z
,
ac
);
return
B
}}
function
n
(
Y
,
Z
){
var
W
=
Y
.
parentNode
,
X
;
if
(
Z
.
block
){
if
(
!
l
){
function
aa
(
ac
,
ab
,
ad
){
ac
=
C
(
ac
,
ab
,
ad
);
return
!
ac
||
(
ac
.
nodeName
==
"BR"
||
F
(
ac
))}
if
(
F
(
Y
)
&&!
F
(
W
)){
if
(
!
aa
(
Y
,
S
)
&&!
aa
(
Y
.
firstChild
,
B
,
1
)){
Y
.
insertBefore
(
c
.
create
(
"br"
),
Y
.
firstChild
)}
if
(
!
aa
(
Y
,
B
)
&&!
aa
(
Y
.
lastChild
,
S
,
1
)){
Y
.
appendChild
(
c
.
create
(
"br"
))}}}
else
{
if
(
W
==
c
.
getRoot
()){
if
(
!
Z
.
list_block
||!
g
(
Y
,
Z
.
list_block
)){
O
(
a
.
grep
(
Y
.
childNodes
),
function
(
ab
){
if
(
d
(
l
,
ab
.
nodeName
.
toLowerCase
())){
if
(
!
X
){
X
=
N
(
ab
,
l
)}
else
{
X
.
appendChild
(
ab
)}}
else
{
X
=
0
}})}}}}
if
(
Z
.
selector
&&
Z
.
inline
&&!
g
(
Z
.
inline
,
Y
)){
return
}
c
.
remove
(
Y
,
1
)}
function
C
(
X
,
W
,
Y
){
if
(
X
){
W
=
W
?
"nextSibling"
:
"previousSibling"
;
for
(
X
=
Y
?
X
:
X
[
W
];
X
;
X
=
X
[
W
]){
if
(
X
.
nodeType
==
1
||!
f
(
X
)){
return
X
}}}}
function
H
(
W
){
return
W
&&
W
.
nodeType
==
1
&&
W
.
getAttribute
(
"data-mce-type"
)
==
"bookmark"
}
function
u
(
aa
,
Z
){
var
W
,
Y
,
X
;
function
ac
(
af
,
ae
){
if
(
af
.
nodeName
!=
ae
.
nodeName
){
return
S
}
function
ad
(
ah
){
var
ai
=
{};
O
(
c
.
getAttribs
(
ah
),
function
(
aj
){
var
ak
=
aj
.
nodeName
.
toLowerCase
();
if
(
ak
.
indexOf
(
"_"
)
!==
0
&&
ak
!==
"style"
){
ai
[
ak
]
=
c
.
getAttrib
(
ah
,
ak
)}});
return
ai
}
function
ag
(
ak
,
aj
){
var
ai
,
ah
;
for
(
ah
in
ak
){
if
(
ak
.
hasOwnProperty
(
ah
)){
ai
=
aj
[
ah
];
if
(
ai
===
p
){
return
S
}
if
(
ak
[
ah
]
!=
ai
){
return
S
}
delete
aj
[
ah
]}}
for
(
ah
in
aj
){
if
(
aj
.
hasOwnProperty
(
ah
)){
return
S
}}
return
B
}
if
(
!
ag
(
ad
(
af
),
ad
(
ae
))){
return
S
}
if
(
!
ag
(
c
.
parseStyle
(
c
.
getAttrib
(
af
,
"style"
)),
c
.
parseStyle
(
c
.
getAttrib
(
ae
,
"style"
)))){
return
S
}
return
B
}
if
(
aa
&&
Z
){
function
ab
(
ae
,
ad
){
for
(
Y
=
ae
;
Y
;
Y
=
Y
[
ad
]){
if
(
Y
.
nodeType
==
3
&&
Y
.
nodeValue
.
length
!==
0
){
return
ae
}
if
(
Y
.
nodeType
==
1
&&!
H
(
Y
)){
return
Y
}}
return
ae
}
aa
=
ab
(
aa
,
"previousSibling"
);
Z
=
ab
(
Z
,
"nextSibling"
);
if
(
ac
(
aa
,
Z
)){
for
(
Y
=
aa
.
nextSibling
;
Y
&&
Y
!=
Z
;){
X
=
Y
;
Y
=
Y
.
nextSibling
;
aa
.
appendChild
(
X
)}
c
.
remove
(
Z
);
O
(
a
.
grep
(
Z
.
childNodes
),
function
(
ad
){
aa
.
appendChild
(
ad
)});
return
aa
}}
return
Z
}
function
G
(
W
){
return
/^(h[1-6]|p|div|pre|address|dl|dt|dd)$/
.
test
(
W
)}
function
J
(
X
,
aa
){
var
W
,
Z
,
Y
;
W
=
X
[
aa
?
"startContainer"
:
"endContainer"
];
Z
=
X
[
aa
?
"startOffset"
:
"endOffset"
];
if
(
W
.
nodeType
==
1
){
Y
=
W
.
childNodes
.
length
-
1
;
if
(
!
aa
&&
Z
){
Z
--
}
W
=
W
.
childNodes
[
Z
>
Y
?
Y
:
Z
]}
return
W
}
function
Q
(
ab
,
X
,
aa
){
var
Y
,
W
=
P
[
ab
],
ac
=
P
[
ab
==
"apply"
?
"remove"
:
"apply"
];
function
ad
(){
return
P
.
apply
.
length
||
P
.
remove
.
length
}
function
Z
(){
P
.
apply
=
[];
P
.
remove
=
[]}
function
ae
(
af
){
O
(
P
.
apply
.
reverse
(),
function
(
ag
){
T
(
ag
.
name
,
ag
.
vars
,
af
);
if
(
ag
.
name
===
"forecolor"
&&
ag
.
vars
.
value
){
I
(
af
.
parentNode
)}});
O
(
P
.
remove
.
reverse
(),
function
(
ag
){
A
(
ag
.
name
,
ag
.
vars
,
af
)});
c
.
remove
(
af
,
1
);
Z
()}
for
(
Y
=
W
.
length
-
1
;
Y
>=
0
;
Y
--
){
if
(
W
[
Y
].
name
==
X
){
return
}}
W
.
push
({
name
:
X
,
vars
:
aa
});
for
(
Y
=
ac
.
length
-
1
;
Y
>=
0
;
Y
--
){
if
(
ac
[
Y
].
name
==
X
){
ac
.
splice
(
Y
,
1
)}}
if
(
ad
()){
V
.
getDoc
().
execCommand
(
"FontName"
,
false
,
"mceinline"
);
P
.
lastRng
=
q
.
getRng
();
O
(
c
.
select
(
"font,span"
),
function
(
ag
){
var
af
;
if
(
b
(
ag
)){
af
=
q
.
getBookmark
();
ae
(
ag
);
q
.
moveToBookmark
(
af
);
V
.
nodeChanged
()}});
if
(
!
P
.
isListening
&&
ad
()){
P
.
isListening
=
true
;
O
(
"onKeyDown,onKeyUp,onKeyPress,onMouseUp"
.
split
(
","
),
function
(
af
){
V
[
af
].
addToTop
(
function
(
ag
,
ah
){
if
(
ad
()
&&!
a
.
dom
.
RangeUtils
.
compareRanges
(
P
.
lastRng
,
q
.
getRng
())){
O
(
c
.
select
(
"font,span"
),
function
(
aj
){
var
ak
,
ai
;
if
(
b
(
aj
)){
ak
=
aj
.
firstChild
;
if
(
ak
){
ae
(
aj
);
ai
=
c
.
createRng
();
ai
.
setStart
(
ak
,
ak
.
nodeValue
.
length
);
ai
.
setEnd
(
ak
,
ak
.
nodeValue
.
length
);
q
.
setRng
(
ai
);
ag
.
nodeChanged
()}
else
{
c
.
remove
(
aj
)}}});
if
(
ah
.
type
==
"keyup"
||
ah
.
type
==
"mouseup"
){
Z
()}}})})}}}}})(
tinymce
);
tinymce
.
onAddEditor
.
add
(
function
(
e
,
a
){
var
d
,
h
,
g
,
c
=
a
.
settings
;
if
(
c
.
inline_styles
){
h
=
e
.
explode
(
c
.
font_size_style_values
);
function
b
(
j
,
i
){
e
.
each
(
i
,
function
(
l
,
k
){
if
(
l
){
g
.
setStyle
(
j
,
k
,
l
)}});
g
.
rename
(
j
,
"span"
)}
d
=
{
font
:
function
(
j
,
i
){
b
(
i
,{
backgroundColor
:
i
.
style
.
backgroundColor
,
color
:
i
.
color
,
fontFamily
:
i
.
face
,
fontSize
:
h
[
parseInt
(
i
.
size
)
-
1
]})},
u
:
function
(
j
,
i
){
b
(
i
,{
textDecoration
:
"underline"
})},
strike
:
function
(
j
,
i
){
b
(
i
,{
textDecoration
:
"line-through"
})}};
function
f
(
i
,
j
){
g
=
i
.
dom
;
if
(
c
.
convert_fonts_to_spans
){
e
.
each
(
g
.
select
(
"font,u,strike"
,
j
.
node
),
function
(
k
){
d
[
k
.
nodeName
.
toLowerCase
()](
a
.
dom
,
k
)})}}
a
.
onPreProcess
.
add
(
f
);
a
.
onSetContent
.
add
(
f
);
a
.
onInit
.
add
(
function
(){
a
.
selection
.
onSetContent
.
add
(
f
)})}});
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Apr 9, 12:23 PM (5 h, 50 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
539105
Default Alt Text
tiny_mce.js (193 KB)
Attached To
Mode
R3 roundcubemail
Attached
Detach File
Event Timeline
Log In to Comment