Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F7054815
tiny_mce.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
172 KB
Referenced Files
None
Subscribers
None
tiny_mce.js
View Options
(
function
(
c
){
var
a
=
/^\s*|\s*$/g
,
d
;
var
b
=
{
majorVersion
:
"3"
,
minorVersion
:
"3.2"
,
releaseDate
:
"2010-03-25"
,
_init
:
function
(){
var
r
=
this
,
o
=
document
,
m
=
navigator
,
f
=
m
.
userAgent
,
l
,
e
,
k
,
j
,
h
,
q
;
r
.
isOpera
=
c
.
opera
&&
opera
.
buildNumber
;
r
.
isWebKit
=
/WebKit/
.
test
(
f
);
r
.
isIE
=!
r
.
isWebKit
&&!
r
.
isOpera
&&
(
/MSIE/gi
).
test
(
f
)
&&
(
/Explorer/gi
).
test
(
m
.
appName
);
r
.
isIE6
=
r
.
isIE
&&
/MSIE [56]/
.
test
(
f
);
r
.
isGecko
=!
r
.
isWebKit
&&
/Gecko/
.
test
(
f
);
r
.
isMac
=
f
.
indexOf
(
"Mac"
)
!=-
1
;
r
.
isAir
=
/adobeair/i
.
test
(
f
);
if
(
c
.
tinyMCEPreInit
){
r
.
suffix
=
tinyMCEPreInit
.
suffix
;
r
.
baseURL
=
tinyMCEPreInit
.
base
;
r
.
query
=
tinyMCEPreInit
.
query
;
return
}
r
.
suffix
=
""
;
e
=
o
.
getElementsByTagName
(
"base"
);
for
(
l
=
0
;
l
<
e
.
length
;
l
++
){
if
(
q
=
e
[
l
].
href
){
if
(
/^https?:\/\/[^\/]+$/
.
test
(
q
)){
q
+=
"/"
}
j
=
q
?
q
.
match
(
/.*\//
)[
0
]
:
""
}}
function
g
(
i
){
if
(
i
.
src
&&
/tiny_mce(|_gzip|_jquery|_prototype)(_dev|_src)?.js/
.
test
(
i
.
src
)){
if
(
/_(src|dev)\.js/g
.
test
(
i
.
src
)){
r
.
suffix
=
"_src"
}
if
((
h
=
i
.
src
.
indexOf
(
"?"
))
!=-
1
){
r
.
query
=
i
.
src
.
substring
(
h
+
1
)}
r
.
baseURL
=
i
.
src
.
substring
(
0
,
i
.
src
.
lastIndexOf
(
"/"
));
if
(
j
&&
r
.
baseURL
.
indexOf
(
"://"
)
==-
1
&&
r
.
baseURL
.
indexOf
(
"/"
)
!==
0
){
r
.
baseURL
=
j
+
r
.
baseURL
}
return
r
.
baseURL
}
return
null
}
e
=
o
.
getElementsByTagName
(
"script"
);
for
(
l
=
0
;
l
<
e
.
length
;
l
++
){
if
(
g
(
e
[
l
])){
return
}}
k
=
o
.
getElementsByTagName
(
"head"
)[
0
];
if
(
k
){
e
=
k
.
getElementsByTagName
(
"script"
);
for
(
l
=
0
;
l
<
e
.
length
;
l
++
){
if
(
g
(
e
[
l
])){
return
}}}
return
},
is
:
function
(
f
,
e
){
if
(
!
e
){
return
f
!==
d
}
if
(
e
==
"array"
&&
(
f
.
hasOwnProperty
&&
f
instanceof
Array
)){
return
true
}
return
typeof
(
f
)
==
e
},
each
:
function
(
h
,
e
,
g
){
var
i
,
f
;
if
(
!
h
){
return
0
}
g
=
g
||
h
;
if
(
h
.
length
!==
d
){
for
(
i
=
0
,
f
=
h
.
length
;
i
<
f
;
i
++
){
if
(
e
.
call
(
g
,
h
[
i
],
i
,
h
)
===
false
){
return
0
}}}
else
{
for
(
i
in
h
){
if
(
h
.
hasOwnProperty
(
i
)){
if
(
e
.
call
(
g
,
h
[
i
],
i
,
h
)
===
false
){
return
0
}}}}
return
1
},
map
:
function
(
e
,
g
){
var
h
=
[];
b
.
each
(
e
,
function
(
f
){
h
.
push
(
g
(
f
))});
return
h
},
grep
:
function
(
e
,
g
){
var
h
=
[];
b
.
each
(
e
,
function
(
f
){
if
(
!
g
||
g
(
f
)){
h
.
push
(
f
)}});
return
h
},
inArray
:
function
(
f
,
g
){
var
h
,
e
;
if
(
f
){
for
(
h
=
0
,
e
=
f
.
length
;
h
<
e
;
h
++
){
if
(
f
[
h
]
===
g
){
return
h
}}}
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
(
e
,
i
){
if
(
e
!==
d
){
k
[
i
]
=
e
}})}
return
k
},
trim
:
function
(
e
){
return
(
e
?
""
+
e
:
""
).
replace
(
a
,
""
)},
create
:
function
(
m
,
e
){
var
l
=
this
,
f
,
h
,
i
,
j
,
g
,
k
=
0
;
m
=
/^((static) )?([\w.]+)(:([\w.]+))?/
.
exec
(
m
);
i
=
m
[
3
].
match
(
/(^|\.)(\w+)$/i
)[
2
];
h
=
l
.
createNS
(
m
[
3
].
replace
(
/\.\w+$/
,
""
));
if
(
h
[
i
]){
return
}
if
(
m
[
2
]
==
"static"
){
h
[
i
]
=
e
;
if
(
this
.
onCreate
){
this
.
onCreate
(
m
[
2
],
m
[
3
],
h
[
i
])}
return
}
if
(
!
e
[
i
]){
e
[
i
]
=
function
(){};
k
=
1
}
h
[
i
]
=
e
[
i
];
l
.
extend
(
h
[
i
].
prototype
,
e
);
if
(
m
[
5
]){
f
=
l
.
resolve
(
m
[
5
]).
prototype
;
j
=
m
[
5
].
match
(
/\.(\w+)$/i
)[
1
];
g
=
h
[
i
];
if
(
k
){
h
[
i
]
=
function
(){
return
f
[
j
].
apply
(
this
,
arguments
)}}
else
{
h
[
i
]
=
function
(){
this
.
parent
=
f
[
j
];
return
g
.
apply
(
this
,
arguments
)}}
h
[
i
].
prototype
[
i
]
=
h
[
i
];
l
.
each
(
f
,
function
(
o
,
p
){
h
[
i
].
prototype
[
p
]
=
f
[
p
]});
l
.
each
(
e
,
function
(
o
,
p
){
if
(
f
[
p
]){
h
[
i
].
prototype
[
p
]
=
function
(){
this
.
parent
=
f
[
p
];
return
o
.
apply
(
this
,
arguments
)}}
else
{
if
(
p
!=
i
){
h
[
i
].
prototype
[
p
]
=
o
}}})}
l
.
each
(
e
[
"static"
],
function
(
o
,
p
){
h
[
i
][
p
]
=
o
});
if
(
this
.
onCreate
){
this
.
onCreate
(
m
[
2
],
m
[
3
],
h
[
i
].
prototype
)}},
walk
:
function
(
h
,
g
,
i
,
e
){
e
=
e
||
this
;
if
(
h
){
if
(
i
){
h
=
h
[
i
]}
b
.
each
(
h
,
function
(
j
,
f
){
if
(
g
.
call
(
e
,
j
,
f
,
i
)
===
false
){
return
false
}
b
.
walk
(
j
,
g
,
i
,
e
)})}},
createNS
:
function
(
h
,
g
){
var
f
,
e
;
g
=
g
||
c
;
h
=
h
.
split
(
"."
);
for
(
f
=
0
;
f
<
h
.
length
;
f
++
){
e
=
h
[
f
];
if
(
!
g
[
e
]){
g
[
e
]
=
{}}
g
=
g
[
e
]}
return
g
},
resolve
:
function
(
h
,
g
){
var
f
,
e
;
g
=
g
||
c
;
h
=
h
.
split
(
"."
);
for
(
f
=
0
,
e
=
h
.
length
;
f
<
e
;
f
++
){
g
=
g
[
h
[
f
]];
if
(
!
g
){
break
}}
return
g
},
addUnload
:
function
(
i
,
h
){
var
g
=
this
;
i
=
{
func
:
i
,
scope
:
h
||
this
};
if
(
!
g
.
unloads
){
function
e
(){
var
f
=
g
.
unloads
,
k
,
l
;
if
(
f
){
for
(
l
in
f
){
k
=
f
[
l
];
if
(
k
&&
k
.
func
){
k
.
func
.
call
(
k
.
scope
,
1
)}}
if
(
c
.
detachEvent
){
c
.
detachEvent
(
"onbeforeunload"
,
j
);
c
.
detachEvent
(
"onunload"
,
e
)}
else
{
if
(
c
.
removeEventListener
){
c
.
removeEventListener
(
"unload"
,
e
,
false
)}}
g
.
unloads
=
k
=
f
=
w
=
e
=
0
;
if
(
c
.
CollectGarbage
){
CollectGarbage
()}}}
function
j
(){
var
k
=
document
;
if
(
k
.
readyState
==
"interactive"
){
function
f
(){
k
.
detachEvent
(
"onstop"
,
f
);
if
(
e
){
e
()}
k
=
0
}
if
(
k
){
k
.
attachEvent
(
"onstop"
,
f
)}
c
.
setTimeout
(
function
(){
if
(
k
){
k
.
detachEvent
(
"onstop"
,
f
)}},
0
)}}
if
(
c
.
attachEvent
){
c
.
attachEvent
(
"onunload"
,
e
);
c
.
attachEvent
(
"onbeforeunload"
,
j
)}
else
{
if
(
c
.
addEventListener
){
c
.
addEventListener
(
"unload"
,
e
,
false
)}}
g
.
unloads
=
[
i
]}
else
{
g
.
unloads
.
push
(
i
)}
return
i
},
removeUnload
:
function
(
h
){
var
e
=
this
.
unloads
,
g
=
null
;
b
.
each
(
e
,
function
(
j
,
f
){
if
(
j
&&
j
.
func
==
h
){
e
.
splice
(
f
,
1
);
g
=
h
;
return
false
}});
return
g
},
explode
:
function
(
e
,
f
){
return
e
?
b
.
map
(
e
.
split
(
f
||
","
),
b
.
trim
)
:
e
},
_addVer
:
function
(
f
){
var
e
;
if
(
!
this
.
query
){
return
f
}
e
=
(
f
.
indexOf
(
"?"
)
==-
1
?
"?"
:
"&"
)
+
this
.
query
;
if
(
f
.
indexOf
(
"#"
)
==-
1
){
return
f
+
e
}
return
f
.
replace
(
"#"
,
e
+
"#"
)}};
b
.
_init
();
c
.
tinymce
=
c
.
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
)}})})();
tinymce
.
create
(
"static tinymce.util.JSON"
,{
serialize
:
function
(
e
){
var
c
,
a
,
d
=
tinymce
.
util
.
JSON
.
serialize
,
b
;
if
(
e
==
null
){
return
"null"
}
b
=
typeof
e
;
if
(
b
==
"string"
){
a
=
"\bb\tt\nn\ff\rr\"\"''\\\\"
;
return
'"'
+
e
.
replace
(
/([\u0080-\uFFFF\x00-\x1f\"])/g
,
function
(
g
,
f
){
c
=
a
.
indexOf
(
f
);
if
(
c
+
1
){
return
"\\"
+
a
.
charAt
(
c
+
1
)}
g
=
f
.
charCodeAt
().
toString
(
16
);
return
"\\u"
+
"0000"
.
substring
(
g
.
length
)
+
g
})
+
'"'
}
if
(
b
==
"object"
){
if
(
e
.
hasOwnProperty
&&
e
instanceof
Array
){
for
(
c
=
0
,
a
=
"["
;
c
<
e
.
length
;
c
++
){
a
+=
(
c
>
0
?
","
:
""
)
+
d
(
e
[
c
])}
return
a
+
"]"
}
a
=
"{"
;
for
(
c
in
e
){
a
+=
typeof
e
[
c
]
!=
"function"
?
(
a
.
length
>
1
?
',"'
:
'"'
)
+
c
+
'":'
+
d
(
e
[
c
])
:
""
}
return
a
+
"}"
}
return
""
+
e
},
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
){
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
(
m
){
var
k
=
m
.
each
,
j
=
m
.
is
,
i
=
m
.
isWebKit
,
d
=
m
.
isIE
,
a
=
/^(H[1-6R]|P|DIV|ADDRESS|PRE|FORM|T(ABLE|BODY|HEAD|FOOT|H|R|D)|LI|OL|UL|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|NOSCRIPT|MENU|ISINDEX|SAMP)$/
,
e
=
g
(
"checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected"
),
f
=
g
(
"src,href,style,coords,shape"
),
c
=
{
"&"
:
"&"
,
'"'
:
"""
,
"<"
:
"<"
,
">"
:
">"
},
n
=
/[<>&\"]/g
,
b
=
/^([a-z0-9],?)+$/i
,
h
=
/<(\w+)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)(\s*\/?)>/g
,
l
=
/(\w+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g
;
function
g
(
q
){
var
p
=
{},
o
;
q
=
q
.
split
(
","
);
for
(
o
=
q
.
length
;
o
>=
0
;
o
--
){
p
[
q
[
o
]]
=
1
}
return
p
}
m
.
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
(
u
,
q
){
var
p
=
this
,
o
;
p
.
doc
=
u
;
p
.
win
=
window
;
p
.
files
=
{};
p
.
cssFlicker
=
false
;
p
.
counter
=
0
;
p
.
boxModel
=!
m
.
isIE
||
u
.
compatMode
==
"CSS1Compat"
;
p
.
stdMode
=
u
.
documentMode
===
8
;
p
.
settings
=
q
=
m
.
extend
({
keep_values
:
false
,
hex_colors
:
1
,
process_html
:
1
},
q
);
if
(
m
.
isIE6
){
try
{
u
.
execCommand
(
"BackgroundImageCache"
,
false
,
true
)}
catch
(
r
){
p
.
cssFlicker
=
true
}}
if
(
q
.
valid_styles
){
p
.
_styles
=
{};
k
(
q
.
valid_styles
,
function
(
t
,
s
){
p
.
_styles
[
s
]
=
m
.
explode
(
t
)})}
m
.
addUnload
(
p
.
destroy
,
p
)},
getRoot
:
function
(){
var
o
=
this
,
p
=
o
.
settings
;
return
(
p
&&
o
.
get
(
p
.
root_element
))
||
o
.
doc
.
body
},
getViewPort
:
function
(
p
){
var
q
,
o
;
p
=!
p
?
this
.
win
:
p
;
q
=
p
.
document
;
o
=
this
.
boxModel
?
q
.
documentElement
:
q
.
body
;
return
{
x
:
p
.
pageXOffset
||
o
.
scrollLeft
,
y
:
p
.
pageYOffset
||
o
.
scrollTop
,
w
:
p
.
innerWidth
||
o
.
clientWidth
,
h
:
p
.
innerHeight
||
o
.
clientHeight
}},
getRect
:
function
(
s
){
var
r
,
o
=
this
,
q
;
s
=
o
.
get
(
s
);
r
=
o
.
getPos
(
s
);
q
=
o
.
getSize
(
s
);
return
{
x
:
r
.
x
,
y
:
r
.
y
,
w
:
q
.
w
,
h
:
q
.
h
}},
getSize
:
function
(
r
){
var
p
=
this
,
o
,
q
;
r
=
p
.
get
(
r
);
o
=
p
.
getStyle
(
r
,
"width"
);
q
=
p
.
getStyle
(
r
,
"height"
);
if
(
o
.
indexOf
(
"px"
)
===-
1
){
o
=
0
}
if
(
q
.
indexOf
(
"px"
)
===-
1
){
q
=
0
}
return
{
w
:
parseInt
(
o
)
||
r
.
offsetWidth
||
r
.
clientWidth
,
h
:
parseInt
(
q
)
||
r
.
offsetHeight
||
r
.
clientHeight
}},
getParent
:
function
(
q
,
p
,
o
){
return
this
.
getParents
(
q
,
p
,
o
,
false
)},
getParents
:
function
(
z
,
v
,
s
,
y
){
var
q
=
this
,
p
,
u
=
q
.
settings
,
x
=
[];
z
=
q
.
get
(
z
);
y
=
y
===
undefined
;
if
(
u
.
strict_root
){
s
=
s
||
q
.
getRoot
()}
if
(
j
(
v
,
"string"
)){
p
=
v
;
if
(
v
===
"*"
){
v
=
function
(
o
){
return
o
.
nodeType
==
1
}}
else
{
v
=
function
(
o
){
return
q
.
is
(
o
,
p
)}}}
while
(
z
){
if
(
z
==
s
||!
z
.
nodeType
||
z
.
nodeType
===
9
){
break
}
if
(
!
v
||
v
(
z
)){
if
(
y
){
x
.
push
(
z
)}
else
{
return
z
}}
z
=
z
.
parentNode
}
return
y
?
x
:
null
},
get
:
function
(
o
){
var
p
;
if
(
o
&&
this
.
doc
&&
typeof
(
o
)
==
"string"
){
p
=
o
;
o
=
this
.
doc
.
getElementById
(
o
);
if
(
o
&&
o
.
id
!==
p
){
return
this
.
doc
.
getElementsByName
(
p
)[
1
]}}
return
o
},
getNext
:
function
(
p
,
o
){
return
this
.
_findSib
(
p
,
o
,
"nextSibling"
)},
getPrev
:
function
(
p
,
o
){
return
this
.
_findSib
(
p
,
o
,
"previousSibling"
)},
select
:
function
(
q
,
p
){
var
o
=
this
;
return
m
.
dom
.
Sizzle
(
q
,
o
.
get
(
p
)
||
o
.
get
(
o
.
settings
.
root_element
)
||
o
.
doc
,[])},
is
:
function
(
q
,
o
){
var
p
;
if
(
q
.
length
===
undefined
){
if
(
o
===
"*"
){
return
q
.
nodeType
==
1
}
if
(
b
.
test
(
o
)){
o
=
o
.
toLowerCase
().
split
(
/,/
);
q
=
q
.
nodeName
.
toLowerCase
();
for
(
p
=
o
.
length
-
1
;
p
>=
0
;
p
--
){
if
(
o
[
p
]
==
q
){
return
true
}}
return
false
}}
return
m
.
dom
.
Sizzle
.
matches
(
o
,
q
.
nodeType
?
[
q
]
:
q
).
length
>
0
},
add
:
function
(
s
,
v
,
o
,
r
,
u
){
var
q
=
this
;
return
this
.
run
(
s
,
function
(
y
){
var
x
,
t
;
x
=
j
(
v
,
"string"
)
?
q
.
doc
.
createElement
(
v
)
:
v
;
q
.
setAttribs
(
x
,
o
);
if
(
r
){
if
(
r
.
nodeType
){
x
.
appendChild
(
r
)}
else
{
q
.
setHTML
(
x
,
r
)}}
return
!
u
?
y
.
appendChild
(
x
)
:
x
})},
create
:
function
(
q
,
o
,
p
){
return
this
.
add
(
this
.
doc
.
createElement
(
q
),
q
,
o
,
p
,
1
)},
createHTML
:
function
(
v
,
p
,
s
){
var
u
=
""
,
r
=
this
,
q
;
u
+=
"<"
+
v
;
for
(
q
in
p
){
if
(
p
.
hasOwnProperty
(
q
)){
u
+=
" "
+
q
+
'="'
+
r
.
encode
(
p
[
q
])
+
'"'
}}
if
(
m
.
is
(
s
)){
return
u
+
">"
+
s
+
"</"
+
v
+
">"
}
return
u
+
" />"
},
remove
:
function
(
o
,
p
){
return
this
.
run
(
o
,
function
(
r
){
var
q
,
s
;
q
=
r
.
parentNode
;
if
(
!
q
){
return
null
}
if
(
p
){
while
(
s
=
r
.
firstChild
){
if
(
s
.
nodeType
!==
3
||
s
.
nodeValue
){
q
.
insertBefore
(
s
,
r
)}
else
{
r
.
removeChild
(
s
)}}}
return
q
.
removeChild
(
r
)})},
setStyle
:
function
(
r
,
o
,
p
){
var
q
=
this
;
return
q
.
run
(
r
,
function
(
v
){
var
u
,
t
;
u
=
v
.
style
;
o
=
o
.
replace
(
/-(\D)/g
,
function
(
x
,
s
){
return
s
.
toUpperCase
()});
if
(
q
.
pixelStyles
.
test
(
o
)
&&
(
m
.
is
(
p
,
"number"
)
||
/^[\-0-9\.]+$/
.
test
(
p
))){
p
+=
"px"
}
switch
(
o
){
case
"opacity"
:
if
(
d
){
u
.
filter
=
p
===
""
?
""
:
"alpha(opacity="
+
(
p
*
100
)
+
")"
;
if
(
!
r
.
currentStyle
||!
r
.
currentStyle
.
hasLayout
){
u
.
display
=
"inline-block"
}}
u
[
o
]
=
u
[
"-moz-opacity"
]
=
u
[
"-khtml-opacity"
]
=
p
||
""
;
break
;
case
"float"
:
d
?
u
.
styleFloat
=
p
:
u
.
cssFloat
=
p
;
break
;
default
:
u
[
o
]
=
p
||
""
}
if
(
q
.
settings
.
update_styles
){
q
.
setAttrib
(
v
,
"_mce_style"
)}})},
getStyle
:
function
(
r
,
o
,
q
){
r
=
this
.
get
(
r
);
if
(
!
r
){
return
false
}
if
(
this
.
doc
.
defaultView
&&
q
){
o
=
o
.
replace
(
/[A-Z]/g
,
function
(
s
){
return
"-"
+
s
});
try
{
return
this
.
doc
.
defaultView
.
getComputedStyle
(
r
,
null
).
getPropertyValue
(
o
)}
catch
(
p
){
return
null
}}
o
=
o
.
replace
(
/-(\D)/g
,
function
(
t
,
s
){
return
s
.
toUpperCase
()});
if
(
o
==
"float"
){
o
=
d
?
"styleFloat"
:
"cssFloat"
}
if
(
r
.
currentStyle
&&
q
){
return
r
.
currentStyle
[
o
]}
return
r
.
style
[
o
]},
setStyles
:
function
(
u
,
v
){
var
q
=
this
,
r
=
q
.
settings
,
p
;
p
=
r
.
update_styles
;
r
.
update_styles
=
0
;
k
(
v
,
function
(
o
,
s
){
q
.
setStyle
(
u
,
s
,
o
)});
r
.
update_styles
=
p
;
if
(
r
.
update_styles
){
q
.
setAttrib
(
u
,
r
.
cssText
)}},
setAttrib
:
function
(
q
,
r
,
o
){
var
p
=
this
;
if
(
!
q
||!
r
){
return
}
if
(
p
.
settings
.
strict
){
r
=
r
.
toLowerCase
()}
return
this
.
run
(
q
,
function
(
u
){
var
t
=
p
.
settings
;
switch
(
r
){
case
"style"
:
if
(
!
j
(
o
,
"string"
)){
k
(
o
,
function
(
s
,
x
){
p
.
setStyle
(
u
,
x
,
s
)});
return
}
if
(
t
.
keep_values
){
if
(
o
&&!
p
.
_isRes
(
o
)){
u
.
setAttribute
(
"_mce_style"
,
o
,
2
)}
else
{
u
.
removeAttribute
(
"_mce_style"
,
2
)}}
u
.
style
.
cssText
=
o
;
break
;
case
"class"
:
u
.
className
=
o
||
""
;
break
;
case
"src"
:
case
"href"
:
if
(
t
.
keep_values
){
if
(
t
.
url_converter
){
o
=
t
.
url_converter
.
call
(
t
.
url_converter_scope
||
p
,
o
,
r
,
u
)}
p
.
setAttrib
(
u
,
"_mce_"
+
r
,
o
,
2
)}
break
;
case
"shape"
:
u
.
setAttribute
(
"_mce_style"
,
o
);
break
}
if
(
j
(
o
)
&&
o
!==
null
&&
o
.
length
!==
0
){
u
.
setAttribute
(
r
,
""
+
o
,
2
)}
else
{
u
.
removeAttribute
(
r
,
2
)}})},
setAttribs
:
function
(
q
,
r
){
var
p
=
this
;
return
this
.
run
(
q
,
function
(
o
){
k
(
r
,
function
(
s
,
t
){
p
.
setAttrib
(
o
,
t
,
s
)})})},
getAttrib
:
function
(
r
,
s
,
q
){
var
o
,
p
=
this
;
r
=
p
.
get
(
r
);
if
(
!
r
||
r
.
nodeType
!==
1
){
return
false
}
if
(
!
j
(
q
)){
q
=
""
}
if
(
/^(src|href|style|coords|shape)$/
.
test
(
s
)){
o
=
r
.
getAttribute
(
"_mce_"
+
s
);
if
(
o
){
return
o
}}
if
(
d
&&
p
.
props
[
s
]){
o
=
r
[
p
.
props
[
s
]];
o
=
o
&&
o
.
nodeValue
?
o
.
nodeValue
:
o
}
if
(
!
o
){
o
=
r
.
getAttribute
(
s
,
2
)}
if
(
/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/
.
test
(
s
)){
if
(
r
[
p
.
props
[
s
]]
===
true
&&
o
===
""
){
return
s
}
return
o
?
s
:
""
}
if
(
r
.
nodeName
===
"FORM"
&&
r
.
getAttributeNode
(
s
)){
return
r
.
getAttributeNode
(
s
).
nodeValue
}
if
(
s
===
"style"
){
o
=
o
||
r
.
style
.
cssText
;
if
(
o
){
o
=
p
.
serializeStyle
(
p
.
parseStyle
(
o
),
r
.
nodeName
);
if
(
p
.
settings
.
keep_values
&&!
p
.
_isRes
(
o
)){
r
.
setAttribute
(
"_mce_style"
,
o
)}}}
if
(
i
&&
s
===
"class"
&&
o
){
o
=
o
.
replace
(
/(apple|webkit)\-[a-z\-]+/gi
,
""
)}
if
(
d
){
switch
(
s
){
case
"rowspan"
:
case
"colspan"
:
if
(
o
===
1
){
o
=
""
}
break
;
case
"size"
:
if
(
o
===
"+0"
||
o
===
20
||
o
===
0
){
o
=
""
}
break
;
case
"width"
:
case
"height"
:
case
"vspace"
:
case
"checked"
:
case
"disabled"
:
case
"readonly"
:
if
(
o
===
0
){
o
=
""
}
break
;
case
"hspace"
:
if
(
o
===-
1
){
o
=
""
}
break
;
case
"maxlength"
:
case
"tabindex"
:
if
(
o
===
32768
||
o
===
2147483647
||
o
===
"32768"
){
o
=
""
}
break
;
case
"multiple"
:
case
"compact"
:
case
"noshade"
:
case
"nowrap"
:
if
(
o
===
65535
){
return
s
}
return
q
;
case
"shape"
:
o
=
o
.
toLowerCase
();
break
;
default
:
if
(
s
.
indexOf
(
"on"
)
===
0
&&
o
){
o
=
(
""
+
o
).
replace
(
/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/
,
"$1"
)}}}
return
(
o
!==
undefined
&&
o
!==
null
&&
o
!==
""
)
?
""
+
o
:
q
},
getPos
:
function
(
A
,
s
){
var
p
=
this
,
o
=
0
,
z
=
0
,
u
,
v
=
p
.
doc
,
q
;
A
=
p
.
get
(
A
);
s
=
s
||
v
.
body
;
if
(
A
){
if
(
d
&&!
p
.
stdMode
){
A
=
A
.
getBoundingClientRect
();
u
=
p
.
boxModel
?
v
.
documentElement
:
v
.
body
;
o
=
p
.
getStyle
(
p
.
select
(
"html"
)[
0
],
"borderWidth"
);
o
=
(
o
==
"medium"
||
p
.
boxModel
&&!
p
.
isIE6
)
&&
2
||
o
;
A
.
top
+=
p
.
win
.
self
!=
p
.
win
.
top
?
2
:
0
;
return
{
x
:
A
.
left
+
u
.
scrollLeft
-
o
,
y
:
A
.
top
+
u
.
scrollTop
-
o
}}
q
=
A
;
while
(
q
&&
q
!=
s
&&
q
.
nodeType
){
o
+=
q
.
offsetLeft
||
0
;
z
+=
q
.
offsetTop
||
0
;
q
=
q
.
offsetParent
}
q
=
A
.
parentNode
;
while
(
q
&&
q
!=
s
&&
q
.
nodeType
){
o
-=
q
.
scrollLeft
||
0
;
z
-=
q
.
scrollTop
||
0
;
q
=
q
.
parentNode
}}
return
{
x
:
o
,
y
:
z
}},
parseStyle
:
function
(
r
){
var
u
=
this
,
v
=
u
.
settings
,
x
=
{};
if
(
!
r
){
return
x
}
function
p
(
D
,
A
,
C
){
var
z
,
B
,
o
,
y
;
z
=
x
[
D
+
"-top"
+
A
];
if
(
!
z
){
return
}
B
=
x
[
D
+
"-right"
+
A
];
if
(
z
!=
B
){
return
}
o
=
x
[
D
+
"-bottom"
+
A
];
if
(
B
!=
o
){
return
}
y
=
x
[
D
+
"-left"
+
A
];
if
(
o
!=
y
){
return
}
x
[
C
]
=
y
;
delete
x
[
D
+
"-top"
+
A
];
delete
x
[
D
+
"-right"
+
A
];
delete
x
[
D
+
"-bottom"
+
A
];
delete
x
[
D
+
"-left"
+
A
]}
function
q
(
y
,
s
,
o
,
A
){
var
z
;
z
=
x
[
s
];
if
(
!
z
){
return
}
z
=
x
[
o
];
if
(
!
z
){
return
}
z
=
x
[
A
];
if
(
!
z
){
return
}
x
[
y
]
=
x
[
s
]
+
" "
+
x
[
o
]
+
" "
+
x
[
A
];
delete
x
[
s
];
delete
x
[
o
];
delete
x
[
A
]}
r
=
r
.
replace
(
/&(#?[a-z0-9]+);/g
,
"&$1_MCE_SEMI_"
);
k
(
r
.
split
(
";"
),
function
(
s
){
var
o
,
t
=
[];
if
(
s
){
s
=
s
.
replace
(
/_MCE_SEMI_/g
,
";"
);
s
=
s
.
replace
(
/url\([^\)]+\)/g
,
function
(
y
){
t
.
push
(
y
);
return
"url("
+
t
.
length
+
")"
});
s
=
s
.
split
(
":"
);
o
=
m
.
trim
(
s
[
1
]);
o
=
o
.
replace
(
/url\(([^\)]+)\)/g
,
function
(
z
,
y
){
return
t
[
parseInt
(
y
)
-
1
]});
o
=
o
.
replace
(
/rgb\([^\)]+\)/g
,
function
(
y
){
return
u
.
toHex
(
y
)});
if
(
v
.
url_converter
){
o
=
o
.
replace
(
/url\([\'\"]?([^\)\'\"]+)[\'\"]?\)/g
,
function
(
y
,
z
){
return
"url("
+
v
.
url_converter
.
call
(
v
.
url_converter_scope
||
u
,
u
.
decode
(
z
),
"style"
,
null
)
+
")"
})}
x
[
m
.
trim
(
s
[
0
]).
toLowerCase
()]
=
o
}});
p
(
"border"
,
""
,
"border"
);
p
(
"border"
,
"-width"
,
"border-width"
);
p
(
"border"
,
"-color"
,
"border-color"
);
p
(
"border"
,
"-style"
,
"border-style"
);
p
(
"padding"
,
""
,
"padding"
);
p
(
"margin"
,
""
,
"margin"
);
q
(
"border"
,
"border-width"
,
"border-style"
,
"border-color"
);
if
(
d
){
if
(
x
.
border
==
"medium none"
){
x
.
border
=
""
}}
return
x
},
serializeStyle
:
function
(
v
,
p
){
var
q
=
this
,
r
=
""
;
function
u
(
s
,
o
){
if
(
o
&&
s
){
if
(
o
.
indexOf
(
"-"
)
===
0
){
return
}
switch
(
o
){
case
"font-weight"
:
if
(
s
==
700
){
s
=
"bold"
}
break
;
case
"color"
:
case
"background-color"
:
s
=
s
.
toLowerCase
();
break
}
r
+=
(
r
?
" "
:
""
)
+
o
+
": "
+
s
+
";"
}}
if
(
p
&&
q
.
_styles
){
k
(
q
.
_styles
[
"*"
],
function
(
o
){
u
(
v
[
o
],
o
)});
k
(
q
.
_styles
[
p
.
toLowerCase
()],
function
(
o
){
u
(
v
[
o
],
o
)})}
else
{
k
(
v
,
u
)}
return
r
},
loadCSS
:
function
(
o
){
var
q
=
this
,
r
=
q
.
doc
,
p
;
if
(
!
o
){
o
=
""
}
p
=
q
.
select
(
"head"
)[
0
];
k
(
o
.
split
(
","
),
function
(
s
){
var
t
;
if
(
q
.
files
[
s
]){
return
}
q
.
files
[
s
]
=
true
;
t
=
q
.
create
(
"link"
,{
rel
:
"stylesheet"
,
href
:
m
.
_addVer
(
s
)});
if
(
d
&&
r
.
documentMode
){
t
.
onload
=
function
(){
r
.
recalc
();
t
.
onload
=
null
}}
p
.
appendChild
(
t
)})},
addClass
:
function
(
o
,
p
){
return
this
.
run
(
o
,
function
(
q
){
var
r
;
if
(
!
p
){
return
0
}
if
(
this
.
hasClass
(
q
,
p
)){
return
q
.
className
}
r
=
this
.
removeClass
(
q
,
p
);
return
q
.
className
=
(
r
!=
""
?
(
r
+
" "
)
:
""
)
+
p
})},
removeClass
:
function
(
q
,
r
){
var
o
=
this
,
p
;
return
o
.
run
(
q
,
function
(
t
){
var
s
;
if
(
o
.
hasClass
(
t
,
r
)){
if
(
!
p
){
p
=
new
RegExp
(
"(^|\\s+)"
+
r
+
"(\\s+|$)"
,
"g"
)}
s
=
t
.
className
.
replace
(
p
,
" "
);
s
=
m
.
trim
(
s
!=
" "
?
s
:
""
);
t
.
className
=
s
;
if
(
!
s
){
t
.
removeAttribute
(
"class"
);
t
.
removeAttribute
(
"className"
)}
return
s
}
return
t
.
className
})},
hasClass
:
function
(
p
,
o
){
p
=
this
.
get
(
p
);
if
(
!
p
||!
o
){
return
false
}
return
(
" "
+
p
.
className
+
" "
).
indexOf
(
" "
+
o
+
" "
)
!==-
1
},
show
:
function
(
o
){
return
this
.
setStyle
(
o
,
"display"
,
"block"
)},
hide
:
function
(
o
){
return
this
.
setStyle
(
o
,
"display"
,
"none"
)},
isHidden
:
function
(
o
){
o
=
this
.
get
(
o
);
return
!
o
||
o
.
style
.
display
==
"none"
||
this
.
getStyle
(
o
,
"display"
)
==
"none"
},
uniqueId
:
function
(
o
){
return
(
!
o
?
"mce_"
:
o
)
+
(
this
.
counter
++
)},
setHTML
:
function
(
q
,
p
){
var
o
=
this
;
return
this
.
run
(
q
,
function
(
v
){
var
r
,
t
,
s
,
z
,
u
,
r
;
p
=
o
.
processHTML
(
p
);
if
(
d
){
function
y
(){
while
(
v
.
firstChild
){
v
.
firstChild
.
removeNode
()}
try
{
v
.
innerHTML
=
"<br />"
+
p
;
v
.
removeChild
(
v
.
firstChild
)}
catch
(
x
){
r
=
o
.
create
(
"div"
);
r
.
innerHTML
=
"<br />"
+
p
;
k
(
r
.
childNodes
,
function
(
B
,
A
){
if
(
A
){
v
.
appendChild
(
B
)}})}}
if
(
o
.
settings
.
fix_ie_paragraphs
){
p
=
p
.
replace
(
/<p><\/p>|<p([^>]+)><\/p>|<p[^\/+]\/>/gi
,
'<p$1 _mce_keep="true"> </p>'
)}
y
();
if
(
o
.
settings
.
fix_ie_paragraphs
){
s
=
v
.
getElementsByTagName
(
"p"
);
for
(
t
=
s
.
length
-
1
,
r
=
0
;
t
>=
0
;
t
--
){
z
=
s
[
t
];
if
(
!
z
.
hasChildNodes
()){
if
(
!
z
.
_mce_keep
){
r
=
1
;
break
}
z
.
removeAttribute
(
"_mce_keep"
)}}}
if
(
r
){
p
=
p
.
replace
(
/<p ([^>]+)>|<p>/ig
,
'<div $1 _mce_tmp="1">'
);
p
=
p
.
replace
(
/<\/p>/g
,
"</div>"
);
y
();
if
(
o
.
settings
.
fix_ie_paragraphs
){
s
=
v
.
getElementsByTagName
(
"DIV"
);
for
(
t
=
s
.
length
-
1
;
t
>=
0
;
t
--
){
z
=
s
[
t
];
if
(
z
.
_mce_tmp
){
u
=
o
.
doc
.
createElement
(
"p"
);
z
.
cloneNode
(
false
).
outerHTML
.
replace
(
/([a-z0-9\-_]+)=/gi
,
function
(
A
,
x
){
var
B
;
if
(
x
!==
"_mce_tmp"
){
B
=
z
.
getAttribute
(
x
);
if
(
!
B
&&
x
===
"class"
){
B
=
z
.
className
}
u
.
setAttribute
(
x
,
B
)}});
for
(
r
=
0
;
r
<
z
.
childNodes
.
length
;
r
++
){
u
.
appendChild
(
z
.
childNodes
[
r
].
cloneNode
(
true
))}
z
.
swapNode
(
u
)}}}}}
else
{
v
.
innerHTML
=
p
}
return
p
})},
processHTML
:
function
(
r
){
var
p
=
this
,
q
=
p
.
settings
,
v
=
[];
if
(
!
q
.
process_html
){
return
r
}
if
(
d
){
r
=
r
.
replace
(
/'/g
,
"'"
);
r
=
r
.
replace
(
/\s+(disabled|checked|readonly|selected)\s*=\s*[\"\']?(false|0)[\"\']?/gi
,
""
)}
r
=
r
.
replace
(
/<a( )([^>]+)\/>|<a\/>/gi
,
"<a$1$2></a>"
);
if
(
q
.
keep_values
){
if
(
/<script|noscript|style/i
.
test
(
r
)){
function
o
(
t
){
t
=
t
.
replace
(
/(<!--\[CDATA\[|\]\]-->)/g
,
"\n"
);
t
=
t
.
replace
(
/^[\r\n]*|[\r\n]*$/g
,
""
);
t
=
t
.
replace
(
/^\s*(\/\/\s*<!--|\/\/\s*<!\[CDATA\[|<!--|<!\[CDATA\[)[\r\n]*/g
,
""
);
t
=
t
.
replace
(
/\s*(\/\/\s*\]\]>|\/\/\s*-->|\]\]>|-->|\]\]-->)\s*$/g
,
""
);
return
t
}
r
=
r
.
replace
(
/<script([^>]+|)>([\s\S]*?)<\/script>/gi
,
function
(
s
,
x
,
t
){
if
(
!
x
){
x
=
' type="text/javascript"'
}
x
=
x
.
replace
(
/src=\"([^\"]+)\"?/i
,
function
(
y
,
z
){
if
(
q
.
url_converter
){
z
=
p
.
encode
(
q
.
url_converter
.
call
(
q
.
url_converter_scope
||
p
,
p
.
decode
(
z
),
"src"
,
"script"
))}
return
'_mce_src="'
+
z
+
'"'
});
if
(
m
.
trim
(
t
)){
v
.
push
(
o
(
t
));
t
=
"<!--\nMCE_SCRIPT:"
+
(
v
.
length
-
1
)
+
"\n// -->"
}
return
"<mce:script"
+
x
+
">"
+
t
+
"</mce:script>"
});
r
=
r
.
replace
(
/<style([^>]+|)>([\s\S]*?)<\/style>/gi
,
function
(
s
,
x
,
t
){
if
(
t
){
v
.
push
(
o
(
t
));
t
=
"<!--\nMCE_SCRIPT:"
+
(
v
.
length
-
1
)
+
"\n-->"
}
return
"<mce:style"
+
x
+
">"
+
t
+
"</mce:style><style "
+
x
+
' _mce_bogus="1">'
+
t
+
"</style>"
});
r
=
r
.
replace
(
/<noscript([^>]+|)>([\s\S]*?)<\/noscript>/g
,
function
(
s
,
x
,
t
){
return
"<mce:noscript"
+
x
+
"><!--"
+
p
.
encode
(
t
).
replace
(
/--/g
,
"--"
)
+
"--></mce:noscript>"
})}
r
=
r
.
replace
(
/<!\[CDATA\[([\s\S]+)\]\]>/g
,
"<!--[CDATA[$1]]-->"
);
function
u
(
s
){
return
s
.
replace
(
h
,
function
(
y
,
z
,
x
,
t
){
return
"<"
+
z
+
x
.
replace
(
l
,
function
(
B
,
A
,
E
,
D
,
C
){
var
F
;
A
=
A
.
toLowerCase
();
E
=
E
||
D
||
C
||
""
;
if
(
e
[
A
]){
if
(
E
===
"false"
||
E
===
"0"
){
return
}
return
A
+
'="'
+
A
+
'"'
}
if
(
f
[
A
]
&&
x
.
indexOf
(
"_mce_"
+
A
)
==-
1
){
F
=
p
.
decode
(
E
);
if
(
q
.
url_converter
&&
(
A
==
"src"
||
A
==
"href"
)){
F
=
q
.
url_converter
.
call
(
q
.
url_converter_scope
||
p
,
F
,
A
,
z
)}
if
(
A
==
"style"
){
F
=
p
.
serializeStyle
(
p
.
parseStyle
(
F
),
A
)}
return
A
+
'="'
+
E
+
'" _mce_'
+
A
+
'="'
+
p
.
encode
(
F
)
+
'"'
}
return
B
})
+
t
+
">"
})}
r
=
u
(
r
);
r
=
r
.
replace
(
/MCE_SCRIPT:([0-9]+)/g
,
function
(
t
,
s
){
return
v
[
s
]})}
return
r
},
getOuterHTML
:
function
(
o
){
var
p
;
o
=
this
.
get
(
o
);
if
(
!
o
){
return
null
}
if
(
o
.
outerHTML
!==
undefined
){
return
o
.
outerHTML
}
p
=
(
o
.
ownerDocument
||
this
.
doc
).
createElement
(
"body"
);
p
.
appendChild
(
o
.
cloneNode
(
true
));
return
p
.
innerHTML
},
setOuterHTML
:
function
(
r
,
p
,
s
){
var
o
=
this
;
function
q
(
u
,
t
,
x
){
var
y
,
v
;
v
=
x
.
createElement
(
"body"
);
v
.
innerHTML
=
t
;
y
=
v
.
lastChild
;
while
(
y
){
o
.
insertAfter
(
y
.
cloneNode
(
true
),
u
);
y
=
y
.
previousSibling
}
o
.
remove
(
u
)}
return
this
.
run
(
r
,
function
(
u
){
u
=
o
.
get
(
u
);
if
(
u
.
nodeType
==
1
){
s
=
s
||
u
.
ownerDocument
||
o
.
doc
;
if
(
d
){
try
{
if
(
d
&&
u
.
nodeType
==
1
){
u
.
outerHTML
=
p
}
else
{
q
(
u
,
p
,
s
)}}
catch
(
t
){
q
(
u
,
p
,
s
)}}
else
{
q
(
u
,
p
,
s
)}}})},
decode
:
function
(
p
){
var
q
,
r
,
o
;
if
(
/&[\w#]+;/
.
test
(
p
)){
q
=
this
.
doc
.
createElement
(
"div"
);
q
.
innerHTML
=
p
;
r
=
q
.
firstChild
;
o
=
""
;
if
(
r
){
do
{
o
+=
r
.
nodeValue
}
while
(
r
=
r
.
nextSibling
)}
return
o
||
p
}
return
p
},
encode
:
function
(
o
){
return
(
""
+
o
).
replace
(
n
,
function
(
p
){
return
c
[
p
]})},
insertAfter
:
function
(
o
,
p
){
p
=
this
.
get
(
p
);
return
this
.
run
(
o
,
function
(
r
){
var
q
,
s
;
q
=
p
.
parentNode
;
s
=
p
.
nextSibling
;
if
(
s
){
q
.
insertBefore
(
r
,
s
)}
else
{
q
.
appendChild
(
r
)}
return
r
})},
isBlock
:
function
(
o
){
if
(
o
.
nodeType
&&
o
.
nodeType
!==
1
){
return
false
}
o
=
o
.
nodeName
||
o
;
return
a
.
test
(
o
)},
replace
:
function
(
s
,
r
,
p
){
var
q
=
this
;
if
(
j
(
r
,
"array"
)){
s
=
s
.
cloneNode
(
true
)}
return
q
.
run
(
r
,
function
(
t
){
if
(
p
){
k
(
m
.
grep
(
t
.
childNodes
),
function
(
o
){
s
.
appendChild
(
o
)})}
return
t
.
parentNode
.
replaceChild
(
s
,
t
)})},
rename
:
function
(
r
,
o
){
var
q
=
this
,
p
;
if
(
r
.
nodeName
!=
o
.
toUpperCase
()){
p
=
q
.
create
(
o
);
k
(
q
.
getAttribs
(
r
),
function
(
s
){
q
.
setAttrib
(
p
,
s
.
nodeName
,
q
.
getAttrib
(
r
,
s
.
nodeName
))});
q
.
replace
(
p
,
r
,
1
)}
return
p
||
r
},
findCommonAncestor
:
function
(
q
,
o
){
var
r
=
q
,
p
;
while
(
r
){
p
=
o
;
while
(
p
&&
r
!=
p
){
p
=
p
.
parentNode
}
if
(
r
==
p
){
break
}
r
=
r
.
parentNode
}
if
(
!
r
&&
q
.
ownerDocument
){
return
q
.
ownerDocument
.
documentElement
}
return
r
},
toHex
:
function
(
o
){
var
q
=
/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i
.
exec
(
o
);
function
p
(
r
){
r
=
parseInt
(
r
).
toString
(
16
);
return
r
.
length
>
1
?
r
:
"0"
+
r
}
if
(
q
){
o
=
"#"
+
p
(
q
[
1
])
+
p
(
q
[
2
])
+
p
(
q
[
3
]);
return
o
}
return
o
},
getClasses
:
function
(){
var
s
=
this
,
o
=
[],
r
,
u
=
{},
v
=
s
.
settings
.
class_filter
,
q
;
if
(
s
.
classes
){
return
s
.
classes
}
function
x
(
t
){
k
(
t
.
imports
,
function
(
y
){
x
(
y
)});
k
(
t
.
cssRules
||
t
.
rules
,
function
(
y
){
switch
(
y
.
type
||
1
){
case
1
:
if
(
y
.
selectorText
){
k
(
y
.
selectorText
.
split
(
","
),
function
(
z
){
z
=
z
.
replace
(
/^\s*|\s*$|^\s\./g
,
""
);
if
(
/\.mce/
.
test
(
z
)
||!
/\.[\w\-]+$/
.
test
(
z
)){
return
}
q
=
z
;
z
=
z
.
replace
(
/.*\.([a-z0-9_\-]+).*/i
,
"$1"
);
if
(
v
&&!
(
z
=
v
(
z
,
q
))){
return
}
if
(
!
u
[
z
]){
o
.
push
({
"class"
:
z
});
u
[
z
]
=
1
}})}
break
;
case
3
:
x
(
y
.
styleSheet
);
break
}})}
try
{
k
(
s
.
doc
.
styleSheets
,
x
)}
catch
(
p
){}
if
(
o
.
length
>
0
){
s
.
classes
=
o
}
return
o
},
run
:
function
(
u
,
r
,
q
){
var
p
=
this
,
v
;
if
(
p
.
doc
&&
typeof
(
u
)
===
"string"
){
u
=
p
.
get
(
u
)}
if
(
!
u
){
return
false
}
q
=
q
||
this
;
if
(
!
u
.
nodeType
&&
(
u
.
length
||
u
.
length
===
0
)){
v
=
[];
k
(
u
,
function
(
s
,
o
){
if
(
s
){
if
(
typeof
(
s
)
==
"string"
){
s
=
p
.
doc
.
getElementById
(
s
)}
v
.
push
(
r
.
call
(
q
,
s
,
o
))}});
return
v
}
return
r
.
call
(
q
,
u
)},
getAttribs
:
function
(
q
){
var
p
;
q
=
this
.
get
(
q
);
if
(
!
q
){
return
[]}
if
(
d
){
p
=
[];
if
(
q
.
nodeName
==
"OBJECT"
){
return
q
.
attributes
}
if
(
q
.
nodeName
===
"OPTION"
&&
this
.
getAttrib
(
q
,
"selected"
)){
p
.
push
({
specified
:
1
,
nodeName
:
"selected"
})}
q
.
cloneNode
(
false
).
outerHTML
.
replace
(
/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi
,
""
).
replace
(
/[\w:\-]+/gi
,
function
(
o
){
p
.
push
({
specified
:
1
,
nodeName
:
o
})});
return
p
}
return
q
.
attributes
},
destroy
:
function
(
p
){
var
o
=
this
;
if
(
o
.
events
){
o
.
events
.
destroy
()}
o
.
win
=
o
.
doc
=
o
.
root
=
o
.
events
=
null
;
if
(
!
p
){
m
.
removeUnload
(
o
.
destroy
)}},
createRng
:
function
(){
var
o
=
this
.
doc
;
return
o
.
createRange
?
o
.
createRange
()
:
new
m
.
dom
.
Range
(
this
)},
nodeIndex
:
function
(
s
,
t
){
var
o
=
0
,
q
,
r
,
p
;
if
(
s
){
for
(
q
=
s
.
nodeType
,
s
=
s
.
previousSibling
,
r
=
s
;
s
;
s
=
s
.
previousSibling
){
p
=
s
.
nodeType
;
if
(
!
t
||
p
!=
3
||
(
q
!=
p
&&
s
.
nodeValue
.
length
)){
o
++
}
q
=
p
}}
return
o
},
split
:
function
(
u
,
s
,
y
){
var
z
=
this
,
o
=
z
.
createRng
(),
v
,
q
,
x
;
function
p
(
A
){
var
t
,
r
=
A
.
childNodes
;
if
(
A
.
nodeType
==
1
&&
A
.
getAttribute
(
"_mce_type"
)
==
"bookmark"
){
return
}
for
(
t
=
r
.
length
-
1
;
t
>=
0
;
t
--
){
p
(
r
[
t
])}
if
(
A
.
nodeType
!=
9
){
if
(
A
.
nodeType
==
3
&&
A
.
nodeValue
.
length
>
0
){
return
}
if
(
A
.
nodeType
==
1
){
r
=
A
.
childNodes
;
if
(
r
.
length
==
1
&&
r
[
0
]
&&
r
[
0
].
nodeType
==
1
&&
r
[
0
].
getAttribute
(
"_mce_type"
)
==
"bookmark"
){
A
.
parentNode
.
insertBefore
(
r
[
0
],
A
)}
if
(
r
.
length
||
/^(br|hr|input|img)$/i
.
test
(
A
.
nodeName
)){
return
}}
z
.
remove
(
A
)}
return
A
}
if
(
u
&&
s
){
o
.
setStart
(
u
.
parentNode
,
z
.
nodeIndex
(
u
));
o
.
setEnd
(
s
.
parentNode
,
z
.
nodeIndex
(
s
));
v
=
o
.
extractContents
();
o
=
z
.
createRng
();
o
.
setStart
(
s
.
parentNode
,
z
.
nodeIndex
(
s
)
+
1
);
o
.
setEnd
(
u
.
parentNode
,
z
.
nodeIndex
(
u
)
+
1
);
q
=
o
.
extractContents
();
x
=
u
.
parentNode
;
x
.
insertBefore
(
p
(
v
),
u
);
if
(
y
){
x
.
replaceChild
(
y
,
s
)}
else
{
x
.
insertBefore
(
s
,
u
)}
x
.
insertBefore
(
p
(
q
),
u
);
z
.
remove
(
u
);
return
y
||
s
}},
bind
:
function
(
s
,
o
,
r
,
q
){
var
p
=
this
;
if
(
!
p
.
events
){
p
.
events
=
new
m
.
dom
.
EventUtils
()}
return
p
.
events
.
add
(
s
,
o
,
r
,
q
||
this
)},
unbind
:
function
(
r
,
o
,
q
){
var
p
=
this
;
if
(
!
p
.
events
){
p
.
events
=
new
m
.
dom
.
EventUtils
()}
return
p
.
events
.
remove
(
r
,
o
,
q
)},
_findSib
:
function
(
r
,
o
,
p
){
var
q
=
this
,
s
=
o
;
if
(
r
){
if
(
j
(
s
,
"string"
)){
s
=
function
(
t
){
return
q
.
is
(
t
,
o
)}}
for
(
r
=
r
[
p
];
r
;
r
=
r
[
p
]){
if
(
s
(
r
)){
return
r
}}}
return
null
},
_isRes
:
function
(
o
){
return
/^(top|left|bottom|right|width|height)/i
.
test
(
o
)
||
/;\s*(top|left|bottom|right|width|height)/i
.
test
(
o
)}});
m
.
DOM
=
new
m
.
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
(
W
,
X
){
var
Z
=
N
[
h
],
Y
=
N
[
U
],
V
=
N
[
P
],
t
=
N
[
z
];
if
(
W
===
0
){
return
G
(
Z
,
Y
,
Z
,
Y
)}
if
(
W
===
1
){
return
G
(
Z
,
Y
,
V
,
t
)}
if
(
W
===
2
){
return
G
(
V
,
t
,
V
,
t
)}
if
(
W
===
3
){
return
G
(
V
,
t
,
Z
,
Y
)}}
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
(
h
){
var
j
=
this
,
k
=
"\uFEFF"
,
f
,
i
,
e
=
h
.
dom
,
d
=
true
,
g
=
false
;
function
c
(
m
,
l
){
if
(
m
&&
l
){
if
(
m
.
item
&&
l
.
item
&&
m
.
item
(
0
)
===
l
.
item
(
0
)){
return
d
}
if
(
m
.
isEqual
&&
l
.
isEqual
&&
l
.
isEqual
(
m
)){
try
{
f
.
startContainer
.
nextSibling
;
return
d
}
catch
(
n
){}}}
return
g
}
function
b
(){
var
p
=
h
.
getRng
(),
l
=
e
.
createRng
(),
m
,
n
,
r
,
q
;
n
=
p
.
item
?
p
.
item
(
0
)
:
p
.
parentElement
();
if
(
n
.
ownerDocument
!=
e
.
doc
){
return
l
}
if
(
p
.
item
||!
n
.
hasChildNodes
()){
l
.
setStart
(
n
.
parentNode
,
e
.
nodeIndex
(
n
));
l
.
setEnd
(
l
.
startContainer
,
l
.
startOffset
+
1
);
return
l
}
m
=
p
.
duplicate
();
r
=
h
.
isCollapsed
();
p
.
collapse
();
p
.
pasteHTML
(
'<span id="_mce_start" style="display:none;line-height:0">'
+
k
+
"</span>"
);
if
(
!
r
){
m
.
collapse
(
g
);
m
.
pasteHTML
(
'<span id="_mce_end" style="display:none;line-height:0">'
+
k
+
"</span>"
)}
function
o
(
x
){
var
t
,
v
,
s
,
u
;
s
=
e
.
get
(
"_mce_"
+
(
x
?
"start"
:
"end"
));
u
=
s
.
previousSibling
;
if
(
u
&&
u
.
nodeType
==
3
){
t
=
u
;
v
=
t
.
nodeValue
.
length
;
e
.
remove
(
s
);
u
=
t
.
nextSibling
;
if
(
u
&&
u
.
nodeType
==
3
){
q
=
d
;
t
.
appendData
(
u
.
nodeValue
);
e
.
remove
(
u
)}}
else
{
u
=
s
.
nextSibling
;
if
(
u
&&
u
.
nodeType
==
3
){
t
=
u
;
v
=
0
}
else
{
if
(
u
){
v
=
e
.
nodeIndex
(
u
)
-
1
}
else
{
v
=
e
.
nodeIndex
(
s
)}
t
=
s
.
parentNode
}
e
.
remove
(
s
)}
if
(
x
){
l
.
setStart
(
t
,
v
)}
if
(
!
x
||
r
){
l
.
setEnd
(
t
,
v
)}}
o
(
d
);
if
(
!
r
){
o
(
g
)}
if
(
q
){
j
.
addRange
(
l
)}
return
l
}
this
.
addRange
=
function
(
m
){
var
u
,
A
,
z
=
h
.
dom
.
doc
,
s
=
z
.
body
,
v
,
o
,
y
,
p
,
t
,
l
,
q
,
r
,
x
,
n
;
this
.
destroy
();
y
=
m
.
startContainer
;
p
=
m
.
startOffset
;
t
=
m
.
endContainer
;
l
=
m
.
endOffset
;
u
=
s
.
createTextRange
();
if
(
y
==
z
||
t
==
z
){
u
=
s
.
createTextRange
();
u
.
collapse
();
u
.
select
();
return
}
if
(
y
.
nodeType
==
1
&&
y
.
hasChildNodes
()){
r
=
y
.
childNodes
.
length
-
1
;
if
(
p
>
r
){
x
=
1
;
y
=
y
.
childNodes
[
r
]}
else
{
y
=
y
.
childNodes
[
p
]}
if
(
y
.
nodeType
==
3
){
p
=
0
}}
if
(
t
.
nodeType
==
1
&&
t
.
hasChildNodes
()){
r
=
t
.
childNodes
.
length
-
1
;
if
(
l
==
0
){
n
=
1
;
t
=
t
.
childNodes
[
0
]}
else
{
t
=
t
.
childNodes
[
Math
.
min
(
r
,
l
-
1
)];
if
(
t
.
nodeType
==
3
){
l
=
t
.
nodeValue
.
length
}}}
if
(
y
==
t
&&
y
.
nodeType
==
1
){
if
(
/^(IMG|TABLE)$/
.
test
(
y
.
nodeName
)
&&
p
!=
l
){
u
=
s
.
createControlRange
();
u
.
addElement
(
y
)}
else
{
u
=
s
.
createTextRange
();
if
(
!
y
.
hasChildNodes
()
&&
y
.
canHaveHTML
){
y
.
innerHTML
=
k
}
u
.
moveToElementText
(
y
);
if
(
y
.
innerHTML
==
k
){
u
.
collapse
(
d
);
y
.
removeChild
(
y
.
firstChild
)}}
if
(
p
==
l
){
u
.
collapse
(
l
<=
m
.
endContainer
.
childNodes
.
length
-
1
)}
u
.
select
();
u
.
scrollIntoView
();
return
}
u
=
s
.
createTextRange
();
q
=
z
.
createElement
(
"span"
);
q
.
innerHTML
=
" "
;
if
(
y
.
nodeType
==
3
){
if
(
x
){
e
.
insertAfter
(
q
,
y
)}
else
{
y
.
parentNode
.
insertBefore
(
q
,
y
)}
u
.
moveToElementText
(
q
);
q
.
parentNode
.
removeChild
(
q
);
u
.
move
(
"character"
,
p
)}
else
{
u
.
moveToElementText
(
y
);
if
(
x
){
u
.
collapse
(
g
)}}
if
(
y
==
t
&&
y
.
nodeType
==
3
){
u
.
moveEnd
(
"character"
,
l
-
p
);
u
.
select
();
u
.
scrollIntoView
();
return
}
A
=
s
.
createTextRange
();
if
(
t
.
nodeType
==
3
){
t
.
parentNode
.
insertBefore
(
q
,
t
);
A
.
moveToElementText
(
q
);
q
.
parentNode
.
removeChild
(
q
);
A
.
move
(
"character"
,
l
);
u
.
setEndPoint
(
"EndToStart"
,
A
)}
else
{
A
.
moveToElementText
(
t
);
A
.
collapse
(
!!
n
);
u
.
setEndPoint
(
"EndToEnd"
,
A
)}
u
.
select
();
u
.
scrollIntoView
()};
this
.
getRangeAt
=
function
(){
if
(
!
f
||!
c
(
i
,
h
.
getRng
())){
f
=
b
();
i
=
h
.
getRng
()}
return
f
};
this
.
destroy
=
function
(){
i
=
f
=
null
};
if
(
h
.
dom
.
boxModel
){(
function
(){
var
r
=
e
.
doc
,
m
=
r
.
body
,
o
,
p
;
r
.
documentElement
.
unselectable
=
d
;
function
q
(
s
,
v
){
var
t
=
m
.
createTextRange
();
try
{
t
.
moveToPoint
(
s
,
v
)}
catch
(
u
){
t
=
null
}
return
t
}
function
n
(
t
){
var
s
;
if
(
t
.
button
){
s
=
q
(
t
.
x
,
t
.
y
);
if
(
s
){
if
(
s
.
compareEndPoints
(
"StartToStart"
,
p
)
>
0
){
s
.
setEndPoint
(
"StartToStart"
,
p
)}
else
{
s
.
setEndPoint
(
"EndToEnd"
,
p
)}
s
.
select
()}}
else
{
l
()}}
function
l
(){
e
.
unbind
(
r
,
"mouseup"
,
l
);
e
.
unbind
(
r
,
"mousemove"
,
n
);
o
=
0
}
e
.
bind
(
r
,
"mousedown"
,
function
(
s
){
if
(
s
.
target
.
nodeName
===
"HTML"
){
if
(
o
){
l
()}
o
=
1
;
p
=
q
(
s
.
x
,
s
.
y
);
if
(
p
){
e
.
bind
(
r
,
"mouseup"
,
l
);
e
.
bind
(
r
,
"mousemove"
,
n
);
p
.
select
()}}})})()}}
tinymce
.
dom
.
TridentSelection
=
a
})();(
function
(){
var
p
=
/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g
,
i
=
0
,
d
=
Object
.
prototype
.
toString
,
n
=
false
;
var
b
=
function
(
E
,
t
,
B
,
v
){
B
=
B
||
[];
var
e
=
t
=
t
||
document
;
if
(
t
.
nodeType
!==
1
&&
t
.
nodeType
!==
9
){
return
[]}
if
(
!
E
||
typeof
E
!==
"string"
){
return
B
}
var
C
=
[],
D
,
z
,
H
,
G
,
A
,
s
,
r
=
true
,
x
=
o
(
t
);
p
.
lastIndex
=
0
;
while
((
D
=
p
.
exec
(
E
))
!==
null
){
C
.
push
(
D
[
1
]);
if
(
D
[
2
]){
s
=
RegExp
.
rightContext
;
break
}}
if
(
C
.
length
>
1
&&
j
.
exec
(
E
)){
if
(
C
.
length
===
2
&&
f
.
relative
[
C
[
0
]]){
z
=
g
(
C
[
0
]
+
C
[
1
],
t
)}
else
{
z
=
f
.
relative
[
C
[
0
]]
?
[
t
]
:
b
(
C
.
shift
(),
t
);
while
(
C
.
length
){
E
=
C
.
shift
();
if
(
f
.
relative
[
E
]){
E
+=
C
.
shift
()}
z
=
g
(
E
,
z
)}}}
else
{
if
(
!
v
&&
C
.
length
>
1
&&
t
.
nodeType
===
9
&&!
x
&&
f
.
match
.
ID
.
test
(
C
[
0
])
&&!
f
.
match
.
ID
.
test
(
C
[
C
.
length
-
1
])){
var
I
=
b
.
find
(
C
.
shift
(),
t
,
x
);
t
=
I
.
expr
?
b
.
filter
(
I
.
expr
,
I
.
set
)[
0
]
:
I
.
set
[
0
]}
if
(
t
){
var
I
=
v
?
{
expr
:
C
.
pop
(),
set
:
a
(
v
)}
:
b
.
find
(
C
.
pop
(),
C
.
length
===
1
&&
(
C
[
0
]
===
"~"
||
C
[
0
]
===
"+"
)
&&
t
.
parentNode
?
t
.
parentNode
:
t
,
x
);
z
=
I
.
expr
?
b
.
filter
(
I
.
expr
,
I
.
set
)
:
I
.
set
;
if
(
C
.
length
>
0
){
H
=
a
(
z
)}
else
{
r
=
false
}
while
(
C
.
length
){
var
u
=
C
.
pop
(),
y
=
u
;
if
(
!
f
.
relative
[
u
]){
u
=
""
}
else
{
y
=
C
.
pop
()}
if
(
y
==
null
){
y
=
t
}
f
.
relative
[
u
](
H
,
y
,
x
)}}
else
{
H
=
C
=
[]}}
if
(
!
H
){
H
=
z
}
if
(
!
H
){
throw
"Syntax error, unrecognized expression: "
+
(
u
||
E
)}
if
(
d
.
call
(
H
)
===
"[object Array]"
){
if
(
!
r
){
B
.
push
.
apply
(
B
,
H
)}
else
{
if
(
t
&&
t
.
nodeType
===
1
){
for
(
var
F
=
0
;
H
[
F
]
!=
null
;
F
++
){
if
(
H
[
F
]
&&
(
H
[
F
]
===
true
||
H
[
F
].
nodeType
===
1
&&
h
(
t
,
H
[
F
]))){
B
.
push
(
z
[
F
])}}}
else
{
for
(
var
F
=
0
;
H
[
F
]
!=
null
;
F
++
){
if
(
H
[
F
]
&&
H
[
F
].
nodeType
===
1
){
B
.
push
(
z
[
F
])}}}}}
else
{
a
(
H
,
B
)}
if
(
s
){
b
(
s
,
e
,
B
,
v
);
b
.
uniqueSort
(
B
)}
return
B
};
b
.
uniqueSort
=
function
(
r
){
if
(
c
){
n
=
false
;
r
.
sort
(
c
);
if
(
n
){
for
(
var
e
=
1
;
e
<
r
.
length
;
e
++
){
if
(
r
[
e
]
===
r
[
e
-
1
]){
r
.
splice
(
e
--
,
1
)}}}}};
b
.
matches
=
function
(
e
,
r
){
return
b
(
e
,
null
,
null
,
r
)};
b
.
find
=
function
(
y
,
e
,
z
){
var
x
,
u
;
if
(
!
y
){
return
[]}
for
(
var
t
=
0
,
s
=
f
.
order
.
length
;
t
<
s
;
t
++
){
var
v
=
f
.
order
[
t
],
u
;
if
((
u
=
f
.
match
[
v
].
exec
(
y
))){
var
r
=
RegExp
.
leftContext
;
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
(
B
,
A
,
E
,
t
){
var
s
=
B
,
G
=
[],
y
=
A
,
v
,
e
,
x
=
A
&&
A
[
0
]
&&
o
(
A
[
0
]);
while
(
B
&&
A
.
length
){
for
(
var
z
in
f
.
filter
){
if
((
v
=
f
.
match
[
z
].
exec
(
B
))
!=
null
){
var
r
=
f
.
filter
[
z
],
F
,
D
;
e
=
false
;
if
(
y
==
G
){
G
=
[]}
if
(
f
.
preFilter
[
z
]){
v
=
f
.
preFilter
[
z
](
v
,
y
,
E
,
G
,
t
,
x
);
if
(
!
v
){
e
=
F
=
true
}
else
{
if
(
v
===
true
){
continue
}}}
if
(
v
){
for
(
var
u
=
0
;(
D
=
y
[
u
])
!=
null
;
u
++
){
if
(
D
){
F
=
r
(
D
,
v
,
u
,
y
);
var
C
=
t
^!!
F
;
if
(
E
&&
F
!=
null
){
if
(
C
){
e
=
true
}
else
{
y
[
u
]
=
false
}}
else
{
if
(
C
){
G
.
push
(
D
);
e
=
true
}}}}}
if
(
F
!==
undefined
){
if
(
!
E
){
y
=
G
}
B
=
B
.
replace
(
f
.
match
[
z
],
""
);
if
(
!
e
){
return
[]}
break
}}}
if
(
B
==
s
){
if
(
e
==
null
){
throw
"Syntax error, unrecognized expression: "
+
B
}
else
{
break
}}
s
=
B
}
return
y
};
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\(\)]*)+)\2\))?/
},
attrMap
:
{
"class"
:
"className"
,
"for"
:
"htmlFor"
},
attrHandle
:
{
href
:
function
(
e
){
return
e
.
getAttribute
(
"href"
)}},
relative
:
{
"+"
:
function
(
y
,
e
,
x
){
var
u
=
typeof
e
===
"string"
,
z
=
u
&&!
/\W/
.
test
(
e
),
v
=
u
&&!
z
;
if
(
z
&&!
x
){
e
=
e
.
toUpperCase
()}
for
(
var
t
=
0
,
s
=
y
.
length
,
r
;
t
<
s
;
t
++
){
if
((
r
=
y
[
t
])){
while
((
r
=
r
.
previousSibling
)
&&
r
.
nodeType
!==
1
){}
y
[
t
]
=
v
||
r
&&
r
.
nodeName
===
e
?
r
||
false
:
r
===
e
}}
if
(
v
){
b
.
filter
(
e
,
y
,
true
)}},
">"
:
function
(
x
,
r
,
y
){
var
u
=
typeof
r
===
"string"
;
if
(
u
&&!
/\W/
.
test
(
r
)){
r
=
y
?
r
:
r
.
toUpperCase
();
for
(
var
s
=
0
,
e
=
x
.
length
;
s
<
e
;
s
++
){
var
v
=
x
[
s
];
if
(
v
){
var
t
=
v
.
parentNode
;
x
[
s
]
=
t
.
nodeName
===
r
?
t
:
false
}}}
else
{
for
(
var
s
=
0
,
e
=
x
.
length
;
s
<
e
;
s
++
){
var
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
=
i
++
,
e
=
q
;
if
(
!
r
.
match
(
/\W/
)){
var
u
=
r
=
v
?
r
:
r
.
toUpperCase
();
e
=
m
}
e
(
"parentNode"
,
r
,
s
,
t
,
u
,
v
)},
"~"
:
function
(
t
,
r
,
v
){
var
s
=
i
++
,
e
=
q
;
if
(
typeof
r
===
"string"
&&!
r
.
match
(
/\W/
)){
var
u
=
r
=
v
?
r
:
r
.
toUpperCase
();
e
=
m
}
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
,
x
){
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
+
" "
).
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
){
for
(
var
s
=
0
;
e
[
s
]
===
false
;
s
++
){}
return
e
[
s
]
&&
o
(
e
[
s
])
?
r
[
1
]
:
r
[
1
].
toUpperCase
()},
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
]
=
i
++
;
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
(
u
[
3
].
match
(
p
).
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
.
toUpperCase
()
===
"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
(
x
,
s
,
t
,
y
){
var
r
=
s
[
1
],
u
=
f
.
filters
[
r
];
if
(
u
){
return
u
(
x
,
t
,
s
,
y
)}
else
{
if
(
r
===
"contains"
){
return
(
x
.
textContent
||
x
.
innerText
||
""
).
indexOf
(
s
[
3
])
>=
0
}
else
{
if
(
r
===
"not"
){
var
v
=
s
[
3
];
for
(
var
t
=
0
,
e
=
v
.
length
;
t
<
e
;
t
++
){
if
(
v
[
t
]
===
x
){
return
false
}}
return
true
}}}},
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
===
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
j
=
f
.
match
.
POS
;
for
(
var
l
in
f
.
match
){
f
.
match
[
l
]
=
new
RegExp
(
f
.
match
[
l
].
source
+
/(?![^\[]*\])(?![^\(]*\))/
.
source
)}
var
a
=
function
(
r
,
e
){
r
=
Array
.
prototype
.
slice
.
call
(
r
);
if
(
e
){
e
.
push
.
apply
(
e
,
r
);
return
e
}
return
r
};
try
{
Array
.
prototype
.
slice
.
call
(
document
.
documentElement
.
childNodes
)}
catch
(
k
){
a
=
function
(
u
,
t
){
var
r
=
t
||
[];
if
(
d
.
call
(
u
)
===
"[object Array]"
){
Array
.
prototype
.
push
.
apply
(
r
,
u
)}
else
{
if
(
typeof
u
.
length
===
"number"
){
for
(
var
s
=
0
,
e
=
u
.
length
;
s
<
e
;
s
++
){
r
.
push
(
u
[
s
])}}
else
{
for
(
var
s
=
0
;
u
[
s
];
s
++
){
r
.
push
(
u
[
s
])}}}
return
r
}}
var
c
;
if
(
document
.
documentElement
.
compareDocumentPosition
){
c
=
function
(
r
,
e
){
var
s
=
r
.
compareDocumentPosition
(
e
)
&
4
?-
1
:
r
===
e
?
0
:
1
;
if
(
s
===
0
){
n
=
true
}
return
s
}}
else
{
if
(
"sourceIndex"
in
document
.
documentElement
){
c
=
function
(
r
,
e
){
var
s
=
r
.
sourceIndex
-
e
.
sourceIndex
;
if
(
s
===
0
){
n
=
true
}
return
s
}}
else
{
if
(
document
.
createRange
){
c
=
function
(
t
,
r
){
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
){
n
=
true
}
return
u
}}}}(
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
)})();(
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
)}}})();
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
&&!
o
(
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
]}})()}
if
(
document
.
getElementsByClassName
&&
document
.
documentElement
.
getElementsByClassName
){(
function
(){
var
e
=
document
.
createElement
(
"div"
);
e
.
innerHTML
=
"<div class='test e'></div><div class='test'></div>"
;
if
(
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
])}}})()}
function
m
(
r
,
x
,
v
,
B
,
y
,
A
){
var
z
=
r
==
"previousSibling"
&&!
A
;
for
(
var
t
=
0
,
s
=
B
.
length
;
t
<
s
;
t
++
){
var
e
=
B
[
t
];
if
(
e
){
if
(
z
&&
e
.
nodeType
===
1
){
e
.
sizcache
=
v
;
e
.
sizset
=
t
}
e
=
e
[
r
];
var
u
=
false
;
while
(
e
){
if
(
e
.
sizcache
===
v
){
u
=
B
[
e
.
sizset
];
break
}
if
(
e
.
nodeType
===
1
&&!
A
){
e
.
sizcache
=
v
;
e
.
sizset
=
t
}
if
(
e
.
nodeName
===
x
){
u
=
e
;
break
}
e
=
e
[
r
]}
B
[
t
]
=
u
}}}
function
q
(
r
,
x
,
v
,
B
,
y
,
A
){
var
z
=
r
==
"previousSibling"
&&!
A
;
for
(
var
t
=
0
,
s
=
B
.
length
;
t
<
s
;
t
++
){
var
e
=
B
[
t
];
if
(
e
){
if
(
z
&&
e
.
nodeType
===
1
){
e
.
sizcache
=
v
;
e
.
sizset
=
t
}
e
=
e
[
r
];
var
u
=
false
;
while
(
e
){
if
(
e
.
sizcache
===
v
){
u
=
B
[
e
.
sizset
];
break
}
if
(
e
.
nodeType
===
1
){
if
(
!
A
){
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
]}
B
[
t
]
=
u
}}}
var
h
=
document
.
compareDocumentPosition
?
function
(
r
,
e
){
return
r
.
compareDocumentPosition
(
e
)
&
16
}
:
function
(
r
,
e
){
return
r
!==
e
&&
(
r
.
contains
?
r
.
contains
(
e
)
:
true
)};
var
o
=
function
(
e
){
return
e
.
nodeType
===
9
&&
e
.
documentElement
.
nodeName
!==
"HTML"
||!!
e
.
ownerDocument
&&
e
.
ownerDocument
.
documentElement
.
nodeName
!==
"HTML"
};
var
g
=
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
)}
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
(
i
,
g
){
var
f
=
this
,
j
=
f
.
getRng
(),
l
,
k
=
f
.
win
.
document
;
g
=
g
||
{
format
:
"html"
};
g
.
set
=
true
;
i
=
g
.
content
=
f
.
dom
.
processHTML
(
i
);
f
.
onBeforeSetContent
.
dispatch
(
f
,
g
);
i
=
g
.
content
;
if
(
j
.
insertNode
){
i
+=
'<span id="__caret">_</span>'
;
if
(
j
.
startContainer
==
k
&&
j
.
endContainer
==
k
){
k
.
body
.
innerHTML
=
i
}
else
{
j
.
deleteContents
();
j
.
insertNode
(
f
.
getRng
().
createContextualFragment
(
i
))}
l
=
f
.
dom
.
get
(
"__caret"
);
j
=
k
.
createRange
();
j
.
setStartBefore
(
l
);
j
.
setEndBefore
(
l
);
f
.
setRng
(
j
);
f
.
dom
.
remove
(
"__caret"
)}
else
{
if
(
j
.
item
){
k
.
execCommand
(
"Delete"
,
false
,
null
);
j
=
f
.
getRng
()}
j
.
pasteHTML
(
i
)}
f
.
onSetContent
.
dispatch
(
f
,
g
)},
getStart
:
function
(){
var
f
=
this
,
g
=
f
.
getRng
(),
h
;
if
(
g
.
duplicate
||
g
.
item
){
if
(
g
.
item
){
return
g
.
item
(
0
)}
g
=
g
.
duplicate
();
g
.
collapse
(
1
);
h
=
g
.
parentElement
();
if
(
h
&&
h
.
nodeName
==
"BODY"
){
return
h
.
firstChild
||
h
}
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
(
q
,
r
){
var
u
=
this
,
m
=
u
.
dom
,
g
,
j
,
i
,
n
,
h
,
o
,
p
,
l
=
"\uFEFF"
,
s
;
function
f
(
v
,
x
){
var
t
=
0
;
d
(
m
.
select
(
v
),
function
(
z
,
y
){
if
(
z
==
x
){
t
=
y
}});
return
t
}
if
(
q
==
2
){
function
k
(){
var
v
=
u
.
getRng
(
true
),
t
=
m
.
getRoot
(),
x
=
{};
function
y
(
B
,
G
){
var
A
=
B
[
G
?
"startContainer"
:
"endContainer"
],
F
=
B
[
G
?
"startOffset"
:
"endOffset"
],
z
=
[],
C
,
E
,
D
=
0
;
if
(
A
.
nodeType
==
3
){
if
(
r
){
for
(
C
=
A
.
previousSibling
;
C
&&
C
.
nodeType
==
3
;
C
=
C
.
previousSibling
){
F
+=
C
.
nodeValue
.
length
}}
z
.
push
(
F
)}
else
{
E
=
A
.
childNodes
;
if
(
F
>=
E
.
length
){
D
=
1
;
F
=
E
.
length
-
1
}
z
.
push
(
u
.
dom
.
nodeIndex
(
E
[
F
],
r
)
+
D
)}
for
(;
A
&&
A
!=
t
;
A
=
A
.
parentNode
){
z
.
push
(
u
.
dom
.
nodeIndex
(
A
,
r
))}
return
z
}
x
.
start
=
y
(
v
,
true
);
if
(
!
u
.
isCollapsed
()){
x
.
end
=
y
(
v
)}
return
x
}
return
k
()}
if
(
q
){
return
{
rng
:
u
.
getRng
()}}
g
=
u
.
getRng
();
i
=
m
.
uniqueId
();
n
=
tinyMCE
.
activeEditor
.
selection
.
isCollapsed
();
s
=
"overflow:hidden;line-height:0px"
;
if
(
g
.
duplicate
||
g
.
item
){
if
(
!
g
.
item
){
j
=
g
.
duplicate
();
g
.
collapse
();
g
.
pasteHTML
(
'<span _mce_type="bookmark" id="'
+
i
+
'_start" style="'
+
s
+
'">'
+
l
+
"</span>"
);
if
(
!
n
){
j
.
collapse
(
false
);
j
.
pasteHTML
(
'<span _mce_type="bookmark" id="'
+
i
+
'_end" style="'
+
s
+
'">'
+
l
+
"</span>"
)}}
else
{
o
=
g
.
item
(
0
);
h
=
o
.
nodeName
;
return
{
name
:
h
,
index
:
f
(
h
,
o
)}}}
else
{
o
=
u
.
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"
,{
_mce_type
:
"bookmark"
,
id
:
i
+
"_end"
,
style
:
s
},
l
))}
g
.
collapse
(
true
);
g
.
insertNode
(
m
.
create
(
"span"
,{
_mce_type
:
"bookmark"
,
id
:
i
+
"_start"
,
style
:
s
},
l
))}
u
.
moveToBookmark
({
id
:
i
,
keep
:
1
});
return
{
id
:
i
}},
moveToBookmark
:
function
(
l
){
var
n
=
this
,
k
=
n
.
dom
,
i
,
h
,
f
,
m
;
if
(
n
.
tridentSel
){
n
.
tridentSel
.
destroy
()}
if
(
l
){
if
(
l
.
start
){
f
=
k
.
createRng
();
m
=
k
.
getRoot
();
function
g
(
s
){
var
o
=
l
[
s
?
"start"
:
"end"
],
p
,
q
,
r
;
if
(
o
){
for
(
q
=
m
,
p
=
o
.
length
-
1
;
p
>=
1
;
p
--
){
q
=
q
.
childNodes
[
o
[
p
]]}
if
(
s
){
f
.
setStart
(
q
,
o
[
0
])}
else
{
f
.
setEnd
(
q
,
o
[
0
])}}}
g
(
true
);
g
();
n
.
setRng
(
f
)}
else
{
if
(
l
.
id
){
f
=
k
.
createRng
();
function
j
(
u
){
var
p
=
k
.
get
(
l
.
id
+
"_"
+
u
),
t
,
o
,
r
,
s
,
q
=
l
.
keep
;
if
(
p
){
t
=
p
.
parentNode
;
if
(
u
==
"start"
){
if
(
!
q
){
o
=
k
.
nodeIndex
(
p
)}
else
{
t
=
p
;
o
=
1
}
f
.
setStart
(
t
,
o
);
f
.
setEnd
(
t
,
o
)}
else
{
if
(
!
q
){
o
=
k
.
nodeIndex
(
p
)}
else
{
t
=
p
;
o
=
1
}
f
.
setEnd
(
t
,
o
)}
if
(
!
q
){
s
=
p
.
previousSibling
;
r
=
p
.
nextSibling
;
d
(
c
.
grep
(
p
.
childNodes
),
function
(
v
){
if
(
v
.
nodeType
==
3
){
v
.
nodeValue
=
v
.
nodeValue
.
replace
(
/\uFEFF/g
,
""
)}});
while
(
p
=
k
.
get
(
l
.
id
+
"_"
+
u
)){
k
.
remove
(
p
,
1
)}
if
(
s
&&
r
&&
s
.
nodeType
==
r
.
nodeType
&&
s
.
nodeType
==
3
){
o
=
s
.
nodeValue
.
length
;
s
.
appendData
(
r
.
nodeValue
);
k
.
remove
(
r
);
if
(
u
==
"start"
){
f
.
setStart
(
s
,
o
);
f
.
setEnd
(
s
,
o
)}
else
{
f
.
setEnd
(
s
,
o
)}}}}}
j
(
"start"
);
j
(
"end"
);
n
.
setRng
(
f
)}
else
{
if
(
l
.
name
){
n
.
select
(
k
.
select
(
l
.
name
)[
l
.
index
])}
else
{
if
(
l
.
rng
){
n
.
setRng
(
l
.
rng
)}}}}}},
select
:
function
(
k
,
j
){
var
i
=
this
,
l
=
i
.
dom
,
g
=
l
.
createRng
(),
f
;
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
g
=
this
,
h
=
g
.
getRng
(),
i
;
if
(
h
.
item
){
i
=
h
.
item
(
0
);
h
=
this
.
win
.
document
.
body
.
createTextRange
();
h
.
moveToElementText
(
i
)}
h
.
collapse
(
!!
f
);
g
.
setRng
(
h
)},
getSel
:
function
(){
var
g
=
this
,
f
=
this
.
win
;
return
f
.
getSelection
?
f
.
getSelection
()
:
f
.
document
.
selection
},
getRng
:
function
(
j
){
var
g
=
this
,
h
,
i
;
if
(
j
&&
g
.
tridentSel
){
return
g
.
tridentSel
.
getRangeAt
(
0
)}
try
{
if
(
h
=
g
.
getSel
()){
i
=
h
.
rangeCount
>
0
?
h
.
getRangeAt
(
0
)
:
(
h
.
createRange
?
h
.
createRange
()
:
g
.
win
.
document
.
createRange
())}}
catch
(
f
){}
if
(
!
i
){
i
=
g
.
win
.
document
.
createRange
?
g
.
win
.
document
.
createRange
()
:
g
.
win
.
document
.
body
.
createTextRange
()}
return
i
},
setRng
:
function
(
i
){
var
h
,
g
=
this
;
if
(
!
g
.
tridentSel
){
h
=
g
.
getSel
();
if
(
h
){
h
.
removeAllRanges
();
h
.
addRange
(
i
)}}
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
g
=
this
,
f
=
g
.
getRng
(),
h
=
g
.
getSel
(),
i
;
if
(
f
.
setStart
){
if
(
!
f
){
return
g
.
dom
.
getRoot
()}
i
=
f
.
commonAncestorContainer
;
if
(
!
f
.
collapsed
){
if
(
f
.
startContainer
==
f
.
endContainer
){
if
(
f
.
startOffset
-
f
.
endOffset
<
2
){
if
(
f
.
startContainer
.
hasChildNodes
()){
i
=
f
.
startContainer
.
childNodes
[
f
.
startOffset
]}}}
if
(
c
.
isWebKit
&&
h
.
anchorNode
&&
h
.
anchorNode
.
nodeType
==
1
){
return
h
.
anchorNode
.
childNodes
[
h
.
anchorOffset
]}}
if
(
i
&&
i
.
nodeType
==
3
){
return
i
.
parentNode
}
return
i
}
return
f
.
item
?
f
.
item
(
0
)
:
f
.
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
)}}})})(
tinymce
);(
function
(
a
){
a
.
create
(
"tinymce.dom.XMLWriter"
,{
node
:
null
,
XMLWriter
:
function
(
c
){
function
b
(){
var
e
=
document
.
implementation
;
if
(
!
e
||!
e
.
createDocument
){
try
{
return
new
ActiveXObject
(
"MSXML2.DOMDocument"
)}
catch
(
d
){}
try
{
return
new
ActiveXObject
(
"Microsoft.XmlDom"
)}
catch
(
d
){}}
else
{
return
e
.
createDocument
(
""
,
""
,
null
)}}
this
.
doc
=
b
();
this
.
valid
=
a
.
isOpera
||
a
.
isWebKit
;
this
.
reset
()},
reset
:
function
(){
var
b
=
this
,
c
=
b
.
doc
;
if
(
c
.
firstChild
){
c
.
removeChild
(
c
.
firstChild
)}
b
.
node
=
c
.
appendChild
(
c
.
createElement
(
"html"
))},
writeStartElement
:
function
(
c
){
var
b
=
this
;
b
.
node
=
b
.
node
.
appendChild
(
b
.
doc
.
createElement
(
c
))},
writeAttribute
:
function
(
c
,
b
){
if
(
this
.
valid
){
b
=
b
.
replace
(
/>/g
,
"%MCGT%"
)}
this
.
node
.
setAttribute
(
c
,
b
)},
writeEndElement
:
function
(){
this
.
node
=
this
.
node
.
parentNode
},
writeFullEndElement
:
function
(){
var
b
=
this
,
c
=
b
.
node
;
c
.
appendChild
(
b
.
doc
.
createTextNode
(
""
));
b
.
node
=
c
.
parentNode
},
writeText
:
function
(
b
){
if
(
this
.
valid
){
b
=
b
.
replace
(
/>/g
,
"%MCGT%"
)}
this
.
node
.
appendChild
(
this
.
doc
.
createTextNode
(
b
))},
writeCDATA
:
function
(
b
){
this
.
node
.
appendChild
(
this
.
doc
.
createCDATASection
(
b
))},
writeComment
:
function
(
b
){
if
(
a
.
isIE
){
b
=
b
.
replace
(
/^\-|\-$/g
,
" "
)}
this
.
node
.
appendChild
(
this
.
doc
.
createComment
(
b
.
replace
(
/\-\-/g
,
" "
)))},
getContent
:
function
(){
var
b
;
b
=
this
.
doc
.
xml
||
new
XMLSerializer
().
serializeToString
(
this
.
doc
);
b
=
b
.
replace
(
/<\?[^?]+\?>|<html>|<\/html>|<html\/>|<!DOCTYPE[^>]+>/g
,
""
);
b
=
b
.
replace
(
/ ?\/>/g
,
" />"
);
if
(
this
.
valid
){
b
=
b
.
replace
(
/\%MCGT%/g
,
">"
)}
return
b
}})})(
tinymce
);(
function
(
a
){
a
.
create
(
"tinymce.dom.StringWriter"
,{
str
:
null
,
tags
:
null
,
count
:
0
,
settings
:
null
,
indent
:
null
,
StringWriter
:
function
(
b
){
this
.
settings
=
a
.
extend
({
indent_char
:
" "
,
indentation
:
0
},
b
);
this
.
reset
()},
reset
:
function
(){
this
.
indent
=
""
;
this
.
str
=
""
;
this
.
tags
=
[];
this
.
count
=
0
},
writeStartElement
:
function
(
b
){
this
.
_writeAttributesEnd
();
this
.
writeRaw
(
"<"
+
b
);
this
.
tags
.
push
(
b
);
this
.
inAttr
=
true
;
this
.
count
++
;
this
.
elementCount
=
this
.
count
},
writeAttribute
:
function
(
d
,
b
){
var
c
=
this
;
c
.
writeRaw
(
" "
+
c
.
encode
(
d
)
+
'="'
+
c
.
encode
(
b
)
+
'"'
)},
writeEndElement
:
function
(){
var
b
;
if
(
this
.
tags
.
length
>
0
){
b
=
this
.
tags
.
pop
();
if
(
this
.
_writeAttributesEnd
(
1
)){
this
.
writeRaw
(
"</"
+
b
+
">"
)}
if
(
this
.
settings
.
indentation
>
0
){
this
.
writeRaw
(
"\n"
)}}},
writeFullEndElement
:
function
(){
if
(
this
.
tags
.
length
>
0
){
this
.
_writeAttributesEnd
();
this
.
writeRaw
(
"</"
+
this
.
tags
.
pop
()
+
">"
);
if
(
this
.
settings
.
indentation
>
0
){
this
.
writeRaw
(
"\n"
)}}},
writeText
:
function
(
b
){
this
.
_writeAttributesEnd
();
this
.
writeRaw
(
this
.
encode
(
b
));
this
.
count
++
},
writeCDATA
:
function
(
b
){
this
.
_writeAttributesEnd
();
this
.
writeRaw
(
"<![CDATA["
+
b
+
"]]>"
);
this
.
count
++
},
writeComment
:
function
(
b
){
this
.
_writeAttributesEnd
();
this
.
writeRaw
(
"<!-- "
+
b
+
"-->"
);
this
.
count
++
},
writeRaw
:
function
(
b
){
this
.
str
+=
b
},
encode
:
function
(
b
){
return
b
.
replace
(
/[<>&"]/g
,
function
(
c
){
switch
(
c
){
case
"<"
:
return
"<"
;
case
">"
:
return
">"
;
case
"&"
:
return
"&"
;
case
'"'
:
return
"""
}
return
c
})},
getContent
:
function
(){
return
this
.
str
},
_writeAttributesEnd
:
function
(
b
){
if
(
!
this
.
inAttr
){
return
}
this
.
inAttr
=
false
;
if
(
b
&&
this
.
elementCount
==
this
.
count
){
this
.
writeRaw
(
" />"
);
return
false
}
this
.
writeRaw
(
">"
);
return
true
}})})(
tinymce
);(
function
(
e
){
var
g
=
e
.
extend
,
f
=
e
.
each
,
b
=
e
.
util
.
Dispatcher
,
d
=
e
.
isIE
,
a
=
e
.
isGecko
;
function
c
(
h
){
return
h
.
replace
(
/([?+*])/g
,
".$1"
)}
e
.
create
(
"tinymce.dom.Serializer"
,{
Serializer
:
function
(
j
){
var
i
=
this
;
i
.
key
=
0
;
i
.
onPreProcess
=
new
b
(
i
);
i
.
onPostProcess
=
new
b
(
i
);
try
{
i
.
writer
=
new
e
.
dom
.
XMLWriter
()}
catch
(
h
){
i
.
writer
=
new
e
.
dom
.
StringWriter
()}
i
.
settings
=
j
=
g
({
dom
:
e
.
DOM
,
valid_nodes
:
0
,
node_filter
:
0
,
attr_filter
:
0
,
invalid_attrs
:
/^(_mce_|_moz_|sizset|sizcache)/
,
closed
:
/^(br|hr|input|meta|img|link|param|area)$/
,
entity_encoding
:
"named"
,
entities
:
"160,nbsp,161,iexcl,162,cent,163,pound,164,curren,165,yen,166,brvbar,167,sect,168,uml,169,copy,170,ordf,171,laquo,172,not,173,shy,174,reg,175,macr,176,deg,177,plusmn,178,sup2,179,sup3,180,acute,181,micro,182,para,183,middot,184,cedil,185,sup1,186,ordm,187,raquo,188,frac14,189,frac12,190,frac34,191,iquest,192,Agrave,193,Aacute,194,Acirc,195,Atilde,196,Auml,197,Aring,198,AElig,199,Ccedil,200,Egrave,201,Eacute,202,Ecirc,203,Euml,204,Igrave,205,Iacute,206,Icirc,207,Iuml,208,ETH,209,Ntilde,210,Ograve,211,Oacute,212,Ocirc,213,Otilde,214,Ouml,215,times,216,Oslash,217,Ugrave,218,Uacute,219,Ucirc,220,Uuml,221,Yacute,222,THORN,223,szlig,224,agrave,225,aacute,226,acirc,227,atilde,228,auml,229,aring,230,aelig,231,ccedil,232,egrave,233,eacute,234,ecirc,235,euml,236,igrave,237,iacute,238,icirc,239,iuml,240,eth,241,ntilde,242,ograve,243,oacute,244,ocirc,245,otilde,246,ouml,247,divide,248,oslash,249,ugrave,250,uacute,251,ucirc,252,uuml,253,yacute,254,thorn,255,yuml,402,fnof,913,Alpha,914,Beta,915,Gamma,916,Delta,917,Epsilon,918,Zeta,919,Eta,920,Theta,921,Iota,922,Kappa,923,Lambda,924,Mu,925,Nu,926,Xi,927,Omicron,928,Pi,929,Rho,931,Sigma,932,Tau,933,Upsilon,934,Phi,935,Chi,936,Psi,937,Omega,945,alpha,946,beta,947,gamma,948,delta,949,epsilon,950,zeta,951,eta,952,theta,953,iota,954,kappa,955,lambda,956,mu,957,nu,958,xi,959,omicron,960,pi,961,rho,962,sigmaf,963,sigma,964,tau,965,upsilon,966,phi,967,chi,968,psi,969,omega,977,thetasym,978,upsih,982,piv,8226,bull,8230,hellip,8242,prime,8243,Prime,8254,oline,8260,frasl,8472,weierp,8465,image,8476,real,8482,trade,8501,alefsym,8592,larr,8593,uarr,8594,rarr,8595,darr,8596,harr,8629,crarr,8656,lArr,8657,uArr,8658,rArr,8659,dArr,8660,hArr,8704,forall,8706,part,8707,exist,8709,empty,8711,nabla,8712,isin,8713,notin,8715,ni,8719,prod,8721,sum,8722,minus,8727,lowast,8730,radic,8733,prop,8734,infin,8736,ang,8743,and,8744,or,8745,cap,8746,cup,8747,int,8756,there4,8764,sim,8773,cong,8776,asymp,8800,ne,8801,equiv,8804,le,8805,ge,8834,sub,8835,sup,8836,nsub,8838,sube,8839,supe,8853,oplus,8855,otimes,8869,perp,8901,sdot,8968,lceil,8969,rceil,8970,lfloor,8971,rfloor,9001,lang,9002,rang,9674,loz,9824,spades,9827,clubs,9829,hearts,9830,diams,338,OElig,339,oelig,352,Scaron,353,scaron,376,Yuml,710,circ,732,tilde,8194,ensp,8195,emsp,8201,thinsp,8204,zwnj,8205,zwj,8206,lrm,8207,rlm,8211,ndash,8212,mdash,8216,lsquo,8217,rsquo,8218,sbquo,8220,ldquo,8221,rdquo,8222,bdquo,8224,dagger,8225,Dagger,8240,permil,8249,lsaquo,8250,rsaquo,8364,euro"
,
valid_elements
:
"*[*]"
,
extended_valid_elements
:
0
,
invalid_elements
:
0
,
fix_table_elements
:
1
,
fix_list_elements
:
true
,
fix_content_duplication
:
true
,
convert_fonts_to_spans
:
false
,
font_size_classes
:
0
,
apply_source_formatting
:
0
,
indent_mode
:
"simple"
,
indent_char
:
"\t"
,
indent_levels
:
1
,
remove_linebreaks
:
1
,
remove_redundant_brs
:
1
,
element_format
:
"xhtml"
},
j
);
i
.
dom
=
j
.
dom
;
i
.
schema
=
j
.
schema
;
if
(
j
.
entity_encoding
==
"named"
&&!
j
.
entities
){
j
.
entity_encoding
=
"raw"
}
if
(
j
.
remove_redundant_brs
){
i
.
onPostProcess
.
add
(
function
(
k
,
l
){
l
.
content
=
l
.
content
.
replace
(
/(<br \/>\s*)+<\/(p|h[1-6]|div|li)>/gi
,
function
(
n
,
m
,
o
){
if
(
/^<br \/>\s*<\//
.
test
(
n
)){
return
"</"
+
o
+
">"
}
return
n
})})}
if
(
j
.
element_format
==
"html"
){
i
.
onPostProcess
.
add
(
function
(
k
,
l
){
l
.
content
=
l
.
content
.
replace
(
/<([^>]+) \/>/g
,
"<$1>"
)})}
if
(
j
.
fix_list_elements
){
i
.
onPreProcess
.
add
(
function
(
v
,
s
){
var
l
,
z
,
y
=
[
"ol"
,
"ul"
],
u
,
t
,
q
,
k
=
/^(OL|UL)$/
,
A
;
function
m
(
r
,
x
){
var
o
=
x
.
split
(
","
),
p
;
while
((
r
=
r
.
previousSibling
)
!=
null
){
for
(
p
=
0
;
p
<
o
.
length
;
p
++
){
if
(
r
.
nodeName
==
o
[
p
]){
return
r
}}}
return
null
}
for
(
z
=
0
;
z
<
y
.
length
;
z
++
){
l
=
i
.
dom
.
select
(
y
[
z
],
s
.
node
);
for
(
u
=
0
;
u
<
l
.
length
;
u
++
){
t
=
l
[
u
];
q
=
t
.
parentNode
;
if
(
k
.
test
(
q
.
nodeName
)){
A
=
m
(
t
,
"LI"
);
if
(
!
A
){
A
=
i
.
dom
.
create
(
"li"
);
A
.
innerHTML
=
" "
;
A
.
appendChild
(
t
);
q
.
insertBefore
(
A
,
q
.
firstChild
)}
else
{
A
.
appendChild
(
t
)}}}}})}
if
(
j
.
fix_table_elements
){
i
.
onPreProcess
.
add
(
function
(
k
,
l
){
if
(
!
e
.
isOpera
||
opera
.
buildNumber
()
>=
1767
){
f
(
i
.
dom
.
select
(
"p table"
,
l
.
node
).
reverse
(),
function
(
p
){
var
o
=
i
.
dom
.
getParent
(
p
.
parentNode
,
"table,p"
);
if
(
o
.
nodeName
!=
"TABLE"
){
try
{
i
.
dom
.
split
(
o
,
p
)}
catch
(
m
){}}})}})}},
setEntities
:
function
(
o
){
var
n
=
this
,
j
,
m
,
h
=
{},
k
;
if
(
n
.
entityLookup
){
return
}
j
=
o
.
split
(
","
);
for
(
m
=
0
;
m
<
j
.
length
;
m
+=
2
){
k
=
j
[
m
];
if
(
k
==
34
||
k
==
38
||
k
==
60
||
k
==
62
){
continue
}
h
[
String
.
fromCharCode
(
j
[
m
])]
=
j
[
m
+
1
];
k
=
parseInt
(
j
[
m
]).
toString
(
16
)}
n
.
entityLookup
=
h
},
setRules
:
function
(
i
){
var
h
=
this
;
h
.
_setup
();
h
.
rules
=
{};
h
.
wildRules
=
[];
h
.
validElements
=
{};
return
h
.
addRules
(
i
)},
addRules
:
function
(
i
){
var
h
=
this
,
j
;
if
(
!
i
){
return
}
h
.
_setup
();
f
(
i
.
split
(
","
),
function
(
m
){
var
q
=
m
.
split
(
/\[|\]/
),
l
=
q
[
0
].
split
(
"/"
),
r
,
k
,
o
,
n
=
[];
if
(
j
){
k
=
e
.
extend
([],
j
.
attribs
)}
if
(
q
.
length
>
1
){
f
(
q
[
1
].
split
(
"|"
),
function
(
u
){
var
p
=
{},
t
;
k
=
k
||
[];
u
=
u
.
replace
(
/::/g
,
"~"
);
u
=
/^([!\-])?([\w*.?~_\-]+|)([=:<])?(.+)?$/
.
exec
(
u
);
u
[
2
]
=
u
[
2
].
replace
(
/~/g
,
":"
);
if
(
u
[
1
]
==
"!"
){
r
=
r
||
[];
r
.
push
(
u
[
2
])}
if
(
u
[
1
]
==
"-"
){
for
(
t
=
0
;
t
<
k
.
length
;
t
++
){
if
(
k
[
t
].
name
==
u
[
2
]){
k
.
splice
(
t
,
1
);
return
}}}
switch
(
u
[
3
]){
case
"="
:
p
.
defaultVal
=
u
[
4
]
||
""
;
break
;
case
":"
:
p
.
forcedVal
=
u
[
4
];
break
;
case
"<"
:
p
.
validVals
=
u
[
4
].
split
(
"?"
);
break
}
if
(
/[*.?]/
.
test
(
u
[
2
])){
o
=
o
||
[];
p
.
nameRE
=
new
RegExp
(
"^"
+
c
(
u
[
2
])
+
"$"
);
o
.
push
(
p
)}
else
{
p
.
name
=
u
[
2
];
k
.
push
(
p
)}
n
.
push
(
u
[
2
])})}
f
(
l
,
function
(
v
,
u
){
var
y
=
v
.
charAt
(
0
),
t
=
1
,
p
=
{};
if
(
j
){
if
(
j
.
noEmpty
){
p
.
noEmpty
=
j
.
noEmpty
}
if
(
j
.
fullEnd
){
p
.
fullEnd
=
j
.
fullEnd
}
if
(
j
.
padd
){
p
.
padd
=
j
.
padd
}}
switch
(
y
){
case
"-"
:
p
.
noEmpty
=
true
;
break
;
case
"+"
:
p
.
fullEnd
=
true
;
break
;
case
"#"
:
p
.
padd
=
true
;
break
;
default
:
t
=
0
}
l
[
u
]
=
v
=
v
.
substring
(
t
);
h
.
validElements
[
v
]
=
1
;
if
(
/[*.?]/
.
test
(
l
[
0
])){
p
.
nameRE
=
new
RegExp
(
"^"
+
c
(
l
[
0
])
+
"$"
);
h
.
wildRules
=
h
.
wildRules
||
{};
h
.
wildRules
.
push
(
p
)}
else
{
p
.
name
=
l
[
0
];
if
(
l
[
0
]
==
"@"
){
j
=
p
}
h
.
rules
[
v
]
=
p
}
p
.
attribs
=
k
;
if
(
r
){
p
.
requiredAttribs
=
r
}
if
(
o
){
v
=
""
;
f
(
n
,
function
(
s
){
if
(
v
){
v
+=
"|"
}
v
+=
"("
+
c
(
s
)
+
")"
});
p
.
validAttribsRE
=
new
RegExp
(
"^"
+
v
.
toLowerCase
()
+
"$"
);
p
.
wildAttribs
=
o
}})});
i
=
""
;
f
(
h
.
validElements
,
function
(
m
,
l
){
if
(
i
){
i
+=
"|"
}
if
(
l
!=
"@"
){
i
+=
l
}});
h
.
validElementsRE
=
new
RegExp
(
"^("
+
c
(
i
.
toLowerCase
())
+
")$"
)},
findRule
:
function
(
m
){
var
j
=
this
,
l
=
j
.
rules
,
h
,
k
;
j
.
_setup
();
k
=
l
[
m
];
if
(
k
){
return
k
}
l
=
j
.
wildRules
;
for
(
h
=
0
;
h
<
l
.
length
;
h
++
){
if
(
l
[
h
].
nameRE
.
test
(
m
)){
return
l
[
h
]}}
return
null
},
findAttribRule
:
function
(
h
,
l
){
var
j
,
k
=
h
.
wildAttribs
;
for
(
j
=
0
;
j
<
k
.
length
;
j
++
){
if
(
k
[
j
].
nameRE
.
test
(
l
)){
return
k
[
j
]}}
return
null
},
serialize
:
function
(
r
,
q
){
var
m
,
k
=
this
,
p
,
i
,
j
,
l
;
k
.
_setup
();
q
=
q
||
{};
q
.
format
=
q
.
format
||
"html"
;
k
.
processObj
=
q
;
if
(
d
){
l
=
[];
f
(
r
.
getElementsByTagName
(
"option"
),
function
(
o
){
var
h
=
k
.
dom
.
getAttrib
(
o
,
"selected"
);
l
.
push
(
h
?
h
:
null
)})}
r
=
r
.
cloneNode
(
true
);
if
(
d
){
f
(
r
.
getElementsByTagName
(
"option"
),
function
(
o
,
h
){
k
.
dom
.
setAttrib
(
o
,
"selected"
,
l
[
h
])})}
j
=
r
.
ownerDocument
.
implementation
;
if
(
j
.
createHTMLDocument
&&
(
e
.
isOpera
&&
opera
.
buildNumber
()
>=
1767
)){
p
=
j
.
createHTMLDocument
(
""
);
f
(
r
.
nodeName
==
"BODY"
?
r
.
childNodes
:
[
r
],
function
(
h
){
p
.
body
.
appendChild
(
p
.
importNode
(
h
,
true
))});
if
(
r
.
nodeName
!=
"BODY"
){
r
=
p
.
body
.
firstChild
}
else
{
r
=
p
.
body
}
i
=
k
.
dom
.
doc
;
k
.
dom
.
doc
=
p
}
k
.
key
=
""
+
(
parseInt
(
k
.
key
)
+
1
);
if
(
!
q
.
no_events
){
q
.
node
=
r
;
k
.
onPreProcess
.
dispatch
(
k
,
q
)}
k
.
writer
.
reset
();
k
.
_info
=
q
;
k
.
_serializeNode
(
r
,
q
.
getInner
);
q
.
content
=
k
.
writer
.
getContent
();
if
(
i
){
k
.
dom
.
doc
=
i
}
if
(
!
q
.
no_events
){
k
.
onPostProcess
.
dispatch
(
k
,
q
)}
k
.
_postProcess
(
q
);
q
.
node
=
null
;
return
e
.
trim
(
q
.
content
)},
_postProcess
:
function
(
n
){
var
i
=
this
,
k
=
i
.
settings
,
j
=
n
.
content
,
m
=
[],
l
;
if
(
n
.
format
==
"html"
){
l
=
i
.
_protect
({
content
:
j
,
patterns
:
[{
pattern
:
/(<script[^>]*>)(.*?)(<\/script>)/g
},{
pattern
:
/(<noscript[^>]*>)(.*?)(<\/noscript>)/g
},{
pattern
:
/(<style[^>]*>)(.*?)(<\/style>)/g
},{
pattern
:
/(<pre[^>]*>)(.*?)(<\/pre>)/g
,
encode
:
1
},{
pattern
:
/(<!--\[CDATA\[)(.*?)(\]\]-->)/g
}]});
j
=
l
.
content
;
if
(
k
.
entity_encoding
!==
"raw"
){
j
=
i
.
_encode
(
j
)}
if
(
!
n
.
set
){
j
=
j
.
replace
(
/<p>\s+<\/p>|<p([^>]+)>\s+<\/p>/g
,
k
.
entity_encoding
==
"numeric"
?
"<p$1> </p>"
:
"<p$1> </p>"
);
if
(
k
.
remove_linebreaks
){
j
=
j
.
replace
(
/\r?\n|\r/g
,
" "
);
j
=
j
.
replace
(
/(<[^>]+>)\s+/g
,
"$1 "
);
j
=
j
.
replace
(
/\s+(<\/[^>]+>)/g
,
" $1"
);
j
=
j
.
replace
(
/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object) ([^>]+)>\s+/g
,
"<$1 $2>"
);
j
=
j
.
replace
(
/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>\s+/g
,
"<$1>"
);
j
=
j
.
replace
(
/\s+<\/(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>/g
,
"</$1>"
)}
if
(
k
.
apply_source_formatting
&&
k
.
indent_mode
==
"simple"
){
j
=
j
.
replace
(
/<(\/?)(ul|hr|table|meta|link|tbody|tr|object|body|head|html|map)(|[^>]+)>\s*/g
,
"\n<$1$2$3>\n"
);
j
=
j
.
replace
(
/\s*<(p|h[1-6]|blockquote|div|title|style|pre|script|td|li|area)(|[^>]+)>/g
,
"\n<$1$2>"
);
j
=
j
.
replace
(
/<\/(p|h[1-6]|blockquote|div|title|style|pre|script|td|li)>\s*/g
,
"</$1>\n"
);
j
=
j
.
replace
(
/\n\n/g
,
"\n"
)}}
j
=
i
.
_unprotect
(
j
,
l
);
j
=
j
.
replace
(
/<!--\[CDATA\[([\s\S]+)\]\]-->/g
,
"<![CDATA[$1]]>"
);
if
(
k
.
entity_encoding
==
"raw"
){
j
=
j
.
replace
(
/<p> <\/p>|<p([^>]+)> <\/p>/g
,
"<p$1>\u00a0</p>"
)}
j
=
j
.
replace
(
/<noscript([^>]+|)>([\s\S]*?)<\/noscript>/g
,
function
(
h
,
p
,
o
){
return
"<noscript"
+
p
+
">"
+
i
.
dom
.
decode
(
o
.
replace
(
/<!--|-->/g
,
""
))
+
"</noscript>"
})}
n
.
content
=
j
},
_serializeNode
:
function
(
D
,
I
){
var
z
=
this
,
A
=
z
.
settings
,
x
=
z
.
writer
,
q
,
j
,
u
,
F
,
E
,
H
,
B
,
h
,
y
,
k
,
r
,
C
,
p
,
m
,
G
,
o
;
if
(
!
A
.
node_filter
||
A
.
node_filter
(
D
)){
switch
(
D
.
nodeType
){
case
1
:
if
(
D
.
hasAttribute
?
D
.
hasAttribute
(
"_mce_bogus"
)
:
D
.
getAttribute
(
"_mce_bogus"
)){
return
}
p
=
G
=
false
;
q
=
D
.
hasChildNodes
();
k
=
D
.
getAttribute
(
"_mce_name"
)
||
D
.
nodeName
.
toLowerCase
();
o
=
D
.
getAttribute
(
"_mce_type"
);
if
(
o
){
if
(
!
z
.
_info
.
cleanup
){
p
=
true
;
return
}
else
{
G
=
1
}}
if
(
d
){
if
(
D
.
scopeName
!==
"HTML"
&&
D
.
scopeName
!==
"html"
){
k
=
D
.
scopeName
+
":"
+
k
}}
if
(
k
.
indexOf
(
"mce:"
)
===
0
){
k
=
k
.
substring
(
4
)}
if
(
!
G
){
if
(
!
z
.
validElementsRE
||!
z
.
validElementsRE
.
test
(
k
)
||
(
z
.
invalidElementsRE
&&
z
.
invalidElementsRE
.
test
(
k
))
||
I
){
p
=
true
;
break
}}
if
(
d
){
if
(
A
.
fix_content_duplication
){
if
(
D
.
_mce_serialized
==
z
.
key
){
return
}
D
.
_mce_serialized
=
z
.
key
}
if
(
k
.
charAt
(
0
)
==
"/"
){
k
=
k
.
substring
(
1
)}}
else
{
if
(
a
){
if
(
D
.
nodeName
===
"BR"
&&
D
.
getAttribute
(
"type"
)
==
"_moz"
){
return
}}}
if
(
A
.
validate_children
){
if
(
z
.
elementName
&&!
z
.
schema
.
isValid
(
z
.
elementName
,
k
)){
p
=
true
;
break
}
z
.
elementName
=
k
}
r
=
z
.
findRule
(
k
);
if
(
!
r
){
p
=
true
;
break
}
k
=
r
.
name
||
k
;
m
=
A
.
closed
.
test
(
k
);
if
((
!
q
&&
r
.
noEmpty
)
||
(
d
&&!
k
)){
p
=
true
;
break
}
if
(
r
.
requiredAttribs
){
H
=
r
.
requiredAttribs
;
for
(
F
=
H
.
length
-
1
;
F
>=
0
;
F
--
){
if
(
this
.
dom
.
getAttrib
(
D
,
H
[
F
])
!==
""
){
break
}}
if
(
F
==-
1
){
p
=
true
;
break
}}
x
.
writeStartElement
(
k
);
if
(
r
.
attribs
){
for
(
F
=
0
,
B
=
r
.
attribs
,
E
=
B
.
length
;
F
<
E
;
F
++
){
H
=
B
[
F
];
y
=
z
.
_getAttrib
(
D
,
H
);
if
(
y
!==
null
){
x
.
writeAttribute
(
H
.
name
,
y
)}}}
if
(
r
.
validAttribsRE
){
B
=
z
.
dom
.
getAttribs
(
D
);
for
(
F
=
B
.
length
-
1
;
F
>-
1
;
F
--
){
h
=
B
[
F
];
if
(
h
.
specified
){
H
=
h
.
nodeName
.
toLowerCase
();
if
(
A
.
invalid_attrs
.
test
(
H
)
||!
r
.
validAttribsRE
.
test
(
H
)){
continue
}
C
=
z
.
findAttribRule
(
r
,
H
);
y
=
z
.
_getAttrib
(
D
,
C
,
H
);
if
(
y
!==
null
){
x
.
writeAttribute
(
H
,
y
)}}}}
if
(
o
&&
G
){
x
.
writeAttribute
(
"_mce_type"
,
o
)}
if
(
k
===
"script"
&&
e
.
trim
(
D
.
innerHTML
)){
x
.
writeText
(
"// "
);
x
.
writeCDATA
(
D
.
innerHTML
.
replace
(
/<!--|-->|<\[CDATA\[|\]\]>/g
,
""
));
q
=
false
;
break
}
if
(
r
.
padd
){
if
(
q
&&
(
u
=
D
.
firstChild
)
&&
u
.
nodeType
===
1
&&
D
.
childNodes
.
length
===
1
){
if
(
u
.
hasAttribute
?
u
.
hasAttribute
(
"_mce_bogus"
)
:
u
.
getAttribute
(
"_mce_bogus"
)){
x
.
writeText
(
"\u00a0"
)}}
else
{
if
(
!
q
){
x
.
writeText
(
"\u00a0"
)}}}
break
;
case
3
:
if
(
A
.
validate_children
&&
z
.
elementName
&&!
z
.
schema
.
isValid
(
z
.
elementName
,
"#text"
)){
return
}
return
x
.
writeText
(
D
.
nodeValue
);
case
4
:
return
x
.
writeCDATA
(
D
.
nodeValue
);
case
8
:
return
x
.
writeComment
(
D
.
nodeValue
)}}
else
{
if
(
D
.
nodeType
==
1
){
q
=
D
.
hasChildNodes
()}}
if
(
q
&&!
m
){
u
=
D
.
firstChild
;
while
(
u
){
z
.
_serializeNode
(
u
);
z
.
elementName
=
k
;
u
=
u
.
nextSibling
}}
if
(
!
p
){
if
(
!
m
){
x
.
writeFullEndElement
()}
else
{
x
.
writeEndElement
()}}},
_protect
:
function
(
j
){
var
i
=
this
;
j
.
items
=
j
.
items
||
[];
function
h
(
l
){
return
l
.
replace
(
/[\r\n\\]/g
,
function
(
m
){
if
(
m
===
"\n"
){
return
"\\n"
}
else
{
if
(
m
===
"\\"
){
return
"\\\\"
}}
return
"\\r"
})}
function
k
(
l
){
return
l
.
replace
(
/\\[\\rn]/g
,
function
(
m
){
if
(
m
===
"\\n"
){
return
"\n"
}
else
{
if
(
m
===
"\\\\"
){
return
"\\"
}}
return
"\r"
})}
f
(
j
.
patterns
,
function
(
l
){
j
.
content
=
k
(
h
(
j
.
content
).
replace
(
l
.
pattern
,
function
(
n
,
o
,
m
,
p
){
m
=
k
(
m
);
if
(
l
.
encode
){
m
=
i
.
_encode
(
m
)}
j
.
items
.
push
(
m
);
return
o
+
"<!--mce:"
+
(
j
.
items
.
length
-
1
)
+
"-->"
+
p
}))});
return
j
},
_unprotect
:
function
(
i
,
j
){
i
=
i
.
replace
(
/\<!--mce:([0-9]+)--\>/g
,
function
(
k
,
h
){
return
j
.
items
[
parseInt
(
h
)]});
j
.
items
=
[];
return
i
},
_encode
:
function
(
m
){
var
j
=
this
,
k
=
j
.
settings
,
i
;
if
(
k
.
entity_encoding
!==
"raw"
){
if
(
k
.
entity_encoding
.
indexOf
(
"named"
)
!=-
1
){
j
.
setEntities
(
k
.
entities
);
i
=
j
.
entityLookup
;
m
=
m
.
replace
(
/[\u007E-\uFFFF]/g
,
function
(
h
){
var
l
;
if
(
l
=
i
[
h
]){
h
=
"&"
+
l
+
";"
}
return
h
})}
if
(
k
.
entity_encoding
.
indexOf
(
"numeric"
)
!=-
1
){
m
=
m
.
replace
(
/[\u007E-\uFFFF]/g
,
function
(
h
){
return
"&#"
+
h
.
charCodeAt
(
0
)
+
";"
})}}
return
m
},
_setup
:
function
(){
var
h
=
this
,
i
=
this
.
settings
;
if
(
h
.
done
){
return
}
h
.
done
=
1
;
h
.
setRules
(
i
.
valid_elements
);
h
.
addRules
(
i
.
extended_valid_elements
);
if
(
i
.
invalid_elements
){
h
.
invalidElementsRE
=
new
RegExp
(
"^("
+
c
(
i
.
invalid_elements
.
replace
(
/,/g
,
"|"
).
toLowerCase
())
+
")$"
)}
if
(
i
.
attrib_value_filter
){
h
.
attribValueFilter
=
i
.
attribValueFilter
}},
_getAttrib
:
function
(
m
,
j
,
h
){
var
l
,
k
;
h
=
h
||
j
.
name
;
if
(
j
.
forcedVal
&&
(
k
=
j
.
forcedVal
)){
if
(
k
===
"{$uid}"
){
return
this
.
dom
.
uniqueId
()}
return
k
}
k
=
this
.
dom
.
getAttrib
(
m
,
h
);
switch
(
h
){
case
"rowspan"
:
case
"colspan"
:
if
(
k
==
"1"
){
k
=
""
}
break
}
if
(
this
.
attribValueFilter
){
k
=
this
.
attribValueFilter
(
h
,
k
,
m
)}
if
(
j
.
validVals
){
for
(
l
=
j
.
validVals
.
length
-
1
;
l
>=
0
;
l
--
){
if
(
k
==
j
.
validVals
[
l
]){
break
}}
if
(
l
==-
1
){
return
null
}}
if
(
k
===
""
&&
typeof
(
j
.
defaultVal
)
!=
"undefined"
){
k
=
j
.
defaultVal
;
if
(
k
===
"{$uid}"
){
return
this
.
dom
.
uniqueId
()}
return
k
}
else
{
if
(
h
==
"class"
&&
this
.
processObj
.
get
){
k
=
k
.
replace
(
/\s?mceItem\w+\s?/g
,
""
)}}
if
(
k
===
""
){
return
null
}
return
k
}})})(
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
,
u
){
var
v
=
this
,
q
=
a
.
DOM
,
s
,
o
,
r
,
n
;
function
p
(){
q
.
remove
(
n
);
if
(
s
){
s
.
onreadystatechange
=
s
.
onload
=
s
=
null
}
u
()}
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
){
a
.
util
.
XHR
.
send
({
url
:
a
.
_addVer
(
o
.
getURI
()),
success
:
function
(
x
){
var
t
=
q
.
create
(
"script"
,{
type
:
"text/javascript"
});
t
.
text
=
x
;
document
.
getElementsByTagName
(
"head"
)[
0
].
appendChild
(
t
);
q
.
remove
(
t
);
p
()}});
return
}}
s
=
q
.
create
(
"script"
,{
id
:
n
,
type
:
"text/javascript"
,
src
:
a
.
_addVer
(
m
)});
s
.
onload
=
p
;
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"
,
"lastSibling"
,
e
))}};(
function
(){
var
a
=
{};
function
b
(
f
,
e
){
var
d
;
function
c
(
g
){
return
g
.
replace
(
/[A-Z]+/g
,
function
(
h
){
return
c
(
f
[
h
])})}
for
(
d
in
f
){
if
(
f
.
hasOwnProperty
(
d
)){
f
[
d
]
=
c
(
f
[
d
])}}
c
(
e
).
replace
(
/#/g
,
"#text"
).
replace
(
/(\w+)\[([^\]]+)\]/g
,
function
(
l
,
g
,
j
){
var
h
,
k
=
{};
j
=
j
.
split
(
/\|/
);
for
(
h
=
j
.
length
-
1
;
h
>=
0
;
h
--
){
k
[
j
[
h
]]
=
1
}
a
[
g
]
=
k
})}
b
({
Z
:
"#|H|K|N|O|P"
,
Y
:
"#|X|form|R|Q"
,
X
:
"p|T|div|U|W|isindex|fieldset|table"
,
W
:
"pre|hr|blockquote|address|center|noframes"
,
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"
},
"script[]style[]object[#|param|X|form|a|H|K|N|O|Q]param[]p[S]a[Z]br[]span[S]bdo[S]applet[#|param|X|form|a|H|K|N|O|Q]h1[S]img[]map[X|form|Q|area]h2[S]iframe[#|X|form|a|H|K|N|O|Q]h3[S]tt[S]i[S]b[S]u[S]s[S]strike[S]big[S]small[S]font[S]basefont[]em[S]strong[S]dfn[S]code[S]q[S]samp[S]kbd[S]var[S]cite[S]abbr[S]acronym[S]sub[S]sup[S]input[]select[optgroup|option]optgroup[option]option[]textarea[]label[S]button[#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]h4[S]ins[#|X|form|a|H|K|N|O|Q]h5[S]del[#|X|form|a|H|K|N|O|Q]h6[S]div[#|X|form|a|H|K|N|O|Q]ul[li]li[#|X|form|a|H|K|N|O|Q]ol[li]dl[dt|dd]dt[S]dd[#|X|form|a|H|K|N|O|Q]menu[li]dir[li]pre[ZA]hr[]blockquote[#|X|form|a|H|K|N|O|Q]address[S|p]center[#|X|form|a|H|K|N|O|Q]noframes[#|X|form|a|H|K|N|O|Q]isindex[]fieldset[#|legend|X|form|a|H|K|N|O|Q]legend[S]table[caption|col|colgroup|thead|tfoot|tbody|tr]caption[S]col[]colgroup[col]thead[tr]tr[th|td]th[#|X|form|a|H|K|N|O|Q]form[#|X|a|H|K|N|O|Q]noscript[#|X|form|a|H|K|N|O|Q]td[#|X|form|a|H|K|N|O|Q]tfoot[tr]tbody[tr]area[]base[]body[#|X|form|a|H|K|N|O|Q]"
);
tinymce
.
dom
.
Schema
=
function
(){
var
c
=
this
,
d
=
a
;
c
.
isValid
=
function
(
f
,
e
){
var
g
=
d
[
f
];
return
!!
(
g
&&
(
!
e
||
g
[
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
(
k
==
l
?
l
:
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
)}}})(
tinymce
);(
function
(
c
){
var
b
=
c
.
DOM
,
a
=
c
.
is
;
c
.
create
(
"tinymce.ui.Control"
,{
Control
:
function
(
e
,
d
){
this
.
id
=
e
;
this
.
settings
=
d
=
d
||
{};
this
.
rendered
=
false
;
this
.
onRender
=
new
c
.
util
.
Dispatcher
(
this
);
this
.
classPrefix
=
""
;
this
.
scope
=
d
.
scope
||
this
;
this
.
disabled
=
0
;
this
.
active
=
0
},
setDisabled
:
function
(
d
){
var
f
;
if
(
d
!=
this
.
disabled
){
f
=
b
.
get
(
this
.
id
);
if
(
f
&&
this
.
settings
.
unavailable_prefix
){
if
(
d
){
this
.
prevTitle
=
f
.
title
;
f
.
title
=
this
.
settings
.
unavailable_prefix
+
": "
+
f
.
title
}
else
{
f
.
title
=
this
.
prevTitle
}}
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
}},
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
(
b
,
a
){
this
.
parent
(
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"
},
renderHTML
:
function
(){
return
tinymce
.
DOM
.
createHTML
(
"span"
,{
"class"
:
this
.
classPrefix
})}});(
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
.
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
;
g
=
new
e
.
ui
.
DropMenu
(
j
.
id
||
c
.
uniqueId
(),
j
);
g
.
onAddItem
.
add
(
h
.
onAddItem
.
dispatch
,
h
.
onAddItem
);
return
g
},
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"
)}}})}
z
.
onShowMenu
.
dispatch
(
z
);
if
(
A
.
keyboard_focus
){
a
.
add
(
o
,
"keydown"
,
z
.
_keyHandler
,
z
);
c
.
select
(
"a"
,
"menu_"
+
z
.
id
)[
0
].
focus
();
z
.
_focusIdx
=
0
}},
hideMenu
:
function
(
j
){
var
g
=
this
,
i
=
c
.
get
(
"menu_"
+
g
.
id
),
h
;
if
(
!
g
.
isMenuVisible
){
return
}
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
);
a
.
remove
(
h
,
"mouseover"
,
g
.
mouseOverFunc
);
a
.
remove
(
h
,
"click"
,
g
.
mouseClickFunc
);
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"
,{
id
:
"menu_"
+
i
.
id
,
"class"
:
j
[
"class"
],
style
:
"position:absolute;left:0;top:0;z-index:200000"
});
k
=
c
.
add
(
g
,
"div"
,{
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"
,{
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
},
_keyHandler
:
function
(
j
){
var
i
=
this
,
h
=
j
.
keyCode
;
function
g
(
m
){
var
k
=
i
.
_focusIdx
+
m
,
l
=
c
.
select
(
"a"
,
"menu_"
+
i
.
id
)[
k
];
if
(
l
){
i
.
_focusIdx
=
k
;
l
.
focus
()}}
switch
(
h
){
case
38
:
g
(
-
1
);
return
;
case
40
:
g
(
1
);
return
;
case
13
:
return
;
case
27
:
return
this
.
hideMenu
()}},
_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
,
"td"
);
i
=
p
=
c
.
add
(
i
,
"a"
,{
href
:
"javascript:;"
,
onclick
:
"return false;"
,
onmousedown
:
"return false;"
});
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
(
d
,
c
){
this
.
parent
(
d
,
c
);
this
.
classPrefix
=
"mceButton"
},
renderHTML
:
function
(){
var
f
=
this
.
classPrefix
,
e
=
this
.
settings
,
d
,
c
;
c
=
a
.
encode
(
e
.
label
||
""
);
d
=
'<a id="'
+
this
.
id
+
'" href="javascript:;" class="'
+
f
+
" "
+
f
+
"Enabled "
+
e
[
"class"
]
+
(
c
?
" "
+
f
+
"Labeled"
:
""
)
+
'" onmousedown="return false;" onclick="return false;" title="'
+
a
.
encode
(
e
.
title
)
+
'">'
;
if
(
e
.
image
){
d
+=
'<img class="mceIcon" src="'
+
e
.
image
+
'" />'
+
c
+
"</a>"
}
else
{
d
+=
'<span class="mceIcon '
+
e
[
"class"
]
+
'"></span>'
+
(
c
?
'<span class="'
+
f
+
'Label">'
+
c
+
"</span>"
:
""
)
+
"</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
(
h
,
g
){
var
f
=
this
;
f
.
parent
(
h
,
g
);
f
.
items
=
[];
f
.
onChange
=
new
a
(
f
);
f
.
onPostRender
=
new
a
(
f
);
f
.
onAdd
=
new
a
(
f
);
f
.
onRenderMenu
=
new
d
.
util
.
Dispatcher
(
this
);
f
.
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"
)}
else
{
c
.
setHTML
(
h
,
c
.
encode
(
g
.
settings
.
title
));
c
.
addClass
(
h
,
"mceTitle"
);
g
.
selectedValue
=
g
.
selectedIndex
=
null
}
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
=
'<table id="'
+
f
.
id
+
'" cellpadding="0" cellspacing="0" class="'
+
j
+
" "
+
j
+
"Enabled"
+
(
g
[
"class"
]
?
(
" "
+
g
[
"class"
])
:
""
)
+
'"><tbody><tr>'
;
i
+=
"<td>"
+
c
.
createHTML
(
"a"
,{
id
:
f
.
id
+
"_text"
,
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>"
)
+
"</td>"
;
i
+=
"</tr></tbody></table>"
;
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
){
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
(
g
.
hideMenu
,
g
);
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
+
"_text"
,
"focus"
,
function
(
h
){
if
(
!
f
.
_focused
){
f
.
keyDownHandler
=
b
.
add
(
f
.
id
+
"_text"
,
"keydown"
,
function
(
l
){
var
i
=-
1
,
j
,
k
=
l
.
keyCode
;
e
(
f
.
items
,
function
(
m
,
n
){
if
(
f
.
selectedValue
==
m
.
value
){
i
=
n
}});
if
(
k
==
38
){
j
=
f
.
items
[
i
-
1
]}
else
{
if
(
k
==
40
){
j
=
f
.
items
[
i
+
1
]}
else
{
if
(
k
==
13
){
j
=
f
.
selectedValue
;
f
.
selectedValue
=
null
;
f
.
settings
.
onselect
(
j
);
return
b
.
cancel
(
l
)}}}
if
(
j
){
f
.
hideMenu
();
f
.
select
(
j
.
value
)}})}
f
.
_focused
=
1
});
b
.
add
(
f
.
id
+
"_text"
,
"blur"
,
function
(){
b
.
remove
(
f
.
id
+
"_text"
,
"keydown"
,
f
.
keyDownHandler
);
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
},
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"
},
g
);
return
g
},
postRender
:
function
(){
var
g
=
this
,
h
;
g
.
rendered
=
true
;
function
f
(
j
){
var
i
=
g
.
items
[
j
.
target
.
selectedIndex
-
1
];
if
(
i
&&
(
i
=
i
.
value
)){
g
.
onChange
.
dispatch
(
g
,
i
);
if
(
g
.
settings
.
onselect
){
g
.
settings
.
onselect
(
i
)}}}
b
.
add
(
g
.
id
,
"change"
,
f
);
b
.
add
(
g
.
id
,
"keydown"
,
function
(
j
){
var
i
;
b
.
remove
(
g
.
id
,
"change"
,
h
);
i
=
b
.
add
(
g
.
id
,
"blur"
,
function
(){
b
.
add
(
g
.
id
,
"change"
,
f
);
b
.
remove
(
g
.
id
,
"blur"
,
i
)});
if
(
j
.
keyCode
==
13
||
j
.
keyCode
==
32
){
f
(
j
);
return
b
.
cancel
(
j
)}});
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
(
f
,
e
){
this
.
parent
(
f
,
e
);
this
.
onRenderMenu
=
new
c
.
util
.
Dispatcher
(
this
);
e
.
menu_container
=
e
.
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
(
f
.
hideMenu
,
f
);
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
(
f
,
e
){
this
.
parent
(
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
,
"class"
:
"mceAction "
+
g
[
"class"
]})}
else
{
e
=
b
.
createHTML
(
"span"
,{
"class"
:
"mceAction "
+
g
[
"class"
]},
""
)}
i
+=
"<td>"
+
b
.
createHTML
(
"a"
,{
id
:
f
.
id
+
"_action"
,
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"
]});
i
+=
"<td>"
+
b
.
createHTML
(
"a"
,{
id
:
f
.
id
+
"_open"
,
href
:
"javascript:;"
,
"class"
:
"mceOpen "
+
g
[
"class"
],
onclick
:
"return false;"
,
onmousedown
:
"return false;"
,
title
:
g
.
title
},
e
)
+
"</td>"
;
i
+=
"</tr></tbody>"
;
return
b
.
createHTML
(
"table"
,{
id
:
f
.
id
,
"class"
:
"mceSplitButton mceSplitButtonEnabled "
+
g
[
"class"
],
cellpadding
:
"0"
,
cellspacing
:
"0"
,
onmousedown
:
"return false;"
,
title
:
g
.
title
},
i
)},
postRender
:
function
(){
var
e
=
this
,
f
=
e
.
settings
;
if
(
f
.
onclick
){
a
.
add
(
e
.
id
+
"_action"
,
"click"
,
function
(){
if
(
!
e
.
isDisabled
()){
f
.
onclick
(
e
.
value
)}})}
a
.
add
(
e
.
id
+
"_open"
,
"click"
,
e
.
showMenu
,
e
);
a
.
add
(
e
.
id
+
"_open"
,
"focus"
,
function
(){
e
.
_focused
=
1
});
a
.
add
(
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"
)}})})(
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
(
h
,
g
){
var
f
=
this
;
f
.
parent
(
h
,
g
);
f
.
settings
=
g
=
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"
},
f
.
settings
);
f
.
onShowMenu
=
new
d
.
util
.
Dispatcher
(
f
);
f
.
onHideMenu
=
new
d
.
util
.
Dispatcher
(
f
);
f
.
value
=
g
.
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
(
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
.
onHideMenu
.
dispatch
(
f
);
f
.
isMenuVisible
=
0
},
renderMenu
:
function
(){
var
k
=
this
,
f
,
j
=
0
,
l
=
k
.
settings
,
p
,
h
,
o
,
g
;
g
=
c
.
add
(
l
.
menu_container
,
"div"
,{
id
:
k
.
id
+
"_menu"
,
"class"
:
l
.
menu_class
+
" "
+
l
[
"class"
],
style
:
"position:absolute;left:0;top:-1000px;"
});
f
=
c
.
add
(
g
,
"div"
,{
"class"
:
l
[
"class"
]
+
" mceSplitButtonMenu"
});
c
.
add
(
f
,
"span"
,{
"class"
:
"mceMenuLine"
});
p
=
c
.
add
(
f
,
"table"
,{
"class"
:
"mceColorSplitMenu"
});
h
=
c
.
add
(
p
,
"tbody"
);
j
=
0
;
e
(
b
(
l
.
colors
,
"array"
)
?
l
.
colors
:
l
.
colors
.
split
(
","
),
function
(
i
){
i
=
i
.
replace
(
/^#/
,
""
);
if
(
!
j
--
){
o
=
c
.
add
(
h
,
"tr"
);
j
=
l
.
grid_width
-
1
}
p
=
c
.
add
(
o
,
"td"
);
p
=
c
.
add
(
p
,
"a"
,{
href
:
"javascript:;"
,
style
:
{
backgroundColor
:
"#"
+
i
},
_mce_color
:
"#"
+
i
})});
if
(
l
.
more_colors_func
){
p
=
c
.
add
(
h
,
"tr"
);
p
=
c
.
add
(
p
,
"td"
,{
colspan
:
l
.
grid_width
,
"class"
:
"mceMoreColors"
});
p
=
c
.
add
(
p
,
"a"
,{
id
:
k
.
id
+
"_more"
,
href
:
"javascript:;"
,
onclick
:
"return false;"
,
"class"
:
"mceMoreColors"
},
l
.
more_colors_title
);
a
.
add
(
p
,
"click"
,
function
(
i
){
l
.
more_colors_func
.
call
(
l
.
more_colors_scope
||
this
);
return
a
.
cancel
(
i
)})}
c
.
addClass
(
f
,
"mceColorSplitMenu"
);
a
.
add
(
k
.
id
+
"_menu"
,
"click"
,
function
(
i
){
var
m
;
i
=
i
.
target
;
if
(
i
.
nodeName
==
"A"
&&
(
m
=
i
.
getAttribute
(
"_mce_color"
))){
k
.
setColor
(
m
)}
return
a
.
cancel
(
i
)});
return
g
},
setColor
:
function
(
g
){
var
f
=
this
;
c
.
setStyle
(
f
.
id
+
"_preview"
,
"backgroundColor"
,
g
);
f
.
value
=
g
;
f
.
hideMenu
();
f
.
settings
.
onselect
(
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
);
tinymce
.
create
(
"tinymce.ui.Toolbar:tinymce.ui.Container"
,{
renderHTML
:
function
(){
var
l
=
this
,
e
=
""
,
g
,
j
,
b
=
tinymce
.
DOM
,
m
=
l
.
settings
,
d
,
a
,
f
,
k
;
k
=
l
.
controls
;
for
(
d
=
0
;
d
<
k
.
length
;
d
++
){
j
=
k
[
d
];
a
=
k
[
d
-
1
];
f
=
k
[
d
+
1
];
if
(
d
===
0
){
g
=
"mceToolbarStart"
;
if
(
j
.
Button
){
g
+=
" mceToolbarStartButton"
}
else
{
if
(
j
.
SplitButton
){
g
+=
" mceToolbarStartSplitButton"
}
else
{
if
(
j
.
ListBox
){
g
+=
" mceToolbarStartListBox"
}}}
e
+=
b
.
createHTML
(
"td"
,{
"class"
:
g
},
b
.
createHTML
(
"span"
,
null
,
"<!-- IE -->"
))}
if
(
a
&&
j
.
ListBox
){
if
(
a
.
Button
||
a
.
SplitButton
){
e
+=
b
.
createHTML
(
"td"
,{
"class"
:
"mceToolbarEnd"
},
b
.
createHTML
(
"span"
,
null
,
"<!-- IE -->"
))}}
if
(
b
.
stdMode
){
e
+=
'<td style="position: relative">'
+
j
.
renderHTML
()
+
"</td>"
}
else
{
e
+=
"<td>"
+
j
.
renderHTML
()
+
"</td>"
}
if
(
f
&&
j
.
ListBox
){
if
(
f
.
Button
||
f
.
SplitButton
){
e
+=
b
.
createHTML
(
"td"
,{
"class"
:
"mceToolbarStart"
},
b
.
createHTML
(
"span"
,
null
,
"<!-- IE -->"
))}}}
g
=
"mceToolbarEnd"
;
if
(
j
.
Button
){
g
+=
" mceToolbarEndButton"
}
else
{
if
(
j
.
SplitButton
){
g
+=
" mceToolbarEndSplitButton"
}
else
{
if
(
j
.
ListBox
){
g
+=
" mceToolbarEndListBox"
}}}
e
+=
b
.
createHTML
(
"td"
,{
"class"
:
g
},
b
.
createHTML
(
"span"
,
null
,
"<!-- IE -->"
));
return
b
.
createHTML
(
"table"
,{
id
:
l
.
id
,
"class"
:
"mceToolbar"
+
(
m
[
"class"
]
?
" "
+
m
[
"class"
]
:
""
),
cellpadding
:
"0"
,
cellspacing
:
"0"
,
align
:
l
.
settings
.
align
||
""
},
"<tbody><tr>"
+
e
+
"</tr></tbody>"
)}});(
function
(
b
){
var
a
=
b
.
util
.
Dispatcher
,
c
=
b
.
each
;
b
.
create
(
"tinymce.AddOnManager"
,{
items
:
[],
urls
:
{},
lookup
:
{},
onAdd
:
new
a
(
this
),
get
:
function
(
d
){
return
this
.
lookup
[
d
]},
requireLangPack
:
function
(
e
){
var
d
=
b
.
settings
;
if
(
d
&&
d
.
language
){
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
(
"/"
));
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"
,
valid_elements
:
"@[id|class|style|title|dir<ltr?rtl|lang|xml::lang|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],a[rel|rev|charset|hreflang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur],strong/b,em/i,strike,u,#p,-ol[type|compact],-ul[type|compact],-li,br,img[longdesc|usemap|src|border|alt=|title|hspace|vspace|width|height|align],-sub,-sup,-blockquote[cite],-table[border|cellspacing|cellpadding|width|frame|rules|height|align|summary|bgcolor|background|bordercolor],-tr[rowspan|width|height|align|valign|bgcolor|background|bordercolor],tbody,thead,tfoot,#td[colspan|rowspan|width|height|align|valign|bgcolor|background|bordercolor|scope],#th[colspan|rowspan|width|height|align|valign|scope],caption,-div,-span,-code,-pre,address,-h1,-h2,-h3,-h4,-h5,-h6,hr[size|noshade],-font[face|size|color],dd,dl,dt,cite,abbr,acronym,del[datetime|cite],ins[datetime|cite],object[classid|width|height|codebase|*],param[name|value],embed[type|width|height|src|*],script[src|type],map[name],area[shape|coords|href|alt|target],bdo,button,col[align|char|charoff|span|valign|width],colgroup[align|char|charoff|span|valign|width],dfn,fieldset,form[action|accept|accept-charset|enctype|method],input[accept|alt|checked|disabled|maxlength|name|readonly|size|src|type|value|tabindex|accesskey],kbd,label[for],legend,noscript,optgroup[label|disabled],option[disabled|label|selected|value],q[cite],samp,select[disabled|multiple|name|size],small,textarea[cols|rows|disabled|name|readonly],tt,var,big"
,
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
},
q
);
p
.
documentBaseURI
=
new
m
.
util
.
URI
(
q
.
document_base_url
||
m
.
documentBaseURL
,{
base_uri
:
tinyMCE
.
baseURI
});
p
.
baseURI
=
m
.
baseURI
;
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
(
!
/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
){
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
,
E
=
this
,
F
=
E
.
settings
,
B
,
y
,
A
=
E
.
getElement
(),
q
,
p
,
C
,
x
,
z
,
D
;
m
.
add
(
E
);
if
(
F
.
theme
){
F
.
theme
=
F
.
theme
.
replace
(
/-/
,
""
);
q
=
h
.
get
(
F
.
theme
);
E
.
theme
=
new
q
();
if
(
E
.
theme
.
init
&&
F
.
init_theme
){
E
.
theme
.
init
(
E
,
h
.
urls
[
F
.
theme
]
||
m
.
documentBaseURL
.
replace
(
/\/$/
,
""
))}}
i
(
g
(
F
.
plugins
.
replace
(
/\-/g
,
""
)),
function
(
G
){
var
H
=
c
.
get
(
G
),
t
=
c
.
urls
[
G
]
||
m
.
documentBaseURL
.
replace
(
/\/$/
,
""
),
s
;
if
(
H
){
s
=
new
H
(
E
,
t
);
E
.
plugins
[
G
]
=
s
;
if
(
s
.
init
){
s
.
init
(
E
,
t
)}}});
if
(
F
.
popup_css
!==
false
){
if
(
F
.
popup_css
){
F
.
popup_css
=
E
.
documentBaseURI
.
toAbsolute
(
F
.
popup_css
)}
else
{
F
.
popup_css
=
E
.
baseURI
.
toAbsolute
(
"themes/"
+
F
.
theme
+
"/skins/"
+
F
.
skin
+
"/dialog.css"
)}}
if
(
F
.
popup_css_add
){
F
.
popup_css
+=
","
+
E
.
documentBaseURI
.
toAbsolute
(
F
.
popup_css_add
)}
E
.
controlManager
=
new
m
.
ControlManager
(
E
);
if
(
F
.
custom_undo_redo
){
E
.
onBeforeExecCommand
.
add
(
function
(
t
,
G
,
u
,
H
,
s
){
if
(
G
!=
"Undo"
&&
G
!=
"Redo"
&&
G
!=
"mceRepaint"
&&
(
!
s
||!
s
.
skip_undo
)){
if
(
!
E
.
undoManager
.
hasUndo
()){
E
.
undoManager
.
add
()}}});
E
.
onExecCommand
.
add
(
function
(
t
,
G
,
u
,
H
,
s
){
if
(
G
!=
"Undo"
&&
G
!=
"Redo"
&&
G
!=
"mceRepaint"
&&
(
!
s
||!
s
.
skip_undo
)){
E
.
undoManager
.
add
()}})}
E
.
onExecCommand
.
add
(
function
(
s
,
t
){
if
(
!
/^(FontName|FontSize)$/
.
test
(
t
)){
E
.
nodeChanged
()}});
if
(
a
){
function
v
(
s
,
t
){
if
(
!
t
||!
t
.
initial
){
E
.
execCommand
(
"mceRepaint"
)}}
E
.
onUndo
.
add
(
v
);
E
.
onRedo
.
add
(
v
);
E
.
onSetContent
.
add
(
v
)}
E
.
onBeforeRenderUI
.
dispatch
(
E
,
E
.
controlManager
);
if
(
F
.
render_ui
){
B
=
F
.
width
||
A
.
style
.
width
||
A
.
offsetWidth
;
y
=
F
.
height
||
A
.
style
.
height
||
A
.
offsetHeight
;
E
.
orgDisplay
=
A
.
style
.
display
;
D
=
/^[0-9\.]+(|px)$/i
;
if
(
D
.
test
(
""
+
B
)){
B
=
Math
.
max
(
parseInt
(
B
)
+
(
q
.
deltaWidth
||
0
),
100
)}
if
(
D
.
test
(
""
+
y
)){
y
=
Math
.
max
(
parseInt
(
y
)
+
(
q
.
deltaHeight
||
0
),
100
)}
q
=
E
.
theme
.
renderUI
({
targetNode
:
A
,
width
:
B
,
height
:
y
,
deltaWidth
:
F
.
delta_width
,
deltaHeight
:
F
.
delta_height
});
E
.
editorContainer
=
q
.
editorContainer
}
if
(
document
.
domain
&&
location
.
hostname
!=
document
.
domain
){
m
.
relaxedDomain
=
document
.
domain
}
n
.
setStyles
(
q
.
sizeContainer
||
q
.
editorContainer
,{
width
:
B
,
height
:
y
});
y
=
(
q
.
iframeHeight
||
y
)
+
(
typeof
(
y
)
==
"number"
?
(
q
.
deltaHeight
||
0
)
:
""
);
if
(
y
<
100
){
y
=
100
}
E
.
iframeHTML
=
F
.
doctype
+
'<html><head xmlns="http://www.w3.org/1999/xhtml">'
;
if
(
F
.
document_base_url
!=
m
.
documentBaseURL
){
E
.
iframeHTML
+=
'<base href="'
+
E
.
documentBaseURI
.
getURI
()
+
'" />'
}
E
.
iframeHTML
+=
'<meta http-equiv="X-UA-Compatible" content="IE=7" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'
;
if
(
m
.
relaxedDomain
){
E
.
iframeHTML
+=
'<script type="text/javascript">document.domain = "'
+
m
.
relaxedDomain
+
'";<\/script>'
}
x
=
F
.
body_id
||
"tinymce"
;
if
(
x
.
indexOf
(
"="
)
!=-
1
){
x
=
E
.
getParam
(
"body_id"
,
""
,
"hash"
);
x
=
x
[
E
.
id
]
||
x
}
z
=
F
.
body_class
||
""
;
if
(
z
.
indexOf
(
"="
)
!=-
1
){
z
=
E
.
getParam
(
"body_class"
,
""
,
"hash"
);
z
=
z
[
E
.
id
]
||
""
}
E
.
iframeHTML
+=
'</head><body id="'
+
x
+
'" class="mceContentBody '
+
z
+
'"></body></html>'
;
if
(
m
.
relaxedDomain
){
if
(
b
||
(
m
.
isOpera
&&
parseFloat
(
opera
.
version
())
>=
9.5
)){
C
=
'javascript:(function(){document.open();document.domain="'
+
document
.
domain
+
'";var ed = window.parent.tinyMCE.get("'
+
E
.
id
+
'");document.write(ed.iframeHTML);document.close();ed.setupIframe();})()'
}
else
{
if
(
m
.
isOpera
){
C
=
'javascript:(function(){document.open();document.domain="'
+
document
.
domain
+
'";document.close();ed.setupIframe();})()'
}}}
r
=
n
.
add
(
q
.
iframeContainer
,
"iframe"
,{
id
:
E
.
id
+
"_ifr"
,
src
:
C
||
'javascript:""'
,
frameBorder
:
"0"
,
style
:
{
width
:
"100%"
,
height
:
y
}});
E
.
contentAreaContainer
=
q
.
iframeContainer
;
n
.
get
(
q
.
editorContainer
).
style
.
display
=
E
.
orgDisplay
;
n
.
get
(
E
.
id
).
style
.
display
=
"none"
;
if
(
!
b
||!
m
.
relaxedDomain
){
E
.
setupIframe
()}
A
=
r
=
q
=
null
},
setupIframe
:
function
(){
var
z
=
this
,
A
=
z
.
settings
,
r
=
n
.
get
(
z
.
id
),
u
=
z
.
getDoc
(),
q
,
x
;
if
(
!
b
||!
m
.
relaxedDomain
){
u
.
open
();
u
.
write
(
z
.
iframeHTML
);
u
.
close
()}
if
(
!
b
){
try
{
if
(
!
A
.
readonly
){
u
.
designMode
=
"On"
}}
catch
(
v
){}}
if
(
b
){
x
=
z
.
getBody
();
n
.
hide
(
x
);
if
(
!
A
.
readonly
){
x
.
contentEditable
=
true
}
n
.
show
(
x
)}
z
.
dom
=
new
m
.
dom
.
DOMUtils
(
z
.
getDoc
(),{
keep_values
:
true
,
url_converter
:
z
.
convertURL
,
url_converter_scope
:
z
,
hex_colors
:
A
.
force_hex_style_colors
,
class_filter
:
A
.
class_filter
,
update_styles
:
1
,
fix_ie_paragraphs
:
1
,
valid_styles
:
A
.
valid_styles
});
z
.
schema
=
new
m
.
dom
.
Schema
();
z
.
serializer
=
new
m
.
dom
.
Serializer
(
f
(
A
,{
valid_elements
:
A
.
verify_html
===
false
?
"*[*]"
:
A
.
valid_elements
,
dom
:
z
.
dom
,
schema
:
z
.
schema
}));
z
.
selection
=
new
m
.
dom
.
Selection
(
z
.
dom
,
z
.
getWin
(),
z
.
serializer
);
z
.
formatter
=
new
m
.
Formatter
(
this
);
z
.
formatter
.
register
({
alignleft
:
[{
selector
:
"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li"
,
styles
:
{
textAlign
:
"left"
}},{
selector
:
"img,table"
,
styles
:
{
"float"
:
"left"
}}],
aligncenter
:
[{
selector
:
"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li"
,
styles
:
{
textAlign
:
"center"
}},{
selector
:
"img"
,
styles
:
{
display
:
"block"
,
marginLeft
:
"auto"
,
marginRight
:
"auto"
}},{
selector
:
"table"
,
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"
,
styles
:
{
"float"
:
"right"
}}],
alignfull
:
[{
selector
:
"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li"
,
styles
:
{
textAlign
:
"justify"
}}],
bold
:
[{
inline
:
"strong"
},{
inline
:
"span"
,
styles
:
{
fontWeight
:
"bold"
}},{
inline
:
"b"
}],
italic
:
[{
inline
:
"em"
},{
inline
:
"span"
,
styles
:
{
fontStyle
:
"italic"
}},{
inline
:
"i"
}],
underline
:
[{
inline
:
"span"
,
styles
:
{
textDecoration
:
"underline"
},
exact
:
true
},{
inline
:
"u"
}],
strikethrough
:
[{
inline
:
"span"
,
styles
:
{
textDecoration
:
"line-through"
},
exact
:
true
},{
inline
:
"u"
}],
forecolor
:
{
inline
:
"span"
,
styles
:
{
color
:
"%value"
}},
hilitecolor
:
{
inline
:
"span"
,
styles
:
{
backgroundColor
:
"%value"
}},
fontname
:
{
inline
:
"span"
,
styles
:
{
fontFamily
:
"%value"
}},
fontsize
:
{
inline
:
"span"
,
styles
:
{
fontSize
:
"%value"
}},
blockquote
:
{
block
:
"blockquote"
,
wrapper
:
1
,
remove
:
"all"
},
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
){
z
.
formatter
.
register
(
s
,{
block
:
s
,
remove
:
"all"
})});
z
.
formatter
.
register
(
z
.
settings
.
formats
);
z
.
undoManager
=
new
m
.
UndoManager
(
z
);
z
.
undoManager
.
onAdd
.
add
(
function
(
t
,
s
){
if
(
!
s
.
initial
){
return
z
.
onChange
.
dispatch
(
z
,
s
,
t
)}});
z
.
undoManager
.
onUndo
.
add
(
function
(
t
,
s
){
return
z
.
onUndo
.
dispatch
(
z
,
s
,
t
)});
z
.
undoManager
.
onRedo
.
add
(
function
(
t
,
s
){
return
z
.
onRedo
.
dispatch
(
z
,
s
,
t
)});
z
.
forceBlocks
=
new
m
.
ForceBlocks
(
z
,{
forced_root_block
:
A
.
forced_root_block
});
z
.
editorCommands
=
new
m
.
EditorCommands
(
z
);
z
.
serializer
.
onPreProcess
.
add
(
function
(
s
,
t
){
return
z
.
onPreProcess
.
dispatch
(
z
,
t
,
s
)});
z
.
serializer
.
onPostProcess
.
add
(
function
(
s
,
t
){
return
z
.
onPostProcess
.
dispatch
(
z
,
t
,
s
)});
z
.
onPreInit
.
dispatch
(
z
);
if
(
!
A
.
gecko_spellcheck
){
z
.
getBody
().
spellcheck
=
0
}
if
(
!
A
.
readonly
){
z
.
_addEvents
()}
z
.
controlManager
.
onPostRender
.
dispatch
(
z
,
z
.
controlManager
);
z
.
onPostRender
.
dispatch
(
z
);
if
(
A
.
directionality
){
z
.
getBody
().
dir
=
A
.
directionality
}
if
(
A
.
nowrap
){
z
.
getBody
().
style
.
whiteSpace
=
"nowrap"
}
if
(
A
.
custom_elements
){
function
y
(
s
,
t
){
i
(
g
(
A
.
custom_elements
),
function
(
B
){
var
C
;
if
(
B
.
indexOf
(
"~"
)
===
0
){
B
=
B
.
substring
(
1
);
C
=
"span"
}
else
{
C
=
"div"
}
t
.
content
=
t
.
content
.
replace
(
new
RegExp
(
"<("
+
B
+
")([^>]*)>"
,
"g"
),
"<"
+
C
+
' _mce_name="$1"$2>'
);
t
.
content
=
t
.
content
.
replace
(
new
RegExp
(
"</("
+
B
+
")>"
,
"g"
),
"</"
+
C
+
">"
)})}
z
.
onBeforeSetContent
.
add
(
y
);
z
.
onPostProcess
.
add
(
function
(
s
,
t
){
if
(
t
.
set
){
y
(
s
,
t
)}})}
if
(
A
.
handle_node_change_callback
){
z
.
onNodeChange
.
add
(
function
(
t
,
s
,
B
){
z
.
execCallback
(
"handle_node_change_callback"
,
z
.
id
,
B
,
-
1
,
-
1
,
true
,
z
.
selection
.
isCollapsed
())})}
if
(
A
.
save_callback
){
z
.
onSaveContent
.
add
(
function
(
s
,
B
){
var
t
=
z
.
execCallback
(
"save_callback"
,
z
.
id
,
B
.
content
,
z
.
getBody
());
if
(
t
){
B
.
content
=
t
}})}
if
(
A
.
onchange_callback
){
z
.
onChange
.
add
(
function
(
t
,
s
){
z
.
execCallback
(
"onchange_callback"
,
z
,
s
)})}
if
(
A
.
convert_newlines_to_brs
){
z
.
onBeforeSetContent
.
add
(
function
(
s
,
t
){
if
(
t
.
initial
){
t
.
content
=
t
.
content
.
replace
(
/\r?\n/g
,
"<br />"
)}})}
if
(
A
.
fix_nesting
&&
b
){
z
.
onBeforeSetContent
.
add
(
function
(
s
,
t
){
t
.
content
=
z
.
_fixNesting
(
t
.
content
)})}
if
(
A
.
preformatted
){
z
.
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
(
A
.
verify_css_classes
){
z
.
serializer
.
attribValueFilter
=
function
(
D
,
B
){
var
C
,
t
;
if
(
D
==
"class"
){
if
(
!
z
.
classesRE
){
t
=
z
.
dom
.
getClasses
();
if
(
t
.
length
>
0
){
C
=
""
;
i
(
t
,
function
(
s
){
C
+=
(
C
?
"|"
:
""
)
+
s
[
"class"
]});
z
.
classesRE
=
new
RegExp
(
"("
+
C
+
")"
,
"gi"
)}}
return
!
z
.
classesRE
||
/(\bmceItem\w+\b|\bmceTemp\w+\b)/g
.
test
(
B
)
||
z
.
classesRE
.
test
(
B
)
?
B
:
""
}
return
B
}}
if
(
A
.
cleanup_callback
){
z
.
onBeforeSetContent
.
add
(
function
(
s
,
t
){
t
.
content
=
z
.
execCallback
(
"cleanup_callback"
,
"insert_to_editor"
,
t
.
content
,
t
)});
z
.
onPreProcess
.
add
(
function
(
s
,
t
){
if
(
t
.
set
){
z
.
execCallback
(
"cleanup_callback"
,
"insert_to_editor_dom"
,
t
.
node
,
t
)}
if
(
t
.
get
){
z
.
execCallback
(
"cleanup_callback"
,
"get_from_editor_dom"
,
t
.
node
,
t
)}});
z
.
onPostProcess
.
add
(
function
(
s
,
t
){
if
(
t
.
set
){
t
.
content
=
z
.
execCallback
(
"cleanup_callback"
,
"insert_to_editor"
,
t
.
content
,
t
)}
if
(
t
.
get
){
t
.
content
=
z
.
execCallback
(
"cleanup_callback"
,
"get_from_editor"
,
t
.
content
,
t
)}})}
if
(
A
.
save_callback
){
z
.
onGetContent
.
add
(
function
(
s
,
t
){
if
(
t
.
save
){
t
.
content
=
z
.
execCallback
(
"save_callback"
,
z
.
id
,
t
.
content
,
z
.
getBody
())}})}
if
(
A
.
handle_event_callback
){
z
.
onEvent
.
add
(
function
(
s
,
t
,
B
){
if
(
z
.
execCallback
(
"handle_event_callback"
,
t
,
s
,
B
)
===
false
){
j
.
cancel
(
t
)}})}
z
.
onSetContent
.
add
(
function
(){
z
.
addVisual
(
z
.
getBody
())});
if
(
A
.
padd_empty_editor
){
z
.
onPostProcess
.
add
(
function
(
s
,
t
){
t
.
content
=
t
.
content
.
replace
(
/^(<p[^>]*>( | |\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/
,
""
)})}
if
(
a
){
function
p
(
s
,
t
){
i
(
s
.
dom
.
select
(
"a"
),
function
(
C
){
var
B
=
C
.
parentNode
;
if
(
s
.
dom
.
isBlock
(
B
)
&&
B
.
lastChild
===
C
){
s
.
dom
.
add
(
B
,
"br"
,{
_mce_bogus
:
1
})}})}
z
.
onExecCommand
.
add
(
function
(
s
,
t
){
if
(
t
===
"CreateLink"
){
p
(
s
)}});
z
.
onSetContent
.
add
(
z
.
selection
.
onSetContent
.
add
(
p
));
if
(
!
A
.
readonly
){
try
{
u
.
designMode
=
"Off"
;
u
.
designMode
=
"On"
}
catch
(
v
){}}}
setTimeout
(
function
(){
if
(
z
.
removed
){
return
}
z
.
load
({
initial
:
true
,
format
:
(
A
.
cleanup_on_startup
?
"html"
:
"raw"
)});
z
.
startContent
=
z
.
getContent
({
format
:
"raw"
});
z
.
initialized
=
true
;
z
.
onInit
.
dispatch
(
z
);
z
.
execCallback
(
"setupcontent_callback"
,
z
.
id
,
z
.
getBody
(),
z
.
getDoc
());
z
.
execCallback
(
"init_instance_callback"
,
z
);
z
.
focus
(
true
);
z
.
nodeChanged
({
initial
:
1
});
if
(
A
.
content_css
){
m
.
each
(
g
(
A
.
content_css
),
function
(
s
){
z
.
dom
.
loadCSS
(
z
.
documentBaseURI
.
toAbsolute
(
s
))})}
if
(
A
.
auto_focus
){
setTimeout
(
function
(){
var
s
=
m
.
get
(
A
.
auto_focus
);
s
.
selection
.
select
(
s
.
getBody
(),
1
);
s
.
selection
.
collapse
(
1
);
s
.
getWin
().
focus
()},
100
)}},
1
);
r
=
null
},
focus
:
function
(
q
){
var
s
,
p
=
this
,
r
=
p
.
settings
.
content_editable
;
if
(
!
q
){
if
(
!
r
){
p
.
getWin
().
focus
()}}
if
(
m
.
activeEditor
!=
p
){
if
((
s
=
m
.
activeEditor
)
!=
null
){
s
.
onDeactivate
.
dispatch
(
s
,
p
)}
p
.
onActivate
.
dispatch
(
p
,
s
)}
m
.
_setActive
(
p
)},
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
=
(
b
?
q
.
getNode
()
:
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
(
r
,
q
,
p
){
this
.
execCommands
[
r
]
=
{
func
:
q
,
scope
:
p
||
this
}},
addQueryStateHandler
:
function
(
r
,
q
,
p
){
this
.
queryStateCommands
[
r
]
=
{
func
:
q
,
scope
:
p
||
this
}},
addQueryValueHandler
:
function
(
r
,
q
,
p
){
this
.
queryValueCommands
[
r
]
=
{
func
:
q
,
scope
:
p
||
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
(
m
.
GlobalCommands
.
execCommand
(
r
,
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
=
0
;
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
(
q
,
r
){
var
p
=
this
;
r
=
r
||
{};
r
.
format
=
r
.
format
||
"html"
;
r
.
set
=
true
;
r
.
content
=
q
;
if
(
!
r
.
no_events
){
p
.
onBeforeSetContent
.
dispatch
(
p
,
r
)}
if
(
!
m
.
isIE
&&
(
q
.
length
===
0
||
/^\s+$/
.
test
(
q
))){
r
.
content
=
p
.
dom
.
setHTML
(
p
.
getBody
(),
'<br _mce_bogus="1" />'
);
r
.
format
=
"raw"
}
r
.
content
=
p
.
dom
.
setHTML
(
p
.
getBody
(),
m
.
trim
(
r
.
content
));
if
(
r
.
format
!=
"raw"
&&
p
.
settings
.
cleanup
){
r
.
getInner
=
true
;
r
.
content
=
p
.
dom
.
setHTML
(
p
.
getBody
(),
p
.
serializer
.
serialize
(
p
.
getBody
(),
r
))}
if
(
!
r
.
no_events
){
p
.
onSetContent
.
dispatch
(
p
,
r
)}
return
r
.
content
},
getContent
:
function
(
r
){
var
p
=
this
,
q
;
r
=
r
||
{};
r
.
format
=
r
.
format
||
"html"
;
r
.
get
=
true
;
if
(
!
r
.
no_events
){
p
.
onBeforeGetContent
.
dispatch
(
p
,
r
)}
if
(
r
.
format
!=
"raw"
&&
p
.
settings
.
cleanup
){
r
.
getInner
=
true
;
q
=
p
.
serializer
.
serialize
(
p
.
getBody
(),
r
)}
else
{
q
=
p
.
getBody
().
innerHTML
}
q
=
q
.
replace
(
/^\s*|\s*$/g
,
""
);
r
.
content
=
q
;
if
(
!
r
.
no_events
){
p
.
onGetContent
.
dispatch
(
p
,
r
)}
return
r
.
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
v
=
this
,
u
,
y
=
v
.
settings
,
x
=
{
mouseup
:
"onMouseUp"
,
mousedown
:
"onMouseDown"
,
click
:
"onClick"
,
keyup
:
"onKeyUp"
,
keydown
:
"onKeyDown"
,
keypress
:
"onKeyPress"
,
submit
:
"onSubmit"
,
reset
:
"onReset"
,
contextmenu
:
"onContextMenu"
,
dblclick
:
"onDblClick"
,
paste
:
"onPaste"
};
function
r
(
t
,
A
){
var
s
=
t
.
type
;
if
(
v
.
removed
){
return
}
if
(
v
.
onEvent
.
dispatch
(
v
,
t
,
A
)
!==
false
){
v
[
x
[
t
.
fakeType
||
t
.
type
]].
dispatch
(
v
,
t
,
A
)}}
i
(
x
,
function
(
t
,
s
){
switch
(
s
){
case
"contextmenu"
:
if
(
m
.
isOpera
){
v
.
dom
.
bind
(
v
.
getBody
(),
"mousedown"
,
function
(
A
){
if
(
A
.
ctrlKey
){
A
.
fakeType
=
"contextmenu"
;
r
(
A
)}})}
else
{
v
.
dom
.
bind
(
v
.
getBody
(),
s
,
r
)}
break
;
case
"paste"
:
v
.
dom
.
bind
(
v
.
getBody
(),
s
,
function
(
A
){
r
(
A
)});
break
;
case
"submit"
:
case
"reset"
:
v
.
dom
.
bind
(
v
.
getElement
().
form
||
n
.
getParent
(
v
.
id
,
"form"
),
s
,
r
);
break
;
default
:
v
.
dom
.
bind
(
y
.
content_editable
?
v
.
getBody
()
:
v
.
getDoc
(),
s
,
r
)}});
v
.
dom
.
bind
(
y
.
content_editable
?
v
.
getBody
()
:
(
a
?
v
.
getDoc
()
:
v
.
getWin
()),
"focus"
,
function
(
s
){
v
.
focus
(
true
)});
if
(
m
.
isGecko
){
v
.
dom
.
bind
(
v
.
getDoc
(),
"DOMNodeInserted"
,
function
(
t
){
var
s
;
t
=
t
.
target
;
if
(
t
.
nodeType
===
1
&&
t
.
nodeName
===
"IMG"
&&
(
s
=
t
.
getAttribute
(
"_mce_src"
))){
t
.
src
=
v
.
documentBaseURI
.
toAbsolute
(
s
)}})}
if
(
a
){
function
p
(){
var
B
=
this
,
D
=
B
.
getDoc
(),
C
=
B
.
settings
;
if
(
a
&&!
C
.
readonly
){
if
(
B
.
_isHidden
()){
try
{
if
(
!
C
.
content_editable
){
D
.
designMode
=
"On"
}}
catch
(
A
){}}
try
{
D
.
execCommand
(
"styleWithCSS"
,
0
,
false
)}
catch
(
A
){
if
(
!
B
.
_isHidden
()){
try
{
D
.
execCommand
(
"useCSS"
,
0
,
true
)}
catch
(
A
){}}}
if
(
!
C
.
table_inline_editing
){
try
{
D
.
execCommand
(
"enableInlineTableEditing"
,
false
,
false
)}
catch
(
A
){}}
if
(
!
C
.
object_resizing
){
try
{
D
.
execCommand
(
"enableObjectResizing"
,
false
,
false
)}
catch
(
A
){}}}}
v
.
onBeforeExecCommand
.
add
(
p
);
v
.
onMouseDown
.
add
(
p
)}
if
(
m
.
isWebKit
){
v
.
onClick
.
add
(
function
(
s
,
t
){
t
=
t
.
target
;
if
(
t
.
nodeName
==
"IMG"
||
(
t
.
nodeName
==
"A"
&&
v
.
dom
.
hasClass
(
t
,
"mceItemAnchor"
))){
v
.
selection
.
getSel
().
setBaseAndExtent
(
t
,
0
,
t
,
1
)}})}
v
.
onMouseUp
.
add
(
v
.
nodeChanged
);
v
.
onClick
.
add
(
v
.
nodeChanged
);
v
.
onKeyUp
.
add
(
function
(
s
,
t
){
var
A
=
t
.
keyCode
;
if
((
A
>=
33
&&
A
<=
36
)
||
(
A
>=
37
&&
A
<=
40
)
||
A
==
13
||
A
==
45
||
A
==
46
||
A
==
8
||
(
m
.
isMac
&&
(
A
==
91
||
A
==
93
))
||
t
.
ctrlKey
){
v
.
nodeChanged
()}});
v
.
onReset
.
add
(
function
(){
v
.
setContent
(
v
.
startContent
,{
format
:
"raw"
})});
if
(
y
.
custom_shortcuts
){
if
(
y
.
custom_undo_redo_keyboard_shortcuts
){
v
.
addShortcut
(
"ctrl+z"
,
v
.
getLang
(
"undo_desc"
),
"Undo"
);
v
.
addShortcut
(
"ctrl+y"
,
v
.
getLang
(
"redo_desc"
),
"Redo"
)}
if
(
a
){
v
.
addShortcut
(
"ctrl+b"
,
v
.
getLang
(
"bold_desc"
),
"Bold"
);
v
.
addShortcut
(
"ctrl+i"
,
v
.
getLang
(
"italic_desc"
),
"Italic"
);
v
.
addShortcut
(
"ctrl+u"
,
v
.
getLang
(
"underline_desc"
),
"Underline"
)}
for
(
u
=
1
;
u
<=
6
;
u
++
){
v
.
addShortcut
(
"ctrl+"
+
u
,
""
,[
"FormatBlock"
,
false
,
"h"
+
u
])}
v
.
addShortcut
(
"ctrl+7"
,
""
,[
"FormatBlock"
,
false
,
"<p>"
]);
v
.
addShortcut
(
"ctrl+8"
,
""
,[
"FormatBlock"
,
false
,
"<div>"
]);
v
.
addShortcut
(
"ctrl+9"
,
""
,[
"FormatBlock"
,
false
,
"<address>"
]);
function
z
(
t
){
var
s
=
null
;
if
(
!
t
.
altKey
&&!
t
.
ctrlKey
&&!
t
.
metaKey
){
return
s
}
i
(
v
.
shortcuts
,
function
(
A
){
if
(
m
.
isMac
&&
A
.
ctrl
!=
t
.
metaKey
){
return
}
else
{
if
(
!
m
.
isMac
&&
A
.
ctrl
!=
t
.
ctrlKey
){
return
}}
if
(
A
.
alt
!=
t
.
altKey
){
return
}
if
(
A
.
shift
!=
t
.
shiftKey
){
return
}
if
(
t
.
keyCode
==
A
.
keyCode
||
(
t
.
charCode
&&
t
.
charCode
==
A
.
charCode
)){
s
=
A
;
return
false
}});
return
s
}
v
.
onKeyUp
.
add
(
function
(
s
,
t
){
var
A
=
z
(
t
);
if
(
A
){
return
j
.
cancel
(
t
)}});
v
.
onKeyPress
.
add
(
function
(
s
,
t
){
var
A
=
z
(
t
);
if
(
A
){
return
j
.
cancel
(
t
)}});
v
.
onKeyDown
.
add
(
function
(
s
,
t
){
var
A
=
z
(
t
);
if
(
A
){
A
.
func
.
call
(
A
.
scope
);
return
j
.
cancel
(
t
)}})}
if
(
m
.
isIE
){
v
.
dom
.
bind
(
v
.
getDoc
(),
"controlselect"
,
function
(
A
){
var
t
=
v
.
resizeInfo
,
s
;
A
=
A
.
target
;
if
(
A
.
nodeName
!==
"IMG"
){
return
}
if
(
t
){
v
.
dom
.
unbind
(
t
.
node
,
t
.
ev
,
t
.
cb
)}
if
(
!
v
.
dom
.
hasClass
(
A
,
"mceItemNoResize"
)){
ev
=
"resizeend"
;
s
=
v
.
dom
.
bind
(
A
,
ev
,
function
(
C
){
var
B
;
C
=
C
.
target
;
if
(
B
=
v
.
dom
.
getStyle
(
C
,
"width"
)){
v
.
dom
.
setAttrib
(
C
,
"width"
,
B
.
replace
(
/[^0-9%]+/g
,
""
));
v
.
dom
.
setStyle
(
C
,
"width"
,
""
)}
if
(
B
=
v
.
dom
.
getStyle
(
C
,
"height"
)){
v
.
dom
.
setAttrib
(
C
,
"height"
,
B
.
replace
(
/[^0-9%]+/g
,
""
));
v
.
dom
.
setStyle
(
C
,
"height"
,
""
)}})}
else
{
ev
=
"resizestart"
;
s
=
v
.
dom
.
bind
(
A
,
"resizestart"
,
j
.
cancel
,
j
)}
t
=
v
.
resizeInfo
=
{
node
:
A
,
ev
:
ev
,
cb
:
s
}});
v
.
onKeyDown
.
add
(
function
(
s
,
t
){
switch
(
t
.
keyCode
){
case
8
:
if
(
v
.
selection
.
getRng
().
item
){
s
.
dom
.
remove
(
v
.
selection
.
getRng
().
item
(
0
));
return
j
.
cancel
(
t
)}}})}
if
(
m
.
isOpera
){
v
.
onClick
.
add
(
function
(
s
,
t
){
j
.
prevent
(
t
)})}
if
(
y
.
custom_undo_redo
){
function
q
(){
v
.
undoManager
.
typing
=
0
;
v
.
undoManager
.
add
()}
v
.
dom
.
bind
(
v
.
getDoc
(),
"focusout"
,
function
(
s
){
if
(
!
v
.
removed
&&
v
.
undoManager
.
typing
){
q
()}});
v
.
onKeyUp
.
add
(
function
(
s
,
t
){
if
((
t
.
keyCode
>=
33
&&
t
.
keyCode
<=
36
)
||
(
t
.
keyCode
>=
37
&&
t
.
keyCode
<=
40
)
||
t
.
keyCode
==
13
||
t
.
keyCode
==
45
||
t
.
ctrlKey
){
q
()}});
v
.
onKeyDown
.
add
(
function
(
s
,
t
){
if
((
t
.
keyCode
>=
33
&&
t
.
keyCode
<=
36
)
||
(
t
.
keyCode
>=
37
&&
t
.
keyCode
<=
40
)
||
t
.
keyCode
==
13
||
t
.
keyCode
==
45
){
if
(
v
.
undoManager
.
typing
){
q
()}
return
}
if
(
!
v
.
undoManager
.
typing
){
v
.
undoManager
.
add
();
v
.
undoManager
.
typing
=
1
}});
v
.
onMouseDown
.
add
(
function
(){
if
(
v
.
undoManager
.
typing
){
q
()}})}},
_isHidden
:
function
(){
var
p
;
if
(
!
a
){
return
0
}
p
=
this
.
selection
.
getSel
();
return
(
!
p
||!
p
.
rangeCount
||
p
.
rangeCount
==
0
)},
_fixNesting
:
function
(
q
){
var
r
=
[],
p
;
q
=
q
.
replace
(
/<(\/)?([^\s>]+)[^>]*?>/g
,
function
(
t
,
s
,
v
){
var
u
;
if
(
s
===
"/"
){
if
(
!
r
.
length
){
return
""
}
if
(
v
!==
r
[
r
.
length
-
1
].
tag
){
for
(
p
=
r
.
length
-
1
;
p
>=
0
;
p
--
){
if
(
r
[
p
].
tag
===
v
){
r
[
p
].
close
=
1
;
break
}}
return
""
}
else
{
r
.
pop
();
if
(
r
.
length
&&
r
[
r
.
length
-
1
].
close
){
t
=
t
+
"</"
+
r
[
r
.
length
-
1
].
tag
+
">"
;
r
.
pop
()}}}
else
{
if
(
/^(br|hr|input|meta|img|link|param)$/i
.
test
(
v
)){
return
t
}
if
(
/\/>$/
.
test
(
t
)){
return
t
}
r
.
push
({
tag
:
v
})}
return
t
});
for
(
p
=
r
.
length
-
1
;
p
>=
0
;
p
--
){
q
+=
"</"
+
r
[
p
].
tag
+
">"
}
return
q
}})})(
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
.
queryCommandEnabled
(
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
)},
"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"
:
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
)},
mceCleanup
:
function
(){
i
();
n
.
setContent
(
n
.
getContent
({
cleanup
:
a
}),{
cleanup
:
a
});
g
()},
mceRemoveNode
:
function
(
y
,
x
,
v
){
var
u
=
v
||
p
.
getNode
();
if
(
u
!=
ed
.
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
(
x
,
v
,
u
){
p
.
setContent
(
u
)},
mceInsertRawHTML
:
function
(
x
,
v
,
u
){
p
.
setContent
(
"tiny_mce_marker"
);
n
.
setContent
(
n
.
getContent
().
replace
(
/tiny_mce_marker/g
,
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
(){
p
.
setContent
(
"<hr />"
)},
mceToggleVisualAid
:
function
(){
n
.
hasVisual
=!
n
.
hasVisual
;
n
.
addVisual
()},
mceReplaceContent
:
function
(
x
,
v
,
u
){
p
.
setContent
(
u
.
replace
(
/\{\$selection\}/g
,
p
.
getContent
({
format
:
"text"
})))},
mceInsertLink
:
function
(
y
,
x
,
v
){
var
u
=
l
.
getParent
(
p
.
getNode
(),
"a"
);
if
(
c
.
is
(
v
,
"string"
)){
v
=
{
href
:
v
}}
if
(
!
u
){
f
(
"CreateLink"
,
b
,
"javascript:mctmp(0);"
);
d
(
l
.
select
(
"a[href=javascript:mctmp(0);]"
),
function
(
z
){
l
.
setAttribs
(
z
,
v
)})}
else
{
if
(
v
.
href
){
l
.
setAttribs
(
u
,
v
)}
else
{
ed
.
dom
.
remove
(
u
,
a
)}}}});
t
({
"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull"
:
function
(
u
){
return
s
(
"align"
+
u
.
substring
(
7
))},
"Bold,Italic,Underline,Strikethrough"
:
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
:
0
,
onAdd
:
new
a
(
c
),
onUndo
:
new
a
(
c
),
onRedo
:
new
a
(
c
),
add
:
function
(
l
){
var
h
,
j
=
e
.
settings
,
k
;
l
=
l
||
{};
l
.
content
=
f
();
k
=
g
[
d
];
if
(
k
&&
k
.
content
==
l
.
content
){
if
(
d
>
0
||
g
.
length
==
1
){
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
){
if
(
d
==
0
){
g
=
[]}
else
{
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
=
0
}
if
(
d
>
0
){
j
=
g
[
--
d
];
e
.
setContent
(
j
.
content
,{
format
:
"raw"
});
e
.
selection
.
moveToBookmark
(
j
.
bookmark
);
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
=
c
.
typing
=
0
},
hasUndo
:
function
(){
return
d
>
0
||
c
.
typing
},
hasRedo
:
function
(){
return
d
<
g
.
length
-
1
}}}})(
tinymce
);(
function
(
l
){
var
k
=
l
.
dom
.
Event
,
c
=
l
.
isIE
,
a
=
l
.
isGecko
,
b
=
l
.
isOpera
,
j
=
l
.
each
,
i
=
l
.
extend
,
d
=
true
,
h
=
false
;
function
g
(
n
,
o
){
var
m
=
o
.
ownerDocument
.
createRange
();
m
.
setStart
(
n
.
endContainer
,
n
.
endOffset
);
m
.
setEndAfter
(
o
);
return
m
.
cloneContents
().
textContent
.
length
==
0
}
function
f
(
m
){
m
=
m
.
innerHTML
;
m
=
m
.
replace
(
/<(img|hr|table|input|select|textarea)[ \>]/gi
,
"-"
);
m
=
m
.
replace
(
/<[^>]+>/g
,
""
);
return
m
.
replace
(
/[ \u00a0\t\r\n]+/g
,
""
)
==
""
}
function
e
(
o
,
q
,
m
){
var
n
,
p
;
if
(
f
(
m
)){
n
=
q
.
getParent
(
m
,
"ul,ol"
);
if
(
!
q
.
getParent
(
n
.
parentNode
,
"ul,ol"
)){
q
.
split
(
n
,
m
);
p
=
q
.
create
(
"p"
,
0
,
'<br _mce_bogus="1" />'
);
q
.
replace
(
p
,
m
);
o
.
select
(
p
,
1
)}
return
h
}
return
d
}
l
.
create
(
"tinymce.ForceBlocks"
,{
ForceBlocks
:
function
(
n
){
var
o
=
this
,
p
=
n
.
settings
,
q
;
o
.
editor
=
n
;
o
.
dom
=
n
.
dom
;
q
=
(
p
.
forced_root_block
||
"p"
).
toLowerCase
();
p
.
element
=
q
.
toUpperCase
();
n
.
onPreInit
.
add
(
o
.
setup
,
o
);
o
.
reOpera
=
new
RegExp
(
"(\\u00a0| | )</"
+
q
+
">"
,
"gi"
);
o
.
rePadd
=
new
RegExp
(
"<p( )([^>]+)><\\/p>|<p( )([^>]+)\\/>|<p( )([^>]+)>\\s+<\\/p>|<p><\\/p>|<p\\/>|<p>\\s+<\\/p>"
.
replace
(
/p/g
,
q
),
"gi"
);
o
.
reNbsp2BR1
=
new
RegExp
(
"<p( )([^>]+)>[\\s\\u00a0]+<\\/p>|<p>[\\s\\u00a0]+<\\/p>"
.
replace
(
/p/g
,
q
),
"gi"
);
o
.
reNbsp2BR2
=
new
RegExp
(
"<%p()([^>]+)>( | )<\\/%p>|<%p>( | )<\\/%p>"
.
replace
(
/%p/g
,
q
),
"gi"
);
o
.
reBR2Nbsp
=
new
RegExp
(
"<p( )([^>]+)>\\s*<br \\/>\\s*<\\/p>|<p>\\s*<br \\/>\\s*<\\/p>"
.
replace
(
/p/g
,
q
),
"gi"
);
function
m
(
r
,
s
){
if
(
b
){
s
.
content
=
s
.
content
.
replace
(
o
.
reOpera
,
"</"
+
q
+
">"
)}
s
.
content
=
s
.
content
.
replace
(
o
.
rePadd
,
"<"
+
q
+
"$1$2$3$4$5$6>\u00a0</"
+
q
+
">"
);
if
(
!
c
&&!
b
&&
s
.
set
){
s
.
content
=
s
.
content
.
replace
(
o
.
reNbsp2BR1
,
"<"
+
q
+
"$1$2><br /></"
+
q
+
">"
);
s
.
content
=
s
.
content
.
replace
(
o
.
reNbsp2BR2
,
"<"
+
q
+
"$1$2><br /></"
+
q
+
">"
)}
else
{
s
.
content
=
s
.
content
.
replace
(
o
.
reBR2Nbsp
,
"<"
+
q
+
"$1$2>\u00a0</"
+
q
+
">"
)}}
n
.
onBeforeSetContent
.
add
(
m
);
n
.
onPostProcess
.
add
(
m
);
if
(
p
.
forced_root_block
){
n
.
onInit
.
add
(
o
.
forceRoots
,
o
);
n
.
onSetContent
.
add
(
o
.
forceRoots
,
o
);
n
.
onBeforeGetContent
.
add
(
o
.
forceRoots
,
o
)}},
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
k
.
cancel
(
t
)}})}}
if
(
!
c
&&
p
.
force_p_newlines
){
m
.
onKeyPress
.
add
(
function
(
s
,
t
){
if
(
t
.
keyCode
==
13
&&!
t
.
shiftKey
&&!
n
.
insertPara
(
t
)){
k
.
cancel
(
t
)}});
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
)){
q
(
s
);
k
.
cancel
(
t
)}})}
m
.
onPreProcess
.
add
(
function
(
s
,
t
){
j
(
r
.
select
(
"p,h1,h2,h3,h4,h5,h6,div"
,
t
.
node
),
function
(
u
){
if
(
f
(
u
)){
j
(
r
.
select
(
"span,em,strong,b,i"
,
t
.
node
),
function
(
v
){
if
(
!
v
.
hasChildNodes
()){
v
.
appendChild
(
s
.
getDoc
().
createTextNode
(
"\u00a0"
));
return
h
}})}})});
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
,
h
),
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
(
"_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
){
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
{
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
){
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
&&
(
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
;
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
h
}
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
)
&&
g
(
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
(
f
(
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
(
h
);
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
?
" "
:
"<br />"
;
return
r
[
0
]}
else
{
y
.
innerHTML
=
b
?
" "
:
"<br />"
}}
if
(
f
(
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
,
h
).
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
;
E
=
U
.
clientHeight
;
if
(
C
<
M
.
y
||
C
+
E
>
M
.
y
+
M
.
h
){
v
.
getWin
().
scrollTo
(
0
,
C
<
M
.
y
?
C
:
C
-
M
.
h
+
25
)}
return
h
},
backspaceDelete
:
function
(
s
,
A
){
var
C
=
this
,
q
=
C
.
editor
,
x
=
q
.
getBody
(),
p
=
q
.
dom
,
o
,
u
=
q
.
selection
,
m
=
u
.
getRng
(),
v
=
m
.
startContainer
,
o
,
y
,
z
;
if
(
v
&&
q
.
dom
.
isBlock
(
v
)
&&!
/^(TD|TH)$/
.
test
(
v
.
nodeName
)
&&
A
){
if
(
v
.
childNodes
.
length
==
0
||
(
v
.
childNodes
.
length
==
1
&&
v
.
firstChild
.
nodeName
==
"BR"
)){
o
=
v
;
while
((
o
=
o
.
previousSibling
)
&&!
q
.
dom
.
isBlock
(
o
)){}
if
(
o
){
if
(
v
!=
x
.
firstChild
){
y
=
q
.
dom
.
doc
.
createTreeWalker
(
o
,
NodeFilter
.
SHOW_TEXT
,
null
,
h
);
while
(
z
=
y
.
nextNode
()){
o
=
z
}
m
=
q
.
getDoc
().
createRange
();
m
.
setStart
(
o
,
o
.
nodeValue
?
o
.
nodeValue
.
length
:
0
);
m
.
setEnd
(
o
,
o
.
nodeValue
?
o
.
nodeValue
.
length
:
0
);
u
.
setRng
(
m
);
q
.
dom
.
remove
(
v
)}
return
k
.
cancel
(
s
)}}}
function
B
(
n
){
var
r
;
n
=
n
.
target
;
if
(
n
&&
n
.
parentNode
&&
n
.
nodeName
==
"BR"
&&
(
o
=
C
.
getParentBlock
(
n
))){
r
=
n
.
previousSibling
;
k
.
remove
(
x
,
"DOMNodeInserted"
,
B
);
if
(
r
&&
r
.
nodeType
==
3
&&
/\s+$/
.
test
(
r
.
nodeValue
)){
return
}
if
(
n
.
previousSibling
||
n
.
nextSibling
){
q
.
dom
.
remove
(
n
)}}}
k
.
_add
(
x
,
"DOMNodeInserted"
,
B
);
window
.
setTimeout
(
function
(){
k
.
_remove
(
x
,
"DOMNodeInserted"
,
B
)},
1
)}})})(
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
)}
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
.
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
.
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
.
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
);
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
){
function
b
(){
var
d
=
{},
c
=
{},
e
=
{};
function
f
(
j
,
i
,
h
,
g
){
if
(
typeof
(
i
)
==
"string"
){
i
=
[
i
]}
a
.
each
(
i
,
function
(
k
){
j
[
k
.
toLowerCase
()]
=
{
func
:
h
,
scope
:
g
}})}
a
.
extend
(
this
,{
add
:
function
(
i
,
h
,
g
){
f
(
d
,
i
,
h
,
g
)},
addQueryStateHandler
:
function
(
i
,
h
,
g
){
f
(
c
,
i
,
h
,
g
)},
addQueryValueHandler
:
function
(
i
,
h
,
g
){
f
(
e
,
i
,
h
,
g
)},
execCommand
:
function
(
h
,
k
,
j
,
i
,
g
){
if
(
k
=
d
[
k
.
toLowerCase
()]){
if
(
k
.
func
.
call
(
h
||
k
.
scope
,
j
,
i
,
g
)
!==
false
){
return
true
}}},
queryCommandValue
:
function
(){
if
(
cmd
=
e
[
cmd
.
toLowerCase
()]){
return
cmd
.
func
.
call
(
scope
||
cmd
.
scope
,
ui
,
value
,
args
)}},
queryCommandState
:
function
(){
if
(
cmd
=
c
[
cmd
.
toLowerCase
()]){
return
cmd
.
func
.
call
(
scope
||
cmd
.
scope
,
ui
,
value
,
args
)}}})}
a
.
GlobalCommands
=
new
b
()})(
tinymce
);(
function
(
a
){
a
.
Formatter
=
function
(
T
){
var
K
=
{},
M
=
a
.
each
,
c
=
T
.
dom
,
p
=
T
.
selection
,
s
=
a
.
dom
.
TreeWalker
,
I
=
new
a
.
dom
.
RangeUtils
(
c
),
d
=
T
.
schema
.
isValid
,
E
=
c
.
isBlock
,
k
=
T
.
settings
.
forced_root_block
,
r
=
c
.
nodeIndex
,
D
=
"\uFEFF"
,
e
=
/^(src|href|style)$/
,
Q
=
false
,
A
=
true
,
o
,
N
=
{
apply
:
[],
remove
:
[]};
function
y
(
U
){
return
U
instanceof
Array
}
function
l
(
V
,
U
){
return
c
.
getParents
(
V
,
U
,
c
.
getRoot
())}
function
b
(
U
){
return
U
.
nodeType
===
1
&&
(
U
.
face
===
"mceinline"
||
U
.
style
.
fontFamily
===
"mceinline"
)}
function
P
(
U
){
return
U
?
K
[
U
]
:
K
}
function
j
(
U
,
V
){
if
(
U
){
if
(
typeof
(
U
)
!==
"string"
){
M
(
U
,
function
(
X
,
W
){
j
(
W
,
X
)})}
else
{
V
=
V
.
length
?
V
:
[
V
];
M
(
V
,
function
(
W
){
if
(
W
.
deep
===
o
){
W
.
deep
=!
W
.
selector
}
if
(
W
.
split
===
o
){
W
.
split
=!
W
.
selector
||
W
.
inline
}
if
(
W
.
remove
===
o
&&
W
.
selector
&&!
W
.
inline
){
W
.
remove
=
"none"
}
if
(
W
.
selector
&&
W
.
inline
){
W
.
mixed
=
true
;
W
.
block_expand
=
true
}
if
(
typeof
(
W
.
classes
)
===
"string"
){
W
.
classes
=
W
.
classes
.
split
(
/\s+/
)}});
K
[
U
]
=
V
}}}
function
R
(
W
,
ac
,
Y
){
var
Z
=
P
(
W
),
ad
=
Z
[
0
],
ab
,
V
,
aa
;
function
X
(
ag
){
var
af
=
ag
.
startContainer
,
aj
=
ag
.
startOffset
,
ai
,
ah
;
if
(
af
.
nodeType
==
1
||
af
.
nodeValue
===
""
){
ai
=
new
s
(
af
.
childNodes
[
aj
]);
for
(
ah
=
ai
.
current
();
ah
;
ah
=
ai
.
next
()){
if
(
ah
.
nodeType
==
3
&&!
E
(
ah
.
parentNode
)
&&!
f
(
ah
)){
ag
.
setStart
(
ah
,
0
);
break
}}}
return
ag
}
function
U
(
ag
,
af
){
af
=
af
||
ad
;
if
(
ag
){
M
(
af
.
styles
,
function
(
ai
,
ah
){
c
.
setStyle
(
ag
,
ah
,
q
(
ai
,
ac
))});
M
(
af
.
attributes
,
function
(
ai
,
ah
){
c
.
setAttrib
(
ag
,
ah
,
q
(
ai
,
ac
))});
M
(
af
.
classes
,
function
(
ah
){
ah
=
q
(
ah
,
ac
);
if
(
!
c
.
hasClass
(
ag
,
ah
)){
c
.
addClass
(
ag
,
ah
)}})}}
function
ae
(
ag
){
var
af
=
[],
ai
,
ah
;
ai
=
ad
.
inline
||
ad
.
block
;
ah
=
c
.
create
(
ai
);
U
(
ah
);
I
.
walk
(
ag
,
function
(
aj
){
var
ak
;
function
al
(
am
){
var
ap
=
am
.
nodeName
.
toLowerCase
(),
ao
=
am
.
parentNode
.
nodeName
.
toLowerCase
(),
an
;
if
(
g
(
ap
,
"br"
)){
ak
=
0
;
if
(
ad
.
block
){
c
.
remove
(
am
)}
return
}
if
(
ad
.
wrapper
&&
v
(
am
,
W
,
ac
)){
ak
=
0
;
return
}
if
(
ad
.
block
&&!
ad
.
wrapper
&&
F
(
ap
)){
am
=
c
.
rename
(
am
,
ai
);
U
(
am
);
af
.
push
(
am
);
ak
=
0
;
return
}
if
(
ad
.
selector
){
M
(
Z
,
function
(
aq
){
if
(
c
.
is
(
am
,
aq
.
selector
)
&&!
b
(
am
)){
U
(
am
,
aq
);
an
=
true
}});
if
(
!
ad
.
inline
||
an
){
ak
=
0
;
return
}}
if
(
d
(
ai
,
ap
)
&&
d
(
ao
,
ai
)){
if
(
!
ak
){
ak
=
ah
.
cloneNode
(
Q
);
am
.
parentNode
.
insertBefore
(
ak
,
am
);
af
.
push
(
ak
)}
ak
.
appendChild
(
am
)}
else
{
ak
=
0
;
M
(
a
.
grep
(
am
.
childNodes
),
al
);
ak
=
0
}}
M
(
aj
,
al
)});
M
(
af
,
function
(
al
){
var
aj
;
function
am
(
ao
){
var
an
=
0
;
M
(
ao
.
childNodes
,
function
(
ap
){
if
(
!
f
(
ap
)
&&!
G
(
ap
)){
an
++
}});
return
an
}
function
ak
(
an
){
var
ap
,
ao
;
M
(
an
.
childNodes
,
function
(
aq
){
if
(
aq
.
nodeType
==
1
&&!
G
(
aq
)
&&!
b
(
aq
)){
ap
=
aq
;
return
Q
}});
if
(
ap
&&
h
(
ap
,
ad
)){
ao
=
ap
.
cloneNode
(
Q
);
U
(
ao
);
c
.
replace
(
ao
,
an
,
A
);
c
.
remove
(
ap
,
1
)}
return
ao
||
an
}
aj
=
am
(
al
);
if
(
aj
===
0
){
c
.
remove
(
al
,
1
);
return
}
if
(
ad
.
inline
||
ad
.
wrapper
){
if
(
!
ad
.
exact
&&
aj
===
1
){
al
=
ak
(
al
)}
M
(
Z
,
function
(
an
){
M
(
c
.
select
(
an
.
inline
,
al
),
function
(
ao
){
S
(
an
,
ac
,
ao
,
an
.
exact
?
ao
:
null
)})});
c
.
getParent
(
al
.
parentNode
,
function
(
an
){
if
(
v
(
an
,
W
,
ac
)){
c
.
remove
(
al
,
1
);
al
=
0
;
return
A
}});
if
(
al
){
al
=
t
(
B
(
al
),
al
);
al
=
t
(
al
,
B
(
al
,
A
))}}})}
if
(
ad
){
if
(
Y
){
V
=
c
.
createRng
();
V
.
setStartBefore
(
Y
);
V
.
setEndAfter
(
Y
);
ae
(
V
)}
else
{
if
(
!
p
.
isCollapsed
()
||!
ad
.
inline
){
ab
=
p
.
getBookmark
();
ae
(
n
(
p
.
getRng
(
A
),
Z
));
p
.
moveToBookmark
(
ab
);
p
.
setRng
(
X
(
p
.
getRng
(
A
)));
T
.
nodeChanged
()}
else
{
O
(
"apply"
,
W
,
ac
)}}}}
function
z
(
W
,
ae
,
Y
){
var
Z
=
P
(
W
),
ag
=
Z
[
0
],
ad
,
ac
,
V
;
function
X
(
al
){
var
ak
,
aj
,
ai
;
ak
=
a
.
grep
(
al
.
childNodes
);
for
(
aj
=
0
,
ai
=
Z
.
length
;
aj
<
ai
;
aj
++
){
if
(
S
(
Z
[
aj
],
ae
,
al
,
al
)){
break
}}
if
(
ag
.
deep
){
for
(
aj
=
0
,
ai
=
ak
.
length
;
aj
<
ai
;
aj
++
){
X
(
ak
[
aj
])}}}
function
aa
(
ai
){
var
aj
;
M
(
l
(
ai
.
parentNode
).
reverse
(),
function
(
ak
){
var
al
;
if
(
!
aj
&&
ak
.
id
!=
"_start"
&&
ak
.
id
!=
"_end"
){
al
=
v
(
ak
,
W
,
ae
);
if
(
al
&&
al
.
split
!==
false
){
aj
=
ak
}}});
return
aj
}
function
U
(
al
,
ai
,
an
,
aq
){
var
ar
,
ap
,
ao
,
ak
,
am
,
aj
;
if
(
al
){
aj
=
al
.
parentNode
;
for
(
ar
=
ai
.
parentNode
;
ar
&&
ar
!=
aj
;
ar
=
ar
.
parentNode
){
ap
=
ar
.
cloneNode
(
Q
);
for
(
am
=
0
;
am
<
Z
.
length
;
am
++
){
if
(
S
(
Z
[
am
],
ae
,
ap
,
ap
)){
ap
=
0
;
break
}}
if
(
ap
){
if
(
ao
){
ap
.
appendChild
(
ao
)}
if
(
!
ak
){
ak
=
ap
}
ao
=
ap
}}
if
(
aq
&&
(
!
ag
.
mixed
||!
E
(
al
))){
ai
=
c
.
split
(
al
,
ai
)}
if
(
ao
){
an
.
parentNode
.
insertBefore
(
ao
,
an
);
ak
.
appendChild
(
an
)}}
return
ai
}
function
af
(
ai
){
return
U
(
aa
(
ai
),
ai
,
ai
,
true
)}
function
ab
(
ak
){
var
aj
=
c
.
get
(
ak
?
"_start"
:
"_end"
),
ai
=
aj
[
ak
?
"firstChild"
:
"lastChild"
];
c
.
remove
(
aj
,
1
);
return
ai
}
function
ah
(
ai
){
var
aj
,
ak
;
ai
=
n
(
ai
,
Z
,
A
);
if
(
ag
.
split
){
aj
=
H
(
ai
,
A
);
ak
=
H
(
ai
);
if
(
aj
!=
ak
){
aj
=
L
(
aj
,
"span"
,{
id
:
"_start"
,
_mce_type
:
"bookmark"
});
ak
=
L
(
ak
,
"span"
,{
id
:
"_end"
,
_mce_type
:
"bookmark"
});
af
(
aj
);
af
(
ak
);
aj
=
ab
(
A
);
ak
=
ab
()}
else
{
aj
=
ak
=
af
(
aj
)}
ai
.
startContainer
=
aj
.
parentNode
;
ai
.
startOffset
=
r
(
aj
);
ai
.
endContainer
=
ak
.
parentNode
;
ai
.
endOffset
=
r
(
ak
)
+
1
}
I
.
walk
(
ai
,
function
(
al
){
M
(
al
,
function
(
am
){
X
(
am
)})})}
if
(
Y
){
V
=
c
.
createRng
();
V
.
setStartBefore
(
Y
);
V
.
setEndAfter
(
Y
);
ah
(
V
);
return
}
if
(
!
p
.
isCollapsed
()
||!
ag
.
inline
){
ad
=
p
.
getBookmark
();
ah
(
p
.
getRng
(
A
));
p
.
moveToBookmark
(
ad
);
T
.
nodeChanged
()}
else
{
O
(
"remove"
,
W
,
ae
)}}
function
C
(
U
,
W
,
V
){
if
(
i
(
U
,
W
,
V
)){
z
(
U
,
W
,
V
)}
else
{
R
(
U
,
W
,
V
)}}
function
v
(
X
,
U
,
Z
){
var
aa
=
P
(
U
),
Y
,
W
,
V
;
function
ab
(
af
,
ah
,
ai
){
var
ae
,
ag
,
ac
=
ah
[
ai
],
ad
;
if
(
ac
){
if
(
ac
.
length
===
o
){
for
(
ae
in
ac
){
if
(
ac
.
hasOwnProperty
(
ae
)){
if
(
ai
===
"attributes"
){
ag
=
c
.
getAttrib
(
af
,
ae
)}
else
{
ag
=
J
(
af
,
ae
)}
if
(
!
g
(
ag
,
q
(
ac
[
ae
],
Z
))){
return
}}}}
else
{
for
(
ad
=
0
;
ad
<
ac
.
length
;
ad
++
){
if
(
ai
===
"attributes"
?
c
.
getAttrib
(
af
,
ac
[
ad
])
:
J
(
af
,
ac
[
ad
])){
return
ah
}}}}
return
ah
}
if
(
aa
&&
X
){
for
(
W
=
0
;
W
<
aa
.
length
;
W
++
){
Y
=
aa
[
W
];
if
(
h
(
X
,
Y
)
&&
ab
(
X
,
Y
,
"attributes"
)
&&
ab
(
X
,
Y
,
"styles"
)){
if
(
V
=
Y
.
classes
){
for
(
W
=
0
;
W
<
V
.
length
;
W
++
){
if
(
!
c
.
hasClass
(
X
,
V
[
W
])){
return
}}}
return
Y
}}}}
function
i
(
W
,
Z
,
Y
){
var
V
,
X
;
function
U
(
aa
){
aa
=
c
.
getParent
(
aa
,
function
(
ab
){
return
!!
v
(
ab
,
W
,
Z
)});
return
v
(
aa
,
W
,
Z
)}
if
(
Y
){
return
U
(
Y
)}
if
(
p
.
isCollapsed
()){
for
(
X
=
N
.
apply
.
length
-
1
;
X
>=
0
;
X
--
){
if
(
N
.
apply
[
X
].
name
==
W
){
return
true
}}
for
(
X
=
N
.
remove
.
length
-
1
;
X
>=
0
;
X
--
){
if
(
N
.
remove
[
X
].
name
==
W
){
return
false
}}
return
U
(
p
.
getNode
())}
Y
=
p
.
getNode
();
if
(
U
(
Y
)){
return
A
}
V
=
p
.
getStart
();
if
(
V
!=
Y
){
if
(
U
(
V
)){
return
A
}}
return
Q
}
function
u
(
ab
,
aa
){
var
Y
,
Z
=
[],
X
=
{},
W
,
V
,
U
;
if
(
p
.
isCollapsed
()){
for
(
V
=
0
;
V
<
ab
.
length
;
V
++
){
for
(
W
=
N
.
remove
.
length
-
1
;
W
>=
0
;
W
--
){
U
=
ab
[
V
];
if
(
N
.
remove
[
W
].
name
==
U
){
X
[
U
]
=
true
;
break
}}}
for
(
W
=
N
.
apply
.
length
-
1
;
W
>=
0
;
W
--
){
for
(
V
=
0
;
V
<
ab
.
length
;
V
++
){
U
=
ab
[
V
];
if
(
!
X
[
U
]
&&
N
.
apply
[
W
].
name
==
U
){
X
[
U
]
=
true
;
Z
.
push
(
U
)}}}}
Y
=
p
.
getStart
();
c
.
getParent
(
Y
,
function
(
ae
){
var
ad
,
ac
;
for
(
ad
=
0
;
ad
<
ab
.
length
;
ad
++
){
ac
=
ab
[
ad
];
if
(
!
X
[
ac
]
&&
v
(
ae
,
ac
,
aa
)){
X
[
ac
]
=
true
;
Z
.
push
(
ac
)}}});
return
Z
}
function
x
(
Y
){
var
aa
=
P
(
Y
),
X
,
W
,
Z
,
V
,
U
;
if
(
aa
){
X
=
p
.
getStart
();
W
=
l
(
X
);
for
(
V
=
aa
.
length
-
1
;
V
>=
0
;
V
--
){
U
=
aa
[
V
].
selector
;
if
(
!
U
){
return
A
}
for
(
Z
=
W
.
length
-
1
;
Z
>=
0
;
Z
--
){
if
(
c
.
is
(
W
[
Z
],
U
)){
return
A
}}}}
return
Q
}
a
.
extend
(
this
,{
get
:
P
,
register
:
j
,
apply
:
R
,
remove
:
z
,
toggle
:
C
,
match
:
i
,
matchAll
:
u
,
matchNode
:
v
,
canApply
:
x
});
function
h
(
U
,
V
){
if
(
g
(
U
,
V
.
inline
)){
return
A
}
if
(
g
(
U
,
V
.
block
)){
return
A
}
if
(
V
.
selector
){
return
c
.
is
(
U
,
V
.
selector
)}}
function
g
(
V
,
U
){
V
=
V
||
""
;
U
=
U
||
""
;
V
=
""
+
(
V
.
nodeName
||
V
);
U
=
""
+
(
U
.
nodeName
||
U
);
return
V
.
toLowerCase
()
==
U
.
toLowerCase
()}
function
J
(
V
,
U
){
var
W
=
c
.
getStyle
(
V
,
U
);
if
(
U
==
"color"
||
U
==
"backgroundColor"
){
W
=
c
.
toHex
(
W
)}
if
(
U
==
"fontWeight"
&&
W
==
700
){
W
=
"bold"
}
return
""
+
W
}
function
q
(
U
,
V
){
if
(
typeof
(
U
)
!=
"string"
){
U
=
U
(
V
)}
else
{
if
(
V
){
U
=
U
.
replace
(
/%(\w+)/g
,
function
(
X
,
W
){
return
V
[
W
]
||
X
})}}
return
U
}
function
f
(
U
){
return
U
&&
U
.
nodeType
===
3
&&
/^\s*$/
.
test
(
U
.
nodeValue
)}
function
L
(
W
,
V
,
U
){
var
X
=
c
.
create
(
V
,
U
);
W
.
parentNode
.
insertBefore
(
X
,
W
);
X
.
appendChild
(
W
);
return
X
}
function
n
(
U
,
ac
,
X
){
var
W
=
U
.
startContainer
,
Z
=
U
.
startOffset
,
af
=
U
.
endContainer
,
aa
=
U
.
endOffset
,
ae
,
ab
;
function
ad
(
ai
,
aj
,
ag
,
ah
){
var
ak
,
al
;
ah
=
ah
||
c
.
getRoot
();
for
(;;){
ak
=
ai
.
parentNode
;
if
(
ak
==
ah
||
(
!
ac
[
0
].
block_expand
&&
E
(
ak
))){
return
ai
}
for
(
ae
=
ak
[
aj
];
ae
&&
ae
!=
ai
;
ae
=
ae
[
ag
]){
if
(
ae
.
nodeType
==
1
&&!
G
(
ae
)){
return
ai
}
if
(
ae
.
nodeType
==
3
&&!
f
(
ae
)){
return
ai
}}
ai
=
ai
.
parentNode
}
return
ai
}
if
(
W
.
nodeType
==
1
&&
W
.
hasChildNodes
()){
ab
=
W
.
childNodes
.
length
-
1
;
W
=
W
.
childNodes
[
Z
>
ab
?
ab
:
Z
];
if
(
W
.
nodeType
==
3
){
Z
=
0
}}
if
(
af
.
nodeType
==
1
&&
af
.
hasChildNodes
()){
ab
=
af
.
childNodes
.
length
-
1
;
af
=
af
.
childNodes
[
aa
>
ab
?
ab
:
aa
-
1
];
if
(
af
.
nodeType
==
3
){
aa
=
af
.
nodeValue
.
length
}}
if
(
G
(
W
.
parentNode
)){
W
=
W
.
parentNode
}
if
(
G
(
W
)){
W
=
W
.
nextSibling
||
W
}
if
(
G
(
af
.
parentNode
)){
af
=
af
.
parentNode
}
if
(
G
(
af
)){
af
=
af
.
previousSibling
||
af
}
if
(
ac
[
0
].
inline
||
ac
[
0
].
block_expand
){
W
=
ad
(
W
,
"firstChild"
,
"nextSibling"
);
af
=
ad
(
af
,
"lastChild"
,
"previousSibling"
)}
if
(
ac
[
0
].
selector
&&
ac
[
0
].
expand
!==
Q
&&!
ac
[
0
].
inline
){
function
Y
(
ah
,
ag
){
var
ai
,
aj
,
ak
;
if
(
ah
.
nodeType
==
3
&&
ah
.
nodeValue
.
length
==
0
&&
ah
[
ag
]){
ah
=
ah
[
ag
]}
ai
=
l
(
ah
);
for
(
aj
=
0
;
aj
<
ai
.
length
;
aj
++
){
for
(
ak
=
0
;
ak
<
ac
.
length
;
ak
++
){
if
(
c
.
is
(
ai
[
aj
],
ac
[
ak
].
selector
)){
return
ai
[
aj
]}}}
return
ah
}
W
=
Y
(
W
,
"previousSibling"
);
af
=
Y
(
af
,
"nextSibling"
)}
if
(
ac
[
0
].
block
||
ac
[
0
].
selector
){
function
V
(
ah
,
ag
,
aj
){
var
ai
;
if
(
!
ac
[
0
].
wrapper
){
ai
=
c
.
getParent
(
ah
,
ac
[
0
].
block
)}
if
(
!
ai
){
ai
=
c
.
getParent
(
ah
.
nodeType
==
3
?
ah
.
parentNode
:
ah
,
E
)}
if
(
ai
&&
ac
[
0
].
wrapper
){
ai
=
l
(
ai
,
"ul,ol"
).
reverse
()[
0
]
||
ai
}
if
(
!
ai
){
ai
=
ah
;
while
(
ai
[
ag
]
&&!
E
(
ai
[
ag
])){
ai
=
ai
[
ag
];
if
(
g
(
ai
,
"br"
)){
break
}}}
return
ai
||
ah
}
W
=
V
(
W
,
"previousSibling"
);
af
=
V
(
af
,
"nextSibling"
);
if
(
ac
[
0
].
block
){
if
(
!
E
(
W
)){
W
=
ad
(
W
,
"firstChild"
,
"nextSibling"
)}
if
(
!
E
(
af
)){
af
=
ad
(
af
,
"lastChild"
,
"previousSibling"
)}}}
if
(
W
.
nodeType
==
1
){
Z
=
r
(
W
);
W
=
W
.
parentNode
}
if
(
af
.
nodeType
==
1
){
aa
=
r
(
af
)
+
1
;
af
=
af
.
parentNode
}
return
{
startContainer
:
W
,
startOffset
:
Z
,
endContainer
:
af
,
endOffset
:
aa
}}
function
S
(
aa
,
Z
,
X
,
U
){
var
W
,
V
,
Y
;
if
(
!
h
(
X
,
aa
)){
return
Q
}
if
(
aa
.
remove
!=
"all"
){
M
(
aa
.
styles
,
function
(
ac
,
ab
){
ac
=
q
(
ac
,
Z
);
if
(
typeof
(
ab
)
===
"number"
){
ab
=
ac
;
U
=
0
}
if
(
!
U
||
g
(
J
(
U
,
ab
),
ac
)){
c
.
setStyle
(
X
,
ab
,
""
)}
Y
=
1
});
if
(
Y
&&
c
.
getAttrib
(
X
,
"style"
)
==
""
){
X
.
removeAttribute
(
"style"
);
X
.
removeAttribute
(
"_mce_style"
)}
M
(
aa
.
attributes
,
function
(
ad
,
ab
){
var
ac
;
ad
=
q
(
ad
,
Z
);
if
(
typeof
(
ab
)
===
"number"
){
ab
=
ad
;
U
=
0
}
if
(
!
U
||
g
(
c
.
getAttrib
(
U
,
ab
),
ad
)){
if
(
ab
==
"class"
){
ad
=
c
.
getAttrib
(
X
,
ab
);
if
(
ad
){
ac
=
""
;
M
(
ad
.
split
(
/\s+/
),
function
(
ae
){
if
(
/mce\w+/
.
test
(
ae
)){
ac
+=
(
ac
?
" "
:
""
)
+
ae
}});
if
(
ac
){
c
.
setAttrib
(
X
,
ab
,
ac
);
return
}}}
if
(
ab
==
"class"
){
X
.
removeAttribute
(
"className"
)}
if
(
e
.
test
(
ab
)){
X
.
removeAttribute
(
"_mce_"
+
ab
)}
X
.
removeAttribute
(
ab
)}});
M
(
aa
.
classes
,
function
(
ab
){
ab
=
q
(
ab
,
Z
);
if
(
!
U
||
c
.
hasClass
(
U
,
ab
)){
c
.
removeClass
(
X
,
ab
)}});
V
=
c
.
getAttribs
(
X
);
for
(
W
=
0
;
W
<
V
.
length
;
W
++
){
if
(
V
[
W
].
nodeName
.
indexOf
(
"_"
)
!==
0
){
return
Q
}}}
if
(
aa
.
remove
!=
"none"
){
m
(
X
,
aa
);
return
A
}}
function
m
(
W
,
X
){
var
U
=
W
.
parentNode
,
V
;
if
(
X
.
block
){
if
(
!
k
){
function
Y
(
aa
,
Z
,
ab
){
aa
=
B
(
aa
,
Z
,
ab
);
return
!
aa
||
(
aa
.
nodeName
==
"BR"
||
E
(
aa
))}
if
(
E
(
W
)
&&!
E
(
U
)){
if
(
!
Y
(
W
,
Q
)
&&!
Y
(
W
.
firstChild
,
A
,
1
)){
W
.
insertBefore
(
c
.
create
(
"br"
),
W
.
firstChild
)}
if
(
!
Y
(
W
,
A
)
&&!
Y
(
W
.
lastChild
,
Q
,
1
)){
W
.
appendChild
(
c
.
create
(
"br"
))}}}
else
{
if
(
U
==
c
.
getRoot
()){
if
(
!
X
.
list_block
||!
g
(
W
,
X
.
list_block
)){
M
(
a
.
grep
(
W
.
childNodes
),
function
(
Z
){
if
(
d
(
k
,
Z
.
nodeName
.
toLowerCase
())){
if
(
!
V
){
V
=
L
(
Z
,
k
)}
else
{
V
.
appendChild
(
Z
)}}
else
{
V
=
0
}})}}}}
if
(
X
.
selector
&&
X
.
inline
&&!
g
(
X
.
inline
,
W
)){
return
}
c
.
remove
(
W
,
1
)}
function
B
(
V
,
U
,
W
){
if
(
V
){
U
=
U
?
"nextSibling"
:
"previousSibling"
;
for
(
V
=
W
?
V
:
V
[
U
];
V
;
V
=
V
[
U
]){
if
(
V
.
nodeType
==
1
||!
f
(
V
)){
return
V
}}}}
function
G
(
U
){
return
U
&&
U
.
nodeType
==
1
&&
U
.
getAttribute
(
"_mce_type"
)
==
"bookmark"
}
function
t
(
Y
,
X
){
var
U
,
W
,
V
;
function
aa
(
ad
,
ac
){
if
(
ad
.
nodeName
!=
ac
.
nodeName
){
return
Q
}
function
ab
(
af
){
var
ag
=
{};
M
(
c
.
getAttribs
(
af
),
function
(
ah
){
var
ai
=
ah
.
nodeName
.
toLowerCase
();
if
(
ai
.
indexOf
(
"_"
)
!==
0
&&
ai
!==
"style"
){
ag
[
ai
]
=
c
.
getAttrib
(
af
,
ai
)}});
return
ag
}
function
ae
(
ai
,
ah
){
var
ag
,
af
;
for
(
af
in
ai
){
if
(
ai
.
hasOwnProperty
(
af
)){
ag
=
ah
[
af
];
if
(
ag
===
o
){
return
Q
}
if
(
ai
[
af
]
!=
ag
){
return
Q
}
delete
ah
[
af
]}}
for
(
af
in
ah
){
if
(
ah
.
hasOwnProperty
(
af
)){
return
Q
}}
return
A
}
if
(
!
ae
(
ab
(
ad
),
ab
(
ac
))){
return
Q
}
if
(
!
ae
(
c
.
parseStyle
(
c
.
getAttrib
(
ad
,
"style"
)),
c
.
parseStyle
(
c
.
getAttrib
(
ac
,
"style"
)))){
return
Q
}
return
A
}
if
(
Y
&&
X
){
function
Z
(
ac
,
ab
){
for
(
W
=
ac
;
W
;
W
=
W
[
ab
]){
if
(
W
.
nodeType
==
3
&&!
f
(
W
)){
return
ac
}
if
(
W
.
nodeType
==
1
&&!
G
(
W
)){
return
W
}}
return
ac
}
Y
=
Z
(
Y
,
"previousSibling"
);
X
=
Z
(
X
,
"nextSibling"
);
if
(
aa
(
Y
,
X
)){
for
(
W
=
Y
.
nextSibling
;
W
&&
W
!=
X
;){
V
=
W
;
W
=
W
.
nextSibling
;
Y
.
appendChild
(
V
)}
c
.
remove
(
X
);
M
(
a
.
grep
(
X
.
childNodes
),
function
(
ab
){
Y
.
appendChild
(
ab
)});
return
Y
}}
return
X
}
function
F
(
U
){
return
/^(h[1-6]|p|div|pre|address)$/
.
test
(
U
)}
function
H
(
V
,
Y
){
var
U
,
X
,
W
;
U
=
V
[
Y
?
"startContainer"
:
"endContainer"
];
X
=
V
[
Y
?
"startOffset"
:
"endOffset"
];
if
(
U
.
nodeType
==
1
){
W
=
U
.
childNodes
.
length
-
1
;
if
(
!
Y
&&
X
){
X
--
}
U
=
U
.
childNodes
[
X
>
W
?
W
:
X
]}
return
U
}
function
O
(
Z
,
V
,
Y
){
var
W
,
U
=
N
[
Z
],
aa
=
N
[
Z
==
"apply"
?
"remove"
:
"apply"
];
function
ab
(){
return
N
.
apply
.
length
||
N
.
remove
.
length
}
function
X
(){
N
.
apply
=
[];
N
.
remove
=
[]}
function
ac
(
ad
){
M
(
N
.
apply
.
reverse
(),
function
(
ae
){
R
(
ae
.
name
,
ae
.
vars
,
ad
)});
M
(
N
.
remove
.
reverse
(),
function
(
ae
){
z
(
ae
.
name
,
ae
.
vars
,
ad
)});
c
.
remove
(
ad
,
1
);
X
()}
for
(
W
=
U
.
length
-
1
;
W
>=
0
;
W
--
){
if
(
U
[
W
].
name
==
V
){
return
}}
U
.
push
({
name
:
V
,
vars
:
Y
});
for
(
W
=
aa
.
length
-
1
;
W
>=
0
;
W
--
){
if
(
aa
[
W
].
name
==
V
){
aa
.
splice
(
W
,
1
)}}
if
(
ab
()){
T
.
getDoc
().
execCommand
(
"FontName"
,
false
,
"mceinline"
);
M
(
c
.
select
(
"font,span"
),
function
(
ae
){
var
ad
;
if
(
b
(
ae
)){
ad
=
p
.
getBookmark
();
ac
(
ae
);
p
.
moveToBookmark
(
ad
);
T
.
nodeChanged
()}});
if
(
!
N
.
isListening
&&
ab
()){
N
.
isListening
=
true
;
M
(
"onKeyDown,onKeyUp,onKeyPress,onMouseUp"
.
split
(
","
),
function
(
ad
){
T
[
ad
].
addToTop
(
function
(
ae
,
af
){
if
(
ab
()){
M
(
c
.
select
(
"font,span"
),
function
(
ai
){
var
ah
,
aj
,
ag
;
if
(
b
(
ai
)){
aj
=
ai
.
firstChild
;
ac
(
ai
);
ag
=
c
.
createRng
();
ag
.
setStart
(
aj
,
aj
.
nodeValue
.
length
);
ag
.
setEnd
(
aj
,
aj
.
nodeValue
.
length
);
p
.
setRng
(
ag
);
ae
.
nodeChanged
()}});
if
(
af
.
type
==
"keyup"
||
af
.
type
==
"mouseup"
){
X
()}}})})}}}}})(
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
){
g
.
replace
(
g
.
create
(
"span"
,{
style
:
i
}),
j
,
1
)}
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
.
onInit
.
add
(
function
(){
a
.
selection
.
onSetContent
.
add
(
f
)})}});
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Jun 12, 2:46 AM (10 h, 38 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
884586
Default Alt Text
tiny_mce.js (172 KB)
Attached To
Mode
R3 roundcubemail
Attached
Detach File
Event Timeline
Log In to Comment