@ -2,14 +2,14 @@
Copyright ( c ) 2003 - 2014 , CKSource - Frederico Knabben . All rights reserved .
For licensing , see LICENSE . md or http : //ckeditor.com/license
* /
( function ( ) { if ( window . CKEDITOR && window . CKEDITOR . dom ) return ; window . CKEDITOR || ( window . CKEDITOR = function ( ) { var a = /(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i , e = { timestamp : "E 8PB", version : "4.4.5" , revision : "25cdcad ", rnd : Math . floor ( 900 * Math . random ( ) ) + 100 , _ : { pending : [ ] , basePathSrcPattern : a } , status : "unloaded" , basePath : function ( ) { var f = window . CKEDITOR _BASEPATH || "" ; if ( ! f ) for ( var d = document . getElementsByTagName ( "script" ) , c = 0 ; c < d . length ; c ++ ) { var b = d [ c ] . src . match ( a ) ; if ( b ) { f = b [ 1 ] ; break } } - 1 == f . indexOf ( ":/" ) && "//" != f . slice ( 0 , 2 ) && ( f = 0 === f . indexOf ( "/" ) ? location . href . match ( /^.*?:\/\/[^\/]*/ ) [ 0 ] +
( function ( ) { if ( window . CKEDITOR && window . CKEDITOR . dom ) return ; window . CKEDITOR || ( window . CKEDITOR = function ( ) { var a = /(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i , e = { timestamp : "E APE", version : "4.4.6" , revision : "08188c4 ", rnd : Math . floor ( 900 * Math . random ( ) ) + 100 , _ : { pending : [ ] , basePathSrcPattern : a } , status : "unloaded" , basePath : function ( ) { var f = window . CKEDITOR _BASEPATH || "" ; if ( ! f ) for ( var d = document . getElementsByTagName ( "script" ) , c = 0 ; c < d . length ; c ++ ) { var b = d [ c ] . src . match ( a ) ; if ( b ) { f = b [ 1 ] ; break } } - 1 == f . indexOf ( ":/" ) && "//" != f . slice ( 0 , 2 ) && ( f = 0 === f . indexOf ( "/" ) ? location . href . match ( /^.*?:\/\/[^\/]*/ ) [ 0 ] +
f : location . href . match ( /^[^\?]*\/(?:)/ ) [ 0 ] + f ) ; if ( ! f ) throw 'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.' ; return f } ( ) , getUrl : function ( a ) { - 1 == a . indexOf ( ":/" ) && 0 !== a . indexOf ( "/" ) && ( a = this . basePath + a ) ; this . timestamp && ( "/" != a . charAt ( a . length - 1 ) && ! /[&?]t=/ . test ( a ) ) && ( a += ( 0 <= a . indexOf ( "?" ) ? "&" : "?" ) + "t=" + this . timestamp ) ; return a } , domReady : function ( ) { function a ( ) { try { document . addEventListener ? ( document . removeEventListener ( "DOMContentLoaded" ,
a , ! 1 ) , d ( ) ) : document . attachEvent && "complete" === document . readyState && ( document . detachEvent ( "onreadystatechange" , a ) , d ( ) ) } catch ( c ) { } } function d ( ) { for ( var a ; a = c . shift ( ) ; ) a ( ) } var c = [ ] ; return function ( d ) { function b ( ) { try { document . documentElement . doScroll ( "left" ) } catch ( p ) { setTimeout ( b , 1 ) ; return } a ( ) } c . push ( d ) ; "complete" === document . readyState && setTimeout ( a , 1 ) ; if ( 1 == c . length ) if ( document . addEventListener ) document . addEventListener ( "DOMContentLoaded" , a , ! 1 ) , window . addEventListener ( "load" , a , ! 1 ) ; else if ( document . attachEvent ) { document . attachEvent ( "onreadystatechange" ,
a , ! 1 ) , d ( ) ) : document . attachEvent && "complete" === document . readyState && ( document . detachEvent ( "onreadystatechange" , a ) , d ( ) ) } catch ( c ) { } } function d ( ) { for ( var a ; a = c . shift ( ) ; ) a ( ) } var c = [ ] ; return function ( d ) { function b ( ) { try { document . documentElement . doScroll ( "left" ) } catch ( m ) { setTimeout ( b , 1 ) ; return } a ( ) } c . push ( d ) ; "complete" === document . readyState && setTimeout ( a , 1 ) ; if ( 1 == c . length ) if ( document . addEventListener ) document . addEventListener ( "DOMContentLoaded" , a , ! 1 ) , window . addEventListener ( "load" , a , ! 1 ) ; else if ( document . attachEvent ) { document . attachEvent ( "onreadystatechange" ,
a ) ; window . attachEvent ( "onload" , a ) ; d = ! 1 ; try { d = ! window . frameElement } catch ( e ) { } document . documentElement . doScroll && d && b ( ) } } } ( ) } , b = window . CKEDITOR _GETURL ; if ( b ) { var c = e . getUrl ; e . getUrl = function ( a ) { return b . call ( e , a ) || c . call ( e , a ) } } return e } ( ) ) ;
CKEDITOR . event || ( CKEDITOR . event = function ( ) { } , CKEDITOR . event . implementOn = function ( a ) { var e = CKEDITOR . event . prototype , b ; for ( b in e ) a [ b ] == null && ( a [ b ] = e [ b ] ) } , CKEDITOR . event . prototype = function ( ) { function a ( a ) { var f = e ( this ) ; return f [ a ] || ( f [ a ] = new b ( a ) ) } var e = function ( a ) { a = a . getPrivate && a . getPrivate ( ) || a . _ || ( a . _ = { } ) ; return a . events || ( a . events = { } ) } , b = function ( a ) { this . name = a ; this . listeners = [ ] } ; b . prototype = { getListenerIndex : function ( a ) { for ( var f = 0 , d = this . listeners ; f < d . length ; f ++ ) if ( d [ f ] . fn == a ) return f ; return - 1 } } ;
return { define : function ( c , f ) { var d = a . call ( this , c ) ; CKEDITOR . tools . extend ( d , f , true ) } , on : function ( c, f , d , b , e ) { function m ( a , p , u , e ) { a = { name : c , sender : this , editor : a , data : p, listenerData : b , stop : u , cancel : e , removeListener : j } ; return f . call ( d , a ) === false ? false : a . data } function j( ) { u . removeListener ( c , f ) } var p = a . call ( this , c ) ; if ( p . getListenerIndex ( f ) < 0 ) { p= p . listeners ; d || ( d = this ) ; isNaN ( e) && ( e = 10 ) ; var u = this ; m . fn = f ; m . priority = e ; for ( var t = p . length - 1 ; t >= 0 ; t -- ) if ( p [ t ] . priority <= e ) { p . splice ( t + 1 , 0 , m ) ; return { removeListener : j } } p . unshift ( m ) } return { removeListener : j } } ,
once : function ( ) { var a = Array . prototype . slice . call ( arguments ) , f = a [ 1 ] ; a [ 1 ] = function ( a ) { a . removeListener ( ) ; return f . apply ( this , arguments ) } ; return this . on . apply ( this , a ) } , capture : function ( ) { CKEDITOR . event . useCapture = 1 ; var a = this . on . apply ( this , arguments ) ; CKEDITOR . event . useCapture = 0 ; return a } , fire : function ( ) { var a = 0 , f = function ( ) { a = 1 } , d = 0 , b = function ( ) { d = 1 } ; return function ( h, m , j ) { var p = e ( this ) [ h ] , h = a , u = d ; a = d = 0 ; if ( p) { var t = p . listeners ; if ( t . length ) for ( var t = t . slice ( 0 ) , y , n = 0 ; n < t . length ; n ++ ) { if ( p . errorProof ) try { y =
t[ n ] . call ( this , j , m , f , b ) } catch ( w ) { } else y = t [ n ] . call ( this , j , m , f , b ) ; y === false ? d = 1 : typeof y != "undefined" && ( m = y ) ; if ( a || d ) break } } m= d ? false : typeof m == "undefined" ? true : m ; a = h ; d = u ; return m } } ( ) , fireOnce : function ( a , f , d ) { f = this . fire ( a , f , d ) ; delete e ( this ) [ a ] ; return f } , removeListener : function ( a , f ) { var d = e ( this ) [ a ] ; if ( d ) { var b = d . getListenerIndex ( f ) ; b >= 0 && d . listeners . splice ( b , 1 ) } } , removeAllListeners : function ( ) { var a = e ( this ) , f ; for ( f in a ) delete a [ f ] } , hasListeners : function ( a ) { return ( a = e ( this ) [ a ] ) && a . listeners . length >
return { define : function ( b , f ) { var d = a . call ( this , b ) ; CKEDITOR . tools . extend ( d , f , true ) } , on : function ( b, f , d , e , l ) { function i ( a , m , t , j ) { a = { name : b , sender : this , editor : a , data : m, listenerData : e , stop : t , cancel : j , removeListener : g } ; return f . call ( d , a ) === false ? false : a . data } function g( ) { t . removeListener ( b , f ) } var m = a . call ( this , b ) ; if ( m . getListenerIndex ( f ) < 0 ) { m= m . listeners ; d || ( d = this ) ; isNaN ( l) && ( l = 10 ) ; var t = this ; i . fn = f ; i . priority = l ; for ( var s = m . length - 1 ; s >= 0 ; s -- ) if ( m [ s ] . priority <= l ) { m . splice ( s + 1 , 0 , i ) ; return { removeListener : g } } m . unshift ( i ) } return { removeListener : g } } ,
once : function ( ) { var a = Array . prototype . slice . call ( arguments ) , f = a [ 1 ] ; a [ 1 ] = function ( a ) { a . removeListener ( ) ; return f . apply ( this , arguments ) } ; return this . on . apply ( this , a ) } , capture : function ( ) { CKEDITOR . event . useCapture = 1 ; var a = this . on . apply ( this , arguments ) ; CKEDITOR . event . useCapture = 0 ; return a } , fire : function ( ) { var a = 0 , f = function ( ) { a = 1 } , d = 0 , b = function ( ) { d = 1 } ; return function ( l, i , g ) { var m = e ( this ) [ l ] , l = a , t = d ; a = d = 0 ; if ( m) { var s = m . listeners ; if ( s . length ) for ( var s = s . slice ( 0 ) , y , p = 0 ; p < s . length ; p ++ ) { if ( m . errorProof ) try { y =
s[ p ] . call ( this , g , i , f , b ) } catch ( q ) { } else y = s [ p ] . call ( this , g , i , f , b ) ; y === false ? d = 1 : typeof y != "undefined" && ( i = y ) ; if ( a || d ) break } } i= d ? false : typeof i == "undefined" ? true : i ; a = l ; d = t ; return i } } ( ) , fireOnce : function ( a , f , d ) { f = this . fire ( a , f , d ) ; delete e ( this ) [ a ] ; return f } , removeListener : function ( a , f ) { var d = e ( this ) [ a ] ; if ( d ) { var b = d . getListenerIndex ( f ) ; b >= 0 && d . listeners . splice ( b , 1 ) } } , removeAllListeners : function ( ) { var a = e ( this ) , f ; for ( f in a ) delete a [ f ] } , hasListeners : function ( a ) { return ( a = e ( this ) [ a ] ) && a . listeners . length >
0 } } } ( ) ) ; CKEDITOR . editor || ( CKEDITOR . editor = function ( ) { CKEDITOR . _ . pending . push ( [ this , arguments ] ) ; CKEDITOR . event . call ( this ) } , CKEDITOR . editor . prototype . fire = function ( a , e ) { a in { instanceReady : 1 , loaded : 1 } && ( this [ a ] = true ) ; return CKEDITOR . event . prototype . fire . call ( this , a , e , this ) } , CKEDITOR . editor . prototype . fireOnce = function ( a , e ) { a in { instanceReady : 1 , loaded : 1 } && ( this [ a ] = true ) ; return CKEDITOR . event . prototype . fireOnce . call ( this , a , e , this ) } , CKEDITOR . event . implementOn ( CKEDITOR . editor . prototype ) ) ;
CKEDITOR . env || ( CKEDITOR . env = function ( ) { var a = navigator . userAgent . toLowerCase ( ) , e = { ie : a . indexOf ( "trident/" ) > - 1 , webkit : a . indexOf ( " applewebkit/" ) > - 1 , air : a . indexOf ( " adobeair/" ) > - 1 , mac : a . indexOf ( "macintosh" ) > - 1 , quirks : document . compatMode == "BackCompat" && ( ! document . documentMode || document . documentMode < 10 ) , mobile : a . indexOf ( "mobile" ) > - 1 , iOS : /(ipad|iphone|ipod)/ . test ( a ) , isCustomDomain : function ( ) { if ( ! this . ie ) return false ; var a = document . domain , d = window . location . hostname ; return a != d && a != "[" + d + "]" } , secure : location . protocol ==
"https:" } ; e . gecko = navigator . product == "Gecko" && ! e . webkit && ! e . ie ; if ( e . webkit ) a . indexOf ( "chrome" ) > - 1 ? e . chrome = true : e . safari = true ; var b = 0 ; if ( e . ie ) { b = e . quirks || ! document . documentMode ? parseFloat ( a . match ( /msie (\d+)/ ) [ 1 ] ) : document . documentMode ; e . ie9Compat = b == 9 ; e . ie8Compat = b == 8 ; e . ie7Compat = b == 7 ; e . ie6Compat = b < 7 || e . quirks } if ( e . gecko ) { var c = a . match ( /rv:([\d\.]+)/ ) ; if ( c ) { c = c [ 1 ] . split ( "." ) ; b = c [ 0 ] * 1E4 + ( c [ 1 ] || 0 ) * 100 + ( c [ 2 ] || 0 ) * 1 } } e . air && ( b = parseFloat ( a . match ( / adobeair\/(\d+)/ ) [ 1 ] ) ) ; e . webkit && ( b = parseFloat ( a . match ( / applewebkit\/(\d+)/ ) [ 1 ] ) ) ;
@ -17,29 +17,28 @@ e.version=b;e.isCompatible=e.iOS&&b>=534||!e.mobile&&(e.ie&&b>6||e.gecko&&b>=2E4
if ( e . iOS ) e . cssClass = e . cssClass + " cke_browser_ios" ; if ( e . hidpi ) e . cssClass = e . cssClass + " cke_hidpi" ; return e } ( ) ) ;
"unloaded" == CKEDITOR . status && function ( ) { CKEDITOR . event . implementOn ( CKEDITOR ) ; CKEDITOR . loadFullCore = function ( ) { if ( CKEDITOR . status != "basic_ready" ) CKEDITOR . loadFullCore . _load = 1 ; else { delete CKEDITOR . loadFullCore ; var a = document . createElement ( "script" ) ; a . type = "text/javascript" ; a . src = CKEDITOR . basePath + "ckeditor.js" ; document . getElementsByTagName ( "head" ) [ 0 ] . appendChild ( a ) } } ; CKEDITOR . loadFullCoreTimeout = 0 ; CKEDITOR . add = function ( a ) { ( this . _ . pending || ( this . _ . pending = [ ] ) ) . push ( a ) } ; ( function ( ) { CKEDITOR . domReady ( function ( ) { var a =
CKEDITOR . loadFullCore , e = CKEDITOR . loadFullCoreTimeout ; if ( a ) { CKEDITOR . status = "basic_ready" ; a && a . _load ? a ( ) : e && setTimeout ( function ( ) { CKEDITOR . loadFullCore && CKEDITOR . loadFullCore ( ) } , e * 1E3 ) } } ) } ) ( ) ; CKEDITOR . status = "basic_loaded" } ( ) ; CKEDITOR . dom = { } ;
( function ( ) { var a = [ ] , e = CKEDITOR . env . gecko ? "-moz-" : CKEDITOR . env . webkit ? "-webkit-" : CKEDITOR . env . ie ? "-ms-" : "" , b = /&/g , c = />/g , f = /</g , d = /"/g , g= /&/g , h = />/g , m = /</g , j = /"/g ; CKEDITOR . on ( "reset" , function ( ) { a = [ ] } ) ; CKEDITOR . tools = { arrayCompare : function ( a , f ) { if ( ! a && ! f ) return true ; if ( ! a || ! f || a . length != f . length ) return false ; for ( var d = 0 ; d < a . length ; d ++ ) if ( a [ d ] != f [ d ] ) return false ; return true } , clone : function ( a ) { var f ; if ( a && a instanceof Array ) { f = [ ] ; for ( var d = 0 ; d < a . length ; d ++ ) f [ d ] = CKEDITOR . tools . clone ( a [ d ] ) ;
( function ( ) { var a = [ ] , e = CKEDITOR . env . gecko ? "-moz-" : CKEDITOR . env . webkit ? "-webkit-" : CKEDITOR . env . ie ? "-ms-" : "" , b = /&/g , c = />/g , f = /</g , d = /"/g , h= /&/g , l = />/g , i = /</g , g = /"/g ; CKEDITOR . on ( "reset" , function ( ) { a = [ ] } ) ; CKEDITOR . tools = { arrayCompare : function ( a , f ) { if ( ! a && ! f ) return true ; if ( ! a || ! f || a . length != f . length ) return false ; for ( var d = 0 ; d < a . length ; d ++ ) if ( a [ d ] != f [ d ] ) return false ; return true } , clone : function ( a ) { var f ; if ( a && a instanceof Array ) { f = [ ] ; for ( var d = 0 ; d < a . length ; d ++ ) f [ d ] = CKEDITOR . tools . clone ( a [ d ] ) ;
return f } if ( a === null || typeof a != "object" || a instanceof String || a instanceof Number || a instanceof Boolean || a instanceof Date || a instanceof RegExp || a . nodeType || a . window === a ) return a ; f = new a . constructor ; for ( d in a ) f [ d ] = CKEDITOR . tools . clone ( a [ d ] ) ; return f } , capitalize : function ( a , f ) { return a . charAt ( 0 ) . toUpperCase ( ) + ( f ? a . slice ( 1 ) : a . slice ( 1 ) . toLowerCase ( ) ) } , extend : function ( a ) { var f = arguments . length , d , b ; if ( typeof ( d = arguments [ f - 1 ] ) == "boolean" ) f -- ; else if ( typeof ( d = arguments [ f - 2 ] ) == "boolean" ) { b = arguments [ f - 1 ] ;
f = f - 2 } for ( var c = 1 ; c < f ; c ++ ) { var e = arguments [ c ] , o; for ( o in e ) if ( d === true || a [ o] == null ) if ( ! b || o in b ) a [ o ] = e [ o ] } return a } , prototypedCopy : function ( a ) { var f = function ( ) { } ; f . prototype = a ; return new f } , copy : function ( a ) { var f = { } , d ; for ( d in a ) f [ d ] = a [ d ] ; return f } , isArray : function ( a ) { return Object . prototype . toString . call ( a ) == "[object Array]" } , isEmpty : function ( a ) { for ( var f in a ) if ( a . hasOwnProperty ( f ) ) return false ; return true } , cssVendorPrefix : function ( a , f , d ) { if ( d ) return e + a + ":" + f + ";" + a + ":" + f ; d = { } ; d [ a ] = f ; d [ e + a ] = f ;
f = f - 2 } for ( var c = 1 ; c < f ; c ++ ) { var e = arguments [ c ] , j; for ( j in e ) if ( d === true || a [ j] == null ) if ( ! b || j in b ) a [ j ] = e [ j ] } return a } , prototypedCopy : function ( a ) { var f = function ( ) { } ; f . prototype = a ; return new f } , copy : function ( a ) { var f = { } , d ; for ( d in a ) f [ d ] = a [ d ] ; return f } , isArray : function ( a ) { return Object . prototype . toString . call ( a ) == "[object Array]" } , isEmpty : function ( a ) { for ( var f in a ) if ( a . hasOwnProperty ( f ) ) return false ; return true } , cssVendorPrefix : function ( a , f , d ) { if ( d ) return e + a + ":" + f + ";" + a + ":" + f ; d = { } ; d [ a ] = f ; d [ e + a ] = f ;
return d } , cssStyleToDomStyle : function ( ) { var a = document . createElement ( "div" ) . style , f = typeof a . cssFloat != "undefined" ? "cssFloat" : typeof a . styleFloat != "undefined" ? "styleFloat" : "float" ; return function ( a ) { return a == "float" ? f : a . replace ( /-./g , function ( a ) { return a . substr ( 1 ) . toUpperCase ( ) } ) } } ( ) , buildStyleHtml : function ( a ) { for ( var a = [ ] . concat ( a ) , f , d = [ ] , b = 0 ; b < a . length ; b ++ ) if ( f = a [ b ] ) / @ import | [ { } ] / . test ( f ) ? d . push ( "<style>" + f + "</style>" ) : d . push ( '<link type="text/css" rel=stylesheet href="' + f + '">' ) ; return d . join ( "" ) } ,
htmlEncode : function ( a ) { return ( "" + a ) . replace ( b , "&" ) . replace ( c , ">" ) . replace ( f , "<" ) } , htmlDecode : function ( a ) { return a . replace ( g, "&" ) . replace ( h , ">" ) . replace ( m , "<" ) } , htmlEncodeAttr : function ( a ) { return a . replace ( d , """ ) . replace ( f , "<" ) . replace ( c , ">" ) } , htmlDecodeAttr : function ( a ) { return a . replace ( j, '"' ) . replace ( m , "<" ) . replace ( h , ">" ) } , getNextNumber : function ( ) { var a = 0 ; return function ( ) { return ++ a } } ( ) , getNextId : function ( ) { return "cke_" + this . getNextNumber ( ) } , override : function ( a , f ) { var d = f ( a ) ; d . prototype =
htmlEncode : function ( a ) { return ( "" + a ) . replace ( b , "&" ) . replace ( c , ">" ) . replace ( f , "<" ) } , htmlDecode : function ( a ) { return a . replace ( h, "&" ) . replace ( l , ">" ) . replace ( i , "<" ) } , htmlEncodeAttr : function ( a ) { return a . replace ( d , """ ) . replace ( f , "<" ) . replace ( c , ">" ) } , htmlDecodeAttr : function ( a ) { return a . replace ( g, '"' ) . replace ( i , "<" ) . replace ( l , ">" ) } , getNextNumber : function ( ) { var a = 0 ; return function ( ) { return ++ a } } ( ) , getNextId : function ( ) { return "cke_" + this . getNextNumber ( ) } , override : function ( a , f ) { var d = f ( a ) ; d . prototype =
a . prototype ; return d } , setTimeout : function ( a , f , d , b , c ) { c || ( c = window ) ; d || ( d = c ) ; return c . setTimeout ( function ( ) { b ? a . apply ( d , [ ] . concat ( b ) ) : a . apply ( d ) } , f || 0 ) } , trim : function ( ) { var a = /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g ; return function ( f ) { return f . replace ( a , "" ) } } ( ) , ltrim : function ( ) { var a = /^[ \t\n\r]+/g ; return function ( f ) { return f . replace ( a , "" ) } } ( ) , rtrim : function ( ) { var a = /[ \t\n\r]+$/g ; return function ( f ) { return f . replace ( a , "" ) } } ( ) , indexOf : function ( a , f ) { if ( typeof f == "function" ) for ( var d = 0 , b = a . length ; d < b ; d ++ ) { if ( f ( a [ d ] ) ) return d } else { if ( a . indexOf ) return a . indexOf ( f ) ;
d = 0 ; for ( b = a . length ; d < b ; d ++ ) if ( a [ d ] === f ) return d } return - 1 } , search : function ( a , f ) { var d = CKEDITOR . tools . indexOf ( a , f ) ; return d >= 0 ? a [ d ] : null } , bind : function ( a , f ) { return function ( ) { return a . apply ( f , arguments ) } } , createClass : function ( a ) { var f = a . $ , d = a . base , b = a . privates || a . _ , c = a . proto , a = a . statics ; ! f && ( f = function ( ) { d && this . base . apply ( this , arguments ) } ) ; if ( b ) var e = f , f = function ( ) { var a = this . _ || ( this . _ = { } ) , f ; for ( f in b ) { var d = b [ f ] ; a [ f ] = typeof d == "function" ? CKEDITOR . tools . bind ( d , this ) : d } e . apply ( this , arguments ) } ; if ( d ) { f . prototype =
this . prototypedCopy ( d . prototype ) ; f . prototype . constructor = f ; f . base = d ; f . baseProto = d . prototype ; f . prototype . base = function ( ) { this . base = d . prototype . base ; d . apply ( this , arguments ) ; this . base = arguments . callee } } c && this . extend ( f . prototype , c , true ) ; a && this . extend ( f , a , true ) ; return f } , addFunction : function ( f , d ) { return a . push ( function ( ) { return f . apply ( d || this , arguments ) } ) - 1 } , removeFunction : function ( f ) { a [ f ] = null } , callFunction : function ( f ) { var d = a [ f ] ; return d && d . apply ( window , Array . prototype . slice . call ( arguments , 1 ) ) } , cssLength : function ( ) { var a =
/^-?\d+\.?\d*px$/ , f ; return function ( d ) { f = CKEDITOR . tools . trim ( d + "" ) + "px" ; return a . test ( f ) ? f : d || "" } } ( ) , convertToPx : function ( ) { var a ; return function ( f ) { if ( ! a ) { a = CKEDITOR . dom . element . createFromHtml ( '<div style="position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"></div>' , CKEDITOR . document ) ; CKEDITOR . document . getBody ( ) . append ( a ) } if ( ! /%$/ . test ( f ) ) { a . setStyle ( "width" , f ) ; return a . $ . clientWidth } return f } } ( ) , repeat : function ( a , f ) { return Array ( f + 1 ) . join ( a ) } , tryThese : function ( ) { for ( var a ,
f = 0 , d = arguments . length ; f < d ; f ++ ) { var b = arguments [ f ] ; try { a = b ( ) ; break } catch ( c ) { } } return a } , genKey : function ( ) { return Array . prototype . slice . call ( arguments ) . join ( "-" ) } , defer : function ( a ) { return function ( ) { var f = arguments , d = this ; window . setTimeout ( function ( ) { a . apply ( d , f ) } , 0 ) } } , normalizeCssText : function ( a , f ) { var d = [ ] , b , c = CKEDITOR . tools . parseCssText ( a , true , f ) ; for ( b in c ) d . push ( b + ":" + c [ b ] ) ; d . sort ( ) ; return d . length ? d . join ( ";" ) + ";" : "" } , convertRgbToHex : function ( a ) { return a . replace ( /(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi ,
function ( a , f , d , b ) { a = [ f , d , b ] ; for ( f = 0 ; f < 3 ; f ++ ) a [ f ] = ( "0" + parseInt ( a [ f ] , 10 ) . toString ( 16 ) ) . slice ( - 2 ) ; return "#" + a . join ( "" ) } ) } , parseCssText : function ( a , f , d ) { var b = { } ; if ( d ) { d = new CKEDITOR . dom . element ( "span" ) ; d . setAttribute ( "style" , a ) ; a = CKEDITOR . tools . convertRgbToHex ( d . getAttribute ( "style" ) || "" ) } if ( ! a || a == ";" ) return b ; a . replace ( /"/g , '"' ) . replace ( /\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g , function ( a , d , c ) { if ( f ) { d = d . toLowerCase ( ) ; d == "font-family" && ( c= c . toLowerCase ( ) . replace ( /["']/g , "" ) . replace ( /\s*,\s*/g , "," ) ) ;
c= CKEDITOR . tools . trim ( c ) } b [ d ] = c } ) ; return b } , writeCssText : function ( a , f ) { var d , b = [ ] ; for ( d in a ) b . push ( d + ":" + a [ d ] ) ; f && b . sort ( ) ; return b . join ( "; " ) } , objectCompare : function ( a , f , d ) { var b ; if ( ! a && ! f ) return true ; if ( ! a || ! f ) return false ; for ( b in a ) if ( a [ b ] != f [ b ] ) return false ; if ( ! d ) for ( b in f ) if ( a [ b ] != f [ b ] ) return false ; return true } , objectKeys : function ( a ) { var f = [ ] , d ; for ( d in a ) f . push ( d ) ; return f } , convertArrayToObject : function ( a , f ) { var d = { } ; arguments . length == 1 && ( f = true ) ; for ( var b = 0 , c = a . length ; b < c ; ++ b ) d [ a [ b ] ] = f ;
function ( a , f , d , b ) { a = [ f , d , b ] ; for ( f = 0 ; f < 3 ; f ++ ) a [ f ] = ( "0" + parseInt ( a [ f ] , 10 ) . toString ( 16 ) ) . slice ( - 2 ) ; return "#" + a . join ( "" ) } ) } , parseCssText : function ( a , f , d ) { var b = { } ; if ( d ) { d = new CKEDITOR . dom . element ( "span" ) ; d . setAttribute ( "style" , a ) ; a = CKEDITOR . tools . convertRgbToHex ( d . getAttribute ( "style" ) || "" ) } if ( ! a || a == ";" ) return b ; a . replace ( /"/g , '"' ) . replace ( /\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g , function ( a , d , m ) { if ( f ) { d = d . toLowerCase ( ) ; d == "font-family" && ( m= m . toLowerCase ( ) . replace ( /["']/g , "" ) . replace ( /\s*,\s*/g , "," ) ) ;
m= CKEDITOR . tools . trim ( m ) } b [ d ] = m } ) ; return b } , writeCssText : function ( a , f ) { var d , b = [ ] ; for ( d in a ) b . push ( d + ":" + a [ d ] ) ; f && b . sort ( ) ; return b . join ( "; " ) } , objectCompare : function ( a , f , d ) { var b ; if ( ! a && ! f ) return true ; if ( ! a || ! f ) return false ; for ( b in a ) if ( a [ b ] != f [ b ] ) return false ; if ( ! d ) for ( b in f ) if ( a [ b ] != f [ b ] ) return false ; return true } , objectKeys : function ( a ) { var f = [ ] , d ; for ( d in a ) f . push ( d ) ; return f } , convertArrayToObject : function ( a , f ) { var d = { } ; arguments . length == 1 && ( f = true ) ; for ( var b = 0 , c = a . length ; b < c ; ++ b ) d [ a [ b ] ] = f ;
return d } , fixDomain : function ( ) { for ( var a ; ; ) try { a = window . parent . document . domain ; break } catch ( f ) { a = a ? a . replace ( /.+?(?:\.|$)/ , "" ) : document . domain ; if ( ! a ) break ; document . domain = a } return ! ! a } , eventsBuffer : function ( a , f ) { function d ( ) { c = ( new Date ) . getTime ( ) ; b = false ; f ( ) } var b , c = 0 ; return { input : function ( ) { if ( ! b ) { var f = ( new Date ) . getTime ( ) - c ; f < a ? b = setTimeout ( d , a - f ) : d ( ) } } , reset : function ( ) { b && clearTimeout ( b ) ; b = c = 0 } } } , enableHtml5Elements : function ( a , f ) { for ( var d = [ "abbr" , "article" , "aside" , "audio" , "bdi" , "canvas" , "data" ,
"datalist" , "details" , "figcaption" , "figure" , "footer" , "header" , "hgroup" , "mark" , "meter" , "nav" , "output" , "progress" , "section" , "summary" , "time" , "video" ] , b = d . length , c ; b -- ; ) { c = a . createElement ( d [ b ] ) ; f && a . appendChild ( c ) } } , checkIfAnyArrayItemMatches : function ( a , f ) { for ( var d = 0 , b = a . length ; d < b ; ++ d ) if ( a [ d ] . match ( f ) ) return true ; return false } , checkIfAnyObjectPropertyMatches : function ( a , f ) { for ( var d in a ) if ( d . match ( f ) ) return true ; return false } , transparentImageData : "data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" } } ) ( ) ;
CKEDITOR . dtd = function ( ) { var a = CKEDITOR . tools . extend , e = function ( a , f ) { for ( var d = CKEDITOR . tools . clone ( a ) , b = 1 ; b < arguments . length ; b ++ ) { var f = arguments [ b ] , c ; for ( c in f ) delete d [ c ] } return d } , b = { } , c = { } , f = { address : 1 , article : 1 , aside : 1 , blockquote : 1 , details : 1 , div : 1 , dl : 1 , fieldset : 1 , figure : 1 , footer : 1 , form : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , header : 1 , hgroup : 1 , hr : 1 , menu : 1 , nav : 1 , ol : 1 , p : 1 , pre : 1 , section : 1 , table : 1 , ul : 1 } , d = { command : 1 , link : 1 , meta : 1 , noscript : 1 , script : 1 , style : 1 } , g = { } , h = { "#" : 1 } , m = { center : 1 , dir : 1 , noframes : 1 } ;
a ( b , { a : 1 , abbr : 1 , area : 1 , audio : 1 , b : 1 , bdi : 1 , bdo : 1 , br : 1 , button : 1 , canvas : 1 , cite : 1 , code : 1 , command : 1 , datalist : 1 , del : 1 , dfn : 1 , em : 1 , embed : 1 , i : 1 , iframe : 1 , img : 1 , input : 1 , ins : 1 , kbd : 1 , keygen : 1 , label : 1 , map : 1 , mark : 1 , meter : 1 , noscript : 1 , object : 1 , output : 1 , progress : 1 , q : 1 , ruby : 1 , s : 1 , samp : 1 , script : 1 , select : 1 , small : 1 , span : 1 , strong : 1 , sub : 1 , sup : 1 , textarea : 1 , time : 1 , u : 1 , "var" : 1 , video : 1 , wbr : 1 } , h , { acronym : 1 , applet : 1 , basefont : 1 , big : 1 , font : 1 , isindex : 1 , strike : 1 , style : 1 , tt : 1 } ) ; a ( c , f , b , m ) ; e = { a : e ( b , { a : 1 , button : 1 } ) , abbr : b , address : c ,
area : g , article : a ( { style : 1 } , c ) , aside : a ( { style : 1 } , c ) , audio : a ( { source : 1 , track : 1 } , c ) , b : b , base : g , bdi : b , bdo : b , blockquote : c , body : c , br : g , button : e ( b , { a : 1 , button : 1 } ) , canvas : b , caption : c , cite : b , code : b , col : g , colgroup : { col : 1 } , command : g , datalist : a ( { option : 1 } , b ) , dd : c , del : b , details : a ( { summary : 1 } , c ) , dfn : b , div : a ( { style : 1 } , c ) , dl : { dt : 1 , dd : 1 } , dt : c , em : b , embed : g , fieldset : a ( { legend : 1 } , c ) , figcaption : c , figure : a ( { figcaption : 1 } , c ) , footer : c , form : c , h1 : b , h2 : b , h3 : b , h4 : b , h5 : b , h6 : b , head : a ( { title : 1 , base : 1 } , d ) , header : c , hgroup : { h1 : 1 ,
h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 } , hr : g , html : a ( { head : 1 , body : 1 } , c , d ) , i : b , iframe : h , img : g , input : g , ins : b , kbd : b , keygen : g , label : b , legend : b , li : c , link : g , map : c , mark : b , menu : a ( { li : 1 } , c ) , meta : g , meter : e ( b , { meter : 1 } ) , nav : c , noscript : a ( { link : 1 , meta : 1 , style : 1 } , b ) , object : a ( { param : 1 } , b ) , ol : { li : 1 } , optgroup : { option : 1 } , option : h , output : b , p : b , param : g , pre : b , progress : e ( b , { progress : 1 } ) , q : b , rp : b , rt : b , ruby : a ( { rp : 1 , rt : 1 } , b ) , s : b , samp : b , script : h , section : a ( { style : 1 } , c ) , select : { optgroup : 1 , option : 1 } , small : b , source : g , span : b , strong : b , style : h ,
sub : b , summary : b , sup : b , table : { caption : 1 , colgroup : 1 , thead : 1 , tfoot : 1 , tbody : 1 , tr : 1 } , tbody : { tr : 1 } , td : c , textarea : h , tfoot : { tr : 1 } , th : c , thead : { tr : 1 } , time : e ( b , { time : 1 } ) , title : h , tr : { th : 1 , td : 1 } , track : g , u : b , ul : { li : 1 } , "var" : b , video : a ( { source : 1 , track : 1 } , c ) , wbr : g , acronym : b , applet : a ( { param : 1 } , c ) , basefont : g , big : b , center : c , dialog : g , dir : { li : 1 } , font : b , isindex : g , noframes : c , strike : b , tt : b } ; a ( e , { $block : a ( { audio : 1 , dd : 1 , dt : 1 , figcaption : 1 , li : 1 , video : 1 } , f , m ) , $blockLimit : { article : 1 , aside : 1 , audio : 1 , body : 1 , caption : 1 , details : 1 , dir : 1 ,
div : 1 , dl : 1 , fieldset : 1 , figcaption : 1 , figure : 1 , footer : 1 , form : 1 , header : 1 , hgroup : 1 , menu : 1 , nav : 1 , ol : 1 , section : 1 , table : 1 , td : 1 , th : 1 , tr : 1 , ul : 1 , video : 1 } , $cdata : { script : 1 , style : 1 } , $editable : { address : 1 , article : 1 , aside : 1 , blockquote : 1 , body : 1 , details : 1 , div : 1 , fieldset : 1 , figcaption : 1 , footer : 1 , form : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , header : 1 , hgroup : 1 , nav : 1 , p : 1 , pre : 1 , section : 1 } , $empty : { area : 1 , base : 1 , basefont : 1 , br : 1 , col : 1 , command : 1 , dialog : 1 , embed : 1 , hr : 1 , img : 1 , input : 1 , isindex : 1 , keygen : 1 , link : 1 , meta : 1 , param : 1 , source : 1 , track : 1 ,
wbr : 1 } , $inline : b , $list : { dl : 1 , ol : 1 , ul : 1 } , $listItem : { dd : 1 , dt : 1 , li : 1 } , $nonBodyContent : a ( { body : 1 , head : 1 , html : 1 } , e . head ) , $nonEditable : { applet : 1 , audio : 1 , button : 1 , embed : 1 , iframe : 1 , map : 1 , object : 1 , option : 1 , param : 1 , script : 1 , textarea : 1 , video : 1 } , $object : { applet : 1 , audio : 1 , button : 1 , hr : 1 , iframe : 1 , img : 1 , input : 1 , object : 1 , select : 1 , table : 1 , textarea : 1 , video : 1 } , $removeEmpty : { abbr : 1 , acronym : 1 , b : 1 , bdi : 1 , bdo : 1 , big : 1 , cite : 1 , code : 1 , del : 1 , dfn : 1 , em : 1 , font : 1 , i : 1 , ins : 1 , label : 1 , kbd : 1 , mark : 1 , meter : 1 , output : 1 , q : 1 , ruby : 1 , s : 1 , samp : 1 ,
small : 1 , span : 1 , strike : 1 , strong : 1 , sub : 1 , sup : 1 , time : 1 , tt : 1 , u : 1 , "var" : 1 } , $tabIndex : { a : 1 , area : 1 , button : 1 , input : 1 , object : 1 , select : 1 , textarea : 1 } , $tableContent : { caption : 1 , col : 1 , colgroup : 1 , tbody : 1 , td : 1 , tfoot : 1 , th : 1 , thead : 1 , tr : 1 } , $transparent : { a : 1 , audio : 1 , canvas : 1 , del : 1 , ins : 1 , map : 1 , noscript : 1 , object : 1 , video : 1 } , $intermediate : { caption : 1 , colgroup : 1 , dd : 1 , dt : 1 , figcaption : 1 , legend : 1 , li : 1 , optgroup : 1 , option : 1 , rp : 1 , rt : 1 , summary : 1 , tbody : 1 , td : 1 , tfoot : 1 , th : 1 , thead : 1 , tr : 1 } } ) ; return e } ( ) ;
CKEDITOR . dom . event = function ( a ) { this . $ = a } ;
CKEDITOR . dtd = function ( ) { var a = CKEDITOR . tools . extend , e = function ( a , f ) { for ( var d = CKEDITOR . tools . clone ( a ) , b = 1 ; b < arguments . length ; b ++ ) { var f = arguments [ b ] , c ; for ( c in f ) delete d [ c ] } return d } , b = { } , c = { } , f = { address : 1 , article : 1 , aside : 1 , blockquote : 1 , details : 1 , div : 1 , dl : 1 , fieldset : 1 , figure : 1 , footer : 1 , form : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , header : 1 , hgroup : 1 , hr : 1 , main : 1 , menu : 1 , nav : 1 , ol : 1 , p : 1 , pre : 1 , section : 1 , table : 1 , ul : 1 } , d = { command : 1 , link : 1 , meta : 1 , noscript : 1 , script : 1 , style : 1 } , h = { } , l = { "#" : 1 } , i = { center : 1 , dir : 1 , noframes : 1 } ;
a ( b , { a : 1 , abbr : 1 , area : 1 , audio : 1 , b : 1 , bdi : 1 , bdo : 1 , br : 1 , button : 1 , canvas : 1 , cite : 1 , code : 1 , command : 1 , datalist : 1 , del : 1 , dfn : 1 , em : 1 , embed : 1 , i : 1 , iframe : 1 , img : 1 , input : 1 , ins : 1 , kbd : 1 , keygen : 1 , label : 1 , map : 1 , mark : 1 , meter : 1 , noscript : 1 , object : 1 , output : 1 , progress : 1 , q : 1 , ruby : 1 , s : 1 , samp : 1 , script : 1 , select : 1 , small : 1 , span : 1 , strong : 1 , sub : 1 , sup : 1 , textarea : 1 , time : 1 , u : 1 , "var" : 1 , video : 1 , wbr : 1 } , l , { acronym : 1 , applet : 1 , basefont : 1 , big : 1 , font : 1 , isindex : 1 , strike : 1 , style : 1 , tt : 1 } ) ; a ( c , f , b , i ) ; e = { a : e ( b , { a : 1 , button : 1 } ) , abbr : b , address : c ,
area : h , article : c , aside : c , audio : a ( { source : 1 , track : 1 } , c ) , b : b , base : h , bdi : b , bdo : b , blockquote : c , body : c , br : h , button : e ( b , { a : 1 , button : 1 } ) , canvas : b , caption : c , cite : b , code : b , col : h , colgroup : { col : 1 } , command : h , datalist : a ( { option : 1 } , b ) , dd : c , del : b , details : a ( { summary : 1 } , c ) , dfn : b , div : c , dl : { dt : 1 , dd : 1 } , dt : c , em : b , embed : h , fieldset : a ( { legend : 1 } , c ) , figcaption : c , figure : a ( { figcaption : 1 } , c ) , footer : c , form : c , h1 : b , h2 : b , h3 : b , h4 : b , h5 : b , h6 : b , head : a ( { title : 1 , base : 1 } , d ) , header : c , hgroup : { h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 } , hr : h , html : a ( { head : 1 ,
body : 1 } , c , d ) , i : b , iframe : l , img : h , input : h , ins : b , kbd : b , keygen : h , label : b , legend : b , li : c , link : h , main : c , map : c , mark : b , menu : a ( { li : 1 } , c ) , meta : h , meter : e ( b , { meter : 1 } ) , nav : c , noscript : a ( { link : 1 , meta : 1 , style : 1 } , b ) , object : a ( { param : 1 } , b ) , ol : { li : 1 } , optgroup : { option : 1 } , option : l , output : b , p : b , param : h , pre : b , progress : e ( b , { progress : 1 } ) , q : b , rp : b , rt : b , ruby : a ( { rp : 1 , rt : 1 } , b ) , s : b , samp : b , script : l , section : c , select : { optgroup : 1 , option : 1 } , small : b , source : h , span : b , strong : b , style : l , sub : b , summary : b , sup : b , table : { caption : 1 , colgroup : 1 , thead : 1 ,
tfoot : 1 , tbody : 1 , tr : 1 } , tbody : { tr : 1 } , td : c , textarea : l , tfoot : { tr : 1 } , th : c , thead : { tr : 1 } , time : e ( b , { time : 1 } ) , title : l , tr : { th : 1 , td : 1 } , track : h , u : b , ul : { li : 1 } , "var" : b , video : a ( { source : 1 , track : 1 } , c ) , wbr : h , acronym : b , applet : a ( { param : 1 } , c ) , basefont : h , big : b , center : c , dialog : h , dir : { li : 1 } , font : b , isindex : h , noframes : c , strike : b , tt : b } ; a ( e , { $block : a ( { audio : 1 , dd : 1 , dt : 1 , figcaption : 1 , li : 1 , video : 1 } , f , i ) , $blockLimit : { article : 1 , aside : 1 , audio : 1 , body : 1 , caption : 1 , details : 1 , dir : 1 , div : 1 , dl : 1 , fieldset : 1 , figcaption : 1 , figure : 1 , footer : 1 ,
form : 1 , header : 1 , hgroup : 1 , main : 1 , menu : 1 , nav : 1 , ol : 1 , section : 1 , table : 1 , td : 1 , th : 1 , tr : 1 , ul : 1 , video : 1 } , $cdata : { script : 1 , style : 1 } , $editable : { address : 1 , article : 1 , aside : 1 , blockquote : 1 , body : 1 , details : 1 , div : 1 , fieldset : 1 , figcaption : 1 , footer : 1 , form : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , header : 1 , hgroup : 1 , main : 1 , nav : 1 , p : 1 , pre : 1 , section : 1 } , $empty : { area : 1 , base : 1 , basefont : 1 , br : 1 , col : 1 , command : 1 , dialog : 1 , embed : 1 , hr : 1 , img : 1 , input : 1 , isindex : 1 , keygen : 1 , link : 1 , meta : 1 , param : 1 , source : 1 , track : 1 , wbr : 1 } , $inline : b , $list : { dl : 1 , ol : 1 ,
ul : 1 } , $listItem : { dd : 1 , dt : 1 , li : 1 } , $nonBodyContent : a ( { body : 1 , head : 1 , html : 1 } , e . head ) , $nonEditable : { applet : 1 , audio : 1 , button : 1 , embed : 1 , iframe : 1 , map : 1 , object : 1 , option : 1 , param : 1 , script : 1 , textarea : 1 , video : 1 } , $object : { applet : 1 , audio : 1 , button : 1 , hr : 1 , iframe : 1 , img : 1 , input : 1 , object : 1 , select : 1 , table : 1 , textarea : 1 , video : 1 } , $removeEmpty : { abbr : 1 , acronym : 1 , b : 1 , bdi : 1 , bdo : 1 , big : 1 , cite : 1 , code : 1 , del : 1 , dfn : 1 , em : 1 , font : 1 , i : 1 , ins : 1 , label : 1 , kbd : 1 , mark : 1 , meter : 1 , output : 1 , q : 1 , ruby : 1 , s : 1 , samp : 1 , small : 1 , span : 1 , strike : 1 , strong : 1 ,
sub : 1 , sup : 1 , time : 1 , tt : 1 , u : 1 , "var" : 1 } , $tabIndex : { a : 1 , area : 1 , button : 1 , input : 1 , object : 1 , select : 1 , textarea : 1 } , $tableContent : { caption : 1 , col : 1 , colgroup : 1 , tbody : 1 , td : 1 , tfoot : 1 , th : 1 , thead : 1 , tr : 1 } , $transparent : { a : 1 , audio : 1 , canvas : 1 , del : 1 , ins : 1 , map : 1 , noscript : 1 , object : 1 , video : 1 } , $intermediate : { caption : 1 , colgroup : 1 , dd : 1 , dt : 1 , figcaption : 1 , legend : 1 , li : 1 , optgroup : 1 , option : 1 , rp : 1 , rt : 1 , summary : 1 , tbody : 1 , td : 1 , tfoot : 1 , th : 1 , thead : 1 , tr : 1 } } ) ; return e } ( ) ; CKEDITOR . dom . event = function ( a ) { this . $ = a } ;
CKEDITOR . dom . event . prototype = { getKey : function ( ) { return this . $ . keyCode || this . $ . which } , getKeystroke : function ( ) { var a = this . getKey ( ) ; if ( this . $ . ctrlKey || this . $ . metaKey ) a = a + CKEDITOR . CTRL ; this . $ . shiftKey && ( a = a + CKEDITOR . SHIFT ) ; this . $ . altKey && ( a = a + CKEDITOR . ALT ) ; return a } , preventDefault : function ( a ) { var e = this . $ ; e . preventDefault ? e . preventDefault ( ) : e . returnValue = false ; a && this . stopPropagation ( ) } , stopPropagation : function ( ) { var a = this . $ ; a . stopPropagation ? a . stopPropagation ( ) : a . cancelBubble = true } , getTarget : function ( ) { var a =
this . $ . target || this . $ . srcElement ; return a ? new CKEDITOR . dom . node ( a ) : null } , getPhase : function ( ) { return this . $ . eventPhase || 2 } , getPageOffset : function ( ) { var a = this . getTarget ( ) . getDocument ( ) . $ ; return { x : this . $ . pageX || this . $ . clientX + ( a . documentElement . scrollLeft || a . body . scrollLeft ) , y : this . $ . pageY || this . $ . clientY + ( a . documentElement . scrollTop || a . body . scrollTop ) } } } ; CKEDITOR . CTRL = 1114112 ; CKEDITOR . SHIFT = 2228224 ; CKEDITOR . ALT = 4456448 ; CKEDITOR . EVENT _PHASE _CAPTURING = 1 ; CKEDITOR . EVENT _PHASE _AT _TARGET = 2 ;
CKEDITOR . EVENT _PHASE _BUBBLING = 3 ; CKEDITOR . dom . domObject = function ( a ) { if ( a ) this . $ = a } ;
@ -51,21 +50,22 @@ var a=this.$["data-cke-expando"];a&&delete e[a]};a.getUniqueId=function(){return
CKEDITOR . dom . node = function ( a ) { return a ? new CKEDITOR . dom [ a . nodeType == CKEDITOR . NODE _DOCUMENT ? "document" : a . nodeType == CKEDITOR . NODE _ELEMENT ? "element" : a . nodeType == CKEDITOR . NODE _TEXT ? "text" : a . nodeType == CKEDITOR . NODE _COMMENT ? "comment" : a . nodeType == CKEDITOR . NODE _DOCUMENT _FRAGMENT ? "documentFragment" : "domObject" ] ( a ) : this } ; CKEDITOR . dom . node . prototype = new CKEDITOR . dom . domObject ; CKEDITOR . NODE _ELEMENT = 1 ; CKEDITOR . NODE _DOCUMENT = 9 ; CKEDITOR . NODE _TEXT = 3 ; CKEDITOR . NODE _COMMENT = 8 ; CKEDITOR . NODE _DOCUMENT _FRAGMENT = 11 ;
CKEDITOR . POSITION _IDENTICAL = 0 ; CKEDITOR . POSITION _DISCONNECTED = 1 ; CKEDITOR . POSITION _FOLLOWING = 2 ; CKEDITOR . POSITION _PRECEDING = 4 ; CKEDITOR . POSITION _IS _CONTAINED = 8 ; CKEDITOR . POSITION _CONTAINS = 16 ;
CKEDITOR . tools . extend ( CKEDITOR . dom . node . prototype , { appendTo : function ( a , e ) { a . append ( this , e ) ; return a } , clone : function ( a , e ) { var b = this . $ . cloneNode ( a ) , c = function ( f ) { f [ "data-cke-expando" ] && ( f [ "data-cke-expando" ] = false ) ; if ( f . nodeType == CKEDITOR . NODE _ELEMENT ) { e || f . removeAttribute ( "id" , false ) ; if ( a ) for ( var f = f . childNodes , d = 0 ; d < f . length ; d ++ ) c ( f [ d ] ) } } ; c ( b ) ; return new CKEDITOR . dom . node ( b ) } , hasPrevious : function ( ) { return ! ! this . $ . previousSibling } , hasNext : function ( ) { return ! ! this . $ . nextSibling } , insertAfter : function ( a ) { a . $ . parentNode . insertBefore ( this . $ ,
a . $ . nextSibling ) ; return a } , insertBefore : function ( a ) { a . $ . parentNode . insertBefore ( this . $ , a . $ ) ; return a } , insertBeforeMe : function ( a ) { this . $ . parentNode . insertBefore ( a . $ , this . $ ) ; return a } , getAddress : function ( a ) { for ( var e = [ ] , b = this . getDocument ( ) . $ . documentElement , c = this . $ ; c && c != b ; ) { var f = c . parentNode ; f && e . unshift ( this . getIndex . call ( { $ : c } , a ) ) ; c = f } return e } , getDocument : function ( ) { return new CKEDITOR . dom . document ( this . $ . ownerDocument || this . $ . parentNode . ownerDocument ) } , getIndex : function ( a ) { var e = this . $ , b = - 1 ,
c ; if ( ! this . $ . parentNode ) return b ; do if ( ! a || ! ( e != this . $ && e . nodeType == CKEDITOR . NODE _TEXT && ( c || ! e . nodeValue ) ) ) { b ++ ; c = e . nodeType == CKEDITOR . NODE _TEXT } while ( e = e . previousSibling ) ; return b } , getNextSourceNode : function ( a , e , b ) { if ( b && ! b . call ) var c = b , b = function ( a ) { return ! a . equals ( c ) } ; var a = ! a && this . getFirst && this . getFirst ( ) , f ; if ( ! a ) { if ( this . type == CKEDITOR . NODE _ELEMENT && b && b ( this , true ) === false ) return null ; a = this . getNext ( ) } for ( ; ! a && ( f = ( f || this ) . getParent ( ) ) ; ) { if ( b && b ( f , true ) === false ) return null ; a = f . getNext ( ) } return ! a ||
b && b ( a ) === false ? null : e && e != a . type ? a . getNextSourceNode ( false , e , b ) : a } , getPreviousSourceNode : function ( a , e , b ) { if ( b && ! b . call ) var c = b , b = function ( a ) { return ! a . equals ( c ) } ; var a = ! a && this . getLast && this . getLast ( ) , f ; if ( ! a ) { if ( this . type == CKEDITOR . NODE _ELEMENT && b && b ( this , true ) === false ) return null ; a = this . getPrevious ( ) } for ( ; ! a && ( f = ( f || this ) . getParent ( ) ) ; ) { if ( b && b ( f , true ) === false ) return null ; a = f . getPrevious ( ) } return ! a || b && b ( a ) === false ? null : e && a . type != e ? a . getPreviousSourceNode ( false , e , b ) : a } , getPrevious : function ( a ) { var e =
this . $ , b ; do b = ( e = e . previousSibling ) && e . nodeType != 10 && new CKEDITOR . dom . node ( e ) ; while ( b && a && ! a ( b ) ) ; return b } , getNext : function ( a ) { var e = this . $ , b ; do b = ( e = e . nextSibling ) && new CKEDITOR . dom . node ( e ) ; while ( b && a && ! a ( b ) ) ; return b } , getParent : function ( a ) { var e = this . $ . parentNode ; return e && ( e . nodeType == CKEDITOR . NODE _ELEMENT || a && e . nodeType == CKEDITOR . NODE _DOCUMENT _FRAGMENT ) ? new CKEDITOR . dom . node ( e ) : null } , getParents : function ( a ) { var e = this , b = [ ] ; do b [ a ? "push" : "unshift" ] ( e ) ; while ( e = e . getParent ( ) ) ; return b } , getCommonAncestor : function ( a ) { if ( a . equals ( this ) ) return this ;
if ( a . contains && a . contains ( this ) ) return a ; var e = this . contains ? this : this . getParent ( ) ; do if ( e . contains ( a ) ) return e ; while ( e = e . getParent ( ) ) ; return null } , getPosition : function ( a ) { var e = this . $ , b = a . $ ; if ( e . compareDocumentPosition ) return e . compareDocumentPosition ( b ) ; if ( e == b ) return CKEDITOR . POSITION _IDENTICAL ; if ( this . type == CKEDITOR . NODE _ELEMENT && a . type == CKEDITOR . NODE _ELEMENT ) { if ( e . contains ) { if ( e . contains ( b ) ) return CKEDITOR . POSITION _CONTAINS + CKEDITOR . POSITION _PRECEDING ; if ( b . contains ( e ) ) return CKEDITOR . POSITION _IS _CONTAINED +
CKEDITOR . POSITION _FOLLOWING } if ( "sourceIndex" in e ) return e . sourceIndex < 0 || b . sourceIndex < 0 ? CKEDITOR . POSITION _DISCONNECTED : e . sourceIndex < b . sourceIndex ? CKEDITOR . POSITION _PRECEDING : CKEDITOR . POSITION _FOLLOWING } for ( var e = this . getAddress ( ) , a = a . getAddress ( ) , b = Math . min ( e . length , a . length ) , c = 0 ; c <= b - 1 ; c ++ ) if ( e [ c ] != a [ c ] ) { if ( c < b ) return e [ c ] < a [ c ] ? CKEDITOR . POSITION _PRECEDING : CKEDITOR . POSITION _FOLLOWING ; break } return e . length < a . length ? CKEDITOR . POSITION _CONTAINS + CKEDITOR . POSITION _PRECEDING : CKEDITOR . POSITION _IS _CONTAINED +
CKEDITOR . POSITION _FOLLOWING } , getAscendant : function ( a , e ) { var b = this . $ , c , f ; if ( ! e ) b = b . parentNode ; if ( typeof a == "function" ) { f = true ; c = a } else { f = false ; c = function ( f ) { f = typeof f . nodeName == "string" ? f . nodeName . toLowerCase ( ) : "" ; return typeof a == "string" ? f == a : f in a } } for ( ; b ; ) { if ( c ( f ? new CKEDITOR . dom . node ( b ) : b ) ) return new CKEDITOR . dom . node ( b ) ; try { b = b . parentNode } catch ( d ) { b = null } } return null } , hasAscendant : function ( a , e ) { var b = this . $ ; if ( ! e ) b = b . parentNode ; for ( ; b ; ) { if ( b . nodeName && b . nodeName . toLowerCase ( ) == a ) return true ;
b = b . parentNode } return false } , move : function ( a , e ) { a . append ( this . remove ( ) , e ) } , remove : function ( a ) { var e = this . $ , b = e . parentNode ; if ( b ) { if ( a ) for ( ; a = e . firstChild ; ) b . insertBefore ( e . removeChild ( a ) , e ) ; b . removeChild ( e ) } return this } , replace : function ( a ) { this . insertBefore ( a ) ; a . remove ( ) } , trim : function ( ) { this . ltrim ( ) ; this . rtrim ( ) } , ltrim : function ( ) { for ( var a ; this . getFirst && ( a = this . getFirst ( ) ) ; ) { if ( a . type == CKEDITOR . NODE _TEXT ) { var e = CKEDITOR . tools . ltrim ( a . getText ( ) ) , b = a . getLength ( ) ; if ( e ) { if ( e . length < b ) { a . split ( b - e . length ) ;
this . $ . removeChild ( this . $ . firstChild ) } } else { a . remove ( ) ; continue } } break } } , rtrim : function ( ) { for ( var a ; this . getLast && ( a = this . getLast ( ) ) ; ) { if ( a . type == CKEDITOR . NODE _TEXT ) { var e = CKEDITOR . tools . rtrim ( a . getText ( ) ) , b = a . getLength ( ) ; if ( e ) { if ( e . length < b ) { a . split ( e . length ) ; this . $ . lastChild . parentNode . removeChild ( this . $ . lastChild ) } } else { a . remove ( ) ; continue } } break } if ( CKEDITOR . env . needsBrFiller ) ( a = this . $ . lastChild ) && ( a . type == 1 && a . nodeName . toLowerCase ( ) == "br" ) && a . parentNode . removeChild ( a ) } , isReadOnly : function ( ) { var a =
this ; this . type != CKEDITOR . NODE _ELEMENT && ( a = this . getParent ( ) ) ; if ( a && typeof a . $ . isContentEditable != "undefined" ) return ! ( a . $ . isContentEditable || a . data ( "cke-editable" ) ) ; for ( ; a ; ) { if ( a . data ( "cke-editable" ) ) break ; if ( a . getAttribute ( "contentEditable" ) == "false" ) return true ; if ( a . getAttribute ( "contentEditable" ) == "true" ) break ; a = a . getParent ( ) } return ! a } } ) ; CKEDITOR . dom . window = function ( a ) { CKEDITOR . dom . domObject . call ( this , a ) } ; CKEDITOR . dom . window . prototype = new CKEDITOR . dom . domObject ;
a . $ . nextSibling ) ; return a } , insertBefore : function ( a ) { a . $ . parentNode . insertBefore ( this . $ , a . $ ) ; return a } , insertBeforeMe : function ( a ) { this . $ . parentNode . insertBefore ( a . $ , this . $ ) ; return a } , getAddress : function ( a ) { for ( var e = [ ] , b = this . getDocument ( ) . $ . documentElement , c = this . $ ; c && c != b ; ) { var f = c . parentNode ; f && e . unshift ( this . getIndex . call ( { $ : c } , a ) ) ; c = f } return e } , getDocument : function ( ) { return new CKEDITOR . dom . document ( this . $ . ownerDocument || this . $ . parentNode . ownerDocument ) } , getIndex : function ( a ) { function e ( a , f ) { var b =
f ? a . nextSibling : a . previousSibling ; return ! b || b . nodeType != CKEDITOR . NODE _TEXT ? null : b . nodeValue ? b : e ( b , f ) } var b = this . $ , c = - 1 , f ; if ( ! this . $ . parentNode || a && b . nodeType == CKEDITOR . NODE _TEXT && ! b . nodeValue && ! e ( b ) && ! e ( b , true ) ) return - 1 ; do if ( ! a || ! ( b != this . $ && b . nodeType == CKEDITOR . NODE _TEXT && ( f || ! b . nodeValue ) ) ) { c ++ ; f = b . nodeType == CKEDITOR . NODE _TEXT } while ( b = b . previousSibling ) ; return c } , getNextSourceNode : function ( a , e , b ) { if ( b && ! b . call ) var c = b , b = function ( a ) { return ! a . equals ( c ) } ; var a = ! a && this . getFirst && this . getFirst ( ) , f ;
if ( ! a ) { if ( this . type == CKEDITOR . NODE _ELEMENT && b && b ( this , true ) === false ) return null ; a = this . getNext ( ) } for ( ; ! a && ( f = ( f || this ) . getParent ( ) ) ; ) { if ( b && b ( f , true ) === false ) return null ; a = f . getNext ( ) } return ! a || b && b ( a ) === false ? null : e && e != a . type ? a . getNextSourceNode ( false , e , b ) : a } , getPreviousSourceNode : function ( a , e , b ) { if ( b && ! b . call ) var c = b , b = function ( a ) { return ! a . equals ( c ) } ; var a = ! a && this . getLast && this . getLast ( ) , f ; if ( ! a ) { if ( this . type == CKEDITOR . NODE _ELEMENT && b && b ( this , true ) === false ) return null ; a = this . getPrevious ( ) } for ( ; ! a &&
( f = ( f || this ) . getParent ( ) ) ; ) { if ( b && b ( f , true ) === false ) return null ; a = f . getPrevious ( ) } return ! a || b && b ( a ) === false ? null : e && a . type != e ? a . getPreviousSourceNode ( false , e , b ) : a } , getPrevious : function ( a ) { var e = this . $ , b ; do b = ( e = e . previousSibling ) && e . nodeType != 10 && new CKEDITOR . dom . node ( e ) ; while ( b && a && ! a ( b ) ) ; return b } , getNext : function ( a ) { var e = this . $ , b ; do b = ( e = e . nextSibling ) && new CKEDITOR . dom . node ( e ) ; while ( b && a && ! a ( b ) ) ; return b } , getParent : function ( a ) { var e = this . $ . parentNode ; return e && ( e . nodeType == CKEDITOR . NODE _ELEMENT ||
a && e . nodeType == CKEDITOR . NODE _DOCUMENT _FRAGMENT ) ? new CKEDITOR . dom . node ( e ) : null } , getParents : function ( a ) { var e = this , b = [ ] ; do b [ a ? "push" : "unshift" ] ( e ) ; while ( e = e . getParent ( ) ) ; return b } , getCommonAncestor : function ( a ) { if ( a . equals ( this ) ) return this ; if ( a . contains && a . contains ( this ) ) return a ; var e = this . contains ? this : this . getParent ( ) ; do if ( e . contains ( a ) ) return e ; while ( e = e . getParent ( ) ) ; return null } , getPosition : function ( a ) { var e = this . $ , b = a . $ ; if ( e . compareDocumentPosition ) return e . compareDocumentPosition ( b ) ; if ( e ==
b ) return CKEDITOR . POSITION _IDENTICAL ; if ( this . type == CKEDITOR . NODE _ELEMENT && a . type == CKEDITOR . NODE _ELEMENT ) { if ( e . contains ) { if ( e . contains ( b ) ) return CKEDITOR . POSITION _CONTAINS + CKEDITOR . POSITION _PRECEDING ; if ( b . contains ( e ) ) return CKEDITOR . POSITION _IS _CONTAINED + CKEDITOR . POSITION _FOLLOWING } if ( "sourceIndex" in e ) return e . sourceIndex < 0 || b . sourceIndex < 0 ? CKEDITOR . POSITION _DISCONNECTED : e . sourceIndex < b . sourceIndex ? CKEDITOR . POSITION _PRECEDING : CKEDITOR . POSITION _FOLLOWING } for ( var e = this . getAddress ( ) , a = a . getAddress ( ) ,
b = Math . min ( e . length , a . length ) , c = 0 ; c <= b - 1 ; c ++ ) if ( e [ c ] != a [ c ] ) { if ( c < b ) return e [ c ] < a [ c ] ? CKEDITOR . POSITION _PRECEDING : CKEDITOR . POSITION _FOLLOWING ; break } return e . length < a . length ? CKEDITOR . POSITION _CONTAINS + CKEDITOR . POSITION _PRECEDING : CKEDITOR . POSITION _IS _CONTAINED + CKEDITOR . POSITION _FOLLOWING } , getAscendant : function ( a , e ) { var b = this . $ , c , f ; if ( ! e ) b = b . parentNode ; if ( typeof a == "function" ) { f = true ; c = a } else { f = false ; c = function ( f ) { f = typeof f . nodeName == "string" ? f . nodeName . toLowerCase ( ) : "" ; return typeof a == "string" ? f ==
a : f in a } } for ( ; b ; ) { if ( c ( f ? new CKEDITOR . dom . node ( b ) : b ) ) return new CKEDITOR . dom . node ( b ) ; try { b = b . parentNode } catch ( d ) { b = null } } return null } , hasAscendant : function ( a , e ) { var b = this . $ ; if ( ! e ) b = b . parentNode ; for ( ; b ; ) { if ( b . nodeName && b . nodeName . toLowerCase ( ) == a ) return true ; b = b . parentNode } return false } , move : function ( a , e ) { a . append ( this . remove ( ) , e ) } , remove : function ( a ) { var e = this . $ , b = e . parentNode ; if ( b ) { if ( a ) for ( ; a = e . firstChild ; ) b . insertBefore ( e . removeChild ( a ) , e ) ; b . removeChild ( e ) } return this } , replace : function ( a ) { this . insertBefore ( a ) ;
a . remove ( ) } , trim : function ( ) { this . ltrim ( ) ; this . rtrim ( ) } , ltrim : function ( ) { for ( var a ; this . getFirst && ( a = this . getFirst ( ) ) ; ) { if ( a . type == CKEDITOR . NODE _TEXT ) { var e = CKEDITOR . tools . ltrim ( a . getText ( ) ) , b = a . getLength ( ) ; if ( e ) { if ( e . length < b ) { a . split ( b - e . length ) ; this . $ . removeChild ( this . $ . firstChild ) } } else { a . remove ( ) ; continue } } break } } , rtrim : function ( ) { for ( var a ; this . getLast && ( a = this . getLast ( ) ) ; ) { if ( a . type == CKEDITOR . NODE _TEXT ) { var e = CKEDITOR . tools . rtrim ( a . getText ( ) ) , b = a . getLength ( ) ; if ( e ) { if ( e . length < b ) { a . split ( e . length ) ;
this . $ . lastChild . parentNode . removeChild ( this . $ . lastChild ) } } else { a . remove ( ) ; continue } } break } if ( CKEDITOR . env . needsBrFiller ) ( a = this . $ . lastChild ) && ( a . type == 1 && a . nodeName . toLowerCase ( ) == "br" ) && a . parentNode . removeChild ( a ) } , isReadOnly : function ( ) { var a = this ; this . type != CKEDITOR . NODE _ELEMENT && ( a = this . getParent ( ) ) ; if ( a && typeof a . $ . isContentEditable != "undefined" ) return ! ( a . $ . isContentEditable || a . data ( "cke-editable" ) ) ; for ( ; a ; ) { if ( a . data ( "cke-editable" ) ) break ; if ( a . getAttribute ( "contentEditable" ) == "false" ) return true ;
if ( a . getAttribute ( "contentEditable" ) == "true" ) break ; a = a . getParent ( ) } return ! a } } ) ; CKEDITOR . dom . window = function ( a ) { CKEDITOR . dom . domObject . call ( this , a ) } ; CKEDITOR . dom . window . prototype = new CKEDITOR . dom . domObject ;
CKEDITOR . tools . extend ( CKEDITOR . dom . window . prototype , { focus : function ( ) { this . $ . focus ( ) } , getViewPaneSize : function ( ) { var a = this . $ . document , e = a . compatMode == "CSS1Compat" ; return { width : ( e ? a . documentElement . clientWidth : a . body . clientWidth ) || 0 , height : ( e ? a . documentElement . clientHeight : a . body . clientHeight ) || 0 } } , getScrollPosition : function ( ) { var a = this . $ ; if ( "pageXOffset" in a ) return { x : a . pageXOffset || 0 , y : a . pageYOffset || 0 } ; a = a . document ; return { x : a . documentElement . scrollLeft || a . body . scrollLeft || 0 , y : a . documentElement . scrollTop ||
a . body . scrollTop || 0 } } , getFrame : function ( ) { var a = null ; try { a = this . $ . frameElement ; } catch ( e ) { } return a ? new CKEDITOR . dom . element . get ( a ) : null } } ) ; CKEDITOR . dom . document = function ( a ) { CKEDITOR . dom . domObject . call ( this , a ) } ; CKEDITOR . dom . document . prototype = new CKEDITOR . dom . domObject ;
a . body . scrollTop || 0 } } , getFrame : function ( ) { var a = this . $ . frameElement ; return a ? new CKEDITOR . dom . element . get ( a ) : null } } ) ; CKEDITOR . dom . document = function ( a ) { CKEDITOR . dom . domObject . call ( this , a ) } ; CKEDITOR . dom . document . prototype = new CKEDITOR . dom . domObject ;
CKEDITOR . tools . extend ( CKEDITOR . dom . document . prototype , { type : CKEDITOR . NODE _DOCUMENT , appendStyleSheet : function ( a ) { if ( this . $ . createStyleSheet ) this . $ . createStyleSheet ( a ) ; else { var e = new CKEDITOR . dom . element ( "link" ) ; e . setAttributes ( { rel : "stylesheet" , type : "text/css" , href : a } ) ; this . getHead ( ) . append ( e ) } } , appendStyleText : function ( a ) { if ( this . $ . createStyleSheet ) { var e = this . $ . createStyleSheet ( "" ) ; e . cssText = a } else { var b = new CKEDITOR . dom . element ( "style" , this ) ; b . append ( new CKEDITOR . dom . text ( a , this ) ) ; this . getHead ( ) . append ( b ) } return e ||
b . $ . sheet } , createElement : function ( a , e ) { var b = new CKEDITOR . dom . element ( a , this ) ; if ( e ) { e . attributes && b . setAttributes ( e . attributes ) ; e . styles && b . setStyles ( e . styles ) } return b } , createText : function ( a ) { return new CKEDITOR . dom . text ( a , this ) } , focus : function ( ) { this . getWindow ( ) . focus ( ) } , getActive : function ( ) { var a ; try { a = this . $ . activeElement } catch ( e ) { return null } return new CKEDITOR . dom . element ( a ) } , getById : function ( a ) { return ( a = this . $ . getElementById ( a ) ) ? new CKEDITOR . dom . element ( a ) : null } , getByAddress : function ( a , e ) { for ( var b =
this . $ . documentElement , c = 0 ; b && c < a . length ; c ++ ) { var f = a [ c ] ; if ( e ) for ( var d = - 1 , g= 0 ; g < b . childNodes . length ; g ++ ) { var h = b . childNodes [ g ] ; if ( ! ( e === true && h. nodeType == 3 && h . previousSibling && h . previousSibling . nodeType == 3 ) ) { d ++ ; if ( d == f ) { b = h ; break } } } else b = b . childNodes [ f ] } return b ? new CKEDITOR . dom . node ( b ) : null } , getElementsByTag : function ( a , e ) { ! ( CKEDITOR . env . ie && document . documentMode <= 8 ) && e && ( a = e + ":" + a ) ; return new CKEDITOR . dom . nodeList ( this . $ . getElementsByTagName ( a ) ) } , getHead : function ( ) { var a = this . $ . getElementsByTagName ( "head" ) [ 0 ] ;
this . $ . documentElement , c = 0 ; b && c < a . length ; c ++ ) { var f = a [ c ] ; if ( e ) for ( var d = - 1 , h= 0 ; h < b . childNodes . length ; h ++ ) { var l = b . childNodes [ h ] ; if ( ! ( e === true && l. nodeType == 3 && l . previousSibling && l . previousSibling . nodeType == 3 ) ) { d ++ ; if ( d == f ) { b = l ; break } } } else b = b . childNodes [ f ] } return b ? new CKEDITOR . dom . node ( b ) : null } , getElementsByTag : function ( a , e ) { ! ( CKEDITOR . env . ie && document . documentMode <= 8 ) && e && ( a = e + ":" + a ) ; return new CKEDITOR . dom . nodeList ( this . $ . getElementsByTagName ( a ) ) } , getHead : function ( ) { var a = this . $ . getElementsByTagName ( "head" ) [ 0 ] ;
return a = a ? new CKEDITOR . dom . element ( a ) : this . getDocumentElement ( ) . append ( new CKEDITOR . dom . element ( "head" ) , true ) } , getBody : function ( ) { return new CKEDITOR . dom . element ( this . $ . body ) } , getDocumentElement : function ( ) { return new CKEDITOR . dom . element ( this . $ . documentElement ) } , getWindow : function ( ) { return new CKEDITOR . dom . window ( this . $ . parentWindow || this . $ . defaultView ) } , write : function ( a ) { this . $ . open ( "text/html" , "replace" ) ; CKEDITOR . env . ie && ( a = a . replace ( /(?:^\s*<!DOCTYPE[^>]*?>)|^/i , '$&\n<script data-cke-temp="1">(' +
CKEDITOR . tools . fixDomain + ")();<\/script>" ) ) ; this . $ . write ( a ) ; this . $ . close ( ) } , find : function ( a ) { return new CKEDITOR . dom . nodeList ( this . $ . querySelectorAll ( a ) ) } , findOne : function ( a ) { return ( a = this . $ . querySelector ( a ) ) ? new CKEDITOR . dom . element ( a ) : null } , _getHtml5ShivFrag : function ( ) { var a = this . getCustomData ( "html5ShivFrag" ) ; if ( ! a ) { a = this . $ . createDocumentFragment ( ) ; CKEDITOR . tools . enableHtml5Elements ( a , true ) ; this . setCustomData ( "html5ShivFrag" , a ) } return a } } ) ; CKEDITOR . dom . nodeList = function ( a ) { this . $ = a } ;
CKEDITOR . dom . nodeList . prototype = { count : function ( ) { return this . $ . length } , getItem : function ( a ) { if ( a < 0 || a >= this . $ . length ) return null ; return ( a = this . $ [ a ] ) ? new CKEDITOR . dom . node ( a ) : null } } ; CKEDITOR . dom . element = function ( a , e ) { typeof a == "string" && ( a = ( e ? e . $ : document ) . createElement ( a ) ) ; CKEDITOR . dom . domObject . call ( this , a ) } ; CKEDITOR . dom . element . get = function ( a ) { return ( a = typeof a == "string" ? document . getElementById ( a ) || document . getElementsByName ( a ) [ 0 ] : a ) && ( a . $ ? a : new CKEDITOR . dom . element ( a ) ) } ;
@ -88,129 +88,129 @@ a)return true;return false},isEditable:function(a){var d=this.getName();if(this.
b . clone ( ) ; b . setHtml ( d ) ; d = b . getHtml ( ) ; b . setHtml ( a ) ; a = b . getHtml ( ) } } return d == a } , isVisible : function ( ) { var a = ( this . $ . offsetHeight || this . $ . offsetWidth ) && this . getComputedStyle ( "visibility" ) != "hidden" , d , b ; if ( a && CKEDITOR . env . webkit ) { d = this . getWindow ( ) ; if ( ! d . equals ( CKEDITOR . document . getWindow ( ) ) && ( b = d . $ . frameElement ) ) a = ( new CKEDITOR . dom . element ( b ) ) . isVisible ( ) } return ! ! a } , isEmptyInlineRemoveable : function ( ) { if ( ! CKEDITOR . dtd . $removeEmpty [ this . getName ( ) ] ) return false ; for ( var a = this . getChildren ( ) , d = 0 , b = a . count ( ) ; d <
b ; d ++ ) { var c = a . getItem ( d ) ; if ( ! ( c . type == CKEDITOR . NODE _ELEMENT && c . data ( "cke-bookmark" ) ) && ( c . type == CKEDITOR . NODE _ELEMENT && ! c . isEmptyInlineRemoveable ( ) || c . type == CKEDITOR . NODE _TEXT && CKEDITOR . tools . trim ( c . getText ( ) ) ) ) return false } return true } , hasAttributes : CKEDITOR . env . ie && ( CKEDITOR . env . ie7Compat || CKEDITOR . env . quirks ) ? function ( ) { for ( var a = this . $ . attributes , d = 0 ; d < a . length ; d ++ ) { var b = a [ d ] ; switch ( b . nodeName ) { case "class" : if ( this . getAttribute ( "class" ) ) return true ; case "data-cke-expando" : continue ; default : if ( b . specified ) return true } } return false } :
function ( ) { var a = this . $ . attributes , d = a . length , b = { "data-cke-expando" : 1 , _moz _dirty : 1 } ; return d > 0 && ( d > 2 || ! b [ a [ 0 ] . nodeName ] || d == 2 && ! b [ a [ 1 ] . nodeName ] ) } , hasAttribute : function ( ) { function a ( d ) { var f = this . $ . attributes . getNamedItem ( d ) ; if ( this . getName ( ) == "input" ) switch ( d ) { case "class" : return this . $ . className . length > 0 ; case "checked" : return ! ! this . $ . checked ; case "value" : d = this . getAttribute ( "type" ) ; return d == "checkbox" || d == "radio" ? this . $ . value != "on" : ! ! this . $ . value } return ! f ? false : f . specified } return CKEDITOR . env . ie ?
CKEDITOR . env . version < 8 ? function ( d ) { return d == "name" ? ! ! this . $ . name : a . call ( this , d ) } : a : function ( a ) { return ! ! this . $ . attributes . getNamedItem ( a ) } } ( ) , hide : function ( ) { this . setStyle ( "display" , "none" ) } , moveChildren : function ( a , d ) { var b = this . $ , a = a . $ ; if ( b != a ) { var c ; if ( d ) for ( ; c = b . lastChild ; ) a . insertBefore ( b . removeChild ( c ) , a . firstChild ) ; else for ( ; c = b . firstChild ; ) a . appendChild ( b . removeChild ( c ) ) } } , mergeSiblings : function ( ) { function a ( d , f, b ) { if ( f && f . type == CKEDITOR . NODE _ELEMENT ) { for ( var c = [ ] ; f. data ( "cke-bookmark" ) || f . isEmptyInlineRemoveable ( ) ; ) { c . push ( f ) ;
f= b ? f . getNext ( ) : f . getPrevious ( ) ; if ( ! f || f . type != CKEDITOR . NODE _ELEMENT ) return } if ( d . isIdentical ( f) ) { for ( var e = b ? d . getLast ( ) : d . getFirst ( ) ; c . length ; ) c . shift ( ) . move ( d , ! b) ; f . moveChildren ( d , ! b ) ; f . remove ( ) ; e && e . type == CKEDITOR . NODE _ELEMENT && e . mergeSiblings ( ) } } } return function ( d ) { if ( d === false || CKEDITOR . dtd . $removeEmpty [ this . getName ( ) ] || this . is ( "a" ) ) { a ( this , this . getNext ( ) , true ) ; a ( this , this . getPrevious ( ) ) } } } ( ) , show : function ( ) { this . setStyles ( { display : "" , visibility : "" } ) } , setAttribute : function ( ) { var a = function ( a ,
f ) { this . $ . setAttribute ( a , f ) ; return this } ; return CKEDITOR . env . ie && ( CKEDITOR . env . ie7Compat || CKEDITOR . env . quirks ) ? function ( d , b ) { d == "class" ? this . $ . className = b : d == "style" ? this . $ . style . cssText = b : d == "tabindex" ? this . $ . tabIndex = b : d == "checked" ? this . $ . checked = b : d == "contenteditable" ? a . call ( this , "contentEditable" , b ) : a . apply ( this , arguments ) ; return this } : CKEDITOR . env . ie8Compat && CKEDITOR . env . secure ? function ( d , b ) { if ( d == "src" && b . match ( /^http:\/\// ) ) try { a . apply ( this , arguments ) } catch ( c ) { } else a . apply ( this , arguments ) ;
return this } : a } ( ) , setAttributes : function ( a ) { for ( var d in a ) this . setAttribute ( d , a [ d ] ) ; return this } , setValue : function ( a ) { this . $ . value = a ; return this } , removeAttribute : function ( ) { var a = function ( a ) { this . $ . removeAttribute ( a ) } ; return CKEDITOR . env . ie && ( CKEDITOR . env . ie7Compat || CKEDITOR . env . quirks ) ? function ( a ) { a == "class" ? a = "className" : a == "tabindex" ? a = "tabIndex" : a == "contenteditable" && ( a = "contentEditable" ) ; this . $ . removeAttribute ( a ) } : a } ( ) , removeAttributes : function ( a ) { if ( CKEDITOR . tools . isArray ( a ) ) for ( var d= 0 ; d <
a . length ; d++ ) this . removeAttribute ( a [ d ] ) ; else for ( d in a ) a . hasOwnProperty ( d ) && this . removeAttribute ( d ) } , removeStyle : function ( a ) { var d = this . $ . style ; if ( ! d . removeProperty && ( a == "border" || a == "margin" || a == "padding" ) ) { var b = [ "top" , "left" , "right" , "bottom" ] , c; a == "border" && ( c = [ "color" , "style" , "width" ] ) ; for ( var d= [ ] , e = 0 ; e < b . length ; e ++ ) if ( c ) for ( var j = 0 ; j < c . length ; j ++ ) d . push ( [ a , b [ e ] , c [ j ] ] . join ( "-" ) ) ; else d. push ( [ a , b [ e ] ] . join ( "-" ) ) ; for ( a = 0 ; a < d . length ; a ++ ) this . removeStyle ( d[ a ] ) } else { d . removeProperty ? d . removeProperty ( a ) :
d . removeAttribute ( CKEDITOR . tools . cssStyleToDomStyle ( a ) ) ; this . $ . style . cssText || this . removeAttribute ( "style" ) } } , setStyle : function ( a , d ) { this . $ . style [ CKEDITOR . tools . cssStyleToDomStyle ( a ) ] = d ; return this } , setStyles : function ( a ) { for ( var d in a ) this . setStyle ( d , a [ d ] ) ; return this } , setOpacity : function ( a ) { if ( CKEDITOR . env . ie && CKEDITOR . env . version < 9 ) { a = Math . round ( a * 100 ) ; this . setStyle ( "filter" , a >= 100 ? "" : "progid:DXImageTransform.Microsoft.Alpha(opacity=" + a + ")" ) } else this . setStyle ( "opacity" , a ) } , unselectable : function ( ) { this . setStyles ( CKEDITOR . tools . cssVendorPrefix ( "user-select" ,
"none" ) ) ; if ( CKEDITOR . env . ie ) { this . setAttribute ( "unselectable" , "on" ) ; for ( var a , d = this . getElementsByTag ( "*" ) , b= 0 , c = d . count ( ) ; b < c ; b ++ ) { a = d . getItem ( b ) ; a . setAttribute ( "unselectable" , "on" ) } } } , getPositionedAncestor : function ( ) { for ( var a = this ; a . getName ( ) != "html" ; ) { if ( a . getComputedStyle ( "position" ) != "static" ) return a ; a = a . getParent ( ) } return null } , getDocumentPosition : function ( a ) { var d= 0 , b= 0 , c = this . getDocument ( ) , e= c . getBody ( ) , j = c . $ . compatMode == "BackCompat" ; if ( document . documentElement . getBoundingClientRect ) { var p =
this . $ . getBoundingClientRect ( ) , u= c . $ . documentElement , t = u . clientTop || e . $ . clientTop || 0 , y = u . clientLeft || e . $ . clientLeft || 0 , n = true ; if ( CKEDITOR . env . ie ) { n= c . getDocumentElement ( ) . contains ( this ) ; c= c . getBody ( ) . contains ( this ) ; n= j && c || ! j && n } if ( n ) { d = p . left + ( ! j && u . scrollLeft || e . $ . scrollLeft ) ; d = d - y ; b = p . top + ( ! j && u . scrollTop || e . $ . scrollTop ) ; b = b - t } } else { e = this ; for ( c = null ; e && ! ( e . getName ( ) == "body" || e . getName ( ) == "html" ) ; ) { d= d + ( e . $ . offsetLeft - e . $ . scrollLeft ) ; b = b + ( e . $ . offsetTop - e . $ . scrollTop ) ; if ( ! e . equals ( this ) ) { d = d + ( e . $ . clientLeft ||
0 ) ; b= b + ( e . $ . clientTop || 0 ) } for ( ; c&& ! c . equals ( e ) ; ) { d = d - c . $ . scrollLeft ; b = b - c . $ . scrollTop ; c = c . getParent ( ) } c = e ; e = ( p = e . $ . offsetParent ) ? new CKEDITOR . dom . element ( p ) : null } } if ( a ) { e= this . getWindow ( ) ; c = a . getWindow ( ) ; if ( ! e. equals ( c ) && e . $ . frameElement ) { a = ( new CKEDITOR . dom . element ( e . $ . frameElement ) ) . getDocumentPosition ( a ) ; d= d + a . x ; b = b + a . y } } if ( ! document . documentElement . getBoundingClientRect && CKEDITOR . env . gecko && ! j) { d = d + ( this . $ . clientLeft ? 1 : 0 ) ; b= b + ( this . $ . clientTop ? 1 : 0 ) } return { x : d, y : b } } , scrollIntoView : function ( a ) { var b =
this . getParent ( ) ; if ( b ) { do { ( b . $ . clientWidth && b . $ . clientWidth < b . $ . scrollWidth || b . $ . clientHeight && b . $ . clientHeight < b . $ . scrollHeight ) && ! b . is ( "body" ) && this . scrollIntoParent ( b , a , 1 ) ; if ( b . is ( "html" ) ) { var c = b . getWindow ( ) ; try { var e = c . $ . frameElement ; e && ( b = new CKEDITOR . dom . element ( e ) ) } catch ( m ) { } } } while ( b = b . getParent ( ) ) } } , scrollIntoParent : function ( a , b , c ) { var e , m, j , p ; function u ( b , d ) { if ( /body|html/ . test ( a . getName ( ) ) ) a . getWindow ( ) . $ . scrollBy ( b , d ) ; else { a . $ . scrollLeft = a . $ . scrollLeft + b ; a . $ . scrollTop = a . $ . scrollTop + d } }
function t ( a , b ) { var d = { x : 0 , y : 0 } ; if ( ! a . is ( n ? "body" : "html" ) ) { var c = a . $ . getBoundingClientRect ( ) ; d . x = c . left ; d . y = c . top } c = a . getWindow ( ) ; if ( ! c . equals ( b ) ) { c = t ( CKEDITOR . dom . element . get ( c . $ . frameElement ) , b ) ; d . x = d . x + c . x ; d . y = d . y + c . y } return d } function y ( a , b ) { return parseInt ( a . getComputedStyle ( "margin-" + b ) || 0 , 10 ) || 0 } ! a && ( a = this . getWindow ( ) ) ; j= a . getDocument ( ) ; var n = j . $ . compatMode == "BackCompat" ; a instanceof CKEDITOR . dom . window && ( a = n? j . getBody ( ) : j . getDocumentElement ( ) ) ; j = a . getWindow ( ) ; m = t ( this , j ) ; var w = t ( a , j ) , o = this . $ . offsetHeight ;
e = this . $ . offsetWidth ; var r= a . $ . clientHeight , i = a . $ . clientWidth ; j = m . x - y ( this , "left" ) - w. x || 0 ; p = m . y - y ( this , "top" ) - w. y || 0 ; e = m . x + e + y ( this , "right" ) - ( w. x + i ) || 0 ; m = m . y + o + y ( this , "bottom" ) - ( w. y + r ) || 0 ; if ( p < 0 || m > 0 ) u ( 0 , b === true ? p : b === false ? m : p < 0 ? p : m ) ; if ( c && ( j < 0 || e > 0 ) ) u ( j < 0 ? j : e , 0 ) } , setState : function ( a , b , c ) { b = b || "cke" ; switch ( a ) { case CKEDITOR . TRISTATE _ON : this . addClass ( b + "_on" ) ; this . removeClass ( b + "_off" ) ; this . removeClass ( b + "_disabled" ) ; c && this . setAttribute ( "aria-pressed" , true ) ; c && this . removeAttribute ( "aria-disabled" ) ;
CKEDITOR . env . version < 8 ? function ( d ) { return d == "name" ? ! ! this . $ . name : a . call ( this , d ) } : a : function ( a ) { return ! ! this . $ . attributes . getNamedItem ( a ) } } ( ) , hide : function ( ) { this . setStyle ( "display" , "none" ) } , moveChildren : function ( a , d ) { var b = this . $ , a = a . $ ; if ( b != a ) { var c ; if ( d ) for ( ; c = b . lastChild ; ) a . insertBefore ( b . removeChild ( c ) , a . firstChild ) ; else for ( ; c = b . firstChild ; ) a . appendChild ( b . removeChild ( c ) ) } } , mergeSiblings : function ( ) { function a ( d , b, f ) { if ( b && b . type == CKEDITOR . NODE _ELEMENT ) { for ( var c = [ ] ; b. data ( "cke-bookmark" ) || b . isEmptyInlineRemoveable ( ) ; ) { c . push ( b ) ;
b= f ? b . getNext ( ) : b . getPrevious ( ) ; if ( ! b || b . type != CKEDITOR . NODE _ELEMENT ) return } if ( d . isIdentical ( b) ) { for ( var e = f ? d . getLast ( ) : d . getFirst ( ) ; c . length ; ) c . shift ( ) . move ( d , ! f) ; b . moveChildren ( d , ! f ) ; b . remove ( ) ; e && e . type == CKEDITOR . NODE _ELEMENT && e . mergeSiblings ( ) } } } return function ( d ) { if ( d === false || CKEDITOR . dtd . $removeEmpty [ this . getName ( ) ] || this . is ( "a" ) ) { a ( this , this . getNext ( ) , true ) ; a ( this , this . getPrevious ( ) ) } } } ( ) , show : function ( ) { this . setStyles ( { display : "" , visibility : "" } ) } , setAttribute : function ( ) { var a = function ( a ,
b ) { this . $ . setAttribute ( a , b ) ; return this } ; return CKEDITOR . env . ie && ( CKEDITOR . env . ie7Compat || CKEDITOR . env . quirks ) ? function ( d , b ) { d == "class" ? this . $ . className = b : d == "style" ? this . $ . style . cssText = b : d == "tabindex" ? this . $ . tabIndex = b : d == "checked" ? this . $ . checked = b : d == "contenteditable" ? a . call ( this , "contentEditable" , b ) : a . apply ( this , arguments ) ; return this } : CKEDITOR . env . ie8Compat && CKEDITOR . env . secure ? function ( d , b ) { if ( d == "src" && b . match ( /^http:\/\// ) ) try { a . apply ( this , arguments ) } catch ( c ) { } else a . apply ( this , arguments ) ;
return this } : a } ( ) , setAttributes : function ( a ) { for ( var d in a ) this . setAttribute ( d , a [ d ] ) ; return this } , setValue : function ( a ) { this . $ . value = a ; return this } , removeAttribute : function ( ) { var a = function ( a ) { this . $ . removeAttribute ( a ) } ; return CKEDITOR . env . ie && ( CKEDITOR . env . ie7Compat || CKEDITOR . env . quirks ) ? function ( a ) { a == "class" ? a = "className" : a == "tabindex" ? a = "tabIndex" : a == "contenteditable" && ( a = "contentEditable" ) ; this . $ . removeAttribute ( a ) } : a } ( ) , removeAttributes : function ( a ) { if ( CKEDITOR . tools . isArray ( a ) ) for ( var b= 0 ; b <
a . length ; b++ ) this . removeAttribute ( a [ b ] ) ; else for ( b in a ) a . hasOwnProperty ( b ) && this . removeAttribute ( b ) } , removeStyle : function ( a ) { var b = this . $ . style ; if ( ! b . removeProperty && ( a == "border" || a == "margin" || a == "padding" ) ) { var c = [ "top" , "left" , "right" , "bottom" ] , e; a == "border" && ( e = [ "color" , "style" , "width" ] ) ; for ( var b= [ ] , i = 0 ; i < c . length ; i ++ ) if ( e ) for ( var g = 0 ; g < e . length ; g ++ ) b . push ( [ a , c [ i ] , e [ g ] ] . join ( "-" ) ) ; else b. push ( [ a , c [ i ] ] . join ( "-" ) ) ; for ( a = 0 ; a < b . length ; a ++ ) this . removeStyle ( b[ a ] ) } else { b . removeProperty ? b . removeProperty ( a ) :
b . removeAttribute ( CKEDITOR . tools . cssStyleToDomStyle ( a ) ) ; this . $ . style . cssText || this . removeAttribute ( "style" ) } } , setStyle : function ( a , b ) { this . $ . style [ CKEDITOR . tools . cssStyleToDomStyle ( a ) ] = b ; return this } , setStyles : function ( a ) { for ( var b in a ) this . setStyle ( b , a [ b ] ) ; return this } , setOpacity : function ( a ) { if ( CKEDITOR . env . ie && CKEDITOR . env . version < 9 ) { a = Math . round ( a * 100 ) ; this . setStyle ( "filter" , a >= 100 ? "" : "progid:DXImageTransform.Microsoft.Alpha(opacity=" + a + ")" ) } else this . setStyle ( "opacity" , a ) } , unselectable : function ( ) { this . setStyles ( CKEDITOR . tools . cssVendorPrefix ( "user-select" ,
"none" ) ) ; if ( CKEDITOR . env . ie ) { this . setAttribute ( "unselectable" , "on" ) ; for ( var a , b = this . getElementsByTag ( "*" ) , c= 0 , e = b . count ( ) ; c < e ; c ++ ) { a = b . getItem ( c ) ; a . setAttribute ( "unselectable" , "on" ) } } } , getPositionedAncestor : function ( ) { for ( var a = this ; a . getName ( ) != "html" ; ) { if ( a . getComputedStyle ( "position" ) != "static" ) return a ; a = a . getParent ( ) } return null } , getDocumentPosition : function ( a ) { var b= 0 , c = 0 , e = this . getDocument ( ) , i= e . getBody ( ) , g = e . $ . compatMode == "BackCompat" ; if ( document . documentElement . getBoundingClientRect ) { var m =
this . $ . getBoundingClientRect ( ) , t= e . $ . documentElement , s = t . clientTop || i . $ . clientTop || 0 , y = t . clientLeft || i . $ . clientLeft || 0 , p = true ; if ( CKEDITOR . env . ie ) { p= e . getDocumentElement ( ) . contains ( this ) ; e= e . getBody ( ) . contains ( this ) ; p= g && e || ! g && p } if ( p ) { b = m . left + ( ! g && t . scrollLeft || i . $ . scrollLeft ) ; b = b - y ; c = m . top + ( ! g && t . scrollTop || i . $ . scrollTop ) ; c = c - s } } else { i = this ; for ( e = null ; i && ! ( i . getName ( ) == "body" || i . getName ( ) == "html" ) ; ) { b= b + ( i . $ . offsetLeft - i . $ . scrollLeft ) ; c = c + ( i . $ . offsetTop - i . $ . scrollTop ) ; if ( ! i . equals ( this ) ) { b = b + ( i . $ . clientLeft ||
0 ) ; c= c + ( i . $ . clientTop || 0 ) } for ( ; e&& ! e . equals ( i ) ; ) { b = b - e . $ . scrollLeft ; c = c - e . $ . scrollTop ; e = e . getParent ( ) } e = i ; i = ( m = i . $ . offsetParent ) ? new CKEDITOR . dom . element ( m ) : null } } if ( a ) { i= this . getWindow ( ) ; e = a . getWindow ( ) ; if ( ! i. equals ( e ) && i . $ . frameElement ) { a = ( new CKEDITOR . dom . element ( i . $ . frameElement ) ) . getDocumentPosition ( a ) ; b= b + a . x ; c = c + a . y } } if ( ! document . documentElement . getBoundingClientRect && CKEDITOR . env . gecko && ! g) { b = b + ( this . $ . clientLeft ? 1 : 0 ) ; c= c + ( this . $ . clientTop ? 1 : 0 ) } return { x : b, y : c } } , scrollIntoView : function ( a ) { var b =
this . getParent ( ) ; if ( b ) { do { ( b . $ . clientWidth && b . $ . clientWidth < b . $ . scrollWidth || b . $ . clientHeight && b . $ . clientHeight < b . $ . scrollHeight ) && ! b . is ( "body" ) && this . scrollIntoParent ( b , a , 1 ) ; if ( b . is ( "html" ) ) { var c = b . getWindow ( ) ; try { var e = c . $ . frameElement ; e && ( b = new CKEDITOR . dom . element ( e ) ) } catch ( i ) { } } } while ( b = b . getParent ( ) ) } } , scrollIntoParent : function ( a , b , c ) { var e , i, g , m ; function t ( b , d ) { if ( /body|html/ . test ( a . getName ( ) ) ) a . getWindow ( ) . $ . scrollBy ( b , d ) ; else { a . $ . scrollLeft = a . $ . scrollLeft + b ; a . $ . scrollTop = a . $ . scrollTop + d } }
function s ( a , b ) { var d = { x : 0 , y : 0 } ; if ( ! a . is ( p ? "body" : "html" ) ) { var c = a . $ . getBoundingClientRect ( ) ; d . x = c . left ; d . y = c . top } c = a . getWindow ( ) ; if ( ! c . equals ( b ) ) { c = s ( CKEDITOR . dom . element . get ( c . $ . frameElement ) , b ) ; d . x = d . x + c . x ; d . y = d . y + c . y } return d } function y ( a , b ) { return parseInt ( a . getComputedStyle ( "margin-" + b ) || 0 , 10 ) || 0 } ! a && ( a = this . getWindow ( ) ) ; g= a . getDocument ( ) ; var p = g . $ . compatMode == "BackCompat" ; a instanceof CKEDITOR . dom . window && ( a = p? g . getBody ( ) : g . getDocumentElement ( ) ) ; g = a . getWindow ( ) ; i = s ( this , g ) ; var q = s ( a , g ) , j = this . $ . offsetHeight ;
e = this . $ . offsetWidth ; var u= a . $ . clientHeight , v = a . $ . clientWidth ; g = i . x - y ( this , "left" ) - q. x || 0 ; m = i . y - y ( this , "top" ) - q. y || 0 ; e = i . x + e + y ( this , "right" ) - ( q. x + v ) || 0 ; i = i . y + j + y ( this , "bottom" ) - ( q. y + u ) || 0 ; if ( m < 0 || i > 0 ) t ( 0 , b === true ? m : b === false ? i : m < 0 ? m : i ) ; if ( c && ( g < 0 || e > 0 ) ) t ( g < 0 ? g : e , 0 ) } , setState : function ( a , b , c ) { b = b || "cke" ; switch ( a ) { case CKEDITOR . TRISTATE _ON : this . addClass ( b + "_on" ) ; this . removeClass ( b + "_off" ) ; this . removeClass ( b + "_disabled" ) ; c && this . setAttribute ( "aria-pressed" , true ) ; c && this . removeAttribute ( "aria-disabled" ) ;
break ; case CKEDITOR . TRISTATE _DISABLED : this . addClass ( b + "_disabled" ) ; this . removeClass ( b + "_off" ) ; this . removeClass ( b + "_on" ) ; c && this . setAttribute ( "aria-disabled" , true ) ; c && this . removeAttribute ( "aria-pressed" ) ; break ; default : this . addClass ( b + "_off" ) ; this . removeClass ( b + "_on" ) ; this . removeClass ( b + "_disabled" ) ; c && this . removeAttribute ( "aria-pressed" ) ; c && this . removeAttribute ( "aria-disabled" ) } } , getFrameDocument : function ( ) { var a = this . $ ; try { a . contentWindow . document } catch ( b ) { a . src = a . src } return a && new CKEDITOR . dom . document ( a . contentWindow . document ) } ,
copyAttributes : function ( a , b ) { for ( var c = this . $ . attributes , b = b || { } , e = 0 ; e < c . length ; e ++ ) { var m= c [ e ] , j = m . nodeName . toLowerCase ( ) , p ; if ( ! ( j in b ) ) if ( j == "checked" && ( p = this . getAttribute ( j ) ) ) a . setAttribute ( j , p ) ; else if ( ! CKEDITOR . env . ie || this . hasAttribute ( j) ) { p = this . getAttribute ( j ) ; if ( p === null ) p = m . nodeValue ; a . setAttribute ( j , p ) } } if ( this . $ . style . cssText !== "" ) a . $ . style . cssText = this . $ . style . cssText } , renameNode : function ( a ) { if ( this . getName ( ) != a ) { var b = this . getDocument ( ) , a = new CKEDITOR . dom . element ( a , b ) ; this . copyAttributes ( a ) ;
copyAttributes : function ( a , b ) { for ( var c = this . $ . attributes , b = b || { } , e = 0 ; e < c . length ; e ++ ) { var i= c [ e ] , g = i . nodeName . toLowerCase ( ) , m ; if ( ! ( g in b ) ) if ( g == "checked" && ( m = this . getAttribute ( g ) ) ) a . setAttribute ( g , m ) ; else if ( ! CKEDITOR . env . ie || this . hasAttribute ( g) ) { m = this . getAttribute ( g ) ; if ( m === null ) m = i . nodeValue ; a . setAttribute ( g , m ) } } if ( this . $ . style . cssText !== "" ) a . $ . style . cssText = this . $ . style . cssText } , renameNode : function ( a ) { if ( this . getName ( ) != a ) { var b = this . getDocument ( ) , a = new CKEDITOR . dom . element ( a , b ) ; this . copyAttributes ( a ) ;
this . moveChildren ( a ) ; this . getParent ( ) && this . $ . parentNode . replaceChild ( a . $ , this . $ ) ; a . $ [ "data-cke-expando" ] = this . $ [ "data-cke-expando" ] ; this . $ = a . $ ; delete this . getName } } , getChild : function ( ) { function a ( b , c ) { var f = b . childNodes ; if ( c >= 0 && c < f . length ) return f [ c ] } return function ( b ) { var c = this . $ ; if ( b . slice ) for ( ; b . length > 0 && c ; ) c = a ( c , b . shift ( ) ) ; else c = a ( c , b ) ; return c ? new CKEDITOR . dom . node ( c ) : null } } ( ) , getChildCount : function ( ) { return this . $ . childNodes . length } , disableContextMenu : function ( ) { this . on ( "contextmenu" , function ( a ) { a . data . getTarget ( ) . hasClass ( "cke_enable_context_menu" ) ||
a . data . preventDefault ( ) } ) } , getDirection : function ( a ) { return a ? this . getComputedStyle ( "direction" ) || this . getDirection ( ) || this . getParent ( ) && this . getParent ( ) . getDirection ( 1 ) || this . getDocument ( ) . $ . dir || "ltr" : this . getStyle ( "direction" ) || this . getAttribute ( "dir" ) } , data : function ( a , b ) { a = "data-" + a ; if ( b === void 0 ) return this . getAttribute ( a ) ; b === false ? this . removeAttribute ( a ) : this . setAttribute ( a , b ) ; return null } , getEditor : function ( ) { var a = CKEDITOR . instances , b , c ; for ( b in a ) { c = a [ b ] ; if ( c . element . equals ( this ) && c . elementMode !=
CKEDITOR . ELEMENT _MODE _APPENDTO ) return c } return null } , find : function ( b ) { var c = a ( this ) , b = new CKEDITOR . dom . nodeList ( this . $ . querySelectorAll ( e ( this , b ) ) ) ; c ( ) ; return b } , findOne : function ( b ) { var c = a ( this ) , b = this . $ . querySelector ( e ( this , b ) ) ; c ( ) ; return b ? new CKEDITOR . dom . element ( b ) : null } , forEach : function ( a , b , c ) { if ( ! c && ( ! b || this . type == b ) ) var e = a ( this ) ; if ( e !== false ) for ( var c = this . getChildren ( ) , m= 0 ; m < c . count ( ) ; m ++ ) { e = c . getItem ( m ) ; e . type == CKEDITOR . NODE _ELEMENT ? e . forEach ( a , b ) : ( ! b || e . type == b ) && a ( e ) } } } ) ; var c = { width : [ "border-left-width" ,
CKEDITOR . ELEMENT _MODE _APPENDTO ) return c } return null } , find : function ( b ) { var c = a ( this ) , b = new CKEDITOR . dom . nodeList ( this . $ . querySelectorAll ( e ( this , b ) ) ) ; c ( ) ; return b } , findOne : function ( b ) { var c = a ( this ) , b = this . $ . querySelector ( e ( this , b ) ) ; c ( ) ; return b ? new CKEDITOR . dom . element ( b ) : null } , forEach : function ( a , b , c ) { if ( ! c && ( ! b || this . type == b ) ) var e = a ( this ) ; if ( e !== false ) for ( var c = this . getChildren ( ) , i= 0 ; i < c . count ( ) ; i ++ ) { e = c . getItem ( i ) ; e . type == CKEDITOR . NODE _ELEMENT ? e . forEach ( a , b ) : ( ! b || e . type == b ) && a ( e ) } } } ) ; var c = { width : [ "border-left-width" ,
"border-right-width" , "padding-left" , "padding-right" ] , height : [ "border-top-width" , "border-bottom-width" , "padding-top" , "padding-bottom" ] } ; CKEDITOR . dom . element . prototype . setSize = function ( a , c , e ) { if ( typeof c == "number" ) { if ( e && ( ! CKEDITOR . env . ie || ! CKEDITOR . env . quirks ) ) c = c - b . call ( this , a ) ; this . setStyle ( a , c + "px" ) } } ; CKEDITOR . dom . element . prototype . getSize = function ( a , c ) { var e = Math . max ( this . $ [ "offset" + CKEDITOR . tools . capitalize ( a ) ] , this . $ [ "client" + CKEDITOR . tools . capitalize ( a ) ] ) || 0 ; c && ( e = e - b . call ( this , a ) ) ; return e } } ) ( ) ;
CKEDITOR . dom . documentFragment = function ( a ) { a = a || CKEDITOR . document ; this . $ = a . type == CKEDITOR . NODE _DOCUMENT ? a . $ . createDocumentFragment ( ) : a } ;
CKEDITOR . tools . extend ( CKEDITOR . dom . documentFragment . prototype , CKEDITOR . dom . element . prototype , { type : CKEDITOR . NODE _DOCUMENT _FRAGMENT , insertAfterNode : function ( a ) { a = a . $ ; a . parentNode . insertBefore ( this . $ , a . nextSibling ) } } , ! 0 , { append : 1 , appendBogus : 1 , getFirst : 1 , getLast : 1 , getParent : 1 , getNext : 1 , getPrevious : 1 , appendTo : 1 , moveChildren : 1 , insertBefore : 1 , insertAfterNode : 1 , replace : 1 , trim : 1 , type : 1 , ltrim : 1 , rtrim : 1 , getDocument : 1 , getChildCount : 1 , getChild : 1 , getChildren : 1 } ) ;
( function ( ) { function a ( a , b ) { var c = this . range ; if ( this . _ . end ) return null ; if ( ! this . _ . start ) { this . _ . start = 1 ; if ( c . collapsed ) { this . end ( ) ; return null } c . optimize ( ) } var d , f = c . startContainer ; d = c . endContainer ; var e= c . startOffset , p = c . endOffset , i , k = this . guard , l = this . type , q = a ? "getPreviousSourceNode" : "getNextSourceNode" ; if ( ! a && ! this . _ . guardLTR ) { var x = d . type == CKEDITOR . NODE _ELEMENT ? d : d . getParent ( ) , s = d . type == CKEDITOR . NODE _ELEMENT ? d . getChild ( p ) : d . getNext ( ) ; this . _ . guardLTR = function ( a , b ) { return ( ! b || ! x . equals ( a ) ) && ( ! s ||
! a . equals ( s ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } if ( a && ! this . _ . guardRTL ) { var g = f . type == CKEDITOR . NODE _ELEMENT ? f : f . getParent ( ) , j = f . type == CKEDITOR . NODE _ELEMENT ? e? f . getChild ( e - 1 ) : null : f . getPrevious ( ) ; this . _ . guardRTL = function ( a , b ) { return ( ! b || ! g . equals ( a ) ) && ( ! j|| ! a . equals ( j ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } var m = a ? this . _ . guardRTL : this . _ . guardLTR ; i= k ? function ( a , b ) { return m ( a , b ) === false ? false : k( a , b ) } : m ; if ( this . current ) d = this . current [ q] ( false , l , i ) ; else { if ( a ) d . type ==
CKEDITOR . NODE _ELEMENT && ( d = p> 0 ? d . getChild ( p - 1 ) : i ( d , true ) === false ? null : d . getPreviousSourceNode ( true , l, i ) ) ; else { d = f ; if ( d . type == CKEDITOR . NODE _ELEMENT && ! ( d = d . getChild ( e) ) ) d = i ( f , true ) === false ? null : f . getNextSourceNode ( true , l, i ) } d && i ( d ) === false && ( d = null ) } for ( ; d && ! this . _ . end ; ) { this . current = d ; if ( ! this . evaluator || this . evaluator ( d ) !== false ) { if ( ! b ) return d } else if ( b && this . evaluator ) return false ; d = d [ q] ( false , l , i ) } this . end ( ) ; return this . current = null } function e ( b ) { for ( var c , d = null ; c = a . call ( this , b ) ; ) d = c ; return d }
function b ( a ) { if ( j ( a ) ) return false ; if ( a . type == CKEDITOR . NODE _TEXT ) return true ; if ( a . type == CKEDITOR . NODE _ELEMENT ) { if ( a . is ( CKEDITOR . dtd . $inline ) || a . is ( "hr" ) || a . getAttribute ( "contenteditable" ) == "false" ) return true ; var b ; if ( b = ! CKEDITOR . env . needsBrFiller ) if ( b = a . is ( p ) ) a : { b = 0 ; for ( var c = a . getChildCount ( ) ; b < c ; ++ b ) if ( ! j ( a . getChild ( b ) ) ) { b = false ; break a } b = true } if ( b ) return true } return false } CKEDITOR . dom . walker = CKEDITOR . tools . createClass ( { $ : function ( a ) { this . range = a ; this . _ = { } } , proto : { end : function ( ) { this . _ . end = 1 } ,
( function ( ) { function a ( a , b ) { var c = this . range ; if ( this . _ . end ) return null ; if ( ! this . _ . start ) { this . _ . start = 1 ; if ( c . collapsed ) { this . end ( ) ; return null } c . optimize ( ) } var d , f = c . startContainer ; d = c . endContainer ; var m= c . startOffset , e = c . endOffset , h , E = this . guard , k = this . type , n = a ? "getPreviousSourceNode" : "getNextSourceNode" ; if ( ! a && ! this . _ . guardLTR ) { var r = d . type == CKEDITOR . NODE _ELEMENT ? d : d . getParent ( ) , o = d . type == CKEDITOR . NODE _ELEMENT ? d . getChild ( e ) : d . getNext ( ) ; this . _ . guardLTR = function ( a , b ) { return ( ! b || ! r . equals ( a ) ) && ( ! o ||
! a . equals ( o ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } if ( a && ! this . _ . guardRTL ) { var g = f . type == CKEDITOR . NODE _ELEMENT ? f : f . getParent ( ) , D = f . type == CKEDITOR . NODE _ELEMENT ? m? f . getChild ( m - 1 ) : null : f . getPrevious ( ) ; this . _ . guardRTL = function ( a , b ) { return ( ! b || ! g . equals ( a ) ) && ( ! D|| ! a . equals ( D ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } var i = a ? this . _ . guardRTL : this . _ . guardLTR ; h= E ? function ( a , b ) { return i ( a , b ) === false ? false : E( a , b ) } : i ; if ( this . current ) d = this . current [ n] ( false , k , h ) ; else { if ( a ) d . type ==
CKEDITOR . NODE _ELEMENT && ( d = e> 0 ? d . getChild ( e - 1 ) : h ( d , true ) === false ? null : d . getPreviousSourceNode ( true , k, h ) ) ; else { d = f ; if ( d . type == CKEDITOR . NODE _ELEMENT && ! ( d = d . getChild ( m) ) ) d = h ( f , true ) === false ? null : f . getNextSourceNode ( true , k, h ) } d && h ( d ) === false && ( d = null ) } for ( ; d && ! this . _ . end ; ) { this . current = d ; if ( ! this . evaluator || this . evaluator ( d ) !== false ) { if ( ! b ) return d } else if ( b && this . evaluator ) return false ; d = d [ n] ( false , k , h ) } this . end ( ) ; return this . current = null } function e ( b ) { for ( var c , d = null ; c = a . call ( this , b ) ; ) d = c ; return d }
function b ( a ) { if ( g ( a ) ) return false ; if ( a . type == CKEDITOR . NODE _TEXT ) return true ; if ( a . type == CKEDITOR . NODE _ELEMENT ) { if ( a . is ( CKEDITOR . dtd . $inline ) || a . is ( "hr" ) || a . getAttribute ( "contenteditable" ) == "false" ) return true ; var b ; if ( b = ! CKEDITOR . env . needsBrFiller ) if ( b = a . is ( m ) ) a : { b = 0 ; for ( var c = a . getChildCount ( ) ; b < c ; ++ b ) if ( ! g ( a . getChild ( b ) ) ) { b = false ; break a } b = true } if ( b ) return true } return false } CKEDITOR . dom . walker = CKEDITOR . tools . createClass ( { $ : function ( a ) { this . range = a ; this . _ = { } } , proto : { end : function ( ) { this . _ . end = 1 } ,
next : function ( ) { return a . call ( this ) } , previous : function ( ) { return a . call ( this , 1 ) } , checkForward : function ( ) { return a . call ( this , 0 , 1 ) !== false } , checkBackward : function ( ) { return a . call ( this , 1 , 1 ) !== false } , lastForward : function ( ) { return e . call ( this ) } , lastBackward : function ( ) { return e . call ( this , 1 ) } , reset : function ( ) { delete this . current ; this . _ = { } } } } ) ; var c = { block : 1 , "list-item" : 1 , table : 1 , "table-row-group" : 1 , "table-header-group" : 1 , "table-footer-group" : 1 , "table-row" : 1 , "table-column-group" : 1 , "table-column" : 1 , "table-cell" : 1 ,
"table-caption" : 1 } , f = { absolute : 1 , fixed : 1 } ; CKEDITOR . dom . element . prototype . isBlockBoundary = function ( a ) { return this . getComputedStyle ( "float" ) == "none" && ! ( this . getComputedStyle ( "position" ) in f ) && c [ this . getComputedStyle ( "display" ) ] ? true : ! ! ( this . is ( CKEDITOR . dtd . $block ) || a && this . is ( a ) ) } ; CKEDITOR . dom . walker . blockBoundary = function ( a ) { return function ( b ) { return ! ( b . type == CKEDITOR . NODE _ELEMENT && b . isBlockBoundary ( a ) ) } } ; CKEDITOR . dom . walker . listItemBoundary = function ( ) { return this . blockBoundary ( { br : 1 } ) } ; CKEDITOR . dom . walker . bookmark =
function ( a , b ) { function c ( a ) { return a && a . getName && a . getName ( ) == "span" && a . data ( "cke-bookmark" ) } return function ( d ) { var f , e ; f = d && d . type != CKEDITOR . NODE _ELEMENT && ( e = d . getParent ( ) ) && c ( e ) ; f = a ? f : f || c ( d ) ; return ! ! ( b ^ f ) } } ; CKEDITOR . dom . walker . whitespaces = function ( a ) { return function ( b ) { var c ; b && b . type == CKEDITOR . NODE _TEXT && ( c = ! CKEDITOR . tools . trim ( b . getText ( ) ) || CKEDITOR . env . webkit && b . getText ( ) == " ") ; return ! ! ( a ^ c ) } } ; CKEDITOR . dom . walker . invisible = function ( a ) { var b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . env . webkit ?
1 : 0 ; return function ( d ) { if ( b ( d ) ) d = 1 ; else { d . type == CKEDITOR . NODE _TEXT && ( d = d . getParent ( ) ) ; d = d . $ . offsetWidth <= c } return ! ! ( a ^ d ) } } ; CKEDITOR . dom . walker . nodeType = function ( a , b ) { return function ( c ) { return ! ! ( b ^ c . type == a ) } } ; CKEDITOR . dom . walker . bogus = function ( a ) { function b ( a ) { return ! g( a ) && ! h ( a ) } return function ( c ) { var f = CKEDITOR . env . needsBrFiller ? c . is && c . is ( "br" ) : c . getText && d . test ( c . getText ( ) ) ; if ( f ) { f = c . getParent ( ) ; c = c . getNext ( b ) ; f = f . isBlockBoundary ( ) && ( ! c || c . type == CKEDITOR . NODE _ELEMENT && c . isBlockBoundary ( ) ) } return ! ! ( a ^
f ) } } ; CKEDITOR . dom . walker . temp = function ( a ) { return function ( b ) { b . type != CKEDITOR . NODE _ELEMENT && ( b = b . getParent ( ) ) ; b = b && b . hasAttribute ( "data-cke-temp" ) ; return ! ! ( a ^ b ) } } ; var d = /^[\t\r\n ]*(?: |\xa0)$/ , g = CKEDITOR . dom . walker . whitespaces ( ) , h = CKEDITOR . dom . walker . bookmark ( ) , m = CKEDITOR . dom . walker . temp ( ) ; CKEDITOR . dom . walker . ignored = function ( a ) { return function ( b ) { b = g( b ) || h ( b ) || m ( b ) ; return ! ! ( a ^ b ) } } ; var j = CKEDITOR . dom . walker . ignored ( ) , p = function ( a ) { var b = { } , c ; for ( c in a ) CKEDITOR . dtd [ c ] [ "#" ] && ( b [ c ] = 1 ) ; return b } ( CKEDITOR . dtd . $block ) ;
CKEDITOR . dom . walker . editable = function ( a ) { return function ( c ) { return ! ! ( a ^ b ( c ) ) } } ; CKEDITOR . dom . element . prototype . getBogus = function ( ) { var a = this ; do a = a . getPreviousSourceNode ( ) ; while ( h( a ) || g ( a ) || a . type == CKEDITOR . NODE _ELEMENT && a . is ( CKEDITOR . dtd . $inline ) && ! a . is ( CKEDITOR . dtd . $empty ) ) ; return a && ( CKEDITOR . env . needsBrFiller ? a . is && a . is ( "br" ) : a . getText && d . test ( a . getText ( ) ) ) ? a : false } } ) ( ) ;
function ( a , b ) { function c ( a ) { return a && a . getName && a . getName ( ) == "span" && a . data ( "cke-bookmark" ) } return function ( d ) { var f , m ; f = d && d . type != CKEDITOR . NODE _ELEMENT && ( m = d . getParent ( ) ) && c ( m ) ; f = a ? f : f || c ( d ) ; return ! ! ( b ^ f ) } } ; CKEDITOR . dom . walker . whitespaces = function ( a ) { return function ( b ) { var c ; b && b . type == CKEDITOR . NODE _TEXT && ( c = ! CKEDITOR . tools . trim ( b . getText ( ) ) || CKEDITOR . env . webkit && b . getText ( ) == " \u200B ") ; return ! ! ( a ^ c ) } } ; CKEDITOR . dom . walker . invisible = function ( a ) { var b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . env . webkit ?
1 : 0 ; return function ( d ) { if ( b ( d ) ) d = 1 ; else { d . type == CKEDITOR . NODE _TEXT && ( d = d . getParent ( ) ) ; d = d . $ . offsetWidth <= c } return ! ! ( a ^ d ) } } ; CKEDITOR . dom . walker . nodeType = function ( a , b ) { return function ( c ) { return ! ! ( b ^ c . type == a ) } } ; CKEDITOR . dom . walker . bogus = function ( a ) { function b ( a ) { return ! h( a ) && ! l ( a ) } return function ( c ) { var f = CKEDITOR . env . needsBrFiller ? c . is && c . is ( "br" ) : c . getText && d . test ( c . getText ( ) ) ; if ( f ) { f = c . getParent ( ) ; c = c . getNext ( b ) ; f = f . isBlockBoundary ( ) && ( ! c || c . type == CKEDITOR . NODE _ELEMENT && c . isBlockBoundary ( ) ) } return ! ! ( a ^
f ) } } ; CKEDITOR . dom . walker . temp = function ( a ) { return function ( b ) { b . type != CKEDITOR . NODE _ELEMENT && ( b = b . getParent ( ) ) ; b = b && b . hasAttribute ( "data-cke-temp" ) ; return ! ! ( a ^ b ) } } ; var d = /^[\t\r\n ]*(?: |\xa0)$/ , h = CKEDITOR . dom . walker . whitespaces ( ) , l = CKEDITOR . dom . walker . bookmark ( ) , i = CKEDITOR . dom . walker . temp ( ) ; CKEDITOR . dom . walker . ignored = function ( a ) { return function ( b ) { b = h( b ) || l ( b ) || i ( b ) ; return ! ! ( a ^ b ) } } ; var g = CKEDITOR . dom . walker . ignored ( ) , m = function ( a ) { var b = { } , c ; for ( c in a ) CKEDITOR . dtd [ c ] [ "#" ] && ( b [ c ] = 1 ) ; return b } ( CKEDITOR . dtd . $block ) ;
CKEDITOR . dom . walker . editable = function ( a ) { return function ( c ) { return ! ! ( a ^ b ( c ) ) } } ; CKEDITOR . dom . element . prototype . getBogus = function ( ) { var a = this ; do a = a . getPreviousSourceNode ( ) ; while ( l( a ) || h ( a ) || a . type == CKEDITOR . NODE _ELEMENT && a . is ( CKEDITOR . dtd . $inline ) && ! a . is ( CKEDITOR . dtd . $empty ) ) ; return a && ( CKEDITOR . env . needsBrFiller ? a . is && a . is ( "br" ) : a . getText && d . test ( a . getText ( ) ) ) ? a : false } } ) ( ) ;
CKEDITOR . dom . range = function ( a ) { this . endOffset = this . endContainer = this . startOffset = this . startContainer = null ; this . collapsed = true ; var e = a instanceof CKEDITOR . dom . document ; this . document = e ? a : a . getDocument ( ) ; this . root = e ? a . getBody ( ) : a } ;
( function ( ) { function a ( ) { var a = false , b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . dom . walker . bookmark ( true ) , f = CKEDITOR . dom . walker . bogus ( ) ; return function ( e ) { if ( c ( e ) || b ( e ) ) return true ; if ( f ( e ) && ! a ) return a = true ; return e . type == CKEDITOR . NODE _TEXT && ( e . hasAscendant ( "pre" ) || CKEDITOR . tools . trim ( e . getText ( ) ) . length ) || e . type == CKEDITOR . NODE _ELEMENT && ! e . is ( d ) ? false : true } } function e ( a ) { var b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . dom . walker . bookmark ( 1 ) ; return function ( d ) { return c ( d ) || b ( d ) ? true : ! a && g ( d ) ||
d . type == CKEDITOR . NODE _ELEMENT && d . is ( CKEDITOR . dtd . $removeEmpty ) } } function b ( a ) { return function ( ) { var b ; return this [ a ? "getPreviousNode" : "getNextNode" ] ( function ( a ) { ! b && j ( a ) && ( b = a ) ; return m( a ) && ! ( g ( a ) && a . equals ( b ) ) } ) } } var c = function ( a ) { a . collapsed = a . startContainer && a . endContainer && a . startContainer . equals ( a . endContainer ) && a . startOffset == a . endOffset } , f = function ( a , b , c , d ) { a . optimizeBookmark ( ) ; var f = a . startContainer , e = a . endContainer , o= a . startOffset , r = a . endOffset , i , k ; if ( e . type == CKEDITOR . NODE _TEXT ) e = e . split ( r ) ;
else if ( e . getChildCount ( ) > 0 ) if ( r >= e . getChildCount ( ) ) { e = e . append ( a . document . createText ( "" ) ) ; k = true } else e = e . getChild ( r ) ; if ( f . type == CKEDITOR . NODE _TEXT ) { f . split ( o ) ; f . equals ( e ) && ( e = f . getNext ( ) ) } else if ( o) if ( o >= f . getChildCount ( ) ) { f = f . append ( a . document . createText ( "" ) ) ; i = true } else f = f . getChild ( o ) . getPrevious ( ) ; else { f = f . append ( a . document . createText ( "" ) , 1 ) ; i= true } var o = f . getParents ( ) , r = e . getParents ( ) , l , q , x ; for ( l = 0 ; l < o . length ; l ++ ) { q = o [ l ] ; x = r [ l ] ; if ( ! q . equals ( x ) ) break } for ( var s = c , g , j , m , F = l ; F < o . length ; F ++ ) { g =
o[ F ] ; s && ! g . equals ( f ) && ( j = s . append ( g . clone ( ) ) ) ; for ( g = g . getNext ( ) ; g ; ) { if ( g . equals ( r [ F ] ) || g . equals ( e ) ) break ; m = g . getNext ( ) ; if ( b == 2 ) s. append ( g . clone ( true ) ) ; else { g . remove ( ) ; b == 1 && s. append ( g ) } g = m } s && ( s = j ) } s = c ; for ( c = l ; c < r . length ; c ++ ) { g = r [ c ] ; b > 0 && ! g . equals ( e ) && ( j = s . append ( g . clone ( ) ) ) ; if ( ! o[ c ] || g . $ . parentNode != o [ c ] . $ . parentNode ) for ( g= g . getPrevious ( ) ; g ; ) { if ( g . equals ( o [ c ] ) || g . equals ( f ) ) break ; m = g . getPrevious ( ) ; if ( b == 2 ) s. $ . insertBefore ( g . $ . cloneNode ( true ) , s . $ . firstChild ) ; else { g . remove ( ) ; b == 1 && s. $ . insertBefore ( g . $ ,
s. $ . firstChild ) } g = m } s && ( s = j ) } if ( b == 2 ) { q = a . startContainer ; if ( q . type == CKEDITOR . NODE _TEXT ) { q. $ . data = q . $ . data + q . $ . nextSibling . data ; q . $ . parentNode . removeChild ( q . $ . nextSibling ) } a = a . endContainer ; if ( a . type == CKEDITOR . NODE _TEXT && a . $ . nextSibling ) { a . $ . data = a . $ . data + a . $ . nextSibling . data ; a . $ . parentNode . removeChild ( a . $ . nextSibling ) } } else { if ( q&& x && ( f . $ . parentNode != q . $ . parentNode || e . $ . parentNode != x. $ . parentNode ) ) { b = x . getIndex ( ) ; i && x . $ . parentNode == f . $ . parentNode && b -- ; if ( d && q . type == CKEDITOR . NODE _ELEMENT ) { d = CKEDITOR . dom . element . createFromHtml ( '<span data-cke-bookmark="1" style="display:none"> </span>' ,
a . document ) ; d . insertAfter ( q) ; q . mergeSiblings ( false ) ; a . moveToBookmark ( { startNode : d } ) } else a . setStart ( x . getParent ( ) , b ) } a . collapse ( true ) } i&& f . remove ( ) ; k && e . $ . parentNode && e . remove ( ) } , d = { abbr : 1 , acronym : 1 , b : 1 , bdo : 1 , big : 1 , cite : 1 , code : 1 , del : 1 , dfn : 1 , em : 1 , font : 1 , i : 1 , ins : 1 , label : 1 , kbd : 1 , q : 1 , samp : 1 , small : 1 , span : 1 , strike : 1 , strong : 1 , sub : 1 , sup : 1 , tt : 1 , u : 1 , "var" : 1 } , g = CKEDITOR . dom . walker . bogus ( ) , h= /^[\t\r\n ]*(?: |\xa0)$/ , m = CKEDITOR . dom . walker . editable ( ) , j = CKEDITOR . dom . walker . ignored ( true ) ; CKEDITOR . dom . range . prototype =
{ clone : function ( ) { var a = new CKEDITOR . dom . range ( this . root ) ; a . startContainer= this . startContainer ;a . startOffset = this . startOffset ; a . endContainer= this . endContainer ; a . endOffset = this . endOffset ; a . collapsed = this . collapsed ; return a } , collapse : function ( a ) { if ( a ) { this . endContainer= this . startContainer ; this . endOffset = this . startOffset } else { this . startContainer= this . endContainer ; this . startOffset = this . endOffset } this . collapsed = true } , cloneContents : function ( ) { var a = new CKEDITOR . dom . documentFragment ( this . document ) ; this . collapsed ||
f ( this , 2 , a ) ; return a } , deleteContents : function ( a ) { this . collapsed || f ( this , 0 , null , a ) } , extractContents : function ( a ) { var b = new CKEDITOR . dom . documentFragment ( this . document ) ; this . collapsed || f ( this , 1 , b , a ) ; return b } , createBookmark : function ( a ) { var b , c , d , f , e = this . collapsed ; b = this . document . createElement ( "span" ) ; b . data ( "cke-bookmark" , 1 ) ; b . setStyle ( "display" , "none" ) ; b . setHtml ( " " ) ; if ( a ) { d = "cke_bm_" + CKEDITOR . tools . getNextNumber ( ) ; b . setAttribute ( "id" , d + ( e ? "C" : "S" ) ) } if ( ! e ) { c = b . clone ( ) ; c . setHtml ( " " ) ; a && c . setAttribute ( "id" ,
d + "E" ) ; f = this . clone ( ) ; f . collapse ( ) ; f . insertNode ( c ) } f = this . clone ( ) ; f . collapse ( true ) ; f . insertNode ( b ) ; if ( c ) { this . setStartAfter ( b ) ; this . setEndBefore ( c ) } else this . moveToPosition ( b , CKEDITOR . POSITION _AFTER _END ) ; return { startNode : a ? d + ( e ? "C" : "S" ) : b , endNode : a ? d + "E" : c , serializable : a , collapsed : e } } , createBookmark2 : function ( ) { function a ( b) { var c = b . container , d = b . offset , f ; f = c ; var e = d ; f = f . type != CKEDITOR . NODE _ELEMENT || e=== 0 || e == f . getChildCount ( ) ? 0 : f . getChild ( e - 1 ) . type == CKEDITOR . NODE _TEXT && f. getChild ( e ) . type == CKEDITOR . NODE _TEXT ;
if ( f ) { c = c . getChild ( d - 1 ) ; d = c . getLength ( ) } c . type == CKEDITOR . NODE _ELEMENT && d> 1 && ( d = c . getChild ( d - 1 ) . getIndex ( true ) + 1 ) ; if ( c . type == CKEDITOR . NODE _TEXT ) { f= c ; for ( e = 0 ; ( f = f . getPrevious ( ) ) && f . type == CKEDITOR . NODE _TEXT ; ) e= e + f . getLength ( ) ; d = d + e } b . container = c ; b . offset = d } return function ( b ) { var c = this . collapsed , d = { container : this . startContainer , offset : this . startOffset } , f = { container : this . endContainer , offset : this . endOffset } ; if ( b ) { a ( d ) ; c || a ( f ) } return { start : d . container . getAddress ( b ) , end : c ? null : f . container . getAddress ( b ) ,
startOffset : d . offset , endOffset : f . offset , normalized : b , collapsed : c , is2 : true } } } ( ) , moveToBookmark : function ( a ) { if ( a . is2 ) { var b = this . document . getByAddress ( a . start , a . normalized ) , c = a . startOffset , d = a . end && this . document . getByAddress ( a . end , a . normalized ) , a = a . endOffset ; this . setStart ( b , c ) ; d ? this . setEnd ( d , a ) : this . collapse ( true ) } else { b = ( c = a . serializable ) ? this . document . getById ( a . startNode ) : a . startNode ; a = c ? this . document . getById ( a . endNode ) : a . endNode ; this . setStartBefore ( b ) ; b . remove ( ) ; if ( a ) { this . setEndBefore ( a ) ; a . remove ( ) } else this . collapse ( true ) } } ,
getBoundaryNodes : function ( ) { var a = this . startContainer , b = this . endContainer , c = this . startOffset , d = this . endOffset , f ; if ( a . type == CKEDITOR . NODE _ELEMENT ) { f = a . getChildCount ( ) ; if ( f > c ) a = a . getChild ( c ) ; else if ( f < 1 ) a = a . getPreviousSourceNode ( ) ; else { for ( a = a . $ ; a . lastChild ; ) a = a . lastChild ; a = new CKEDITOR . dom . node ( a ) ; a = a . getNextSourceNode ( ) || a } } if ( b . type == CKEDITOR . NODE _ELEMENT ) { f = b . getChildCount ( ) ; if ( f > d ) b = b . getChild ( d ) . getPreviousSourceNode ( true ) ; else if ( f < 1 ) b = b . getPreviousSourceNode ( ) ; else { for ( b = b . $ ; b . lastChild ; ) b =
b . lastChild ; b = new CKEDITOR . dom . node ( b ) } } a . getPosition ( b ) & CKEDITOR . POSITION _FOLLOWING && ( a = b ) ; return { startNode : a , endNode : b } } , getCommonAncestor : function ( a , b ) { var c = this . startContainer , d = this . endContainer , c = c . equals ( d ) ? a && c . type == CKEDITOR . NODE _ELEMENT && this . startOffset == this . endOffset - 1 ? c . getChild ( this . startOffset ) : c : c . getCommonAncestor ( d ) ; return b && ! c . is ? c . getParent ( ) : c } , optimize : function ( ) { var a = this . startContainer , b = this . startOffset ; a . type != CKEDITOR . NODE _ELEMENT && ( b ? b >= a . getLength ( ) && this . setStartAfter ( a ) :
this . setStartBefore ( a ) ) ; a = this . endContainer ; b = this . endOffset ; a . type != CKEDITOR . NODE _ELEMENT && ( b ? b >= a . getLength ( ) && this . setEndAfter ( a ) : this . setEndBefore ( a ) ) } , optimizeBookmark : function ( ) { var a = this . startContainer , b = this . endContainer ; a . is && ( a . is ( "span" ) && a . data ( "cke-bookmark" ) ) && this . setStartAt ( a , CKEDITOR . POSITION _BEFORE _START ) ; b && ( b . is && b . is ( "span" ) && b . data ( "cke-bookmark" ) ) && this . setEndAt ( b , CKEDITOR . POSITION _AFTER _END ) } , trim : function ( a , b ) { var c = this . startContainer , d = this . startOffset , f = this . collapsed ;
if ( ( ! a || f ) && c && c . type == CKEDITOR . NODE _TEXT ) { if ( d ) if ( d >= c . getLength ( ) ) { d = c . getIndex ( ) + 1 ; c = c . getParent ( ) } else { var e = c . split ( d ) , d = c . getIndex ( ) + 1 , c = c . getParent ( ) ; if ( this . startContainer . equals ( this . endContainer ) ) this . setEnd ( e , this . endOffset - this . startOffset ) ; else if ( c . equals ( this . endContainer ) ) this . endOffset = this . endOffset + 1 } else { d = c . getIndex ( ) ; c = c . getParent ( ) } this . setStart ( c , d ) ; if ( f ) { this . collapse ( true ) ; return } } c = this . endContainer ; d = this . endOffset ; if ( ! b && ! f && c && c . type == CKEDITOR . NODE _TEXT ) { if ( d ) { d >= c . getLength ( ) ||
c . split ( d ) ; d = c . getIndex ( ) + 1 } else d = c . getIndex ( ) ; c = c . getParent ( ) ; this . setEnd ( c , d ) } } , enlarge : function ( a , b ) { function c ( a ) { return a && a . type == CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "contenteditable" ) ? null : a } var d = RegExp ( /[^\s\ufeff]/ ) ; switch ( a ) { case CKEDITOR . ENLARGE _INLINE : var f = 1 ; case CKEDITOR . ENLARGE _ELEMENT : if ( this . collapsed ) break ; var e = this . getCommonAncestor ( ) , o = this . root , r , i , k , l , q , x = false , s , g ; s = this . startContainer ; var j = this . startOffset ; if ( s . type == CKEDITOR . NODE _TEXT ) { if ( j ) { s = ! CKEDITOR . tools . trim ( s . substring ( 0 ,
j ) ) . length && s; x = ! ! s } if ( s && ! ( l = s . getPrevious ( ) ) ) k = s . getParent ( ) } else { j && ( l = s . getChild ( j - 1 ) || s . getLast ( ) ) ; l || ( k = s ) } for ( k = c ( k ) ; k || l ; ) { if ( k && ! l ) { ! q && k . equals ( e ) && ( q = true ) ; if ( f ? k . isBlockBoundary ( ) : ! o . contains ( k ) ) break ; if ( ! x || k . getComputedStyle ( "display" ) != "inline" ) { x= false ; q ? r = k : this . setStartBefore ( k ) } l = k . getPrevious ( ) } for ( ; l ; ) { s = false ; if ( l . type == CKEDITOR . NODE _COMMENT ) l = l . getPrevious ( ) ; else { if ( l . type == CKEDITOR . NODE _TEXT ) { g = l . getText ( ) ; d . test ( g ) && ( l = null ) ; s = /[\s\ufeff]$/ . test ( g ) } else if ( ( l . $ . offsetWidth >
( CKEDITOR . env . webkit ? 1 : 0 ) || b && l. is ( "br" ) ) && ! l . data ( "cke-bookmark" ) ) if ( x&& CKEDITOR . dtd . $removeEmpty [ l . getName ( ) ] ) { g = l . getText ( ) ; if ( d . test ( g) ) l = null ; else for ( var j = l . $ . getElementsByTagName ( "*" ) , m= 0 , F ; F = j [ m ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ F . nodeName . toLowerCase ( ) ] ) { l= null ; break } l && ( s = ! ! g . length ) } else l = null ; s && ( x ? q ? r = k : k && this . setStartBefore ( k ) : x = true ) ; if ( l ) { s = l . getPrevious ( ) ; if ( ! k && ! s ) { k = l ; l = null ; break } l = s } else k = null } } k && ( k = c ( k . getParent ( ) ) ) } s = this . endContainer ; j = this . endOffset ; k = l = null ; q = x = false ;
var h = function ( a , b ) { var c = new CKEDITOR . dom . range ( o ) ; c . setStart ( a , b ) ; c . setEndAt ( o , CKEDITOR . POSITION _BEFORE _END ) ; var c = new CKEDITOR . dom . walker ( c ) , f ; for ( c . guard = function ( a ) { return ! ( a . type == CKEDITOR . NODE _ELEMENT && a . isBlockBoundary ( ) ) } ; f = c . next ( ) ; ) { if ( f . type != CKEDITOR . NODE _TEXT ) return false ; g = f != a ? f . getText ( ) : f . substring ( b ) ; if ( d . test ( g ) ) return false } return true } ; if ( s . type == CKEDITOR . NODE _TEXT ) if ( CKEDITOR . tools . trim ( s . substring ( j ) ) . length ) x = true ; else { x = ! s . getLength ( ) ; if ( j == s . getLength ( ) ) { if ( ! ( l = s . getNext ( ) ) ) k =
s. getParent( ) } else h( s , j ) && ( k = s . getParent ( ) ) } else ( l = s . getChild ( j ) ) || ( k = s ) ; for ( ; k || l ; ) { if ( k && ! l ) { ! q && k . equals ( e ) && ( q = true ) ; if ( f ? k . isBlockBoundary ( ) : ! o . contains ( k ) ) break ; if ( ! x || k . getComputedStyle ( "display" ) != "inline" ) { x= false ; q ? i = k : k && this . setEndAfter ( k ) } l = k . getNext ( ) } for ( ; l ; ) { s = false ; if ( l . type == CKEDITOR . NODE _TEXT ) { g= l . getText ( ) ; h ( l , 0 ) || ( l = null ) ; s = /^[\s\ufeff]/ . test ( g ) } else if ( l . type == CKEDITOR . NODE _ELEMENT ) { if ( ( l . $ . offsetWidth > 0 || b && l . is ( "br" ) ) && ! l . data ( "cke-bookmark" ) ) if ( x && CKEDITOR . dtd . $removeEmpty [ l . getName ( ) ] ) { g =
l . getText ( ) ; if ( d . test ( g) ) l = null ; else { j = l . $ . getElementsByTagName ( "*" ) ; for ( m= 0 ; F = j [ m ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ F . nodeName . toLowerCase ( ) ] ) { l= null ; break } } l && ( s = ! ! g . length ) } else l = null } else s = 1 ; s && x && ( q ? i = k : this . setEndAfter ( k ) ) ; if ( l ) { s = l . getNext ( ) ; if ( ! k && ! s ) { k = l ; l = null ; break } l = s } else k = null } k && ( k = c ( k . getParent ( ) ) ) } if ( r && i ) { e = r . contains ( i ) ? i : r ; this . setStartBefore ( e ) ; this . setEndAfter ( e ) } break ; case CKEDITOR . ENLARGE _BLOCK _CONTENTS : case CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : k = new CKEDITOR . dom . range ( this . root ) ;
o= this . root ; k. setStartAt ( o , CKEDITOR . POSITION _AFTER _START ) ; k . setEnd ( this . startContainer , this . startOffset ) ; k= new CKEDITOR . dom . walker ( k ) ; var J , A , E = CKEDITOR . dom . walker . blockBoundary ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? { br : 1 } : null ) , v= null , z = function ( a ) { if ( a . type == CKEDITOR . NODE _ELEMENT && a . getAttribute ( "contenteditable" ) == "false" ) if ( v) { if ( v . equals ( a ) ) { v = null ; return } } else v = a ; else if ( v ) return ; var b = E ( a ) ; b || ( J = a ) ; return b } , f = function ( a ) { var b = z ( a ) ; ! b && ( a . is && a . is ( "br" ) ) && ( A = a ) ; return b } ; k . guard = z ; k = k . lastBackward ( ) ;
J= J || o ; this . setStartAt ( J , ! J . is ( "br" ) && ( ! k && this . checkStartOfBlock ( ) || k && J . contains ( k ) ) ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _AFTER _END ) ; if ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ) { k= this . clone ( ) ; k = new CKEDITOR . dom . walker ( k ) ; var B = CKEDITOR . dom . walker . whitespaces ( ) , D = CKEDITOR . dom . walker . bookmark ( ) ; k . evaluator = function ( a ) { return ! B( a ) && ! D ( a ) } ; if ( ( k = k . previous ( ) ) && k . type == CKEDITOR . NODE _ELEMENT && k . is ( "br" ) ) break } k = this . clone ( ) ; k . collapse ( ) ; k . setEndAt ( o , CKEDITOR . POSITION _BEFORE _END ) ; k = new CKEDITOR . dom . walker ( k ) ;
k .guard = a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? f : z; J = v = A = null ; k = k . lastForward ( ) ; J = J || o ; this . setEndAt ( J , ! k && this . checkEndOfBlock ( ) || k && J . contains ( k ) ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _BEFORE _START ) ; A&& this . setEndAfter ( A ) } } , shrink : function ( a , b , c ) { if ( ! this . collapsed ) { var a = a || CKEDITOR . SHRINK _TEXT , d = this . clone ( ) , f = this . startContainer , e = this . endContainer , o = this . startOffset , g = this . endOffset , i = 1 , k = 1 ; if ( f && f . type == CKEDITOR . NODE _TEXT ) if ( o ) if ( o >= f . getLength ( ) ) d . setStartAfter ( f ) ; else { d . setStartBefore ( f ) ;
i = 0} else d . setStartBefore ( f ) ; if ( e && e . type == CKEDITOR . NODE _TEXT ) if ( g ) if ( g >= e . getLength ( ) ) d . setEndAfter ( e ) ; else { d . setEndAfter ( e ) ; k = 0 } else d . setEndBefore ( e ) ; var d = new CKEDITOR . dom . walker ( d ) , l = CKEDITOR . dom . walker . bookmark ( ) ; d . evaluator = function ( b ) { return b . type == ( a == CKEDITOR . SHRINK _ELEMENT ? CKEDITOR . NODE _ELEMENT : CKEDITOR . NODE _TEXT ) } ; var q ; d . guard = function ( b , d ) { if ( l ( b ) ) return true ; if ( a == CKEDITOR . SHRINK _ELEMENT && b . type == CKEDITOR . NODE _TEXT || d && b . equals ( q ) || c === false && b . type == CKEDITOR . NODE _ELEMENT && b . isBlockBoundary ( ) ||
b . type == CKEDITOR . NODE _ELEMENT && b . hasAttribute ( "contenteditable" ) ) return false ; ! d && b . type == CKEDITOR . NODE _ELEMENT && ( q = b ) ; return true } ; if ( i ) ( f = d [ a == CKEDITOR . SHRINK _ELEMENT ? "lastForward" : "next" ] ( ) ) && this . setStartAt ( f , b ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _BEFORE _START ) ; if ( k ) { d . reset ( ) ; ( d = d [ a == CKEDITOR . SHRINK _ELEMENT ? "lastBackward" : "previous" ] ( ) ) && this . setEndAt ( d , b ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _AFTER _END ) } return ! ( ! i && ! k ) } } , insertNode : function ( a ) { this . optimizeBookmark ( ) ; this . trim ( false ,
true ) ; var b = this . startContainer , c = b . getChild ( this . startOffset ) ; c ? a . insertBefore ( c ) : b . append ( a ) ; a . getParent ( ) && a . getParent ( ) . equals ( this . endContainer ) && this . endOffset ++ ; this . setStartBefore ( a ) } , moveToPosition : function ( a , b ) { this . setStartAt ( a , b ) ; this . collapse ( true ) } , moveToRange : function ( a ) { this . setStart ( a . startContainer , a . startOffset ) ; this . setEnd ( a . endContainer , a . endOffset ) } , selectNodeContents : function ( a ) { this . setStart ( a , 0 ) ; this . setEnd ( a , a . type == CKEDITOR . NODE _TEXT ? a . getLength ( ) : a . getChildCount ( ) ) } , setStart : function ( a ,
b ) { if ( a . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $empty [ a . getName ( ) ] ) { b = a . getIndex ( ) ; a = a . getParent ( ) } this . startContainer= a ; this . startOffset = b ; if ( ! this . endContainer ) { this . endContainer= a ; this . endOffset = b } c ( this ) } , setEnd : function ( a , b ) { if ( a . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $empty [ a . getName ( ) ] ) { b = a . getIndex ( ) + 1 ; a = a . getParent ( ) } this . endContainer= a ; this . endOffset = b ; if ( ! this . startContainer ) { this . startContainer = a ; this . startOffset = b } c ( this ) } , setStartAfter : function ( a ) { this . setStart ( a . getParent ( ) , a . getIndex ( ) +
1 ) } , setStartBefore : function ( a ) { this . setStart ( a . getParent ( ) , a . getIndex ( ) ) } , setEndAfter : function ( a ) { this . setEnd ( a . getParent ( ) , a . getIndex ( ) + 1 ) } , setEndBefore : function ( a ) { this . setEnd ( a . getParent ( ) , a . getIndex ( ) ) } , setStartAt : function ( a , b ) { switch ( b ) { case CKEDITOR . POSITION _AFTER _START : this . setStart ( a , 0 ) ; break ; case CKEDITOR . POSITION _BEFORE _END : a . type == CKEDITOR . NODE _TEXT ? this . setStart ( a , a . getLength ( ) ) : this . setStart ( a , a . getChildCount ( ) ) ; break ; case CKEDITOR . POSITION _BEFORE _START : this . setStartBefore ( a ) ; break ; case CKEDITOR . POSITION _AFTER _END : this . setStartAfter ( a ) } c ( this ) } ,
setEndAt : function ( a , b ) { switch ( b ) { case CKEDITOR . POSITION _AFTER _START : this . setEnd ( a , 0 ) ; break ; case CKEDITOR . POSITION _BEFORE _END : a . type == CKEDITOR . NODE _TEXT ? this . setEnd ( a , a . getLength ( ) ) : this . setEnd ( a , a . getChildCount ( ) ) ; break ; case CKEDITOR . POSITION _BEFORE _START : this . setEndBefore ( a ) ; break ; case CKEDITOR . POSITION _AFTER _END : this . setEndAfter ( a ) } c ( this ) } , fixBlock : function ( a , b ) { var c = this . createBookmark ( ) , d = this . document . createElement ( b ) ; this . collapse ( a ) ; this . enlarge ( CKEDITOR . ENLARGE _BLOCK _CONTENTS ) ; this . extractContents ( ) . appendTo ( d ) ;
d . trim ( ) ; d . appendBogus ( ) ; this . insertNode ( d ) ; this . moveToBookmark ( c ) ; return d } , splitBlock : function ( a ) { var b = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) , c = new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) , d = b . block , f = c . block , e = null ; if ( ! b . blockLimit . equals ( c . blockLimit ) ) return null ; if ( a != "br" ) { if ( ! d ) { d = this . fixBlock ( true , a ) ; f = ( new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) ) . block } f || ( f = this . fixBlock ( false , a ) ) } a = d && this . checkStartOfBlock ( ) ; b = f && this . checkEndOfBlock ( ) ;
this . deleteContents ( ) ; if ( d && d . equals ( f ) ) if ( b ) { e = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) ; this . moveToPosition ( f , CKEDITOR . POSITION _AFTER _END ) ; f = null } else if ( a ) { e = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) ; this . moveToPosition ( d , CKEDITOR . POSITION _BEFORE _START ) ; d = null } else { f = this . splitElement ( d ) ; d . is ( "ul" , "ol" ) || d . appendBogus ( ) } return { previousBlock : d , nextBlock : f , wasStartOfBlock : a , wasEndOfBlock : b , elementPath : e } } , splitElement : function ( a ) { if ( ! this . collapsed ) return null ;
this . setEndAt ( a , CKEDITOR . POSITION _BEFORE _END ) ; var b = this . extractContents ( ) , c = a . clone ( false ) ; b . appendTo ( c ) ; c . insertAfter ( a ) ; this . moveToPosition ( a , CKEDITOR . POSITION _AFTER _END ) ; return c } , removeEmptyBlocksAtEnd : function ( ) { function a ( d ) { return function ( a ) { return b ( a ) || ( c ( a ) || a . type == CKEDITOR . NODE _ELEMENT && a . isEmptyInlineRemoveable ( ) ) || d . is ( "table" ) && a . is ( "caption" ) ? false : true } } var b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . dom . walker . bookmark ( false ) ; return function ( b ) { for ( var c = this . createBookmark ( ) ,
d = this [ b ? "endPath" : "startPath" ] ( ) , f = d . block || d . blockLimit , e ; f && ! f . equals ( d . root ) && ! f . getFirst ( a ( f ) ) ; ) { e = f . getParent ( ) ; this [ b ? "setEndAt" : "setStartAt" ] ( f , CKEDITOR . POSITION _AFTER _END ) ; f . remove ( 1 ) ; f = e } this . moveToBookmark ( c ) } } ( ) , startPath : function ( ) { return new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) } , endPath : function ( ) { return new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) } , checkBoundaryOfElement : function ( a , b ) { var c = b == CKEDITOR . START , d = this . clone ( ) ; d . collapse ( c ) ; d [ c ? "setStartAt" :
"setEndAt" ] ( a , c ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _BEFORE _END ) ; d = new CKEDITOR . dom . walker ( d ) ; d . evaluator = e ( c ) ; return d [ c ? "checkBackward" : "checkForward" ] ( ) } , checkStartOfBlock : function ( ) { var b = this . startContainer , c = this . startOffset ; if ( CKEDITOR . env . ie && c && b . type == CKEDITOR . NODE _TEXT ) { b = CKEDITOR . tools . ltrim ( b . substring ( 0 , c ) ) ; h . test ( b ) && this . trim ( 0 , 1 ) } this . trim ( ) ; b = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) ; c = this . clone ( ) ; c . collapse ( true ) ; c . setStartAt ( b . block || b . blockLimit ,
CKEDITOR . POSITION _AFTER _START ) ; b = new CKEDITOR . dom . walker ( c ) ; b . evaluator = a ( ) ; return b . checkBackward ( ) } , checkEndOfBlock : function ( ) { var b = this . endContainer , c = this . endOffset ; if ( CKEDITOR . env . ie && b . type == CKEDITOR . NODE _TEXT ) { b = CKEDITOR . tools . rtrim ( b . substring ( c ) ) ; h . test ( b ) && this . trim ( 1 , 0 ) } this . trim ( ) ; b = new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) ; c = this . clone ( ) ; c . collapse ( false ) ; c . setEndAt ( b . block || b . blockLimit , CKEDITOR . POSITION _BEFORE _END ) ; b = new CKEDITOR . dom . walker ( c ) ; b . evaluator = a ( ) ; return b . checkForward ( ) } ,
getPreviousNode : function ( a , b , c ) { var d = this . clone ( ) ; d . collapse ( 1 ) ; d . setStartAt ( c || this . root , CKEDITOR . POSITION _AFTER _START ) ; c = new CKEDITOR . dom . walker ( d ) ; c . evaluator = a ; c . guard = b ; return c . previous ( ) } , getNextNode : function ( a , b , c ) { var d = this . clone ( ) ; d . collapse ( ) ; d . setEndAt ( c || this . root , CKEDITOR . POSITION _BEFORE _END ) ; c = new CKEDITOR . dom . walker ( d ) ; c . evaluator = a ; c . guard = b ; return c . next ( ) } , checkReadOnly : function ( ) { function a ( b , c ) { for ( ; b ; ) { if ( b . type == CKEDITOR . NODE _ELEMENT ) { if ( b . getAttribute ( "contentEditable" ) ==
"false" && ! b . data ( "cke-editable" ) ) return 0 ; if ( b . is ( "html" ) || b . getAttribute ( "contentEditable" ) == "true" && ( b . contains ( c ) || b . equals ( c ) ) ) break } b = b . getParent ( ) } return 1 } return function ( ) { var b = this . startContainer , c = this . endContainer ; return ! ( a ( b , c ) && a ( c , b ) ) } } ( ) , moveToElementEditablePosition : function ( a , b ) { if ( a . type == CKEDITOR . NODE _ELEMENT && ! a . isEditable ( false ) ) { this . moveToPosition ( a , b ? CKEDITOR . POSITION _AFTER _END : CKEDITOR . POSITION _BEFORE _START ) ; return true } for ( var c = 0 ; a ; ) { if ( a . type == CKEDITOR . NODE _TEXT ) { b && this . endContainer &&
this . checkEndOfBlock ( ) && h . test ( a . getText ( ) ) ? this . moveToPosition ( a , CKEDITOR . POSITION _BEFORE _START ) : this . moveToPosition ( a , b ? CKEDITOR . POSITION _AFTER _END : CKEDITOR . POSITION _BEFORE _START ) ; c = 1 ; break } if ( a . type == CKEDITOR . NODE _ELEMENT ) if ( a . isEditable ( ) ) { this . moveToPosition ( a , b ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _AFTER _START ) ; c = 1 } else if ( b && a . is ( "br" ) && this . endContainer && this . checkEndOfBlock ( ) ) this . moveToPosition ( a , CKEDITOR . POSITION _BEFORE _START ) ; else if ( a . getAttribute ( "contenteditable" ) == "false" &&
a . is ( CKEDITOR . dtd . $block ) ) { this . setStartBefore ( a ) ; this . setEndAfter ( a ) ; return true } var d = a , f = c , e = void 0 ; d . type == CKEDITOR . NODE _ELEMENT && d . isEditable ( false ) && ( e = d [ b ? "getLast" : "getFirst" ] ( j ) ) ; ! f && ! e && ( e = d [ b ? "getPrevious" : "getNext" ] ( j ) ) ; a = e } return ! ! c } , moveToClosestEditablePosition : function ( a , b ) { var c = new CKEDITOR . dom . range ( this . root ) , d = 0 , f , e = [ CKEDITOR . POSITION _AFTER _END , CKEDITOR . POSITION _BEFORE _START ] ; c . moveToPosition ( a , e [ b ? 0 : 1 ] ) ; if ( a . is ( CKEDITOR . dtd . $block ) ) { if ( f = c [ b ? "getNextEditableNode" : "getPreviousEditableNode" ] ( ) ) { d =
1 ; if ( f . type == CKEDITOR . NODE _ELEMENT && f . is ( CKEDITOR . dtd . $block ) && f . getAttribute ( "contenteditable" ) == "false" ) { c . setStartAt ( f , CKEDITOR . POSITION _BEFORE _START ) ; c . setEndAt ( f , CKEDITOR . POSITION _AFTER _END ) } else c . moveToPosition ( f , e [ b ? 1 : 0 ] ) } } else d = 1 ; d && this . moveToRange ( c ) ; return ! ! d } , moveToElementEditStart : function ( a ) { return this . moveToElementEditablePosition ( a ) } , moveToElementEditEnd : function ( a ) { return this . moveToElementEditablePosition ( a , true ) } , getEnclosedNode : function ( ) { var a = this . clone ( ) ; a . optimize ( ) ; if ( a . startContainer . type !=
CKEDITOR . NODE _ELEMENT || a . endContainer . type != CKEDITOR . NODE _ELEMENT ) return null ; var a = new CKEDITOR . dom . walker ( a ) , b = CKEDITOR . dom . walker . bookmark ( false , true ) , c = CKEDITOR . dom . walker . whitespaces ( true ) ; a . evaluator = function ( a ) { return c ( a ) && b ( a ) } ; var d = a . next ( ) ; a . reset ( ) ; return d && d . equals ( a . previous ( ) ) ? d : null } , getTouchedStartNode : function ( ) { var a = this . startContainer ; return this . collapsed || a . type != CKEDITOR . NODE _ELEMENT ? a : a . getChild ( this . startOffset ) || a } , getTouchedEndNode : function ( ) { var a = this . endContainer ;
return this . collapsed || a . type != CKEDITOR . NODE _ELEMENT ? a : a . getChild ( this . endOffset - 1 ) || a } , getNextEditableNode : b ( ) , getPreviousEditableNode : b ( 1 ) , scrollIntoView : function ( ) { var a = new CKEDITOR . dom . element . createFromHtml ( "<span> </span>" , this . document ) , b , c , d , f = this . clone ( ) ; f . optimize ( ) ; if ( d = f . startContainer . type == CKEDITOR . NODE _TEXT ) { c = f . startContainer . getText ( ) ; b = f . startContainer . split ( f . startOffset ) ; a . insertAfter ( f . startContainer ) } else f . insertNode ( a ) ; a . scrollIntoView ( ) ; if ( d ) { f . startContainer . setText ( c ) ;
b . remove ( ) } a . remove ( ) } }} ) ( ) ; CKEDITOR . POSITION _AFTER _START = 1 ; CKEDITOR . POSITION _BEFORE _END = 2 ; CKEDITOR . POSITION _BEFORE _START = 3 ; CKEDITOR . POSITION _AFTER _END = 4 ; CKEDITOR . ENLARGE _ELEMENT = 1 ; CKEDITOR . ENLARGE _BLOCK _CONTENTS = 2 ; CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS = 3 ; CKEDITOR . ENLARGE _INLINE = 4 ; CKEDITOR . START = 1 ; CKEDITOR . END = 2 ; CKEDITOR . SHRINK _ELEMENT = 1 ; CKEDITOR . SHRINK _TEXT = 2 ; "use strict" ;
( function ( ) { function a ( a ) { if ( ! ( arguments . length < 1 ) ) { this . range = a ; this . forceBrBreak = 0 ; this . enlargeBr = 1 ; this . enforceRealBlocks = 0 ; this . _ || ( this . _ = { } ) } } function e ( a ,b , c ) { for ( a = a . getNextSourceNode ( b , null , c ) ; ! g ( a ) ; ) a = a . getNextSourceNode ( b , null , c ) ; return a } function b ( a ){ var b = [ ] ; a . forEach ( function ( a ) { if ( a . getAttribute ( "contenteditable" ) == "true" ) { b . push ( a ) ; return false } } , CKEDITOR . NODE _ELEMENT , true ) ; return b } function c( a , d , f , e ) { a : { e == null && ( e = b ( f ) ) ; for ( var g ; g = e . shift ( ) ; ) if ( g . getDtd ( ) . p ) { e = { element : g , remaining : e } ;
break a } e = null } if ( ! e ) return 0 ; if ( ( g = CKEDITOR . filter . instances [ e . element . data ( "cke-filter" ) ] ) && ! g . check ( d ) ) return c ( a , d , f , e . remaining ) ; d = new CKEDITOR . dom . range ( e . element ) ; d . selectNodeContents ( e . element ) ; d = d . createIterator ( ) ; d . enlargeBr = a . enlargeBr ; d . enforceRealBlocks = a . enforceRealBlocks ; d. activeFilter = d . filter = g ; a . _ . nestedEditable = { element : e. element , container : f , remaining : e . remaining , iterator : d } ; return 1 } function f ( a , b , c ) { if ( ! b ) return false ; a = a . clone ( ) ; a . collapse ( ! c ) ; return a . checkBoundaryOfElement ( b ,
c ? CKEDITOR . START : CKEDITOR . END ) } var d = /^[\r\n\t ]+$/ , g = CKEDITOR . dom . walker . bookmark ( false , true ) , h = CKEDITOR . dom . walker . whitespaces ( true ) , m= function ( a ) { return g ( a ) && h ( a ) } , j = { dd : 1 , dt : 1 , li : 1 } ; a . prototype = { getNextParagraph : function ( a ) { var b, h , y , n , w , a = a || "p" ; if ( this . _ . nestedEditable ) { if ( b = this . _ . nestedEditable . iterator . getNextParagraph ( a ) ) { this . activeFilter = this . _ . nestedEditable . iterator . activeFilter ; return b } this . activeFilter = this . filter ; if ( c ( this , a , this . _ . nestedEditable . container , this . _ . nestedEditable . remaining ) ) { this . activeFilter =
this . _ . nestedEditable . iterator . activeFilter ; return this . _ . nestedEditable . iterator . getNextParagraph ( a ) } this . _ . nestedEditable = null } if ( ! this . range . root . getDtd ( ) [ a ] ) return null ; if ( ! this . _ . started ) { var o = this . range . clone ( ) ; h = o. startPath ( ) ; var r = o . endPath ( ) , i = ! o . collapsed && f ( o , h . block ) , k = ! o . collapsed && f ( o , r . block , 1 ) ; o . shrink ( CKEDITOR . SHRINK _ELEMENT , true ) ; i&& o . setStartAt ( h . block , CKEDITOR . POSITION _BEFORE _END ) ; k&& o . setEndAt ( r . block , CKEDITOR . POSITION _AFTER _START ) ; h = o. endContainer. hasAscendant ( "pre" , true ) ||
o . startContainer . hasAscendant ( "pre" , true ) ; o . enlarge ( this . forceBrBreak && ! h || ! this . enlargeBr ? CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : CKEDITOR . ENLARGE _BLOCK _CONTENTS ) ; if ( ! o . collapsed ) { h = new CKEDITOR . dom . walker ( o. clone ( ) ) ; r = CKEDITOR . dom . walker . bookmark ( true , true ) ; h . evaluator = r ; this . _ . nextNode = h . next ( ) ; h = new CKEDITOR . dom . walker ( o . clone ( ) ) ; h . evaluator = r ; h = h . previous ( ) ; this . _ . lastNode = h . getNextSourceNode ( true ); if ( this . _ . lastNode && this . _ . lastNode . type == CKEDITOR . NODE _TEXT && ! CKEDITOR . tools . trim ( this . _ . lastNode . getText ( ) ) &&
this. _ . lastNode . getParent ( ) . isBlockBoundary ( ) ) { r = this . range . clone ( ) ; r . moveToPosition ( this . _ . lastNode , CKEDITOR . POSITION _AFTER _END ) ; if ( r . checkEndOfBlock ( ) ) { r = new CKEDITOR . dom . elementPath ( r. endContainer , r . root ) ; this . _ . lastNode = ( r. block || r . blockLimit ) . getNextSourceNode ( true ) } } if ( ! this . _ . lastNode || ! o . root . contains ( this . _ . lastNode ) ) { this . _ . lastNode = this . _ . docEndMarker = o . document . createText ( "" ) ; this . _ . lastNode . insertAfter ( h ) } o = null } this . _ . started = 1 ; h = o} r = this . _ . nextNode ; o = this . _ . lastNode ; for ( this . _ . nextNode =
null ; r ; ) { var i = 0 , k = r . hasAscendant ( "pre" ) , l = r . type != CKEDITOR. NOD E_ELEMENT , q = 0 ; if ( l ) r . type == CKEDITOR . NODE _TEXT && d . test ( r . getText ( ) ) && ( l = 0 ) ; else { var x= r . getName ( ) ; if ( CKEDITOR . dtd . $block [ x] && r . getAttribute ( "contenteditable" ) == "false" ) { b= r ; c ( this , a , b ) ; break } else if ( r . isBlockBoundary ( this . forceBrBreak && ! k && { br : 1 } ) ) { if ( x== "br" ) l = 1 ; else if ( ! h && ! r. getChildCount ( ) && x != "hr" ) { b = r ; y = r . equals ( o ) ; break } if ( h ) { h . setEndAt ( r , CKEDITOR . POSITION _BEFORE _START ) ; if ( x != "br" ) this . _ . nextNode = r} i = 1 } else { if ( r . getFirst ( ) ) { if ( ! h ) { h =
this . range . clone ( ) ; h . setStartAt ( r , CKEDITOR . POSITION _BEFORE _START ) } r= r . getFirst ( ) ; continue } l = 1 } } if ( l && ! h ) { h = this . range . clone ( ) ; h . setStartAt ( r , CKEDITOR . POSITION _BEFORE _START ) } y = ( ! i || l ) && r . equals ( o ) ; if ( h && ! i ) for ( ; ! r . getNext ( m ) && ! y ; ) { x = r . getParent ( ) ; if ( x . isBlockBoundary ( this . forceBrBreak && ! k&& { br : 1 } ) ) { i = 1 ; l = 0 ; y || x . equals ( o ) ; h . setEndAt ( x , CKEDITOR . POSITION _BEFORE _END ) ; break } r= x ; l = 1 ; y = r . equals ( o ) ; q = 1 } l && h . setEndAt ( r , CKEDITOR . POSITION _AFTER _END ) ; r= e ( r , q , o ) ; if ( ( y = ! r ) || i && h ) break } if ( ! b ) { if ( ! h ) { this . _ . docEndMarker &&
this . _ . docEndMarker . remove ( ) ; return this . _ . nextNode = null } b = new CKEDITOR . dom . elementPath ( h . startContainer , h . root ) ; r= b . blockLimit ; i = { div : 1 , th : 1 , td : 1 } ; b= b . block ; if ( ! b && r && ! this . enforceRealBlocks && i [ r . getName ( ) ] && h . checkStartOfBlock ( ) && h . checkEndOfBlock ( ) && ! r. equals ( h . root ) ) b = r ; else if ( ! b || this . enforceRealBlocks && b . is ( j ) ) { b = this . range . document . createElement ( a ) ; h . extractContents ( ) . appendTo ( b) ; b . trim ( ) ; h . insertNode ( b) ; n = w = true } else if ( b . getName ( ) != "li" ) { if ( ! h . checkStartOfBlock ( ) || ! h . checkEndOfBlock ( ) ) { b=
b. clone ( false ) ; h . extractContents ( ) . appendTo ( b ) ; b . trim ( ) ; w = h . splitBlock ( ) ; n = ! w . wasStartOfBlock ; w = ! w . wasEndOfBlock ; h . insertNode ( b ) } } else if ( ! y ) this . _ . nextNode = b . equals ( o ) ? null : e( h . getBoundaryNodes ( ) . endNode , 1 , o) } if ( n ) ( n = b . getPrevious ( ) ) && n . type == CKEDITOR . NODE _ELEMENT && ( n. getName ( ) == "br" ? n . remove ( ) : n . getLast ( ) && n . getLast ( ) . $ . nodeName . toLowerCase ( ) == "br" && n . getLast ( ) . remove ( ) ) ; if ( w) ( n = b . getLast ( ) ) && n . type == CKEDITOR . NODE _ELEMENT && n . getName ( ) == "br" && ( ! CKEDITOR . env . needsBrFiller || n. getPrevious ( g ) || n . getNext ( g ) ) &&
n . remove ( ) ; if ( ! this . _ . nextNode ) this . _ . nextNode = y || b . equals ( o ) || ! o ? null : e ( b , 1 , o ) ; return b } } ; CKEDITOR . dom . range . prototype . createIterator = function ( ) { return new a ( this ) } } ) ( ) ;
( function ( ) { function a ( ) { var a = false , b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . dom . walker . bookmark ( true ) , f = CKEDITOR . dom . walker . bogus ( ) ; return function ( e ) { if ( c ( e ) || b ( e ) ) return true ; if ( f ( e ) && ! a ) return a = true ; return e . type == CKEDITOR . NODE _TEXT && ( e . hasAscendant ( "pre" ) || CKEDITOR . tools . trim ( e . getText ( ) ) . length ) || e . type == CKEDITOR . NODE _ELEMENT && ! e . is ( d ) ? false : true } } function e ( a ) { var b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . dom . walker . bookmark ( 1 ) ; return function ( d ) { return c ( d ) || b ( d ) ? true : ! a && h ( d ) ||
d . type == CKEDITOR . NODE _ELEMENT && d . is ( CKEDITOR . dtd . $removeEmpty ) } } function b ( a ) { return function ( ) { var b ; return this [ a ? "getPreviousNode" : "getNextNode" ] ( function ( a ) { ! b && g ( a ) && ( b = a ) ; return i( a ) && ! ( h ( a ) && a . equals ( b ) ) } ) } } var c = function ( a ) { a . collapsed = a . startContainer && a . endContainer && a . startContainer . equals ( a . endContainer ) && a . startOffset == a . endOffset } , f = function ( a , b , c , d ) { a . optimizeBookmark ( ) ; var f = a . startContainer , e = a . endContainer , j= a . startOffset , u = a . endOffset , h , g ; if ( e . type == CKEDITOR . NODE _TEXT ) e = e . split ( u ) ;
else if ( e . getChildCount ( ) > 0 ) if ( u >= e . getChildCount ( ) ) { e = e . append ( a . document . createText ( "" ) ) ; g = true } else e = e . getChild ( u ) ; if ( f . type == CKEDITOR . NODE _TEXT ) { f . split ( j ) ; f . equals ( e ) && ( e = f . getNext ( ) ) } else if ( j) if ( j >= f . getChildCount ( ) ) { f = f . append ( a . document . createText ( "" ) ) ; h = true } else f = f . getChild ( j ) . getPrevious ( ) ; else { f = f . append ( a . document . createText ( "" ) , 1 ) ; h= true } var j = f . getParents ( ) , u = e . getParents ( ) , k , n , r ; for ( k = 0 ; k < j . length ; k ++ ) { n = j [ k ] ; r = u [ k ] ; if ( ! n . equals ( r ) ) break } for ( var o = c , i , D , l , z = k ; z < j . length ; z ++ ) { i =
j[ z ] ; o && ! i . equals ( f ) && ( D = o . append ( i . clone ( ) ) ) ; for ( i = i . getNext ( ) ; i ; ) { if ( i . equals ( u [ z ] ) || i . equals ( e ) ) break ; l = i . getNext ( ) ; if ( b == 2 ) o. append ( i . clone ( true ) ) ; else { i . remove ( ) ; b == 1 && o. append ( i ) } i = l } o && ( o = D ) } o = c ; for ( c = k ; c < u . length ; c ++ ) { i = u [ c ] ; b > 0 && ! i . equals ( e ) && ( D = o . append ( i . clone ( ) ) ) ; if ( ! j[ c ] || i . $ . parentNode != j [ c ] . $ . parentNode ) for ( i= i . getPrevious ( ) ; i ; ) { if ( i . equals ( j [ c ] ) || i . equals ( f ) ) break ; l = i . getPrevious ( ) ; if ( b == 2 ) o. $ . insertBefore ( i . $ . cloneNode ( true ) , o . $ . firstChild ) ; else { i . remove ( ) ; b == 1 && o. $ . insertBefore ( i . $ ,
o. $ . firstChild ) } i = l } o && ( o = D ) } if ( b == 2 ) { n = a . startContainer ; if ( n . type == CKEDITOR . NODE _TEXT ) { n. $ . data = n . $ . data + n . $ . nextSibling . data ; n . $ . parentNode . removeChild ( n . $ . nextSibling ) } a = a . endContainer ; if ( a . type == CKEDITOR . NODE _TEXT && a . $ . nextSibling ) { a . $ . data = a . $ . data + a . $ . nextSibling . data ; a . $ . parentNode . removeChild ( a . $ . nextSibling ) } } else { if ( n&& r && ( f . $ . parentNode != n . $ . parentNode || e . $ . parentNode != r. $ . parentNode ) ) { b = r . getIndex ( ) ; h && r . $ . parentNode == f . $ . parentNode && b -- ; if ( d && n . type == CKEDITOR . NODE _ELEMENT ) { d = CKEDITOR . dom . element . createFromHtml ( '<span data-cke-bookmark="1" style="display:none"> </span>' ,
a . document ) ; d . insertAfter ( n) ; n . mergeSiblings ( false ) ; a . moveToBookmark ( { startNode : d } ) } else a . setStart ( r . getParent ( ) , b ) } a . collapse ( true ) } h&& f . remove ( ) ; g && e . $ . parentNode && e . remove ( ) } , d = { abbr : 1 , acronym : 1 , b : 1 , bdo : 1 , big : 1 , cite : 1 , code : 1 , del : 1 , dfn : 1 , em : 1 , font : 1 , i : 1 , ins : 1 , label : 1 , kbd : 1 , q : 1 , samp : 1 , small : 1 , span : 1 , strike : 1 , strong : 1 , sub : 1 , sup : 1 , tt : 1 , u : 1 , "var" : 1 } , h = CKEDITOR . dom . walker . bogus ( ) , l= /^[\t\r\n ]*(?: |\xa0)$/ , i = CKEDITOR . dom . walker . editable ( ) , g = CKEDITOR . dom . walker . ignored ( true ) ; CKEDITOR . dom . range . prototype =
{ clone : function ( ) { var a = new CKEDITOR . dom . range ( this . root ) ; a . _setStartContainer( this . startContainer ) ;a . startOffset = this . startOffset ; a . _setEndContainer( this . endContainer ) ; a . endOffset = this . endOffset ; a . collapsed = this . collapsed ; return a } , collapse : function ( a ) { if ( a ) { this . _setEndContainer( this . startContainer ) ; this . endOffset = this . startOffset } else { this . _setStartContainer( this . endContainer ) ; this . startOffset = this . endOffset } this . collapsed = true } , cloneContents : function ( ) { var a = new CKEDITOR . dom . documentFragment ( this . document ) ;
this . collapsed || f ( this , 2 , a ) ; return a } , deleteContents : function ( a ) { this . collapsed || f ( this , 0 , null , a ) } , extractContents : function ( a ) { var b = new CKEDITOR . dom . documentFragment ( this . document ) ; this . collapsed || f ( this , 1 , b , a ) ; return b } , createBookmark : function ( a ) { var b , c , d , f , e = this . collapsed ; b = this . document . createElement ( "span" ) ; b . data ( "cke-bookmark" , 1 ) ; b . setStyle ( "display" , "none" ) ; b . setHtml ( " " ) ; if ( a ) { d = "cke_bm_" + CKEDITOR . tools . getNextNumber ( ) ; b . setAttribute ( "id" , d + ( e ? "C" : "S" ) ) } if ( ! e ) { c = b . clone ( ) ; c . setHtml ( " " ) ;
a && c . setAttribute ( "id" , d + "E" ) ; f = this . clone ( ) ; f . collapse ( ) ; f . insertNode ( c ) } f = this . clone ( ) ; f . collapse ( true ) ; f . insertNode ( b ) ; if ( c ) { this . setStartAfter ( b ) ; this . setEndBefore ( c ) } else this . moveToPosition ( b , CKEDITOR . POSITION _AFTER _END ) ; return { startNode : a ? d + ( e ? "C" : "S" ) : b , endNode : a ? d + "E" : c , serializable : a , collapsed : e } } , createBookmark2 : function ( ) { function a ( c) { var d = c . container , f = c . offset , e ; e = d ; var m = f ; e = e . type != CKEDITOR . NODE _ELEMENT || m=== 0 || m == e . getChildCount ( ) ? 0 : e . getChild ( m - 1 ) . type == CKEDITOR . NODE _TEXT && e. getChild ( m ) . type ==
CKEDITOR . NODE _TEXT ; if ( e ) { d = d . getChild ( f - 1 ) ; f = d . getLength ( ) } d . type == CKEDITOR . NODE _ELEMENT && f> 1 && ( f = d . getChild ( f - 1 ) . getIndex ( true ) + 1 ) ; if ( d . type == CKEDITOR . NODE _TEXT ) { e= d ; for ( m = 0 ; ( e = e . getPrevious ( ) ) && e . type == CKEDITOR . NODE _TEXT ; ) m= m + e . getLength ( ) ; e = m ; if ( d . getText ( ) ) f = f + e ; else { m = d . getPrevious ( b ) ; if ( e ) { f = e ; d = m ? m . getNext ( ) : d . getParent ( ) . getFirst ( ) } else { d = d . getParent ( ) ; f = m ? m . getIndex ( true ) + 1 : 0 } } } c . container = d ; c . offset = f } var b = CKEDITOR . dom . walker . nodeType ( CKEDITOR . NODE _TEXT , true ) ; return function ( b ) { var c = this . collapsed ,
d = { container : this . startContainer , offset : this . startOffset } , f = { container : this . endContainer , offset : this . endOffset } ; if ( b ) { a ( d ) ; c || a ( f ) } return { start : d . container . getAddress ( b ) , end : c ? null : f . container . getAddress ( b ) , startOffset : d . offset , endOffset : f . offset , normalized : b , collapsed : c , is2 : true } } } ( ) , moveToBookmark : function ( a ) { if ( a . is2 ) { var b = this . document . getByAddress ( a . start , a . normalized ) , c = a . startOffset , d = a . end && this . document . getByAddress ( a . end , a . normalized ) , a = a . endOffset ; this . setStart ( b , c ) ; d ? this . setEnd ( d , a ) :
this . collapse ( true ) } else { b = ( c = a . serializable ) ? this . document . getById ( a . startNode ) : a . startNode ; a = c ? this . document . getById ( a . endNode ) : a . endNode ; this . setStartBefore ( b ) ; b . remove ( ) ; if ( a ) { this . setEndBefore ( a ) ; a . remove ( ) } else this . collapse ( true ) } } , getBoundaryNodes : function ( ) { var a = this . startContainer , b = this . endContainer , c = this . startOffset , d = this . endOffset , f ; if ( a . type == CKEDITOR . NODE _ELEMENT ) { f = a . getChildCount ( ) ; if ( f > c ) a = a . getChild ( c ) ; else if ( f < 1 ) a = a . getPreviousSourceNode ( ) ; else { for ( a = a . $ ; a . lastChild ; ) a = a . lastChild ;
a = new CKEDITOR . dom . node ( a ) ; a = a . getNextSourceNode ( ) || a } } if ( b . type == CKEDITOR . NODE _ELEMENT ) { f = b . getChildCount ( ) ; if ( f > d ) b = b . getChild ( d ) . getPreviousSourceNode ( true ) ; else if ( f < 1 ) b = b . getPreviousSourceNode ( ) ; else { for ( b = b . $ ; b . lastChild ; ) b = b . lastChild ; b = new CKEDITOR . dom . node ( b ) } } a . getPosition ( b ) & CKEDITOR . POSITION _FOLLOWING && ( a = b ) ; return { startNode : a , endNode : b } } , getCommonAncestor : function ( a , b ) { var c = this . startContainer , d = this . endContainer , c = c . equals ( d ) ? a && c . type == CKEDITOR . NODE _ELEMENT && this . startOffset == this . endOffset -
1 ? c . getChild ( this . startOffset ) : c : c . getCommonAncestor ( d ) ; return b && ! c . is ? c . getParent ( ) : c } , optimize : function ( ) { var a = this . startContainer , b = this . startOffset ; a . type != CKEDITOR . NODE _ELEMENT && ( b ? b >= a . getLength ( ) && this . setStartAfter ( a ) : this . setStartBefore ( a ) ) ; a = this . endContainer ; b = this . endOffset ; a . type != CKEDITOR . NODE _ELEMENT && ( b ? b >= a . getLength ( ) && this . setEndAfter ( a ) : this . setEndBefore ( a ) ) } , optimizeBookmark : function ( ) { var a = this . startContainer , b = this . endContainer ; a . is && ( a . is ( "span" ) && a . data ( "cke-bookmark" ) ) &&
this . setStartAt ( a , CKEDITOR . POSITION _BEFORE _START ) ; b && ( b . is && b . is ( "span" ) && b . data ( "cke-bookmark" ) ) && this . setEndAt ( b , CKEDITOR . POSITION _AFTER _END ) } , trim : function ( a , b ) { var c = this . startContainer , d = this . startOffset , f = this . collapsed ; if ( ( ! a || f ) && c && c . type == CKEDITOR . NODE _TEXT ) { if ( d ) if ( d >= c . getLength ( ) ) { d = c . getIndex ( ) + 1 ; c = c . getParent ( ) } else { var e = c . split ( d ) , d = c . getIndex ( ) + 1 , c = c . getParent ( ) ; if ( this . startContainer . equals ( this . endContainer ) ) this . setEnd ( e , this . endOffset - this . startOffset ) ; else if ( c . equals ( this . endContainer ) ) this . endOffset =
this . endOffset + 1 } else { d = c . getIndex ( ) ; c = c . getParent ( ) } this . setStart ( c , d ) ; if ( f ) { this . collapse ( true ) ; return } } c = this . endContainer ; d = this . endOffset ; if ( ! b && ! f && c && c . type == CKEDITOR . NODE _TEXT ) { if ( d ) { d >= c . getLength ( ) || c . split ( d ) ; d = c . getIndex ( ) + 1 } else d = c . getIndex ( ) ; c = c . getParent ( ) ; this . setEnd ( c , d ) } } , enlarge : function ( a , b ) { function c ( a ) { return a && a . type == CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "contenteditable" ) ? null : a } var d = RegExp ( /[^\s\ufeff]/ ) ; switch ( a ) { case CKEDITOR . ENLARGE _INLINE : var f = 1 ; case CKEDITOR . ENLARGE _ELEMENT : if ( this . collapsed ) break ;
var e = this . getCommonAncestor ( ) , j = this . root , h , i , g , k , n , r = false , o , l ; o = this . startContainer ; var D = this . startOffset ; if ( o . type == CKEDITOR . NODE _TEXT ) { if ( D ) { o = ! CKEDITOR . tools . trim ( o . substring ( 0 , D ) ) . length && o; r = ! ! o } if ( o && ! ( k = o . getPrevious ( ) ) ) g = o . getParent ( ) } else { D && ( k = o . getChild ( D - 1 ) || o . getLast ( ) ) ; k || ( g = o ) } for ( g = c ( g ) ; g || k ; ) { if ( g && ! k ) { ! n && g . equals ( e ) && ( n = true ) ; if ( f ? g . isBlockBoundary ( ) : ! j . contains ( g ) ) break ; if ( ! r || g . getComputedStyle ( "display" ) != "inline" ) { r= false ; n ? h = g : this . setStartBefore ( g ) } k = g . getPrevious ( ) } for ( ; k ; ) { o =
false ; if ( k . type == CKEDITOR . NODE _COMMENT ) k = k . getPrevious ( ) ; else { if ( k . type == CKEDITOR . NODE _TEXT ) { l = k . getText ( ) ; d . test ( l ) && ( k = null ) ; o = /[\s\ufeff]$/ . test ( l ) } else if ( ( k . $ . offsetWidth > ( CKEDITOR . env . webkit ? 1 : 0 ) || b && k. is ( "br" ) ) && ! k . data ( "cke-bookmark" ) ) if ( r&& CKEDITOR . dtd . $removeEmpty [ k . getName ( ) ] ) { l = k . getText ( ) ; if ( d . test ( l) ) k = null ; else for ( var D = k . $ . getElementsByTagName ( "*" ) , J= 0 , z ; z = D [ J ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ z . nodeName . toLowerCase ( ) ] ) { k= null ; break } k && ( o = ! ! l . length ) } else k = null ; o && ( r ? n ? h = g : g && this . setStartBefore ( g ) :
r = true ) ; if ( k ) { o = k . getPrevious ( ) ; if ( ! g && ! o ) { g = k ; k = null ; break } k = o } else g = null } } g && ( g = c ( g . getParent ( ) ) ) } o = this . endContainer ; D = this . endOffset ; g = k = null ; n = r = false ; var L = function ( a , b ) { var c = new CKEDITOR . dom . range ( j ) ; c . setStart ( a , b ) ; c . setEndAt ( j , CKEDITOR . POSITION _BEFORE _END ) ; var c = new CKEDITOR . dom . walker ( c ) , f ; for ( c . guard = function ( a ) { return ! ( a . type == CKEDITOR . NODE _ELEMENT && a . isBlockBoundary ( ) ) } ; f = c . next ( ) ; ) { if ( f . type != CKEDITOR . NODE _TEXT ) return false ; l = f != a ? f . getText ( ) : f . substring ( b ) ; if ( d . test ( l ) ) return false } return true } ;
if ( o. type == CKEDITOR . NODE _TEXT ) if ( CKEDITOR . tool s. trim( o . substring ( D ) ) . length ) r = true ; else { r = ! o . getLength ( ) ; if ( D == o . getLength ( ) ) { if ( ! ( k = o . getNext ( ) ) ) g = o . getParent( ) } else L( o , D ) && ( g = o . getParent ( ) ) } else ( k = o . getChild ( D ) ) || ( g = o ) ; for ( ; g || k ; ) { if ( g && ! k ) { ! n && g . equals ( e ) && ( n = true ) ; if ( f ? g . isBlockBoundary ( ) : ! j . contains ( g ) ) break ; if ( ! r || g . getComputedStyle ( "display" ) != "inline" ) { r= false ; n ? i = g : g && this . setEndAfter ( g ) } k = g . getNext ( ) } for ( ; k ; ) { o = false ; if ( k . type == CKEDITOR . NODE _TEXT ) { l= k . getText ( ) ; L ( k , 0 ) || ( k = null ) ; o = /^[\s\ufeff]/ . test ( l ) } else if ( k . type = =
CKEDITOR . NODE _ELEMENT ) { if ( ( k . $ . offsetWidth > 0 || b && k . is ( "br" ) ) && ! k . data ( "cke-bookmark" ) ) if ( r && CKEDITOR . dtd . $removeEmpty [ k . getName ( ) ] ) { l = k . getText ( ) ; if ( d . test ( l) ) k = null ; else { D = k . $ . getElementsByTagName ( "*" ) ; for ( J= 0 ; z = D [ J ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ z . nodeName . toLowerCase ( ) ] ) { k= null ; break } } k && ( o = ! ! l . length ) } else k = null } else o = 1 ; o && r && ( n ? i = g : this . setEndAfter ( g ) ) ; if ( k ) { o = k . getNext ( ) ; if ( ! g && ! o ) { g = k ; k = null ; break } k = o } else g = null } g && ( g = c ( g . getParent ( ) ) ) } if ( h && i ) { e = h . contains ( i ) ? i : h ; this . setStartBefore ( e ) ;
this . setEndAfter( e ) } break ; case CKEDITOR . ENLARGE _BLOCK _CONTENTS : case CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : g = new CKEDITOR . d om. range ( this . root ) ; j = this . root ; g. setStartAt ( j , CKEDITOR . POSITION _AFTER _START ) ; g . setEnd ( this . startContainer , this . startOffset ) ; g= new CKEDITOR . dom . walker ( g ) ; var B , w , H = CKEDITOR . dom . walker . blockBoundary ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? { br : 1 } : null ) , C= null , A = function ( a ) { if ( a . type == CKEDITOR . NODE _ELEMENT && a . getAttribute ( "contenteditable" ) == "false" ) if ( C) { if ( C . equals ( a ) ) { C = null ; return } } else C =
a; else if ( C ) return ; var b = H ( a ) ; b || ( B = a ) ; return b } , f = function ( a ) { var b = A ( a ) ; ! b && ( a . is && a . is ( "br" ) ) && ( w = a ) ; return b } ; g . guard = A ; g = g . lastBackward ( ) ; B = B || j ; this . setStartAt ( B , ! B . is ( "br" ) && ( ! g && this . checkStartOfBlock ( ) || g && B . contains ( g ) ) ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _AFTER _END ) ; if ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ) { g= this . clone ( ) ; g = new CKEDITOR . dom . walker ( g ) ; var x = CKEDITOR . dom . walker . whitespaces ( ) , F = CKEDITOR . dom . walker . bookmark ( ) ; g . evaluator = function ( a ) { return ! x( a ) && ! F ( a ) } ; if ( ( g = g . previous ( ) ) &&
g. type == CKEDITOR . NODE _ELEMENT && g . is ( "br" ) ) brea k}g = this . clone ( ) ; g . collapse ( ) ; g . setEndAt ( j , CKEDITOR . POSITION _BEFORE _END ) ; g = new CKEDITOR . dom . walker ( g ) ; g .guard = a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? f : A; B = C = w = null ; g = g . lastForward ( ) ; B = B || j ; this . setEndAt ( B , ! g && this . checkEndOfBlock ( ) || g && B . contains ( g ) ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _BEFORE _START ) ; w&& this . setEndAfter ( w ) } } , shrink : function ( a , b , c ) { if ( ! this . collapsed ) { var a = a || CKEDITOR . SHRINK _TEXT , d = this . clone ( ) , f = this . startContainer , e = this . endContainer ,
j = this . startOffset , g = this . endOffset , h = 1 , i = 1; if ( f && f . type == CKEDITOR . NODE _TEXT ) if ( j ) if ( j >= f . getLength ( ) ) d . setStartAfter ( f ) ; else { d . setStartBefore ( f ) ; h = 0} else d . setStartBefore ( f ) ; if ( e && e . type == CKEDITOR . NODE _TEXT ) if ( g ) if ( g >= e . getLength ( ) ) d . setEndAfter ( e ) ; else { d . setEndAfter ( e ) ; i = 0 } else d . setEndBefore ( e ) ; var d = new CKEDITOR . dom . walker ( d ) , k = CKEDITOR . dom . walker . bookmark ( ) ; d . evaluator = function ( b ) { return b . type == ( a == CKEDITOR . SHRINK _ELEMENT ? CKEDITOR . NODE _ELEMENT : CKEDITOR . NODE _TEXT ) } ; var n ; d . guard = function ( b , d ) { if ( k ( b ) ) return true ;
if ( a == CKEDITOR . SHRINK _ELEMENT && b . type == CKEDITOR . NODE _TEXT || d && b . equals ( n ) || c === false && b . type == CKEDITOR . NODE _ELEMENT && b . isBlockBoundary ( ) || b . type == CKEDITOR . NODE _ELEMENT && b . hasAttribute ( "contenteditable" ) ) return false ; ! d && b . type == CKEDITOR . NODE _ELEMENT && ( n = b ) ; return true } ; if ( h ) ( f = d [ a == CKEDITOR . SHRINK _ELEMENT ? "lastForward" : "next" ] ( ) ) && this . setStartAt ( f , b ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _BEFORE _START ) ; if ( i ) { d . reset ( ) ; ( d = d [ a == CKEDITOR . SHRINK _ELEMENT ? "lastBackward" : "previous" ] ( ) ) && this . setEndAt ( d ,
b ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _AFTER _END ) } return ! ( ! h && ! i ) } } , insertNode : function ( a ) { this . optimizeBookmark ( ) ; this . trim ( false , true ) ; var b = this . startContainer , c = b . getChild ( this . startOffset ) ; c ? a . insertBefore ( c ) : b . append ( a ) ; a . getParent ( ) && a . getParent ( ) . equals ( this . endContainer ) && this . endOffset ++ ; this . setStartBefore ( a ) } , moveToPosition : function ( a , b ) { this . setStartAt ( a , b ) ; this . collapse ( true ) } , moveToRange : function ( a ) { this . setStart ( a . startContainer , a . startOffset ) ; this . setEnd ( a . endContainer ,
a . endOffset ) } , selectNodeContents : function ( a ) { this . setStart ( a , 0 ) ; this . setEnd ( a , a . type == CKEDITOR . NODE _TEXT ? a . getLength ( ) : a . getChildCount ( ) ) } , setStart : function ( a , b ) { if ( a . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $empty [ a . getName ( ) ] ) { b = a . getIndex ( ) ; a = a . getParent ( ) } this . _setStartContainer( a ) ; this . startOffset = b ; if ( ! this . endContainer ) { this . _setEndContainer( a ) ; this . endOffset = b } c ( this ) } , setEnd : function ( a , b ) { if ( a . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $empty [ a . getName ( ) ] ) { b = a . getIndex ( ) + 1 ; a = a . getParent ( ) } this . _setEndContainer( a ) ;
this . endOffset = b ; if ( ! this . startContainer ) { this . _setStartContainer ( a ) ; this . startOffset = b } c ( this ) } , setStartAfter : function ( a ) { this . setStart ( a . getParent ( ) , a . getIndex ( ) + 1 ) } , setStartBefore : function ( a ) { this . setStart ( a . getParent ( ) , a . getIndex ( ) ) } , setEndAfter : function ( a ) { this . setEnd ( a . getParent ( ) , a . getIndex ( ) + 1 ) } , setEndBefore : function ( a ) { this . setEnd ( a . getParent ( ) , a . getIndex ( ) ) } , setStartAt : function ( a , b ) { switch ( b ) { case CKEDITOR . POSITION _AFTER _START : this . setStart ( a , 0 ) ; break ; case CKEDITOR . POSITION _BEFORE _END : a . type ==
CKEDITOR . NODE _TEXT ? this . setStart ( a , a . getLength ( ) ) : this . setStart ( a , a . getChildCount ( ) ) ; break ; case CKEDITOR . POSITION _BEFORE _START : this . setStartBefore ( a ) ; break ; case CKEDITOR . POSITION _AFTER _END : this . setStartAfter ( a ) } c ( this ) } , setEndAt : function ( a , b ) { switch ( b ) { case CKEDITOR . POSITION _AFTER _START : this . setEnd ( a , 0 ) ; break ; case CKEDITOR . POSITION _BEFORE _END : a . type == CKEDITOR . NODE _TEXT ? this . setEnd ( a , a . getLength ( ) ) : this . setEnd ( a , a . getChildCount ( ) ) ; break ; case CKEDITOR . POSITION _BEFORE _START : this . setEndBefore ( a ) ; break ;
case CKEDITOR . POSITION _AFTER _END : this . setEndAfter ( a ) } c ( this ) } , fixBlock : function ( a , b ) { var c = this . createBookmark ( ) , d = this . document . createElement ( b ) ; this . collapse ( a ) ; this . enlarge ( CKEDITOR . ENLARGE _BLOCK _CONTENTS ) ; this . extractContents ( ) . appendTo ( d ) ; d . trim ( ) ; d . appendBogus ( ) ; this . insertNode ( d ) ; this . moveToBookmark ( c ) ; return d } , splitBlock : function ( a ) { var b = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) , c = new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) , d = b . block , f = c . block , e = null ; if ( ! b . blockLimit . equals ( c . blockLimit ) ) return null ;
if ( a != "br" ) { if ( ! d ) { d = this . fixBlock ( true , a ) ; f = ( new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) ) . block } f || ( f = this . fixBlock ( false , a ) ) } a = d && this . checkStartOfBlock ( ) ; b = f && this . checkEndOfBlock ( ) ; this . deleteContents ( ) ; if ( d && d . equals ( f ) ) if ( b ) { e = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) ; this . moveToPosition ( f , CKEDITOR . POSITION _AFTER _END ) ; f = null } else if ( a ) { e = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) ; this . moveToPosition ( d , CKEDITOR . POSITION _BEFORE _START ) ; d = null } else { f =
this . splitElement ( d ) ; d . is ( "ul" , "ol" ) || d . appendBogus ( ) } return { previousBlock : d , nextBlock : f , wasStartOfBlock : a , wasEndOfBlock : b , elementPath : e } } , splitElement : function ( a ) { if ( ! this . collapsed ) return null ; this . setEndAt ( a , CKEDITOR . POSITION _BEFORE _END ) ; var b = this . extractContents ( ) , c = a . clone ( false ) ; b . appendTo ( c ) ; c . insertAfter ( a ) ; this . moveToPosition ( a , CKEDITOR . POSITION _AFTER _END ) ; return c } , removeEmptyBlocksAtEnd : function ( ) { function a ( d ) { return function ( a ) { return b ( a ) || ( c ( a ) || a . type == CKEDITOR . NODE _ELEMENT && a . isEmptyInlineRemoveable ( ) ) ||
d . is ( "table" ) && a . is ( "caption" ) ? false : true } } var b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . dom . walker . bookmark ( false ) ; return function ( b ) { for ( var c = this . createBookmark ( ) , d = this [ b ? "endPath" : "startPath" ] ( ) , f = d . block || d . blockLimit , e ; f && ! f . equals ( d . root ) && ! f . getFirst ( a ( f ) ) ; ) { e = f . getParent ( ) ; this [ b ? "setEndAt" : "setStartAt" ] ( f , CKEDITOR . POSITION _AFTER _END ) ; f . remove ( 1 ) ; f = e } this . moveToBookmark ( c ) } } ( ) , startPath : function ( ) { return new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) } , endPath : function ( ) { return new CKEDITOR . dom . elementPath ( this . endContainer ,
this . root ) } , checkBoundaryOfElement : function ( a , b ) { var c = b == CKEDITOR . START , d = this . clone ( ) ; d . collapse ( c ) ; d [ c ? "setStartAt" : "setEndAt" ] ( a , c ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _BEFORE _END ) ; d = new CKEDITOR . dom . walker ( d ) ; d . evaluator = e ( c ) ; return d [ c ? "checkBackward" : "checkForward" ] ( ) } , checkStartOfBlock : function ( ) { var b = this . startContainer , c = this . startOffset ; if ( CKEDITOR . env . ie && c && b . type == CKEDITOR . NODE _TEXT ) { b = CKEDITOR . tools . ltrim ( b . substring ( 0 , c ) ) ; l . test ( b ) && this . trim ( 0 , 1 ) } this . trim ( ) ; b = new CKEDITOR . dom . elementPath ( this . startContainer ,
this . root ) ; c = this . clone ( ) ; c . collapse ( true ) ; c . setStartAt ( b . block || b . blockLimit , CKEDITOR . POSITION _AFTER _START ) ; b = new CKEDITOR . dom . walker ( c ) ; b . evaluator = a ( ) ; return b . checkBackward ( ) } , checkEndOfBlock : function ( ) { var b = this . endContainer , c = this . endOffset ; if ( CKEDITOR . env . ie && b . type == CKEDITOR . NODE _TEXT ) { b = CKEDITOR . tools . rtrim ( b . substring ( c ) ) ; l . test ( b ) && this . trim ( 1 , 0 ) } this . trim ( ) ; b = new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) ; c = this . clone ( ) ; c . collapse ( false ) ; c . setEndAt ( b . block || b . blockLimit , CKEDITOR . POSITION _BEFORE _END ) ;
b = new CKEDITOR . dom . walker ( c ) ; b . evaluator = a ( ) ; return b . checkForward ( ) } , getPreviousNode : function ( a , b , c ) { var d = this . clone ( ) ; d . collapse ( 1 ) ; d . setStartAt ( c || this . root , CKEDITOR . POSITION _AFTER _START ) ; c = new CKEDITOR . dom . walker ( d ) ; c . evaluator = a ; c . guard = b ; return c . previous ( ) } , getNextNode : function ( a , b , c ) { var d = this . clone ( ) ; d . collapse ( ) ; d . setEndAt ( c || this . root , CKEDITOR . POSITION _BEFORE _END ) ; c = new CKEDITOR . dom . walker ( d ) ; c . evaluator = a ; c . guard = b ; return c . next ( ) } , checkReadOnly : function ( ) { function a ( b , c ) { for ( ; b ; ) { if ( b . type ==
CKEDITOR . NODE _ELEMENT ) { if ( b . getAttribute ( "contentEditable" ) == "false" && ! b . data ( "cke-editable" ) ) return 0 ; if ( b . is ( "html" ) || b . getAttribute ( "contentEditable" ) == "true" && ( b . contains ( c ) || b . equals ( c ) ) ) break } b = b . getParent ( ) } return 1 } return function ( ) { var b = this . startContainer , c = this . endContainer ; return ! ( a ( b , c ) && a ( c , b ) ) } } ( ) , moveToElementEditablePosition : function ( a , b ) { if ( a . type == CKEDITOR . NODE _ELEMENT && ! a . isEditable ( false ) ) { this . moveToPosition ( a , b ? CKEDITOR . POSITION _AFTER _END : CKEDITOR . POSITION _BEFORE _START ) ; return true } for ( var c =
0 ; a ; ) { if ( a . type == CKEDITOR . NODE _TEXT ) { b && this . endContainer && this . checkEndOfBlock ( ) && l . test ( a . getText ( ) ) ? this . moveToPosition ( a , CKEDITOR . POSITION _BEFORE _START ) : this . moveToPosition ( a , b ? CKEDITOR . POSITION _AFTER _END : CKEDITOR . POSITION _BEFORE _START ) ; c = 1 ; break } if ( a . type == CKEDITOR . NODE _ELEMENT ) if ( a . isEditable ( ) ) { this . moveToPosition ( a , b ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _AFTER _START ) ; c = 1 } else if ( b && a . is ( "br" ) && this . endContainer && this . checkEndOfBlock ( ) ) this . moveToPosition ( a , CKEDITOR . POSITION _BEFORE _START ) ;
else if ( a . getAttribute ( "contenteditable" ) == "false" && a . is ( CKEDITOR . dtd . $block ) ) { this . setStartBefore ( a ) ; this . setEndAfter ( a ) ; return true } var d = a , f = c , e = void 0 ; d . type == CKEDITOR . NODE _ELEMENT && d . isEditable ( false ) && ( e = d [ b ? "getLast" : "getFirst" ] ( g ) ) ; ! f && ! e && ( e = d [ b ? "getPrevious" : "getNext" ] ( g ) ) ; a = e } return ! ! c } , moveToClosestEditablePosition : function ( a , b ) { var c = new CKEDITOR . dom . range ( this . root ) , d = 0 , f , e = [ CKEDITOR . POSITION _AFTER _END , CKEDITOR . POSITION _BEFORE _START ] ; c . moveToPosition ( a , e [ b ? 0 : 1 ] ) ; if ( a . is ( CKEDITOR . dtd . $block ) ) { if ( f =
c [ b ? "getNextEditableNode" : "getPreviousEditableNode" ] ( ) ) { d = 1 ; if ( f . type == CKEDITOR . NODE _ELEMENT && f . is ( CKEDITOR . dtd . $block ) && f . getAttribute ( "contenteditable" ) == "false" ) { c . setStartAt ( f , CKEDITOR . POSITION _BEFORE _START ) ; c . setEndAt ( f , CKEDITOR . POSITION _AFTER _END ) } else c . moveToPosition ( f , e [ b ? 1 : 0 ] ) } } else d = 1 ; d && this . moveToRange ( c ) ; return ! ! d } , moveToElementEditStart : function ( a ) { return this . moveToElementEditablePosition ( a ) } , moveToElementEditEnd : function ( a ) { return this . moveToElementEditablePosition ( a , true ) } , getEnclosedNode : function ( ) { var a =
this . clone ( ) ; a . optimize ( ) ; if ( a . startContainer . type != CKEDITOR . NODE _ELEMENT || a . endContainer . type != CKEDITOR . NODE _ELEMENT ) return null ; var a = new CKEDITOR . dom . walker ( a ) , b = CKEDITOR . dom . walker . bookmark ( false , true ) , c = CKEDITOR . dom . walker . whitespaces ( true ) ; a . evaluator = function ( a ) { return c ( a ) && b ( a ) } ; var d = a . next ( ) ; a . reset ( ) ; return d && d . equals ( a . previous ( ) ) ? d : null } , getTouchedStartNode : function ( ) { var a = this . startContainer ; return this . collapsed || a . type != CKEDITOR . NODE _ELEMENT ? a : a . getChild ( this . startOffset ) || a } , getTouchedEndNode : function ( ) { var a =
this . endContainer ; return this . collapsed || a . type != CKEDITOR . NODE _ELEMENT ? a : a . getChild ( this . endOffset - 1 ) || a } , getNextEditableNode : b ( ) , getPreviousEditableNode : b ( 1 ) , scrollIntoView : function ( ) { var a = new CKEDITOR . dom . element . createFromHtml ( "<span> </span>" , this . document ) , b , c , d , f = this . clone ( ) ; f . optimize ( ) ; if ( d = f . startContainer . type == CKEDITOR . NODE _TEXT ) { c = f . startContainer . getText ( ) ; b = f . startContainer . split ( f . startOffset ) ; a . insertAfter ( f . startContainer ) } else f . insertNode ( a ) ; a . scrollIntoView ( ) ; if ( d ) { f . startContainer . setText ( c ) ;
b . remove ( ) } a . remove ( ) } ,_setStartContainer : function ( a ) { this . startContainer = a } , _setEndContainer : function ( a ) { this . endContainer = a } }} ) ( ) ; CKEDITOR . POSITION _AFTER _START = 1 ; CKEDITOR . POSITION _BEFORE _END = 2 ; CKEDITOR . POSITION _BEFORE _START = 3 ; CKEDITOR . POSITION _AFTER _END = 4 ; CKEDITOR . ENLARGE _ELEMENT = 1 ; CKEDITOR . ENLARGE _BLOCK _CONTENTS = 2 ; CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS = 3 ; CKEDITOR . ENLARGE _INLINE = 4 ; CKEDITOR . START = 1 ; CKEDITOR . END = 2 ; CKEDITOR . SHRINK _ELEMENT = 1 ; CKEDITOR . SHRINK _TEXT = 2 ; "use strict" ;
( function ( ) { function a ( a ) { if ( ! ( arguments . length < 1 ) ) { this . range = a ; this . forceBrBreak = 0 ; this . enlargeBr = 1 ; this . enforceRealBlocks = 0 ; this . _ || ( this . _ = { } ) } } function e ( a ){ var b = [ ] ; a . forEach ( function ( a ) { if ( a . getAttribute ( "contenteditable" ) == "true" ) { b . push ( a ) ; return false } } , CKEDITOR . NODE _ELEMENT , true ) ; return b } function b( a , c , d , f ) { a : { f == null && ( f = e ( d ) ) ; for ( var h ; h = f . shift ( ) ; ) if ( h . getDtd ( ) . p ) { f = { element : h , remaining : f } ; break a } f = null } if ( ! f ) return 0 ; if ( ( h = CKEDITOR . filter . instances [ f . element . data ( "cke-filter" ) ] ) &&
! h . check ( c ) ) return b ( a , c , d , f . remaining ) ; c = new CKEDITOR . dom . range ( f . element ) ; c . selectNodeContents ( f . element ) ; c = c . createIterator ( ) ; c . enlargeBr = a . enlargeBr ; c . enforceRealBlocks = a . enforceRealBlocks ; c. activeFilter = c . filter = h ; a . _ . nestedEditable = { element : f. element , container : d , remaining : f . remaining , iterator : c } ; return 1 } function c ( a , b , c ) { if ( ! b ) return false ; a = a . clone ( ) ; a . collapse ( ! c ) ; return a . checkBoundaryOfElement ( b , c ? CKEDITOR . START : CKEDITOR . END ) } var f = /^[\r\n\t ]+$/ , d = CKEDITOR . dom . walker . bookmark ( false , true ) ,
h = CKEDITOR . dom . walker . whitespaces ( true ) , l= function ( a ) { return d ( a ) && h ( a ) } , i = { dd : 1 , dt : 1 , li : 1 } ; a . prototype = { getNextParagraph : function ( a ) { var e, h , s , y , p , a = a || "p" ; if ( this . _ . nestedEditable ) { if ( e = this . _ . nestedEditable . iterator . getNextParagraph ( a ) ) { this . activeFilter = this . _ . nestedEditable . iterator . activeFilter ; return e } this . activeFilter = this . filter ; if ( b ( this , a , this . _ . nestedEditable . container , this . _ . nestedEditable . remaining ) ) { this . activeFilter = this . _ . nestedEditable . iterator . activeFilter ; return this . _ . nestedEditable . iterator . getNextParagraph ( a ) } this . _ . nestedEditable =
null } if ( ! this . range . root . getDtd ( ) [ a ] ) return null ; if ( ! this . _ . started ) { var q = this . range . clone ( ) ; h = q. startPath ( ) ; var j = q . endPath ( ) , u = ! q . collapsed && c ( q , h . block ) , v = ! q . collapsed && c ( q , j . block , 1 ) ; q . shrink ( CKEDITOR . SHRINK _ELEMENT , true ) ; u&& q . setStartAt ( h . block , CKEDITOR . POSITION _BEFORE _END ) ; v&& q . setEndAt ( j . block , CKEDITOR . POSITION _AFTER _START ) ; h = q. endC ontainer . hasAsc endant( "pre" , true ) || q . start Container. hasAscendant ( "pre" , true ) ; q . enlarge ( this . forceBrBreak && ! h || ! this . enlargeBr ? CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS :
CKEDITOR . ENLARGE _BLOCK _CONTENTS ) ; if ( ! q . collapsed ) { h = new CKEDITOR . dom . walker ( q. clone ( ) ) ; j = CKEDITOR . dom . walker . bookmark ( true , true ) ; h . evaluator = j ; this . _ . nextNode = h . next ( ) ; h = new CKEDITOR . dom . walker ( q . clone ( ) ) ; h . evaluator = j ; h = h . previous ( ) ; this . _ . lastNode = h . getNextSourceNode ( true ,null , q . root ); if ( this . _ . lastNode && this . _ . lastNode . type == CKEDITOR . NODE _TEXT && ! CKEDITOR . tools . trim ( this . _ . lastNode . getText ( ) ) && this . _ . lastNode . getParent ( ) . isBlockBoundary ( ) ) { j = this . range . clone ( ) ; j . moveToPosition ( this . _ . lastNode , CKEDITOR . POSITION _AFTER _END ) ;
if( j . checkEndOfBlock ( ) ) { j = new CKEDITOR . dom . elementPath ( j. endContainer , j . root ) ; this . _ . lastNode = ( j. block || j . blockLimit ) . getNextSourceNode ( true ) } } if ( ! this . _ . lastNode || ! q . root . contains ( this . _ . lastNode ) ) { this . _ . lastNode = this . _ . docEndMarker = q . document . createText ( "" ) ; this . _ . lastNode . insertAfter ( h ) } q = null } this . _ . started = 1 ; h = q} j = this . _ . nextNode ; q = this . _ . lastNode ; for ( this . _ . nextNode = null ; j ; ) { var u = 0 , v = j . hasAscendant ( "pre" ) , E = j . type != CKEDITOR . NODE _ELEMENT , k = 0 ; if ( E ) j . type == CKEDITOR . NODE _TEXT && f . test ( j . getText ( ) ) &&
( E= 0 ) ; else { var n= j . getName ( ) ; if ( CKEDITOR . dtd . $block [ n] && j . getAttribute ( "contenteditable" ) == "false" ) { e= j ; b ( this , a , e ) ; break } else if ( j . isBlockBoundary ( this . forceBrBreak && ! v && { br : 1 } ) ) { if ( n== "br" ) E = 1 ; else if ( ! h && ! j. getChildCount ( ) && n != "hr" ) { e = j ; s = j . equals ( q ) ; break } if ( h ) { h . setEndAt ( j , CKEDITOR . POSITION _BEFORE _START ) ; if ( n != "br" ) this . _ . nextNode = j} u = 1 } else { if ( j . getFirst ( ) ) { if ( ! h ) { h = this . range . clone ( ) ; h . setStartAt ( j , CKEDITOR . POSITION _BEFORE _START ) } j = j . getFirst ( ) ; continue } E = 1 } } if ( E && ! h ) { h = this . range . clone ( ) ;
h . setStartAt ( j , CKEDITOR . POSITION _BEFORE _START ) } s= ( ! u || E ) && j . equals ( q ) ; if ( h && ! u ) for ( ; ! j . getNext ( l ) && ! s ; ) { n = j . getParent ( ) ; if ( n . isBlockBoundary ( this . forceBrBreak && ! v&& { br : 1 } ) ) { u = 1 ; E = 0 ; s || n . equals ( q ) ; h . setEndAt ( n , CKEDITOR . POSITION _BEFORE _END ) ; break } j= n ; E = 1 ; s = j . equals ( q ) ; k = 1 } E && h . setEndAt ( j , CKEDITOR . POSITION _AFTER _END ) ; j= this . _getNextSourceNode ( j , k , q ) ; if ( ( s = ! j ) || u && h ) break } if ( ! e ) { if ( ! h ) { this . _ . docEndMarker && this . _ . docEndMarker . remove ( ) ; return this . _ . nextNode = null } e = new CKEDITOR . dom . elementPath ( h . startContainer ,
h . root ) ; j= e . blockLimit ; u = { div : 1 , th : 1 , td : 1 } ; e= e . block ; if ( ! e && j && ! this . enforceRealBlocks && u [ j . getName ( ) ] && h . checkStartOfBlock ( ) && h . checkEndOfBlock ( ) && ! j. equals ( h . root ) ) e = j ; else if ( ! e || this . enforceRealBlocks && e . is ( i ) ) { e = this . range . document . createElement ( a ) ; h . extractContents ( ) . appendTo ( e) ; e . trim ( ) ; h . insertNode ( e) ; y = p = true } else if ( e . getName ( ) != "li" ) { if ( ! h . checkStartOfBlock ( ) || ! h . checkEndOfBlock ( ) ) { e= e . clone ( false ) ; h . extractContents ( ) . appendTo ( e ) ; e . trim ( ) ; p = h . splitBlock ( ) ; y = ! p . wasStartOfBlock ; p = ! p . wasEndOfBlock ;
h. insertNode ( e ) } } else if ( ! s ) this . _ . nextNode = e . equals ( q ) ? null : this . _getNextSourceNod e( h . getBoundaryNodes ( ) . endNode , 1 , q) } if ( y ) ( y = e . getPrevious ( ) ) && y . type == CKEDITOR . NODE _ELEMENT && ( y. getName ( ) == "br" ? y . remove ( ) : y . getLast ( ) && y . getLast ( ) . $ . nodeName . toLowerCase ( ) == "br" && y . getLast ( ) . remove ( ) ) ; if ( p) ( y = e . getLast ( ) ) && y . type == CKEDITOR . NODE _ELEMENT && y . getName ( ) == "br" && ( ! CKEDITOR . env . needsBrFiller || y. getPrevious ( d ) || y . getNext ( d ) ) && y . remove ( ) ; if ( ! this . _ . nextNode ) this . _ . nextNode = s || e . equals ( q ) || ! q ? null : this . _getNextSourceNode ( e ,
1 , q ) ; return e } , _getNextSourceNode : function ( a , b , c ) { function f ( a ) { return ! ( a . equals ( c ) || a . equals ( e ) ) } for ( var e = this . range . root , a = a . getNextSourceNode ( b , null , f ) ; ! d ( a ) ; ) a = a . getNextSourceNode ( b , null , f ) ; return a } } ; CKEDITOR . dom . range . prototype . createIterator = function ( ) { return new a ( this ) } } ) ( ) ;
CKEDITOR . command = function ( a , e ) { this . uiItems = [ ] ; this . exec = function ( b ) { if ( this . state == CKEDITOR . TRISTATE _DISABLED || ! this . checkAllowed ( ) ) return false ; this . editorFocus && a . focus ( ) ; return this . fire ( "exec" ) === false ? true : e . exec . call ( this , a , b ) !== false } ; this . refresh = function ( a , b ) { if ( ! this . readOnly && a . readOnly ) return true ; if ( this . context && ! b . isContextFor ( this . context ) ) { this . disable ( ) ; return true } if ( ! this . checkAllowed ( true ) ) { this . disable ( ) ; return true } this . startDisabled || this . enable ( ) ; this . modes && ! this . modes [ a . mode ] &&
this . disable ( ) ; return this . fire ( "refresh" , { editor : a , path : b } ) === false ? true : e . refresh && e . refresh . apply ( this , arguments ) !== false } ; var b ; this . checkAllowed = function ( c ) { return ! c && typeof b == "boolean" ? b : b = a . activeFilter . checkFeature ( this ) } ; CKEDITOR . tools . extend ( this , e , { modes : { wysiwyg : 1 } , editorFocus : 1 , contextSensitive : ! ! e . context , state : CKEDITOR . TRISTATE _DISABLED } ) ; CKEDITOR . event . call ( this ) } ;
CKEDITOR . command . prototype = { enable : function ( ) { this . state == CKEDITOR . TRISTATE _DISABLED && this . checkAllowed ( ) && this . setState ( ! this . preserveState || typeof this . previousState == "undefined" ? CKEDITOR . TRISTATE _OFF : this . previousState ) } , disable : function ( ) { this . setState ( CKEDITOR . TRISTATE _DISABLED ) } , setState : function ( a ) { if ( this . state == a || a != CKEDITOR . TRISTATE _DISABLED && ! this . checkAllowed ( ) ) return false ; this . previousState = this . state ; this . state = a ; this . fire ( "state" ) ; return true } , toggleState : function ( ) { this . state == CKEDITOR . TRISTATE _OFF ?
this . setState ( CKEDITOR . TRISTATE _ON ) : this . state == CKEDITOR . TRISTATE _ON && this . setState ( CKEDITOR . TRISTATE _OFF ) } } ; CKEDITOR . event . implementOn ( CKEDITOR . command . prototype ) ; CKEDITOR . ENTER _P = 1 ; CKEDITOR . ENTER _BR = 2 ; CKEDITOR . ENTER _DIV = 3 ;
CKEDITOR . config = { customConfig : "config.js" , autoUpdateElement : ! 0 , language : "" , defaultLanguage : "en" , contentsLangDirection : "" , enterMode : CKEDITOR . ENTER _P , forceEnterMode : ! 1 , shiftEnterMode : CKEDITOR . ENTER _BR , docType : "<!DOCTYPE html>" , bodyId : "" , bodyClass : "" , fullPage : ! 1 , height : 200 , extraPlugins : "" , removePlugins : "" , protectedSource : [ ] , tabIndex : 0 , width : "" , baseFloatZIndex : 1E4 , blockedKeystrokes : [ CKEDITOR . CTRL + 66 , CKEDITOR . CTRL + 73 , CKEDITOR . CTRL + 85 ] } ;
( function ( ) { function a ( a , b , c , d , f ) { var e , i , a = [ ] ; for ( e in b ) { i= b [ e ] ; i = typeof i == "boolean" ? { } : typeof i == "function" ? { match : i } : Q ( i ) ; if ( e . charAt ( 0 ) != "$" ) i. elements = e ; if ( c ) i . featureName = c . toLowerCase ( ) ; var q= i ; q . elements = g ( q . elements , /\s+/ ) || null ; q . propertiesOnly = q . propertiesOnly || q . elements === true ; var o = /\s*,\s*/ , k = void 0 ; for ( k in v ) { q [ k ] = g ( q [ k ] , o ) || null ; var l = q , B = z [ k ] , s = g ( q [ z [ k ] ] , o ) , n = q [ k ] , x = [ ] , A = true , h = void 0 ; s ? A = false : s = { } ; for ( h in n ) if ( h . charAt ( 0 ) == "!" ) { h= h . slice ( 1 ) ; x . push ( h ) ; s [ h ] = true ; A = false } for ( ; h =
x. pop ( ) ; ) { n [ h ] = n [ "!" + h ] ; delete n [ "!" + h ] } l [ B ] = ( A ? false : s ) || null } q . match = q . match || null ; d . push ( i) ; a . push ( i ) } for ( var b = f . elements , f = f . generic , D , c = 0 , d = a . length ; c < d ; ++ c ) { e = Q( a [ c ] ) ; i = e . classes === true || e . styles === true || e . attributes === true ; q= e ; k = B = o = void 0 ; for ( o in v ) q [ o ] = r ( q [ o ] ) ; l = true ; for ( k in z ) { o = z [ k ] ; B = q [ o ] ; s = [ ] ; n = void 0 ; for ( n in B ) n . indexOf ( "*" ) > - 1 ? s. push ( RegExp ( "^" + n . replace ( /\*/g , ".*" ) + "$" ) ) : s. push ( n ) ; B = s ; if ( B . length ) { q [ o ] = B ; l = false } } q . nothingRequired = l ; q . noProperties = ! ( q . attributes || q . classes || q . styles ) ;
if ( e . elements === true || e . elements === null ) f [ i ? "unshift" : "push" ] ( e ) ; else { q = e . elements ; delete e . elements ; for ( D in q ) if ( b [ D ] ) b [ D ] [ i ? "unshift" : "push" ] ( e ) ; else b [ D ] = [ e ] } } } function e ( a , c , d , f ) { if ( ! a . match || a . match ( c ) ) if ( f || h ( a , c ) ) { if ( ! a . propertiesOnly ) d . valid = true ; if ( ! d . allAttributes ) d . allAttributes = b ( a . attributes , c . attributes , d . validAttributes ) ; if ( ! d . allStyles ) d . allStyles = b ( a . styles , c . styles , d . validStyles ) ; if ( ! d . allClasses ) { a = a . classes ; c = c . classes ; f = d . validClasses ; if ( a ) if ( a === true ) a = true ; else { for ( var e = 0 ,
i= c . length , q ; e < i ; ++ e ) { q = c [ e ] ; f [ q ] || ( f [ q ] = a ( q ) ) } a = false } else a = false ; d . allClasses = a } } } function b ( a , b , c ) { if ( ! a ) return false ; if ( a === true ) return true ; for ( var d in b ) c [ d ] || ( c [ d ] = a ( d ) ) ; return false } function c ( a , b , c ) { if ( ! a . match || a . match ( b ) ) { if ( a . noProperties ) return false ; c . hadInvalidAttribute = f ( a . attributes , b . attributes ) || c . hadInvalidAttribute ; c . hadInvalidStyle = f ( a . styles , b . styles ) || c . hadInvalidStyle ; a = a . classes ; b = b . classes ; if ( a ) { for ( var d = false , e = a === true , i= b . length ; i -- ; ) if ( e || a ( b [ i] ) ) { b . splice ( i , 1 ) ; d =
true } a = d } else a = false ; c . hadInvalidClass = a || c . hadInvalidClass } } function f ( a , b ) { if ( ! a ) return false ; var c = false , d = a === true , f ; for ( f in b ) if ( d || a ( f ) ) { delete b [ f ] ; c = true } return c } function d ( a , b , c ) { if ( a . disabled || a . customConfig && ! c || ! b ) return false ; a . _ . cachedChecks = { } ; return true } function g ( a , b ) { if ( ! a ) return false ; if ( a === true ) return a ; if ( typeof a == "string" ) { a = J ( a ) ; return a == "*" ? true : CKEDITOR . tools . convertArrayToObject ( a . split ( b ) ) } if ( CKEDITOR . tools . isArray ( a ) ) return a . length ? CKEDITOR . tools . convertArrayToObject ( a ) :
false ; var c = { } , d = 0 , f ; for ( f in a ) { c [ f ] = a [ f ] ; d ++ } return d ? c : false } function h ( a , b ) { if ( a . nothingRequired ) return true ; var c , d , f , e ; if ( f = a . requiredClasses ) { e = b . classes ; for ( c = 0 ; c < f . length ; ++ c ) { d = f [ c ] ; if ( typeof d == "string" ) { if ( CKEDITOR . tools . indexOf ( e , d ) == - 1 ) return false } else if ( ! CKEDITOR . tools . checkIfAnyArrayItemMatches ( e , d ) ) return false } } return m ( b . styles , a . requiredStyles ) && m ( b . attributes , a . requiredAttributes ) } function m ( a , b ) { if ( ! b ) return true ; for ( var c = 0 , d ; c < b . length ; ++ c ) { d = b [ c ] ; if ( typeof d == "string" ) { if ( ! ( d in
a ) ) return false } else if ( ! CKEDITOR . tools . checkIfAnyObjectPropertyMatches ( a , d ) ) return false } return true } function j ( a ) { if ( ! a ) return { } ; for ( var a = a . split ( /\s*,\s*/ ) . sort ( ) , b = { } ; a . length ; ) b [ a . shift ( ) ] = A; return b } function p ( a ) { for ( var b , c , d , f , e = { } , i= 1 , a = J ( a ) ; b = a . match ( B ) ; ) { if ( c = b [ 2 ] ) { d = u( c , "styles" ) ; f = u ( c , "attrs" ) ; c = u ( c , "classes" ) } else d = f = c = null ; e [ "$" + i ++ ] = { elements : b [ 1 ] , classes : c , styles : d , attributes : f } ; a = a . slice ( b [ 0 ] . length ) } return e } function u ( a , b ) { var c = a . match ( D[ b ] ) ; return c ? J ( c [ 1 ] ) : null } function t ( a ) { var b =
a . styleBackup = a . attributes . style , c = a . classBackup = a . attributes [ "class" ] ; if ( ! a . styles ) a . styles = CKEDITOR . tools . parseCssText ( b || "" , 1 ) ; if ( ! a . classes ) a . classes = c ? c . split ( /\s+/ ) : [ ] } function y ( a , b , d , f ) { var i= 0 , k ; if ( f . toHtml ) b . name = b . name . replace ( G , "$1" ) ; if ( f . doCallbacks && a . elementCallbacks ) { a : for ( var l= a . elementCallbacks , B = 0 , s = l . length , g ; B < s ; ++ B ) if ( g = l [ B ] ( b ) ) { k = g ; break a } if ( k ) return k } if ( f . doTransform ) if ( k = a . _ . transformations [ b . name ] ) { t( b ) ; for ( l = 0 ; l < k . length ; ++ l ) q ( a , b , k [ l ] ) ; w ( b ) } if ( f . doFilter ) { a : { l = b . name ;
B= a . _ ; a = B . allowedRules . elements [ l ] ; k = B . allowedRules . generic ; l = B . disallowedRules . elements [ l ] ; B = B . disallowedRules . generic ; s = f . skipRequired ; g = { valid : false , validAttributes : { } , validClasses : { } , validStyles : { } , allAttributes : false , allClasses : false , allStyles : false , hadInvalidAttribute : false , hadInvalidClass : false , hadInvalidStyle : false } ; var n, r ; if ( ! a && ! k ) a = null ; else { t ( b ) ; if ( l ) { n = 0 ; for ( r = l . length ; n < r ; ++ n ) if ( c ( l [ n ] , b , g ) === false ) { a = null ; break a } } if ( B) { n = 0 ; for ( r = B . length ; n < r ; ++ n ) c ( B [ n ] , b , g ) } if ( a ) { n = 0 ; for ( r = a . length ; n <
r; ++ n ) e ( a [ n ] , b , g , s ) } if ( k ) { n = 0 ; for ( r = k . length ; n < r ; ++ n ) e ( k [ n ] , b , g , s ) } a = g } } if ( ! a ) { d . push ( b ) ; return F } if ( ! a . valid ) { d . push ( b ) ; return F} r = a . validAttributes ; var x = a . validStyles ; k = a . validClasses ; var l = b . attributes , A = b . styles , B = b . classes , s = b . classBackup , z = b . styleBackup , v , h , D = [ ] ; g = [ ] ; var j = /^data-cke-/ ; n = false ; delete l . style ; delete l [ "class" ] ; delete b . classBackup ; delete b . styleBackup ; if ( ! a . allAttributes ) for ( v in l ) if ( ! r [ v ] ) if ( j . test ( v ) ) { if ( v != ( h = v . replace ( /^data-cke-saved-/ , "" ) ) && ! r[ h ] ) { delete l [ v ] ; n = true } } else { delete l [ v ] ;
n = true } if ( ! a . allStyles || a . hadInvalidStyle ) { for ( v in A ) a . allStyles || x [ v ] ? D . push ( v + ":" + A [ v ] ) : n = true ; if ( D . length ) l . style = D . sort ( ) . join ( "; " ) } else if ( z) l . style = z ; if ( ! a . allClasses || a . hadInvalidClass ) { for ( v= 0 ; v < B . length ; ++ v ) ( a . allClasses || k [ B [ v ] ] ) && g . push ( B [ v ] ) ; g . length && ( l [ "class" ] = g . sort ( ) . join ( " " ) ) ; s&& g . length < s . split ( /\s+/ ) . length && ( n= true ) } else s && ( l [ "class" ] = s ) ; n && ( i = F ) ; if ( ! f . skipFinalValidation && ! o ( b ) ) { d . push ( b ) ; return F } } if ( f . toHtml ) b . name = b . name . replace ( aa, "cke:$1" ) ; return i } function n ( a ) { var b =
[ ] , c ; for ( c in a ) c . indexOf ( "*" ) > - 1 && b . push ( c . replace ( /\*/g , ".*" ) ) ; return b . length ? RegExp ( "^(?:" + b . join ( "|" ) + ")$" ) : null } function w ( a ) { var b = a . attributes , c ; delete b . style ; delete b [ "class" ] ; if ( c = CKEDITOR . tools . writeCssText ( a . styles , true ) ) b . style = c ; a . classes . length && ( b [ "class" ] = a . classes . sort ( ) . join ( " " ) ) } function o ( a ) { switch ( a . name ) { case "a" : if ( ! a . children . length && ! a . attributes . name ) return false ; break ; case "img" : if ( ! a . attributes . src ) return false } return true } function r ( a ) { if ( ! a ) return false ; if ( a === true ) return true ;
var b = n ( a ) ; return function ( c ) { return c in a || b && c . match ( b ) } } function i ( ) { return new CKEDITOR . htmlParser . element ( "br" ) } function k ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && ( a . name == "br" || N . $block [ a . name ] ) } function l ( a , b , c ) { var d = a . name ; if ( N . $empty [ d ] || ! a . children . length ) if ( d == "hr" && b == "br" ) a . replaceWith ( i ( ) ) ; else { a . parent && c . push ( { check : "it" , el : a . parent } ) ; a . remove ( ) } else if ( N . $block [ d ] || d == "tr" ) if ( b == "br" ) { if ( a . previous && ! k( a . previous ) ) { b = i ( ) ; b . insertBefore ( a ) } if ( a . next && ! k( a . next ) ) { b = i ( ) ; b . insertAfter ( a ) } a . replaceWithChildren ( ) } else { var d =
a . children , f ; b : { f = N [ b ] ; for ( var e = 0 , q= d . length , o ; e < q ; ++ e ) { o = d [ e ] ; if ( o . type == CKEDITOR . NODE _ELEMENT && ! f [ o . name ] ) { f = false ; break b } } f = true } if ( f ) { a . name = b ; a . attributes = { } ; c . push ( { check : "parent-down" , el : a } ) } else { f = a . parent ; for ( var e = f . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || f . name == "body" , l, q = d . length ; q > 0 ; ) { o = d [ -- q ] ; if ( e && ( o . type == CKEDITOR . NODE _TEXT || o . type == CKEDITOR . NODE _ELEMENT && N. $inline [ o . name ] ) ) { if ( ! l ) { l = new CKEDITOR . htmlParser . element ( b ) ; l . insertAfter ( a ) ; c . push ( { check : "parent-down" , el : l} ) } l . add ( o , 0 ) } else { l =
null ; o . insertAfter ( a ) ; f . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT && ( o . type == CKEDITOR . NODE _ELEMENT && ! N[ f . name ] [ o . name ] ) && c . push ( { check : "el-up" , el : o } ) } } a . remove ( ) } } else if ( d == "style" ) a . remove ( ) ; else { a . parent && c . push ( { check : "it" , el : a . parent } ) ; a . replaceWithChildren ( ) } } function q ( a , b , c ) { var d , f ; for ( d = 0 ; d < c . length ; ++ d ) { f = c [ d ] ; if ( ( ! f . check || a . check ( f . check , false ) ) && ( ! f . left || f . left ( b ) ) ) { f . right ( b , ba) ; break } } } function x ( a , b ) { var c = b . getDefinition ( ) , d = c . attributes , f = c . styles , e , i, q , o ; if ( a . name != c . element ) return false ;
for ( e in d ) if ( e == "class" ) { c = d [ e ] . split ( /\s+/ ) ; for ( q = a . classes . join ( "|" ) ; o = c . pop ( ) ; ) if ( q. indexOf ( o ) == - 1 ) return false } else if ( a . attributes [ e ] != d [ e ] ) return false ; for ( i in f ) if ( a . styles [ i ] != f [ i ] ) return false ; return true } function s ( a , b ) { var c , d ; if ( typeof a == "string" ) c = a ; else if ( a instanceof CKEDITOR . style ) d = a ; else { c = a [ 0 ] ; d = a [ 1 ] } return [ { element : c , left : d , right : function ( a , c ) { c . transform ( a , b ) } } ] } function M ( a ) { return function ( b ) { return x( b , a ) } } function R ( a ) { return function ( b , c ) { c [ a ] ( b ) } } var N = CKEDITOR . dtd ,
F = 1 , Q = CKEDITOR . tools . copy , J = CKEDITOR . tools . trim , A = "cke-test" , E = [ "" , "p" , "br" , "div" ] ; CKEDITOR . FILTER _SKIP _TREE = 2 ; CKEDITOR . filter = function ( a ) { this . allowedContent = [ ] ; this . disallowedContent = [ ] ; this . elementCallbacks = null ; this . disabled = false ; this . editor = null ; this . id = CKEDITOR . tools . getNextNumber ( ) ; this . _ = { allowedRules : { elements : { } , generic : [ ] } , disallowedRules : { elements : { } , generic : [ ] } , transformations : { } , cachedTests : { } } ; CKEDITOR . filter . instances [ this . id ] = this ; if ( a instanceof CKEDITOR . editor ) { a = this . editor = a ;
this . customConfig = true ; var b = a . config . allowedContent ; if ( b === true ) this . disabled = true ; else { if ( ! b ) this . customConfig = false ; this . allow ( b , "config" , 1 ) ; this . allow ( a . config . extraAllowedContent , "extra" , 1 ) ; this . allow ( E[ a . enterMode ] + " " + E [ a . shiftEnterMode ] , "default" , 1 ) ; this . disallow ( a . config . disallowedContent ) } } else { this . customConfig = false ; this . allow ( a , "default" , 1 ) } } ; CKEDITOR . filter . instances = { } ; CKEDITOR . filter . prototype = { allow : function ( b , c , f ) { if ( ! d ( this , b , f ) ) return false ; var e , i ; if ( typeof b == "string" ) b = p ( b ) ;
else if ( b instanceof CKEDITOR . style ) { if ( b . toAllowedContentRules ) return this . allow ( b . toAllowedContentRules ( this . editor ) , c , f ) ; e = b . getDefinition ( ) ; b = { } ; f = e . attributes ; b [ e . element ] = e = { styles : e . styles , requiredStyles : e . styles && CKEDITOR . tools . objectKeys ( e . styles ) } ; if ( f ) { f = Q ( f ) ; e . classes = f [ "class" ] ? f [ "class" ] . split ( /\s+/ ) : null ; e . requiredClasses = e . classes ; delete f [ "class" ] ; e . attributes = f ; e . requiredAttributes = f && CKEDITOR . tools . objectKeys ( f ) } } else if ( CKEDITOR . tools . isArray ( b ) ) { for ( e = 0 ; e < b . length ; ++ e ) i= this . allow ( b [ e ] ,
c , f ) ; return i } a ( this , b , c , this . allowedContent , this . _ . allowedRules ) ; return true } , applyTo : function ( a , b , c , d ) { if ( this . disabled ) return false ; var f = this , e = [ ] , i = this . editor && this . editor . config . protectedSource , q, k = false , B = { doFilter : ! c , doTransform : true , doCallbacks : true , toHtml : b } ; a . forEach ( function ( a ) { if ( a . type == CKEDITOR . NODE _ELEMENT ) { if ( a . attributes [ "data-cke-filter" ] == "off" ) return false ; if ( ! b || ! ( a . name == "span" && ~ CKEDITOR . tools . objectKeys ( a . attributes ) . join ( "|" ) . indexOf ( "data-cke-" ) ) ) { q= y ( f , a , e , B ) ; if ( q & F ) k =
true ; else if ( q & 2 ) return false } } else if ( a . type == CKEDITOR . NODE _COMMENT && a . value . match ( /^\{cke_protected\}(?!\{C\})/ ) ) { var c ; a : { var d = decodeURIComponent ( a . value . replace ( /^\{cke_protected\}/ , "" ) ) ; c = [ ] ; var o, l , n ; if ( i ) for ( l = 0 ; l < i . length ; ++ l ) if ( ( n = d . match ( i [ l ] ) ) && n [ 0 ] . length == d . length ) { c = true ; break a } d = CKEDITOR . htmlParser . fragment . fromHtml ( d ) ; d . children . length == 1 && ( o = d . children [ 0 ] ) . type == CKEDITOR . NODE _ELEMENT && y ( f , o, c , B ) ; c = ! c . length } c || e . push ( a ) } } , null , true ) ; e . length && ( k= true ) ; for ( var n , a = [ ] , d = E [ d || ( this . editor ?
this . editor . enterMode : CKEDITOR . ENTER _P ) ] ; c = e . pop ( ) ; ) c . type == CKEDITOR . NODE _ELEMENT ? l ( c , d , a ) : c . remove ( ) ; for ( ; n = a . pop ( ) ; ) { c = n. el ; if ( c . parent ) switch ( n . check ) { case "it" : N . $removeEmpty [ c . name ] && ! c . children . length ? l( c , d , a ) : o ( c ) || l ( c , d , a ) ; break ; case "el-up" : c . parent . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT && ! N[ c . parent. name ] [ c . name ] && l ( c , d , a ) ; break ; case "parent-down" : c . parent . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT && ! N[ c . parent. name ] [ c . name ] && l ( c . parent , d , a ) } } return k } , checkFeature : function ( a ) { if ( this . disabled ||
! a ) return true ; a . toFeature && ( a = a . toFeature ( this . editor ) ) ; return ! a . requiredContent || this . check ( a . requiredContent ) } , disable : function ( ) { this . disabled = true } , disallow : function ( b ) { if ( ! d ( this , b , true ) ) return false ; typeof b == "string" && ( b = p ( b ) ) ; a ( this , b , null , this . disallowedContent , this . _ . disallowedRules ) ; return true } , addContentForms : function ( a ) { if ( ! this . disabled && a ) { var b , c , d = [ ] , f ; for ( b = 0 ; b < a . length && ! f ; ++ b ) { c = a [ b ] ; if ( ( typeof c == "string" || c instanceof CKEDITOR . style ) && this . check ( c ) ) f = c } if ( f ) { for ( b = 0 ; b < a . length ; ++ b ) d . push ( s ( a [ b ] ,
( function ( ) { function a ( a , b , c , d , f ) { var e , n , a = [ ] ; for ( e in b ) { n= b [ e ] ; n = typeof n == "boolean" ? { } : typeof n == "function" ? { match : n } : L ( n ) ; if ( e . charAt ( 0 ) != "$" ) n. elements = e ; if ( c ) n . featureName = c . toLowerCase ( ) ; var j= n ; j . elements = h ( j . elements , /\s+/ ) || null ; j . propertiesOnly = j . propertiesOnly || j . elements === true ; var k = /\s*,\s*/ , r = void 0 ; for ( r in C ) { j [ r ] = h ( j [ r ] , k ) || null ; var x = j , o = A [ r ] , w = h ( j [ A [ r ] ] , k ) , p = j [ r ] , g = [ ] , i = true , F = void 0 ; w ? i = false : w = { } ; for ( F in p ) if ( F . charAt ( 0 ) == "!" ) { F= F . slice ( 1 ) ; g . push ( F ) ; w [ F ] = true ; i = false } for ( ; F =
g. pop ( ) ; ) { p [ F ] = p [ "!" + F ] ; delete p [ "!" + F ] } x [ o ] = ( i ? false : w ) || null } j . match = j . match || null ; d . push ( n) ; a . push ( n ) } for ( var b = f . elements , f = f . generic , D , c = 0 , d = a . length ; c < d ; ++ c ) { e = L( a [ c ] ) ; n = e . classes === true || e . styles === true || e . attributes === true ; j= e ; r = o = k = void 0 ; for ( k in C ) j [ k ] = u ( j [ k ] ) ; x = true ; for ( r in A ) { k = A [ r ] ; o = j [ k ] ; w = [ ] ; p = void 0 ; for ( p in o ) p . indexOf ( "*" ) > - 1 ? w. push ( RegExp ( "^" + p . replace ( /\*/g , ".*" ) + "$" ) ) : w. push ( p ) ; o = w ; if ( o . length ) { j [ k ] = o ; x = false } } j . nothingRequired = x ; j . noProperties = ! ( j . attributes || j . classes || j . styles ) ;
if ( e . elements === true || e . elements === null ) f [ n ? "unshift" : "push" ] ( e ) ; else { j = e . elements ; delete e . elements ; for ( D in j ) if ( b [ D ] ) b [ D ] [ n ? "unshift" : "push" ] ( e ) ; else b [ D ] = [ e ] } } } function e ( a , c , d , f ) { if ( ! a . match || a . match ( c ) ) if ( f || l ( a , c ) ) { if ( ! a . propertiesOnly ) d . valid = true ; if ( ! d . allAttributes ) d . allAttributes = b ( a . attributes , c . attributes , d . validAttributes ) ; if ( ! d . allStyles ) d . allStyles = b ( a . styles , c . styles , d . validStyles ) ; if ( ! d . allClasses ) { a = a . classes ; c = c . classes ; f = d . validClasses ; if ( a ) if ( a === true ) a = true ; else { for ( var e = 0 ,
n= c . length , j ; e < n ; ++ e ) { j = c [ e ] ; f [ j ] || ( f [ j ] = a ( j ) ) } a = false } else a = false ; d . allClasses = a } } } function b ( a , b , c ) { if ( ! a ) return false ; if ( a === true ) return true ; for ( var d in b ) c [ d ] || ( c [ d ] = a ( d ) ) ; return false } function c ( a , b , c ) { if ( ! a . match || a . match ( b ) ) { if ( a . noProperties ) return false ; c . hadInvalidAttribute = f ( a . attributes , b . attributes ) || c . hadInvalidAttribute ; c . hadInvalidStyle = f ( a . styles , b . styles ) || c . hadInvalidStyle ; a = a . classes ; b = b . classes ; if ( a ) { for ( var d = false , e = a === true , n= b . length ; n -- ; ) if ( e || a ( b [ n] ) ) { b . splice ( n , 1 ) ; d =
true } a = d } else a = false ; c . hadInvalidClass = a || c . hadInvalidClass } } function f ( a , b ) { if ( ! a ) return false ; var c = false , d = a === true , f ; for ( f in b ) if ( d || a ( f ) ) { delete b [ f ] ; c = true } return c } function d ( a , b , c ) { if ( a . disabled || a . customConfig && ! c || ! b ) return false ; a . _ . cachedChecks = { } ; return true } function h ( a , b ) { if ( ! a ) return false ; if ( a === true ) return a ; if ( typeof a == "string" ) { a = B ( a ) ; return a == "*" ? true : CKEDITOR . tools . convertArrayToObject ( a . split ( b ) ) } if ( CKEDITOR . tools . isArray ( a ) ) return a . length ? CKEDITOR . tools . convertArrayToObject ( a ) :
false ; var c = { } , d = 0 , f ; for ( f in a ) { c [ f ] = a [ f ] ; d ++ } return d ? c : false } function l ( a , b ) { if ( a . nothingRequired ) return true ; var c , d , f , e ; if ( f = a . requiredClasses ) { e = b . classes ; for ( c = 0 ; c < f . length ; ++ c ) { d = f [ c ] ; if ( typeof d == "string" ) { if ( CKEDITOR . tools . indexOf ( e , d ) == - 1 ) return false } else if ( ! CKEDITOR . tools . checkIfAnyArrayItemMatches ( e , d ) ) return false } } return i ( b . styles , a . requiredStyles ) && i ( b . attributes , a . requiredAttributes ) } function i ( a , b ) { if ( ! b ) return true ; for ( var c = 0 , d ; c < b . length ; ++ c ) { d = b [ c ] ; if ( typeof d == "string" ) { if ( ! ( d in
a ) ) return false } else if ( ! CKEDITOR . tools . checkIfAnyObjectPropertyMatches ( a , d ) ) return false } return true } function g ( a ) { if ( ! a ) return { } ; for ( var a = a . split ( /\s*,\s*/ ) . sort ( ) , b = { } ; a . length ; ) b [ a . shift ( ) ] = w; return b } function m ( a ) { for ( var b , c , d , f , e = { } , n= 1 , a = B ( a ) ; b = a . match ( x ) ; ) { if ( c = b [ 2 ] ) { d = t( c , "styles" ) ; f = t ( c , "attrs" ) ; c = t ( c , "classes" ) } else d = f = c = null ; e [ "$" + n ++ ] = { elements : b [ 1 ] , classes : c , styles : d , attributes : f } ; a = a . slice ( b [ 0 ] . length ) } return e } function t ( a , b ) { var c = a . match ( F[ b ] ) ; return c ? B ( c [ 1 ] ) : null } function s ( a ) { var b =
a . styleBackup = a . attributes . style , c = a . classBackup = a . attributes [ "class" ] ; if ( ! a . styles ) a . styles = CKEDITOR . tools . parseCssText ( b || "" , 1 ) ; if ( ! a . classes ) a . classes = c ? c . split ( /\s+/ ) : [ ] } function y ( a , b , d , f ) { var k= 0 , r ; if ( f . toHtml ) b . name = b . name . replace ( G , "$1" ) ; if ( f . doCallbacks && a . elementCallbacks ) { a : for ( var x= a . elementCallbacks , h = 0 , o = x . length , w ; h < o ; ++ h ) if ( w = x [ h ] ( b ) ) { r = w ; break a } if ( r ) return r } if ( f . doTransform ) if ( r = a . _ . transformations [ b . name ] ) { s( b ) ; for ( x = 0 ; x < r . length ; ++ x ) n ( a , b , r [ x ] ) ; q ( b ) } if ( f . doFilter ) { a : { x = b . name ;
h= a . _ ; a = h . allowedRules . elements [ x ] ; r = h . allowedRules . generic ; x = h . disallowedRules . elements [ x ] ; h = h . disallowedRules . generic ; o = f . skipRequired ; w = { valid : false , validAttributes : { } , validClasses : { } , validStyles : { } , allAttributes : false , allClasses : false , allStyles : false , hadInvalidAttribute : false , hadInvalidClass : false , hadInvalidStyle : false } ; var p, g ; if ( ! a && ! r ) a = null ; else { s ( b ) ; if ( x ) { p = 0 ; for ( g = x . length ; p < g ; ++ p ) if ( c ( x [ p ] , b , w ) === false ) { a = null ; break a } } if ( h) { p = 0 ; for ( g = h . length ; p < g ; ++ p ) c ( h [ p ] , b , w ) } if ( a ) { p = 0 ; for ( g = a . length ; p <
g; ++ p ) e ( a [ p ] , b , w , o ) } if ( r ) { p = 0 ; for ( g = r . length ; p < g ; ++ p ) e ( r [ p ] , b , w , o ) } a = w } } if ( ! a ) { d . push ( b ) ; return z } if ( ! a . valid ) { d . push ( b ) ; return z} g = a . validAttributes ; var i = a . validStyles ; r = a . validClasses ; var x = b . attributes , F = b . styles , h = b . classes , o = b . classBackup , C = b . styleBackup , u , A , D = [ ] ; w = [ ] ; var v = /^data-cke-/ ; p = false ; delete x . style ; delete x [ "class" ] ; delete b . classBackup ; delete b . styleBackup ; if ( ! a . allAttributes ) for ( u in x ) if ( ! g [ u ] ) if ( v . test ( u ) ) { if ( u != ( A = u . replace ( /^data-cke-saved-/ , "" ) ) && ! g[ A ] ) { delete x [ u ] ; p = true } } else { delete x [ u ] ;
p = true } if ( ! a . allStyles || a . hadInvalidStyle ) { for ( u in F ) a . allStyles || i [ u ] ? D . push ( u + ":" + F [ u ] ) : p = true ; if ( D . length ) x . style = D . sort ( ) . join ( "; " ) } else if ( C) x . style = C ; if ( ! a . allClasses || a . hadInvalidClass ) { for ( u= 0 ; u < h . length ; ++ u ) ( a . allClasses || r [ h [ u ] ] ) && w . push ( h [ u ] ) ; w . length && ( x [ "class" ] = w . sort ( ) . join ( " " ) ) ; o&& w . length < o . split ( /\s+/ ) . length && ( p= true ) } else o && ( x [ "class" ] = o ) ; p && ( k = z ) ; if ( ! f . skipFinalValidation && ! j ( b ) ) { d . push ( b ) ; return z } } if ( f . toHtml ) b . name = b . name . replace ( $, "cke:$1" ) ; return k } function p ( a ) { var b =
[ ] , c ; for ( c in a ) c . indexOf ( "*" ) > - 1 && b . push ( c . replace ( /\*/g , ".*" ) ) ; return b . length ? RegExp ( "^(?:" + b . join ( "|" ) + ")$" ) : null } function q ( a ) { var b = a . attributes , c ; delete b . style ; delete b [ "class" ] ; if ( c = CKEDITOR . tools . writeCssText ( a . styles , true ) ) b . style = c ; a . classes . length && ( b [ "class" ] = a . classes . sort ( ) . join ( " " ) ) } function j ( a ) { switch ( a . name ) { case "a" : if ( ! a . children . length && ! a . attributes . name ) return false ; break ; case "img" : if ( ! a . attributes . src ) return false } return true } function u ( a ) { if ( ! a ) return false ; if ( a === true ) return true ;
var b = p ( a ) ; return function ( c ) { return c in a || b && c . match ( b ) } } function v ( ) { return new CKEDITOR . htmlParser . element ( "br" ) } function E ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && ( a . name == "br" || J . $block [ a . name ] ) } function k ( a , b , c ) { var d = a . name ; if ( J . $empty [ d ] || ! a . children . length ) if ( d == "hr" && b == "br" ) a . replaceWith ( v ( ) ) ; else { a . parent && c . push ( { check : "it" , el : a . parent } ) ; a . remove ( ) } else if ( J . $block [ d ] || d == "tr" ) if ( b == "br" ) { if ( a . previous && ! E( a . previous ) ) { b = v ( ) ; b . insertBefore ( a ) } if ( a . next && ! E( a . next ) ) { b = v ( ) ; b . insertAfter ( a ) } a . replaceWithChildren ( ) } else { var d =
a . children , f ; b : { f = J [ b ] ; for ( var e = 0 , n= d . length , j ; e < n ; ++ e ) { j = d [ e ] ; if ( j . type == CKEDITOR . NODE _ELEMENT && ! f [ j . name ] ) { f = false ; break b } } f = true } if ( f ) { a . name = b ; a . attributes = { } ; c . push ( { check : "parent-down" , el : a } ) } else { f = a . parent ; for ( var e = f . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || f . name == "body" , k, r , n = d . length ; n > 0 ; ) { j = d [ -- n ] ; if ( e && ( j . type == CKEDITOR . NODE _TEXT || j . type == CKEDITOR . NODE _ELEMENT && J. $inline [ j . name ] ) ) { if ( ! k ) { k = new CKEDITOR . htmlParser . element ( b ) ; k . insertAfter ( a ) ; c . push ( { check : "parent-down" , el : k} ) } k . add ( j ,
0 ) } else { k = null ; r = J [ f . name ] || J . span ; j . insertAfter ( a ) ; f . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT && ( j . type == CKEDITOR . NODE _ELEMENT && ! r[ j . name ] ) && c . push ( { check : "el-up" , el : j } ) } } a . remove ( ) } } else if ( d == "style" ) a . remove ( ) ; else { a . parent && c . push ( { check : "it" , el : a . parent } ) ; a . replaceWithChildren ( ) } } function n ( a , b , c ) { var d , f ; for ( d = 0 ; d < c . length ; ++ d ) { f = c [ d ] ; if ( ( ! f . check || a . check ( f . check , false ) ) && ( ! f . left || f . left ( b ) ) ) { f . right ( b , aa) ; break } } } function r ( a , b ) { var c = b . getDefinition ( ) , d = c . attributes , f = c . styles , e , n, j , k ; if ( a . name !=
c . element ) return false ; for ( e in d ) if ( e == "class" ) { c = d [ e ] . split ( /\s+/ ) ; for ( j = a . classes . join ( "|" ) ; k = c . pop ( ) ; ) if ( j. indexOf ( k ) == - 1 ) return false } else if ( a . attributes [ e ] != d [ e ] ) return false ; for ( n in f ) if ( a . styles [ n ] != f [ n ] ) return false ; return true } function o ( a , b ) { var c , d ; if ( typeof a == "string" ) c = a ; else if ( a instanceof CKEDITOR . style ) d = a ; else { c = a [ 0 ] ; d = a [ 1 ] } return [ { element : c , left : d , right : function ( a , c ) { c . transform ( a , b ) } } ] } function M ( a ) { return function ( b ) { return r( b , a ) } } function D ( a ) { return function ( b , c ) { c [ a ] ( b ) } }
var J = CKEDITOR . dtd , z = 1 , L = CKEDITOR . tools . copy , B = CKEDITOR . tools . trim , w = "cke-test" , H = [ "" , "p" , "br" , "div" ] ; CKEDITOR . FILTER _SKIP _TREE = 2 ; CKEDITOR . filter = function ( a ) { this . allowedContent = [ ] ; this . disallowedContent = [ ] ; this . elementCallbacks = null ; this . disabled = false ; this . editor = null ; this . id = CKEDITOR . tools . getNextNumber ( ) ; this . _ = { allowedRules : { elements : { } , generic : [ ] } , disallowedRules : { elements : { } , generic : [ ] } , transformations : { } , cachedTests : { } } ; CKEDITOR . filter . instances [ this . id ] = this ; if ( a instanceof CKEDITOR . editor ) { a =
this . editor = a ; this . customConfig = true ; var b = a . config . allowedContent ; if ( b === true ) this . disabled = true ; else { if ( ! b ) this . customConfig = false ; this . allow ( b , "config" , 1 ) ; this . allow ( a . config . extraAllowedContent , "extra" , 1 ) ; this . allow ( H[ a . enterMode ] + " " + H [ a . shiftEnterMode ] , "default" , 1 ) ; this . disallow ( a . config . disallowedContent ) } } else { this . customConfig = false ; this . allow ( a , "default" , 1 ) } } ; CKEDITOR . filter . instances = { } ; CKEDITOR . filter . prototype = { allow : function ( b , c , f ) { if ( ! d ( this , b , f ) ) return false ; var e , n ; if ( typeof b == "string" ) b =
m ( b ) ; else if ( b instanceof CKEDITOR . style ) { if ( b . toAllowedContentRules ) return this . allow ( b . toAllowedContentRules ( this . editor ) , c , f ) ; e = b . getDefinition ( ) ; b = { } ; f = e . attributes ; b [ e . element ] = e = { styles : e . styles , requiredStyles : e . styles && CKEDITOR . tools . objectKeys ( e . styles ) } ; if ( f ) { f = L ( f ) ; e . classes = f [ "class" ] ? f [ "class" ] . split ( /\s+/ ) : null ; e . requiredClasses = e . classes ; delete f [ "class" ] ; e . attributes = f ; e . requiredAttributes = f && CKEDITOR . tools . objectKeys ( f ) } } else if ( CKEDITOR . tools . isArray ( b ) ) { for ( e = 0 ; e < b . length ; ++ e ) n=
this . allow ( b [ e ] , c , f ) ; return n } a ( this , b , c , this . allowedContent , this . _ . allowedRules ) ; return true } , applyTo : function ( a , b , c , d ) { if ( this . disabled ) return false ; var f = this , e = [ ] , n = this . editor && this . editor . config . protectedSource , r, x = false , h = { doFilter : ! c , doTransform : true , doCallbacks : true , toHtml : b } ; a . forEach ( function ( a ) { if ( a . type == CKEDITOR . NODE _ELEMENT ) { if ( a . attributes [ "data-cke-filter" ] == "off" ) return false ; if ( ! b || ! ( a . name == "span" && ~ CKEDITOR . tools . objectKeys ( a . attributes ) . join ( "|" ) . indexOf ( "data-cke-" ) ) ) { r= y ( f ,
a , e , h ) ; if ( r & z ) x = true ; else if ( r & 2 ) return false } } else if ( a . type == CKEDITOR . NODE _COMMENT && a . value . match ( /^\{cke_protected\}(?!\{C\})/ ) ) { var c ; a : { var d = decodeURIComponent ( a . value . replace ( /^\{cke_protected\}/ , "" ) ) ; c = [ ] ; var j, k , o ; if ( n ) for ( k = 0 ; k < n . length ; ++ k ) if ( ( o = d . match ( n [ k ] ) ) && o [ 0 ] . length == d . length ) { c = true ; break a } d = CKEDITOR . htmlParser . fragment . fromHtml ( d ) ; d . children . length == 1 && ( j = d . children [ 0 ] ) . type == CKEDITOR . NODE _ELEMENT && y ( f , j, c , h ) ; c = ! c . length } c || e . push ( a ) } } , null , true ) ; e . length && ( x= true ) ; for ( var o ,
a = [ ] , d = H [ d || ( this . editor ? this . editor . enterMode : CKEDITOR . ENTER _P ) ] , p ; c = e . pop ( ) ; ) c . type == CKEDITOR . NODE _ELEMENT ? k ( c , d , a ) : c . remove ( ) ; for ( ; o = a . pop ( ) ; ) { c = o. el ; if ( c . parent ) { p = J [ c . parent . name ] || J . span ; switch ( o . check ) { case "it" : J . $removeEmpty [ c . name ] && ! c . children . length ? k( c , d , a ) : j ( c ) || k ( c , d , a ) ; break ; case "el-up" : c . parent . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT && ! p[ c . name ] && k ( c , d , a ) ; break ; case "parent-down" : c . parent . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT && ! p[ c . name ] && k ( c . parent , d , a ) } } } return x } , checkFeature : function ( a ) { if ( this . disabled ||
! a ) return true ; a . toFeature && ( a = a . toFeature ( this . editor ) ) ; return ! a . requiredContent || this . check ( a . requiredContent ) } , disable : function ( ) { this . disabled = true } , disallow : function ( b ) { if ( ! d ( this , b , true ) ) return false ; typeof b == "string" && ( b = m ( b ) ) ; a ( this , b , null , this . disallowedContent , this . _ . disallowedRules ) ; return true } , addContentForms : function ( a ) { if ( ! this . disabled && a ) { var b , c , d = [ ] , f ; for ( b = 0 ; b < a . length && ! f ; ++ b ) { c = a [ b ] ; if ( ( typeof c == "string" || c instanceof CKEDITOR . style ) && this . check ( c ) ) f = c } if ( f ) { for ( b = 0 ; b < a . length ; ++ b ) d . push ( o ( a [ b ] ,
f ) ) ; this . addTransformations ( d ) } } } , addElementCallback : function ( a ) { if ( ! this . elementCallbacks ) this . elementCallbacks = [ ] ; this . elementCallbacks . push ( a ) } , addFeature : function ( a ) { if ( this . disabled || ! a ) return true ; a . toFeature && ( a = a . toFeature ( this . editor ) ) ; this . allow ( a . allowedContent , a . name ) ; this . addTransformations ( a . contentTransformations ) ; this . addContentForms ( a . contentForms ) ; return a . requiredContent && ( this . customConfig || this . disallowedContent . length ) ? this . check ( a . requiredContent ) : true } , addTransformations : function ( a ) { var b ,
c ; if ( ! this . disabled && a ) { var d = this . _ . transformations , f ; for ( f = 0 ; f < a . length ; ++ f ) { b = a [ f ] ; var e = void 0 , i= void 0 , q = void 0 , o = void 0 , l = void 0 , k = void 0 ; c = [ ] ; for ( i= 0 ; i < b . length ; ++ i ) { q = b [ i ] ; if ( typeof q == "string" ) { q = q . split ( /\s*:\s*/ ) ; o = q [ 0 ] ; l = null ; k = q [ 1 ] } else { o = q . check ; l = q . left ; k = q . right } if ( ! e ) { e = q ; e = e . element ? e . element : o? o . match ( /^([a-z0-9]+)/i ) [ 0 ] : e . left . getDefinition ( ) . element } l instanceof CKEDITOR . style && ( l = M ( l ) ) ; c . push ( { check : o== e ? null : o , left : l , right : typeof k == "string" ? R ( k ) : k } ) } b = e ; d [ b ] || ( d [ b ] = [ ] ) ; d [ b ] . push ( c ) } } } ,
check : function ( a , b , c ) { if ( this . disabled ) return true ; if ( CKEDITOR . tools . isArray ( a ) ) { for ( var d = a . length ; d -- ; ) if ( this . check ( a [ d ] , b , c ) ) return true ; return false } var f , e ; if ( typeof a == "string" ) { e = a + "<" + ( b === false ? "0" : "1" ) + ( c ? "1" : "0" ) + ">" ; if ( e in this . _ . cachedChecks ) return this . _ . cachedChecks [ e ] ; d = p ( a ) . $1 ; f = d . styles ; var i = d . classes ; d . name = d . elements ; d . classes = i= i ? i . split ( /\s*,\s*/ ) : [ ] ; d . styles = j( f ) ; d . attributes = j ( d . attributes ) ; d . children = [ ] ; i . length && ( d . attributes [ "class" ] = i . join ( " " ) ) ; if ( f ) d . attributes . style =
CKEDITOR . tools . writeCssText ( d . styles ) ; f = d } else { d = a . getDefinition ( ) ; f = d . styles ; i = d . attributes || { } ; if ( f ) { f = Q( f ) ; i . style = CKEDITOR . tools . writeCssText ( f , true ) } else f = { } ; f = { name : d . element , attributes : i, classes : i [ "class" ] ? i [ "class" ] . split ( /\s+/ ) : [ ] , styles : f , children : [ ] } } var i = CKEDITOR . tools . clone ( f ) , o= [ ] , l ; if ( b !== false && ( l = this . _ . transformations [ f . name ] ) ) { for ( d = 0 ; d < l. length ; ++ d ) q ( this , f , l [ d ] ) ; w ( f ) } y ( this , i , o , { doFilter : true , doTransform : b !== false , skipRequired : ! c , skipFinalValidation : ! c } ) ; b = o . length > 0 ? false :
CKEDITOR . tools . objectCompare ( f . attributes , i . attributes , true ) ? true : false ; typeof a == "string" && ( this . _ . cachedChecks [ e ] = b ) ; return b } , getAllowedEnterMode : function ( ) { var a = [ "p" , "div" , "br" ] , b = { p : CKEDITOR . ENTER _P , div : CKEDITOR . ENTER _DIV , br : CKEDITOR . ENTER _BR } ; return function ( c , d ) { var f = a . slice ( ) , e ; if ( this . check ( E [ c ] ) ) return c ; for ( d || ( f = f . reverse ( ) ) ; e = f . pop ( ) ; ) if ( this . check ( e ) ) return b [ e ] ; return CKEDITOR . ENTER _BR } } ( ) , destroy : function ( ) { delete CKEDITOR . filter . instances [ this . id ] ; delete this . _ ; delete this . allowedContent ;
delete this . disallowedContent } } ; var v = { styles : 1 , attributes : 1 , classes : 1 } , z = { styles : "requiredStyles" , attributes : "requiredAttributes" , classes : "requiredClasses" } , B= /^([a-z0-9 *\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i, D = { styles : /{([^}]+)}/ , attrs : /\[([^\]]+)\]/ , classes : /\(([^\)]+)\)/ } , G = /^cke:(object|embed|param)$/ , aa= /^(object|embed|param)$/ , b a= CKEDITOR . filter . transformationsTools = { sizeToStyle : function ( a ) { this . lengthToStyle ( a , "width" ) ; this . lengthToStyle ( a ,
"height" ) } , sizeToAttribute : function ( a ) { this . lengthToAttribute ( a , "width" ) ; this . lengthToAttribute ( a , "height" ) } , lengthToStyle : function ( a , b , c ) { c = c || b ; if ( ! ( c in a . styles ) ) { var d = a . attributes [ b ] ; if ( d ) { /^\d+$/ . test ( d ) && ( d = d + "px" ) ; a . styles [ c ] = d } } delete a . attributes [ b ] } , lengthToAttribute : function ( a , b , c ) { c = c || b ; if ( ! ( c in a . attributes ) ) { var d = a . styles [ b ] , f = d && d . match ( /^(\d+)(?:\.\d*)?px$/ ) ; f ? a . attributes [ c ] = f [ 1 ] : d == A && ( a . attributes [ c ] = A ) } delete a . styles [ b ] } , alignmentToStyle : function ( a ) { if ( ! ( "float" in a . styles ) ) { var b =
a . attributes . align ; if ( b == "left" || b == "right" ) a . styles [ "float" ] = b } delete a . attributes . align } , alignmentToAttribute : function ( a ) { if ( ! ( "align" in a . attributes ) ) { var b = a . styles [ "float" ] ; if ( b == "left" || b == "right" ) a . attributes . align = b } delete a . styles [ "float" ] } , matchesStyle : x , transform : function ( a , b ) { if ( typeof b == "string" ) a . name = b ; else { var c = b . getDefinition ( ) , d = c . styles , f = c . attributes , e , i, q , o ; a . name = c . element ; for ( e in f ) if ( e == "class" ) { c = a . classes . join ( "|" ) ; for ( q = f [ e ] . split ( /\s+/ ) ; o= q . pop ( ) ; ) c . indexOf ( o ) == - 1 &&
a . classes . push ( o ) } else a . attributes [ e ] = f [ e ] ; for ( i in d ) a . styles [ i ] = d [ i ] } } } } ) ( ) ;
c ; if ( ! this . disabled && a ) { var d = this . _ . transformations , f ; for ( f = 0 ; f < a . length ; ++ f ) { b = a [ f ] ; var e = void 0 , n= void 0 , j = void 0 , k = void 0 , r = void 0 , x = void 0 ; c = [ ] ; for ( n= 0 ; n < b . length ; ++ n ) { j = b [ n ] ; if ( typeof j == "string" ) { j = j . split ( /\s*:\s*/ ) ; k = j [ 0 ] ; r = null ; x = j [ 1 ] } else { k = j . check ; r = j . left ; x = j . right } if ( ! e ) { e = j ; e = e . element ? e . element : k? k . match ( /^([a-z0-9]+)/i ) [ 0 ] : e . left . getDefinition ( ) . element } r instanceof CKEDITOR . style && ( r = M ( r ) ) ; c . push ( { check : k== e ? null : k , left : r , right : typeof x == "string" ? D ( x ) : x } ) } b = e ; d [ b ] || ( d [ b ] = [ ] ) ; d [ b ] . push ( c ) } } } ,
check : function ( a , b , c ) { if ( this . disabled ) return true ; if ( CKEDITOR . tools . isArray ( a ) ) { for ( var d = a . length ; d -- ; ) if ( this . check ( a [ d ] , b , c ) ) return true ; return false } var f , e ; if ( typeof a == "string" ) { e = a + "<" + ( b === false ? "0" : "1" ) + ( c ? "1" : "0" ) + ">" ; if ( e in this . _ . cachedChecks ) return this . _ . cachedChecks [ e ] ; d = m ( a ) . $1 ; f = d . styles ; var j = d . classes ; d . name = d . elements ; d . classes = j= j ? j . split ( /\s*,\s*/ ) : [ ] ; d . styles = g( f ) ; d . attributes = g ( d . attributes ) ; d . children = [ ] ; j . length && ( d . attributes [ "class" ] = j . join ( " " ) ) ; if ( f ) d . attributes . style =
CKEDITOR . tools . writeCssText ( d . styles ) ; f = d } else { d = a . getDefinition ( ) ; f = d . styles ; j = d . attributes || { } ; if ( f ) { f = L( f ) ; j . style = CKEDITOR . tools . writeCssText ( f , true ) } else f = { } ; f = { name : d . element , attributes : j, classes : j [ "class" ] ? j [ "class" ] . split ( /\s+/ ) : [ ] , styles : f , children : [ ] } } var j = CKEDITOR . tools . clone ( f ) , k= [ ] , r ; if ( b !== false && ( r = this . _ . transformations [ f . name ] ) ) { for ( d = 0 ; d < r. length ; ++ d ) n ( this , f , r [ d ] ) ; q ( f ) } y ( this , j , k , { doFilter : true , doTransform : b !== false , skipRequired : ! c , skipFinalValidation : ! c } ) ; b = k . length > 0 ? false :
CKEDITOR . tools . objectCompare ( f . attributes , j . attributes , true ) ? true : false ; typeof a == "string" && ( this . _ . cachedChecks [ e ] = b ) ; return b } , getAllowedEnterMode : function ( ) { var a = [ "p" , "div" , "br" ] , b = { p : CKEDITOR . ENTER _P , div : CKEDITOR . ENTER _DIV , br : CKEDITOR . ENTER _BR } ; return function ( c , d ) { var f = a . slice ( ) , e ; if ( this . check ( H [ c ] ) ) return c ; for ( d || ( f = f . reverse ( ) ) ; e = f . pop ( ) ; ) if ( this . check ( e ) ) return b [ e ] ; return CKEDITOR . ENTER _BR } } ( ) , destroy : function ( ) { delete CKEDITOR . filter . instances [ this . id ] ; delete this . _ ; delete this . allowedContent ;
delete this . disallowedContent } } ; var C = { styles : 1 , attributes : 1 , classes : 1 } , A = { styles : "requiredStyles" , attributes : "requiredAttributes" , classes : "requiredClasses" } , x= /^([a-z0-9\- *\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i, F = { styles : /{([^}]+)}/ , attrs : /\[([^\]]+)\]/ , classes : /\(([^\)]+)\)/ } , G = /^cke:(object|embed|param)$/ , $= /^(object|embed|param)$/ , a a= CKEDITOR . filter . transformationsTools = { sizeToStyle : function ( a ) { this . lengthToStyle ( a , "width" ) ; this . lengthToStyle ( a ,
"height" ) } , sizeToAttribute : function ( a ) { this . lengthToAttribute ( a , "width" ) ; this . lengthToAttribute ( a , "height" ) } , lengthToStyle : function ( a , b , c ) { c = c || b ; if ( ! ( c in a . styles ) ) { var d = a . attributes [ b ] ; if ( d ) { /^\d+$/ . test ( d ) && ( d = d + "px" ) ; a . styles [ c ] = d } } delete a . attributes [ b ] } , lengthToAttribute : function ( a , b , c ) { c = c || b ; if ( ! ( c in a . attributes ) ) { var d = a . styles [ b ] , f = d && d . match ( /^(\d+)(?:\.\d*)?px$/ ) ; f ? a . attributes [ c ] = f [ 1 ] : d == w && ( a . attributes [ c ] = w ) } delete a . styles [ b ] } , alignmentToStyle : function ( a ) { if ( ! ( "float" in a . styles ) ) { var b =
a . attributes . align ; if ( b == "left" || b == "right" ) a . styles [ "float" ] = b } delete a . attributes . align } , alignmentToAttribute : function ( a ) { if ( ! ( "align" in a . attributes ) ) { var b = a . styles [ "float" ] ; if ( b == "left" || b == "right" ) a . attributes . align = b } delete a . styles [ "float" ] } , matchesStyle : r , transform : function ( a , b ) { if ( typeof b == "string" ) a . name = b ; else { var c = b . getDefinition ( ) , d = c . styles , f = c . attributes , e , j, n , k ; a . name = c . element ; for ( e in f ) if ( e == "class" ) { c = a . classes . join ( "|" ) ; for ( n = f [ e ] . split ( /\s+/ ) ; k= n . pop ( ) ; ) c . indexOf ( k ) == - 1 &&
a . classes . push ( k ) } else a . attributes [ e ] = f [ e ] ; for ( j in d ) a . styles [ j ] = d [ j ] } } } } ) ( ) ;
( function ( ) { CKEDITOR . focusManager = function ( a ) { if ( a . focusManager ) return a . focusManager ; this . hasFocus = false ; this . currentActive = null ; this . _ = { editor : a } ; return this } ; CKEDITOR . focusManager . _ = { blurDelay : 200 } ; CKEDITOR . focusManager . prototype = { focus : function ( a ) { this . _ . timer && clearTimeout ( this . _ . timer ) ; if ( a ) this . currentActive = a ; if ( ! this . hasFocus && ! this . _ . locked ) { ( a = CKEDITOR . currentInstance ) && a . focusManager . blur ( 1 ) ; this . hasFocus = true ; ( a = this . _ . editor . container ) && a . addClass ( "cke_focus" ) ; this . _ . editor . fire ( "focus" ) } } ,
lock : function ( ) { this . _ . locked = 1 } , unlock : function ( ) { delete this . _ . locked } , blur : function ( a ) { function e ( ) { if ( this . hasFocus ) { this . hasFocus = false ; var a = this . _ . editor . container ; a && a . removeClass ( "cke_focus" ) ; this . _ . editor . fire ( "blur" ) } } if ( ! this . _ . locked ) { this . _ . timer && clearTimeout ( this . _ . timer ) ; var b = CKEDITOR . focusManager . _ . blurDelay ; a || ! b ? e . call ( this ) : this . _ . timer = CKEDITOR . tools . setTimeout ( function ( ) { delete this . _ . timer ; e . call ( this ) } , b , this ) } } , add : function ( a , e ) { var b = a . getCustomData ( "focusmanager" ) ; if ( ! b ||
b != this ) { b && b . remove ( a ) ; var b = "focus" , c = "blur" ; if ( e ) if ( CKEDITOR . env . ie ) { b = "focusin" ; c = "focusout" } else CKEDITOR . event . useCapture = 1 ; var f = { blur : function ( ) { a . equals ( this . currentActive ) && this . blur ( ) } , focus : function ( ) { this . focus ( a ) } } ; a . on ( b , f . focus , this ) ; a . on ( c , f . blur , this ) ; if ( e ) CKEDITOR . event . useCapture = 0 ; a . setCustomData ( "focusmanager" , this ) ; a . setCustomData ( "focusmanager_handlers" , f ) } } , remove : function ( a ) { a . removeCustomData ( "focusmanager" ) ; var e = a . removeCustomData ( "focusmanager_handlers" ) ; a . removeListener ( "blur" ,
@ -218,39 +218,39 @@ e.blur);a.removeListener("focus",e.focus)}}})();CKEDITOR.keystrokeHandler=functi
( function ( ) { var a , e = function ( b ) { var b = b . data , f = b . getKeystroke ( ) , d = this . keystrokes [ f ] , e = this . _ . editor ; a = e . fire ( "key" , { keyCode : f , domEvent : b } ) === false ; if ( ! a ) { d && ( a = e . execCommand ( d , { from : "keystrokeHandler" } ) !== false ) ; a || ( a = ! ! this . blockedKeystrokes [ f ] ) } a && b . preventDefault ( true ) ; return ! a } , b = function ( b ) { if ( a ) { a = false ; b . data . preventDefault ( true ) } } ; CKEDITOR . keystrokeHandler . prototype = { attach : function ( a ) { a . on ( "keydown" , e , this ) ; if ( CKEDITOR . env . gecko && CKEDITOR . env . mac ) a . on ( "keypress" , b , this ) } } } ) ( ) ;
( function ( ) { CKEDITOR . lang = { languages : { af : 1 , ar : 1 , bg : 1 , bn : 1 , bs : 1 , ca : 1 , cs : 1 , cy : 1 , da : 1 , de : 1 , el : 1 , "en-au" : 1 , "en-ca" : 1 , "en-gb" : 1 , en : 1 , eo : 1 , es : 1 , et : 1 , eu : 1 , fa : 1 , fi : 1 , fo : 1 , "fr-ca" : 1 , fr : 1 , gl : 1 , gu : 1 , he : 1 , hi : 1 , hr : 1 , hu : 1 , id : 1 , is : 1 , it : 1 , ja : 1 , ka : 1 , km : 1 , ko : 1 , ku : 1 , lt : 1 , lv : 1 , mk : 1 , mn : 1 , ms : 1 , nb : 1 , nl : 1 , no : 1 , pl : 1 , "pt-br" : 1 , pt : 1 , ro : 1 , ru : 1 , si : 1 , sk : 1 , sl : 1 , sq : 1 , "sr-latn" : 1 , sr : 1 , sv : 1 , th : 1 , tr : 1 , tt : 1 , ug : 1 , uk : 1 , vi : 1 , "zh-cn" : 1 , zh : 1 } , rtl : { ar : 1 , fa : 1 , he : 1 , ku : 1 , ug : 1 } , load : function ( a , e , b ) { if ( ! a || ! CKEDITOR . lang . languages [ a ] ) a = this . detect ( e ,
a ) ; var c = this , e = function ( ) { c [ a ] . dir = c . rtl [ a ] ? "rtl" : "ltr" ; b ( a , c [ a ] ) } ; this [ a ] ? e ( ) : CKEDITOR . scriptLoader . load ( CKEDITOR . getUrl ( "lang/" + a + ".js" ) , e , this ) } , detect : function ( a , e ) { var b = this . languages , e = e || navigator . userLanguage || navigator . language || a , c = e . toLowerCase ( ) . match ( /([a-z]+)(?:-([a-z]+))?/ ) , f = c [ 1 ] , c = c [ 2 ] ; b [ f + "-" + c ] ? f = f + "-" + c : b [ f ] || ( f = null ) ; CKEDITOR . lang . detect = f ? function ( ) { return f } : function ( a ) { return a } ; return f || a } } } ) ( ) ;
CKEDITOR . scriptLoader = function ( ) { var a = { } , e = { } ; return { load : function ( b , c , f , d ) { var g= typeof b == "string" ; g && ( b = [ b ] ) ; f || ( f = CKEDITOR ) ; var h= b . length , m = [ ] , j = [ ] , p = function ( a ) { c && ( g ? c . call ( f , a ) : c . call ( f , m, j ) ) } ; if ( h === 0 ) p ( true ) ; else { var u = function ( a , b ) { ( b ? m: j ) . push ( a ) ; if ( -- h <= 0 ) { d && CKEDITOR . document . getDocumentElement ( ) . removeStyle ( "cursor" ) ; p( b ) } } , t = function ( b , c ) { a [ b ] = 1 ; var d = e [ b ] ; delete e [ b ] ; for ( var f = 0 ; f < d . length ; f ++ ) d [ f ] ( b , c ) } , y = function ( b ) { if ( a [ b ] ) u ( b , true ) ; else { var d = e [ b ] || ( e [ b ] = [ ] ) ; d . push ( u ) ; if ( ! ( d . length >
1 ) ) { var f = new CKEDITOR . dom . element ( "script" ) ; f . setAttributes ( { type : "text/javascript" , src : b } ) ; if ( c ) if ( CKEDITOR . env . ie && CKEDITOR . env . version < 11 ) f . $ . onreadystatechange = function ( ) { if ( f . $ . readyState == "loaded" || f . $ . readyState == "complete" ) { f . $ . onreadystatechange = null ; t ( b , true ) } } ; else { f . $ . onload = function ( ) { setTimeout ( function ( ) { t ( b , true ) } , 0 ) } ; f . $ . onerror = function ( ) { t ( b , false ) } } f . appendTo ( CKEDITOR . document . getHead ( ) ) } } } ; d && CKEDITOR . document . getDocumentElement ( ) . setStyle ( "cursor" , "wait" ) ; for ( var n= 0 ; n < h ; n ++ ) y ( b [ n ] ) } } ,
CKEDITOR . scriptLoader = function ( ) { var a = { } , e = { } ; return { load : function ( b , c , f , d ) { var h= typeof b == "string" ; h && ( b = [ b ] ) ; f || ( f = CKEDITOR ) ; var l= b . length , i = [ ] , g = [ ] , m = function ( a ) { c && ( h ? c . call ( f , a ) : c . call ( f , i, g ) ) } ; if ( l === 0 ) m ( true ) ; else { var t = function ( a , b ) { ( b ? i: g ) . push ( a ) ; if ( -- l <= 0 ) { d && CKEDITOR . document . getDocumentElement ( ) . removeStyle ( "cursor" ) ; m( b ) } } , s = function ( b , c ) { a [ b ] = 1 ; var d = e [ b ] ; delete e [ b ] ; for ( var f = 0 ; f < d . length ; f ++ ) d [ f ] ( b , c ) } , y = function ( b ) { if ( a [ b ] ) t ( b , true ) ; else { var d = e [ b ] || ( e [ b ] = [ ] ) ; d . push ( t ) ; if ( ! ( d . length >
1 ) ) { var f = new CKEDITOR . dom . element ( "script" ) ; f . setAttributes ( { type : "text/javascript" , src : b } ) ; if ( c ) if ( CKEDITOR . env . ie && CKEDITOR . env . version < 11 ) f . $ . onreadystatechange = function ( ) { if ( f . $ . readyState == "loaded" || f . $ . readyState == "complete" ) { f . $ . onreadystatechange = null ; s ( b , true ) } } ; else { f . $ . onload = function ( ) { setTimeout ( function ( ) { s ( b , true ) } , 0 ) } ; f . $ . onerror = function ( ) { s ( b , false ) } } f . appendTo ( CKEDITOR . document . getHead ( ) ) } } } ; d && CKEDITOR . document . getDocumentElement ( ) . setStyle ( "cursor" , "wait" ) ; for ( var p= 0 ; p < l ; p ++ ) y ( b [ p ] ) } } ,
queue : function ( ) { function a ( ) { var b ; ( b = c [ 0 ] ) && this . load ( b . scriptUrl , b . callback , CKEDITOR , 0 ) } var c = [ ] ; return function ( f , d ) { var e = this ; c . push ( { scriptUrl : f , callback : function ( ) { d && d . apply ( this , arguments ) ; c . shift ( ) ; a . call ( e ) } } ) ; c . length == 1 && a . call ( this ) } } ( ) } } ( ) ; CKEDITOR . resourceManager = function ( a , e ) { this . basePath = a ; this . fileName = e ; this . registered = { } ; this . loaded = { } ; this . externals = { } ; this . _ = { waitingList : { } } } ;
CKEDITOR . resourceManager . prototype = { add : function ( a , e ) { if ( this . registered [ a ] ) throw '[CKEDITOR.resourceManager.add] The resource name "' + a + '" is already registered.' ; var b = this . registered [ a ] = e || { } ; b . name = a ; b . path = this . getPath ( a ) ; CKEDITOR . fire ( a + CKEDITOR . tools . capitalize ( this . fileName ) + "Ready" , b ) ; return this . get ( a ) } , get : function ( a ) { return this . registered [ a ] || null } , getPath : function ( a ) { var e = this . externals [ a ] ; return CKEDITOR . getUrl ( e && e . dir || this . basePath + a + "/" ) } , getFilePath : function ( a ) { var e = this . externals [ a ] ;
return CKEDITOR . getUrl ( this . getPath ( a ) + ( e ? e . file : this . fileName + ".js" ) ) } , addExternal : function ( a , e , b ) { for ( var a = a . split ( "," ) , c = 0 ; c < a . length ; c ++ ) { var f = a [ c ] ; b || ( e = e . replace ( /[^\/]+$/ , function ( a ) { b = a ; return "" } ) ) ; this . externals [ f ] = { dir : e , file : b || this . fileName + ".js" } } } , load : function ( a , e , b ) { CKEDITOR . tools . isArray ( a ) || ( a = a ? [ a ] : [ ] ) ; for ( var c = this . loaded , f = this . registered , d = [ ] , g= { } , h = { } , m = 0 ; m < a . length ; m ++ ) { var j = a [ m ] ; if ( j ) if ( ! c [ j ] && ! f [ j ] ) { var p = this . getFilePath ( j ) ; d . push ( p ) ; p in g || ( g [ p ] = [ ] ) ; g [ p ] . push ( j ) } else h [ j ] =
this . get ( j ) } CKEDITOR . scriptLoader . load ( d , function ( a , d ) { if ( d . length ) throw '[CKEDITOR.resourceManager.load] Resource name "' + g [ d [ 0 ] ] . join ( "," ) + '" was not found at "' + d [ 0 ] + '".' ; for ( var f = 0 ; f < a . length ; f ++ ) for ( var n= g [ a [ f ] ] , j = 0 ; j < n . length ; j ++ ) { var o = n [ j ] ; h [ o ] = this . get ( o ) ; c [ o ] = 1 } e . call ( b , h ) } , this ) } } ; CKEDITOR . plugins = new CKEDITOR . resourceManager ( "plugins/" , "plugin" ) ;
CKEDITOR . plugins . load = CKEDITOR . tools . override ( CKEDITOR . plugins . load , function ( a ) { var e = { } ; return function ( b , c , f ) { var d = { } , g = function ( b ) { a . call ( this , b , function ( a ) { CKEDITOR . tools . extend ( d , a ) ; var b = [ ] , h; for ( h in a ) { var u = a [ h ] , t = u && u . requires ; if ( ! e [ h ] ) { if ( u . icons ) for ( var y = u . icons . split ( "," ) , n = y . length ; n -- ; ) CKEDITOR . skin . addIcon ( y [ n] , u . path + "icons/" + ( CKEDITOR . env . hidpi && u . hidpi ? "hidpi/" : "" ) + y [ n] + ".png" ) ; e [ h ] = 1 } if ( t ) { t . split && ( t = t . split ( "," ) ) ; for ( u= 0 ; u < t . length ; u ++ ) d [ t [ u ] ] || b . push ( t [ u ] ) } } if ( b . length ) g . call ( this ,
b ) ; else { for ( h in d ) { u = d [ h ] ; if ( u . onLoad && ! u . onLoad . _called ) { u . onLoad ( ) === false && delete d [ h] ; u . onLoad . _called = 1 } } c && c . call ( f || window , d ) } } , this ) } ; g . call ( this , b ) } } ) ; CKEDITOR . plugins . setLang = function ( a , e , b ) { var c = this . get ( a ) , a = c . langEntries || ( c . langEntries = { } ) , c = c . lang || ( c . lang = [ ] ) ; c . split && ( c = c . split ( "," ) ) ; CKEDITOR . tools . indexOf ( c , e ) == - 1 && c . push ( e ) ; a [ e ] = b } ; CKEDITOR . ui = function ( a ) { if ( a . ui ) return a . ui ; this . items = { } ; this . instances = { } ; this . editor = a ; this . _ = { handlers : { } } ; return this } ;
return CKEDITOR . getUrl ( this . getPath ( a ) + ( e ? e . file : this . fileName + ".js" ) ) } , addExternal : function ( a , e , b ) { for ( var a = a . split ( "," ) , c = 0 ; c < a . length ; c ++ ) { var f = a [ c ] ; b || ( e = e . replace ( /[^\/]+$/ , function ( a ) { b = a ; return "" } ) ) ; this . externals [ f ] = { dir : e , file : b || this . fileName + ".js" } } } , load : function ( a , e , b ) { CKEDITOR . tools . isArray ( a ) || ( a = a ? [ a ] : [ ] ) ; for ( var c = this . loaded , f = this . registered , d = [ ] , h= { } , l = { } , i = 0 ; i < a . length ; i ++ ) { var g = a [ i ] ; if ( g ) if ( ! c [ g ] && ! f [ g ] ) { var m = this . getFilePath ( g ) ; d . push ( m ) ; m in h || ( h [ m ] = [ ] ) ; h [ m ] . push ( g ) } else l [ g ] =
this . get ( g ) } CKEDITOR . scriptLoader . load ( d , function ( a , d ) { if ( d . length ) throw '[CKEDITOR.resourceManager.load] Resource name "' + h [ d [ 0 ] ] . join ( "," ) + '" was not found at "' + d [ 0 ] + '".' ; for ( var f = 0 ; f < a . length ; f ++ ) for ( var p= h [ a [ f ] ] , g = 0 ; g < p . length ; g ++ ) { var j = p [ g ] ; l [ j ] = this . get ( j ) ; c [ j ] = 1 } e . call ( b , l ) } , this ) } } ; CKEDITOR . plugins = new CKEDITOR . resourceManager ( "plugins/" , "plugin" ) ;
CKEDITOR . plugins . load = CKEDITOR . tools . override ( CKEDITOR . plugins . load , function ( a ) { var e = { } ; return function ( b , c , f ) { var d = { } , h = function ( b ) { a . call ( this , b , function ( a ) { CKEDITOR . tools . extend ( d , a ) ; var b = [ ] , m; for ( m in a ) { var l = a [ m ] , s = l && l . requires ; if ( ! e [ m ] ) { if ( l . icons ) for ( var y = l . icons . split ( "," ) , p = y . length ; p -- ; ) CKEDITOR . skin . addIcon ( y [ p] , l . path + "icons/" + ( CKEDITOR . env . hidpi && l . hidpi ? "hidpi/" : "" ) + y [ p] + ".png" ) ; e [ m ] = 1 } if ( s ) { s . split && ( s = s . split ( "," ) ) ; for ( l= 0 ; l < s . length ; l ++ ) d [ s [ l ] ] || b . push ( s [ l ] ) } } if ( b . length ) h . call ( this ,
b ) ; else { for ( m in d ) { l = d [ m ] ; if ( l . onLoad && ! l . onLoad . _called ) { l . onLoad ( ) === false && delete d [ m] ; l . onLoad . _called = 1 } } c && c . call ( f || window , d ) } } , this ) } ; h . call ( this , b ) } } ) ; CKEDITOR . plugins . setLang = function ( a , e , b ) { var c = this . get ( a ) , a = c . langEntries || ( c . langEntries = { } ) , c = c . lang || ( c . lang = [ ] ) ; c . split && ( c = c . split ( "," ) ) ; CKEDITOR . tools . indexOf ( c , e ) == - 1 && c . push ( e ) ; a [ e ] = b } ; CKEDITOR . ui = function ( a ) { if ( a . ui ) return a . ui ; this . items = { } ; this . instances = { } ; this . editor = a ; this . _ = { handlers : { } } ; return this } ;
CKEDITOR . ui . prototype = { add : function ( a , e , b ) { b . name = a . toLowerCase ( ) ; var c = this . items [ a ] = { type : e , command : b . command || null , args : Array . prototype . slice . call ( arguments , 2 ) } ; CKEDITOR . tools . extend ( c , b ) } , get : function ( a ) { return this . instances [ a ] } , create : function ( a ) { var e = this . items [ a ] , b = e && this . _ . handlers [ e . type ] , c = e && e . command && this . editor . getCommand ( e . command ) , b = b && b . create . apply ( this , e . args ) ; this . instances [ a ] = b ; c && c . uiItems . push ( b ) ; if ( b && ! b . type ) b . type = e . type ; return b } , addHandler : function ( a , e ) { this . _ . handlers [ a ] =
e } , space : function ( a ) { return CKEDITOR . document . getById ( this . spaceId ( a ) ) } , spaceId : function ( a ) { return this . editor . id + "_" + a } } ; CKEDITOR . event . implementOn ( CKEDITOR . ui ) ;
( function ( ) { function a ( a , c , d ) { CKEDITOR . event . call ( this ) ; a = a && CKEDITOR . tools . clone ( a ) ; if ( c !== void 0 ) { if ( c instanceof CKEDITOR . dom . element ) { if ( ! d ) throw Error ( "One of the element modes must be specified." ) ; } else throw Error ( "Expect element of type CKEDITOR.dom.element." ) ; if ( CKEDITOR . env . ie && CKEDITOR . env . quirks && d == CKEDITOR . ELEMENT _MODE _INLINE ) throw Error ( "Inline element mode is not supported on IE quirks." ) ; if ( ! ( d == CKEDITOR . ELEMENT _MODE _INLINE ? c . is ( CKEDITOR . dtd . $editable ) || c . is ( "textarea" ) : d == CKEDITOR . ELEMENT _MODE _REPLACE ?
! c . is ( CKEDITOR . dtd . $nonBodyContent ) : 1 ) ) throw Error ( 'The specified element mode is not supported on element: "' + c . getName ( ) + '".' ) ; this . element = c ; this . elementMode = d ; this . name = this . elementMode != CKEDITOR . ELEMENT _MODE _APPENDTO && ( c . getId ( ) || c . getNameAtt ( ) ) } else this . elementMode = CKEDITOR . ELEMENT _MODE _NONE ; this . _ = { } ; this . commands = { } ; this . templates = { } ; this . name = this . name || e ( ) ; this . id = CKEDITOR . tools . getNextId ( ) ; this . status = "unloaded" ; this . config = CKEDITOR . tools . prototypedCopy ( CKEDITOR . config ) ; this . ui = new CKEDITOR . ui ( this ) ;
this . focusManager = new CKEDITOR . focusManager ( this ) ; this . keystrokeHandler = new CKEDITOR . keystrokeHandler ( this ) ; this . on ( "readOnly" , b ) ; this . on ( "selectionChange" , function ( a ) { f ( this , a . data . path ) } ) ; this . on ( "activeFilterChange" , function ( ) { f ( this , this . elementPath ( ) , true ) } ) ; this . on ( "mode" , b ) ; this . on ( "instanceReady" , function ( ) { this . config . startupFocus && this . focus ( ) } ) ; CKEDITOR . fire ( "instanceCreated" , null , this ) ; CKEDITOR . add ( this ) ; CKEDITOR . tools . setTimeout ( function ( ) { g ( this , a ) } , 0 , this ) } function e ( ) { do var a = "editor" +
++ t ; while ( CKEDITOR . instances [ a ] ) ; return a } function b ( ) { var a = this . commands , b ; for ( b in a ) c ( this , a [ b ] ) } function c ( a , b ) { b [ b . startDisabled ? "disable" : a . readOnly && ! b . readOnly ? "disable" : b . modes [ a . mode ] ? "enable" : "disable" ] ( ) } function f ( a , b , c ) { if ( b ) { var d , f , e = a . commands ; for ( f in e ) { d = e [ f ] ; ( c || d . contextSensitive ) && d . refresh ( a , b ) } } } function d ( a ) { var b = a . config . customConfig ; if ( ! b ) return false ; var b = CKEDITOR . getUrl ( b ) , c = y [ b ] || ( y [ b ] = { } ) ; if ( c . fn ) { c . fn . call ( a , a . config ) ; ( CKEDITOR . getUrl ( a . config . customConfig ) == b ||
! d ( a ) ) && a . fireOnce ( "customConfigLoaded" ) } else CKEDITOR . scriptLoader . queue ( b , function ( ) { c . fn = CKEDITOR . editorConfig ? CKEDITOR . editorConfig : function ( ) { } ; d ( a ) } ) ; return true } function g ( a , b ) { a . on ( "customConfigLoaded" , function ( ) { if ( b ) { if ( b . on ) for ( var c in b . on ) a . on ( c , b . on [ c ] ) ; CKEDITOR . tools . extend ( a . config , b , true ) ; delete a . config . on } c = a . config ; a . readOnly = ! ( ! c . readOnly && ! ( a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? a . element . is ( "textarea" ) ? a . element . hasAttribute ( "disabled" ) : a . element . isReadOnly ( ) : a . elementMode ==
this . focusManager = new CKEDITOR . focusManager ( this ) ; this . keystrokeHandler = new CKEDITOR . keystrokeHandler ( this ) ; this . on ( "readOnly" , b ) ; this . on ( "selectionChange" , function ( a ) { f ( this , a . data . path ) } ) ; this . on ( "activeFilterChange" , function ( ) { f ( this , this . elementPath ( ) , true ) } ) ; this . on ( "mode" , b ) ; this . on ( "instanceReady" , function ( ) { this . config . startupFocus && this . focus ( ) } ) ; CKEDITOR . fire ( "instanceCreated" , null , this ) ; CKEDITOR . add ( this ) ; CKEDITOR . tools . setTimeout ( function ( ) { h ( this , a ) } , 0 , this ) } function e ( ) { do var a = "editor" +
++ s ; while ( CKEDITOR . instances [ a ] ) ; return a } function b ( ) { var a = this . commands , b ; for ( b in a ) c ( this , a [ b ] ) } function c ( a , b ) { b [ b . startDisabled ? "disable" : a . readOnly && ! b . readOnly ? "disable" : b . modes [ a . mode ] ? "enable" : "disable" ] ( ) } function f ( a , b , c ) { if ( b ) { var d , f , e = a . commands ; for ( f in e ) { d = e [ f ] ; ( c || d . contextSensitive ) && d . refresh ( a , b ) } } } function d ( a ) { var b = a . config . customConfig ; if ( ! b ) return false ; var b = CKEDITOR . getUrl ( b ) , c = y [ b ] || ( y [ b ] = { } ) ; if ( c . fn ) { c . fn . call ( a , a . config ) ; ( CKEDITOR . getUrl ( a . config . customConfig ) == b ||
! d ( a ) ) && a . fireOnce ( "customConfigLoaded" ) } else CKEDITOR . scriptLoader . queue ( b , function ( ) { c . fn = CKEDITOR . editorConfig ? CKEDITOR . editorConfig : function ( ) { } ; d ( a ) } ) ; return true } function h ( a , b ) { a . on ( "customConfigLoaded" , function ( ) { if ( b ) { if ( b . on ) for ( var c in b . on ) a . on ( c , b . on [ c ] ) ; CKEDITOR . tools . extend ( a . config , b , true ) ; delete a . config . on } c = a . config ; a . readOnly = ! ( ! c . readOnly && ! ( a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? a . element . is ( "textarea" ) ? a . element . hasAttribute ( "disabled" ) : a . element . isReadOnly ( ) : a . elementMode ==
CKEDITOR . ELEMENT _MODE _REPLACE && a . element . hasAttribute ( "disabled" ) ) ) ; a . blockless = a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? ! ( a . element . is ( "textarea" ) || CKEDITOR . dtd [ a . element . getName ( ) ] . p ) : false ; a . tabIndex = c . tabIndex || a . element && a . element . getAttribute ( "tabindex" ) || 0 ; a . activeEnterMode = a . enterMode = a . blockless ? CKEDITOR . ENTER _BR : c . enterMode ; a . activeShiftEnterMode = a . shiftEnterMode = a . blockless ? CKEDITOR . ENTER _BR : c . shiftEnterMode ; if ( c . skin ) CKEDITOR . skinName = c . skin ; a . fireOnce ( "configLoaded" ) ; a . dataProcessor =
new CKEDITOR . htmlDataProcessor ( a ) ; a . filter = a . activeFilter = new CKEDITOR . filter ( a ) ; h ( a ) } ) ; if ( b && b . customConfig != null ) a . config . customConfig = b . customConfig ; d ( a ) || a . fireOnce ( "customConfigLoaded" ) } function h ( a ) { CKEDITOR . skin . loadPart ( "editor" , function ( ) { m( a ) } ) } function m ( a ) { CKEDITOR . lang . load ( a . config . language , a . config . defaultLanguage , function ( b , c ) { var d = a . config . title ; a . langCode = b ; a . lang = CKEDITOR . tools . prototypedCopy ( c ) ; a . title = typeof d == "string" || d === false ? d : [ a . lang . editor , a . name ] . join ( ", " ) ; if ( ! a . config . contentsLangDirection ) a . config . contentsLangDirection =
a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? a . element . getDirection ( 1 ) : a . lang . dir ; a . fire ( "langLoaded" ) ; j( a ) } ) } function j ( a ) { a . getStylesSet ( function ( b ) { a . once ( "loaded" , function ( ) { a . fire ( "stylesSet" , { styles : b } ) } , null , null , 1 ) ; p( a ) } ) } function p ( a ) { var b = a . config , c = b . plugins , d = b . extraPlugins , f = b . removePlugins ; if ( d ) var e = RegExp ( "(?:^|,)(?:" + d . replace ( /\s*,\s*/g , "|" ) + ")(?=,|$)" , "g" ) , c = c . replace ( e , "" ) , c = c + ( "," + d ) ; if ( f ) var l = RegExp ( "(?:^|,)(?:" + f . replace ( /\s*,\s*/g , "|" ) + ")(?=,|$)" , "g" ) , c = c . replace ( l , "" ) ; CKEDITOR . env . air &&
( c = c + ",adobeair" ) ; CKEDITOR . plugins . load ( c . split ( "," ) , function ( c ) { var d = [ ] , f = [ ] , e = [ ] ; a . plugins = c ; for ( var i in c ) { var o = c [ i ] , k = o . lang , g = null , r = o . requires , A ; CKEDITOR . tools . isArray ( r ) && ( r = r . join ( "," ) ) ; if ( r&& ( A = r . match ( l ) ) ) for ( ; r = A . pop ( ) ; ) CKEDITOR . tools . setTimeout ( function ( a , b ) { throw Error ( 'Plugin "' + a . replace ( "," , "" ) + '" cannot be removed from the plugins list, because it\'s required by "' + b + '" plugin.' ) ; } , 0 , null , [ r, i ] ) ; if ( k && ! a . lang [ i ] ) { k . split && ( k = k . split ( "," ) ) ; if ( CKEDITOR . tools . indexOf ( k , a . langCode ) >=
0 ) g= a . langCode ; else { g = a . langCode . replace ( /-.*/ , "" ) ; g= g != a . langCode && CKEDITOR . tools . indexOf ( k, g ) >= 0 ? g : CKEDITOR . tools . indexOf ( k , "en" ) >= 0 ? "en" : k[ 0 ] } if ( ! o . langEntries || ! o . langEntries [ g ] ) e . push ( CKEDITOR . getUrl ( o. path + "lang/" + g + ".js" ) ) ; else { a . lang [ i] = o . langEntries [ g ] ; g = null } } f . push ( g ) ; d . push ( o ) } CKEDITOR . scriptLoader . load ( e , function ( ) { for ( var c = [ "beforeInit" , "init" , "afterInit" ] , e = 0 ; e < c . length ; e ++ ) for ( var i= 0 ; i < d . length ; i ++ ) { var q = d [ i ] ; e === 0 && ( f [ i ] && q . lang && q . langEntries ) && ( a . lang [ q. name ] = q . langEntries [ f [ i ] ] ) ;
if ( q[ c [ e ] ] ) q [ c [ e ] ] ( a ) } a . fireOnce ( "pluginsLoaded" ) ; b . keystrokes && a . setKeystroke ( a . config . keystrokes ) ; for ( i= 0 ; i < a . config . blockedKeystrokes . length ; i ++ ) a . keystrokeHandler . blockedKeystrokes [ a . config . blockedKeystrokes [ i ] ] = 1 ; a . status = "loaded" ; a . fireOnce ( "loaded" ) ; CKEDITOR . fire ( "instanceLoaded" , null , a ) } ) } ) } function u ( ) { var a = this . element ; if ( a && this . elementMode != CKEDITOR . ELEMENT _MODE _APPENDTO ) { var b = this . getData ( ) ; this . config . htmlEncodeOutput && ( b = CKEDITOR . tools . htmlEncode ( b ) ) ; a . is ( "textarea" ) ? a . setValue ( b ) :
a . setHtml ( b ) ; return true } return false } a . prototype = CKEDITOR . editor . prototype ; CKEDITOR . editor = a ; var t = 0 , y = { } ; CKEDITOR . tools . extend ( CKEDITOR . editor . prototype , { addCommand : function ( a , b ) { b . name = a . toLowerCase ( ) ; var d = new CKEDITOR . command ( this , b ) ; this . mode && c ( this , d ) ; return this . commands [ a ] = d } , _attachToForm : function ( ) { function a ( d ) { b . updateElement ( ) ; b . _ . required && ( ! c . getValue ( ) && b . fire ( "required" ) === false ) && d . data . preventDefault ( ) } var b = this , c = b . element , d = new CKEDITOR . dom . element ( c . $ . form ) ; if ( c . is ( "textarea" ) &&
d ) { d . on ( "submit" , a ) ; if ( d . $ . submit && d . $ . submit . call && d . $ . submit . apply ) d . $ . submit = CKEDITOR . tools . override ( d . $ . submit , function ( b ) { return function ( ) { a ( ) ; b . apply ? b . apply ( this ) : b ( ) } } ) ; b . on ( "destroy" , function ( ) { d . removeListener ( "submit" , a ) } ) } } , destroy : function ( a ) { this . fire ( "beforeDestroy" ) ; ! a && u . call ( this ) ; this . editable ( null ) ; this . filter . destroy ( ) ; delete this . filter ; delete this . activeFilter ; this . status = "destroyed" ; this . fire ( "destroy" ) ; this . removeAllListeners ( ) ; CKEDITOR . remove ( this ) ; CKEDITOR . fire ( "instanceDestroyed" ,
new CKEDITOR . htmlDataProcessor ( a ) ; a . filter = a . activeFilter = new CKEDITOR . filter ( a ) ; l ( a ) } ) ; if ( b && b . customConfig != null ) a . config . customConfig = b . customConfig ; d ( a ) || a . fireOnce ( "customConfigLoaded" ) } function l ( a ) { CKEDITOR . skin . loadPart ( "editor" , function ( ) { i( a ) } ) } function i ( a ) { CKEDITOR . lang . load ( a . config . language , a . config . defaultLanguage , function ( b , c ) { var d = a . config . title ; a . langCode = b ; a . lang = CKEDITOR . tools . prototypedCopy ( c ) ; a . title = typeof d == "string" || d === false ? d : [ a . lang . editor , a . name ] . join ( ", " ) ; if ( ! a . config . contentsLangDirection ) a . config . contentsLangDirection =
a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? a . element . getDirection ( 1 ) : a . lang . dir ; a . fire ( "langLoaded" ) ; g( a ) } ) } function g ( a ) { a . getStylesSet ( function ( b ) { a . once ( "loaded" , function ( ) { a . fire ( "stylesSet" , { styles : b } ) } , null , null , 1 ) ; m( a ) } ) } function m ( a ) { var b = a . config , c = b . plugins , d = b . extraPlugins , f = b . removePlugins ; if ( d ) var e = RegExp ( "(?:^|,)(?:" + d . replace ( /\s*,\s*/g , "|" ) + ")(?=,|$)" , "g" ) , c = c . replace ( e , "" ) , c = c + ( "," + d ) ; if ( f ) var k = RegExp ( "(?:^|,)(?:" + f . replace ( /\s*,\s*/g , "|" ) + ")(?=,|$)" , "g" ) , c = c . replace ( k , "" ) ; CKEDITOR . env . air &&
( c = c + ",adobeair" ) ; CKEDITOR . plugins . load ( c . split ( "," ) , function ( c ) { var d = [ ] , f = [ ] , e = [ ] ; a . plugins = c ; for ( var j in c ) { var h = c [ j ] , g = h . lang , i = null , u = h . requires , w ; CKEDITOR . tools . isArray ( u ) && ( u = u . join ( "," ) ) ; if ( u&& ( w = u . match ( k ) ) ) for ( ; u = w . pop ( ) ; ) CKEDITOR . tools . setTimeout ( function ( a , b ) { throw Error ( 'Plugin "' + a . replace ( "," , "" ) + '" cannot be removed from the plugins list, because it\'s required by "' + b + '" plugin.' ) ; } , 0 , null , [ u, j ] ) ; if ( g && ! a . lang [ j ] ) { g . split && ( g = g . split ( "," ) ) ; if ( CKEDITOR . tools . indexOf ( g , a . langCode ) >=
0 ) i= a . langCode ; else { i = a . langCode . replace ( /-.*/ , "" ) ; i= i != a . langCode && CKEDITOR . tools . indexOf ( g, i ) >= 0 ? i : CKEDITOR . tools . indexOf ( g , "en" ) >= 0 ? "en" : g[ 0 ] } if ( ! h . langEntries || ! h . langEntries [ i ] ) e . push ( CKEDITOR . getUrl ( h. path + "lang/" + i + ".js" ) ) ; else { a . lang [ j] = h . langEntries [ i ] ; i = null } } f . push ( i ) ; d . push ( h ) } CKEDITOR . scriptLoader . load ( e , function ( ) { for ( var c = [ "beforeInit" , "init" , "afterInit" ] , e = 0 ; e < c . length ; e ++ ) for ( var n= 0 ; n < d . length ; n ++ ) { var j = d [ n ] ; e === 0 && ( f [ n ] && j . lang && j . langEntries ) && ( a . lang [ j. name ] = j . langEntries [ f [ n ] ] ) ;
if ( j[ c [ e ] ] ) j [ c [ e ] ] ( a ) } a . fireOnce ( "pluginsLoaded" ) ; b . keystrokes && a . setKeystroke ( a . config . keystrokes ) ; for ( n= 0 ; n < a . config . blockedKeystrokes . length ; n ++ ) a . keystrokeHandler . blockedKeystrokes [ a . config . blockedKeystrokes [ n ] ] = 1 ; a . status = "loaded" ; a . fireOnce ( "loaded" ) ; CKEDITOR . fire ( "instanceLoaded" , null , a ) } ) } ) } function t ( ) { var a = this . element ; if ( a && this . elementMode != CKEDITOR . ELEMENT _MODE _APPENDTO ) { var b = this . getData ( ) ; this . config . htmlEncodeOutput && ( b = CKEDITOR . tools . htmlEncode ( b ) ) ; a . is ( "textarea" ) ? a . setValue ( b ) :
a . setHtml ( b ) ; return true } return false } a . prototype = CKEDITOR . editor . prototype ; CKEDITOR . editor = a ; var s = 0 , y = { } ; CKEDITOR . tools . extend ( CKEDITOR . editor . prototype , { addCommand : function ( a , b ) { b . name = a . toLowerCase ( ) ; var d = new CKEDITOR . command ( this , b ) ; this . mode && c ( this , d ) ; return this . commands [ a ] = d } , _attachToForm : function ( ) { function a ( d ) { b . updateElement ( ) ; b . _ . required && ( ! c . getValue ( ) && b . fire ( "required" ) === false ) && d . data . preventDefault ( ) } var b = this , c = b . element , d = new CKEDITOR . dom . element ( c . $ . form ) ; if ( c . is ( "textarea" ) &&
d ) { d . on ( "submit" , a ) ; if ( d . $ . submit && d . $ . submit . call && d . $ . submit . apply ) d . $ . submit = CKEDITOR . tools . override ( d . $ . submit , function ( b ) { return function ( ) { a ( ) ; b . apply ? b . apply ( this ) : b ( ) } } ) ; b . on ( "destroy" , function ( ) { d . removeListener ( "submit" , a ) } ) } } , destroy : function ( a ) { this . fire ( "beforeDestroy" ) ; ! a && t . call ( this ) ; this . editable ( null ) ; this . filter . destroy ( ) ; delete this . filter ; delete this . activeFilter ; this . status = "destroyed" ; this . fire ( "destroy" ) ; this . removeAllListeners ( ) ; CKEDITOR . remove ( this ) ; CKEDITOR . fire ( "instanceDestroyed" ,
null , this ) } , elementPath : function ( a ) { if ( ! a ) { a = this . getSelection ( ) ; if ( ! a ) return null ; a = a . getStartElement ( ) } return a ? new CKEDITOR . dom . elementPath ( a , this . editable ( ) ) : null } , createRange : function ( ) { var a = this . editable ( ) ; return a ? new CKEDITOR . dom . range ( a ) : null } , execCommand : function ( a , b ) { var c = this . getCommand ( a ) , d = { name : a , commandData : b , command : c } ; if ( c && c . state != CKEDITOR . TRISTATE _DISABLED && this . fire ( "beforeCommandExec" , d ) !== false ) { d . returnValue = c . exec ( d . commandData ) ; if ( ! c . async && this . fire ( "afterCommandExec" ,
d ) !== false ) return d . returnValue } return false } , getCommand : function ( a ) { return this . commands [ a ] } , getData : function ( a ) { ! a && this . fire ( "beforeGetData" ) ; var b = this . _ . data ; if ( typeof b != "string" ) b = ( b = this . element ) && this . elementMode == CKEDITOR . ELEMENT _MODE _REPLACE ? b . is ( "textarea" ) ? b . getValue ( ) : b . getHtml ( ) : "" ; b = { dataValue : b } ; ! a && this . fire ( "getData" , b ) ; return b . dataValue } , getSnapshot : function ( ) { var a = this . fire ( "getSnapshot" ) ; if ( typeof a != "string" ) { var b = this . element ; b && this . elementMode == CKEDITOR . ELEMENT _MODE _REPLACE &&
( a = b . is ( "textarea" ) ? b . getValue ( ) : b . getHtml ( ) ) } return a } , loadSnapshot : function ( a ) { this . fire ( "loadSnapshot" , a ) } , setData : function ( a , b , c ) { var d = true , f = b ; if ( b && typeof b == "object" ) { c = b . internal ; f = b . callback ; d = ! b . noSnapshot } ! c && d && this . fire ( "saveSnapshot" ) ; if ( f || ! c ) this . once ( "dataReady" , function ( a ) { ! c && d && this . fire ( "saveSnapshot" ) ; f && f . call ( a . editor ) } ) ; a = { dataValue : a } ; ! c && this . fire ( "setData" , a ) ; this . _ . data = a . dataValue ; ! c && this . fire ( "afterSetData" , a ) } , setReadOnly : function ( a ) { a = a == null || a ; if ( this . readOnly !=
a ) { this . readOnly = a ; this . keystrokeHandler . blockedKeystrokes [ 8 ] = + a ; this . editable ( ) . setReadOnly ( a ) ; this . fire ( "readOnly" ) } } , insertHtml : function ( a , b ) { this . fire ( "insertHtml" , { dataValue : a , mode : b } ) } , insertText : function ( a ) { this . fire ( "insertText" , a ) } , insertElement : function ( a ) { this . fire ( "insertElement" , a ) } , focus : function ( ) { this . fire ( "beforeFocus" ) } , checkDirty : function ( ) { return this . status == "ready" && this . _ . previousValue !== this . getSnapshot ( ) } , resetDirty : function ( ) { this . _ . previousValue = this . getSnapshot ( ) } , updateElement : function ( ) { return u . call ( this ) } ,
a ) { this . readOnly = a ; this . keystrokeHandler . blockedKeystrokes [ 8 ] = + a ; this . editable ( ) . setReadOnly ( a ) ; this . fire ( "readOnly" ) } } , insertHtml : function ( a , b ) { this . fire ( "insertHtml" , { dataValue : a , mode : b } ) } , insertText : function ( a ) { this . fire ( "insertText" , a ) } , insertElement : function ( a ) { this . fire ( "insertElement" , a ) } , focus : function ( ) { this . fire ( "beforeFocus" ) } , checkDirty : function ( ) { return this . status == "ready" && this . _ . previousValue !== this . getSnapshot ( ) } , resetDirty : function ( ) { this . _ . previousValue = this . getSnapshot ( ) } , updateElement : function ( ) { return t . call ( this ) } ,
setKeystroke : function ( ) { for ( var a = this . keystrokeHandler . keystrokes , b = CKEDITOR . tools . isArray ( arguments [ 0 ] ) ? arguments [ 0 ] : [ [ ] . slice . call ( arguments , 0 ) ] , c , d , f = b . length ; f -- ; ) { c = b [ f ] ; d = 0 ; if ( CKEDITOR . tools . isArray ( c ) ) { d = c [ 1 ] ; c = c [ 0 ] } d ? a [ c ] = d : delete a [ c ] } } , addFeature : function ( a ) { return this . filter . addFeature ( a ) } , setActiveFilter : function ( a ) { if ( ! a ) a = this . filter ; if ( this . activeFilter !== a ) { this . activeFilter = a ; this . fire ( "activeFilterChange" ) ; a === this . filter ? this . setActiveEnterMode ( null , null ) : this . setActiveEnterMode ( a . getAllowedEnterMode ( this . enterMode ) ,
a . getAllowedEnterMode ( this . shiftEnterMode , true ) ) } } , setActiveEnterMode : function ( a , b ) { a = a ? this . blockless ? CKEDITOR . ENTER _BR : a : this . enterMode ; b = b ? this . blockless ? CKEDITOR . ENTER _BR : b : this . shiftEnterMode ; if ( this . activeEnterMode != a || this . activeShiftEnterMode != b ) { this . activeEnterMode = a ; this . activeShiftEnterMode = b ; this . fire ( "activeEnterModeChange" ) } } } ) } ) ( ) ; CKEDITOR . ELEMENT _MODE _NONE = 0 ; CKEDITOR . ELEMENT _MODE _REPLACE = 1 ; CKEDITOR . ELEMENT _MODE _APPENDTO = 2 ; CKEDITOR . ELEMENT _MODE _INLINE = 3 ;
CKEDITOR . htmlParser = function ( ) { this . _ = { htmlPartsRegex : RegExp ( "<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)--\>)|(?:([^\\s>]+)\\s*((?:(?:\"[^\"]*\")|(?:'[^']*')|[^\"'>])*)\\/?>))" , "g" ) } } ;
( function ( ) { var a = /([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g , e = { checked : 1 , compact : 1 , declare : 1 , defer : 1 , disabled : 1 , ismap : 1 , multiple : 1 , nohref : 1 , noresize : 1 , noshade : 1 , nowrap : 1 , readonly : 1 , selected : 1 } ; CKEDITOR . htmlParser . prototype = { onTagOpen : function ( ) { } , onTagClose : function ( ) { } , onText : function ( ) { } , onCDATA : function ( ) { } , onComment : function ( ) { } , parse : function ( b ) { for ( var c , f , d = 0 , g ; c = this . _ . htmlPartsRegex . exec ( b ) ; ) { f = c . index ; if ( f > d ) { d = b . substring ( d , f ) ; if ( g) g . push ( d ) ; else this . onText ( d ) } d =
this . _ . htmlPartsRegex . lastIndex ; if ( f = c [ 1 ] ) { f = f . toLowerCase ( ) ; if ( g && CKEDITOR . dtd . $cdata [ f ] ) { this . onCDATA ( g. join ( "" ) ) ; g = null } if ( ! g ) { this . onTagClose ( f ) ; continue } } if ( g) g . push ( c [ 0 ] ) ; else if ( f = c [ 3 ] ) { f = f . toLowerCase ( ) ; if ( ! /="/ . test ( f ) ) { var h= { } , m ; c = c [ 4 ] ; var j = ! ! ( c && c . charAt ( c . length - 1 ) == "/" ) ; if ( c ) for ( ; m = a . exec ( c ) ; ) { var p = m [ 1 ] . toLowerCase ( ) ; m = m [ 2 ] || m [ 3 ] || m [ 4 ] || "" ; h [ p ] = ! m && e [ p ] ? p : CKEDITOR . tools . htmlDecodeAttr ( m ) } this . onTagOpen ( f , h , j ) ; ! g && CKEDITOR . dtd . $cdata [ f ] && ( g = [ ] ) } } else if ( f = c [ 2 ] ) this . onComment ( f ) } if ( b . length >
d ) this . onText ( b . substring ( d , b . length ) ) } } } ) ( ) ;
CKEDITOR . htmlParser = function ( ) { this . _ = { htmlPartsRegex : /<(?:(?:\/([^>]+)>)|(?:!--([\S|\s]*?)--\>)|(?:([^\/\s>]+)((?:\s+[\w\-:.]+(?:\s*=\s*?(?:(?:"[^"]*")|(?:'[^']*')|[^\s"'\/>]+))?)*)[\S\s]*?(\/?)>))/g } } ;
( function ( ) { var a = /([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g , e = { checked : 1 , compact : 1 , declare : 1 , defer : 1 , disabled : 1 , ismap : 1 , multiple : 1 , nohref : 1 , noresize : 1 , noshade : 1 , nowrap : 1 , readonly : 1 , selected : 1 } ; CKEDITOR . htmlParser . prototype = { onTagOpen : function ( ) { } , onTagClose : function ( ) { } , onText : function ( ) { } , onCDATA : function ( ) { } , onComment : function ( ) { } , parse : function ( b ) { for ( var c , f , d = 0 , h ; c = this . _ . htmlPartsRegex . exec ( b ) ; ) { f = c . index ; if ( f > d ) { d = b . substring ( d , f ) ; if ( h) h . push ( d ) ; else this . onText ( d ) } d =
this . _ . htmlPartsRegex . lastIndex ; if ( f = c [ 1 ] ) { f = f . toLowerCase ( ) ; if ( h && CKEDITOR . dtd . $cdata [ f ] ) { this . onCDATA ( h. join ( "" ) ) ; h = null } if ( ! h ) { this . onTagClose ( f ) ; continue } } if ( h) h . push ( c [ 0 ] ) ; else if ( f = c [ 3 ] ) { f = f . toLowerCase ( ) ; if ( ! /="/ . test ( f ) ) { var l= { } , i , g = c [ 4 ] ; c = ! ! c [ 5 ] ; if ( g ) for ( ; i = a . exec ( g ) ; ) { var m = i [ 1 ] . toLowerCase ( ) ; i = i [ 2 ] || i [ 3 ] || i [ 4 ] || "" ; l [ m ] = ! i && e [ m ] ? m : CKEDITOR . tools . htmlDecodeAttr ( i ) } this . onTagOpen ( f , l , c ) ; ! h && CKEDITOR . dtd . $cdata [ f ] && ( h = [ ] ) } } else if ( f = c [ 2 ] ) this . onComment ( f ) } if ( b . length > d ) this . onText ( b . substring ( d ,
b . length ) ) } } } ) ( ) ;
CKEDITOR . htmlParser . basicWriter = CKEDITOR . tools . createClass ( { $ : function ( ) { this . _ = { output : [ ] } } , proto : { openTag : function ( a ) { this . _ . output . push ( "<" , a ) } , openTagClose : function ( a , e ) { e ? this . _ . output . push ( " />" ) : this . _ . output . push ( ">" ) } , attribute : function ( a , e ) { typeof e == "string" && ( e = CKEDITOR . tools . htmlEncodeAttr ( e ) ) ; this . _ . output . push ( " " , a , '="' , e , '"' ) } , closeTag : function ( a ) { this . _ . output . push ( "</" , a , ">" ) } , text : function ( a ) { this . _ . output . push ( a ) } , comment : function ( a ) { this . _ . output . push ( "<\!--" , a , "--\>" ) } , write : function ( a ) { this . _ . output . push ( a ) } ,
reset : function ( ) { this . _ . output = [ ] ; this . _ . indent = false } , getHtml : function ( a ) { var e = this . _ . output . join ( "" ) ; a && this . reset ( ) ; return e } } } ) ; "use strict" ;
( function ( ) { CKEDITOR . htmlParser . node = function ( ) { } ; CKEDITOR . htmlParser . node . prototype = { remove : function ( ) { var a = this . parent . children , e = CKEDITOR . tools . indexOf ( a , this ) , b = this . previous , c = this . next ; b && ( b . next = c ) ; c && ( c . previous = b ) ; a . splice ( e , 1 ) ; this . parent = null } , replaceWith : function ( a ) { var e = this . parent . children , b = CKEDITOR . tools . indexOf ( e , this ) , c = a . previous = this . previous , f = a . next = this . next ; c && ( c . next = a ) ; f && ( f . previous = a ) ; e [ b ] = a ; a . parent = this . parent ; this . parent = null } , insertAfter : function ( a ) { var e = a . parent . children ,
@ -260,211 +260,212 @@ CKEDITOR.htmlParser.comment.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlPar
( function ( ) { CKEDITOR . htmlParser . text = function ( a ) { this . value = a ; this . _ = { isBlockLike : false } } ; CKEDITOR . htmlParser . text . prototype = CKEDITOR . tools . extend ( new CKEDITOR . htmlParser . node , { type : CKEDITOR . NODE _TEXT , filter : function ( a , e ) { if ( ! ( this . value = a . onText ( e , this . value , this ) ) ) { this . remove ( ) ; return false } } , writeHtml : function ( a , e ) { e && this . filter ( e ) ; a . text ( this . value ) } } ) } ) ( ) ; "use strict" ;
( function ( ) { CKEDITOR . htmlParser . cdata = function ( a ) { this . value = a } ; CKEDITOR . htmlParser . cdata . prototype = CKEDITOR . tools . extend ( new CKEDITOR . htmlParser . node , { type : CKEDITOR . NODE _TEXT , filter : function ( ) { } , writeHtml : function ( a ) { a . write ( this . value ) } } ) } ) ( ) ; "use strict" ; CKEDITOR . htmlParser . fragment = function ( ) { this . children = [ ] ; this . parent = null ; this . _ = { isBlockLike : true , hasInlineStarted : false } } ;
( function ( ) { function a ( a ) { return a . attributes [ "data-cke-survive" ] ? false : a . name == "a" && a . attributes . href || CKEDITOR . dtd . $removeEmpty [ a . name ] } var e = CKEDITOR . tools . extend ( { table : 1 , ul : 1 , ol : 1 , dl : 1 } , CKEDITOR . dtd . table , CKEDITOR . dtd . ul , CKEDITOR . dtd . ol , CKEDITOR . dtd . dl ) , b = { ol : 1 , ul : 1 } , c = CKEDITOR . tools . extend ( { } , { html : 1 } , CKEDITOR . dtd . html , CKEDITOR . dtd . body , CKEDITOR . dtd . head , { style : 1 , script : 1 } ) , f = { ul : "li" , ol : "li" , dl : "dd" , table : "tbody" , tbody : "tr" , thead : "tr" , tfoot : "tr" , tr : "td" } ; CKEDITOR . htmlParser . fragment . fromHtml =
function ( d , g, h ) { function m ( a ) { var b ; if ( o . length > 0 ) for ( var c = 0 ; c < o . length ; c ++ ) { var d = o [ c ] , f = d . name , e = CKEDITOR . dtd [ f ] , l= i . name && CKEDITOR . dtd [ i . name ] ; if ( ( ! l || l [ f ] ) && ( ! a || ! e || e [ a ] || ! CKEDITOR . dtd [ a ] ) ) { if ( ! b ) { j ( ) ; b = 1 } d = d . clone ( ) ; d . parent = i; i = d ; o . splice ( c , 1 ) ; c -- } else if ( f == i. name ) { u ( i , i . parent , 1 ) ; c -- } } } function j( ) { for ( ; r . length ; ) u ( r . shift ( ) , i ) } function p ( a ) { if ( a . _ . isBlockLike && a . name != "pre" && a . name != "textarea" ) { var b = a . children . length , c = a . children [ b - 1 ] , d ; if ( c && c . type == CKEDITOR . NODE _TEXT ) ( d = CKEDITOR . tools . rtrim ( c . value ) ) ?
c . value = d : a . children . length = b - 1 } } function u ( b , c , d ) { var c = c || i|| w , f = i ; if ( b . previous === void 0 ) { if ( t( c , b ) ) { i = c ; n . onTagOpen ( h , { } ) ; b . returnPoint = c = i} p ( b ) ; ( ! a ( b ) || b . children . length ) && c . add ( b ) ; b . name == "pre" && ( l = false ) ; b . name == "textarea" && ( k = false ) } if ( b . returnPoint ) { i = b . returnPoint ; delete b . returnPoint } else i= d ? c : f } function t ( a , b ) { if ( ( a == w || a . name == "body" ) && h && ( ! a . name || CKEDITOR . dtd [ a . name ] [ h ] ) ) { var c , d ; return ( c = b . attributes && ( d = b . attributes [ "data-cke-real-element-type" ] ) ? d : b . name ) && c in CKEDITOR . dtd . $inline &&
! ( c in CKEDITOR . dtd . head ) && ! b . isOrphan || b . type == CKEDITOR . NODE _TEXT } } function y ( a , b ) { return a in CKEDITOR . dtd . $listItem || a in CKEDITOR . dtd . $tableContent ? a == b || a == "dt" && b == "dd" || a == "dd" && b == "dt" : false } var n= new CKEDITOR . htmlParser , w = g instanceof CKEDITOR . htmlParser . element ? g: typeof g == "string" ? new CKEDITOR . htmlParser . element ( g ) : new CKEDITOR . htmlParser . fragment , o= [ ] , r = [ ] , i = w , k = w . name == "textarea" , l = w . name == "pre" ; n . onTagOpen = function ( d , f , g, h ) { f = new CKEDITOR . htmlParser . element ( d , f ) ; if ( f . isUnknown && g ) f . isEmpty =
true ; f . isOptionalClose = h; if ( a ( f ) ) o . push ( f ) ; else { if ( d == "pre" ) l = true ; else { if ( d == "br" && l) { i . add ( new CKEDITOR . htmlParser . text ( "\n" ) ) ; return } d == "textarea" && ( k = true ) } if ( d == "br" ) r . push ( f ) ; else { for ( ; ; ) { h= ( g = i . name ) ? CKEDITOR . dtd [ g ] || ( i . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : c ; if ( ! f . isUnknown && ! i. isUnknown && ! h [ d ] ) if ( i . isOptionalClose ) n . onTagClose ( g ) ; else if ( d in b && g in b ) { g = i . children ; ( g = g [ g . length - 1 ] ) && g . name == "li" || u ( g = new CKEDITOR . htmlParser . element ( "li" ) , i ) ; ! f . returnPoint && ( f . returnPoint = i ) ;
i= g } else if ( d in CKEDITOR . dtd . $listItem && ! y ( d , g) ) n . onTagOpen ( d == "li" ? "ul" : "dl" , { } , 0 , 1 ) ; else if ( g in e && ! y ( d , g ) ) { ! f . returnPoint && ( f . returnPoint = i) ; i = i . parent } else { g in CKEDITOR . dtd . $inline && o . unshift ( i ) ; if ( i . parent ) u ( i , i . parent , 1 ) ; else { f . isOrphan = 1 ; break } } else break } m( d ) ; j ( ) ; f . parent = i ; f . isEmpty ? u ( f ) : i = f } } } ; n . onTagClose = function ( a ) { for ( var b = o . length - 1 ; b >= 0 ; b -- ) if ( a == o[ b ] . name ) { o . splice ( b , 1 ) ; return } for ( var c = [ ] , d = [ ] , f = i; f != w && f . name != a ; ) { f . _ . isBlockLike || d . unshift ( f ) ; c . push ( f ) ; f = f . returnPoint || f . parent } if ( f !=
w ) { for ( b = 0 ; b < c . length ; b ++ ) { var e = c [ b ] ; u( e , e . parent ) } i = f ; f . _ . isBlockLike && j( ) ; u ( f , f . parent ) ; if ( f == i) i = i . parent ; o = o . concat ( d ) } a == "body" && ( h= false ) } ; n . onText = function ( a ) { if ( ( ! i. _ . hasInlineStarted || r . length ) && ! l && ! k ) { a = CKEDITOR . tools . ltrim ( a ) ; if ( a . length === 0 ) return } var b = i . name , d = b ? CKEDITOR . dtd [ b ] || ( i . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : c ; if ( ! k && ! d [ "#" ] && b in e ) { n . onTagOpen ( f [ b ] || "" ) ; n. onText ( a ) } else { j ( ) ; m ( ) ; ! l && ! k && ( a = a . replace ( /[\t\r\n ]{2,}|[\t\r\n]/g , " " ) ) ; a = new CKEDITOR . htmlParser . text ( a ) ;
if ( t( i , a ) ) this . onTagOpen ( h , { } , 0 , 1 ) ; i . add ( a ) } } ; n . onCDATA = function ( a ) { i . add ( new CKEDITOR . htmlParser . cdata ( a ) ) } ; n. onComment = function ( a ) { j ( ) ; m ( ) ; i . add ( new CKEDITOR . htmlParser . comment ( a ) ) } ; n. parse ( d ) ; for ( j ( ) ; i != w ; ) u ( i , i . parent , 1 ) ; p ( w ) ; return w } ; CKEDITOR . htmlParser . fragment . prototype = { type : CKEDITOR . NODE _DOCUMENT _FRAGMENT , add : function ( a , b ) { isNaN ( b ) && ( b = this . children . length ) ; var c = b > 0 ? this . children [ b - 1 ] : null ; if ( c ) { if ( a . _ . isBlockLike && c . type == CKEDITOR . NODE _TEXT ) { c . value = CKEDITOR . tools . rtrim ( c . value ) ; if ( c . value . length ===
function ( d , h, l ) { function i ( a ) { var b ; if ( j . length > 0 ) for ( var c = 0 ; c < j . length ; c ++ ) { var d = j [ c ] , f = d . name , e = CKEDITOR . dtd [ f ] , k= v . name && CKEDITOR . dtd [ v . name ] ; if ( ( ! k || k [ f ] ) && ( ! a || ! e || e [ a ] || ! CKEDITOR . dtd [ a ] ) ) { if ( ! b ) { g ( ) ; b = 1 } d = d . clone ( ) ; d . parent = v; v = d ; j . splice ( c , 1 ) ; c -- } else if ( f == v. name ) { t ( v , v . parent , 1 ) ; c -- } } } function g( ) { for ( ; u . length ; ) t ( u . shift ( ) , v ) } function m ( a ) { if ( a . _ . isBlockLike && a . name != "pre" && a . name != "textarea" ) { var b = a . children . length , c = a . children [ b - 1 ] , d ; if ( c && c . type == CKEDITOR . NODE _TEXT ) ( d = CKEDITOR . tools . rtrim ( c . value ) ) ?
c . value = d : a . children . length = b - 1 } } function t ( b , c , d ) { var c = c || v|| q , f = v ; if ( b . previous === void 0 ) { if ( s( c , b ) ) { v = c ; p . onTagOpen ( l , { } ) ; b . returnPoint = c = v} m ( b ) ; ( ! a ( b ) || b . children . length ) && c . add ( b ) ; b . name == "pre" && ( k = false ) ; b . name == "textarea" && ( E = false ) } if ( b . returnPoint ) { v = b . returnPoint ; delete b . returnPoint } else v= d ? c : f } function s ( a , b ) { if ( ( a == q || a . name == "body" ) && l && ( ! a . name || CKEDITOR . dtd [ a . name ] [ l ] ) ) { var c , d ; return ( c = b . attributes && ( d = b . attributes [ "data-cke-real-element-type" ] ) ? d : b . name ) && c in CKEDITOR . dtd . $inline &&
! ( c in CKEDITOR . dtd . head ) && ! b . isOrphan || b . type == CKEDITOR . NODE _TEXT } } function y ( a , b ) { return a in CKEDITOR . dtd . $listItem || a in CKEDITOR . dtd . $tableContent ? a == b || a == "dt" && b == "dd" || a == "dd" && b == "dt" : false } var p= new CKEDITOR . htmlParser , q = h instanceof CKEDITOR . htmlParser . element ? h: typeof h == "string" ? new CKEDITOR . htmlParser . element ( h ) : new CKEDITOR . htmlParser . fragment , j= [ ] , u = [ ] , v = q , E = q . name == "textarea" , k = q . name == "pre" ; p . onTagOpen = function ( d , f , h, l ) { f = new CKEDITOR . htmlParser . element ( d , f ) ; if ( f . isUnknown && h ) f . isEmpty =
true ; f . isOptionalClose = l; if ( a ( f ) ) j . push ( f ) ; else { if ( d == "pre" ) k = true ; else { if ( d == "br" && k) { v . add ( new CKEDITOR . htmlParser . text ( "\n" ) ) ; return } d == "textarea" && ( E = true ) } if ( d == "br" ) u . push ( f ) ; else { for ( ; ; ) { l= ( h = v . name ) ? CKEDITOR . dtd [ h ] || ( v . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : c ; if ( ! f . isUnknown && ! v. isUnknown && ! l [ d ] ) if ( v . isOptionalClose ) p . onTagClose ( h ) ; else if ( d in b && h in b ) { h = v . children ; ( h = h [ h . length - 1 ] ) && h . name == "li" || t ( h = new CKEDITOR . htmlParser . element ( "li" ) , v ) ; ! f . returnPoint && ( f . returnPoint = v ) ;
v= h } else if ( d in CKEDITOR . dtd . $listItem && ! y ( d , h) ) p . onTagOpen ( d == "li" ? "ul" : "dl" , { } , 0 , 1 ) ; else if ( h in e && ! y ( d , h ) ) { ! f . returnPoint && ( f . returnPoint = v) ; v = v . parent } else { h in CKEDITOR . dtd . $inline && j . unshift ( v ) ; if ( v . parent ) t ( v , v . parent , 1 ) ; else { f . isOrphan = 1 ; break } } else break } i( d ) ; g ( ) ; f . parent = v ; f . isEmpty ? t ( f ) : v = f } } } ; p . onTagClose = function ( a ) { for ( var b = j . length - 1 ; b >= 0 ; b -- ) if ( a == j[ b ] . name ) { j . splice ( b , 1 ) ; return } for ( var c = [ ] , d = [ ] , f = v; f != q && f . name != a ; ) { f . _ . isBlockLike || d . unshift ( f ) ; c . push ( f ) ; f = f . returnPoint || f . parent } if ( f !=
q ) { for ( b = 0 ; b < c . length ; b ++ ) { var e = c [ b ] ; t( e , e . parent ) } v = f ; f . _ . isBlockLike && g( ) ; t ( f , f . parent ) ; if ( f == v) v = v . parent ; j = j . concat ( d ) } a == "body" && ( l= false ) } ; p . onText = function ( a ) { if ( ( ! v. _ . hasInlineStarted || u . length ) && ! k && ! E ) { a = CKEDITOR . tools . ltrim ( a ) ; if ( a . length === 0 ) return } var b = v . name , d = b ? CKEDITOR . dtd [ b ] || ( v . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : c ; if ( ! E && ! d [ "#" ] && b in e ) { p . onTagOpen ( f [ b ] || "" ) ; p. onText ( a ) } else { g ( ) ; i ( ) ; ! k && ! E && ( a = a . replace ( /[\t\r\n ]{2,}|[\t\r\n]/g , " " ) ) ; a = new CKEDITOR . htmlParser . text ( a ) ;
if ( s( v , a ) ) this . onTagOpen ( l , { } , 0 , 1 ) ; v . add ( a ) } } ; p . onCDATA = function ( a ) { v . add ( new CKEDITOR . htmlParser . cdata ( a ) ) } ; p. onComment = function ( a ) { g ( ) ; i ( ) ; v . add ( new CKEDITOR . htmlParser . comment ( a ) ) } ; p. parse ( d ) ; for ( g ( ) ; v != q ; ) t ( v , v . parent , 1 ) ; m ( q ) ; return q } ; CKEDITOR . htmlParser . fragment . prototype = { type : CKEDITOR . NODE _DOCUMENT _FRAGMENT , add : function ( a , b ) { isNaN ( b ) && ( b = this . children . length ) ; var c = b > 0 ? this . children [ b - 1 ] : null ; if ( c ) { if ( a . _ . isBlockLike && c . type == CKEDITOR . NODE _TEXT ) { c . value = CKEDITOR . tools . rtrim ( c . value ) ; if ( c . value . length ===
0 ) { this . children . pop ( ) ; this . add ( a ) ; return } } c . next = a } a . previous = c ; a . parent = this ; this . children . splice ( b , 0 , a ) ; if ( ! this . _ . hasInlineStarted ) this . _ . hasInlineStarted = a . type == CKEDITOR . NODE _TEXT || a . type == CKEDITOR . NODE _ELEMENT && ! a . _ . isBlockLike } , filter : function ( a , b ) { b = this . getFilterContext ( b ) ; a . onRoot ( b , this ) ; this . filterChildren ( a , false , b ) } , filterChildren : function ( a , b , c ) { if ( this . childrenFilteredBy != a . id ) { c = this . getFilterContext ( c ) ; if ( b && ! this . parent ) a . onRoot ( c , this ) ; this . childrenFilteredBy = a . id ; for ( b = 0 ; b < this . children . length ; b ++ ) this . children [ b ] . filter ( a ,
c ) === false && b -- } } , writeHtml : function ( a , b ) { b && this . filter ( b ) ; this . writeChildrenHtml ( a ) } , writeChildrenHtml : function ( a , b , c ) { var f = this . getFilterContext ( ) ; if ( c && ! this . parent && b ) b . onRoot ( f , this ) ; b && this . filterChildren ( b , false , f ) ; b = 0 ; c = this . children ; for ( f = c . length ; b < f ; b ++ ) c [ b ] . writeHtml ( a ) } , forEach : function ( a , b , c ) { if ( ! c && ( ! b || this . type == b ) ) var f = a ( this ) ; if ( f !== false ) for ( var c = this . children , e = 0 ; e < c . length ; e ++ ) { f = c [ e ] ; f . type == CKEDITOR . NODE _ELEMENT ? f . forEach ( a , b ) : ( ! b || f . type == b ) && a ( f ) } } , getFilterContext : function ( a ) { return a ||
{ } } } } ) ( ) ; "use strict" ;
( function ( ) { function a ( ) { this . rules = [ ] } function e ( b , c , f , d ) { var e , h; for ( e in c ) { ( h = b [ e ] ) || ( h = b [ e ] = new a ) ; h . add ( c [ e ] , f , d ) } } CKEDITOR . htmlParser . filter = CKEDITOR . tools . createClass ( { $ : function ( b ) { this . id = CKEDITOR . tools . getNextNumber ( ) ; this . elementNameRules = new a ; this . attributeNameRules = new a ; this . elementsRules = { } ; this . attributesRules = { } ; this . textRules = new a ; this . commentRules = new a ; this . rootRules = new a ; b && this . addRules ( b , 10 ) } , proto : { addRules : function ( a , c ) { var f ; if ( typeof c == "number" ) f = c ; else if ( c && "priority" in
( function ( ) { function a ( ) { this . rules = [ ] } function e ( b , c , f , d ) { var e , l; for ( e in c ) { ( l = b [ e ] ) || ( l = b [ e ] = new a ) ; l . add ( c [ e ] , f , d ) } } CKEDITOR . htmlParser . filter = CKEDITOR . tools . createClass ( { $ : function ( b ) { this . id = CKEDITOR . tools . getNextNumber ( ) ; this . elementNameRules = new a ; this . attributeNameRules = new a ; this . elementsRules = { } ; this . attributesRules = { } ; this . textRules = new a ; this . commentRules = new a ; this . rootRules = new a ; b && this . addRules ( b , 10 ) } , proto : { addRules : function ( a , c ) { var f ; if ( typeof c == "number" ) f = c ; else if ( c && "priority" in
c ) f = c . priority ; typeof f != "number" && ( f = 10 ) ; typeof c != "object" && ( c = { } ) ; a . elementNames && this . elementNameRules . addMany ( a . elementNames , f , c ) ; a . attributeNames && this . attributeNameRules . addMany ( a . attributeNames , f , c ) ; a . elements && e ( this . elementsRules , a . elements , f , c ) ; a . attributes && e ( this . attributesRules , a . attributes , f , c ) ; a . text && this . textRules . add ( a . text , f , c ) ; a . comment && this . commentRules . add ( a . comment , f , c ) ; a . root && this . rootRules . add ( a . root , f , c ) } , applyTo : function ( a ) { a . filter ( this ) } , onElementName : function ( a , c ) { return this . elementNameRules . execOnName ( a ,
c ) } , onAttributeName : function ( a , c ) { return this . attributeNameRules . execOnName ( a , c ) } , onText : function ( a , c , f ) { return this . textRules . exec ( a , c , f ) } , onComment : function ( a , c , f ) { return this . commentRules . exec ( a , c , f ) } , onRoot : function ( a , c ) { return this . rootRules . exec ( a , c ) } , onElement : function ( a , c ) { for ( var f = [ this . elementsRules [ "^" ] , this . elementsRules [ c . name ] , this . elementsRules . $ ] , d , e = 0 ; e < 3 ; e ++ ) if ( d = f [ e ] ) { d = d . exec ( a , c , this ) ; if ( d === false ) return null ; if ( d && d != c ) return this . onNode ( a , d ) ; if ( c . parent && ! c . name ) break } return c } ,
onNode : function ( a , c ) { var f = c . type ; return f == CKEDITOR . NODE _ELEMENT ? this . onElement ( a , c ) : f == CKEDITOR . NODE _TEXT ? new CKEDITOR . htmlParser . text ( this . onText ( a , c . value ) ) : f == CKEDITOR . NODE _COMMENT ? new CKEDITOR . htmlParser . comment ( this . onComment ( a , c . value ) ) : null } , onAttribute : function ( a , c , f , d ) { return ( f = this . attributesRules [ f ] ) ? f . exec ( a , d , c , this ) : d } } } ) ; CKEDITOR . htmlParser . filterRulesGroup = a ; a . prototype = { add : function ( a , c , f ) { this . rules . splice ( this . findIndex ( c ) , 0 , { value : a , priority : c , options : f } ) } , addMany : function ( a ,
c , f ) { for ( var d = [ this . findIndex ( c ) , 0 ] , e = 0 , h = a . length ; e < h ; e ++ ) d . push ( { value : a [ e ] , priority : c , options : f } ) ; this . rules . splice . apply ( this . rules , d ) } , findIndex : function ( a ) { for ( var c = this . rules , f = c . length - 1 ; f >= 0 && a < c [ f ] . priority ; ) f -- ; return f + 1 } , exec : function ( a , c ) { var f = c instanceof CKEDITOR . htmlParser . node || c instanceof CKEDITOR . htmlParser . fragment , d = Array . prototype . slice . call ( arguments , 1 ) , e = this . rules , h = e . length , m , j , p , u ; for ( u = 0 ; u < h ; u ++ ) { if ( f ) { m = c . type ; j = c . name } p = e [ u ] ; if ( ! ( a . nonEditable && ! p . options . applyToAll ||
a . nestedEditable && p . options . excludeNestedEditable ) ) { p = p . value . apply ( null , d ) ; if ( p === false || f && p && ( p . name != j || p . type != m ) ) return p ; p != null && ( d [ 0 ] = c = p ) } } return c } , execOnName : function ( a , c ) { for ( var f = 0 , d = this . rules , e = d . length , h ; c && f < e ; f ++ ) { h = d [ f ] ; ! ( a . nonEditable && ! h . options . applyToAll || a . nestedEditable && h . options . excludeNestedEditable ) && ( c = c . replace ( h . value [ 0 ] , h . value [ 1 ] ) ) } return c } } } ) ( ) ;
( function ( ) { function a ( a , e ) { function k ( a ) { return a || CKEDITOR . env . needsNbspFiller ? new CKEDITOR . htmlParser . text ( " " ) : new CKEDITOR . htmlParser . element ( "br" , { "data-cke-bogus" : 1 } ) } function q ( a , f ) { return function ( e ) { if ( e . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ) { var i = [ ] , l = b ( e ) , q , o ; if ( l ) for ( A ( l , 1 ) && i . push ( l ) ; l ; ) { if ( d ( l ) && ( q = c ( l ) ) && A ( q ) ) if ( ( o = c ( q ) ) && ! d ( o ) ) i . push ( q ) ; else { k ( r ) . insertAfter ( q ) ; q . remove ( ) } l = l . previous } for ( l = 0 ; l < i . length ; l ++ ) i [ l ] . remove ( ) ; if ( i = ( typeof f == "function" ? f ( e ) : f ) !== false ) if ( ! r && ! CKEDITOR . env . needsBrFiller &&
e . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT ) i = false ; else if ( ! r && ! CKEDITOR . env . needsBrFiller && ( document . documentMode > 7 || e . name in CKEDITOR . dtd . tr || e . name in CKEDITOR . dtd . $listItem ) ) i = false ; else { i = b ( e ) ; i = ! i || e . name == "form" && i . name == "input" } i && e . add ( k ( a ) ) } } } function A ( a , b ) { if ( ( ! r || CKEDITOR . env . needsBrFiller ) && a . type == CKEDITOR . NODE _ELEMENT && a . name == "br" && ! a . attributes [ "data-cke-eol" ] ) return true ; var c ; if ( a . type == CKEDITOR . NODE _TEXT && ( c = a . value . match ( o ) ) ) { if ( c . index ) { ( new CKEDITOR . htmlParser . text ( a . value . substring ( 0 ,
c . index ) ) ) . insertBefore ( a ) ; a . value = c [ 0 ] } if ( ! CKEDITOR . env . needsBrFiller && r && ( ! b || a . parent . name in v ) ) return true ; if ( ! r ) if ( ( c = a . previous ) && c . name == "br" || ! c || d ( c ) ) return true } return false } var s = { elements : { } } , r = e == "html" , v = CKEDITOR . tools . extend ( { } , l ) , z ; for ( z in v ) "#" in i [ z ] || delete v [ z ] ; for ( z in v ) s . elements [ z ] = q ( r , a . config . fillEmptyBlocks ) ; s . root = q ( r , false ) ; s . elements . br = function ( a ) { return function ( b ) { if ( b . parent . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ) { var e = b . attributes ; if ( "data-cke-bogus" in e || "data-cke-eol" in
e ) delete e [ "data-cke-bogus" ] ; else { for ( e = b . next ; e && f ( e ) ; ) e = e . next ; var i = c ( b ) ; ! e && d ( b . parent ) ? g ( b . parent , k ( a ) ) : d ( e ) && ( i && ! d ( i ) ) && k ( a ) . insertBefore ( e ) } } } } ( r ) ; return s } function e ( a , b ) { return a != CKEDITOR . ENTER _BR && b !== false ? a == CKEDITOR . ENTER _DIV ? "div" : "p" : false } function b ( a ) { for ( a = a . children [ a . children . length - 1 ] ; a && f ( a ) ; ) a = a . previous ; return a } function c ( a ) { for ( a = a . previous ; a && f ( a ) ; ) a = a . previous ; return a } function f ( a ) { return a . type == CKEDITOR . NODE _TEXT && ! CKEDITOR . tools . trim ( a . value ) || a . type == CKEDITOR . NODE _ELEMENT &&
a . attributes [ "data-cke-bookmark" ] } function d ( a ) { return a && ( a . type == CKEDITOR . NODE _ELEMENT && a . name in l || a . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT ) } function g ( a , b ) { var c = a . children [ a . children . length - 1 ] ; a . children . push ( b ) ; b . parent = a ; if ( c ) { c . next = b ; b . previous = c } } function h ( a ) { a = a . attributes ; a . contenteditable != "false" && ( a [ "data-cke-editable" ] = a . contenteditable ? "true" : 1 ) ; a . contenteditable = "false" } function m ( a ) { a = a . attributes ; switch ( a [ "data-cke-editable" ] ) { case "true" : a . contenteditable = "true" ; break ; case "1" : delete a . contenteditable } }
function j ( a ) { return a . replace ( R , function ( a , b , c ) { return "<" + b + c . replace ( N , function ( a , b ) { return F . test ( b ) && c . indexOf ( "data-cke-saved-" + b ) == - 1 ? " data-cke-saved-" + a + " data-cke-" + CKEDITOR . rnd + "-" + a : a } ) + ">" } ) } function p ( a , b ) { return a . replace ( b , function ( a , b , c ) { a . indexOf ( "<textarea" ) === 0 && ( a = b + y ( c ) . replace ( /</g , "<" ) . replace ( />/g , ">" ) + "</textarea>" ) ; return "<cke:encoded>" + encodeURIComponent ( a ) + "</cke:encoded>" } ) } function u ( a ) { return a . replace ( A , function ( a , b ) { return decodeURIComponent ( b ) } ) } function t ( a ) { return a . replace ( /<\!--(?!{cke_protected})[\s\S]+?--\>/g ,
function ( a ) { return "<\!--" + r + "{C}" + encodeURIComponent ( a ) . replace ( /--/g , "%2D%2D" ) + "--\>" } ) } function y ( a ) { return a . replace ( /<\!--\{cke_protected\}\{C\}([\s\S]+?)--\>/g , function ( a , b ) { return decodeURIComponent ( b ) } ) } function n ( a , b ) { var c = b . _ . dataStore ; return a . replace ( /<\!--\{cke_protected\}([\s\S]+?)--\>/g , function ( a , b ) { return decodeURIComponent ( b ) } ) . replace ( /\{cke_protected_(\d+)\}/g , function ( a , b ) { return c && c [ b ] || "" } ) } function w ( a , b ) { for ( var c = [ ] , d = b . config . protectedSource , f = b . _ . dataStore || ( b . _ . dataStore =
{ id : 1 } ) , e = /<\!--\{cke_temp(comment)?\}(\d*?)--\>/g , d = [ /<script[\s\S]*?<\/script>/gi , /<noscript[\s\S]*?<\/noscript>/gi , /<meta[\s\S]*?\/?>/gi ] . concat ( d ) , a = a . replace ( /<\!--[\s\S]*?--\>/g , function ( a ) { return "<\!--{cke_tempcomment}" + ( c . push ( a ) - 1 ) + "--\>" } ) , i = 0 ; i < d . length ; i ++ ) a = a . replace ( d [ i ] , function ( a ) { a = a . replace ( e , function ( a , b , d ) { return c [ d ] } ) ; return /cke_temp(comment)?/ . test ( a ) ? a : "<\!--{cke_temp}" + ( c . push ( a ) - 1 ) + "--\>" } ) ; a = a . replace ( e , function ( a , b , d ) { return "<\!--" + r + ( b ? "{C}" : "" ) + encodeURIComponent ( c [ d ] ) . replace ( /--/g ,
"%2D%2D" ) + "--\>" } ) ; a = a . replace ( /<\w+(?:\s+(?:(?:[^\s=>]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=>]+))+\s*>/g , function ( a ) { return a . replace ( /<\!--\{cke_protected\}([^>]*)--\>/g , function ( a , b ) { f [ f . id ] = decodeURIComponent ( b ) ; return "{cke_protected_" + f . id ++ + "}" } ) } ) ; return a = a . replace ( /<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g , function ( a , c , d , f ) { return "<" + c + d + ">" + n ( y ( f ) , b ) + "</" + c + ">" } ) } CKEDITOR . htmlDataProcessor = function ( b ) { var c , d , f = this ; this . editor = b ; this . dataFilter = c = new CKEDITOR . htmlParser . filter ;
this . htmlFilter = d = new CKEDITOR . htmlParser . filter ; this . writer = new CKEDITOR . htmlParser . basicWriter ; c . addRules ( q ) ; c . addRules ( x , { applyToAll : true } ) ; c . addRules ( a ( b , "data" ) , { applyToAll : true } ) ; d . addRules ( s ) ; d . addRules ( M , { applyToAll : true } ) ; d . addRules ( a ( b , "html" ) , { applyToAll : true } ) ; b . on ( "toHtml" , function ( a ) { var a = a . data , c = a . dataValue , c = w ( c , b ) , c = p ( c , J ) , c = j ( c ) , c = p ( c , Q ) , c = c . replace ( E , "$1cke:$2" ) , c = c . replace ( z , "<cke:$1$2></cke:$1>" ) , c = c . replace ( /(<pre\b[^>]*>)(\r\n|\n)/g , "$1$2$2" ) , c = c . replace ( /([^a-z0-9<\-])(on\w{3,})(?!>)/gi ,
"$1data-cke-" + CKEDITOR . rnd + "-$2" ) , d = a . context || b . editable ( ) . getName ( ) , f ; if ( CKEDITOR . env . ie && CKEDITOR . env . version < 9 && d == "pre" ) { d = "div" ; c = "<pre>" + c + "</pre>" ; f = 1 } d = b . document . createElement ( d ) ; d . setHtml ( "a" + c ) ; c = d . getHtml ( ) . substr ( 1 ) ; c = c . replace ( RegExp ( "data-cke-" + CKEDITOR . rnd + "-" , "ig" ) , "" ) ; f && ( c = c . replace ( /^<pre>|<\/pre>$/gi , "" ) ) ; c = c . replace ( v , "$1$2" ) ; c = u ( c ) ; c = y ( c ) ; a . dataValue = CKEDITOR . htmlParser . fragment . fromHtml ( c , a . context , a . fixForBody === false ? false : e ( a . enterMode , b . config . autoParagraph ) ) } , null , null ,
5 ) ; b . on ( "toHtml" , function ( a ) { a . data . filter . applyTo ( a . data . dataValue , true , a . data . dontFilter , a . data . enterMode ) && b . fire ( "dataFiltered" ) } , null , null , 6 ) ; b . on ( "toHtml" , function ( a ) { a . data . dataValue . filterChildren ( f . dataFilter , true ) } , null , null , 10 ) ; b . on ( "toHtml" , function ( a ) { var a = a . data , b = a . dataValue , c = new CKEDITOR . htmlParser . basicWriter ; b . writeChildrenHtml ( c ) ; b = c . getHtml ( true ) ; a . dataValue = t ( b ) } , null , null , 15 ) ; b . on ( "toDataFormat" , function ( a ) { var c = a . data . dataValue ; a . data . enterMode != CKEDITOR . ENTER _BR && ( c = c . replace ( /^<br *\/?>/i ,
"" ) ) ; a . data . dataValue = CKEDITOR . htmlParser . fragment . fromHtml ( c , a . data . context , e ( a . data . enterMode , b . config . autoParagraph ) ) } , null , null , 5 ) ; b . on ( "toDataFormat" , function ( a ) { a . data . dataValue . filterChildren ( f . htmlFilter , true ) } , null , null , 10 ) ; b . on ( "toDataFormat" , function ( a ) { a . data . filter . applyTo ( a . data . dataValue , false , true ) } , null , null , 11 ) ; b . on ( "toDataFormat" , function ( a ) { var c = a . data . dataValue , d = f . writer ; d . reset ( ) ; c . writeChildrenHtml ( d ) ; c = d . getHtml ( true ) ; c = y ( c ) ; c = n ( c , b ) ; a . data . dataValue = c } , null , null , 15 ) } ; CKEDITOR . htmlDataProcessor . prototype =
{ toHtml : function ( a , b , c , d ) { var f = this . editor , e , i , l ; if ( b && typeof b == "object" ) { e = b . context ; c = b . fixForBody ; d = b . dontFilter ; i = b . filter ; l = b . enterMode } else e = b ; ! e && e !== null && ( e = f . editable ( ) . getName ( ) ) ; return f . fire ( "toHtml" , { dataValue : a , context : e , fixForBody : c , dontFilter : d , filter : i || f . filter , enterMode : l || f . enterMode } ) . dataValue } , toDataFormat : function ( a , b ) { var c , d , f ; if ( b ) { c = b . context ; d = b . filter ; f = b . enterMode } ! c && c !== null && ( c = this . editor . editable ( ) . getName ( ) ) ; return this . editor . fire ( "toDataFormat" , { dataValue : a ,
filter : d || this . editor . filter , context : c , enterMode : f || this . editor . enterMode } ) . dataValue } } ; var o = /(?: |\xa0)$/ , r = "{cke_protected}" , i = CKEDITOR . dtd , k = [ "caption" , "colgroup" , "col" , "thead" , "tfoot" , "tbody" ] , l = CKEDITOR . tools . extend ( { } , i . $blockLimit , i . $block ) , q = { elements : { input : h , textarea : h } } , x = { attributeNames : [ [ /^on/ , "data-cke-pa-on" ] , [ /^data-cke-expando$/ , "" ] ] } , s = { elements : { embed : function ( a ) { var b = a . parent ; if ( b && b . name == "object" ) { var c = b . attributes . width , b = b . attributes . height ; if ( c ) a . attributes . width =
c ; if ( b ) a . attributes . height = b } } , a : function ( a ) { if ( ! a . children . length && ! a . attributes . name && ! a . attributes [ "data-cke-saved-name" ] ) return false } } } , M = { elementNames : [ [ /^cke:/ , "" ] , [ /^\?xml:namespace$/ , "" ] ] , attributeNames : [ [ /^data-cke-(saved|pa)-/ , "" ] , [ /^data-cke-.*/ , "" ] , [ "hidefocus" , "" ] ] , elements : { $ : function ( a ) { var b = a . attributes ; if ( b ) { if ( b [ "data-cke-temp" ] ) return false ; for ( var c = [ "name" , "href" , "src" ] , d , f = 0 ; f < c . length ; f ++ ) { d = "data-cke-saved-" + c [ f ] ; d in b && delete b [ c [ f ] ] } } return a } , table : function ( a ) { a . children . slice ( 0 ) . sort ( function ( a ,
b ) { var c , d ; if ( a . type == CKEDITOR . NODE _ELEMENT && b . type == a . type ) { c = CKEDITOR . tools . indexOf ( k , a . name ) ; d = CKEDITOR . tools . indexOf ( k , b . name ) } if ( ! ( c > - 1 && d > - 1 && c != d ) ) { c = a . parent ? a . getIndex ( ) : - 1 ; d = b . parent ? b . getIndex ( ) : - 1 } return c > d ? 1 : - 1 } ) } , param : function ( a ) { a . children = [ ] ; a . isEmpty = true ; return a } , span : function ( a ) { a . attributes [ "class" ] == "Apple-style-span" && delete a . name } , html : function ( a ) { delete a . attributes . contenteditable ; delete a . attributes [ "class" ] } , body : function ( a ) { delete a . attributes . spellcheck ; delete a . attributes . contenteditable } ,
style : function ( a ) { var b = a . children [ 0 ] ; if ( b && b . value ) b . value = CKEDITOR . tools . trim ( b . value ) ; if ( ! a . attributes . type ) a . attributes . type = "text/css" } , title : function ( a ) { var b = a . children [ 0 ] ; ! b && g ( a , b = new CKEDITOR . htmlParser . text ) ; b . value = a . attributes [ "data-cke-title" ] || "" } , input : m , textarea : m } , attributes : { "class" : function ( a ) { return CKEDITOR . tools . ltrim ( a . replace ( /(?:^|\s+)cke_[^\s]*/g , "" ) ) || false } } } ; if ( CKEDITOR . env . ie ) M . attributes . style = function ( a ) { return a . replace ( /(^|;)([^\:]+)/g , function ( a ) { return a . toLowerCase ( ) } ) } ;
var R = /<(a|area|img|input|source)\b([^>]*)>/gi , N = /([\w-]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi , F = /^(href|src|name)$/i , Q = /(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi , J = /(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi , A = /<cke:encoded>([^<]*)<\/cke:encoded>/gi , E = /(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi , v = /(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi , z = /<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi } ) ( ) ; "use strict" ;
c , f ) { for ( var d = [ this . findIndex ( c ) , 0 ] , e = 0 , l = a . length ; e < l ; e ++ ) d . push ( { value : a [ e ] , priority : c , options : f } ) ; this . rules . splice . apply ( this . rules , d ) } , findIndex : function ( a ) { for ( var c = this . rules , f = c . length - 1 ; f >= 0 && a < c [ f ] . priority ; ) f -- ; return f + 1 } , exec : function ( a , c ) { var f = c instanceof CKEDITOR . htmlParser . node || c instanceof CKEDITOR . htmlParser . fragment , d = Array . prototype . slice . call ( arguments , 1 ) , e = this . rules , l = e . length , i , g , m , t ; for ( t = 0 ; t < l ; t ++ ) { if ( f ) { i = c . type ; g = c . name } m = e [ t ] ; if ( ! ( a . nonEditable && ! m . options . applyToAll ||
a . nestedEditable && m . options . excludeNestedEditable ) ) { m = m . value . apply ( null , d ) ; if ( m === false || f && m && ( m . name != g || m . type != i ) ) return m ; m != null && ( d [ 0 ] = c = m ) } } return c } , execOnName : function ( a , c ) { for ( var f = 0 , d = this . rules , e = d . length , l ; c && f < e ; f ++ ) { l = d [ f ] ; ! ( a . nonEditable && ! l . options . applyToAll || a . nestedEditable && l . options . excludeNestedEditable ) && ( c = c . replace ( l . value [ 0 ] , l . value [ 1 ] ) ) } return c } } } ) ( ) ;
( function ( ) { function a ( a , e ) { function n ( a ) { return a || CKEDITOR . env . needsNbspFiller ? new CKEDITOR . htmlParser . text ( " " ) : new CKEDITOR . htmlParser . element ( "br" , { "data-cke-bogus" : 1 } ) } function r ( a , f ) { return function ( e ) { if ( e . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ) { var j = [ ] , k = b ( e ) , x , r ; if ( k ) for ( w ( k , 1 ) && j . push ( k ) ; k ; ) { if ( d ( k ) && ( x = c ( k ) ) && w ( x ) ) if ( ( r = c ( x ) ) && ! d ( r ) ) j . push ( x ) ; else { n ( o ) . insertAfter ( x ) ; x . remove ( ) } k = k . previous } for ( k = 0 ; k < j . length ; k ++ ) j [ k ] . remove ( ) ; if ( j = ( typeof f == "function" ? f ( e ) : f ) !== false ) if ( ! o && ! CKEDITOR . env . needsBrFiller &&
e . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT ) j = false ; else if ( ! o && ! CKEDITOR . env . needsBrFiller && ( document . documentMode > 7 || e . name in CKEDITOR . dtd . tr || e . name in CKEDITOR . dtd . $listItem ) ) j = false ; else { j = b ( e ) ; j = ! j || e . name == "form" && j . name == "input" } j && e . add ( n ( a ) ) } } } function w ( a , b ) { if ( ( ! o || CKEDITOR . env . needsBrFiller ) && a . type == CKEDITOR . NODE _ELEMENT && a . name == "br" && ! a . attributes [ "data-cke-eol" ] ) return true ; var c ; if ( a . type == CKEDITOR . NODE _TEXT && ( c = a . value . match ( j ) ) ) { if ( c . index ) { ( new CKEDITOR . htmlParser . text ( a . value . substring ( 0 ,
c . index ) ) ) . insertBefore ( a ) ; a . value = c [ 0 ] } if ( ! CKEDITOR . env . needsBrFiller && o && ( ! b || a . parent . name in i ) ) return true ; if ( ! o ) if ( ( c = a . previous ) && c . name == "br" || ! c || d ( c ) ) return true } return false } var g = { elements : { } } , o = e == "html" , i = CKEDITOR . tools . extend ( { } , k ) , C ; for ( C in i ) "#" in v [ C ] || delete i [ C ] ; for ( C in i ) g . elements [ C ] = r ( o , a . config . fillEmptyBlocks ) ; g . root = r ( o , false ) ; g . elements . br = function ( a ) { return function ( b ) { if ( b . parent . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ) { var e = b . attributes ; if ( "data-cke-bogus" in e || "data-cke-eol" in
e ) delete e [ "data-cke-bogus" ] ; else { for ( e = b . next ; e && f ( e ) ; ) e = e . next ; var j = c ( b ) ; ! e && d ( b . parent ) ? h ( b . parent , n ( a ) ) : d ( e ) && ( j && ! d ( j ) ) && n ( a ) . insertBefore ( e ) } } } } ( o ) ; return g } function e ( a , b ) { return a != CKEDITOR . ENTER _BR && b !== false ? a == CKEDITOR . ENTER _DIV ? "div" : "p" : false } function b ( a ) { for ( a = a . children [ a . children . length - 1 ] ; a && f ( a ) ; ) a = a . previous ; return a } function c ( a ) { for ( a = a . previous ; a && f ( a ) ; ) a = a . previous ; return a } function f ( a ) { return a . type == CKEDITOR . NODE _TEXT && ! CKEDITOR . tools . trim ( a . value ) || a . type == CKEDITOR . NODE _ELEMENT &&
a . attributes [ "data-cke-bookmark" ] } function d ( a ) { return a && ( a . type == CKEDITOR . NODE _ELEMENT && a . name in k || a . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT ) } function h ( a , b ) { var c = a . children [ a . children . length - 1 ] ; a . children . push ( b ) ; b . parent = a ; if ( c ) { c . next = b ; b . previous = c } } function l ( a ) { a = a . attributes ; a . contenteditable != "false" && ( a [ "data-cke-editable" ] = a . contenteditable ? "true" : 1 ) ; a . contenteditable = "false" } function i ( a ) { a = a . attributes ; switch ( a [ "data-cke-editable" ] ) { case "true" : a . contenteditable = "true" ; break ; case "1" : delete a . contenteditable } }
function g ( a ) { return a . replace ( D , function ( a , b , c ) { return "<" + b + c . replace ( J , function ( a , b ) { return z . test ( b ) && c . indexOf ( "data-cke-saved-" + b ) == - 1 ? " data-cke-saved-" + a + " data-cke-" + CKEDITOR . rnd + "-" + a : a } ) + ">" } ) } function m ( a , b ) { return a . replace ( b , function ( a , b , c ) { a . indexOf ( "<textarea" ) === 0 && ( a = b + y ( c ) . replace ( /</g , "<" ) . replace ( />/g , ">" ) + "</textarea>" ) ; return "<cke:encoded>" + encodeURIComponent ( a ) + "</cke:encoded>" } ) } function t ( a ) { return a . replace ( w , function ( a , b ) { return decodeURIComponent ( b ) } ) } function s ( a ) { return a . replace ( /<\!--(?!{cke_protected})[\s\S]+?--\>/g ,
function ( a ) { return "<\!--" + u + "{C}" + encodeURIComponent ( a ) . replace ( /--/g , "%2D%2D" ) + "--\>" } ) } function y ( a ) { return a . replace ( /<\!--\{cke_protected\}\{C\}([\s\S]+?)--\>/g , function ( a , b ) { return decodeURIComponent ( b ) } ) } function p ( a , b ) { var c = b . _ . dataStore ; return a . replace ( /<\!--\{cke_protected\}([\s\S]+?)--\>/g , function ( a , b ) { return decodeURIComponent ( b ) } ) . replace ( /\{cke_protected_(\d+)\}/g , function ( a , b ) { return c && c [ b ] || "" } ) } function q ( a , b ) { for ( var c = [ ] , d = b . config . protectedSource , f = b . _ . dataStore || ( b . _ . dataStore =
{ id : 1 } ) , e = /<\!--\{cke_temp(comment)?\}(\d*?)--\>/g , d = [ /<script[\s\S]*?<\/script>/gi , /<noscript[\s\S]*?<\/noscript>/gi , /<meta[\s\S]*?\/?>/gi ] . concat ( d ) , a = a . replace ( /<\!--[\s\S]*?--\>/g , function ( a ) { return "<\!--{cke_tempcomment}" + ( c . push ( a ) - 1 ) + "--\>" } ) , j = 0 ; j < d . length ; j ++ ) a = a . replace ( d [ j ] , function ( a ) { a = a . replace ( e , function ( a , b , d ) { return c [ d ] } ) ; return /cke_temp(comment)?/ . test ( a ) ? a : "<\!--{cke_temp}" + ( c . push ( a ) - 1 ) + "--\>" } ) ; a = a . replace ( e , function ( a , b , d ) { return "<\!--" + u + ( b ? "{C}" : "" ) + encodeURIComponent ( c [ d ] ) . replace ( /--/g ,
"%2D%2D" ) + "--\>" } ) ; a = a . replace ( /<\w+(?:\s+(?:(?:[^\s=>]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=>]+))+\s*>/g , function ( a ) { return a . replace ( /<\!--\{cke_protected\}([^>]*)--\>/g , function ( a , b ) { f [ f . id ] = decodeURIComponent ( b ) ; return "{cke_protected_" + f . id ++ + "}" } ) } ) ; return a = a . replace ( /<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g , function ( a , c , d , f ) { return "<" + c + d + ">" + p ( y ( f ) , b ) + "</" + c + ">" } ) } CKEDITOR . htmlDataProcessor = function ( b ) { var c , d , f = this ; this . editor = b ; this . dataFilter = c = new CKEDITOR . htmlParser . filter ;
this . htmlFilter = d = new CKEDITOR . htmlParser . filter ; this . writer = new CKEDITOR . htmlParser . basicWriter ; c . addRules ( n ) ; c . addRules ( r , { applyToAll : true } ) ; c . addRules ( a ( b , "data" ) , { applyToAll : true } ) ; d . addRules ( o ) ; d . addRules ( M , { applyToAll : true } ) ; d . addRules ( a ( b , "html" ) , { applyToAll : true } ) ; b . on ( "toHtml" , function ( a ) { var a = a . data , c = a . dataValue , d , c = q ( c , b ) , c = m ( c , B ) , c = g ( c ) , c = m ( c , L ) , c = c . replace ( H , "$1cke:$2" ) , c = c . replace ( A , "<cke:$1$2></cke:$1>" ) , c = c . replace ( /(<pre\b[^>]*>)(\r\n|\n)/g , "$1$2$2" ) , c = c . replace ( /([^a-z0-9<\-])(on\w{3,})(?!>)/gi ,
"$1data-cke-" + CKEDITOR . rnd + "-$2" ) ; d = a . context || b . editable ( ) . getName ( ) ; var f ; if ( CKEDITOR . env . ie && CKEDITOR . env . version < 9 && d == "pre" ) { d = "div" ; c = "<pre>" + c + "</pre>" ; f = 1 } d = b . document . createElement ( d ) ; d . setHtml ( "a" + c ) ; c = d . getHtml ( ) . substr ( 1 ) ; c = c . replace ( RegExp ( "data-cke-" + CKEDITOR . rnd + "-" , "ig" ) , "" ) ; f && ( c = c . replace ( /^<pre>|<\/pre>$/gi , "" ) ) ; c = c . replace ( C , "$1$2" ) ; c = t ( c ) ; c = y ( c ) ; d = a . fixForBody === false ? false : e ( a . enterMode , b . config . autoParagraph ) ; c = CKEDITOR . htmlParser . fragment . fromHtml ( c , a . context , d ) ; if ( d ) { f = c ;
if ( ! f . children . length && CKEDITOR . dtd [ f . name ] [ d ] ) { d = new CKEDITOR . htmlParser . element ( d ) ; f . add ( d ) } } a . dataValue = c } , null , null , 5 ) ; b . on ( "toHtml" , function ( a ) { a . data . filter . applyTo ( a . data . dataValue , true , a . data . dontFilter , a . data . enterMode ) && b . fire ( "dataFiltered" ) } , null , null , 6 ) ; b . on ( "toHtml" , function ( a ) { a . data . dataValue . filterChildren ( f . dataFilter , true ) } , null , null , 10 ) ; b . on ( "toHtml" , function ( a ) { var a = a . data , b = a . dataValue , c = new CKEDITOR . htmlParser . basicWriter ; b . writeChildrenHtml ( c ) ; b = c . getHtml ( true ) ; a . dataValue =
s ( b ) } , null , null , 15 ) ; b . on ( "toDataFormat" , function ( a ) { var c = a . data . dataValue ; a . data . enterMode != CKEDITOR . ENTER _BR && ( c = c . replace ( /^<br *\/?>/i , "" ) ) ; a . data . dataValue = CKEDITOR . htmlParser . fragment . fromHtml ( c , a . data . context , e ( a . data . enterMode , b . config . autoParagraph ) ) } , null , null , 5 ) ; b . on ( "toDataFormat" , function ( a ) { a . data . dataValue . filterChildren ( f . htmlFilter , true ) } , null , null , 10 ) ; b . on ( "toDataFormat" , function ( a ) { a . data . filter . applyTo ( a . data . dataValue , false , true ) } , null , null , 11 ) ; b . on ( "toDataFormat" , function ( a ) { var c =
a . data . dataValue , d = f . writer ; d . reset ( ) ; c . writeChildrenHtml ( d ) ; c = d . getHtml ( true ) ; c = y ( c ) ; c = p ( c , b ) ; a . data . dataValue = c } , null , null , 15 ) } ; CKEDITOR . htmlDataProcessor . prototype = { toHtml : function ( a , b , c , d ) { var f = this . editor , e , j , k ; if ( b && typeof b == "object" ) { e = b . context ; c = b . fixForBody ; d = b . dontFilter ; j = b . filter ; k = b . enterMode } else e = b ; ! e && e !== null && ( e = f . editable ( ) . getName ( ) ) ; return f . fire ( "toHtml" , { dataValue : a , context : e , fixForBody : c , dontFilter : d , filter : j || f . filter , enterMode : k || f . enterMode } ) . dataValue } , toDataFormat : function ( a ,
b ) { var c , d , f ; if ( b ) { c = b . context ; d = b . filter ; f = b . enterMode } ! c && c !== null && ( c = this . editor . editable ( ) . getName ( ) ) ; return this . editor . fire ( "toDataFormat" , { dataValue : a , filter : d || this . editor . filter , context : c , enterMode : f || this . editor . enterMode } ) . dataValue } } ; var j = /(?: |\xa0)$/ , u = "{cke_protected}" , v = CKEDITOR . dtd , E = [ "caption" , "colgroup" , "col" , "thead" , "tfoot" , "tbody" ] , k = CKEDITOR . tools . extend ( { } , v . $blockLimit , v . $block ) , n = { elements : { input : l , textarea : l } } , r = { attributeNames : [ [ /^on/ , "data-cke-pa-on" ] , [ /^data-cke-expando$/ ,
"" ] ] } , o = { elements : { embed : function ( a ) { var b = a . parent ; if ( b && b . name == "object" ) { var c = b . attributes . width , b = b . attributes . height ; if ( c ) a . attributes . width = c ; if ( b ) a . attributes . height = b } } , a : function ( a ) { if ( ! a . children . length && ! a . attributes . name && ! a . attributes [ "data-cke-saved-name" ] ) return false } } } , M = { elementNames : [ [ /^cke:/ , "" ] , [ /^\?xml:namespace$/ , "" ] ] , attributeNames : [ [ /^data-cke-(saved|pa)-/ , "" ] , [ /^data-cke-.*/ , "" ] , [ "hidefocus" , "" ] ] , elements : { $ : function ( a ) { var b = a . attributes ; if ( b ) { if ( b [ "data-cke-temp" ] ) return false ;
for ( var c = [ "name" , "href" , "src" ] , d , f = 0 ; f < c . length ; f ++ ) { d = "data-cke-saved-" + c [ f ] ; d in b && delete b [ c [ f ] ] } } return a } , table : function ( a ) { a . children . slice ( 0 ) . sort ( function ( a , b ) { var c , d ; if ( a . type == CKEDITOR . NODE _ELEMENT && b . type == a . type ) { c = CKEDITOR . tools . indexOf ( E , a . name ) ; d = CKEDITOR . tools . indexOf ( E , b . name ) } if ( ! ( c > - 1 && d > - 1 && c != d ) ) { c = a . parent ? a . getIndex ( ) : - 1 ; d = b . parent ? b . getIndex ( ) : - 1 } return c > d ? 1 : - 1 } ) } , param : function ( a ) { a . children = [ ] ; a . isEmpty = true ; return a } , span : function ( a ) { a . attributes [ "class" ] == "Apple-style-span" &&
delete a . name } , html : function ( a ) { delete a . attributes . contenteditable ; delete a . attributes [ "class" ] } , body : function ( a ) { delete a . attributes . spellcheck ; delete a . attributes . contenteditable } , style : function ( a ) { var b = a . children [ 0 ] ; if ( b && b . value ) b . value = CKEDITOR . tools . trim ( b . value ) ; if ( ! a . attributes . type ) a . attributes . type = "text/css" } , title : function ( a ) { var b = a . children [ 0 ] ; ! b && h ( a , b = new CKEDITOR . htmlParser . text ) ; b . value = a . attributes [ "data-cke-title" ] || "" } , input : i , textarea : i } , attributes : { "class" : function ( a ) { return CKEDITOR . tools . ltrim ( a . replace ( /(?:^|\s+)cke_[^\s]*/g ,
"" ) ) || false } } } ; if ( CKEDITOR . env . ie ) M . attributes . style = function ( a ) { return a . replace ( /(^|;)([^\:]+)/g , function ( a ) { return a . toLowerCase ( ) } ) } ; var D = /<(a|area|img|input|source)\b([^>]*)>/gi , J = /([\w-]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi , z = /^(href|src|name)$/i , L = /(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi , B = /(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi , w = /<cke:encoded>([^<]*)<\/cke:encoded>/gi , H = /(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi ,
C = /(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi , A = /<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi } ) ( ) ; "use strict" ;
CKEDITOR . htmlParser . element = function ( a , e ) { this . name = a ; this . attributes = e || { } ; this . children = [ ] ; var b = a || "" , c = b . match ( /^cke:(.*)/ ) ; c && ( b = c [ 1 ] ) ; b = ! ( ! CKEDITOR . dtd . $nonBodyContent [ b ] && ! CKEDITOR . dtd . $block [ b ] && ! CKEDITOR . dtd . $listItem [ b ] && ! CKEDITOR . dtd . $tableContent [ b ] && ! ( CKEDITOR . dtd . $nonEditable [ b ] || b == "br" ) ) ; this . isEmpty = ! ! CKEDITOR . dtd . $empty [ a ] ; this . isUnknown = ! CKEDITOR . dtd [ a ] ; this . _ = { isBlockLike : b , hasInlineStarted : this . isEmpty || ! b } } ;
CKEDITOR . htmlParser . cssStyle = function ( a ) { var e = { } ; ( ( a instanceof CKEDITOR . htmlParser . element ? a . attributes . style : a ) || "" ) . replace ( /"/g , '"' ) . replace ( /\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g , function ( a , c , f ) { c == "font-family" && ( f = f . replace ( /["']/g , "" ) ) ; e [ c . toLowerCase ( ) ] = f } ) ; return { rules : e , populate : function ( a ) { var c = this . toString ( ) ; if ( c ) a instanceof CKEDITOR . dom . element ? a . setAttribute ( "style" , c ) : a instanceof CKEDITOR . htmlParser . element ? a . attributes . style = c : a . style = c } , toString : function ( ) { var a = [ ] , c ;
for ( c in e ) e [ c ] && a . push ( c , ":" , e [ c ] , ";" ) ; return a . join ( "" ) } } } ;
( function ( ) { function a ( a ) { return function ( b ) { return b . type == CKEDITOR . NODE _ELEMENT && ( typeof a == "string" ? b . name == a : b . name in a ) } } var e = function ( a , b ) { a = a [ 0 ] ; b = b [ 0 ] ; return a < b ? - 1 : a > b ? 1 : 0 } , b = CKEDITOR . htmlParser . fragment . prototype ; CKEDITOR . htmlParser . element . prototype = CKEDITOR . tools . extend ( new CKEDITOR . htmlParser . node , { type : CKEDITOR . NODE _ELEMENT , add : b . add , clone : function ( ) { return new CKEDITOR . htmlParser . element ( this . name , this . attributes ) } , filter : function ( a , b ) { var d = this , e , h , b = d . getFilterContext ( b ) ; if ( b . off ) return true ;
if ( ! d . parent ) a . onRoot ( b , d ) ; for ( ; ; ) { e = d . name ; if ( ! ( h = a . onElementName ( b , e ) ) ) { this . remove ( ) ; return false } d . name = h ; if ( ! ( d = a . onElement ( b , d ) ) ) { this . remove ( ) ; return false } if ( d !== this ) { this . replaceWith ( d ) ; return false } if ( d . name == e ) break ; if ( d . type != CKEDITOR . NODE _ELEMENT ) { this . replaceWith ( d ) ; return false } if ( ! d . name ) { this . replaceWithChildren ( ) ; return false } } e = d . attributes ; var m, j ; for ( m in e ) { j = m ; for ( h = e [ m ] ; ; ) if ( j = a . onAttributeName ( b , m ) ) if ( j != m ) { delete e [ m ] ; m = j } else break ; else { delete e [ m] ; break } j && ( ( h = a . onAttribute ( b ,
d , j, h ) ) === false ? delete e [ j ] : e [ j ] = h ) } d . isEmpty || this . filterChildren ( a , false , b ) ; return true } , filterChildren : b . filterChildren , writeHtml : function ( a , b ) { b && this . filter ( b ) ; var d = this . name , g= [ ] , h = this . attributes , m , j ; a . openTag ( d , h ) ; for ( m in h ) g . push ( [ m , h [ m ] ] ) ; a . sortAttributes && g. sort ( e ) ; m = 0 ; for ( j = g . length ; m < j ; m ++ ) { h = g [ m ] ; a . attribute ( h [ 0 ] , h [ 1 ] ) } a . openTagClose ( d , this . isEmpty ) ; this . writeChildrenHtml ( a ) ; this . isEmpty || a . closeTag ( d ) } , writeChildrenHtml : b . writeChildrenHtml , replaceWithChildren : function ( ) { for ( var a =
( function ( ) { function a ( a ) { return function ( b ) { return b . type == CKEDITOR . NODE _ELEMENT && ( typeof a == "string" ? b . name == a : b . name in a ) } } var e = function ( a , b ) { a = a [ 0 ] ; b = b [ 0 ] ; return a < b ? - 1 : a > b ? 1 : 0 } , b = CKEDITOR . htmlParser . fragment . prototype ; CKEDITOR . htmlParser . element . prototype = CKEDITOR . tools . extend ( new CKEDITOR . htmlParser . node , { type : CKEDITOR . NODE _ELEMENT , add : b . add , clone : function ( ) { return new CKEDITOR . htmlParser . element ( this . name , this . attributes ) } , filter : function ( a , b ) { var d = this , e , l , b = d . getFilterContext ( b ) ; if ( b . off ) return true ;
if ( ! d . parent ) a . onRoot ( b , d ) ; for ( ; ; ) { e = d . name ; if ( ! ( l = a . onElementName ( b , e ) ) ) { this . remove ( ) ; return false } d . name = l ; if ( ! ( d = a . onElement ( b , d ) ) ) { this . remove ( ) ; return false } if ( d !== this ) { this . replaceWith ( d ) ; return false } if ( d . name == e ) break ; if ( d . type != CKEDITOR . NODE _ELEMENT ) { this . replaceWith ( d ) ; return false } if ( ! d . name ) { this . replaceWithChildren ( ) ; return false } } e = d . attributes ; var i, g ; for ( i in e ) { g = i ; for ( l = e [ i ] ; ; ) if ( g = a . onAttributeName ( b , i ) ) if ( g != i ) { delete e [ i ] ; i = g } else break ; else { delete e [ i] ; break } g && ( ( l = a . onAttribute ( b ,
d , g, l ) ) === false ? delete e [ g ] : e [ g ] = l ) } d . isEmpty || this . filterChildren ( a , false , b ) ; return true } , filterChildren : b . filterChildren , writeHtml : function ( a , b ) { b && this . filter ( b ) ; var d = this . name , h= [ ] , l = this . attributes , i , g ; a . openTag ( d , l ) ; for ( i in l ) h . push ( [ i , l [ i ] ] ) ; a . sortAttributes && h. sort ( e ) ; i = 0 ; for ( g = h . length ; i < g ; i ++ ) { l = h [ i ] ; a . attribute ( l [ 0 ] , l [ 1 ] ) } a . openTagClose ( d , this . isEmpty ) ; this . writeChildrenHtml ( a ) ; this . isEmpty || a . closeTag ( d ) } , writeChildrenHtml : b . writeChildrenHtml , replaceWithChildren : function ( ) { for ( var a =
this . children , b = a . length ; b ; ) a [ -- b ] . insertAfter ( this ) ; this . remove ( ) } , forEach : b . forEach , getFirst : function ( b ) { if ( ! b ) return this . children . length ? this . children [ 0 ] : null ; typeof b != "function" && ( b = a ( b ) ) ; for ( var f = 0 , d = this . children . length ; f < d ; ++ f ) if ( b ( this . children [ f ] ) ) return this . children [ f ] ; return null } , getHtml : function ( ) { var a = new CKEDITOR . htmlParser . basicWriter ; this . writeChildrenHtml ( a ) ; return a . getHtml ( ) } , setHtml : function ( a ) { for ( var a = this . children = CKEDITOR . htmlParser . fragment . fromHtml ( a ) . children , b = 0 ,
d = a . length ; b < d ; ++ b ) a [ b ] . parent = this } , getOuterHtml : function ( ) { var a = new CKEDITOR . htmlParser . basicWriter ; this . writeHtml ( a ) ; return a . getHtml ( ) } , split : function ( a ) { for ( var b = this . children . splice ( a , this . children . length - a ) , d = this . clone ( ) , e = 0 ; e < b . length ; ++ e ) b [ e ] . parent = d ; d . children = b ; if ( b [ 0 ] ) b [ 0 ] . previous = null ; if ( a > 0 ) this . children [ a - 1 ] . next = null ; this . parent . add ( d , this . getIndex ( ) + 1 ) ; return d } , addClass : function ( a ) { if ( ! this . hasClass ( a ) ) { var b = this . attributes [ "class" ] || "" ; this . attributes [ "class" ] = b + ( b ? " " : "" ) +
a } } , removeClass : function ( a ) { var b = this . attributes [ "class" ] ; if ( b ) ( b = CKEDITOR . tools . trim ( b . replace ( RegExp ( "(?:\\s+|^)" + a + "(?:\\s+|$)" ) , " " ) ) ) ? this . attributes [ "class" ] = b : delete this . attributes [ "class" ] } , hasClass : function ( a ) { var b = this . attributes [ "class" ] ; return ! b ? false : RegExp ( "(?:^|\\s)" + a + "(?=\\s|$)" ) . test ( b ) } , getFilterContext : function ( a ) { var b = [ ] ; a || ( a = { off : false , nonEditable : false , nestedEditable : false } ) ; ! a . off && this . attributes [ "data-cke-processor" ] == "off" && b . push ( "off" , true ) ; ! a . nonEditable && this . attributes . contenteditable ==
"false" ? b . push ( "nonEditable" , true ) : a . nonEditable && ( ! a . nestedEditable && this . attributes . contenteditable == "true" ) && b . push ( "nestedEditable" , true ) ; if ( b . length ) for ( var a = CKEDITOR . tools . copy ( a ) , d = 0 ; d < b . length ; d = d + 2 ) a [ b [ d ] ] = b [ d + 1 ] ; return a } } , true ) } ) ( ) ;
( function ( ) { var a = { } , e = /{([^}]+)}/g , b = /([\\'])/g , c = /\n/g , f = /\r/g ; CKEDITOR . template = function ( d ) { if ( a [ d ] ) this . output = a [ d ] ; else { var g = d . replace ( b , "\\$1" ) . replace ( c , "\\n" ) . replace ( f , "\\r" ) . replace ( e , function ( a , b ) { return "',data['" + b + "']==undefined?'{" + b + "}':data['" + b + "'],'" } ) ; this . output = a [ d ] = Function ( "data" , "buffer" , "return buffer?buffer.push('" + g+ "'):['" + g + "'].join('');" ) } } } ) ( ) ; delete CKEDITOR . loadFullCore ; CKEDITOR . instances = { } ; CKEDITOR . document = new CKEDITOR . dom . document ( document ) ;
( function ( ) { var a = { } , e = /{([^}]+)}/g , b = /([\\'])/g , c = /\n/g , f = /\r/g ; CKEDITOR . template = function ( d ) { if ( a [ d ] ) this . output = a [ d ] ; else { var h = d . replace ( b , "\\$1" ) . replace ( c , "\\n" ) . replace ( f , "\\r" ) . replace ( e , function ( a , b ) { return "',data['" + b + "']==undefined?'{" + b + "}':data['" + b + "'],'" } ) ; this . output = a [ d ] = Function ( "data" , "buffer" , "return buffer?buffer.push('" + h+ "'):['" + h + "'].join('');" ) } } } ) ( ) ; delete CKEDITOR . loadFullCore ; CKEDITOR . instances = { } ; CKEDITOR . document = new CKEDITOR . dom . document ( document ) ;
CKEDITOR . add = function ( a ) { CKEDITOR . instances [ a . name ] = a ; a . on ( "focus" , function ( ) { if ( CKEDITOR . currentInstance != a ) { CKEDITOR . currentInstance = a ; CKEDITOR . fire ( "currentInstance" ) } } ) ; a . on ( "blur" , function ( ) { if ( CKEDITOR . currentInstance == a ) { CKEDITOR . currentInstance = null ; CKEDITOR . fire ( "currentInstance" ) } } ) ; CKEDITOR . fire ( "instance" , null , a ) } ; CKEDITOR . remove = function ( a ) { delete CKEDITOR . instances [ a . name ] } ;
( function ( ) { var a = { } ; CKEDITOR . addTemplate = function ( e , b ) { var c = a [ e ] ; if ( c ) return c ; c = { name : e , source : b } ; CKEDITOR . fire ( "template" , c ) ; return a [ e ] = new CKEDITOR . template ( c . source ) } ; CKEDITOR . getTemplate = function ( e ) { return a [ e ] } } ) ( ) ; ( function ( ) { var a = [ ] ; CKEDITOR . addCss = function ( e ) { a . push ( e ) } ; CKEDITOR . getCss = function ( ) { return a . join ( "\n" ) } } ) ( ) ; CKEDITOR . on ( "instanceDestroyed" , function ( ) { CKEDITOR . tools . isEmpty ( this . instances ) && CKEDITOR . fire ( "reset" ) } ) ; CKEDITOR . TRISTATE _ON = 1 ; CKEDITOR . TRISTATE _OFF = 2 ;
CKEDITOR . TRISTATE _DISABLED = 0 ;
( function ( ) { CKEDITOR . inline = function ( a , e ) { if ( ! CKEDITOR . env . isCompatible ) return null ; a = CKEDITOR . dom . element . get ( a ) ; if ( a . getEditor ( ) ) throw 'The editor instance "' + a . getEditor ( ) . name + '" is already attached to the provided element.' ; var b = new CKEDITOR . editor ( e , a , CKEDITOR . ELEMENT _MODE _INLINE ) , c = a . is ( "textarea" ) ? a : null ; if ( c ) { b . setData ( c . getValue ( ) , null , true ) ; a = CKEDITOR . dom . element . createFromHtml ( '<div contenteditable="' + ! ! b . readOnly + '" class="cke_textarea_inline">' + c . getValue ( ) + "</div>" , CKEDITOR . document ) ;
a . insertAfter ( c ) ; c . hide ( ) ; c . $ . form && b . _attachToForm ( ) } else b . setData ( a . getHtml ( ) , null , true ) ; b . on ( "loaded" , function ( ) { b . fire ( "uiReady" ) ; b . editable ( a ) ; b . container = a ; b . setData ( b . getData ( 1 ) ) ; b . resetDirty ( ) ; b . fire ( "contentDom" ) ; b . mode = "wysiwyg" ; b . fire ( "mode" ) ; b . status = "ready" ; b . fireOnce ( "instanceReady" ) ; CKEDITOR . fire ( "instanceReady" , null , b ) } , null , null , 1E4 ) ; b . on ( "destroy" , function ( ) { if ( c ) { b . container . clearCustomData ( ) ; b . container . remove ( ) ; c . show ( ) } b . element . clearCustomData ( ) ; delete b . element } ) ; return b } ;
CKEDITOR . inlineAll = function ( ) { var a , e , b ; for ( b in CKEDITOR . dtd . $editable ) for ( var c = CKEDITOR . document . getElementsByTag ( b ) , f = 0 , d = c . count ( ) ; f < d ; f ++ ) { a = c . getItem ( f ) ; if ( a . getAttribute ( "contenteditable" ) == "true" ) { e = { element : a , config : { } } ; CKEDITOR . fire ( "inline" , e ) !== false && CKEDITOR . inline ( a , e . config ) } } } ; CKEDITOR . domReady ( function ( ) { ! CKEDITOR . disableAutoInline && CKEDITOR . inlineAll ( ) } ) } ) ( ) ; CKEDITOR . replaceClass = "ckeditor" ;
( function ( ) { function a ( a , f , d , g ) { if ( ! CKEDITOR . env . isCompatible ) return null ; a = CKEDITOR . dom . element . get ( a ) ; if ( a . getEditor ( ) ) throw 'The editor instance "' + a . getEditor ( ) . name + '" is already attached to the provided element.' ; var h = new CKEDITOR . editor ( f , a , g) ; if ( g == CKEDITOR . ELEMENT _MODE _REPLACE ) { a . setStyle ( "visibility" , "hidden" ) ; h . _ . required = a . hasAttribute ( "required" ) ; a . removeAttribute ( "required" ) } d && h . setData ( d , null , true ) ; h . on ( "loaded" , function ( ) { b ( h) ; g == CKEDITOR . ELEMENT _MODE _REPLACE && ( h . config . autoUpdateElement &&
a . $ . form ) && h. _attachToForm ( ) ; h . setMode ( h . config . startupMode , function ( ) { h. resetDirty ( ) ; h . status = "ready" ; h . fireOnce ( "instanceReady" ) ; CKEDITOR . fire ( "instanceReady" , null , h) } ) } ) ; h . on ( "destroy" , e ) ; return h } function e ( ) { var a = this . container , b = this . element ; if ( a ) { a . clearCustomData ( ) ; a . remove ( ) } if ( b ) { b . clearCustomData ( ) ; if ( this . elementMode == CKEDITOR . ELEMENT _MODE _REPLACE ) { b . show ( ) ; this . _ . required && b . setAttribute ( "required" , "required" ) } delete this . element } } function b ( a ) { var b = a . name , d = a . element , e = a . elementMode ,
h = a . fire ( "uiSpace" , { space : "top" , html : "" } ) . html , m = a . fire ( "uiSpace" , { space : "bottom" , html : "" } ) . html , j = new CKEDITOR . template ( '<{outerEl} id="cke_{name}" class="{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} ' + CKEDITOR . env . cssClass + '" dir="{langDir}" lang="{langCode}" role="application"' + ( a . title ? ' aria-labelledby="cke_{name}_arialbl"' : "" ) + ">" + ( a . title ? '<span id="cke_{name}_arialbl" class="cke_voice_label">{voiceLabel}</span>' : "" ) + '<{outerEl} class="cke_inner cke_reset" role="presentation">{topHtml}<{outerEl} id="{contentId}" class="cke_contents cke_reset" role="presentation"></{outerEl}>{bottomHtml}</{outerEl}></{outerEl}>' ) ,
b = CKEDITOR . dom . element . createFromHtml ( j . output ( { id : a . id , name : b , langDir : a . lang . dir , langCode : a . langCode , voiceLabel : a . title , topHtml : h ? '<span id="' + a . ui . spaceId ( "top" ) + '" class="cke_top cke_reset_all" role="presentation" style="height:auto">' + h + "</span>" : "" , contentId : a . ui . spaceId ( "contents" ) , bottomHtml : m ? '<span id="' + a . ui . spaceId ( "bottom" ) + '" class="cke_bottom cke_reset_all" role="presentation">' + m + "</span>" : "" , outerEl : CKEDITOR . env . ie ? "span" : "div" } ) ) ; if ( e == CKEDITOR . ELEMENT _MODE _REPLACE ) { d . hide ( ) ; b . insertAfter ( d ) } else d . append ( b ) ;
a . container = b ; h && a . ui . space ( "top" ) . unselectable ( ) ; m && a . ui . space ( "bottom" ) . unselectable ( ) ; d = a . config . width ; e = a . config . height ; d && b . setStyle ( "width" , CKEDITOR . tools . cssLength ( d ) ) ; e && a . ui . space ( "contents" ) . setStyle ( "height" , CKEDITOR . tools . cssLength ( e ) ) ; b . disableContextMenu ( ) ; CKEDITOR . env . webkit && b . on ( "focus" , function ( ) { a . focus ( ) } ) ; a . fireOnce ( "uiReady" ) } CKEDITOR . replace = function ( b , f ) { return a ( b , f , null , CKEDITOR . ELEMENT _MODE _REPLACE ) } ; CKEDITOR . appendTo = function ( b , f , d ) { return a ( b , f , d , CKEDITOR . ELEMENT _MODE _APPENDTO ) } ;
( function ( ) { function a ( a , f , d , h ) { if ( ! CKEDITOR . env . isCompatible ) return null ; a = CKEDITOR . dom . element . get ( a ) ; if ( a . getEditor ( ) ) throw 'The editor instance "' + a . getEditor ( ) . name + '" is already attached to the provided element.' ; var l = new CKEDITOR . editor ( f , a , h) ; if ( h == CKEDITOR . ELEMENT _MODE _REPLACE ) { a . setStyle ( "visibility" , "hidden" ) ; l . _ . required = a . hasAttribute ( "required" ) ; a . removeAttribute ( "required" ) } d && l . setData ( d , null , true ) ; l . on ( "loaded" , function ( ) { b ( l) ; h == CKEDITOR . ELEMENT _MODE _REPLACE && ( l . config . autoUpdateElement &&
a . $ . form ) && l. _attachToForm ( ) ; l . setMode ( l . config . startupMode , function ( ) { l. resetDirty ( ) ; l . status = "ready" ; l . fireOnce ( "instanceReady" ) ; CKEDITOR . fire ( "instanceReady" , null , l) } ) } ) ; l . on ( "destroy" , e ) ; return l } function e ( ) { var a = this . container , b = this . element ; if ( a ) { a . clearCustomData ( ) ; a . remove ( ) } if ( b ) { b . clearCustomData ( ) ; if ( this . elementMode == CKEDITOR . ELEMENT _MODE _REPLACE ) { b . show ( ) ; this . _ . required && b . setAttribute ( "required" , "required" ) } delete this . element } } function b ( a ) { var b = a . name , d = a . element , e = a . elementMode ,
l = a . fire ( "uiSpace" , { space : "top" , html : "" } ) . html , i = a . fire ( "uiSpace" , { space : "bottom" , html : "" } ) . html , g = new CKEDITOR . template ( '<{outerEl} id="cke_{name}" class="{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} ' + CKEDITOR . env . cssClass + '" dir="{langDir}" lang="{langCode}" role="application"' + ( a . title ? ' aria-labelledby="cke_{name}_arialbl"' : "" ) + ">" + ( a . title ? '<span id="cke_{name}_arialbl" class="cke_voice_label">{voiceLabel}</span>' : "" ) + '<{outerEl} class="cke_inner cke_reset" role="presentation">{topHtml}<{outerEl} id="{contentId}" class="cke_contents cke_reset" role="presentation"></{outerEl}>{bottomHtml}</{outerEl}></{outerEl}>' ) ,
b = CKEDITOR . dom . element . createFromHtml ( g . output ( { id : a . id , name : b , langDir : a . lang . dir , langCode : a . langCode , voiceLabel : a . title , topHtml : l ? '<span id="' + a . ui . spaceId ( "top" ) + '" class="cke_top cke_reset_all" role="presentation" style="height:auto">' + l + "</span>" : "" , contentId : a . ui . spaceId ( "contents" ) , bottomHtml : i ? '<span id="' + a . ui . spaceId ( "bottom" ) + '" class="cke_bottom cke_reset_all" role="presentation">' + i + "</span>" : "" , outerEl : CKEDITOR . env . ie ? "span" : "div" } ) ) ; if ( e == CKEDITOR . ELEMENT _MODE _REPLACE ) { d . hide ( ) ; b . insertAfter ( d ) } else d . append ( b ) ;
a . container = b ; l && a . ui . space ( "top" ) . unselectable ( ) ; i && a . ui . space ( "bottom" ) . unselectable ( ) ; d = a . config . width ; e = a . config . height ; d && b . setStyle ( "width" , CKEDITOR . tools . cssLength ( d ) ) ; e && a . ui . space ( "contents" ) . setStyle ( "height" , CKEDITOR . tools . cssLength ( e ) ) ; b . disableContextMenu ( ) ; CKEDITOR . env . webkit && b . on ( "focus" , function ( ) { a . focus ( ) } ) ; a . fireOnce ( "uiReady" ) } CKEDITOR . replace = function ( b , f ) { return a ( b , f , null , CKEDITOR . ELEMENT _MODE _REPLACE ) } ; CKEDITOR . appendTo = function ( b , f , d ) { return a ( b , f , d , CKEDITOR . ELEMENT _MODE _APPENDTO ) } ;
CKEDITOR . replaceAll = function ( ) { for ( var a = document . getElementsByTagName ( "textarea" ) , b = 0 ; b < a . length ; b ++ ) { var d = null , e = a [ b ] ; if ( e . name || e . id ) { if ( typeof arguments [ 0 ] == "string" ) { if ( ! RegExp ( "(?:^|\\s)" + arguments [ 0 ] + "(?:$|\\s)" ) . test ( e . className ) ) continue } else if ( typeof arguments [ 0 ] == "function" ) { d = { } ; if ( arguments [ 0 ] ( e , d ) === false ) continue } this . replace ( e , d ) } } } ; CKEDITOR . editor . prototype . addMode = function ( a , b ) { ( this . _ . modes || ( this . _ . modes = { } ) ) [ a ] = b } ; CKEDITOR . editor . prototype . setMode = function ( a , b ) { var d = this , e =
this . _ . modes ; if ( ! ( a == d . mode || ! e || ! e [ a ] ) ) { d . fire ( "beforeSetMode" , a ) ; if ( d . mode ) { var h = d . checkDirty ( ) , e = d . _ . previousModeData , m, j = 0 ; d . fire ( "beforeModeUnload" ) ; d . editable ( 0 ) ; d . _ . previousMode = d . mode ; d . _ . previousModeData = m = d . getData ( 1 ) ; if ( d . mode == "source" && e == m ) { d . fire ( "lockSnapshot" , { forceUpdate : true } ) ; j = 1 } d . ui . space ( "contents" ) . setHtml ( "" ) ; d . mode = "" } else d . _ . previousModeData = d . getData ( 1 ) ; this . _ . modes [ a ] ( function ( ) { d . mode = a ; h!== void 0 && ! h && d . resetDirty ( ) ; j ? d . fire ( "unlockSnapshot" ) : a == "wysiwyg" && d . fire ( "saveSnapshot" ) ;
setTimeout ( function ( ) { d . fire ( "mode" ) ; b && b . call ( d ) } , 0 ) } ) } } ; CKEDITOR . editor . prototype . resize = function ( a , b , d , e ) { var h= this . container , m = this . ui . space ( "contents" ) , j= null & CKEDITOR . env . webkit && this . document && this . document . getWindow ( ) . $ . frameElement , e = e ? this . container . getFirst ( function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasClass ( "cke_inner" ) } ) : h ; e . setSize ( "width" , a , true ) ; j&& ( j . style . width = "1%" ) ; m . setStyle ( "height" , Math . max ( b - ( d ? 0 : ( e . $ . offsetHeight || 0 ) - ( m . $ . clientHeight || 0 ) ) , 0 ) + "px" ) ; j&& ( j . style . width =
this . _ . modes ; if ( ! ( a == d . mode || ! e || ! e [ a ] ) ) { d . fire ( "beforeSetMode" , a ) ; if ( d . mode ) { var l = d . checkDirty ( ) , e = d . _ . previousModeData , i, g = 0 ; d . fire ( "beforeModeUnload" ) ; d . editable ( 0 ) ; d . _ . previousMode = d . mode ; d . _ . previousModeData = i = d . getData ( 1 ) ; if ( d . mode == "source" && e == i ) { d . fire ( "lockSnapshot" , { forceUpdate : true } ) ; g = 1 } d . ui . space ( "contents" ) . setHtml ( "" ) ; d . mode = "" } else d . _ . previousModeData = d . getData ( 1 ) ; this . _ . modes [ a ] ( function ( ) { d . mode = a ; l!== void 0 && ! l && d . resetDirty ( ) ; g ? d . fire ( "unlockSnapshot" ) : a == "wysiwyg" && d . fire ( "saveSnapshot" ) ;
setTimeout ( function ( ) { d . fire ( "mode" ) ; b && b . call ( d ) } , 0 ) } ) } } ; CKEDITOR . editor . prototype . resize = function ( a , b , d , e ) { var l= this . container , i = this . ui . space ( "contents" ) , g= CKEDITOR . env . webkit && this . document && this . document . getWindow ( ) . $ . frameElement , e = e ? this . container . getFirst ( function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasClass ( "cke_inner" ) } ) : l ; e . setSize ( "width" , a , true ) ; g&& ( g . style . width = "1%" ) ; i . setStyle ( "height" , Math . max ( b - ( d ? 0 : ( e . $ . offsetHeight || 0 ) - ( i . $ . clientHeight || 0 ) ) , 0 ) + "px" ) ; g&& ( g . style . width =
"100%" ) ; this . fire ( "resize" ) } ; CKEDITOR . editor . prototype . getResizable = function ( a ) { return a ? this . ui . space ( "contents" ) : this . container } ; CKEDITOR . domReady ( function ( ) { CKEDITOR . replaceClass && CKEDITOR . replaceAll ( CKEDITOR . replaceClass ) } ) } ) ( ) ; CKEDITOR . config . startupMode = "wysiwyg" ;
( function ( ) { function a ( a ) { var b = a . editor , d = a . data . path , f = d . blockLimit , l= a . data . selection , q = l . getRanges ( ) [ 0 ] , x ; if ( CKEDITOR . env . gecko || CKEDITOR . env . ie && CKEDITOR . env . needsBrFiller ) if ( l= e ( l , d ) ) { l . appendBogus ( ) ; x = CKEDITOR . env . ie } if ( g ( b , d . block , f ) && q. collapsed && ! q . getCommonAncestor ( ) . isReadOnly ( ) ) { d = q . clone ( ) ; d . enlarge ( CKEDITOR . ENLARGE _BLOCK _CONTENTS ) ; f = new CKEDITOR . dom . walker ( d ) ; f . guard = function ( a ) { return ! c ( a ) || a . type == CKEDITOR . NODE _COMMENT || a . isReadOnly ( ) } ; if ( ! f . checkForward ( ) || d . checkStartOfBlock ( ) &&
d . checkEndOfBlock ( ) ) { b = q . fixBlock ( true , b . activeEnterMode == CKEDITOR . ENTER _DIV ? "div" : "p" ) ; if ( ! CKEDITOR . env . needsBrFiller ) ( b = b . getFirst ( c ) ) && ( b . type == CKEDITOR . NODE _TEXT && CKEDITOR . tools . trim ( b . getText ( ) ) . match ( /^(?: |\xa0)$/ ) ) && b . remove ( ) ; x = 1 ; a . cancel ( ) } } x&& q . select ( ) } function e ( a , b ) { if ( a . isFake ) return 0 ; var d = b . block || b . blockLimit , e = d && d . getLast ( c ) ; if ( d && d . isBlockBoundary ( ) && ( ! e || ! ( e . type == CKEDITOR . NODE _ELEMENT && e . isBlockBoundary ( ) ) ) && ! d . is ( "pre" ) && ! d . getBogus ( ) ) return d } function b ( a ) { var b = a . data . getTarget ( ) ;
if ( b . is ( "input" ) ) { b = b . getAttribute ( "type" ) ; ( b == "submit" || b == "reset" ) && a . data . preventDefault ( ) } } function c ( a ) { return t ( a ) && y ( a ) } function f ( a , b ) { return function ( c ) { var d = CKEDITOR . dom . element . get ( c . data . $ . toElement || c . data . $ . fromElement || c . data . $ . relatedTarget ) ; ( ! d || ! b . equals ( d ) && ! b . contains ( d ) ) && a . call ( this , c ) } } function d ( a ) { function b ( a ) { return function ( b , e ) { e && ( b . type == CKEDITOR . NODE _ELEMENT && b . is ( f ) ) && ( d = b ) ; if ( ! e && c ( b ) && ( ! a || ! p ( b ) ) ) return false } } var d , e = a . getRanges ( ) [ 0 ] , a = a . root , f = { table : 1 , ul : 1 , ol : 1 ,
dl : 1 } ; if ( e . startPath ( ) . contains ( f ) ) { var q= e . clone ( ) ; q . collapse ( 1 ) ; q . setStartAt ( a , CKEDITOR . POSITION _AFTER _START ) ; a = new CKEDITOR . dom . walker ( q ) ; a . guard = b ( ) ; a . checkBackward ( ) ; if ( d ) { q= e . clone ( ) ; q . collapse ( ) ; q . setEndAt ( d , CKEDITOR . POSITION _AFTER _END ) ; a = new CKEDITOR . dom . walker ( q ) ; a . guard = b ( true ) ; d = false ; a . checkForward ( ) ; return d } } return null } function g ( a , b , c ) { return a . config . autoParagraph !== false && a . activeEnterMode != CKEDITOR . ENTER _BR && a . editable ( ) . equals ( c ) && ! b || b && b . getAttribute ( "contenteditable" ) == "true" }
function h ( a ) { a . editor . focus ( ) ; a . editor . fire ( "saveSnapshot" ) } function m ( a ) { var b = a . editor ; b . getSelection ( ) . scrollIntoView ( ) ; setTimeout ( function ( ) { b . fire ( "saveSnapshot" ) } , 0 ) } function j ( a , b , c ) { for ( var d = a . getCommonAncestor ( b ) , b = a = c ? b : a ; ( a = a . getParent ( ) ) && ! d . equals ( a ) && a . getChildCount ( ) == 1 ; ) b = a ; b . remove ( ) } CKEDITOR . editable = CKEDITOR . tools . createClass ( { base : CKEDITOR . dom . element , $ : function ( a , b ) { this . base ( b . $ || b ) ; this . editor = a ; this . status = "unloaded" ; this . hasFocus = false ; this . setup ( ) } , proto : { focus : function ( ) { var a ;
( function ( ) { function a ( a ) { var b = a . editor , d = a . data . path , f = d . blockLimit , k= a . data . selection , n = k . getRanges ( ) [ 0 ] , r ; if ( CKEDITOR . env . gecko || CKEDITOR . env . ie && CKEDITOR . env . needsBrFiller ) if ( k= e ( k , d ) ) { k . appendBogus ( ) ; r = CKEDITOR . env . ie } if ( h ( b , d . block , f ) && n. collapsed && ! n . getCommonAncestor ( ) . isReadOnly ( ) ) { d = n . clone ( ) ; d . enlarge ( CKEDITOR . ENLARGE _BLOCK _CONTENTS ) ; f = new CKEDITOR . dom . walker ( d ) ; f . guard = function ( a ) { return ! c ( a ) || a . type == CKEDITOR . NODE _COMMENT || a . isReadOnly ( ) } ; if ( ! f . checkForward ( ) || d . checkStartOfBlock ( ) &&
d . checkEndOfBlock ( ) ) { b = n . fixBlock ( true , b . activeEnterMode == CKEDITOR . ENTER _DIV ? "div" : "p" ) ; if ( ! CKEDITOR . env . needsBrFiller ) ( b = b . getFirst ( c ) ) && ( b . type == CKEDITOR . NODE _TEXT && CKEDITOR . tools . trim ( b . getText ( ) ) . match ( /^(?: |\xa0)$/ ) ) && b . remove ( ) ; r = 1 ; a . cancel ( ) } } r&& n . select ( ) } function e ( a , b ) { if ( a . isFake ) return 0 ; var d = b . block || b . blockLimit , e = d && d . getLast ( c ) ; if ( d && d . isBlockBoundary ( ) && ( ! e || ! ( e . type == CKEDITOR . NODE _ELEMENT && e . isBlockBoundary ( ) ) ) && ! d . is ( "pre" ) && ! d . getBogus ( ) ) return d } function b ( a ) { var b = a . data . getTarget ( ) ;
if ( b . is ( "input" ) ) { b = b . getAttribute ( "type" ) ; ( b == "submit" || b == "reset" ) && a . data . preventDefault ( ) } } function c ( a ) { return s ( a ) && y ( a ) } function f ( a , b ) { return function ( c ) { var d = CKEDITOR . dom . element . get ( c . data . $ . toElement || c . data . $ . fromElement || c . data . $ . relatedTarget ) ; ( ! d || ! b . equals ( d ) && ! b . contains ( d ) ) && a . call ( this , c ) } } function d ( a ) { function b ( a ) { return function ( b , e ) { e && ( b . type == CKEDITOR . NODE _ELEMENT && b . is ( f ) ) && ( d = b ) ; if ( ! e && c ( b ) && ( ! a || ! m ( b ) ) ) return false } } var d , e = a . getRanges ( ) [ 0 ] , a = a . root , f = { table : 1 , ul : 1 , ol : 1 ,
dl : 1 } ; if ( e . startPath ( ) . contains ( f ) ) { var n= e . clone ( ) ; n . collapse ( 1 ) ; n . setStartAt ( a , CKEDITOR . POSITION _AFTER _START ) ; a = new CKEDITOR . dom . walker ( n ) ; a . guard = b ( ) ; a . checkBackward ( ) ; if ( d ) { n= e . clone ( ) ; n . collapse ( ) ; n . setEndAt ( d , CKEDITOR . POSITION _AFTER _END ) ; a = new CKEDITOR . dom . walker ( n ) ; a . guard = b ( true ) ; d = false ; a . checkForward ( ) ; return d } } return null } function h ( a , b , c ) { return a . config . autoParagraph !== false && a . activeEnterMode != CKEDITOR . ENTER _BR && a . editable ( ) . equals ( c ) && ! b || b && b . getAttribute ( "contenteditable" ) == "true" }
function l ( a ) { a . editor . focus ( ) ; a . editor . fire ( "saveSnapshot" ) } function i ( a ) { var b = a . editor ; b . getSelection ( ) . scrollIntoView ( ) ; setTimeout ( function ( ) { b . fire ( "saveSnapshot" ) } , 0 ) } function g ( a , b , c ) { for ( var d = a . getCommonAncestor ( b ) , b = a = c ? b : a ; ( a = a . getParent ( ) ) && ! d . equals ( a ) && a . getChildCount ( ) == 1 ; ) b = a ; b . remove ( ) } CKEDITOR . editable = CKEDITOR . tools . createClass ( { base : CKEDITOR . dom . element , $ : function ( a , b ) { this . base ( b . $ || b ) ; this . editor = a ; this . status = "unloaded" ; this . hasFocus = false ; this . setup ( ) } , proto : { focus : function ( ) { var a ;
if ( CKEDITOR . env . webkit && ! this . hasFocus ) { a = this . editor . _ . previousActive || this . getDocument ( ) . getActive ( ) ; if ( this . contains ( a ) ) { a . focus ( ) ; return } } try { this . $ [ CKEDITOR . env . ie && this . getDocument ( ) . equals ( CKEDITOR . document ) ? "setActive" : "focus" ] ( ) } catch ( b ) { if ( ! CKEDITOR . env . ie ) throw b ; } if ( CKEDITOR . env . safari && ! this . isInline ( ) ) { a = CKEDITOR . document . getActive ( ) ; a . equals ( this . getWindow ( ) . getFrame ( ) ) || this . getWindow ( ) . focus ( ) } } , on : function ( a , b ) { var c = Array . prototype . slice . call ( arguments , 0 ) ; if ( CKEDITOR . env . ie && /^focus|blur$/ . exec ( a ) ) { a =
a == "focus" ? "focusin" : "focusout" ; b = f ( b , this ) ; c [ 0 ] = a ; c [ 1 ] = b } return CKEDITOR . dom . element . prototype . on . apply ( this , c ) } , attachListener : function ( a ) { ! this . _ . listeners && ( this . _ . listeners = [ ] ) ; var b = Array . prototype . slice . call ( arguments , 1 ) , b = a . on . apply ( a , b ) ; this . _ . listeners . push ( b ) ; return b } , clearListeners : function ( ) { var a = this . _ . listeners ; try { for ( ; a . length ; ) a . pop ( ) . removeListener ( ) } catch ( b ) { } } , restoreAttrs : function ( ) { var a = this . _ . attrChanges , b , c ; for ( c in a ) if ( a . hasOwnProperty ( c ) ) { b = a [ c ] ; b !== null ? this . setAttribute ( c ,
b ) : this . removeAttribute ( c ) } } , attachClass : function ( a ) { var b = this . getCustomData ( "classes" ) ; if ( ! this . hasClass ( a ) ) { ! b && ( b = [ ] ) ; b . push ( a ) ; this . setCustomData ( "classes" , b ) ; this . addClass ( a ) } } , changeAttr : function ( a , b ) { var c = this . getAttribute ( a ) ; if ( b !== c ) { ! this . _ . attrChanges && ( this . _ . attrChanges = { } ) ; a in this . _ . attrChanges || ( this . _ . attrChanges [ a ] = c ) ; this . setAttribute ( a , b ) } } , insertHtml : function ( a , b ) { h( this ) ; n ( this , b || "html" , a ) } , insertText : function ( a ) { h ( this ) ; var b = this . editor , c = b . getSelection ( ) . getStartElement ( ) . hasAscendant ( "pre" ,
true ) ? CKEDITOR . ENTER _BR : b . activeEnterMode , b = c == CKEDITOR . ENTER _BR , d = CKEDITOR . tools , a = d . htmlEncode ( a . replace ( /\r\n/g , "\n" ) ) , a = a . replace ( /\t/g , " " ) , c = c == CKEDITOR . ENTER _P ? "p" : "div" ; if ( ! b ) { var e = /\n{2}/g ; if ( e . test ( a ) ) var f = "<" + c + ">" , g = "</" + c + ">" , a = f + a . replace ( e , function ( ) { return g+ f } ) + g } a = a . replace ( /\n/g , "<br>" ) ; b || ( a = a . replace ( RegExp ( "<br>(?=</" + c + ">)" ) , function ( a ) { return d . repeat ( a , 2 ) } ) ) ; a = a . replace ( /^ | $/g , " " ) ; a = a . replace ( /(>|\s) /g , function ( a , b ) { return b + " " } ) . replace ( / (?=<)/g ,
" " ) ; n ( this , "text" , a ) } , insertElement : function ( a , b ) { b ? this . insertElementIntoRange ( a , b ) : this . insertElementIntoSelection ( a ) } , insertElementIntoRange : function ( a , b ) { var c = this . editor , d = c . config . enterMode , e = a . getName ( ) , f = CKEDITOR . dtd . $block [ e ] ; if ( b . checkReadOnly ( ) ) return false ; b . deleteContents ( 1 ) ; b . startContainer . type == CKEDITOR . NODE _ELEMENT && b . startContainer . is ( { tr : 1 , table : 1 , tbody : 1 , thead : 1 , tfoot : 1 } ) && w( b ) ; var g , s ; if ( f ) for ( ; ( g = b . getCommonAncestor ( 0 , 1 ) ) && ( s= CKEDITOR . dtd [ g . getName ( ) ] ) && ( ! s|| ! s [ e ] ) ; ) if ( g . getName ( ) in
CKEDITOR . dtd . span ) b . splitElement ( g ) ; else if ( b . checkStartOfBlock ( ) && b . checkEndOfBlock ( ) ) { b . setStartBefore ( g) ; b . collapse ( true ) ; g . remove ( ) } else b . splitBlock ( d == CKEDITOR . ENTER _DIV ? "div" : "p" , c . editable ( ) ) ; b . insertNode ( a ) ; return true } , insertElementIntoSelection : function ( a ) { h ( this ) ; var b = this . editor , d = b . activeEnterMode , b = b . getSelection ( ) , e = b . getRanges ( ) [ 0 ] , f = a . getName ( ) , f = CKEDITOR . dtd . $block [ f ] ; if ( this . insertElementIntoRange ( a , e ) ) { e . moveToPosition ( a , CKEDITOR . POSITION _AFTER _END ) ; if ( f ) if ( ( f = a . getNext ( function ( a ) { return c ( a ) &&
! p ( a ) } ) ) && f . type == CKEDITOR . NODE _ELEMENT && f . is ( CKEDITOR . dtd . $block ) ) f . getDtd ( ) [ "#" ] ? e . moveToElementEditStart ( f ) : e . moveToElementEditEnd ( a ) ; else if ( ! f && d != CKEDITOR . ENTER _BR ) { f = e . fixBlock ( true , d == CKEDITOR . ENTER _DIV ? "div" : "p" ) ; e . moveToElementEditStart ( f ) } } b . selectRanges ( [ e ] ) ; m ( this ) } , setData : function ( a , b ) { b || ( a = this . editor . dataProcessor . toHtml ( a ) ) ; this . setHtml ( a ) ; if ( this . status == "unloaded" ) this . status = "ready" ; this . editor . fire ( "dataReady" ) } , getData : function ( a ) { var b = this . getHtml ( ) ; a || ( b = this . editor . dataProcessor . toDataFormat ( b ) ) ;
return b } , setReadOnly : function ( a ) { this . setAttribute ( "contenteditable" , ! a ) } , detach : function ( ) { this . removeClass ( "cke_editable" ) ; this . status = "detached" ; var a = this . editor ; this . _ . detach ( ) ; delete a . document ; delete a . window } , isInline : function ( ) { return this . getDocument ( ) . equals ( CKEDITOR . document ) } , setup : function ( ) { var a = this . editor ; this . attachListener ( a , "beforeGetData" , function( ) { var b = this . getData ( ) ; this . is ( "textarea" ) || a . config . ignoreEmptyParagraph !== false && ( b = b . replace ( u , function ( a , b ) { return b } ) ) ; a . setData ( b ,
null , 1 ) } , this ) ; this . attachListener ( a , "getSnapshot" , function ( a ) { a . data = this . getData ( 1 ) } , this ) ; this . attachListener ( a , "afterSetData" , function ( ) { this . setData ( a . getData ( 1 ) ) } , this ) ; this . attachListener ( a , "loadSnapshot" , function ( a ) { this . setData ( a . data , 1 ) } , this ) ; this . attachListener ( a , "beforeFocus" , function ( ) { var b = a . getSelection ( ) ; ( b = b && b . getNative ( ) ) && b . type == "Control" || this . focus ( ) } , this ) ; this . attachListener ( a , "insertHtml" , function ( a ) { this . insertHtml ( a . data . dataValue , a . data . mode ) } , this ) ; this . attachListener ( a ,
"insertElement" , function ( a ) { this . insertElement ( a . data ) } , this ) ; this . attachListener ( a , "insertText" , function ( a ) { this . insertText ( a . data ) } , this ) ; this . setReadOnly ( a . readOnly ) ; this . attachClass ( "cke_editable" ) ; this . attachClass ( a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? "cke_editable_inline" : a . elementMode == CKEDITOR . ELEMENT _MODE _REPLACE || a . elementMode == CKEDITOR . ELEMENT _MODE _APPENDTO ? "cke_editable_themed" : "" ) ; this . attachClass ( "cke_contents_" + a . config . contentsLangDirection ) ; a . keystrokeHandler . blockedKeystrokes [ 8 ] =
+ a . readOnly ; a . keystrokeHandler . attach ( this ) ; this . on ( "blur" , function ( ) { this . hasFocus = false } , null , null , - 1 ) ; this . on ( "focus" , function ( ) { this . hasFocus = true } , null , null , - 1 ) ; a . focusManager . add ( this ) ; if ( this . equals ( CKEDITOR . document . getActive ( ) ) ) { this . hasFocus = true ; a . once ( "contentDom" , function ( ) { a . focusManager . focus ( ) } ) } this . isInline ( ) && this . changeAttr ( "tabindex" , a . tabIndex ) ; if ( ! this . is ( "textarea" ) ) { a . document = this . getDocument ( ) ; a . window = this . getWindow ( ) ; var e = a . document ; this . changeAttr ( "spellcheck" , ! a . config . disableNativeSpellChecker ) ;
var f = a . config . contentsLangDirection ; this . getDirection ( 1 ) != f && this . changeAttr ( "dir" , f ) ; var k = CKEDITOR . getCss ( ) ; if ( k ) { f = e . getHead ( ) ; if ( ! f . getCustomData ( "stylesheet" ) ) { k = e . appendStyleText ( k ) ; k = new CKEDITOR . dom . element ( k . ownerNode || k . owningElement ) ; f . setCustomData ( "stylesheet" , k ) ; k . data ( "cke-temp" , 1 ) } } f = e . getCustomData ( "stylesheet_ref" ) || 0 ; e . setCustomData ( "stylesheet_ref" , f + 1 ) ; this . setCustomData ( "cke_includeReadonly" , ! a . config . disableReadonlyStyling ) ; this . attachListener ( this , "click" , function ( a ) { var a =
a . data , b = ( new CKEDITOR . dom . elementPath ( a . getTarget ( ) , this ) ) . contains ( "a" ) ; b && ( a . $ . button != 2 && b . isReadOnly ( ) ) && a . preventDefault ( ) } ) ; var l = { 8 : 1 , 46 : 1 } ; this . attachListener ( a , "key" , function ( b ) { if ( a . readOnly ) return true ; var c = b . data . domEvent . getKey ( ) , e ; if ( c in l ) { var b = a . getSelection ( ) , f , i = b . getRanges ( ) [ 0 ] , k = i . startPath ( ) , g , h , j , c = c == 8 ; if ( CKEDITOR . env . ie && CKEDITOR . env . version < 11 && ( f = b . getSelectedElement ( ) ) || ( f = d ( b ) ) ) { a . fire ( "saveSnapshot" ) ; i . moveToPosition ( f , CKEDITOR . POSITION _BEFORE _START ) ; f . remove ( ) ; i . select ( ) ;
a . fire ( "saveSnapshot" ) ; e = 1 } else if ( i . collapsed ) if ( ( g = k . block ) && ( j = g [ c ? "getPrevious" : "getNext" ] ( t ) ) && j . type == CKEDITOR . NODE _ELEMENT && j . is ( "table" ) && i [ c ? "checkStartOfBlock" : "checkEndOfBlock" ] ( ) ) { a . fire ( "saveSnapshot" ) ; i [ c ? "checkEndOfBlock" : "checkStartOfBlock" ] ( ) && g . remove ( ) ; i [ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( j ) ; i . select ( ) ; a . fire ( "saveSnapshot" ) ; e = 1 } else if ( k . blockLimit && k . blockLimit . is ( "td" ) && ( h = k . blockLimit . getAscendant ( "table" ) ) && i . checkBoundaryOfElement ( h , c ? CKEDITOR . START : CKEDITOR . END ) && ( j =
h [ c ? "getPrevious" : "getNext" ] ( t ) ) ) { a . fire ( "saveSnapshot" ) ; i [ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( j ) ; i . checkStartOfBlock ( ) && i . checkEndOfBlock ( ) ? j . remove ( ) : i . select ( ) ; a . fire ( "saveSnapshot" ) ; e = 1 } else if ( ( h = k . contains ( [ "td" , "th" , "caption" ] ) ) && i . checkBoundaryOfElement ( h , c ? CKEDITOR . START : CKEDITOR . END ) ) e = 1 } return ! e } ) ; a . blockless && ( CKEDITOR . env . ie && CKEDITOR . env . needsBrFiller) && this . attachListener ( this , "keyup" , function ( b ) { if ( b . data . getKeystroke ( ) in l && ! this . getFirst ( c ) ) { this . appendBogus ( ) ; b = a . createRange ( ) ;
b. moveToPosition ( this , CKEDITOR . POSITION _AFTER _START ) ; b . select ( ) } } ) ; this . attachListener ( this , "dblclick" , function ( b ) { if ( a . readOnly ) return false ; b = { element : b . data . getTarget ( ) } ; a . fire ( "doubleclick" , b ) } ) ; CKEDITOR . env . ie && this . attachListener ( this , "click" , b ) ; CKEDITOR . env . ie || this . attachListener ( this , "mousedown" , function ( b ) { var c = b . data . getTarget ( ) ; if ( c . is ( "img" , "hr" , "input" , "textarea" , "select" ) && ! c . isReadOnly ( ) ) { a . getSelection ( ) . selectElement ( c ) ; c . is ( "input" , "textarea" , "select" ) && b . data . preventDefault ( ) } } ) ;
CKEDITOR. env . gecko && this . attachListener ( this , "mouseup" , function ( b ) { if ( b . data . $ . button == 2 ) { b = b . data . getTarget ( ) ; if ( ! b . getOuterHtml ( ) . replace ( u , "" ) ) { var c = a . createRange ( ) ; c . moveToElementEditStart ( b ) ; c . select ( true ) } } } ) ; if ( CKEDITOR . env . webkit ) { this . attachListener ( this , "click" , function ( a ) { a . data . getTarget ( ) . is ( "input" , "select" ) && a . data . preventDefault ( ) } ) ; this . attachListener ( this , "mouseup" , function ( a ) { a . data . getTarget ( ) . is ( "input" , "textarea" ) && a . data . preventDefault ( ) } ) } CKEDITOR . env . webkit && this . attachListener ( a ,
" key ", function ( b ) { b = b . data . domEvent . getKey ( ) ; if ( b in l ) { var c = b == 8 , d = a . getSelection ( ) . getRanges ( ) [ 0 ] , b = d . startPath ( ) ; if ( d . collapsed ) { var e ; a : { var f = b . block ; if ( f ) if ( d [ c ? "checkStartOfBlock" : "checkEndOfBlock" ] ( ) ) if ( ! d . moveToClosestEditablePosition ( f , ! c ) || ! d . collapsed ) e = false ; else { if ( d . startContainer . type == CKEDITOR . NODE _ELEMENT ) { var i = d . startContainer . getChild ( d . startOffset - ( c ? 1 : 0 ) ) ; if ( i && i . type == CKEDITOR . NODE _ELEMENT && i . is ( "hr" ) ) { a . fire ( "saveSnapshot" ) ; i . remove ( ) ; e = true ; break a } } if ( ( d = d . startPath ( ) . block ) &&
( ! d || ! d . contains ( f ) ) ) { a . fire ( "saveSnapshot" ) ; var k ; ( k = ( c ? d : f ) . getBogus ( ) ) && k . remove ( ) ; e = a . getSelection ( ) ; k = e . createBookmarks ( ) ; ( c ? f : d ) . moveChildren ( c ? d : f , false ) ; b . lastElement . mergeSiblings ( ) ; j ( f , d , ! c ) ; e . selectBookmarks ( k ) ; e = true } } else e = false ; else e = false } if ( ! e ) return } else { c = d ; e = b . block ; k = c . endPath ( ) . block ; if ( ! e || ! k || e . equals ( k ) ) b = false ; else { a . fire ( "saveSnapshot" ) ; ( f = e . getBogus ( ) ) && f . remove ( ) ; c . deleteContents ( ) ; if ( k . getParent ( ) ) { k . moveChildren ( e , false ) ; b . lastElement . mergeSiblings ( ) ; j ( e , k , true ) } c =
a. getSelection ( ) . getRanges ( ) [ 0 ] ; c . collapse ( 1 ) ; c . select ( ) ; b = true } if ( ! b ) return } a . getSelection ( ) . scrollIntoView ( ) ; a . fire ( "saveSnapshot" ) ; return false } } , this , null , 100 ) } } } , _ : { detach : function ( ) { this . editor . setData ( this . editor . getData ( ) , 0 , 1 ) ; this . clearListeners ( ) ; this . restoreAttrs ( ) ; var a ; if ( a = this . removeCustomData ( "classes" ) ) for ( ; a . length ; ) this . removeClass ( a . pop ( ) ) ; if ( ! this . is ( "textarea" ) ) { a = this . getDocument ( ) ; var b = a . getHead ( ) ; if ( b . getCustomData ( "stylesheet" ) ) { var c = a . getCustomData ( "stylesheet_ref" ) ; if ( -- c ) a . setCustomData ( "stylesheet_ref" ,
c) ; else { a . removeCustomData ( "stylesheet_ref" ) ; b . removeCustomData ( "stylesheet" ) . remove ( ) } } } this . editor . fire ( "contentDomUnload" ) ; delete this . editor } } } ) ; CKEDITOR . editor . prototype . editable = function ( a ) { var b = this . _ . editable ; if ( b && a ) return 0 ; if ( arguments . length ) b = this . _ . editable = a ? a instanceof CKEDITOR . editable ? a : new CKEDITOR . editable ( this , a ) : ( b && b . detach ( ) , null ) ; return b } ; var p = CKEDITOR . dom . walker . bogus ( ) , u = /(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi ,
t= CKEDITOR . dom . walker . whitespaces ( true ) , y = CKEDITOR . dom . walker . bookmark ( false , true ) ; CKEDITOR . on ( "instanceLoaded" , function ( b ) { var c = b . editor ; c . on ( "insertElement" , function ( a ) { a = a . data ; if ( a . type == CKEDITOR . NODE _ELEMENT && ( a . is ( "input" ) || a . is ( "textarea" ) ) ) { a . getAttribute ( "contentEditable" ) != "false" && a . data ( "cke-editable" , a . hasAttribute ( "contenteditable" ) ? "true" : "1" ) ; a . setAttribute ( "contentEditable" , false ) } } ) ; c . on ( "selectionChange" , function ( b ) { if ( ! c . readOnly ) { var d = c . getSelection ( ) ; if ( d && ! d . isLocked ) { d = c . checkDirty ( ) ;
c . fire ( "lockSnapshot" ) ; a ( b ) ; c . fire ( "unlockSnapshot" ) ; ! d && c . resetDirty ( ) } } } ) } ) ; CKEDITOR . on ( "instanceCreated" , function ( a ) { var b = a . editor ; b . on ( "mode" , function ( ) { var a = b . editable ( ) ; if ( a && a . isInline ( ) ) { var c = b . title ; a . changeAttr ( "role" , "textbox" ) ; a . changeAttr ( "aria-label" , c ) ; c && a . changeAttr ( "title" , c ) ; var d = b . fire ( "ariaEditorHelpLabel" , { } ) . label ; if ( d ) if ( c = this . ui . space ( this . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? "top" : "contents" ) ) { var e = CKEDITOR . tools . getNextId ( ) , d = CKEDITOR . dom . element . createFromHtml ( '<span id="' +
e + '" class="cke_voice_label">' + d + "</span>" ) ; c . append ( d ) ; a . changeAttr ( "aria-describedby" , e ) } } } ) } ) ; CKEDITOR . addCss ( ".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}" ) ; var n = function ( ) { function a ( b ) { return b . type == CKEDITOR . NODE _ELEMENT } function b ( c , d ) { var e , f , i , l , k = [ ] , q = d . range . startContainer ; e = d . range . startPath ( ) ; for ( var q = h [ q . getName ( ) ] , g = 0 , s = c . getChildren ( ) , j = s . count ( ) , m = - 1 , p = - 1 , n = 0 , M = e . contains ( h . $list ) ; g < j ; ++ g ) { e = s . getItem ( g ) ; if ( a ( e ) ) { i = e . getName ( ) ;
if ( M && i in CKEDITOR . dtd . $list ) k = k . concat ( b ( e , d ) ) ; else { l = ! ! q [ i ] ; if ( i == "br" && e . data ( "cke-eol" ) && ( ! g || g == j - 1 ) ) { n = ( f = g ? k [ g - 1 ] . node : s . getItem ( g + 1 ) ) && ( ! a ( f ) || ! f . is ( "br" ) ) ; f = f && a ( f ) && h . $block [ f . getName ( ) ] } m == - 1 && ! l && ( m = g ) ; l || ( p = g ) ; k . push ( { isElement : 1 , isLineBreak : n , isBlock : e . isBlockBoundary ( ) , hasBlockSibling : f , node : e , name : i , allowed : l } ) ; f = n = 0 } } else k . push ( { isElement : 0 , node : e , allowed : 1 } ) } if ( m > - 1 ) k [ m ] . firstNotAllowed = 1 ; if ( p > - 1 ) k [ p ] . lastNotAllowed = 1 ; return k } function d ( b , c ) { var e = [ ] , f = b . getChildren ( ) , l = f . count ( ) ,
k, q = 0 , g = h [ c ] , s = ! b . is ( h . $inline ) || b . is ( "br" ) ; for ( s && e . push ( " " ) ; q < l ; q ++ ) { k = f . getItem ( q ) ; a ( k ) && ! k . is ( g ) ? e = e . concat ( d ( k , c ) ) : e . push ( k ) } s && e . push ( " " ) ; return e } function e ( b ) { return b && a ( b ) && ( b . is ( h . $removeEmpty ) || b . is ( "a" ) && ! b . isBlockBoundary ( ) ) } function f ( b , c , d , e ) { var i = b . clone ( ) , k , q ; i . setEndAt ( c , CKEDITOR . POSITION _BEFORE _END ) ; if ( ( k = ( new CKEDITOR . dom . walker ( i ) ) . next ( ) ) && a ( k ) && s [ k . getName ( ) ] && ( q = k . getPrevious ( ) ) && a ( q ) && ! q . getParent ( ) . equals ( b . startContainer ) && d . contains ( q ) && e . contains ( k ) && k . isIdentical ( q ) ) { k . moveChildren ( q ) ;
k . remove ( ) ; f ( b , c , d , e ) } } function q ( b , c ) { function d ( b , c ) { if ( c . isBlock && c . isElement && ! c . node . is ( "br" ) && a ( b ) && b . is ( "br" ) ) { b . remove ( ) ; return 1 } } var e = c . endContainer . getChild ( c . endOffset ) , f = c . endContainer . getChild ( c . endOffset - 1 ) ; e && d ( e , b [ b . length - 1 ] ) ; if ( f && d ( f , b [ 0 ] ) ) { c . setEnd ( c . endContainer , c . endOffset - 1 ) ; c . collapse ( ) } } var h = CKEDITOR . dtd , s = { p : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , ul : 1 , ol : 1 , li : 1 , pre : 1 , dl : 1 , blockquote : 1 } , j = { p : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 } , p = CKEDITOR . tools . extend ( { } , h . $inline ) ; delete p . br ;
return function ( s , n , u ) { var t = s . editor , A = t . getSelection ( ) . getRanges ( ) [ 0 ] , E = false ; if ( n == "unfiltered_html" ) { n = "html" ; E = true } if ( ! A . checkReadOnly ( ) ) { var v = ( new CKEDITOR . dom . elementPath ( A . startContainer , A . root ) ) . blockLimit || A . root , n = { type : n , dontFilter : E , editable : s , editor : t , range : A , blockLimit : v , mergeCandidates : [ ] , zombies : [ ] } , t = n . range , E = n . mergeCandidates , z , B , D , G ; if ( n . type == "text" && t . shrink ( CKEDITOR . SHRINK _ELEMENT , true , false ) ) { z = CKEDITOR . dom . element . createFromHtml ( "<span> </span>" , t . document ) ; t . insertNode ( z ) ;
t . setStartAfter ( z ) } B = new CKEDITOR . dom . elementPath ( t . startContainer ) ; n . endPath = D = new CKEDITOR . dom . elementPath ( t . endContainer ) ; if ( ! t . collapsed ) { var v = D . block || D . blockLimit , y = t . getCommonAncestor ( ) ; v && ( ! v . equals ( y ) && ! v . contains ( y ) && t . checkEndOfBlock ( ) ) && n . zombies . push ( v ) ; t . deleteContents ( ) } for ( ; ( G = a ( t . startContainer ) && t . startContainer . getChild ( t . startOffset - 1 ) ) && a ( G ) && G . isBlockBoundary ( ) && B . contains ( G ) ; ) t . moveToPosition ( G , CKEDITOR . POSITION _BEFORE _END ) ; f ( t , n . blockLimit , B , D ) ; if ( z ) { t . setEndBefore ( z ) ; t . collapse ( ) ;
z. remove ( ) } z = t . startPath ( ) ; if ( v = z . contains ( e , false , 1 ) ) { t . splitElement ( v ) ; n . inlineStylesRoot = v ; n . inlineStylesPeak = z . lastElement } z = t . createBookmark ( ) ; ( v = z . startNode . getPrevious ( c ) ) && a ( v ) && e ( v ) && E . push ( v ) ; ( v = z . startNode . getNext ( c ) ) && a ( v ) && e ( v ) && E . push ( v ) ; for ( v = z . startNode ; ( v = v . getParent ( ) ) && e ( v ) ; ) E . push ( v ) ; t . moveToBookmark ( z ) ; if ( z = u ) { z = n . range ; if ( n . type == "text" && n . inlineStylesRoot ) { G = n . inlineStylesPeak ; t = G . getDocument ( ) . createText ( "{cke-peak}" ) ; for ( E = n . inlineStylesRoot . getParent ( ) ; ! G . equals ( E ) ; ) { t = t . appendTo ( G . clone ( ) ) ;
G= G . getParent ( ) } u = t . getOuterHtml ( ) . split ( "{cke-peak}" ) . join ( u ) } G = n . blockLimit . getName ( ) ; if ( /^\s+|\s+$/ . test ( u ) && "span" in CKEDITOR . dtd [ G ] ) var w = '<span data-cke-marker="1"> </span>' , u = w + u + w ; u = n . editor . dataProcessor . toHtml ( u , { context : null , fixForBody : false , dontFilter : n . dontFilter , filter : n . editor . activeFilter , enterMode : n . editor . activeEnterMode } ) ; G = z . document . createElement ( "body" ) ; G . setHtml ( u ) ; if ( w ) { G . getFirst ( ) . remove ( ) ; G . getLast ( ) . remove ( ) } if ( ( w = z . startPath ( ) . block ) && ! ( w . getChildCount ( ) == 1 && w . getBogus ( ) ) ) a : { var H ;
if ( G . getChildCount ( ) == 1 && a ( H = G . getFirst ( ) ) && H . is ( j ) ) { w = H . getElementsByTag ( "*" ) ; z = 0 ; for ( E = w . count ( ) ; z < E ; z ++ ) { t = w . getItem ( z ) ; if ( ! t . is ( p ) ) break a } H . moveChildren ( H . getParent ( 1 ) ) ; H . remove ( ) } } n . dataWrapper = G ; z = u } if ( z ) { H = n . range ; var w = H . document , C , u = n . blockLimit ; z = 0 ; var K ; G = [ ] ; var I , S , E = t = 0 , L , U ; B = H . startContainer ; var v = n . endPath . elements [ 0 ] , V ; D = v . getPosition ( B ) ; y = ! ! v . getCommonAncestor ( B ) && D != CKEDITOR . POSITION _IDENTICAL && ! ( D & CKEDITOR . POSITION _CONTAINS + CKEDITOR . POSITION _IS _CONTAINED ) ; B = b ( n . dataWrapper , n ) ;
for ( q ( B , H ) ; z < B . length ; z ++ ) { D = B [ z ] ; if ( C = D . isLineBreak ) { C = H ; L = u ; var P = void 0 , Y = void 0 ; if ( D . hasBlockSibling ) C = 1 ; else { P = C . startContainer . getAscendant ( h . $block , 1 ) ; if ( ! P || ! P . is ( { div : 1 , p : 1 } ) ) C = 0 ; else { Y = P . getPosition ( L ) ; if ( Y == CKEDITOR . POSITION _IDENTICAL || Y == CKEDITOR . POSITION _CONTAINS ) C = 0 ; else { L = C . splitElement ( P ) ; C . moveToPosition ( L , CKEDITOR . POSITION _AFTER _START ) ; C = 1 } } } } if ( C ) E = z > 0 ; else { C = H . startPath ( ) ; if ( ! D . isBlock && g ( n . editor , C . block , C . blockLimit ) && ( S = n . editor . activeEnterMode != CKEDITOR . ENTER _BR && n . editor . config . autoParagraph != =
false ? n . editor . activeEnterMode == CKEDITOR . ENTER _DIV ? "div" : "p" : false ) ) { S = w . createElement ( S ) ; S . appendBogus ( ) ; H . insertNode ( S ) ; CKEDITOR . env . needsBrFiller && ( K = S . getBogus ( ) ) && K . remove ( ) ; H . moveToPosition ( S , CKEDITOR . POSITION _BEFORE _END ) } if ( ( C = H . startPath ( ) . block ) && ! C . equals ( I ) ) { if ( K = C . getBogus ( ) ) { K . remove ( ) ; G . push ( C ) } I = C } D . firstNotAllowed && ( t = 1 ) ; if ( t && D . isElement ) { C = H . startContainer ; for ( L = null ; C && ! h [ C . getName ( ) ] [ D . name ] ; ) { if ( C . equals ( u ) ) { C = null ; break } L = C ; C = C . getParent ( ) } if ( C ) { if ( L ) { U = H . splitElement ( L ) ; n . zombies . push ( U ) ;
n. zombies . push ( L ) } } else { L = u . getName ( ) ; V = ! z ; C = z == B . length - 1 ; L = d ( D . node , L ) ; for ( var P = [ ] , Y = L . length , Z = 0 , $ = void 0 , X = 0 , W = - 1 ; Z < Y ; Z ++ ) { $ = L [ Z ] ; if ( $ == " " ) { if ( ! X && ( ! V || Z ) ) { P . push ( new CKEDITOR . dom . text ( " " ) ) ; W = P . length } X = 1 } else { P . push ( $ ) ; X = 0 } } C && W == P . length && P . pop ( ) ; V = P } } if ( V ) { for ( ; C = V . pop ( ) ; ) H . insertNode ( C ) ; V = 0 } else H . insertNode ( D . node ) ; if ( D . lastNotAllowed && z < B . length - 1 ) { ( U = y ? v : U ) && H . setEndAt ( U , CKEDITOR . POSITION _AFTER _START ) ; t = 0 } H . collapse ( ) } } n . dontMoveCaret = E ; n . bogusNeededBlocks = G } K = n . range ; var O ; U = n . bogusNeededBlocks ;
for ( V = K . createBookmark ( ) ; I = n . zombies . pop ( ) ; ) if ( I . getParent ( ) ) { S = K . clone ( ) ; S . moveToElementEditStart ( I ) ; S . removeEmptyBlocksAtEnd ( ) } if ( U ) for ( ; I = U . pop ( ) ; ) CKEDITOR . env . needsBrFiller ? I . appendBogus ( ) : I . append ( K . document . createText ( " " ) ) ; for ( ; I = n . mergeCandidates . pop ( ) ; ) I . mergeSiblings ( ) ; K . moveToBookmark ( V ) ; if ( ! n . dontMoveCaret ) { for ( I = a ( K . startContainer ) && K . startContainer . getChild ( K . startOffset - 1 ) ; I && a ( I ) && ! I . is ( h . $empty ) ; ) { if ( I . isBlockBoundary ( ) ) K . moveToPosition ( I , CKEDITOR . POSITION _BEFORE _END ) ; else { if ( e ( I ) &&
I. getHtml ( ) . match ( /(\s| )$/g ) ) { O = null ; break } O = K . clone ( ) ; O . moveToPosition ( I , CKEDITOR . POSITION _BEFORE _END ) } I = I . getLast ( c ) } O && K . moveToRange ( O ) } A . select ( ) ; m ( s ) } } } ( ) , w = function ( ) { function a ( b ) { b = new CKEDITOR . dom . walker ( b ) ; b . guard = function ( a , b ) { if ( b ) return false ; if ( a . type == CKEDITOR . NODE _ELEMENT ) return a . is ( CKEDITOR . dtd . $tableContent ) } ; b . evaluator = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT } ; return b } function b ( a , c , d ) { c = a . getDocument ( ) . createElement ( c ) ; a . append ( c , d ) ; return c } function c ( a ) { var b =
a. count ( ) , d ; for ( b ; b -- > 0 ; ) { d = a . getItem ( b ) ; if ( ! CKEDITOR . tools . trim ( d . getHtml ( ) ) ) { d . appendBogus ( ) ; CKEDITOR . env . ie && ( CKEDITOR . env . version < 9 && d . getChildCount ( ) ) && d . getFirst ( ) . remove ( ) } } } return function ( d ) { var e = d . startContainer , f = e . getAscendant ( "table" , 1 ) , g = false ; c ( f . getElementsByTag ( "td" ) ) ; c ( f . getElementsByTag ( "th" ) ) ; f = d . clone ( ) ; f . setStart ( e , 0 ) ; f = a ( f ) . lastBackward ( ) ; if ( ! f ) { f = d . clone ( ) ; f . setEndAt ( e , CKEDITOR . POSITION _BEFORE _END ) ; f = a ( f ) . lastForward ( ) ; g = true } f || ( f = e ) ; if ( f . is ( "table" ) ) { d . setStartAt ( f , CKEDITOR . POSITION _BEFORE _START ) ;
d . collapse ( true ) ; f . remove ( ) } else { f . is ( { tbody : 1 , thead : 1 , tfoot : 1 } ) && ( f = b ( f , "tr" , g ) ) ; f . is ( "tr" ) && ( f = b ( f , f . getParent ( ) . is ( "thead" ) ? "th" : "td" , g ) ) ; ( e = f . getBogus ( ) ) && e . remove ( ) ; d . moveToPosition ( f , g ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _BEFORE _END ) } } } ( ) } ) ( ) ;
( function ( ) { function a ( ) { var a = this . _ . fakeSelection , b ; if ( a ) { b = this . getSelection ( 1 ) ; if ( ! b || ! b . isHidden ( ) ) { a . reset ( ) ; a = 0 } } if ( ! a ) { a = b || this . getSelection ( 1 ) ; if ( ! a || a . getType ( ) == CKEDITOR . SELECTION _NONE ) return } this . fire ( "selectionCheck" , a ) ; b = this . elementPath ( ) ; if ( ! b . compare ( this . _ . selectionPreviousPath ) ) { if ( CKEDITOR . env . webkit ) this . _ . previousActive = this . document . getActive ( ) ; this . _ . selectionPreviousPath = b ; this . fire ( "selectionChange" , { selection : a , path : b } ) } } function e ( ) { t = true ; if ( ! u ) { b . call ( this ) ; u = CKEDITOR . tools . setTimeout ( b ,
200 , this ) } } function b ( ) { u = null ; if ( t ) { CKEDITOR . tools . setTimeout ( a , 0 , this ) ; t = false } } function c ( a ) { function b ( c , d ) { return ! c || c . type == CKEDITOR . NODE _TEXT ? false : a . clone ( ) [ "moveToElementEdit" + ( d ? "End" : "Start" ) ] ( c ) } if ( ! ( a . root instanceof CKEDITOR . editable ) ) return false ; var c = a . startContainer , d = a . getPreviousNode ( y , null , c ) , e = a . getNextNode ( y , null , c ) ; return b ( d ) || b ( e , 1 ) || ! d && ! e && ! ( c . type == CKEDITOR . NODE _ELEMENT && c . isBlockBoundary ( ) && c . getBogus ( ) ) ? true : false } function f ( a ) { return a . getCustomData ( "cke-fillingChar" ) }
function d ( a , b ) { var c = a && a . removeCustomData ( "cke-fillingChar" ) ; if ( c ) { if ( b !== false ) { var d , e = a . getDocument ( ) . getSelection ( ) . getNative ( ) , f = e && e . type != "None" && e . getRangeAt ( 0 ) ; if ( c . getLength ( ) > 1 && f && f . intersectsNode ( c . $ ) ) { d = [ e . anchorOffset , e . focusOffset ] ; f = e . focusNode == c . $ && e . focusOffset > 0 ; e . anchorNode == c . $ && e . anchorOffset > 0 && d [ 0 ] -- ; f && d [ 1 ] -- ; var h ; f = e ; if ( ! f . isCollapsed ) { h = f . getRangeAt ( 0 ) ; h . setStart ( f . anchorNode , f . anchorOffset ) ; h . setEnd ( f . focusNode , f . focusOffset ) ; h = h . collapsed } h && d . unshift ( d . pop ( ) ) } } c . setText ( g ( c . getText ( ) ) ) ;
if ( d ) { c = e . getRangeAt ( 0 ) ; c . setStart ( c . startContainer , d [ 0 ] ) ; c . setEnd ( c . startContainer , d [ 1 ] ) ; e . removeAllRanges ( ) ; e . addRange ( c ) } } } function g ( a ) { return a . replace ( /\u200B( )?/g , function ( a ) { return a [ 1 ] ? " " : "" } ) } function h ( a , b , c ) { var d = a . on ( "focus" , function ( a ) { a . cancel ( ) } , null , null , - 100 ) ; if ( CKEDITOR . env . ie ) var e = a . getDocument ( ) . on ( "selectionchange" , function ( a ) { a . cancel ( ) } , null , null , - 100 ) ; else { var f = new CKEDITOR . dom . range ( a ) ; f . moveToElementEditStart ( a ) ; var g = a . getDocument ( ) . $ . createRange ( ) ; g . setStart ( f . startContainer . $ ,
f. startOffset ) ; g . collapse ( 1 ) ; b . removeAllRanges ( ) ; b . addRange ( g ) } c && a . focus ( ) ; d . removeListener ( ) ; e && e . removeListener ( ) } function m ( a ) { var b = CKEDITOR . dom . element . createFromHtml ( '<div data-cke-hidden-sel="1" data-cke-temp="1" style="' + ( CKEDITOR . env . ie ? "display:none" : "position:fixed;top:0;left:-1000px" ) + '"> </div>' , a . document ) ; a . fire ( "lockSnapshot" ) ; a . editable ( ) . append ( b ) ; var c = a . getSelection ( 1 ) , d = a . createRange ( ) , e = c . root . on ( "selectionchange" , function ( a ) { a . cancel ( ) } , null , null , 0 ) ; d . setStartAt ( b , CKEDITOR . POSITION _AFTER _START ) ;
d . setEndAt ( b , CKEDITOR . POSITION _BEFORE _END ) ; c . selectRanges ( [ d ] ) ; e . removeListener ( ) ; a . fire ( "unlockSnapshot" ) ; a . _ . hiddenSelectionContainer = b } function j ( a ) { var b = { 37 : 1 , 39 : 1 , 8 : 1 , 46 : 1 } ; return function ( c ) { var d = c . data . getKeystroke ( ) ; if ( b [ d ] ) { var e = a . getSelection ( ) . getRanges ( ) , f = e [ 0 ] ; if ( e . length == 1 && f . collapsed ) if ( ( d = f [ d < 38 ? "getPreviousEditableNode" : "getNextEditableNode" ] ( ) ) && d . type == CKEDITOR . NODE _ELEMENT && d . getAttribute ( "contenteditable" ) == "false" ) { a . getSelection ( ) . fake ( d ) ; c . data . preventDefault ( ) ; c . cancel ( ) } } } }
function p ( a ) { for ( var b = 0 ; b < a . length ; b ++ ) { var c = a [ b ] ; c . getCommonAncestor ( ) . isReadOnly ( ) && a . splice ( b , 1 ) ; if ( ! c . collapsed ) { if ( c . startContainer . isReadOnly ( ) ) for ( var d = c . startContainer , e ; d ; ) { if ( ( e = d . type == CKEDITOR . NODE _ELEMENT ) && d . is ( "body" ) || ! d . isReadOnly ( ) ) break ; e && d . getAttribute ( "contentEditable" ) == "false" && c . setStartAfter ( d ) ; d = d . getParent ( ) } d = c . startContainer ; e = c . endContainer ; var f = c . startOffset , g = c . endOffset , h = c . clone ( ) ; d && d . type == CKEDITOR . NODE _TEXT && ( f >= d . getLength ( ) ? h . setStartAfter ( d ) : h . setStartBefore ( d ) ) ;
e && e . type == CKEDITOR . NODE _TEXT && ( g ? h . setEndAfter ( e ) : h . setEndBefore ( e ) ) ; d = new CKEDITOR . dom . walker ( h ) ; d . evaluator = function ( d ) { if ( d . type == CKEDITOR . NODE _ELEMENT && d . isReadOnly ( ) ) { var e = c . clone ( ) ; c . setEndBefore ( d ) ; c . collapsed && a . splice ( b -- , 1 ) ; if ( ! ( d . getPosition ( h . endContainer ) & CKEDITOR . POSITION _CONTAINS ) ) { e . setStartAfter ( d ) ; e . collapsed || a . splice ( b + 1 , 0 , e ) } return true } return false } ; d . next ( ) } } return a } var u , t , y = CKEDITOR . dom . walker . invisible ( 1 ) , n = function ( ) { function a ( b ) { return function ( a ) { var c = a . editor . createRange ( ) ;
c . moveToClosestEditablePosition ( a . selected , b ) && a . editor . getSelection ( ) . selectRanges ( [ c ] ) ; return false } } function b ( a ) { return function ( b ) { var c = b . editor , d = c . createRange ( ) , e ; if ( ! ( e = d . moveToClosestEditablePosition ( b . selected , a ) ) ) e = d . moveToClosestEditablePosition ( b . selected , ! a ) ; e && c . getSelection ( ) . selectRanges ( [ d ] ) ; c . fire ( "saveSnapshot" ) ; b . selected . remove ( ) ; if ( ! e ) { d . moveToElementEditablePosition ( c . editable ( ) ) ; c . getSelection ( ) . selectRanges ( [ d ] ) } c . fire ( "saveSnapshot" ) ; return false } } var c = a ( ) , d = a ( 1 ) ; return { 37 : c ,
38 : c , 39 : d , 40 : d , 8 : b ( ) , 46 : b ( 1 ) } } ( ) ; CKEDITOR . on ( "instanceCreated" , function ( b ) { function c ( ) { var a = f . getSelection ( ) ; a && a . removeAllRanges ( ) } var f = b . editor ; f . on ( "contentDom" , function ( ) { function b ( ) { A = new CKEDITOR . dom . selection ( f . getSelection ( ) ) ; A . lock ( ) } function c ( ) { k . removeListener ( "mouseup" , c ) ; n . removeListener ( "mouseup" , c ) ; var a = CKEDITOR . document . $ . selection , b = a . createRange ( ) ; a . type != "None" && b . parentElement ( ) . ownerDocument == i . $ && b . select ( ) } var i = f . document , k = CKEDITOR . document , g = f . editable ( ) , h = i . getBody ( ) ,
n= i . getDocumentElement ( ) , m = g . isInline ( ) , p , A ; CKEDITOR . env . gecko && g . attachListener ( g , "focus" , function ( a ) { a . removeListener ( ) ; if ( p !== 0 ) if ( ( a = f . getSelection ( ) . getNative ( ) ) && a . isCollapsed && a . anchorNode == g . $ ) { a = f . createRange ( ) ; a . moveToElementEditStart ( g ) ; a . select ( ) } } , null , null , - 2 ) ; g . attachListener ( g , CKEDITOR . env . webkit ? "DOMFocusIn" : "focus" , function ( ) { p && CKEDITOR . env . webkit && ( p = f . _ . previousActive && f . _ . previousActive . equals ( i . getActive ( ) ) ) ; f . unlockSelection ( p ) ; p = 0 } , null , null , - 1 ) ; g . attachListener ( g , "mousedown ",
function ( ) { p = 0 } ) ; if ( CKEDITOR . env . ie || m ) { w ? g . attachListener ( g , "beforedeactivate" , b , null , null , - 1 ) : g . attachListener ( f , "selectionCheck" , b , null , null , - 1 ) ; g . attachListener ( g , CKEDITOR . env . webkit ? "DOMFocusOut" : "blur" , function ( ) { f . lockSelection ( A ) ; p = 1 } , null , null , - 1 ) ; g . attachListener ( g , "mousedown" , function ( ) { p = 0 } ) } if ( CKEDITOR . env . ie && ! m ) { var E ; g . attachListener ( g , "mousedown" , function ( a ) { if ( a . data . $ . button == 2 ) { a = f . document . getSelection ( ) ; if ( ! a || a . getType ( ) == CKEDITOR . SELECTION _NONE ) E = f . window . getScrollPosition ( ) } } ) ;
g . attachListener ( g , "mouseup" , function ( a ) { if ( a . data . $ . button == 2 && E ) { f . document . $ . documentElement . scrollLeft = E . x ; f . document . $ . documentElement . scrollTop = E . y } E = null } ) ; if ( i . $ . compatMode != "BackCompat" ) { if ( CKEDITOR . env . ie7Compat || CKEDITOR . env . ie6Compat ) n . on ( "mousedown" , function ( a ) { function b ( a ) { a = a . data . $ ; if ( d ) { var c = h . $ . createTextRange ( ) ; try { c . moveToPoint ( a . clientX , a . clientY ) } catch ( f ) { } d . setEndPoint ( e . compareEndPoints ( "StartToStart" , c ) < 0 ? "EndToEnd" : "StartToStart" , c ) ; d . select ( ) } } function c ( ) { n . removeListener ( "mousemove" ,
b ) ; k . removeListener ( "mouseup" , c ) ; n . removeListener ( "mouseup" , c ) ; d . select ( ) } a = a . data ; if ( a . getTarget ( ) . is ( "html" ) && a . $ . y < n . $ . clientHeight && a . $ . x < n . $ . clientWidth ) { var d = h . $ . createTextRange ( ) ; try { d . moveToPoint ( a . $ . clientX , a . $ . clientY ) } catch ( f ) { } var e = d . duplicate ( ) ; n . on ( "mousemove" , b ) ; k . on ( "mouseup" , c ) ; n . on ( "mouseup" , c ) } } ) ; if ( CKEDITOR . env . version > 7 && CKEDITOR . env . version < 11 ) n . on ( "mousedown" , function ( a ) { if ( a . data . getTarget ( ) . is ( "html" ) ) { k . on ( "mouseup" , c ) ; n . on ( "mouseup" , c ) } } ) } } g . attachListener ( g , "selectionchange" ,
a , f ) ; g . attachListener ( g , "keyup" , e , f ) ; g . attachListener ( g , CKEDITOR . env . webkit ? "DOMFocusIn" : "focus" , function ( ) { f . forceNextSelectionCheck ( ) ; f . selectionChange ( 1 ) } ) ; if ( m && ( CKEDITOR . env . webkit || CKEDITOR . env . gecko ) ) { var v ; g . attachListener ( g , "mousedown" , function ( ) { v = 1 } ) ; g . attachListener ( i . getDocumentElement ( ) , "mouseup" , function ( ) { v && e . call ( f ) ; v = 0 } ) } else g . attachListener ( CKEDITOR . env . ie ? g : i . getDocumentElement ( ) , "mouseup" , e , f ) ; CKEDITOR . env . webkit && g . attachListener ( i , "keydown" , function ( a ) { switch ( a . data . getKey ( ) ) { case 13 : case 33 : case 34 : case 35 : case 36 : case 37 : case 39 : case 8 : case 45 : case 46 : d ( g ) } } ,
null , null , - 1 ) ; g . attachListener ( g , "keydown" , j ( f ) , null , null , - 1 ) } ) ; f . on ( "setData" , function ( ) { f . unlockSelection ( ) ; CKEDITOR . env . webkit && c ( ) } ) ; f . on ( "contentDomUnload" , function ( ) { f . unlockSelection ( ) } ) ; if ( CKEDITOR . env . ie9Compat ) f . on ( "beforeDestroy" , c , null , null , 9 ) ; f . on ( "dataReady" , function ( ) { delete f . _ . fakeSelection ; delete f . _ . hiddenSelectionContainer ; f . selectionChange ( 1 ) } ) ; f . on ( "loadSnapshot" , function ( ) { var a = f . editable ( ) . getLast ( function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT } ) ; a && a . hasAttribute ( "data-cke-hidden-sel" ) &&
a . remove ( ) } , null , null , 100 ) ; f . on ( "key" , function ( a ) { if ( f . mode == "wysiwyg" ) { var b = f . getSelection ( ) ; if ( b . isFake ) { var c = n [ a . data . keyCode ] ; if ( c ) return c ( { editor : f , selected : b . getSelectedElement ( ) , selection : b , keyEvent : a } ) } } } ) } ) ; CKEDITOR . on ( "instanceReady" , function ( a ) { function b ( ) { var a = e . editable ( ) ; if ( a ) if ( a = f ( a ) ) { var c = e . document . $ . defaultView . getSelection ( ) ; c . type == "Caret" && c . anchorNode == a . $ && ( j = 1 ) ; h = a . getText ( ) ; a . setText ( g ( h ) ) } } function c ( ) { var a = e . editable ( ) ; if ( a ) if ( a = f ( a ) ) { a . setText ( h ) ; if ( j ) { e . document . $ . defaultView . getSelection ( ) . setPosition ( a . $ ,
a. getLength ( ) ) ; j = 0 } } } var e = a . editor ; if ( CKEDITOR . env . webkit ) { e . on ( "selectionChange" , function ( ) { var a = e . editable ( ) , b = f ( a ) ; b && ( b . getCustomData ( "ready" ) ? d ( a ) : b . setCustomData ( "ready" , 1 ) ) } , null , null , - 1 ) ; e . on ( "beforeSetMode" , function ( ) { d ( e . editable ( ) ) } , null , null , - 1 ) ; var h , j ; e . on ( "beforeUndoImage" , b ) ; e . on ( "afterUndoImage" , c ) ; e . on ( "beforeGetData" , b , null , null , 0 ) ; e . on ( "getData" , c ) } } ) ; CKEDITOR . editor . prototype . selectionChange = function ( b ) { ( b ? a : e ) . call ( this ) } ; CKEDITOR . editor . prototype . getSelection = function ( a ) { if ( ( this . _ . savedSelection ||
this. _ . fakeSelection ) && ! a ) return this . _ . savedSelection || this . _ . fakeSelection ; return ( a = this . editable ( ) ) && this . mode == "wysiwyg" ? new CKEDITOR . dom . selection ( a ) : null } ; CKEDITOR . editor . prototype . lockSelection = function ( a ) { a = a || this . getSelection ( 1 ) ; if ( a . getType ( ) != CKEDITOR . SELECTION _NONE ) { ! a . isLocked && a . lock ( ) ; this . _ . savedSelection = a ; return true } return false } ; CKEDITOR . editor . prototype . unlockSelection = function ( a ) { var b = this . _ . savedSelection ; if ( b ) { b . unlock ( a ) ; delete this . _ . savedSelection ; return true } return false } ;
CKEDITOR . editor . prototype . forceNextSelectionCheck = function ( ) { delete this . _ . selectionPreviousPath } ; CKEDITOR . dom . document . prototype . getSelection = function ( ) { return new CKEDITOR . dom . selection ( this ) } ; CKEDITOR . dom . range . prototype . select = function ( ) { var a = this . root instanceof CKEDITOR . editable ? this . root . editor . getSelection ( ) : new CKEDITOR . dom . selection ( this . root ) ; a . selectRanges ( [ this ] ) ; return a } ; CKEDITOR . SELECTION _NONE = 1 ; CKEDITOR . SELECTION _TEXT = 2 ; CKEDITOR . SELECTION _ELEMENT = 3 ; var w = typeof window . getSelection !=
"function" , o = 1 ; CKEDITOR . dom . selection = function ( a ) { if ( a instanceof CKEDITOR . dom . selection ) var b = a , a = a . root ; var c = a instanceof CKEDITOR . dom . element ; this . rev = b ? b . rev : o ++ ; this . document = a instanceof CKEDITOR . dom . document ? a : a . getDocument ( ) ; this . root = a = c ? a : this . document . getBody ( ) ; this . isLocked = 0 ; this . _ = { cache : { } } ; if ( b ) { CKEDITOR . tools . extend ( this . _ . cache , b . _ . cache ) ; this . isFake = b . isFake ; this . isLocked = b . isLocked ; return this } c = w ? this . document . $ . selection : this . document . getWindow ( ) . $ . getSelection ( ) ; if ( CKEDITOR . env . webkit ) ( c . type ==
"None" && this . document . getActive ( ) . equals ( a ) || c . type == "Caret" && c . anchorNode . nodeType == CKEDITOR . NODE _DOCUMENT ) && h ( a , c ) ; else if ( CKEDITOR . env . gecko ) c && ( this . document . getActive ( ) . equals ( a ) && c . anchorNode && c . anchorNode . nodeType == CKEDITOR . NODE _DOCUMENT ) && h ( a , c , true ) ; else if ( CKEDITOR . env . ie ) { b = this . document . getActive ( ) ; if ( w ) c . type == "None" && ( b && b . equals ( this . document . getDocumentElement ( ) ) ) && h ( a , null , true ) ; else { ( c = c && c . anchorNode ) && ( c = new CKEDITOR . dom . node ( c ) ) ; b && ( b . equals ( this . document . getDocumentElement ( ) ) &&
c&& ( a . equals ( c ) || a . contains ( c ) ) ) && h ( a , null , true ) } } var a = this . getNative ( ) , d , e ; if ( a ) if ( a . getRangeAt ) d = ( e = a . rangeCount && a . getRangeAt ( 0 ) ) && new CKEDITOR . dom . node ( e . commonAncestorContainer ) ; else { try { e = a . createRange ( ) } catch ( f ) { } d = e && CKEDITOR . dom . element . get ( e . item && e . item ( 0 ) || e . parentElement ( ) ) } if ( ! d || ! ( d . type == CKEDITOR . NODE _ELEMENT || d . type == CKEDITOR . NODE _TEXT ) || ! this . root . equals ( d ) && ! this . root . contains ( d ) ) { this . _ . cache . type = CKEDITOR . SELECTION _NONE ; this . _ . cache . startElement = null ; this . _ . cache . selectedElement =
null ; this . _ . cache . selectedText = "" ; this . _ . cache . ranges = new CKEDITOR . dom . rangeList } return this } ; var r = { img : 1 , hr : 1 , li : 1 , table : 1 , tr : 1 , td : 1 , th : 1 , embed : 1 , object : 1 , ol : 1 , ul : 1 , a : 1 , input : 1 , form : 1 , select : 1 , textarea : 1 , button : 1 , fieldset : 1 , thead : 1 , tfoot : 1 } ; CKEDITOR . dom . selection . prototype = { getNative : function ( ) { return this . _ . cache . nativeSel !== void 0 ? this . _ . cache . nativeSel : this . _ . cache . nativeSel = w ? this . document . $ . selection : this . document . getWindow ( ) . $ . getSelection ( ) } , getType : w ? function ( ) { var a = this . _ . cache ; if ( a . type ) return a . type ;
var b = CKEDITOR . SELECTION _NONE ; try { var c = this . getNative ( ) , d = c . type ; if ( d == "Text" ) b = CKEDITOR . SELECTION _TEXT ; if ( d == "Control" ) b = CKEDITOR . SELECTION _ELEMENT ; if ( c . createRange ( ) . parentElement ( ) ) b = CKEDITOR . SELECTION _TEXT } catch ( e ) { } return a . type = b } : function ( ) { var a = this . _ . cache ; if ( a . type ) return a . type ; var b = CKEDITOR . SELECTION _TEXT , c = this . getNative ( ) ; if ( ! c || ! c . rangeCount ) b = CKEDITOR . SELECTION _NONE ; else if ( c . rangeCount == 1 ) { var c = c . getRangeAt ( 0 ) , d = c . startContainer ; if ( d == c . endContainer && d . nodeType == 1 && c . endOffset -
c . startOffset == 1 && r [ d . childNodes [ c . startOffset ] . nodeName . toLowerCase ( ) ] ) b = CKEDITOR . SELECTION _ELEMENT } return a . type = b } , getRanges : function ( ) { var a = w ? function ( ) { function a ( b ) { return ( new CKEDITOR . dom . node ( b ) ) . getIndex ( ) } var b = function ( b , c ) { b = b . duplicate ( ) ; b . collapse ( c ) ; var d = b . parentElement ( ) ; if ( ! d . hasChildNodes ( ) ) return { container : d , offset : 0 } ; for ( var e = d . children , f , i , g = b . duplicate ( ) , l = 0 , h = e . length - 1 , A = - 1 , j , v ; l <= h ; ) { A = Math . floor ( ( l + h ) / 2 ) ; f = e [ A ] ; g . moveToElementText ( f ) ; j = g . compareEndPoints ( "StartToStart" ,
b ) ; if ( j > 0 ) h = A - 1 ; else if ( j < 0 ) l = A + 1 ; else return { container : d , offset : a ( f ) } } if ( A== - 1 || A == e . length - 1 && j < 0 ) { g . moveToElementText ( d ) ; g . setEndPoint ( "StartToStart" , b ) ; g= g . text . replace ( /(\r\n|\r)/g , "\n" ) . length ; e = d . childNodes ; if ( ! g ) { f = e [ e . length - 1 ] ; return f . nodeType != CKEDITOR . NODE _TEXT ? { container : d , offset : e . length } : { container : f , offset : f . nodeValue . length } } for ( d = e . length ; g > 0 && d > 0 ; ) { i = e [ -- d ] ; if ( i . nodeType == CKEDITOR . NODE _TEXT ) { v = i ; g = g - i . nodeValue . length } } return { container : v , offset : - g } } g . collapse ( j > 0 ? true : false ) ; g . setEndPoint ( j >
0 ? "StartToStart" : "EndToStart" , b ) ; g = g . text . replace ( /(\r\n|\r)/g , "\n" ) . length ; if ( ! g ) return { container : d , offset : a ( f ) + ( j > 0 ? 0 : 1 ) } ; for ( ; g > 0 ; ) try { i = f [ j > 0 ? "previousSibling" : "nextSibling" ] ; if ( i . nodeType == CKEDITOR . NODE _TEXT ) { g= g - i . nodeValue . length ; v = i } f = i } catch ( z ) { return { container : d , offset : a ( f ) } } return { container : v , offset : j > 0 ? - g : v . nodeValue . length + g } } ; return function ( ) { var a = this . getNative ( ) , c = a && a . createRange ( ) , d = this . getType ( ) ; if ( ! a ) return [ ] ; if ( d == CKEDITOR . SELECTION _TEXT ) { a = new CKEDITOR . dom . range ( this . root ) ;
d = b ( c , true ) ; a . setStart ( new CKEDITOR . dom . node ( d . container ) , d . offset ) ; d = b ( c ) ; a . setEnd ( new CKEDITOR . dom . node ( d . container ) , d . offset ) ; a . endContainer . getPosition ( a . startContainer ) & CKEDITOR . POSITION _PRECEDING && a . endOffset <= a . startContainer . getIndex ( ) && a . collapse ( ) ; return [ a ] } if ( d == CKEDITOR . SELECTION _ELEMENT ) { for ( var d = [ ] , e = 0 ; e < c . length ; e ++ ) { for ( var f = c . item ( e ) , g = f . parentNode , i = 0 , a = new CKEDITOR . dom . range ( this . root ) ; i < g . childNodes . length && g . childNodes [ i ] != f ; i ++ ) ; a . setStart ( new CKEDITOR . dom . node ( g ) , i ) ; a . setEnd ( new CKEDITOR . dom . node ( g ) ,
i+ 1 ) ; d . push ( a ) } return d } return [ ] } } ( ) : function ( ) { var a = [ ] , b , c = this . getNative ( ) ; if ( ! c ) return a ; for ( var d = 0 ; d < c . rangeCount ; d ++ ) { var e = c . getRangeAt ( d ) ; b = new CKEDITOR . dom . range ( this . root ) ; b . setStart ( new CKEDITOR . dom . node ( e. startContainer ) , e . startOffset ) ; b . setEnd ( new CKEDITOR . dom . node ( e. endContainer ) , e . endOffset ) ; a . push ( b ) } return a } ; return function ( b ) { var c = this . _ . cache , d = c . ranges ; if ( ! d ) c . ranges = d = new CKEDITOR . dom . rangeList ( a . call ( this ) ) ; return ! b ? d : p ( new CKEDITOR . dom . rangeList ( d . slice ( ) ) ) } } ( ) , getStartElement : function ( ) { var a =
this . _ . cache ; if ( a . startElement !== void 0 ) return a . startElement ; var b ; switch ( this . getType ( ) ) { case CKEDITOR . SELECTION _ELEMENT : return this . getSelectedElement ( ) ; case CKEDITOR . SELECTION _TEXT : var c = this . getRanges ( ) [ 0 ] ; if ( c ) { if ( c . collapsed ) { b = c . startContainer ; b . type != CKEDITOR . NODE _ELEMENT && ( b = b . getParent ( ) ) } else { for ( c . optimize ( ) ; ; ) { b = c . startContainer ; if ( c . startOffset == ( b . getChildCount ? b . getChildCount ( ) : b . getLength ( ) ) && ! b . isBlockBoundary ( ) ) c . setStartAfter ( b ) ; else break } b = c . startContainer ; if ( b . type != CKEDITOR . NODE _ELEMENT ) return b . getParent ( ) ;
b = b . getChild ( c . startOffset ) ; if ( ! b || b . type != CKEDITOR . NODE _ELEMENT ) b = c . startContainer ; else for ( c = b . getFirst ( ) ; c && c . type == CKEDITOR . NODE _ELEMENT ; ) { b = c ; c = c . getFirst ( ) } } b = b . $ } } return a . startElement = b ? new CKEDITOR . dom . element ( b ) : null } , getSelectedElement : function ( ) { var a = this . _ . cache ; if ( a . selectedElement !== void 0 ) return a . selectedElement ; var b = this , c = CKEDITOR . tools . tryThese ( function ( ) { return b . getNative ( ) . createRange ( ) . item ( 0 ) } , function ( ) { for ( var a = b . getRanges ( ) [ 0 ] . clone ( ) , c , d , e = 2 ; e && ( ! ( c = a . getEnclosedNode ( ) ) ||
! ( c . type == CKEDITOR . NODE _ELEMENT && r [ c . getName ( ) ] && ( d = c ) ) ) ; e -- ) a . shrink ( CKEDITOR . SHRINK _ELEMENT ) ; return d && d . $ } ) ; return a . selectedElement = c ? new CKEDITOR . dom . element ( c ) : null } , getSelectedText : function ( ) { var a = this . _ . cache ; if ( a . selectedText !== void 0 ) return a . selectedText ; var b = this . getNative ( ) , b = w ? b . type == "Control" ? "" : b . createRange ( ) . text : b . toString ( ) ; return a . selectedText = b } , lock : function ( ) { this . getRanges ( ) ; this . getStartElement ( ) ; this . getSelectedElement ( ) ; this . getSelectedText ( ) ; this . _ . cache . nativeSel =
null ; this . isLocked = 1 } , unlock : function ( a ) { if ( this . isLocked ) { if ( a ) var b = this . getSelectedElement ( ) , c = ! b && this . getRanges ( ) , d = this . isFake ; this . isLocked = 0 ; this . reset ( ) ; if ( a ) ( a = b || c [ 0 ] && c [ 0 ] . getCommonAncestor ( ) ) && a . getAscendant ( "body" , 1 ) && ( d ? this . fake ( b ) : b ? this . selectElement ( b ) : this . selectRanges ( c ) ) } } , reset : function ( ) { this . _ . cache = { } ; this . isFake = 0 ; var a = this . root . editor ; if ( a && a . _ . fakeSelection && this . rev == a . _ . fakeSelection . rev ) { delete a . _ . fakeSelection ; var b = a . _ . hiddenSelectionContainer ; if ( b ) { var c = a . checkDirty ( ) ;
a . fire ( "lockSnapshot" ) ; b . remove ( ) ; a . fire ( "unlockSnapshot" ) ; ! c && a . resetDirty ( ) } delete a . _ . hiddenSelectionContainer } this . rev = o ++ } , selectElement : function ( a ) { var b = new CKEDITOR . dom . range ( this . root ) ; b . setStartBefore ( a ) ; b . setEndAfter ( a ) ; this . selectRanges ( [ b ] ) } , selectRanges : function ( a ) { var b = this . root . editor , b = b && b . _ . hiddenSelectionContainer ; this . reset ( ) ; if ( b ) for ( var b = this . root , e , f = 0 ; f < a . length ; ++ f ) { e = a [ f ] ; if ( e . endContainer . equals ( b ) ) e . endOffset = Math . min ( e . endOffset , b . getChildCount ( ) ) } if ( a . length ) if ( this . isLocked ) { var g =
CKEDITOR . document . getActive ( ) ; this . unlock ( ) ; this . selectRanges ( a ) ; this . lock ( ) ; g && ! g . equals ( this . root ) && g . focus ( ) } else { var h ; a : { var j , n ; if ( a . length == 1 && ! ( n = a [ 0 ] ) . collapsed && ( h = n . getEnclosedNode ( ) ) && h . type == CKEDITOR . NODE _ELEMENT ) { n = n . clone ( ) ; n . shrink ( CKEDITOR . SHRINK _ELEMENT , true ) ; if ( ( j = n . getEnclosedNode ( ) ) && j . type == CKEDITOR . NODE _ELEMENT ) h = j ; if ( h . getAttribute ( "contenteditable" ) == "false" ) break a } h = void 0 } if ( h ) this . fake ( h ) ; else { if ( w ) { n = CKEDITOR . dom . walker . whitespaces ( true ) ; j = /\ufeff|\u00a0/ ; b = { table : 1 ,
tbody: 1 , tr : 1 } ; if ( a . length > 1 ) { h = a [ a . length - 1 ] ; a [ 0 ] . setEnd ( h . endContainer , h . endOffset ) } h = a [ 0 ] ; var a = h . collapsed , m , p , o ; if ( ( e = h . getEnclosedNode ( ) ) && e . type == CKEDITOR . NODE _ELEMENT && e . getName ( ) in r && ( ! e . is ( "a" ) || ! e . getText ( ) ) ) try { o = e . $ . createControlRange ( ) ; o . addElement ( e . $ ) ; o . select ( ) ; return } catch ( t ) { } if ( h . startContainer . type == CKEDITOR . NODE _ELEMENT && h . startContainer . getName ( ) in b || h . endContainer . type == CKEDITOR . NODE _ELEMENT && h. endContainer . getName ( ) in b ) { h . shrink ( CKEDITOR . NODE _ELEMENT , true ) ; a = h . collapsed } o =
h. createBookmark ( ) ; b = o . startNode ; if ( ! a ) g = o . endNode ; o = h . document . $ . body . createTextRange ( ) ; o . moveToElementText ( b . $ ) ; o . moveStart ( "character" , 1 ) ; if ( g ) { j = h . document . $ . body . createTextRange ( ) ; j . moveToElementText ( g . $ ) ; o . setEndPoint ( "EndToEnd" , j ) ; o . moveEnd ( "character" , - 1 ) } else { m = b . getNext ( n ) ; p = b . hasAscendant ( "pre" ) ; m = ! ( m && m . getText && m . getText ( ) . match ( j ) ) && ( p || ! b . hasPrevious ( ) || b . getPrevious ( ) . is && b . getPrevious ( ) . is ( "br" ) ) ; p = h . document . createElement ( "span" ) ; p . setHtml ( "" ) ; p . insertBefore ( b ) ; m && h . document . createText ( " " ) . insertBefore ( b ) } h . setStartBefore ( b ) ;
b . remove ( ) ; if ( a ) { if ( m ) { o . moveStart ( "character" , - 1 ) ; o . select ( ) ; h . document . $ . selection . clear ( ) } else o . select ( ) ; h . moveToPosition ( p , CKEDITOR . POSITION _BEFORE _START ) ; p . remove ( ) } else { h . setEndBefore ( g ) ; g . remove ( ) ; o . select ( ) } } else { g = this . getNative ( ) ; if ( ! g ) return ; this . removeAllRanges ( ) ; for ( o = 0 ; o < a . length ; o ++ ) { if ( o < a . length - 1 ) { m = a [ o ] ; p = a [ o + 1 ] ; j = m . clone ( ) ; j . setStart ( m . endContainer , m . endOffset ) ; j . setEnd ( p . startContainer , p . startOffset ) ; if ( ! j . collapsed ) { j . shrink ( CKEDITOR . NODE _ELEMENT , true ) ; h = j . getCommonAncestor ( ) ;
j= j . getEnclosedNode ( ) ; if ( h . isReadOnly ( ) || j && j . isReadOnly ( ) ) { p . setStart ( m . startContainer , m . startOffset ) ; a . splice ( o -- , 1 ) ; continue } } } h = a [ o ] ; p = this . document . $ . createRange ( ) ; if ( h . collapsed && CKEDITOR . env . webkit && c ( h ) ) { m = this . root ; d ( m , false ) ; j = m . getDocument ( ) . createText ( " " ) ; m . setCustomData ( "cke-fillingChar" , j ) ; h . insertNode ( j ) ; if ( ( m = j . getNext ( ) ) && ! j . getPrevious ( ) && m . type == CKEDITOR . NODE _ELEMENT && m . getName ( ) == "br" ) { d ( this . root ) ; h . moveToPosition ( m , CKEDITOR . POSITION _BEFORE _START ) } else h . moveToPosition ( j , CKEDITOR . POSITION _AFTER _END ) } p . setStart ( h . startContainer . $ ,
h. startOffset ) ; try { p . setEnd ( h . endContainer . $ , h . endOffset ) } catch ( A ) { if ( A . toString ( ) . indexOf ( "NS_ERROR_ILLEGAL_VALUE" ) >= 0 ) { h . collapse ( 1 ) ; p . setEnd ( h . endContainer . $ , h . endOffset ) } else throw A ; } g . addRange ( p ) } } this . reset ( ) ; this . root . fire ( "selectionchange" ) } } } , fake : function ( a ) { var b = this . root . editor ; this . reset ( ) ; m ( b ) ; var c = this . _ . cache , d = new CKEDITOR . dom . range ( this . root ) ; d . setStartBefore ( a ) ; d . setEndAfter ( a ) ; c . ranges = new CKEDITOR . dom . rangeList ( d ) ; c . selectedElement = c . startElement = a ; c . type = CKEDITOR . SELECTION _ELEMENT ;
c. selectedText = c . nativeSel = null ; this . isFake = 1 ; this . rev = o ++ ; b . _ . fakeSelection = this ; this . root . fire ( "selectionchange" ) } ,isHidden : function ( ) { var a = this . getCommonAncestor ( ) ; a && a . type == CKEDITOR . NODE _TEXT && ( a = a . getParent ( ) ) ; return ! ( ! a || ! a . data ( "cke-hidden-sel" ) ) } , createBookmarks : function ( a ) { a = this . getRanges ( ) . createBookmarks ( a ) ; this . isFake && ( a . isFake = 1 ) ; return a } , createBookmarks2 : function ( a ) { a = this . getRanges ( ) . createBookmarks2 ( a ) ; this . isFake && ( a . isFake = 1 ) ; return a } , selectBookmarks : function ( a ) { for ( var b =
[ ] , c = 0 ; c < a . length ; c ++ ) { var d = new CKEDITOR . dom . range ( this . root ) ; d . moveToBookmark ( a [ c ] ) ; b . push ( d ) } a . isFake ? this . fake ( b [ 0 ] . getEnclosedNode ( ) ) : this . selectRanges ( b ) ; return this } , getCommonAncestor : function ( ) { var a = this . getRanges ( ) ; return ! a . length ? null : a [ 0 ] . startContainer . getCommonAncestor ( a [ a . length - 1 ] . endContainer ) } , scrollIntoView : function ( ) { this . type != CKEDITOR . SELECTION _NONE && this . getRanges ( ) [ 0 ] . scrollIntoView ( ) } , removeAllRanges : function ( ) { if ( this . getType ( ) != CKEDITOR . SELECTION _NONE ) { var a = this . getNative ( ) ;
try { a && a [ w ? "empty" : "removeAllRanges" ] ( ) } catch ( b ) { } this . reset ( ) } } } } ) ( ) ; "use strict" ; CKEDITOR . STYLE _BLOCK = 1 ; CKEDITOR . STYLE _INLINE = 2 ; CKEDITOR . STYLE _OBJECT = 3 ;
( function ( ) { function a ( a , b ) { for ( var c , d ; a = a . getParent ( ) ; ) { if ( a . equals ( b ) ) break ; if ( a . getAttribute ( "data-nostyle" ) ) c = a ; else if ( ! d ) { var e = a . getAttribute ( "contentEditable" ) ; e == "false" ? c = a : e == "true" && ( d = 1 ) } } return c } function e ( b ) { var d = b . document ; if ( b . collapsed ) { d = o ( this , d ) ; b . insertNode ( d ) ; b . moveToPosition ( d , CKEDITOR . POSITION _BEFORE _END ) } else { var f = this . element , g = this . _ . definition , h , j= g . ignoreReadonly , i = j || g . includeReadonly ; i == null && ( i = b . root . getCustomData ( "cke_includeReadonly" ) ) ; var k = CKEDITOR . dtd [ f ] ;
if ( ! k) { h = true ; k = CKEDITOR . dtd . span } b . enlarge ( CKEDITOR . ENLARGE _INLINE , 1 ) ; b . trim ( ) ; var n= b . createBookmark ( ) , l = n . startNode , m = n . endNode , p = l , q ; if ( ! j ) { var t = b . getCommonAncestor ( ) , j= a ( l , t ) , t = a ( m , t ) ; j && ( p = j . getNextSourceNode ( true ) ) ; t && ( m= t ) } for ( p . getPosition ( m ) == CKEDITOR . POSITION _FOLLOWING && ( p= 0 ) ; p ; ) { j = false ; if ( p . equals ( m ) ) { p = null ; j = true } else { var r = p . type == CKEDITOR . NODE _ELEMENT ? p. getName ( ) : null , t = r && p . getAttribute ( "contentEditable" ) == "false" , u= r && p . getAttribute ( "data-nostyle" ) ; if ( r&& p . data ( "cke-bookmark" ) ) { p =
p . getNextSourceNode ( true ) ; continue } if ( t && i&& CKEDITOR . dtd . $block [ r ] ) for ( var s = p , w = c ( s ) , x = void 0 , F = w . length , M = 0 , s = F && new CKEDITOR . dom . range ( s. getDocument ( ) ) ; M < F ; ++ M ) { var x = w [ M ] , X = CKEDITOR . filter . instances [ x . data ( "cke-filter" ) ] ; if ( X? X . check ( this ) : 1 ) { s . selectNodeContents ( x ) ; e . call ( this , s ) } } w = r ? ! k [ r ] || u ? 0 : t && ! i ? 0 : ( p . getPosition ( m ) | Q ) == Q && ( ! g . childRule || g . childRule ( p) ) : 1 ; if ( w ) if ( ( w = p . getParent ( ) ) && ( ( w . getDtd ( ) || CKEDITOR . dtd . span ) [ f ] || h ) && ( ! g . parentRule || g . parentRule ( w ) ) ) { if ( ! q && ( ! r || ! CKEDITOR . dtd . $removeEmpty [ r ] ||
( p. getPosition ( m ) | Q ) == Q ) ) { q = b . clone ( ) ; q . setStartBefore ( p) } r = p . type ; if ( r == CKEDITOR . NODE _TEXT || t || r == CKEDITOR . NODE _ELEMENT && ! p . getChildCount ( ) ) { for ( var r= p , W ; ( j = ! r . getNext ( N ) ) && ( W = r . getParent ( ) , k [ W . getName ( ) ] ) && ( W . getPosition ( l ) | J ) == J && ( ! g . childRule || g . childRule ( W) ) ; ) r = W ; q . setEndAfter ( r ) } } else j = true ; else j = true ; p = p . getNextSourceNode ( u || t ) } if ( j && q && ! q . collapsed ) { for ( var j= o ( this , d ) , t = j . hasAttributes ( ) , u = q . getCommonAncestor ( ) , r = { } , w = { } , x = { } , F = { } , O , T , R ; j && u ; ) { if ( u . getName ( ) == f ) { for ( O in g . attributes ) if ( ! F [ O ] &&
( R= u . getAttribute ( T ) ) ) j . getAttribute ( O ) == R ? w [ O ] = 1 : F [ O ] = 1 ; for ( T in g . styles ) if ( ! x [ T ] && ( R = u . getStyle ( T ) ) ) j . getStyle ( T ) == R ? r [ T ] = 1 : x [ T ] = 1 } u = u . getParent ( ) } for ( O in w) j . removeAttribute ( O ) ; for ( T in r ) j . removeStyle ( T ) ; t && ! j . hasAttributes ( ) && ( j = null ) ; if ( j ) { q . extractContents ( ) . appendTo ( j) ; q . insertNode ( j ) ; y . call ( this , j ) ; j . mergeSiblings ( ) ; CKEDITOR . env . ie || j . $ . normalize ( ) } else { j = new CKEDITOR . dom . element ( "span" ) ; q . extractContents ( ) . appendTo ( j) ; q . insertNode ( j ) ; y . call ( this , j ) ; j . remove ( true ) } q = null } } b . moveToBookmark ( n ) ;
b . shrink ( CKEDITOR . SHRINK _TEXT ) ; b . shrink ( CKEDITOR . NODE _ELEMENT , true ) } } function b ( a ) { function b ( ) { for ( var a = new CKEDITOR . dom . elementPath ( d . getParent ( ) ) , c = new CKEDITOR . dom . elementPath ( i . getParent ( ) ) , e = null , f = null , g = 0 ; g < a . elements . length ; g ++ ) { var h = a . elements [ g ] ; if ( h == a . block || h == a . blockLimit ) break ; p . checkElementRemovable ( h ) && ( e = h ) } for ( g = 0 ; g < c . elements . length ; g ++ ) { h = c . elements [ g ] ; if ( h == c . block || h == c . blockLimit ) break ; p . checkElementRemovable ( h )&& ( f = h ) } f && i . breakParent ( f ) ; e && d . breakParent ( e ) } a . enlarge ( CKEDITOR . ENLARGE _INLINE ,
1 ) ; var c = a . createBookmark ( ) , d = c . startNode ; if ( a . collapsed ) { for ( var e = new CKEDITOR . dom . elementPath ( d . getParent ( ) , a . root ) , f , g = 0 , h ; g < e . elements . length && ( h = e . elements [ g ] ) ; g ++ ) { if ( h == e . block || h == e . blockLimit ) break ; if ( this . checkElementRemovable ( h ) ) { var j ; if ( a . collapsed && ( a . checkBoundaryOfElement ( h , CKEDITOR . END ) || ( j = a . checkBoundaryOfElement ( h , CKEDITOR . START ) ) ) ) { f = h ; f . match = j ? "start" : "end" } else { h . mergeSiblings ( ) ; h . is ( this . element ) ? t. call ( this , h ) : n ( h , k ( this ) [ h . getName ( ) ] ) } } } if ( f ) { h = d ; for ( g = 0 ; ; g ++ ) { j = e . elements [ g ] ;
if ( j . equals ( f ) ) break ; else if ( j. match ) continue ; else j = j . clone ( ) ; j . append ( h ) ; h = j } h [ f . match == "start" ? "insertBefore" : "insertAfter" ] ( f ) } } else { var i= c . endNode , p = this ; b ( ) ; for ( e = d ; ! e . equals ( i ) ; ) { f = e . getNextSourceNode ( ) ; if ( e . type == CKEDITOR . NODE _ELEMENT && this . checkElementRemovable ( e ) ) { e . getName ( ) == this . element ? t. call ( this , e ) : n ( e , k ( this ) [ e . getName ( ) ] ) ; if ( f . type == CKEDITOR . NODE _ELEMENT && f . contains ( d ) ) { b ( ) ; f = d . getNext ( ) } } e = f } } a . moveToBookmark ( c ) ; a . shrink ( CKEDITOR . NODE _ELEMENT , true ) } function c ( a ) { var b = [ ] ; a . forEach ( function ( a ) { if ( a . getAttribute ( "contenteditable" ) ==
"true" ) { b . push ( a ) ; return false } } , CKEDITOR . NODE _ELEMENT , true ) ; return b } function f ( a ) { var b = a . getEnclosedNode ( ) || a . getCommonAncestor ( false , true ) ; ( a = ( new CKEDITOR . dom . elementPath ( b , a . root ) ) . contains ( this . element , 1 ) ) && ! a . isReadOnly ( ) && r ( a , this ) } function d ( a ) { var b = a . getCommonAncestor ( true , true ) ; if ( a = ( new CKEDITOR . dom . elementPath ( b , a . root ) ) . contains ( this . element , 1 ) ) { var b = this . _ . definition , c = b . attributes ; if ( c ) for ( var d in c ) a . removeAttribute ( d , c [ d ] ) ; if ( b . styles ) for ( var e in b . styles ) b . styles . hasOwnProperty ( e ) &&
a . removeStyle ( e ) } } function g ( a ) { var b = a . createBookmark ( true ) , c = a . createIterator ( ) ; c . enforceRealBlocks = true ; if ( this . _ . enterMode ) c . enlargeBr = this . _ . enterMode != CKEDITOR . ENTER _BR ; for ( var d , e = a . document , f ; d = c . getNextParagraph ( ) ; ) if ( ! d . isReadOnly ( ) && ( c . activeFilter ? c . activeFilter . check ( this ) : 1 ) ) { f = o( this , e , d ) ; m ( d , f ) } a . moveToBookmark ( b ) } function h ( a ) { var b = a . createBookmark ( 1 ) , c = a . createIterator ( ) ; c . enforceRealBlocks = true ; c . enlargeBr = this . _ . enterMode != CKEDITOR . ENTER _BR ; for ( var d , e ; d = c . getNextParagraph ( ) ; ) if ( this . checkElementRemovable ( d ) ) if ( d . is ( "pre" ) ) { ( e =
this . _ . enterMode == CKEDITOR . ENTER _BR ? null : a . document . createElement ( this . _ . enterMode == CKEDITOR . ENTER _P ? "p" : "div" ) ) && d . copyAttributes ( e ) ; m( d , e ) } else t . call ( this , d ) ; a . moveToBookmark ( b ) } function m ( a , b ) { var c = ! b ; if ( c ) { b = a . getDocument ( ) . createElement ( "div" ) ; a . copyAttributes ( b ) } var d = b && b . is ( "pre" ) , e = a . is ( "pre" ) , f = ! d && e ; if ( d && ! e ) { e = b ; ( f = a . getBogus ( ) ) && f . remove ( ) ; f = a . getHtml ( ) ; f = p ( f , /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g , "" ) ; f = f . replace ( /[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi , "$1" ) ; f = f . replace ( /([ \t\n\r]+| )/g ,
" " ) ; f = f . replace ( /<br\b[^>]*>/gi , "\n" ) ; if ( CKEDITOR . env . ie ) { var g = a . getDocument ( ) . createElement ( "div" ) ; g . append ( e ) ; e . $ . outerHTML = "<pre>" + f + "</pre>" ; e . copyAttributes ( g. getFirst ( ) ) ; e = g . getFirst ( ) . remove ( ) } else e . setHtml ( f ) ; b = e } else f ? b = u ( c ? [ a . getHtml ( ) ] : j ( a ) , b ) : a . moveChildren ( b ) ; b . replace ( a ) ; if ( d ) { var c = b , h; if ( ( h = c . getPrevious ( F ) ) && h . type == CKEDITOR . NODE _ELEMENT && h . is ( "pre" ) ) { d = p( h . getHtml ( ) , /\n$/ , "" ) + "\n\n" + p ( c . getHtml ( ) , /^\n/ , "" ) ; CKEDITOR . env . ie ? c . $ . outerHTML = "<pre>" + d + "</pre>" : c . setHtml ( d ) ; h . remove ( ) } } else c &&
w( b ) } function j ( a ) { var b = [ ] ; p ( a . getOuterHtml ( ) , /(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi , function ( a , b , c ) { return b + "</pre>" + c + "<pre>" } ) . replace ( /<pre\b.*?>([\s\S]*?)<\/pre>/gi , function ( a , c ) { b . push ( c ) } ) ; return b } function p ( a , b , c ) { var d = "" , e = "" , a = a . replace ( /(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi , function ( a , b , c ) { b && ( d = b ) ; c && ( e = c ) ; return "" } ) ; return d + a . replace ( b , c ) + e } function u ( a , b ) { var c ; a . length > 1 && ( c = new CKEDITOR . dom . documentFragment ( b . getDocument ( ) ) ) ;
for ( var d = 0 ; d < a . length ; d ++ ) { var e = a [ d ] , e = e . replace ( /(\r\n|\r)/g , "\n" ) , e = p ( e , /^[ \t]*\n/ , "" ) , e = p ( e , /\n$/ , "" ) , e = p ( e , /^[ \t]+|[ \t]+$/g , function ( a , b ) { return a . length == 1 ? " " : b ? " " + CKEDITOR . tools . repeat ( " " , a . length - 1 ) : CKEDITOR . tools . repeat ( " " , a . length - 1 ) + " " } ) , e = e . replace ( /\n/g , "<br>" ) , e = e . replace ( /[ \t]{2,}/g , function ( a ) { return CKEDITOR . tools . repeat ( " " , a . length - 1 ) + " " } ) ; if ( c ) { var f = b . clone ( ) ; f . setHtml ( e ) ; c . append ( f ) } else b . setHtml ( e ) } return c || b } function t ( a , b ) { var c = this . _ . definition ,
d = c . attributes , c = c . styles , e = k ( this ) [ a . getName ( ) ] , f = CKEDITOR . tools . isEmpty ( d ) && CKEDITOR . tools . isEmpty ( c ) , g ; for ( g in d ) if ( ! ( ( g == "class" || this . _ . definition . fullMatch ) && a . getAttribute ( g ) != l ( g , d [ g ] ) ) && ! ( b && g . slice ( 0 , 5 ) == "data-" ) ) { f = a . hasAttribute ( g ) ; a . removeAttribute ( g ) } for ( var h in c ) if ( ! ( this . _ . definition . fullMatch && a . getStyle ( h ) != l ( h , c [ h ] , true ) ) ) { f = f || ! ! a . getStyle ( h ) ; a . removeStyle ( h ) } n( a , e , x [ a . getName ( ) ] ) ; f && ( this . _ . definition . alwaysRemoveElement ? w ( a , 1 ) : ! CKEDITOR . dtd . $block [ a . getName ( ) ] || this . _ . enterMode ==
CKEDITOR . ENTER _BR && ! a . hasAttributes ( ) ? w ( a ) : a . renameNode ( this . _ . enterMode == CKEDITOR . ENTER _P ? "p" : "div" ) ) } function y ( a ) { for ( var b = k ( this ) , c = a . getElementsByTag ( this . element ) , d , e = c . count ( ) ; -- e >= 0 ; ) { d = c . getItem ( e ) ; d . isReadOnly ( ) || t . call ( this , d , true ) } for ( var f in b ) if ( f != this . element ) { c = a . getElementsByTag ( f ) ; for ( e = c . count ( ) - 1 ; e >= 0 ; e -- ) { d = c . getItem ( e ) ; d . isReadOnly ( ) || n ( d , b [ f ] ) } } } function n ( a , b , c ) { if ( b = b && b . attributes ) for ( var d = 0 ; d < b . length ; d ++ ) { var e = b [ d ] [ 0 ] , f ; if ( f = a . getAttribute ( e ) ) { var g = b [ d ] [ 1 ] ; ( g === null ||
g . test && g . test ( f ) || typeof g == "string" && f == g ) && a . removeAttribute ( e ) } } c || w( a ) } function w ( a , b ) { if ( ! a . hasAttributes ( ) || b ) if ( CKEDITOR . dtd . $block [ a . getName ( ) ] ) { var c = a . getPrevious ( F) , d = a . getNext ( F ) ; c && ( c . type == CKEDITOR . NODE _TEXT || ! c . isBlockBoundary ( { br : 1 } ) ) && a . append ( "br" , 1 ) ; d && ( d . type == CKEDITOR . NODE _TEXT || ! d . isBlockBoundary ( { br : 1 } ) ) && a . append ( "br" ) ; a . remove ( true ) } else { c = a . getFirst ( ) ; d = a . getLast ( ) ; a . remove ( true ) ; if ( c ) { c . type == CKEDITOR . NODE _ELEMENT && c . mergeSiblings ( ) ; d && ( ! c . equals ( d ) && d . type == CKEDITOR . NODE _ELEMENT ) &&
d . mergeSiblings ( ) } } } function o ( a , b , c ) { var d ; d = a . element ; d == "*" && ( d = "span" ) ; d = new CKEDITOR . dom . element ( d , b ) ; c && c . copyAttributes ( d ) ; d = r ( d , a ) ; b . getCustomData ( "doc_processing_style" ) && d . hasAttribute ( "id" ) ? d . removeAttribute ( "id" ) : b . setCustomData ( "doc_processing_style" , 1 ) ; return d } function r ( a , b ) { var c = b . _ . definition , d = c . attributes , c = CKEDITOR . style . getStyleText ( c ) ; if ( d ) for ( var e in d ) a . setAttribute ( e , d [ e ] ) ; c && a . setAttribute ( "style" , c ) ; return a } function i ( a , b ) { for ( var c in a ) a [ c ] = a [ c ] . replace ( R , function ( a ,
c ) { return b [ c ] } ) } function k ( a ) { if ( a . _ . overrides ) return a . _ . overrides ; var b = a . _ . overrides = { } , c = a . _ . definition . overrides ; if ( c ) { CKEDITOR . tools . isArray ( c ) || ( c = [ c ] ) ; for ( var d = 0 ; d < c . length ; d ++ ) { var e = c [ d ] , f , g ; if ( typeof e == "string" ) f = e . toLowerCase ( ) ; else { f = e . element ? e . element . toLowerCase ( ) : a . element ; g = e . attributes } e = b [ f ] || ( b [ f ] = { } ) ; if ( g ) { var e = e . attributes = e . attributes || [ ] , h ; for ( h in g ) e . push ( [ h . toLowerCase ( ) , g [ h ] ] ) } } } return b } function l ( a , b , c ) { var d = new CKEDITOR . dom . element ( "span" ) ; d [ c ? "setStyle" : "setAttribute" ] ( a ,
b ) ; return d [ c ? "getStyle" : "getAttribute" ] ( a ) } function q ( a , b , c ) { for ( var d = a . document , e = a . getRanges ( ) , b = b ? this . removeFromRange : this . applyToRange , f , g = e . createIterator ( ) ; f = g . getNextRange ( ) ; ) b . call ( this , f , c ) ; a . selectRanges ( e ) ; d . removeCustomData ( "doc_processing_style" ) } var x = { address : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , p : 1 , pre : 1 , section : 1 , header : 1 , footer : 1 , nav : 1 , article : 1 , aside : 1 , figure : 1 , dialog : 1 , hgroup : 1 , time : 1 , meter : 1 , menu : 1 , command : 1 , keygen : 1 , output : 1 , progress : 1 , details : 1 , datagrid : 1 , datalist : 1 } , s =
{ a : 1 , blockquote : 1 , embed : 1 , hr : 1 , img : 1 , li : 1 , object : 1 , ol : 1 , table : 1 , td : 1 , tr : 1 , th : 1 , ul : 1 , dl : 1 , dt : 1 , dd : 1 , form : 1 , audio : 1 , video : 1 } , M = /\s*(?:;\s*|$)/ , R= /#\((.+?)\)/g , N = CKEDITOR . dom . walker . bookmark ( 0 , 1 ) , F = CKEDITOR . dom . walker . whitespaces ( 1 ) ; CKEDITOR . style = function ( a , b ) { if ( typeof a . type == "string" ) return new CKEDITOR . style . customHandlers [ a . type ] ( a ) ; var c = a . attributes ; if ( c && c . style ) { a . styles = CKEDITOR . tools . extend ( { } , a . styles , CKEDITOR . tools . parseCssText ( c . style ) ) ; delete c . style } if ( b ) { a = CKEDITOR . tools . clone ( a ) ; i ( a . attributes ,
b ) ; i ( a . styles , b ) } c = this . element = a . element ? typeof a . element == "string" ? a . element . toLowerCase ( ) : a . element : "*" ; this . type = a . type || ( x [ c ] ? CKEDITOR . STYLE _BLOCK : s [ c ] ? CKEDITOR . STYLE _OBJECT : CKEDITOR . STYLE _INLINE ) ; if ( typeof this . element == "object" ) this . type = CKEDITOR . STYLE _OBJECT ; this . _ = { definition : a } } ; CKEDITOR . style . prototype = { apply : function ( a ) { if ( a instanceof CKEDITOR . dom . document ) return q . call ( this , a . getSelection ( ) ) ; if ( this . checkApplicable ( a . elementPath ( ) , a ) ) { var b = this . _ . enterMode ; if ( ! b ) this . _ . enterMode = a . activeEnterMode ;
q . call ( this , a . getSelection ( ) , 0 , a ) ; this . _ . enterMode = b } } , remove : function ( a ) { if ( a instanceof CKEDITOR . dom . document ) return q . call ( this , a . getSelection ( ) , 1 ) ; if ( this . checkApplicable ( a . elementPath ( ) , a ) ) { var b = this . _ . enterMode ; if ( ! b ) this . _ . enterMode = a . activeEnterMode ; q . call ( this , a . getSelection ( ) , 1 , a ) ; this . _ . enterMode = b } } , applyToRange : function ( a ) { this . applyToRange = this . type == CKEDITOR . STYLE _INLINE ? e : this . type == CKEDITOR . STYLE _BLOCK ? g : this . type == CKEDITOR . STYLE _OBJECT ? f : null ; return this . applyToRange ( a ) } , removeFromRange : function ( a ) { this . removeFromRange =
this . type == CKEDITOR . STYLE _INLINE ? b : this . type == CKEDITOR . STYLE _BLOCK ? h : this . type == CKEDITOR . STYLE _OBJECT ? d : null ; return this . removeFromRange ( a ) } , applyToObject : function ( a ) { r ( a , this ) } , checkActive : function ( a , b ) { switch ( this . type ) { case CKEDITOR . STYLE _BLOCK : return this . checkElementRemovable ( a . block || a . blockLimit , true , b ) ; case CKEDITOR . STYLE _OBJECT : case CKEDITOR . STYLE _INLINE : for ( var c = a . elements , d = 0 , e ; d < c . length ; d ++ ) { e = c [ d ] ; if ( ! ( this . type == CKEDITOR . STYLE _INLINE && ( e == a . block || e == a . blockLimit ) ) ) { if ( this . type ==
b ) : this . removeAttribute ( c ) } } , attachClass : function ( a ) { var b = this . getCustomData ( "classes" ) ; if ( ! this . hasClass ( a ) ) { ! b && ( b = [ ] ) ; b . push ( a ) ; this . setCustomData ( "classes" , b ) ; this . addClass ( a ) } } , changeAttr : function ( a , b ) { var c = this . getAttribute ( a ) ; if ( b !== c ) { ! this . _ . attrChanges && ( this . _ . attrChanges = { } ) ; a in this . _ . attrChanges || ( this . _ . attrChanges [ a ] = c ) ; this . setAttribute ( a , b ) } } , insertHtml : function ( a , b ) { l( this ) ; p ( this , b || "html" , a ) } , insertText : function ( a ) { l ( this ) ; var b = this . editor , c = b . getSelection ( ) . getStartElement ( ) . hasAscendant ( "pre" ,
true ) ? CKEDITOR . ENTER _BR : b . activeEnterMode , b = c == CKEDITOR . ENTER _BR , d = CKEDITOR . tools , a = d . htmlEncode ( a . replace ( /\r\n/g , "\n" ) ) , a = a . replace ( /\t/g , " " ) , c = c == CKEDITOR . ENTER _P ? "p" : "div" ; if ( ! b ) { var e = /\n{2}/g ; if ( e . test ( a ) ) var f = "<" + c + ">" , r = "</" + c + ">" , a = f + a . replace ( e , function ( ) { return r+ f } ) + r } a = a . replace ( /\n/g , "<br>" ) ; b || ( a = a . replace ( RegExp ( "<br>(?=</" + c + ">)" ) , function ( a ) { return d . repeat ( a , 2 ) } ) ) ; a = a . replace ( /^ | $/g , " " ) ; a = a . replace ( /(>|\s) /g , function ( a , b ) { return b + " " } ) . replace ( / (?=<)/g ,
" " ) ; p ( this , "text" , a ) } , insertElement : function ( a , b ) { b ? this . insertElementIntoRange ( a , b ) : this . insertElementIntoSelection ( a ) } , insertElementIntoRange : function ( a , b ) { var c = this . editor , d = c . config . enterMode , e = a . getName ( ) , f = CKEDITOR . dtd . $block [ e ] ; if ( b . checkReadOnly ( ) ) return false ; b . deleteContents ( 1 ) ; b . startContainer . type == CKEDITOR . NODE _ELEMENT && b . startContainer . is ( { tr : 1 , table : 1 , tbody : 1 , thead : 1 , tfoot : 1 } ) && q( b ) ; var r , g ; if ( f ) for ( ; ( r = b . getCommonAncestor ( 0 , 1 ) ) && ( g= CKEDITOR . dtd [ r . getName ( ) ] ) && ( ! g|| ! g [ e ] ) ; ) if ( r . getName ( ) in
CKEDITOR . dtd . span ) b . splitElement ( r ) ; else if ( b . checkStartOfBlock ( ) && b . checkEndOfBlock ( ) ) { b . setStartBefore ( r) ; b . collapse ( true ) ; r . remove ( ) } else b . splitBlock ( d == CKEDITOR . ENTER _DIV ? "div" : "p" , c . editable ( ) ) ; b . insertNode ( a ) ; return true } , insertElementIntoSelection : function ( a ) { l ( this ) ; var b = this . editor , d = b . activeEnterMode , b = b . getSelection ( ) , e = b . getRanges ( ) [ 0 ] , f = a . getName ( ) , f = CKEDITOR . dtd . $block [ f ] ; if ( this . insertElementIntoRange ( a , e ) ) { e . moveToPosition ( a , CKEDITOR . POSITION _AFTER _END ) ; if ( f ) if ( ( f = a . getNext ( function ( a ) { return c ( a ) &&
! m ( a ) } ) ) && f . type == CKEDITOR . NODE _ELEMENT && f . is ( CKEDITOR . dtd . $block ) ) f . getDtd ( ) [ "#" ] ? e . moveToElementEditStart ( f ) : e . moveToElementEditEnd ( a ) ; else if ( ! f && d != CKEDITOR . ENTER _BR ) { f = e . fixBlock ( true , d == CKEDITOR . ENTER _DIV ? "div" : "p" ) ; e . moveToElementEditStart ( f ) } } b . selectRanges ( [ e ] ) ; i ( this ) } , setData : function ( a , b ) { b || ( a = this . editor . dataProcessor . toHtml ( a ) ) ; this . setHtml ( a ) ; this . fixInitialSelection ( ) ; if ( this . status == "unloaded" ) this . status = "ready" ; this . editor . fire ( "dataReady" ) } , getData : function ( a ) { var b = this . getHtml ( ) ;
a || ( b = this . editor . dataProcessor . toDataFormat ( b ) ) ; return b } , setReadOnly : function ( a ) { this . setAttribute ( "contenteditable" , ! a ) } , detach : function ( ) { this . removeClass ( "cke_editable" ) ; this . status = "detached" ; var a = this . editor ; this . _ . detach ( ) ; delete a . document ; delete a . window } , isInline : function ( ) { return this . getDocument ( ) . equals ( CKEDITOR . document ) } , fixInitialSelection : function ( ) { function a ( ) { var b = c . getDocument ( ) . $ , d = b . getSelection ( ) , e ; if ( d . anchorNode && d . anchorNode == c . $ ) e = true ; else if ( CKEDITOR . env . webkit ) { var f =
c . getDocument ( ) . getActive ( ) ; f && ( f . equals ( c ) && ! d . anchorNode ) && ( e = true ) } if ( e ) { e = new CKEDITOR . dom . range ( c ) ; e . moveToElementEditStart ( c ) ; b = b . createRange ( ) ; b . setStart ( e . startContainer . $ , e . startOffset ) ; b . collapse ( true ) ; d . removeAllRanges ( ) ; d . addRange ( b ) } } function b ( ) { var a = c . getDocument ( ) . $ , d = a . selection , e = c . getDocument ( ) . getActive ( ) ; if ( d . type == "None" && e . equals ( c ) ) { d = new CKEDITOR . dom . range ( c ) ; a = a . body . createTextRange ( ) ; d . moveToElementEditStart ( c ) ; d = d . startContainer ; d . type != CKEDITOR . NODE _ELEMENT && ( d = d . getParent ( ) ) ;
a . moveToElementText ( d . $ ) ; a . collapse ( true ) ; a . select ( ) } } var c = this ; if ( CKEDITOR . env . ie && CKEDITOR . env . version < 9 ) { if ( this . hasFocus ) { this . focus ( ) ; b ( ) } } else if ( this . hasFocus ) { this . focus ( ) ; a ( ) } else this . once ( "focus" , function ( ) { a ( ) } , null , null , - 999 ) } , setup : function ( ) { var a = this . editor ; this . attachListener ( a , "beforeGetData" , function ( ) { var b = this . getData ( ) ; this . is ( "textarea" ) || a . config . ignoreEmptyParagraph !== false && ( b = b . replace ( t , function ( a , b ) { return b } ) ) ; a . setData ( b , null , 1 ) } , this ) ; this . attachListener ( a , "getSnapshot" ,
function ( a ) { a . data = this . getData ( 1 ) } , this ) ; this . attachListener ( a , "afterSetData" , function ( ) { this . setData ( a . getData ( 1 ) ) } , this ) ; this . attachListener ( a , "loadSnapshot" , function ( a ) { this . setData ( a . data , 1 ) } , this ) ; this . attachListener ( a , "beforeFocus" , function ( ) { var b = a . getSelection ( ) ; ( b = b && b . getNative ( ) ) && b . type == "Control" || this . focus ( ) } , this ) ; this . attachListener ( a , "insertHtml" , function ( a ) { this . insertHtml ( a . data . dataValue , a . data . mode ) } , this ) ; this . attachListener ( a , "insertElement" , function ( a ) { this . insertElement ( a . data ) } ,
this ) ; this . attachListener ( a , "insertText" , function ( a ) { this . insertText ( a . data ) } , this ) ; this . setReadOnly ( a . readOnly ) ; this . attachClass ( "cke_editable" ) ; this . attachClass ( a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? "cke_editable_inline" : a . elementMode == CKEDITOR . ELEMENT _MODE _REPLACE || a . elementMode == CKEDITOR . ELEMENT _MODE _APPENDTO ? "cke_editable_themed" : "" ) ; this . attachClass ( "cke_contents_" + a . config . contentsLangDirection ) ; a . keystrokeHandler . blockedKeystrokes [ 8 ] = + a . readOnly ; a . keystrokeHandler . attach ( this ) ; this . on ( "blur" ,
function ( ) { this . hasFocus = false } , null , null , - 1 ) ; this . on ( "focus" , function ( ) { this . hasFocus = true } , null , null , - 1 ) ; a . focusManager . add ( this ) ; if ( this . equals ( CKEDITOR . document . getActive ( ) ) ) { this . hasFocus = true ; a . once ( "contentDom" , function ( ) { a . focusManager . focus ( this ) } , this ) } this . isInline ( ) && this . changeAttr ( "tabindex" , a . tabIndex ) ; if ( ! this . is ( "textarea" ) ) { a . document = this . getDocument ( ) ; a . window = this . getWindow ( ) ; var e = a . document ; this . changeAttr ( "spellcheck" , ! a . config . disableNativeSpellChecker ) ; var f = a . config . contentsLangDirection ;
this . getDirection ( 1 ) != f && this . changeAttr ( "dir" , f ) ; var h = CKEDITOR . getCss ( ) ; if ( h ) { f = e . getHead ( ) ; if ( ! f . getCustomData ( "stylesheet" ) ) { h = e . appendStyleText ( h ) ; h = new CKEDITOR . dom . element ( h . ownerNode || h . owningElement ) ; f . setCustomData ( "stylesheet" , h ) ; h . data ( "cke-temp" , 1 ) } } f = e . getCustomData ( "stylesheet_ref" ) || 0 ; e . setCustomData ( "stylesheet_ref" , f + 1 ) ; this . setCustomData ( "cke_includeReadonly" , ! a . config . disableReadonlyStyling ) ; this . attachListener ( this , "click" , function ( a ) { var a = a . data , b = ( new CKEDITOR . dom . elementPath ( a . getTarget ( ) ,
this ) ) . contains ( "a" ) ; b && ( a . $ . button != 2 && b . isReadOnly ( ) ) && a . preventDefault ( ) } ) ; var k = { 8 : 1 , 46 : 1 } ; this . attachListener ( a , "key" , function ( b ) { if ( a . readOnly ) return true ; var c = b . data . domEvent . getKey ( ) , e ; if ( c in k ) { var b = a . getSelection ( ) , f , g = b . getRanges ( ) [ 0 ] , h = g . startPath ( ) , i , m , l , c = c == 8 ; if ( CKEDITOR . env . ie && CKEDITOR . env . version< 11 && ( f = b . getSelectedElement ( ) ) || ( f = d ( b ) ) ) { a . fire ( "saveSnapshot" ) ; g . moveToPosition ( f , CKEDITOR . POSITION _BEFORE _START ) ; f . remove ( ) ; g . select ( ) ; a . fire ( "saveSnapshot" ) ; e = 1 } else if ( g . collapsed ) if ( ( i =
h. block ) && ( l = i [ c ? "getPrevious" : "getNext" ] ( s ) ) && l . type == CKEDITOR . NODE _ELEMENT && l . is ( "table" ) && g [ c ? "checkStartOfBlock" : "checkEndOfBlock" ] ( ) ) { a . fire ( "saveSnapshot" ) ; g [ c ? "checkEndOfBlock" : "checkStartOfBlock" ] ( ) && i . remove ( ) ; g [ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( l ) ; g . select ( ) ; a . fire ( "saveSnapshot" ) ; e = 1 } else if ( h . blockLimit && h . blockLimit . is ( "td" ) && ( m = h . blockLimit . getAscendant ( "table" ) ) && g . checkBoundaryOfElement ( m , c ? CKEDITOR . START : CKEDITOR . END ) && ( l = m [ c ? "getPrevious" : "getNext" ] ( s ) ) ) { a . fire ( "saveSnapshot" ) ;
g[ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( l ) ; g . checkStartOfBlock ( ) && g . checkEndOfBlock ( ) ? l . remove ( ) : g . select ( ) ; a . fire ( "saveSnapshot" ) ; e = 1 } else if ( ( m = h . contains ( [ "td" , "th" , "caption" ] ) ) && g . checkBoundaryOfElement ( m , c ? CKEDITOR . START : CKEDITOR . END ) ) e = 1 } return ! e } ) ; a . blockless && ( CKEDITOR . env . ie && CKEDITOR . env . needsBrFiller ) && this . attachListener ( this , "keyup" , function ( b ) { if ( b . data . getKeystroke ( ) in k && ! this . getFirst ( c ) ) { this . appendBogus ( ) ; b = a . createRange ( ) ; b . moveToPosition ( this , CKEDITOR . POSITION _AFTER _START ) ; b . select ( ) } } ) ;
this . attachListener ( this , " dblclic k", function ( b ) { if ( a . readOnly ) return false ; b = { element : b . data . getTarget ( ) } ; a . fire ( "doubleclick" , b ) } ) ; CKEDITOR . env . ie && this . attachListener ( this , "click" , b ) ; CKEDITOR . env . ie || this . attachListener ( this , "mousedown" , function ( b ) { var c = b . data . getTarget ( ) ; if ( c . is ( "img" , "hr" , "input" , "textarea" , "select" ) && ! c . isReadOnly ( ) ) { a . getSelection ( ) . selectElement ( c ) ; c . is ( "input" , "textarea" , "select" ) && b . data . preventDefault ( ) } } ) ; CKEDITOR . env . gecko && this . attachListener ( this , "mouseup" , function ( b ) { if ( b . data . $ . button ==
2 ) { b = b . data . getTarget ( ) ; if ( ! b . getOuterHtml ( ) . replace ( t , "" ) ) { var c = a . createRange ( ) ; c . moveToElementEditStart ( b ) ; c . select ( true ) } } } ) ; if ( CKEDITOR . env . webkit ) { this . attachListener ( this , "click" , function ( a ) { a . data . getTarget ( ) . is ( "input" , "select" ) && a . data . preventDefault ( ) } ) ; this . attachListener ( this , "mouseup" , function ( a ) { a . data . getTarget ( ) . is ( "input" , "textarea" ) && a . data . preventDefault ( ) } ) } CKEDITOR . env . webkit && this . attachListener ( a , "key" , function ( b ) { b = b . data . domEvent . getKey ( ) ; if ( b in k ) { var c = b == 8 , d = a . getSelection ( ) . getRanges ( ) [ 0 ] ,
b= d . startPath ( ) ; if ( d . collapsed ) { var e ; a : { var f = b . block ; if ( f ) if ( d [ c ? "checkStartOfBlock" : "checkEndOfBlock" ] ( ) ) if ( ! d . moveToClosestEditablePosition ( f , ! c ) || ! d . collapsed ) e = false ; else { if ( d . startContainer . type == CKEDITOR . NODE _ELEMENT ) { var h = d . startContainer . getChild ( d . startOffset - ( c ? 1 : 0 ) ) ; if ( h && h . type == CKEDITOR . NODE _ELEMENT && h . is ( "hr" ) ) { a . fire ( "saveSnapshot" ) ; h . remove ( ) ; e = true ; break a } } if ( ( d = d . startPath ( ) . block ) && ( ! d || ! d . contains ( f ) ) ) { a . fire ( "saveSnapshot" ) ; var i ; ( i = ( c ? d : f ) . getBogus ( ) ) && i . remove ( ) ; e = a . getSelection ( ) ;
i= e . createBookmarks ( ) ; ( c ? f : d ) . moveChildren ( c ? d : f , false ) ; b . lastElement . mergeSiblings ( ) ; g ( f , d , ! c ) ; e . selectBookmarks ( i ) ; e = true } } else e = false ; else e = false } if ( ! e ) return } else { c = d ; e = b . block ; i = c . endPath ( ) . block ; if ( ! e || ! i || e . equals ( i ) ) b = false ; else { a . fire ( "saveSnapshot" ) ; ( f = e . getBogus ( ) ) && f . remove ( ) ; c . deleteContents ( ) ; if ( i . getParent ( ) ) { i . moveChildren ( e , false ) ; b . lastElement . mergeSiblings ( ) ; g ( e , i , true ) } c = a . getSelection ( ) . getRanges ( ) [ 0 ] ; c . collapse ( 1 ) ; c . select ( ) ; b = true } if ( ! b ) return } a . getSelection ( ) . scrollIntoView ( ) ;
a. fire ( "saveSnapshot" ) ; return false } } , this , null , 100 ) } } } , _ : { detach : function ( ) { this . editor . setData ( this . editor . getData ( ) , 0 , 1 ) ; this . clearListeners ( ) ; this . restoreAttrs ( ) ; var a ; if ( a = this . removeCustomData ( "classes" ) ) for ( ; a . length ; ) this . removeClass ( a . pop ( ) ) ; if ( ! this . is ( "textarea" ) ) { a = this . getDocument ( ) ; var b = a . getHead ( ) ; if ( b . getCustomData ( "stylesheet" ) ) { var c = a . getCustomData ( "stylesheet_ref" ) ; if ( -- c ) a . setCustomData ( "stylesheet_ref" , c ) ; else { a . removeCustomData ( "stylesheet_ref" ) ; b . removeCustomData ( "stylesheet" ) . remove ( ) } } } this . editor . fire ( "contentDomUnload" ) ;
delete this . editor } } } ) ; CKEDITOR . editor . prototype . editable = function ( a ) { var b = this . _ . editable ; if ( b && a ) return 0 ; if ( arguments . length ) b = this . _ . editable = a ? a instanceof CKEDITOR . editable ? a : new CKEDITOR . editable ( this , a ) : ( b && b . detach ( ) , null ) ; return b } ; var m = CKEDITOR . dom . walker . bogus ( ) , t = /(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi , s = CKEDITOR . dom . walker . whitespaces ( true ) , y = CKEDITOR . dom . walker . bookmark ( false , true ) ; CKEDITOR . on ( "instanceLoaded" ,
function ( b ) { var c = b . editor ; c . on ( "insertElement" , function ( a ) { a = a . data ; if ( a . type == CKEDITOR . NODE _ELEMENT && ( a . is ( "input" ) || a . is ( "textarea" ) ) ) { a . getAttribute ( "contentEditable" ) != "false" && a . data ( "cke-editable" , a . hasAttribute ( "contenteditable" ) ? "true" : "1" ) ; a . setAttribute ( "contentEditable" , false ) } } ) ; c . on ( "selectionChange" , function ( b ) { if ( ! c . readOnly ) { var d = c . getSelection ( ) ; if ( d && ! d . isLocked ) { d = c . checkDirty ( ) ; c . fire ( "lockSnapshot" ) ; a ( b ) ; c . fire ( "unlockSnapshot" ) ; ! d && c . resetDirty ( ) } } } ) } ) ; CKEDITOR . on ( "instanceCreated" ,
function ( a ) { var b = a . editor ; b . on ( "mode" , function ( ) { var a = b . editable ( ) ; if ( a && a . isInline ( ) ) { var c = b . title ; a . changeAttr ( "role" , "textbox" ) ; a . changeAttr ( "aria-label" , c ) ; c && a . changeAttr ( "title" , c ) ; var d = b . fire ( "ariaEditorHelpLabel" , { } ) . label ; if ( d ) if ( c = this . ui . space ( this . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? "top" : "contents" ) ) { var e = CKEDITOR . tools . getNextId ( ) , d = CKEDITOR . dom . element . createFromHtml ( '<span id="' + e + '" class="cke_voice_label">' + d + "</span>" ) ; c . append ( d ) ; a . changeAttr ( "aria-describedby" , e ) } } } ) } ) ;
CKEDITOR. addCss ( ".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}" ) ; var p = function ( ) { function a ( b ) { return b . type == CKEDITOR . NODE _ELEMENT } function b ( c , d ) { var e , f , k , n , h = [ ] , i = d . range . startContainer ; e = d . range . startPath ( ) ; for ( var i = g [ i . getName ( ) ] , o = 0 , l = c . getChildren ( ) , m = l . count ( ) , D = - 1 , p = - 1 , M = 0 , s = e . contains ( g . $list ) ; o < m ; ++ o ) { e = l . getItem ( o ) ; if ( a ( e ) ) { k = e . getName ( ) ; if ( s && k in CKEDITOR . dtd . $list ) h = h . concat ( b ( e , d ) ) ; else { n = ! ! i [ k ] ; if ( k == "br" && e . data ( "cke-eol" ) &&
( ! o || o == m - 1 ) ) { M = ( f = o ? h [ o - 1 ] . node : l . getItem ( o + 1 ) ) && ( ! a ( f ) || ! f . is ( "br" ) ) ; f = f && a ( f ) && g . $block [ f . getName ( ) ] } D == - 1 && ! n && ( D = o ) ; n || ( p = o ) ; h . push ( { isElement : 1 , isLineBreak : M , isBlock : e . isBlockBoundary ( ) , hasBlockSibling : f , node : e , name : k , allowed : n } ) ; f = M = 0 } } else h . push ( { isElement : 0 , node : e , allowed : 1 } ) } if ( D > - 1 ) h [ D ] . firstNotAllowed = 1 ; if ( p > - 1 ) h [ p ] . lastNotAllowed = 1 ; return h } function d ( b , c ) { var e = [ ] , f = b . getChildren ( ) , k = f . count ( ) , n , h = 0 , i = g [ c ] , o = ! b . is ( g . $inline ) || b . is ( "br" ) ; for ( o && e . push ( " " ) ; h < k ; h ++ ) { n = f . getItem ( h ) ; a ( n ) &&
! n . is ( i ) ? e = e . concat ( d ( n , c ) ) : e . push ( n ) } o && e . push ( " " ) ; return e } function e ( b ) { return b && a ( b ) && ( b . is ( g . $removeEmpty ) || b . is ( "a" ) && ! b . isBlockBoundary ( ) ) } function f ( b , c , d , e ) { var n = b . clone ( ) , g , h ; n . setEndAt ( c , CKEDITOR . POSITION _BEFORE _END ) ; if ( ( g = ( new CKEDITOR . dom . walker ( n ) ) . next ( ) ) && a ( g ) && o [ g . getName ( ) ] && ( h = g . getPrevious ( ) ) && a ( h ) && ! h . getParent ( ) . equals ( b . startContainer ) && d . contains ( h ) && e . contains ( g ) && g . isIdentical ( h ) ) { g . moveChildren ( h ) ; g . remove ( ) ; f ( b , c , d , e ) } } function n ( b , c ) { function d ( b , c ) { if ( c . isBlock && c . isElement &&
! c . node . is ( "br" ) && a ( b ) && b . is ( "br" ) ) { b . remove ( ) ; return 1 } } var e = c . endContainer . getChild ( c . endOffset ) , f = c . endContainer . getChild ( c . endOffset - 1 ) ; e && d ( e , b [ b . length - 1 ] ) ; if ( f && d ( f , b [ 0 ] ) ) { c . setEnd ( c . endContainer , c . endOffset - 1 ) ; c . collapse ( ) } } var g = CKEDITOR . dtd , o = { p : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , ul : 1 , ol : 1 , li : 1 , pre : 1 , dl : 1 , blockquote : 1 } , l = { p : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 } , m = CKEDITOR . tools . extend ( { } , g . $inline ) ; delete m . br ; return function ( o , z , p ) { var B = o . editor , w = B . getSelection ( ) . getRanges ( ) [ 0 ] ,
H= false ; if ( z == "unfiltered_html" ) { z = "html" ; H = true } if ( ! w . checkReadOnly ( ) ) { var C = ( new CKEDITOR . dom . elementPath ( w . startContainer , w . root ) ) . blockLimit || w . root , z = { type : z , dontFilter : H , editable : o , editor : B , range : w , blockLimit : C , mergeCandidates : [ ] , zombies : [ ] } , B = z . range , H = z . mergeCandidates , A , x , F , G ; if ( z . type == "text" && B . shrink ( CKEDITOR . SHRINK _ELEMENT , true , false ) ) { A = CKEDITOR . dom . element . createFromHtml ( "<span> </span>" , B . document ) ; B . insertNode ( A ) ; B . setStartAfter ( A ) } x = new CKEDITOR . dom . elementPath ( B . startContainer ) ;
z. endPath = F = new CKEDITOR . dom . elementPath ( B . endContainer ) ; if ( ! B . collapsed ) { var C = F . block || F . blockLimit , s = B . getCommonAncestor ( ) ; C && ( ! C . equals ( s ) && ! C . contains ( s ) && B . checkEndOfBlock ( ) ) && z . zombies . push ( C ) ; B . deleteContents ( ) } for ( ; ( G = a ( B . startContainer ) && B . startContainer . getChild ( B . startOffset - 1 ) ) && a ( G ) && G . isBlockBoundary ( ) && x . contains ( G ) ; ) B . moveToPosition ( G , CKEDITOR . POSITION _BEFORE _END ) ; f ( B , z . blockLimit , x , F ) ; if ( A ) { B . setEndBefore ( A ) ; B . collapse ( ) ; A . remove ( ) } A = B . startPath ( ) ; if ( C = A . contains ( e , false , 1 ) ) { B . splitElement ( C ) ;
z . inlineStylesRoot = C ; z . inlineStylesPeak = A . lastElement } A = B . createBookmark ( ) ; ( C = A . startNode . getPrevious ( c ) ) && a ( C ) && e ( C ) && H . push ( C ) ; ( C = A . startNode . getNext ( c ) ) && a ( C ) && e ( C ) && H . push ( C ) ; for ( C = A . startNode ; ( C = C . getParent ( ) ) && e ( C ) ; ) H . push ( C ) ; B . moveToBookmark ( A ) ; if ( A = p ) { A = z . range ; if ( z . type == "text" && z . inlineStylesRoot ) { G = z . inlineStylesPeak ; B = G . getDocument ( ) . createText ( "{cke-peak}" ) ; for ( H = z . inlineStylesRoot . getParent ( ) ; ! G . equals ( H ) ; ) { B = B . appendTo ( G . clone ( ) ) ; G = G . getParent ( ) } p = B . getOuterHtml ( ) . split ( "{cke-peak}" ) . join ( p ) } G =
z . blockLimit . getName ( ) ; if ( /^\s+|\s+$/ . test ( p ) && "span" in CKEDITOR . dtd [ G ] ) var y = '<span data-cke-marker="1"> </span>' , p = y + p + y ; p = z . editor . dataProcessor . toHtml ( p , { context : null , fixForBody : false , dontFilter : z . dontFilter , filter : z . editor . activeFilter , enterMode : z . editor . activeEnterMode } ) ; G = A . document . createElement ( "body" ) ; G . setHtml ( p ) ; if ( y ) { G . getFirst ( ) . remove ( ) ; G . getLast ( ) . remove ( ) } if ( ( y = A . startPath ( ) . block ) && ! ( y . getChildCount ( ) == 1 && y . getBogus ( ) ) ) a : { var t ; if ( G . getChildCount ( ) == 1 && a ( t = G . getFirst ( ) ) && t . is ( l ) ) { y =
t . getElementsByTag ( "*" ) ; A = 0 ; for ( H = y . count ( ) ; A < H ; A ++ ) { B = y . getItem ( A ) ; if ( ! B . is ( m ) ) break a } t . moveChildren ( t . getParent ( 1 ) ) ; t . remove ( ) } } z . dataWrapper = G ; A = p } if ( A ) { t = z . range ; var y = t . document , q , p = z . blockLimit ; A = 0 ; var K ; G = [ ] ; var I , Q , H = B = 0 , N , S ; x = t . startContainer ; var C = z . endPath . elements [ 0 ] , T ; F = C . getPosition ( x ) ; s = ! ! C . getCommonAncestor ( x ) && F != CKEDITOR . POSITION _IDENTICAL && ! ( F & CKEDITOR . POSITION _CONTAINS + CKEDITOR . POSITION _IS _CONTAINED ) ; x = b ( z . dataWrapper , z ) ; for ( n ( x , t ) ; A < x . length ; A ++ ) { F = x [ A ] ; if ( q = F . isLineBreak ) { q =
t; N = p ; var P = void 0 , V = void 0 ; if ( F . hasBlockSibling ) q = 1 ; else { P = q . startContainer . getAscendant ( g . $block , 1 ) ; if ( ! P || ! P . is ( { div : 1 , p : 1 } ) ) q = 0 ; else { V = P . getPosition ( N ) ; if ( V == CKEDITOR . POSITION _IDENTICAL || V == CKEDITOR . POSITION _CONTAINS ) q = 0 ; else { N = q . splitElement ( P ) ; q . moveToPosition ( N , CKEDITOR . POSITION _AFTER _START ) ; q = 1 } } } } if ( q ) H = A > 0 ; else { q = t . startPath ( ) ; if ( ! F . isBlock && h ( z . editor , q . block , q . blockLimit ) && ( Q = z . editor . activeEnterMode != CKEDITOR . ENTER _BR && z . editor . config . autoParagraph !== false ? z . editor . activeEnterMode == CKEDITOR . ENTER _DIV ?
"div" : "p" : false ) ) { Q = y . createElement ( Q ) ; Q . appendBogus ( ) ; t . insertNode ( Q ) ; CKEDITOR . env . needsBrFiller && ( K = Q . getBogus ( ) ) && K . remove ( ) ; t . moveToPosition ( Q , CKEDITOR . POSITION _BEFORE _END ) } if ( ( q = t . startPath ( ) . block ) && ! q . equals ( I ) ) { if ( K = q . getBogus ( ) ) { K . remove ( ) ; G . push ( q ) } I = q } F . firstNotAllowed && ( B = 1 ) ; if ( B && F . isElement ) { q = t . startContainer ; for ( N = null ; q && ! g [ q . getName ( ) ] [ F . name ] ; ) { if ( q . equals ( p ) ) { q = null ; break } N = q ; q = q . getParent ( ) } if ( q ) { if ( N ) { S = t . splitElement ( N ) ; z . zombies . push ( S ) ; z . zombies . push ( N ) } } else { N = p . getName ( ) ;
T= ! A ; q = A == x . length - 1 ; N = d ( F . node , N ) ; for ( var P = [ ] , V = N . length , W = 0 , Y = void 0 , Z = 0 , U = - 1 ; W < V ; W ++ ) { Y = N [ W ] ; if ( Y == " " ) { if ( ! Z && ( ! T || W ) ) { P . push ( new CKEDITOR . dom . text ( " " ) ) ; U = P . length } Z = 1 } else { P . push ( Y ) ; Z = 0 } } q && U == P . length && P . pop ( ) ; T = P } } if ( T ) { for ( ; q = T . pop ( ) ; ) t . insertNode ( q ) ; T = 0 } else t . insertNode ( F . node ) ; if ( F . lastNotAllowed && A < x . length - 1 ) { ( S = s ? C : S ) && t . setEndAt ( S , CKEDITOR . POSITION _AFTER _START ) ; B = 0 } t . collapse ( ) } } z . dontMoveCaret = H ; z . bogusNeededBlocks = G } K = z . range ; var O ; S = z . bogusNeededBlocks ; for ( T = K . createBookmark ( ) ; I =
z. zombies . pop ( ) ; ) if ( I . getParent ( ) ) { Q = K . clone ( ) ; Q . moveToElementEditStart ( I ) ; Q . removeEmptyBlocksAtEnd ( ) } if ( S ) for ( ; I = S . pop ( ) ; ) CKEDITOR . env . needsBrFiller ? I . appendBogus ( ) : I . append ( K . document . createText ( " " ) ) ; for ( ; I = z . mergeCandidates . pop ( ) ; ) I . mergeSiblings ( ) ; K . moveToBookmark ( T ) ; if ( ! z . dontMoveCaret ) { for ( I = a ( K . startContainer ) && K . startContainer . getChild ( K . startOffset - 1 ) ; I && a ( I ) && ! I . is ( g . $empty ) ; ) { if ( I . isBlockBoundary ( ) ) K . moveToPosition ( I , CKEDITOR . POSITION _BEFORE _END ) ; else { if ( e ( I ) && I . getHtml ( ) . match ( /(\s| )$/g ) ) { O =
null ; break } O = K . clone ( ) ; O . moveToPosition ( I , CKEDITOR . POSITION _BEFORE _END ) } I = I . getLast ( c ) } O && K . moveToRange ( O ) } w . select ( ) ; i ( o ) } } } ( ) , q = function ( ) { function a ( b ) { b = new CKEDITOR . dom . walker ( b ) ; b . guard = function ( a , b ) { if ( b ) return false ; if ( a . type == CKEDITOR . NODE _ELEMENT ) return a . is ( CKEDITOR . dtd . $tableContent ) } ; b . evaluator = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT } ; return b } function b ( a , c , d ) { c = a . getDocument ( ) . createElement ( c ) ; a . append ( c , d ) ; return c } function c ( a ) { var b = a . count ( ) , d ; for ( b ; b -- > 0 ; ) { d = a . getItem ( b ) ;
if ( ! CKEDITOR . tools . trim ( d . getHtml ( ) ) ) { d . appendBogus ( ) ; CKEDITOR . env . ie && ( CKEDITOR . env . version < 9 && d . getChildCount ( ) ) && d . getFirst ( ) . remove ( ) } } } return function ( d ) { var e = d . startContainer , f = e . getAscendant ( "table" , 1 ) , g = false ; c ( f . getElementsByTag ( "td" ) ) ; c ( f . getElementsByTag ( "th" ) ) ; f = d . clone ( ) ; f . setStart ( e , 0 ) ; f = a ( f ) . lastBackward ( ) ; if ( ! f ) { f = d . clone ( ) ; f . setEndAt ( e , CKEDITOR . POSITION _BEFORE _END ) ; f = a ( f ) . lastForward ( ) ; g = true } f || ( f = e ) ; if ( f . is ( "table" ) ) { d . setStartAt ( f , CKEDITOR . POSITION _BEFORE _START ) ; d . collapse ( true ) ;
f . remove ( ) } else { f . is ( { tbody : 1 , thead : 1 , tfoot : 1 } ) && ( f = b ( f , "tr" , g ) ) ; f . is ( "tr" ) && ( f = b ( f , f . getParent ( ) . is ( "thead" ) ? "th" : "td" , g ) ) ; ( e = f . getBogus ( ) ) && e . remove ( ) ; d . moveToPosition ( f , g ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _BEFORE _END ) } } } ( ) } ) ( ) ;
( function ( ) { function a ( ) { var a = this . _ . fakeSelection , b ; if ( a ) { b = this . getSelection ( 1 ) ; if ( ! b || ! b . isHidden ( ) ) { a . reset ( ) ; a = 0 } } if ( ! a ) { a = b || this . getSelection ( 1 ) ; if ( ! a || a . getType ( ) == CKEDITOR . SELECTION _NONE ) return } this . fire ( "selectionCheck" , a ) ; b = this . elementPath ( ) ; if ( ! b . compare ( this . _ . selectionPreviousPath ) ) { if ( CKEDITOR . env . webkit ) this . _ . previousActive = this . document . getActive ( ) ; this . _ . selectionPreviousPath = b ; this . fire ( "selectionChange" , { selection : a , path : b } ) } } function e ( ) { p = true ; if ( ! y ) { b . call ( this ) ; y = CKEDITOR . tools . setTimeout ( b ,
200 , this ) } } function b ( ) { y = null ; if ( p ) { CKEDITOR . tools . setTimeout ( a , 0 , this ) ; p = false } } function c ( a ) { return q ( a ) || a . type == CKEDITOR . NODE _ELEMENT && ! a . is ( CKEDITOR . dtd . $empty ) ? true : false } function f ( a ) { function b ( c , d ) { return ! c || c . type == CKEDITOR . NODE _TEXT ? false : a . clone ( ) [ "moveToElementEdit" + ( d ? "End" : "Start" ) ] ( c ) } if ( ! ( a . root instanceof CKEDITOR . editable ) ) return false ; var d = a . startContainer , e = a . getPreviousNode ( c , null , d ) , f = a . getNextNode ( c , null , d ) ; return b ( e ) || b ( f , 1 ) || ! e && ! f && ! ( d . type == CKEDITOR . NODE _ELEMENT && d . isBlockBoundary ( ) &&
d. getBogus ( ) ) ? true : false } function d ( a ) { return a . getCustomData ( "cke-fillingChar" ) } function h ( a , b ) { var c = a && a . removeCustomData ( "cke-fillingChar" ) ; if ( c ) { if ( b !== false ) { var d , e = a . getDocument ( ) . getSelection ( ) . getNative ( ) , f = e && e . type != "None" && e . getRangeAt ( 0 ) ; if ( c . getLength ( ) > 1 && f && f . intersectsNode ( c . $ ) ) { d = i ( e ) ; f = e . focusNode == c . $ && e . focusOffset > 0 ; e . anchorNode == c . $ && e . anchorOffset > 0 && d [ 0 ] . offset -- ; f && d [ 1 ] . offset -- } } c . setText ( l ( c . getText ( ) ) ) ; d && g ( a . getDocument ( ) . $ , d ) } } function l ( a ) { return a . replace ( /\u200B( )?/g ,
function ( a ) { return a [ 1 ] ? " " : "" } ) } function i ( a ) { return [ { node : a . anchorNode , offset : a . anchorOffset } , { node : a . focusNode , offset : a . focusOffset } ] } function g ( a , b ) { var c = a . getSelection ( ) , d = a . createRange ( ) ; d . setStart ( b [ 0 ] . node , b [ 0 ] . offset ) ; d . collapse ( true ) ; c . removeAllRanges ( ) ; c . addRange ( d ) ; c . extend ( b [ 1 ] . node , b [ 1 ] . offset ) } function m ( a ) { var b = CKEDITOR . dom . element . createFromHtml ( '<div data-cke-hidden-sel="1" data-cke-temp="1" style="' + ( CKEDITOR . env . ie ? "display:none" : "position:fixed;top:0;left:-1000px" ) + '"> </div>' ,
a . document ) ; a . fire ( "lockSnapshot" ) ; a . editable ( ) . append ( b ) ; var c = a . getSelection ( 1 ) , d = a . createRange ( ) , e = c . root . on ( "selectionchange" , function ( a ) { a . cancel ( ) } , null , null , 0 ) ; d . setStartAt ( b , CKEDITOR . POSITION _AFTER _START ) ; d . setEndAt ( b , CKEDITOR . POSITION _BEFORE _END ) ; c . selectRanges ( [ d ] ) ; e . removeListener ( ) ; a . fire ( "unlockSnapshot" ) ; a . _ . hiddenSelectionContainer = b } function t ( a ) { var b = { 37 : 1 , 39 : 1 , 8 : 1 , 46 : 1 } ; return function ( c ) { var d = c . data . getKeystroke ( ) ; if ( b [ d ] ) { var e = a . getSelection ( ) . getRanges ( ) , f = e [ 0 ] ; if ( e . length ==
1 && f . collapsed ) if ( ( d = f [ d < 38 ? "getPreviousEditableNode" : "getNextEditableNode" ] ( ) ) && d . type == CKEDITOR . NODE _ELEMENT && d . getAttribute ( "contenteditable" ) == "false" ) { a . getSelection ( ) . fake ( d ) ; c . data . preventDefault ( ) ; c . cancel ( ) } } } } function s ( a ) { for ( var b = 0 ; b < a . length ; b ++ ) { var c = a [ b ] ; c . getCommonAncestor ( ) . isReadOnly ( ) && a . splice ( b , 1 ) ; if ( ! c . collapsed ) { if ( c . startContainer . isReadOnly ( ) ) for ( var d = c . startContainer , e ; d ; ) { if ( ( e = d . type == CKEDITOR . NODE _ELEMENT ) && d . is ( "body" ) || ! d . isReadOnly ( ) ) break ; e && d . getAttribute ( "contentEditable" ) ==
"false" && c . setStartAfter ( d ) ; d = d . getParent ( ) } d = c . startContainer ; e = c . endContainer ; var f = c . startOffset , g = c . endOffset , h = c . clone ( ) ; d && d . type == CKEDITOR . NODE _TEXT && ( f >= d . getLength ( ) ? h . setStartAfter ( d ) : h . setStartBefore ( d ) ) ; e && e . type == CKEDITOR . NODE _TEXT && ( g ? h . setEndAfter ( e ) : h . setEndBefore ( e ) ) ; d = new CKEDITOR . dom . walker ( h ) ; d . evaluator = function ( d ) { if ( d . type == CKEDITOR . NODE _ELEMENT && d . isReadOnly ( ) ) { var e = c . clone ( ) ; c . setEndBefore ( d ) ; c . collapsed && a . splice ( b -- , 1 ) ; if ( ! ( d . getPosition ( h . endContainer ) & CKEDITOR . POSITION _CONTAINS ) ) { e . setStartAfter ( d ) ;
e . collapsed || a . splice ( b + 1 , 0 , e ) } return true } return false } ; d . next ( ) } } return a } var y , p , q = CKEDITOR . dom . walker . invisible ( 1 ) , j = function ( ) { function a ( b ) { return function ( a ) { var c = a . editor . createRange ( ) ; c . moveToClosestEditablePosition ( a . selected , b ) && a . editor . getSelection ( ) . selectRanges ( [ c ] ) ; return false } } function b ( a ) { return function ( b ) { var c = b . editor , d = c . createRange ( ) , e ; if ( ! ( e = d . moveToClosestEditablePosition ( b . selected , a ) ) ) e = d . moveToClosestEditablePosition ( b . selected , ! a ) ; e && c . getSelection ( ) . selectRanges ( [ d ] ) ;
c. fire ( "saveSnapshot" ) ; b . selected . remove ( ) ; if ( ! e ) { d . moveToElementEditablePosition ( c . editable ( ) ) ; c . getSelection ( ) . selectRanges ( [ d ] ) } c . fire ( "saveSnapshot" ) ; return false } } var c = a ( ) , d = a ( 1 ) ; return { 37 : c , 38 : c , 39 : d , 40 : d , 8 : b ( ) , 46 : b ( 1 ) } } ( ) ; CKEDITOR . on ( "instanceCreated" , function ( b ) { function c ( ) { var a = d . getSelection ( ) ; a && a . removeAllRanges ( ) } var d = b . editor ; d . on ( "contentDom" , function ( ) { function b ( ) { C = new CKEDITOR . dom . selection ( d . getSelection ( ) ) ; C . lock ( ) } function c ( ) { g . removeListener ( "mouseup" , c ) ; n . removeListener ( "mouseup ",
c ) ; var a = CKEDITOR . document . $ . selection , b = a . createRange ( ) ; a . type != "None" && b . parentElement ( ) . ownerDocument == f . $ && b . select ( ) } var f = d . document , g = CKEDITOR . document , k = d . editable ( ) , i = f . getBody ( ) , n = f . getDocumentElement ( ) , w = k . isInline ( ) , j , C ; CKEDITOR . env . gecko && k . attachListener ( k , "focus" , function ( a ) { a . removeListener ( ) ; if ( j !== 0 ) if ( ( a = d . getSelection ( ) . getNative ( ) ) && a . isCollapsed && a . anchorNode == k . $ ) { a = d . createRange ( ) ; a . moveToElementEditStart ( k ) ; a . select ( ) } } , null , null , - 2 ) ; k . attachListener ( k , CKEDITOR . env . webkit ?
"DOMFocusIn" : "focus" , function ( ) { j && CKEDITOR . env . webkit && ( j = d . _ . previousActive && d . _ . previousActive . equals ( f . getActive ( ) ) ) ; d . unlockSelection ( j ) ; j = 0 } , null , null , - 1 ) ; k . attachListener ( k , "mousedown" , function ( ) { j = 0 } ) ; if ( CKEDITOR . env . ie || w ) { u ? k . attachListener ( k , "beforedeactivate" , b , null , null , - 1 ) : k . attachListener ( d , "selectionCheck" , b , null , null , - 1 ) ; k . attachListener ( k , CKEDITOR . env . webkit ? "DOMFocusOut" : "blur" , function ( ) { d . lockSelection ( C ) ; j = 1 } , null , null , - 1 ) ; k . attachListener ( k , "mousedown" , function ( ) { j = 0 } ) } if ( CKEDITOR . env . ie &&
! w ) { var A ; k . attachListener ( k , "mousedown" , function ( a ) { if ( a . data . $ . button == 2 ) { a = d . document . getSelection ( ) ; if ( ! a || a . getType ( ) == CKEDITOR . SELECTION _NONE ) A = d . window . getScrollPosition ( ) } } ) ; k . attachListener ( k , "mouseup" , function ( a ) { if ( a . data . $ . button == 2 && A ) { d . document . $ . documentElement . scrollLeft = A . x ; d . document . $ . documentElement . scrollTop = A . y } A = null } ) ; if ( f . $ . compatMode != "BackCompat" ) { if ( CKEDITOR . env . ie7Compat || CKEDITOR . env . ie6Compat ) n . on ( "mousedown" , function ( a ) { function b ( a ) { a = a . data . $ ; if ( d ) { var c = i . $ . createTextRange ( ) ;
try { c . moveToPoint ( a . clientX , a . clientY ) } catch ( e ) { } d . setEndPoint ( f . compareEndPoints ( "StartToStart" , c ) < 0 ? "EndToEnd" : "StartToStart" , c ) ; d . select ( ) } } function c ( ) { n . removeListener ( "mousemove" , b ) ; g . removeListener ( "mouseup" , c ) ; n . removeListener ( "mouseup" , c ) ; d . select ( ) } a = a . data ; if ( a . getTarget ( ) . is ( "html" ) && a . $ . y < n . $ . clientHeight && a . $ . x < n . $ . clientWidth ) { var d = i . $ . createTextRange ( ) ; try { d . moveToPoint ( a . $ . clientX , a . $ . clientY ) } catch ( e ) { } var f = d . duplicate ( ) ; n . on ( "mousemove" , b ) ; g . on ( "mouseup" , c ) ; n . on ( "mouseup" , c ) } } ) ;
if ( CKEDITOR . env . version > 7 && CKEDITOR . env . version < 11 ) n . on ( "mousedown" , function ( a ) { if ( a . data . getTarget ( ) . is ( "html" ) ) { g . on ( "mouseup" , c ) ; n . on ( "mouseup" , c ) } } ) } } k . attachListener ( k , "selectionchange" , a , d ) ; k . attachListener ( k , "keyup" , e , d ) ; k . attachListener ( k , CKEDITOR . env . webkit ? "DOMFocusIn" : "focus" , function ( ) { d . forceNextSelectionCheck ( ) ; d . selectionChange ( 1 ) } ) ; if ( w && ( CKEDITOR . env . webkit || CKEDITOR . env . gecko ) ) { var x ; k . attachListener ( k , "mousedown" , function ( ) { x = 1 } ) ; k . attachListener ( f . getDocumentElement ( ) , "mouseup" ,
function ( ) { x && e . call ( d ) ; x = 0 } ) } else k . attachListener ( CKEDITOR . env . ie ? k : f . getDocumentElement ( ) , "mouseup" , e , d ) ; CKEDITOR . env . webkit && k . attachListener ( f , "keydown" , function ( a ) { switch ( a . data . getKey ( ) ) { case 13 : case 33 : case 34 : case 35 : case 36 : case 37 : case 39 : case 8 : case 45 : case 46 : h ( k ) } } , null , null , - 1 ) ; k . attachListener ( k , "keydown" , t ( d ) , null , null , - 1 ) } ) ; d . on ( "setData" , function ( ) { d . unlockSelection ( ) ; CKEDITOR . env . webkit && c ( ) } ) ; d . on ( "contentDomUnload" , function ( ) { d . unlockSelection ( ) } ) ; if ( CKEDITOR . env . ie9Compat ) d . on ( "beforeDestroy" ,
c, null , null , 9 ) ; d . on ( "dataReady" , function ( ) { delete d . _ . fakeSelection ; delete d . _ . hiddenSelectionContainer ; d . selectionChange ( 1 ) } ) ; d . on ( "loadSnapshot" , function ( ) { var a = CKEDITOR . dom . walker . nodeType ( CKEDITOR . NODE _ELEMENT ) , b = d . editable ( ) . getLast ( a ) ; if ( b && b . hasAttribute ( "data-cke-hidden-sel" ) ) { b . remove ( ) ; if ( CKEDITOR . env . gecko ) ( a = d . editable ( ) . getFirst ( a ) ) && ( a . is ( "br" ) && a . getAttribute ( "_moz_editor_bogus_node" ) ) && a . remove ( ) } } , null , null , 100 ) ; d . on ( "key" , function ( a ) { if ( d . mode == "wysiwyg" ) { var b = d . getSelection ( ) ;
if( b . isFake ) { var c = j [ a . data . keyCode ] ; if ( c ) return c ( { editor : d , selected : b . getSelectedElement ( ) , selection : b , keyEvent : a } ) } } } ) } ) ; CKEDITOR . on ( "instanceReady" , function ( a ) { function b ( ) { var a = e . editable ( ) ; if ( a ) if ( a = d ( a ) ) { var c = e . document . $ . getSelection ( ) ; if ( c . type != "None" && ( c . anchorNode == a . $ || c . focusNode == a . $ ) ) j = i ( c ) ; f = a . getText ( ) ; a . setText ( l ( f ) ) } } function c ( ) { var a = e . editable ( ) ; if ( a ) if ( a = d ( a ) ) { a . setText ( f ) ; if ( j ) { g ( e . document . $ , j ) ; j = null } } } var e = a . editor , f , j ; if ( CKEDITOR . env . webkit ) { e . on ( "selectionChange" ,
function ( ) { var a = e . editable ( ) , b = d ( a ) ; b && ( b . getCustomData ( "ready" ) ? h ( a ) : b . setCustomData ( "ready" , 1 ) ) } , null , null , - 1 ) ; e . on ( "beforeSetMode" , function ( ) { h ( e . editable ( ) ) } , null , null , - 1 ) ; e . on ( "beforeUndoImage" , b ) ; e . on ( "afterUndoImage" , c ) ; e . on ( "beforeGetData" , b , null , null , 0 ) ; e . on ( "getData" , c ) } } ) ; CKEDITOR . editor . prototype . selectionChange = function ( b ) { ( b ? a : e ) . call ( this ) } ; CKEDITOR . editor . prototype . getSelection = function ( a ) { if ( ( this . _ . savedSelection || this . _ . fakeSelection ) && ! a ) return this . _ . savedSelection || this . _ . fakeSelection ;
return ( a = this . editable ( ) ) && this . mode == "wysiwyg" ? new CKEDITOR . dom . selection ( a ) : null } ; CKEDITOR . editor . prototype . lockSelection = function ( a ) { a = a || this . getSelection ( 1 ) ; if ( a . getType ( ) != CKEDITOR . SELECTION _NONE ) { ! a . isLocked && a . lock ( ) ; this . _ . savedSelection = a ; return true } return false } ; CKEDITOR . editor . prototype . unlockSelection = function ( a ) { var b = this . _ . savedSelection ; if ( b ) { b . unlock ( a ) ; delete this . _ . savedSelection ; return true } return false } ; CKEDITOR . editor . prototype . forceNextSelectionCheck = function ( ) { delete this . _ . selectionPreviousPath } ;
CKEDITOR . dom . document . prototype . getSelection = function ( ) { return new CKEDITOR . dom . selection ( this ) } ; CKEDITOR . dom . range . prototype . select = function ( ) { var a = this . root instanceof CKEDITOR . editable ? this . root . editor . getSelection ( ) : new CKEDITOR . dom . selection ( this . root ) ; a . selectRanges ( [ this ] ) ; return a } ; CKEDITOR . SELECTION _NONE = 1 ; CKEDITOR . SELECTION _TEXT = 2 ; CKEDITOR . SELECTION _ELEMENT = 3 ; var u = typeof window . getSelection != "function" , v = 1 ; CKEDITOR . dom . selection = function ( a ) { if ( a instanceof CKEDITOR . dom . selection ) var b =
a, a = a . root ; var c = a instanceof CKEDITOR . dom . element ; this . rev = b ? b . rev : v ++ ; this . document = a instanceof CKEDITOR . dom . document ? a : a . getDocument ( ) ; this . root = c ? a : this . document . getBody ( ) ; this . isLocked = 0 ; this . _ = { cache : { } } ; if ( b ) { CKEDITOR . tools . extend ( this . _ . cache , b . _ . cache ) ; this . isFake = b . isFake ; this . isLocked = b . isLocked ; return this } var a = this . getNative ( ) , d , e ; if ( a ) if ( a . getRangeAt ) d = ( e = a . rangeCount && a . getRangeAt ( 0 ) ) && new CKEDITOR . dom . node ( e . commonAncestorContainer ) ; else { try { e = a . createRange ( ) } catch ( f ) { } d = e && CKEDITOR . dom . element . get ( e . item &&
e . item ( 0 ) || e . parentElement ( ) ) } if ( ! d || ! ( d . type == CKEDITOR . NODE _ELEMENT || d . type == CKEDITOR . NODE _TEXT ) || ! this . root . equals ( d ) && ! this . root . contains ( d ) ) { this . _ . cache . type = CKEDITOR . SELECTION _NONE ; this . _ . cache . startElement = null ; this . _ . cache . selectedElement = null ; this . _ . cache . selectedText = "" ; this . _ . cache . ranges = new CKEDITOR . dom . rangeList } return this } ; var E = { img : 1 , hr : 1 , li : 1 , table : 1 , tr : 1 , td : 1 , th : 1 , embed : 1 , object : 1 , ol : 1 , ul : 1 , a : 1 , input : 1 , form : 1 , select : 1 , textarea : 1 , button : 1 , fieldset : 1 , thead : 1 , tfoot : 1 } ; CKEDITOR . dom . selection . prototype =
{ getNative : function ( ) { return this . _ . cache . nativeSel !== void 0 ? this . _ . cache . nativeSel : this . _ . cache . nativeSel = u ? this . document . $ . selection : this . document . getWindow ( ) . $ . getSelection ( ) } , getType : u ? function ( ) { var a = this . _ . cache ; if ( a . type ) return a . type ; var b = CKEDITOR . SELECTION _NONE ; try { var c = this . getNative ( ) , d = c . type ; if ( d == "Text" ) b = CKEDITOR . SELECTION _TEXT ; if ( d == "Control" ) b = CKEDITOR . SELECTION _ELEMENT ; if ( c . createRange ( ) . parentElement ( ) ) b = CKEDITOR . SELECTION _TEXT } catch ( e ) { } return a . type = b } : function ( ) { var a = this . _ . cache ;
if ( a . type ) return a . type ; var b = CKEDITOR . SELECTION _TEXT , c = this . getNative ( ) ; if ( ! c || ! c . rangeCount ) b = CKEDITOR . SELECTION _NONE ; else if ( c . rangeCount == 1 ) { var c = c . getRangeAt ( 0 ) , d = c . startContainer ; if ( d == c . endContainer && d . nodeType == 1 && c . endOffset - c . startOffset == 1 && E [ d . childNodes [ c . startOffset ] . nodeName . toLowerCase ( ) ] ) b = CKEDITOR . SELECTION _ELEMENT } return a . type = b } , getRanges : function ( ) { var a = u ? function ( ) { function a ( b ) { return ( new CKEDITOR . dom . node ( b ) ) . getIndex ( ) } var b = function ( b , c ) { b = b . duplicate ( ) ; b . collapse ( c ) ;
var d = b . parentElement ( ) ; if ( ! d . hasChildNodes ( ) ) return { container : d , offset : 0 } ; for ( var e = d . children , f , g , h = b . duplicate ( ) , k = 0 , i = e . length - 1 , j = - 1 , A , x ; k <= i ; ) { j = Math . floor ( ( k + i ) / 2 ) ; f = e [ j ] ; h . moveToElementText ( f ) ; A = h . compareEndPoints ( "StartToStart" , b ) ; if ( A > 0 ) i = j - 1 ; else if ( A < 0 ) k = j + 1 ; else return { container : d , offset : a ( f ) } } if ( j== - 1 || j == e . length - 1 && A < 0 ) { h . moveToElementText ( d ) ; h . setEndPoint ( "StartToStart" , b ) ; h= h . text . replace ( /(\r\n|\r)/g , "\n" ) . length ; e = d . childNodes ; if ( ! h ) { f = e [ e . length - 1 ] ; return f . nodeType != CKEDITOR . NODE _TEXT ?
{ container : d , offset : e . length } : { container : f , offset : f . nodeValue . length } } for ( d = e . length ; h > 0 && d > 0 ; ) { g = e [ -- d ] ; if ( g . nodeType == CKEDITOR . NODE _TEXT ) { x= g ; h = h - g . nodeValue . length } } return { container : x , offset : - h } } h . collapse ( A > 0 ? true : false ) ; h . setEndPoint ( A > 0 ? "StartToStart" : "EndToStart" , b ) ; h = h . text . replace ( /(\r\n|\r)/g , "\n" ) . length ; if ( ! h ) return { container : d , offset : a ( f ) + ( A > 0 ? 0 : 1 ) } ; for ( ; h > 0 ; ) try { g = f [ A > 0 ? "previousSibling" : "nextSibling" ] ; if ( g . nodeType == CKEDITOR . NODE _TEXT ) { h = h - g . nodeValue . length ; x = g } f = g } catch ( l ) { return { container : d ,
offset : a ( f ) } } return { container : x , offset : A > 0 ? - h : x . nodeValue . length + h } } ; return function ( ) { var a = this . getNative ( ) , c = a && a . createRange ( ) , d = this . getType ( ) ; if ( ! a ) return [ ] ; if ( d == CKEDITOR . SELECTION _TEXT ) { a = new CKEDITOR . dom . range ( this . root ) ; d = b ( c , true ) ; a . setStart ( new CKEDITOR . dom . node ( d . container ) , d . offset ) ; d = b ( c ) ; a . setEnd ( new CKEDITOR . dom . node ( d . container ) , d . offset ) ; a . endContainer . getPosition ( a . startContainer ) & CKEDITOR . POSITION _PRECEDING && a . endOffset <= a . startContainer . getIndex ( ) && a . collapse ( ) ; return [ a ] } if ( d ==
CKEDITOR. SELECTION _ELEMENT ) { for ( var d = [ ] , e = 0 ; e < c . length ; e ++ ) { for ( var f = c . item ( e ) , g = f . parentNode , h = 0 , a = new CKEDITOR . dom . range ( this . root ) ; h< g . childNodes . length && g . childNodes [ h ] != f ; h ++ ) ; a . setStart ( new CKEDITOR . dom . node ( g) , h ) ; a . setEnd ( new CKEDITOR . dom . node ( g) , h + 1 ) ; d . push ( a ) } return d } return [ ] } } ( ) : function ( ) { var a = [ ] , b , c = this . getNative ( ) ; if ( ! c ) return a ; for ( var d = 0 ; d < c . rangeCount ; d ++ ) { var e = c . getRangeAt ( d ) ; b = new CKEDITOR . dom . range ( this . root ) ; b . setStart ( new CKEDITOR . dom . node ( e . startContainer ) , e . startOffset ) ;
b . setEnd ( new CKEDITOR . dom . node ( e . endContainer ) , e . endOffset ) ; a . push ( b ) } return a } ; return function ( b ) { var c = this . _ . cache , d = c . ranges ; if ( ! d ) c . ranges = d = new CKEDITOR . dom . rangeList ( a . call ( this ) ) ; return ! b ? d : s ( new CKEDITOR . dom . rangeList ( d . slice ( ) ) ) } } ( ) , getStartElement : function ( ) { var a = this . _ . cache ; if ( a . startElement !== void 0 ) return a . startElement ; var b ; switch ( this . getType ( ) ) { case CKEDITOR . SELECTION _ELEMENT : return this . getSelectedElement ( ) ; case CKEDITOR . SELECTION _TEXT : var c = this . getRanges ( ) [ 0 ] ; if ( c ) { if ( c . collapsed ) { b =
c . startContainer ; b . type != CKEDITOR . NODE _ELEMENT && ( b = b . getParent ( ) ) } else { for ( c . optimize ( ) ; ; ) { b = c . startContainer ; if ( c . startOffset == ( b . getChildCount ? b . getChildCount ( ) : b . getLength ( ) ) && ! b . isBlockBoundary ( ) ) c . setStartAfter ( b ) ; else break } b = c . startContainer ; if ( b . type != CKEDITOR . NODE _ELEMENT ) return b . getParent ( ) ; b = b . getChild ( c . startOffset ) ; if ( ! b || b . type != CKEDITOR . NODE _ELEMENT ) b = c . startContainer ; else for ( c = b . getFirst ( ) ; c && c . type == CKEDITOR . NODE _ELEMENT ; ) { b = c ; c = c . getFirst ( ) } } b = b . $ } } return a . startElement = b ? new CKEDITOR . dom . element ( b ) :
null } , getSelectedElement : function ( ) { var a = this . _ . cache ; if ( a . selectedElement !== void 0 ) return a . selectedElement ; var b = this , c = CKEDITOR . tools . tryThese ( function ( ) { return b . getNative ( ) . createRange ( ) . item ( 0 ) } , function ( ) { for ( var a = b . getRanges ( ) [ 0 ] . clone ( ) , c , d , e = 2 ; e && ( ! ( c = a . getEnclosedNode ( ) ) || ! ( c . type == CKEDITOR . NODE _ELEMENT && E [ c . getName ( ) ] && ( d = c ) ) ) ; e -- ) a . shrink ( CKEDITOR . SHRINK _ELEMENT ) ; return d && d . $ } ) ; return a . selectedElement = c ? new CKEDITOR . dom . element ( c ) : null } , getSelectedText : function ( ) { var a = this . _ . cache ;
if ( a . selectedText !== void 0 ) return a . selectedText ; var b = this . getNative ( ) , b = u ? b . type == "Control" ? "" : b . createRange ( ) . text : b . toString ( ) ; return a . selectedText = b } , lock : function ( ) { this . getRanges ( ) ; this . getStartElement ( ) ; this . getSelectedElement ( ) ; this . getSelectedText ( ) ; this . _ . cache . nativeSel = null ; this . isLocked = 1 } , unlock : function ( a ) { if ( this . isLocked ) { if ( a ) var b = this . getSelectedElement ( ) , c = ! b && this . getRanges ( ) , d = this . isFake ; this . isLocked = 0 ; this . reset ( ) ; if ( a ) ( a = b || c [ 0 ] && c [ 0 ] . getCommonAncestor ( ) ) && a . getAscendant ( "body" ,
1 ) && ( d ? this . fake ( b ) : b ? this . selectElement ( b ) : this . selectRanges ( c ) ) } } , reset : function ( ) { this . _ . cache = { } ; this . isFake = 0 ; var a = this . root . editor ; if ( a && a . _ . fakeSelection && this . rev == a . _ . fakeSelection . rev ) { delete a . _ . fakeSelection ; var b = a . _ . hiddenSelectionContainer ; if ( b ) { var c = a . checkDirty ( ) ; a . fire ( "lockSnapshot" ) ; b . remove ( ) ; a . fire ( "unlockSnapshot" ) ; ! c && a . resetDirty ( ) } delete a . _ . hiddenSelectionContainer } this . rev = v ++ } , selectElement : function ( a ) { var b = new CKEDITOR . dom . range ( this . root ) ; b . setStartBefore ( a ) ; b . setEndAfter ( a ) ;
this . selectRanges ( [ b ] ) } , selectRanges : function ( a ) { var b = this . root . editor , b = b && b . _ . hiddenSelectionContainer ; this . reset ( ) ; if ( b ) for ( var b = this . root , c , d = 0 ; d < a . length ; ++ d ) { c = a [ d ] ; if ( c . endContainer . equals ( b ) ) c . endOffset = Math . min ( c . endOffset , b . getChildCount ( ) ) } if ( a . length ) if ( this . isLocked ) { var e = CKEDITOR . document . getActive ( ) ; this . unlock ( ) ; this . selectRanges ( a ) ; this . lock ( ) ; e && ! e . equals ( this . root ) && e . focus ( ) } else { var g ; a : { var i , j ; if ( a . length == 1 && ! ( j = a [ 0 ] ) . collapsed && ( g = j . getEnclosedNode ( ) ) && g . type == CKEDITOR . NODE _ELEMENT ) { j =
j. clone ( ) ; j . shrink ( CKEDITOR . SHRINK _ELEMENT , true ) ; if ( ( i = j . getEnclosedNode ( ) ) && i . type == CKEDITOR . NODE _ELEMENT ) g = i ; if ( g . getAttribute ( "contenteditable" ) == "false" ) break a } g = void 0 } if ( g ) this . fake ( g ) ; else { if ( u ) { j = CKEDITOR . dom . walker . whitespaces ( true ) ; i = /\ufeff|\u00a0/ ; b = { table : 1 , tbody : 1 , tr : 1 } ; if ( a . length > 1 ) { g = a [ a . length - 1 ] ; a [ 0 ] . setEnd ( g . endContainer , g . endOffset ) } g = a [ 0 ] ; var a = g . collapsed , l , m , w ; if ( ( c = g . getEnclosedNode ( ) ) && c . type == CKEDITOR . NODE _ELEMENT && c. getName ( ) in E && ( ! c . is ( "a" ) || ! c . getText ( ) ) ) try { w = c . $ . createControlRange ( ) ;
w. addElement ( c . $ ) ; w . select ( ) ; return } catch ( H ) { } if ( g . startContainer . type == CKEDITOR . NODE _ELEMENT && g . startContainer . getName ( ) in b || g . endContainer . type == CKEDITOR . NODE _ELEMENT && g . endContainer . getName ( ) in b ) { g . shrink ( CKEDITOR . NODE _ELEMENT , true ) ; a = g . collapsed } w = g . createBookmark ( ) ; b = w . startNode ; if ( ! a ) e = w . endNode ; w = g . document . $ . body . createTextRange ( ) ; w . moveToElementText ( b . $ ) ; w . moveStart ( "character" , 1 ) ; if ( e ) { i = g . document . $ . body . createTextRange ( ) ; i . moveToElementText ( e . $ ) ; w . setEndPoint ( "EndToEnd" , i ) ; w . moveEnd ( "character" ,
- 1 ) } else { l = b . getNext ( j ) ; m = b . hasAscendant ( "pre" ) ; l = ! ( l && l . getText && l . getText ( ) . match ( i ) ) && ( m || ! b . hasPrevious ( ) || b . getPrevious ( ) . is && b . getPrevious ( ) . is ( "br" ) ) ; m = g . document . createElement ( "span" ) ; m . setHtml ( "" ) ; m . insertBefore ( b ) ; l && g . document . createText ( " " ) . insertBefore ( b ) } g . setStartBefore ( b ) ; b . remove ( ) ; if ( a ) { if ( l ) { w . moveStart ( "character" , - 1 ) ; w . select ( ) ; g . document . $ . selection . clear ( ) } else w . select ( ) ; g . moveToPosition ( m , CKEDITOR . POSITION _BEFORE _START ) ; m . remove ( ) } else { g . setEndBefore ( e ) ; e . remove ( ) ;
w. select ( ) } } else { e = this . getNative ( ) ; if ( ! e ) return ; this . removeAllRanges ( ) ; for ( w = 0 ; w < a . length ; w ++ ) { if ( w < a . length - 1 ) { l = a [ w ] ; m = a [ w + 1 ] ; i = l . clone ( ) ; i . setStart ( l . endContainer , l . endOffset ) ; i . setEnd ( m . startContainer , m . startOffset ) ; if ( ! i . collapsed ) { i . shrink ( CKEDITOR . NODE _ELEMENT , true ) ; g = i . getCommonAncestor ( ) ; i = i . getEnclosedNode ( ) ; if ( g . isReadOnly ( ) || i && i . isReadOnly ( ) ) { m . setStart ( l . startContainer , l . startOffset ) ; a . splice ( w -- , 1 ) ; continue } } } g = a [ w ] ; m = this . document . $ . createRange ( ) ; if ( g . collapsed && CKEDITOR . env . webkit &&
f( g ) ) { l = this . root ; h ( l , false ) ; i = l . getDocument ( ) . createText ( "\u200B" ) ; l . setCustomData ( "cke-fillingChar" , i ) ; g . insertNode ( i ) ; if ( ( l = i . getNext ( ) ) && ! i . getPrevious ( ) && l . type == CKEDITOR . NODE _ELEMENT && l . getName ( ) == "br" ) { h ( this . root ) ; g . moveToPosition ( l , CKEDITOR . POSITION _BEFORE _START ) } else g . moveToPosition ( i , CKEDITOR . POSITION _AFTER _END ) } m . setStart ( g . startContainer . $ , g . startOffset ) ; try { m . setEnd ( g . endContainer . $ , g . endOffset ) } catch ( C ) { if ( C . toString ( ) . indexOf ( "NS_ERROR_ILLEGAL_VALUE" ) >= 0 ) { g . collapse ( 1 ) ; m . setEnd ( g . endContainer . $ ,
g. endOffset ) } else throw C ; } e . addRange ( m ) } } this . reset ( ) ; this . root . fire ( "selectionchange" ) } }} , fake : function ( a ) { var b = this . root . editor ; this . reset ( ) ; m ( b ) ; var c = this . _ . cache , d = new CKEDITOR . dom . range ( this . root ) ; d . setStartBefore ( a ) ; d . setEndAfter ( a ) ; c . ranges = new CKEDITOR . dom . rangeList ( d ) ; c . selectedElement = c . startElement = a ; c . type = CKEDITOR . SELECTION _ELEMENT ; c . selectedText = c . nativeSel = null ; this . isFake = 1 ; this . rev = v ++ ; b . _ . fakeSelection = this ; this . root . fire ( "selectionchange" ) } , isHidden : function ( ) { var a = this . getCommonAncestor ( ) ;
a && a . type == CKEDITOR . NODE _TEXT && ( a = a . getParent ( ) ) ; return ! ( ! a || ! a . data ( "cke-hidden-sel" ) ) } , createBookmarks : function ( a ) { a = this . getRanges ( ) . createBookmarks ( a ) ; this . isFake && ( a . isFake = 1 ) ; return a } , createBookmarks2 : function ( a ) { a = this . getRanges ( ) . createBookmarks2 ( a ) ; this . isFake && ( a . isFake = 1 ) ; return a } , selectBookmarks : function ( a ) { for ( var b = [ ] , c = 0 ; c < a . length ; c ++ ) { var d = new CKEDITOR . dom . range ( this . root ) ; d . moveToBookmark ( a [ c ] ) ; b . push ( d ) } a . isFake ? this . fake ( b [ 0 ] . getEnclosedNode ( ) ) : this . selectRanges ( b ) ; return this } ,
getCommonAncestor : function ( ) { var a = this . getRanges ( ) ; return ! a . length ? null : a [ 0 ] . startContainer . getCommonAncestor ( a [ a . length - 1 ] . endContainer ) } , scrollIntoView : function ( ) { this . type != CKEDITOR . SELECTION _NONE && this . getRanges ( ) [ 0 ] . scrollIntoView ( ) } , removeAllRanges : function ( ) { if ( this . getType ( ) != CKEDITOR . SELECTION _NONE ) { var a = this . getNative ( ) ; try { a && a [ u ? "empty" : "removeAllRanges" ] ( ) } catch ( b ) { } this . reset ( ) } } } } ) ( ) ; "use strict" ; CKEDITOR . STYLE _BLOCK = 1 ; CKEDITOR . STYLE _INLINE = 2 ; CKEDITOR . STYLE _OBJECT = 3 ;
( function ( ) { function a ( a , b ) { for ( var c , d ; a = a . getParent ( ) ; ) { if ( a . equals ( b ) ) break ; if ( a . getAttribute ( "data-nostyle" ) ) c = a ; else if ( ! d ) { var e = a . getAttribute ( "contentEditable" ) ; e == "false" ? c = a : e == "true" && ( d = 1 ) } } return c } function e ( b ) { var d = b . document ; if ( b . collapsed ) { d = j ( this , d ) ; b . insertNode ( d ) ; b . moveToPosition ( d , CKEDITOR . POSITION _BEFORE _END ) } else { var f = this . element , g = this . _ . definition , h , i= g . ignoreReadonly , k = i || g . includeReadonly ; k == null && ( k = b . root . getCustomData ( "cke_includeReadonly" ) ) ; var l = CKEDITOR . dtd [ f ] ;
if ( ! l) { h = true ; l = CKEDITOR . dtd . span } b . enlarge ( CKEDITOR . ENLARGE _INLINE , 1 ) ; b . trim ( ) ; var m= b . createBookmark ( ) , n = m . startNode , p = m . endNode , o = n , q ; if ( ! i ) { var t = b . getCommonAncestor ( ) , i= a ( n , t ) , t = a ( p , t ) ; i && ( o = i . getNextSourceNode ( true ) ) ; t && ( p= t ) } for ( o . getPosition ( p ) == CKEDITOR . POSITION _FOLLOWING && ( o= 0 ) ; o ; ) { i = false ; if ( o . equals ( p ) ) { o = null ; i = true } else { var s = o . type == CKEDITOR . NODE _ELEMENT ? o. getName ( ) : null , t = s && o . getAttribute ( "contentEditable" ) == "false" , r= s && o . getAttribute ( "data-nostyle" ) ; if ( s&& o . data ( "cke-bookmark" ) ) { o =
o . getNextSourceNode ( true ) ; continue } if ( t && k&& CKEDITOR . dtd . $block [ s ] ) for ( var v = o , u = c ( v ) , z = void 0 , D = u . length , E = 0 , v = D && new CKEDITOR . dom . range ( v. getDocument ( ) ) ; E < D ; ++ E ) { var z = u [ E ] , M = CKEDITOR . filter . instances [ z . data ( "cke-filter" ) ] ; if ( M? M . check ( this ) : 1 ) { v . selectNodeContents ( z ) ; e . call ( this , v ) } } u = s ? ! l [ s ] || r ? 0 : t && ! k ? 0 : ( o . getPosition ( p ) | L ) == L && ( ! g . childRule || g . childRule ( o) ) : 1 ; if ( u ) if ( ( u = o . getParent ( ) ) && ( ( u . getDtd ( ) || CKEDITOR . dtd . span ) [ f ] || h ) && ( ! g . parentRule || g . parentRule ( u ) ) ) { if ( ! q && ( ! s || ! CKEDITOR . dtd . $removeEmpty [ s ] ||
( o. getPosition ( p ) | L ) == L ) ) { q = b . clone ( ) ; q . setStartBefore ( o) } s = o . type ; if ( s == CKEDITOR . NODE _TEXT || t || s == CKEDITOR . NODE _ELEMENT && ! o . getChildCount ( ) ) { for ( var s= o , U ; ( i = ! s . getNext ( J ) ) && ( U = s . getParent ( ) , l [ U . getName ( ) ] ) && ( U . getPosition ( n ) | B ) == B && ( ! g . childRule || g . childRule ( U) ) ; ) s = U ; q . setEndAfter ( s ) } } else i = true ; else i = true ; o = o . getNextSourceNode ( r || t ) } if ( i && q && ! q . collapsed ) { for ( var i= j ( this , d ) , t = i . hasAttributes ( ) , r = q . getCommonAncestor ( ) , s = { } , u = { } , z = { } , D = { } , O , R , X ; i && r ; ) { if ( r . getName ( ) == f ) { for ( O in g . attributes ) if ( ! D [ O ] &&
( X= r . getAttribute ( R ) ) ) i . getAttribute ( O ) == X ? u [ O ] = 1 : D [ O ] = 1 ; for ( R in g . styles ) if ( ! z [ R ] && ( X = r . getStyle ( R ) ) ) i . getStyle ( R ) == X ? s [ R ] = 1 : z [ R ] = 1 } r = r . getParent ( ) } for ( O in u) i . removeAttribute ( O ) ; for ( R in s ) i . removeStyle ( R ) ; t && ! i . hasAttributes ( ) && ( i = null ) ; if ( i ) { q . extractContents ( ) . appendTo ( i) ; q . insertNode ( i ) ; y . call ( this , i ) ; i . mergeSiblings ( ) ; CKEDITOR . env . ie || i . $ . normalize ( ) } else { i = new CKEDITOR . dom . element ( "span" ) ; q . extractContents ( ) . appendTo ( i) ; q . insertNode ( i ) ; y . call ( this , i ) ; i . remove ( true ) } q = null } } b . moveToBookmark ( m ) ;
b . shrink ( CKEDITOR . SHRINK _TEXT ) ; b . shrink ( CKEDITOR . NODE _ELEMENT , true ) } } function b ( a ) { function b ( ) { for ( var a = new CKEDITOR . dom . elementPath ( d . getParent ( ) ) , c = new CKEDITOR . dom . elementPath ( j . getParent ( ) ) , e = null , f = null , g = 0 ; g < a . elements . length ; g ++ ) { var h = a . elements [ g ] ; if ( h == a . block || h == a . blockLimit ) break ; k . checkElementRemovable ( h , true ) && ( e = h ) } for ( g = 0 ; g < c . elements . length ; g ++ ) { h = c . elements [ g ] ; if ( h == c . block || h == c . blockLimit ) break ; k . checkElementRemovable ( h ,true )&& ( f = h ) } f && j . breakParent ( f ) ; e && d . breakParent ( e ) } a . enlarge ( CKEDITOR . ENLARGE _INLINE ,
1 ) ; var c = a . createBookmark ( ) , d = c . startNode ; if ( a . collapsed ) { for ( var e = new CKEDITOR . dom . elementPath ( d . getParent ( ) , a . root ) , f , g = 0 , h ; g < e . elements . length && ( h = e . elements [ g ] ) ; g ++ ) { if ( h == e . block || h == e . blockLimit ) break ; if ( this . checkElementRemovable ( h ) ) { var i ; if ( a . collapsed && ( a . checkBoundaryOfElement ( h , CKEDITOR . END ) || ( i = a . checkBoundaryOfElement ( h , CKEDITOR . START ) ) ) ) { f = h ; f . match = i ? "start" : "end" } else { h . mergeSiblings ( ) ; h . is ( this . element ) ? s. call ( this , h ) : p ( h , E ( this ) [ h . getName ( ) ] ) } } } if ( f ) { h = d ; for ( g = 0 ; ; g ++ ) { i = e . elements [ g ] ;
if ( i . equals ( f ) ) break ; else if ( i. match ) continue ; else i = i . clone ( ) ; i . append ( h ) ; h = i } h [ f . match == "start" ? "insertBefore" : "insertAfter" ] ( f ) } } else { var j= c . endNode , k = this ; b ( ) ; for ( e = d ; ! e . equals ( j ) ; ) { f = e . getNextSourceNode ( ) ; if ( e . type == CKEDITOR . NODE _ELEMENT && this . checkElementRemovable ( e ) ) { e . getName ( ) == this . element ? s. call ( this , e ) : p ( e , E ( this ) [ e . getName ( ) ] ) ; if ( f . type == CKEDITOR . NODE _ELEMENT && f . contains ( d ) ) { b ( ) ; f = d . getNext ( ) } } e = f } } a . moveToBookmark ( c ) ; a . shrink ( CKEDITOR . NODE _ELEMENT , true ) } function c ( a ) { var b = [ ] ; a . forEach ( function ( a ) { if ( a . getAttribute ( "contenteditable" ) ==
"true" ) { b . push ( a ) ; return false } } , CKEDITOR . NODE _ELEMENT , true ) ; return b } function f ( a ) { var b = a . getEnclosedNode ( ) || a . getCommonAncestor ( false , true ) ; ( a = ( new CKEDITOR . dom . elementPath ( b , a . root ) ) . contains ( this . element , 1 ) ) && ! a . isReadOnly ( ) && u ( a , this ) } function d ( a ) { var b = a . getCommonAncestor ( true , true ) ; if ( a = ( new CKEDITOR . dom . elementPath ( b , a . root ) ) . contains ( this . element , 1 ) ) { var b = this . _ . definition , c = b . attributes ; if ( c ) for ( var d in c ) a . removeAttribute ( d , c [ d ] ) ; if ( b . styles ) for ( var e in b . styles ) b . styles . hasOwnProperty ( e ) &&
a . removeStyle ( e ) } } function h ( a ) { var b = a . createBookmark ( true ) , c = a . createIterator ( ) ; c . enforceRealBlocks = true ; if ( this . _ . enterMode ) c . enlargeBr = this . _ . enterMode != CKEDITOR . ENTER _BR ; for ( var d , e = a . document , f ; d = c . getNextParagraph ( ) ; ) if ( ! d . isReadOnly ( ) && ( c . activeFilter ? c . activeFilter . check ( this ) : 1 ) ) { f = j( this , e , d ) ; i ( d , f ) } a . moveToBookmark ( b ) } function l ( a ) { var b = a . createBookmark ( 1 ) , c = a . createIterator ( ) ; c . enforceRealBlocks = true ; c . enlargeBr = this . _ . enterMode != CKEDITOR . ENTER _BR ; for ( var d , e ; d = c . getNextParagraph ( ) ; ) if ( this . checkElementRemovable ( d ) ) if ( d . is ( "pre" ) ) { ( e =
this . _ . enterMode == CKEDITOR . ENTER _BR ? null : a . document . createElement ( this . _ . enterMode == CKEDITOR . ENTER _P ? "p" : "div" ) ) && d . copyAttributes ( e ) ; i( d , e ) } else s . call ( this , d ) ; a . moveToBookmark ( b ) } function i ( a , b ) { var c = ! b ; if ( c ) { b = a . getDocument ( ) . createElement ( "div" ) ; a . copyAttributes ( b ) } var d = b && b . is ( "pre" ) , e = a . is ( "pre" ) , f = ! d && e ; if ( d && ! e ) { e = b ; ( f = a . getBogus ( ) ) && f . remove ( ) ; f = a . getHtml ( ) ; f = m ( f , /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g , "" ) ; f = f . replace ( /[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi , "$1" ) ; f = f . replace ( /([ \t\n\r]+| )/g ,
" " ) ; f = f . replace ( /<br\b[^>]*>/gi , "\n" ) ; if ( CKEDITOR . env . ie ) { var h = a . getDocument ( ) . createElement ( "div" ) ; h . append ( e ) ; e . $ . outerHTML = "<pre>" + f + "</pre>" ; e . copyAttributes ( h. getFirst ( ) ) ; e = h . getFirst ( ) . remove ( ) } else e . setHtml ( f ) ; b = e } else f ? b = t ( c ? [ a . getHtml ( ) ] : g ( a ) , b ) : a . moveChildren ( b ) ; b . replace ( a ) ; if ( d ) { var c = b , i; if ( ( i = c . getPrevious ( z ) ) && i . type == CKEDITOR . NODE _ELEMENT && i . is ( "pre" ) ) { d = m( i . getHtml ( ) , /\n$/ , "" ) + "\n\n" + m ( c . getHtml ( ) , /^\n/ , "" ) ; CKEDITOR . env . ie ? c . $ . outerHTML = "<pre>" + d + "</pre>" : c . setHtml ( d ) ; i . remove ( ) } } else c &&
q( b ) } function g ( a ) { var b = [ ] ; m ( a . getOuterHtml ( ) , /(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi , function ( a , b , c ) { return b + "</pre>" + c + "<pre>" } ) . replace ( /<pre\b.*?>([\s\S]*?)<\/pre>/gi , function ( a , c ) { b . push ( c ) } ) ; return b } function m ( a , b , c ) { var d = "" , e = "" , a = a . replace ( /(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi , function ( a , b , c ) { b && ( d = b ) ; c && ( e = c ) ; return "" } ) ; return d + a . replace ( b , c ) + e } function t ( a , b ) { var c ; a . length > 1 && ( c = new CKEDITOR . dom . documentFragment ( b . getDocument ( ) ) ) ;
for ( var d = 0 ; d < a . length ; d ++ ) { var e = a [ d ] , e = e . replace ( /(\r\n|\r)/g , "\n" ) , e = m ( e , /^[ \t]*\n/ , "" ) , e = m ( e , /\n$/ , "" ) , e = m ( e , /^[ \t]+|[ \t]+$/g , function ( a , b ) { return a . length == 1 ? " " : b ? " " + CKEDITOR . tools . repeat ( " " , a . length - 1 ) : CKEDITOR . tools . repeat ( " " , a . length - 1 ) + " " } ) , e = e . replace ( /\n/g , "<br>" ) , e = e . replace ( /[ \t]{2,}/g , function ( a ) { return CKEDITOR . tools . repeat ( " " , a . length - 1 ) + " " } ) ; if ( c ) { var f = b . clone ( ) ; f . setHtml ( e ) ; c . append ( f ) } else b . setHtml ( e ) } return c || b } function s ( a , b ) { var c = this . _ . definition ,
d = c . attributes , c = c . styles , e = E ( this ) [ a . getName ( ) ] , f = CKEDITOR . tools . isEmpty ( d ) && CKEDITOR . tools . isEmpty ( c ) , g ; for ( g in d ) if ( ! ( ( g == "class" || this . _ . definition . fullMatch ) && a . getAttribute ( g ) != k ( g , d [ g ] ) ) && ! ( b && g . slice ( 0 , 5 ) == "data-" ) ) { f = a . hasAttribute ( g ) ; a . removeAttribute ( g ) } for ( var h in c ) if ( ! ( this . _ . definition . fullMatch && a . getStyle ( h ) != k ( h , c [ h ] , true ) ) ) { f = f || ! ! a . getStyle ( h ) ; a . removeStyle ( h ) } p( a , e , r [ a . getName ( ) ] ) ; f && ( this . _ . definition . alwaysRemoveElement ? q ( a , 1 ) : ! CKEDITOR . dtd . $block [ a . getName ( ) ] || this . _ . enterMode ==
CKEDITOR . ENTER _BR && ! a . hasAttributes ( ) ? q ( a ) : a . renameNode ( this . _ . enterMode == CKEDITOR . ENTER _P ? "p" : "div" ) ) } function y ( a ) { for ( var b = E ( this ) , c = a . getElementsByTag ( this . element ) , d , e = c . count ( ) ; -- e >= 0 ; ) { d = c . getItem ( e ) ; d . isReadOnly ( ) || s . call ( this , d , true ) } for ( var f in b ) if ( f != this . element ) { c = a . getElementsByTag ( f ) ; for ( e = c . count ( ) - 1 ; e >= 0 ; e -- ) { d = c . getItem ( e ) ; d . isReadOnly ( ) || p ( d , b [ f ] ) } } } function p ( a , b , c ) { if ( b = b && b . attributes ) for ( var d = 0 ; d < b . length ; d ++ ) { var e = b [ d ] [ 0 ] , f ; if ( f = a . getAttribute ( e ) ) { var g = b [ d ] [ 1 ] ; ( g === null ||
g . test && g . test ( f ) || typeof g == "string" && f == g ) && a . removeAttribute ( e ) } } c || q( a ) } function q ( a , b ) { if ( ! a . hasAttributes ( ) || b ) if ( CKEDITOR . dtd . $block [ a . getName ( ) ] ) { var c = a . getPrevious ( z) , d = a . getNext ( z ) ; c && ( c . type == CKEDITOR . NODE _TEXT || ! c . isBlockBoundary ( { br : 1 } ) ) && a . append ( "br" , 1 ) ; d && ( d . type == CKEDITOR . NODE _TEXT || ! d . isBlockBoundary ( { br : 1 } ) ) && a . append ( "br" ) ; a . remove ( true ) } else { c = a . getFirst ( ) ; d = a . getLast ( ) ; a . remove ( true ) ; if ( c ) { c . type == CKEDITOR . NODE _ELEMENT && c . mergeSiblings ( ) ; d && ( ! c . equals ( d ) && d . type == CKEDITOR . NODE _ELEMENT ) &&
d . mergeSiblings ( ) } } } function j ( a , b , c ) { var d ; d = a . element ; d == "*" && ( d = "span" ) ; d = new CKEDITOR . dom . element ( d , b ) ; c && c . copyAttributes ( d ) ; d = u ( d , a ) ; b . getCustomData ( "doc_processing_style" ) && d . hasAttribute ( "id" ) ? d . removeAttribute ( "id" ) : b . setCustomData ( "doc_processing_style" , 1 ) ; return d } function u ( a , b ) { var c = b . _ . definition , d = c . attributes , c = CKEDITOR . style . getStyleText ( c ) ; if ( d ) for ( var e in d ) a . setAttribute ( e , d [ e ] ) ; c && a . setAttribute ( "style" , c ) ; return a } function v ( a , b ) { for ( var c in a ) a [ c ] = a [ c ] . replace ( D , function ( a ,
c ) { return b [ c ] } ) } function E ( a ) { if ( a . _ . overrides ) return a . _ . overrides ; var b = a . _ . overrides = { } , c = a . _ . definition . overrides ; if ( c ) { CKEDITOR . tools . isArray ( c ) || ( c = [ c ] ) ; for ( var d = 0 ; d < c . length ; d ++ ) { var e = c [ d ] , f , g ; if ( typeof e == "string" ) f = e . toLowerCase ( ) ; else { f = e . element ? e . element . toLowerCase ( ) : a . element ; g = e . attributes } e = b [ f ] || ( b [ f ] = { } ) ; if ( g ) { var e = e . attributes = e . attributes || [ ] , h ; for ( h in g ) e . push ( [ h . toLowerCase ( ) , g [ h ] ] ) } } } return b } function k ( a , b , c ) { var d = new CKEDITOR . dom . element ( "span" ) ; d [ c ? "setStyle" : "setAttribute" ] ( a ,
b ) ; return d [ c ? "getStyle" : "getAttribute" ] ( a ) } function n ( a , b , c ) { for ( var d = a . document , e = a . getRanges ( ) , b = b ? this . removeFromRange : this . applyToRange , f , g = e . createIterator ( ) ; f = g . getNextRange ( ) ; ) b . call ( this , f , c ) ; a . selectRanges ( e ) ; d . removeCustomData ( "doc_processing_style" ) } var r = { address : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , p : 1 , pre : 1 , section : 1 , header : 1 , footer : 1 , nav : 1 , article : 1 , aside : 1 , figure : 1 , dialog : 1 , hgroup : 1 , time : 1 , meter : 1 , menu : 1 , command : 1 , keygen : 1 , output : 1 , progress : 1 , details : 1 , datagrid : 1 , datalist : 1 } , o =
{ a : 1 , blockquote : 1 , embed : 1 , hr : 1 , img : 1 , li : 1 , object : 1 , ol : 1 , table : 1 , td : 1 , tr : 1 , th : 1 , ul : 1 , dl : 1 , dt : 1 , dd : 1 , form : 1 , audio : 1 , video : 1 } , M = /\s*(?:;\s*|$)/ , D= /#\((.+?)\)/g , J = CKEDITOR . dom . walker . bookmark ( 0 , 1 ) , z = CKEDITOR . dom . walker . whitespaces ( 1 ) ; CKEDITOR . style = function ( a , b ) { if ( typeof a . type == "string" ) return new CKEDITOR . style . customHandlers [ a . type ] ( a ) ; var c = a . attributes ; if ( c && c . style ) { a . styles = CKEDITOR . tools . extend ( { } , a . styles , CKEDITOR . tools . parseCssText ( c . style ) ) ; delete c . style } if ( b ) { a = CKEDITOR . tools . clone ( a ) ; v ( a . attributes ,
b ) ; v ( a . styles , b ) } c = this . element = a . element ? typeof a . element == "string" ? a . element . toLowerCase ( ) : a . element : "*" ; this . type = a . type || ( r [ c ] ? CKEDITOR . STYLE _BLOCK : o [ c ] ? CKEDITOR . STYLE _OBJECT : CKEDITOR . STYLE _INLINE ) ; if ( typeof this . element == "object" ) this . type = CKEDITOR . STYLE _OBJECT ; this . _ = { definition : a } } ; CKEDITOR . style . prototype = { apply : function ( a ) { if ( a instanceof CKEDITOR . dom . document ) return n . call ( this , a . getSelection ( ) ) ; if ( this . checkApplicable ( a . elementPath ( ) , a ) ) { var b = this . _ . enterMode ; if ( ! b ) this . _ . enterMode = a . activeEnterMode ;
n . call ( this , a . getSelection ( ) , 0 , a ) ; this . _ . enterMode = b } } , remove : function ( a ) { if ( a instanceof CKEDITOR . dom . document ) return n . call ( this , a . getSelection ( ) , 1 ) ; if ( this . checkApplicable ( a . elementPath ( ) , a ) ) { var b = this . _ . enterMode ; if ( ! b ) this . _ . enterMode = a . activeEnterMode ; n . call ( this , a . getSelection ( ) , 1 , a ) ; this . _ . enterMode = b } } , applyToRange : function ( a ) { this . applyToRange = this . type == CKEDITOR . STYLE _INLINE ? e : this . type == CKEDITOR . STYLE _BLOCK ? h : this . type == CKEDITOR . STYLE _OBJECT ? f : null ; return this . applyToRange ( a ) } , removeFromRange : function ( a ) { this . removeFromRange =
this . type == CKEDITOR . STYLE _INLINE ? b : this . type == CKEDITOR . STYLE _BLOCK ? l : this . type == CKEDITOR . STYLE _OBJECT ? d : null ; return this . removeFromRange ( a ) } , applyToObject : function ( a ) { u ( a , this ) } , checkActive : function ( a , b ) { switch ( this . type ) { case CKEDITOR . STYLE _BLOCK : return this . checkElementRemovable ( a . block || a . blockLimit , true , b ) ; case CKEDITOR . STYLE _OBJECT : case CKEDITOR . STYLE _INLINE : for ( var c = a . elements , d = 0 , e ; d < c . length ; d ++ ) { e = c [ d ] ; if ( ! ( this . type == CKEDITOR . STYLE _INLINE && ( e == a . block || e == a . blockLimit ) ) ) { if ( this . type ==
CKEDITOR . STYLE _OBJECT ) { var f = e . getName ( ) ; if ( ! ( typeof this . element == "string" ? f == this . element : f in this . element ) ) continue } if ( this . checkElementRemovable ( e , true , b ) ) return true } } } return false } , checkApplicable : function ( a , b , c ) { b && b instanceof CKEDITOR . filter && ( c = b ) ; if ( c && ! c . check ( this ) ) return false ; switch ( this . type ) { case CKEDITOR . STYLE _OBJECT : return ! ! a . contains ( this . element ) ; case CKEDITOR . STYLE _BLOCK : return ! ! a . blockLimit . getDtd ( ) [ this . element ] } return true } , checkElementMatch : function ( a , b ) { var c = this . _ . definition ;
if ( ! a || ! c . ignoreReadonly && a . isReadOnly ( ) ) return false ; var d = a . getName ( ) ; if ( typeof this . element == "string" ? d == this . element : d in this . element ) { if ( ! b && ! a . hasAttributes ( ) ) return true ; if ( d = c . _AC ) c = d ; else { var d = { } , e = 0 , f = c . attributes ; if ( f ) for ( var g in f ) { e ++ ; d [ g ] = f [ g ] } if ( g = CKEDITOR . style . getStyleText ( c ) ) { d . style || e ++ ; d . style = g } d . _length = e ; c = c . _AC = d } if ( c . _length ) { for ( var h in c ) if ( h != "_length" ) { e = a . getAttribute ( h ) || "" ; if ( h == "style" ) a : { d = c [ h ] ; typeof d == "string" && ( d = CKEDITOR . tools . parseCssText ( d ) ) ; typeof e ==
"string" && ( e = CKEDITOR . tools . parseCssText ( e , true ) ) ; g = void 0 ; for ( g in d ) if ( ! ( g in e && ( e [ g ] == d [ g ] || d [ g ] == "inherit" || e [ g ] == "inherit" ) ) ) { d = false ; break a } d = true } else d = c [ h ] == e ; if ( d ) { if ( ! b ) return true } else if ( b ) return false } if ( b ) return true } else return true } return false } , checkElementRemovable : function ( a , b , c ) { if ( this . checkElementMatch ( a , b , c ) ) return true ; if ( b = k ( this ) [ a . getName ( ) ] ) { var d ; if ( ! ( b = b . attributes ) ) return true ; for ( c = 0 ; c < b . length ; c ++ ) { d = b [ c ] [ 0 ] ; if ( d = a . getAttribute ( d ) ) { var e = b [ c ] [ 1 ] ; if ( e === null || typeof e ==
"string" && d == e || e . test ( d ) ) return true } } } return false } , buildPreview : function ( a ) { var b = this . _ . definition , c = [ ] , d = b . element ; d == "bdo" && ( d = "span" ) ; var c = [ "<" , d ] , e = b . attributes ; if ( e ) for ( var f in e ) c . push ( " " , f , '="' , e [ f ] , '"' ) ; ( e = CKEDITOR . style . getStyleText ( b ) ) && c . push ( ' style="' , e , '"' ) ; c . push ( ">" , a || b . name , "</" , d , ">" ) ; return c . join ( "" ) } , getDefinition : function ( ) { return this . _ . definition } } ; CKEDITOR . style . getStyleText = function ( a ) { var b = a . _ST ; if ( b ) return b ; var b = a . styles , c = a . attributes && a . attributes . style || "" ,
d = "" ; c . length && ( c = c . replace ( M , ";" ) ) ; for ( var e in b ) { var f = b [ e ] , g = ( e + ":" + f ) . replace ( M , ";" ) ; f == "inherit" ? d = d + g : c = c + g } c . length && ( c = CKEDITOR . tools . normalizeCssText ( c , true ) ) ; return a . _ST = c + d } ; CKEDITOR . style . customHandlers = { } ; CKEDITOR . style . addCustomHandler = function ( a ) { var b = function ( a ) { this . _ = { definition : a } ; this . setup && this . setup ( a ) } ; b . prototype = CKEDITOR . tools . extend ( CKEDITOR . tools . prototypedCopy ( CKEDITOR . style . prototype ) , { assignedTo : CKEDITOR . STYLE _OBJECT } , a , true ) ; return this . customHandlers [ a . type ] = b } ;
var Q = CKEDITOR . POSITION _PRECEDING | CKEDITOR . POSITION _IDENTICAL | CKEDITOR . POSITION _IS _CONTAINED , J = CKEDITOR . POSITION _FOLLOWING | CKEDITOR . POSITION _IDENTICAL | CKEDITOR . POSITION _IS _CONTAINED } ) ( ) ; CKEDITOR . styleCommand = function ( a , e ) { this . requiredContent = this . allowedContent = this . style = a ; CKEDITOR . tools . extend ( this , e , true ) } ; CKEDITOR . styleCommand . prototype . exec = function ( a ) { a . focus ( ) ; this . state == CKEDITOR . TRISTATE _OFF ? a . applyStyle ( this . style ) : this . state == CKEDITOR . TRISTATE _ON && a . removeStyle ( this . style ) } ;
CKEDITOR . stylesSet = new CKEDITOR . resourceManager ( "" , "stylesSet" ) ; CKEDITOR . addStylesSet = CKEDITOR . tools . bind ( CKEDITOR . stylesSet . add , CKEDITOR . stylesSet ) ; CKEDITOR . loadStylesSet = function ( a , e , b ) { CKEDITOR . stylesSet . addExternal ( a , e , "" ) ; CKEDITOR . stylesSet . load ( a , b ) } ;
CKEDITOR . tools . extend ( CKEDITOR . editor . prototype , { attachStyleStateChange : function ( a , e ) { var b = this . _ . styleStateChangeCallbacks ; if ( ! b ) { b = this . _ . styleStateChangeCallbacks = [ ] ; this . on ( "selectionChange" , function ( a ) { for ( var e = 0 ; e < b . length ; e ++ ) { var d = b [ e ] , g = d . style . checkActive ( a . data . path , this ) ? CKEDITOR . TRISTATE _ON : CKEDITOR . TRISTATE _OFF ; d . fn . call ( this , g ) } } ) } b . push ( { style : a , fn : e } ) } , applyStyle : function ( a ) { a . apply ( this ) } , removeStyle : function ( a ) { a . remove ( this ) } , getStylesSet : function ( a ) { if ( this . _ . stylesDefinitions ) a ( this . _ . stylesDefinitions ) ;
"string" && ( e = CKEDITOR . tools . parseCssText ( e , true ) ) ; g = void 0 ; for ( g in d ) if ( ! ( g in e && ( e [ g ] == d [ g ] || d [ g ] == "inherit" || e [ g ] == "inherit" ) ) ) { d = false ; break a } d = true } else d = c [ h ] == e ; if ( d ) { if ( ! b ) return true } else if ( b ) return false } if ( b ) return true } else return true } return false } , checkElementRemovable : function ( a , b , c ) { if ( this . checkElementMatch ( a , b , c ) ) return true ; if ( b = E ( this ) [ a . getName ( ) ] ) { var d ; if ( ! ( b = b . attributes ) ) return true ; for ( c = 0 ; c < b . length ; c ++ ) { d = b [ c ] [ 0 ] ; if ( d = a . getAttribute ( d ) ) { var e = b [ c ] [ 1 ] ; if ( e === null ) return true ;
if ( typeof e == "string" ) { if ( d == e ) return true } else if ( e . test ( d ) ) return true } } } return false } , buildPreview : function ( a ) { var b = this . _ . definition , c = [ ] , d = b . element ; d == "bdo" && ( d = "span" ) ; var c = [ "<" , d ] , e = b . attributes ; if ( e ) for ( var f in e ) c . push ( " " , f , '="' , e [ f ] , '"' ) ; ( e = CKEDITOR . style . getStyleText ( b ) ) && c . push ( ' style="' , e , '"' ) ; c . push ( ">" , a || b . name , "</" , d , ">" ) ; return c . join ( "" ) } , getDefinition : function ( ) { return this . _ . definition } } ; CKEDITOR . style . getStyleText = function ( a ) { var b = a . _ST ; if ( b ) return b ; var b = a . styles , c =
a . attributes && a . attributes . style || "" , d = "" ; c . length && ( c = c . replace ( M , ";" ) ) ; for ( var e in b ) { var f = b [ e ] , g = ( e + ":" + f ) . replace ( M , ";" ) ; f == "inherit" ? d = d + g : c = c + g } c . length && ( c = CKEDITOR . tools . normalizeCssText ( c , true ) ) ; return a . _ST = c + d } ; CKEDITOR . style . customHandlers = { } ; CKEDITOR . style . addCustomHandler = function ( a ) { var b = function ( a ) { this . _ = { definition : a } ; this . setup && this . setup ( a ) } ; b . prototype = CKEDITOR . tools . extend ( CKEDITOR . tools . prototypedCopy ( CKEDITOR . style . prototype ) , { assignedTo : CKEDITOR . STYLE _OBJECT } , a , true ) ;
return this . customHandlers [ a . type ] = b } ; var L = CKEDITOR . POSITION _PRECEDING | CKEDITOR . POSITION _IDENTICAL | CKEDITOR . POSITION _IS _CONTAINED , B = CKEDITOR . POSITION _FOLLOWING | CKEDITOR . POSITION _IDENTICAL | CKEDITOR . POSITION _IS _CONTAINED } ) ( ) ; CKEDITOR . styleCommand = function ( a , e ) { this . requiredContent = this . allowedContent = this . style = a ; CKEDITOR . tools . extend ( this , e , true ) } ;
CKEDITOR . styleCommand . prototype . exec = function ( a ) { a . focus ( ) ; this . state == CKEDITOR . TRISTATE _OFF ? a . applyStyle ( this . style ) : this . state == CKEDITOR . TRISTATE _ON && a . removeStyle ( this . style ) } ; CKEDITOR . stylesSet = new CKEDITOR . resourceManager ( "" , "stylesSet" ) ; CKEDITOR . addStylesSet = CKEDITOR . tools . bind ( CKEDITOR . stylesSet . add , CKEDITOR . stylesSet ) ; CKEDITOR . loadStylesSet = function ( a , e , b ) { CKEDITOR . stylesSet . addExternal ( a , e , "" ) ; CKEDITOR . stylesSet . load ( a , b ) } ;
CKEDITOR . tools . extend ( CKEDITOR . editor . prototype , { attachStyleStateChange : function ( a , e ) { var b = this . _ . styleStateChangeCallbacks ; if ( ! b ) { b = this . _ . styleStateChangeCallbacks = [ ] ; this . on ( "selectionChange" , function ( a ) { for ( var e = 0 ; e < b . length ; e ++ ) { var d = b [ e ] , h = d . style . checkActive ( a . data . path , this ) ? CKEDITOR . TRISTATE _ON : CKEDITOR . TRISTATE _OFF ; d . fn . call ( this , h ) } } ) } b . push ( { style : a , fn : e } ) } , applyStyle : function ( a ) { a . apply ( this ) } , removeStyle : function ( a ) { a . remove ( this ) } , getStylesSet : function ( a ) { if ( this . _ . stylesDefinitions ) a ( this . _ . stylesDefinitions ) ;
else { var e = this , b = e . config . stylesCombo _stylesSet || e . config . stylesSet ; if ( b === false ) a ( null ) ; else if ( b instanceof Array ) { e . _ . stylesDefinitions = b ; a ( b ) } else { b || ( b = "default" ) ; var b = b . split ( ":" ) , c = b [ 0 ] ; CKEDITOR . stylesSet . addExternal ( c , b [ 1 ] ? b . slice ( 1 ) . join ( ":" ) : CKEDITOR . getUrl ( "styles.js" ) , "" ) ; CKEDITOR . stylesSet . load ( c , function ( b ) { e . _ . stylesDefinitions = b [ c ] ; a ( e . _ . stylesDefinitions ) } ) } } } } ) ;
CKEDITOR . dom . comment = function ( a , e ) { typeof a == "string" && ( a = ( e ? e . $ : document ) . createComment ( a ) ) ; CKEDITOR . dom . domObject . call ( this , a ) } ; CKEDITOR . dom . comment . prototype = new CKEDITOR . dom . node ; CKEDITOR . tools . extend ( CKEDITOR . dom . comment . prototype , { type : CKEDITOR . NODE _COMMENT , getOuterHtml : function ( ) { return "<\!--" + this . $ . nodeValue + "--\>" } } ) ; "use strict" ;
( function ( ) { var a = { } , e = { } , b ; for ( b in CKEDITOR . dtd . $blockLimit ) b in CKEDITOR . dtd . $list || ( a [ b ] = 1 ) ; for ( b in CKEDITOR . dtd . $block ) b in CKEDITOR . dtd . $blockLimit || b in CKEDITOR . dtd . $empty || ( e [ b ] = 1 ) ; CKEDITOR . dom . elementPath = function ( b , f ) { var d = null , g= null , h = [ ] , m = b , j , f = f || b . getDocument ( ) . getBody ( ) ; do if ( m . type == CKEDITOR . NODE _ELEMENT ) { h. push ( m ) ; if ( ! this . lastElement ) { this . lastElement = m; if ( m . is ( CKEDITOR . dtd . $object ) || m . getAttribute ( "contenteditable" ) == "false" ) continue } if ( m . equals ( f ) ) break ; if ( ! g) { j = m . getName ( ) ;
m . getAttribute ( "contenteditable" ) == "true" ? g= m : ! d && e [ j ] && ( d = m ) ; if ( a [ j ] ) { var p ; if ( p = ! d ) { if ( j = j == "div" ) { a : { j = m . getChildren ( ) ; p = 0 ; for ( var u = j . count ( ) ; p < u ; p ++ ) { var t = j . getItem ( p ) ; if ( t . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $block [ t. getName ( ) ] ) { j = true ; break a } } j = false } j = ! j } p = j } p ? d = m : g = m } } } while ( m = m . getParent ( ) ) ; g || ( g = f ) ; this . block = d ; this . blockLimit = g ; this . root = f ; this . elements = h } } ) ( ) ;
( function ( ) { var a = { } , e = { } , b ; for ( b in CKEDITOR . dtd . $blockLimit ) b in CKEDITOR . dtd . $list || ( a [ b ] = 1 ) ; for ( b in CKEDITOR . dtd . $block ) b in CKEDITOR . dtd . $blockLimit || b in CKEDITOR . dtd . $empty || ( e [ b ] = 1 ) ; CKEDITOR . dom . elementPath = function ( b , f ) { var d = null , h= null , l = [ ] , i = b , g , f = f || b . getDocument ( ) . getBody ( ) ; do if ( i . type == CKEDITOR . NODE _ELEMENT ) { l. push ( i ) ; if ( ! this . lastElement ) { this . lastElement = i; if ( i . is ( CKEDITOR . dtd . $object ) || i . getAttribute ( "contenteditable" ) == "false" ) continue } if ( i . equals ( f ) ) break ; if ( ! h) { g = i . getName ( ) ;
i . getAttribute ( "contenteditable" ) == "true" ? h= i : ! d && e [ g ] && ( d = i ) ; if ( a [ g ] ) { var m ; if ( m = ! d ) { if ( g = g == "div" ) { a : { g = i . getChildren ( ) ; m = 0 ; for ( var t = g . count ( ) ; m < t ; m ++ ) { var s = g . getItem ( m ) ; if ( s . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $block [ s. getName ( ) ] ) { g = true ; break a } } g = false } g = ! g } m = g } m ? d = i : h = i } } } while ( i = i . getParent ( ) ) ; h || ( h = f ) ; this . block = d ; this . blockLimit = h ; this . root = f ; this . elements = l } } ) ( ) ;
CKEDITOR . dom . elementPath . prototype = { compare : function ( a ) { var e = this . elements , a = a && a . elements ; if ( ! a || e . length != a . length ) return false ; for ( var b = 0 ; b < e . length ; b ++ ) if ( ! e [ b ] . equals ( a [ b ] ) ) return false ; return true } , contains : function ( a , e , b ) { var c ; typeof a == "string" && ( c = function ( b ) { return b . getName ( ) == a } ) ; a instanceof CKEDITOR . dom . element ? c = function ( b ) { return b . equals ( a ) } : CKEDITOR . tools . isArray ( a ) ? c = function ( b ) { return CKEDITOR . tools . indexOf ( a , b . getName ( ) ) > - 1 } : typeof a == "function" ? c = a : typeof a == "object" && ( c =
function ( b ) { return b . getName ( ) in a } ) ; var f = this . elements , d = f . length ; e && d -- ; if ( b ) { f = Array . prototype . slice . call ( f , 0 ) ; f . reverse ( ) } for ( e = 0 ; e < d ; e ++ ) if ( c ( f [ e ] ) ) return f [ e ] ; return null } , isContextFor : function ( a ) { var e ; if ( a in CKEDITOR . dtd . $block ) { e = this . contains ( CKEDITOR . dtd . $intermediate ) || this . root . equals ( this . block ) && this . block || this . blockLimit ; return ! ! e . getDtd ( ) [ a ] } return true } , direction : function ( ) { return ( this . block || this . blockLimit || this . root ) . getDirection ( 1 ) } } ;
CKEDITOR . dom . text = function ( a , e ) { typeof a == "string" && ( a = ( e ? e . $ : document ) . createTextNode ( a ) ) ; this . $ = a } ; CKEDITOR . dom . text . prototype = new CKEDITOR . dom . node ;
CKEDITOR . tools . extend ( CKEDITOR . dom . text . prototype , { type : CKEDITOR . NODE _TEXT , getLength : function ( ) { return this . $ . nodeValue . length } , getText : function ( ) { return this . $ . nodeValue } , setText : function ( a ) { this . $ . nodeValue = a } , split : function ( a ) { var e = this . $ . parentNode , b = e . childNodes . length , c = this . getLength ( ) , f = this . getDocument ( ) , d = new CKEDITOR . dom . text ( this . $ . splitText ( a ) , f ) ; if ( e . childNodes . length == b ) if ( a >= c ) { d = f . createText ( "" ) ; d . insertAfter ( this ) } else { a = f . createText ( "" ) ; a . insertAfter ( d ) ; a . remove ( ) } return d } , substring : function ( a ,
e ) { return typeof e != "number" ? this . $ . nodeValue . substr ( a ) : this . $ . nodeValue . substring ( a , e ) } } ) ;
( function ( ) { function a ( a , c , e ) { var d = a . serializable , g = c [ e ? "endContainer" : "startContainer" ] , h = e ? "endOffset" : "startOffset" , m = d ? c . document . getById ( a . startNode ) : a . startNode , a = d ? c . document . getById ( a . endNode ) : a . endNode ; if ( g. equals ( m . getPrevious ( ) ) ) { c . startOffset = c . startOffset - g . getLength ( ) - a . getPrevious ( ) . getLength ( ) ; g = a . getNext ( ) } else if ( g . equals ( a . getPrevious ( ) ) ) { c . startOffset = c . startOffset - g. getLength ( ) ; g = a . getNext ( ) } g . equals ( m . getParent ( ) ) && c [ h ] ++ ; g . equals ( a . getParent ( ) ) && c [ h ] ++ ; c [ e ? "endContainer" : "startContainer" ] =
g ; return c } CKEDITOR . dom . rangeList = function ( a ) { if ( a instanceof CKEDITOR . dom . rangeList ) return a ; a ? a instanceof CKEDITOR . dom . range && ( a = [ a ] ) : a = [ ] ; return CKEDITOR . tools . extend ( a , e ) } ; var e = { createIterator : function ( ) { var a = this , c = CKEDITOR . dom . walker . bookmark ( ) , e = [ ] , d ; return { getNextRange : function ( g ) { d = d === void 0 ? 0 : d + 1 ; var h= a [ d ] ; if ( h && a . length > 1 ) { if ( ! d ) for ( var m= a . length - 1 ; m >= 0 ; m -- ) e . unshift ( a [ m ] . createBookmark ( true ) ) ; if ( g) for ( var j = 0 ; a [ d + j + 1 ] ; ) { for ( var p = h . document , g = 0 , m = p . getById ( e [ j ] . endNode ) , p = p . getById ( e [ j +
1 ] . startNode ) ; ; ) { m= m . getNextSourceNode ( false ) ; if ( p. equals ( m ) ) g = 1 ; else if ( c ( m ) || m . type == CKEDITOR . NODE _ELEMENT && m . isBlockBoundary ( ) ) continue ; break } if ( ! g) break ; j ++ } for ( h . moveToBookmark ( e . shift ( ) ) ; j-- ; ) { m = a [ ++ d ] ; m . moveToBookmark ( e . shift ( ) ) ; h. setEnd ( m . endContainer , m . endOffset ) } } return h } } } , createBookmarks : function ( b ) { for ( var c = [ ] , e , d = 0 ; d < this . length ; d ++ ) { c . push ( e = this [ d ] . createBookmark ( b , true ) ) ; for ( var g= d + 1 ; g < this . length ; g ++ ) { this [ g ] = a ( e , this [ g ] ) ; this [ g ] = a ( e , this [ g ] , true ) } } return c } , createBookmarks2 : function ( a ) { for ( var c =
( function ( ) { function a ( a , c , e ) { var d = a . serializable , h = c [ e ? "endContainer" : "startContainer" ] , l = e ? "endOffset" : "startOffset" , i = d ? c . document . getById ( a . startNode ) : a . startNode , a = d ? c . document . getById ( a . endNode ) : a . endNode ; if ( h. equals ( i . getPrevious ( ) ) ) { c . startOffset = c . startOffset - h . getLength ( ) - a . getPrevious ( ) . getLength ( ) ; h = a . getNext ( ) } else if ( h . equals ( a . getPrevious ( ) ) ) { c . startOffset = c . startOffset - h. getLength ( ) ; h = a . getNext ( ) } h . equals ( i . getParent ( ) ) && c [ l ] ++ ; h . equals ( a . getParent ( ) ) && c [ l ] ++ ; c [ e ? "endContainer" : "startContainer" ] =
h ; return c } CKEDITOR . dom . rangeList = function ( a ) { if ( a instanceof CKEDITOR . dom . rangeList ) return a ; a ? a instanceof CKEDITOR . dom . range && ( a = [ a ] ) : a = [ ] ; return CKEDITOR . tools . extend ( a , e ) } ; var e = { createIterator : function ( ) { var a = this , c = CKEDITOR . dom . walker . bookmark ( ) , e = [ ] , d ; return { getNextRange : function ( h ) { d = d === void 0 ? 0 : d + 1 ; var l= a [ d ] ; if ( l && a . length > 1 ) { if ( ! d ) for ( var i= a . length - 1 ; i >= 0 ; i -- ) e . unshift ( a [ i ] . createBookmark ( true ) ) ; if ( h) for ( var g = 0 ; a [ d + g + 1 ] ; ) { for ( var m = l . document , h = 0 , i = m . getById ( e [ g ] . endNode ) , m = m . getById ( e [ g +
1 ] . startNode ) ; ; ) { i= i . getNextSourceNode ( false ) ; if ( m. equals ( i ) ) h = 1 ; else if ( c ( i ) || i . type == CKEDITOR . NODE _ELEMENT && i . isBlockBoundary ( ) ) continue ; break } if ( ! h) break ; g ++ } for ( l . moveToBookmark ( e . shift ( ) ) ; g-- ; ) { i = a [ ++ d ] ; i . moveToBookmark ( e . shift ( ) ) ; l. setEnd ( i . endContainer , i . endOffset ) } } return l } } } , createBookmarks : function ( b ) { for ( var c = [ ] , e , d = 0 ; d < this . length ; d ++ ) { c . push ( e = this [ d ] . createBookmark ( b , true ) ) ; for ( var h= d + 1 ; h < this . length ; h ++ ) { this [ h ] = a ( e , this [ h ] ) ; this [ h ] = a ( e , this [ h ] , true ) } } return c } , createBookmarks2 : function ( a ) { for ( var c =
[ ] , e = 0 ; e < this . length ; e ++ ) c . push ( this [ e ] . createBookmark2 ( a ) ) ; return c } , moveToBookmarks : function ( a ) { for ( var c = 0 ; c < this . length ; c ++ ) this [ c ] . moveToBookmark ( a [ c ] ) } } } ) ( ) ;
( function ( ) { function a ( ) { return CKEDITOR . getUrl ( CKEDITOR . skinName . split ( "," ) [ 1 ] || "skins/" + CKEDITOR . skinName . split ( "," ) [ 0 ] + "/" ) } function e ( b ) { var c = CKEDITOR . skin [ "ua_" + b ] , d = CKEDITOR . env ; if ( c ) for ( var c = c . split ( "," ) . sort ( function ( a , b ) { return a > b ? - 1 : 1 } ) , e = 0 , f ; e < c . length ; e ++ ) { f = c [ e ] ; if ( d . ie && ( f . replace ( /^ie/ , "" ) == d . version || d . quirks && f == "iequirks" ) ) f = "ie" ; if ( d [ f ] ) { b = b + ( "_" + c [ e ] ) ; break } } return CKEDITOR . getUrl ( a ( ) + b + ".css" ) } function b ( a , b ) { if ( ! d [ a ] ) { CKEDITOR . document . appendStyleSheet ( e ( a ) ) ; d [ a ] = 1 } b && b ( ) }
function c ( a ) { var b = a . getById ( g ) ; if ( ! b ) { b = a . getHead ( ) . append ( "style" ) ; b . setAttribute ( "id" , g ) ; b . setAttribute ( "type" , "text/css" ) } return b } function f ( a , b , c ) { var d , e , f ; if ( CKEDITOR . env . webkit ) { b = b . split ( "}" ) . slice ( 0 , - 1 ) ; for ( e = 0 ; e < b . length ; e ++ ) b [ e ] = b [ e ] . split ( "{" ) } for ( var g= 0 ; g < a . length ; g ++ ) if ( CKEDITOR . env . webkit ) for ( e = 0 ; e < b . length ; e ++ ) { f = b [ e ] [ 1 ] ; for ( d = 0 ; d < c . length ; d ++ ) f = f . replace ( c [ d ] [ 0 ] , c [ d ] [ 1 ] ) ; a [ g ] . $ . sheet . addRule ( b [ e ] [ 0 ] , f ) } else { f = b ; for ( d = 0 ; d < c . length ; d ++ ) f = f . replace ( c [ d ] [ 0 ] , c [ d ] [ 1 ] ) ; CKEDITOR . env . ie &&
CKEDITOR . env . version < 11 ? a [ g ] . $ . styleSheet . cssText = a [ g ] . $ . styleSheet . cssText + f : a [ g] . $ . innerHTML = a [ g ] . $ . innerHTML + f } } var d = { } ; CKEDITOR . skin = { path : a , loadPart : function ( c , d ) { CKEDITOR . skin . name != CKEDITOR . skinName . split ( "," ) [ 0 ] ? CKEDITOR . scriptLoader . load ( CKEDITOR . getUrl ( a ( ) + "skin.js" ) , function ( ) { b ( c , d ) } ) : b ( c , d ) } , getPath : function ( a ) { return CKEDITOR . getUrl ( e ( a ) ) } , icons : { } , addIcon : function ( a , b , c , d ) { a = a . toLowerCase ( ) ; this . icons [ a ] || ( this . icons [ a ] = { path : b , offset : c || 0 , bgsize : d || "16px" } ) } , getIconStyle : function ( a ,
b , c , d , e ) { var f ; if ( a ) { a = a . toLowerCase ( ) ; b && ( f = this . icons [ a + "-rtl" ] ) ; f || ( f = this . icons [ a ] ) } a = c || f && f . path || "" ; d = d || f && f . offset ; e = e || f && f . bgsize || "16px" ; return a && "background-image:url(" + CKEDITOR . getUrl ( a ) + ");background-position:0 " + d + "px;background-size:" + e + ";" } } ; CKEDITOR . tools . extend ( CKEDITOR . editor . prototype , { getUiColor : function ( ) { return this . uiColor } , setUiColor : function ( a ) { var b = c ( CKEDITOR . document ) ; return ( this . setUiColor = function ( a ) { var c = CKEDITOR . skin . chameleon , d = [ [ m , a ] ] ; this . uiColor = a ; f ( [ b ] , c ( this ,
"editor" ) , d ) ; f ( h , c ( this , "panel" ) , d ) } ) . call ( this , a ) } } ) ; var g= "cke_ui_color" , h = [ ] , m = /\$color/g ; CKEDITOR . on ( "instanceLoaded" , function ( a ) { if ( ! CKEDITOR . env . ie || ! CKEDITOR . env . quirks ) { var b = a . editor , a = function ( a ) { a = ( a . data [ 0 ] || a . data ) . element . getElementsByTag ( "iframe" ) . getItem ( 0 ) . getFrameDocument ( ) ; if ( ! a . getById ( "cke_ui_color" ) ) { a = c ( a ) ; h . push ( a ) ; var d = b . getUiColor ( ) ; d && f ( [ a ] , CKEDITOR . skin . chameleon ( b , "panel" ) , [ [ m , d ] ] ) } } ; b . on ( "panelShow" , a ) ; b . on ( "menuShow" , a ) ; b . config . uiColor && b . setUiColor ( b . config . uiColor ) } } ) } ) ( ) ;
function c ( a ) { var b = a . getById ( h ) ; if ( ! b ) { b = a . getHead ( ) . append ( "style" ) ; b . setAttribute ( "id" , h ) ; b . setAttribute ( "type" , "text/css" ) } return b } function f ( a , b , c ) { var d , e , f ; if ( CKEDITOR . env . webkit ) { b = b . split ( "}" ) . slice ( 0 , - 1 ) ; for ( e = 0 ; e < b . length ; e ++ ) b [ e ] = b [ e ] . split ( "{" ) } for ( var h= 0 ; h < a . length ; h ++ ) if ( CKEDITOR . env . webkit ) for ( e = 0 ; e < b . length ; e ++ ) { f = b [ e ] [ 1 ] ; for ( d = 0 ; d < c . length ; d ++ ) f = f . replace ( c [ d ] [ 0 ] , c [ d ] [ 1 ] ) ; a [ h ] . $ . sheet . addRule ( b [ e ] [ 0 ] , f ) } else { f = b ; for ( d = 0 ; d < c . length ; d ++ ) f = f . replace ( c [ d ] [ 0 ] , c [ d ] [ 1 ] ) ; CKEDITOR . env . ie &&
CKEDITOR . env . version < 11 ? a [ h ] . $ . styleSheet . cssText = a [ h ] . $ . styleSheet . cssText + f : a [ h] . $ . innerHTML = a [ h ] . $ . innerHTML + f } } var d = { } ; CKEDITOR . skin = { path : a , loadPart : function ( c , d ) { CKEDITOR . skin . name != CKEDITOR . skinName . split ( "," ) [ 0 ] ? CKEDITOR . scriptLoader . load ( CKEDITOR . getUrl ( a ( ) + "skin.js" ) , function ( ) { b ( c , d ) } ) : b ( c , d ) } , getPath : function ( a ) { return CKEDITOR . getUrl ( e ( a ) ) } , icons : { } , addIcon : function ( a , b , c , d ) { a = a . toLowerCase ( ) ; this . icons [ a ] || ( this . icons [ a ] = { path : b , offset : c || 0 , bgsize : d || "16px" } ) } , getIconStyle : function ( a ,
b , c , d , e ) { var f ; if ( a ) { a = a . toLowerCase ( ) ; b && ( f = this . icons [ a + "-rtl" ] ) ; f || ( f = this . icons [ a ] ) } a = c || f && f . path || "" ; d = d || f && f . offset ; e = e || f && f . bgsize || "16px" ; return a && "background-image:url(" + CKEDITOR . getUrl ( a ) + ");background-position:0 " + d + "px;background-size:" + e + ";" } } ; CKEDITOR . tools . extend ( CKEDITOR . editor . prototype , { getUiColor : function ( ) { return this . uiColor } , setUiColor : function ( a ) { var b = c ( CKEDITOR . document ) ; return ( this . setUiColor = function ( a ) { var c = CKEDITOR . skin . chameleon , d = [ [ i , a ] ] ; this . uiColor = a ; f ( [ b ] , c ( this ,
"editor" ) , d ) ; f ( l , c ( this , "panel" ) , d ) } ) . call ( this , a ) } } ) ; var h= "cke_ui_color" , l = [ ] , i = /\$color/g ; CKEDITOR . on ( "instanceLoaded" , function ( a ) { if ( ! CKEDITOR . env . ie || ! CKEDITOR . env . quirks ) { var b = a . editor , a = function ( a ) { a = ( a . data [ 0 ] || a . data ) . element . getElementsByTag ( "iframe" ) . getItem ( 0 ) . getFrameDocument ( ) ; if ( ! a . getById ( "cke_ui_color" ) ) { a = c ( a ) ; l . push ( a ) ; var d = b . getUiColor ( ) ; d && f ( [ a ] , CKEDITOR . skin . chameleon ( b , "panel" ) , [ [ i , d ] ] ) } } ; b . on ( "panelShow" , a ) ; b . on ( "menuShow" , a ) ; b . config . uiColor && b . setUiColor ( b . config . uiColor ) } } ) } ) ( ) ;
( function ( ) { if ( CKEDITOR . env . webkit ) CKEDITOR . env . hc = false ; else { var a = CKEDITOR . dom . element . createFromHtml ( '<div style="width:0;height:0;position:absolute;left:-10000px;border:1px solid;border-color:red blue"></div>' , CKEDITOR . document ) ; a . appendTo ( CKEDITOR . document . getHead ( ) ) ; try { var e = a . getComputedStyle ( "border-top-color" ) , b = a . getComputedStyle ( "border-right-color" ) ; CKEDITOR . env . hc = ! ! ( e && e == b ) } catch ( c ) { CKEDITOR . env . hc = false } a . remove ( ) } if ( CKEDITOR . env . hc ) CKEDITOR . env . cssClass = CKEDITOR . env . cssClass + " cke_hc" ;
CKEDITOR . document . appendStyleText ( ".cke{visibility:hidden;}" ) ; CKEDITOR . status = "loaded" ; CKEDITOR . fireOnce ( "loaded" ) ; if ( a = CKEDITOR . _ . pending ) { delete CKEDITOR . _ . pending ; for ( e = 0 ; e < a . length ; e ++ ) { CKEDITOR . editor . prototype . constructor . apply ( a [ e ] [ 0 ] , a [ e ] [ 1 ] ) ; CKEDITOR . add ( a [ e ] [ 0 ] ) } } } ) ( ) ; / *
Copyright ( c ) 2003 - 201 4 , CKSource - Frederico Knabben . All rights reserved .
Copyright ( c ) 2003 - 201 3 , CKSource - Frederico Knabben . All rights reserved .
For licensing , see LICENSE . md or http : //ckeditor.com/license
* /
CKEDITOR . skin . name = " moono "; CKEDITOR . skin . ua _editor = "ie,iequirks,ie7,ie8,gecko" ; CKEDITOR . skin . ua _dialog = "ie,iequirks,ie7,ie8 ";
CKEDITOR . skin . name = " icy_orange "; CKEDITOR . skin . ua _editor = "ie,iequirks,ie7,ie8,gecko" ; CKEDITOR . skin . ua _dialog = "ie,iequirks,ie7,ie8 ,opera ";
CKEDITOR . skin . chameleon = function ( ) { var b = function ( ) { return function ( b , e ) { for ( var a = b . match ( /[^#]./g ) , c = 0 ; 3 > c ; c ++ ) { var f = a , h = c , d ; d = parseInt ( a [ c ] , 16 ) ; d = ( "0" + ( 0 > e ? 0 | d * ( 1 + e ) : 0 | d + ( 255 - d ) * e ) . toString ( 16 ) ) . slice ( - 2 ) ; f [ h ] = d } return "#" + a . join ( "" ) } } ( ) , c = function ( ) { var b = new CKEDITOR . template ( "background:#{to};background-image:-webkit-gradient(linear,lefttop,leftbottom,from({from}),to({to}));background-image:-moz-linear-gradient(top,{from},{to});background-image:-webkit-linear-gradient(top,{from},{to});background-image:-o-linear-gradient(top,{from},{to});background-image:-ms-linear-gradient(top,{from},{to});background-image:linear-gradient(top,{from},{to});filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='{from}',endColorstr='{to}');" ) ; return function ( c ,
a ) { return b . output ( { from : c , to : a } ) } } ( ) , f = { editor : new CKEDITOR . template ( "{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ {defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_bottom [{defaultGradient}border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [{defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [{defaultGradient}outline-color:{defaultBorder};border-top-color:{defaultBorder};] {id} .cke_dialog_tab [{lightGradient}border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [{mediumGradient}] {id} .cke_dialog_contents [border-top-color:{defaultBorder};] {id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [background:{dialogTabSelected};border-bottom-color:{dialogTabSelectedBorder};] {id} .cke_dialog_body [background:{dialogBody};border-color:{defaultBorder};] {id} .cke_toolgroup [{lightGradient}border-color:{defaultBorder};] {id} a.cke_button_off:hover, {id} a.cke_button_off:focus, {id} a.cke_button_off:active [{mediumGradient}] {id} .cke_button_on [{ckeButtonOn}] {id} .cke_toolbar_separator [background-color: {ckeToolbarSeparator};] {id} .cke_combo_button [border-color:{defaultBorder};{lightGradient}] {id} a.cke_combo_button:hover, {id} a.cke_combo_button:focus, {id} .cke_combo_on a.cke_combo_button [border-color:{defaultBorder};{mediumGradient}] {id} .cke_path_item [color:{elementsPathColor};] {id} a.cke_path_item:hover, {id} a.cke_path_item:focus, {id} a.cke_path_item:active [background-color:{elementsPathBg};] {id}.cke_panel [border-color:{defaultBorder};] " ) ,
panel : new CKEDITOR . template ( ".cke_panel_grouptitle [{lightGradient}border-color:{defaultBorder};] .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [background-color:{menubuttonIconHover};] .cke_menuseparator [background-color:{menubuttonIcon};] a:hover.cke_colorbox, a:focus.cke_colorbox, a:active.cke_colorbox [border-color:{defaultBorder};] a:hover.cke_colorauto, a:hover.cke_colormore, a:focus.cke_colorauto, a:focus.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [background-color:{ckeColorauto};border-color:{defaultBorder};] " ) } ;
@ -587,13 +588,13 @@ setTimeout(function(){r()},0)});b.on("destroy",function(){clearTimeout(a)});e.on
command : c , returnValue : ! ! a } ) } , c = this ; "string" == typeof a ? d ( { type : "auto" , dataValue : a } , 1 ) : b . getClipboardData ( d ) } } } function g ( ) { q = 1 ; setTimeout ( function ( ) { q = 0 } , 100 ) } function i ( ) { n = 1 ; setTimeout ( function ( ) { n = 0 } , 10 ) } function h ( e ) { var a = b . document , d = a . getBody ( ) , c = ! 1 , j = function ( ) { c = ! 0 } ; d . on ( e , j ) ; ( 7 < CKEDITOR . env . version ? a . $ : a . $ . selection . createRange ( ) ) . execCommand ( e ) ; d . removeListener ( e , j ) ; return c } function f ( e , a , d ) { e = { type : e } ; if ( d && ! 1 === b . fire ( "beforePaste" , e ) || ! a ) return ! 1 ; e . dataValue = a ; return b . fire ( "paste" ,
e ) } function j ( ) { if ( CKEDITOR . env . ie && ! CKEDITOR . env . quirks ) { var e = b . getSelection ( ) , a , d , c ; if ( e . getType ( ) == CKEDITOR . SELECTION _ELEMENT && ( a = e . getSelectedElement ( ) ) ) d = e . getRanges ( ) [ 0 ] , c = b . document . createText ( "" ) , c . insertBefore ( a ) , d . setStartBefore ( c ) , d . setEndAfter ( a ) , e . selectRanges ( [ d ] ) , setTimeout ( function ( ) { a . getParent ( ) && ( c . remove ( ) , e . selectElement ( a ) ) } , 0 ) } } function l ( a , d ) { var c = b . document , j = b . editable ( ) , l = function ( b ) { b . cancel ( ) } , g ; if ( ! c . getById ( "cke_pastebin" ) ) { var i = b . getSelection ( ) , s = i . createBookmarks ( ) ;
CKEDITOR . env . ie && i . root . fire ( "selectionchange" ) ; var k = new CKEDITOR . dom . element ( ( CKEDITOR . env . webkit || j . is ( "body" ) ) && ! CKEDITOR . env . ie ? "body" : "div" , c ) ; k . setAttributes ( { id : "cke_pastebin" , "data-cke-temp" : "1" } ) ; var f = 0 , c = c . getWindow ( ) ; CKEDITOR . env . webkit ? ( j . append ( k ) , k . addClass ( "cke_editable" ) , j . is ( "body" ) || ( f = "static" != j . getComputedStyle ( "position" ) ? j : CKEDITOR . dom . element . get ( j . $ . offsetParent ) , f = f . getDocumentPosition ( ) . y ) ) : j . getAscendant ( CKEDITOR . env . ie ? "body" : "html" , 1 ) . append ( k ) ; k . setStyles ( { position : "absolute" ,
top : c . getScrollPosition ( ) . y - f + 10 + "px" , width : "1px" , height : Math . max ( 1 , c . getViewPaneSize ( ) . height - 20 ) + "px" , overflow : "hidden" , margin : 0 , padding : 0 } ) ; ( f = k . getParent ( ) . isReadOnly ( ) ) ? ( k . setOpacity ( 0 ) , k . setAttribute ( "contenteditable" , ! 0 ) ) : k . setStyle ( "ltr" == b . config . contentsLangDirection ? "left" : "right" , "-1000px" ) ; b . on ( "selectionChange" , l , null , null , 0 ) ; if ( CKEDITOR . env . webkit || CKEDITOR . env . gecko ) g = j . once ( "blur" , l , null , null , - 100 ) ; f && k . focus ( ) ; f = new CKEDITOR . dom . range ( k ) ; f . selectNodeContents ( k ) ; var h = f . select ( ) ;
CKEDITOR . env . ie && ( g = j . once ( "blur" , function ( ) { b . lockSelection ( h ) } ) ) ; var m = CKEDITOR . document . getWindow ( ) . getScrollPosition ( ) . y ; setTimeout ( function ( ) { if ( CKEDITOR . env . webkit ) CKEDITOR . document . getBody ( ) . $ . scrollTop = m ; g && g . removeListener ( ) ; CKEDITOR . env . ie && j . focus ( ) ; i . selectBookmarks ( s ) ; k . remove ( ) ; var a ; if ( CKEDITOR . env . webkit && ( a = k . getFirst ( ) ) && a . is && a . hasClass ( "Apple-style-span" ) ) k = a ; b . removeListener ( "selectionChange" , l ) ; d ( k . getHtml ( ) ) } , 0 ) } } function s ( ) { if ( CKEDITOR . env . ie ) { b . focus ( ) ; g ( ) ; var a = b . focusManager ;
a . lock ( ) ; if ( b . editable ( ) . fire ( p ) && ! h ( "paste" ) ) return a . unlock ( ) , ! 1 ; a . unlock ( ) } else try { if ( b . editable ( ) . fire ( p ) && ! b . document . $ . execCommand ( "Paste" , ! 1 , null ) ) throw 0 ; } catch ( d ) { return ! 1 } return ! 0 } function o ( a ) { if ( "wysiwyg" == b . mode ) switch ( a . data . keyCode ) { case CKEDITOR . CTRL + 86 : case CKEDITOR . SHIFT + 45 : a = b . editable ( ) ; g ( ) ; ! CKEDITOR . env . ie && a . fire ( "beforepaste" ) ; break ; case CKEDITOR . CTRL + 88 : case CKEDITOR . SHIFT + 46 : b . fire ( "saveSnapshot" ) , setTimeout ( function ( ) { b . fire ( "saveSnapshot" ) } , 50 ) } } function u ( a ) { var d = { type : "auto" } ,
c = b . fire ( "beforePaste" , d ) ; l ( a , function ( b ) { b = b . replace ( /<span[^>]+data-cke-bookmark[^<]*?<\/span>/ig , "" ) ; c && f ( d . type , b , 0 , 1 ) } ) } function r ( ) { if ( "wysiwyg" == b . mode ) { var a = m ( "paste" ) ; b . getCommand ( "cut" ) . setState ( m ( "cut" ) ) ; b . getCommand ( "copy" ) . setState ( m ( "copy" ) ) ; b . getCommand ( "paste" ) . setState ( a ) ; b . fire ( "pasteState" , a ) } } function m ( a ) { if ( t && a in { paste : 1 , cut : 1 } ) return CKEDITOR . TRISTATE _DISABLED ; if ( "paste" == a ) return CKEDITOR . TRISTATE _OFF ; var a = b . getSelection ( ) , d = a . getRanges ( ) ; return a . getType ( ) == CKEDITOR . SELECTION _NONE ||
1 == d . length && d [ 0 ] . collapsed ? CKEDITOR . TRISTATE _DISABLED : CKEDITOR . TRISTATE _OFF } var n = 0 , q = 0 , t = 0 , p = CKEDITOR . env . ie ? "beforepaste" : "paste" ; ( function ( ) { b . on ( "key" , o ) ; b . on ( "contentDom" , a ) ; b . on ( "selectionChange" , function ( b ) { t = b . data . selection . getRanges ( ) [ 0 ] . checkReadOnly ( ) ; r ( ) } ) ; b . contextMenu && b . contextMenu . addListener ( function ( b , a ) { t = a . getRanges ( ) [ 0 ] . checkReadOnly ( ) ; return { cut : m ( "cut" ) , copy : m ( "copy" ) , paste : m ( "paste" ) } } ) } ) ( ) ; ( function ( ) { function a ( d , c , j , e , l ) { var g = b . lang . clipboard [ c ] ; b . addCommand ( c , j ) ; b . ui . addButton &&
b . ui . addButton ( d , { label : g , command : c , toolbar : "clipboard," + e } ) ; b . addMenuItems && b . addMenuItem ( c , { label : g , command : c , group : "clipboard" , order : l } ) } a ( "Cut" , "cut" , c ( "cut" ) , 10 , 1 ) ; a ( "Copy" , "copy" , c ( "copy" ) , 20 , 4 ) ; a ( "Paste" , "paste" , d ( ) , 30 , 8 ) } ) ( ) ; b . getClipboardData = function ( a , d ) { function c ( a ) { a . removeListener ( ) ; a . cancel ( ) ; d ( a . data ) } function j ( a ) { a . removeListener ( ) ; a . cancel ( ) ; i = ! 0 ; d ( { type : f , dataValue : a . data } ) } function l ( ) { this . customTitle = a && a . title } var g = ! 1 , f = "auto" , i = ! 1 ; d || ( d = a , a = null ) ; b . on ( "paste" , c , null , null ,
0 ) ; b . on ( "beforePaste" , function ( a ) { a . removeListener ( ) ; g = true ; f = a . data . type } , null , null , 1E3 ) ; ! 1 === s ( ) && ( b . removeListener ( "paste" , c ) , g && b . fire ( "pasteDialog" , l ) ? ( b . on ( "pasteDialogCommit" , j ) , b . on ( "dialogHide" , function ( a ) { a . removeListener ( ) ; a . data . removeListener ( "pasteDialogCommit" , j ) ; setTimeout ( function ( ) { i || d ( null ) } , 10 ) } ) ) : d ( null ) ) } } function w ( b ) { if ( CKEDITOR . env . webkit ) { if ( ! b . match ( /^[^<]*$/g ) && ! b . match ( /^(<div><br( ?\/)?><\/div>|<div>[^<]*<\/div>)*$/gi ) ) return "html" } else if ( CKEDITOR . env . ie ) { if ( ! b . match ( /^([^<]|<br( ?\/)?>)*$/gi ) &&
top : c . getScrollPosition ( ) . y - f + 10 + "px" , width : "1px" , height : Math . max ( 1 , c . getViewPaneSize ( ) . height - 20 ) + "px" , overflow : "hidden" , margin : 0 , padding : 0 } ) ; CKEDITOR . env . safari && k . setStyles ( CKEDITOR . tools . cssVendorPrefix ( "user-select" , "text" ) ) ; ( f = k . getParent ( ) . isReadOnly ( ) ) ? ( k . setOpacity ( 0 ) , k . setAttribute ( "contenteditable" , ! 0 ) ) : k . setStyle ( "ltr" == b . config . contentsLangDirection ? "left" : "right" , "-1000px" ) ; b . on ( "selectionChange" , l , null , null , 0 ) ; if ( CKEDITOR . env . webkit || CKEDITOR . env . gecko ) g = j . once ( "blur" , l , null , null , - 100 ) ;
f && k . focus ( ) ; f = new CKEDITOR . dom . range ( k ) ; f . selectNodeContents ( k ) ; var h = f . select ( ) ; CKEDITOR . env . ie && ( g = j . once ( "blur" , function ( ) { b . lockSelection ( h ) } ) ) ; var m = CKEDITOR . document . getWindow ( ) . getScrollPosition ( ) . y ; setTimeout ( function ( ) { if ( CKEDITOR . env . webkit ) CKEDITOR . document . getBody ( ) . $ . scrollTop = m ; g && g . removeListener ( ) ; CKEDITOR . env . ie && j . focus ( ) ; i . selectBookmarks ( s ) ; k . remove ( ) ; var a ; if ( CKEDITOR . env . webkit && ( a = k . getFirst ( ) ) && a . is && a . hasClass ( "Apple-style-span" ) ) k = a ; b . removeListener ( "selectionChange" , l ) ;
d ( k . getHtml ( ) ) } , 0 ) } } function s ( ) { if ( CKEDITOR . env . ie ) { b . focus ( ) ; g ( ) ; var a = b . focusManager ; a . lock ( ) ; if ( b . editable ( ) . fire ( p ) && ! h ( "paste" ) ) return a . unlock ( ) , ! 1 ; a . unlock ( ) } else try { if ( b . editable ( ) . fire ( p ) && ! b . document . $ . execCommand ( "Paste" , ! 1 , null ) ) throw 0 ; } catch ( d ) { return ! 1 } return ! 0 } function o ( a ) { if ( "wysiwyg" == b . mode ) switch ( a . data . keyCode ) { case CKEDITOR . CTRL + 86 : case CKEDITOR . SHIFT + 45 : a = b . editable ( ) ; g ( ) ; ! CKEDITOR . env . ie && a . fire ( "beforepaste" ) ; break ; case CKEDITOR . CTRL + 88 : case CKEDITOR . SHIFT + 46 : b . fire ( "saveSnapshot" ) ,
setTimeout ( function ( ) { b . fire ( "saveSnapshot" ) } , 50 ) } } function u ( a ) { var d = { type : "auto" } , c = b . fire ( "beforePaste" , d ) ; l ( a , function ( b ) { b = b . replace ( /<span[^>]+data-cke-bookmark[^<]*?<\/span>/ig , "" ) ; c && f ( d . type , b , 0 , 1 ) } ) } function r ( ) { if ( "wysiwyg" == b . mode ) { var a = m ( "paste" ) ; b . getCommand ( "cut" ) . setState ( m ( "cut" ) ) ; b . getCommand ( "copy" ) . setState ( m ( "copy" ) ) ; b . getCommand ( "paste" ) . setState ( a ) ; b . fire ( "pasteState" , a ) } } function m ( a ) { if ( t && a in { paste : 1 , cut : 1 } ) return CKEDITOR . TRISTATE _DISABLED ; if ( "paste" == a ) return CKEDITOR . TRISTATE _OFF ;
var a = b . getSelection ( ) , d = a . getRanges ( ) ; return a . getType ( ) == CKEDITOR . SELECTION _NONE || 1 == d . length && d [ 0 ] . collapsed ? CKEDITOR . TRISTATE _DISABLED : CKEDITOR . TRISTATE _OFF } var n = 0 , q = 0 , t = 0 , p = CKEDITOR . env . ie ? "beforepaste" : "paste" ; ( function ( ) { b . on ( "key" , o ) ; b . on ( "contentDom" , a ) ; b . on ( "selectionChange" , function ( b ) { t = b . data . selection . getRanges ( ) [ 0 ] . checkReadOnly ( ) ; r ( ) } ) ; b . contextMenu && b . contextMenu . addListener ( function ( b , a ) { t = a . getRanges ( ) [ 0 ] . checkReadOnly ( ) ; return { cut : m ( "cut" ) , copy : m ( "copy" ) , paste : m ( "paste" ) } } ) } ) ( ) ;
( function ( ) { function a ( d , c , j , e , l ) { var g = b . lang . clipboard [ c ] ; b . addCommand ( c , j ) ; b . ui . addButton && b . ui . addButton ( d , { label : g , command : c , toolbar : "clipboard," + e } ) ; b . addMenuItems && b . addMenuItem ( c , { label : g , command : c , group : "clipboard" , order : l } ) } a ( "Cut" , "cut" , c ( "cut" ) , 10 , 1 ) ; a ( "Copy" , "copy" , c ( "copy" ) , 20 , 4 ) ; a ( "Paste" , "paste" , d ( ) , 30 , 8 ) } ) ( ) ; b . getClipboardData = function ( a , d ) { function c ( a ) { a . removeListener ( ) ; a . cancel ( ) ; d ( a . data ) } function j ( a ) { a . removeListener ( ) ; a . cancel ( ) ; i = ! 0 ; d ( { type : f , dataValue : a . data } ) } function l ( ) { this . customTitle =
a && a . title } var g = ! 1 , f = "auto" , i = ! 1 ; d || ( d = a , a = null ) ; b . on ( "paste" , c , null , null , 0 ) ; b . on ( "beforePaste" , function ( a ) { a . removeListener ( ) ; g = true ; f = a . data . type } , null , null , 1E3 ) ; ! 1 === s ( ) && ( b . removeListener ( "paste" , c ) , g && b . fire ( "pasteDialog" , l ) ? ( b . on ( "pasteDialogCommit" , j ) , b . on ( "dialogHide" , function ( a ) { a . removeListener ( ) ; a . data . removeListener ( "pasteDialogCommit" , j ) ; setTimeout ( function ( ) { i || d ( null ) } , 10 ) } ) ) : d ( null ) ) } } function w ( b ) { if ( CKEDITOR . env . webkit ) { if ( ! b . match ( /^[^<]*$/g ) && ! b . match ( /^(<div><br( ?\/)?><\/div>|<div>[^<]*<\/div>)*$/gi ) ) return "html" } else if ( CKEDITOR . env . ie ) { if ( ! b . match ( /^([^<]|<br( ?\/)?>)*$/gi ) &&
! b . match ( /^(<p>([^<]|<br( ?\/)?>)*<\/p>|(\r\n))*$/gi ) ) return "html" } else if ( CKEDITOR . env . gecko ) { if ( ! b . match ( /^([^<]|<br( ?\/)?>)*$/gi ) ) return "html" } else return "html" ; return "htmlifiedtext" } function x ( b , a ) { function c ( a ) { return CKEDITOR . tools . repeat ( "</p><p>" , ~ ~ ( a / 2 ) ) + ( 1 == a % 2 ? "<br>" : "" ) } a = a . replace ( /\s+/g , " " ) . replace ( /> +</g , "><" ) . replace ( /<br ?\/>/gi , "<br>" ) ; a = a . replace ( /<\/?[A-Z]+>/g , function ( a ) { return a . toLowerCase ( ) } ) ; if ( a . match ( /^[^<]$/ ) ) return a ; CKEDITOR . env . webkit && - 1 < a . indexOf ( "<div>" ) && ( a = a . replace ( /^(<div>(<br>|)<\/div>)(?!$|(<div>(<br>|)<\/div>))/g ,
"<br>" ) . replace ( /^(<div>(<br>|)<\/div>){2}(?!$)/g , "<div></div>" ) , a . match ( /<div>(<br>|)<\/div>/ ) && ( a = "<p>" + a . replace ( /(<div>(<br>|)<\/div>)+/g , function ( a ) { return c ( a . split ( "</div><div>" ) . length + 1 ) } ) + "</p>" ) , a = a . replace ( /<\/div><div>/g , "<br>" ) , a = a . replace ( /<\/?div>/g , "" ) ) ; CKEDITOR . env . gecko && b . enterMode != CKEDITOR . ENTER _BR && ( CKEDITOR . env . gecko && ( a = a . replace ( /^<br><br>$/ , "<br>" ) ) , - 1 < a . indexOf ( "<br><br>" ) && ( a = "<p>" + a . replace ( /(<br>){2,}/g , function ( a ) { return c ( a . length / 4 ) } ) + "</p>" ) ) ; return o ( b , a ) } function y ( ) { var b =
new CKEDITOR . htmlParser . filter , a = { blockquote : 1 , dl : 1 , fieldset : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , ol : 1 , p : 1 , table : 1 , ul : 1 } , c = CKEDITOR . tools . extend ( { br : 0 } , CKEDITOR . dtd . $inline ) , d = { p : 1 , br : 1 , "cke:br" : 1 } , g = CKEDITOR . dtd , i = CKEDITOR . tools . extend ( { area : 1 , basefont : 1 , embed : 1 , iframe : 1 , map : 1 , object : 1 , param : 1 } , CKEDITOR . dtd . $nonBodyContent , CKEDITOR . dtd . $cdata ) , h = function ( a ) { delete a . name ; a . add ( new CKEDITOR . htmlParser . text ( " " ) ) } , f = function ( a ) { for ( var b = a , c ; ( b = b . next ) && b . name && b . name . match ( /^h\d$/ ) ; ) { c = new CKEDITOR . htmlParser . element ( "cke:br" ) ;
@ -642,8 +643,8 @@ d);this.removeListener("cancel",d);"ok"==a.name&&e(this.getContentElement("picke
for ( d = 0 ; d < i . length ; d ++ ) { 0 === d % 8 && h . push ( "</tr><tr>" ) ; var e = i [ d ] . split ( "/" ) , l = e [ 0 ] , n = e [ 1 ] || l ; e [ 1 ] || ( l = "#" + l . replace ( /^(.)(.)(.)$/ , "$1$1$2$2$3$3" ) ) ; e = c . lang . colorbutton . colors [ n ] || n ; h . push ( '<td><a class="cke_colorbox" _cke_focus=1 hidefocus=true title="' , e , '" onclick="CKEDITOR.tools.callFunction(' , b , ",'" , l , "','" , g , "'); return false;\" href=\"javascript:void('" , e , '\')" role="option" aria-posinset="' , d + 2 , '" aria-setsize="' , a , '"><span class="cke_colorbox" style="background-color:#' , n , '"></span></a></td>' ) } k &&
h . push ( '</tr><tr><td colspan=8 align=center><a class="cke_colormore" _cke_focus=1 hidefocus=true title="' , f . more , '" onclick="CKEDITOR.tools.callFunction(' , b , ",'?','" , g , "');return false;\" href=\"javascript:void('" , f . more , "')\"" , ' role="option" aria-posinset="' , a , '" aria-setsize="' , a , '">' , f . more , "</a></td>" ) ; h . push ( "</tr></table>" ) ; return h . join ( "" ) } function p ( c ) { return "false" == c . getAttribute ( "contentEditable" ) || c . getAttribute ( "data-nostyle" ) } var j = c . config , f = c . lang . colorbutton ; CKEDITOR . env . hc || ( o ( "TextColor" ,
"fore" , f . textColorTitle , 10 ) , o ( "BGColor" , "back" , f . bgColorTitle , 20 ) ) } } ) ; CKEDITOR . config . colorButton _colors = "000,800000,8B4513,2F4F4F,008080,000080,4B0082,696969,B22222,A52A2A,DAA520,006400,40E0D0,0000CD,800080,808080,F00,FF8C00,FFD700,008000,0FF,00F,EE82EE,A9A9A9,FFA07A,FFA500,FFFF00,00FF00,AFEEEE,ADD8E6,DDA0DD,D3D3D3,FFF0F5,FAEBD7,FFFFE0,F0FFF0,F0FFFF,F0F8FF,E6E6FA,FFF" ; CKEDITOR . config . colorButton _foreStyle = { element : "span" , styles : { color : "#(color)" } , overrides : [ { element : "font" , attributes : { color : null } } ] } ;
CKEDITOR . config . colorButton _backStyle = { element : "span" , styles : { "background-color" : "#(color)" } } ; CKEDITOR . plugins . add ( "divarea" , { afterInit : function ( a ) { a . addMode ( "wysiwyg" , function ( c ) { var b = CKEDITOR . dom . element . createFromHtml ( '<div class="cke_wysiwyg_div cke_reset" hidefocus="true"></div>' ) ; a . ui . space ( "contents" ) . append ( b ) ; b = a . editable ( b ) ; b . detach = CKEDITOR . tools . override ( b . detach , function ( a ) { return function ( ) { a . apply ( this , arguments ) ; this . remove ( ) } } ) ; a . setData ( a . getData ( 1 ) , c ) ; a . fire ( "contentDom" ) } ) } } ) ; ( function ( ) { function u( b ) { var d = b . startContainer . getAscendant ( function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && "true" == a . getAttribute ( "contenteditable" ) } , ! 0 ) ; if ( b . root . equals ( d ) ) return b ; d = new CKEDITOR . dom . range ( d ) ; d . moveToRange ( b ) ; return d } function m( b , d , a ) { a = b . config . forceEnterMode || a ; "wysiwyg" == b . mode && ( d || ( d = b . activeEnterMode ) , b . elementPath ( ) . isContextFor ( "p" ) || ( d = CKEDITOR . ENTER _BR , a = 1 ) , b . fire ( "saveSnapshot" ) , d == CKEDITOR . ENTER _BR ? p ( b , d , null , a ) : q ( b , d , null , a ) , b . fire ( "saveSnapshot" ) ) } function r ( b ) { for ( var b =
b . getSelection ( ) . getRanges ( ! 0 ) , d = b . length - 1 ; 0 < d ; d -- ) b [ d ] . deleteContents ( ) ; return b [ 0 ] } CKEDITOR . plugins . add ( "enterkey" , { init : function ( b ) { b . addCommand ( "enter" , { modes : { wysiwyg : 1 } , editorFocus : ! 1 , exec : function ( b ) { m ( b ) } } ) ; b . addCommand ( "shiftEnter" , { modes : { wysiwyg : 1 } , editorFocus : ! 1 , exec : function ( b ) { m ( b , b . activeShiftEnterMode , 1 ) } } ) ; b . setKeystroke ( [ [ 13 , "enter" ] , [ CKEDITOR . SHIFT + 13 , "shiftEnter" ] ] ) } } ) ; var v = CKEDITOR . dom . walker . whitespaces ( ) , w = CKEDITOR . dom . walker . bookmark ( ) ; CKEDITOR . plugins . enterkey = { enterBlock : function ( b ,
CKEDITOR . config . colorButton _backStyle = { element : "span" , styles : { "background-color" : "#(color)" } } ; CKEDITOR . plugins . add ( "divarea" , { afterInit : function ( a ) { a . addMode ( "wysiwyg" , function ( c ) { var b = CKEDITOR . dom . element . createFromHtml ( '<div class="cke_wysiwyg_div cke_reset" hidefocus="true"></div>' ) ; a . ui . space ( "contents" ) . append ( b ) ; b = a . editable ( b ) ; b . detach = CKEDITOR . tools . override ( b . detach , function ( a ) { return function ( ) { a . apply ( this , arguments ) ; this . remove ( ) } } ) ; a . setData ( a . getData ( 1 ) , c ) ; a . fire ( "contentDom" ) } ) } } ) ; ( function ( ) { function m( b , d , a ) { a = b . config . forceEnterMode || a ; "wysiwyg" == b . mode && ( d || ( d = b . activeEnterMode ) , b . elementPath ( ) . isContextFor ( "p" ) || ( d = CKEDITOR . ENTER _BR , a = 1 ) , b . fire ( "saveSnapshot" ) , d == CKEDITOR . ENTER _BR ? p ( b , d , null , a ) : q ( b , d , null , a ) , b . fire ( "saveSnapshot" ) ) } function r ( b ) { for ( var b = b . getSelection ( ) . getRanges ( ! 0 ) , d = b . length - 1 ; 0 < d ; d -- ) b [ d ] . deleteContents ( ) ; return b [ 0 ] } function u ( b ) { var d = b . startContainer . getAscendant ( function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && "true" == a . getAttribute ( "contenteditable" ) } ,
! 0 ) ; if ( b . root . equals ( d ) ) return b ; d = new CKEDITOR . dom . range ( d ) ; d . moveToRange ( b ) ; return d } CKEDITOR . plugins . add ( "enterkey" , { init : function ( b ) { b . addCommand ( "enter" , { modes : { wysiwyg : 1 } , editorFocus : ! 1 , exec : function ( b ) { m ( b ) } } ) ; b . addCommand ( "shiftEnter" , { modes : { wysiwyg : 1 } , editorFocus : ! 1 , exec : function ( b ) { m ( b , b . activeShiftEnterMode , 1 ) } } ) ; b . setKeystroke ( [ [ 13 , "enter" ] , [ CKEDITOR . SHIFT + 13 , "shiftEnter" ] ] ) } } ) ; var v = CKEDITOR . dom . walker . whitespaces ( ) , w = CKEDITOR . dom . walker . bookmark ( ) ; CKEDITOR . plugins . enterkey = { enterBlock : function ( b ,
d , a , h ) { if ( a = a || r ( b ) ) { var a = u ( a ) , f = a . document , i = a . checkStartOfBlock ( ) , k = a . checkEndOfBlock ( ) , j = b . elementPath ( a . startContainer ) , c = j . block , l = d == CKEDITOR . ENTER _DIV ? "div" : "p" , e ; if ( i && k ) { if ( c && ( c . is ( "li" ) || c . getParent ( ) . is ( "li" ) ) ) { c . is ( "li" ) || ( c = c . getParent ( ) ) ; a = c . getParent ( ) ; e = a . getParent ( ) ; var h = ! c . hasPrevious ( ) , n = ! c . hasNext ( ) , l = b . getSelection ( ) , g = l . createBookmarks ( ) , i = c . getDirection ( 1 ) , k = c . getAttribute ( "class" ) , o = c . getAttribute ( "style" ) , m = e . getDirection ( 1 ) != i , b = b . enterMode != CKEDITOR . ENTER _BR || m || o || k ;
if ( e . is ( "li" ) ) if ( h || n ) c [ h ? "insertBefore" : "insertAfter" ] ( e ) ; else c . breakParent ( e ) ; else { if ( b ) if ( j . block . is ( "li" ) ? ( e = f . createElement ( d == CKEDITOR . ENTER _P ? "p" : "div" ) , m && e . setAttribute ( "dir" , i ) , o && e . setAttribute ( "style" , o ) , k && e . setAttribute ( "class" , k ) , c . moveChildren ( e ) ) : e = j . block , h || n ) e [ h ? "insertBefore" : "insertAfter" ] ( a ) ; else c . breakParent ( a ) , e . insertAfter ( a ) ; else if ( c . appendBogus ( ! 0 ) , h || n ) for ( ; f = c [ h ? "getFirst" : "getLast" ] ( ) ; ) f [ h ? "insertBefore" : "insertAfter" ] ( a ) ; else for ( c . breakParent ( a ) ; f = c . getLast ( ) ; ) f . insertAfter ( a ) ;
c . remove ( ) } l . selectBookmarks ( g ) ; return } if ( c && c . getParent ( ) . is ( "blockquote" ) ) { c . breakParent ( c . getParent ( ) ) ; c . getPrevious ( ) . getFirst ( CKEDITOR . dom . walker . invisible ( 1 ) ) || c . getPrevious ( ) . remove ( ) ; c . getNext ( ) . getFirst ( CKEDITOR . dom . walker . invisible ( 1 ) ) || c . getNext ( ) . remove ( ) ; a . moveToElementEditStart ( c ) ; a . select ( ) ; return } } else if ( c && c . is ( "pre" ) && ! k ) { p ( b , d , a , h ) ; return } if ( i = a . splitBlock ( l ) ) { d = i . previousBlock ; c = i . nextBlock ; j = i . wasStartOfBlock ; b = i . wasEndOfBlock ; if ( c ) g = c . getParent ( ) , g . is ( "li" ) && ( c . breakParent ( g ) ,
@ -678,9 +679,11 @@ focusFn:l,clickFn:e};i.output(d,b);if(this.onRender)this.onRender();return c},cr
function ( ) { f . focus ( ! f . multiSelect && c . getValue ( ) ) } ) } ; e . onHide = function ( b ) { this . element . removeClass ( h ) ; c . setState ( c . modes && c . modes [ a . mode ] ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED ) ; c . _ . on = 0 ; if ( ! b && c . onClose ) c . onClose ( ) } ; e . onEscape = function ( ) { e . hide ( 1 ) } ; f . onClick = function ( a , b ) { c . onClick && c . onClick . call ( c , a , b ) ; e . hide ( ) } ; this . _ . panel = e ; this . _ . list = f ; e . getBlock ( this . id ) . onHide = function ( ) { c . _ . on = 0 ; c . setState ( CKEDITOR . TRISTATE _OFF ) } ; this . init && this . init ( ) } } , setValue : function ( a , b ) { this . _ . value = a ; var d =
this . document . getById ( "cke_" + this . id + "_text" ) ; d && ( ! a && ! b ? ( b = this . label , d . addClass ( "cke_combo_inlinelabel" ) ) : d . removeClass ( "cke_combo_inlinelabel" ) , d . setText ( "undefined" != typeof b ? b : a ) ) } , getValue : function ( ) { return this . _ . value || "" } , unmarkAll : function ( ) { this . _ . list . unmarkAll ( ) } , mark : function ( a ) { this . _ . list . mark ( a ) } , hideItem : function ( a ) { this . _ . list . hideItem ( a ) } , hideGroup : function ( a ) { this . _ . list . hideGroup ( a ) } , showAll : function ( ) { this . _ . list . showAll ( ) } , add : function ( a , b , d ) { this . _ . items [ a ] = d || a ; this . _ . list . add ( a ,
b , d ) } , startGroup : function ( a ) { this . _ . list . startGroup ( a ) } , commit : function ( ) { this . _ . committed || ( this . _ . list . commit ( ) , this . _ . committed = 1 , CKEDITOR . ui . fire ( "ready" , this ) ) ; this . _ . committed = 1 } , setState : function ( a ) { if ( this . _ . state != a ) { var b = this . document . getById ( "cke_" + this . id ) ; b . setState ( a , "cke_combo" ) ; a == CKEDITOR . TRISTATE _DISABLED ? b . setAttribute ( "aria-disabled" , ! 0 ) : b . removeAttribute ( "aria-disabled" ) ; this . _ . state = a } } , getState : function ( ) { return this . _ . state } , enable : function ( ) { this . _ . state == CKEDITOR . TRISTATE _DISABLED &&
this . setState ( this . _ . lastState ) } , disable : function ( ) { this . _ . state != CKEDITOR . TRISTATE _DISABLED && ( this . _ . lastState = this . _ . state , this . setState ( CKEDITOR . TRISTATE _DISABLED ) ) } } , statics : { handler : { create : function ( a ) { return new CKEDITOR . ui . richCombo ( a ) } } } } ) ; CKEDITOR . ui . prototype . addRichCombo = function ( a , b ) { this . add ( a , CKEDITOR . UI _RICHCOMBO , b ) } } ) ( ) ; ( function ( ) { function e ( b , a , e , h , j , n , l , o ) { for ( var p = b . config , k = new CKEDITOR . style ( l ) , c = j . split ( ";" ) , j = [ ] , g = { } , d = 0 ; d < c . length ; d ++ ) { var f = c [ d ] ; if ( f ) { var f = f . split ( "/" ) , m = { } , i = c [ d ] = f [ 0 ] ; m [ e ] = j [ d ] = f [ 1 ] || i ; g [ i ] = new CKEDITOR . style ( l , m ) ; g [ i ] . _ . definition . name = i } else c . splice ( d -- , 1 ) } b . ui . addRichCombo ( a , { label : h . label , title : h . panelTitle , toolbar : "styles," + o , allowedContent : k , requiredContent : k , panel : { css : [ CKEDITOR . skin . getPath ( "editor" ) ] . concat ( p . contentsCss ) , multiSelect : ! 1 , attributes : { "aria-label" : h . panelTitle } } ,
init : function ( ) { this . startGroup ( h . panelTitle ) ; for ( var b = 0 ; b < c . length ; b ++ ) { var a = c [ b ] ; this . add ( a , g [ a ] . buildPreview ( ) , a ) } } , onClick : function ( a ) { b . focus ( ) ; b . fire ( "saveSnapshot" ) ; var c = g [ a ] ; b [ this . getValue ( ) == a ? "removeStyle" : "applyStyle" ] ( c ) ; b . fire ( "saveSnapshot" ) } , onRender : function ( ) { b . on ( "selectionChange" , function ( a ) { for ( var c = this . getValue ( ) , a = a . data . path . elements , d = 0 , f ; d < a . length ; d ++ ) { f = a [ d ] ; for ( var e in g ) if ( g [ e ] . checkElementMatch ( f , ! 0 , b ) ) { e != c && this . setValue ( e ) ; return } } this . setValue ( "" , n ) } , this ) } ,
refresh : function ( ) { b . activeFilter . check ( k ) || this . setState ( CKEDITOR . TRISTATE _DISABLED ) } } ) } CKEDITOR . plugins . add ( "font" , { requires : "richcombo" , init : function ( b ) { var a = b . config ; e ( b , "Font" , "family" , b . lang . font , a . font _names , a . font _defaultLabel , a . font _style , 30 ) ; e ( b , "FontSize" , "size" , b . lang . font . fontSize , a . fontSize _sizes , a . fontSize _defaultLabel , a . fontSize _style , 40 ) } } ) } ) ( ) ; CKEDITOR . config . font _names = "Arial/Arial, Helvetica, sans-serif;Comic Sans MS/Comic Sans MS, cursive;Courier New/Courier New, Courier, monospace;Georgia/Georgia, serif;Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;Tahoma/Tahoma, Geneva, sans-serif;Times New Roman/Times New Roman, Times, serif;Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;Verdana/Verdana, Geneva, sans-serif" ;
this . setState ( this . _ . lastState ) } , disable : function ( ) { this . _ . state != CKEDITOR . TRISTATE _DISABLED && ( this . _ . lastState = this . _ . state , this . setState ( CKEDITOR . TRISTATE _DISABLED ) ) } } , statics : { handler : { create : function ( a ) { return new CKEDITOR . ui . richCombo ( a ) } } } } ) ; CKEDITOR . ui . prototype . addRichCombo = function ( a , b ) { this . add ( a , CKEDITOR . UI _RICHCOMBO , b ) } } ) ( ) ; ( function ( ) { function j ( a , b , c , f , m , j , p , r ) { for ( var s = a . config , n = new CKEDITOR . style ( p ) , i = m . split ( ";" ) , m = [ ] , k = { } , d = 0 ; d < i . length ; d ++ ) { var h = i [ d ] ; if ( h ) { var h = h . split ( "/" ) , q = { } , l = i [ d ] = h [ 0 ] ; q [ c ] = m [ d ] = h [ 1 ] || l ; k [ l ] = new CKEDITOR . style ( p , q ) ; k [ l ] . _ . definition . name = l } else i . splice ( d -- , 1 ) } a . ui . addRichCombo ( b , { label : f . label , title : f . panelTitle , toolbar : "styles," + r , allowedContent : n , requiredContent : n , panel : { css : [ CKEDITOR . skin . getPath ( "editor" ) ] . concat ( s . contentsCss ) , multiSelect : ! 1 , attributes : { "aria-label" : f . panelTitle } } ,
init : function ( ) { this . startGroup ( f . panelTitle ) ; for ( var a = 0 ; a < i . length ; a ++ ) { var b = i [ a ] ; this . add ( b , k [ b ] . buildPreview ( ) , b ) } } , onClick : function ( b ) { a . focus ( ) ; a . fire ( "saveSnapshot" ) ; var c = this . getValue ( ) , f = k [ b ] ; if ( c && b != c ) { var i = k [ c ] , e = a . getSelection ( ) . getRanges ( ) [ 0 ] ; if ( e . collapsed ) { var d = a . elementPath ( ) , g = d . contains ( function ( a ) { return i . checkElementRemovable ( a ) } ) ; if ( g ) { var h = e . checkBoundaryOfElement ( g , CKEDITOR . START ) , j = e . checkBoundaryOfElement ( g , CKEDITOR . END ) ; if ( h && j ) { for ( h = e . createBookmark ( ) ; d = g . getFirst ( ) ; ) d . insertBefore ( g ) ;
g . remove ( ) ; e . moveToBookmark ( h ) } else h ? e . moveToPosition ( g , CKEDITOR . POSITION _BEFORE _START ) : j ? e . moveToPosition ( g , CKEDITOR . POSITION _AFTER _END ) : ( e . splitElement ( g ) , e . moveToPosition ( g , CKEDITOR . POSITION _AFTER _END ) , o ( e , d . elements . slice ( ) , g ) ) ; a . getSelection ( ) . selectRanges ( [ e ] ) } } else a . removeStyle ( i ) } a [ c == b ? "removeStyle" : "applyStyle" ] ( f ) ; a . fire ( "saveSnapshot" ) } , onRender : function ( ) { a . on ( "selectionChange" , function ( b ) { for ( var c = this . getValue ( ) , b = b . data . path . elements , d = 0 , f ; d < b . length ; d ++ ) { f = b [ d ] ; for ( var e in k ) if ( k [ e ] . checkElementMatch ( f ,
! 0 , a ) ) { e != c && this . setValue ( e ) ; return } } this . setValue ( "" , j ) } , this ) } , refresh : function ( ) { a . activeFilter . check ( n ) || this . setState ( CKEDITOR . TRISTATE _DISABLED ) } } ) } function o ( a , b , c ) { var f = b . pop ( ) ; if ( f ) { if ( c ) return o ( a , b , f . equals ( c ) ? null : c ) ; c = f . clone ( ) ; a . insertNode ( c ) ; a . moveToPosition ( c , CKEDITOR . POSITION _AFTER _START ) ; o ( a , b ) } } CKEDITOR . plugins . add ( "font" , { requires : "richcombo" , init : function ( a ) { var b = a . config ; j ( a , "Font" , "family" , a . lang . font , b . font _names , b . font _defaultLabel , b . font _style , 30 ) ; j ( a , "FontSize" , "size" ,
a . lang . font . fontSize , b . fontSize _sizes , b . fontSize _defaultLabel , b . fontSize _style , 40 ) } } ) } ) ( ) ; CKEDITOR . config . font _names = "Arial/Arial, Helvetica, sans-serif;Comic Sans MS/Comic Sans MS, cursive;Courier New/Courier New, Courier, monospace;Georgia/Georgia, serif;Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;Tahoma/Tahoma, Geneva, sans-serif;Times New Roman/Times New Roman, Times, serif;Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;Verdana/Verdana, Geneva, sans-serif" ;
CKEDITOR . config . font _defaultLabel = "" ; CKEDITOR . config . font _style = { element : "span" , styles : { "font-family" : "#(family)" } , overrides : [ { element : "font" , attributes : { face : null } } ] } ; CKEDITOR . config . fontSize _sizes = "8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px" ; CKEDITOR . config . fontSize _defaultLabel = "" ; CKEDITOR . config . fontSize _style = { element : "span" , styles : { "font-size" : "#(size)" } , overrides : [ { element : "font" , attributes : { size : null } } ] } ; CKEDITOR . plugins . add ( "htmlwriter" , { init : function ( b ) { var a = new CKEDITOR . htmlWriter ; a . forceSimpleAmpersand = b . config . forceSimpleAmpersand ; a . indentationChars = b . config . dataIndentationChars || "\t" ; b . dataProcessor . writer = a } } ) ;
CKEDITOR . htmlWriter = CKEDITOR . tools . createClass ( { base : CKEDITOR . htmlParser . basicWriter , $ : function ( ) { this . base ( ) ; this . indentationChars = "\t" ; this . selfClosingEnd = " />" ; this . lineBreakChars = "\n" ; this . sortAttributes = 1 ; this . _ . indent = 0 ; this . _ . indentation = "" ; this . _ . inPre = 0 ; this . _ . rules = { } ; var b = CKEDITOR . dtd , a ; for ( a in CKEDITOR . tools . extend ( { } , b . $nonBodyContent , b . $block , b . $listItem , b . $tableContent ) ) this . setRules ( a , { indent : ! b [ a ] [ "#" ] , breakBeforeOpen : 1 , breakBeforeClose : ! b [ a ] [ "#" ] , breakAfterClose : 1 , needsSpace : a in
b . $block && ! ( a in { li : 1 , dt : 1 , dd : 1 } ) } ) ; this . setRules ( "br" , { breakAfterOpen : 1 } ) ; this . setRules ( "title" , { indent : 0 , breakAfterOpen : 0 } ) ; this . setRules ( "style" , { indent : 0 , breakBeforeClose : 1 } ) ; this . setRules ( "pre" , { breakAfterOpen : 1 , indent : 0 } ) } , proto : { openTag : function ( b ) { var a = this . _ . rules [ b ] ; this . _ . afterCloser && ( a && a . needsSpace && this . _ . needsSpace ) && this . _ . output . push ( "\n" ) ; this . _ . indent ? this . indentation ( ) : a && a . breakBeforeOpen && ( this . lineBreak ( ) , this . indentation ( ) ) ; this . _ . output . push ( "<" , b ) ; this . _ . afterCloser = 0 } ,
@ -718,7 +721,7 @@ a.hasAttribute("data-widget")}function z(a,b){return"boolean"==typeof a.inline?a
a . fire ( "lockSnapshot" , { dontUpdate : ! 0 } ) ; c . select ( ) ; c = b . wrapper . getOuterHtml ( ) ; b . wrapper . remove ( ) ; a . widgets . destroy ( b , ! 0 ) ; a . execCommand ( "paste" , c ) ; a . fire ( "unlockSnapshot" ) } function n ( a , b , c , d ) { var e = a . editor ; e . fire ( "lockSnapshot" ) ; c ? ( d = c . data ( "cke-widget-editable" ) , d = b . editables [ d ] , a . widgetHoldingFocusedEditable = b , b . focusedEditable = d , c . addClass ( "cke_widget_editable_focused" ) , d . filter && e . setActiveFilter ( d . filter ) , e . setActiveEnterMode ( d . enterMode , d . shiftEnterMode ) ) : ( d || b . focusedEditable . removeClass ( "cke_widget_editable_focused" ) ,
b . focusedEditable = null , a . widgetHoldingFocusedEditable = null , e . setActiveFilter ( null ) , e . setActiveEnterMode ( null , null ) ) ; e . fire ( "unlockSnapshot" ) } function V ( a ) { a . contextMenu && a . contextMenu . addListener ( function ( b ) { if ( b = a . widgets . getByElement ( b , ! 0 ) ) return b . fire ( "contextMenu" , { } ) } ) } function W ( a , b ) { return CKEDITOR . tools . trim ( b ) } function O ( a ) { var b = a . editor , c = CKEDITOR . plugins . lineutils ; b . on ( "contentDom" , function ( ) { var d = b . editable ( ) , e = CKEDITOR . env . ie && 9 > CKEDITOR . env . version || d . isInline ( ) ? d : b . document ; d . attachListener ( e ,
"drop" , function ( c ) { var d = c . data . $ . dataTransfer . getData ( "text" ) , e , h ; if ( d ) { try { e = JSON . parse ( d ) } catch ( j ) { return } if ( "cke-widget" == e . type && ( c . data . preventDefault ( ) , e . editor == b . name && ( h = a . instances [ e . id ] ) ) ) { a : if ( e = c . data . $ , d = b . createRange ( ) , c . data . testRange ) d = c . data . testRange ; else if ( document . caretRangeFromPoint ) c = b . document . $ . caretRangeFromPoint ( e . clientX , e . clientY ) , d . setStart ( CKEDITOR . dom . node ( c . startContainer ) , c . startOffset ) , d . collapse ( ! 0 ) ; else if ( e . rangeParent ) d . setStart ( CKEDITOR . dom . node ( e . rangeParent ) ,
e . rangeOffset ) , d . collapse ( ! 0 ) ; else if ( document . body . createTextRange ) c = b . document . getBody ( ) . $ . createTextRange ( ) , c . moveToPoint ( e . clientX , e . clientY ) , e = "cke-temp-" + ( new Date ) . getTime ( ) , c . pasteHTML ( '<span id="' + e + '"> </span>') , c = b . document . getById ( e ) , d . moveToPosition ( c , CKEDITOR . POSITION _BEFORE _START ) , c . remove ( ) ; else { d = null ; break a } d && ( CKEDITOR . env . gecko ? setTimeout ( A , 0 , b , h , d ) : A ( b , h , d ) ) } } } ) ; CKEDITOR . tools . extend ( a , { finder : new c . finder ( b , { lookups : { "default" : function ( a ) { if ( ! a . is ( CKEDITOR . dtd . $listItem ) && a . is ( CKEDITOR . dtd . $block ) ) { for ( ; a ; ) { if ( w ( a ) ) return ;
e . rangeOffset ) , d . collapse ( ! 0 ) ; else if ( document . body . createTextRange ) c = b . document . getBody ( ) . $ . createTextRange ( ) , c . moveToPoint ( e . clientX , e . clientY ) , e = "cke-temp-" + ( new Date ) . getTime ( ) , c . pasteHTML ( '<span id="' + e + '"> \u200B </span>') , c = b . document . getById ( e ) , d . moveToPosition ( c , CKEDITOR . POSITION _BEFORE _START ) , c . remove ( ) ; else { d = null ; break a } d && ( CKEDITOR . env . gecko ? setTimeout ( A , 0 , b , h , d ) : A ( b , h , d ) ) } } } ) ; CKEDITOR . tools . extend ( a , { finder : new c . finder ( b , { lookups : { "default" : function ( a ) { if ( ! a . is ( CKEDITOR . dtd . $listItem ) && a . is ( CKEDITOR . dtd . $block ) ) { for ( ; a ; ) { if ( w ( a ) ) return ;
a = a . getParent ( ) } return CKEDITOR . LINEUTILS _BEFORE | CKEDITOR . LINEUTILS _AFTER } } } } ) , locator : new c . locator ( b ) , liner : new c . liner ( b , { lineStyle : { cursor : "move !important" , "border-top-color" : "#666" } , tipLeftStyle : { "border-left-color" : "#666" } , tipRightStyle : { "border-right-color" : "#666" } } ) } , ! 0 ) } ) } function M ( a ) { var b = a . editor ; b . on ( "contentDom" , function ( ) { var c = b . editable ( ) , d = c . isInline ( ) ? c : b . document , e , f ; c . attachListener ( d , "mousedown" , function ( c ) { var b = c . data . getTarget ( ) ; if ( ! b . type ) return ! 1 ; e = a . getByElement ( b ) ; f =
0 ; e && ( e . inline && b . type == CKEDITOR . NODE _ELEMENT && b . hasAttribute ( "data-cke-widget-drag-handler" ) ? f = 1 : l ( e . wrapper , b ) ? e = null : ( c . data . preventDefault ( ) , CKEDITOR . env . ie || e . focus ( ) ) ) } ) ; c . attachListener ( d , "mouseup" , function ( ) { e && f && ( f = 0 , e . focus ( ) ) } ) ; CKEDITOR . env . ie && c . attachListener ( d , "mouseup" , function ( ) { e && setTimeout ( function ( ) { e . focus ( ) ; e = null } ) } ) } ) ; b . on ( "doubleclick" , function ( c ) { var b = a . getByElement ( c . data . element ) ; if ( b && ! l ( b . wrapper , c . data . element ) ) return b . fire ( "doubleclick" , { element : c . data . element } ) } ,
null , null , 1 ) } function N ( a ) { a . editor . on ( "key" , function ( b ) { var c = a . focused , d = a . widgetHoldingFocusedEditable , e ; c ? e = c . fire ( "key" , { keyCode : b . data . keyCode } ) : d && ( c = b . data . keyCode , b = d . focusedEditable , c == CKEDITOR . CTRL + 65 ? ( c = b . getBogus ( ) , d = d . editor . createRange ( ) , d . selectNodeContents ( b ) , c && d . setEndAt ( c , CKEDITOR . POSITION _BEFORE _START ) , d . select ( ) , e = ! 1 ) : 8 == c || 46 == c ? ( e = d . editor . getSelection ( ) . getRanges ( ) , d = e [ 0 ] , e = ! ( 1 == e . length && d . collapsed && d . checkBoundaryOfElement ( b , CKEDITOR [ 8 == c ? "START" : "END" ] ) ) ) : e = void 0 ) ; return e } ,
@ -729,8 +732,8 @@ h.setHtml(f.editables[j].getData());i||(i=g);b.wrapper.replaceWith(i)}},null,nul
j . replaceWith ( h ) ; a . wrapElement ( e [ 0 ] , e [ 1 ] ) } d = 1 == c . data . dataValue . children . length && c . data . dataValue . children [ 0 ] . type == CKEDITOR . NODE _ELEMENT && c . data . dataValue . children [ 0 ] . attributes [ "data-cke-widget-wrapper" ] } , null , null , 8 ) ; c . on ( "dataReady" , function ( ) { if ( e ) for ( var b = a , d = c . editable ( ) . find ( ".cke_widget_wrapper" ) , i , h , j = 0 , k = d . count ( ) ; j < k ; ++ j ) i = d . getItem ( j ) , h = i . getFirst ( p ) , h . type == CKEDITOR . NODE _ELEMENT && h . data ( "widget" ) ? ( h . replace ( i ) , b . wrapElement ( h ) ) : i . remove ( ) ; e = 0 ; a . destroyAll ( ! 0 ) ; a . initOnAll ( ) } ) ; c . on ( "loadSnapshot" ,
function ( c ) { /data-cke-widget/ . test ( c . data ) && ( e = 1 ) ; a . destroyAll ( ! 0 ) } , null , null , 9 ) ; c . on ( "paste" , function ( a ) { a . data . dataValue = a . data . dataValue . replace ( X , W ) } ) ; c . on ( "insertText" , b , null , null , 999 ) ; c . on ( "insertHtml" , b , null , null , 999 ) } function C ( a ) { var b = a . selected , c = [ ] , d = b . slice ( 0 ) , e = null ; return { select : function ( a ) { 0 > CKEDITOR . tools . indexOf ( b , a ) && c . push ( a ) ; a = CKEDITOR . tools . indexOf ( d , a ) ; 0 <= a && d . splice ( a , 1 ) ; return this } , focus : function ( a ) { e = a ; return this } , commit : function ( ) { var f = a . focused !== e , g , i ; a . editor . fire ( "lockSnapshot" ) ;
for ( f && ( g = a . focused ) && t ( a , g ) ; g = d . pop ( ) ; ) b . splice ( CKEDITOR . tools . indexOf ( b , g ) , 1 ) , g . isInited ( ) && ( i = g . editor . checkDirty ( ) , g . setSelected ( ! 1 ) , ! i && g . editor . resetDirty ( ) ) ; f && e && ( i = a . editor . checkDirty ( ) , a . focused = e , a . fire ( "widgetFocused" , { widget : e } ) , e . setFocused ( ! 0 ) , ! i && a . editor . resetDirty ( ) ) ; for ( ; g = c . pop ( ) ; ) b . push ( g ) , g . setSelected ( ! 0 ) ; a . editor . fire ( "unlockSnapshot" ) } } } function D ( a , b , c ) { var d = 0 , b = E ( b ) , e = a . data . classes || { } , f ; if ( b ) { for ( e = CKEDITOR . tools . clone ( e ) ; f = b . pop ( ) ; ) c ? e [ f ] || ( d = e [ f ] = 1 ) : e [ f ] && ( delete e [ f ] ,
d = 1 ) ; d && a . setData ( "classes" , e ) } } function F ( a ) { a . cancel ( ) } function B ( a , b ) { var c = a . editor , d = c . document ; if ( ! d . getById ( "cke_copybin" ) ) { var e = c . blockless || CKEDITOR . env . ie ? "span" : "div" , f = d . createElement ( e ) , g = d . createElement ( e ) , e = CKEDITOR . env . ie && 9 > CKEDITOR . env . version ; g . setAttributes ( { id : "cke_copybin" , "data-cke-temp" : "1" } ) ; f . setStyles ( { position : "absolute" , width : "1px" , height : "1px" , overflow : "hidden" } ) ; f . setStyle ( "ltr" == c . config . contentsLangDirection ? "left" : "right" , "-5000px" ) ; f . setHtml ( '<span data-cke-copybin-start="1"> </span>'+
a . wrapper . getOuterHtml ( ) + '<span data-cke-copybin-end="1"> </span>') ; c . fire ( "saveSnapshot" ) ; c . fire ( "lockSnapshot" ) ; g . append ( f ) ; c . editable ( ) . append ( g ) ; var i = c . on ( "selectionChange" , F , null , null , 0 ) , h = a . repository . on ( "checkSelection" , F , null , null , 0 ) ; if ( e ) var j = d . getDocumentElement ( ) . $ , k = j . scrollTop ; d = c . createRange ( ) ; d . selectNodeContents ( f ) ; d . select ( ) ; e && ( j . scrollTop = k ) ; setTimeout ( function ( ) { b || a . focus ( ) ; g . remove ( ) ; i . removeListener ( ) ; h . removeListener ( ) ; c . fire ( "unlockSnapshot" ) ; if ( b ) { a . repository . del ( a ) ; c . fire ( "saveSnapshot" ) } } ,
d = 1 ) ; d && a . setData ( "classes" , e ) } } function F ( a ) { a . cancel ( ) } function B ( a , b ) { var c = a . editor , d = c . document ; if ( ! d . getById ( "cke_copybin" ) ) { var e = c . blockless || CKEDITOR . env . ie ? "span" : "div" , f = d . createElement ( e ) , g = d . createElement ( e ) , e = CKEDITOR . env . ie && 9 > CKEDITOR . env . version ; g . setAttributes ( { id : "cke_copybin" , "data-cke-temp" : "1" } ) ; f . setStyles ( { position : "absolute" , width : "1px" , height : "1px" , overflow : "hidden" } ) ; f . setStyle ( "ltr" == c . config . contentsLangDirection ? "left" : "right" , "-5000px" ) ; f . setHtml ( '<span data-cke-copybin-start="1"> \u200B </span>'+
a . wrapper . getOuterHtml ( ) + '<span data-cke-copybin-end="1"> \u200B </span>') ; c . fire ( "saveSnapshot" ) ; c . fire ( "lockSnapshot" ) ; g . append ( f ) ; c . editable ( ) . append ( g ) ; var i = c . on ( "selectionChange" , F , null , null , 0 ) , h = a . repository . on ( "checkSelection" , F , null , null , 0 ) ; if ( e ) var j = d . getDocumentElement ( ) . $ , k = j . scrollTop ; d = c . createRange ( ) ; d . selectNodeContents ( f ) ; d . select ( ) ; e && ( j . scrollTop = k ) ; setTimeout ( function ( ) { b || a . focus ( ) ; g . remove ( ) ; i . removeListener ( ) ; h . removeListener ( ) ; c . fire ( "unlockSnapshot" ) ; if ( b ) { a . repository . del ( a ) ; c . fire ( "saveSnapshot" ) } } ,
100 ) } } function E ( a ) { return ( a = ( a = a . getDefinition ( ) . attributes ) && a [ "class" ] ) ? a . split ( /\s+/ ) : null } function G ( ) { var a = CKEDITOR . document . getActive ( ) , b = this . editor , c = b . editable ( ) ; ( c . isInline ( ) ? c : b . document . getWindow ( ) . getFrame ( ) ) . equals ( a ) && b . focusManager . focus ( c ) } function H ( ) { CKEDITOR . env . gecko && this . editor . unlockSelection ( ) ; CKEDITOR . env . webkit || ( this . editor . forceNextSelectionCheck ( ) , this . editor . selectionChange ( 1 ) ) } function Y ( a ) { var b = null ; a . on ( "data" , function ( ) { var a = this . data . classes , d ; if ( b != a ) { for ( d in b ) ( ! a ||
! a [ d ] ) && this . removeClass ( d ) ; for ( d in a ) this . addClass ( d ) ; b = a } } ) } function Z ( a ) { if ( a . draggable ) { var b = a . editor , c = a . wrapper . getLast ( U ) , d ; c ? d = c . findOne ( "img" ) : ( c = new CKEDITOR . dom . element ( "span" , b . document ) , c . setAttributes ( { "class" : "cke_reset cke_widget_drag_handler_container" , style : "background:rgba(220,220,220,0.5);background-image:url(" + b . plugins . widget . path + "images/handle.png)" } ) , d = new CKEDITOR . dom . element ( "img" , b . document ) , d . setAttributes ( { "class" : "cke_reset cke_widget_drag_handler" , "data-cke-widget-drag-handler" : "1" ,
src : CKEDITOR . tools . transparentImageData , width : m , title : b . lang . widget . move , height : m } ) , a . inline && d . setAttribute ( "draggable" , "true" ) , c . append ( d ) , a . wrapper . append ( c ) ) ; a . wrapper . on ( "mouseenter" , a . updateDragHandlerPosition , a ) ; setTimeout ( function ( ) { a . on ( "data" , a . updateDragHandlerPosition , a ) } , 50 ) ; if ( a . inline ) d . on ( "dragstart" , function ( c ) { c . data . $ . dataTransfer . setData ( "text" , JSON . stringify ( { type : "cke-widget" , editor : b . name , id : a . id } ) ) } ) ; else d . on ( "mousedown" , $ , a ) ; a . dragHandlerContainer = c } } function $ ( ) { function a ( ) { var a ;
@ -769,7 +772,7 @@ removeClass:function(a){k(this).removeClass(a)},getClasses:function(){var a=RegE
a = h ; g . align = "center" ; h = a . getFirst ( "img" ) || a . getFirst ( "a" ) . getFirst ( "img" ) } else "figure" == c && a . hasClass ( e ) ? h = a . getFirst ( "img" ) || a . getFirst ( "a" ) . getFirst ( "img" ) : o ( a ) && ( h = "a" == a . name ? a . children [ 0 ] : a ) ; if ( h ) { for ( var y in d ) ( c = h . attributes [ y ] ) && c . match ( G ) && delete h . attributes [ y ] ; return a } } } } function F ( a ) { var b = a . config . image2 _alignClasses ; return function ( a ) { var f = "a" == a . name ? a . getFirst ( ) : a , g = f . attributes , d = this . data . align ; if ( ! this . inline ) { var c = a . getFirst ( "span" ) ; c && c . replaceWith ( c . getFirst ( { img : 1 , a : 1 } ) ) } d &&
"none" != d && ( c = CKEDITOR . tools . parseCssText ( g . style || "" ) , "center" == d && "figure" == a . name ? a = a . wrapWith ( new CKEDITOR . htmlParser . element ( "div" , b ? { "class" : b [ 1 ] } : { style : "text-align:center" } ) ) : d in { left : 1 , right : 1 } && ( b ? f . addClass ( b [ n [ d ] ] ) : c [ "float" ] = d ) , ! b && ! CKEDITOR . tools . isEmpty ( c ) && ( g . style = CKEDITOR . tools . writeCssText ( c ) ) ) ; return a } } function l ( a ) { var b = a . config . image2 _captionedClass , e = a . config . image2 _alignClasses , f = { figure : 1 , a : 1 , img : 1 } ; return function ( g ) { if ( ! ( g . name in { div : 1 , p : 1 } ) ) return ! 1 ; var d = g . children ;
if ( 1 !== d . length ) return ! 1 ; d = d [ 0 ] ; if ( ! ( d . name in f ) ) return ! 1 ; if ( "p" == g . name ) { if ( ! o ( d ) ) return ! 1 } else if ( "figure" == d . name ) { if ( ! d . hasClass ( b ) ) return ! 1 } else if ( a . enterMode == CKEDITOR . ENTER _P || ! o ( d ) ) return ! 1 ; return ( e ? g . hasClass ( e [ 1 ] ) : "center" == CKEDITOR . tools . parseCssText ( g . attributes . style || "" , ! 0 ) [ "text-align" ] ) ? ! 0 : ! 1 } } function o ( a ) { return "img" == a . name ? ! 0 : "a" == a . name ? 1 == a . children . length && a . getFirst ( "img" ) : ! 1 } function D ( a ) { var b = a . editor , e = b . editable ( ) , f = b . document , g = a . resizer = f . createElement ( "span" ) ; g . addClass ( "cke_image_resizer" ) ;
g . setAttribute ( "title" , b . lang . image2 . resizer ) ; g . append ( new CKEDITOR . dom . text ( " ", f ) ) ; if ( a . inline ) a . wrapper . append ( g ) ; else { var d = a . parts . link || a . parts . image , c = d . getParent ( ) , h = f . createElement ( "span" ) ; h . addClass ( "cke_image_resizer_wrapper" ) ; h . append ( d ) ; h . append ( g ) ; a . element . append ( h , ! 0 ) ; c . is ( "span" ) && c . remove ( ) } g . on ( "mousedown" , function ( c ) { function j ( a , b , c ) { var d = CKEDITOR . document , j = [ ] ; f . equals ( d ) || j . push ( d . on ( a , b ) ) ; j . push ( f . on ( a , b ) ) ; if ( c ) for ( a = j . length ; a -- ; ) c . push ( j . pop ( ) ) } function d ( ) { p = k + w * t ; q = Math . round ( p /
g . setAttribute ( "title" , b . lang . image2 . resizer ) ; g . append ( new CKEDITOR . dom . text ( " \u200B ", f ) ) ; if ( a . inline ) a . wrapper . append ( g ) ; else { var d = a . parts . link || a . parts . image , c = d . getParent ( ) , h = f . createElement ( "span" ) ; h . addClass ( "cke_image_resizer_wrapper" ) ; h . append ( d ) ; h . append ( g ) ; a . element . append ( h , ! 0 ) ; c . is ( "span" ) && c . remove ( ) } g . on ( "mousedown" , function ( c ) { function j ( a , b , c ) { var d = CKEDITOR . document , j = [ ] ; f . equals ( d ) || j . push ( d . on ( a , b ) ) ; j . push ( f . on ( a , b ) ) ; if ( c ) for ( a = j . length ; a -- ; ) c . push ( j . pop ( ) ) } function d ( ) { p = k + w * t ; q = Math . round ( p /
r ) } function s ( ) { q = n - m ; p = Math . round ( q * r ) } var h = a . parts . image , w = "right" == a . data . align ? - 1 : 1 , i = c . data . $ . screenX , H = c . data . $ . screenY , k = h . $ . clientWidth , n = h . $ . clientHeight , r = k / n , l = [ ] , o = "cke_image_s" + ( ! ~ w ? "w" : "e" ) , x , p , q , v , t , m , u ; b . fire ( "saveSnapshot" ) ; j ( "mousemove" , function ( a ) { x = a . data . $ ; t = x . screenX - i ; m = H - x . screenY ; u = Math . abs ( t / m ) ; 1 == w ? 0 >= t ? 0 >= m ? d ( ) : u >= r ? d ( ) : s ( ) : 0 >= m ? u >= r ? s ( ) : d ( ) : s ( ) : 0 >= t ? 0 >= m ? u >= r ? s ( ) : d ( ) : s ( ) : 0 >= m ? d ( ) : u >= r ? d ( ) : s ( ) ; 15 <= p && 15 <= q ? ( h . setAttributes ( { width : p , height : q } ) , v = ! 0 ) : v = ! 1 } , l ) ; j ( "mouseup" ,
function ( ) { for ( var c ; c = l . pop ( ) ; ) c . removeListener ( ) ; e . removeClass ( o ) ; g . removeClass ( "cke_image_resizing" ) ; v && ( a . setData ( { width : p , height : q } ) , b . fire ( "saveSnapshot" ) ) ; v = ! 1 } , l ) ; e . addClass ( o ) ; g . addClass ( "cke_image_resizing" ) } ) ; a . on ( "data" , function ( ) { g [ "right" == a . data . align ? "addClass" : "removeClass" ] ( "cke_image_resizer_left" ) } ) } function I ( a ) { var b = [ ] , e ; return function ( f ) { var g = a . getCommand ( "justify" + f ) ; if ( g ) { b . push ( function ( ) { g . refresh ( a , a . elementPath ( ) ) } ) ; if ( f in { right : 1 , left : 1 , center : 1 } ) g . on ( "exec" , function ( d ) { var c =
i ( a ) ; if ( c ) { c . setData ( "align" , f ) ; for ( c = b . length ; c -- ; ) b [ c ] ( ) ; d . cancel ( ) } } ) ; g . on ( "refresh" , function ( b ) { var c = i ( a ) , g = { right : 1 , left : 1 , center : 1 } ; c && ( void 0 == e && ( e = a . filter . checkFeature ( a . widgets . registered . image . features . align ) ) , e ? this . setState ( c . data . align == f ? CKEDITOR . TRISTATE _ON : f in g ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED ) : this . setState ( CKEDITOR . TRISTATE _DISABLED ) , b . cancel ( ) ) } ) } } } function J ( a ) { a . plugins . link && ( CKEDITOR . on ( "dialogDefinition" , function ( b ) { b = b . data ; if ( "link" == b . name ) { var b = b . definition ,
@ -788,17 +791,17 @@ k(a,a.addCommand("indent",new b(!0)));k(a,a.addCommand("outdent",new b));a.ui.ad
c . getDirection ( ) ) { f . setStartAfter ( c ) ; l = new CKEDITOR . dom . walker ( f ) } else { var d = a . config . indentClasses ; if ( d ) for ( var g = b . data . dir == "ltr" ? [ "_rtl" , "" ] : [ "" , "_rtl" ] , h = 0 ; h < d . length ; h ++ ) if ( c . hasClass ( d [ h ] + g [ 0 ] ) ) { c . removeClass ( d [ h ] + g [ 0 ] ) ; c . addClass ( d [ h ] + g [ 1 ] ) } d = c . getStyle ( "margin-right" ) ; g = c . getStyle ( "margin-left" ) ; d ? c . setStyle ( "margin-left" , d ) : c . removeStyle ( "margin-left" ) ; g ? c . setStyle ( "margin-right" , g ) : c . removeStyle ( "margin-right" ) } } ) } } ) ; CKEDITOR . plugins . indent = { genericDefinition : function ( a ) { this . isIndent =
! ! a ; this . startDisabled = ! this . isIndent } , specificDefinition : function ( a , b , e ) { this . name = b ; this . editor = a ; this . jobs = { } ; this . enterBr = a . config . enterMode == CKEDITOR . ENTER _BR ; this . isIndent = ! ! e ; this . relatedGlobal = e ? "indent" : "outdent" ; this . indentKey = e ? 9 : CKEDITOR . SHIFT + 9 ; this . database = { } } , registerCommands : function ( a , b ) { a . on ( "pluginsLoaded" , function ( ) { for ( var a in b ) ( function ( a , b ) { var e = a . getCommand ( b . relatedGlobal ) , c ; for ( c in b . jobs ) e . on ( "exec" , function ( d ) { d . data . done || ( a . fire ( "lockSnapshot" ) , b . execJob ( a , c ) && ( d . data . done =
! 0 ) , a . fire ( "unlockSnapshot" ) , CKEDITOR . dom . element . clearAllMarkers ( b . database ) ) } , this , null , c ) , e . on ( "refresh" , function ( d ) { d . data . states || ( d . data . states = { } ) ; d . data . states [ b . name + "@" + c ] = b . refreshJob ( a , c , d . data . path ) } , this , null , c ) ; a . addFeature ( b ) } ) ( this , b [ a ] ) } ) } } ; CKEDITOR . plugins . indent . genericDefinition . prototype = { context : "p" , exec : function ( ) { } } ; CKEDITOR . plugins . indent . specificDefinition . prototype = { execJob : function ( a , b ) { var e = this . jobs [ b ] ; if ( e . state != i ) return e . exec . call ( this , a ) } , refreshJob : function ( a ,
b , e ) { b = this . jobs [ b ] ; b . state = a . activeFilter . checkFeature ( this ) ? b . refresh . call ( this , a , e ) : i ; return b . state } , getContext : function ( a ) { return a . contains ( this . context ) } } } ) ( ) ; ( function ( ) { function h( b , c , a ) { if ( ! b . getCustomData ( "indent_processed" ) ) { var d= this . editor , f = this . isIndent ; if ( c ) { d = b . $ . className . match ( this . classNameRegex ) ; a = 0 ; d&& ( d = d [ 1 ] , a = CKEDITOR . tools . indexOf ( c, d ) + 1 ) ; if ( 0 > ( a += f ? 1 : - 1 ) ) return ; a = Math . min ( a , c . length ) ; a = Math . max ( a , 0 ) ; b . $ . className = CKEDITOR . tools . ltrim ( b . $ . className . replace ( this . classNameRegex , "" ) ) ; 0 < a && b . addClass ( c [ a - 1 ] ) } else { var c= i ( b , a ) , a = parseInt ( b . getStyle ( c) , 10 ) , g = d . config . indentOffset || 40 ; isNaN ( a ) && ( a = 0 ) ; a += ( f ? 1 : - 1 ) * g ; if ( 0 > a ) return ; a = Math . max ( a ,
0 ) ; a = Math . ceil ( a / g ) * g ; b . setStyle ( c, a ? a + ( d . config . indentUnit || "px" ) : "" ) ; "" === b . getAttribute ( "style" ) && b . removeAttribute ( "style" ) } CKEDITOR . dom . element . setMarker ( this . database , b , "indent_processed" , 1 ) } } function i( b , c ) { return "ltr" == ( c || b . getComputedStyle ( "direction" ) ) ? "margin-left" : "margin-right" } var j= CKEDITOR . dtd . $listItem , l = CKEDITOR . dtd . $list , f = CKEDITOR . TRISTATE _DISABLED , k = CKEDITOR . TRISTATE _OFF ; CKEDITOR . plugins . add ( "indentblock" , { requires : "indent" , init : function ( b ) { function c( b , c ) { a . specificDefinition . apply ( this ,
arguments ) ; this . allowedContent = { "div h1 h2 h3 h4 h5 h6 ol p pre ul" : { propertiesOnly : ! 0 , styles : ! d ? "margin-left,margin-right" : null , classes : d || null } } ; this . enterBr && ( this . allowedContent . div = ! 0 ) ; this . requiredContent = ( this . enterBr ? "div" : "p" ) + ( d? "(" + d . join ( "," ) + ")" : "{margin-left}" ) ; this . jobs = { 20 : { refresh : function ( a , b ) { var e= b . block || b . blockLimit ; if ( e . is ( j ) ) e = e . getParent ( ) ; else if ( e . getAscendant ( j ) ) return f ; if ( ! this . enterBr && ! this . getContext ( b ) ) return f; if ( d ) { var c ; c = d ; var e = e . $ . className . match ( this . classNameRegex ) ,
g= this . isIndent ; c = e ? g ? e [ 1 ] != c . slice ( - 1 ) : true : g ; return c ? k : f } return this . isIndent ? k : e ? CKEDITOR [ ( parseInt ( e . getStyle ( i ( e ) ) , 10 ) || 0 ) <= 0 ? "TRISTATE_DISABLED" : "TRISTATE_OFF" ] : f } , exec : function ( a ) { var b = a . getSelection ( ) , b = b && b . getRanges ( ) [ 0 ] , c ; if ( c = a . elementPath ( ) . contains ( l) ) h . call ( this , c , d ) ; else { b = b . createIterator ( ) ; a = a . config . enterMode ; b . enforceRealBlocks = true ; for ( b . enlargeBr = a != CKEDITOR . ENTER _BR ; c = b . getNextParagraph ( a == CKEDITOR . ENTER _P ? "p" : "div" ) ; ) c . isReadOnly ( ) || h. call ( this , c , d ) } return true } } } } var a =
CKEDITOR . plugins . indent , d = b . config . indentClasses ; a . registerCommands ( b , { indentblock : new c ( b , "indentblock" , ! 0 ) , outdentblock : new c ( b , "outdentblock" ) } ) ; CKEDITOR . tools . extend ( c . prototype , a . specificDefinition . prototype , { context : { div : 1 , dl : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , ul : 1 , ol : 1 , p : 1 , pre : 1 , table : 1 } , classNameRegex : d? RegExp ( "(?:^|\\s+)(" + d . join ( "|" ) + ")(?=$|\\s)" ) : null } ) } } ) } ) ( ) ; ( function ( ) { function s ( e) { function g ( b ) { for ( var f = d . startContainer , a = d . endContainer ; f&& ! f . getParent ( ) . equals ( b ) ; ) f= f . getParent ( ) ; for ( ; a && ! a . getParent ( ) . equals ( b ) ; ) a = a . getParent ( ) ; if ( ! f || ! a ) return ! 1 ; for ( var h= f , f = [ ] , c = ! 1 ; ! c ; ) h . equals ( a ) && ( c = ! 0 ) , f . push ( h ) , h = h . getNext ( ) ; if ( 1 > f . length ) return ! 1 ; h = b . getParents ( ! 0 ) ; for ( a = 0 ; a < h. length ; a ++ ) if ( h [ a ] . getName && k [ h [ a ] . getName ( ) ] ) { b = h[ a ] ; break } for ( var h = n . isIndent ? 1 : - 1 , a = f[ 0 ] , f = f [ f . length - 1 ] , c = CKEDITOR . plugins . list . listToArray ( b , o) , g = c [ f . getCustomData ( "listarray_index" ) ] . indent ,
a = a . getCustomData ( "listarray_index" ) ; a <= f . getCustomData ( "listarray_index" ) ; a ++ ) if ( c[ a ] . indent += h , 0 < h ) { var l = c [ a ] . parent ; c [ a ] . parent = new CKEDITOR . dom . element ( l. getName ( ) , l . getDocument ( ) ) } for ( a = f . getCustomData ( "listarray_index" ) + 1 ; a < c. length && c [ a ] . indent > g ; a ++ ) c [ a ] . indent += h ; f = CKEDITOR . plugins . list . arrayToList ( c, o , null , e . config . enterMode , b . getDirection ( ) ) ; if ( ! n. isIndent ) { var i ; if ( ( i = b . getParent ( ) ) && i . is ( "li" ) ) for ( var h= f . listNode . getChildren ( ) , m = [ ] , j , a = h . count ( ) - 1 ; 0 <= a ; a -- ) ( j= h . getItem ( a ) ) && ( j . is &&
j. is ( "li" ) ) && m . push ( j ) } f && f . listNode . replace ( b ) ; if ( m&& m . length ) for ( a = 0 ; a < m. length ; a ++ ) { for ( j = b = m [ a ] ; ( j = j . getNext ( ) ) && j . is && j . getName ( ) in k ; ) CKEDITOR . env . needsNbspFiller && ! b . getFirst ( t ) && b . append ( d . document . createText ( " " ) ) , b . append ( j) ; b . insertAfter ( i ) } f && e . fire ( "contentDomInvalidated" ) ; return ! 0 } for ( var n= this , o = this . database , k = this . context , l = e . getSelection ( ) , l = ( l && l . getRanges ( ) ) . createIterator ( ) , d ; d = l . getNextRange ( ) ; ) { for ( var b = d . getCommonAncestor ( ) ; b && ! ( b . type == CKEDITOR . NODE _ELEMENT && k [ b . getName ( ) ] ) ; ) b =
b . getParent ( ) ; b || ( b = d . startPath ( ) . contains ( k ) ) && d . setEndAt ( b , CKEDITOR . POSITION _BEFORE _END ) ; if ( ! b ) { var c= d . getEnclosedNode ( ) ; c && ( c . type == CKEDITOR . NODE _ELEMENT && c. getName ( ) in k ) && ( d . setStartAt ( c , CKEDITOR . POSITION _AFTER _START ) , d . setEndAt ( c , CKEDITOR . POSITION _BEFORE _END ) , b = c ) } b && ( d . startContainer . type == CKEDITOR . NODE _ELEMENT && d . startContainer . getName ( ) in k) && ( c = new CKEDITOR . dom . walker ( d ) , c. evaluator = i , d . startContainer = c . next ( ) ) ; b && ( d . endContainer . type == CKEDITOR . NODE _ELEMENT && d . endContainer . getName ( ) in k ) &&
( c = new CKEDITOR . dom . walker ( d ) , c. evaluator = i , d . endContainer = c . previous ( ) ) ; if ( b ) return g ( b ) } return 0 } function p ( e, g ) { g || ( g = e . contains ( this . context ) ) ; return g && e . block && e . block . equals ( g . getFirst ( i ) ) } function i ( e ) { return e . type == CKEDITOR . NODE _ELEMENT && e . is ( "li" ) } function t ( e) { return u ( e ) && v ( e ) } var u = CKEDITOR . dom . walker . whitespaces ( ! 0 ) , v = CKEDITOR . dom . walker . bookmark ( ! 1 , ! 0 ) , q = CKEDITOR . TRISTATE _DISABLED , r = CKEDITOR . TRISTATE _OFF ; CKEDITOR . plugins . add ( "indentlist" , { requires : "indent" , init : function ( e) { function g ( e ,
g) { i . specificDefinition . apply ( this , arguments ) ; this . requiredContent = [ "ul" , "ol" ] ; e . on ( "key" , function ( g ) { if ( "wysiwyg" == e . mode && g . data . keyCode == this . indentKey ) { var d= this . getContext ( e . elementPath ( ) ) ; if ( d && ( ! this . isIndent || ! p . call ( this , e . elementPath ( ) , d ) ) ) e . execCommand ( this . relatedGlobal ) , g . cancel ( ) } } , this ) ; this . jobs [ this . isIndent ? 10 : 30 ] = { refresh : this . isIndent ? function ( e, d ) { var b = this . getContext ( d ) , c = p . call ( this , d , b ) ; return ! b || ! this . isIndent || c ? q : r } : function ( e , d ) { return ! this . getContext ( d ) || this . isIndent ?
q : r } , exec : CKEDITOR . tools . bind ( s , this ) } } var i= CKEDITOR . plugins . indent ; i . registerCommands ( e , { indentlist : new g ( e , "indentlist" , ! 0 ) , outdentlist : new g( e , "outdentlist" ) } ) ; CKEDITOR . tools . extend ( g. prototype , i . specificDefinition . prototype , { context : { ol : 1 , ul : 1 } } ) } } ) } ) ( ) ; ( function ( ) { function g ( a , b ) { var c = j . exec ( a ) , d = j . exec ( b ) ; if ( c ) { if ( ! c [ 2 ] && "px" == d [ 2 ] ) return d [ 1 ] ; if ( "px" == c [ 2 ] && ! d [ 2 ] ) return d [ 1 ] + "px" } return b } var i = CKEDITOR . htmlParser . cssStyle , h = CKEDITOR . tools . cssLength , j = /^((?:\d*(?:\.\d+))|(?:\d+))(.*)?$/i , k = { elements : { $ : function ( a ) { var b = a . attributes ; if ( ( b = ( b = ( b = b && b [ "data-cke-realelement" ] ) && new CKEDITOR . htmlParser . fragment . fromHtml ( decodeURIComponent ( b ) ) ) && b . children [ 0 ] ) && a . attributes [ "data-cke-resizable" ] ) { var c = ( new i ( a ) ) . rules , a = b . attributes , d = c . width , c =
b , e ) { b = this . jobs [ b ] ; b . state = a . activeFilter . checkFeature ( this ) ? b . refresh . call ( this , a , e ) : i ; return b . state } , getContext : function ( a ) { return a . contains ( this . context ) } } } ) ( ) ; ( function ( ) { function f( b , d , a ) { if ( ! b . getCustomData ( "indent_processed" ) ) { var e= this . editor , j = this . isIndent ; if ( d ) { e = b . $ . className . match ( this . classNameRegex ) ; a = 0 ; e&& ( e = e [ 1 ] , a = CKEDITOR . tools . indexOf ( d, e ) + 1 ) ; if ( 0 > ( a += j ? 1 : - 1 ) ) return ; a = Math . min ( a , d . length ) ; a = Math . max ( a , 0 ) ; b . $ . className = CKEDITOR . tools . ltrim ( b . $ . className . replace ( this . classNameRegex , "" ) ) ; 0 < a && b . addClass ( d [ a - 1 ] ) } else { var d= k ( b , a ) , a = parseInt ( b . getStyle ( d) , 10 ) , g = e . config . indentOffset || 40 ; isNaN ( a ) && ( a = 0 ) ; a += ( j ? 1 : - 1 ) * g ; if ( 0 > a ) return ; a = Math . max ( a ,
0 ) ; a = Math . ceil ( a / g ) * g ; b . setStyle ( d, a ? a + ( e . config . indentUnit || "px" ) : "" ) ; "" === b . getAttribute ( "style" ) && b . removeAttribute ( "style" ) } CKEDITOR . dom . element . setMarker ( this . database , b , "indent_processed" , 1 ) } } function k( b , d ) { return "ltr" == ( d || b . getComputedStyle ( "direction" ) ) ? "margin-left" : "margin-right" } var h= CKEDITOR . dtd . $listItem , m = CKEDITOR . dtd . $list , i = CKEDITOR . TRISTATE _DISABLED , l = CKEDITOR . TRISTATE _OFF ; CKEDITOR . plugins . add ( "indentblock" , { requires : "indent" , init : function ( b ) { function d( ) { a . specificDefinition . apply ( this ,
arguments ) ; this . allowedContent = { "div h1 h2 h3 h4 h5 h6 ol p pre ul" : { propertiesOnly : ! 0 , styles : ! e ? "margin-left,margin-right" : null , classes : e || null } } ; this . enterBr && ( this . allowedContent . div = ! 0 ) ; this . requiredContent = ( this . enterBr ? "div" : "p" ) + ( e? "(" + e . join ( "," ) + ")" : "{margin-left}" ) ; this . jobs = { 20 : { refresh : function ( a , b ) { var c= b . block || b . blockLimit ; c . is ( h ) || ( c = c . getAscendant ( h ) || c ) ; c . is ( h ) && ( c = c . getParent ( ) ) ; if ( ! this . enterBr && ! this . getContext ( b ) ) return i; if ( e ) { var d ; d = e ; var c = c . $ . className . match ( this . classNameRegex ) ,
f= this . isIndent ; d = c ? f ? c [ 1 ] != d . slice ( - 1 ) : true : f ; return d ? l : i } return this . isIndent ? l : c ? CKEDITOR [ ( parseInt ( c . getStyle ( k ( c ) ) , 10 ) || 0 ) <= 0 ? "TRISTATE_DISABLED" : "TRISTATE_OFF" ] : i } , exec : function ( a ) { var b = a . getSelection ( ) , b = b && b . getRanges ( ) [ 0 ] , c ; if ( c = a . elementPath ( ) . contains ( m) ) f . call ( this , c , e ) ; else { b = b . createIterator ( ) ; a = a . config . enterMode ; b . enforceRealBlocks = true ; for ( b . enlargeBr = a != CKEDITOR . ENTER _BR ; c = b . getNextParagraph ( a == CKEDITOR . ENTER _P ? "p" : "div" ) ; ) c . isReadOnly ( ) || f. call ( this , c , e ) } return true } } } } var a =
CKEDITOR . plugins . indent , e = b . config . indentClasses ; a . registerCommands ( b , { indentblock : new d ( b , "indentblock" , ! 0 ) , outdentblock : new d ( b , "outdentblock" ) } ) ; CKEDITOR . tools . extend ( d . prototype , a . specificDefinition . prototype , { context : { div : 1 , dl : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , ul : 1 , ol : 1 , p : 1 , pre : 1 , table : 1 } , classNameRegex : e? RegExp ( "(?:^|\\s+)(" + e . join ( "|" ) + ")(?=$|\\s)" ) : null } ) } } ) } ) ( ) ; ( function ( ) { function s ( c) { function f ( b ) { for ( var e = d . startContainer , a = d . endContainer ; e&& ! e . getParent ( ) . equals ( b ) ; ) e= e . getParent ( ) ; for ( ; a && ! a . getParent ( ) . equals ( b ) ; ) a = a . getParent ( ) ; if ( ! e || ! a ) return ! 1 ; for ( var g= e , e = [ ] , i = ! 1 ; ! i ; ) g . equals ( a ) && ( i = ! 0 ) , e . push ( g ) , g = g . getNext ( ) ; if ( 1 > e . length ) return ! 1 ; g = b . getParents ( ! 0 ) ; for ( a = 0 ; a < g. length ; a ++ ) if ( g [ a ] . getName && m [ g [ a ] . getName ( ) ] ) { b = g[ a ] ; break } for ( var g = j . isIndent ? 1 : - 1 , a = e[ 0 ] , e = e [ e . length - 1 ] , i = CKEDITOR . plugins . list . listToArray ( b , n) , l = i [ e . getCustomData ( "listarray_index" ) ] . indent ,
a = a . getCustomData ( "listarray_index" ) ; a <= e . getCustomData ( "listarray_index" ) ; a ++ ) if ( i[ a ] . indent += g , 0 < g ) { var h = i [ a ] . parent ; i [ a ] . parent = new CKEDITOR . dom . element ( h. getName ( ) , h . getDocument ( ) ) } for ( a = e . getCustomData ( "listarray_index" ) + 1 ; a < i. length && i [ a ] . indent > l ; a ++ ) i [ a ] . indent += g ; e = CKEDITOR . plugins . list . arrayToList ( i, n , null , c . config . enterMode , b . getDirection ( ) ) ; if ( ! j. isIndent ) { var f ; if ( ( f = b . getParent ( ) ) && f . is ( "li" ) ) for ( var g= e . listNode . getChildren ( ) , o = [ ] , k , a = g . count ( ) - 1 ; 0 <= a ; a -- ) ( k= g . getItem ( a ) ) && ( k . is &&
k. is ( "li" ) ) && o . push ( k ) } e && e . listNode . replace ( b ) ; if ( o&& o . length ) for ( a = 0 ; a < o. length ; a ++ ) { for ( k = b = o [ a ] ; ( k = k . getNext ( ) ) && k . is && k . getName ( ) in m ; ) CKEDITOR . env . needsNbspFiller && ! b . getFirst ( t ) && b . append ( d . document . createText ( " " ) ) , b . append ( k) ; b . insertAfter ( f ) } e && c . fire ( "contentDomInvalidated" ) ; return ! 0 } for ( var j= this , n = this . database , m = this . context , l = c . getSelection ( ) , l = ( l && l . getRanges ( ) ) . createIterator ( ) , d ; d = l . getNextRange ( ) ; ) { for ( var b = d . getCommonAncestor ( ) ; b && ! ( b . type == CKEDITOR . NODE _ELEMENT && m [ b . getName ( ) ] ) ; ) b =
b . getParent ( ) ; b || ( b = d . startPath ( ) . contains ( m ) ) && d . setEndAt ( b , CKEDITOR . POSITION _BEFORE _END ) ; if ( ! b ) { var h= d . getEnclosedNode ( ) ; h && ( h . type == CKEDITOR . NODE _ELEMENT && h. getName ( ) in m ) && ( d . setStartAt ( h , CKEDITOR . POSITION _AFTER _START ) , d . setEndAt ( h , CKEDITOR . POSITION _BEFORE _END ) , b = h ) } b && ( d . startContainer . type == CKEDITOR . NODE _ELEMENT && d . startContainer . getName ( ) in m) && ( h = new CKEDITOR . dom . walker ( d ) , h. evaluator = p , d . startContainer = h . next ( ) ) ; b && ( d . endContainer . type == CKEDITOR . NODE _ELEMENT && d . endContainer . getName ( ) in m ) &&
( h = new CKEDITOR . dom . walker ( d ) , h. evaluator = p , d . endContainer = h . previous ( ) ) ; if ( b ) return f ( b ) } return 0 } function p ( c) { return c . type == CKEDITOR . NODE _ELEMENT && c . is ( "li" ) } function t ( c) { return u ( c ) && v ( c ) } var u = CKEDITOR . dom . walker . whitespaces ( ! 0 ) , v = CKEDITOR . dom . walker . bookmark ( ! 1 , ! 0 ) , q = CKEDITOR . TRISTATE _DISABLED , r = CKEDITOR . TRISTATE _OFF ; CKEDITOR . plugins . add ( "indentlist" , { requires : "indent" , init : function ( c) { function f ( c ) { j . specificDefinition . apply ( this , arguments ) ; this . requiredContent = [ "ul" , "ol" ] ; c . on ( "key" , function ( f ) { if ( "wysiwyg" ==
c. mode && f . data . keyCode == this . indentKey ) { var l= this . getContext ( c . elementPath ( ) ) ; if ( l && ( ! this . isIndent || ! CKEDITOR . plugins . indentList . firstItemInPath ( this . context , c . elementPath ( ) , l ) ) ) c . execCommand ( this . relatedGlobal ) , f . cancel ( ) } } , this ) ; this . jobs [ this . isIndent ? 10 : 30 ] = { refresh : this . isIndent ? function ( c, f ) { var d = this . getContext ( f ) , b = CKEDITOR . plugins . indentList . firstItemInPath ( this . context , f , d ) ; return ! d || ! this . isIndent || b ? q : r } : function ( c , f ) { return ! this . getContext ( f ) || this . isIndent ? q : r } , exec : CKEDITOR . tools . bind ( s ,
this ) } } var j= CKEDITOR . plugins . indent ; j . registerCommands ( c , { indentlist : new f ( c , "indentlist" , ! 0 ) , outdentlist : new f( c , "outdentlist" ) } ) ; CKEDITOR . tools . extend ( f. prototype , j . specificDefinition . prototype , { context : { ol : 1 , ul : 1 } } ) } } ) ; CKEDITOR . plugins . indentList = { } ; CKEDITOR . plugins . indentList . firstItemInPath = function ( c , f , j ) { var n = f . contains ( p ) ; j || ( j = f . contains ( c ) ) ; return j && n && n . equals ( j . getFirst ( p ) ) } } ) ( ) ; ( function ( ) { function g ( a , b ) { var c = j . exec ( a ) , d = j . exec ( b ) ; if ( c ) { if ( ! c [ 2 ] && "px" == d [ 2 ] ) return d [ 1 ] ; if ( "px" == c [ 2 ] && ! d [ 2 ] ) return d [ 1 ] + "px" } return b } var i = CKEDITOR . htmlParser . cssStyle , h = CKEDITOR . tools . cssLength , j = /^((?:\d*(?:\.\d+))|(?:\d+))(.*)?$/i , k = { elements : { $ : function ( a ) { var b = a . attributes ; if ( ( b = ( b = ( b = b && b [ "data-cke-realelement" ] ) && new CKEDITOR . htmlParser . fragment . fromHtml ( decodeURIComponent ( b ) ) ) && b . children [ 0 ] ) && a . attributes [ "data-cke-resizable" ] ) { var c = ( new i ( a ) ) . rules , a = b . attributes , d = c . width , c =
c . height ; d && ( a . width = g ( a . width , d ) ) ; c && ( a . height = g ( a . height , c ) ) } return b } } } ; CKEDITOR . plugins . add ( "fakeobjects" , { init : function ( a ) { a . filter . allow ( "img[!data-cke-realelement,src,alt,title](*){*}" , "fakeobjects" ) } , afterInit : function ( a ) { ( a = ( a = a . dataProcessor ) && a . htmlFilter ) && a . addRules ( k , { applyToAll : ! 0 } ) } } ) ; CKEDITOR . editor . prototype . createFakeElement = function ( a , b , c , d ) { var e = this . lang . fakeobjects , e = e [ c ] || e . unknown , b = { "class" : b , "data-cke-realelement" : encodeURIComponent ( a . getOuterHtml ( ) ) , "data-cke-real-node-type" : a . type ,
alt : e , title : e , align : a . getAttribute ( "align" ) || "" } ; CKEDITOR . env . hc || ( b . src = CKEDITOR . tools . transparentImageData ) ; c && ( b [ "data-cke-real-element-type" ] = c ) ; d && ( b [ "data-cke-resizable" ] = d , c = new i , d = a . getAttribute ( "width" ) , a = a . getAttribute ( "height" ) , d && ( c . rules . width = h ( d ) ) , a && ( c . rules . height = h ( a ) ) , c . populate ( b ) ) ; return this . document . createElement ( "img" , { attributes : b } ) } ; CKEDITOR . editor . prototype . createFakeParserElement = function ( a , b , c , d ) { var e = this . lang . fakeobjects , e = e [ c ] || e . unknown , f ; f = new CKEDITOR . htmlParser . basicWriter ;
a . writeHtml ( f ) ; f = f . getHtml ( ) ; b = { "class" : b , "data-cke-realelement" : encodeURIComponent ( f ) , "data-cke-real-node-type" : a . type , alt : e , title : e , align : a . attributes . align || "" } ; CKEDITOR . env . hc || ( b . src = CKEDITOR . tools . transparentImageData ) ; c && ( b [ "data-cke-real-element-type" ] = c ) ; d && ( b [ "data-cke-resizable" ] = d , d = a . attributes , a = new i , c = d . width , d = d . height , void 0 != c && ( a . rules . width = h ( c ) ) , void 0 != d && ( a . rules . height = h ( d ) ) , a . populate ( b ) ) ; return new CKEDITOR . htmlParser . element ( "img" , b ) } ; CKEDITOR . editor . prototype . restoreRealElement =
@ -898,8 +901,16 @@ d,a}else for(d=this.index+1;d<b.length;d++)if(a=b[d],!c.equalsContent(a))return
return l [ a ] ? b . FUNCTIONAL : b . PRINTABLE } ; e . getOppositeKeyGroup = function ( a ) { var b = e . keyGroups ; return a == b . FUNCTIONAL ? b . PRINTABLE : b . FUNCTIONAL } ; e . ieFunctionalKeysBug = function ( a ) { return CKEDITOR . env . ie && e . getKeyGroup ( a ) == e . keyGroups . FUNCTIONAL } ; var f = CKEDITOR . plugins . undo . Image = function ( a , b ) { this . editor = a ; a . fire ( "beforeUndoImage" ) ; var c = a . getSnapshot ( ) ; CKEDITOR . env . ie && c && ( c = c . replace ( /\s+data-cke-expando=".*?"/g , "" ) ) ; this . contents = c ; b || ( this . bookmarks = ( c = c && a . getSelection ( ) ) && c . createBookmarks2 ( ! 0 ) ) ; a . fire ( "afterUndoImage" ) } ,
h = /\b(?:href|src|name)="[^"]*?"/gi ; f . prototype = { equalsContent : function ( a ) { var b = this . contents , a = a . contents ; if ( CKEDITOR . env . ie && ( CKEDITOR . env . ie7Compat || CKEDITOR . env . quirks ) ) b = b . replace ( h , "" ) , a = a . replace ( h , "" ) ; return b != a ? ! 1 : ! 0 } , equalsSelection : function ( a ) { var b = this . bookmarks , a = a . bookmarks ; if ( b || a ) { if ( ! b || ! a || b . length != a . length ) return ! 1 ; for ( var c = 0 ; c < b . length ; c ++ ) { var d = b [ c ] , e = a [ c ] ; if ( d . startOffset != e . startOffset || d . endOffset != e . endOffset || ! CKEDITOR . tools . arrayCompare ( d . start , e . start ) || ! CKEDITOR . tools . arrayCompare ( d . end ,
e . end ) ) return ! 1 } } return ! 0 } } ; var i = CKEDITOR . plugins . undo . NativeEditingHandler = function ( a ) { this . undoManager = a ; this . ignoreInputEvent = ! 1 ; this . keyEventsStack = new k ; this . lastKeydownImage = null } ; i . prototype = { onKeydown : function ( a ) { if ( - 1 < CKEDITOR . tools . indexOf ( g , a . data . getKeystroke ( ) ) ) a . data . preventDefault ( ) ; else { this . keyEventsStack . cleanUp ( a ) ; var a = a . data . getKey ( ) , b = this . undoManager ; this . keyEventsStack . getLast ( a ) || this . keyEventsStack . push ( a ) ; this . lastKeydownImage = new f ( b . editor ) ; if ( e . isNavigationKey ( a ) || this . undoManager . keyGroupChanged ( a ) ) if ( b . strokesRecorded [ 0 ] ||
b . strokesRecorded [ 1 ] ) b . save ( ! 1 , this . lastKeydownImage ) , b . resetType ( ) } } , onInput : function ( ) { if ( this . ignoreInputEvent ) this . ignoreInputEvent = ! 1 ; else { var a = this . keyEventsStack . getLast ( ) ; a || ( a = this . keyEventsStack . push ( 0 ) ) ; this . keyEventsStack . increment ( a . keyCode ) ; this . keyEventsStack . getTotalInputs ( ) >= this . undoManager . strokesLimit && ( this . undoManager . type ( a . keyCode , ! 0 ) , this . keyEventsStack . resetInputs ( ) ) } } , onKeyup : function ( a ) { var b = this . undoManager , a = a . data . getKey ( ) , c = this . keyEventsStack . getTotalInputs ( ) ; this . keyEventsStack . remove ( a ) ;
if ( ! e . ieFunctionalKeysBug ( a ) || ! this . lastKeydownImage || ! this . lastKeydownImage . equalsContent ( new f ( b . editor , ! 0 ) ) ) if ( 0 < c ) b . type ( a ) ; else if ( e . isNavigationKey ( a ) ) this . onNavigationKey ( ! 0 ) } , onNavigationKey : function ( a ) { var b = this . undoManager ; ( a || ! b . save ( ! 0 , null , ! 1 ) ) && b . updateSelection ( new f ( b . editor ) ) ; b . resetType ( ) } , ignoreInputEventListener : function ( ) { this . ignoreInputEvent = ! 0 } , attachListeners : function ( ) { var a = this . undoManager . editor , b = a . editable ( ) , c = this ; b . attachListener ( b , "keydown" , function ( a ) { c . onKeydown ( a ) ;
if ( e . ieFunctionalKeysBug ( a . data . getKey ( ) ) ) c . onInput ( ) } , null , null , 999 ) ; b . attachListener ( b , CKEDITOR . env . ie ? "keypress" : "input" , c . onInput , c , null , 999 ) ; b . attachListener ( b , "keyup" , c . onKeyup , c , null , 999 ) ; b . attachListener ( b , "paste" , c . ignoreInputEventListener , c , null , 999 ) ; b . attachListener ( b , "drop" , c . ignoreInputEventListener , c , null , 999 ) ; b . attachListener ( b . isInline ( ) ? b : a . document . getDocumentElement ( ) , "click" , function ( ) { c . onNavigationKey ( ) } , null , null , 999 ) ; b . attachListener ( this . undoManager . editor , "blur" , function ( ) { c . keyEventsStack . remove ( 9 ) } ,
null , null , 999 ) } } ; var k = CKEDITOR . plugins . undo . KeyEventsStack = function ( ) { this . stack = [ ] } ; k . prototype = { push : function ( a ) { return this . stack [ this . stack . push ( { keyCode : a , inputs : 0 } ) - 1 ] } , getLastIndex : function ( a ) { if ( "number" != typeof a ) return this . stack . length - 1 ; for ( var b = this . stack . length ; b -- ; ) if ( this . stack [ b ] . keyCode == a ) return b ; return - 1 } , getLast : function ( a ) { a = this . getLastIndex ( a ) ; return - 1 != a ? this . stack [ a ] : null } , increment : function ( a ) { this . getLast ( a ) . inputs ++ } , remove : function ( a ) { a = this . getLastIndex ( a ) ; - 1 != a &&
this . stack . splice ( a , 1 ) } , resetInputs : function ( a ) { if ( "number" == typeof a ) this . getLast ( a ) . inputs = 0 ; else for ( a = this . stack . length ; a -- ; ) this . stack [ a ] . inputs = 0 } , getTotalInputs : function ( ) { for ( var a = this . stack . length , b = 0 ; a -- ; ) b += this . stack [ a ] . inputs ; return b } , cleanUp : function ( a ) { a = a . data . $ ; ! a . ctrlKey && ! a . metaKey && this . remove ( 17 ) ; a . shiftKey || this . remove ( 16 ) ; a . altKey || this . remove ( 18 ) } } } ) ( ) ; CKEDITOR . config . plugins = 'dialogui,dialog,base64image,basicstyles,blockquote,clipboard,button,panelbutton,panel,floatpanel,colorbutton,divarea,enterkey,entities,floatingspace,listblock,richcombo,font,htmlwriter,image,lineutils,widget,image2,indent,indentblock,indentlist,fakeobjects,link,list,menu,menubutton,onchange,removeformat,selectall,sharedspace,sourcearea,toolbar,undo' ; CKEDITOR . config . skin = 'moono' ; ( function ( ) { var setIcons = function ( icons , strip ) { var path = CKEDITOR . getUrl ( 'plugins/' + strip ) ; icons = icons . split ( ',' ) ; for ( var i = 0 ; i < icons . length ; i ++ ) CKEDITOR . skin . icons [ icons [ i ] ] = { path : path , offset : - icons [ ++ i ] , bgsize : icons [ ++ i ] } ; } ; if ( CKEDITOR . env . hidpi ) setIcons ( 'base64image,0,,bold,24,,italic,48,,strike,72,,subscript,96,,superscript,120,,underline,144,,blockquote,168,,copy-rtl,192,,copy,216,,cut-rtl,240,,cut,264,,paste-rtl,288,,paste,312,,bgcolor,336,,textcolor,360,,image,384,,indent-rtl,408,,indent,432,,outdent-rtl,456,,outdent,480,,anchor-rtl,504,,anchor,528,,link,552,,unlink,576,,bulletedlist-rtl,600,,bulletedlist,624,,numberedlist-rtl,648,,numberedlist,672,,removeformat,696,,selectall,720,,source-rtl,744,,source,768,,redo-rtl,792,,redo,816,,undo-rtl,840,,undo,864,' , 'icons_hidpi.png' ) ; else setIcons ( 'base64image,0,auto,bold,24,auto,italic,48,auto,strike,72,auto,subscript,96,auto,superscript,120,auto,underline,144,auto,blockquote,168,auto,copy-rtl,192,auto,copy,216,auto,cut-rtl,240,auto,cut,264,auto,paste-rtl,288,auto,paste,312,auto,bgcolor,336,auto,textcolor,360,auto,image,384,auto,indent-rtl,408,auto,indent,432,auto,outdent-rtl,456,auto,outdent,480,auto,anchor-rtl,504,auto,anchor,528,auto,link,552,auto,unlink,576,auto,bulletedlist-rtl,600,auto,bulletedlist,624,auto,numberedlist-rtl,648,auto,numberedlist,672,auto,removeformat,696,auto,selectall,720,auto,source-rtl,744,auto,source,768,auto,redo-rtl,792,auto,redo,816,auto,undo-rtl,840,auto,undo,864,auto' , 'icons.png' ) ; } ) ( ) ; CKEDITOR . lang . languages = { "af" : 1 , "sq" : 1 , "ar" : 1 , "eu" : 1 , "bn" : 1 , "bs" : 1 , "bg" : 1 , "ca" : 1 , "zh-cn" : 1 , "zh" : 1 , "hr" : 1 , "cs" : 1 , "da" : 1 , "nl" : 1 , "en" : 1 , "en-au" : 1 , "en-ca" : 1 , "en-gb" : 1 , "eo" : 1 , "et" : 1 , "fo" : 1 , "fi" : 1 , "fr" : 1 , "fr-ca" : 1 , "gl" : 1 , "ka" : 1 , "de" : 1 , "el" : 1 , "gu" : 1 , "he" : 1 , "hi" : 1 , "hu" : 1 , "is" : 1 , "id" : 1 , "it" : 1 , "ja" : 1 , "km" : 1 , "ko" : 1 , "ku" : 1 , "lv" : 1 , "lt" : 1 , "mk" : 1 , "ms" : 1 , "mn" : 1 , "no" : 1 , "nb" : 1 , "fa" : 1 , "pl" : 1 , "pt-br" : 1 , "pt" : 1 , "ro" : 1 , "ru" : 1 , "sr" : 1 , "sr-latn" : 1 , "si" : 1 , "sk" : 1 , "sl" : 1 , "es" : 1 , "sv" : 1 , "tt" : 1 , "th" : 1 , "tr" : 1 , "ug" : 1 , "uk" : 1 , "vi" : 1 , "cy" : 1 } ; } ( ) ) ;
b . strokesRecorded [ 1 ] ) b . save ( ! 1 , this . lastKeydownImage , ! 1 ) , b . resetType ( ) } } , onInput : function ( ) { if ( this . ignoreInputEvent ) this . ignoreInputEvent = ! 1 ; else { var a = this . keyEventsStack . getLast ( ) ; a || ( a = this . keyEventsStack . push ( 0 ) ) ; this . keyEventsStack . increment ( a . keyCode ) ; this . keyEventsStack . getTotalInputs ( ) >= this . undoManager . strokesLimit && ( this . undoManager . type ( a . keyCode , ! 0 ) , this . keyEventsStack . resetInputs ( ) ) } } , onKeyup : function ( a ) { var b = this . undoManager , a = a . data . getKey ( ) , c = this . keyEventsStack . getTotalInputs ( ) ;
this . keyEventsStack . remove ( a ) ; if ( ! e . ieFunctionalKeysBug ( a ) || ! this . lastKeydownImage || ! this . lastKeydownImage . equalsContent ( new f ( b . editor , ! 0 ) ) ) if ( 0 < c ) b . type ( a ) ; else if ( e . isNavigationKey ( a ) ) this . onNavigationKey ( ! 0 ) } , onNavigationKey : function ( a ) { var b = this . undoManager ; ( a || ! b . save ( ! 0 , null , ! 1 ) ) && b . updateSelection ( new f ( b . editor ) ) ; b . resetType ( ) } , ignoreInputEventListener : function ( ) { this . ignoreInputEvent = ! 0 } , attachListeners : function ( ) { var a = this . undoManager . editor , b = a . editable ( ) , c = this ; b . attachListener ( b , "keydown" ,
function ( a ) { c . onKeydown ( a ) ; if ( e . ieFunctionalKeysBug ( a . data . getKey ( ) ) ) c . onInput ( ) } , null , null , 999 ) ; b . attachListener ( b , CKEDITOR . env . ie ? "keypress" : "input" , c . onInput , c , null , 999 ) ; b . attachListener ( b , "keyup" , c . onKeyup , c , null , 999 ) ; b . attachListener ( b , "paste" , c . ignoreInputEventListener , c , null , 999 ) ; b . attachListener ( b , "drop" , c . ignoreInputEventListener , c , null , 999 ) ; b . attachListener ( b . isInline ( ) ? b : a . document . getDocumentElement ( ) , "click" , function ( ) { c . onNavigationKey ( ) } , null , null , 999 ) ; b . attachListener ( this . undoManager . editor ,
"blur" , function ( ) { c . keyEventsStack . remove ( 9 ) } , null , null , 999 ) } } ; var k = CKEDITOR . plugins . undo . KeyEventsStack = function ( ) { this . stack = [ ] } ; k . prototype = { push : function ( a ) { return this . stack [ this . stack . push ( { keyCode : a , inputs : 0 } ) - 1 ] } , getLastIndex : function ( a ) { if ( "number" != typeof a ) return this . stack . length - 1 ; for ( var b = this . stack . length ; b -- ; ) if ( this . stack [ b ] . keyCode == a ) return b ; return - 1 } , getLast : function ( a ) { a = this . getLastIndex ( a ) ; return - 1 != a ? this . stack [ a ] : null } , increment : function ( a ) { this . getLast ( a ) . inputs ++ } , remove : function ( a ) { a =
this . getLastIndex ( a ) ; - 1 != a && this . stack . splice ( a , 1 ) } , resetInputs : function ( a ) { if ( "number" == typeof a ) this . getLast ( a ) . inputs = 0 ; else for ( a = this . stack . length ; a -- ; ) this . stack [ a ] . inputs = 0 } , getTotalInputs : function ( ) { for ( var a = this . stack . length , b = 0 ; a -- ; ) b += this . stack [ a ] . inputs ; return b } , cleanUp : function ( a ) { a = a . data . $ ; ! a . ctrlKey && ! a . metaKey && this . remove ( 17 ) ; a . shiftKey || this . remove ( 16 ) ; a . altKey || this . remove ( 18 ) } } } ) ( ) ; ( function ( ) { function n ( a , f , d , b ) { if ( ! a . isReadOnly ( ) && ! a . equals ( d . editable ( ) ) ) { CKEDITOR . dom . element . setMarker ( b , a , "bidi_processed" , 1 ) ; for ( var b = a , c = d . editable ( ) ; ( b = b . getParent ( ) ) && ! b . equals ( c ) ; ) if ( b . getCustomData ( "bidi_processed" ) ) { a . removeStyle ( "direction" ) ; a . removeAttribute ( "dir" ) ; return } b = "useComputedState" in d . config ? d . config . useComputedState : 1 ; if ( ( b ? a . getComputedStyle ( "direction" ) : a . getStyle ( "direction" ) || a . hasAttribute ( "dir" ) ) != f ) a . removeStyle ( "direction" ) , b ? ( a . removeAttribute ( "dir" ) , f != a . getComputedStyle ( "direction" ) &&
a . setAttribute ( "dir" , f ) ) : a . setAttribute ( "dir" , f ) , d . forceNextSelectionCheck ( ) } } function r ( a , f , d ) { var b = a . getCommonAncestor ( ! 1 , ! 0 ) , a = a . clone ( ) ; a . enlarge ( d == CKEDITOR . ENTER _BR ? CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : CKEDITOR . ENLARGE _BLOCK _CONTENTS ) ; if ( a . checkBoundaryOfElement ( b , CKEDITOR . START ) && a . checkBoundaryOfElement ( b , CKEDITOR . END ) ) { for ( var c ; b && b . type == CKEDITOR . NODE _ELEMENT && ( c = b . getParent ( ) ) && 1 == c . getChildCount ( ) && ! ( b . getName ( ) in f ) ; ) b = c ; return b . type == CKEDITOR . NODE _ELEMENT && b . getName ( ) in f && b } } function m ( a ) { return { context : "p" ,
allowedContent : { "h1 h2 h3 h4 h5 h6 table ul ol blockquote div tr p div li td" : { propertiesOnly : ! 0 , attributes : "dir" } } , requiredContent : "p[dir]" , refresh : function ( a , d ) { var b = a . config . useComputedState , c , b = void 0 === b || b ; if ( ! b ) { c = d . lastElement ; for ( var h = a . editable ( ) ; c && ! ( c . getName ( ) in q || c . equals ( h ) ) ; ) { var e = c . getParent ( ) ; if ( ! e ) break ; c = e } } c = c || d . block || d . blockLimit ; c . equals ( a . editable ( ) ) && ( h = a . getSelection ( ) . getRanges ( ) [ 0 ] . getEnclosedNode ( ) ) && h . type == CKEDITOR . NODE _ELEMENT && ( c = h ) ; c && ( b = b ? c . getComputedStyle ( "direction" ) :
c . getStyle ( "direction" ) || c . getAttribute ( "dir" ) , a . getCommand ( "bidirtl" ) . setState ( "rtl" == b ? CKEDITOR . TRISTATE _ON : CKEDITOR . TRISTATE _OFF ) , a . getCommand ( "bidiltr" ) . setState ( "ltr" == b ? CKEDITOR . TRISTATE _ON : CKEDITOR . TRISTATE _OFF ) ) ; b = ( d . block || d . blockLimit || a . editable ( ) ) . getDirection ( 1 ) ; if ( b != ( a . _ . selDir || a . lang . dir ) ) a . _ . selDir = b , a . fire ( "contentDirChanged" , b ) } , exec : function ( f ) { var d = f . getSelection ( ) , b = f . config . enterMode , c = d . getRanges ( ) ; if ( c && c . length ) { for ( var h = { } , e = d . createBookmarks ( ) , c = c . createIterator ( ) , g ,
j = 0 ; g = c . getNextRange ( 1 ) ; ) { var i = g . getEnclosedNode ( ) ; if ( ! i || i && ! ( i . type == CKEDITOR . NODE _ELEMENT && i . getName ( ) in o ) ) i = r ( g , p , b ) ; i && n ( i , a , f , h ) ; var k = new CKEDITOR . dom . walker ( g ) , l = e [ j ] . startNode , m = e [ j ++ ] . endNode ; k . evaluator = function ( a ) { return ! ! ( a . type == CKEDITOR . NODE _ELEMENT && a . getName ( ) in p && ! ( a . getName ( ) == ( b == CKEDITOR . ENTER _P ? "p" : "div" ) && a . getParent ( ) . type == CKEDITOR . NODE _ELEMENT && "blockquote" == a . getParent ( ) . getName ( ) ) && a . getPosition ( l ) & CKEDITOR . POSITION _FOLLOWING && ( a . getPosition ( m ) & CKEDITOR . POSITION _PRECEDING +
CKEDITOR . POSITION _CONTAINS ) == CKEDITOR . POSITION _PRECEDING ) } ; for ( ; i = k . next ( ) ; ) n ( i , a , f , h ) ; g = g . createIterator ( ) ; for ( g . enlargeBr = b != CKEDITOR . ENTER _BR ; i = g . getNextParagraph ( b == CKEDITOR . ENTER _P ? "p" : "div" ) ; ) n ( i , a , f , h ) } CKEDITOR . dom . element . clearAllMarkers ( h ) ; f . forceNextSelectionCheck ( ) ; d . selectBookmarks ( e ) ; f . focus ( ) } } } } function s ( a ) { var f = a == j . setAttribute , d = a == j . removeAttribute , b = /\bdirection\s*:\s*(.*?)\s*(:?$|;)/ ; return function ( c , h ) { if ( ! this . isReadOnly ( ) ) { var e ; if ( e = c == ( f || d ? "dir" : "direction" ) || "style" ==
c && ( d || b . test ( h ) ) ) { a : { e = this ; for ( var g = e . getDocument ( ) . getBody ( ) . getParent ( ) ; e ; ) { if ( e . equals ( g ) ) { e = ! 1 ; break a } e = e . getParent ( ) } e = ! 0 } e = ! e } if ( e && ( e = this . getDirection ( 1 ) , g = a . apply ( this , arguments ) , e != this . getDirection ( 1 ) ) ) return this . getDocument ( ) . fire ( "dirChanged" , this ) , g } return a . apply ( this , arguments ) } } var p = { table : 1 , ul : 1 , ol : 1 , blockquote : 1 , div : 1 } , o = { } , q = { } ; CKEDITOR . tools . extend ( o , p , { tr : 1 , p : 1 , div : 1 , li : 1 } ) ; CKEDITOR . tools . extend ( q , o , { td : 1 } ) ; CKEDITOR . plugins . add ( "bidi" , { init : function ( a ) { function f ( b , c , d ,
e , f ) { a . addCommand ( d , new CKEDITOR . command ( a , e ) ) ; a . ui . addButton && a . ui . addButton ( b , { label : c , command : d , toolbar : "bidi," + f } ) } if ( ! a . blockless ) { var d = a . lang . bidi ; f ( "BidiLtr" , d . ltr , "bidiltr" , m ( "ltr" ) , 10 ) ; f ( "BidiRtl" , d . rtl , "bidirtl" , m ( "rtl" ) , 20 ) ; a . on ( "contentDom" , function ( ) { a . document . on ( "dirChanged" , function ( b ) { a . fire ( "dirChanged" , { node : b . data , dir : b . data . getDirection ( 1 ) } ) } ) } ) ; a . on ( "contentDirChanged" , function ( b ) { var b = ( a . lang . dir != b . data ? "add" : "remove" ) + "Class" , c = a . ui . space ( a . config . toolbarLocation ) ; if ( c ) c [ b ] ( "cke_mixed_dir_content" ) } ) } } } ) ;
for ( var j = CKEDITOR . dom . element . prototype , l = [ "setStyle" , "removeStyle" , "setAttribute" , "removeAttribute" ] , k = 0 ; k < l . length ; k ++ ) j [ l [ k ] ] = CKEDITOR . tools . override ( j [ l [ k ] ] , s ) } ) ( ) ; CKEDITOR . config . plugins = 'dialogui,dialog,base64image,basicstyles,blockquote,clipboard,button,panelbutton,panel,floatpanel,colorbutton,divarea,enterkey,entities,floatingspace,listblock,richcombo,font,htmlwriter,image,lineutils,widget,image2,indent,indentblock,indentlist,fakeobjects,link,list,menu,menubutton,onchange,removeformat,selectall,sharedspace,sourcearea,toolbar,undo,bidi' ; CKEDITOR . config . skin = 'icy_orange' ; ( function ( ) { var setIcons = function ( icons , strip ) { var path = CKEDITOR . getUrl ( 'plugins/' + strip ) ; icons = icons . split ( ',' ) ; for ( var i = 0 ; i < icons . length ; i ++ ) CKEDITOR . skin . icons [ icons [ i ] ] = { path : path , offset : - icons [ ++ i ] , bgsize : icons [ ++ i ] } ; } ; if ( CKEDITOR . env . hidpi ) setIcons ( 'base64image,0,,bold,24,,italic,48,,strike,72,,subscript,96,,superscript,120,,underline,144,,blockquote,168,,copy-rtl,192,,copy,216,,cut-rtl,240,,cut,264,,paste-rtl,288,,paste,312,,bgcolor,336,,textcolor,360,,image,384,,indent-rtl,408,,indent,432,,outdent-rtl,456,,outdent,480,,anchor-rtl,504,,anchor,528,,link,552,,unlink,576,,bulletedlist-rtl,600,,bulletedlist,624,,numberedlist-rtl,648,,numberedlist,672,,removeformat,696,,selectall,720,,source-rtl,744,,source,768,,redo-rtl,792,,redo,816,,undo-rtl,840,,undo,864,,bidiltr,888,,bidirtl,912,' , 'icons_hidpi.png' ) ; else setIcons ( 'base64image,0,auto,bold,24,auto,italic,48,auto,strike,72,auto,subscript,96,auto,superscript,120,auto,underline,144,auto,blockquote,168,auto,copy-rtl,192,auto,copy,216,auto,cut-rtl,240,auto,cut,264,auto,paste-rtl,288,auto,paste,312,auto,bgcolor,336,auto,textcolor,360,auto,image,384,auto,indent-rtl,408,auto,indent,432,auto,outdent-rtl,456,auto,outdent,480,auto,anchor-rtl,504,auto,anchor,528,auto,link,552,auto,unlink,576,auto,bulletedlist-rtl,600,auto,bulletedlist,624,auto,numberedlist-rtl,648,auto,numberedlist,672,auto,removeformat,696,auto,selectall,720,auto,source-rtl,744,auto,source,768,auto,redo-rtl,792,auto,redo,816,auto,undo-rtl,840,auto,undo,864,auto,bidiltr,888,auto,bidirtl,912,auto' , 'icons.png' ) ; } ) ( ) ; CKEDITOR . lang . languages = { "af" : 1 , "ar" : 1 , "bg" : 1 , "bn" : 1 , "bs" : 1 , "ca" : 1 , "cs" : 1 , "cy" : 1 , "da" : 1 , "de" : 1 , "el" : 1 , "en" : 1 , "en-au" : 1 , "en-ca" : 1 , "en-gb" : 1 , "eo" : 1 , "es" : 1 , "et" : 1 , "eu" : 1 , "fa" : 1 , "fi" : 1 , "fo" : 1 , "fr" : 1 , "fr-ca" : 1 , "gl" : 1 , "gu" : 1 , "he" : 1 , "hi" : 1 , "hr" : 1 , "hu" : 1 , "id" : 1 , "is" : 1 , "it" : 1 , "ja" : 1 , "ka" : 1 , "km" : 1 , "ko" : 1 , "ku" : 1 , "lt" : 1 , "lv" : 1 , "mk" : 1 , "mn" : 1 , "ms" : 1 , "nb" : 1 , "nl" : 1 , "no" : 1 , "pl" : 1 , "pt" : 1 , "pt-br" : 1 , "ro" : 1 , "ru" : 1 , "si" : 1 , "sk" : 1 , "sl" : 1 , "sq" : 1 , "sr" : 1 , "sr-latn" : 1 , "sv" : 1 , "th" : 1 , "tr" : 1 , "tt" : 1 , "ug" : 1 , "uk" : 1 , "vi" : 1 , "zh" : 1 , "zh-cn" : 1 } ; } ( ) ) ;