@ -1,15 +1,15 @@
/ *
Copyright ( c ) 2003 - 202 1, CKSource - Frederico Knabben . All rights reserved .
For licensing , see LICENSE . md or https : //ckeditor.com/legal/ckeditor-oss-license
Copyright ( c ) 2003 - 202 2, CKSource Holding sp . z o . o . All rights reserved .
For licensing , see LICENSE . md or https : //ckeditor.com/legal/ckeditor-oss-license /
* /
( function ( ) { if ( window . CKEDITOR && window . CKEDITOR . dom ) return ; window . CKEDITOR || ( window . CKEDITOR = function ( ) { var a = /(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i , d = { timestamp : " LAHF", version : "4.17.1" , revision : "f6dd30807a ", rnd : Math . floor ( 900 * Math . random ( ) ) + 100 , _ : { pending : [ ] , basePathSrcPattern : a } , status : "unloaded" , basePath : function ( ) { var b = window . CKEDITOR _BASEPATH || "" ; if ( ! b ) for ( var c = document . getElementsByTagName ( "script" ) , d = 0 ; d < c . length ; d ++ ) { var h = c [ d ] . src . match ( a ) ; if ( h ) { b = h [ 1 ] ; break } } - 1 == b . indexOf ( ":/" ) && "//" != b . slice ( 0 , 2 ) && ( b = 0 === b . indexOf ( "/" ) ? location . href . match ( /^.*?:\/\/[^\/]*/ ) [ 0 ] +
b : location . href . match ( /^[^\?]*\/(?:)/ ) [ 0 ] + b ) ; if ( ! b ) throw 'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.' ; return b } ( ) , 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 ( "?" ) ? "\x26" : "?" )+ "t\x3d" + this . timestamp ) ; return a } , domReady : function ( ) { function a ( ) { try { document . addEventListener ? ( document . removeEventListener ( "DOMContentLoaded" ,
a , ! 1 ) , window . removeEventListener ( "load" , a , ! 1 ) , b ( ) ) : document . attachEvent && "complete" === document . readyState && ( document . detachEvent ( "onreadystatechange" , a ) , window . detachEvent ( "onload" , a ) , b ( ) ) } catch ( c ) { } } function b ( ) { for ( var a ; a = c . shift ( ) ; ) a ( ) } var c = [ ] ; return function ( b ) { function e ( ) { try { document . documentElement . doScroll ( "left" ) } catch ( b ) { setTimeout ( e , 1 ) ; return } a ( ) } c . push ( b ) ; "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 ) ; b = ! 1 ; try { b = ! window . frameElement } catch ( d ) { } document . documentElement . doScroll && b && e ( ) } } } ( ) } , b = window . CKEDITOR _GETURL ; if ( b ) { var c = d . getUrl ; d . getUrl = function ( a ) { return b . call ( d , a ) || c . call ( d , a ) } } return d } ( ) ) ;
( function ( ) { if ( window . CKEDITOR && window . CKEDITOR . dom ) return ; window . CKEDITOR || ( window . CKEDITOR = function ( ) { var a = /(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i , d = { timestamp : " M199", version : "4.17.2" , revision : "cb93181c83 ", rnd : Math . floor ( 900 * Math . random ( ) ) + 100 , _ : { pending : [ ] , basePathSrcPattern : a } , status : "unloaded" , basePath : function ( ) { var b = window . CKEDITOR _BASEPATH || "" ; if ( ! b ) for ( var c = document . getElementsByTagName ( "script" ) , d = 0 ; d < c . length ; d ++ ) { var h = c [ d ] . src . match ( a ) ; if ( h ) { b = h [ 1 ] ; break } } - 1 == b . indexOf ( ":/" ) && "//" != b . slice ( 0 , 2 ) && ( b = 0 === b . indexOf ( "/" ) ? location . href . match ( /^.*?:\/\/[^\/]*/ ) [ 0 ] +
b : location . href . match ( /^[^\?]*\/(?:)/ ) [ 0 ] + b ) ; if ( ! b ) throw 'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.' ; return b } ( ) , getUrl : function ( a ) { - 1 == a . indexOf ( ":/" ) && 0 !== a . indexOf ( "/" ) && ( a = this . basePath + a ) ; return a = this . appendTimestamp ( a ) } , appendTimestamp : function ( a ) { if ( ! this . timestamp || "/" == =a . charAt ( a . length - 1 ) ||/[&?]t=/ . test ( a ) ) return a ; var b = 0 <= a . indexOf ( "?" ) ? "\x26" : "?" ;return a + b + "t\x3d" + this . timestamp } ,
domReady : function ( ) { function a ( ) { try { document . addEventListener ? ( document . removeEventListener ( "DOMContentLoaded" , a , ! 1 ) , window . removeEventListener ( "load" , a , ! 1 ) , b ( ) ) : document . attachEvent && "complete" === document . readyState && ( document . detachEvent ( "onreadystatechange" , a ) , window . detachEvent ( "onload" , a ) , b ( ) ) } catch ( c ) { } } function b ( ) { for ( var a ; a = c . shift ( ) ; ) a ( ) } var c = [ ] ; return function ( b ) { function e ( ) { try { document . documentElement . doScroll ( "left" ) } catch ( b ) { setTimeout ( e , 1 ) ; return } a ( ) } c . push ( b ) ; "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 ) ; b = ! 1 ; try { b = ! window . frameElement } catch ( d ) { } document . documentElement . doScroll && b && e ( ) } } } ( ) } , b = window . CKEDITOR _GETURL ; if ( b ) { var c = d . getUrl ; d . getUrl = function ( a ) { return b . call ( d , a ) || c . call ( d , a ) } } return d } ( ) ) ;
( function ( ) { var a = { } ; CKEDITOR . event || ( CKEDITOR . event = function ( ) { } , CKEDITOR . event . implementOn = function ( a ) { var b = CKEDITOR . event . prototype , c ; for ( c in b ) null == a [ c ] && ( a [ c ] = b [ c ] ) } , CKEDITOR . event . prototype = function ( ) { function d ( a ) { var e = b ( this ) ; return e [ a ] || ( e [ a ] = new c ( a ) ) } var b = function ( a ) { a = a . getPrivate && a . getPrivate ( ) || a . _ || ( a . _ = { } ) ; return a . events || ( a . events = { } ) } , c = function ( a ) { this . name = a ; this . listeners = [ ] } ; c . prototype = { getListenerIndex : function ( a ) { for ( var b = 0 , c = this . listeners ; b < c . length ; b ++ ) if ( c [ b ] . fn ==
a ) return b ; return - 1 } } ; return { define : function ( a , b ) { var c = d . call ( this , a ) ; CKEDITOR . tools . extend ( c , b , ! 0 ) } , on : function ( b , c , k , h , l ) { function q ( y, z , x , l ) { y = { name : b , sender : this , editor : y, data : z , listenerData : h , stop : x , cancel : l , removeListener : g } ; return ! 1 === c . call ( k , y) ? a : y . data } function g ( ) { y . removeListener ( b , c ) } var y= this , z = d . call ( this , b ) ; if ( 0 > z. getListenerIndex ( c ) ) { z = z . listeners ; k || ( k = this ) ; isNaN ( l ) && ( l = 10 ) ; q . fn = c ; q . priority = l ; for ( var x= z . length - 1 ; 0 <= x ; x -- ) if ( z [ x ] . priority <= l ) return z . splice ( x + 1 , 0 , q ) , { removeListener : g } ;
z . unshift ( q ) } return { removeListener : g } } , once : function ( ) { var a = Array . prototype . slice . call ( arguments ) , b = a [ 1 ] ; a [ 1 ] = function ( a ) { a . removeListener ( ) ; return b . 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 c = 0 , e = function ( ) { c = 1 } , d = 0 , h = function ( ) { d = 1 } ; return function ( l , q , g ) { var y = b ( this ) [ l ] ; l = c ; var z = d ; c = d = 0 ; if ( y) { var x = y . listeners ; if ( x . length ) for ( var x = x . slice ( 0 ) ,
E, v = 0 ; v < x . length ; v ++ ) { if ( y . errorProof ) try { E = x [ v ] . call ( this , g , q , e , h ) } catch ( n) { } else E = x [ v ] . call ( this , g , q , e , h ) ; E === a ? d = 1 : "undefined" != typeof E&& ( q = E ) ; if ( c || d ) break } } q = d ? ! 1 : "undefined" == typeof q ? ! 0 : q ; c = l ; d = z ; return q } } ( ) , fireOnce : function ( a , c , d ) { c = this . fire ( a , c , d ) ; delete b ( this ) [ a ] ; return c } , removeListener : function ( a , c ) { var d = b ( this ) [ a ] ; if ( d ) { var h = d . getListenerIndex ( c ) ; 0 <= h && d . listeners . splice ( h , 1 ) } } , removeAllListeners : function ( ) { var a = b ( this ) , c ; for ( c in a ) delete a [ c ] } , hasListeners : function ( a ) { return ( a =
a ) return b ; return - 1 } } ; return { define : function ( a , b ) { var c = d . call ( this , a ) ; CKEDITOR . tools . extend ( c , b , ! 0 ) } , on : function ( b , c , k , h , l ) { function q ( w, x , z , l ) { w = { name : b , sender : this , editor : w, data : x , listenerData : h , stop : z , cancel : l , removeListener : g } ; return ! 1 === c . call ( k , w) ? a : w . data } function g ( ) { w . removeListener ( b , c ) } var w= this , x = d . call ( this , b ) ; if ( 0 > x. getListenerIndex ( c ) ) { x = x . listeners ; k || ( k = this ) ; isNaN ( l ) && ( l = 10 ) ; q . fn = c ; q . priority = l ; for ( var z= x . length - 1 ; 0 <= z ; z -- ) if ( x [ z ] . priority <= l ) return x . splice ( z + 1 , 0 , q ) , { removeListener : g } ;
x . unshift ( q ) } return { removeListener : g } } , once : function ( ) { var a = Array . prototype . slice . call ( arguments ) , b = a [ 1 ] ; a [ 1 ] = function ( a ) { a . removeListener ( ) ; return b . 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 c = 0 , e = function ( ) { c = 1 } , d = 0 , h = function ( ) { d = 1 } ; return function ( l , q , g ) { var w = b ( this ) [ l ] ; l = c ; var x = d ; c = d = 0 ; if ( w) { var z = w . listeners ; if ( z . length ) for ( var z = z . slice ( 0 ) ,
A, t = 0 ; t < z . length ; t ++ ) { if ( w . errorProof ) try { A = z [ t ] . call ( this , g , q , e , h ) } catch ( m) { } else A = z [ t ] . call ( this , g , q , e , h ) ; A === a ? d = 1 : "undefined" != typeof A&& ( q = A ) ; if ( c || d ) break } } q = d ? ! 1 : "undefined" == typeof q ? ! 0 : q ; c = l ; d = x ; return q } } ( ) , fireOnce : function ( a , c , d ) { c = this . fire ( a , c , d ) ; delete b ( this ) [ a ] ; return c } , removeListener : function ( a , c ) { var d = b ( this ) [ a ] ; if ( d ) { var h = d . getListenerIndex ( c ) ; 0 <= h && d . listeners . splice ( h , 1 ) } } , removeAllListeners : function ( ) { var a = b ( this ) , c ; for ( c in a ) delete a [ c ] } , hasListeners : function ( a ) { return ( a =
b ( this ) [ a ] ) && 0 < a . listeners . length } } } ( ) ) } ) ( ) ; CKEDITOR . editor || ( CKEDITOR . editor = function ( ) { CKEDITOR . _ . pending . push ( [ this , arguments ] ) ; CKEDITOR . event . call ( this ) } , CKEDITOR . editor . prototype . fire = function ( a , d ) { a in { instanceReady : 1 , loaded : 1 } && ( this [ a ] = ! 0 ) ; return CKEDITOR . event . prototype . fire . call ( this , a , d , this ) } , CKEDITOR . editor . prototype . fireOnce = function ( a , d ) { a in { instanceReady : 1 , loaded : 1 } && ( this [ a ] = ! 0 ) ; return CKEDITOR . event . prototype . fireOnce . call ( this , a , d , this ) } , CKEDITOR . event . implementOn ( CKEDITOR . editor . prototype ) ) ;
CKEDITOR . env || ( CKEDITOR . env = function ( ) { var a = navigator . userAgent . toLowerCase ( ) , d = a . match ( /edge[ \/](\d+.?\d*)/ ) , b = - 1 < a . indexOf ( "trident/" ) , b = ! ( ! d && ! b ) , b = { ie : b , edge : ! ! d , webkit : ! b && - 1 < a . indexOf ( " applewebkit/" ) , air : - 1 < a . indexOf ( " adobeair/" ) , mac : - 1 < a . indexOf ( "macintosh" ) , quirks : "BackCompat" == document . compatMode && ( ! document . documentMode || 10 > document . documentMode ) , mobile : - 1 < a . indexOf ( "mobile" ) , iOS : /(ipad|iphone|ipod)/ . test ( a ) , isCustomDomain : function ( ) { if ( ! this . ie ) return ! 1 ; var a = document . domain , b = window . location . hostname ;
return a != b && a != "[" + b + "]" } , secure : "https:" == location . protocol } ; b . gecko = "Gecko" == navigator . product && ! b . webkit && ! b . ie ; b . webkit && ( - 1 < a . indexOf ( "chrome" ) ? b . chrome = ! 0 : b . safari = ! 0 ) ; var c = 0 ; b . ie && ( c = d ? parseFloat ( d [ 1 ] ) : b . quirks || ! document . documentMode ? parseFloat ( a . match ( /msie (\d+)/ ) [ 1 ] ) : document . documentMode , b . ie9Compat = 9 == c , b . ie8Compat = 8 == c , b . ie7Compat = 7 == c , b . ie6Compat = 7 > c || b . quirks ) ; b . gecko && ( d = a . match ( /rv:([\d\.]+)/ ) ) && ( d = d [ 1 ] . split ( "." ) , c = 1E4 * d [ 0 ] + 100 * ( d [ 1 ] || 0 ) + 1 * ( d [ 2 ] || 0 ) ) ; b . air && ( c = parseFloat ( a . match ( / adobeair\/(\d+)/ ) [ 1 ] ) ) ;
@ -19,33 +19,33 @@ b.iOS&&(b.cssClass+=" cke_browser_ios");b.hidpi&&(b.cssClass+=" cke_hidpi");retu
CKEDITOR . loadFullCore , d = CKEDITOR . loadFullCoreTimeout ; a && ( CKEDITOR . status = "basic_ready" , a && a . _load ? a ( ) : d && setTimeout ( function ( ) { CKEDITOR . loadFullCore && CKEDITOR . loadFullCore ( ) } , 1E3 * d ) ) } ) } ) ( ) ; CKEDITOR . status = "basic_loaded" } ( ) ; "use strict" ; CKEDITOR . VERBOSITY _WARN = 1 ; CKEDITOR . VERBOSITY _ERROR = 2 ; CKEDITOR . verbosity = CKEDITOR . VERBOSITY _WARN | CKEDITOR . VERBOSITY _ERROR ; CKEDITOR . warn = function ( a , d ) { CKEDITOR . verbosity & CKEDITOR . VERBOSITY _WARN && CKEDITOR . fire ( "log" , { type : "warn" , errorCode : a , additionalData : d } ) } ;
CKEDITOR . error = function ( a , d ) { CKEDITOR . verbosity & CKEDITOR . VERBOSITY _ERROR && CKEDITOR . fire ( "log" , { type : "error" , errorCode : a , additionalData : d } ) } ;
CKEDITOR . on ( "log" , function ( a ) { if ( window . console && window . console . log ) { var d = console [ a . data . type ] ? a . data . type : "log" , b = a . data . errorCode ; if ( a = a . data . additionalData ) console [ d ] ( "[CKEDITOR] Error code: " + b + "." , a ) ; else console [ d ] ( "[CKEDITOR] Error code: " + b + "." ) ; console [ d ] ( "[CKEDITOR] For more information about this error go to https://ckeditor.com/docs/ckeditor4/latest/guide/dev_errors.html#" + b ) } } , null , null , 999 ) ; CKEDITOR . dom = { } ;
( function ( ) { function a ( a , z , b ) { this . _minInterval = a ; this . _context = b ; this . _lastOutput = this . _scheduledTimer = 0 ; this . _output = CKEDITOR . tools . bind ( z , b || { } ) ; var c = this ; this . input = function ( ) { function a ( ) { c . _lastOutput = ( new Date ) . getTime ( ) ; c . _scheduledTimer = 0 ; c . _call ( ) } if ( ! c . _scheduledTimer || ! 1 !== c . _reschedule ( ) ) { var y = ( new Date ) . getTime ( ) - c . _lastOutput ; y < c . _minInterval ? c . _scheduledTimer = setTimeout ( a , c . _minInterval - y ) : a ( ) } } } function d ( y, z , b ) { a . call ( this , y, z , b ) ; this . _args = [ ] ; var c = this ; this . input = CKEDITOR . tools . override ( this . input ,
function ( a ) { return function ( ) { c . _args = Array . prototype . slice . call ( arguments ) ; a . call ( this ) } } ) } var b = [ ] , c = CKEDITOR . env . gecko ? "-moz-" : CKEDITOR . env . webkit ? "-webkit-" : CKEDITOR . env . ie ? "-ms-" : "" , f = /&/g , e = />/g , k = /</g , h = /"/g , l = /&(lt|gt|amp|quot|nbsp|shy|#\d{1,5});/g , q = { lt : "\x3c" , gt : "\x3e" , amp : "\x26" , quot : '"' , nbsp : " " , shy : " " } , g = function ( a , z) { return "#" == z [ 0 ] ? String . fromCharCode ( parseInt ( z . slice ( 1 ) , 10 ) ) : q [ z ] } ; CKEDITOR . on ( "reset" , function ( ) { b = [ ] } ) ; CKEDITOR . tools = { arrayCompare : function ( a , z) { if ( ! a && ! z ) return ! 0 ;
if ( ! a || ! z|| a . length != z . length ) return ! 1 ; for ( var b = 0 ; b < a . length ; b ++ ) if ( a [ b ] != z [ b ] ) return ! 1 ; return ! 0 } , getIndex : function ( a , z ) { for ( var b = 0 ; b < a . length ; ++ b ) if ( z ( a [ b ] ) ) return b ; return - 1 } , clone : function ( a ) { var z ; if ( a && a instanceof Array ) { z= [ ] ; for ( var b = 0 ; b < a . length ; b ++ ) z [ b ] = CKEDITOR . tools . clone ( a [ b] ) ; return z } if ( null === a || "object" != typeof a || a instanceof String || a instanceof Number || a instanceof Boolean || a instanceof Date || a instanceof RegExp || a . nodeType || a . window === a ) return a ; z= new a . constructor ; for ( b in a ) z [ b ] =
CKEDITOR . tools . clone ( a [ b] ) ; return z } , capitalize : function ( a , b ) { return a . charAt ( 0 ) . toUpperCase ( ) + ( b ? a . slice ( 1 ) : a . slice ( 1 ) . toLowerCase ( ) ) } , extend : function ( a ) { var b = arguments . length , c , g ; "boolean" == typeof ( c = arguments [ b - 1 ] ) ? b -- : "boolean" == typeof ( c = arguments [ b - 2 ] ) && ( g = arguments [ b - 1 ] , b -= 2 ) ; for ( var h = 1 ; h < b ; h ++ ) { var n = arguments [ h ] || { } ; CKEDITOR . tools . array . forEach ( CKEDITOR . tools . object . keys ( n ) , function ( b ) { if ( ! 0 === c || null == a [ b ] ) if ( ! g || b in g ) a [ b ] = n [ b ] } ) } return a } , prototypedCopy : function ( a ) { var b = function ( ) { } ;
( function ( ) { function a ( a , x , b ) { this . _minInterval = a ; this . _context = b ; this . _lastOutput = this . _scheduledTimer = 0 ; this . _output = CKEDITOR . tools . bind ( x , b || { } ) ; var c = this ; this . input = function ( ) { function a ( ) { c . _lastOutput = ( new Date ) . getTime ( ) ; c . _scheduledTimer = 0 ; c . _call ( ) } if ( ! c . _scheduledTimer || ! 1 !== c . _reschedule ( ) ) { var w = ( new Date ) . getTime ( ) - c . _lastOutput ; w < c . _minInterval ? c . _scheduledTimer = setTimeout ( a , c . _minInterval - w ) : a ( ) } } } function d ( w, x , b ) { a . call ( this , w, x , b ) ; this . _args = [ ] ; var c = this ; this . input = CKEDITOR . tools . override ( this . input ,
function ( a ) { return function ( ) { c . _args = Array . prototype . slice . call ( arguments ) ; a . call ( this ) } } ) } var b = [ ] , c = CKEDITOR . env . gecko ? "-moz-" : CKEDITOR . env . webkit ? "-webkit-" : CKEDITOR . env . ie ? "-ms-" : "" , f = /&/g , e = />/g , k = /</g , h = /"/g , l = /&(lt|gt|amp|quot|nbsp|shy|#\d{1,5});/g , q = { lt : "\x3c" , gt : "\x3e" , amp : "\x26" , quot : '"' , nbsp : " " , shy : " " } , g = function ( a , x) { return "#" == x [ 0 ] ? String . fromCharCode ( parseInt ( x . slice ( 1 ) , 10 ) ) : q [ x ] } ; CKEDITOR . on ( "reset" , function ( ) { b = [ ] } ) ; CKEDITOR . tools = { arrayCompare : function ( a , x) { if ( ! a && ! x ) return ! 0 ;
if ( ! a || ! x|| a . length != x . length ) return ! 1 ; for ( var b = 0 ; b < a . length ; b ++ ) if ( a [ b ] != x [ b ] ) return ! 1 ; return ! 0 } , getIndex : function ( a , x ) { for ( var b = 0 ; b < a . length ; ++ b ) if ( x ( a [ b ] ) ) return b ; return - 1 } , clone : function ( a ) { var b ; if ( a && a instanceof Array ) { b= [ ] ; for ( var c = 0 ; c < a . length ; c ++ ) b [ c ] = CKEDITOR . tools . clone ( a [ c] ) ; return b } if ( null === a || "object" != typeof a || a instanceof String || a instanceof Number || a instanceof Boolean || a instanceof Date || a instanceof RegExp || a . nodeType || a . window === a ) return a ; b= new a . constructor ; for ( c in a ) b [ c ] =
CKEDITOR . tools . clone ( a [ c] ) ; return b } , capitalize : function ( a , b ) { return a . charAt ( 0 ) . toUpperCase ( ) + ( b ? a . slice ( 1 ) : a . slice ( 1 ) . toLowerCase ( ) ) } , extend : function ( a ) { var b = arguments . length , c , g ; "boolean" == typeof ( c = arguments [ b - 1 ] ) ? b -- : "boolean" == typeof ( c = arguments [ b - 2 ] ) && ( g = arguments [ b - 1 ] , b -= 2 ) ; for ( var h = 1 ; h < b ; h ++ ) { var m = arguments [ h ] || { } ; CKEDITOR . tools . array . forEach ( CKEDITOR . tools . object . keys ( m ) , function ( b ) { if ( ! 0 === c || null == a [ b ] ) if ( ! g || b in g ) a [ b ] = m [ b ] } ) } return a } , prototypedCopy : function ( a ) { var b = function ( ) { } ;
b . prototype = a ; return new b } , copy : function ( a ) { var b = { } , c ; for ( c in a ) b [ c ] = a [ c ] ; return b } , isArray : function ( a ) { return "[object Array]" == Object . prototype . toString . call ( a ) } , isEmpty : function ( a ) { for ( var b in a ) if ( a . hasOwnProperty ( b ) ) return ! 1 ; return ! 0 } , cssVendorPrefix : function ( a , b , g ) { if ( g ) return c + a + ":" + b + ";" + a + ":" + b ; g = { } ; g [ a ] = b ; g [ c + a ] = b ; return g } , cssStyleToDomStyle : function ( ) { var a = document . createElement ( "div" ) . style , b = "undefined" != typeof a . cssFloat ? "cssFloat" : "undefined" != typeof a . styleFloat ? "styleFloat" :
"float" ; return function ( a ) { return "float" == a ? b : a . replace ( /-./g , function ( a ) { return a . substr ( 1 ) . toUpperCase ( ) } ) } } ( ) , buildStyleHtml : function ( a ) { a = [ ] . concat ( a ) ; for ( var b , c = [ ] , g = 0 ; g < a . length ; g ++ ) if ( b = a [ g ] ) / @ import | [ { } ] / . test ( b ) ? c . push ( "\x3cstyle\x3e" + b + "\x3c/style\x3e" ) : c . push ( '\x3clink type\x3d"text/css" rel\x3dstylesheet href\x3d"' + b + '"\x3e' ) ;return c . join ( "" ) } , htmlEncode : function ( a ) { return void 0 === a || null === a ? "" : String ( a ) . replace ( f , "\x26amp;" ) . replace ( e , "\x26gt;" ) . replace ( k , "\x26lt;" ) } , htmlDecode : function ( a ) { return a . replace ( l ,
g ) } , htmlEncodeAttr : function ( a ) { return CKEDITOR . tools . htmlEncode ( a ) . replace ( h , "\x26quot;" ) } , htmlDecodeAttr : function ( a ) { return CKEDITOR . tools . htmlDecode ( a ) } , transformPlainTextToHtml : function ( a , b ) { var c = b == CKEDITOR . ENTER _BR , g = this . htmlEncode ( a . replace ( /\r\n/g , "\n" ) ) , g = g . replace ( /\t/g , "\x26nbsp;\x26nbsp; \x26nbsp;" ) , h = b == CKEDITOR . ENTER _P ? "p" : "div" ; if ( ! c ) { var n= /\n{2}/g ; if ( n . test ( g ) ) var e = "\x3c" + h + "\x3e" , d = "\x3c/" + h + "\x3e" , g = e + g . replace ( n , function ( ) { return d + e } ) + d } g = g . replace ( /\n/g , "\x3cbr\x3e" ) ; c || ( g =
g . replace ( new RegExp ( "\x3cbr\x3e(?\x3d\x3c/" + h + "\x3e)" ) , function ( a ) { return CKEDITOR . tools . repeat ( a , 2 ) } ) ) ; g = g . replace ( /^ | $/g , "\x26nbsp;" ) ; return g = g . replace ( /(>|\s) /g , function ( a , b ) { return b + "\x26nbsp;" } ) . replace ( / (?=<)/g , "\x26nbsp;" ) } , getNextNumber : function ( ) { var a = 0 ; return function ( ) { return ++ a } } ( ) , getNextId : function ( ) { return "cke_" + this . getNextNumber ( ) } , getUniqueId : function ( ) { for ( var a = "e" , b = 0 ; 8 > b ; b ++ ) a += Math . floor ( 65536 * ( 1 + Math . random ( ) ) ) . toString ( 16 ) . substring ( 1 ) ; return a } , override : function ( a ,
b ) { var c = b ( a ) ; c . prototype = a . prototype ; return c } , setTimeout : function ( a , b , c , g , h ) { h || ( h = window ) ; c || ( c = h ) ; return h . setTimeout ( function ( ) { g ? a . apply ( c , [ ] . concat ( g ) ) : a . apply ( c ) } , b || 0 ) } , throttle : function ( a , b , c ) { return new this . buffers . throttle ( a , b , c ) } , trim : function ( ) { var a = /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g ; return function ( b ) { return b . replace ( a , "" ) } } ( ) , ltrim : function ( ) { var a = /^[ \t\n\r]+/g ; return function ( b ) { return b . replace ( a , "" ) } } ( ) , rtrim : function ( ) { var a = /[ \t\n\r]+$/g ; return function ( b ) { return b . replace ( a ,
"float" ; return function ( a ) { return "float" == a ? b : a . replace ( /-./g , function ( a ) { return a . substr ( 1 ) . toUpperCase ( ) } ) } } ( ) , buildStyleHtml : function ( a ) { a = [ ] . concat ( a ) ; for ( var b , c = [ ] , g = 0 ; g < a . length ; g ++ ) if ( b = a [ g ] ) / @ import | [ { } ] / . test ( b ) ? c . push ( "\x3cstyle\x3e" + b + "\x3c/style\x3e" ) : ( b = CKEDITOR . appendTimestamp ( b ) , c . push ( '\x3clink type\x3d"text/css" rel\x3dstylesheet href\x3d"' + b + '"\x3e' ) ) ;return c . join ( "" ) } , htmlEncode : function ( a ) { return void 0 === a || null === a ? "" : String ( a ) . replace ( f , "\x26amp;" ) . replace ( e , "\x26gt;" ) . replace ( k ,
"\x26lt;" ) } , htmlDecode : function ( a ) { return a . replace ( l , g ) } , htmlEncodeAttr : function ( a ) { return CKEDITOR . tools . htmlEncode ( a ) . replace ( h , "\x26quot;" ) } , htmlDecodeAttr : function ( a ) { return CKEDITOR . tools . htmlDecode ( a ) } , transformPlainTextToHtml : function ( a , b ) { var c = b == CKEDITOR . ENTER _BR , g = this . htmlEncode ( a . replace ( /\r\n/g , "\n" ) ) , g = g . replace ( /\t/g , "\x26nbsp;\x26nbsp; \x26nbsp;" ) , h = b == CKEDITOR . ENTER _P ? "p" : "div" ; if ( ! c ) { var m= /\n{2}/g ; if ( m . test ( g ) ) var e = "\x3c" + h + "\x3e" , d = "\x3c/" + h + "\x3e" , g = e + g . replace ( m , function ( ) { return d +
e } ) + d } g = g . replace ( /\n/g , "\x3cbr\x3e" ) ; c || ( g = g . replace ( new RegExp ( "\x3cbr\x3e(?\x3d\x3c/" + h + "\x3e)" ) , function ( a ) { return CKEDITOR . tools . repeat ( a , 2 ) } ) ) ; g = g . replace ( /^ | $/g , "\x26nbsp;" ) ; return g = g . replace ( /(>|\s) /g , function ( a , b ) { return b + "\x26nbsp;" } ) . replace ( / (?=<)/g , "\x26nbsp;" ) } , getNextNumber : function ( ) { var a = 0 ; return function ( ) { return ++ a } } ( ) , getNextId : function ( ) { return "cke_" + this . getNextNumber ( ) } , getUniqueId : function ( ) { for ( var a = "e" , b = 0 ; 8 > b ; b ++ ) a += Math . floor ( 65536 * ( 1 + Math . random ( ) ) ) . toString ( 16 ) . substring ( 1 ) ;
return a } , override : function ( a , b ) { var c = b ( a ) ; c . prototype = a . prototype ; return c } , setTimeout : function ( a , b , c , g , h ) { h || ( h = window ) ; c || ( c = h ) ; return h . setTimeout ( function ( ) { g ? a . apply ( c , [ ] . concat ( g ) ) : a . apply ( c ) } , b || 0 ) } , throttle : function ( a , b , c ) { return new this . buffers . throttle ( a , b , c ) } , trim : function ( ) { var a = /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g ; return function ( b ) { return b . replace ( a , "" ) } } ( ) , ltrim : function ( ) { var a = /^[ \t\n\r]+/g ; return function ( b ) { return b . replace ( a , "" ) } } ( ) , rtrim : function ( ) { var a = /[ \t\n\r]+$/g ; return function ( b ) { return b . replace ( a ,
"" ) } } ( ) , indexOf : function ( a , b ) { if ( "function" == typeof b ) for ( var c = 0 , g = a . length ; c < g ; c ++ ) { if ( b ( a [ c ] ) ) return c } else { if ( a . indexOf ) return a . indexOf ( b ) ; c = 0 ; for ( g = a . length ; c < g ; c ++ ) if ( a [ c ] === b ) return c } return - 1 } , search : function ( a , b ) { var c = CKEDITOR . tools . indexOf ( a , b ) ; return 0 <= c ? a [ c ] : null } , bind : function ( a , b ) { var c = Array . prototype . slice . call ( arguments , 2 ) ; return function ( ) { return a . apply ( b , c . concat ( Array . prototype . slice . call ( arguments ) ) ) } } , createClass : function ( a ) { var b = a . $ , c = a . base , g = a . privates || a . _ , h = a . proto ;
a = a . statics ; ! b && ( b = function ( ) { c && this . base . apply ( this , arguments ) } ) ; if ( g ) var n = b , b = function ( ) { var a = this . _ || ( this . _ = { } ) , b ; for ( b in g ) { var c = g [ b ] ; a [ b ] = "function" == typeof c ? CKEDITOR . tools . bind ( c , this ) : c } n . apply ( this , arguments ) } ; c && ( b . prototype = this . prototypedCopy ( c . prototype ) , b . prototype . constructor = b , b . base = c , b . baseProto = c . prototype , b . prototype . base = function u ( ) { this . base = c . prototype . base ; c . apply ( this , arguments ) ; this . base = u } ) ; h && this . extend ( b . prototype , h , ! 0 ) ; a && this . extend ( b , a , ! 0 ) ; return b } , addFunction : function ( a ,
a = a . statics ; ! b && ( b = function ( ) { c && this . base . apply ( this , arguments ) } ) ; if ( g ) var m = b , b = function ( ) { var a = this . _ || ( this . _ = { } ) , b ; for ( b in g ) { var c = g [ b ] ; a [ b ] = "function" == typeof c ? CKEDITOR . tools . bind ( c , this ) : c } m . apply ( this , arguments ) } ; c && ( b . prototype = this . prototypedCopy ( c . prototype ) , b . prototype . constructor = b , b . base = c , b . baseProto = c . prototype , b . prototype . base = function v ( ) { this . base = c . prototype . base ; c . apply ( this , arguments ) ; this . base = v } ) ; h && this . extend ( b . prototype , h , ! 0 ) ; a && this . extend ( b , a , ! 0 ) ; return b } , addFunction : function ( a ,
c ) { return b . push ( function ( ) { return a . apply ( c || this , arguments ) } ) - 1 } , removeFunction : function ( a ) { b [ a ] = null } , callFunction : function ( a ) { var c = b [ a ] ; return c && c . apply ( window , Array . prototype . slice . call ( arguments , 1 ) ) } , cssLength : function ( ) { var a = /^-?\d+\.?\d*px$/ , b ; return function ( c ) { b = CKEDITOR . tools . trim ( c + "" ) + "px" ; return a . test ( b ) ? b : c || "" } } ( ) , convertToPx : function ( ) { var a ; return function ( b ) { a || ( a = CKEDITOR . dom . element . createFromHtml ( '\x3cdiv style\x3d"position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"\x3e\x3c/div\x3e' ,
CKEDITOR . document ) , CKEDITOR . document . getBody ( ) . append ( a ) ) ; if ( ! /%$/ . test ( b ) ) { var c = 0 > parseFloat ( b ) ; c && ( b = b . replace ( "-" , "" ) ) ; a . setStyle ( "width" , b ) ; b = a . $ . clientWidth ; return c ? - b : b } return b } } ( ) , repeat : function ( a , b ) { return Array ( b + 1 ) . join ( a ) } , tryThese : function ( ) { for ( var a , b = 0 , c = arguments . length ; b < c ; b ++ ) { var g = arguments [ b ] ; try { a = g ( ) ; break } catch ( h ) { } } return a } , genKey : function ( ) { return Array . prototype . slice . call ( arguments ) . join ( "-" ) } , defer : function ( a ) { return function ( ) { var b = arguments , c = this ; window . setTimeout ( function ( ) { a . apply ( c ,
b ) } , 0 ) } } , normalizeCssText : function ( a , b ) { var c = [ ] , g , h = CKEDITOR . tools . parseCssText ( a , ! 0 , b ) ; for ( g in h ) c . push ( g + ":" + h [ g ] ) ; c . sort ( ) ; return c . length ? c . join ( ";" ) + ";" : "" } , convertRgbToHex : function ( a ) { return a . replace ( /(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi , function ( a , b , c , g ) { a = [ b , c , g ] ; for ( b = 0 ; 3 > b ; b ++ ) a [ b ] = ( "0" + parseInt ( a [ b ] , 10 ) . toString ( 16 ) ) . slice ( - 2 ) ; return "#" + a . join ( "" ) } ) } , normalizeHex : function ( a ) { return a . replace ( /#(([0-9a-f]{3}){1,2})($|;|\s+)/gi , function ( a , b , c , g ) { a = b . toLowerCase ( ) ; 3 == a . length &&
( a = a . split ( "" ) , a = [ a [ 0 ] , a [ 0 ] , a [ 1 ] , a [ 1 ] , a [ 2 ] , a [ 2 ] ] . join ( "" ) ) ; return "#" + a + g } ) } , _isValidColorFormat : function ( a ) { if ( ! a ) return ! 1 ; a = a . replace ( /\s+/g , "" ) ; return /^[a-z0-9()#%,./]+$/i . test ( a ) } , parseCssText : function ( a , b , c ) { var g = { } ; c && ( a = ( new CKEDITOR . dom . element ( "span" ) ) . setAttribute ( "style" , a ) . getAttribute ( "style" ) || "" ) ; a && ( a = CKEDITOR . tools . normalizeHex ( CKEDITOR . tools . convertRgbToHex ( a ) ) ) ; if ( ! a || ";" == a ) return g ; a . replace ( /"/g , '"' ) . replace ( /\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g , function ( a , c , y ) { b && ( c =
c . toLowerCase ( ) , "font-family" == c && ( y= y . replace ( /\s*,\s*/g , "," ) ) , y= CKEDITOR . tools . trim ( y ) ) ; g [ c ] = y } ) ; return g } , writeCssText : function ( a , b ) { var c , g = [ ] ; for ( c in a ) g . push ( c + ":" + a [ c ] ) ; b && g . sort ( ) ; return g . join ( "; " ) } , objectCompare : function ( a , b , c ) { var g ; if ( ! a && ! b ) return ! 0 ; if ( ! a || ! b ) return ! 1 ; for ( g in a ) if ( a [ g ] != b [ g ] ) return ! 1 ; if ( ! c ) for ( g in b ) if ( a [ g ] != b [ g ] ) return ! 1 ; return ! 0 } , objectKeys : function ( a ) { return CKEDITOR . tools . object . keys ( a ) } , convertArrayToObject : function ( a , b ) { var c = { } ; 1 == arguments . length && ( b = ! 0 ) ;
( a = a . split ( "" ) , a = [ a [ 0 ] , a [ 0 ] , a [ 1 ] , a [ 1 ] , a [ 2 ] , a [ 2 ] ] . join ( "" ) ) ; return "#" + a + g } ) } , _isValidColorFormat : function ( a ) { if ( ! a ) return ! 1 ; a = a . replace ( /\s+/g , "" ) ; return /^[a-z0-9()#%,./]+$/i . test ( a ) } , parseCssText : function ( a , b , c ) { var g = { } ; c && ( a = ( new CKEDITOR . dom . element ( "span" ) ) . setAttribute ( "style" , a ) . getAttribute ( "style" ) || "" ) ; a && ( a = CKEDITOR . tools . normalizeHex ( CKEDITOR . tools . convertRgbToHex ( a ) ) ) ; if ( ! a || ";" == a ) return g ; a . replace ( /"/g , '"' ) . replace ( /\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g , function ( a , c , w ) { b && ( c =
c . toLowerCase ( ) , "font-family" == c && ( w= w . replace ( /\s*,\s*/g , "," ) ) , w= CKEDITOR . tools . trim ( w ) ) ; g [ c ] = w } ) ; return g } , writeCssText : function ( a , b ) { var c , g = [ ] ; for ( c in a ) g . push ( c + ":" + a [ c ] ) ; b && g . sort ( ) ; return g . join ( "; " ) } , objectCompare : function ( a , b , c ) { var g ; if ( ! a && ! b ) return ! 0 ; if ( ! a || ! b ) return ! 1 ; for ( g in a ) if ( a [ g ] != b [ g ] ) return ! 1 ; if ( ! c ) for ( g in b ) if ( a [ g ] != b [ g ] ) return ! 1 ; return ! 0 } , objectKeys : function ( a ) { return CKEDITOR . tools . object . keys ( a ) } , convertArrayToObject : function ( a , b ) { var c = { } ; 1 == arguments . length && ( b = ! 0 ) ;
for ( var g = 0 , h = a . length ; g < h ; ++ g ) c [ a [ g ] ] = b ; return c } , getStyledSpans : function ( a , b ) { var c = CKEDITOR . env . ie && 8 == CKEDITOR . env . version ? a . toUpperCase ( ) : a , c = b . find ( "span[style*\x3d" + c + "]" ) . toArray ( ) ; return CKEDITOR . tools . array . filter ( c , function ( b ) { return ! ! b . getStyle ( a ) } ) } , fixDomain : function ( ) { for ( var a ; ; ) try { a = window . parent . document . domain ; break } catch ( b ) { a = a ? a . replace ( /.+?(?:\.|$)/ , "" ) : document . domain ; if ( ! a ) break ; document . domain = a } return ! ! a } , eventsBuffer : function ( a , b , c ) { return new this . buffers . event ( a , b , c ) } ,
enableHtml5Elements : function ( a , b ) { for ( var c = "abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup main mark meter nav output progress section summary time video" . split ( " " ) , g = c . length , h ; g -- ; ) h = a . createElement ( c [ g ] ) , b && a . appendChild ( h ) } , checkIfAnyArrayItemMatches : function ( a , b ) { for ( var c = 0 , g = a . length ; c < g ; ++ c ) if ( a [ c ] . match ( b ) ) return ! 0 ; return ! 1 } , checkIfAnyObjectPropertyMatches : function ( a , b ) { for ( var c in a ) if ( c . match ( b ) ) return ! 0 ; return ! 1 } , keystrokeToString : function ( a ,
b ) { var c = this . keystrokeToArray ( a , b ) ; c . display = c . display . join ( "+" ) ; c . aria = c . aria . join ( "+" ) ; return c } , keystrokeToArray : function ( a , b ) { var c = b & 16711680 , g = b & 65535 , h = CKEDITOR . env . mac , n = [ ] , e = [ ] ; c & CKEDITOR . CTRL && ( n . push ( h ? "⌘" : a [ 17 ] ) , e . push ( h ? a [ 224 ] : a [ 17 ] ) ) ; c & CKEDITOR . ALT && ( n . push ( h ? "⌥" : a [ 18 ] ) , e . push ( a [ 18 ] ) ) ; c & CKEDITOR . SHIFT && ( n . push ( h ? "⇧" : a [ 16 ] ) , e . push ( a [ 16 ] ) ) ; g && ( a [ g ] ? ( n . push ( a [ g ] ) , e . push ( a [ g ] ) ) : ( n . push ( String . fromCharCode ( g ) ) , e . push ( String . fromCharCode ( g ) ) ) ) ; return { display : n , aria : e } } , transparentImageData : "data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw\x3d\x3d" ,
b ) { var c = this . keystrokeToArray ( a , b ) ; c . display = c . display . join ( "+" ) ; c . aria = c . aria . join ( "+" ) ; return c } , keystrokeToArray : function ( a , b ) { var c = b & 16711680 , g = b & 65535 , h = CKEDITOR . env . mac , m = [ ] , e = [ ] ; c & CKEDITOR . CTRL && ( m . push ( h ? "⌘" : a [ 17 ] ) , e . push ( h ? a [ 224 ] : a [ 17 ] ) ) ; c & CKEDITOR . ALT && ( m . push ( h ? "⌥" : a [ 18 ] ) , e . push ( a [ 18 ] ) ) ; c & CKEDITOR . SHIFT && ( m . push ( h ? "⇧" : a [ 16 ] ) , e . push ( a [ 16 ] ) ) ; g && ( a [ g ] ? ( m . push ( a [ g ] ) , e . push ( a [ g ] ) ) : ( m . push ( String . fromCharCode ( g ) ) , e . push ( String . fromCharCode ( g ) ) ) ) ; return { display : m , aria : e } } , transparentImageData : "data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw\x3d\x3d" ,
getCookie : function ( a ) { a = a . toLowerCase ( ) ; for ( var b = document . cookie . split ( ";" ) , c , g , h = 0 ; h < b . length ; h ++ ) if ( c = b [ h ] . split ( "\x3d" ) , g = decodeURIComponent ( CKEDITOR . tools . trim ( c [ 0 ] ) . toLowerCase ( ) ) , g === a ) return decodeURIComponent ( 1 < c . length ? c [ 1 ] : "" ) ; return null } , setCookie : function ( a , b ) { document . cookie = encodeURIComponent ( a ) + "\x3d" + encodeURIComponent ( b ) + ";path\x3d/" } , getCsrfToken : function ( ) { var a = CKEDITOR . tools . getCookie ( "ckCsrfToken" ) ; if ( ! a || 40 != a . length ) { var a = [ ] , b = "" ; if ( window . crypto && window . crypto . getRandomValues ) a =
new Uint8Array ( 40 ) , window . crypto . getRandomValues ( a ) ; else for ( var c = 0 ; 40 > c ; c ++ ) a . push ( Math . floor ( 256 * Math . random ( ) ) ) ; for ( c = 0 ; c < a . length ; c ++ ) var g = "abcdefghijklmnopqrstuvwxyz0123456789" . charAt ( a [ c ] % 36 ) , b = b + ( . 5 < Math . random ( ) ? g . toUpperCase ( ) : g ) ; a = b ; CKEDITOR . tools . setCookie ( "ckCsrfToken" , a ) } return a } , escapeCss : function ( a ) { if ( a ) if ( window . CSS && CSS . escape ) a = CSS . escape ( a ) ; else { a = String ( a ) ; for ( var b = a . length , c = - 1 , g , h = "" , n = a . charCodeAt ( 0 ) ; ++ c < b ; ) g = a . charCodeAt ( c ) , h = 0 == g ? h + "<22> " : 127 == g || 1 <= g && 31 >= g || 0 == c && 48 <=
g && 57 >= g || 1 == c && 48 <= g && 57 >= g && 45 == n ? h + ( "\\" + g . toString ( 16 ) + " " ) : 0 == c && 1 == b && 45 == g ? h + ( "\\" + a . charAt ( c ) ) : 128 <= g || 45 == g || 95 == g || 48 <= g && 57 >= g || 65 <= g && 90 >= g || 97 <= g && 122 >= g ? h + a . charAt ( c ) : h + ( "\\" + a . charAt ( c ) ) ; a = h } else a = "" ; return a } , getMouseButton : function ( a ) { return ( a = a && a . data ? a . data . $ : a ) ? CKEDITOR . tools . normalizeMouseButton ( a . button ) : ! 1 } , normalizeMouseButton : function ( a , b ) { if ( ! CKEDITOR . env . ie || 9 <= CKEDITOR . env . version && ! CKEDITOR . env . ie6Compat ) return a ; for ( var c = [ [ CKEDITOR . MOUSE _BUTTON _LEFT , 1 ] , [ CKEDITOR . MOUSE _BUTTON _MIDDLE ,
4 ] , [ CKEDITOR . MOUSE _BUTTON _RIGHT , 2 ] ] , g = 0 ; g < c . length ; g ++ ) { var h = c [ g ] ; if ( h [ 0 ] === a && b ) return h [ 1 ] ; if ( ! b && h [ 1 ] === a ) return h [ 0 ] } } , convertHexStringToBytes : function ( a ) { var b = [ ] , c = a . length / 2 , g ; for ( g = 0 ; g < c ; g ++ ) b . push ( parseInt ( a . substr ( 2 * g , 2 ) , 16 ) ) ; return b } , convertBytesToBase64 : function ( a ) { var b = "" , c = a . length , g ; for ( g = 0 ; g < c ; g += 3 ) { var h = a . slice ( g , g + 3 ) , n = h . length , e = [ ] , d ; if ( 3 > n) for ( d = n ; 3 > d ; d ++ ) h [ d ] = 0 ; e [ 0 ] = ( h [ 0 ] & 252 ) >> 2 ; e [ 1 ] = ( h [ 0 ] & 3 ) << 4 | h [ 1 ] >> 4 ; e [ 2 ] = ( h [ 1 ] & 15 ) << 2 | ( h [ 2 ] & 192 ) >> 6 ; e [ 3 ] = h [ 2 ] & 63 ; for ( d = 0 ; 4 > d ; d ++ ) b = d <= n ?
new Uint8Array ( 40 ) , window . crypto . getRandomValues ( a ) ; else for ( var c = 0 ; 40 > c ; c ++ ) a . push ( Math . floor ( 256 * Math . random ( ) ) ) ; for ( c = 0 ; c < a . length ; c ++ ) var g = "abcdefghijklmnopqrstuvwxyz0123456789" . charAt ( a [ c ] % 36 ) , b = b + ( . 5 < Math . random ( ) ? g . toUpperCase ( ) : g ) ; a = b ; CKEDITOR . tools . setCookie ( "ckCsrfToken" , a ) } return a } , escapeCss : function ( a ) { if ( a ) if ( window . CSS && CSS . escape ) a = CSS . escape ( a ) ; else { a = String ( a ) ; for ( var b = a . length , c = - 1 , g , h = "" , m = a . charCodeAt ( 0 ) ; ++ c < b ; ) g = a . charCodeAt ( c ) , h = 0 == g ? h + "<22> " : 127 == g || 1 <= g && 31 >= g || 0 == c && 48 <=
g && 57 >= g || 1 == c && 48 <= g && 57 >= g && 45 == m ? h + ( "\\" + g . toString ( 16 ) + " " ) : 0 == c && 1 == b && 45 == g ? h + ( "\\" + a . charAt ( c ) ) : 128 <= g || 45 == g || 95 == g || 48 <= g && 57 >= g || 65 <= g && 90 >= g || 97 <= g && 122 >= g ? h + a . charAt ( c ) : h + ( "\\" + a . charAt ( c ) ) ; a = h } else a = "" ; return a } , getMouseButton : function ( a ) { return ( a = a && a . data ? a . data . $ : a ) ? CKEDITOR . tools . normalizeMouseButton ( a . button ) : ! 1 } , normalizeMouseButton : function ( a , b ) { if ( ! CKEDITOR . env . ie || 9 <= CKEDITOR . env . version && ! CKEDITOR . env . ie6Compat ) return a ; for ( var c = [ [ CKEDITOR . MOUSE _BUTTON _LEFT , 1 ] , [ CKEDITOR . MOUSE _BUTTON _MIDDLE ,
4 ] , [ CKEDITOR . MOUSE _BUTTON _RIGHT , 2 ] ] , g = 0 ; g < c . length ; g ++ ) { var h = c [ g ] ; if ( h [ 0 ] === a && b ) return h [ 1 ] ; if ( ! b && h [ 1 ] === a ) return h [ 0 ] } } , convertHexStringToBytes : function ( a ) { var b = [ ] , c = a . length / 2 , g ; for ( g = 0 ; g < c ; g ++ ) b . push ( parseInt ( a . substr ( 2 * g , 2 ) , 16 ) ) ; return b } , convertBytesToBase64 : function ( a ) { var b = "" , c = a . length , g ; for ( g = 0 ; g < c ; g += 3 ) { var h = a . slice ( g , g + 3 ) , m = h . length , e = [ ] , d ; if ( 3 > m) for ( d = m ; 3 > d ; d ++ ) h [ d ] = 0 ; e [ 0 ] = ( h [ 0 ] & 252 ) >> 2 ; e [ 1 ] = ( h [ 0 ] & 3 ) << 4 | h [ 1 ] >> 4 ; e [ 2 ] = ( h [ 1 ] & 15 ) << 2 | ( h [ 2 ] & 192 ) >> 6 ; e [ 3 ] = h [ 2 ] & 63 ; for ( d = 0 ; 4 > d ; d ++ ) b = d <= m ?
b + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" . charAt ( e [ d ] ) : b + "\x3d" } return b } , style : { parse : { _borderStyle : "none hidden dotted dashed solid double groove ridge inset outset" . split ( " " ) , _widthRegExp : /^(thin|medium|thick|[\+-]?\d+(\.\d+)?[a-z%]+|[\+-]?0+(\.0+)?|\.\d+[a-z%]+)$/ , _rgbaRegExp : /rgba?\(\s*\d+%?\s*,\s*\d+%?\s*,\s*\d+%?\s*(?:,\s*[0-9.]+\s*)?\)/gi , _hslaRegExp : /hsla?\(\s*[0-9.]+\s*,\s*\d+%\s*,\s*\d+%\s*(?:,\s*[0-9.]+\s*)?\)/gi , background : function ( a ) { var b = { } , c = this . _findColor ( a ) ;
c . length && ( b . color = c [ 0 ] , CKEDITOR . tools . array . forEach ( c , function ( b ) { a = a . replace ( b , "" ) } ) ) ; if ( a = CKEDITOR . tools . trim ( a ) ) b . unprocessed = a ; return b } , margin : function ( a ) { return CKEDITOR . tools . style . parse . sideShorthand ( a , function ( a ) { return a . match ( /(?:\-?[\.\d]+(?:%|\w*)|auto|inherit|initial|unset|revert)/g ) || [ "0px" ] } ) } , sideShorthand : function ( a , b ) { function c ( a ) { g . top = h [ a [ 0 ] ] ; g . right = h [ a [ 1 ] ] ; g . bottom = h [ a [ 2 ] ] ; g . left = h [ a [ 3 ] ] } var g = { } , h = b ? b ( a ) : a . split ( /\s+/ ) ; switch ( h . length ) { case 1 : c ( [ 0 , 0 , 0 , 0 ] ) ; break ; case 2 : c ( [ 0 ,
1 , 0 , 1 ] ) ; break ; case 3 : c ( [ 0 , 1 , 2 , 1 ] ) ; break ; case 4 : c ( [ 0 , 1 , 2 , 3 ] ) } return g } , border : function ( a ) { return CKEDITOR . tools . style . border . fromCssRule ( a ) } , _findColor : function ( a ) { var b = [ ] , c = CKEDITOR . tools . array , b = b . concat ( a . match ( this . _rgbaRegExp ) || [ ] ) , b = b . concat ( a . match ( this . _hslaRegExp ) || [ ] ) ; return b = b . concat ( c . filter ( a . split ( /\s+/ ) , function ( a ) { return a . match ( /^\#[a-f0-9]{3}(?:[a-f0-9]{3})?$/gi ) ? ! 0 : a . toLowerCase ( ) in CKEDITOR . tools . style . parse . _colors } ) ) } } } , array : { filter : function ( a , b , c ) { var g = [ ] ; this . forEach ( a ,
function ( h , n ) { b . call ( c , h , n , a ) && g . push ( h ) } ) ; return g } , find : function ( a , b , c ) { for ( var g = a . length , h = 0 ; h < g ; ) { if ( b . call ( c , a [ h ] , h , a ) ) return a [ h ] ; h ++ } } , forEach : function ( a , b , c ) { var g = a . length , h ; for ( h = 0 ; h < g ; h ++ ) b . call ( c , a [ h ] , h , a ) } , map : function ( a , b , c ) { for ( var g = [ ] , h = 0 ; h < a . length ; h ++ ) g . push ( b . call ( c , a [ h ] , h , a ) ) ; return g } , reduce : function ( a , b , c , g ) { for ( var h = 0 ; h < a . length ; h ++ ) c = b . call ( g , c , a [ h ] , h , a ) ; return c } , every : function ( a , b , c ) { if ( ! a . length ) return ! 0 ; b = this . filter ( a , b , c ) ; return a . length === b . length } , some : function ( a ,
function ( h , m ) { b . call ( c , h , m , a ) && g . push ( h ) } ) ; return g } , find : function ( a , b , c ) { for ( var g = a . length , h = 0 ; h < g ; ) { if ( b . call ( c , a [ h ] , h , a ) ) return a [ h ] ; h ++ } } , forEach : function ( a , b , c ) { var g = a . length , h ; for ( h = 0 ; h < g ; h ++ ) b . call ( c , a [ h ] , h , a ) } , map : function ( a , b , c ) { for ( var g = [ ] , h = 0 ; h < a . length ; h ++ ) g . push ( b . call ( c , a [ h ] , h , a ) ) ; return g } , reduce : function ( a , b , c , g ) { for ( var h = 0 ; h < a . length ; h ++ ) c = b . call ( g , c , a [ h ] , h , a ) ; return c } , every : function ( a , b , c ) { if ( ! a . length ) return ! 0 ; b = this . filter ( a , b , c ) ; return a . length === b . length } , some : function ( a ,
b , c ) { for ( var g = 0 ; g < a . length ; g ++ ) if ( b . call ( c , a [ g ] , g , a ) ) return ! 0 ; return ! 1 } , zip : function ( a , b ) { return CKEDITOR . tools . array . map ( a , function ( a , c ) { return [ a , b [ c ] ] } ) } , unique : function ( a ) { return this . filter ( a , function ( b , c ) { return c === CKEDITOR . tools . array . indexOf ( a , b ) } ) } } , object : { DONT _ENUMS : "toString toLocaleString valueOf hasOwnProperty isPrototypeOf propertyIsEnumerable constructor" . split ( " " ) , entries : function ( a ) { return CKEDITOR . tools . array . map ( CKEDITOR . tools . object . keys ( a ) , function ( b ) { return [ b , a [ b ] ] } ) } , values : function ( a ) { return CKEDITOR . tools . array . map ( CKEDITOR . tools . object . keys ( a ) ,
function ( b ) { return a [ b ] } ) } , keys : function ( a ) { var b = Object . prototype . hasOwnProperty , c = [ ] , g = CKEDITOR . tools . object . DONT _ENUMS ; if ( CKEDITOR . env . ie && 9 > CKEDITOR . env . version && ( ! a || "object" !== typeof a ) ) { b = [ ] ; if ( "string" === typeof a ) for ( c = 0 ; c < a . length ; c ++ ) b . push ( String ( c ) ) ; return b } for ( var h in a ) c . push ( h ) ; if ( CKEDITOR . env . ie && 9 > CKEDITOR . env . version ) for ( h = 0 ; h < g . length ; h ++ ) b . call ( a , g [ h ] ) && c . push ( g [ h ] ) ; return c } , findKey : function ( a , b ) { if ( "object" !== typeof a ) return null ; for ( var c in a ) if ( a [ c ] === b ) return c ; return null } ,
merge : function ( a , b ) { var c = CKEDITOR . tools , g = c . clone ( a ) , h = c . clone ( b ) ; c . array . forEach ( c . object . keys ( h ) , function ( a ) { g [ a ] = "object" === typeof h [ a ] && "object" === typeof g [ a ] ? c . object . merge ( g [ a ] , h [ a ] ) : h [ a ] } ) ; return g } } , getAbsoluteRectPosition : function ( a , b ) { function c ( a ) { if ( a ) { var b = a . getClientRect ( ) ; g . top += b . top ; g . left += b . left ; "x" in g && "y" in g && ( g . x += b . x , g . y += b . y ) ; c ( a . getWindow ( ) . getFrame ( ) ) } } var g = CKEDITOR . tools . copy ( b ) ; c ( a . getFrame ( ) ) ; var h = CKEDITOR . document . getWindow ( ) . getScrollPosition ( ) ; g . top += h . y ; g . left +=
@ -87,12 +87,12 @@ b&&(a.split(b-d.length),this.$.removeChild(this.$.firstChild));else{a.remove();c
this ; this . type != CKEDITOR . NODE _ELEMENT && ( d = this . getParent ( ) ) ; CKEDITOR . env . edge && d && d . is ( "textarea" , "input" ) && ( a = ! 0 ) ; if ( ! a && d && "undefined" != typeof d . $ . isContentEditable ) return ! ( d . $ . isContentEditable || d . data ( "cke-editable" ) ) ; for ( ; d ; ) { if ( d . data ( "cke-editable" ) ) return ! 1 ; if ( d . hasAttribute ( "contenteditable" ) ) return "false" == d . getAttribute ( "contenteditable" ) ; d = d . getParent ( ) } return ! 0 } } ) ; 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 , d = "CSS1Compat" == a . compatMode ; return { width : ( d ? a . documentElement . clientWidth : a . body . clientWidth ) || 0 , height : ( d ? 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 = 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 d = new CKEDITOR . dom . element ( "link" ) ; d . setAttributes ( { rel : "stylesheet" , type : "text/css" , href : a } ) ; this . getHead ( ) . append ( d ) } } , appendStyleText : function ( a ) { if ( this . $ . createStyleSheet ) { var d = this . $ . createStyleSheet ( "" ) ; d . cssText = a } else { var b = new CKEDITOR . dom . element ( "style" , this ) ; b . append ( new CKEDITOR . dom . text ( a , this ) ) ; this . getHead ( ) . append ( b ) } return d ||
b . $ . sheet } , createElement : function ( a , d ) { var b = new CKEDITOR . dom . element ( a , this ) ; d && ( d . attributes && b . setAttributes ( d . attributes ) , d . styles && b . setStyles ( d . 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 ( d ) { 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 , d ) { for ( var b =
this . $ . documentElement , c = 0 ; b && c < a . length ; c ++ ) { var f = a [ c ] ; if ( d ) for ( var e = - 1 , k = 0 ; k < b . childNodes . length ; k ++ ) { var h = b . childNodes [ k ] ; if ( ! 0 !== d || 3 != h . nodeType || ! h . previousSibling || 3 != h . previousSibling . nodeType ) if ( e ++ , e == f ) { b = h ; break } } else b = b . childNodes [ f ] } return b ? new CKEDITOR . dom . node ( b ) : null } , getElementsByTag : function ( a , d ) { CKEDITOR . env . ie && 8 >= document . documentMode || ! d || ( a = d + ":" + 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" ) , ! 0 ) } , 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 , '$\x26\n\x3cscript data-cke-temp\x3d"1"\x3e(' +
CKEDITOR . tools . fixDomain + ")();\x3c/script\x3e" ) ) ; 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" ) ; a || ( a = this . $ . createDocumentFragment ( ) , CKEDITOR . tools . enableHtml5Elements ( a , ! 0 ) , 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 ) { return 0 > a || a >= this . $ . length ? null : ( a = this . $ [ a ] ) ? new CKEDITOR . dom . node ( a ) : null } , toArray : function ( ) { return CKEDITOR . tools . array . map ( this . $ , function ( a ) { return new CKEDITOR . dom . node ( a ) } ) } } ; CKEDITOR . dom . element = function ( a , d ) { "string" == typeof a && ( a = ( d ? d . $ : document ) . createElement ( a ) ) ; CKEDITOR . dom . domObject . call ( this , a ) } ;
CKEDITOR . tools . extend ( CKEDITOR . dom . document . prototype , { type : CKEDITOR . NODE _DOCUMENT , appendStyleSheet : function ( a ) { a = CKEDITOR . appendTimestamp ( a ) ; if ( this . $ . createStyleSheet ) this . $ . createStyleSheet ( a ) ; else { var d = new CKEDITOR . dom . element ( "link" ) ; d . setAttributes ( { rel : "stylesheet" , type : "text/css" , href : a } ) ; this . getHead ( ) . append ( d ) } } , appendStyleText : function ( a ) { if ( this . $ . createStyleSheet ) { var d = this . $ . createStyleSheet ( "" ) ; d . cssText = a } else { var b = new CKEDITOR . dom . element ( "style" , this ) ; b . append ( new CKEDITOR . dom . text ( a ,
this ) ) ; this . getHead ( ) . append ( b ) } return d || b . $ . sheet } , createElement : function ( a , d ) { var b = new CKEDITOR . dom . element ( a , this ) ; d && ( d . attributes && b . setAttributes ( d . attributes ) , d . styles && b . setStyles ( d . 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 ( d ) { 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 , d ) { for ( var b = this . $ . documentElement , c = 0 ; b && c < a . length ; c ++ ) { var f = a [ c ] ; if ( d ) for ( var e = - 1 , k = 0 ; k < b . childNodes . length ; k ++ ) { var h = b . childNodes [ k ] ; if ( ! 0 !== d || 3 != h . nodeType || ! h . previousSibling || 3 != h . previousSibling . nodeType ) if ( e ++ , e == f ) { b = h ; break } } else b = b . childNodes [ f ] } return b ? new CKEDITOR . dom . node ( b ) : null } , getElementsByTag : function ( a , d ) { CKEDITOR . env . ie && 8 >= document . documentMode || ! d || ( a = d + ":" + 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" ) , ! 0 ) } , 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 ,
'$\x26\n\x3cscript data-cke-temp\x3d"1"\x3e(' + CKEDITOR . tools . fixDomain + ")();\x3c/script\x3e" ) ) ; 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" ) ; a || ( a = this . $ . createDocumentFragment ( ) , CKEDITOR . tools . enableHtml5Elements ( a , ! 0 ) , 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 ) { return 0 > a || a >= this . $ . length ? null : ( a = this . $ [ a ] ) ? new CKEDITOR . dom . node ( a ) : null } , toArray : function ( ) { return CKEDITOR . tools . array . map ( this . $ , function ( a ) { return new CKEDITOR . dom . node ( a ) } ) } } ; CKEDITOR . dom . element = function ( a , d ) { "string" == typeof a && ( a = ( d ? d . $ : document ) . createElement ( a ) ) ; CKEDITOR . dom . domObject . call ( this , a ) } ;
CKEDITOR . dom . element . get = function ( a ) { return ( a = "string" == typeof a ? document . getElementById ( a ) || document . getElementsByName ( a ) [ 0 ] : a ) && ( a . $ ? a : new CKEDITOR . dom . element ( a ) ) } ; CKEDITOR . dom . element . prototype = new CKEDITOR . dom . node ; CKEDITOR . dom . element . createFromHtml = function ( a , d ) { var b = new CKEDITOR . dom . element ( "div" , d ) ; b . setHtml ( a ) ; return b . getFirst ( ) . remove ( ) } ;
CKEDITOR . dom . element . setMarker = function ( a , d , b , c ) { var f = d . getCustomData ( "list_marker_id" ) || d . setCustomData ( "list_marker_id" , CKEDITOR . tools . getNextNumber ( ) ) . getCustomData ( "list_marker_id" ) , e = d . getCustomData ( "list_marker_names" ) || d . setCustomData ( "list_marker_names" , { } ) . getCustomData ( "list_marker_names" ) ; a [ f ] = d ; e [ b ] = 1 ; return d . setCustomData ( b , c ) } ; CKEDITOR . dom . element . clearAllMarkers = function ( a ) { for ( var d in a ) CKEDITOR . dom . element . clearMarkers ( a , a [ d ] , 1 ) } ;
CKEDITOR . dom . element . clearMarkers = function ( a , d , b ) { var c = d . getCustomData ( "list_marker_names" ) , f = d . getCustomData ( "list_marker_id" ) , e ; for ( e in c ) d . removeCustomData ( e ) ; d . removeCustomData ( "list_marker_names" ) ; b && ( d . removeCustomData ( "list_marker_id" ) , delete a [ f ] ) } ;
@ -120,11 +120,11 @@ arguments)}catch(g){}else a.apply(this,arguments);return this}:a}(),setAttribute
0 ; b < a . length ; b ++ ) this . removeAttribute ( a [ b ] ) ; else for ( b in a = a || this . getAttributes ( ) , a ) a . hasOwnProperty ( b ) && this . removeAttribute ( b ) } , removeStyle : function ( a ) { var b = this . $ . style ; if ( b . removeProperty || "border" != a && "margin" != a && "padding" != a ) b . removeProperty ? b . removeProperty ( a ) : b . removeAttribute ( CKEDITOR . tools . cssStyleToDomStyle ( a ) ) , this . $ . style . cssText || this . removeAttribute ( "style" ) ; else { var c = [ "top" , "left" , "right" , "bottom" ] , g ; "border" == a && ( g = [ "color" , "style" , "width" ] ) ; for ( var b = [ ] , d = 0 ; d < c . length ; d ++ ) if ( g ) for ( var e =
0 ; e < g . length ; e ++ ) b . push ( [ a , c [ d ] , g [ e ] ] . join ( "-" ) ) ; else b . push ( [ a , c [ d ] ] . join ( "-" ) ) ; for ( a = 0 ; a < b . length ; a ++ ) this . removeStyle ( b [ a ] ) } } , 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 ) { CKEDITOR . env . ie && 9 > CKEDITOR . env . version ? ( a = Math . round ( 100 * a ) , this . setStyle ( "filter" , 100 <= a ? "" : "progid:DXImageTransform.Microsoft.Alpha(opacity\x3d" + a + ")" ) ) : 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 , g = b . count ( ) ; c < g ; c ++ ) a = b . getItem ( c ) , a . setAttribute ( "unselectable" , "on" ) } } , getPositionedAncestor : function ( ) { for ( var a = this ; "html" != a . getName ( ) ; ) { if ( "static" != a . getComputedStyle ( "position" ) ) return a ; a = a . getParent ( ) } return null } , getDocumentPosition : function ( a ) { var b = 0 , c = 0 , g = this . getDocument ( ) , d = g . getBody ( ) , e = "BackCompat" == g . $ . compatMode ; if ( document . documentElement . getBoundingClientRect && ( CKEDITOR . env . ie ?
8 !== CKEDITOR . env . version : 1 ) ) { var f = this . $ . getBoundingClientRect ( ) , k = g . $ . documentElement , v = k . clientTop || d . $ . clientTop || 0 , n = k . clientLeft || d . $ . clientLeft || 0 , H = ! 0 ; CKEDITOR . env . ie && ( H = g . getDocumentElement ( ) . contains ( this ) , g = g . getBody ( ) . contains ( this ) , H= e && g || ! e && H ) ; H && ( CKEDITOR . env . webkit || CKEDITOR . env . ie && 12 <= CKEDITOR . env . version ? ( b = d . $ . scrollLeft || k . scrollLeft , c = d . $ . scrollTop || k . scrollTop ) : ( c = e ? d . $ : k , b = c . scrollLeft , c = c . scrollTop ) , b = f . left + b - n, c = f . top + c - v ) } else for ( v = this , n = null ; v && "body" != v . getName ( ) &&
"html" != v. getName ( ) ; ) { b += v . $ . offsetLeft - v . $ . scrollLeft ; c += v . $ . offsetTop - v . $ . scrollTop ; v . equals ( this ) || ( b += v . $ . clientLeft || 0 , c += v . $ . clientTop || 0 ) ; for ( ; n&& ! n . equals ( v ) ; ) b -= n . $ . scrollLeft , c -= n . $ . scrollTop , n = n . getParent ( ) ; n = v ; v = ( f = v . $ . offsetParent ) ? new CKEDITOR . dom . element ( f ) : null } a && ( f = this . getWindow ( ) , v = a . getWindow ( ) , ! f . equals ( v ) && f . $ . frameElement && ( a = ( new CKEDITOR . dom . element ( f . $ . frameElement ) ) . getDocumentPosition ( a ) , b += a . x , c += a . y ) ) ; document . documentElement . getBoundingClientRect || ! CKEDITOR . env . gecko ||
8 !== CKEDITOR . env . version : 1 ) ) { var f = this . $ . getBoundingClientRect ( ) , k = g . $ . documentElement , t = k . clientTop || d . $ . clientTop || 0 , m = k . clientLeft || d . $ . clientLeft || 0 , M = ! 0 ; CKEDITOR . env . ie && ( M = g . getDocumentElement ( ) . contains ( this ) , g = g . getBody ( ) . contains ( this ) , M= e && g || ! e && M ) ; M && ( CKEDITOR . env . webkit || CKEDITOR . env . ie && 12 <= CKEDITOR . env . version ? ( b = d . $ . scrollLeft || k . scrollLeft , c = d . $ . scrollTop || k . scrollTop ) : ( c = e ? d . $ : k , b = c . scrollLeft , c = c . scrollTop ) , b = f . left + b - m, c = f . top + c - t ) } else for ( t = this , m = null ; t && "body" != t . getName ( ) &&
"html" != t. getName ( ) ; ) { b += t . $ . offsetLeft - t . $ . scrollLeft ; c += t . $ . offsetTop - t . $ . scrollTop ; t . equals ( this ) || ( b += t . $ . clientLeft || 0 , c += t . $ . clientTop || 0 ) ; for ( ; m&& ! m . equals ( t ) ; ) b -= m . $ . scrollLeft , c -= m . $ . scrollTop , m = m . getParent ( ) ; m = t ; t = ( f = t . $ . offsetParent ) ? new CKEDITOR . dom . element ( f ) : null } a && ( f = this . getWindow ( ) , t = a . getWindow ( ) , ! f . equals ( t ) && f . $ . frameElement && ( a = ( new CKEDITOR . dom . element ( f . $ . frameElement ) ) . getDocumentPosition ( a ) , b += a . x , c += a . y ) ) ; document . documentElement . getBoundingClientRect || ! CKEDITOR . env . gecko ||
e || ( b += this . $ . clientLeft ? 1 : 0 , c += this . $ . clientTop ? 1 : 0 ) ; return { x : b , y : c } } , scrollIntoView : function ( a ) { var b = this . getParent ( ) ; if ( b ) { do if ( ( b . $ . clientWidth && b . $ . clientWidth < b . $ . scrollWidth || b . $ . clientHeight && b . $ . clientHeight < b . $ . scrollHeight ) && ! b . is ( "body" ) && this . scrollIntoParent ( b , a , 1 ) , b . is ( "html" ) ) { var c = b . getWindow ( ) ; try { var g = c . $ . frameElement ; g && ( b = new CKEDITOR . dom . element ( g ) ) } catch ( d ) { } } while ( b = b . getParent ( ) ) } } , scrollIntoParent : function ( a , b , c ) { var g , d , e , f ; function k ( b , c ) { /body|html/ . test ( a . getName ( ) ) ?
a . getWindow ( ) . $ . scrollBy ( b , c ) : ( a . $ . scrollLeft += b , a . $ . scrollTop += c ) } function v ( a , b ) { var c = { x : 0 , y : 0 } ; if ( ! a . is ( H ? "body" : "html" ) ) { var g = a . $ . getBoundingClientRect ( ) ; c . x = g . left ; c . y = g . top } g = a . getWindow ( ) ; g . equals ( b ) || ( g = v ( CKEDITOR . dom . element . get ( g . $ . frameElement ) , b ) , c . x += g . x , c . y += g . y ) ; return c } function n ( a , b ) { return parseInt ( a . getComputedStyle ( "margin-" + b ) || 0 , 10 ) || 0 } ! a && ( a = this . getWindow ( ) ) ; e = a . getDocument ( ) ; var H = "BackCompat" == e . $ . compatMode ; a instanceof CKEDITOR . dom . window && ( a = H ? e . getBody ( ) : e . getDocumentElement ( ) ) ;
CKEDITOR . env . webkit && ( e = this . getEditor ( ! 1 ) ) && ( e . _ . previousScrollTop = null ) ; e = a . getWindow ( ) ; d = v( this , e ) ; var u = v ( a , e ) , I = this . $ . offsetHeight ; g = this . $ . offsetWidth ; var J= a . $ . clientHeight , m = a . $ . clientWidth ; e = d . x - n( this , "left" ) - u . x || 0 ; f = d . y - n( this , "top" ) - u . y || 0 ; g = d . x + g + n( this , "right" ) - ( u . x + m ) || 0 ; d = d . y + I + n ( this , "bottom" ) - ( u . y + J ) || 0 ; ( 0 > f || 0 < d ) && k ( 0 , ! 0 === b ? f : ! 1 === b ? d : 0 > f ? f : d ) ; c && ( 0 > e || 0 < g ) && k ( 0 > e ? e : g , 0 ) } , setState : function ( a , b , c ) { b = b || "cke" ; switch ( a ) { case CKEDITOR . TRISTATE _ON : this . addClass ( b + "_on" ) ; this . removeClass ( b +
a . getWindow ( ) . $ . scrollBy ( b , c ) : ( a . $ . scrollLeft += b , a . $ . scrollTop += c ) } function t ( a , b ) { var c = { x : 0 , y : 0 } ; if ( ! a . is ( M ? "body" : "html" ) ) { var g = a . $ . getBoundingClientRect ( ) ; c . x = g . left ; c . y = g . top } g = a . getWindow ( ) ; g . equals ( b ) || ( g = t ( CKEDITOR . dom . element . get ( g . $ . frameElement ) , b ) , c . x += g . x , c . y += g . y ) ; return c } function m ( a , b ) { return parseInt ( a . getComputedStyle ( "margin-" + b ) || 0 , 10 ) || 0 } ! a && ( a = this . getWindow ( ) ) ; e = a . getDocument ( ) ; var M = "BackCompat" == e . $ . compatMode ; a instanceof CKEDITOR . dom . window && ( a = M ? e . getBody ( ) : e . getDocumentElement ( ) ) ;
CKEDITOR . env . webkit && ( e = this . getEditor ( ! 1 ) ) && ( e . _ . previousScrollTop = null ) ; e = a . getWindow ( ) ; d = t( this , e ) ; var v = t ( a , e ) , J = this . $ . offsetHeight ; g = this . $ . offsetWidth ; var E= a . $ . clientHeight , u = a . $ . clientWidth ; e = d . x - m( this , "left" ) - v . x || 0 ; f = d . y - m( this , "top" ) - v . y || 0 ; g = d . x + g + m( this , "right" ) - ( v . x + u ) || 0 ; d = d . y + J + m ( this , "bottom" ) - ( v . y + E ) || 0 ; ( 0 > f || 0 < d ) && k ( 0 , ! 0 === b ? f : ! 1 === b ? d : 0 > f ? f : d ) ; c && ( 0 > e || 0 < g ) && k ( 0 > e ? e : g , 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" , ! 0 ) ; 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" , ! 0 ) ; 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 ) { var c = this . $ . attributes ; b = b || { } ; for ( var g = 0 ; g < c . length ; g ++ ) { var d = c [ g ] , e = d . nodeName . toLowerCase ( ) , f ; if ( ! ( e in b ) ) if ( "checked" == e && ( f = this . getAttribute ( e ) ) ) a . setAttribute ( e , f ) ; else if ( ! CKEDITOR . env . ie || this . hasAttribute ( e ) ) f = this . getAttribute ( e ) , null === f && ( f = d . nodeValue ) , a . setAttribute ( e , f ) } "" !== 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 ( ! 0 ) && 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 g = b . childNodes ; if ( 0 <= c && c < g . length ) return g [ c ] } return function ( b ) { var c = this . $ ; if ( b . slice ) for ( b = b . slice ( ) ; 0 < b . length && c ; ) c = a ( c ,
@ -135,60 +135,60 @@ d)}else g[g[a]?a:c](b)},isDetached:function(){var a=this.getDocument(),b=a.getDo
( b -= c . call ( this , a ) ) , this . setStyle ( a , b + "px" ) ) } ; CKEDITOR . dom . element . prototype . getSize = function ( a , b ) { var d = Math . max ( this . $ [ "offset" + CKEDITOR . tools . capitalize ( a ) ] , this . $ [ "client" + CKEDITOR . tools . capitalize ( a ) ] ) || 0 ; b && ( d -= c . call ( this , a ) ) ; return d } } ) ( ) ; 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 ) } , getHtml : function ( ) { var a = new CKEDITOR . dom . element ( "div" ) ; this . clone ( 1 , 1 ) . appendTo ( a ) ; return a . getHtml ( ) . replace ( /\s*data-cke-expando=".*?"/g , "" ) } } , ! 0 , { append : 1 , appendBogus : 1 , clone : 1 , getFirst : 1 , getHtml : 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 } ) ; CKEDITOR . tools . extend ( CKEDITOR . dom . documentFragment . prototype , CKEDITOR . dom . document . prototype , ! 0 , { find : 1 , findOne : 1 } ) ;
( function ( ) { function a ( a , b ) { var c = this . range ; if ( this . _ . end ) return null ; if ( ! this . _ . start ) { this . _ . start = 1 ; if ( c . collapsed ) return this . end ( ) , null ; c . optimize ( ) } var g , d = c . startContainer ; g = c . endContainer ; var e = c . startOffset , f = c . endOffset , y, h = this . guard , m = this . type , k = a ? "getPreviousSourceNode" : "getNextSourceNode" ; if ( ! a && ! this . _ . guardLTR ) { var K = g . type == CKEDITOR . NODE _ELEMENT ? g : g . getParent ( ) , A = g . type == CKEDITOR . NODE _ELEMENT ? g . getChild ( f ) : g . getNext ( ) ; this . _ . guardLTR = function ( a , b ) { return ( ! b || ! K . equals ( a ) ) && ( ! A ||
! a . equals ( A ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } if ( a && ! this . _ . guardRTL ) { var q = d . type == CKEDITOR . NODE _ELEMENT ? d : d . getParent ( ) , r = d . type == CKEDITOR . NODE _ELEMENT ? e ? d . getChild ( e - 1 ) : null : d . getPrevious ( ) ; this . _ . guardRTL = function ( a , b ) { return ( ! b || ! q . equals ( a ) ) && ( ! r || ! a . equals ( r ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } var B = a ? this . _ . guardRTL : this . _ . guardLTR ; y = h ? function ( a , b ) { return ! 1 === B ( a , b ) ? ! 1 : h ( a , b ) } : B ; this . current ? g = this . current [ k] ( ! 1 , m , y ) : ( a ? g . type == CKEDITOR . NODE _ELEMENT &&
( g = 0 < f ? g . getChild ( f - 1 ) : ! 1 === y ( g , ! 0 ) ? null : g . getPreviousSourceNode ( ! 0 , m, y ) ) : ( g = d , g . type == CKEDITOR . NODE _ELEMENT && ( ( g = g . getChild ( e ) ) || ( g = ! 1 === y ( d , ! 0 ) ? null : d . getNextSourceNode ( ! 0 , m, y ) ) ) ) , g && ! 1 === y ( g ) && ( g = null ) ) ; for ( ; g && ! this . _ . end ; ) { this . current = g ; if ( ! this . evaluator || ! 1 !== this . evaluator ( g ) ) { if ( ! b ) return g } else if ( b && this . evaluator ) return ! 1 ; g = g [ k] ( ! 1 , m , y ) } this . end ( ) ; return this . current = null } function d ( b ) { for ( var c , g = null ; c = a . call ( this , b ) ; ) g = c ; return g } CKEDITOR . dom . walker = CKEDITOR . tools . createClass ( { $ : function ( a ) { this . range =
( function ( ) { function a ( a , b ) { var c = this . range ; if ( this . _ . end ) return null ; if ( ! this . _ . start ) { this . _ . start = 1 ; if ( c . collapsed ) return this . end ( ) , null ; c . optimize ( ) } var g , d = c . startContainer ; g = c . endContainer ; var e = c . startOffset , f = c . endOffset , w, h = this . guard , k = this . type , q = a ? "getPreviousSourceNode" : "getNextSourceNode" ; if ( ! a && ! this . _ . guardLTR ) { var l = g . type == CKEDITOR . NODE _ELEMENT ? g : g . getParent ( ) , y = g . type == CKEDITOR . NODE _ELEMENT ? g . getChild ( f ) : g . getNext ( ) ; this . _ . guardLTR = function ( a , b ) { return ( ! b || ! l . equals ( a ) ) && ( ! y ||
! a . equals ( y ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } if ( a && ! this . _ . guardRTL ) { var K = d . type == CKEDITOR . NODE _ELEMENT ? d : d . getParent ( ) , r = d . type == CKEDITOR . NODE _ELEMENT ? e ? d . getChild ( e - 1 ) : null : d . getPrevious ( ) ; this . _ . guardRTL = function ( a , b ) { return ( ! b || ! K . equals ( a ) ) && ( ! r || ! a . equals ( r ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } var D = a ? this . _ . guardRTL : this . _ . guardLTR ; w = h ? function ( a , b ) { return ! 1 === D ( a , b ) ? ! 1 : h ( a , b ) } : D ; this . current ? g = this . current [ q] ( ! 1 , k , w ) : ( a ? g . type == CKEDITOR . NODE _ELEMENT &&
( g = 0 < f ? g . getChild ( f - 1 ) : ! 1 === w ( g , ! 0 ) ? null : g . getPreviousSourceNode ( ! 0 , k, w ) ) : ( g = d , g . type == CKEDITOR . NODE _ELEMENT && ( ( g = g . getChild ( e ) ) || ( g = ! 1 === w ( d , ! 0 ) ? null : d . getNextSourceNode ( ! 0 , k, w ) ) ) ) , g && ! 1 === w ( g ) && ( g = null ) ) ; for ( ; g && ! this . _ . end ; ) { this . current = g ; if ( ! this . evaluator || ! 1 !== this . evaluator ( g ) ) { if ( ! b ) return g } else if ( b && this . evaluator ) return ! 1 ; g = g [ q] ( ! 1 , k , w ) } this . end ( ) ; return this . current = null } function d ( b ) { for ( var c , g = null ; c = a . call ( this , b ) ; ) g = c ; return g } 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 ! 1 !== a . call ( this , 0 , 1 ) } , checkBackward : function ( ) { return ! 1 !== a . call ( this , 1 , 1 ) } , lastForward : function ( ) { return d . call ( this ) } , lastBackward : function ( ) { return d . call ( this , 1 ) } , reset : function ( ) { delete this . current ; this . _ = { } } } } ) ; var b = { 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 } , c = { absolute : 1 , fixed : 1 } ; CKEDITOR . dom . element . prototype . isBlockBoundary = function ( a ) { return "none" != this . getComputedStyle ( "float" ) || this . getComputedStyle ( "position" ) in c || ! b [ this . getComputedStyle ( "display" ) ] ? ! ! ( this . is ( CKEDITOR . dtd . $block ) || a && this . is ( a ) ) : ! 0 } ; 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 && "span" == a . getName ( ) && a . data ( "cke-bookmark" ) } return function ( g ) { var d , e ; d = g && g . type != CKEDITOR . NODE _ELEMENT && ( e = g . getParent ( ) ) && c ( e ) ; d = a ? d : d || c ( g ) ; return ! ! ( b ^ d ) } } ; 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 ( ) == CKEDITOR . dom . selection . FILLING _CHAR _SEQUENCE ) ; return ! ! ( a ^ c ) } } ; CKEDITOR . dom . walker . invisible =
function ( a ) { var b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . env . webkit ? 1 : 0 ; return function ( g ) { b ( g ) ? g = 1 : ( g . type == CKEDITOR . NODE _TEXT && ( g = g . getParent ( ) ) , g = g . $ . offsetWidth <= c ) ; return ! ! ( a ^ g ) } } ; 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 ! e ( a ) && ! k ( a ) } return function ( c ) { var g = CKEDITOR . env . needsBrFiller ? c . is && c . is ( "br" ) : c . getText && f . test ( c . getText ( ) ) ; g && ( g = c . getParent ( ) , c = c . getNext ( b ) , g = g . isBlockBoundary ( ) &&
( ! c || c . type == CKEDITOR . NODE _ELEMENT && c . isBlockBoundary ( ) ) ) ; return ! ! ( a ^ g ) } } ; 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 f = /^[\t\r\n ]*(?: |\xa0)$/ , e = CKEDITOR . dom . walker . whitespaces ( ) , k = CKEDITOR . dom . walker . bookmark ( ) , h = CKEDITOR . dom . walker . temp ( ) , l = function ( a ) { return k ( a ) || e ( a ) || a . type == CKEDITOR . NODE _ELEMENT && a . is ( CKEDITOR . dtd . $inline ) && ! a . is ( CKEDITOR . dtd . $empty ) } ; CKEDITOR . dom . walker . ignored =
function ( a ) { return function ( b ) { b = e ( b ) || k ( b ) || h ( b ) ; return ! ! ( a ^ b ) } } ; var q = CKEDITOR . dom . walker . ignored ( ) ; CKEDITOR . dom . walker . empty = function ( a ) { return function ( b ) { for ( var c = 0 , g = b . getChildCount ( ) ; c < g ; ++ c ) if ( ! q ( b . getChild ( c ) ) ) return ! ! a ; return ! a } } ; var g = CKEDITOR . dom . walker . empty ( ) , y = CKEDITOR . dom . walker . validEmptyBlockContainers = CKEDITOR . tools . extend ( function ( a ) { var b = { } , c ; for ( c in a ) CKEDITOR . dtd [ c ] [ "#" ] && ( b [ c ] = 1 ) ; return b } ( CKEDITOR . dtd . $block ) , { caption : 1 , td : 1 , th : 1 } ) ; CKEDITOR . dom . walker . editable = function ( a ) { return function ( b ) { b =
q ( b ) ? ! 1 : b . type == CKEDITOR . NODE _TEXT || b . type == CKEDITOR . NODE _ELEMENT && ( b . is ( CKEDITOR . dtd . $inline ) || b . is ( "hr" ) || "false" == b . getAttribute ( "contenteditable" ) || ! CKEDITOR . env . needsBrFiller && b . is ( y ) && g ( b ) ) ? ! 0 : ! 1 ; return ! ! ( a ^ b ) } } ; CKEDITOR . dom . element . prototype . getBogus = function ( ) { var a = this ; do a = a . getPreviousSourceNode ( ) ; while ( l ( a ) ) ; return a && ( CKEDITOR . env . needsBrFiller ? a . is && a . is ( "br" ) : a . getText && f . test ( a . getText ( ) ) ) ? a : ! 1 } } ) ( ) ;
function ( a ) { return function ( b ) { b = e ( b ) || k ( b ) || h ( b ) ; return ! ! ( a ^ b ) } } ; var q = CKEDITOR . dom . walker . ignored ( ) ; CKEDITOR . dom . walker . empty = function ( a ) { return function ( b ) { for ( var c = 0 , g = b . getChildCount ( ) ; c < g ; ++ c ) if ( ! q ( b . getChild ( c ) ) ) return ! ! a ; return ! a } } ; var g = CKEDITOR . dom . walker . empty ( ) , w = CKEDITOR . dom . walker . validEmptyBlockContainers = CKEDITOR . tools . extend ( function ( a ) { var b = { } , c ; for ( c in a ) CKEDITOR . dtd [ c ] [ "#" ] && ( b [ c ] = 1 ) ; return b } ( CKEDITOR . dtd . $block ) , { caption : 1 , td : 1 , th : 1 } ) ; CKEDITOR . dom . walker . editable = function ( a ) { return function ( b ) { b =
q ( b ) ? ! 1 : b . type == CKEDITOR . NODE _TEXT || b . type == CKEDITOR . NODE _ELEMENT && ( b . is ( CKEDITOR . dtd . $inline ) || b . is ( "hr" ) || "false" == b . getAttribute ( "contenteditable" ) || ! CKEDITOR . env . needsBrFiller && b . is ( w ) && g ( b ) ) ? ! 0 : ! 1 ; return ! ! ( a ^ b ) } } ; CKEDITOR . dom . element . prototype . getBogus = function ( ) { var a = this ; do a = a . getPreviousSourceNode ( ) ; while ( l ( a ) ) ; return a && ( CKEDITOR . env . needsBrFiller ? a . is && a . is ( "br" ) : a . getText && f . test ( a . getText ( ) ) ) ? a : ! 1 } } ) ( ) ;
CKEDITOR . dom . range = function ( a ) { this . endOffset = this . endContainer = this . startOffset = this . startContainer = null ; this . collapsed = ! 0 ; var d = a instanceof CKEDITOR . dom . document ; this . document = d ? a : a . getDocument ( ) ; this . root = d ? a . getBody ( ) : a } ;
( function ( ) { function a ( a ) { a . collapsed = a . startContainer && a . endContainer && a . startContainer . equals ( a . endContainer ) && a . startOffset == a . endOffset } function d ( a , b , c , d , e ) { function f ( a , b , c , g ) { var F = c ? a . getPrevious ( ) : a . getNext ( ) ; if ( g && k ) return F ; l || g ? b . append ( a . clone ( ! 0 , e ) , c ) : ( a . remove ( ) , q && b . append ( a , c ) ) ; return F} function n ( ) { var a , b , c , g = Math . min ( S. length , t . length ) ; for ( a = 0 ; a < g ; a ++ ) if ( b = S[ a ] , c = t [ a ] , ! b . equals ( c ) ) return a ; return a - 1 } function h ( ) { var b = O- 1 , c = B && D && ! m . equals ( C ) ; b < N - 1 || b < p - 1 || c ? ( c ? a . moveToPosition ( C ,
CKEDITOR . POSITION _BEFORE _START ) : p == b + 1 && r ? a . moveToPosition ( t [ b ] , CKEDITOR . POSITION _BEFORE _END ) : a . moveToPosition ( t [ b + 1 ] , CKEDITOR . POSITION _BEFORE _START ) , d && ( b = S [ b + 1 ] ) && b . type == CKEDITOR . NODE _ELEMENT && ( c = CKEDITOR . dom . element . createFromHtml ( '\x3cspan data-cke-bookmark\x3d"1" style\x3d"display:none"\x3e\x26nbsp;\x3c/span\x3e' , a . document ) , c . insertAfter ( b ) , b . mergeSiblings ( ! 1 ) , a . moveToBookmark ( { startNode : c } ) ) ) : a . collapse ( ! 0 ) } a . optimizeBookmark ( ) ; var k = 0 === b , q = 1 == b , l = 2 == b ; b = l || q ; var m= a . startContainer , C = a . endContainer ,
K= a . startOffset , A = a . endOffset , L , r , B , D , w , Q ; if ( l && C . type == CKEDITOR . NODE _TEXT && ( m. equals ( C ) || m . type === CKEDITOR . NODE _ELEMENT && m. getFirst ( ) . equals ( C ) ) ) c . append ( a . document . createText ( C. substring ( K , A ) ) ) ; else { C . type == CKEDITOR . NODE _TEXT ? l ? Q= ! 0 : C = C . split ( A ) : 0 < C . getChildCount ( ) ? A >= C . getChildCount ( ) ? ( C = C . getChild ( A - 1 ) , r = ! 0 ) : C = C . getChild ( A ) : D = r = ! 0 ; m . type == CKEDITOR . NODE _TEXT ? l ? w= ! 0 : m . split ( K ) : 0 < m . getChildCount ( ) ? 0 === K ? ( m = m . getChild ( K ) , L = ! 0 ) : m = m . getChild ( K - 1 ) : B = L = ! 0 ; for ( var S = m . getParents ( ) , t = C . getParents ( ) , O = n ( ) ,
N = S. length - 1 , p = t . length - 1 , G = c , F , da , aa , fa = - 1 , U = O ; U <= N ; U ++ ) { da = S [ U ] ; aa = da . getNext ( ) ; for ( U != N || da . equals ( t [ U ] ) && N < p ? b && ( F = G . append ( d a. clone ( 0 , e ) ) ) : L? f ( da , G , ! 1 , B ) : w && G . append ( a . document . createText ( da. substring ( K ) ) ) ; aa ; ) { if ( aa . equals ( t [ U ] ) ) { fa = U ; break } aa = f ( aa , G ) } G = F } G = c ; for ( U = O ; U <= p ; U ++ ) if ( c = t [ U ] , aa = c . getPrevious ( ) , c . equals ( S[ U ] ) ) b && ( G = G . getChild ( 0 ) ) ; else { U != p || c . equals ( S [ U ] ) && p < N ? b && ( F = G . append ( c . clone ( 0 , e ) ) ) : r ? f ( c , G, ! 1 , D ) : Q && G . append ( a . document . createText ( c . substring ( 0 , A) ) ) ; if ( U > fa ) for ( ; aa ; ) aa = f ( aa ,
G , ! 0 ) ; G = F } l || h ( ) } } function b ( ) { var a = ! 1 , b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . dom . walker . bookmark ( ! 0 ) , d = CKEDITOR . dom . walker . bogus ( ) ; return function ( f ) { return c ( f ) || b ( f ) ? ! 0 : d ( f ) && ! a ? a = ! 0 : f . type == CKEDITOR . NODE _TEXT && ( f . hasAscendant ( "pre" ) || CKEDITOR . tools . trim ( f . getText ( ) ) . length ) || f . type == CKEDITOR . NODE _ELEMENT && ! f . is ( e ) ? ! 1 : ! 0 } } function c ( a ) { var b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . dom . walker . bookmark ( 1 ) ; return function ( d ) { return c ( d ) || b ( d ) ? ! 0 : ! a && k ( d ) || d . type == CKEDITOR . NODE _ELEMENT &&
d . is ( CKEDITOR . dtd . $removeEmpty ) } } function f ( a ) { return function ( ) { var b ; return this [ a ? "getPreviousNode" : "getNextNode" ] ( function ( a ) { ! b && q ( a ) && ( b = a ) ; return l ( a ) && ! ( k ( a ) && a . equals ( b ) ) } ) } } var e = { 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 } , k = CKEDITOR . dom . walker . bogus ( ) , h = /^[\t\r\n ]*(?: |\xa0)$/ , l = CKEDITOR . dom . walker . editable ( ) , q = CKEDITOR . dom . walker . ignored ( ! 0 ) ; 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 ) { a ? ( this . _setEndContainer ( this . startContainer ) , this . endOffset = this . startOffset ) : ( this . _setStartContainer ( this . endContainer ) , this . startOffset = this . endOffset ) ; this . collapsed = ! 0 } , cloneContents : function ( a ) { var b = new CKEDITOR . dom . documentFragment ( this . document ) ;
this . collapsed || d ( this , 2 , b , ! 1 , "undefined" == typeof a ? ! 0 : a ) ; return b } , deleteContents : function ( a ) { this . collapsed || d ( this , 0 , null , a ) } , extractContents : function ( a , b ) { var c = new CKEDITOR . dom . documentFragment ( this . document ) ; this . collapsed || d ( this , 1 , c , a , "undefined" == typeof b ? ! 0 : b ) ; return c } , equals : function ( a ) { return this . startOffset === a . startOffset && this . endOffset === a . endOffset && this . startContainer . equals ( a . startContainer ) && this . endContainer . equals ( a . endContainer ) } , createBookmark : function ( a ) { function b ( a ) { return a . getAscendant ( function ( a ) { var b ;
if ( b = a . data && a . data ( "cke-temp" ) ) b = - 1 === CKEDITOR . tools . array . indexOf ( [ "cke_copybin" , "cke_pastebin" ] , a . getAttribute ( "id" ) ) ; return b } , ! 0 ) } var c = this . startContainer , d = this . endContainer , e = this . collapsed , f , n , h , k ; f = this . document . createElement ( "span" ) ; f . data ( "cke-bookmark" , 1 ) ; f . setStyle ( "display" , "none" ) ; f . setHtml ( "\x26nbsp;" ) ; a && ( h = "cke_bm_" + CKEDITOR . tools . getNextNumber ( ) , f . setAttribute ( "id" , h + ( e ? "C" : "S" ) ) ) ; e || ( n= f . clone ( ) , n . setHtml ( "\x26nbsp;" ) , a && n . setAttribute ( "id" , h + "E" ) , k = this . clone ( ) , b ( d ) && ( d = b ( d ) ,
k . moveToPosition ( d , CKEDITOR . POSITION _AFTER _END ) ) , k . collapse ( ) , k . insertNode ( n ) ) ; k = this . clone ( ) ; b ( c ) && ( d = b ( c ) , k . moveToPosition ( d , CKEDITOR . POSITION _BEFORE _START ) ) ; k . collapse ( ! 0 ) ; k . insertNode ( f ) ; n ? ( this . setStartAfter ( f ) , this . setEndBefore ( n ) ) : this . moveToPosition ( f , CKEDITOR . POSITION _AFTER _END ) ; return { startNode : a ? h + ( e ? "C" : "S" ) : f , endNode : a ? h + "E" : n , serializable : a , collapsed : e } } , createBookmark2 : function ( ) { function a ( b ) { var g = b . container , d = b . offset , e ; e = g ; var f = d ; e = e . type != CKEDITOR . NODE _ELEMENT || 0 === f || f == e . getChildCount ( ) ?
( function ( ) { function a ( a ) { a . collapsed = a . startContainer && a . endContainer && a . startContainer . equals ( a . endContainer ) && a . startOffset == a . endOffset } function d ( a , b , c , d , e ) { function f ( a , b , c , g ) { var L = c ? a . getPrevious ( ) : a . getNext ( ) ; if ( g && k ) return L ; l || g ? b . append ( a . clone ( ! 0 , e ) , c ) : ( a . remove ( ) , q && b . append ( a , c ) ) ; return L} function m ( ) { var a , b , c , g = Math . min ( O. length , p . length ) ; for ( a = 0 ; a < g ; a ++ ) if ( b = O[ a ] , c = p [ a ] , ! b . equals ( c ) ) return a ; return a - 1 } function h ( ) { var b = I- 1 , c = D && B && ! u . equals ( F ) ; b < N - 1 || b < n - 1 || c ? ( c ? a . moveToPosition ( F ,
CKEDITOR . POSITION _BEFORE _START ) : n == b + 1 && r ? a . moveToPosition ( p [ b ] , CKEDITOR . POSITION _BEFORE _END ) : a . moveToPosition ( p [ b + 1 ] , CKEDITOR . POSITION _BEFORE _START ) , d && ( b = O [ b + 1 ] ) && b . type == CKEDITOR . NODE _ELEMENT && ( c = CKEDITOR . dom . element . createFromHtml ( '\x3cspan data-cke-bookmark\x3d"1" style\x3d"display:none"\x3e\x26nbsp;\x3c/span\x3e' , a . document ) , c . insertAfter ( b ) , b . mergeSiblings ( ! 1 ) , a . moveToBookmark ( { startNode : c } ) ) ) : a . collapse ( ! 0 ) } a . optimizeBookmark ( ) ; var k = 0 === b , q = 1 == b , l = 2 == b ; b = l || q ; var u= a . startContainer , F = a . endContainer ,
H= a . startOffset , y = a . endOffset , K , r , D , B , G , T ; if ( l && F . type == CKEDITOR . NODE _TEXT && ( u. equals ( F ) || u . type === CKEDITOR . NODE _ELEMENT && u. getFirst ( ) . equals ( F ) ) ) c . append ( a . document . createText ( F. substring ( H , y ) ) ) ; else { F . type == CKEDITOR . NODE _TEXT ? l ? T= ! 0 : F = F . split ( y ) : 0 < F . getChildCount ( ) ? y >= F . getChildCount ( ) ? ( F = F . getChild ( y - 1 ) , r = ! 0 ) : F = F . getChild ( y ) : B = r = ! 0 ; u . type == CKEDITOR . NODE _TEXT ? l ? G= ! 0 : u . split ( H ) : 0 < u . getChildCount ( ) ? 0 === H ? ( u = u . getChild ( H ) , K = ! 0 ) : u = u . getChild ( H - 1 ) : D = K = ! 0 ; for ( var O = u . getParents ( ) , p = F . getParents ( ) , I = m ( ) ,
N = O. length - 1 , n = p . length - 1 , C = c , L , aa , X , ea = - 1 , W = I ; W <= N ; W ++ ) { aa = O [ W ] ; X = aa . getNext ( ) ; for ( W != N || aa . equals ( p [ W ] ) && N < n ? b && ( L = C . append ( a a. clone ( 0 , e ) ) ) : K? f ( aa , C , ! 1 , D ) : G && C . append ( a . document . createText ( aa. substring ( H ) ) ) ; X ; ) { if ( X . equals ( p [ W ] ) ) { ea = W ; break } X = f ( X , C ) } C = L } C = c ; for ( W = I ; W <= n ; W ++ ) if ( c = p [ W ] , X = c . getPrevious ( ) , c . equals ( O[ W ] ) ) b && ( C = C . getChild ( 0 ) ) ; else { W != n || c . equals ( O [ W ] ) && n < N ? b && ( L = C . append ( c . clone ( 0 , e ) ) ) : r ? f ( c , C, ! 1 , B ) : T && C . append ( a . document . createText ( c . substring ( 0 , y) ) ) ; if ( W > ea ) for ( ; X ; ) X = f ( X , C , ! 0 ) ; C = L } l ||
h ( ) } } function b ( ) { var a = ! 1 , b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . dom . walker . bookmark ( ! 0 ) , d = CKEDITOR . dom . walker . bogus ( ) ; return function ( f ) { return c ( f ) || b ( f ) ? ! 0 : d ( f ) && ! a ? a = ! 0 : f . type == CKEDITOR . NODE _TEXT && ( f . hasAscendant ( "pre" ) || CKEDITOR . tools . trim ( f . getText ( ) ) . length ) || f . type == CKEDITOR . NODE _ELEMENT && ! f . is ( e ) ? ! 1 : ! 0 } } function c ( a ) { var b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . dom . walker . bookmark ( 1 ) ; return function ( d ) { return c ( d ) || b ( d ) ? ! 0 : ! a && k ( d ) || d . type == CKEDITOR . NODE _ELEMENT && d . is ( CKEDITOR . dtd . $removeEmpty ) } }
function f ( a ) { return function ( ) { var b ; return this [ a ? "getPreviousNode" : "getNextNode" ] ( function ( a ) { ! b && q ( a ) && ( b = a ) ; return l ( a ) && ! ( k ( a ) && a . equals ( b ) ) } ) } } var e = { 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 } , k = CKEDITOR . dom . walker . bogus ( ) , h = /^[\t\r\n ]*(?: |\xa0)$/ , l = CKEDITOR . dom . walker . editable ( ) , q = CKEDITOR . dom . walker . ignored ( ! 0 ) ; 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 ) { a ? ( this . _setEndContainer ( this . startContainer ) , this . endOffset = this . startOffset ) : ( this . _setStartContainer ( this . endContainer ) , this . startOffset = this . endOffset ) ; this . collapsed = ! 0 } , cloneContents : function ( a ) { var b = new CKEDITOR . dom . documentFragment ( this . document ) ; this . collapsed ||
d ( this , 2 , b , ! 1 , "undefined" == typeof a ? ! 0 : a ) ; return b } , deleteContents : function ( a ) { this . collapsed || d ( this , 0 , null , a ) } , extractContents : function ( a , b ) { var c = new CKEDITOR . dom . documentFragment ( this . document ) ; this . collapsed || d ( this , 1 , c , a , "undefined" == typeof b ? ! 0 : b ) ; return c } , equals : function ( a ) { return this . startOffset === a . startOffset && this . endOffset === a . endOffset && this . startContainer . equals ( a . startContainer ) && this . endContainer . equals ( a . endContainer ) } , createBookmark : function ( a ) { function b ( a ) { return a . getAscendant ( function ( a ) { var b ;
if ( b = a . data && a . data ( "cke-temp" ) ) b = - 1 === CKEDITOR . tools . array . indexOf ( [ "cke_copybin" , "cke_pastebin" ] , a . getAttribute ( "id" ) ) ; return b } , ! 0 ) } var c = this . startContainer , d = this . endContainer , e = this . collapsed , f , m , h , k ; f = this . document . createElement ( "span" ) ; f . data ( "cke-bookmark" , 1 ) ; f . setStyle ( "display" , "none" ) ; f . setHtml ( "\x26nbsp;" ) ; a && ( h = "cke_bm_" + CKEDITOR . tools . getNextNumber ( ) , f . setAttribute ( "id" , h + ( e ? "C" : "S" ) ) ) ; e || ( m= f . clone ( ) , m . setHtml ( "\x26nbsp;" ) , a && m . setAttribute ( "id" , h + "E" ) , k = this . clone ( ) , b ( d ) && ( d = b ( d ) ,
k . moveToPosition ( d , CKEDITOR . POSITION _AFTER _END ) ) , k . collapse ( ) , k . insertNode ( m ) ) ; k = this . clone ( ) ; b ( c ) && ( d = b ( c ) , k . moveToPosition ( d , CKEDITOR . POSITION _BEFORE _START ) ) ; k . collapse ( ! 0 ) ; k . insertNode ( f ) ; m ? ( this . setStartAfter ( f ) , this . setEndBefore ( m ) ) : this . moveToPosition ( f , CKEDITOR . POSITION _AFTER _END ) ; return { startNode : a ? h + ( e ? "C" : "S" ) : f , endNode : a ? h + "E" : m , serializable : a , collapsed : e } } , createBookmark2 : function ( ) { function a ( b ) { var g = b . container , d = b . offset , e ; e = g ; var f = d ; e = e . type != CKEDITOR . NODE _ELEMENT || 0 === f || f == e . getChildCount ( ) ?
0 : e . getChild ( f - 1 ) . type == CKEDITOR . NODE _TEXT && e . getChild ( f ) . type == CKEDITOR . NODE _TEXT ; e && ( g = g . getChild ( d - 1 ) , d = g . getLength ( ) ) ; if ( g . type == CKEDITOR . NODE _ELEMENT && 0 < d ) { a : { for ( e = g ; d -- ; ) if ( f = e . getChild ( d ) . getIndex ( ! 0 ) , 0 <= f ) { d = f ; break a } d = - 1 } d += 1 } if ( g . type == CKEDITOR . NODE _TEXT ) { e = g ; for ( f = 0 ; ( e = e . getPrevious ( ) ) && e . type == CKEDITOR . NODE _TEXT ; ) f += e . getText ( ) . replace ( CKEDITOR . dom . selection . FILLING _CHAR _SEQUENCE , "" ) . length ; e = f ; g . isEmpty ( ) ? ( f = g . getPrevious ( c ) , e ? ( d = e , g = f ? f . getNext ( ) : g . getParent ( ) . getFirst ( ) ) : ( g = g . getParent ( ) ,
d = f ? f . getIndex ( ! 0 ) + 1 : 0 ) ) : d += e } b . container = g ; b . offset = d } function b ( a , c ) { var g = c . getCustomData ( "cke-fillingChar" ) ; if ( g ) { var d = a . container ; g . equals ( d ) && ( a . offset -= CKEDITOR . dom . selection . FILLING _CHAR _SEQUENCE . length , 0 >= a . offset && ( a . offset = d . getIndex ( ) , a . container = d . getParent ( ) ) ) } } var c = CKEDITOR . dom . walker . nodeType ( CKEDITOR . NODE _TEXT , ! 0 ) ; return function ( c ) { var d = this . collapsed , e = { container : this . startContainer , offset : this . startOffset } , n = { container : this . endContainer , offset : this . endOffset } ; c && ( a ( e ) , b ( e , this . root ) ,
d || ( a ( n) , b ( n , this . root ) ) ) ; return { start : e . container . getAddress ( c ) , end : d ? null : n . container . getAddress ( c ) , startOffset : e . offset , endOffset : n . offset , normalized : c , collapsed : d , is2 : ! 0 } } } ( ) , 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 ( ! 0 ) } else b = ( c = a . serializable ) ? this . document . getById ( a . startNode ) : a . startNode , a = c ? this . document . getById ( a . endNode ) :
d = f ? f . getIndex ( ! 0 ) + 1 : 0 ) ) : d += e } b . container = g ; b . offset = d } function b ( a , c ) { var g = c . getCustomData ( "cke-fillingChar" ) ; if ( g ) { var d = a . container ; g . equals ( d ) && ( a . offset -= CKEDITOR . dom . selection . FILLING _CHAR _SEQUENCE . length , 0 >= a . offset && ( a . offset = d . getIndex ( ) , a . container = d . getParent ( ) ) ) } } var c = CKEDITOR . dom . walker . nodeType ( CKEDITOR . NODE _TEXT , ! 0 ) ; return function ( c ) { var d = this . collapsed , e = { container : this . startContainer , offset : this . startOffset } , m = { container : this . endContainer , offset : this . endOffset } ; c && ( a ( e ) , b ( e , this . root ) ,
d || ( a ( m) , b ( m , this . root ) ) ) ; return { start : e . container . getAddress ( c ) , end : d ? null : m . container . getAddress ( c ) , startOffset : e . offset , endOffset : m . offset , normalized : c , collapsed : d , is2 : ! 0 } } } ( ) , 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 ( ! 0 ) } 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 ( ) , a ? ( this . setEndBefore ( a ) , a . remove ( ) ) : this . collapse ( ! 0 ) } , getBoundaryNodes : function ( ) { var a = this . startContainer , b = this . endContainer , c = this . startOffset , d = this . endOffset , e ; if ( a . type == CKEDITOR . NODE _ELEMENT ) if ( e = a . getChildCount ( ) , e > c ) a = a . getChild ( c ) ; else if ( 1 > e ) 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 ) if ( e = b . getChildCount ( ) , e > d ) b = b . getChild ( d ) . getPreviousSourceNode ( ! 0 ) ;
else if ( 1 > e ) 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 , e = this . collapsed ; if ( ( ! a || e ) && c && c . type == CKEDITOR . NODE _TEXT ) { if ( d ) if ( d >= c . getLength ( ) ) d = c . getIndex ( ) + 1 , c = c . getParent ( ) ; else { var f = c . split ( d ) , d = c . getIndex ( ) + 1 , c = c . getParent ( ) ; this . startContainer . equals ( this . endContainer ) ? this . setEnd ( f , this . endOffset - this . startOffset ) : c . equals ( this . endContainer ) && ( this . endOffset += 1 ) } else d = c . getIndex ( ) , c = c . getParent ( ) ; this . setStart ( c , d ) ; if ( e ) { this . collapse ( ! 0 ) ; return } } c = this . endContainer ; d = this . endOffset ; b || e || ! c || c . type !=
CKEDITOR . NODE _TEXT || ( d ? ( d >= c . getLength ( ) || c . split ( d ) , d = c . getIndex ( ) + 1 ) : 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 = new RegExp ( /[^\s\ufeff]/ ) ; switch ( a ) { case CKEDITOR . ENLARGE _INLINE : var e = 1 ; case CKEDITOR . ENLARGE _ELEMENT : var f = function ( a , b ) { var c = new CKEDITOR . dom . range ( h ) ; c . setStart ( a , b ) ; c . setEndAt ( h , CKEDITOR . POSITION _BEFORE _END ) ; var c = new CKEDITOR . dom . walker ( c ) , g ; for ( c . guard =
function ( a ) { return ! ( a . type == CKEDITOR . NODE _ELEMENT && a . isBlockBoundary ( ) ) } ; g = c . next ( ) ; ) { if ( g . type != CKEDITOR . NODE _TEXT ) return ! 1 ; L = g != a ? g . getText ( ) : g . substring ( b ) ; if ( d . test ( L ) ) return ! 1 } return ! 0 } ; if ( this . collapsed ) break ; var n = this . getCommonAncestor ( ) , h = this . root , k , q , l , m, C , K = ! 1 , A , L ; A = this . startContainer ; var r = this . startOffset ; A . type == CKEDITOR . NODE _TEXT ? ( r && ( A= ! CKEDITOR . tools . trim ( A . substring ( 0 , r ) ) . length && A, K = ! ! A ) , A && ( ( m = A . getPrevious ( ) ) || ( l = A . getParent ( ) ) ) ) : ( r && ( m= A . getChild ( r - 1 ) || A . getLast ( ) ) , m || ( l = A ) ) ;
for ( l = c ( l ) ; l || m; ) { if ( l && ! m ) { ! C && l . equals ( n ) && ( C = ! 0 ) ; if ( e ? l . isBlockBoundary ( ) : ! h . contains ( l ) ) break ; K && "inline" == l . getComputedStyle ( "display" ) || ( K= ! 1 , C ? k = l : this . setStartBefore ( l ) ) ; m = l . getPrevious ( ) } for ( ; m; ) if ( A = ! 1 , m . type == CKEDITOR . NODE _COMMENT ) m= m . getPrevious ( ) ; else { if ( m. type == CKEDITOR . NODE _TEXT ) L = m . getText ( ) , d . test ( L ) && ( m = null ) , A = /[\s\ufeff]$/ . test ( L ) ; else if ( ( m . $ . offsetWidth > ( CKEDITOR . env . webkit ? 1 : 0 ) || b && m. is ( "br" ) ) && ! m . data ( "cke-bookmark" ) ) if ( K&& CKEDITOR . dtd . $removeEmpty [ m . getName ( ) ] ) { L = m . getText ( ) ;
if ( d . test ( L) ) m = null ; else for ( var r = m . $ . getElementsByTagName ( "*" ) , B= 0 , D ; D = r [ B ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ D . nodeName . toLowerCase ( ) ] ) { m= null ; break } m && ( A = ! ! L . length ) } else m = null ; A && ( K ? C ? k = l : l && this . setStartBefore ( l ) : K= ! 0 ) ; if ( m ) { A = m . getPrevious ( ) ; if ( ! l && ! A) { l = m ; m = null ; break } m = A } else l = null } l && ( l = c ( l . getParent ( ) ) ) } A = this . endContainer ; r = this . endOffset ; l = m= null ; C = K = ! 1 ; A . type == CKEDITOR . NODE _TEXT ? CKEDITOR . tools . trim ( A . substring ( r ) ) . length ? K= ! 0 : ( K = ! A . getLength ( ) , r == A . getLength ( ) ? ( m = A . getNext ( ) ) || ( l = A . getParent ( ) ) :
f ( A, r ) && ( l = A . getParent ( ) ) ) : ( m = A . getChild ( r ) ) || ( l = A) ; for ( ; l || m ; ) { if ( l && ! m ) { ! C && l . equals ( n ) && ( C = ! 0 ) ; if ( e ? l . isBlockBoundary ( ) : ! h . contains ( l ) ) break ; K && "inline" == l . getComputedStyle ( "display" ) || ( K= ! 1 , C ? q = l : l && this . setEndAfter ( l ) ) ; m = l . getNext ( ) } for ( ; m; ) { A = ! 1 ; if ( m . type == CKEDITOR . NODE _TEXT ) L = m . getText ( ) , f ( m , 0 ) || ( m = null ) , A = /^[\s\ufeff]/ . test ( L ) ; else if ( m . type == CKEDITOR . NODE _ELEMENT ) { if ( ( 0 < m. $ . offsetWidth || b && m . is ( "br" ) ) && ! m . data ( "cke-bookmark" ) ) if ( K&& CKEDITOR . dtd . $removeEmpty [ m . getName ( ) ] ) { L = m . getText ( ) ; if ( d . test ( L) ) m =
null ; else for ( r = m . $ . getElementsByTagName ( "*" ) , B= 0 ; D = r [ B ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ D . nodeName . toLowerCase ( ) ] ) { m= null ; break } m && ( A = ! ! L . length ) } else m = null } else A = 1 ; A && K && ( C ? q = l : this . setEndAfter ( l ) ) ; if ( m) { A = m . getNext ( ) ; if ( ! l && ! A) { l = m ; m = null ; break } m = A } else l = null } l && ( l = c ( l . getParent ( ) ) ) } k && q && ( n = k . contains ( q ) ? q : k , this . setStartBefore ( n) , this . setEndAfter ( n ) ) ; break ; case CKEDITOR . ENLARGE _BLOCK _CONTENTS : case CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : l = new CKEDITOR . dom . range ( this . root ) ; h = this . root ; l . setStartAt ( h ,
CKEDITOR . POSITION _AFTER _START ) ; l . setEnd ( this . startContainer , this . startOffset ) ; l = new CKEDITOR . dom . walker ( l ) ; var w, Q , S = CKEDITOR . dom . walker . blockBoundary ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? { br : 1 } : null ) , t= null , O = function ( a ) { if ( a . type == CKEDITOR . NODE _ELEMENT && "false" == a . getAttribute ( "contenteditable" ) ) if ( t) { if ( t . equals ( a ) ) { t = null ; return } } else t = a ; else if ( t ) return ; var b = S ( a ) ; b || ( w = a ) ; return b } , e = function ( a ) { var b = O ( a ) ; ! b && a . is && a . is ( "br" ) && ( Q = a ) ; return b } ; l . guard = O ; l = l . lastBackward ( ) ; w= w || h ; this . setStartAt ( w ,
! w . is ( "br" ) && ( ! l && this . checkStartOfBlock ( ) || l && w . contains ( l ) ) ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _AFTER _END ) ; if ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ) { l = this . clone ( ) ; l = new CKEDITOR . dom . walker ( l ) ; var N = CKEDITOR . dom . walker . whitespaces ( ) , p = CKEDITOR . dom . walker . bookmark ( ) ; l . evaluator = function ( a ) { return ! N ( a ) && ! p ( a ) } ; if ( ( l = l . previous ( ) ) && l . type == CKEDITOR . NODE _ELEMENT && l . is ( "br" ) ) break } l = this . clone ( ) ; l . collapse ( ) ; l . setEndAt ( h , CKEDITOR . POSITION _BEFORE _END ) ; l = new CKEDITOR . dom . walker ( l ) ; l . guard =
a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? e : O; w = t = Q = null ; l = l . lastForward ( ) ; w= w || h ; this . setEndAt ( w , ! l && this . checkEndOfBlock ( ) || l && w . contains ( l ) ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _BEFORE _START ) ; Q&& this . setEndAfter ( Q ) } } , shrink : function ( a , b , c ) { var d = "boolean" === typeof c ? c : c && "boolean" === typeof c . shrinkOnBlockBoundary ? c . shrinkOnBlockBoundary : ! 0 , e = c && c . skipBogus ; if ( ! this . collapsed ) { a = a || CKEDITOR . SHRINK _TEXT ; var f = this . clone ( ) , n = this . startContainer , h = this . endContainer , k = this . startOffset , l = this . endOffset ,
q = c = 1 ; n&& n . type == CKEDITOR . NODE _TEXT && ( k ? k >= n . getLength ( ) ? f . setStartAfter ( n) : ( f . setStartBefore ( n ) , c = 0 ) : f . setStartBefore ( n ) ) ; h && h . type == CKEDITOR . NODE _TEXT && ( l ? l >= h . getLength ( ) ? f . setEndAfter ( h ) : ( f . setEndAfter ( h ) , q = 0 ) : f . setEndBefore ( h ) ) ; var f = new CKEDITOR . dom . walker ( f ) , m = CKEDITOR . dom . walker . bookmark ( ) , C = CKEDITOR . dom . walker . bogus ( ) ; f . evaluator = function ( b ) { return b . type == ( a == CKEDITOR . SHRINK _ELEMENT ? CKEDITOR . NODE _ELEMENT : CKEDITOR . NODE _TEXT ) } ; var K ; f . guard = function ( b , c ) { if ( e && C( b ) || m ( b ) ) return ! 0 ; if ( a == CKEDITOR . SHRINK _ELEMENT &&
b . type == CKEDITOR . NODE _TEXT || c && b . equals ( K ) || ! 1 === d && b . type == CKEDITOR . NODE _ELEMENT && b . isBlockBoundary ( ) || b . type == CKEDITOR . NODE _ELEMENT && b . hasAttribute ( "contenteditable" ) ) return ! 1 ; c || b . type != CKEDITOR . NODE _ELEMENT || ( K = b ) ; return ! 0 } ; c && ( n = f [ a == CKEDITOR . SHRINK _ELEMENT ? "lastForward" : "next" ] ( ) ) && this . setStartAt ( n , b ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _BEFORE _START ) ; q && ( f . reset ( ) , ( f = f [ a == CKEDITOR . SHRINK _ELEMENT ? "lastBackward" : "previous" ] ( ) ) && this . setEndAt ( f , b ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _AFTER _END ) ) ;
function ( a ) { return ! ( a . type == CKEDITOR . NODE _ELEMENT && a . isBlockBoundary ( ) ) } ; g = c . next ( ) ; ) { if ( g . type != CKEDITOR . NODE _TEXT ) return ! 1 ; K = g != a ? g . getText ( ) : g . substring ( b ) ; if ( d . test ( K ) ) return ! 1 } return ! 0 } ; if ( this . collapsed ) break ; var m = this . getCommonAncestor ( ) , h = this . root , k , q , l , u, F , H = ! 1 , y , K ; y = this . startContainer ; var r = this . startOffset ; y . type == CKEDITOR . NODE _TEXT ? ( r && ( y= ! CKEDITOR . tools . trim ( y . substring ( 0 , r ) ) . length && y, H = ! ! y ) , y && ( ( u = y . getPrevious ( ) ) || ( l = y . getParent ( ) ) ) ) : ( r && ( u= y . getChild ( r - 1 ) || y . getLast ( ) ) , u || ( l = y ) ) ;
for ( l = c ( l ) ; l || u; ) { if ( l && ! u ) { ! F && l . equals ( m ) && ( F = ! 0 ) ; if ( e ? l . isBlockBoundary ( ) : ! h . contains ( l ) ) break ; H && "inline" == l . getComputedStyle ( "display" ) || ( H= ! 1 , F ? k = l : this . setStartBefore ( l ) ) ; u = l . getPrevious ( ) } for ( ; u; ) if ( y = ! 1 , u . type == CKEDITOR . NODE _COMMENT ) u= u . getPrevious ( ) ; else { if ( u. type == CKEDITOR . NODE _TEXT ) K = u . getText ( ) , d . test ( K ) && ( u = null ) , y = /[\s\ufeff]$/ . test ( K ) ; else if ( ( u . $ . offsetWidth > ( CKEDITOR . env . webkit ? 1 : 0 ) || b && u. is ( "br" ) ) && ! u . data ( "cke-bookmark" ) ) if ( H&& CKEDITOR . dtd . $removeEmpty [ u . getName ( ) ] ) { K = u . getText ( ) ;
if ( d . test ( K) ) u = null ; else for ( var r = u . $ . getElementsByTagName ( "*" ) , D= 0 , B ; B = r [ D ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ B . nodeName . toLowerCase ( ) ] ) { u= null ; break } u && ( y = ! ! K . length ) } else u = null ; y && ( H ? F ? k = l : l && this . setStartBefore ( l ) : H= ! 0 ) ; if ( u ) { y = u . getPrevious ( ) ; if ( ! l && ! y) { l = u ; u = null ; break } u = y } else l = null } l && ( l = c ( l . getParent ( ) ) ) } y = this . endContainer ; r = this . endOffset ; l = u= null ; F = H = ! 1 ; y . type == CKEDITOR . NODE _TEXT ? CKEDITOR . tools . trim ( y . substring ( r ) ) . length ? H= ! 0 : ( H = ! y . getLength ( ) , r == y . getLength ( ) ? ( u = y . getNext ( ) ) || ( l = y . getParent ( ) ) :
f ( y, r ) && ( l = y . getParent ( ) ) ) : ( u = y . getChild ( r ) ) || ( l = y) ; for ( ; l || u ; ) { if ( l && ! u ) { ! F && l . equals ( m ) && ( F = ! 0 ) ; if ( e ? l . isBlockBoundary ( ) : ! h . contains ( l ) ) break ; H && "inline" == l . getComputedStyle ( "display" ) || ( H= ! 1 , F ? q = l : l && this . setEndAfter ( l ) ) ; u = l . getNext ( ) } for ( ; u; ) { y = ! 1 ; if ( u . type == CKEDITOR . NODE _TEXT ) K = u . getText ( ) , f ( u , 0 ) || ( u = null ) , y = /^[\s\ufeff]/ . test ( K ) ; else if ( u . type == CKEDITOR . NODE _ELEMENT ) { if ( ( 0 < u. $ . offsetWidth || b && u . is ( "br" ) ) && ! u . data ( "cke-bookmark" ) ) if ( H&& CKEDITOR . dtd . $removeEmpty [ u . getName ( ) ] ) { K = u . getText ( ) ; if ( d . test ( K) ) u =
null ; else for ( r = u . $ . getElementsByTagName ( "*" ) , D= 0 ; B = r [ D ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ B . nodeName . toLowerCase ( ) ] ) { u= null ; break } u && ( y = ! ! K . length ) } else u = null } else y = 1 ; y && H && ( F ? q = l : this . setEndAfter ( l ) ) ; if ( u) { y = u . getNext ( ) ; if ( ! l && ! y) { l = u ; u = null ; break } u = y } else l = null } l && ( l = c ( l . getParent ( ) ) ) } k && q && ( m = k . contains ( q ) ? q : k , this . setStartBefore ( m) , this . setEndAfter ( m ) ) ; break ; case CKEDITOR . ENLARGE _BLOCK _CONTENTS : case CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : l = new CKEDITOR . dom . range ( this . root ) ; h = this . root ; l . setStartAt ( h ,
CKEDITOR . POSITION _AFTER _START ) ; l . setEnd ( this . startContainer , this . startOffset ) ; l = new CKEDITOR . dom . walker ( l ) ; var G, T , O = CKEDITOR . dom . walker . blockBoundary ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? { br : 1 } : null ) , p= null , I = function ( a ) { if ( a . type == CKEDITOR . NODE _ELEMENT && "false" == a . getAttribute ( "contenteditable" ) ) if ( p) { if ( p . equals ( a ) ) { p = null ; return } } else p = a ; else if ( p ) return ; var b = O ( a ) ; b || ( G = a ) ; return b } , e = function ( a ) { var b = I ( a ) ; ! b && a . is && a . is ( "br" ) && ( T = a ) ; return b } ; l . guard = I ; l = l . lastBackward ( ) ; G= G || h ; this . setStartAt ( G ,
! G . is ( "br" ) && ( ! l && this . checkStartOfBlock ( ) || l && G . contains ( l ) ) ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _AFTER _END ) ; if ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ) { l = this . clone ( ) ; l = new CKEDITOR . dom . walker ( l ) ; var N = CKEDITOR . dom . walker . whitespaces ( ) , n = CKEDITOR . dom . walker . bookmark ( ) ; l . evaluator = function ( a ) { return ! N ( a ) && ! n ( a ) } ; if ( ( l = l . previous ( ) ) && l . type == CKEDITOR . NODE _ELEMENT && l . is ( "br" ) ) break } l = this . clone ( ) ; l . collapse ( ) ; l . setEndAt ( h , CKEDITOR . POSITION _BEFORE _END ) ; l = new CKEDITOR . dom . walker ( l ) ; l . guard =
a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? e : I; G = p = T = null ; l = l . lastForward ( ) ; G= G || h ; this . setEndAt ( G , ! l && this . checkEndOfBlock ( ) || l && G . contains ( l ) ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _BEFORE _START ) ; T&& this . setEndAfter ( T ) } } , shrink : function ( a , b , c ) { var d = "boolean" === typeof c ? c : c && "boolean" === typeof c . shrinkOnBlockBoundary ? c . shrinkOnBlockBoundary : ! 0 , e = c && c . skipBogus ; if ( ! this . collapsed ) { a = a || CKEDITOR . SHRINK _TEXT ; var f = this . clone ( ) , m = this . startContainer , h = this . endContainer , k = this . startOffset , l = this . endOffset ,
q = c = 1 ; m&& m . type == CKEDITOR . NODE _TEXT && ( k ? k >= m . getLength ( ) ? f . setStartAfter ( m) : ( f . setStartBefore ( m ) , c = 0 ) : f . setStartBefore ( m ) ) ; h && h . type == CKEDITOR . NODE _TEXT && ( l ? l >= h . getLength ( ) ? f . setEndAfter ( h ) : ( f . setEndAfter ( h ) , q = 0 ) : f . setEndBefore ( h ) ) ; var f = new CKEDITOR . dom . walker ( f ) , u = CKEDITOR . dom . walker . bookmark ( ) , F = CKEDITOR . dom . walker . bogus ( ) ; f . evaluator = function ( b ) { return b . type == ( a == CKEDITOR . SHRINK _ELEMENT ? CKEDITOR . NODE _ELEMENT : CKEDITOR . NODE _TEXT ) } ; var H ; f . guard = function ( b , c ) { if ( e && F( b ) || u ( b ) ) return ! 0 ; if ( a == CKEDITOR . SHRINK _ELEMENT &&
b . type == CKEDITOR . NODE _TEXT || c && b . equals ( H ) || ! 1 === d && b . type == CKEDITOR . NODE _ELEMENT && b . isBlockBoundary ( ) || b . type == CKEDITOR . NODE _ELEMENT && b . hasAttribute ( "contenteditable" ) ) return ! 1 ; c || b . type != CKEDITOR . NODE _ELEMENT || ( H = b ) ; return ! 0 } ; c && ( m = f [ a == CKEDITOR . SHRINK _ELEMENT ? "lastForward" : "next" ] ( ) ) && this . setStartAt ( m , b ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _BEFORE _START ) ; q && ( f . reset ( ) , ( f = f [ a == CKEDITOR . SHRINK _ELEMENT ? "lastBackward" : "previous" ] ( ) ) && this . setEndAt ( f , b ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _AFTER _END ) ) ;
return ! ( ! c && ! q ) } } , insertNode : function ( a ) { this . optimizeBookmark ( ) ; this . trim ( ! 1 , ! 0 ) ; 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 ( ! 0 ) } , 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 ( b , c ) { b . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $empty [ b . getName ( ) ] && ( c = b . getIndex ( ) , b = b . getParent ( ) ) ; this . _setStartContainer ( b ) ; this . startOffset = c ; this . endContainer || ( this . _setEndContainer ( b ) , this . endOffset = c ) ; a ( this ) } , setEnd : function ( b , c ) { b . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $empty [ b . getName ( ) ] && ( c = b . getIndex ( ) + 1 , b = b . getParent ( ) ) ; this . _setEndContainer ( b ) ; this . endOffset = c ; this . startContainer || ( this . _setStartContainer ( b ) ,
this . startOffset = c ) ; a ( 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 ( b , c ) { switch ( c ) { case CKEDITOR . POSITION _AFTER _START : this . setStart ( b , 0 ) ; break ; case CKEDITOR . POSITION _BEFORE _END : b . type == CKEDITOR . NODE _TEXT ? this . setStart ( b , b . getLength ( ) ) : this . setStart ( b ,
b . getChildCount ( ) ) ; break ; case CKEDITOR . POSITION _BEFORE _START : this . setStartBefore ( b ) ; break ; case CKEDITOR . POSITION _AFTER _END : this . setStartAfter ( b ) } a ( this ) } , setEndAt : function ( b , c ) { switch ( c ) { case CKEDITOR . POSITION _AFTER _START : this . setEnd ( b , 0 ) ; break ; case CKEDITOR . POSITION _BEFORE _END : b . type == CKEDITOR . NODE _TEXT ? this . setEnd ( b , b . getLength ( ) ) : this . setEnd ( b , b . getChildCount ( ) ) ; break ; case CKEDITOR . POSITION _BEFORE _START : this . setEndBefore ( b ) ; break ; case CKEDITOR . POSITION _AFTER _END : this . setEndAfter ( b ) } a ( 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 ( ) ; this . insertNode ( d ) ; var e = d . getBogus ( ) ; e && e . remove ( ) ; d . appendBogus ( ) ; this . moveToBookmark ( c ) ; return d } , splitBlock : function ( a , b ) { var c = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) , d = new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) , e = c . block , f = d . block , n = null ; if ( ! c . blockLimit . equals ( d . blockLimit ) ) return null ; "br" !=
a && ( e || ( e = this . fixBlock ( ! 0 , a ) , f = ( new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) ) . block ) , f || ( f = this . fixBlock ( ! 1 , a ) ) ) ; c = e && this . checkStartOfBlock ( ) ; d = f && this . checkEndOfBlock ( ) ; this . deleteContents ( ) ; e && e . equals ( f ) && ( d ? ( n = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) , this . moveToPosition ( f , CKEDITOR . POSITION _AFTER _END ) , f = null ) : c ? ( n = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) , this . moveToPosition ( e , CKEDITOR . POSITION _BEFORE _START ) , e = null ) : ( f = this . splitElement ( e , b ||
! 1 ) , e . is ( "ul" , "ol" ) || e . appendBogus ( ) ) ) ; return { previousBlock : e , nextBlock : f , wasStartOfBlock : c , wasEndOfBlock : d , elementPath : n } } , splitElement : function ( a , b ) { if ( ! this . collapsed ) return null ; this . setEndAt ( a , CKEDITOR . POSITION _BEFORE _END ) ; var c = this . extractContents ( ! 1 , b || ! 1 ) , d = a . clone ( ! 1 , b || ! 1 ) ; c . appendTo ( d ) ; d . insertAfter ( a ) ; this . moveToPosition ( a , CKEDITOR . POSITION _AFTER _END ) ; return d } , removeEmptyBlocksAtEnd : function ( ) { function a ( d ) { return function ( a ) { return b ( a ) || c ( a ) || a . type == CKEDITOR . NODE _ELEMENT && a . isEmptyInlineRemoveable ( ) ||
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 ( ) ; this . insertNode ( d ) ; var e = d . getBogus ( ) ; e && e . remove ( ) ; d . appendBogus ( ) ; this . moveToBookmark ( c ) ; return d } , splitBlock : function ( a , b ) { var c = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) , d = new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) , e = c . block , f = d . block , m = null ; if ( ! c . blockLimit . equals ( d . blockLimit ) ) return null ; "br" !=
a && ( e || ( e = this . fixBlock ( ! 0 , a ) , f = ( new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) ) . block ) , f || ( f = this . fixBlock ( ! 1 , a ) ) ) ; c = e && this . checkStartOfBlock ( ) ; d = f && this . checkEndOfBlock ( ) ; this . deleteContents ( ) ; e && e . equals ( f ) && ( d ? ( m = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) , this . moveToPosition ( f , CKEDITOR . POSITION _AFTER _END ) , f = null ) : c ? ( m = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) , this . moveToPosition ( e , CKEDITOR . POSITION _BEFORE _START ) , e = null ) : ( f = this . splitElement ( e , b ||
! 1 ) , e . is ( "ul" , "ol" ) || e . appendBogus ( ) ) ) ; return { previousBlock : e , nextBlock : f , wasStartOfBlock : c , wasEndOfBlock : d , elementPath : m } } , splitElement : function ( a , b ) { if ( ! this . collapsed ) return null ; this . setEndAt ( a , CKEDITOR . POSITION _BEFORE _END ) ; var c = this . extractContents ( ! 1 , b || ! 1 ) , d = a . clone ( ! 1 , b || ! 1 ) ; c . appendTo ( d ) ; d . insertAfter ( a ) ; this . moveToPosition ( a , CKEDITOR . POSITION _AFTER _END ) ; return d } , 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" ) ? ! 1 : ! 0 } } var b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . dom . walker . bookmark ( ! 1 ) ; return function ( b ) { for ( var c = this . createBookmark ( ) , d = this [ b ? "endPath" : "startPath" ] ( ) , e = d . block || d . blockLimit , f ; e && ! e . equals ( d . root ) && ! e . getFirst ( a ( e ) ) ; ) f = e . getParent ( ) , this [ b ? "setEndAt" : "setStartAt" ] ( e , CKEDITOR . POSITION _AFTER _END ) , e . remove ( 1 ) , e = f ; 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 d = b == CKEDITOR . START , e = this . clone ( ) ; e . collapse ( d ) ; e [ d ? "setStartAt" : "setEndAt" ] ( a , d ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _BEFORE _END ) ; e = new CKEDITOR . dom . walker ( e ) ; e . evaluator = c ( d ) ; return e [ d ? "checkBackward" : "checkForward" ] ( ) } , checkStartOfBlock : function ( a ) { var c = this . startContainer , d = this . startOffset ; CKEDITOR . env . ie && d && c . type == CKEDITOR . NODE _TEXT && ( c = CKEDITOR . tools . ltrim ( c . substring ( 0 , d ) ) , h . test ( c ) && this . trim ( 0 , 1 ) ) ; a || this . trim ( ) ; a = new CKEDITOR . dom . elementPath ( this . startContainer ,
this . root ) ; c = this . clone ( ) ; c . collapse ( ! 0 ) ; c . setStartAt ( a . block || a . blockLimit , CKEDITOR . POSITION _AFTER _START ) ; a = new CKEDITOR . dom . walker ( c ) ; a . evaluator = b ( ) ; return a . checkBackward ( ) } , checkEndOfBlock : function ( a ) { var c = this . endContainer , d = this . endOffset ; CKEDITOR . env . ie && c . type == CKEDITOR . NODE _TEXT && ( c = CKEDITOR . tools . rtrim ( c . substring ( d ) ) , h . test ( c ) && this . trim ( 1 , 0 ) ) ; a || this . trim ( ) ; a = new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) ; c = this . clone ( ) ; c . collapse ( ! 1 ) ; c . setEndAt ( a . block || a . blockLimit , CKEDITOR . POSITION _BEFORE _END ) ;
a = new CKEDITOR . dom . walker ( c ) ; a . evaluator = b ( ) ; return a . 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 ( "false" == b . getAttribute ( "contentEditable" ) && ! b . data ( "cke-editable" ) ) return 0 ; if ( b . is ( "html" ) || "true" == b . getAttribute ( "contentEditable" ) && ( 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 ( ! 1 ) ) return this . moveToPosition ( a , b ? CKEDITOR . POSITION _AFTER _END : CKEDITOR . POSITION _BEFORE _START ) ,
! 0 ; 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 ( "false" == a . getAttribute ( "contenteditable" ) && a . is ( CKEDITOR . dtd . $block ) ) return this . setStartBefore ( a ) , this . setEndAfter ( a ) , ! 0 ; var d = a , e = c , f = void 0 ; d . type == CKEDITOR . NODE _ELEMENT && d . isEditable ( ! 1 ) && ( f = d [ b ? "getLast" : "getFirst" ] ( q ) ) ; e || f || ( f = d [ b ? "getPrevious" : "getNext" ] ( q ) ) ; a = f } return ! ! c } , moveToClosestEditablePosition : function ( a , b ) { var c , d = 0 , e , f , n = [ CKEDITOR . POSITION _AFTER _END , CKEDITOR . POSITION _BEFORE _START ] ; a ? ( c = new CKEDITOR . dom . range ( this . root ) , c . moveToPosition ( a , n [ b ? 0 : 1 ] ) ) : c = this . clone ( ) ; if ( a &&
! a . is ( CKEDITOR . dtd . $block ) ) d = 1 ; else if ( e = c [ b ? "getNextEditableNode" : "getPreviousEditableNode" ] ( ) ) d = 1 , ( f = e . type == CKEDITOR . NODE _ELEMENT ) && e . is ( CKEDITOR . dtd . $block ) && "false" == e . getAttribute ( "contenteditable" ) ? ( c . setStartAt ( e , CKEDITOR . POSITION _BEFORE _START ) , c . setEndAt ( e , CKEDITOR . POSITION _AFTER _END ) ) : ! CKEDITOR . env . needsBrFiller && f && e . is ( CKEDITOR . dom . walker . validEmptyBlockContainers ) ? ( c . setEnd ( e , 0 ) , c . collapse ( ) ) : c . moveToPosition ( e , n [ b ? 1 : 0 ] ) ; d && this . moveToRange ( c ) ; return ! ! d } , moveToElementEditStart : function ( a ) { return this . moveToElementEditablePosition ( a ) } ,
else if ( "false" == a . getAttribute ( "contenteditable" ) && a . is ( CKEDITOR . dtd . $block ) ) return this . setStartBefore ( a ) , this . setEndAfter ( a ) , ! 0 ; var d = a , e = c , f = void 0 ; d . type == CKEDITOR . NODE _ELEMENT && d . isEditable ( ! 1 ) && ( f = d [ b ? "getLast" : "getFirst" ] ( q ) ) ; e || f || ( f = d [ b ? "getPrevious" : "getNext" ] ( q ) ) ; a = f } return ! ! c } , moveToClosestEditablePosition : function ( a , b ) { var c , d = 0 , e , f , m = [ CKEDITOR . POSITION _AFTER _END , CKEDITOR . POSITION _BEFORE _START ] ; a ? ( c = new CKEDITOR . dom . range ( this . root ) , c . moveToPosition ( a , m [ b ? 0 : 1 ] ) ) : c = this . clone ( ) ; if ( a &&
! a . is ( CKEDITOR . dtd . $block ) ) d = 1 ; else if ( e = c [ b ? "getNextEditableNode" : "getPreviousEditableNode" ] ( ) ) d = 1 , ( f = e . type == CKEDITOR . NODE _ELEMENT ) && e . is ( CKEDITOR . dtd . $block ) && "false" == e . getAttribute ( "contenteditable" ) ? ( c . setStartAt ( e , CKEDITOR . POSITION _BEFORE _START ) , c . setEndAt ( e , CKEDITOR . POSITION _AFTER _END ) ) : ! CKEDITOR . env . needsBrFiller && f && e . is ( CKEDITOR . dom . walker . validEmptyBlockContainers ) ? ( c . setEnd ( e , 0 ) , c . collapse ( ) ) : c . moveToPosition ( e , m [ b ? 1 : 0 ] ) ; d && this . moveToRange ( c ) ; return ! ! d } , moveToElementEditStart : function ( a ) { return this . moveToElementEditablePosition ( a ) } ,
moveToElementEditEnd : function ( a ) { return this . moveToElementEditablePosition ( a , ! 0 ) } , 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 ( ! 1 , ! 0 ) , c = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ; 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 : f ( ) , getPreviousEditableNode : f ( 1 ) , _getTableElement : function ( a ) { a = a || { td : 1 , th : 1 , tr : 1 , tbody : 1 , thead : 1 , tfoot : 1 , table : 1 } ; var b = this . getTouchedStartNode ( ) , c = this . getTouchedEndNode ( ) , d = b . getAscendant ( "table" , ! 0 ) , c = c . getAscendant ( "table" , ! 0 ) ; return d && ! this . root . contains ( d ) ?
null : this . getEnclosedNode ( ) ? this . getEnclosedNode ( ) . getAscendant ( a , ! 0 ) : d && c && ( d . equals ( c ) || d . contains ( c ) || c . contains ( d ) ) ? b . getAscendant ( a , ! 0 ) : null } , scrollIntoView : function ( ) { var a = new CKEDITOR . dom . element . createFromHtml ( "\x3cspan\x3e\x26nbsp;\x3c/span\x3e" , this . document ) , b , c , d , e = this . clone ( ) ; e . optimize ( ) ; ( d = e . startContainer . type == CKEDITOR . NODE _TEXT ) ? ( c = e . startContainer . getText ( ) , b = e . startContainer . split ( e . startOffset ) , a . insertAfter ( e . startContainer ) ) : e . insertNode ( a ) ; a . scrollIntoView ( ) ; d && ( e . startContainer . setText ( c ) ,
@ -198,59 +198,59 @@ g.setEnd(b.getParent().$,b.getIndex()+1);b=g.getClientRects();b.widgetRect=a.get
( a = e . checkStartOfBlock ( ) , g = new CKEDITOR . dom . text ( " " ) , a ? e . startContainer . append ( g , ! 0 ) : 0 === e . startOffset ? g . insertBefore ( e . startContainer . getFirst ( ) ) : ( e = e . startContainer . getChildren ( ) . getItem ( e . startOffset - 1 ) , g . insertAfter ( e ) ) , c . setStart ( g . $ , 0 ) , c . setEnd ( g . $ , 0 ) , a = c . getClientRects ( ) , g . remove ( ) ) : e . startContainer instanceof CKEDITOR . dom . text && ( "" === e . startContainer . getText ( ) ? ( e . startContainer . setText ( " " ) , a = c . getClientRects ( ) , e . startContainer . setText ( "" ) ) : a = [ d ( e . createBookmark ( ) ) ] ) : a = [ d ( e . createBookmark ( ) ) ] ;
return a } function c ( a , b , d ) { a = CKEDITOR . tools . extend ( { } , a ) ; b && ( a = CKEDITOR . tools . getAbsoluteRectPosition ( d . document . getWindow ( ) , a ) ) ; ! a . width && ( a . width = a . right - a . left ) ; ! a . height && ( a . height = a . bottom - a . top ) ; return a } function d ( a ) { var b = a . startNode ; a = a . endNode ; var c ; b . setText ( " " ) ; b . removeStyle ( "display" ) ; a ? ( a . setText ( " " ) , a . removeStyle ( "display" ) , c = [ b . getClientRect ( ) , a . getClientRect ( ) ] , a . remove ( ) ) : c = [ b . getClientRect ( ) , b . getClientRect ( ) ] ; b . remove ( ) ; return { right : Math . max ( c [ 0 ] . right , c [ 1 ] . right ) , bottom : Math . max ( c [ 0 ] . bottom ,
c [ 1 ] . bottom ) , left : Math . min ( c [ 0 ] . left , c [ 1 ] . left ) , top : Math . min ( c [ 0 ] . top , c [ 1 ] . top ) , width : Math . abs ( c [ 0 ] . left - c [ 1 ] . left ) , height : Math . max ( c [ 0 ] . bottom , c [ 1 ] . bottom ) - Math . min ( c [ 0 ] . top , c [ 1 ] . top ) } } return void 0 !== this . document . getSelection ? function ( d ) { var e = this . root . getDocument ( ) . $ . createRange ( ) , f ; e . setStart ( this . startContainer . $ , this . startOffset ) ; e . setEnd ( this . endContainer . $ , this . endOffset ) ; f = e . getClientRects ( ) ; f = a ( f , this ) ; f . length || ( f = b ( f , e , this ) ) ; return CKEDITOR . tools . array . map ( f , function ( a ) { return c ( a ,
d , this ) } , this ) } : function ( a ) { return [ c ( d ( this . createBookmark ( ) ) , a , this ) ] } } ( ) , _setStartContainer : function ( a ) { this . startContainer = a } , _setEndContainer : function ( a ) { this . endContainer = a } , _find : function ( a , b ) { var c = this . getCommonAncestor ( ) , d = this . getBoundaryNodes ( ) , e = [ ] , f , n , h , k ; if ( c && c . find ) for ( n = c . find ( a ) , f = 0 ; f < n . count ( ) ; f ++ ) if ( c = n . getItem ( f ) , b || ! c . isReadOnly ( ) ) h = c . getPosition ( d . startNode ) & CKEDITOR . POSITION _FOLLOWING || d . startNode . equals ( c ) , k = c . getPosition ( d . endNode ) & CKEDITOR . POSITION _PRECEDING + CKEDITOR . POSITION _IS _CONTAINED ||
d , this ) } , this ) } : function ( a ) { return [ c ( d ( this . createBookmark ( ) ) , a , this ) ] } } ( ) , _setStartContainer : function ( a ) { this . startContainer = a } , _setEndContainer : function ( a ) { this . endContainer = a } , _find : function ( a , b ) { var c = this . getCommonAncestor ( ) , d = this . getBoundaryNodes ( ) , e = [ ] , f , m , h , k ; if ( c && c . find ) for ( m = c . find ( a ) , f = 0 ; f < m . count ( ) ; f ++ ) if ( c = m . getItem ( f ) , b || ! c . isReadOnly ( ) ) h = c . getPosition ( d . startNode ) & CKEDITOR . POSITION _FOLLOWING || d . startNode . equals ( c ) , k = c . getPosition ( d . endNode ) & CKEDITOR . POSITION _PRECEDING + CKEDITOR . POSITION _IS _CONTAINED ||
d . endNode . equals ( c ) , h && k && e . push ( c ) ; return e } } ; CKEDITOR . dom . range . mergeRanges = function ( a ) { return CKEDITOR . tools . array . reduce ( a , function ( a , b ) { var c = a [ a . length - 1 ] , d = ! 1 ; b = b . clone ( ) ; b . enlarge ( CKEDITOR . ENLARGE _ELEMENT ) ; if ( c ) { var e = new CKEDITOR . dom . range ( b . root ) , d = new CKEDITOR . dom . walker ( e ) , g = CKEDITOR . dom . walker . whitespaces ( ) ; e . setStart ( c . endContainer , c . endOffset ) ; e . setEnd ( b . startContainer , b . startOffset ) ; for ( e = d . next ( ) ; g ( e ) || b . endContainer . equals ( e ) ; ) e = d . next ( ) ; d = ! e } d ? c . setEnd ( b . endContainer , b . endOffset ) :
a . push ( b ) ; return 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 ) { 1 > arguments . length || ( this . range = a , this . forceBrBreak = 0 , this . enlargeBr = 1 , this . enforceRealBlocks = 0 , this . _ || ( this . _ = { } ) ) } function d ( a ) { var b = [ ] ; a . forEach ( function ( a ) { if ( "true" == a . getAttribute ( "contenteditable" ) ) return b . push ( a ) , ! 1 } , CKEDITOR . NODE _ELEMENT , ! 0 ) ; return b } function b ( a , c , e , f ) { a : { null == f && ( f = d ( e ) ) ; 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 , e , 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 : e , remaining : f . remaining , iterator : c } ; return 1 } function c ( a , b , c ) { if ( ! b ) return ! 1 ; a = a . clone ( ) ; a . collapse ( ! c ) ; return a . checkBoundaryOfElement ( b , c ? CKEDITOR . START : CKEDITOR . END ) } var f = /^[\r\n\t ]+$/ , e = CKEDITOR . dom . walker . bookmark ( ! 1 , ! 0 ) , k = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ,
h = function ( a ) { return e ( a ) && k ( a ) } , l = { dd : 1 , dt : 1 , li : 1 } ; a . prototype = { getNextParagraph : function ( a ) { var d , k , z, x , E ; a = a || "p" ; if ( this . _ . nestedEditable ) { if ( d = this . _ . nestedEditable . iterator . getNextParagraph ( a ) ) return this . activeFilter = this . _ . nestedEditable . iterator . activeFilter , d ; this . activeFilter = this . filter ; if ( b ( this , a , this . _ . nestedEditable . container , this . _ . nestedEditable . remaining ) ) return this . activeFilter = this . _ . nestedEditable . iterator . activeFilter , this . _ . nestedEditable . iterator . getNextParagraph ( a ) ; this . _ . nestedEditable =
null } if ( ! this . range . root . getDtd ( ) [ a ] ) return null ; if ( ! this . _ . started ) { var v = this . range . clone ( ) ; k = v. startPath ( ) ; var n = v . endPath ( ) , H = ! v . collapsed && c ( v , k . block ) , u = ! v . collapsed && c ( v , n . block , 1 ) ; v . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 ) ; H&& v . setStartAt ( k . block , CKEDITOR . POSITION _BEFORE _END ) ; u&& v . setEndAt ( n . block , CKEDITOR . POSITION _AFTER _START ) ; k = v . endContainer . hasAscendant ( "pre" , ! 0 ) || v . startContainer . hasAscendant ( "pre" , ! 0 ) ; v . enlarge ( this . forceBrBreak && ! k || ! this . enlargeBr ? CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : CKEDITOR . ENLARGE _BLOCK _CONTENTS ) ;
v . collapsed || ( k = new CKEDITOR . dom . walker ( v. clone ( ) ) , n = CKEDITOR . dom . walker . bookmark ( ! 0 , ! 0 ) , k . evaluator = n , this . _ . nextNode = k . next ( ) , k = new CKEDITOR . dom . walker ( v . clone ( ) ) , k . evaluator = n , k = k . previous ( ) , this . _ . lastNode = k . getNextSourceNode ( ! 0 , null , v . root ) , this . _ . lastNode && this . _ . lastNode . type == CKEDITOR . NODE _TEXT && ! CKEDITOR . tools . trim ( this . _ . lastNode . getText ( ) ) && this . _ . lastNode . getParent ( ) . isBlockBoundary ( ) && ( n = this . range . clone ( ) , n . moveToPosition ( this . _ . lastNode , CKEDITOR . POSITION _AFTER _END ) , n . checkEndOfBlock ( ) &&
( n = new CKEDITOR . dom . elementPath ( n. endContainer , n . root ) , this . _ . lastNode = ( n. block || n . blockLimit ) . getNextSourceNode ( ! 0 ) ) ) , this . _ . lastNode && v . root . contains ( this . _ . lastNode ) || ( this . _ . lastNode = this . _ . docEndMarker = v . document . createText ( "" ) , this . _ . lastNode . insertAfter ( k ) ) , v = null ) ; this . _ . started = 1 ; k = v} n = this . _ . nextNode ; v = this . _ . lastNode ; for ( this . _ . nextNode = null ; n; ) { var H = 0 , u = n . hasAscendant ( "pre" ) , I = n . type != CKEDITOR . NODE _ELEMENT , J= 0 ; if ( I ) n . type == CKEDITOR . NODE _TEXT && f . test ( n. getText ( ) ) && ( I = 0 ) ; else { var m = n . getName ( ) ;
if ( CKEDITOR . dtd . $block [ m] && "false" == n . getAttribute ( "contenteditable" ) ) { d = n ; b ( this , a , d ) ; break } else if ( n . isBlockBoundary ( this . forceBrBreak && ! u && { br : 1 } ) ) { if ( "br" == m) I = 1 ; else if ( ! k && ! n . getChildCount ( ) && "hr" != m) { d = n ; z = n . equals ( v ) ; break } k && ( k . setEndAt ( n , CKEDITOR . POSITION _BEFORE _START ) , "br" != m&& ( this . _ . nextNode = n ) ) ; H = 1 } else { if ( n . getFirst ( ) ) { k || ( k = this . range . clone ( ) , k . setStartAt ( n , CKEDITOR . POSITION _BEFORE _START ) ) ; n= n . getFirst ( ) ; continue } I = 1 } } I && ! k && ( k = this . range . clone ( ) , k . setStartAt ( n , CKEDITOR . POSITION _BEFORE _START ) ) ;
z= ( ! H || I ) && n . equals ( v ) ; if ( k && ! H ) for ( ; ! n . getNext ( h ) && ! z ; ) { m = n . getParent ( ) ; if ( m . isBlockBoundary ( this . forceBrBreak && ! u&& { br : 1 } ) ) { H = 1 ; I = 0 ; z || m . equals ( v ) ; k . setEndAt ( m , CKEDITOR . POSITION _BEFORE _END ) ; break } n= m ; I = 1 ; z = n . equals ( v ) ; J = 1 } I && k . setEndAt ( n , CKEDITOR . POSITION _AFTER _END ) ; n= this . _getNextSourceNode ( n , J , v ) ; if ( ( z = ! n ) || H && k ) break } if ( ! d ) { if ( ! k ) return this . _ . docEndMarker && this . _ . docEndMarker . remove ( ) , this . _ . nextNode = null ; d = new CKEDITOR . dom . elementPath ( k . startContainer , k . root ) ; n= d . blockLimit ; H = { div : 1 , th : 1 , td : 1 } ;
d = d . block ; ! d && n&& ! this . enforceRealBlocks && H [ n . getName ( ) ] && k . checkStartOfBlock ( ) && k . checkEndOfBlock ( ) && ! n . equals ( k . root ) ? d = n : ! d || this . enforceRealBlocks && d . is ( l ) ? ( d = this . range . document . createElement ( a ) , k . extractContents ( ) . appendTo ( d ) , d . trim ( ) , k . insertNode ( d ) , x= E = ! 0 ) : "li" != d . getName ( ) ? k . checkStartOfBlock ( ) && k . checkEndOfBlock ( ) || ( d = d . clone ( ! 1 ) , k . extractContents ( ) . appendTo ( d ) , d . trim ( ) , E= k . splitBlock ( ) , x = ! E . wasStartOfBlock , E = ! E . wasEndOfBlock , k . insertNode ( d ) ) : z || ( this . _ . nextNode = d . equals ( v ) ? null : this . _getNextSourceNode ( k . getBoundaryNodes ( ) . endNode ,
1 , v) ) } x && ( x = d . getPrevious ( ) ) && x . type == CKEDITOR . NODE _ELEMENT && ( "br" == x. getName ( ) ? x . remove ( ) : x . getLast ( ) && "br" == x . getLast ( ) . $ . nodeName . toLowerCase ( ) && x . getLast ( ) . remove ( ) ) ; E&& ( x = d . getLast ( ) ) && x . type == CKEDITOR . NODE _ELEMENT && "br" == x . getName ( ) && ( ! CKEDITOR . env . needsBrFiller || x. getPrevious ( e ) || x . getNext ( e ) ) && x . remove ( ) ; this . _ . nextNode || ( this . _ . nextNode = z|| d . equals ( v ) || ! v ? null : this . _getNextSourceNode ( d , 1 , v ) ) ; return d } , _getNextSourceNode : function ( a , b , c ) { function d ( a ) { return ! ( a . equals ( c ) || a . equals ( f ) ) } var f =
h = function ( a ) { return e ( a ) && k ( a ) } , l = { dd : 1 , dt : 1 , li : 1 } ; a . prototype = { getNextParagraph : function ( a ) { var d , k , x, z , A ; a = a || "p" ; if ( this . _ . nestedEditable ) { if ( d = this . _ . nestedEditable . iterator . getNextParagraph ( a ) ) return this . activeFilter = this . _ . nestedEditable . iterator . activeFilter , d ; this . activeFilter = this . filter ; if ( b ( this , a , this . _ . nestedEditable . container , this . _ . nestedEditable . remaining ) ) return this . activeFilter = this . _ . nestedEditable . iterator . activeFilter , this . _ . nestedEditable . iterator . getNextParagraph ( a ) ; this . _ . nestedEditable =
null } if ( ! this . range . root . getDtd ( ) [ a ] ) return null ; if ( ! this . _ . started ) { var t = this . range . clone ( ) ; k = t. startPath ( ) ; var m = t . endPath ( ) , M = ! t . collapsed && c ( t , k . block ) , v = ! t . collapsed && c ( t , m . block , 1 ) ; t . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 ) ; M&& t . setStartAt ( k . block , CKEDITOR . POSITION _BEFORE _END ) ; v&& t . setEndAt ( m . block , CKEDITOR . POSITION _AFTER _START ) ; k = t . endContainer . hasAscendant ( "pre" , ! 0 ) || t . startContainer . hasAscendant ( "pre" , ! 0 ) ; t . enlarge ( this . forceBrBreak && ! k || ! this . enlargeBr ? CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : CKEDITOR . ENLARGE _BLOCK _CONTENTS ) ;
t . collapsed || ( k = new CKEDITOR . dom . walker ( t. clone ( ) ) , m = CKEDITOR . dom . walker . bookmark ( ! 0 , ! 0 ) , k . evaluator = m , this . _ . nextNode = k . next ( ) , k = new CKEDITOR . dom . walker ( t . clone ( ) ) , k . evaluator = m , k = k . previous ( ) , this . _ . lastNode = k . getNextSourceNode ( ! 0 , null , t . root ) , this . _ . lastNode && this . _ . lastNode . type == CKEDITOR . NODE _TEXT && ! CKEDITOR . tools . trim ( this . _ . lastNode . getText ( ) ) && this . _ . lastNode . getParent ( ) . isBlockBoundary ( ) && ( m = this . range . clone ( ) , m . moveToPosition ( this . _ . lastNode , CKEDITOR . POSITION _AFTER _END ) , m . checkEndOfBlock ( ) &&
( m = new CKEDITOR . dom . elementPath ( m. endContainer , m . root ) , this . _ . lastNode = ( m. block || m . blockLimit ) . getNextSourceNode ( ! 0 ) ) ) , this . _ . lastNode && t . root . contains ( this . _ . lastNode ) || ( this . _ . lastNode = this . _ . docEndMarker = t . document . createText ( "" ) , this . _ . lastNode . insertAfter ( k ) ) , t = null ) ; this . _ . started = 1 ; k = t} m = this . _ . nextNode ; t = this . _ . lastNode ; for ( this . _ . nextNode = null ; m; ) { var M = 0 , v = m . hasAscendant ( "pre" ) , J = m . type != CKEDITOR . NODE _ELEMENT , E= 0 ; if ( J ) m . type == CKEDITOR . NODE _TEXT && f . test ( m. getText ( ) ) && ( J = 0 ) ; else { var u = m . getName ( ) ;
if ( CKEDITOR . dtd . $block [ u] && "false" == m . getAttribute ( "contenteditable" ) ) { d = m ; b ( this , a , d ) ; break } else if ( m . isBlockBoundary ( this . forceBrBreak && ! v && { br : 1 } ) ) { if ( "br" == u) J = 1 ; else if ( ! k && ! m . getChildCount ( ) && "hr" != u) { d = m ; x = m . equals ( t ) ; break } k && ( k . setEndAt ( m , CKEDITOR . POSITION _BEFORE _START ) , "br" != u&& ( this . _ . nextNode = m ) ) ; M = 1 } else { if ( m . getFirst ( ) ) { k || ( k = this . range . clone ( ) , k . setStartAt ( m , CKEDITOR . POSITION _BEFORE _START ) ) ; m= m . getFirst ( ) ; continue } J = 1 } } J && ! k && ( k = this . range . clone ( ) , k . setStartAt ( m , CKEDITOR . POSITION _BEFORE _START ) ) ;
x= ( ! M || J ) && m . equals ( t ) ; if ( k && ! M ) for ( ; ! m . getNext ( h ) && ! x ; ) { u = m . getParent ( ) ; if ( u . isBlockBoundary ( this . forceBrBreak && ! v&& { br : 1 } ) ) { M = 1 ; J = 0 ; x || u . equals ( t ) ; k . setEndAt ( u , CKEDITOR . POSITION _BEFORE _END ) ; break } m= u ; J = 1 ; x = m . equals ( t ) ; E = 1 } J && k . setEndAt ( m , CKEDITOR . POSITION _AFTER _END ) ; m= this . _getNextSourceNode ( m , E , t ) ; if ( ( x = ! m ) || M && k ) break } if ( ! d ) { if ( ! k ) return this . _ . docEndMarker && this . _ . docEndMarker . remove ( ) , this . _ . nextNode = null ; d = new CKEDITOR . dom . elementPath ( k . startContainer , k . root ) ; m= d . blockLimit ; M = { div : 1 , th : 1 , td : 1 } ;
d = d . block ; ! d && m&& ! this . enforceRealBlocks && M [ m . getName ( ) ] && k . checkStartOfBlock ( ) && k . checkEndOfBlock ( ) && ! m . equals ( k . root ) ? d = m : ! d || this . enforceRealBlocks && d . is ( l ) ? ( d = this . range . document . createElement ( a ) , k . extractContents ( ) . appendTo ( d ) , d . trim ( ) , k . insertNode ( d ) , z= A = ! 0 ) : "li" != d . getName ( ) ? k . checkStartOfBlock ( ) && k . checkEndOfBlock ( ) || ( d = d . clone ( ! 1 ) , k . extractContents ( ) . appendTo ( d ) , d . trim ( ) , A= k . splitBlock ( ) , z = ! A . wasStartOfBlock , A = ! A . wasEndOfBlock , k . insertNode ( d ) ) : x || ( this . _ . nextNode = d . equals ( t ) ? null : this . _getNextSourceNode ( k . getBoundaryNodes ( ) . endNode ,
1 , t) ) } z && ( z = d . getPrevious ( ) ) && z . type == CKEDITOR . NODE _ELEMENT && ( "br" == z. getName ( ) ? z . remove ( ) : z . getLast ( ) && "br" == z . getLast ( ) . $ . nodeName . toLowerCase ( ) && z . getLast ( ) . remove ( ) ) ; A&& ( z = d . getLast ( ) ) && z . type == CKEDITOR . NODE _ELEMENT && "br" == z . getName ( ) && ( ! CKEDITOR . env . needsBrFiller || z. getPrevious ( e ) || z . getNext ( e ) ) && z . remove ( ) ; this . _ . nextNode || ( this . _ . nextNode = x|| d . equals ( t ) || ! t ? null : this . _getNextSourceNode ( d , 1 , t ) ) ; return d } , _getNextSourceNode : function ( a , b , c ) { function d ( a ) { return ! ( a . equals ( c ) || a . equals ( f ) ) } var f =
this . range . root ; for ( a = a . getNextSourceNode ( b , null , d ) ; ! e ( a ) ; ) a = a . getNextSourceNode ( b , null , d ) ; return a } } ; CKEDITOR . dom . range . prototype . createIterator = function ( ) { return new a ( this ) } } ) ( ) ;
CKEDITOR . command = function ( a , d ) { this . uiItems = [ ] ; this . exec = function ( b ) { if ( this . state == CKEDITOR . TRISTATE _DISABLED || ! this . checkAllowed ( ) ) return ! 1 ; this . editorFocus && a . focus ( ) ; return ! 1 === this . fire ( "exec" ) ? ! 0 : ! 1 !== d . exec . call ( this , a , b ) } ; this . refresh = function ( a , b ) { if ( ! this . readOnly && a . readOnly ) return ! 0 ; if ( this . context && ! b . isContextFor ( this . context ) || ! this . checkAllowed ( ! 0 ) ) return this . disable ( ) , ! 0 ; this . startDisabled || this . enable ( ) ; this . modes && ! this . modes [ a . mode ] && this . disable ( ) ; return ! 1 === this . fire ( "refresh" ,
{ editor : a , path : b } ) ? ! 0 : d . refresh && ! 1 !== d . refresh . apply ( this , arguments ) } ; var b ; this . checkAllowed = function ( c ) { return c || "boolean" != typeof b ? b = a . activeFilter . checkFeature ( this ) : b } ; CKEDITOR . tools . extend ( this , d , { modes : { wysiwyg : 1 } , editorFocus : 1 , contextSensitive : ! ! d . 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 && "undefined" != typeof this . previousState ? this . previousState : CKEDITOR . TRISTATE _OFF ) } , disable : function ( ) { this . setState ( CKEDITOR . TRISTATE _DISABLED ) } , setState : function ( a ) { if ( this . state == a || a != CKEDITOR . TRISTATE _DISABLED && ! this . checkAllowed ( ) ) return ! 1 ; this . previousState = this . state ; this . state = a ; this . fire ( "state" ) ; return ! 0 } , 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 : "\x3c!DOCTYPE html\x3e" , bodyId : "" , bodyClass : "" , fullPage : ! 1 , height : 200 , contentsCss : CKEDITOR . getUrl ( "contents.css" ) , 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 , e ) { var f , g ; a = [ ] ; for ( f in b ) { g = b [ f ] ; g = "boolean" == typeof g ? { } : "function" == typeof g ? { match : g } : B ( g ) ; "$" != f . charAt ( 0 ) && ( g . elements = f ) ; c && ( g . featureName = c . toLowerCase ( ) ) ; var m= g ; m . elements = k ( m . elements , /\s+/ ) || null ; m . propertiesOnly = m . propertiesOnly || ! 0 === m . elements ; var p = /\s*,\s*/ , r = void 0 ; for ( r in Q ) { m [ r ] = k ( m [ r ] , p ) || null ; var D = m , n = S [ r ] , t = k ( m [ S [ r ] ] , p ) , h = m [ r ] , w = [ ] , G = ! 0 , O = void 0 ; t ? G = ! 1 : t = { } ; for ( O in h ) "!" == O . charAt ( 0 ) && ( O = O . slice ( 1 ) , w . push ( O ) , t [ O ] = ! 0 , G = ! 1 ) ; for ( ; O= w . pop ( ) ; ) h [ O ] =
h [ "!" + O] , delete h [ "!" + O ] ; D [ n ] = ( G ? ! 1 : t ) || null } m . match = m . match || null ; d . push ( g ) ; a . push ( g ) } b = e . elements ; e = e . generic ; var C ; c = 0 ; for ( d = a . length ; c < d ; ++ c ) { f = B ( a [ c ] ) ; g = ! 0 === f . classes || ! 0 === f . styles || ! 0 === f . attributes ; m= f ; r = n = p = void 0 ; for ( p in Q ) m [ p ] = H ( m [ p ] ) ; D = ! 0 ; for ( r in S ) { p = S [ r ] ; n = m [ p ] ; t = [ ] ; h = void 0 ; for ( h in n ) - 1 < h . indexOf ( "*" ) ? t . push ( new RegExp ( "^" + h . replace ( /\*/g , ".*" ) + "$" ) ) : t. push ( h ) ; n = t ; n . length && ( m [ p ] = n , D = ! 1 ) } m . nothingRequired = D ; m . noProperties = ! ( m . attributes || m . classes || m . styles ) ; if ( ! 0 === f . elements ||
null === f . elements ) e [ g ? "unshift" : "push" ] ( f ) ; else for ( C in m = f . elements , delete f . elements , m) if ( b [ C ] ) b [ C ] [ g ? "unshift" : "push" ] ( f ) ; else b [ C ] = [ f ] } } function d ( a , c , d , e ) { if ( ! a . match || a . match ( c ) ) if ( e || h ( a , c ) ) if ( a . propertiesOnly || ( d . valid = ! 0 ) , d . allAttributes || ( d . allAttributes = b ( a . attributes , c . attributes , d . validAttributes ) ) , d . allStyles || ( d . allStyles = b ( a . styles , c . styles , d . validStyles ) ) , ! d . allClasses ) { a = a . classes ; c = c . classes ; e = d . validClasses ; if ( a ) if ( ! 0 === a ) a = ! 0 ; else { for ( var f = 0 , g = c . length , m; f < g ; ++ f ) m = c [ f ] , e [ m ] ||
( e [ m] = a ( m ) ) ; a = ! 1 } else a = ! 1 ; d . allClasses = a } } function b ( a , b , c ) { if ( ! a ) return ! 1 ; if ( ! 0 === a ) return ! 0 ; for ( var d in b ) c [ d ] || ( c [ d ] = a ( d ) ) ; return ! 1 } function c ( a , b , c ) { if ( ! a . match || a . match ( b ) ) { if ( a . noProperties ) return ! 1 ; 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 = ! 1 , e = ! 0 === a , g = b . length ; g -- ; ) if ( e || a ( b [ g ] ) ) b . splice ( g , 1 ) , d = ! 0 ; a = d } else a = ! 1 ; c . hadInvalidClass = a || c . hadInvalidClass } } function f ( a ,
b ) { if ( ! a ) return ! 1 ; var c = ! 1 , d = ! 0 === a , e ; for ( e in b ) if ( d || a ( e ) ) delete b [ e ] , c = ! 0 ; return c } function e ( a , b , c ) { if ( a . disabled || a . customConfig && ! c || ! b ) return ! 1 ; a . _ . cachedChecks = { } ; return ! 0 } function k ( a , b ) { if ( ! a ) return ! 1 ; if ( ! 0 === a ) return a ; if ( "string" == typeof a ) return a = D ( a ) , "*" == a ? ! 0 : CKEDITOR . tools . convertArrayToObject ( a . split ( b ) ) ; if ( CKEDITOR . tools . isArray ( a ) ) return a . length ? CKEDITOR . tools . convertArrayToObject ( a ) : ! 1 ; var c = { } , d = 0 , e ; for ( e in a ) c [ e ] = a [ e ] , d ++ ; return d ? c : ! 1 } function h ( a , b ) { if ( a . nothingRequired ) return ! 0 ;
CKEDITOR . config = { customConfig : "config.js" , autoUpdateElement : ! 0 , language : "" , defaultLanguage : "en" , contentsLangDirection : "" , enterMode : CKEDITOR . ENTER _P , forceEnterMode : ! 1 , shiftEnterMode : CKEDITOR . ENTER _BR , docType : "\x3c!DOCTYPE html\x3e" , bodyId : "" , bodyClass : "" , fullPage : ! 1 , height : 200 , contentsCss : CKEDITOR . getUrl ( "contents.css" ) , extraPlugins : "" , removePlugins : "" , protectedSource : [ ] , tabIndex : 0 , useComputedState: ! 0 , width: "" , baseFloatZIndex : 1E4 , blockedKeystrokes : [ CKEDITOR . CTRL + 66 , CKEDITOR . CTRL + 73 , CKEDITOR . CTRL + 85 ] } ;
( function ( ) { function a ( a , b , c , d , e ) { var f , g ; a = [ ] ; for ( f in b ) { g = b [ f ] ; g = "boolean" == typeof g ? { } : "function" == typeof g ? { match : g } : D ( g ) ; "$" != f . charAt ( 0 ) && ( g . elements = f ) ; c && ( g . featureName = c . toLowerCase ( ) ) ; var n= g ; n . elements = k ( n . elements , /\s+/ ) || null ; n . propertiesOnly = n . propertiesOnly || ! 0 === n . elements ; var r = /\s*,\s*/ , p = void 0 ; for ( p in T ) { n [ p ] = k ( n [ p ] , r ) || null ; var B = n , m = O [ p ] , y = k ( n [ O [ p ] ] , r ) , h = n [ p ] , C = [ ] , G = ! 0 , I = void 0 ; y ? G = ! 1 : y = { } ; for ( I in h ) "!" == I . charAt ( 0 ) && ( I = I . slice ( 1 ) , C . push ( I ) , y [ I ] = ! 0 , G = ! 1 ) ; for ( ; I= C . pop ( ) ; ) h [ I ] =
h [ "!" + I] , delete h [ "!" + I ] ; B [ m ] = ( G ? ! 1 : y ) || null } n . match = n . match || null ; d . push ( g ) ; a . push ( g ) } b = e . elements ; e = e . generic ; var l ; c = 0 ; for ( d = a . length ; c < d ; ++ c ) { f = D ( a [ c ] ) ; g = ! 0 === f . classes || ! 0 === f . styles || ! 0 === f . attributes ; n= f ; p = m = r = void 0 ; for ( r in T ) n [ r ] = M ( n [ r ] ) ; B = ! 0 ; for ( p in O ) { r = O [ p ] ; m = n [ r ] ; y = [ ] ; h = void 0 ; for ( h in m ) - 1 < h . indexOf ( "*" ) ? y . push ( new RegExp ( "^" + h . replace ( /\*/g , ".*" ) + "$" ) ) : y. push ( h ) ; m = y ; m . length && ( n [ r ] = m , B = ! 1 ) } n . nothingRequired = B ; n . noProperties = ! ( n . attributes || n . classes || n . styles ) ; if ( ! 0 === f . elements ||
null === f . elements ) e [ g ? "unshift" : "push" ] ( f ) ; else for ( l in n = f . elements , delete f . elements , n) if ( b [ l ] ) b [ l ] [ g ? "unshift" : "push" ] ( f ) ; else b [ l ] = [ f ] } } function d ( a , c , d , e ) { if ( ! a . match || a . match ( c ) ) if ( e || h ( a , c ) ) if ( a . propertiesOnly || ( d . valid = ! 0 ) , d . allAttributes || ( d . allAttributes = b ( a . attributes , c . attributes , d . validAttributes ) ) , d . allStyles || ( d . allStyles = b ( a . styles , c . styles , d . validStyles ) ) , ! d . allClasses ) { a = a . classes ; c = c . classes ; e = d . validClasses ; if ( a ) if ( ! 0 === a ) a = ! 0 ; else { for ( var f = 0 , g = c . length , n; f < g ; ++ f ) n = c [ f ] , e [ n ] ||
( e [ n] = a ( n ) ) ; a = ! 1 } else a = ! 1 ; d . allClasses = a } } function b ( a , b , c ) { if ( ! a ) return ! 1 ; if ( ! 0 === a ) return ! 0 ; for ( var d in b ) c [ d ] || ( c [ d ] = a ( d ) ) ; return ! 1 } function c ( a , b , c ) { if ( ! a . match || a . match ( b ) ) { if ( a . noProperties ) return ! 1 ; 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 = ! 1 , e = ! 0 === a , g = b . length ; g -- ; ) if ( e || a ( b [ g ] ) ) b . splice ( g , 1 ) , d = ! 0 ; a = d } else a = ! 1 ; c . hadInvalidClass = a || c . hadInvalidClass } } function f ( a ,
b ) { if ( ! a ) return ! 1 ; var c = ! 1 , d = ! 0 === a , e ; for ( e in b ) if ( d || a ( e ) ) delete b [ e ] , c = ! 0 ; return c } function e ( a , b , c ) { if ( a . disabled || a . customConfig && ! c || ! b ) return ! 1 ; a . _ . cachedChecks = { } ; return ! 0 } function k ( a , b ) { if ( ! a ) return ! 1 ; if ( ! 0 === a ) return a ; if ( "string" == typeof a ) return a = B ( a ) , "*" == a ? ! 0 : CKEDITOR . tools . convertArrayToObject ( a . split ( b ) ) ; if ( CKEDITOR . tools . isArray ( a ) ) return a . length ? CKEDITOR . tools . convertArrayToObject ( a ) : ! 1 ; var c = { } , d = 0 , e ; for ( e in a ) c [ e ] = a [ e ] , d ++ ; return d ? c : ! 1 } function h ( a , b ) { if ( a . nothingRequired ) return ! 0 ;
var c , d , e , f ; if ( e = a . requiredClasses ) for ( f = b . classes , c = 0 ; c < e . length ; ++ c ) if ( d = e [ c ] , "string" == typeof d ) { if ( - 1 == CKEDITOR . tools . indexOf ( f , d ) ) return ! 1 } else if ( ! CKEDITOR . tools . checkIfAnyArrayItemMatches ( f , d ) ) return ! 1 ; return l ( b . styles , a . requiredStyles ) && l ( b . attributes , a . requiredAttributes ) } function l ( a , b ) { if ( ! b ) return ! 0 ; for ( var c = 0 , d ; c < b . length ; ++ c ) if ( d = b [ c ] , "string" == typeof d ) { if ( ! ( d in a ) ) return ! 1 } else if ( ! CKEDITOR . tools . checkIfAnyObjectPropertyMatches ( a , d ) ) return ! 1 ; return ! 0 } function q ( a ) { if ( ! a ) return { } ;
a = a . split ( /\s*,\s*/ ) . sort ( ) ; for ( var b = { } ; a . length ; ) b [ a . shift ( ) ] = "cke-test" ; return b } function g ( a ) { var b , c , d , e , f = { } , g = 1 ; for ( a = D ( a ) ; b = a . match ( t ) ; ) ( c = b [ 2 ] ) ? ( d = y( c , "styles" ) , e = y ( c , "attrs" ) , c = y ( c , "classes" ) ) : d = e = c = null , f [ "$" + g ++ ] = { elements : b [ 1 ] , classes : c , styles : d , attributes : e } , a = a . slice ( b [ 0 ] . length ) ; return f } function y ( a , b ) { var c = a . match ( O[ b ] ) ; return c ? D ( c [ 1 ] ) : null } function z ( a ) { var b = a . styleBackup = a . attributes . style , c = a . classBackup = a . attributes [ "class" ] ; a . styles || ( a . styles = CKEDITOR . tools . parseCssText ( b ||
"" , 1 ) ) ; a . classes || ( a . classes = c ? c . split ( /\s+/ ) : [ ] ) } function x ( a , b , e , f ) { var g = 0 , r ; f . toHtml && ( b . name = b . name . replace ( N , "$1" ) ) ; if ( f . doCallbacks && a . elementCallbacks ) { a : { r = a . elementCallbacks ; for ( var t= 0 , D = r . length , k ; t < D ; ++ t ) if ( k = r [ t ] ( b ) ) { r = k ; break a } r = void 0 } if ( r ) return r } if ( f . doTransform && ( r = a . _ . transformations [ b . name ] ) ) { z( b ) ; for ( t = 0 ; t < r . length ; ++ t ) m ( a , b , r [ t ] ) ; v ( b ) } if ( f . doFilter ) { a : { t= b . name ; D = a . _ ; a = D . allowedRules . elements [ t ] ; r = D . allowedRules . generic ; t = D . disallowedRules . elements [ t ] ; D = D . disallowedRules . generic ;
k= f . skipRequired ; var h = { valid : ! 1 , validAttributes : { } , validClasses : { } , validStyles : { } , allAttributes : ! 1 , allClasses : ! 1 , allStyles : ! 1 , hadInvalidAttribute : ! 1 , hadInvalidClass : ! 1 , hadInvalidStyle : ! 1 } , w, B ; if ( a || r ) { z ( b ) ; if ( t ) for ( w = 0 , B = t . length ; w < B ; ++ w ) if ( ! 1 === c ( t [ w ] , b , h ) ) { a = null ; break a } if ( D) for ( w = 0 , B = D . length ; w < B ; ++ w ) c ( D [ w ] , b , h ) ; if ( a ) for ( w = 0 , B = a . length ; w < B ; ++ w ) d ( a [ w ] , b , h , k ) ; if ( r ) for ( w = 0 , B = r . length ; w < B ; ++ w ) d ( r [ w ] , b , h , k ) ; a = h } else a = null } if ( ! a || ! a . valid ) return e . push ( b ) , 1 ; B= a . validAttributes ; var O = a . validStyles ;
r = a . validClasses ; var t = b . attributes , G = b . styles , D= b . classes ; k = b . classBackup ; var C = b . styleBackup , A , l , K = [ ] , h = [ ] , Q = /^data-cke-/ ; w = ! 1 ; delete t . style ; delete t [ "class" ] ; delete b . classBackup ; delete b . styleBackup ; if ( ! a . allAttributes ) for ( A in t ) B [ A ] || ( Q . test ( A ) ? A == ( l = A . replace ( /^data-cke-saved-/ , "" ) ) || B[ l ] || ( delete t [ A ] , w = ! 0 ) : ( delete t [ A ] , w = ! 0 ) ) ; if ( ! a . allStyles || a . hadInvalidStyle ) { for ( A in G ) a . allStyles || O [ A ] ? K . push ( A + ":" + G [ A ] ) : w = ! 0 ; K . length && ( t . style = K . sort ( ) . join ( "; " ) ) } else C&& ( t . style = C ) ; if ( ! a . allClasses ||
a . hadInvalidClass ) { for ( A= 0 ; A < D . length ; ++ A ) ( a . allClasses || r [ D [ A ] ] ) && h . push ( D [ A ] ) ; h . length && ( t [ "class" ] = h . sort ( ) . join ( " " ) ) ; k&& h . length < k . split ( /\s+/ ) . length && ( w= ! 0 ) } else k && ( t [ "class" ] = k ) ; w && ( g = 1 ) ; if ( ! f . skipFinalValidation && ! n ( b ) ) return e . push ( b ) , 1 } f . toHtml && ( b . name = b . name . replace ( p , "cke:$1" ) ) ; return g } function E ( a ) { var b = [ ] , c ; for ( c in a ) - 1 < c . indexOf ( "*" ) && b . push ( c . replace ( /\*/g , ".*" ) ) ; return b . length ? new RegExp ( "^(?:" + b . join ( "|" ) + ")$" ) : null } function v ( a ) { var b = a . attributes , c ; delete b . style ; delete b [ "class" ] ;
if ( c = CKEDITOR . tools . writeCssText ( a . styles , ! 0 ) ) b . style = c ; a . classes . length && ( b [ "class" ] = a . classes . sort ( ) . join ( " " ) ) } function n ( a ) { switch ( a . name ) { case "a" : if ( ! ( a . children . length || a . attributes . name || a . attributes . id ) ) return ! 1 ; break ; case "img" : if ( ! a . attributes . src ) return ! 1 } return ! 0 } function H ( a ) { if ( ! a ) return ! 1 ; if ( ! 0 === a ) return ! 0 ; var b = E ( a ) ; return function ( c ) { return c in a || b && c . match ( b ) } } function u ( ) { return new CKEDITOR . htmlParser . element ( "br" ) } function I ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && ( "br" ==
a . name || r . $block [ a . name ] ) } function J ( a , b , c ) { var d = a . name ; if ( r . $empty [ d ] || ! a . children . length ) "hr" == d && "br" == b ? a . replaceWith ( u ( ) ) : ( a . parent && c . push ( { check : "it" , el : a . parent } ) , a . remove ( ) ) ; else if ( r . $block [ d ] || "tr" == d ) if ( "br" == b ) a . previous && ! I ( a . previous ) && ( b = u ( ) , b . insertBefore ( a ) ) , a . next && ! I( a . next ) && ( b = u ( ) , b . insertAfter ( a ) ) , a . replaceWithChildren ( ) ; else { var d = a . children , e ; b : { e = r [ b ] ; for ( var f = 0 , g = d . length , m ; f < g ; ++ f ) if ( m= d [ f ] , m . type == CKEDITOR . NODE _ELEMENT && ! e [ m . name ] ) { e = ! 1 ; break b } e = ! 0 } if ( e ) a . name = b , a . attributes =
{ } , c . push ( { check : "parent-down" , el : a } ) ; else { e = a . parent ; for ( var f = e . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || "body" == e . name , p , t , g = d . length ; 0 < g ; ) m = d [ -- g ] , f && ( m. type == CKEDITOR . NODE _TEXT || m . type == CKEDITOR . NODE _ELEMENT && r . $inline [ m . name ] ) ? ( p || ( p = new CKEDITOR . htmlParser . element ( b ) , p . insertAfter ( a ) , c . push ( { check : "parent-down" , el : p } ) ) , p . add ( m , 0 ) ) : ( p = null , t = r [ e . name ] || r . span , m . insertAfter ( a ) , e . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || m . type != CKEDITOR . NODE _ELEMENT || t[ m . name ] || c . push ( { check : "el-up" , el : m } ) ) ; a . remove ( ) } } else d in
{ style : 1 , script : 1 } ? a . remove ( ) : ( a . parent && c . push ( { check : "it" , el : a . parent } ) , a . replaceWithChildren ( ) ) } function m ( a , b , c ) { var d , e ; for ( d = 0 ; d < c . length ; ++ d ) if ( e = c [ d ] , ! ( e . check && ! a . check ( e . check , ! 1 ) || e . left && ! e . left ( b ) ) ) { e . right ( b , G) ; break } } function C ( a , b ) { var c = b . getDefinition ( ) , d = c . attributes , e = c . styles , f , g , m, p ; if ( a . name != c . element ) return ! 1 ; for ( f in d ) if ( "class" == f ) for ( c = d [ f ] . split ( /\s+/ ) , m = a . classes . join ( "|" ) ; p = c . pop ( ) ; ) { if ( - 1 == m. indexOf ( p ) ) return ! 1 } else if ( a . attributes [ f ] != d [ f ] ) return ! 1 ; for ( g in e ) if ( a . styles [ g ] !=
e [ g ] ) return ! 1 ; return ! 0 } function K ( a , b ) { var c , d ; "string" == typeof a ? c = a : a instanceof CKEDITOR . style ? d = a : ( c = a [ 0 ] , d = a [ 1 ] ) ; return [ { element : c , left : d , right : function ( a , c ) { c . transform ( a , b ) } } ] } function A ( a ) { return function ( b ) { return C( b , a ) } } function L ( a ) { return function ( b , c ) { c [ a ] ( b ) } } var r = CKEDITOR . dtd , B= CKEDITOR . tools . copy , D = CKEDITOR . tools . trim , w = [ "" , "p" , "br" , "div" ] ; CKEDITOR . FILTER _SKIP _TREE = 2 ; CKEDITOR . filter = function ( a , b ) { this . allowedContent = [ ] ; this . disallowedContent = [ ] ; this . elementCallbacks = null ; this . disabled =
! 1 ; this . editor = null ; this . id = CKEDITOR . tools . getNextNumber ( ) ; this . _ = { allowedRules : { elements : { } , generic : [ ] } , disallowedRules : { elements : { } , generic : [ ] } , transformations : { } , cachedTests : { } , cachedChecks : { } } ; CKEDITOR . filter . instances [ this . id ] = this ; var c = this . editor = a instanceof CKEDITOR . editor ? a : null ; if ( c && ! b ) { this . customConfig = ! 0 ; var d = c . config . allowedContent ; ! 0 === d ? this . disabled = ! 0 : ( d || ( this . customConfig = ! 1 ) , this . allow ( d , "config" , 1 ) , this . allow ( c . config . extraAllowedContent , "extra" , 1 ) , this . allow ( w [ c . enterMode ] +
" " + w [ c . shiftEnterMode ] , "default" , 1 ) , this . disallow ( c . config . disallowedContent ) ) } else this . customConfig = ! 1 , this . allow ( b || a , "default" , 1 ) } ; CKEDITOR . filter . instances = { } ; CKEDITOR . filter . prototype = { allow : function ( b , c , d ) { if ( ! e ( this , b , d ) ) return ! 1 ; var f , m ; if ( "string" == typeof b ) b = g ( b ) ; else if ( b instanceof CKEDITOR . style ) { if ( b . toAllowedContentRules ) return this . allow ( b . toAllowedContentRules ( this . editor ) , c , d ) ; f = b . getDefinition ( ) ; b = { } ; d = f . attributes ; b [ f . element ] = f = { styles : f . styles , requiredStyles : f . styles && CKEDITOR . tools . object . keys ( f . styles ) } ;
d && ( d = B ( d ) , f . classes = d [ "class" ] ? d [ "class" ] . split ( /\s+/ ) : null , f . requiredClasses = f . classes , delete d [ "class" ] , f . attributes = d , f . requiredAttributes = d && CKEDITOR . tools . object . keys ( d ) ) } else if ( CKEDITOR . tools . isArray ( b ) ) { for ( f = 0 ; f < b . length ; ++ f ) m = this . allow ( b [ f ] , c , d ) ; return m } a ( this , b , c , this . allowedContent , this . _ . allowedRules ) ; return ! 0 } , applyTo : function ( a , b , c , d ) { if ( this . disabled ) return ! 1 ; var e = this , f = [ ] , g = this . editor && this . editor . config . protectedSource , m, p = ! 1 , t = { doFilter : ! c , doTransform : ! 0 , doCallbacks : ! 0 , toHtml : b } ;
a . forEach ( function ( a ) { if ( a . type == CKEDITOR . NODE _ELEMENT ) { if ( "off" == a . attributes [ "data-cke-filter" ] ) return ! 1 ; if ( ! b || "span" != a . name || ! ~ CKEDITOR . tools . object . keys ( a . attributes ) . join ( "|" ) . indexOf ( "data-cke-" ) ) if ( m= x ( e , a , f , t ) , m & 1 ) p = ! 0 ; else if ( m & 2 ) return ! 1 } 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 r , D , n ; if ( g ) for ( D = 0 ; D < g . length ; ++ D ) if ( ( n = d . match ( g [ D ] ) ) && n [ 0 ] . length == d . length ) { c =
! 0 ; break a } d = CKEDITOR . htmlParser . fragment . fromHtml ( d ) ; 1 == d . children . length && ( r = d . children [ 0 ] ) . type == CKEDITOR . NODE _ELEMENT && x( e , r , c , t ) ; c = ! c . length } c || f . push ( a ) } } , null , ! 0 ) ; f . length && ( p = ! 0 ) ; var D ; a = [ ] ; d = w [ d || ( this . editor ? this . editor . enterMode : CKEDITOR . ENTER _P ) ] ; for ( var k ; c = f . pop ( ) ; ) c . type == CKEDITOR . NODE _ELEMENT ? J ( c , d , a ) : c . remove ( ) ; for ( ; D = a . pop ( ) ; ) if ( c = D . el , c . parent ) switch ( k = r [ c . parent . name ] || r . span , D . check ) { case "it" : r . $removeEmpty [ c . name ] && ! c . children . length ? J( c , d , a ) : n ( c ) || J ( c , d , a ) ; break ; case "el-up" : c . parent . type ==
CKEDITOR . NODE _DOCUMENT _FRAGMENT || k[ c . name ] || J ( c , d , a ) ; break ; case "parent-down" : c . parent . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || k[ c . name ] || J ( c . parent , d , a ) } return p } , checkFeature : function ( a ) { if ( this . disabled || ! a ) return ! 0 ; a . toFeature && ( a = a . toFeature ( this . editor ) ) ; return ! a . requiredContent || this . check ( a . requiredContent ) } , disable : function ( ) { this . disabled = ! 0 } , disallow : function ( b ) { if ( ! e ( this , b , ! 0 ) ) return ! 1 ; "string" == typeof b && ( b = g ( b ) ) ; a ( this , b , null , this . disallowedContent , this . _ . disallowedRules ) ; return ! 0 } ,
addContentForms : function ( a ) { if ( ! this . disabled && a ) { var b , c , d = [ ] , e ; for ( b = 0 ; b < a . length && ! e ; ++ b ) c = a [ b ] , ( "string" == typeof c || c instanceof CKEDITOR . style ) && this . check ( c ) && ( e = c ) ; if ( e ) { for ( b = 0 ; b < a . length ; ++ b ) d . push ( K ( a [ b ] , e ) ) ; this . addTransformations ( d ) } } } , addElementCallback : function ( a ) { this . elementCallbacks || ( this . elementCallbacks = [ ] ) ; this . elementCallbacks . push ( a ) } , addFeature : function ( a ) { if ( this . disabled || ! a ) return ! 0 ; 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 ) : ! 0 } , addTransformations : function ( a ) { var b , c ; if ( ! this . disabled && a ) { var d = this . _ . transformations , e ; for ( e = 0 ; e < a . length ; ++ e ) { b = a [ e ] ; var f = void 0 , g = void 0 , m= void 0 , p = void 0 , t = void 0 , r = void 0 ; c = [ ] ; for ( g = 0 ; g < b . length ; ++ g ) m = b [ g ] , "string" == typeof m? ( m = m . split ( /\s*:\s*/ ) , p = m [ 0 ] , t = null , r = m [ 1 ] ) : ( p = m . check , t = m . left , r = m . right ) , f || ( f = m , f = f . element ? f . element : p? p . match ( /^([a-z0-9]+)/i ) [ 0 ] :
f . left . getDefinition ( ) . element ) , t instanceof CKEDITOR . style && ( t = A ( t ) ) , c . push ( { check : p== f ? null : p , left : t , right : "string" == typeof r ? L ( r ) : r } ) ; b = f ; d [ b ] || ( d [ b ] = [ ] ) ; d [ b ] . push ( c ) } } } , check : function ( a , b , c ) { if ( this . disabled ) return ! 0 ; if ( CKEDITOR . tools . isArray ( a ) ) { for ( var d = a . length ; d -- ; ) if ( this . check ( a [ d ] , b , c ) ) return ! 0 ; return ! 1 } var e , f ; if ( "string" == typeof a ) { f = a + "\x3c" + ( ! 1 === b ? "0" : "1" ) + ( c ? "1" : "0" ) + "\x3e" ; if ( f in this . _ . cachedChecks ) return this . _ . cachedChecks [ f ] ; e = g ( a ) . $1 ; var p = e . styles , d = e . classes ; e . name = e . elements ;
e . classes = d = d ? d . split ( /\s*,\s*/ ) : [ ] ; e . styles = q ( p ) ; e . attributes = q ( e . attributes ) ; e . children = [ ] ; d . length && ( e . attributes [ "class" ] = d . join ( " " ) ) ; p && ( e . attributes . style = CKEDITOR . tools . writeCssText ( e . styles ) ) } else e = a . getDefinition ( ) , p = e . styles , d = e . attributes || { } , p && ! CKEDITOR . tools . isEmpty ( p) ? ( p = B ( p ) , d . style = CKEDITOR . tools . writeCssText ( p, ! 0 ) ) : p = { } , e = { name : e . element , attributes : d , classes : d [ "class" ] ? d [ "class" ] . split ( /\s+/ ) : [ ] , styles : p, children : [ ] } ; var p = CKEDITOR . tools . clone ( e ) , t= [ ] , r ; if ( ! 1 !== b && ( r = this . _ . transformations [ e . name ] ) ) { for ( d =
0 ; d < r. length ; ++ d ) m ( this , e , r [ d ] ) ; v ( e ) } x ( this , p , t , { doFilter : ! 0 , doTransform : ! 1 !== b , skipRequired : ! c , skipFinalValidation : ! c } ) ; 0 < t . length ? c = ! 1 : ( ( b = e . attributes [ "class" ] ) && ( e . attributes [ "class" ] = e . attributes [ "class" ] . split ( " " ) . sort ( ) . join ( " " ) ) , c = CKEDITOR . tools . objectCompare ( e . attributes , p . attributes , ! 0 ) , b && ( e . attributes [ "class" ] = b ) ) ; "string" == typeof a && ( this . _ . cachedChecks [ f ] = c ) ; return c } , 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 e = a . slice ( ) , f ; if ( this . check ( w [ c ] ) ) return c ; for ( d || ( e = e . reverse ( ) ) ; f = e . pop ( ) ; ) if ( this . check ( f ) ) return b [ f ] ; return CKEDITOR . ENTER _BR } } ( ) , clone : function ( ) { var a = new CKEDITOR . filter , b = CKEDITOR . tools . clone ; a . allowedContent = b ( this . allowedContent ) ; a . _ . allowedRules = b ( this . _ . allowedRules ) ; a . disallowedContent = b ( this . disallowedContent ) ; a . _ . disallowedRules = b ( this . _ . disallowedRules ) ; a . _ . transformations = b ( this . _ . transformations ) ; a . disabled = this . disabled ; a . editor = this . editor ; return a } , destroy : function ( ) { delete CKEDITOR . filter . instances [ this . id ] ;
delete this . _ ; delete this . allowedContent ; delete this . disallowedContent } } ; var Q = { styles : 1 , attributes : 1 , classes : 1 } , S = { styles : "requiredStyles" , attributes : "requiredAttributes" , classes : "requiredClasses" } , t = /^([a-z0-9\-*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i , O = { styles : /{([^}]+)}/ , attrs : /\[([^\]]+)\]/ , classes : /\(([^\)]+)\)/ } , N = /^cke:(object|embed|param)$/ , p= /^(object|embed|param)$/ , G ; G = CKEDITOR . filter . transformationsTools = { sizeToStyle : function ( a ) { this . lengthToStyle ( a ,
a = a . split ( /\s*,\s*/ ) . sort ( ) ; for ( var b = { } ; a . length ; ) b [ a . shift ( ) ] = "cke-test" ; return b } function g ( a ) { var b , c , d , e , f = { } , g = 1 ; for ( a = B ( a ) ; b = a . match ( p ) ; ) ( c = b [ 2 ] ) ? ( d = w( c , "styles" ) , e = w ( c , "attrs" ) , c = w ( c , "classes" ) ) : d = e = c = null , f [ "$" + g ++ ] = { elements : b [ 1 ] , classes : c , styles : d , attributes : e } , a = a . slice ( b [ 0 ] . length ) ; return f } function w ( a , b ) { var c = a . match ( I[ b ] ) ; return c ? B ( c [ 1 ] ) : null } function x ( a ) { var b = a . styleBackup = a . attributes . style , c = a . classBackup = a . attributes [ "class" ] ; a . styles || ( a . styles = CKEDITOR . tools . parseCssText ( b ||
"" , 1 ) ) ; a . classes || ( a . classes = c ? c . split ( /\s+/ ) : [ ] ) } function z ( a , b , e , f ) { var g = 0 , r ; f . toHtml && ( b . name = b . name . replace ( N , "$1" ) ) ; if ( f . doCallbacks && a . elementCallbacks ) { a : { r = a . elementCallbacks ; for ( var p= 0 , B = r . length , D ; p < B ; ++ p ) if ( D = r [ p ] ( b ) ) { r = D ; break a } r = void 0 } if ( r ) return r } if ( f . doTransform && ( r = a . _ . transformations [ b . name ] ) ) { x( b ) ; for ( p = 0 ; p < r . length ; ++ p ) u ( a , b , r [ p ] ) ; t ( b ) } if ( f . doFilter ) { a : { p= b . name ; B = a . _ ; a = B . allowedRules . elements [ p ] ; r = B . allowedRules . generic ; p = B . disallowedRules . elements [ p ] ; B = B . disallowedRules . generic ;
D= f . skipRequired ; var k = { valid : ! 1 , validAttributes : { } , validClasses : { } , validStyles : { } , allAttributes : ! 1 , allClasses : ! 1 , allStyles : ! 1 , hadInvalidAttribute : ! 1 , hadInvalidClass : ! 1 , hadInvalidStyle : ! 1 } , y, h ; if ( a || r ) { x ( b ) ; if ( p ) for ( y = 0 , h = p . length ; y < h ; ++ y ) if ( ! 1 === c ( p [ y ] , b , k ) ) { a = null ; break a } if ( B) for ( y = 0 , h = B . length ; y < h ; ++ y ) c ( B [ y ] , b , k ) ; if ( a ) for ( y = 0 , h = a . length ; y < h ; ++ y ) d ( a [ y ] , b , k , D ) ; if ( r ) for ( y = 0 , h = r . length ; y < h ; ++ y ) d ( r [ y ] , b , k , D ) ; a = k } else a = null } if ( ! a || ! a . valid ) return e . push ( b ) , 1 ; h= a . validAttributes ; var C = a . validStyles ;
r = a . validClasses ; var p = b . attributes , G = b . styles , B= b . classes ; D = b . classBackup ; var O = b . styleBackup , I , l , K = [ ] , k = [ ] , T = /^data-cke-/ ; y = ! 1 ; delete p . style ; delete p [ "class" ] ; delete b . classBackup ; delete b . styleBackup ; if ( ! a . allAttributes ) for ( I in p ) h [ I ] || ( T . test ( I ) ? I == ( l = I . replace ( /^data-cke-saved-/ , "" ) ) || h[ l ] || ( delete p [ I ] , y = ! 0 ) : ( delete p [ I ] , y = ! 0 ) ) ; if ( ! a . allStyles || a . hadInvalidStyle ) { for ( I in G ) a . allStyles || C [ I ] ? K . push ( I + ":" + G [ I ] ) : y = ! 0 ; K . length && ( p . style = K . sort ( ) . join ( "; " ) ) } else O&& ( p . style = O ) ; if ( ! a . allClasses ||
a . hadInvalidClass ) { for ( I= 0 ; I < B . length ; ++ I ) ( a . allClasses || r [ B [ I ] ] ) && k . push ( B [ I ] ) ; k . length && ( p [ "class" ] = k . sort ( ) . join ( " " ) ) ; D&& k . length < D . split ( /\s+/ ) . length && ( y= ! 0 ) } else D && ( p [ "class" ] = D ) ; y && ( g = 1 ) ; if ( ! f . skipFinalValidation && ! m ( b ) ) return e . push ( b ) , 1 } f . toHtml && ( b . name = b . name . replace ( n , "cke:$1" ) ) ; return g } function A ( a ) { var b = [ ] , c ; for ( c in a ) - 1 < c . indexOf ( "*" ) && b . push ( c . replace ( /\*/g , ".*" ) ) ; return b . length ? new RegExp ( "^(?:" + b . join ( "|" ) + ")$" ) : null } function t ( a ) { var b = a . attributes , c ; delete b . style ; delete b [ "class" ] ;
if ( c = CKEDITOR . tools . writeCssText ( a . styles , ! 0 ) ) b . style = c ; a . classes . length && ( b [ "class" ] = a . classes . sort ( ) . join ( " " ) ) } function m ( a ) { switch ( a . name ) { case "a" : if ( ! ( a . children . length || a . attributes . name || a . attributes . id ) ) return ! 1 ; break ; case "img" : if ( ! a . attributes . src ) return ! 1 } return ! 0 } function M ( a ) { if ( ! a ) return ! 1 ; if ( ! 0 === a ) return ! 0 ; var b = A ( a ) ; return function ( c ) { return c in a || b && c . match ( b ) } } function v ( ) { return new CKEDITOR . htmlParser . element ( "br" ) } function J ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && ( "br" ==
a . name || r . $block [ a . name ] ) } function E ( a , b , c ) { var d = a . name ; if ( r . $empty [ d ] || ! a . children . length ) "hr" == d && "br" == b ? a . replaceWith ( v ( ) ) : ( a . parent && c . push ( { check : "it" , el : a . parent } ) , a . remove ( ) ) ; else if ( r . $block [ d ] || "tr" == d ) if ( "br" == b ) a . previous && ! J ( a . previous ) && ( b = v ( ) , b . insertBefore ( a ) ) , a . next && ! J( a . next ) && ( b = v ( ) , b . insertAfter ( a ) ) , a . replaceWithChildren ( ) ; else { var d = a . children , e ; b : { e = r [ b ] ; for ( var f = 0 , g = d . length , n ; f < g ; ++ f ) if ( n= d [ f ] , n . type == CKEDITOR . NODE _ELEMENT && ! e [ n . name ] ) { e = ! 1 ; break b } e = ! 0 } if ( e ) a . name = b , a . attributes =
{ } , c . push ( { check : "parent-down" , el : a } ) ; else { e = a . parent ; for ( var f = e . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || "body" == e . name , p , B , g = d . length ; 0 < g ; ) n = d [ -- g ] , f && ( n. type == CKEDITOR . NODE _TEXT || n . type == CKEDITOR . NODE _ELEMENT && r . $inline [ n . name ] ) ? ( p || ( p = new CKEDITOR . htmlParser . element ( b ) , p . insertAfter ( a ) , c . push ( { check : "parent-down" , el : p } ) ) , p . add ( n , 0 ) ) : ( p = null , B = r [ e . name ] || r . span , n . insertAfter ( a ) , e . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || n . type != CKEDITOR . NODE _ELEMENT || B[ n . name ] || c . push ( { check : "el-up" , el : n } ) ) ; a . remove ( ) } } else d in
{ style : 1 , script : 1 } ? a . remove ( ) : ( a . parent && c . push ( { check : "it" , el : a . parent } ) , a . replaceWithChildren ( ) ) } function u ( a , b , c ) { var d , e ; for ( d = 0 ; d < c . length ; ++ d ) if ( e = c [ d ] , ! ( e . check && ! a . check ( e . check , ! 1 ) || e . left && ! e . left ( b ) ) ) { e . right ( b , C) ; break } } function F ( a , b ) { var c = b . getDefinition ( ) , d = c . attributes , e = c . styles , f , g , n, r ; if ( a . name != c . element ) return ! 1 ; for ( f in d ) if ( "class" == f ) for ( c = d [ f ] . split ( /\s+/ ) , n = a . classes . join ( "|" ) ; r = c . pop ( ) ; ) { if ( - 1 == n. indexOf ( r ) ) return ! 1 } else if ( a . attributes [ f ] != d [ f ] ) return ! 1 ; for ( g in e ) if ( a . styles [ g ] !=
e [ g ] ) return ! 1 ; return ! 0 } function H ( a , b ) { var c , d ; "string" == typeof a ? c = a : a instanceof CKEDITOR . style ? d = a : ( c = a [ 0 ] , d = a [ 1 ] ) ; return [ { element : c , left : d , right : function ( a , c ) { c . transform ( a , b ) } } ] } function y ( a ) { return function ( b ) { return F( b , a ) } } function K ( a ) { return function ( b , c ) { c [ a ] ( b ) } } var r = CKEDITOR . dtd , D= CKEDITOR . tools . copy , B = CKEDITOR . tools . trim , G = [ "" , "p" , "br" , "div" ] ; CKEDITOR . FILTER _SKIP _TREE = 2 ; CKEDITOR . filter = function ( a , b ) { this . allowedContent = [ ] ; this . disallowedContent = [ ] ; this . elementCallbacks = null ; this . disabled =
! 1 ; this . editor = null ; this . id = CKEDITOR . tools . getNextNumber ( ) ; this . _ = { allowedRules : { elements : { } , generic : [ ] } , disallowedRules : { elements : { } , generic : [ ] } , transformations : { } , cachedTests : { } , cachedChecks : { } } ; CKEDITOR . filter . instances [ this . id ] = this ; var c = this . editor = a instanceof CKEDITOR . editor ? a : null ; if ( c && ! b ) { this . customConfig = ! 0 ; var d = c . config . allowedContent ; ! 0 === d ? this . disabled = ! 0 : ( d || ( this . customConfig = ! 1 ) , this . allow ( d , "config" , 1 ) , this . allow ( c . config . extraAllowedContent , "extra" , 1 ) , this . allow ( G [ c . enterMode ] +
" " + G [ c . shiftEnterMode ] , "default" , 1 ) , this . disallow ( c . config . disallowedContent ) ) } else this . customConfig = ! 1 , this . allow ( b || a , "default" , 1 ) } ; CKEDITOR . filter . instances = { } ; CKEDITOR . filter . prototype = { allow : function ( b , c , d ) { if ( ! e ( this , b , d ) ) return ! 1 ; var f , n ; if ( "string" == typeof b ) b = g ( b ) ; else if ( b instanceof CKEDITOR . style ) { if ( b . toAllowedContentRules ) return this . allow ( b . toAllowedContentRules ( this . editor ) , c , d ) ; f = b . getDefinition ( ) ; b = { } ; d = f . attributes ; b [ f . element ] = f = { styles : f . styles , requiredStyles : f . styles && CKEDITOR . tools . object . keys ( f . styles ) } ;
d && ( d = D ( d ) , f . classes = d [ "class" ] ? d [ "class" ] . split ( /\s+/ ) : null , f . requiredClasses = f . classes , delete d [ "class" ] , f . attributes = d , f . requiredAttributes = d && CKEDITOR . tools . object . keys ( d ) ) } else if ( CKEDITOR . tools . isArray ( b ) ) { for ( f = 0 ; f < b . length ; ++ f ) n = this . allow ( b [ f ] , c , d ) ; return n } a ( this , b , c , this . allowedContent , this . _ . allowedRules ) ; return ! 0 } , applyTo : function ( a , b , c , d ) { if ( this . disabled ) return ! 1 ; var e = this , f = [ ] , g = this . editor && this . editor . config . protectedSource , n, p = ! 1 , B = { doFilter : ! c , doTransform : ! 0 , doCallbacks : ! 0 , toHtml : b } ;
a . forEach ( function ( a ) { if ( a . type == CKEDITOR . NODE _ELEMENT ) { if ( "off" == a . attributes [ "data-cke-filter" ] ) return ! 1 ; if ( ! b || "span" != a . name || ! ~ CKEDITOR . tools . object . keys ( a . attributes ) . join ( "|" ) . indexOf ( "data-cke-" ) ) if ( n= z ( e , a , f , B ) , n & 1 ) p = ! 0 ; else if ( n & 2 ) return ! 1 } 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 r , D , m ; if ( g ) for ( D = 0 ; D < g . length ; ++ D ) if ( ( m = d . match ( g [ D ] ) ) && m [ 0 ] . length == d . length ) { c =
! 0 ; break a } d = CKEDITOR . htmlParser . fragment . fromHtml ( d ) ; 1 == d . children . length && ( r = d . children [ 0 ] ) . type == CKEDITOR . NODE _ELEMENT && z( e , r , c , B ) ; c = ! c . length } c || f . push ( a ) } } , null , ! 0 ) ; f . length && ( p = ! 0 ) ; var D ; a = [ ] ; d = G [ d || ( this . editor ? this . editor . enterMode : CKEDITOR . ENTER _P ) ] ; for ( var y ; c = f . pop ( ) ; ) c . type == CKEDITOR . NODE _ELEMENT ? E ( c , d , a ) : c . remove ( ) ; for ( ; D = a . pop ( ) ; ) if ( c = D . el , c . parent ) switch ( y = r [ c . parent . name ] || r . span , D . check ) { case "it" : r . $removeEmpty [ c . name ] && ! c . children . length ? E( c , d , a ) : m ( c ) || E ( c , d , a ) ; break ; case "el-up" : c . parent . type ==
CKEDITOR . NODE _DOCUMENT _FRAGMENT || y[ c . name ] || E ( c , d , a ) ; break ; case "parent-down" : c . parent . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || y[ c . name ] || E ( c . parent , d , a ) } return p } , checkFeature : function ( a ) { if ( this . disabled || ! a ) return ! 0 ; a . toFeature && ( a = a . toFeature ( this . editor ) ) ; return ! a . requiredContent || this . check ( a . requiredContent ) } , disable : function ( ) { this . disabled = ! 0 } , disallow : function ( b ) { if ( ! e ( this , b , ! 0 ) ) return ! 1 ; "string" == typeof b && ( b = g ( b ) ) ; a ( this , b , null , this . disallowedContent , this . _ . disallowedRules ) ; return ! 0 } ,
addContentForms : function ( a ) { if ( ! this . disabled && a ) { var b , c , d = [ ] , e ; for ( b = 0 ; b < a . length && ! e ; ++ b ) c = a [ b ] , ( "string" == typeof c || c instanceof CKEDITOR . style ) && this . check ( c ) && ( e = c ) ; if ( e ) { for ( b = 0 ; b < a . length ; ++ b ) d . push ( H ( a [ b ] , e ) ) ; this . addTransformations ( d ) } } } , addElementCallback : function ( a ) { this . elementCallbacks || ( this . elementCallbacks = [ ] ) ; this . elementCallbacks . push ( a ) } , addFeature : function ( a ) { if ( this . disabled || ! a ) return ! 0 ; 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 ) : ! 0 } , addTransformations : function ( a ) { var b , c ; if ( ! this . disabled && a ) { var d = this . _ . transformations , e ; for ( e = 0 ; e < a . length ; ++ e ) { b = a [ e ] ; var f = void 0 , g = void 0 , n= void 0 , r = void 0 , p = void 0 , B = void 0 ; c = [ ] ; for ( g = 0 ; g < b . length ; ++ g ) n = b [ g ] , "string" == typeof n? ( n = n . split ( /\s*:\s*/ ) , r = n [ 0 ] , p = null , B = n [ 1 ] ) : ( r = n . check , p = n . left , B = n . right ) , f || ( f = n , f = f . element ? f . element : r? r . match ( /^([a-z0-9]+)/i ) [ 0 ] :
f . left . getDefinition ( ) . element ) , p instanceof CKEDITOR . style && ( p = y ( p ) ) , c . push ( { check : r== f ? null : r , left : p , right : "string" == typeof B ? K ( B ) : B } ) ; b = f ; d [ b ] || ( d [ b ] = [ ] ) ; d [ b ] . push ( c ) } } } , check : function ( a , b , c ) { if ( this . disabled ) return ! 0 ; if ( CKEDITOR . tools . isArray ( a ) ) { for ( var d = a . length ; d -- ; ) if ( this . check ( a [ d ] , b , c ) ) return ! 0 ; return ! 1 } var e , f ; if ( "string" == typeof a ) { f = a + "\x3c" + ( ! 1 === b ? "0" : "1" ) + ( c ? "1" : "0" ) + "\x3e" ; if ( f in this . _ . cachedChecks ) return this . _ . cachedChecks [ f ] ; e = g ( a ) . $1 ; var n = e . styles , d = e . classes ; e . name = e . elements ;
e . classes = d = d ? d . split ( /\s*,\s*/ ) : [ ] ; e . styles = q ( n ) ; e . attributes = q ( e . attributes ) ; e . children = [ ] ; d . length && ( e . attributes [ "class" ] = d . join ( " " ) ) ; n && ( e . attributes . style = CKEDITOR . tools . writeCssText ( e . styles ) ) } else e = a . getDefinition ( ) , n = e . styles , d = e . attributes || { } , n && ! CKEDITOR . tools . isEmpty ( n) ? ( n = D ( n ) , d . style = CKEDITOR . tools . writeCssText ( n, ! 0 ) ) : n = { } , e = { name : e . element , attributes : d , classes : d [ "class" ] ? d [ "class" ] . split ( /\s+/ ) : [ ] , styles : n, children : [ ] } ; var n = CKEDITOR . tools . clone ( e ) , r= [ ] , p ; if ( ! 1 !== b && ( p = this . _ . transformations [ e . name ] ) ) { for ( d =
0 ; d < p. length ; ++ d ) u ( this , e , p [ d ] ) ; t ( e ) } z ( this , n , r , { doFilter : ! 0 , doTransform : ! 1 !== b , skipRequired : ! c , skipFinalValidation : ! c } ) ; 0 < r . length ? c = ! 1 : ( ( b = e . attributes [ "class" ] ) && ( e . attributes [ "class" ] = e . attributes [ "class" ] . split ( " " ) . sort ( ) . join ( " " ) ) , c = CKEDITOR . tools . objectCompare ( e . attributes , n . attributes , ! 0 ) , b && ( e . attributes [ "class" ] = b ) ) ; "string" == typeof a && ( this . _ . cachedChecks [ f ] = c ) ; return c } , 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 e = a . slice ( ) , f ; if ( this . check ( G [ c ] ) ) return c ; for ( d || ( e = e . reverse ( ) ) ; f = e . pop ( ) ; ) if ( this . check ( f ) ) return b [ f ] ; return CKEDITOR . ENTER _BR } } ( ) , clone : function ( ) { var a = new CKEDITOR . filter , b = CKEDITOR . tools . clone ; a . allowedContent = b ( this . allowedContent ) ; a . _ . allowedRules = b ( this . _ . allowedRules ) ; a . disallowedContent = b ( this . disallowedContent ) ; a . _ . disallowedRules = b ( this . _ . disallowedRules ) ; a . _ . transformations = b ( this . _ . transformations ) ; a . disabled = this . disabled ; a . editor = this . editor ; return a } , destroy : function ( ) { delete CKEDITOR . filter . instances [ this . id ] ;
delete this . _ ; delete this . allowedContent ; delete this . disallowedContent } } ; var T = { styles : 1 , attributes : 1 , classes : 1 } , O = { styles : "requiredStyles" , attributes : "requiredAttributes" , classes : "requiredClasses" } , p = /^([a-z0-9\-*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i , I = { styles : /{([^}]+)}/ , attrs : /\[([^\]]+)\]/ , classes : /\(([^\)]+)\)/ } , N = /^cke:(object|embed|param)$/ , n= /^(object|embed|param)$/ , C ; C = 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 ] ; d && ( /^\d+$/ . test ( 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 ] , e = d && d . match ( /^(\d+)(?:\.\d*)?px$/ ) ; e ? a . attributes [ c ] = e [ 1 ] : "cke-test" == d && ( a . attributes [ c ] = "cke-test" ) } delete a . styles [ b ] } , alignmentToStyle : function ( a ) { if ( ! ( "float" in
a . styles ) ) { var b = a . attributes . align ; if ( "left" == b || "right" == b ) a . styles [ "float" ] = b } delete a . attributes . align } , alignmentToAttribute : function ( a ) { if ( ! ( "align" in a . attributes ) ) { var b = a . styles [ "float" ] ; if ( "left" == b || "right" == b ) a . attributes . align = b } delete a . styles [ "float" ] } , splitBorderShorthand : function ( a ) { if ( a . styles . border ) { var b = CKEDITOR . tools . style . parse . border ( a . styles . border ) ; b . color && ( a . styles [ "border-color" ] = b . color ) ; b . style && ( a . styles [ "border-style" ] = b . style ) ; b . width && ( a . styles [ "border-width" ] = b . width ) ;
delete a . styles . border } } , listTypeToStyle : function ( a ) { if ( a . attributes . type ) switch ( a . attributes . type ) { case "a" : a . styles [ "list-style-type" ] = "lower-alpha" ; break ; case "A" : a . styles [ "list-style-type" ] = "upper-alpha" ; break ; case "i" : a . styles [ "list-style-type" ] = "lower-roman" ; break ; case "I" : a . styles [ "list-style-type" ] = "upper-roman" ; break ; case "1" : a . styles [ "list-style-type" ] = "decimal" ; break ; default : a . styles [ "list-style-type" ] = a . attributes . type } } , splitMarginShorthand : function ( a ) { function b ( d ) { a . styles [ "margin-top" ] =
c [ d [ 0 ] ] ; a . styles [ "margin-right" ] = c [ d [ 1 ] ] ; a . styles [ "margin-bottom" ] = c [ d [ 2 ] ] ; a . styles [ "margin-left" ] = c [ d [ 3 ] ] } if ( a . styles . margin ) { var c = a . styles . margin . match ( /(auto|0|(?:\-?[\.\d]+(?:\w+|%)))/g ) || [ "0px" ] ; switch ( c . length ) { case 1 : b ( [ 0 , 0 , 0 , 0 ] ) ; break ; case 2 : b ( [ 0 , 1 , 0 , 1 ] ) ; break ; case 3 : b ( [ 0 , 1 , 2 , 1 ] ) ; break ; case 4 : b ( [ 0 , 1 , 2 , 3 ] ) } delete a . styles . margin } } , matchesStyle : C , transform : function ( a , b ) { if ( "string" == typeof b ) a . name = b ; else { var c = b . getDefinition ( ) , d = c . styles , e = c . attributes , f , g, m , p ; a . name = c . element ; for ( f in e ) if ( "class" ==
f ) for ( c = a . classes . join ( "|" ) , m = e [ f ] . split ( /\s+/ ) ; p= m . pop ( ) ; ) - 1 == c . indexOf ( p) && a . classes . push ( p ) ; else a . attributes [ f ] = e [ f ] ; for ( g in d ) a . styles [ g ] = d [ g ] } } } } ) ( ) ;
c [ d [ 0 ] ] ; a . styles [ "margin-right" ] = c [ d [ 1 ] ] ; a . styles [ "margin-bottom" ] = c [ d [ 2 ] ] ; a . styles [ "margin-left" ] = c [ d [ 3 ] ] } if ( a . styles . margin ) { var c = a . styles . margin . match ( /(auto|0|(?:\-?[\.\d]+(?:\w+|%)))/g ) || [ "0px" ] ; switch ( c . length ) { case 1 : b ( [ 0 , 0 , 0 , 0 ] ) ; break ; case 2 : b ( [ 0 , 1 , 0 , 1 ] ) ; break ; case 3 : b ( [ 0 , 1 , 2 , 1 ] ) ; break ; case 4 : b ( [ 0 , 1 , 2 , 3 ] ) } delete a . styles . margin } } , matchesStyle : F , transform : function ( a , b ) { if ( "string" == typeof b ) a . name = b ; else { var c = b . getDefinition ( ) , d = c . styles , e = c . attributes , f , n, g , r ; a . name = c . element ; for ( f in e ) if ( "class" ==
f ) for ( c = a . classes . join ( "|" ) , g = e [ f ] . split ( /\s+/ ) ; r= g . pop ( ) ; ) - 1 == c . indexOf ( r) && a . classes . push ( r ) ; else a . attributes [ f ] = e [ f ] ; for ( n in d ) a . styles [ n ] = d [ n ] } } } } ) ( ) ;
( function ( ) { CKEDITOR . focusManager = function ( a ) { if ( a . focusManager ) return a . focusManager ; this . hasFocus = ! 1 ; this . currentActive = null ; this . _ = { editor : a } ; return this } ; CKEDITOR . focusManager . _ = { blurDelay : 200 } ; CKEDITOR . focusManager . prototype = { focus : function ( a ) { this . _ . timer && clearTimeout ( this . _ . timer ) ; a && ( this . currentActive = a ) ; this . hasFocus || this . _ . locked || ( ( a = CKEDITOR . currentInstance ) && a . focusManager . blur ( 1 ) , this . hasFocus = ! 0 , ( 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 d ( ) { if ( this . hasFocus ) { this . hasFocus = ! 1 ; 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 ? d . call ( this ) : this . _ . timer = CKEDITOR . tools . setTimeout ( function ( ) { delete this . _ . timer ; d . call ( this ) } , b , this ) } } , add : function ( a , d ) { var b = a . getCustomData ( "focusmanager" ) ; if ( ! b || b != this ) { b && b . remove ( a ) ; var b =
"focus" , c = "blur" ; d && ( CKEDITOR . env . ie ? ( b = "focusin" , c = "focusout" ) : 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 ) ; d && ( CKEDITOR . event . useCapture = 0 ) ; a . setCustomData ( "focusmanager" , this ) ; a . setCustomData ( "focusmanager_handlers" , f ) } } , remove : function ( a ) { a . removeCustomData ( "focusmanager" ) ; var d = a . removeCustomData ( "focusmanager_handlers" ) ; a . removeListener ( "blur" , d . blur ) ; a . removeListener ( "focus" ,
@ -258,44 +258,44 @@ d.focus)}}})();CKEDITOR.keystrokeHandler=function(a){if(a.keystrokeHandler)retur
( function ( ) { var a , d = function ( b ) { b = b . data ; var d = b . getKeystroke ( ) , e = this . keystrokes [ d ] , k = this . _ . editor ; a = ! 1 === k . fire ( "key" , { keyCode : d , domEvent : b } ) ; a || ( e && ( a = ! 1 !== k . execCommand ( e , { from : "keystrokeHandler" } ) ) , a || ( a = ! ! this . blockedKeystrokes [ d ] ) ) ; a && b . preventDefault ( ! 0 ) ; return ! a } , b = function ( b ) { a && ( a = ! 1 , b . data . preventDefault ( ! 0 ) ) } ; CKEDITOR . keystrokeHandler . prototype = { attach : function ( a ) { a . on ( "keydown" , d , this ) ; if ( CKEDITOR . env . gecko && CKEDITOR . env . mac ) a . on ( "keypress" , b , this ) } } } ) ( ) ;
( function ( ) { CKEDITOR . lang = { languages : { af : 1 , ar : 1 , az : 1 , bg : 1 , bn : 1 , bs : 1 , ca : 1 , cs : 1 , cy : 1 , da : 1 , de : 1 , "de-ch" : 1 , el : 1 , "en-au" : 1 , "en-ca" : 1 , "en-gb" : 1 , en : 1 , eo : 1 , es : 1 , "es-mx" : 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 , oc : 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 , d , b ) { a && CKEDITOR . lang . languages [ a ] ||
( a = this . detect ( d , a ) ) ; var c = this ; d = function ( ) { c [ a ] . dir = c . rtl [ a ] ? "rtl" : "ltr" ; b ( a , c [ a ] ) } ; this [ a ] ? d ( ) : CKEDITOR . scriptLoader . load ( CKEDITOR . getUrl ( "lang/" + a + ".js" ) , d , this ) } , detect : function ( a , d ) { var b = this . languages ; d = d || navigator . userLanguage || navigator . language || a ; var c = d . 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 = { } , d = { } ; return { load : function ( b , c , f , e ) { var k = "string" == typeof b ; k && ( b = [ b ] ) ; f || ( f = CKEDITOR ) ; var h = b . length , l = h , q = [ ] , g = [ ] , y = function ( a ) { c && ( k ? c . call ( f , a ) : c . call ( f , q , g ) ) } ; if ( 0 === l ) y( ! 0 ) ; else { var z = function ( a , b ) { ( b ? q : g ) . push ( a ) ; 0 >= -- l && ( e && CKEDITOR . document . getDocumentElement ( ) . removeStyle ( "cursor" ) , y( b ) ) } , x = function ( b , c ) { a [ b ] = 1 ; var e = d [ b ] ; delete d [ b ] ; for ( var f = 0 ; f < e . length ; f ++ ) e [ f ] ( b , c ) } , E = function ( b ) { if ( a [ b ] ) z ( b , ! 0 ) ; else { var e = d [ b ] || ( d [ b ] = [ ] ) ; e . push ( z ) ; if ( ! ( 1 < e . length ) ) { var f =
new CKEDITOR . dom . element ( "script" ) ; f . setAttributes ( { type : "text/javascript" , src : b } ) ; c && ( CKEDITOR . env . ie && ( 8 >= CKEDITOR . env . version || CKEDITOR . env . ie9Compat ) ? f . $ . onreadystatechange = function ( ) { if ( "loaded" == f . $ . readyState || "complete" == f . $ . readyState ) f . $ . onreadystatechange = null , x ( b , ! 0 ) } : ( f . $ . onload = function ( ) { setTimeout ( function ( ) { f . $ . onload = null ; f . $ . onerror = null ; x ( b , ! 0 ) } , 0 ) } , f . $ . onerror = function ( ) { f . $ . onload = null ; f . $ . onerror = null ; x ( b , ! 1 ) } ) ) ; f . appendTo ( CKEDITOR . document . getHead ( ) ) } } } ; e && CKEDITOR . document . getDocumentElement ( ) . setStyle ( "cursor" ,
"wait" ) ; for ( var v= 0 ; v < h ; v ++ ) E ( b [ v ] ) } } , queue : function ( ) { function a ( ) { var b ; ( b = c [ 0 ] ) && this . load ( b . scriptUrl , b . callback , CKEDITOR , 0 ) } var c = [ ] ; return function ( d , e ) { var k = this ; c . push ( { scriptUrl : d , callback : function ( ) { e && e . apply ( this , arguments ) ; c . shift ( ) ; a . call ( k ) } } ) ; 1 == c . length && a . call ( this ) } } ( ) } } ( ) ; CKEDITOR . resourceManager = function ( a , d ) { this . basePath = a ; this . fileName = d ; this . registered = { } ; this . loaded = { } ; this . externals = { } ; this . _ = { waitingList : { } } } ;
CKEDITOR . scriptLoader = function ( ) { var a = { } , d = { } ; return { load : function ( b , c , f , e ) { var k = "string" == typeof b ; k && ( b = [ b ] ) ; f || ( f = CKEDITOR ) ; var h = b . length , l = h , q = [ ] , g = [ ] , w = function ( a ) { c && ( k ? c . call ( f , a ) : c . call ( f , q , g ) ) } ; if ( 0 === l ) w( ! 0 ) ; else { var x = function ( a , b ) { ( b ? q : g ) . push ( a ) ; 0 >= -- l && ( e && CKEDITOR . document . getDocumentElement ( ) . removeStyle ( "cursor" ) , w( b ) ) } , z = function ( b , c ) { a [ b ] = 1 ; var e = d [ b ] ; delete d [ b ] ; for ( var f = 0 ; f < e . length ; f ++ ) e [ f ] ( b , c ) } , A = function ( b ) { if ( a [ b ] ) x ( b , ! 0 ) ; else { var e = d [ b ] || ( d [ b ] = [ ] ) ; e . push ( x ) ; if ( ! ( 1 < e . length ) ) { var f =
new CKEDITOR . dom . element ( "script" ) ; f . setAttributes ( { type : "text/javascript" , src : b } ) ; c && ( CKEDITOR . env . ie && ( 8 >= CKEDITOR . env . version || CKEDITOR . env . ie9Compat ) ? f . $ . onreadystatechange = function ( ) { if ( "loaded" == f . $ . readyState || "complete" == f . $ . readyState ) f . $ . onreadystatechange = null , z ( b , ! 0 ) } : ( f . $ . onload = function ( ) { setTimeout ( function ( ) { f . $ . onload = null ; f . $ . onerror = null ; z ( b , ! 0 ) } , 0 ) } , f . $ . onerror = function ( ) { f . $ . onload = null ; f . $ . onerror = null ; z ( b , ! 1 ) } ) ) ; f . appendTo ( CKEDITOR . document . getHead ( ) ) } } } ; e && CKEDITOR . document . getDocumentElement ( ) . setStyle ( "cursor" ,
"wait" ) ; for ( var t= 0 ; t < h ; t ++ ) A ( b [ t ] ) } } , queue : function ( ) { function a ( ) { var b ; ( b = c [ 0 ] ) && this . load ( b . scriptUrl , b . callback , CKEDITOR , 0 ) } var c = [ ] ; return function ( d , e ) { var k = this ; c . push ( { scriptUrl : d , callback : function ( ) { e && e . apply ( this , arguments ) ; c . shift ( ) ; a . call ( k ) } } ) ; 1 == c . length && a . call ( this ) } } ( ) } } ( ) ; CKEDITOR . resourceManager = function ( a , d ) { this . basePath = a ; this . fileName = d ; this . registered = { } ; this . loaded = { } ; this . externals = { } ; this . _ = { waitingList : { } } } ;
CKEDITOR . resourceManager . prototype = { add : function ( a , d ) { if ( this . registered [ a ] ) throw Error ( '[CKEDITOR.resourceManager.add] The resource name "' + a + '" is already registered.' ) ; var b = this . registered [ a ] = d || { } ; 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 d = this . externals [ a ] ; return CKEDITOR . getUrl ( d && d . dir || this . basePath + a + "/" ) } , getFilePath : function ( a ) { var d = this . externals [ a ] ;
return CKEDITOR . getUrl ( this . getPath ( a ) + ( d ? d . file : this . fileName + ".js" ) ) } , addExternal : function ( a , d , b ) { b || ( d = d . replace ( /[^\/]+$/ , function ( a ) { b = a ; return "" } ) ) ; b = b || this . fileName + ".js" ; a = a . split ( "," ) ; for ( var c = 0 ; c < a . length ; c ++ ) this . externals [ a [ c ] ] = { dir : d , file : b } } , load : function ( a , d , b ) { CKEDITOR . tools . isArray ( a ) || ( a = a ? [ a ] : [ ] ) ; for ( var c = this . loaded , f = this . registered , e = [ ] , k = { } , h = { } , l = 0 ; l < a . length ; l ++ ) { var q = a [ l ] ; if ( q ) if ( c [ q ] || f [ q ] ) h [ q ] = this . get ( q ) ; else { var g = this . getFilePath ( q ) ; e . push ( g ) ; g in k || ( k [ g ] = [ ] ) ; k [ g ] . push ( q ) } } CKEDITOR . scriptLoader . load ( e ,
function ( a , e ) { if ( e . length ) throw Error ( '[CKEDITOR.resourceManager.load] Resource name "' + k [ e [ 0 ] ] . join ( "," ) + '" was not found at "' + e [ 0 ] + '".' ) ; for ( var f = 0 ; f < a . length ; f ++ ) for ( var g = k [ a [ f ] ] , l = 0 ; l < g . length ; l ++ ) { var n= g [ l ] ; h [ n ] = this . get ( n ) ; c [ n ] = 1 } d . call ( b , h ) } , this ) } } ; CKEDITOR . plugins = new CKEDITOR . resourceManager ( "plugins/" , "plugin" ) ;
CKEDITOR . plugins . load = CKEDITOR . tools . override ( CKEDITOR . plugins . load , function ( a ) { var d = { } ; return function ( b , c , f ) { var e = { } , k = function ( b ) { a . call ( this , b , function ( a ) { CKEDITOR . tools . extend ( e , a ) ; var b = [ ] , g ; for ( g in a ) { var h = a [ g ] , z = h && h . requires ; if ( ! d [ g ] ) { if ( h . icons ) for ( var x = h . icons . split ( "," ) , E= x . length ; E -- ; ) CKEDITOR . skin . addIcon ( x[ E ] , h . path + "icons/" + ( CKEDITOR . env . hidpi && h . hidpi ? "hidpi/" : "" ) + x[ E ] + ".png" ) ; h . isSupportedEnvironment = h . isSupportedEnvironment || function ( ) { return ! 0 } ; d [ g ] = 1 } if ( z) for ( z . split && ( z =
z . split ( "," ) ) , h = 0 ; h < z. length ; h ++ ) e [ z [ h ] ] || b . push ( z [ h ] ) } if ( b . length ) k . call ( this , b ) ; else { for ( g in e ) h = e [ g ] , h . onLoad && ! h . onLoad . _called && ( ! 1 === h . onLoad ( ) && delete e [ g ] , h . onLoad . _called = 1 ) ; c && c . call ( f || window , e ) } } , this ) } ; k . call ( this , b ) } } ) ; CKEDITOR . plugins . setLang = function ( a , d , b ) { var c = this . get ( a ) ; a = c . langEntries || ( c . langEntries = { } ) ; c = c . lang || ( c . lang = [ ] ) ; c . split && ( c = c . split ( "," ) ) ; - 1 == CKEDITOR . tools . indexOf ( c , d ) && c . push ( d ) ; a [ d ] = b } ;
function ( a , e ) { if ( e . length ) throw Error ( '[CKEDITOR.resourceManager.load] Resource name "' + k [ e [ 0 ] ] . join ( "," ) + '" was not found at "' + e [ 0 ] + '".' ) ; for ( var f = 0 ; f < a . length ; f ++ ) for ( var g = k [ a [ f ] ] , l = 0 ; l < g . length ; l ++ ) { var m= g [ l ] ; h [ m ] = this . get ( m ) ; c [ m ] = 1 } d . call ( b , h ) } , this ) } } ; CKEDITOR . plugins = new CKEDITOR . resourceManager ( "plugins/" , "plugin" ) ;
CKEDITOR . plugins . load = CKEDITOR . tools . override ( CKEDITOR . plugins . load , function ( a ) { var d = { } ; return function ( b , c , f ) { var e = { } , k = function ( b ) { a . call ( this , b , function ( a ) { CKEDITOR . tools . extend ( e , a ) ; var b = [ ] , g ; for ( g in a ) { var h = a [ g ] , x = h && h . requires ; if ( ! d [ g ] ) { if ( h . icons ) for ( var z = h . icons . split ( "," ) , A= z . length ; A -- ; ) CKEDITOR . skin . addIcon ( z[ A ] , h . path + "icons/" + ( CKEDITOR . env . hidpi && h . hidpi ? "hidpi/" : "" ) + z[ A ] + ".png" ) ; h . isSupportedEnvironment = h . isSupportedEnvironment || function ( ) { return ! 0 } ; d [ g ] = 1 } if ( x) for ( x . split && ( x =
x . split ( "," ) ) , h = 0 ; h < x. length ; h ++ ) e [ x [ h ] ] || b . push ( x [ h ] ) } if ( b . length ) k . call ( this , b ) ; else { for ( g in e ) h = e [ g ] , h . onLoad && ! h . onLoad . _called && ( ! 1 === h . onLoad ( ) && delete e [ g ] , h . onLoad . _called = 1 ) ; c && c . call ( f || window , e ) } } , this ) } ; k . call ( this , b ) } } ) ; CKEDITOR . plugins . setLang = function ( a , d , b ) { var c = this . get ( a ) ; a = c . langEntries || ( c . langEntries = { } ) ; c = c . lang || ( c . lang = [ ] ) ; c . split && ( c = c . split ( "," ) ) ; - 1 == CKEDITOR . tools . indexOf ( c , d ) && c . push ( d ) ; a [ d ] = 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 , d , b ) { b . name = a . toLowerCase ( ) ; var c = this . items [ a ] = { type : d , 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 d = this . items [ a ] , b = d && this . _ . handlers [ d . type ] , c = d && d . command && this . editor . getCommand ( d . command ) , b = b && b . create . apply ( this , d . args ) ; this . instances [ a ] = b ; c && c . uiItems . push ( b ) ; b && ! b . type && ( b . type = d . type ) ; return b } , addHandler : function ( a , d ) { this . _ . handlers [ a ] =
d } , 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 , f , g ) { CKEDITOR . event . call ( this ) ; a = a && CKEDITOR . tools . clone ( a ) ; if ( void 0 !== f ) { if ( ! ( f instanceof CKEDITOR . dom . element ) ) throw Error ( "Expect element of type CKEDITOR.dom.element." ) ; if ( ! g ) throw Error ( "One of the element modes must be specified." ) ; if ( CKEDITOR . env . ie && CKEDITOR . env . quirks && g == CKEDITOR . ELEMENT _MODE _INLINE ) throw Error ( "Inline element mode is not supported on IE quirks." ) ; if ( ! b ( f , g ) ) throw Error ( 'The specified element mode is not supported on element: "' + f . getName ( ) + '".' ) ;
this . element = f ; this . elementMode = g ; this . name = this . elementMode != CKEDITOR . ELEMENT _MODE _APPENDTO && ( f . getId ( ) || f . getNameAtt ( ) ) } else this . elementMode = CKEDITOR . ELEMENT _MODE _NONE ; this . _ = { } ; this . commands = { } ; this . templates = { } ; this . name = this . name || d ( ) ; 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" ,
c ) ; this . on ( "selectionChange" , function ( a ) { e ( this , a . data . path ) } ) ; this . on ( "activeFilterChange" , function ( ) { e ( this , this . elementPath ( ) , ! 0 ) } ) ; this . on ( "mode" , c ) ; CKEDITOR . dom . selection . setupEditorOptimization ( this ) ; this . on ( "instanceReady" , function ( ) { if ( this . config . startupFocus ) { if ( "end" === this . config . startupFocus ) { var a = this . createRange ( ) ; a . selectNodeContents ( this . editable ( ) ) ; a . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 ) ; a . collapse ( ) ; this . getSelection ( ) . selectRanges ( [ a ] ) } this . focus ( ) } } ) ; CKEDITOR . fire ( "instanceCreated" ,
null , this ) ; CKEDITOR . add ( this ) ; CKEDITOR . tools . setTimeout ( function ( ) { this . isDestroyed ( ) || this . isDetached ( ) || h ( this , a ) } , 0 , this ) } function d ( ) { do var a = "editor" + ++ E ; while ( CKEDITOR . instances [ a ] ) ; return a } function b ( a , b ) { return b == CKEDITOR . ELEMENT _MODE _INLINE ? a . is ( CKEDITOR . dtd . $editable ) || a . is ( "textarea" ) : b == CKEDITOR . ELEMENT _MODE _REPLACE ? ! a . is ( CKEDITOR . dtd . $nonBodyContent ) : 1 } function c ( ) { var a = this . commands , b ; for ( b in a ) f ( this , a [ b ] ) } function f ( a , b ) { b [ b . startDisabled ? "disable" : a . readOnly && ! b . readOnly ? "disable" :
b . modes [ a . mode ] ? "enable" : "disable" ] ( ) } function e ( a , b , c ) { if ( b ) { var d , e , f = a . commands ; for ( e in f ) d = f [ e ] , ( c || d . contextSensitive ) && d . refresh ( a , b ) } } function k ( a ) { var b = a . config . customConfig ; if ( ! b ) return ! 1 ; var b = CKEDITOR . getUrl ( b ) , c = v[ b ] || ( v [ b ] = { } ) ; c . fn ? ( c . fn . call ( a , a . config ) , CKEDITOR . getUrl ( a . config . customConfig ) != b && k ( a ) || a . fireOnce ( "customConfigLoaded" ) ) : CKEDITOR . scriptLoader . queue ( b , function ( ) { c . fn = c . fn || CKEDITOR . editorConfig || function ( ) { } ; k ( a ) } ) ; return ! 0 } function h ( a , b ) { a . on ( "customConfigLoaded" , function ( ) { if ( b ) { if ( b . on ) for ( var c in b . on ) a . on ( c ,
null , this ) ; CKEDITOR . add ( this ) ; CKEDITOR . tools . setTimeout ( function ( ) { this . isDestroyed ( ) || this . isDetached ( ) || h ( this , a ) } , 0 , this ) } function d ( ) { do var a = "editor" + ++ A ; while ( CKEDITOR . instances [ a ] ) ; return a } function b ( a , b ) { return b == CKEDITOR . ELEMENT _MODE _INLINE ? a . is ( CKEDITOR . dtd . $editable ) || a . is ( "textarea" ) : b == CKEDITOR . ELEMENT _MODE _REPLACE ? ! a . is ( CKEDITOR . dtd . $nonBodyContent ) : 1 } function c ( ) { var a = this . commands , b ; for ( b in a ) f ( this , a [ b ] ) } function f ( a , b ) { b [ b . startDisabled ? "disable" : a . readOnly && ! b . readOnly ? "disable" :
b . modes [ a . mode ] ? "enable" : "disable" ] ( ) } function e ( a , b , c ) { if ( b ) { var d , e , f = a . commands ; for ( e in f ) d = f [ e ] , ( c || d . contextSensitive ) && d . refresh ( a , b ) } } function k ( a ) { var b = a . config . customConfig ; if ( ! b ) return ! 1 ; var b = CKEDITOR . getUrl ( b ) , c = t[ b ] || ( t [ b ] = { } ) ; c . fn ? ( c . fn . call ( a , a . config ) , CKEDITOR . getUrl ( a . config . customConfig ) != b && k ( a ) || a . fireOnce ( "customConfigLoaded" ) ) : CKEDITOR . scriptLoader . queue ( b , function ( ) { c . fn = c . fn || CKEDITOR . editorConfig || function ( ) { } ; k ( a ) } ) ; return ! 0 } 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 , ! 0 ) ; delete a . config . on } c = a . config ; a . readOnly = c . readOnly ? ! 0 : a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? a . element . is ( "textarea" ) ? a . element . hasAttribute ( "disabled" ) || a . element . hasAttribute ( "readonly" ) : a . element . isReadOnly ( ) : a . elementMode == CKEDITOR . ELEMENT _MODE _REPLACE ? a . element . hasAttribute ( "disabled" ) || a . element . hasAttribute ( "readonly" ) : ! 1 ; a . blockless = a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? ! ( a . element . is ( "textarea" ) || CKEDITOR . dtd [ a . element . getName ( ) ] . p ) :
! 1 ; 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 ; c . skin && ( CKEDITOR . skinName = c . skin ) ; a . fireOnce ( "configLoaded" ) ; a . dataProcessor = new CKEDITOR . htmlDataProcessor ( a ) ; a . filter = a . activeFilter = new CKEDITOR . filter ( a ) ; l ( a ) } ) ; b && null != b . customConfig && ( a . config . customConfig = b . customConfig ) ; k ( a ) || a . fireOnce ( "customConfigLoaded" ) }
function l ( a ) { CKEDITOR . skin . loadPart ( "editor" , function ( ) { q ( a ) } ) } function q ( 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 = "string" == typeof d || ! 1 === d ? d : [ a . lang . editor , a . name ] . join ( ", " ) ; 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 ) ; y( a ) } ) } function y ( a ) { function b ( a ) { if ( ! a ) return "" ; CKEDITOR . tools . isArray ( a ) && ( a = a . join ( "," ) ) ; return a . replace ( /\s/g , "" ) } var c = a . config , d = b ( c . plugins ) , e = b ( c . extraPlugins ) , f = b ( c . removePlugins ) ; if ( e ) var g = new RegExp ( "(?:^|,)(?:" + e . replace ( /,/g , "|" ) + ")(?\x3d,|$)" , "g" ) , d = d . replace ( g , "" ) , d = d + ( "," + e ) ; if ( f ) var h = new RegExp ( "(?:^|,)(?:" + f . replace ( /,/g , "|" ) + ")(?\x3d,|$)" , "g" ) , d = d . replace ( h , "" ) ; CKEDITOR . env . air && ( d += ",adobeair" ) ; CKEDITOR . plugins . load ( d . split ( "," ) ,
function ( b ) { var d = [ ] , e = [ ] , f = [ ] ; a . plugins = CKEDITOR . tools . extend ( { } , a . plugins , b ) ; for ( var g in b ) { var m= b [ g ] , k = m . lang , C = null , t = m . requires , O ; CKEDITOR . tools . isArray ( t ) && ( t = t . join ( "," ) ) ; if ( t&& ( O = t . match ( h ) ) ) for ( ; t= O . pop ( ) ; ) CKEDITOR . error ( "editor-plugin-required" , { plugin : t . replace ( "," , "" ) , requiredBy : g } ) ; k && ! a . lang [ g ] && ( k. split && ( k = k . split ( "," ) ) , 0 <= CKEDITOR . tools . indexOf ( k, a . langCode ) ? C = a . langCode : ( C = a . langCode . replace ( /-.*/ , "" ) , C= C != a . langCode && 0 <= CKEDITOR . tools . indexOf ( k, C ) ? C : 0 <= CKEDITOR . tools . indexOf ( k ,
"en" ) ? "en" : k[ 0 ] ) , m . langEntries && m . langEntries [ C ] ? ( a . lang [ g ] = m. langEntries [ C ] , C = null ) : f . push ( CKEDITOR . getUrl ( m. path + "lang/" + C + ".js" ) ) ) ; e . push ( C) ; d . push ( m ) } CKEDITOR . scriptLoader . load ( f , function ( ) { if ( ! a . isDestroyed ( ) && ! a . isDetached ( ) ) { for ( var b = [ "beforeInit" , "init" , "afterInit" ] , f = 0 ; f < b . length ; f ++ ) for ( var g = 0 ; g < d . length ; g ++ ) { var m = d [ g ] ; 0 === f && e [ g ] && m. lang && m . langEntries && ( a . lang [ m. name ] = m . langEntries [ e [ g ] ] ) ; if ( m[ b [ f ] ] ) m [ b [ f ] ] ( a ) } a . fireOnce ( "pluginsLoaded" ) ; c . keystrokes && a . setKeystroke ( a . config . keystrokes ) ;
for ( g = 0 ; g < a . config . blockedKeystrokes . length ; g ++ ) a . keystrokeHandler . blockedKeystrokes [ a . config . blockedKeystrokes [ g ] ] = 1 ; a . status = "loaded" ; a . fireOnce ( "loaded" ) ; CKEDITOR . fire ( "instanceLoaded" , null , a ) } } ) } ) } function z ( ) { 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 ! 0 } return ! 1 } function x ( a , b ) { function c ( a ) { var b = a . startContainer , d = a . endContainer ;
return b . is && ( b . is ( "tr" ) || b . is ( "td" ) && b . equals ( d ) && a . endOffset === b . getChildCount ( ) ) ? ! 0 : ! 1 } function d ( a ) { var b = a . startContainer ; return b . is ( "tr" ) ? a . cloneContents ( ) : b . clone ( ! 0 ) } for ( var e = new CKEDITOR . dom . documentFragment , f , g , h , k = 0 ; k < a . length ; k ++ ) { var l = a [ k ] , r = l . startContainer . getAscendant ( "tr" , ! 0 ) ; c ( l ) ? ( f || ( f = r . getAscendant ( "table" ) . clone ( ) , f . append ( r . getAscendant ( { thead : 1 , tbody : 1 , tfoot : 1 } ) . clone ( ) ) , e . append ( f ) , f = f . findOne ( "thead, tbody, tfoot" ) ) , g && g . equals ( r ) || ( g = r , h = r . clone ( ) , f . append ( h ) ) , h . append ( d ( l ) ) ) :
e . append ( l . cloneContents ( ) ) } return f ? e : b . getHtmlFromRange ( a [ 0 ] ) } a . prototype = CKEDITOR . editor . prototype ; CKEDITOR . editor = a ; var E= 0 , v = { } ; CKEDITOR . tools . extend ( CKEDITOR . editor . prototype , { plugins : { detectConflict : function ( a , b ) { for ( var c = 0 ; c < b . length ; c ++ ) { var d = b [ c ] ; if ( this [ d ] ) return CKEDITOR . warn ( "editor-plugin-conflict" , { plugin : a , replacedWith : d } ) , ! 0 } return ! 1 } } , addCommand : function ( a , b ) { b . name = a . toLowerCase ( ) ; var c = b instanceof CKEDITOR . command ? b : new CKEDITOR . command ( this , b ) ; this . mode && f ( this , c ) ; return this . commands [ a ] =
c } , _attachToForm : function ( ) { function a ( b ) { c . updateElement ( ) ; c . _ . required && ! d . getValue ( ) && ! 1 === c . fire ( "required" ) && b . data . preventDefault ( ) } function b ( a ) { return ! ! ( a && a . call && a . apply ) } var c = this , d = c . element , e = new CKEDITOR . dom . element ( d . $ . form ) ; d . is ( "textarea" ) && e && ( e . on ( "submit" , a ) , b ( e . $ . submit ) && ( e . $ . submit = CKEDITOR . tools . override ( e . $ . submit , function ( b ) { return function ( ) { a ( ) ; b . apply ? b . apply ( this ) : b ( ) } } ) ) , c . on ( "destroy" , function ( ) { e . removeListener ( "submit" , a ) } ) ) } , destroy : function ( a ) { var b = CKEDITOR . filter . instances ,
c = this ; this . fire ( "beforeDestroy" ) ; ! a && z . call ( this ) ; this . editable ( null ) ; this . filter && delete this . filter ; CKEDITOR . tools . array . forEach ( CKEDITOR . tools . object . keys ( b ) , function ( a ) { a = b [ a ] ; c === a . editor && a . destroy ( ) } ) ; 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 } ; return c && c . state != CKEDITOR . TRISTATE _DISABLED && ! 1 !== this . fire ( "beforeCommandExec" , d ) && ( d . returnValue = c . exec ( d . commandData ) , ! c . async && ! 1 !== this . fire ( "afterCommandExec" , d ) ) ? d . returnValue : ! 1 } , getCommand : function ( a ) { return this . commands [ a ] } , getData : function ( a ) { ! a && this . fire ( "beforeGetData" ) ; var b = this . _ . data ;
"string" != typeof b && ( 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" ) ; "string" != typeof a && ( a = ( a = this . element ) && this . elementMode == CKEDITOR . ELEMENT _MODE _REPLACE ? a . is ( "textarea" ) ? a . getValue ( ) : a . getHtml ( ) : "" ) ; return a } , loadSnapshot : function ( a ) { this . fire ( "loadSnapshot" , a ) } , setData : function ( a , b , c ) { var d = ! 0 , e = b ; b && "object" ==
typeof b && ( c = b . internal , e = b . callback , d = ! b . noSnapshot ) ; ! c && d && this . fire ( "saveSnapshot" ) ; if ( e || ! c ) this . once ( "dataReady" , function ( a ) { ! c && d && this . fire ( "saveSnapshot" ) ; e && e . call ( a . editor ) } ) ; a = { dataValue : a } ; ! c && this . fire ( "setData" , a ) ; this . _ . data = a . dataValue ; ! c && this . fire ( "afterSetData" , a ) } , setReadOnly : function ( a ) { a = null == a || a ; this . readOnly != a && ( this . readOnly = a , this . keystrokeHandler . blockedKeystrokes [ 8 ] = + a , this . editable ( ) . setReadOnly ( a ) , this . fire ( "readOnly" ) ) } , insertHtml : function ( a , b , c ) { this . fire ( "insertHtml" ,
{ dataValue : a , mode : b , range : c } ) } , insertText : function ( a ) { this . fire ( "insertText" , a ) } , insertElement : function ( a ) { this . fire ( "insertElement" , a ) } , getSelectedHtml : function ( a ) { var b = this . editable ( ) , c = this . getSelection ( ) , c = c && c . getRanges ( ) ; if ( ! b || ! c || 0 === c . length ) return null ; b = x ( c , b ) ; return a ? b . getHtml ( ) : b } , extractSelectedHtml : function ( a , b ) { var c = this . editable ( ) , d = this . getSelection ( ) . getRanges ( ) , e = new CKEDITOR . dom . documentFragment , f ; if ( ! c || 0 === d . length ) return null ; for ( f = 0 ; f < d . length ; f ++ ) e . append ( c . extractHtmlFromRange ( d [ f ] ,
b ) ) ; b || this . getSelection ( ) . selectRanges ( [ d [ 0 ] ] ) ; return a ? e . getHtml ( ) : e } , focus : function ( ) { this . fire ( "beforeFocus" ) } , checkDirty : function ( ) { return "ready" == this . status && this . _ . previousValue !== this . getSnapshot ( ) } , resetDirty : function ( ) { this . _ . previousValue = this . getSnapshot ( ) } , updateElement : function ( ) { return z . call ( this ) } , setKeystroke : function ( ) { for ( var a = this . keystrokeHandler . keystrokes , b = CKEDITOR . tools . isArray ( arguments [ 0 ] ) ? arguments [ 0 ] : [ [ ] . slice . call ( arguments , 0 ) ] , c , d , e = b . length ; e -- ; ) c = b [ e ] , d = 0 , CKEDITOR . tools . isArray ( c ) &&
( d = c [ 1 ] , c = c [ 0 ] ) , d ? a [ c ] = d : delete a [ c ] } , getCommandKeystroke : function ( a , b ) { var c = "string" === typeof a ? this . getCommand ( a ) : a , d = [ ] ; if ( c ) { var e = CKEDITOR . tools . object . findKey ( this . commands , c ) , f = this . keystrokeHandler . keystrokes ; if ( c . fakeKeystroke ) d . push ( c . fakeKeystroke ) ; else for ( var g in f ) f [ g ] === e && d . push ( g ) } return b ? d : d [ 0 ] || null } , addFeature : function ( a ) { return this . filter . addFeature ( a ) } , setActiveFilter : function ( a ) { a || ( a = this . filter ) ; 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 , ! 0 ) ) ) } , 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" ) } , showNotification : function ( a ) { alert ( a ) } , isDetached : function ( ) { return ! ! this . container &&
this . container . isDetached ( ) } , isDestroyed : function ( ) { return "destroyed" === this . status } } ) ; CKEDITOR . editor . _getEditorElement = function ( a ) { if ( ! CKEDITOR . env . isCompatible ) return null ; var b = CKEDITOR . dom . element . get ( a ) ; return b ? b . getEditor ( ) ? ( CKEDITOR . error ( "editor-element-conflict" , { editorName : b . getEditor ( ) . name } ) , null ) : b : ( CKEDITOR . error ( "editor-incorrect-element" , { element : a } ) , null ) } ; CKEDITOR . editor . initializeDelayedEditorCreation = function ( a , b , c ) { if ( b . delayIfDetached _callback ) CKEDITOR . warn ( "editor-delayed-creation" ,
{ method : "callback" } ) , b . delayIfDetached _callback ( function ( ) { CKEDITOR [ c ] ( a , b ) ; CKEDITOR . warn ( "editor-delayed-creation-success" , { method : "callback" } ) } ) ; else { var d = void 0 === b . delayIfDetached _interval ? CKEDITOR . config . delayIfDetached _interval : b . delayIfDetached _interval , e ; CKEDITOR . warn ( "editor-delayed-creation" , { method : "interval - " + d + " ms" } ) ; e = setInterval ( function ( ) { a . isDetached ( ) || ( clearInterval ( e ) , CKEDITOR [ c ] ( a , b ) , CKEDITOR . warn ( "editor-delayed-creation-success" , { method : "interval - " + d + " ms" } ) ) } , d ) } } ; CKEDITOR . editor . shouldDelayEditorCreation =
function ( a , b ) { CKEDITOR . editor . mergeDelayedCreationConfigs ( b ) ; return b && b . delayIfDetached && a . isDetached ( ) } ; CKEDITOR . editor . mergeDelayedCreationConfigs = function ( a ) { a && ( a . delayIfDetached = "boolean" === typeof a . delayIfDetached ? a . delayIfDetached : CKEDITOR . config . delayIfDetached , a . delayIfDetached _interval = isNaN ( a . delayIfDetached _interval ) ? CKEDITOR . config . delayIfDetached _interval : a . delayIfDetached _interval , a . delayIfDetached _callback = a . delayIfDetached _callback || CKEDITOR . config . delayIfDetached _callback ) } } ) ( ) ;
CKEDITOR . ELEMENT _MODE _NONE = 0 ; CKEDITOR . ELEMENT _MODE _REPLACE = 1 ; CKEDITOR . ELEMENT _MODE _APPENDTO = 2 ; CKEDITOR . ELEMENT _MODE _INLINE = 3 ; CKEDITOR . config . delayIfDetached = ! 1 ; CKEDITOR . config . delayIfDetached _callback = void 0 ; CKEDITOR . config . delayIfDetached _interval = 50 ; CKEDITOR . htmlParser = function ( ) { this . _ = { htmlPartsRegex : /<(?:(?:\/([^>]+)>)|(?:!--([\S|\s]*?)--!?>)|(?:([^\/\s>]+)((?:\s+[\w\-:.]+(?:\s*=\s*?(?:(?:"[^"]*")|(?:'[^']*')|[^\s"'\/>]+))?)*)[\S\s]*?(\/?)>))/g } } ;
function ( ) { a . fire ( "stylesSet" , { styles : b } ) } , null , null , 1 ) ; w( a ) } ) } function w ( a ) { function b ( a ) { if ( ! a ) return "" ; CKEDITOR . tools . isArray ( a ) && ( a = a . join ( "," ) ) ; return a . replace ( /\s/g , "" ) } var c = a . config , d = b ( c . plugins ) , e = b ( c . extraPlugins ) , f = b ( c . removePlugins ) ; if ( e ) var g = new RegExp ( "(?:^|,)(?:" + e . replace ( /,/g , "|" ) + ")(?\x3d,|$)" , "g" ) , d = d . replace ( g , "" ) , d = d + ( "," + e ) ; if ( f ) var h = new RegExp ( "(?:^|,)(?:" + f . replace ( /,/g , "|" ) + ")(?\x3d,|$)" , "g" ) , d = d . replace ( h , "" ) ; CKEDITOR . env . air && ( d += ",adobeair" ) ; CKEDITOR . plugins . load ( d . split ( "," ) ,
function ( b ) { var d = [ ] , e = [ ] , f = [ ] ; a . plugins = CKEDITOR . tools . extend ( { } , a . plugins , b ) ; for ( var g in b ) { var k= b [ g ] , l = k . lang , O = null , p = k . requires , I ; CKEDITOR . tools . isArray ( p ) && ( p = p . join ( "," ) ) ; if ( p&& ( I = p . match ( h ) ) ) for ( ; p= I . pop ( ) ; ) CKEDITOR . error ( "editor-plugin-required" , { plugin : p . replace ( "," , "" ) , requiredBy : g } ) ; l && ! a . lang [ g ] && ( l. split && ( l = l . split ( "," ) ) , 0 <= CKEDITOR . tools . indexOf ( l, a . langCode ) ? O = a . langCode : ( O = a . langCode . replace ( /-.*/ , "" ) , O= O != a . langCode && 0 <= CKEDITOR . tools . indexOf ( l, O ) ? O : 0 <= CKEDITOR . tools . indexOf ( l ,
"en" ) ? "en" : l[ 0 ] ) , k . langEntries && k . langEntries [ O ] ? ( a . lang [ g ] = k. langEntries [ O ] , O = null ) : f . push ( CKEDITOR . getUrl ( k. path + "lang/" + O + ".js" ) ) ) ; e . push ( O) ; d . push ( k ) } CKEDITOR . scriptLoader . load ( f , function ( ) { if ( ! a . isDestroyed ( ) && ! a . isDetached ( ) ) { for ( var b = [ "beforeInit" , "init" , "afterInit" ] , f = 0 ; f < b . length ; f ++ ) for ( var g = 0 ; g < d . length ; g ++ ) { var p = d [ g ] ; 0 === f && e [ g ] && p. lang && p . langEntries && ( a . lang [ p. name ] = p . langEntries [ e [ g ] ] ) ; if ( p[ b [ f ] ] ) p [ b [ f ] ] ( a ) } a . fireOnce ( "pluginsLoaded" ) ; c . keystrokes && a . setKeystroke ( a . config . keystrokes ) ;
for ( g = 0 ; g < a . config . blockedKeystrokes . length ; g ++ ) a . keystrokeHandler . blockedKeystrokes [ a . config . blockedKeystrokes [ g ] ] = 1 ; a . status = "loaded" ; a . fireOnce ( "loaded" ) ; CKEDITOR . fire ( "instanceLoaded" , null , a ) } } ) } ) } function x ( ) { 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 ! 0 } return ! 1 } function z ( a , b ) { function c ( a ) { var b = a . startContainer , d = a . endContainer ,
e = b . is && b . is ( "tr" ) , f = b . is && b . is ( "td" ) ; a = f && b . equals ( d ) && a . endOffset === b . getChildCount ( ) ;b = f && 1 === b . getChildCount ( ) && "img" === b . getChildren ( ) . getItem ( 0 ) . getName ( ) ; return e || a && ! b ? ! 0 : ! 1 } function d ( a ) { var b = a . startContainer ; return b . is ( "tr" ) ? a . cloneContents ( ) : b . clone ( ! 0 ) } for ( var e = new CKEDITOR . dom . documentFragment , f , g , h , k = 0 ; k < a . length ; k ++ ) { var l = a [ k ] , r = l . startContainer . getAscendant ( "tr" , ! 0 ) ; c ( l ) ? ( f || ( f = r . getAscendant ( "table" ) . clone ( ) , f . append ( r . getAscendant ( { thead : 1 , tbody : 1 , tfoot : 1 } ) . clone ( ) ) , e . append ( f ) ,
f = f . findOne ( "thead, tbody, tfoot" ) ) , g && g . equals ( r ) || ( g = r , h = r . clone ( ) , f . append ( h ) ) , h . append ( d ( l ) ) ) : e . append ( l . cloneContents ( ) ) } return f ? e : b . getHtmlFromRange ( a [ 0 ] ) } a . prototype = CKEDITOR . editor . prototype ; CKEDITOR . editor = a ; var A= 0 , t = { } ; CKEDITOR . tools . extend ( CKEDITOR . editor . prototype , { plugins : { detectConflict : function ( a , b ) { for ( var c = 0 ; c < b . length ; c ++ ) { var d = b [ c ] ; if ( this [ d ] ) return CKEDITOR . warn ( "editor-plugin-conflict" , { plugin : a , replacedWith : d } ) , ! 0 } return ! 1 } } , addCommand : function ( a , b ) { b . name = a . toLowerCase ( ) ;
var c = b instanceof CKEDITOR . command ? b : new CKEDITOR . command ( this , b ) ; this . mode && f ( this , c ) ; return this . commands [ a ] = c } , _attachToForm : function ( ) { function a ( b ) { c . updateElement ( ) ; c . _ . required && ! d . getValue ( ) && ! 1 === c . fire ( "required" ) && b . data . preventDefault ( ) } function b ( a ) { return ! ! ( a && a . call && a . apply ) } var c = this , d = c . element , e = new CKEDITOR . dom . element ( d . $ . form ) ; d . is ( "textarea" ) && e && ( e . on ( "submit" , a ) , b ( e . $ . submit ) && ( e . $ . submit = CKEDITOR . tools . override ( e . $ . submit , function ( b ) { return function ( ) { a ( ) ; b . apply ? b . apply ( this ) :
b ( ) } } ) ) , c . on ( "destroy" , function ( ) { e . removeListener ( "submit" , a ) } ) ) } , destroy : function ( a ) { var b = CKEDITOR . filter . instances , c = this ; this . fire ( "beforeDestroy" ) ; ! a && x . call ( this ) ; this . editable ( null ) ; this . filter && delete this . filter ; CKEDITOR . tools . array . forEach ( CKEDITOR . tools . object . keys ( b ) , function ( a ) { a = b [ a ] ; c === a . editor && a . destroy ( ) } ) ; 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 } ; return c && c . state != CKEDITOR . TRISTATE _DISABLED && ! 1 !== this . fire ( "beforeCommandExec" , d ) && ( d . returnValue = c . exec ( d . commandData ) , ! c . async && ! 1 !== this . fire ( "afterCommandExec" , d ) ) ? d . returnValue : ! 1 } , getCommand : function ( a ) { return this . commands [ a ] } ,
getData : function ( a ) { ! a && this . fire ( "beforeGetData" ) ; var b = this . _ . data ; "string" != typeof b && ( 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" ) ; "string" != typeof a && ( a = ( a = this . element ) && this . elementMode == CKEDITOR . ELEMENT _MODE _REPLACE ? a . is ( "textarea" ) ? a . getValue ( ) : a . getHtml ( ) : "" ) ; return a } , loadSnapshot : function ( a ) { this . fire ( "loadSnapshot" ,
a ) } , setData : function ( a , b , c ) { var d = ! 0 , e = b ; b && "object" == typeof b && ( c = b . internal , e = b . callback , d = ! b . noSnapshot ) ; ! c && d && this . fire ( "saveSnapshot" ) ; if ( e || ! c ) this . once ( "dataReady" , function ( a ) { ! c && d && this . fire ( "saveSnapshot" ) ; e && e . call ( a . editor ) } ) ; a = { dataValue : a } ; ! c && this . fire ( "setData" , a ) ; this . _ . data = a . dataValue ; ! c && this . fire ( "afterSetData" , a ) } , setReadOnly : function ( a ) { a = null == a || a ; this . readOnly != a && ( this . readOnly = a , this . keystrokeHandler . blockedKeystrokes [ 8 ] = + a , this . editable ( ) . setReadOnly ( a ) , this . fire ( "readOnly" ) ) } ,
insertHtml : function ( a , b , c ) { this . fire ( "insertHtml" , { dataValue : a , mode : b , range : c } ) } , insertText : function ( a ) { this . fire ( "insertText" , a ) } , insertElement : function ( a ) { this . fire ( "insertElement" , a ) } , getSelectedHtml : function ( a ) { var b = this . editable ( ) , c = this . getSelection ( ) , c = c && c . getRanges ( ) ; if ( ! b || ! c || 0 === c . length ) return null ; b = z ( c , b ) ; return a ? b . getHtml ( ) : b } , extractSelectedHtml : function ( a , b ) { var c = this . editable ( ) , d = this . getSelection ( ) . getRanges ( ) , e = new CKEDITOR . dom . documentFragment , f ; if ( ! c || 0 === d . length ) return null ;
for ( f = 0 ; f < d . length ; f ++ ) e . append ( c . extractHtmlFromRange ( d [ f ] , b ) ) ; b || this . getSelection ( ) . selectRanges ( [ d [ 0 ] ] ) ; return a ? e . getHtml ( ) : e } , focus : function ( ) { this . fire ( "beforeFocus" ) } , checkDirty : function ( ) { return "ready" == this . status && this . _ . previousValue !== this . getSnapshot ( ) } , resetDirty : function ( ) { this . _ . previousValue = this . getSnapshot ( ) } , updateElement : function ( ) { return x . call ( this ) } , setKeystroke : function ( ) { for ( var a = this . keystrokeHandler . keystrokes , b = CKEDITOR . tools . isArray ( arguments [ 0 ] ) ? arguments [ 0 ] : [ [ ] . slice . call ( arguments ,
0 ) ] , c , d , e = b . length ; e -- ; ) c = b [ e ] , d = 0 , CKEDITOR . tools . isArray ( c ) && ( d = c [ 1 ] , c = c [ 0 ] ) , d ? a [ c ] = d : delete a [ c ] } , getCommandKeystroke : function ( a , b ) { var c = "string" === typeof a ? this . getCommand ( a ) : a , d = [ ] ; if ( c ) { var e = CKEDITOR . tools . object . findKey ( this . commands , c ) , f = this . keystrokeHandler . keystrokes ; if ( c . fakeKeystroke ) d . push ( c . fakeKeystroke ) ; else for ( var g in f ) f [ g ] === e && d . push ( g ) } return b ? d : d [ 0 ] || null } , addFeature : function ( a ) { return this . filter . addFeature ( a ) } , setActiveFilter : function ( a ) { a || ( a = this . filter ) ; 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 , ! 0 ) ) ) } , 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" ) } ,
showNotification : function ( a ) { alert ( a ) } , isDetached : function ( ) { return ! ! this . container && this . container . isDetached ( ) } , isDestroyed : function ( ) { return "destroyed" === this . status } } ) ; CKEDITOR . editor . _getEditorElement = function ( a ) { if ( ! CKEDITOR . env . isCompatible ) return null ; var b = CKEDITOR . dom . element . get ( a ) ; return b ? b . getEditor ( ) ? ( CKEDITOR . error ( "editor-element-conflict" , { editorName : b . getEditor ( ) . name } ) , null ) : b : ( CKEDITOR . error ( "editor-incorrect-element" , { element : a } ) , null ) } ; CKEDITOR . editor . initializeDelayedEditorCreation =
function ( a , b , c ) { if ( b . delayIfDetached _callback ) CKEDITOR . warn ( "editor-delayed-creation" , { method : "callback" } ) , b . delayIfDetached _callback ( function ( ) { CKEDITOR [ c ] ( a , b ) ; CKEDITOR . warn ( "editor-delayed-creation-success" , { method : "callback" } ) } ) ; else { var d = void 0 === b . delayIfDetached _interval ? CKEDITOR . config . delayIfDetached _interval : b . delayIfDetached _interval , e ; CKEDITOR . warn ( "editor-delayed-creation" , { method : "interval - " + d + " ms" } ) ; e = setInterval ( function ( ) { a . isDetached ( ) || ( clearInterval ( e ) , CKEDITOR [ c ] ( a , b ) , CKEDITOR . warn ( "editor-delayed-creation-success" ,
{ method : "interval - " + d + " ms" } ) ) } , d ) } } ; CKEDITOR . editor . shouldDelayEditorCreation = function ( a , b ) { CKEDITOR . editor . mergeDelayedCreationConfigs ( b ) ; return b && b . delayIfDetached && a . isDetached ( ) } ; CKEDITOR . editor . mergeDelayedCreationConfigs = function ( a ) { a && ( a . delayIfDetached = "boolean" === typeof a . delayIfDetached ? a . delayIfDetached : CKEDITOR . config . delayIfDetached , a . delayIfDetached _interval = isNaN ( a . delayIfDetached _interval ) ? CKEDITOR . config . delayIfDetached _interval : a . delayIfDetached _interval , a . delayIfDetached _callback =
a . delayIfDetached _callback || CKEDITOR . config . delayIfDetached _callback ) } } ) ( ) ; CKEDITOR . ELEMENT _MODE _NONE = 0 ; CKEDITOR . ELEMENT _MODE _REPLACE = 1 ; CKEDITOR . ELEMENT _MODE _APPENDTO = 2 ; CKEDITOR . ELEMENT _MODE _INLINE = 3 ; CKEDITOR . config . delayIfDetached = ! 1 ; CKEDITOR . config . delayIfDetached _callback = void 0 ; CKEDITOR . config . delayIfDetached _interval = 50 ; 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 , d = { 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 , e = 0 , k ; c = this . _ . htmlPartsRegex . exec ( b ) ; ) { f = c . index ; if ( f > e ) if ( e = b . substring ( e , f ) , k ) k . push ( e ) ; else this . onText ( e ) ;
e = this . _ . htmlPartsRegex . lastIndex ; if ( f = c [ 1 ] ) if ( f = f . toLowerCase ( ) , k && CKEDITOR . dtd . $cdata [ f ] && ( this . onCDATA ( k . join ( "" ) ) , k = null ) , ! k ) { this . onTagClose ( f ) ; continue } if ( k ) k . push ( c [ 0 ] ) ; else if ( f = c [ 3 ] ) { if ( f = f . toLowerCase ( ) , ! /="/ . test ( f ) ) { var h = { } , l , q = c [ 4 ] ; c = ! ! c [ 5 ] ; if ( q ) for ( ; l = a . exec ( q ) ; ) { var g = l [ 1 ] . toLowerCase ( ) ; l = l [ 2 ] || l [ 3 ] || l [ 4 ] || "" ; h [ g ] = ! l && d [ g ] ? g : CKEDITOR . tools . htmlDecodeAttr ( l ) } this . onTagOpen ( f , h , c ) ; ! k && CKEDITOR . dtd . $cdata [ f ] && ( k = [ ] ) } } else if ( f = c [ 2 ] ) this . onComment ( f ) } if ( b . length > e ) this . onText ( b . substring ( e ,
b . length ) ) } } } ) ( ) ;
@ -309,13 +309,13 @@ CKEDITOR.htmlParser.comment.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlPar
( 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 ( a ) { var d = this . getAscendant ( "style" ) ; if ( d && d . getAscendant ( { math : 1 , svg : 1 } ) ) { var d = CKEDITOR . htmlParser . fragment . fromHtml ( this . value ) , b = new CKEDITOR . htmlParser . basicWriter ; a . applyTo ( d ) ; d . writeHtml ( b ) ; this . value = b . getHtml ( ) } } , writeHtml : function ( a ) { a . write ( this . value ) } } ) } ) ( ) ; "use strict" ;
CKEDITOR . htmlParser . fragment = function ( ) { this . children = [ ] ; this . parent = null ; this . _ = { isBlockLike : ! 0 , hasInlineStarted : ! 1 } } ;
( function ( ) { function a ( a ) { return a . attributes [ "data-cke-survive" ] ? ! 1 : "a" == a . name && a . attributes . href || CKEDITOR . dtd . $removeEmpty [ a . name ] } var d = 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 ( e , k , h ) { function l ( a ) { var b ; if ( 0 < n . length ) for ( var c = 0 ; c < n . length ; c ++ ) { var d = n [ c ] , e = d . name , f = CKEDITOR . dtd [ e ] , g = u. name && CKEDITOR . dtd [ u . name ] ; g && ! g [ e ] || a && f && ! f [ a ] && CKEDITOR . dtd [ a ] ? e == u. name && ( y ( u , u . parent , 1 ) , c -- ) : ( b || ( q ( ) , b = 1 ) , d = d . clone ( ) , d . parent = u, u = d , n . splice ( c , 1 ) , c -- ) } } function q ( ) { for ( ; H. length ; ) y ( H . shift ( ) , u ) } function g ( a ) { if ( a . _ . isBlockLike && "pre" != a . name && "textarea" != a . name ) { var b = a . children . length , c = a . children [ b - 1 ] , d ; c && c . type == CKEDITOR . NODE _TEXT && ( ( d = CKEDITOR . tools . rtrim ( c . value ) ) ?
c . value = d : a . children . length = b - 1 ) } } function y ( b , c , d ) { c = c || u|| v ; var e = u ; void 0 === b . previous && ( z( c , b ) && ( u = c , E . onTagOpen ( h , { } ) , b . returnPoint = c = u ) , g ( b ) , a ( b ) && ! b . children . length || c . add ( b ) , "pre" == b . name && ( J = ! 1 ) , "textarea" == b . name && ( I = ! 1 ) ) ; b . returnPoint ? ( u = b . returnPoint , delete b . returnPoint ) : u= d ? c : e } function z ( a , b ) { if ( ( a == v || "body" == a . name ) && 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 x ( a , b ) { return a in CKEDITOR . dtd . $listItem || a in CKEDITOR . dtd . $tableContent ? a == b || "dt" == a && "dd" == b || "dd" == a && "dt" == b : ! 1 } var E= new CKEDITOR . htmlParser , v = k instanceof CKEDITOR . htmlParser . element ? k : "string" == typeof k ? new CKEDITOR . htmlParser . element ( k ) : new CKEDITOR . htmlParser . fragment , n= [ ] , H = [ ] , u = v , I = "textarea" == v . name , J = "pre" == v . name ; E . onTagOpen = function ( e , f , g , h ) { f = new CKEDITOR . htmlParser . element ( e , f ) ; f . isUnknown && g && ( f . isEmpty = ! 0 ) ; f . isOptionalClose = h ;
if ( a ( f ) ) n . push ( f ) ; else { if ( "pre" == e ) J = ! 0 ; else { if ( "br" == e && J) { u . add ( new CKEDITOR . htmlParser . text ( "\n" ) ) ; return } "textarea" == e && ( I = ! 0 ) } if ( "br" == e ) H . push ( f ) ; else { for ( ; ! ( h = ( g = u . name ) ? CKEDITOR . dtd [ g ] || ( u . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : c , f . isUnknown || u . isUnknown || h [ e ] ) ; ) if ( u. isOptionalClose ) E . onTagClose ( g ) ; else if ( e in b && g in b ) g = u . children , ( g = g [ g . length - 1 ] ) && "li" == g . name || y ( g = new CKEDITOR . htmlParser . element ( "li" ) , u ) , ! f . returnPoint && ( f . returnPoint = u) , u = g ; else if ( e in CKEDITOR . dtd . $listItem &&
! x( e , g ) ) E . onTagOpen ( "li" == e ? "ul" : "dl" , { } , 0 , 1 ) ; else if ( g in d && ! x ( e , g ) ) ! f . returnPoint && ( f . returnPoint = u) , u = u . parent ; else if ( g in CKEDITOR . dtd . $inline && n. unshift ( u ) , u . parent ) y ( u , u . parent , 1 ) ; else { f . isOrphan = 1 ; break } l ( e ) ; q ( ) ; f . parent = u; f . isEmpty ? y ( f ) : u = f } } } ; E . onTagClose = function ( a ) { for ( var b = n . length - 1 ; 0 <= b ; b -- ) if ( a == n[ b ] . name ) { n . splice ( b , 1 ) ; return } for ( var c = [ ] , d = [ ] , e = u; e != v && e . name != a ; ) e . _ . isBlockLike || d . unshift ( e ) , c . push ( e ) , e = e . returnPoint || e . parent ; if ( e != v ) { for ( b = 0 ; b < c . length ; b ++ ) { var f = c [ b ] ; y( f , f . parent ) } u =
e ; e . _ . isBlockLike && q ( ) ; y ( e , e . parent ) ; e == u&& ( u = u . parent ) ; n = n . concat ( d ) } "body" == a && ( h = ! 1 ) } ; E . onText = function ( a ) { if ( ! ( u. _ . hasInlineStarted && ! H . length || J || I ) && ( a = CKEDITOR . tools . ltrim ( a ) , 0 === a . length ) ) return ; var b = u . name , e = b ? CKEDITOR . dtd [ b ] || ( u . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : c ; if ( ! I && ! e [ "#" ] && b in d ) E . onTagOpen ( f [ b ] || "" ) , E . onText ( a ) ; else { q ( ) ; l ( ) ; J|| I || ( a = a . replace ( /[\t\r\n ]{2,}|[\t\r\n]/g , " " ) ) ; a = new CKEDITOR . htmlParser . text ( a ) ; if ( z( u , a ) ) this . onTagOpen ( h , { } , 0 , 1 ) ; u. add ( a ) } } ; E . onCDATA =
function ( a ) { u . add ( new CKEDITOR . htmlParser . cdata ( a ) ) } ; E . onComment = function ( a ) { q ( ) ; l ( ) ; u . add ( new CKEDITOR . htmlParser . comment ( a ) ) } ; E . parse ( e ) ; for ( q ( ) ; u!= v ; ) y ( u , u . parent , 1 ) ; g ( v ) ; return v } ; CKEDITOR . htmlParser . fragment . prototype = { type : CKEDITOR . NODE _DOCUMENT _FRAGMENT , add : function ( a , b ) { isNaN ( b ) && ( b = this . children . length ) ; var c = 0 < b ? this . children [ b - 1 ] : null ; if ( c ) { if ( a . _ . isBlockLike && c . type == CKEDITOR . NODE _TEXT && ( c . value = CKEDITOR . tools . rtrim ( c . value ) , 0 === c . value . length ) ) { this . children . pop ( ) ; this . add ( a ) ; return } c . next =
function ( e , k , h ) { function l ( a ) { var b ; if ( 0 < m . length ) for ( var c = 0 ; c < m . length ; c ++ ) { var d = m [ c ] , e = d . name , f = CKEDITOR . dtd [ e ] , g = v. name && CKEDITOR . dtd [ v . name ] ; g && ! g [ e ] || a && f && ! f [ a ] && CKEDITOR . dtd [ a ] ? e == v. name && ( w ( v , v . parent , 1 ) , c -- ) : ( b || ( q ( ) , b = 1 ) , d = d . clone ( ) , d . parent = v, v = d , m . splice ( c , 1 ) , c -- ) } } function q ( ) { for ( ; M. length ; ) w ( M . shift ( ) , v ) } function g ( a ) { if ( a . _ . isBlockLike && "pre" != a . name && "textarea" != a . name ) { var b = a . children . length , c = a . children [ b - 1 ] , d ; c && c . type == CKEDITOR . NODE _TEXT && ( ( d = CKEDITOR . tools . rtrim ( c . value ) ) ?
c . value = d : a . children . length = b - 1 ) } } function w ( b , c , d ) { c = c || v|| t ; var e = v ; void 0 === b . previous && ( x( c , b ) && ( v = c , A . onTagOpen ( h , { } ) , b . returnPoint = c = v ) , g ( b ) , a ( b ) && ! b . children . length || c . add ( b ) , "pre" == b . name && ( E = ! 1 ) , "textarea" == b . name && ( J = ! 1 ) ) ; b . returnPoint ? ( v = b . returnPoint , delete b . returnPoint ) : v= d ? c : e } function x ( a , b ) { if ( ( a == t || "body" == a . name ) && 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 z ( a , b ) { return a in CKEDITOR . dtd . $listItem || a in CKEDITOR . dtd . $tableContent ? a == b || "dt" == a && "dd" == b || "dd" == a && "dt" == b : ! 1 } var A= new CKEDITOR . htmlParser , t = k instanceof CKEDITOR . htmlParser . element ? k : "string" == typeof k ? new CKEDITOR . htmlParser . element ( k ) : new CKEDITOR . htmlParser . fragment , m= [ ] , M = [ ] , v = t , J = "textarea" == t . name , E = "pre" == t . name ; A . onTagOpen = function ( e , f , g , h ) { f = new CKEDITOR . htmlParser . element ( e , f ) ; f . isUnknown && g && ( f . isEmpty = ! 0 ) ; f . isOptionalClose = h ;
if ( a ( f ) ) m . push ( f ) ; else { if ( "pre" == e ) E = ! 0 ; else { if ( "br" == e && E) { v . add ( new CKEDITOR . htmlParser . text ( "\n" ) ) ; return } "textarea" == e && ( J = ! 0 ) } if ( "br" == e ) M . push ( f ) ; else { for ( ; ! ( h = ( g = v . name ) ? CKEDITOR . dtd [ g ] || ( v . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : c , f . isUnknown || v . isUnknown || h [ e ] ) ; ) if ( v. isOptionalClose ) A . onTagClose ( g ) ; else if ( e in b && g in b ) g = v . children , ( g = g [ g . length - 1 ] ) && "li" == g . name || w ( g = new CKEDITOR . htmlParser . element ( "li" ) , v ) , ! f . returnPoint && ( f . returnPoint = v) , v = g ; else if ( e in CKEDITOR . dtd . $listItem &&
! z( e , g ) ) A . onTagOpen ( "li" == e ? "ul" : "dl" , { } , 0 , 1 ) ; else if ( g in d && ! z ( e , g ) ) ! f . returnPoint && ( f . returnPoint = v) , v = v . parent ; else if ( g in CKEDITOR . dtd . $inline && m. unshift ( v ) , v . parent ) w ( v , v . parent , 1 ) ; else { f . isOrphan = 1 ; break } l ( e ) ; q ( ) ; f . parent = v; f . isEmpty ? w ( f ) : v = f } } } ; A . onTagClose = function ( a ) { for ( var b = m . length - 1 ; 0 <= b ; b -- ) if ( a == m[ b ] . name ) { m . splice ( b , 1 ) ; return } for ( var c = [ ] , d = [ ] , e = v; e != t && e . name != a ; ) e . _ . isBlockLike || d . unshift ( e ) , c . push ( e ) , e = e . returnPoint || e . parent ; if ( e != t ) { for ( b = 0 ; b < c . length ; b ++ ) { var f = c [ b ] ; w( f , f . parent ) } v =
e ; e . _ . isBlockLike && q ( ) ; w ( e , e . parent ) ; e == v&& ( v = v . parent ) ; m = m . concat ( d ) } "body" == a && ( h = ! 1 ) } ; A . onText = function ( a ) { if ( ! ( v. _ . hasInlineStarted && ! M . length || E || J ) && ( a = CKEDITOR . tools . ltrim ( a ) , 0 === a . length ) ) return ; var b = v . name , e = b ? CKEDITOR . dtd [ b ] || ( v . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : c ; if ( ! J && ! e [ "#" ] && b in d ) A . onTagOpen ( f [ b ] || "" ) , A . onText ( a ) ; else { q ( ) ; l ( ) ; E|| J || ( a = a . replace ( /[\t\r\n ]{2,}|[\t\r\n]/g , " " ) ) ; a = new CKEDITOR . htmlParser . text ( a ) ; if ( x( v , a ) ) this . onTagOpen ( h , { } , 0 , 1 ) ; v. add ( a ) } } ; A . onCDATA =
function ( a ) { v . add ( new CKEDITOR . htmlParser . cdata ( a ) ) } ; A . onComment = function ( a ) { q ( ) ; l ( ) ; v . add ( new CKEDITOR . htmlParser . comment ( a ) ) } ; A . parse ( e ) ; for ( q ( ) ; v!= t ; ) w ( v , v . parent , 1 ) ; g ( t ) ; return t } ; CKEDITOR . htmlParser . fragment . prototype = { type : CKEDITOR . NODE _DOCUMENT _FRAGMENT , add : function ( a , b ) { isNaN ( b ) && ( b = this . children . length ) ; var c = 0 < b ? this . children [ b - 1 ] : null ; if ( c ) { if ( a . _ . isBlockLike && c . type == CKEDITOR . NODE _TEXT && ( c . value = CKEDITOR . tools . rtrim ( c . value ) , 0 === c . value . length ) ) { this . children . pop ( ) ; this . add ( a ) ; return } c . next =
a } a . previous = c ; a . parent = this ; this . children . splice ( b , 0 , a ) ; 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 , ! 1 , 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 ++ ) ! 1 === this . children [ b ] . filter ( a ,
c ) && b -- } } , writeHtml : function ( a , b ) { b && this . filter ( b ) ; this . writeChildrenHtml ( a ) } , writeChildrenHtml : function ( a , b , c ) { var d = this . getFilterContext ( ) ; if ( c && ! this . parent && b ) b . onRoot ( d , this ) ; b && this . filterChildren ( b , ! 1 , d ) ; b = 0 ; c = this . children ; for ( d = c . length ; b < d ; b ++ ) c [ b ] . writeHtml ( a ) } , forEach : function ( a , b , c ) { if ( ! ( c || b && this . type != b ) ) var d = a ( this ) ; if ( ! 1 !== d ) { c = this . children ; for ( var f = 0 ; f < c . length ; f ++ ) d = c [ f ] , d . type == CKEDITOR . NODE _ELEMENT ? d . forEach ( a , b ) : b && d . type != b || a ( d ) } } , getFilterContext : function ( a ) { return a ||
{ } } } } ) ( ) ; "use strict" ;
@ -323,29 +323,29 @@ c)&&b--}},writeHtml:function(a,b){b&&this.filter(b);this.writeChildrenHtml(a)},w
c . priority ) ; "number" != typeof f && ( f = 10 ) ; "object" != typeof c && ( c = { } ) ; a . elementNames && this . elementNameRules . addMany ( a . elementNames , f , c ) ; a . attributeNames && this . attributeNameRules . addMany ( a . attributeNames , f , c ) ; a . elements && d ( this . elementsRules , a . elements , f , c ) ; a . attributes && d ( 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 , d ) { return this . textRules . exec ( a , c , d ) } , onComment : function ( a , c , d ) { return this . commentRules . exec ( a , c , d ) } , onRoot : function ( a , c ) { return this . rootRules . exec ( a , c ) } , onElement : function ( a , c ) { for ( var d = [ this . elementsRules [ "^" ] , this . elementsRules [ c . name ] , this . elementsRules . $ ] , e , k = 0 ; 3 > k ; k ++ ) if ( e = d [ k ] ) { e = e . exec ( a , c , this ) ; if ( ! 1 === e ) return null ; if ( e && e != c ) return this . onNode ( a , e ) ; if ( c . parent && ! c . name ) break } return c } ,
onNode : function ( a , c ) { var d = c . type ; return d == CKEDITOR . NODE _ELEMENT ? this . onElement ( a , c ) : d == CKEDITOR . NODE _TEXT ? new CKEDITOR . htmlParser . text ( this . onText ( a , c . value , c ) ) : d == CKEDITOR . NODE _COMMENT ? new CKEDITOR . htmlParser . comment ( this . onComment ( a , c . value , c ) ) : null } , onAttribute : function ( a , c , d , e ) { return ( d = this . attributesRules [ d ] ) ? d . exec ( a , e , c , this ) : e } } } ) ; CKEDITOR . htmlParser . filterRulesGroup = a ; a . prototype = { add : function ( a , c , d ) { this . rules . splice ( this . findIndex ( c ) , 0 , { value : a , priority : c , options : d } ) } , addMany : function ( a ,
c , d ) { for ( var e = [ this . findIndex ( c ) , 0 ] , k = 0 , h = a . length ; k < h ; k ++ ) e . push ( { value : a [ k ] , priority : c , options : d } ) ; this . rules . splice . apply ( this . rules , e ) } , findIndex : function ( a ) { for ( var c = this . rules , d = c . length - 1 ; 0 <= d && a < c [ d ] . priority ; ) d -- ; return d + 1 } , exec : function ( a , c ) { var d = c instanceof CKEDITOR . htmlParser . node || c instanceof CKEDITOR . htmlParser . fragment , e = Array . prototype . slice . call ( arguments , 1 ) , k = this . rules , h = k . length , l , q , g , y; for ( y = 0 ; y < h ; y ++ ) if ( d && ( l = c . type , q = c . name ) , g = k [ y ] , ! ( a . nonEditable && ! g . options . applyToAll ||
c , d ) { for ( var e = [ this . findIndex ( c ) , 0 ] , k = 0 , h = a . length ; k < h ; k ++ ) e . push ( { value : a [ k ] , priority : c , options : d } ) ; this . rules . splice . apply ( this . rules , e ) } , findIndex : function ( a ) { for ( var c = this . rules , d = c . length - 1 ; 0 <= d && a < c [ d ] . priority ; ) d -- ; return d + 1 } , exec : function ( a , c ) { var d = c instanceof CKEDITOR . htmlParser . node || c instanceof CKEDITOR . htmlParser . fragment , e = Array . prototype . slice . call ( arguments , 1 ) , k = this . rules , h = k . length , l , q , g , w; for ( w = 0 ; w < h ; w ++ ) if ( d && ( l = c . type , q = c . name ) , g = k [ w ] , ! ( a . nonEditable && ! g . options . applyToAll ||
a . nestedEditable && g . options . excludeNestedEditable ) ) { g = g . value . apply ( null , e ) ; if ( ! 1 === g || d && g && ( g . name != q || g . type != l ) ) return g ; null != g && ( e [ 0 ] = c = g ) } return c } , execOnName : function ( a , c ) { for ( var d = 0 , e = this . rules , k = e . length , h ; c && d < k ; d ++ ) h = e [ d ] , 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 , d ) { function g ( a ) { return a || CKEDITOR . env . needsNbspFiller ? new CKEDITOR . htmlParser . text ( " " ) : new CKEDITOR . htmlParser . element ( "br" , { "data-cke-bogus" : 1 } ) } function t ( a , d ) { return function ( f ) { if ( f . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ) { var p= [ ] , m = b ( f ) , t , D ; if ( m ) for ( r ( m , 1 ) && p . push ( m ) ; m ; ) e ( m ) && ( t = c ( m ) ) && r ( t ) && ( ( D = c ( t ) ) && ! e ( D ) ? p . push ( t ) : ( g ( h ) . insertAfter ( t ) , t . remove ( ) ) ) , m = m . previous ; for ( m = 0 ; m < p . length ; m ++ ) p [ m ] . remove ( ) ; if ( p = ! a || ! 1 !== ( "function" == typeof d ? d ( f ) : d ) ) h || CKEDITOR . env . needsBrFiller ||
f . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ? h || CKEDITOR . env . needsBrFiller || ! ( 7 < document . documentMode || f . name in CKEDITOR . dtd . tr || f . name in CKEDITOR . dtd . $listItem ) ? ( p= b ( f ) , p = ! p || "form" == f . name && "input" == p. name ) : p = ! 1 : p = ! 1 ; p && f . add ( g ( a ) ) } } } function r( a , b ) { if ( ( ! h || CKEDITOR . env . needsBrFiller ) && a . type == CKEDITOR . NODE _ELEMENT && "br" == a . name && ! a . attributes [ "data-cke-eol" ] ) return ! 0 ; var c ; return a . type == CKEDITOR . NODE _TEXT && ( c = a . value . match ( H ) ) && ( c . index && ( ( new CKEDITOR . htmlParser . text ( a . value . substring ( 0 , c . index ) ) ) . insertBefore ( a ) ,
a . value = c [ 0 ] ) , ! CKEDITOR . env . needsBrFiller && h && ( ! b || a . parent . name in w) || ! h && ( ( c = a . previous ) && "br" == c . name || ! c || e ( c ) ) ) ? ! 0 : ! 1 } var D= { elements : { } } , h = "html" == d , w = CKEDITOR . tools . extend ( { } , m) , B ; for ( B in w ) "#" in I [ B ] || delete w [ B ] ; for ( B in w ) D . elements [ B ] = t ( h , a . config . fillEmptyBlocks ) ; D . root = t ( h , ! 1 ) ; D . elements . br = function ( a ) { return function ( b ) { if ( b . parent . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ) { var d = b . attributes ; if ( "data-cke-bogus" in d || "data-cke-eol" in d ) delete d [ "data-cke-bogus" ] ; else { for ( d = b . next ; d && f ( d ) ; ) d =
d . next ; var p = c ( b ) ; ! d && e ( b . parent ) ? k ( b . parent , g ( a ) ) : e ( d ) && p&& ! e ( p ) && g ( a ) . insertBefore ( d ) } } } } ( h) ; return D } function d ( a , b ) { return a != CKEDITOR . ENTER _BR && ! 1 !== b ? a == CKEDITOR . ENTER _DIV ? "div" : "p" : ! 1 } 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 e ( a ) { return a &&
( a . type == CKEDITOR . NODE _ELEMENT && a . name in m || a . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT ) } function k ( a , b ) { var c = a . children [ a . children . length - 1 ] ; a . children . push ( b ) ; b . parent = a ; c && ( c . next = b , b . previous = c ) } function h ( a ) { a = a . attributes ; "false" != a . contenteditable && ( a [ "data-cke-editable" ] = a . contenteditable ? "true" : 1 ) ; a . contenteditable = "false" } function l ( a ) { a = a . attributes ; switch ( a [ "data-cke-editable" ] ) { case "true" : a . contenteditable = "true" ; break ; case "1" : delete a . contenteditable } } function q ( a ) { return a . replace ( r ,
function ( a , b , c ) { return "\x3c" + b + c . replace ( B , function ( a , b ) { return D . test ( b ) && - 1 == c . indexOf ( "data-cke-saved-" + b ) ? " data-cke-saved-" + a + " data-cke-" + CKEDITOR . rnd + "-" + a : a } ) + "\x3e" } ) } function g ( a , b ) { return a . replace ( b , function ( a , b , c ) { 0 === a . indexOf ( "\x3ctextarea" ) && ( a = b + x ( c ) . replace ( /</g , "\x26lt;" ) . replace ( />/g , "\x26gt;" ) + "\x3c/textarea\x3e" ) ; return "\x3ccke:encoded\x3e" + encodeURIComponent ( a ) + "\x3c/cke:encoded\x3e" } ) } function y ( a ) { return a . replace ( S , function ( a , b ) { return decodeURIComponent ( b ) } ) } function z ( a ) { return a . replace ( /\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g ,
function ( a ) { return "\x3c!--" + u + "{C}" + encodeURIComponent ( a ) . replace ( /--/g , "%2D%2D" ) + "--\x3e" } ) } function x ( a ) { return a . replace ( /\x3c!--\{cke_protected\}\{C\}([\s\S]+?)--\x3e/g , function ( a , b ) { return decodeURIComponent ( b ) } ) } function E ( a , b ) { var c = b . _ . dataStore ; return a . replace ( /\x3c!--\{cke_protected\}([\s\S]+?)--\x3e/g , function ( a , b ) { return decodeURIComponent ( b ) } ) . replace ( /\{cke_protected_(\d+)\}/g , function ( a , b ) { return c && c [ b ] || "" } ) } function v ( a , b ) { var c = [ ] , d = b . config . protectedSource , e = b . _ . dataStore || ( b . _ . dataStore =
{ id : 1 } ) , f = /<\!--\{cke_temp(comment)?\}(\d*?)--\x3e/g , d = [ /<script[\s\S]*?(<\/script>|$)/gi , /<noscript[\s\S]*?<\/noscript>/gi , /<meta[\s\S]*?\/?>/gi ] . concat ( d ) ; a = a . replace ( /\x3c!--[\s\S]*?--\x3e/g , function ( a ) { return "\x3c!--{cke_tempcomment}" + ( c . push ( a ) - 1 ) + "--\x3e" } ) ; for ( var g = 0 ; g < d . length ; g ++ ) a = a . replace ( d [ g ] , function ( a ) { a = a . replace ( f , function ( a , b , d ) { return c [ d ] } ) ; return /cke_temp(comment)?/ . test ( a ) ? a : "\x3c!--{cke_temp}" + ( c . push ( a ) - 1 ) + "--\x3e" } ) ; a = a . replace ( f , function ( a , b , d ) { return "\x3c!--" + u + ( b ? "{C}" :
"" ) + encodeURIComponent ( c [ d ] ) . replace ( /--/g , "%2D%2D" ) + "--\x3e" } ) ; a = a . replace ( /<\w+(?:\s+(?:(?:[^\s=>]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=\/>]+))+\s*\/?>/g , function ( a ) { return a . replace ( /\x3c!--\{cke_protected\}([^>]*)--\x3e/g , function ( a , b ) { e [ e . id ] = decodeURIComponent ( b ) ; return "{cke_protected_" + e . id ++ + "}" } ) } ) ; return a = a . replace ( /<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g , function ( a , c , d , e ) { return "\x3c" + c + d + "\x3e" + E( x ( e ) , b ) + "\x3c/" + c + "\x3e" } ) } var n ; CKEDITOR . htmlDataProcessor = function ( b ) { var c ,
e , f = this ; this . editor = b ; this . dataFilter = c = new CKEDITOR . htmlParser . filter ; this . htmlFilter = e = new CKEDITOR . htmlParser . filter ; this . writer = new CKEDITOR . htmlParser . basicWriter ; c . addRules ( C) ; c . addRules ( K , { applyToAll : ! 0 } ) ; c . addRules ( a ( b , "data" ) , { applyToAll : ! 0 } ) ; e . addRules ( A) ; e . addRules ( L , { applyToAll : ! 0 } ) ; e . addRules ( a ( b , "html" ) , { applyToAll : ! 0 } ) ; b . on ( "toHtml" , function ( a ) { a = a . data ; var c = a . dataValue , e , c = n( c ) , c = v ( c , b ) , c = g ( c , Q ) , c = q ( c ) , c = g ( c , w) , c = c . replace ( t , "$1cke:$2" ) , c = c . replace ( N , "\x3ccke:$1$2\x3e\x3c/cke:$1\x3e" ) ,
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" ) ; e = a . context || b . editable ( ) . getName ( ) ; var f ; CKEDITOR . env . ie && 9 > CKEDITOR . env . version && "pre" == e && ( e = "div" , c = "\x3cpre\x3e" + c + "\x3c/pre\x3e" , f = 1 ) ; e = b . document . createElement ( e ) ; e . setHtml ( "a" + c ) ; c = e . getHtml ( ) . substr ( 1 ) ; c = c . replace ( new RegExp ( "data-cke-" + CKEDITOR . rnd + "-" , "ig" ) , "" ) ; f && ( c = c . replace ( /^<pre>|<\/pre>$/gi , "" ) ) ; c = c . replace ( O, "$1$2" ) ; c = y ( c ) ; c = x ( c ) ; e = ! 1 === a . fixForBody ? ! 1 :
( function ( ) { function a ( a , d ) { function g ( a ) { return a || CKEDITOR . env . needsNbspFiller ? new CKEDITOR . htmlParser . text ( " " ) : new CKEDITOR . htmlParser . element ( "br" , { "data-cke-bogus" : 1 } ) } function r ( a , d ) { return function ( f ) { if ( f . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ) { var n= [ ] , r = b ( f ) , B , h ; if ( r ) for ( p ( r , 1 ) && n . push ( r ) ; r ; ) e ( r ) && ( B = c ( r ) ) && p ( B ) && ( ( h = c ( B ) ) && ! e ( h ) ? n . push ( B ) : ( g ( D ) . insertAfter ( B ) , B . remove ( ) ) ) , r = r . previous ; for ( r = 0 ; r < n . length ; r ++ ) n [ r ] . remove ( ) ; if ( n = ! a || ! 1 !== ( "function" == typeof d ? d ( f ) : d ) ) D || CKEDITOR . env . needsBrFiller ||
f . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ? D || CKEDITOR . env . needsBrFiller || ! ( 7 < document . documentMode || f . name in CKEDITOR . dtd . tr || f . name in CKEDITOR . dtd . $listItem ) ? ( n= b ( f ) , n = ! n || "form" == f . name && "input" == n. name ) : n = ! 1 : n = ! 1 ; n && f . add ( g ( a ) ) } } } function p( a , b ) { if ( ( ! D || CKEDITOR . env . needsBrFiller ) && a . type == CKEDITOR . NODE _ELEMENT && "br" == a . name && ! a . attributes [ "data-cke-eol" ] ) return ! 0 ; var c ; return a . type == CKEDITOR . NODE _TEXT && ( c = a . value . match ( M ) ) && ( c . index && ( ( new CKEDITOR . htmlParser . text ( a . value . substring ( 0 , c . index ) ) ) . insertBefore ( a ) ,
a . value = c [ 0 ] ) , ! CKEDITOR . env . needsBrFiller && D && ( ! b || a . parent . name in h) || ! D && ( ( c = a . previous ) && "br" == c . name || ! c || e ( c ) ) ) ? ! 0 : ! 1 } var B= { elements : { } } , D = "html" == d , h = CKEDITOR . tools . extend ( { } , u) , y ; for ( y in h ) "#" in J [ y ] || delete h [ y ] ; for ( y in h ) B . elements [ y ] = r ( D , a . config . fillEmptyBlocks ) ; B . root = r ( D , ! 1 ) ; B . elements . br = function ( a ) { return function ( b ) { if ( b . parent . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ) { var d = b . attributes ; if ( "data-cke-bogus" in d || "data-cke-eol" in d ) delete d [ "data-cke-bogus" ] ; else { for ( d = b . next ; d && f ( d ) ; ) d =
d . next ; var n = c ( b ) ; ! d && e ( b . parent ) ? k ( b . parent , g ( a ) ) : e ( d ) && n&& ! e ( n ) && g ( a ) . insertBefore ( d ) } } } } ( D) ; return B } function d ( a , b ) { return a != CKEDITOR . ENTER _BR && ! 1 !== b ? a == CKEDITOR . ENTER _DIV ? "div" : "p" : ! 1 } 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 e ( a ) { return a &&
( a . type == CKEDITOR . NODE _ELEMENT && a . name in u || a . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT ) } function k ( a , b ) { var c = a . children [ a . children . length - 1 ] ; a . children . push ( b ) ; b . parent = a ; c && ( c . next = b , b . previous = c ) } function h ( a ) { a = a . attributes ; "false" != a . contenteditable && ( a [ "data-cke-editable" ] = a . contenteditable ? "true" : 1 ) ; a . contenteditable = "false" } function l ( a ) { a = a . attributes ; switch ( a [ "data-cke-editable" ] ) { case "true" : a . contenteditable = "true" ; break ; case "1" : delete a . contenteditable } } function q ( a ) { return a . replace ( r ,
function ( a , b , c ) { return "\x3c" + b + c . replace ( D , function ( a , b ) { return B . test ( b ) && - 1 == c . indexOf ( "data-cke-saved-" + b ) ? " data-cke-saved-" + a + " data-cke-" + CKEDITOR . rnd + "-" + a : a } ) + "\x3e" } ) } function g ( a , b ) { return a . replace ( b , function ( a , b , c ) { 0 === a . indexOf ( "\x3ctextarea" ) && ( a = b + z ( c ) . replace ( /</g , "\x26lt;" ) . replace ( />/g , "\x26gt;" ) + "\x3c/textarea\x3e" ) ; return "\x3ccke:encoded\x3e" + encodeURIComponent ( a ) + "\x3c/cke:encoded\x3e" } ) } function w ( a ) { return a . replace ( O , function ( a , b ) { return decodeURIComponent ( b ) } ) } function x ( a ) { return a . replace ( /\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g ,
function ( a ) { return "\x3c!--" + v + "{C}" + encodeURIComponent ( a ) . replace ( /--/g , "%2D%2D" ) + "--\x3e" } ) } function z ( a ) { return a . replace ( /\x3c!--\{cke_protected\}\{C\}([\s\S]+?)--\x3e/g , function ( a , b ) { return decodeURIComponent ( b ) } ) } function A ( a , b ) { var c = b . _ . dataStore ; return a . replace ( /\x3c!--\{cke_protected\}([\s\S]+?)--\x3e/g , function ( a , b ) { return decodeURIComponent ( b ) } ) . replace ( /\{cke_protected_(\d+)\}/g , function ( a , b ) { return c && c [ b ] || "" } ) } function t ( a , b ) { var c = [ ] , d = b . config . protectedSource , e = b . _ . dataStore || ( b . _ . dataStore =
{ id : 1 } ) , f = /<\!--\{cke_temp(comment)?\}(\d*?)--\x3e/g , d = [ /<script[\s\S]*?(<\/script>|$)/gi , /<noscript[\s\S]*?<\/noscript>/gi , /<meta[\s\S]*?\/?>/gi ] . concat ( d ) ; a = a . replace ( /\x3c!--[\s\S]*?--\x3e/g , function ( a ) { return "\x3c!--{cke_tempcomment}" + ( c . push ( a ) - 1 ) + "--\x3e" } ) ; for ( var g = 0 ; g < d . length ; g ++ ) a = a . replace ( d [ g ] , function ( a ) { a = a . replace ( f , function ( a , b , d ) { return c [ d ] } ) ; return /cke_temp(comment)?/ . test ( a ) ? a : "\x3c!--{cke_temp}" + ( c . push ( a ) - 1 ) + "--\x3e" } ) ; a = a . replace ( f , function ( a , b , d ) { return "\x3c!--" + v + ( b ? "{C}" :
"" ) + encodeURIComponent ( c [ d ] ) . replace ( /--/g , "%2D%2D" ) + "--\x3e" } ) ; a = a . replace ( /<\w+(?:\s+(?:(?:[^\s=>]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=\/>]+))+\s*\/?>/g , function ( a ) { return a . replace ( /\x3c!--\{cke_protected\}([^>]*)--\x3e/g , function ( a , b ) { e [ e . id ] = decodeURIComponent ( b ) ; return "{cke_protected_" + e . id ++ + "}" } ) } ) ; return a = a . replace ( /<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g , function ( a , c , d , e ) { return "\x3c" + c + d + "\x3e" + A( z ( e ) , b ) + "\x3c/" + c + "\x3e" } ) } var m ; CKEDITOR . htmlDataProcessor = function ( b ) { var c ,
e , f = this ; this . editor = b ; this . dataFilter = c = new CKEDITOR . htmlParser . filter ; this . htmlFilter = e = new CKEDITOR . htmlParser . filter ; this . writer = new CKEDITOR . htmlParser . basicWriter ; c . addRules ( F) ; c . addRules ( H , { applyToAll : ! 0 } ) ; c . addRules ( a ( b , "data" ) , { applyToAll : ! 0 } ) ; e . addRules ( y) ; e . addRules ( K , { applyToAll : ! 0 } ) ; e . addRules ( a ( b , "html" ) , { applyToAll : ! 0 } ) ; b . on ( "toHtml" , function ( a ) { a = a . data ; var c = a . dataValue , e , c = m( c ) , c = t ( c , b ) , c = g ( c , T ) , c = q ( c ) , c = g ( c , G) , c = c . replace ( p , "$1cke:$2" ) , c = c . replace ( N , "\x3ccke:$1$2\x3e\x3c/cke:$1\x3e" ) ,
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" ) ; e = a . context || b . editable ( ) . getName ( ) ; var f ; CKEDITOR . env . ie && 9 > CKEDITOR . env . version && "pre" == e && ( e = "div" , c = "\x3cpre\x3e" + c + "\x3c/pre\x3e" , f = 1 ) ; e = b . document . createElement ( e ) ; e . setHtml ( "a" + c ) ; c = e . getHtml ( ) . substr ( 1 ) ; c = c . replace ( new RegExp ( "data-cke-" + CKEDITOR . rnd + "-" , "ig" ) , "" ) ; f && ( c = c . replace ( /^<pre>|<\/pre>$/gi , "" ) ) ; c = c . replace ( I, "$1$2" ) ; c = w ( c ) ; c = z ( c ) ; e = ! 1 === a . fixForBody ? ! 1 :
d ( a . enterMode , b . config . autoParagraph ) ; c = CKEDITOR . htmlParser . fragment . fromHtml ( c , a . context , e ) ; e && ( f = c , ! f . children . length && CKEDITOR . dtd [ f . name ] [ e ] && ( e = new CKEDITOR . htmlParser . element ( e ) , f . add ( e ) ) ) ; a . dataValue = c } , null , null , 5 ) ; b . on ( "toHtml" , function ( a ) { a . data . filter . applyTo ( a . data . dataValue , ! 0 , a . data . dontFilter , a . data . enterMode ) && b . fire ( "dataFiltered" ) } , null , null , 6 ) ; b . on ( "toHtml" , function ( a ) { a . data . dataValue . filterChildren ( f . dataFilter , ! 0 ) } , null , null , 10 ) ; b . on ( "toHtml" , function ( a ) { a = a . data ; var b = a . dataValue ,
c = new CKEDITOR . htmlParser . basicWriter ; b . writeChildrenHtml ( c ) ; b = c . getHtml ( ! 0 ) ; a . dataValue = z ( 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 , d ( a . data . enterMode , b . config . autoParagraph ) ) } , null , null , 5 ) ; b . on ( "toDataFormat" , function ( a ) { a . data . dataValue . filterChildren ( f . htmlFilter , ! 0 ) } , null , null , 10 ) ; b . on ( "toDataFormat" , function ( a ) { a . data . filter . applyTo ( a . data . dataValue ,
! 1 , ! 0 ) } , null , null , 11 ) ; b . on ( "toDataFormat" , function ( a ) { var c = a . data . dataValue , d = f . writer ; d . reset ( ) ; c . writeChildrenHtml ( d ) ; c = d . getHtml ( ! 0 ) ; c = x( c ) ; c = E ( c , b ) ; a . data . dataValue = c } , null , null , 15 ) } ; CKEDITOR . htmlDataProcessor . prototype = { toHtml : function ( a , b , c , d ) { var e = this . editor , f , g , m, t ; b && "object" == typeof b ? ( f = b . context , c = b . fixForBody , d = b . dontFilter , g = b . filter , m= b . enterMode , t = b . protectedWhitespaces ) : f = b ; f || null === f || ( f = e . editable ( ) . getName ( ) ) ; return e . fire ( "toHtml" , { dataValue : a , context : f , fixForBody : c , dontFilter : d ,
filter : g || e . filter , enterMode : m|| e . enterMode , protectedWhitespaces : t } ) . dataValue } , toDataFormat : function ( a , b ) { var c , d , e ; b && ( c = b . context , d = b . filter , e = b . enterMode ) ; c || null === c || ( c = this . editor . editable ( ) . getName ( ) ) ; return this . editor . fire ( "toDataFormat" , { dataValue : a , filter : d || this . editor . filter , context : c , enterMode : e || this . editor . enterMode } ) . dataValue } , protectSource : function ( a ) { return v ( a , this . editor ) } , unprotectSource : function ( a ) { return E ( a , this . editor ) } , unprotectRealComments : function ( a ) { return x( a ) } } ; var H =
/(?: |\xa0)$/ , u= "{cke_protected}" , I = CKEDITOR . dtd , J = "caption colgroup col thead tfoot tbody" . split ( " " ) , m = CKEDITOR . tools . extend ( { } , I. $blockLimit , I . $block ) , C = { elements : { input : h , textarea : h } } , K = { attributeNames : [ [ /^on/ , "data-cke-pa-on" ] , [ /^srcdoc/ , "data-cke-pa-srcdoc" ] , [ /^data-cke-expando$/ , "" ] ] , elements : { iframe : function ( a ) { if ( a . attributes && a . attributes . src ) { var b = a . attributes . src . toLowerCase ( ) . replace ( /[^a-z]/gi , "" ) ; if ( 0 === b . indexOf ( "javascript" ) || 0 === b . indexOf ( "data" ) ) a . attributes [ "data-cke-pa-src" ] =
a . attributes . src , delete a . attributes . src } } } } , A = { elements : { embed : function ( a ) { var b = a . parent ; if ( b && "object" == b . name ) { var c = b . attributes . width , b = b . attributes . height ; c && ( a . attributes . width = c ) ; b && ( a . attributes . height = b ) } } , a : function ( a ) { var b = a . attributes ; if ( ! ( a . children . length || b . name || b . id || a . attributes [ "data-cke-saved-name" ] ) ) return ! 1 } } } , L = { 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 ! 1 ; for ( var c = [ "name" , "href" , "src" ] , d , e = 0 ; e < c . length ; e ++ ) d = "data-cke-saved-" + c [ e ] , d in b && delete b [ c [ e ] ] } return a } , table : function ( a ) { a . children . slice ( 0 ) . sort ( function ( a , b ) { var c , d ; a . type == CKEDITOR . NODE _ELEMENT && b . type == a . type && ( c = CKEDITOR . tools . indexOf ( J , a . name ) , d = CKEDITOR . tools . indexOf ( J , b . name ) ) ; - 1 < c && - 1 < d && 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 = ! 0 ; return a } , span : function ( a ) { "Apple-style-span" ==
c = new CKEDITOR . htmlParser . basicWriter ; b . writeChildrenHtml ( c ) ; b = c . getHtml ( ! 0 ) ; a . dataValue = x ( 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 , d ( a . data . enterMode , b . config . autoParagraph ) ) } , null , null , 5 ) ; b . on ( "toDataFormat" , function ( a ) { a . data . dataValue . filterChildren ( f . htmlFilter , ! 0 ) } , null , null , 10 ) ; b . on ( "toDataFormat" , function ( a ) { a . data . filter . applyTo ( a . data . dataValue ,
! 1 , ! 0 ) } , null , null , 11 ) ; b . on ( "toDataFormat" , function ( a ) { var c = a . data . dataValue , d = f . writer ; d . reset ( ) ; c . writeChildrenHtml ( d ) ; c = d . getHtml ( ! 0 ) ; c = z( c ) ; c = A ( c , b ) ; a . data . dataValue = c } , null , null , 15 ) } ; CKEDITOR . htmlDataProcessor . prototype = { toHtml : function ( a , b , c , d ) { var e = this . editor , f , g , r, p ; b && "object" == typeof b ? ( f = b . context , c = b . fixForBody , d = b . dontFilter , g = b . filter , r= b . enterMode , p = b . protectedWhitespaces ) : f = b ; f || null === f || ( f = e . editable ( ) . getName ( ) ) ; return e . fire ( "toHtml" , { dataValue : a , context : f , fixForBody : c , dontFilter : d ,
filter : g || e . filter , enterMode : r|| e . enterMode , protectedWhitespaces : p } ) . dataValue } , toDataFormat : function ( a , b ) { var c , d , e ; b && ( c = b . context , d = b . filter , e = b . enterMode ) ; c || null === c || ( c = this . editor . editable ( ) . getName ( ) ) ; return this . editor . fire ( "toDataFormat" , { dataValue : a , filter : d || this . editor . filter , context : c , enterMode : e || this . editor . enterMode } ) . dataValue } , protectSource : function ( a ) { return t ( a , this . editor ) } , unprotectSource : function ( a ) { return A ( a , this . editor ) } , unprotectRealComments : function ( a ) { return z( a ) } } ; var M =
/(?: |\xa0)$/ , v= "{cke_protected}" , J = CKEDITOR . dtd , E = "caption colgroup col thead tfoot tbody" . split ( " " ) , u = CKEDITOR . tools . extend ( { } , J. $blockLimit , J . $block ) , F = { elements : { input : h , textarea : h } } , H = { attributeNames : [ [ /^on/ , "data-cke-pa-on" ] , [ /^srcdoc/ , "data-cke-pa-srcdoc" ] , [ /^data-cke-expando$/ , "" ] ] , elements : { iframe : function ( a ) { if ( a . attributes && a . attributes . src ) { var b = a . attributes . src . toLowerCase ( ) . replace ( /[^a-z]/gi , "" ) ; if ( 0 === b . indexOf ( "javascript" ) || 0 === b . indexOf ( "data" ) ) a . attributes [ "data-cke-pa-src" ] =
a . attributes . src , delete a . attributes . src } } } } , y = { elements : { embed : function ( a ) { var b = a . parent ; if ( b && "object" == b . name ) { var c = b . attributes . width , b = b . attributes . height ; c && ( a . attributes . width = c ) ; b && ( a . attributes . height = b ) } } , a : function ( a ) { var b = a . attributes ; if ( ! ( a . children . length || b . name || b . id || a . attributes [ "data-cke-saved-name" ] ) ) return ! 1 } } } , K = { 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 ! 1 ; for ( var c = [ "name" , "href" , "src" ] , d , e = 0 ; e < c . length ; e ++ ) d = "data-cke-saved-" + c [ e ] , d in b && delete b [ c [ e ] ] } return a } , table : function ( a ) { a . children . slice ( 0 ) . sort ( function ( a , b ) { var c , d ; a . type == CKEDITOR . NODE _ELEMENT && b . type == a . type && ( c = CKEDITOR . tools . indexOf ( E , a . name ) , d = CKEDITOR . tools . indexOf ( E , b . name ) ) ; - 1 < c && - 1 < d && 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 = ! 0 ; return a } , span : function ( a ) { "Apple-style-span" ==
a . attributes [ "class" ] && 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 ] ; b && b . value && ( b . value = CKEDITOR . tools . trim ( b . value ) ) ; a . attributes . type || ( a . attributes . type = "text/css" ) } , title : function ( a ) { var b = a . children [ 0 ] ; ! b && k ( a , b = new CKEDITOR . htmlParser . text ) ; b . value = a . attributes [ "data-cke-title" ] || "" } , input : l , textarea : l } , attributes : { "class" : function ( a ) { return CKEDITOR . tools . ltrim ( a . replace ( /(?:^|\s+)cke_[^\s]*/g ,
"" ) ) || ! 1 } } } ; CKEDITOR . env . ie && ( L . attributes . style = function ( a ) { return a . replace ( /(^|;)([^\:]+)/g , function ( a ) { return a . toLowerCase ( ) } ) } ) ; var r = /<(a|area|img|input|source)\b([^>]*)>/gi , B = /([\w-:]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi , D= /^(href|src|name)$/i , w = /(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi , Q = /(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi , S= /<cke:encoded>([^<]*)<\/cke:encoded>/gi , t = /(<\/?)((?:object|embed|param|html|body|head|title)([\s][^>]*)?>)/gi ,
O = /(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi , N = /<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi ; n = function ( ) { function a ( b , c ) { for ( var d = 0 ; d < b . length ; d ++ ) { var e = b [ d ] ; e . lastIndex = 0 ; if ( e . test ( c ) ) return ! 0 } return ! 1 } function b ( a ) { return CKEDITOR . tools . array . reduce ( a . split ( "" ) , function ( a , b ) { var d = b . toLowerCase ( ) , e = b . toUpperCase ( ) , f = c ( d ) ; d !== e && ( f += "|" + c ( e ) ) ; return a + ( "(" + f + ")" ) } , "" ) } function c ( a ) { var b ; b = a . charCodeAt ( 0 ) ; var d = b . toString ( 16 ) ; b = { htmlCode : "\x26#" + b + ";?" , hex : "\x26#x0*" + d + ";?" , entity : { "\x3c" : "\x26lt;" ,
"" ) ) || ! 1 } } } ; CKEDITOR . env . ie && ( K . attributes . style = function ( a ) { return a . replace ( /(^|;)([^\:]+)/g , function ( a ) { return a . toLowerCase ( ) } ) } ) ; var r = /<(a|area|img|input|source)\b([^>]*)>/gi , D = /([\w-:]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi , B= /^(href|src|name)$/i , G = /(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi , T = /(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi , O= /<cke:encoded>([^<]*)<\/cke:encoded>/gi , p = /(<\/?)((?:object|embed|param|html|body|head|title)([\s][^>]*)?>)/gi ,
I = /(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi , N = /<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi ; m = function ( ) { function a ( b , c ) { for ( var d = 0 ; d < b . length ; d ++ ) { var e = b [ d ] ; e . lastIndex = 0 ; if ( e . test ( c ) ) return ! 0 } return ! 1 } function b ( a ) { return CKEDITOR . tools . array . reduce ( a . split ( "" ) , function ( a , b ) { var d = b . toLowerCase ( ) , e = b . toUpperCase ( ) , f = c ( d ) ; d !== e && ( f += "|" + c ( e ) ) ; return a + ( "(" + f + ")" ) } , "" ) } function c ( a ) { var b ; b = a . charCodeAt ( 0 ) ; var d = b . toString ( 16 ) ; b = { htmlCode : "\x26#" + b + ";?" , hex : "\x26#x0*" + d + ";?" , entity : { "\x3c" : "\x26lt;" ,
"\x3e" : "\x26gt;" , ":" : "\x26colon;" } [ a ] } ; for ( var e in b ) b [ e ] && ( a += "|" + b [ e ] ) ; return a } var d = [ new RegExp ( "(" + b ( "\x3ccke:encoded\x3e" ) + "(.*?)" + b ( "\x3c/cke:encoded\x3e" ) + ")|(" + b ( "\x3c" ) + b ( "/" ) + "?" + b ( "cke:encoded\x3e" ) + ")" , "gi" ) , new RegExp ( "((" + b ( "{cke_protected" ) + ")(_[0-9]*)?" + b ( "}" ) + ")" , "gi" ) , /<!(?:\s*-\s*){2,3}!?\s*>/g ] ; return function ( b ) { for ( ; a ( d , b ) ; ) for ( var c = d , e = 0 ; e < c . length ; e ++ ) b = b . replace ( c [ e ] , "" ) ; return b } } ( ) } ) ( ) ; "use strict" ;
CKEDITOR . htmlParser . element = function ( a , d ) { this . name = a ; this . attributes = d || { } ; 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 ] || "br" == b ) ; this . isEmpty = ! ! CKEDITOR . dtd . $empty [ a ] ; this . isUnknown = ! CKEDITOR . dtd [ a ] ; this . _ = { isBlockLike : b , hasInlineStarted : this . isEmpty || ! b } } ;
CKEDITOR . htmlParser . cssStyle = function ( a ) { var d = { } ; ( ( a instanceof CKEDITOR . htmlParser . element ? a . attributes . style : a ) || "" ) . replace ( /"/g , '"' ) . replace ( /\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g , function ( a , c , f ) { "font-family" == c && ( f = f . replace ( /["']/g , "" ) ) ; d [ c . toLowerCase ( ) ] = f } ) ; return { rules : d , populate : function ( a ) { var c = this . toString ( ) ; 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 ;
@ -375,154 +375,155 @@ typeof arguments[0]){if(!(new RegExp("(?:^|\\s)"+arguments[0]+"(?:$|\\s)")).test
d . editable ( 0 ) ; d . _ . previousMode = d . mode ; d . _ . previousModeData = l = d . getData ( 1 ) ; "source" == d . mode && k == l && ( d . fire ( "lockSnapshot" , { forceUpdate : ! 0 } ) , q = 1 ) ; d . ui . space ( "contents" ) . setHtml ( "" ) ; d . mode = "" } else d . _ . previousModeData = d . getData ( 1 ) ; this . _ . modes [ a ] ( function ( ) { d . mode = a ; void 0 !== h && ! h && d . resetDirty ( ) ; q ? d . fire ( "unlockSnapshot" ) : "wysiwyg" == a && d . fire ( "saveSnapshot" ) ; setTimeout ( function ( ) { d . isDestroyed ( ) || d . isDetached ( ) || ( d . fire ( "mode" ) , b && b . call ( d ) ) } , 0 ) } ) } } ; CKEDITOR . editor . prototype . resize = function ( a , b , d , k ) { var h =
this . container , l = this . ui . space ( "contents" ) , q = CKEDITOR . env . webkit && this . document && this . document . getWindow ( ) . $ . frameElement ; k = k ? this . container . getFirst ( function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasClass ( "cke_inner" ) } ) : h ; if ( a || 0 === a ) a = CKEDITOR . tools . convertToPx ( CKEDITOR . tools . cssLength ( a ) ) ; k . setSize ( "width" , a , ! 0 ) ; q && ( q . style . width = "1%" ) ; b = CKEDITOR . tools . convertToPx ( CKEDITOR . tools . cssLength ( b ) ) ; var g = ( k . $ . offsetHeight || 0 ) - ( l . $ . clientHeight || 0 ) , h = Math . max ( b - ( d ? 0 : g ) , 0 ) ; b = d ? b + g : b ; l . setStyle ( "height" ,
CKEDITOR . tools . cssLength ( h ) ) ; q && ( q . style . width = "100%" ) ; this . fire ( "resize" , { outerHeight : b , contentsHeight : h , outerWidth : a || k . getSize ( "width" ) } ) } ; 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 , e = a . data . path , g = e . blockLimit , f = a . data . selection , r = f . getRanges ( ) [ 0 ] , h ; if ( CKEDITOR . env . gecko || CKEDITOR . env . ie && CKEDITOR . env . needsBrFiller ) if ( f = d ( f , e ) ) f . appendBogus ( ) , h = CKEDITOR . env . ie && ! CKEDITOR . env . edge || CKEDITOR . env . edge && b . _ . previousActive ; k ( b , e . block , g ) && r . collapsed && ! r . getCommonAncestor ( ) . isReadOnly ( ) && ( e = r . clone ( ) , e . enlarge ( CKEDITOR . ENLARGE _BLOCK _CONTENTS ) , g = new CKEDITOR . dom . walker ( e ) , g . guard = function ( a ) { return ! c ( a ) || a . type == CKEDITOR . NODE _COMMENT || a . isReadOnly ( ) } ,
! g . checkForward ( ) || e . checkStartOfBlock ( ) && e . checkEndOfBlock ( ) ) && ( b = r . fixBlock ( ! 0 , b . activeEnterMode == CKEDITOR . ENTER _DIV ? "div" : "p" ) , CKEDITOR . env . needsBrFiller || ( b = b . getFirst ( c ) ) && b . type == CKEDITOR . NODE _TEXT && CKEDITOR . tools . trim ( b . getText ( ) ) . match ( /^(?: |\xa0)$/ ) && b . remove ( ) , h = 1 , a . cancel ( ) ) ; h && r . select ( ) } function d ( 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 ( ) ; b . is ( "input" ) && ( b = b . getAttribute ( "type" ) , "submit" != b && "reset" != b || a . data . preventDefault ( ) ) } function c ( a ) { return y ( a ) && z ( a ) } function f ( a , b ) { return function ( c ) { var d = c . data . $ . toElement || c . data . $ . fromElement || c . data . $ . relatedTarget ; ( d = d && d . nodeType == CKEDITOR . NODE _ELEMENT ? new CKEDITOR . dom . element ( d ) : null ) && ( b . equals ( d ) || b . contains ( d ) ) || a . call ( this , c ) } } function e ( a ) { function b ( a ) { return function ( b , e ) { e && b . type == CKEDITOR . NODE _ELEMENT && b . is ( g ) && ( d = b ) ; if ( ! ( e || ! c ( b ) ||
a && E ( b ) ) ) return ! 1 } } var d , e = a . getRanges ( ) [ 0 ] ; a = a . root ; var g = { table : 1 , ul : 1 , ol : 1 , dl : 1 } ; if ( e . startPath ( ) . contains ( g ) ) { var f = e . clone ( ) ; f . collapse ( 1 ) ; f . setStartAt ( a , CKEDITOR . POSITION _AFTER _START ) ; a = new CKEDITOR . dom . walker ( f ) ; a . guard = b ( ) ; a . checkBackward ( ) ; if ( d ) return f = e . clone ( ) , f . collapse ( ) , f . setEndAt ( d , CKEDITOR . POSITION _AFTER _END ) , a = new CKEDITOR . dom . walker ( f ) , a . guard = b ( ! 0 ) , d = ! 1 , a . checkForward ( ) , d } return null } function k ( a , b , c ) { return ! 1 !== a . config . autoParagraph && a . activeEnterMode != CKEDITOR . ENTER _BR && ( a . editable ( ) . equals ( c ) &&
! b || b && "true" == b . getAttribute ( "contenteditable" ) ) } function h ( a ) { return a . activeEnterMode != CKEDITOR . ENTER _BR && ! 1 !== a . config . autoParagraph ? a . activeEnterMode == CKEDITOR . ENTER _DIV ? "div" : "p" : ! 1 } function l ( a ) { a && a . isEmptyInlineRemoveable ( ) && a . remove ( ) } function q ( a ) { var b = a . editor ; b . getSelection ( ) . scrollIntoView ( ) ; setTimeout ( function ( ) { b . fire ( "saveSnapshot" ) } , 0 ) } function g ( a , b , c ) { var d = a . getCommonAncestor ( b ) ; for ( b = a = c ? b : a ; ( a = a . getParent ( ) ) && ! d . equals ( a ) && 1 == a . getChildCount ( ) ; ) b = a ; b . remove ( ) } var y , z , x , E , v ,
n , H , u , I , J ; CKEDITOR . editable = CKEDITOR . tools . createClass ( { base : CKEDITOR . dom . element , $ : function ( a , b ) { this . base ( b . $ || b ) ; this . editor = a ; this . status = "unloaded" ; this . hasFocus = ! 1 ; this . setup ( ) } , proto : { focus : function ( ) { var a ; if ( CKEDITOR . env . webkit && ! this . hasFocus && ( a = this . editor . _ . previousActive || this . getDocument ( ) . getActive ( ) , this . contains ( a ) ) ) { a . focus ( ) ; return } CKEDITOR . env . edge && 14 < CKEDITOR . env . version && ! this . hasFocus && this . getDocument ( ) . equals ( CKEDITOR . document ) && ( this . editor . _ . previousScrollTop = this . $ . scrollTop ) ;
try { if ( ! CKEDITOR . env . ie || CKEDITOR . env . edge && 14 < CKEDITOR . env . version || ! this . getDocument ( ) . equals ( CKEDITOR . document ) ) if ( CKEDITOR . env . chrome ) { var b = this . $ . scrollTop ; this . $ . focus ( ) ; this . $ . scrollTop = b } else this . $ . focus ( ) ; else this . $ . setActive ( ) } catch ( c ) { if ( ! CKEDITOR . env . ie ) throw c ; } 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 ) ; CKEDITOR . env . ie && /^focus|blur$/ . exec ( a ) &&
( a = "focus" == a ? "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 ) a . hasOwnProperty ( c ) && ( b = a [ c ] , null !== b ? this . setAttribute ( c ,
b ) : this . removeAttribute ( c ) ) } , attachClass : function ( a ) { var b = this . getCustomData ( "classes" ) ; this . hasClass ( a ) || ( ! b && ( b = [ ] ) , b . push ( a ) , this . setCustomData ( "classes" , b ) , this . addClass ( a ) ) } , changeAttr : function ( a , b ) { var c = this . getAttribute ( a ) ; b !== c && ( ! this . _ . attrChanges && ( this . _ . attrChanges = { } ) , a in this . _ . attrChanges || ( this . _ . attrChanges [ a ] = c ) , this . setAttribute ( a , b ) ) } , insertText : function ( a ) { this . editor . focus ( ) ; this . insertHtml ( this . transformPlainTextToHtml ( a ) , "text" ) } , transformPlainTextToHtml : function ( a ) { var b =
this . editor . getSelection ( ) . getStartElement ( ) . hasAscendant ( "pre" , ! 0 ) ? CKEDITOR . ENTER _BR : this . editor . activeEnterMode ; return CKEDITOR . tools . transformPlainTextToHtml ( a , b ) } , insertHtml : function ( a , b , c ) { var d = this . editor ; d . focus ( ) ; d . fire ( "saveSnapshot" ) ; c || ( c = d . getSelection ( ) . getRanges ( ) [ 0 ] ) ; n ( this , b || "html" , a , c ) ; c . select ( ) ; q ( this ) ; this . editor . fire ( "afterInsertHtml" , { } ) } , insertHtmlIntoRange : function ( a , b , c ) { n ( this , c || "html" , a , b ) ; this . editor . fire ( "afterInsertHtml" , { intoRange : b } ) } , insertElement : function ( a , b ) { var d =
this . editor ; d . focus ( ) ; d . fire ( "saveSnapshot" ) ; var e = d . activeEnterMode , d = d . getSelection ( ) , g = a . getName ( ) , g = CKEDITOR . dtd . $block [ g ] ; b || ( b = d . getRanges ( ) [ 0 ] ) ; this . insertElementIntoRange ( a , b ) && ( b . moveToPosition ( a , CKEDITOR . POSITION _AFTER _END ) , g && ( ( g = a . getNext ( function ( a ) { return c ( a ) && ! E ( a ) } ) ) && g . type == CKEDITOR . NODE _ELEMENT && g . is ( CKEDITOR . dtd . $block ) ? g . getDtd ( ) [ "#" ] ? b . moveToElementEditStart ( g ) : b . moveToElementEditEnd ( a ) : g || e == CKEDITOR . ENTER _BR || ( g = b . fixBlock ( ! 0 , e == CKEDITOR . ENTER _DIV ? "div" : "p" ) , b . moveToElementEditStart ( g ) ) ) ) ;
d . selectRanges ( [ b ] ) ; q ( this ) } , insertElementIntoSelection : function ( a ) { this . insertElement ( a ) } , insertElementIntoRange : function ( a , b ) { var c = this . editor , d = c . config . enterMode , e = a . getName ( ) , g = CKEDITOR . dtd . $block [ e ] ; if ( b . checkReadOnly ( ) ) return ! 1 ; b . deleteContents ( 1 ) ; b . startContainer . type == CKEDITOR . NODE _ELEMENT && ( b . startContainer . is ( { tr : 1 , table : 1 , tbody : 1 , thead : 1 , tfoot : 1 } ) ? H ( b ) : b . startContainer . is ( CKEDITOR . dtd . $list ) && u ( b ) ) ; var f , D ; if ( g ) for ( ; ( f = b . getCommonAncestor ( 0 , 1 ) ) && ( D = CKEDITOR . dtd [ f . getName ( ) ] ) && ( ! D || ! D [ e ] ) ; ) if ( f . getName ( ) in
CKEDITOR . dtd . span ) { var g = b . splitElement ( f ) , h = b . createBookmark ( ) ; l ( f ) ; l ( g ) ; b . moveToBookmark ( h ) } else b . checkStartOfBlock ( ) && b . checkEndOfBlock ( ) ? ( b . setStartBefore ( f ) , b . collapse ( ! 0 ) , f . remove ( ) ) : b . splitBlock ( d == CKEDITOR . ENTER _DIV ? "div" : "p" , c . editable ( ) ) ; b . insertNode ( a ) ; return ! 0 } , setData : function ( a , b ) { b || ( a = this . editor . dataProcessor . toHtml ( a ) ) ; this . setHtml ( a ) ; this . fixInitialSelection ( ) ; "unloaded" == this . status && ( 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 . status = "detached" ; this . editor . setData ( this . editor . getData ( ) , { internal : ! 0 } ) ; this . clearListeners ( ) ; try { this . _ . cleanCustomData ( ) } catch ( a ) { if ( ! CKEDITOR . env . ie || - 2146828218 !== a . number ) throw a ; } this . editor . fire ( "contentDomUnload" ) ; delete this . editor . document ; delete this . editor . window ; delete this . editor } , isInline : function ( ) { return this . getDocument ( ) . equals ( CKEDITOR . document ) } ,
fixInitialSelection : function ( ) { function a ( ) { var b = c . getDocument ( ) . $ , d = b . getSelection ( ) , e ; a : if ( d . anchorNode && d . anchorNode == c . $ ) e = ! 0 ; else { if ( CKEDITOR . env . webkit && ( e = c . getDocument ( ) . getActive ( ) ) && e . equals ( c ) && ! d . anchorNode ) { e = ! 0 ; break a } e = void 0 } e && ( e = new CKEDITOR . dom . range ( c ) , e . moveToElementEditStart ( c ) , b = b . createRange ( ) , b . setStart ( e . startContainer . $ , e . startOffset ) , b . collapse ( ! 0 ) , d . removeAllRanges ( ) , d . addRange ( b ) ) } function b ( ) { var a = c . getDocument ( ) . $ , d = a . selection , e = c . getDocument ( ) . getActive ( ) ; "None" ==
d . type && 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 ( ! 0 ) , a . select ( ) ) } var c = this ; if ( CKEDITOR . env . ie && ( 9 > CKEDITOR . env . version || CKEDITOR . env . quirks ) ) this . hasFocus && ( this . focus ( ) , b ( ) ) ; else if ( this . hasFocus ) this . focus ( ) , a ( ) ; else this . once ( "focus" , function ( ) { a ( ) } , null , null , - 999 ) } , getHtmlFromRange : function ( a ) { if ( a . collapsed ) return new CKEDITOR . dom . documentFragment ( a . document ) ;
a = { doc : this . getDocument ( ) , range : a . clone ( ) } ; I . eol . detect ( a , this ) ; I . bogus . exclude ( a ) ; I . cell . shrink ( a ) ; a . fragment = a . range . cloneContents ( ) ; I . tree . rebuild ( a , this ) ; I . eol . fix ( a , this ) ; return new CKEDITOR . dom . documentFragment ( a . fragment . $ ) } , extractHtmlFromRange : function ( a , b ) { var c = J , d = { range : a , doc : a . document } , e = this . getHtmlFromRange ( a ) ; if ( a . collapsed ) return a . optimize ( ) , e ; a . enlarge ( CKEDITOR . ENLARGE _INLINE , 1 ) ; c . table . detectPurge ( d ) ; d . bookmark = a . createBookmark ( ) ; delete d . range ; var g = this . editor . createRange ( ) ;
g . moveToPosition ( d . bookmark . startNode , CKEDITOR . POSITION _BEFORE _START ) ; d . targetBookmark = g . createBookmark ( ) ; c . list . detectMerge ( d , this ) ; c . table . detectRanges ( d , this ) ; c . block . detectMerge ( d , this ) ; d . tableContentsRanges ? ( c . table . deleteRanges ( d ) , a . moveToBookmark ( d . bookmark ) , d . range = a ) : ( a . moveToBookmark ( d . bookmark ) , d . range = a , a . extractContents ( c . detectExtractMerge ( d ) ) ) ; a . moveToBookmark ( d . targetBookmark ) ; a . optimize ( ) ; c . fixUneditableRangePosition ( a ) ; c . list . merge ( d , this ) ; c . table . purge ( d , this ) ; c . block . merge ( d , this ) ;
if ( b ) { c = a . startPath ( ) ; if ( d = a . checkStartOfBlock ( ) && a . checkEndOfBlock ( ) && c . block && ! a . root . equals ( c . block ) ) { a : { var d = c . block . getElementsByTag ( "span" ) , g = 0 , f ; if ( d ) for ( ; f = d . getItem ( g ++ ) ; ) if ( ! z ( f ) ) { d = ! 0 ; break a } d = ! 1 } d = ! d } d && ( a . moveToPosition ( c . block , CKEDITOR . POSITION _BEFORE _START ) , c . block . remove ( ) ) } else c . autoParagraph ( this . editor , a ) , x ( a . startContainer ) && a . startContainer . appendBogus ( ) ; a . startContainer . mergeSiblings ( ) ; return e } , setup : function ( ) { var a = this . editor ; this . attachListener ( a , "beforeGetData" , function ( ) { var b =
this . getData ( ) ; this . is ( "textarea" ) || ! 1 !== a . config . ignoreEmptyParagraph && ( b = b . replace ( v , 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 ( ) ) && "Control" == b . type || this . focus ( ) } ,
this ) ; this . attachListener ( a , "insertHtml" , function ( a ) { this . insertHtml ( a . data . dataValue , a . data . mode , a . data . range ) } , 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" ) ; a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? this . attachClass ( "cke_editable_inline" ) : a . elementMode != CKEDITOR . ELEMENT _MODE _REPLACE && a . elementMode != CKEDITOR . ELEMENT _MODE _APPENDTO ||
this . attachClass ( "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 = ! 1 } , null , null , - 1 ) ; this . on ( "focus" , function ( ) { this . hasFocus = ! 0 } , null , null , - 1 ) ; if ( CKEDITOR . env . webkit ) this . on ( "scroll" , function ( ) { a . _ . previousScrollTop = a . editable ( ) . $ . scrollTop } , null , null , - 1 ) ; if ( CKEDITOR . env . edge && 14 < CKEDITOR . env . version ) { var d = function ( ) { var b = a . editable ( ) ;
null != a . _ . previousScrollTop && b . getDocument ( ) . equals ( CKEDITOR . document ) && ( b . $ . scrollTop = a . _ . previousScrollTop , a . _ . previousScrollTop = null , this . removeListener ( "scroll" , d ) ) } ; this . on ( "scroll" , d ) } a . focusManager . add ( this ) ; this . equals ( CKEDITOR . document . getActive ( ) ) && ( this . hasFocus = ! 0 , 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 f = a . document ; this . changeAttr ( "spellcheck" ,
! a . config . disableNativeSpellChecker ) ; var h = a . config . contentsLangDirection ; this . getDirection ( 1 ) != h && this . changeAttr ( "dir" , h ) ; var k = CKEDITOR . getCss ( ) ; if ( k ) { var h = f . getHead ( ) , r = h . getCustomData ( "stylesheet" ) ; r ? k != r . getText ( ) && ( CKEDITOR . env . ie && 9 > CKEDITOR . env . version ? r . $ . styleSheet . cssText = k : r . setText ( k ) ) : ( k = f . appendStyleText ( k ) , k = new CKEDITOR . dom . element ( k . ownerNode || k . owningElement ) , h . setCustomData ( "stylesheet" , k ) , k . data ( "cke-temp" , 1 ) ) } h = f . getCustomData ( "stylesheet_ref" ) || 0 ; f . setCustomData ( "stylesheet_ref" ,
h + 1 ) ; this . setCustomData ( "cke_includeReadonly" , ! a . config . disableReadonlyStyling ) ; this . attachListener ( this , "click" , function ( a ) { a = a . data ; var b = ( new CKEDITOR . dom . elementPath ( a . getTarget ( ) , this ) ) . contains ( "a" ) ; b && 2 != a . $ . button && b . isReadOnly ( ) && a . preventDefault ( ) } ) ; var B = { 8 : 1 , 46 : 1 } ; this . attachListener ( a , "key" , function ( b ) { if ( a . readOnly ) return ! 0 ; var c = b . data . domEvent . getKey ( ) , d ; b = a . getSelection ( ) ; if ( 0 !== b . getRanges ( ) . length ) { if ( c in B ) { var g , f = b . getRanges ( ) [ 0 ] , h = f . startPath ( ) , r , k , l , c = 8 == c ; CKEDITOR . env . ie &&
11 > CKEDITOR . env . version && ( g = b . getSelectedElement ( ) ) || ( g = e ( b ) ) ? ( a . fire ( "saveSnapshot" ) , f . moveToPosition ( g , CKEDITOR . POSITION _BEFORE _START ) , g . remove ( ) , f . select ( ) , a . fire ( "saveSnapshot" ) , d = 1 ) : f . collapsed && ( ( r = h . block ) && ( l = r [ c ? "getPrevious" : "getNext" ] ( y ) ) && l . type == CKEDITOR . NODE _ELEMENT && l . is ( "table" ) && f [ c ? "checkStartOfBlock" : "checkEndOfBlock" ] ( ) ? ( a . fire ( "saveSnapshot" ) , f [ c ? "checkEndOfBlock" : "checkStartOfBlock" ] ( ) && r . remove ( ) , f [ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( l ) , f . select ( ) , a . fire ( "saveSnapshot" ) ,
d = 1 ) : h . blockLimit && h . blockLimit . is ( "td" ) && ( k = h . blockLimit . getAscendant ( "table" ) ) && f . checkBoundaryOfElement ( k , c ? CKEDITOR . START : CKEDITOR . END ) && ( l = k [ c ? "getPrevious" : "getNext" ] ( y ) ) ? ( a . fire ( "saveSnapshot" ) , f [ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( l ) , f . checkStartOfBlock ( ) && f . checkEndOfBlock ( ) ? l . remove ( ) : f . select ( ) , a . fire ( "saveSnapshot" ) , d = 1 ) : ( k = h . contains ( [ "td" , "th" , "caption" ] ) ) && f . checkBoundaryOfElement ( k , c ? CKEDITOR . START : CKEDITOR . END ) && ( d = 1 ) ) } return ! d } } ) ; a . blockless && CKEDITOR . env . ie && CKEDITOR . env . needsBrFiller &&
this . attachListener ( this , "keyup" , function ( b ) { b . data . getKeystroke ( ) in B && ! 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 ! 1 ; b = { element : b . data . getTarget ( ) } ; a . fire ( "doubleclick" , b ) } ) ; CKEDITOR . env . ie && this . attachListener ( this , "click" , b ) ; CKEDITOR . env . ie && ! CKEDITOR . env . edge || this . attachListener ( this , "mousedown" , function ( b ) { var c = b . data . getTarget ( ) ; c . is ( "img" , "hr" ,
"input" , "textarea" , "select" ) && ! c . isReadOnly ( ) && ( a . getSelection ( ) . selectElement ( c ) , c . is ( "input" , "textarea" , "select" ) && b . data . preventDefault ( ) ) } ) ; CKEDITOR . env . edge && this . attachListener ( this , "mouseup" , function ( b ) { ( b = b . data . getTarget ( ) ) && b . is ( "img" ) && ! b . isReadOnly ( ) && a . getSelection ( ) . selectElement ( b ) } ) ; CKEDITOR . env . gecko && this . attachListener ( this , "mouseup" , function ( b ) { if ( 2 == b . data . $ . button && ( b = b . data . getTarget ( ) , ! b . getAscendant ( "table" ) && ! b . getOuterHtml ( ) . replace ( v , "" ) ) ) { var c = a . createRange ( ) ; c . moveToElementEditStart ( b ) ;
c . select ( ! 0 ) } } ) ; 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 ) { if ( a . readOnly ) return ! 0 ; var c = b . data . domEvent . getKey ( ) ; if ( c in B && ( b = a . getSelection ( ) , 0 !== b . getRanges ( ) . length ) ) { var c = 8 == c , d = b . getRanges ( ) [ 0 ] ; b = d . startPath ( ) ; if ( d . collapsed ) a : { var e =
b . block ; if ( e && d [ c ? "checkStartOfBlock" : "checkEndOfBlock" ] ( ! 0 ) && d . moveToClosestEditablePosition ( e , ! c ) && d . collapsed ) { if ( d . startContainer . type == CKEDITOR . NODE _ELEMENT ) { var f = d . startContainer . getChild ( d . startOffset - ( c ? 1 : 0 ) ) ; if ( f && f . type == CKEDITOR . NODE _ELEMENT && f . is ( "hr" ) ) { a . fire ( "saveSnapshot" ) ; f . remove ( ) ; b = ! 0 ; break a } } d = d . startPath ( ) . block ; if ( ! d || d && d . contains ( e ) ) b = void 0 ; else { a . fire ( "saveSnapshot" ) ; var h ; ( h = ( c ? d : e ) . getBogus ( ) ) && h . remove ( ) ; h = a . getSelection ( ) ; f = h . createBookmarks ( ) ; ( c ? e : d ) . moveChildren ( c ?
d : e , ! 1 ) ; b . lastElement . mergeSiblings ( ) ; g ( e , d , ! c ) ; h . selectBookmarks ( f ) ; b = ! 0 } } else b = ! 1 } else c = d , h = b . block , d = c . endPath ( ) . block , h && d && ! h . equals ( d ) ? ( a . fire ( "saveSnapshot" ) , ( e = h . getBogus ( ) ) && e . remove ( ) , c . enlarge ( CKEDITOR . ENLARGE _INLINE ) , c . deleteContents ( ) , d . getParent ( ) && ( d . moveChildren ( h , ! 1 ) , b . lastElement . mergeSiblings ( ) , g ( h , d , ! 0 ) ) , c = a . getSelection ( ) . getRanges ( ) [ 0 ] , c . collapse ( 1 ) , c . optimize ( ) , "" === c . startContainer . getHtml ( ) && c . startContainer . appendBogus ( ) , c . select ( ) , b = ! 0 ) : b = ! 1 ; if ( ! b ) return ; a . getSelection ( ) . scrollIntoView ( ) ;
a . fire ( "saveSnapshot" ) ; return ! 1 } } , this , null , 100 ) } } , getUniqueId : function ( ) { var a ; try { this . _ . expandoNumber = a = CKEDITOR . dom . domObject . prototype . getUniqueId . call ( this ) } catch ( b ) { a = this . _ && this . _ . expandoNumber } return a } } , _ : { cleanCustomData : function ( ) { this . removeClass ( "cke_editable" ) ; this . restoreAttrs ( ) ; for ( var a = this . removeCustomData ( "classes" ) ; a && a . length ; ) this . removeClass ( a . pop ( ) ) ; if ( ! this . is ( "textarea" ) ) { var a = this . getDocument ( ) , b = a . getHead ( ) ; if ( b . getCustomData ( "stylesheet" ) ) { var c = a . getCustomData ( "stylesheet_ref" ) ;
-- c ? a . setCustomData ( "stylesheet_ref" , c ) : ( a . removeCustomData ( "stylesheet_ref" ) , b . removeCustomData ( "stylesheet" ) . remove ( ) ) } } } } } ) ; CKEDITOR . editor . prototype . editable = function ( a ) { var b = this . _ . editable ; if ( b && a ) return 0 ; if ( ! arguments . length ) return b ; a ? b = a instanceof CKEDITOR . editable ? a : new CKEDITOR . editable ( this , a ) : ( b && b . detach ( ) , b = null ) ; return this . _ . editable = b } ; CKEDITOR . on ( "instanceLoaded" , function ( b ) { var c = b . editor ; c . on ( "insertElement" , function ( a ) { a = a . data ; a . type == CKEDITOR . NODE _ELEMENT && ( a . is ( "input" ) ||
a . is ( "textarea" ) ) && ( "false" != a . getAttribute ( "contentEditable" ) && a . data ( "cke-editable" , a . hasAttribute ( "contenteditable" ) ? "true" : "1" ) , a . setAttribute ( "contentEditable" , ! 1 ) ) } ) ; c . on ( "selectionChange" , function ( b ) { if ( ! c . readOnly ) { var d = c . getSelection ( ) ; 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-multiline" , "true" ) ; a . changeAttr ( "aria-label" , c ) ; c && a . changeAttr ( "title" , c ) ; var d = b . fire ( "ariaEditorHelpLabel" , { } ) . label ; if ( d && ( c = this . ui . space ( this . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? "top" : "contents" ) ) ) { var e = CKEDITOR . tools . getNextId ( ) , d = CKEDITOR . dom . element . createFromHtml ( '\x3cspan id\x3d"' + e + '" class\x3d"cke_voice_label"\x3e' + d + "\x3c/span\x3e" ) ; 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}" ) ;
y = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ; z = CKEDITOR . dom . walker . bookmark ( ! 1 , ! 0 ) ; x = CKEDITOR . dom . walker . empty ( ) ; E = CKEDITOR . dom . walker . bogus ( ) ; v = /(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi ; n = function ( ) { function a ( b ) { return b . type == CKEDITOR . NODE _ELEMENT } function b ( c , d ) { var e , g , f , h , r = [ ] , k = d . range . startContainer ; e = d . range . startPath ( ) ; for ( var k = D [ k . getName ( ) ] , B = 0 , w = c . getChildren ( ) , l = w . count ( ) , q = - 1 , n = - 1 , Q = 0 , A = e . contains ( D . $list ) ; B <
l ; ++ B ) e = w . getItem ( B ) , a ( e ) ? ( f = e . getName ( ) , A && f in CKEDITOR . dtd . $list ? r = r . concat ( b ( e , d ) ) : ( h = ! ! k [ f ] , "br" != f || ! e . data ( "cke-eol" ) || B && B != l - 1 || ( Q = ( g = B ? r [ B - 1 ] . node : w . getItem ( B + 1 ) ) && ( ! a ( g ) || ! g . is ( "br" ) ) , g = g && a ( g ) && D . $block [ g . getName ( ) ] ) , - 1 != q || h || ( q = B ) , h || ( n = B ) , r . push ( { isElement : 1 , isLineBreak : Q , isBlock : e . isBlockBoundary ( ) , hasBlockSibling : g , node : e , name : f , allowed : h } ) , g = Q = 0 ) ) : r . push ( { isElement : 0 , node : e , allowed : 1 } ) ; - 1 < q && ( r [ q ] . firstNotAllowed = 1 ) ; - 1 < n && ( r [ n ] . lastNotAllowed = 1 ) ; return r } function d ( b , c ) { var e = [ ] ,
g = b . getChildren ( ) , f = g . count ( ) , h , r = 0 , k = D [ c ] , B = ! b . is ( D . $inline ) || b . is ( "br" ) ; for ( B && e . push ( " " ) ; r < f ; r ++ ) h = g . getItem ( r ) , a ( h ) && ! h . is ( k ) ? e = e . concat ( d ( h , c ) ) : e . push ( h ) ; B && e . push ( " " ) ; return e } function e ( b ) { return a ( b . startContainer ) && b . startContainer . getChild ( b . startOffset - 1 ) } function g ( b ) { return b && a ( b ) && ( b . is ( D . $removeEmpty ) || b . is ( "a" ) && ! b . isBlockBoundary ( ) ) } function f ( b , c , d , e ) { var g = b . clone ( ) , h , k ; g . setEndAt ( c , CKEDITOR . POSITION _BEFORE _END ) ; ( h = ( new CKEDITOR . dom . walker ( g ) ) . next ( ) ) && a ( h ) && w [ h . getName ( ) ] &&
( k = h . getPrevious ( ) ) && a ( k ) && ! k . getParent ( ) . equals ( b . startContainer ) && d . contains ( k ) && e . contains ( h ) && h . isIdentical ( k ) && ( h . moveChildren ( k ) , h . remove ( ) , f ( b , c , d , e ) ) } function B ( b , c ) { function d ( b , c ) { if ( c . isBlock && c . isElement && ! c . node . is ( "br" ) && a ( b ) && b . is ( "br" ) ) return b . remove ( ) , 1 } var e = c . endContainer . getChild ( c . endOffset ) , g = c . endContainer . getChild ( c . endOffset - 1 ) ; e && d ( e , b [ b . length - 1 ] ) ; g && d ( g , b [ 0 ] ) && ( c . setEnd ( c . endContainer , c . endOffset - 1 ) , c . collapse ( ) ) } var D = CKEDITOR . dtd , w = { 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 } , q = { p : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 } , n = CKEDITOR . tools . extend ( { } , D . $inline ) ; delete n . br ; return function ( t , w , N , p ) { var G = t . editor , F = ! 1 , y ; "unfiltered_html" == w && ( w = "html" , F = ! 0 ) ; if ( ! p . checkReadOnly ( ) ) { var z = ( new CKEDITOR . dom . elementPath ( p . startContainer , p . root ) ) . blockLimit || p . root ; w = { type : w , dontFilter : F , editable : t , editor : G , range : p , blockLimit : z , mergeCandidates : [ ] , zombies : [ ] } ; var F = w . range , z = w . mergeCandidates , x = "html" === w . type , u , E , T , H , Z ; "text" == w . type &&
F . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 , ! 1 ) && ( E = CKEDITOR . dom . element . createFromHtml ( "\x3cspan\x3e\x26nbsp;\x3c/span\x3e" , F . document ) , F . insertNode ( E ) , F . setStartAfter ( E ) ) ; T = new CKEDITOR . dom . elementPath ( F . startContainer ) ; w . endPath = H = new CKEDITOR . dom . elementPath ( F . endContainer ) ; if ( ! F . collapsed ) { u = H . block || H . blockLimit ; var ca = F . getCommonAncestor ( ) ; u && ! u . equals ( ca ) && ! u . contains ( ca ) && F . checkEndOfBlock ( ) && w . zombies . push ( u ) ; F . deleteContents ( ) } for ( ; ( Z = e ( F ) ) && a ( Z ) && Z . isBlockBoundary ( ) && T . contains ( Z ) ; ) F . moveToPosition ( Z ,
CKEDITOR . POSITION _BEFORE _END ) ; f ( F , w . blockLimit , T , H ) ; E && ( F . setEndBefore ( E ) , F . collapse ( ) , E . remove ( ) ) ; E = F . startPath ( ) ; if ( u = E . contains ( g , ! 1 , 1 ) ) y = F . splitElement ( u ) , w . inlineStylesRoot = u , w . inlineStylesPeak = E . lastElement ; E = F . createBookmark ( ) ; x && ( l ( u ) , l ( y ) ) ; ( u = E . startNode . getPrevious ( c ) ) && a ( u ) && g ( u ) && z . push ( u ) ; ( u = E . startNode . getNext ( c ) ) && a ( u ) && g ( u ) && z . push ( u ) ; for ( u = E . startNode ; ( u = u . getParent ( ) ) && g ( u ) ; ) z . push ( u ) ; F . moveToBookmark ( E ) ; y = t . getHtml ( ) ; y = "" === y || y . match ( v ) ; G . enterMode === CKEDITOR . ENTER _DIV && y && ( ( G =
t . getFirst ( ) ) && G . remove ( ) , p . setStartAt ( t , CKEDITOR . POSITION _AFTER _START ) , p . collapse ( ! 0 ) ) ; if ( t = N ) { t = w . range ; if ( "text" == w . type && w . inlineStylesRoot ) { p = w . inlineStylesPeak ; G = p . getDocument ( ) . createText ( "{cke-peak}" ) ; for ( y = w . inlineStylesRoot . getParent ( ) ; ! p . equals ( y ) ; ) G = G . appendTo ( p . clone ( ) ) , p = p . getParent ( ) ; N = G . getOuterHtml ( ) . split ( "{cke-peak}" ) . join ( N ) } p = w . blockLimit . getName ( ) ; if ( /^\s+|\s+$/ . test ( N ) && "span" in CKEDITOR . dtd [ p ] ) { var V = '\x3cspan data-cke-marker\x3d"1"\x3e\x26nbsp;\x3c/span\x3e' ; N = V + N + V } N = w . editor . dataProcessor . toHtml ( N ,
{ context : null , fixForBody : ! 1 , protectedWhitespaces : ! ! V , dontFilter : w . dontFilter , filter : w . editor . activeFilter , enterMode : w . editor . activeEnterMode } ) ; p = t . document . createElement ( "body" ) ; p . setHtml ( N ) ; V && ( p . getFirst ( ) . remove ( ) , p . getLast ( ) . remove ( ) ) ; if ( ( V = t . startPath ( ) . block ) && ( 1 != V . getChildCount ( ) || ! V . getBogus ( ) ) ) a : { var P ; if ( 1 == p . getChildCount ( ) && a ( P = p . getFirst ( ) ) && P . is ( q ) && ! P . hasAttribute ( "contenteditable" ) ) { V = P . getElementsByTag ( "*" ) ; t = 0 ; for ( y = V . count ( ) ; t < y ; t ++ ) if ( G = V . getItem ( t ) , ! G . is ( n ) ) break a ; P . moveChildren ( P . getParent ( 1 ) ) ;
P . remove ( ) } } w . dataWrapper = p ; t = N } if ( t ) { P = w . range ; t = P . document ; p = w . blockLimit ; y = 0 ; var R , V = [ ] , I , M ; N = E = 0 ; var J , G = P . startContainer ; Z = w . endPath . elements [ 0 ] ; var ba , F = Z . getPosition ( G ) , z = ! ! Z . getCommonAncestor ( G ) && F != CKEDITOR . POSITION _IDENTICAL && ! ( F & CKEDITOR . POSITION _CONTAINS + CKEDITOR . POSITION _IS _CONTAINED ) , G = b ( w . dataWrapper , w ) ; for ( w . editor . enterMode !== CKEDITOR . ENTER _BR && B ( G , P ) ; y < G . length ; y ++ ) { F = G [ y ] ; if ( x = F . isLineBreak ) x = P , u = p , H = T = void 0 , F . hasBlockSibling ? x = 1 : ( T = x . startContainer . getAscendant ( D . $block , 1 ) ) &&
T . is ( { div : 1 , p : 1 } ) ? ( H = T . getPosition ( u ) , H == CKEDITOR . POSITION _IDENTICAL || H == CKEDITOR . POSITION _CONTAINS ? x = 0 : ( u = x . splitElement ( T ) , x . moveToPosition ( u , CKEDITOR . POSITION _AFTER _START ) , x = 1 ) ) : x = 0 ; if ( x ) N = 0 < y ; else { x = P . startPath ( ) ; ! F . isBlock && k ( w . editor , x . block , x . blockLimit ) && ( M = h ( w . editor ) ) && ( M = t . createElement ( M ) , M . appendBogus ( ) , P . insertNode ( M ) , CKEDITOR . env . needsBrFiller && ( R = M . getBogus ( ) ) && R . remove ( ) , P . moveToPosition ( M , CKEDITOR . POSITION _BEFORE _END ) ) ; if ( ( x = P . startPath ( ) . block ) && ! x . equals ( I ) ) { if ( R = x . getBogus ( ) ) R . remove ( ) ,
V . push ( x ) ; I = x } F . firstNotAllowed && ( E = 1 ) ; if ( E && F . isElement ) { x = P . startContainer ; for ( u = null ; x && ! D [ x . getName ( ) ] [ F . name ] ; ) { if ( x . equals ( p ) ) { x = null ; break } u = x ; x = x . getParent ( ) } if ( x ) u && ( J = P . splitElement ( u ) , w . zombies . push ( J ) , w . zombies . push ( u ) ) ; else { u = p . getName ( ) ; ba = ! y ; x = y == G . length - 1 ; u = d ( F . node , u ) ; T = [ ] ; H = u . length ; for ( var ca = 0 , ea = void 0 , X = 0 , W = - 1 ; ca < H ; ca ++ ) ea = u [ ca ] , " " == ea ? ( X || ba && ! ca || ( T . push ( new CKEDITOR . dom . text ( " " ) ) , W = T . length ) , X = 1 ) : ( T . push ( ea ) , X = 0 ) ; x && W == T . length && T . pop ( ) ; ba = T } } if ( ba ) { for ( ; x = ba . pop ( ) ; ) P . insertNode ( x ) ;
ba = 0 } else P . insertNode ( F . node ) ; F . lastNotAllowed && y < G . length - 1 && ( ( J = z ? Z : J ) && P . setEndAt ( J , CKEDITOR . POSITION _AFTER _START ) , E = 0 ) ; P . collapse ( ) } } 1 != G . length ? R = ! 1 : ( R = G [ 0 ] , R = R . isElement && "false" == R . node . getAttribute ( "contenteditable" ) ) ; R && ( N = ! 0 , x = G [ 0 ] . node , P . setStartAt ( x , CKEDITOR . POSITION _BEFORE _START ) , P . setEndAt ( x , CKEDITOR . POSITION _AFTER _END ) ) ; w . dontMoveCaret = N ; w . bogusNeededBlocks = V } R = w . range ; var Y ; ba = w . bogusNeededBlocks ; for ( I = R . createBookmark ( ) ; M = w . zombies . pop ( ) ; ) M . getParent ( ) && ( J = R . clone ( ) , J . moveToElementEditStart ( M ) ,
J . removeEmptyBlocksAtEnd ( ) ) ; if ( ba ) for ( ; M = ba . pop ( ) ; ) CKEDITOR . env . needsBrFiller ? M . appendBogus ( ) : M . append ( R . document . createText ( " " ) ) ; for ( ; M = w . mergeCandidates . pop ( ) ; ) M . mergeSiblings ( ) ; CKEDITOR . env . webkit && R . startPath ( ) && ( M = R . startPath ( ) , M . block ? M . block . $ . normalize ( ) : M . blockLimit && M . blockLimit . $ . normalize ( ) ) ; R . moveToBookmark ( I ) ; if ( ! w . dontMoveCaret ) { for ( M = e ( R ) ; M && a ( M ) && ! M . is ( D . $empty ) ; ) { if ( M . isBlockBoundary ( ) ) R . moveToPosition ( M , CKEDITOR . POSITION _BEFORE _END ) ; else { if ( g ( M ) && M . getHtml ( ) . match ( /(\s| )$/g ) ) { Y =
null ; break } Y = R . clone ( ) ; Y . moveToPosition ( M , CKEDITOR . POSITION _BEFORE _END ) } M = M . getLast ( c ) } Y && R . moveToRange ( Y ) } } } } ( ) ; H = function ( ) { function a ( b ) { b = new CKEDITOR . dom . walker ( b ) ; b . guard = function ( a , b ) { if ( b ) return ! 1 ; 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 ; 0 < b -- ; ) d = a . getItem ( b ) , CKEDITOR . tools . trim ( d . getHtml ( ) ) ||
( d . appendBogus ( ) , CKEDITOR . env . ie && 9 > CKEDITOR . env . version && d . getChildCount ( ) && d . getFirst ( ) . remove ( ) ) } return function ( d ) { var e = d . startContainer , g = e . getAscendant ( "table" , 1 ) , f = ! 1 ; c ( g . getElementsByTag ( "td" ) ) ; c ( g . getElementsByTag ( "th" ) ) ; g = d . clone ( ) ; g . setStart ( e , 0 ) ; g = a ( g ) . lastBackward ( ) ; g || ( g = d . clone ( ) , g . setEndAt ( e , CKEDITOR . POSITION _BEFORE _END ) , g = a ( g ) . lastForward ( ) , f = ! 0 ) ; g || ( g = e ) ; g . is ( "table" ) ? ( d . setStartAt ( g , CKEDITOR . POSITION _BEFORE _START ) , d . collapse ( ! 0 ) , g . remove ( ) ) : ( g . is ( { tbody : 1 , thead : 1 , tfoot : 1 } ) && ( g =
b ( g , "tr" , f ) ) , g . is ( "tr" ) && ( g = b ( g , g . getParent ( ) . is ( "thead" ) ? "th" : "td" , f ) ) , ( e = g . getBogus ( ) ) && e . remove ( ) , d . moveToPosition ( g , f ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _BEFORE _END ) ) } } ( ) ; u = function ( ) { function a ( b ) { b = new CKEDITOR . dom . walker ( b ) ; b . guard = function ( a , b ) { if ( b ) return ! 1 ; if ( a . type == CKEDITOR . NODE _ELEMENT ) return a . is ( CKEDITOR . dtd . $list ) || a . is ( CKEDITOR . dtd . $listItem ) } ; b . evaluator = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . is ( CKEDITOR . dtd . $listItem ) } ; return b } return function ( b ) { var c =
b . startContainer , d = ! 1 , e ; e = b . clone ( ) ; e . setStart ( c , 0 ) ; e = a ( e ) . lastBackward ( ) ; e || ( e = b . clone ( ) , e . setEndAt ( c , CKEDITOR . POSITION _BEFORE _END ) , e = a ( e ) . lastForward ( ) , d = ! 0 ) ; e || ( e = c ) ; e . is ( CKEDITOR . dtd . $list ) ? ( b . setStartAt ( e , CKEDITOR . POSITION _BEFORE _START ) , b . collapse ( ! 0 ) , e . remove ( ) ) : ( ( c = e . getBogus ( ) ) && c . remove ( ) , b . moveToPosition ( e , d ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _BEFORE _END ) , b . select ( ) ) } } ( ) ; I = { eol : { detect : function ( a , b ) { var c = a . range , d = c . clone ( ) , e = c . clone ( ) , g = new CKEDITOR . dom . elementPath ( c . startContainer ,
b ) , f = new CKEDITOR . dom . elementPath ( c . endContainer , b ) ; d . collapse ( 1 ) ; e . collapse ( ) ; g . block && d . checkBoundaryOfElement ( g . block , CKEDITOR . END ) && ( c . setStartAfter ( g . block ) , a . prependEolBr = 1 ) ; f . block && e . checkBoundaryOfElement ( f . block , CKEDITOR . START ) && ( c . setEndBefore ( f . block ) , a . appendEolBr = 1 ) } , fix : function ( a , b ) { var c = b . getDocument ( ) , d ; a . appendEolBr && ( d = this . createEolBr ( c ) , a . fragment . append ( d ) ) ; ! a . prependEolBr || d && ! d . getPrevious ( ) || a . fragment . append ( this . createEolBr ( c ) , 1 ) } , createEolBr : function ( a ) { return a . createElement ( "br" ,
{ attributes : { "data-cke-eol" : 1 } } ) } } , bogus : { exclude : function ( a ) { var b = a . range . getBoundaryNodes ( ) , c = b . startNode , b = b . endNode ; ! b || ! E ( b ) || c && c . equals ( b ) || a . range . setEndBefore ( b ) } } , tree : { rebuild : function ( a , b ) { var c = a . range , d = c . getCommonAncestor ( ) , e = new CKEDITOR . dom . elementPath ( d , b ) , g = new CKEDITOR . dom . elementPath ( c . startContainer , b ) , c = new CKEDITOR . dom . elementPath ( c . endContainer , b ) , f ; d . type == CKEDITOR . NODE _TEXT && ( d = d . getParent ( ) ) ; if ( e . blockLimit . is ( { tr : 1 , table : 1 } ) ) { var h = e . contains ( "table" ) . getParent ( ) ; f = function ( a ) { return ! a . equals ( h ) } } else if ( e . block &&
e . block . is ( CKEDITOR . dtd . $listItem ) && ( g = g . contains ( CKEDITOR . dtd . $list ) , c = c . contains ( CKEDITOR . dtd . $list ) , ! g . equals ( c ) ) ) { var k = e . contains ( CKEDITOR . dtd . $list ) . getParent ( ) ; f = function ( a ) { return ! a . equals ( k ) } } f || ( f = function ( a ) { return ! a . equals ( e . block ) && ! a . equals ( e . blockLimit ) } ) ; this . rebuildFragment ( a , b , d , f ) } , rebuildFragment : function ( a , b , c , d ) { for ( var e ; c && ! c . equals ( b ) && d ( c ) ; ) e = c . clone ( 0 , 1 ) , a . fragment . appendTo ( e ) , a . fragment = e , c = c . getParent ( ) } } , cell : { shrink : function ( a ) { a = a . range ; var b = a . startContainer , c = a . endContainer ,
d = a . startOffset , e = a . endOffset ; b . type == CKEDITOR . NODE _ELEMENT && b . equals ( c ) && b . is ( "tr" ) && ++ d == e && a . shrink ( CKEDITOR . SHRINK _TEXT ) } } } ; J = function ( ) { function a ( b , c ) { var d = b . getParent ( ) ; if ( d . is ( CKEDITOR . dtd . $inline ) ) b [ c ? "insertBefore" : "insertAfter" ] ( d ) } function b ( c , d , e ) { a ( d ) ; a ( e , 1 ) ; for ( var g ; g = e . getNext ( ) ; ) g . insertAfter ( d ) , d = g ; x ( c ) && c . remove ( ) } function c ( a , b ) { var d = new CKEDITOR . dom . range ( a ) ; d . setStartAfter ( b . startNode ) ; d . setEndBefore ( b . endNode ) ; return d } return { list : { detectMerge : function ( a , b ) { var d = c ( b , a . bookmark ) ,
e = d . startPath ( ) , g = d . endPath ( ) , f = e . contains ( CKEDITOR . dtd . $list ) , h = g . contains ( CKEDITOR . dtd . $list ) ; a . mergeList = f && h && f . getParent ( ) . equals ( h . getParent ( ) ) && ! f . equals ( h ) ; a . mergeListItems = e . block && g . block && e . block . is ( CKEDITOR . dtd . $listItem ) && g . block . is ( CKEDITOR . dtd . $listItem ) ; if ( a . mergeList || a . mergeListItems ) d = d . clone ( ) , d . setStartBefore ( a . bookmark . startNode ) , d . setEndAfter ( a . bookmark . endNode ) , a . mergeListBookmark = d . createBookmark ( ) } , merge : function ( a , c ) { if ( a . mergeListBookmark ) { var d = a . mergeListBookmark . startNode ,
e = a . mergeListBookmark . endNode , g = new CKEDITOR . dom . elementPath ( d , c ) , f = new CKEDITOR . dom . elementPath ( e , c ) ; if ( a . mergeList ) { var h = g . contains ( CKEDITOR . dtd . $list ) , k = f . contains ( CKEDITOR . dtd . $list ) ; h . equals ( k ) || ( k . moveChildren ( h ) , k . remove ( ) ) } a . mergeListItems && ( g = g . contains ( CKEDITOR . dtd . $listItem ) , f = f . contains ( CKEDITOR . dtd . $listItem ) , g . equals ( f ) || b ( f , d , e ) ) ; d . remove ( ) ; e . remove ( ) } } } , block : { detectMerge : function ( a , b ) { if ( ! a . tableContentsRanges && ! a . mergeListBookmark ) { var c = new CKEDITOR . dom . range ( b ) ; c . setStartBefore ( a . bookmark . startNode ) ;
c . setEndAfter ( a . bookmark . endNode ) ; a . mergeBlockBookmark = c . createBookmark ( ) } } , merge : function ( a , c ) { if ( a . mergeBlockBookmark && ! a . purgeTableBookmark ) { var d = a . mergeBlockBookmark . startNode , e = a . mergeBlockBookmark . endNode , g = new CKEDITOR . dom . elementPath ( d , c ) , f = new CKEDITOR . dom . elementPath ( e , c ) , g = g . block , f = f . block ; g && f && ! g . equals ( f ) && b ( f , d , e ) ; d . remove ( ) ; e . remove ( ) } } } , table : function ( ) { function a ( c ) { var e = [ ] , g , f = new CKEDITOR . dom . walker ( c ) , h = c . startPath ( ) . contains ( d ) , k = c . endPath ( ) . contains ( d ) , l = { } ; f . guard = function ( a ,
f ) { if ( a . type == CKEDITOR . NODE _ELEMENT ) { var q = "visited_" + ( f ? "out" : "in" ) ; if ( a . getCustomData ( q ) ) return ; CKEDITOR . dom . element . setMarker ( l , a , q , 1 ) } if ( f && h && a . equals ( h ) ) g = c . clone ( ) , g . setEndAt ( h , CKEDITOR . POSITION _BEFORE _END ) , e . push ( g ) ; else if ( ! f && k && a . equals ( k ) ) g = c . clone ( ) , g . setStartAt ( k , CKEDITOR . POSITION _AFTER _START ) , e . push ( g ) ; else { if ( q = ! f ) q = a . type == CKEDITOR . NODE _ELEMENT && a . is ( d ) && ( ! h || b ( a , h ) ) && ( ! k || b ( a , k ) ) ; if ( ! q && ( q = f ) ) if ( a . is ( d ) ) var q = h && h . getAscendant ( "table" , ! 0 ) , m = k && k . getAscendant ( "table" , ! 0 ) , n = a . getAscendant ( "table" ,
! 0 ) , q = q && q . contains ( n ) || m && m . contains ( n ) ; else q = void 0 ; q && ( g = c . clone ( ) , g . selectNodeContents ( a ) , e . push ( g ) ) } } ; f . lastForward ( ) ; CKEDITOR . dom . element . clearAllMarkers ( l ) ; return e } function b ( a , c ) { var d = CKEDITOR . POSITION _CONTAINS + CKEDITOR . POSITION _IS _CONTAINED , e = a . getPosition ( c ) ; return e === CKEDITOR . POSITION _IDENTICAL ? ! 1 : 0 === ( e & d ) } var d = { td : 1 , th : 1 , caption : 1 } ; return { detectPurge : function ( a ) { var b = a . range , c = b . clone ( ) ; c . enlarge ( CKEDITOR . ENLARGE _ELEMENT ) ; var c = new CKEDITOR . dom . walker ( c ) , e = 0 ; c . evaluator = function ( a ) { a . type ==
CKEDITOR . NODE _ELEMENT && a . is ( d ) && ++ e } ; c . checkForward ( ) ; if ( 1 < e ) { var c = b . startPath ( ) . contains ( "table" ) , g = b . endPath ( ) . contains ( "table" ) ; c && g && b . checkBoundaryOfElement ( c , CKEDITOR . START ) && b . checkBoundaryOfElement ( g , CKEDITOR . END ) && ( b = a . range . clone ( ) , b . setStartBefore ( c ) , b . setEndAfter ( g ) , a . purgeTableBookmark = b . createBookmark ( ) ) } } , detectRanges : function ( e , g ) { var f = c ( g , e . bookmark ) , h = f . clone ( ) , k , t , l = f . getCommonAncestor ( ) ; l . is ( CKEDITOR . dtd . $tableContent ) && ! l . is ( d ) && ( l = l . getAscendant ( "table" , ! 0 ) ) ; t = l ; l = new CKEDITOR . dom . elementPath ( f . startContainer ,
t ) ; t = new CKEDITOR . dom . elementPath ( f . endContainer , t ) ; l = l . contains ( "table" ) ; t = t . contains ( "table" ) ; if ( l || t ) l && t && b ( l , t ) ? ( e . tableSurroundingRange = h , h . setStartAt ( l , CKEDITOR . POSITION _AFTER _END ) , h . setEndAt ( t , CKEDITOR . POSITION _BEFORE _START ) , h = f . clone ( ) , h . setEndAt ( l , CKEDITOR . POSITION _AFTER _END ) , k = f . clone ( ) , k . setStartAt ( t , CKEDITOR . POSITION _BEFORE _START ) , k = a ( h ) . concat ( a ( k ) ) ) : l ? t || ( e . tableSurroundingRange = h , h . setStartAt ( l , CKEDITOR . POSITION _AFTER _END ) , f . setEndAt ( l , CKEDITOR . POSITION _AFTER _END ) ) : ( e . tableSurroundingRange =
h , h . setEndAt ( t , CKEDITOR . POSITION _BEFORE _START ) , f . setStartAt ( t , CKEDITOR . POSITION _AFTER _START ) ) , e . tableContentsRanges = k ? k : a ( f ) } , deleteRanges : function ( a ) { for ( var b ; b = a . tableContentsRanges . pop ( ) ; ) b . extractContents ( ) , x ( b . startContainer ) && b . startContainer . appendBogus ( ) ; a . tableSurroundingRange && a . tableSurroundingRange . extractContents ( ) } , purge : function ( a ) { if ( a . purgeTableBookmark ) { var b = a . doc , c = a . range . clone ( ) , b = b . createElement ( "p" ) ; b . insertBefore ( a . purgeTableBookmark . startNode ) ; c . moveToBookmark ( a . purgeTableBookmark ) ;
c . deleteContents ( ) ; a . range . moveToPosition ( b , CKEDITOR . POSITION _AFTER _START ) } } } } ( ) , detectExtractMerge : function ( a ) { return ! ( a . range . startPath ( ) . contains ( CKEDITOR . dtd . $listItem ) && a . range . endPath ( ) . contains ( CKEDITOR . dtd . $listItem ) ) } , fixUneditableRangePosition : function ( a ) { a . startContainer . getDtd ( ) [ "#" ] || a . moveToClosestEditablePosition ( null , ! 0 ) } , autoParagraph : function ( a , b ) { var c = b . startPath ( ) , d ; k ( a , c . block , c . blockLimit ) && ( d = h ( a ) ) && ( d = b . document . createElement ( d ) , d . appendBogus ( ) , b . insertNode ( d ) , b . moveToPosition ( d ,
CKEDITOR . POSITION _AFTER _START ) ) } } } ( ) } ) ( ) ;
( function ( ) { function a ( a ) { var b = a . editor , e = a . data . path , g = e . blockLimit , f = a . data . selection , h = f . getRanges ( ) [ 0 ] , k ; if ( CKEDITOR . env . gecko || CKEDITOR . env . ie && CKEDITOR . env . needsBrFiller ) if ( f = d ( f , e ) ) f . appendBogus ( ) , k = CKEDITOR . env . ie && ! CKEDITOR . env . edge || CKEDITOR . env . edge && b . _ . previousActive ; l ( b , e . block , g ) && h . collapsed && ! h . getCommonAncestor ( ) . isReadOnly ( ) && ( e = h . clone ( ) , e . enlarge ( CKEDITOR . ENLARGE _BLOCK _CONTENTS ) , g = new CKEDITOR . dom . walker ( e ) , g . guard = function ( a ) { return ! c ( a ) || a . type == CKEDITOR . NODE _COMMENT || a . isReadOnly ( ) } ,
! g . checkForward ( ) || e . checkStartOfBlock ( ) && e . checkEndOfBlock ( ) ) && ( b = h . fixBlock ( ! 0 , b . activeEnterMode == CKEDITOR . ENTER _DIV ? "div" : "p" ) , CKEDITOR . env . needsBrFiller || ( b = b . getFirst ( c ) ) && b . type == CKEDITOR . NODE _TEXT && CKEDITOR . tools . trim ( b . getText ( ) ) . match ( /^(?: |\xa0)$/ ) && b . remove ( ) , k = 1 , a . cancel ( ) ) ; k && h . select ( ) } function d ( 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 ( ) ; b . is ( "input" ) && ( b = b . getAttribute ( "type" ) , "submit" != b && "reset" != b || a . data . preventDefault ( ) ) } function c ( a ) { return z ( a ) && A ( a ) } function f ( a , b ) { return function ( c ) { var d = c . data . $ . toElement || c . data . $ . fromElement || c . data . $ . relatedTarget ; ( d = d && d . nodeType == CKEDITOR . NODE _ELEMENT ? new CKEDITOR . dom . element ( d ) : null ) && ( b . equals ( d ) || b . contains ( d ) ) || a . call ( this , c ) } } function e ( a ) { return ! ! a . getRanges ( ) [ 0 ] . startPath ( ) . contains ( { table : 1 , ul : 1 , ol : 1 , dl : 1 } ) } function k ( a ) { function b ( a ) { var e =
{ table : 1 , ul : 1 , ol : 1 , dl : 1 } ; return function ( b , g ) { g && b . type == CKEDITOR . NODE _ELEMENT && b . is ( e ) && ( d = b ) ; if ( ! ( g || ! c ( b ) || a && m ( b ) ) ) return ! 1 } } var d , g = a . getRanges ( ) [ 0 ] , f = a . root ; return e ( a ) && ( a = g . clone ( ) , a . collapse ( 1 ) , a . setStartAt ( f , CKEDITOR . POSITION _AFTER _START ) , f = new CKEDITOR . dom . walker ( a ) , f . guard = b ( ) , f . checkBackward ( ) , d ) ? ( a = g . clone ( ) , a . collapse ( ) , a . setEndAt ( d , CKEDITOR . POSITION _AFTER _END ) , f = new CKEDITOR . dom . walker ( a ) , f . guard = b ( ! 0 ) , d = ! 1 , f . checkForward ( ) , d ) : null } function h ( a ) { return a . block . getParent ( ) . getChildCount ( ) }
function l ( a , b , c ) { return ! 1 !== a . config . autoParagraph && a . activeEnterMode != CKEDITOR . ENTER _BR && ( a . editable ( ) . equals ( c ) && ! b || b && "true" == b . getAttribute ( "contenteditable" ) ) } function q ( a ) { return a . activeEnterMode != CKEDITOR . ENTER _BR && ! 1 !== a . config . autoParagraph ? a . activeEnterMode == CKEDITOR . ENTER _DIV ? "div" : "p" : ! 1 } function g ( a ) { a && a . isEmptyInlineRemoveable ( ) && a . remove ( ) } function w ( a ) { var b = a . editor ; b . getSelection ( ) . scrollIntoView ( ) ; setTimeout ( function ( ) { b . fire ( "saveSnapshot" ) } , 0 ) } function x ( a , b , c ) { var d = a . getCommonAncestor ( b ) ;
for ( b = a = c ? b : a ; ( a = a . getParent ( ) ) && ! d . equals ( a ) && 1 == a . getChildCount ( ) ; ) b = a ; b . remove ( ) } var z , A , t , m , M , v , J , E , u , F , H = { ul : 1 , ol : 1 , dl : 1 } ; CKEDITOR . editable = CKEDITOR . tools . createClass ( { base : CKEDITOR . dom . element , $ : function ( a , b ) { this . base ( b . $ || b ) ; this . editor = a ; this . status = "unloaded" ; this . hasFocus = ! 1 ; this . setup ( ) } , proto : { focus : function ( ) { var a ; if ( CKEDITOR . env . webkit && ! this . hasFocus && ( a = this . editor . _ . previousActive || this . getDocument ( ) . getActive ( ) , this . contains ( a ) ) ) { a . focus ( ) ; return } CKEDITOR . env . edge && 14 < CKEDITOR . env . version &&
! this . hasFocus && this . getDocument ( ) . equals ( CKEDITOR . document ) && ( this . editor . _ . previousScrollTop = this . $ . scrollTop ) ; try { if ( ! CKEDITOR . env . ie || CKEDITOR . env . edge && 14 < CKEDITOR . env . version || ! this . getDocument ( ) . equals ( CKEDITOR . document ) ) if ( CKEDITOR . env . chrome ) { var b = this . $ . scrollTop ; this . $ . focus ( ) ; this . $ . scrollTop = b } else this . $ . focus ( ) ; else this . $ . setActive ( ) } catch ( c ) { if ( ! CKEDITOR . env . ie ) throw c ; } 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 ) ; CKEDITOR . env . ie && /^focus|blur$/ . exec ( a ) && ( a = "focus" == a ? "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 ) a . hasOwnProperty ( c ) && ( b = a [ c ] , null !== b ? this . setAttribute ( c , b ) : this . removeAttribute ( c ) ) } , attachClass : function ( a ) { var b = this . getCustomData ( "classes" ) ; this . hasClass ( a ) || ( ! b && ( b = [ ] ) , b . push ( a ) , this . setCustomData ( "classes" , b ) , this . addClass ( a ) ) } , changeAttr : function ( a , b ) { var c = this . getAttribute ( a ) ; b !== c && ( ! this . _ . attrChanges && ( this . _ . attrChanges = { } ) , a in this . _ . attrChanges || ( this . _ . attrChanges [ a ] = c ) , this . setAttribute ( a , b ) ) } , insertText : function ( a ) { this . editor . focus ( ) ;
this . insertHtml ( this . transformPlainTextToHtml ( a ) , "text" ) } , transformPlainTextToHtml : function ( a ) { var b = this . editor . getSelection ( ) . getStartElement ( ) . hasAscendant ( "pre" , ! 0 ) ? CKEDITOR . ENTER _BR : this . editor . activeEnterMode ; return CKEDITOR . tools . transformPlainTextToHtml ( a , b ) } , insertHtml : function ( a , b , c ) { var d = this . editor ; d . focus ( ) ; d . fire ( "saveSnapshot" ) ; c || ( c = d . getSelection ( ) . getRanges ( ) [ 0 ] ) ; v ( this , b || "html" , a , c ) ; c . select ( ) ; w ( this ) ; this . editor . fire ( "afterInsertHtml" , { } ) } , insertHtmlIntoRange : function ( a , b , c ) { v ( this ,
c || "html" , a , b ) ; this . editor . fire ( "afterInsertHtml" , { intoRange : b } ) } , insertElement : function ( a , b ) { var d = this . editor ; d . focus ( ) ; d . fire ( "saveSnapshot" ) ; var e = d . activeEnterMode , d = d . getSelection ( ) , g = a . getName ( ) , g = CKEDITOR . dtd . $block [ g ] ; b || ( b = d . getRanges ( ) [ 0 ] ) ; this . insertElementIntoRange ( a , b ) && ( b . moveToPosition ( a , CKEDITOR . POSITION _AFTER _END ) , g && ( ( g = a . getNext ( function ( a ) { return c ( a ) && ! m ( a ) } ) ) && g . type == CKEDITOR . NODE _ELEMENT && g . is ( CKEDITOR . dtd . $block ) ? g . getDtd ( ) [ "#" ] ? b . moveToElementEditStart ( g ) : b . moveToElementEditEnd ( a ) :
g || e == CKEDITOR . ENTER _BR || ( g = b . fixBlock ( ! 0 , e == CKEDITOR . ENTER _DIV ? "div" : "p" ) , b . moveToElementEditStart ( g ) ) ) ) ; d . selectRanges ( [ b ] ) ; w ( this ) } , insertElementIntoSelection : function ( a ) { this . insertElement ( 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 ! 1 ; b . deleteContents ( 1 ) ; b . startContainer . type == CKEDITOR . NODE _ELEMENT && ( b . startContainer . is ( { tr : 1 , table : 1 , tbody : 1 , thead : 1 , tfoot : 1 } ) ? J ( b ) : b . startContainer . is ( CKEDITOR . dtd . $list ) &&
E ( b ) ) ; var h , k ; if ( f ) for ( ; ( h = b . getCommonAncestor ( 0 , 1 ) ) && ( k = CKEDITOR . dtd [ h . getName ( ) ] ) && ( ! k || ! k [ e ] ) ; ) if ( h . getName ( ) in CKEDITOR . dtd . span ) { var f = b . splitElement ( h ) , p = b . createBookmark ( ) ; g ( h ) ; g ( f ) ; b . moveToBookmark ( p ) } else b . checkStartOfBlock ( ) && b . checkEndOfBlock ( ) ? ( b . setStartBefore ( h ) , b . collapse ( ! 0 ) , h . remove ( ) ) : b . splitBlock ( d == CKEDITOR . ENTER _DIV ? "div" : "p" , c . editable ( ) ) ; b . insertNode ( a ) ; return ! 0 } , setData : function ( a , b ) { b || ( a = this . editor . dataProcessor . toHtml ( a ) ) ; this . setHtml ( a ) ; this . fixInitialSelection ( ) ; "unloaded" ==
this . status && ( 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 . status = "detached" ; this . editor . setData ( this . editor . getData ( ) , { internal : ! 0 } ) ; this . clearListeners ( ) ; try { this . _ . cleanCustomData ( ) } catch ( a ) { if ( ! CKEDITOR . env . ie || - 2146828218 !== a . number ) throw a ; } this . editor . fire ( "contentDomUnload" ) ; delete this . editor . document ;
delete this . editor . window ; delete this . editor } , isInline : function ( ) { return this . getDocument ( ) . equals ( CKEDITOR . document ) } , fixInitialSelection : function ( ) { function a ( ) { var b = c . getDocument ( ) . $ , d = b . getSelection ( ) , e ; a : if ( d . anchorNode && d . anchorNode == c . $ ) e = ! 0 ; else { if ( CKEDITOR . env . webkit && ( e = c . getDocument ( ) . getActive ( ) ) && e . equals ( c ) && ! d . anchorNode ) { e = ! 0 ; break a } e = void 0 } e && ( e = new CKEDITOR . dom . range ( c ) , e . moveToElementEditStart ( c ) , b = b . createRange ( ) , b . setStart ( e . startContainer . $ , e . startOffset ) , b . collapse ( ! 0 ) , d . removeAllRanges ( ) ,
d . addRange ( b ) ) } function b ( ) { var a = c . getDocument ( ) . $ , d = a . selection , e = c . getDocument ( ) . getActive ( ) ; "None" == d . type && 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 ( ! 0 ) , a . select ( ) ) } var c = this ; if ( CKEDITOR . env . ie && ( 9 > CKEDITOR . env . version || CKEDITOR . env . quirks ) ) this . hasFocus && ( this . focus ( ) , b ( ) ) ; else if ( this . hasFocus ) this . focus ( ) , a ( ) ; else this . once ( "focus" ,
function ( ) { a ( ) } , null , null , - 999 ) } , getHtmlFromRange : function ( a ) { if ( a . collapsed ) return new CKEDITOR . dom . documentFragment ( a . document ) ; a = { doc : this . getDocument ( ) , range : a . clone ( ) } ; u . eol . detect ( a , this ) ; u . bogus . exclude ( a ) ; u . cell . shrink ( a ) ; a . fragment = a . range . cloneContents ( ) ; u . tree . rebuild ( a , this ) ; u . eol . fix ( a , this ) ; return new CKEDITOR . dom . documentFragment ( a . fragment . $ ) } , extractHtmlFromRange : function ( a , b ) { var c = F , d = { range : a , doc : a . document } , e = this . getHtmlFromRange ( a ) ; if ( a . collapsed ) return a . optimize ( ) , e ; a . enlarge ( CKEDITOR . ENLARGE _INLINE ,
1 ) ; c . table . detectPurge ( d ) ; d . bookmark = a . createBookmark ( ) ; delete d . range ; var g = this . editor . createRange ( ) ; g . moveToPosition ( d . bookmark . startNode , CKEDITOR . POSITION _BEFORE _START ) ; d . targetBookmark = g . createBookmark ( ) ; c . list . detectMerge ( d , this ) ; c . table . detectRanges ( d , this ) ; c . block . detectMerge ( d , this ) ; d . tableContentsRanges ? ( c . table . deleteRanges ( d ) , a . moveToBookmark ( d . bookmark ) , d . range = a ) : ( a . moveToBookmark ( d . bookmark ) , d . range = a , a . extractContents ( c . detectExtractMerge ( d ) ) ) ; a . moveToBookmark ( d . targetBookmark ) ; a . optimize ( ) ;
c . fixUneditableRangePosition ( a ) ; c . list . merge ( d , this ) ; c . table . purge ( d , this ) ; c . block . merge ( d , this ) ; if ( b ) { c = a . startPath ( ) ; if ( d = a . checkStartOfBlock ( ) && a . checkEndOfBlock ( ) && c . block && ! a . root . equals ( c . block ) ) { a : { var d = c . block . getElementsByTag ( "span" ) , g = 0 , f ; if ( d ) for ( ; f = d . getItem ( g ++ ) ; ) if ( ! A ( f ) ) { d = ! 0 ; break a } d = ! 1 } d = ! d } d && ( a . moveToPosition ( c . block , CKEDITOR . POSITION _BEFORE _START ) , c . block . remove ( ) ) } else c . autoParagraph ( this . editor , a ) , t ( a . startContainer ) && a . startContainer . appendBogus ( ) ; a . startContainer . mergeSiblings ( ) ;
return e } , setup : function ( ) { var a = this . editor ; this . attachListener ( a , "beforeGetData" , function ( ) { var b = this . getData ( ) ; this . is ( "textarea" ) || ! 1 !== a . config . ignoreEmptyParagraph && ( b = b . replace ( M , 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 ( ) ) && "Control" == b . type || this . focus ( ) } , this ) ; this . attachListener ( a , "insertHtml" , function ( a ) { this . insertHtml ( a . data . dataValue , a . data . mode , a . data . range ) } , 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" ) ; a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? this . attachClass ( "cke_editable_inline" ) :
a . elementMode != CKEDITOR . ELEMENT _MODE _REPLACE && a . elementMode != CKEDITOR . ELEMENT _MODE _APPENDTO || this . attachClass ( "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 = ! 1 } , null , null , - 1 ) ; this . on ( "focus" , function ( ) { this . hasFocus = ! 0 } , null , null , - 1 ) ; if ( CKEDITOR . env . webkit ) this . on ( "scroll" , function ( ) { a . _ . previousScrollTop = a . editable ( ) . $ . scrollTop } , null ,
null , - 1 ) ; if ( CKEDITOR . env . edge && 14 < CKEDITOR . env . version ) { var d = function ( ) { var b = a . editable ( ) ; null != a . _ . previousScrollTop && b . getDocument ( ) . equals ( CKEDITOR . document ) && ( b . $ . scrollTop = a . _ . previousScrollTop , a . _ . previousScrollTop = null , this . removeListener ( "scroll" , d ) ) } ; this . on ( "scroll" , d ) } a . focusManager . add ( this ) ; this . equals ( CKEDITOR . document . getActive ( ) ) && ( this . hasFocus = ! 0 , 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 g = a . document ; this . changeAttr ( "spellcheck" , ! a . config . disableNativeSpellChecker ) ; var f = a . config . contentsLangDirection ; this . getDirection ( 1 ) != f && this . changeAttr ( "dir" , f ) ; var B = CKEDITOR . getCss ( ) ; if ( B ) { var f = g . getHead ( ) , G = f . getCustomData ( "stylesheet" ) ; G ? B != G . getText ( ) && ( CKEDITOR . env . ie && 9 > CKEDITOR . env . version ? G . $ . styleSheet . cssText = B : G . setText ( B ) ) : ( B = g . appendStyleText ( B ) , B = new CKEDITOR . dom . element ( B . ownerNode || B . owningElement ) , f . setCustomData ( "stylesheet" ,
B ) , B . data ( "cke-temp" , 1 ) ) } f = g . getCustomData ( "stylesheet_ref" ) || 0 ; g . setCustomData ( "stylesheet_ref" , f + 1 ) ; this . setCustomData ( "cke_includeReadonly" , ! a . config . disableReadonlyStyling ) ; this . attachListener ( this , "click" , function ( a ) { a = a . data ; var b = ( new CKEDITOR . dom . elementPath ( a . getTarget ( ) , this ) ) . contains ( "a" ) ; b && 2 != a . $ . button && b . isReadOnly ( ) && a . preventDefault ( ) } ) ; var l = { 8 : 1 , 46 : 1 } ; this . attachListener ( a , "key" , function ( b ) { if ( a . readOnly ) return ! 0 ; var c = b . data . domEvent . getKey ( ) , d , g = a . getSelection ( ) ; if ( 0 !== g . getRanges ( ) . length ) { if ( c in
l ) { var f ; b = g . getRanges ( ) [ 0 ] ; var r = b . startPath ( ) , B , D , G , c = 8 == c , q = ! 1 ; if ( CKEDITOR . env . ie && 11 > CKEDITOR . env . version && g . getSelectedElement ( ) ) f = g . getSelectedElement ( ) ; else if ( e ( g ) ) { var m = new CKEDITOR . dom . walker ( b ) , w = b . collapsed ? b . startContainer : m . next ( ) , q = ! 1 , K ; if ( b . checkStartOfBlock ( ) ) { K = b . startPath ( ) . block || b . startPath ( ) . blockLimit ; var t = K . getName ( ) ; K = - 1 !== CKEDITOR . tools . array . indexOf ( [ "dd" , "dt" , "li" ] , t ) && null === K . getPrevious ( ) } else K = ! 1 ; if ( K ) { for ( ; w && ! q ; ) q = w . $ . nodeName . toLowerCase ( ) , q = ! ! H [ q ] , w = m . next ( ) ;
m = h ( b . startPath ( ) ) ; w = h ( b . endPath ( ) ) ; q = q || m !== w } else q = void 0 ; q || ( f = k ( g ) ) } f || q ? ( a . fire ( "saveSnapshot" ) , q ? ( ( d = b . startContainer . getAscendant ( H , ! 0 ) ) ? ( b . setStart ( d , 0 ) , b . enlarge ( CKEDITOR . ENLARGE _ELEMENT ) , f = b ) : f = null , f . deleteContents ( ) ) : ( b . moveToPosition ( f , CKEDITOR . POSITION _BEFORE _START ) , f . remove ( ) ) , b . select ( ) , a . fire ( "saveSnapshot" ) , d = 1 ) : b . collapsed && ( ( B = r . block ) && ( G = B [ c ? "getPrevious" : "getNext" ] ( z ) ) && G . type == CKEDITOR . NODE _ELEMENT && G . is ( "table" ) && b [ c ? "checkStartOfBlock" : "checkEndOfBlock" ] ( ) ? ( a . fire ( "saveSnapshot" ) ,
b [ c ? "checkEndOfBlock" : "checkStartOfBlock" ] ( ) && B . remove ( ) , b [ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( G ) , b . select ( ) , a . fire ( "saveSnapshot" ) , d = 1 ) : r . blockLimit && r . blockLimit . is ( "td" ) && ( D = r . blockLimit . getAscendant ( "table" ) ) && b . checkBoundaryOfElement ( D , c ? CKEDITOR . START : CKEDITOR . END ) && ( G = D [ c ? "getPrevious" : "getNext" ] ( z ) ) ? ( a . fire ( "saveSnapshot" ) , b [ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( G ) , b . checkStartOfBlock ( ) && b . checkEndOfBlock ( ) ? G . remove ( ) : b . select ( ) , a . fire ( "saveSnapshot" ) , d = 1 ) : ( D = r . contains ( [ "td" , "th" , "caption" ] ) ) &&
b . checkBoundaryOfElement ( D , c ? CKEDITOR . START : CKEDITOR . END ) && ( d = 1 ) ) } return ! d } } ) ; a . blockless && CKEDITOR . env . ie && CKEDITOR . env . needsBrFiller && this . attachListener ( this , "keyup" , function ( b ) { 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 ! 1 ; b = { element : b . data . getTarget ( ) } ; a . fire ( "doubleclick" , b ) } ) ; CKEDITOR . env . ie && this . attachListener ( this ,
"click" , b ) ; CKEDITOR . env . ie && ! CKEDITOR . env . edge || this . attachListener ( this , "mousedown" , function ( b ) { var c = b . data . getTarget ( ) ; c . is ( "img" , "hr" , "input" , "textarea" , "select" ) && ! c . isReadOnly ( ) && ( a . getSelection ( ) . selectElement ( c ) , c . is ( "input" , "textarea" , "select" ) && b . data . preventDefault ( ) ) } ) ; CKEDITOR . env . edge && this . attachListener ( this , "mouseup" , function ( b ) { ( b = b . data . getTarget ( ) ) && b . is ( "img" ) && ! b . isReadOnly ( ) && a . getSelection ( ) . selectElement ( b ) } ) ; CKEDITOR . env . gecko && this . attachListener ( this , "mouseup" , function ( b ) { if ( 2 ==
b . data . $ . button && ( b = b . data . getTarget ( ) , ! b . getAscendant ( "table" ) && ! b . getOuterHtml ( ) . replace ( M , "" ) ) ) { var c = a . createRange ( ) ; c . moveToElementEditStart ( b ) ; c . select ( ! 0 ) } } ) ; 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 ) { if ( a . readOnly ) return ! 0 ; var c =
b . data . domEvent . getKey ( ) ; if ( c in l && ( b = a . getSelection ( ) , 0 !== b . getRanges ( ) . length ) ) { var c = 8 == c , d = b . getRanges ( ) [ 0 ] ; b = d . startPath ( ) ; if ( d . collapsed ) a : { var e = b . block ; if ( e && d [ c ? "checkStartOfBlock" : "checkEndOfBlock" ] ( ! 0 ) && d . moveToClosestEditablePosition ( e , ! c ) && d . collapsed ) { if ( d . startContainer . type == CKEDITOR . NODE _ELEMENT ) { var g = d . startContainer . getChild ( d . startOffset - ( c ? 1 : 0 ) ) ; if ( g && g . type == CKEDITOR . NODE _ELEMENT && g . is ( "hr" ) ) { a . fire ( "saveSnapshot" ) ; g . remove ( ) ; b = ! 0 ; break a } } d = d . startPath ( ) . block ; if ( ! d || d && d . contains ( e ) ) b =
void 0 ; else { a . fire ( "saveSnapshot" ) ; var f ; ( f = ( c ? d : e ) . getBogus ( ) ) && f . remove ( ) ; f = a . getSelection ( ) ; g = f . createBookmarks ( ) ; ( c ? e : d ) . moveChildren ( c ? d : e , ! 1 ) ; b . lastElement . mergeSiblings ( ) ; x ( e , d , ! c ) ; f . selectBookmarks ( g ) ; b = ! 0 } } else b = ! 1 } else c = d , f = b . block , d = c . endPath ( ) . block , f && d && ! f . equals ( d ) ? ( a . fire ( "saveSnapshot" ) , ( e = f . getBogus ( ) ) && e . remove ( ) , c . enlarge ( CKEDITOR . ENLARGE _INLINE ) , c . deleteContents ( ) , d . getParent ( ) && ( d . moveChildren ( f , ! 1 ) , b . lastElement . mergeSiblings ( ) , x ( f , d , ! 0 ) ) , c = a . getSelection ( ) . getRanges ( ) [ 0 ] ,
c . collapse ( 1 ) , c . optimize ( ) , "" === c . startContainer . getHtml ( ) && c . startContainer . appendBogus ( ) , c . select ( ) , b = ! 0 ) : b = ! 1 ; if ( ! b ) return ; a . getSelection ( ) . scrollIntoView ( ) ; a . fire ( "saveSnapshot" ) ; return ! 1 } } , this , null , 100 ) } } , getUniqueId : function ( ) { var a ; try { this . _ . expandoNumber = a = CKEDITOR . dom . domObject . prototype . getUniqueId . call ( this ) } catch ( b ) { a = this . _ && this . _ . expandoNumber } return a } } , _ : { cleanCustomData : function ( ) { this . removeClass ( "cke_editable" ) ; this . restoreAttrs ( ) ; for ( var a = this . removeCustomData ( "classes" ) ; a &&
a . length ; ) this . removeClass ( a . pop ( ) ) ; if ( ! this . is ( "textarea" ) ) { var a = this . getDocument ( ) , b = a . getHead ( ) ; if ( b . getCustomData ( "stylesheet" ) ) { var c = a . getCustomData ( "stylesheet_ref" ) ; -- c ? a . setCustomData ( "stylesheet_ref" , c ) : ( a . removeCustomData ( "stylesheet_ref" ) , b . removeCustomData ( "stylesheet" ) . remove ( ) ) } } } } } ) ; CKEDITOR . editor . prototype . editable = function ( a ) { var b = this . _ . editable ; if ( b && a ) return 0 ; if ( ! arguments . length ) return b ; a ? b = a instanceof CKEDITOR . editable ? a : new CKEDITOR . editable ( this , a ) : ( b && b . detach ( ) , b =
null ) ; return this . _ . editable = b } ; CKEDITOR . on ( "instanceLoaded" , function ( b ) { var c = b . editor ; c . on ( "insertElement" , function ( a ) { a = a . data ; a . type == CKEDITOR . NODE _ELEMENT && ( a . is ( "input" ) || a . is ( "textarea" ) ) && ( "false" != a . getAttribute ( "contentEditable" ) && a . data ( "cke-editable" , a . hasAttribute ( "contenteditable" ) ? "true" : "1" ) , a . setAttribute ( "contentEditable" , ! 1 ) ) } ) ; c . on ( "selectionChange" , function ( b ) { if ( ! c . readOnly ) { var d = c . getSelection ( ) ; 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-multiline" , "true" ) ; a . changeAttr ( "aria-label" , c ) ; c && a . changeAttr ( "title" , c ) ; var d = b . fire ( "ariaEditorHelpLabel" , { } ) . label ; if ( d && ( c = this . ui . space ( this . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? "top" : "contents" ) ) ) { var e = CKEDITOR . tools . getNextId ( ) , d = CKEDITOR . dom . element . createFromHtml ( '\x3cspan id\x3d"' +
e + '" class\x3d"cke_voice_label"\x3e' + d + "\x3c/span\x3e" ) ; 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}" ) ; z = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ; A = CKEDITOR . dom . walker . bookmark ( ! 1 , ! 0 ) ; t = CKEDITOR . dom . walker . empty ( ) ; m = CKEDITOR . dom . walker . bogus ( ) ; M = /(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi ; v =
function ( ) { function a ( b ) { return b . type == CKEDITOR . NODE _ELEMENT } function b ( c , d ) { var e , g , f , p , h = [ ] , k = d . range . startContainer ; e = d . range . startPath ( ) ; for ( var k = m [ k . getName ( ) ] , r = 0 , B = c . getChildren ( ) , D = B . count ( ) , G = - 1 , l = - 1 , I = 0 , N = e . contains ( m . $list ) ; r < D ; ++ r ) e = B . getItem ( r ) , a ( e ) ? ( f = e . getName ( ) , N && f in CKEDITOR . dtd . $list ? h = h . concat ( b ( e , d ) ) : ( p = ! ! k [ f ] , "br" != f || ! e . data ( "cke-eol" ) || r && r != D - 1 || ( I = ( g = r ? h [ r - 1 ] . node : B . getItem ( r + 1 ) ) && ( ! a ( g ) || ! g . is ( "br" ) ) , g = g && a ( g ) && m . $block [ g . getName ( ) ] ) , - 1 != G || p || ( G = r ) , p || ( l = r ) , h . push ( { isElement : 1 ,
isLineBreak : I , isBlock : e . isBlockBoundary ( ) , hasBlockSibling : g , node : e , name : f , allowed : p } ) , g = I = 0 ) ) : h . push ( { isElement : 0 , node : e , allowed : 1 } ) ; - 1 < G && ( h [ G ] . firstNotAllowed = 1 ) ; - 1 < l && ( h [ l ] . lastNotAllowed = 1 ) ; return h } function d ( b , c ) { var e = [ ] , g = b . getChildren ( ) , f = g . count ( ) , p , h = 0 , k = m [ c ] , B = ! b . is ( m . $inline ) || b . is ( "br" ) ; for ( B && e . push ( " " ) ; h < f ; h ++ ) p = g . getItem ( h ) , a ( p ) && ! p . is ( k ) ? e = e . concat ( d ( p , c ) ) : e . push ( p ) ; B && e . push ( " " ) ; return e } function e ( b ) { return a ( b . startContainer ) && b . startContainer . getChild ( b . startOffset - 1 ) } function f ( b ) { return b &&
a ( b ) && ( b . is ( m . $removeEmpty ) || b . is ( "a" ) && ! b . isBlockBoundary ( ) ) } function h ( b , c , d , e ) { var g = b . clone ( ) , f , r ; g . setEndAt ( c , CKEDITOR . POSITION _BEFORE _END ) ; ( f = ( new CKEDITOR . dom . walker ( g ) ) . next ( ) ) && a ( f ) && p [ f . getName ( ) ] && ( r = f . getPrevious ( ) ) && a ( r ) && ! r . getParent ( ) . equals ( b . startContainer ) && d . contains ( r ) && e . contains ( f ) && f . isIdentical ( r ) && ( f . moveChildren ( r ) , f . remove ( ) , h ( b , c , d , e ) ) } function k ( b , c ) { function d ( b , c ) { if ( c . isBlock && c . isElement && ! c . node . is ( "br" ) && a ( b ) && b . is ( "br" ) ) return b . remove ( ) , 1 } var e = c . endContainer . getChild ( c . endOffset ) ,
g = c . endContainer . getChild ( c . endOffset - 1 ) ; e && d ( e , b [ b . length - 1 ] ) ; g && d ( g , b [ 0 ] ) && ( c . setEnd ( c . endContainer , c . endOffset - 1 ) , c . collapse ( ) ) } var m = CKEDITOR . dtd , p = { 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 } , I = { p : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 } , N = CKEDITOR . tools . extend ( { } , m . $inline ) ; delete N . br ; return function ( p , C , L , w ) { var t = p . editor , u = ! 1 , x ; "unfiltered_html" == C && ( C = "html" , u = ! 0 ) ; if ( ! w . checkReadOnly ( ) ) { var z = ( new CKEDITOR . dom . elementPath ( w . startContainer , w . root ) ) . blockLimit ||
w . root ; C = { type : C , dontFilter : u , editable : p , editor : t , range : w , blockLimit : z , mergeCandidates : [ ] , zombies : [ ] } ; var u = C . range , z = C . mergeCandidates , v = "html" === C . type , A , S , V , F , H ; "text" == C . type && u . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 , ! 1 ) && ( S = CKEDITOR . dom . element . createFromHtml ( "\x3cspan\x3e\x26nbsp;\x3c/span\x3e" , u . document ) , u . insertNode ( S ) , u . setStartAfter ( S ) ) ; V = new CKEDITOR . dom . elementPath ( u . startContainer ) ; C . endPath = F = new CKEDITOR . dom . elementPath ( u . endContainer ) ; if ( ! u . collapsed ) { A = F . block || F . blockLimit ; var Z = u . getCommonAncestor ( ) ;
A && ! A . equals ( Z ) && ! A . contains ( Z ) && u . checkEndOfBlock ( ) && C . zombies . push ( A ) ; u . deleteContents ( ) } for ( ; ( H = e ( u ) ) && a ( H ) && H . isBlockBoundary ( ) && V . contains ( H ) ; ) u . moveToPosition ( H , CKEDITOR . POSITION _BEFORE _END ) ; h ( u , C . blockLimit , V , F ) ; S && ( u . setEndBefore ( S ) , u . collapse ( ) , S . remove ( ) ) ; S = u . startPath ( ) ; if ( A = S . contains ( f , ! 1 , 1 ) ) x = u . splitElement ( A ) , C . inlineStylesRoot = A , C . inlineStylesPeak = S . lastElement ; S = u . createBookmark ( ) ; v && ( g ( A ) , g ( x ) ) ; ( A = S . startNode . getPrevious ( c ) ) && a ( A ) && f ( A ) && z . push ( A ) ; ( A = S . startNode . getNext ( c ) ) && a ( A ) &&
f ( A ) && z . push ( A ) ; for ( A = S . startNode ; ( A = A . getParent ( ) ) && f ( A ) ; ) z . push ( A ) ; u . moveToBookmark ( S ) ; x = p . getHtml ( ) ; x = "" === x || x . match ( M ) ; t . enterMode === CKEDITOR . ENTER _DIV && x && ( ( t = p . getFirst ( ) ) && t . remove ( ) , w . setStartAt ( p , CKEDITOR . POSITION _AFTER _START ) , w . collapse ( ! 0 ) ) ; if ( p = L ) { p = C . range ; if ( "text" == C . type && C . inlineStylesRoot ) { w = C . inlineStylesPeak ; t = w . getDocument ( ) . createText ( "{cke-peak}" ) ; for ( x = C . inlineStylesRoot . getParent ( ) ; ! w . equals ( x ) ; ) t = t . appendTo ( w . clone ( ) ) , w = w . getParent ( ) ; L = t . getOuterHtml ( ) . split ( "{cke-peak}" ) . join ( L ) } w =
C . blockLimit . getName ( ) ; if ( /^\s+|\s+$/ . test ( L ) && "span" in CKEDITOR . dtd [ w ] ) { var J = '\x3cspan data-cke-marker\x3d"1"\x3e\x26nbsp;\x3c/span\x3e' ; L = J + L + J } L = C . editor . dataProcessor . toHtml ( L , { context : null , fixForBody : ! 1 , protectedWhitespaces : ! ! J , dontFilter : C . dontFilter , filter : C . editor . activeFilter , enterMode : C . editor . activeEnterMode } ) ; w = p . document . createElement ( "body" ) ; w . setHtml ( L ) ; J && ( w . getFirst ( ) . remove ( ) , w . getLast ( ) . remove ( ) ) ; if ( ( J = p . startPath ( ) . block ) && ( 1 != J . getChildCount ( ) || ! J . getBogus ( ) ) ) a : { var Q ; if ( 1 ==
w . getChildCount ( ) && a ( Q = w . getFirst ( ) ) && Q . is ( I ) && ! Q . hasAttribute ( "contenteditable" ) ) { J = Q . getElementsByTag ( "*" ) ; p = 0 ; for ( x = J . count ( ) ; p < x ; p ++ ) if ( t = J . getItem ( p ) , ! t . is ( N ) ) break a ; Q . moveChildren ( Q . getParent ( 1 ) ) ; Q . remove ( ) } } C . dataWrapper = w ; p = L } if ( p ) { Q = C . range ; p = Q . document ; w = C . blockLimit ; x = 0 ; var E , J = [ ] , ca , P ; L = S = 0 ; var U , t = Q . startContainer ; H = C . endPath . elements [ 0 ] ; var R , u = H . getPosition ( t ) , z = ! ! H . getCommonAncestor ( t ) && u != CKEDITOR . POSITION _IDENTICAL && ! ( u & CKEDITOR . POSITION _CONTAINS + CKEDITOR . POSITION _IS _CONTAINED ) ,
t = b ( C . dataWrapper , C ) ; for ( C . editor . enterMode !== CKEDITOR . ENTER _BR && k ( t , Q ) ; x < t . length ; x ++ ) { u = t [ x ] ; if ( v = u . isLineBreak ) v = Q , A = w , F = V = void 0 , u . hasBlockSibling ? v = 1 : ( V = v . startContainer . getAscendant ( m . $block , 1 ) ) && V . is ( { div : 1 , p : 1 } ) ? ( F = V . getPosition ( A ) , F == CKEDITOR . POSITION _IDENTICAL || F == CKEDITOR . POSITION _CONTAINS ? v = 0 : ( A = v . splitElement ( V ) , v . moveToPosition ( A , CKEDITOR . POSITION _AFTER _START ) , v = 1 ) ) : v = 0 ; if ( v ) L = 0 < x ; else { v = Q . startPath ( ) ; ! u . isBlock && l ( C . editor , v . block , v . blockLimit ) && ( P = q ( C . editor ) ) && ( P = p . createElement ( P ) ,
P . appendBogus ( ) , Q . insertNode ( P ) , CKEDITOR . env . needsBrFiller && ( E = P . getBogus ( ) ) && E . remove ( ) , Q . moveToPosition ( P , CKEDITOR . POSITION _BEFORE _END ) ) ; if ( ( v = Q . startPath ( ) . block ) && ! v . equals ( ca ) ) { if ( E = v . getBogus ( ) ) E . remove ( ) , J . push ( v ) ; ca = v } u . firstNotAllowed && ( S = 1 ) ; if ( S && u . isElement ) { v = Q . startContainer ; for ( A = null ; v && ! m [ v . getName ( ) ] [ u . name ] ; ) { if ( v . equals ( w ) ) { v = null ; break } A = v ; v = v . getParent ( ) } if ( v ) A && ( U = Q . splitElement ( A ) , C . zombies . push ( U ) , C . zombies . push ( A ) ) ; else { A = w . getName ( ) ; R = ! x ; v = x == t . length - 1 ; A = d ( u . node , A ) ; V = [ ] ;
F = A . length ; for ( var Z = 0 , Y = void 0 , da = 0 , fa = - 1 ; Z < F ; Z ++ ) Y = A [ Z ] , " " == Y ? ( da || R && ! Z || ( V . push ( new CKEDITOR . dom . text ( " " ) ) , fa = V . length ) , da = 1 ) : ( V . push ( Y ) , da = 0 ) ; v && fa == V . length && V . pop ( ) ; R = V } } if ( R ) { for ( ; v = R . pop ( ) ; ) Q . insertNode ( v ) ; R = 0 } else Q . insertNode ( u . node ) ; u . lastNotAllowed && x < t . length - 1 && ( ( U = z ? H : U ) && Q . setEndAt ( U , CKEDITOR . POSITION _AFTER _START ) , S = 0 ) ; Q . collapse ( ) } } 1 != t . length ? E = ! 1 : ( E = t [ 0 ] , E = E . isElement && "false" == E . node . getAttribute ( "contenteditable" ) ) ; E && ( L = ! 0 , v = t [ 0 ] . node , Q . setStartAt ( v , CKEDITOR . POSITION _BEFORE _START ) ,
Q . setEndAt ( v , CKEDITOR . POSITION _AFTER _END ) ) ; C . dontMoveCaret = L ; C . bogusNeededBlocks = J } E = C . range ; var ba ; R = C . bogusNeededBlocks ; for ( ca = E . createBookmark ( ) ; P = C . zombies . pop ( ) ; ) P . getParent ( ) && ( U = E . clone ( ) , U . moveToElementEditStart ( P ) , U . removeEmptyBlocksAtEnd ( ) ) ; if ( R ) for ( ; P = R . pop ( ) ; ) CKEDITOR . env . needsBrFiller ? P . appendBogus ( ) : P . append ( E . document . createText ( " " ) ) ; for ( ; P = C . mergeCandidates . pop ( ) ; ) P . mergeSiblings ( ) ; CKEDITOR . env . webkit && E . startPath ( ) && ( P = E . startPath ( ) , P . block ? P . block . $ . normalize ( ) : P . blockLimit && P . blockLimit . $ . normalize ( ) ) ;
E . moveToBookmark ( ca ) ; if ( ! C . dontMoveCaret ) { for ( P = e ( E ) ; P && a ( P ) && ! P . is ( m . $empty ) ; ) { if ( P . isBlockBoundary ( ) ) E . moveToPosition ( P , CKEDITOR . POSITION _BEFORE _END ) ; else { if ( f ( P ) && P . getHtml ( ) . match ( /(\s| )$/g ) ) { ba = null ; break } ba = E . clone ( ) ; ba . moveToPosition ( P , CKEDITOR . POSITION _BEFORE _END ) } P = P . getLast ( c ) } ba && E . moveToRange ( ba ) } } } } ( ) ; J = function ( ) { function a ( b ) { b = new CKEDITOR . dom . walker ( b ) ; b . guard = function ( a , b ) { if ( b ) return ! 1 ; 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 ; 0 < b -- ; ) d = a . getItem ( b ) , CKEDITOR . tools . trim ( d . getHtml ( ) ) || ( d . appendBogus ( ) , CKEDITOR . env . ie && 9 > CKEDITOR . env . version && d . getChildCount ( ) && d . getFirst ( ) . remove ( ) ) } return function ( d ) { var e = d . startContainer , g = e . getAscendant ( "table" , 1 ) , f = ! 1 ; c ( g . getElementsByTag ( "td" ) ) ; c ( g . getElementsByTag ( "th" ) ) ; g = d . clone ( ) ; g . setStart ( e , 0 ) ; g = a ( g ) . lastBackward ( ) ; g || ( g = d . clone ( ) , g . setEndAt ( e ,
CKEDITOR . POSITION _BEFORE _END ) , g = a ( g ) . lastForward ( ) , f = ! 0 ) ; g || ( g = e ) ; g . is ( "table" ) ? ( d . setStartAt ( g , CKEDITOR . POSITION _BEFORE _START ) , d . collapse ( ! 0 ) , g . remove ( ) ) : ( g . is ( { tbody : 1 , thead : 1 , tfoot : 1 } ) && ( g = b ( g , "tr" , f ) ) , g . is ( "tr" ) && ( g = b ( g , g . getParent ( ) . is ( "thead" ) ? "th" : "td" , f ) ) , ( e = g . getBogus ( ) ) && e . remove ( ) , d . moveToPosition ( g , f ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _BEFORE _END ) ) } } ( ) ; E = function ( ) { function a ( b ) { b = new CKEDITOR . dom . walker ( b ) ; b . guard = function ( a , b ) { if ( b ) return ! 1 ; if ( a . type == CKEDITOR . NODE _ELEMENT ) return a . is ( CKEDITOR . dtd . $list ) ||
a . is ( CKEDITOR . dtd . $listItem ) } ; b . evaluator = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . is ( CKEDITOR . dtd . $listItem ) } ; return b } return function ( b ) { var c = b . startContainer , d = ! 1 , e ; e = b . clone ( ) ; e . setStart ( c , 0 ) ; e = a ( e ) . lastBackward ( ) ; e || ( e = b . clone ( ) , e . setEndAt ( c , CKEDITOR . POSITION _BEFORE _END ) , e = a ( e ) . lastForward ( ) , d = ! 0 ) ; e || ( e = c ) ; e . is ( CKEDITOR . dtd . $list ) ? ( b . setStartAt ( e , CKEDITOR . POSITION _BEFORE _START ) , b . collapse ( ! 0 ) , e . remove ( ) ) : ( ( c = e . getBogus ( ) ) && c . remove ( ) , b . moveToPosition ( e , d ? CKEDITOR . POSITION _AFTER _START :
CKEDITOR . POSITION _BEFORE _END ) , b . select ( ) ) } } ( ) ; u = { eol : { detect : function ( a , b ) { var c = a . range , d = c . clone ( ) , e = c . clone ( ) , g = new CKEDITOR . dom . elementPath ( c . startContainer , b ) , f = new CKEDITOR . dom . elementPath ( c . endContainer , b ) ; d . collapse ( 1 ) ; e . collapse ( ) ; g . block && d . checkBoundaryOfElement ( g . block , CKEDITOR . END ) && ( c . setStartAfter ( g . block ) , a . prependEolBr = 1 ) ; f . block && e . checkBoundaryOfElement ( f . block , CKEDITOR . START ) && ( c . setEndBefore ( f . block ) , a . appendEolBr = 1 ) } , fix : function ( a , b ) { var c = b . getDocument ( ) , d ; a . appendEolBr && ( d =
this . createEolBr ( c ) , a . fragment . append ( d ) ) ; ! a . prependEolBr || d && ! d . getPrevious ( ) || a . fragment . append ( this . createEolBr ( c ) , 1 ) } , createEolBr : function ( a ) { return a . createElement ( "br" , { attributes : { "data-cke-eol" : 1 } } ) } } , bogus : { exclude : function ( a ) { var b = a . range . getBoundaryNodes ( ) , c = b . startNode , b = b . endNode ; ! b || ! m ( b ) || c && c . equals ( b ) || a . range . setEndBefore ( b ) } } , tree : { rebuild : function ( a , b ) { var c = a . range , d = c . getCommonAncestor ( ) , e = new CKEDITOR . dom . elementPath ( d , b ) , g = new CKEDITOR . dom . elementPath ( c . startContainer , b ) ,
c = new CKEDITOR . dom . elementPath ( c . endContainer , b ) , f ; d . type == CKEDITOR . NODE _TEXT && ( d = d . getParent ( ) ) ; if ( e . blockLimit . is ( { tr : 1 , table : 1 } ) ) { var h = e . contains ( "table" ) . getParent ( ) ; f = function ( a ) { return ! a . equals ( h ) } } else if ( e . block && e . block . is ( CKEDITOR . dtd . $listItem ) && ( g = g . contains ( CKEDITOR . dtd . $list ) , c = c . contains ( CKEDITOR . dtd . $list ) , ! g . equals ( c ) ) ) { var p = e . contains ( CKEDITOR . dtd . $list ) . getParent ( ) ; f = function ( a ) { return ! a . equals ( p ) } } f || ( f = function ( a ) { return ! a . equals ( e . block ) && ! a . equals ( e . blockLimit ) } ) ; this . rebuildFragment ( a ,
b , d , f ) } , rebuildFragment : function ( a , b , c , d ) { for ( var e ; c && ! c . equals ( b ) && d ( c ) ; ) e = c . clone ( 0 , 1 ) , a . fragment . appendTo ( e ) , a . fragment = e , c = c . getParent ( ) } } , cell : { shrink : function ( a ) { a = a . range ; var b = a . startContainer , c = a . endContainer , d = a . startOffset , e = a . endOffset ; b . type == CKEDITOR . NODE _ELEMENT && b . equals ( c ) && b . is ( "tr" ) && ++ d == e && a . shrink ( CKEDITOR . SHRINK _TEXT ) } } } ; F = function ( ) { function a ( b , c ) { var d = b . getParent ( ) ; if ( d . is ( CKEDITOR . dtd . $inline ) ) b [ c ? "insertBefore" : "insertAfter" ] ( d ) } function b ( c , d , e ) { a ( d ) ; a ( e , 1 ) ; for ( var g ; g =
e . getNext ( ) ; ) g . insertAfter ( d ) , d = g ; t ( c ) && c . remove ( ) } function c ( a , b ) { var d = new CKEDITOR . dom . range ( a ) ; d . setStartAfter ( b . startNode ) ; d . setEndBefore ( b . endNode ) ; return d } return { list : { detectMerge : function ( a , b ) { var d = c ( b , a . bookmark ) , e = d . startPath ( ) , g = d . endPath ( ) , f = e . contains ( CKEDITOR . dtd . $list ) , h = g . contains ( CKEDITOR . dtd . $list ) ; a . mergeList = f && h && f . getParent ( ) . equals ( h . getParent ( ) ) && ! f . equals ( h ) ; a . mergeListItems = e . block && g . block && e . block . is ( CKEDITOR . dtd . $listItem ) && g . block . is ( CKEDITOR . dtd . $listItem ) ; if ( a . mergeList ||
a . mergeListItems ) d = d . clone ( ) , d . setStartBefore ( a . bookmark . startNode ) , d . setEndAfter ( a . bookmark . endNode ) , a . mergeListBookmark = d . createBookmark ( ) } , merge : function ( a , c ) { if ( a . mergeListBookmark ) { var d = a . mergeListBookmark . startNode , e = a . mergeListBookmark . endNode , g = new CKEDITOR . dom . elementPath ( d , c ) , f = new CKEDITOR . dom . elementPath ( e , c ) ; if ( a . mergeList ) { var h = g . contains ( CKEDITOR . dtd . $list ) , k = f . contains ( CKEDITOR . dtd . $list ) ; h . equals ( k ) || ( k . moveChildren ( h ) , k . remove ( ) ) } a . mergeListItems && ( g = g . contains ( CKEDITOR . dtd . $listItem ) ,
f = f . contains ( CKEDITOR . dtd . $listItem ) , g . equals ( f ) || b ( f , d , e ) ) ; d . remove ( ) ; e . remove ( ) } } } , block : { detectMerge : function ( a , b ) { if ( ! a . tableContentsRanges && ! a . mergeListBookmark ) { var c = new CKEDITOR . dom . range ( b ) ; c . setStartBefore ( a . bookmark . startNode ) ; c . setEndAfter ( a . bookmark . endNode ) ; a . mergeBlockBookmark = c . createBookmark ( ) } } , merge : function ( a , c ) { if ( a . mergeBlockBookmark && ! a . purgeTableBookmark ) { var d = a . mergeBlockBookmark . startNode , e = a . mergeBlockBookmark . endNode , g = new CKEDITOR . dom . elementPath ( d , c ) , f = new CKEDITOR . dom . elementPath ( e ,
c ) , g = g . block , f = f . block ; g && f && ! g . equals ( f ) && b ( f , d , e ) ; d . remove ( ) ; e . remove ( ) } } } , table : function ( ) { function a ( c ) { var e = [ ] , g , f = new CKEDITOR . dom . walker ( c ) , h = c . startPath ( ) . contains ( d ) , k = c . endPath ( ) . contains ( d ) , r = { } ; f . guard = function ( a , f ) { if ( a . type == CKEDITOR . NODE _ELEMENT ) { var l = "visited_" + ( f ? "out" : "in" ) ; if ( a . getCustomData ( l ) ) return ; CKEDITOR . dom . element . setMarker ( r , a , l , 1 ) } if ( f && h && a . equals ( h ) ) g = c . clone ( ) , g . setEndAt ( h , CKEDITOR . POSITION _BEFORE _END ) , e . push ( g ) ; else if ( ! f && k && a . equals ( k ) ) g = c . clone ( ) , g . setStartAt ( k ,
CKEDITOR . POSITION _AFTER _START ) , e . push ( g ) ; else { if ( l = ! f ) l = a . type == CKEDITOR . NODE _ELEMENT && a . is ( d ) && ( ! h || b ( a , h ) ) && ( ! k || b ( a , k ) ) ; if ( ! l && ( l = f ) ) if ( a . is ( d ) ) var l = h && h . getAscendant ( "table" , ! 0 ) , D = k && k . getAscendant ( "table" , ! 0 ) , I = a . getAscendant ( "table" , ! 0 ) , l = l && l . contains ( I ) || D && D . contains ( I ) ; else l = void 0 ; l && ( g = c . clone ( ) , g . selectNodeContents ( a ) , e . push ( g ) ) } } ; f . lastForward ( ) ; CKEDITOR . dom . element . clearAllMarkers ( r ) ; return e } function b ( a , c ) { var d = CKEDITOR . POSITION _CONTAINS + CKEDITOR . POSITION _IS _CONTAINED , e = a . getPosition ( c ) ;
return e === CKEDITOR . POSITION _IDENTICAL ? ! 1 : 0 === ( e & d ) } var d = { td : 1 , th : 1 , caption : 1 } ; return { detectPurge : function ( a ) { var b = a . range , c = b . clone ( ) ; c . enlarge ( CKEDITOR . ENLARGE _ELEMENT ) ; var c = new CKEDITOR . dom . walker ( c ) , e = 0 ; c . evaluator = function ( a ) { a . type == CKEDITOR . NODE _ELEMENT && a . is ( d ) && ++ e } ; c . checkForward ( ) ; if ( 1 < e ) { var c = b . startPath ( ) . contains ( "table" ) , g = b . endPath ( ) . contains ( "table" ) ; c && g && b . checkBoundaryOfElement ( c , CKEDITOR . START ) && b . checkBoundaryOfElement ( g , CKEDITOR . END ) && ( b = a . range . clone ( ) , b . setStartBefore ( c ) ,
b . setEndAfter ( g ) , a . purgeTableBookmark = b . createBookmark ( ) ) } } , detectRanges : function ( e , g ) { var f = c ( g , e . bookmark ) , h = f . clone ( ) , k , n , l = f . getCommonAncestor ( ) ; l . is ( CKEDITOR . dtd . $tableContent ) && ! l . is ( d ) && ( l = l . getAscendant ( "table" , ! 0 ) ) ; n = l ; l = new CKEDITOR . dom . elementPath ( f . startContainer , n ) ; n = new CKEDITOR . dom . elementPath ( f . endContainer , n ) ; l = l . contains ( "table" ) ; n = n . contains ( "table" ) ; if ( l || n ) l && n && b ( l , n ) ? ( e . tableSurroundingRange = h , h . setStartAt ( l , CKEDITOR . POSITION _AFTER _END ) , h . setEndAt ( n , CKEDITOR . POSITION _BEFORE _START ) ,
h = f . clone ( ) , h . setEndAt ( l , CKEDITOR . POSITION _AFTER _END ) , k = f . clone ( ) , k . setStartAt ( n , CKEDITOR . POSITION _BEFORE _START ) , k = a ( h ) . concat ( a ( k ) ) ) : l ? n || ( e . tableSurroundingRange = h , h . setStartAt ( l , CKEDITOR . POSITION _AFTER _END ) , f . setEndAt ( l , CKEDITOR . POSITION _AFTER _END ) ) : ( e . tableSurroundingRange = h , h . setEndAt ( n , CKEDITOR . POSITION _BEFORE _START ) , f . setStartAt ( n , CKEDITOR . POSITION _AFTER _START ) ) , e . tableContentsRanges = k ? k : a ( f ) } , deleteRanges : function ( a ) { for ( var b ; b = a . tableContentsRanges . pop ( ) ; ) b . extractContents ( ) , t ( b . startContainer ) &&
b . startContainer . appendBogus ( ) ; a . tableSurroundingRange && a . tableSurroundingRange . extractContents ( ) } , purge : function ( a ) { if ( a . purgeTableBookmark ) { var b = a . doc , c = a . range . clone ( ) , b = b . createElement ( "p" ) ; b . insertBefore ( a . purgeTableBookmark . startNode ) ; c . moveToBookmark ( a . purgeTableBookmark ) ; c . deleteContents ( ) ; a . range . moveToPosition ( b , CKEDITOR . POSITION _AFTER _START ) } } } } ( ) , detectExtractMerge : function ( a ) { return ! ( a . range . startPath ( ) . contains ( CKEDITOR . dtd . $listItem ) && a . range . endPath ( ) . contains ( CKEDITOR . dtd . $listItem ) ) } ,
fixUneditableRangePosition : function ( a ) { a . startContainer . getDtd ( ) [ "#" ] || a . moveToClosestEditablePosition ( null , ! 0 ) } , autoParagraph : function ( a , b ) { var c = b . startPath ( ) , d ; l ( a , c . block , c . blockLimit ) && ( d = q ( a ) ) && ( d = b . document . createElement ( d ) , d . appendBogus ( ) , b . insertNode ( d ) , b . moveToPosition ( d , CKEDITOR . POSITION _AFTER _START ) ) } } } ( ) } ) ( ) ;
( function ( ) { function a ( a ) { return CKEDITOR . plugins . widget && CKEDITOR . plugins . widget . isDomWidget ( a ) } function d ( b , c ) { if ( 0 === b . length || a ( b [ 0 ] . getEnclosedNode ( ) ) ) return ! 1 ; var d , e ; if ( ( d = ! c && 1 === b . length ) && ! ( d = b [ 0 ] . collapsed ) ) { var g = b [ 0 ] ; d = g . startContainer . getAscendant ( { td : 1 , th : 1 } , ! 0 ) ; var f = g . endContainer . getAscendant ( { td : 1 , th : 1 } , ! 0 ) ; e = CKEDITOR . tools . trim ; d && d . equals ( f ) && ! d . findOne ( "td, th, tr, tbody, table" ) ? ( g = g . cloneContents ( ) , d = g . getFirst ( ) ? e ( g . getFirst ( ) . getText ( ) ) !== e ( d . getText ( ) ) : ! 0 ) : d = ! 1 } if ( d ) return ! 1 ;
for ( e = 0 ; e < b . length ; e ++ ) if ( d = b [ e ] . _getTableElement ( ) , ! d ) return ! 1 ; return ! 0 } function b ( a ) { function b ( a ) { a = a . find ( "td, th" ) ; var c = [ ] , d ; for ( d = 0 ; d < a . count ( ) ; d ++ ) c . push ( a . getItem ( d ) ) ; return c } var c = [ ] , d , e ; for ( e = 0 ; e < a . length ; e ++ ) d = a [ e ] . _getTableElement ( ) , d . is && d . is ( { td : 1 , th : 1 } ) ? c . push ( d ) : c = c . concat ( b ( d ) ) ; return c } function c ( a ) { a = b ( a ) ; var c = "" , d = [ ] , e , g ; for ( g = 0 ; g < a . length ; g ++ ) e && ! e . equals ( a [ g ] . getAscendant ( "tr" ) ) ? ( c += d . join ( "\t" ) + "\n" , e = a [ g ] . getAscendant ( "tr" ) , d = [ ] ) : 0 === g && ( e = a [ g ] . getAscendant ( "tr" ) ) , d . push ( a [ g ] . getText ( ) ) ;
return c += d . join ( "\t" ) } function f ( a ) { var b = this . root . editor , d = b . getSelection ( 1 ) ; this . reset ( ) ; J = ! 0 ; d . root . once ( "selectionchange" , function ( a ) { a . cancel ( ) } , null , null , 0 ) ; d . selectRanges ( [ a [ 0 ] ] ) ; d = this . _ . cache ; d . ranges = new CKEDITOR . dom . rangeList ( a ) ; d . type = CKEDITOR . SELECTION _TEXT ; d . selectedElement = a [ 0 ] . _getTableElement ( ) ; d . selectedText = c ( a ) ; d . nativeSel = null ; this . isFake = 1 ; this . rev = H ++ ; b . _ . fakeSelection = this ; J = ! 1 ; this . root . fire ( "selectionchange" ) } function e ( ) { var b = this . _ . fakeSelection , c ; if ( b ) { c = this . getSelection ( 1 ) ;
var e ; if ( ! ( e = ! c ) && ( e = ! c . isHidden ( ) ) ) { e = b ; var g = c . getRanges ( ) , f = e . getRanges ( ) , h = g . length && g [ 0 ] . _getTableElement ( ) && g [ 0 ] . _getTableElement ( ) . getAscendant ( "table" , ! 0 ) , k = f . length && f [ 0 ] . _getTableElement ( ) && f [ 0 ] . _getTableElement ( ) . getAscendant ( "table" , ! 0 ) , l = 1 === g . length && g [ 0 ] . _getTableElement ( ) && g [ 0 ] . _getTableElement ( ) . is ( "table" ) , N = 1 === f . length && f [ 0 ] . _getTableElement ( ) && f [ 0 ] . _getTableElement ( ) . is ( "table" ) ; if ( a ( e . getSelectedElement ( ) ) ) e = ! 1 ; else { var p = 1 === g . length && g [ 0 ] . collapsed , f = d ( g , ! ! CKEDITOR . env . webkit ) &&
d ( f ) ; h = h && k ? h . equals ( k ) || k . contains ( h ) : ! 1 ; h && ( p || f ) ? ( l && ! N && e . selectRanges ( g ) , e = ! 0 ) : e = ! 1 } e = ! e } e && ( b . reset ( ) , b = 0 ) } if ( ! b && ( b = c || this . getSelection ( 1 ) , ! b || b . getType ( ) == CKEDITOR . SELECTION _NONE ) ) return ; this . fire ( "selectionCheck" , b ) ; c = this . elementPath ( ) ; c . compare ( this . _ . selectionPreviousPath ) || ( e = this . _ . selectionPreviousPath && this . _ . selectionPreviousPath . blockLimit . equals ( c . blockLimit ) , ! CKEDITOR . env . webkit && ! CKEDITOR . env . gecko || e || ( this . _ . previousActive = this . document . getActive ( ) ) , this . _ . selectionPreviousPath =
c , this . fire ( "selectionChange" , { selection : b , path : c } ) ) } function k ( ) { C= ! 0 ; m || ( h . call ( this ) , m = CKEDITOR . tools . setTimeout ( h , 200 , this ) ) } function h ( ) { m= null ; C && ( CKEDITOR . tools . setTimeout ( e , 0 , this ) , C = ! 1 ) } function l ( a ) { return K ( a ) || a . type == CKEDITOR . NODE _ELEMENT && ! a . is ( CKEDITOR . dtd . $empty ) ? ! 0 : ! 1 } function q ( a ) { function b ( c , d ) { return c && c . type != CKEDITOR . NODE _TEXT ? a . clone ( ) [ "moveToElementEdit" + ( d ? "End" : "Start" ) ] ( c ) : ! 1 } if ( ! ( a . root instanceof CKEDITOR . editable ) ) return ! 1 ; var c = a . startContainer , d = a . getPreviousNode ( l ,
null , c ) , e = a . getNextNode ( l , null , c ) ; return b ( d ) || b ( e , 1 ) || ! ( d || e || c . type == CKEDITOR . NODE _ELEMENT && c . isBlockBoundary ( ) && c . getBogus ( ) ) ? ! 0 : ! 1 } function g ( a ) { y ( a , ! 1 ) ; var b = a . getDocument ( ) . createText ( u ) ; a . setCustomData ( "cke-fillingChar" , b ) ; return b } function y ( a , b ) { var c = a && a . removeCustomData ( "cke-fillingChar" ) ; if ( c ) { if ( ! 1 !== b ) { var d = a . getDocument ( ) . getSelection ( ) . getNative ( ) , e = d && "None" != d . type && d . getRangeAt ( 0 ) , g = u . length ; if ( c . getLength ( ) > g && e && e . intersectsNode ( c . $ ) ) { var f = [ { node : d . anchorNode , offset : d . anchorOffset } ,
{ node : d . focusNode , offset : d . focusOffset } ] ; d . anchorNode == c . $ && d . anchorOffset > g && ( f [ 0 ] . offset -= g ) ; d . focusNode == c . $ && d . focusOffset > g && ( f [ 1 ] . offset -= g ) } } c . setText ( z ( c . getText ( ) , 1 ) ) ; f && ( c = a . getDocument ( ) . $ , d = c . getSelection ( ) , c = c . createRange ( ) , c . setStart ( f [ 0 ] . node , f [ 0 ] . offset ) , c . collapse ( ! 0 ) , d . removeAllRanges ( ) , d . addRange ( c ) , d . extend ( f [ 1 ] . node , f [ 1 ] . offset ) ) } } function z ( a , b ) { return b ? a . replace ( I , function ( a , b ) { return b ? " " : "" } ) : a . replace ( u, "" ) } function x ( a , b ) { var c = b && CKEDITOR . tools . htmlEncode ( b ) || "\x26nbsp;" ,
return c += d . join ( "\t" ) } function f ( a ) { var b = this . root . editor , d = b . getSelection ( 1 ) ; this . reset ( ) ; E = ! 0 ; d . root . once ( "selectionchange" , function ( a ) { a . cancel ( ) } , null , null , 0 ) ; d . selectRanges ( [ a [ 0 ] ] ) ; d = this . _ . cache ; d . ranges = new CKEDITOR . dom . rangeList ( a ) ; d . type = CKEDITOR . SELECTION _TEXT ; d . selectedElement = a [ 0 ] . _getTableElement ( ) ; d . selectedText = c ( a ) ; d . nativeSel = null ; this . isFake = 1 ; this . rev = M ++ ; b . _ . fakeSelection = this ; E = ! 1 ; this . root . fire ( "selectionchange" ) } function e ( ) { var b = this . _ . fakeSelection , c ; if ( b ) { c = this . getSelection ( 1 ) ;
var e ; if ( ! ( e = ! c ) && ( e = ! c . isHidden ( ) ) ) { e = b ; var g = c . getRanges ( ) , f = e . getRanges ( ) , h = g . length && g [ 0 ] . _getTableElement ( ) && g [ 0 ] . _getTableElement ( ) . getAscendant ( "table" , ! 0 ) , k = f . length && f [ 0 ] . _getTableElement ( ) && f [ 0 ] . _getTableElement ( ) . getAscendant ( "table" , ! 0 ) , l = 1 === g . length && g [ 0 ] . _getTableElement ( ) && g [ 0 ] . _getTableElement ( ) . is ( "table" ) , N = 1 === f . length && f [ 0 ] . _getTableElement ( ) && f [ 0 ] . _getTableElement ( ) . is ( "table" ) ; if ( a ( e . getSelectedElement ( ) ) ) e = ! 1 ; else { var n = 1 === g . length && g [ 0 ] . collapsed , f = d ( g , ! ! CKEDITOR . env . webkit ) &&
d ( f ) ; h = h && k ? h . equals ( k ) || k . contains ( h ) : ! 1 ; h && ( n || f ) ? ( l && ! N && e . selectRanges ( g ) , e = ! 0 ) : e = ! 1 } e = ! e } e && ( b . reset ( ) , b = 0 ) } if ( ! b && ( b = c || this . getSelection ( 1 ) , ! b || b . getType ( ) == CKEDITOR . SELECTION _NONE ) ) return ; this . fire ( "selectionCheck" , b ) ; c = this . elementPath ( ) ; c . compare ( this . _ . selectionPreviousPath ) || ( e = this . _ . selectionPreviousPath && this . _ . selectionPreviousPath . blockLimit . equals ( c . blockLimit ) , ! CKEDITOR . env . webkit && ! CKEDITOR . env . gecko || e || ( this . _ . previousActive = this . document . getActive ( ) ) , this . _ . selectionPreviousPath =
c , this . fire ( "selectionChange" , { selection : b , path : c } ) ) } function k ( ) { F= ! 0 ; u || ( h . call ( this ) , u = CKEDITOR . tools . setTimeout ( h , 200 , this ) ) } function h ( ) { u= null ; F && ( CKEDITOR . tools . setTimeout ( e , 0 , this ) , F = ! 1 ) } function l ( a ) { return H ( a ) || a . type == CKEDITOR . NODE _ELEMENT && ! a . is ( CKEDITOR . dtd . $empty ) ? ! 0 : ! 1 } function q ( a ) { function b ( c , d ) { return c && c . type != CKEDITOR . NODE _TEXT ? a . clone ( ) [ "moveToElementEdit" + ( d ? "End" : "Start" ) ] ( c ) : ! 1 } if ( ! ( a . root instanceof CKEDITOR . editable ) ) return ! 1 ; var c = a . startContainer , d = a . getPreviousNode ( l ,
null , c ) , e = a . getNextNode ( l , null , c ) ; return b ( d ) || b ( e , 1 ) || ! ( d || e || c . type == CKEDITOR . NODE _ELEMENT && c . isBlockBoundary ( ) && c . getBogus ( ) ) ? ! 0 : ! 1 } function g ( a ) { w ( a , ! 1 ) ; var b = a . getDocument ( ) . createText ( v ) ; a . setCustomData ( "cke-fillingChar" , b ) ; return b } function w ( a , b ) { var c = a && a . removeCustomData ( "cke-fillingChar" ) ; if ( c ) { if ( ! 1 !== b ) { var d = a . getDocument ( ) . getSelection ( ) . getNative ( ) , e = d && "None" != d . type && d . getRangeAt ( 0 ) , g = v . length ; if ( c . getLength ( ) > g && e && e . intersectsNode ( c . $ ) ) { var f = [ { node : d . anchorNode , offset : d . anchorOffset } ,
{ node : d . focusNode , offset : d . focusOffset } ] ; d . anchorNode == c . $ && d . anchorOffset > g && ( f [ 0 ] . offset -= g ) ; d . focusNode == c . $ && d . focusOffset > g && ( f [ 1 ] . offset -= g ) } } c . setText ( x ( c . getText ( ) , 1 ) ) ; f && ( c = a . getDocument ( ) . $ , d = c . getSelection ( ) , c = c . createRange ( ) , c . setStart ( f [ 0 ] . node , f [ 0 ] . offset ) , c . collapse ( ! 0 ) , d . removeAllRanges ( ) , d . addRange ( c ) , d . extend ( f [ 1 ] . node , f [ 1 ] . offset ) ) } } function x ( a , b ) { return b ? a . replace ( J , function ( a , b ) { return b ? " " : "" } ) : a . replace ( v, "" ) } function z ( a , b ) { var c = b && CKEDITOR . tools . htmlEncode ( b ) || "\x26nbsp;" ,
c = CKEDITOR . dom . element . createFromHtml ( '\x3cdiv data-cke-hidden-sel\x3d"1" data-cke-temp\x3d"1" style\x3d"' + ( CKEDITOR . env . ie && 14 > CKEDITOR . env . version ? "display:none" : "position:fixed;top:0;left:-1000px;width:0;height:0;overflow:hidden;" ) + '"\x3e' + c + "\x3c/div\x3e" , a . document ) ; a . fire ( "lockSnapshot" ) ; a . editable ( ) . append ( c ) ; var d = a . getSelection ( 1 ) , e = a . createRange ( ) , g = d . root . on ( "selectionchange" , function ( a ) { a . cancel ( ) } , null , null , 0 ) ; e . setStartAt ( c , CKEDITOR . POSITION _AFTER _START ) ; e . setEndAt ( c , CKEDITOR . POSITION _BEFORE _END ) ;
d . selectRanges ( [ e ] ) ; g . removeListener ( ) ; a . fire ( "unlockSnapshot" ) ; a . _ . hiddenSelectionContainer = c } function E ( 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 ( ) , g = e . getRanges ( ) [ 0 ] ; e . isCollapsed ( ) && ( g = g [ 38 > d ? "getPreviousEditableNode" : "getNextEditableNode" ] ( ) ) && g . type == CKEDITOR . NODE _ELEMENT && "false" == g . getAttribute ( "contenteditable" ) && ( e = e . getStartElement ( ) , ! e . isBlockBoundary ( ) || "" !== ( void 0 === e . $ . textContent ? e . $ . innerText : e . $ . textContent ) || 8 !==
d && 46 !== d || ( e . remove ( ) , a . fire ( "saveSnapshot" ) ) , a . getSelection ( ) . fake ( g ) , c . data . preventDefault ( ) , c . cancel ( ) ) } } } function v ( 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 && ! ( ( e = d . type == CKEDITOR . NODE _ELEMENT ) && d . is ( "body" ) || ! d . isReadOnly ( ) ) ; ) e && "false" == d . getAttribute ( "contentEditable" ) && c . setStartAfter ( d ) , d = d . getParent ( ) ; d = c . startContainer ; e = c . endContainer ; var g = c . startOffset ,
f = c . endOffset , h = c . clone ( ) ; d && d . type == CKEDITOR . NODE _TEXT && ( g >= d . getLength ( ) ? h . setStartAfter ( d ) : h . setStartBefore ( d ) ) ; e && e . type == CKEDITOR . NODE _TEXT && ( f ? 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 ) ; d . getPosition ( h . endContainer ) & CKEDITOR . POSITION _CONTAINS || ( e . setStartAfter ( d ) , e . collapsed || a . splice ( b + 1 , 0 , e ) ) ; return ! 0 } return ! 1 } ; d . next ( ) } } return a } var n =
"function" != typeof window . getSelection , H= 1 , u = CKEDITOR . tools . repeat ( " " , 7 ) , I= new RegExp ( u + "( )?" , "g" ) , J , m , C , K = CKEDITOR . dom . walker . invisible ( 1 ) , A = function ( ) { function a ( b ) { return function ( a ) { var c = a . editor . createRange ( ) ; c . moveToClosestEditablePosition ( a . selected , b ) && a . editor . getSelection ( ) . selectRanges ( [ c ] ) ; return ! 1 } } function b ( a ) { return function ( b ) { var c = b . editor , d = c . createRange ( ) , e ; if ( ! c . readOnly ) return ( e = d . moveToClosestEditablePosition ( b . selected , a ) ) || ( e = d . moveToClosestEditablePosition ( b . selected ,
! a ) ) , e && c . getSelection ( ) . selectRanges ( [ d ] ) , c . fire ( "saveSnapshot" ) , b . selected . remove ( ) , e || ( d . moveToElementEditablePosition ( c . editable ( ) ) , c . getSelection ( ) . selectRanges ( [ d ] ) ) , c . fire ( "saveSnapshot" ) , ! 1 } } var c = a ( ) , d = a ( 1 ) ; return { 37 : c , 38 : c , 39 : d , 40 : d , 8 : b ( ) , 46 : b ( 1 ) } } ( ) ; CKEDITOR . on ( "instanceCreated" , function ( a ) { function b ( ) { var a = c . getSelection ( ) ; a && a . removeAllRanges ( ) } var c = a . editor ; c . on ( "contentDom" , function ( ) { function a ( ) { B = new CKEDITOR . dom . selection ( c . getSelection ( ) ) ; B . lock ( ) } function b ( ) { h . removeListener ( "mouseup" ,
b ) ; r . removeListener ( "mouseup" , b ) ; var a = CKEDITOR . document . $ . selection , c = a . createRange ( ) ; "None" != a . type && c . parentElement ( ) && c . parentElement ( ) . ownerDocument == f . $ && c . select ( ) } function d ( a ) { var b , c ; b = ( b = this . document . getActive ( ) ) ? "input" === b . getName ( ) || "textarea" === b . getName ( ) : ! 1 ; b || ( b = this . getSelection ( 1 ) , ( c = g ( b ) ) && ! c . equals ( p ) && ( b . selectElement ( c ) , a . data . preventDefault ( ) ) ) } function g ( a ) { a = a . getRanges ( ) [ 0 ] ; return a ? ( a = a . startContainer . getAscendant ( function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "contenteditable" ) } ,
! 0 ) ) && "false" === a . getAttribute ( "contenteditable" ) ? a : null : null } var f = c . document , h = CKEDITOR . document , p = c . editable ( ) , l = f . getBody ( ) , r = f . getDocumentElement ( ) , q = p. isInline ( ) , m , B ; CKEDITOR . env . gecko && p . attachListener ( p , "focus" , function ( a ) { a . removeListener ( ) ; 0 !== m && ( a = c . getSelection ( ) . getNative ( ) ) && a . isCollapsed && a . anchorNode == p . $ && ( a = c . createRange ( ) , a . moveToElementEditStart ( p ) , a . select ( ) ) } , null , null , - 2 ) ; p. attachListener ( p , CKEDITOR . env . webkit || CKEDITOR . env . gecko ? "focusin" : "focus" , function ( ) { if ( m && ( CKEDITOR . env . webkit ||
CKEDITOR . env . gecko ) ) { m = c . _ . previousActive && c . _ . previousActive . equals ( f . getActive ( ) ) ; var a = null != c . _ . previousScrollTop && c . _ . previousScrollTop != p . $ . scrollTop ; CKEDITOR . env . webkit && m&& a && ( p . $ . scrollTop = c . _ . previousScrollTop ) } c . unlockSelection ( m) ; m = 0 } , null , null , - 1 ) ; p. attachListener ( p , "mousedown" , function ( ) { m = 0 } ) ; if ( CKEDITOR . env . ie || CKEDITOR . env . gecko || q ) n? p . attachListener ( p , "beforedeactivate" , a , null , null , - 1 ) : p . attachListener ( c , "selectionCheck" , a , null , null , - 1 ) , p. attachListener ( p , CKEDITOR . env . webkit || CKEDITOR . env . gecko ?
"focusout" : "blur" , function ( ) { var a = B&& ( B . isFake || 2 > B . getRanges ( ) . length ) ; CKEDITOR . env . gecko && ! q && a || ( c . lockSelection ( B) , m = 1 ) } , null , null , - 1 ) , p. attachListener ( p , "mousedown" , function ( ) { m = 0 } ) ; if ( CKEDITOR . env . ie && ! q ) { var x; p . attachListener ( p , "mousedown" , function ( a ) { 2 == a . data . $ . button && ( ( a = c . document . getSelection ( ) ) && a . getType ( ) != CKEDITOR . SELECTION _NONE || ( x = c . window . getScrollPosition ( ) ) ) } ) ; p. attachListener ( p , "mouseup" , function ( a ) { 2 == a . data . $ . button && x && ( c . document . $ . documentElement . scrollLeft = x . x , c . document . $ . documentElement . scrollTop =
x. y ) ; x = null } ) ; if ( "BackCompat" != f . $ . compatMode ) { if ( CKEDITOR . env . ie7Compat || CKEDITOR . env . ie6Compat ) { var z, u ; r . on ( "mousedown" , function ( a ) { function b ( a ) { a = a . data . $ ; if ( z ) { var c = l . $ . createTextRange ( ) ; try { c . moveToPoint ( a . clientX , a . clientY ) } catch ( d ) { } z. setEndPoint ( 0 > u . compareEndPoints ( "StartToStart" , c ) ? "EndToEnd" : "StartToStart" , c ) ; z . select ( ) } } function c ( ) { r . removeListener ( "mousemove" , b ) ; h . removeListener ( "mouseup" , c ) ; r . removeListener ( "mouseup" , c ) ; z . select ( ) } a = a . data ; if ( a . getTarget ( ) . is ( "html" ) && a . $ . y < r . $ . clientHeight &&
a . $ . x < r . $ . clientWidth ) { z = l . $ . createTextRange ( ) ; try { z . moveToPoint ( a . $ . clientX , a . $ . clientY ) } catch ( d ) { } u= z . duplicate ( ) ; r . on ( "mousemove" , b ) ; h . on ( "mouseup" , c ) ; r . on ( "mouseup" , c ) } } ) } if ( 7 < CKEDITOR . env . version && 11 > CKEDITOR . env . version ) r . on ( "mousedown" , function ( a ) { a . data . getTarget ( ) . is ( "html" ) && ( h . on ( "mouseup" , b ) , r . on ( "mouseup" , b ) ) } ) } } p. attachListener ( p , "selectionchange" , e , c ) ; p. attachListener ( p , "keyup" , k , c ) ; p . attachListener ( p , "touchstart" , k , c ) ; p . attachListener ( p , "touchend" , k , c ) ; CKEDITOR . env . ie && p. attachListener ( p ,
"keydown" , d , c ) ; p. attachListener ( p , CKEDITOR . env . webkit || CKEDITOR . env . gecko ? "focusin" : "focus" , function ( ) { c . forceNextSelectionCheck ( ) ; c . selectionChange ( 1 ) } ) ; if ( q && ( CKEDITOR . env . webkit || CKEDITOR . env . gecko ) ) { var v; p . attachListener ( p , "mousedown" , function ( ) { v = 1 } ) ; p . attachListener ( f . getDocumentElement ( ) , "mouseup" , function ( ) { v&& k . call ( c ) ; v = 0 } ) } else p . attachListener ( CKEDITOR . env . ie ? p : f . getDocumentElement ( ) , "mouseup" , k , c ) ; CKEDITOR . env . webkit && p . 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 : p . hasFocus &&
y( p ) } } , null , null , - 1 ) ; p. attachListener ( p , "keydown" , E ( c ) , null , null , - 1 ) } ) ; c . on ( "setData" , function ( ) { c . unlockSelection ( ) ; CKEDITOR . env . webkit && b ( ) } ) ; c . on ( "contentDomUnload" , function ( ) { c . unlockSelection ( ) } ) ; if ( CKEDITOR . env . ie9Compat ) c . on ( "beforeDestroy" , b , null , null , 9 ) ; c . on ( "dataReady" , function ( ) { delete c . _ . fakeSelection ; delete c . _ . hiddenSelectionContainer ; c . selectionChange ( 1 ) } ) ; c . on ( "loadSnapshot" , function ( ) { var a = CKEDITOR . dom . walker . nodeType ( CKEDITOR . NODE _ELEMENT ) , b = c . editable ( ) . getLast ( a ) ; b && b . hasAttribute ( "data-cke-hidden-sel" ) &&
( b . remove ( ) , CKEDITOR . env . gecko && ( a = c . editable ( ) . getFirst ( a ) ) && a . is ( "br" ) && a . getAttribute ( "_moz_editor_bogus_node" ) && a . remove ( ) ) } , null , null , 100 ) ; c . on ( "key" , function ( a ) { if ( "wysiwyg" == c . mode ) { var b = c . getSelection ( ) ; if ( b . isFake ) { var d = A [ a . data . keyCode ] ; if ( d ) return d ( { editor : c , selected : b . getSelectedElement ( ) , selection : b , keyEvent : a } ) } } } ) } ) ; if ( CKEDITOR . env . webkit ) CKEDITOR . on ( "instanceReady" , function ( a ) { var b = a . editor ; b . on ( "selectionChange" , function ( ) { var a = b . editable ( ) , c = a . getCustomData ( "cke-fillingChar" ) ;
c && ( c . getCustomData ( "ready" ) ? ( y ( a ) , a . editor . fire ( "selectionCheck" ) ) : c . setCustomData ( "ready" , 1 ) ) } , null , null , - 1 ) ; b . on ( "beforeSetMode" , function ( ) { y ( b . editable ( ) ) } , null , null , - 1 ) ; b . on ( "getSnapshot" , function ( a ) { a . data && ( a . data = z ( a . data ) ) } , b , null , 20 ) ; b . on ( "toDataFormat" , function ( a ) { a . data . dataValue = z ( a . data . dataValue ) } , null , null , 0 ) } ) ; CKEDITOR . editor . prototype . selectionChange = function ( a ) { ( a ? e : k ) . call ( this ) } ; CKEDITOR . editor . prototype . getSelection = function ( a ) { return ! this . _ . savedSelection && ! this . _ . fakeSelection ||
d . selectRanges ( [ e ] ) ; g . removeListener ( ) ; a . fire ( "unlockSnapshot" ) ; a . _ . hiddenSelectionContainer = c } function A ( 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 ( ) , g = e . getRanges ( ) [ 0 ] ; e . isCollapsed ( ) && ( g = g [ 38 > d ? "getPreviousEditableNode" : "getNextEditableNode" ] ( ) ) && g . type == CKEDITOR . NODE _ELEMENT && "false" == g . getAttribute ( "contenteditable" ) && ( e = e . getStartElement ( ) , ! e . isBlockBoundary ( ) || "" !== ( void 0 === e . $ . textContent ? e . $ . innerText : e . $ . textContent ) || 8 !==
d && 46 !== d || ( e . remove ( ) , a . fire ( "saveSnapshot" ) ) , a . getSelection ( ) . fake ( g ) , c . data . preventDefault ( ) , c . cancel ( ) ) } } } function t ( 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 && ! ( ( e = d . type == CKEDITOR . NODE _ELEMENT ) && d . is ( "body" ) || ! d . isReadOnly ( ) ) ; ) e && "false" == d . getAttribute ( "contentEditable" ) && c . setStartAfter ( d ) , d = d . getParent ( ) ; d = c . startContainer ; e = c . endContainer ; var g = c . startOffset ,
f = c . endOffset , h = c . clone ( ) ; d && d . type == CKEDITOR . NODE _TEXT && ( g >= d . getLength ( ) ? h . setStartAfter ( d ) : h . setStartBefore ( d ) ) ; e && e . type == CKEDITOR . NODE _TEXT && ( f ? 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 ) ; d . getPosition ( h . endContainer ) & CKEDITOR . POSITION _CONTAINS || ( e . setStartAfter ( d ) , e . collapsed || a . splice ( b + 1 , 0 , e ) ) ; return ! 0 } return ! 1 } ; d . next ( ) } } return a } var m =
"function" != typeof window . getSelection , M= 1 , v = CKEDITOR . tools . repeat ( " " , 7 ) , J= new RegExp ( v + "( )?" , "g" ) , E , u , F , H = CKEDITOR . dom . walker . invisible ( 1 ) , y = function ( ) { function a ( b ) { return function ( a ) { var c = a . editor . createRange ( ) ; c . moveToClosestEditablePosition ( a . selected , b ) && a . editor . getSelection ( ) . selectRanges ( [ c ] ) ; return ! 1 } } function b ( a ) { return function ( b ) { var c = b . editor , d = c . createRange ( ) , e ; if ( ! c . readOnly ) return ( e = d . moveToClosestEditablePosition ( b . selected , a ) ) || ( e = d . moveToClosestEditablePosition ( b . selected ,
! a ) ) , e && c . getSelection ( ) . selectRanges ( [ d ] ) , c . fire ( "saveSnapshot" ) , b . selected . remove ( ) , e || ( d . moveToElementEditablePosition ( c . editable ( ) ) , c . getSelection ( ) . selectRanges ( [ d ] ) ) , c . fire ( "saveSnapshot" ) , ! 1 } } var c = a ( ) , d = a ( 1 ) ; return { 37 : c , 38 : c , 39 : d , 40 : d , 8 : b ( ) , 46 : b ( 1 ) } } ( ) ; CKEDITOR . on ( "instanceCreated" , function ( a ) { function b ( ) { var a = c . getSelection ( ) ; a && a . removeAllRanges ( ) } var c = a . editor ; c . on ( "contentDom" , function ( ) { function a ( ) { u = new CKEDITOR . dom . selection ( c . getSelection ( ) ) ; u . lock ( ) } function b ( ) { h . removeListener ( "mouseup" ,
b ) ; r . removeListener ( "mouseup" , b ) ; var a = CKEDITOR . document . $ . selection , c = a . createRange ( ) ; "None" != a . type && c . parentElement ( ) && c . parentElement ( ) . ownerDocument == f . $ && c . select ( ) } function d ( a ) { var b , c ; b = ( b = this . document . getActive ( ) ) ? "input" === b . getName ( ) || "textarea" === b . getName ( ) : ! 1 ; b || ( b = this . getSelection ( 1 ) , ( c = g ( b ) ) && ! c . equals ( n ) && ( b . selectElement ( c ) , a . data . preventDefault ( ) ) ) } function g ( a ) { a = a . getRanges ( ) [ 0 ] ; return a ? ( a = a . startContainer . getAscendant ( function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "contenteditable" ) } ,
! 0 ) ) && "false" === a . getAttribute ( "contenteditable" ) ? a : null : null } var f = c . document , h = CKEDITOR . document , n = c . editable ( ) , l = f . getBody ( ) , r = f . getDocumentElement ( ) , q = n. isInline ( ) , D , u ; CKEDITOR . env . gecko && n . attachListener ( n , "focus" , function ( a ) { a . removeListener ( ) ; 0 !== D && ( a = c . getSelection ( ) . getNative ( ) ) && a . isCollapsed && a . anchorNode == n . $ && ( a = c . createRange ( ) , a . moveToElementEditStart ( n ) , a . select ( ) ) } , null , null , - 2 ) ; n. attachListener ( n , CKEDITOR . env . webkit || CKEDITOR . env . gecko ? "focusin" : "focus" , function ( ) { if ( D && ( CKEDITOR . env . webkit ||
CKEDITOR . env . gecko ) ) { D = c . _ . previousActive && c . _ . previousActive . equals ( f . getActive ( ) ) ; var a = null != c . _ . previousScrollTop && c . _ . previousScrollTop != n . $ . scrollTop ; CKEDITOR . env . webkit && D&& a && ( n . $ . scrollTop = c . _ . previousScrollTop ) } c . unlockSelection ( D) ; D = 0 } , null , null , - 1 ) ; n. attachListener ( n , "mousedown" , function ( ) { D = 0 } ) ; if ( CKEDITOR . env . ie || CKEDITOR . env . gecko || q ) m? n . attachListener ( n , "beforedeactivate" , a , null , null , - 1 ) : n . attachListener ( c , "selectionCheck" , a , null , null , - 1 ) , n. attachListener ( n , CKEDITOR . env . webkit || CKEDITOR . env . gecko ?
"focusout" : "blur" , function ( ) { var a = u&& ( u . isFake || 2 > u . getRanges ( ) . length ) ; CKEDITOR . env . gecko && ! q && a || ( c . lockSelection ( u) , D = 1 ) } , null , null , - 1 ) , n. attachListener ( n , "mousedown" , function ( ) { D = 0 } ) ; if ( CKEDITOR . env . ie && ! q ) { var t; n . attachListener ( n , "mousedown" , function ( a ) { 2 == a . data . $ . button && ( ( a = c . document . getSelection ( ) ) && a . getType ( ) != CKEDITOR . SELECTION _NONE || ( t = c . window . getScrollPosition ( ) ) ) } ) ; n. attachListener ( n , "mouseup" , function ( a ) { 2 == a . data . $ . button && t && ( c . document . $ . documentElement . scrollLeft = t . x , c . document . $ . documentElement . scrollTop =
t. y ) ; t = null } ) ; if ( "BackCompat" != f . $ . compatMode ) { if ( CKEDITOR . env . ie7Compat || CKEDITOR . env . ie6Compat ) { var x, v ; r . on ( "mousedown" , function ( a ) { function b ( a ) { a = a . data . $ ; if ( x ) { var c = l . $ . createTextRange ( ) ; try { c . moveToPoint ( a . clientX , a . clientY ) } catch ( d ) { } x. setEndPoint ( 0 > v . compareEndPoints ( "StartToStart" , c ) ? "EndToEnd" : "StartToStart" , c ) ; x . select ( ) } } function c ( ) { r . removeListener ( "mousemove" , b ) ; h . removeListener ( "mouseup" , c ) ; r . removeListener ( "mouseup" , c ) ; x . select ( ) } a = a . data ; if ( a . getTarget ( ) . is ( "html" ) && a . $ . y < r . $ . clientHeight &&
a . $ . x < r . $ . clientWidth ) { x = l . $ . createTextRange ( ) ; try { x . moveToPoint ( a . $ . clientX , a . $ . clientY ) } catch ( d ) { } v= x . duplicate ( ) ; r . on ( "mousemove" , b ) ; h . on ( "mouseup" , c ) ; r . on ( "mouseup" , c ) } } ) } if ( 7 < CKEDITOR . env . version && 11 > CKEDITOR . env . version ) r . on ( "mousedown" , function ( a ) { a . data . getTarget ( ) . is ( "html" ) && ( h . on ( "mouseup" , b ) , r . on ( "mouseup" , b ) ) } ) } } n. attachListener ( n , "selectionchange" , e , c ) ; n. attachListener ( n , "keyup" , k , c ) ; n . attachListener ( n , "touchstart" , k , c ) ; n . attachListener ( n , "touchend" , k , c ) ; CKEDITOR . env . ie && n. attachListener ( n ,
"keydown" , d , c ) ; n. attachListener ( n , CKEDITOR . env . webkit || CKEDITOR . env . gecko ? "focusin" : "focus" , function ( ) { c . forceNextSelectionCheck ( ) ; c . selectionChange ( 1 ) } ) ; if ( q && ( CKEDITOR . env . webkit || CKEDITOR . env . gecko ) ) { var z; n . attachListener ( n , "mousedown" , function ( ) { z = 1 } ) ; n . attachListener ( f . getDocumentElement ( ) , "mouseup" , function ( ) { z&& k . call ( c ) ; z = 0 } ) } else n . attachListener ( CKEDITOR . env . ie ? n : f . getDocumentElement ( ) , "mouseup" , k , c ) ; CKEDITOR . env . webkit && n . 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 : n . hasFocus &&
w( n ) } } , null , null , - 1 ) ; n. attachListener ( n , "keydown" , A ( c ) , null , null , - 1 ) } ) ; c . on ( "setData" , function ( ) { c . unlockSelection ( ) ; CKEDITOR . env . webkit && b ( ) } ) ; c . on ( "contentDomUnload" , function ( ) { c . unlockSelection ( ) } ) ; if ( CKEDITOR . env . ie9Compat ) c . on ( "beforeDestroy" , b , null , null , 9 ) ; c . on ( "dataReady" , function ( ) { delete c . _ . fakeSelection ; delete c . _ . hiddenSelectionContainer ; c . selectionChange ( 1 ) } ) ; c . on ( "loadSnapshot" , function ( ) { var a = CKEDITOR . dom . walker . nodeType ( CKEDITOR . NODE _ELEMENT ) , b = c . editable ( ) . getLast ( a ) ; b && b . hasAttribute ( "data-cke-hidden-sel" ) &&
( b . remove ( ) , CKEDITOR . env . gecko && ( a = c . editable ( ) . getFirst ( a ) ) && a . is ( "br" ) && a . getAttribute ( "_moz_editor_bogus_node" ) && a . remove ( ) ) } , null , null , 100 ) ; c . on ( "key" , function ( a ) { if ( "wysiwyg" == c . mode ) { var b = c . getSelection ( ) ; if ( b . isFake ) { var d = y [ a . data . keyCode ] ; if ( d ) return d ( { editor : c , selected : b . getSelectedElement ( ) , selection : b , keyEvent : a } ) } } } ) } ) ; if ( CKEDITOR . env . webkit ) CKEDITOR . on ( "instanceReady" , function ( a ) { var b = a . editor ; b . on ( "selectionChange" , function ( ) { var a = b . editable ( ) , c = a . getCustomData ( "cke-fillingChar" ) ;
c && ( c . getCustomData ( "ready" ) ? ( w ( a ) , a . editor . fire ( "selectionCheck" ) ) : c . setCustomData ( "ready" , 1 ) ) } , null , null , - 1 ) ; b . on ( "beforeSetMode" , function ( ) { w ( b . editable ( ) ) } , null , null , - 1 ) ; b . on ( "getSnapshot" , function ( a ) { a . data && ( a . data = x ( a . data ) ) } , b , null , 20 ) ; b . on ( "toDataFormat" , function ( a ) { a . data . dataValue = x ( a . data . dataValue ) } , null , null , 0 ) } ) ; CKEDITOR . editor . prototype . selectionChange = function ( a ) { ( a ? e : k ) . call ( this ) } ; CKEDITOR . editor . prototype . getSelection = function ( a ) { return ! this . _ . savedSelection && ! this . _ . fakeSelection ||
a ? ( a = this . editable ( ) ) && "wysiwyg" == this . mode && "recreating" !== this . status ? new CKEDITOR . dom . selection ( a ) : null : this . _ . savedSelection || this . _ . fakeSelection } ; CKEDITOR . editor . prototype . getSelectedRanges = function ( a ) { var b = this . getSelection ( ) ; return b && b . getRanges ( a ) || [ ] } ; CKEDITOR . editor . prototype . lockSelection = function ( a ) { a = a || this . getSelection ( 1 ) ; return a . getType ( ) != CKEDITOR . SELECTION _NONE ? ( ! a . isLocked && a . lock ( ) , this . _ . savedSelection = a , ! 0 ) : ! 1 } ; CKEDITOR . editor . prototype . unlockSelection = function ( a ) { var b =
this . _ . savedSelection ; return b ? ( b . unlock ( a ) , delete this . _ . savedSelection , ! 0 ) : ! 1 } ; 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 ; 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 : H ++ ; this . document = a instanceof CKEDITOR . dom . document ? a : a . getDocument ( ) ; this . root = c ? a : this . document . getBody ( ) ; this . isLocked = 0 ; this . _ = { cache : { } } ; if ( b ) return CKEDITOR . tools . extend ( this . _ . cache , b . _ . cache ) , this . isFake = b . isFake , this . isLocked = b . isLocked , this ; a = this . getNative ( ) ; var 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 ( g ) { } 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 L = { 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 . tools . extend ( CKEDITOR . dom . selection , { _removeFillingCharSequenceString : z , _createFillingCharSequenceNode : g , FILLING _CHAR _SEQUENCE : u } ) ; CKEDITOR . dom . selection . prototype = { getNative : function ( ) { return void 0 !== this . _ . cache . nativeSel ? this . _ . cache . nativeSel : this . _ . cache . nativeSel = n ? this . document . $ . selection : this . document . getWindow ( ) . $ . getSelection ( ) } , getType : n ? function ( ) { var a = this . _ . cache ; if ( a . type ) return a . type ;
2 ; CKEDITOR . SELECTION _ELEMENT = 3 ; 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 : M ++ ; this . document = a instanceof CKEDITOR . dom . document ? a : a . getDocument ( ) ; this . root = c ? a : this . document . getBody ( ) ; this . isLocked = 0 ; this . _ = { cache : { } } ; if ( b ) return CKEDITOR . tools . extend ( this . _ . cache , b . _ . cache ) , this . isFake = b . isFake , this . isLocked = b . isLocked , this ; a = this . getNative ( ) ; var 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 ( g ) { } 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 K = { 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 . tools . extend ( CKEDITOR . dom . selection , { _removeFillingCharSequenceString : x , _createFillingCharSequenceNode : g , FILLING _CHAR _SEQUENCE : v } ) ; CKEDITOR . dom . selection . prototype = { getNative : function ( ) { return void 0 !== this . _ . cache . nativeSel ? this . _ . cache . nativeSel : this . _ . cache . nativeSel = m ? this . document . $ . selection : this . document . getWindow ( ) . $ . getSelection ( ) } , getType : m ? function ( ) { var a = this . _ . cache ; if ( a . type ) return a . type ;
var b = CKEDITOR . SELECTION _NONE ; try { var c = this . getNative ( ) , d = c . type ; "Text" == d && ( b = CKEDITOR . SELECTION _TEXT ) ; "Control" == d && ( b = CKEDITOR . SELECTION _ELEMENT ) ; 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 ( 1 == c . rangeCount ) { var c = c . getRangeAt ( 0 ) , d = c . startContainer ; d == c . endContainer && 1 == d . nodeType && 1 == c . endOffset -
c . startOffset && L [ d . childNodes [ c . startOffset ] . nodeName . toLowerCase ( ) ] && ( b = CKEDITOR . SELECTION _ELEMENT ) } return a . type = b } , getRanges : function ( ) { var a = n ? 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 , g , f , h = b . duplicate ( ) , k = 0 , l = e . length - 1 , r = - 1 , q , m ; k <= l ; ) if ( r = Math . floor ( ( k + l ) / 2 ) , g = e [ r ] , h . moveToElementText ( g ) , q = h . compareEndPoints ( "StartToStart" ,
c . startOffset && K [ d . childNodes [ c . startOffset ] . nodeName . toLowerCase ( ) ] && ( b = CKEDITOR . SELECTION _ELEMENT ) } return a . type = b } , getRanges : function ( ) { var a = m ? 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 , g , f , h = b . duplicate ( ) , k = 0 , l = e . length - 1 , r = - 1 , q , m ; k <= l ; ) if ( r = Math . floor ( ( k + l ) / 2 ) , g = e [ r ] , h . moveToElementText ( g ) , q = h . compareEndPoints ( "StartToStart" ,
b ) , 0 < q ) l = r - 1 ; else if ( 0 > q ) k = r + 1 ; else return { container : d , offset : a ( g ) } ; if ( - 1 == r || r == e . length - 1 && 0 > q ) { h . moveToElementText ( d ) ; h . setEndPoint ( "StartToStart" , b ) ; h = h . text . replace ( /(\r\n|\r)/g , "\n" ) . length ; e = d . childNodes ; if ( ! h ) return g = e [ e . length - 1 ] , g . nodeType != CKEDITOR . NODE _TEXT ? { container : d , offset : e . length } : { container : g , offset : g . nodeValue . length } ; for ( d = e . length ; 0 < h && 0 < d ; ) f = e [ -- d ] , f . nodeType == CKEDITOR . NODE _TEXT && ( m = f , h -= f . nodeValue . length ) ; return { container : m , offset : - h } } h . collapse ( 0 < q ? ! 0 : ! 1 ) ; h . setEndPoint ( 0 <
q ? "StartToStart" : "EndToStart" , b ) ; h = h . text . replace ( /(\r\n|\r)/g , "\n" ) . length ; if ( ! h ) return { container : d , offset : a ( g ) + ( 0 < q ? 0 : 1 ) } ; for ( ; 0 < h ; ) try { f = g [ 0 < q ? "previousSibling" : "nextSibling" ] , f . nodeType == CKEDITOR . NODE _TEXT && ( h -= f . nodeValue . length , m = f ) , g = f } catch ( n ) { return { container : d , offset : a ( g ) } } return { container : m , offset : 0 < q ? - h : m . nodeValue . length + h } } ; return function ( ) { var a = this . getNative ( ) , c = a && a . createRange ( ) , d = this . getType ( ) ; if ( ! a ) return [ ] ; if ( d == CKEDITOR . SELECTION _TEXT ) return a = new CKEDITOR . dom . range ( this . root ) ,
q ? "StartToStart" : "EndToStart" , b ) ; h = h . text . replace ( /(\r\n|\r)/g , "\n" ) . length ; if ( ! h ) return { container : d , offset : a ( g ) + ( 0 < q ? 0 : 1 ) } ; for ( ; 0 < h ; ) try { f = g [ 0 < q ? "previousSibling" : "nextSibling" ] , f . nodeType == CKEDITOR . NODE _TEXT && ( h -= f . nodeValue . length , m = f ) , g = f } catch ( w ) { return { container : d , offset : a ( g ) } } return { container : m , offset : 0 < q ? - h : m . nodeValue . length + h } } ; return function ( ) { var a = this . getNative ( ) , c = a && a . createRange ( ) , d = this . getType ( ) ; if ( ! a ) return [ ] ; if ( d == CKEDITOR . SELECTION _TEXT ) return a = new CKEDITOR . dom . range ( this . root ) ,
d = b ( c , ! 0 ) , 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 ( ) , [ a ] ; if ( d == CKEDITOR . SELECTION _ELEMENT ) { for ( var d = [ ] , e = 0 ; e < c . length ; e ++ ) { for ( var g = c . item ( e ) , f = g . parentNode , h = 0 , a = new CKEDITOR . dom . range ( this . root ) ; h < f . childNodes . length && f . childNodes [ h ] != g ; h ++ ) ; a . setStart ( new CKEDITOR . dom . node ( f ) , h ) ; a . setEnd ( new CKEDITOR . dom . node ( f ) ,
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 ; d || ( c . ranges = d = new CKEDITOR . dom . rangeList ( a . call ( this ) ) ) ; return b ? v ( new CKEDITOR . dom . rangeList ( d . slice ( ) ) ) : d } } ( ) , getStartElement : function ( ) { var a =
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 ; d || ( c . ranges = d = new CKEDITOR . dom . rangeList ( a . call ( this ) ) ) ; return b ? t ( new CKEDITOR . dom . rangeList ( d . slice ( ) ) ) : d } } ( ) , getStartElement : function ( ) { var a =
this . _ . cache ; if ( void 0 !== a . startElement ) 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 , c . startOffset == ( b . getChildCount ? b . getChildCount ( ) : b . getLength ( ) ) && ! b . isBlockBoundary ( ) ; ) c . setStartAfter ( b ) ; b = c . startContainer ; if ( b . type != CKEDITOR . NODE _ELEMENT ) return b . getParent ( ) ;
if ( ( b = b . getChild ( c . startOffset ) ) && b . type == CKEDITOR . NODE _ELEMENT ) for ( c = b . getFirst ( ) ; c && c . type == CKEDITOR . NODE _ELEMENT ; ) b = c , c = c . getFirst ( ) ; else b = c . startContainer } b = b . $ } } return a . startElement = b ? new CKEDITOR . dom . element ( b ) : null } , getSelectedElement : function ( ) { var a = this . _ . cache ; if ( void 0 !== a . selectedElement ) 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 && L [ 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 ( void 0 !== a . selectedText ) return a . selectedText ; var b = this . getNative ( ) , b = n ? "Control" == b . type ? "" : b . createRange ( ) . text : b . toString ( ) ; return a . selectedText = b } , lock : function ( ) { this . getRanges ( ) ; this . getStartElement ( ) ; this . getSelectedElement ( ) ; this . getSelectedText ( ) ; this . _ . cache . nativeSel = null ;
c . type == CKEDITOR . NODE _ELEMENT && K [ 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 ( void 0 !== a . selectedText ) return a . selectedText ; var b = this . getNative ( ) , b = m ? "Control" == b . type ? "" : 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 = this . getRanges ( ) , e = this . isFake ; this . isLocked = 0 ; this . reset ( ) ; a && ( a = b || c [ 0 ] && c [ 0 ] . getCommonAncestor ( ) ) && a . getAscendant ( "body" , 1 ) && ( ( a = this . root . editor ) && a . plugins . tableselection && a . plugins . tableselection . isSupportedEnvironment ( a ) && d ( c ) ? f . call ( this , c ) : e ? this . fake ( b ) : b && 2 > c . length ? this . selectElement ( b ) : this . selectRanges ( c ) ) } } , reset : function ( ) { this . _ . cache = { } ; this . isFake = 0 ; var a = this . root . editor ; if ( a && a . _ . fakeSelection ) if ( 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 } else CKEDITOR . warn ( "selection-fake-reset" ) ; this . rev = H ++ } , 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 , c = b && b . _ . hiddenSelectionContainer ; this . reset ( ) ;
if ( c ) for ( var c = this . root , e , h = 0 ; h < a . length ; ++ h ) e = a [ h ] , e . endContainer . equals ( c ) && ( e . endOffset = Math . min ( e . endOffset , c . getChildCount ( ) ) ) ; if ( a . length ) if ( this . isLocked ) { var k = CKEDITOR . document . getActive ( ) ; this . unlock ( ) ; this . selectRanges ( a ) ; this . lock ( ) ; k && ! k . equals ( this . root ) && k . focus ( ) } else { var t; a : { var l , m ; if ( 1 == a . length && ! ( m = a [ 0 ] ) . collapsed && ( t= m . getEnclosedNode ( ) ) && t . type == CKEDITOR . NODE _ELEMENT && ( m= m . clone ( ) , m . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 ) , ( l = m . getEnclosedNode ( ) ) && l . type == CKEDITOR . NODE _ELEMENT &&
( t= l ) , "false" == t . getAttribute ( "contenteditable" ) ) ) break a ; t= void 0 } if ( t ) this . fake ( t ) ; else if ( b && b . plugins . tableselection && b . plugins . tableselection . isSupportedEnvironment ( b ) && d ( a ) && ! J && ! a [ 0 ] . _getTableElement ( { table : 1 } ) . hasAttribute ( "data-cke-tableselection-ignored" ) ) f . call ( this , a ) ; else { if ( n ) { l = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ; t= /\ufeff|\u00a0/ ; m = { table : 1 , tbody : 1 , tr : 1 } ; 1 < a . length && ( b = a [ a . length - 1 ] , a [ 0 ] . setEnd ( b . endContainer , b . endOffset ) ) ; b = a [ 0 ] ; a = b . collapsed ; var p, G , F ; if ( ( c = b . getEnclosedNode ( ) ) &&
c . type == CKEDITOR . NODE _ELEMENT && c . getName ( ) in L && ( ! c . is ( "a" ) || ! c . getText ( ) ) ) try { F = c . $ . createControlRange ( ) ; F. addElement ( c . $ ) ; F . select ( ) ; return } catch ( x ) { } if ( b . startContainer . type == CKEDITOR . NODE _ELEMENT && b . startContainer . getName ( ) in m || b . endContainer . type == CKEDITOR . NODE _ELEMENT && b . endContainer . getName ( ) in m ) b . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) , a = b . collapsed ; F= b . createBookmark ( ) ; m = F . startNode ; a || ( k = F . endNode ) ; F = b . document . $ . body . createTextRange ( ) ; F. moveToElementText ( m . $ ) ; F . moveStart ( "character" , 1 ) ; k ? ( t =
b . document . $ . body . createTextRange ( ) , t. moveToElementText ( k . $ ) , F . setEndPoint ( "EndToEnd" , t ) , F . moveEnd ( "character" , - 1 ) ) : ( p= m . getNext ( l ) , G = m . hasAscendant ( "pre" ) , p = ! ( p && p . getText && p . getText ( ) . match ( t ) ) && ( G || ! m . hasPrevious ( ) || m . getPrevious ( ) . is && m . getPrevious ( ) . is ( "br" ) ) , G = b . document . createElement ( "span" ) , G. setHtml ( "\x26#65279;" ) , G . insertBefore ( m ) , p && b . document . createText ( " " ) . insertBefore ( m) ) ; b . setStartBefore ( m ) ; m . remove ( ) ; a ? ( p ? ( F . moveStart ( "character" , - 1 ) , F . select ( ) , b . document . $ . selection . clear ( ) ) : F . select ( ) ,
b . moveToPosition ( G , CKEDITOR . POSITION _BEFORE _START ) , G . remove ( ) ) : ( b . setEndBefore ( k ) , k . remove ( ) , F . select ( ) ) } else { k = this . getNative ( ) ; if ( ! k ) return ; this . removeAllRanges ( ) ; for ( F= 0 ; F < a . length ; F ++ ) { if ( F < a . length - 1 && ( p = a [ F ] , G = a [ F + 1 ] , t = p . clone ( ) , t . setStart ( p . endContainer , p . endOffset ) , t . setEnd ( G . startContainer , G . startOffset ) , ! t . collapsed && ( t . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) , b = t. getCommonAncestor ( ) , t = t . getEnclosedNode ( ) , b . isReadOnly ( ) || t&& t . isReadOnly ( ) ) ) ) { G . setStart ( p . startContainer , p . startOffset ) ; a . splice ( F -- ,
1 ) ; continue } b = a [ F] ; G = this . document . $ . createRange ( ) ; b . collapsed && CKEDITOR . env . webkit && q ( b ) && ( t = g ( this . root ) , b . insertNode ( t) , ( p = t . getNext ( ) ) && ! t . getPrevious ( ) && p . type == CKEDITOR . NODE _ELEMENT && "br" == p. getName ( ) ? ( y ( this . root ) , b . moveToPosition ( p , CKEDITOR . POSITION _BEFORE _START ) ) : b . moveToPosition ( t , CKEDITOR . POSITION _AFTER _END ) ) ; G . setStart ( b . startContainer . $ , b . startOffset ) ; try { G . setEnd ( b . endContainer . $ , b . endOffset ) } catch ( z) { if ( 0 <= z . toString ( ) . indexOf ( "NS_ERROR_ILLEGAL_VALUE" ) ) b . collapse ( 1 ) , G . setEnd ( b . endContainer . $ ,
b . endOffset ) ; else throw z; } k . addRange ( G ) } } this . reset ( ) ; this . root . fire ( "selectionchange" ) } } } , fake : function ( a , b ) { var c = this . root . editor ; void 0 === b && a . hasAttribute ( "aria-label" ) && ( b = a . getAttribute ( "aria-label" ) ) ; this . reset ( ) ; x ( c , b ) ; var d = this . _ . cache , e = new CKEDITOR . dom . range ( this . root ) ; e . setStartBefore ( a ) ; e . setEndAfter ( a ) ; d . ranges = new CKEDITOR . dom . rangeList ( e ) ; d . selectedElement = d . startElement = a ; d . type = CKEDITOR . SELECTION _ELEMENT ; d . selectedText = d . nativeSel = null ; this . isFake = 1 ; this . rev = H ++ ; c . _ . fakeSelection =
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 } else CKEDITOR . warn ( "selection-fake-reset" ) ; this . rev = M ++ } , 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 , c = b && b . _ . hiddenSelectionContainer ; this . reset ( ) ;
if ( c ) for ( var c = this . root , e , h = 0 ; h < a . length ; ++ h ) e = a [ h ] , e . endContainer . equals ( c ) && ( e . endOffset = Math . min ( e . endOffset , c . getChildCount ( ) ) ) ; if ( a . length ) if ( this . isLocked ) { var k = CKEDITOR . document . getActive ( ) ; this . unlock ( ) ; this . selectRanges ( a ) ; this . lock ( ) ; k && ! k . equals ( this . root ) && k . focus ( ) } else { var p; a : { var l , N ; if ( 1 == a . length && ! ( N = a [ 0 ] ) . collapsed && ( p= N . getEnclosedNode ( ) ) && p . type == CKEDITOR . NODE _ELEMENT && ( N= N . clone ( ) , N . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 ) , ( l = N . getEnclosedNode ( ) ) && l . type == CKEDITOR . NODE _ELEMENT &&
( p= l ) , "false" == p . getAttribute ( "contenteditable" ) ) ) break a ; p= void 0 } if ( p ) this . fake ( p ) ; else if ( b && b . plugins . tableselection && b . plugins . tableselection . isSupportedEnvironment ( b ) && d ( a ) && ! E && ! a [ 0 ] . _getTableElement ( { table : 1 } ) . hasAttribute ( "data-cke-tableselection-ignored" ) ) f . call ( this , a ) ; else { if ( m ) { l = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ; p= /\ufeff|\u00a0/ ; N = { table : 1 , tbody : 1 , tr : 1 } ; 1 < a . length && ( b = a [ a . length - 1 ] , a [ 0 ] . setEnd ( b . endContainer , b . endOffset ) ) ; b = a [ 0 ] ; a = b . collapsed ; var n, C , L ; if ( ( c = b . getEnclosedNode ( ) ) &&
c . type == CKEDITOR . NODE _ELEMENT && c . getName ( ) in K && ( ! c . is ( "a" ) || ! c . getText ( ) ) ) try { L = c . $ . createControlRange ( ) ; L. addElement ( c . $ ) ; L . select ( ) ; return } catch ( u ) { } if ( b . startContainer . type == CKEDITOR . NODE _ELEMENT && b . startContainer . getName ( ) in N || b . endContainer . type == CKEDITOR . NODE _ELEMENT && b . endContainer . getName ( ) in N ) b . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) , a = b . collapsed ; L= b . createBookmark ( ) ; N = L . startNode ; a || ( k = L . endNode ) ; L = b . document . $ . body . createTextRange ( ) ; L. moveToElementText ( N . $ ) ; L . moveStart ( "character" , 1 ) ; k ? ( p =
b . document . $ . body . createTextRange ( ) , p. moveToElementText ( k . $ ) , L . setEndPoint ( "EndToEnd" , p ) , L . moveEnd ( "character" , - 1 ) ) : ( n= N . getNext ( l ) , C = N . hasAscendant ( "pre" ) , n = ! ( n && n . getText && n . getText ( ) . match ( p ) ) && ( C || ! N . hasPrevious ( ) || N . getPrevious ( ) . is && N . getPrevious ( ) . is ( "br" ) ) , C = b . document . createElement ( "span" ) , C. setHtml ( "\x26#65279;" ) , C . insertBefore ( N ) , n && b . document . createText ( " " ) . insertBefore ( N) ) ; b . setStartBefore ( N ) ; N . remove ( ) ; a ? ( n ? ( L . moveStart ( "character" , - 1 ) , L . select ( ) , b . document . $ . selection . clear ( ) ) : L . select ( ) ,
b . moveToPosition ( C , CKEDITOR . POSITION _BEFORE _START ) , C . remove ( ) ) : ( b . setEndBefore ( k ) , k . remove ( ) , L . select ( ) ) } else { k = this . getNative ( ) ; if ( ! k ) return ; this . removeAllRanges ( ) ; for ( L= 0 ; L < a . length ; L ++ ) { if ( L < a . length - 1 && ( n = a [ L ] , C = a [ L + 1 ] , p = n . clone ( ) , p . setStart ( n . endContainer , n . endOffset ) , p . setEnd ( C . startContainer , C . startOffset ) , ! p . collapsed && ( p . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) , b = p. getCommonAncestor ( ) , p = p . getEnclosedNode ( ) , b . isReadOnly ( ) || p&& p . isReadOnly ( ) ) ) ) { C . setStart ( n . startContainer , n . startOffset ) ; a . splice ( L -- ,
1 ) ; continue } b = a [ L] ; C = this . document . $ . createRange ( ) ; b . collapsed && CKEDITOR . env . webkit && q ( b ) && ( p = g ( this . root ) , b . insertNode ( p) , ( n = p . getNext ( ) ) && ! p . getPrevious ( ) && n . type == CKEDITOR . NODE _ELEMENT && "br" == n. getName ( ) ? ( w ( this . root ) , b . moveToPosition ( n , CKEDITOR . POSITION _BEFORE _START ) ) : b . moveToPosition ( p , CKEDITOR . POSITION _AFTER _END ) ) ; C . setStart ( b . startContainer . $ , b . startOffset ) ; try { C . setEnd ( b . endContainer . $ , b . endOffset ) } catch ( t) { if ( 0 <= t . toString ( ) . indexOf ( "NS_ERROR_ILLEGAL_VALUE" ) ) b . collapse ( 1 ) , C . setEnd ( b . endContainer . $ ,
b . endOffset ) ; else throw t; } k . addRange ( C ) } } this . reset ( ) ; this . root . fire ( "selectionchange" ) } } } , fake : function ( a , b ) { var c = this . root . editor ; void 0 === b && a . hasAttribute ( "aria-label" ) && ( b = a . getAttribute ( "aria-label" ) ) ; this . reset ( ) ; z ( c , b ) ; var d = this . _ . cache , e = new CKEDITOR . dom . range ( this . root ) ; e . setStartBefore ( a ) ; e . setEndAfter ( a ) ; d . ranges = new CKEDITOR . dom . rangeList ( e ) ; d . selectedElement = d . startElement = a ; d . type = CKEDITOR . SELECTION _ELEMENT ; d . selectedText = d . nativeSel = null ; this . isFake = 1 ; this . rev = M ++ ; c . _ . 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" ) ) } , isInTable : function ( a ) { return d ( this . getRanges ( ) , a ) } , isCollapsed : function ( ) { var a = this . getRanges ( ) ; return 1 === a . length && a [ 0 ] . collapsed } , 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 , e = 0 ; e < a . length ; e ++ ) { var g = new CKEDITOR . dom . range ( this . root ) ; g . moveToBookmark ( a [ e ] ) ; b . push ( g ) } a . isFake && ( c = d ( b ) ? b [ 0 ] . _getTableElement ( ) : b [ 0 ] . getEnclosedNode ( ) , c && c . type == CKEDITOR . NODE _ELEMENT || ( CKEDITOR . warn ( "selection-not-fake" ) , a . isFake = 0 ) ) ; a . isFake && ! d ( b ) ? this . fake ( c ) : this . selectRanges ( b ) ; return this } , getCommonAncestor : function ( ) { var a = this . getRanges ( ) ; return a . length ? a [ 0 ] . startContainer . getCommonAncestor ( a [ a . length - 1 ] . endContainer ) : null } ,
scrollIntoView : function ( ) { this . getType ( ) != CKEDITOR . SELECTION _NONE && this . getRanges ( ) [ 0 ] . scrollIntoView ( ) } , removeAllRanges : function ( ) { if ( this . getType ( ) != CKEDITOR . SELECTION _NONE ) { var a = this . getNative ( ) ; try { a && a [ n ? "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 ( ) ) && ! a . equals ( b ) ; ) if ( a . getAttribute ( "data-nostyle" ) ) c = a ; else if ( ! d ) { var e = a . getAttribute ( "contentEditable" ) ; "false" == e ? c = a : "true" == e && ( d = 1 ) } return c } function d ( a , b , c , d ) { return ( a . getPosition ( b ) | d ) == d && ( ! c . childRule || c . childRule ( a ) ) } function b ( c ) { var e = c . document ; if ( c . collapsed ) e = H ( this , e ) , c . insertNode ( e ) , c . moveToPosition ( e , CKEDITOR . POSITION _BEFORE _END ) ; else { var g = this . element , h = this . _ . definition , k , l = h . ignoreReadonly , m = l || h . includeReadonly ; null ==
m&& ( m = c . root . getCustomData ( "cke_includeReadonly" ) ) ; var q= CKEDITOR . dtd [ g ] ; q || ( k = ! 0 , q = CKEDITOR . dtd . span ) ; c . enlarge ( CKEDITOR . ENLARGE _INLINE , 1 ) ; c . trim ( ) ; var n= c . createBookmark ( ) , y = n . startNode , x = n . endNode , r = y , z ; if ( ! l ) { var u = c . getCommonAncestor ( ) , l = a ( y, u ) , u = a ( x , u ) ; l && ( r = l . getNextSourceNode ( ! 0 ) ) ; u&& ( x = u ) } for ( r . getPosition ( x ) == CKEDITOR . POSITION _FOLLOWING && ( r= 0 ) ; r ; ) { l = ! 1 ; if ( r . equals ( x ) ) r = null , l = ! 0 ; else { var v= r . type == CKEDITOR . NODE _ELEMENT ? r. getName ( ) : null , u = v && "false" == r . getAttribute ( "contentEditable" ) , w = v &&
- 1 !== CKEDITOR . tools . array . indexOf ( CKEDITOR . style . unstylableElements , v) , w = v && ( r . getAttribute ( "data-nostyle" ) || w ) ; if ( v && r . data ( "cke-bookmark" ) || r . type === CKEDITOR . NODE _COMMENT ) { r= r . getNextSourceNode ( ! 0 ) ; continue } if ( u&& m && CKEDITOR . dtd . $block [ v ] ) for ( var A = r , B = f ( A ) , C = void 0 , I = B . length , J = 0 , A = I && new CKEDITOR . dom . range ( A. getDocument ( ) ) ; J < I ; ++ J ) { var C = B [ J ] , K = CKEDITOR . filter . instances [ C . data ( "cke-filter" ) ] ; if ( K? K . check ( this ) : 1 ) A . selectNodeContents ( C ) , b . call ( this , A ) } B = v ? ! q [ v ] || w ? 0 : u && ! m ? 0 : d ( r , x , h , Q ) : 1 ; if ( B ) if ( C =
r. getParent ( ) , B = h , I = g , J = k , ! C || ! ( C . getDtd ( ) || CKEDITOR . dtd . span ) [ I] && ! J || B . parentRule && ! B . parentRule ( C ) ) l = ! 0 ; else { if ( z|| v && CKEDITOR . dtd . $removeEmpty [ v ] && ( r . getPosition ( x ) | Q ) != Q || ( z = c . clone ( ) , z . setStartBefore ( r ) ) , v = r . type , v == CKEDITOR . NODE _TEXT || u || v == CKEDITOR . NODE _ELEMENT && ! r . getChildCount ( ) ) { for ( var v= r , L ; ( l = ! v . getNext ( D ) ) && ( L = v . getParent ( ) , q [ L . getName ( ) ] ) && d ( L, y , h , S ) ; ) v = L ; z . setEndAfter ( v ) } } else l = ! 0 ; r = r . getNextSourceNode ( w || u ) } if ( l && z && ! z . collapsed ) { for ( var l = H( this , e ) , u = l . hasAttributes ( ) , w = z . getCommonAncestor ( ) ,
v= { } , B = { } , C = { } , I = { } , X , W , Y ; l && w ; ) { if ( w . getName ( ) == g ) { for ( X in h . attributes ) ! I [ X ] && ( Y = w . getAttribute ( W ) ) && ( l . getAttribute ( X ) == Y ? B [ X ] = 1 : I [ X ] = 1 ) ; for ( W in h . styles ) ! C [ W ] && ( Y = w . getStyle ( W ) ) && ( l . getStyle ( W ) == Y ? v [ W ] = 1 : C [ W ] = 1 ) } w = w . getParent ( ) } for ( X in B ) l . removeAttribute ( X ) ; for ( W in v ) l . removeStyle ( W ) ; u && ! l . hasAttributes ( ) && ( l = null ) ; l ? ( z . extractContents ( ) . appendTo ( l ) , z. insertNode ( l ) , E . call ( this , l ) , l . mergeSiblings ( ) , CKEDITOR . env . ie || l . $ . normalize ( ) ) : ( l = new CKEDITOR . dom . element ( "span" ) , z . extractContents ( ) . appendTo ( l ) ,
z. insertNode ( l ) , E . call ( this , l ) , l . remove ( ! 0 ) ) ; z= null } } c . moveToBookmark ( n ) ; c . shrink ( CKEDITOR . SHRINK _TEXT ) ; c . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) } } function c ( a ) { function b ( ) { for ( var a = new CKEDITOR . dom . elementPath ( d . getParent ( ) ) , c = new CKEDITOR . dom . elementPath ( m . getParent ( ) ) , e = null , g = null , f = 0 ; f < a . elements . length ; f ++ ) { var h = a . elements [ f ] ; if ( h == a . block || h == a . blockLimit ) break ; q . checkElementRemovable ( h , ! 0 ) && ( e = h ) } for ( f = 0 ; f < c . elements . length ; f ++ ) { h = c . elements [ f ] ; if ( h == c . block || h == c . blockLimit ) break ; q . checkElementRemovable ( h ,
! 0 ) && ( g = h ) } g && m . breakParent ( g ) ; e && d . breakParent ( e ) } a . enlarge ( CKEDITOR . ENLARGE _INLINE , 1 ) ; var c = a . createBookmark ( ) , d = c . startNode , e = this . _ . definition . alwaysRemoveElement ; if ( a . collapsed ) { for ( var g = new CKEDITOR . dom . elementPath ( d . getParent ( ) , a . root ) , f , h = 0 , k ; h < g . elements . length && ( k = g . elements [ h ] ) && k != g . block && k != g . blockLimit ; h ++ ) if ( this . checkElementRemovable ( k ) ) { var l ; ! e && a . collapsed && ( a . checkBoundaryOfElement ( k , CKEDITOR . END ) || ( l = a . checkBoundaryOfElement ( k , CKEDITOR . START ) ) ) ? ( f = k , f . match = l ? "start" : "end" ) :
( k . mergeSiblings ( ) , k . is ( this . element ) ? x. call ( this , k ) : v ( k , J ( this ) [ k . getName ( ) ] ) ) } if ( f ) { e = d ; for ( h = 0 ; ; h ++ ) { k = g . elements [ h ] ; if ( k . equals ( f ) ) break ; else if ( k . match ) continue ; else k = k . clone ( ) ; k . append ( e ) ; e = k } e [ "start" == f . match ? "insertBefore" : "insertAfter" ] ( f ) } } else { var m= c . endNode , q = this ; b ( ) ; for ( g = d ; ! g . equals ( m ) ; ) f = g . getNextSourceNode ( ) , g . type == CKEDITOR . NODE _ELEMENT && this . checkElementRemovable ( g ) && ( g . getName ( ) == this . element ? x. call ( this , g ) : v ( g , J ( this ) [ g . getName ( ) ] ) , f . type == CKEDITOR . NODE _ELEMENT && f . contains ( d ) &&
( b ( ) , f = d . getNext ( ) ) ) , g = f } a . moveToBookmark ( c ) ; a . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) } function f ( a ) { var b = [ ] ; a . forEach ( function ( a ) { if ( "true" == a . getAttribute ( "contenteditable" ) ) return b . push ( a ) , ! 1 } , CKEDITOR . NODE _ELEMENT , ! 0 ) ; return b } function e ( a ) { var b = a . getEnclosedNode ( ) || a . getCommonAncestor ( ! 1 , ! 0 ) ; ( a = ( new CKEDITOR . dom . elementPath ( b , a . root ) ) . contains ( this . element , 1 ) ) && ! a . isReadOnly ( ) && u ( a , this ) } function k ( a ) { var b = a . getCommonAncestor ( ! 0 , ! 0 ) ; 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 ( ! 0 ) , c = a . createIterator ( ) ; c . enforceRealBlocks = ! 0 ; this . _ . enterMode && ( c . enlargeBr = this . _ . enterMode != CKEDITOR . ENTER _BR ) ; for ( var d , e = a . document , g ; d = c . getNextParagraph ( ) ; ) ! d . isReadOnly ( ) && ( c . activeFilter ? c . activeFilter . check ( this ) : 1 ) && ( g = H ( this , e , d ) , q ( d , g ) ) ; a . moveToBookmark ( b ) } function l ( a ) { var b = a . createBookmark ( 1 ) ,
c = a . createIterator ( ) ; c . enforceRealBlocks = ! 0 ; c . enlargeBr = this . _ . enterMode != CKEDITOR . ENTER _BR ; for ( var d , e ; d = c . getNextParagraph ( ) ; ) this . checkElementRemovable ( d ) && ( d . is ( "pre" ) ? ( ( e = this . _ . enterMode == CKEDITOR . ENTER _BR ? null : a . document . createElement ( this . _ . enterMode == CKEDITOR . ENTER _P ? "p" : "div" ) ) && d . copyAttributes ( e ) , q ( d , e ) ) : x . call ( this , d ) ) ; a . moveToBookmark ( b ) } function q ( a , b ) { var c = ! b ; 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 = y ( 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 = "\x3cpre\x3e" + f + "\x3c/pre\x3e" ; e . copyAttributes ( h . getFirst ( ) ) ; e = h . getFirst ( ) . remove ( ) } else e . setHtml ( f ) ; b = e } else f ? b = z ( c ? [ a . getHtml ( ) ] : g ( a ) , b ) : a . moveChildren ( b ) ; b . replace ( a ) ; if ( d ) { var c = b , k ; ( k = c . getPrevious ( w ) ) &&
k . type == CKEDITOR . NODE _ELEMENT && k . is ( "pre" ) && ( d = y ( k . getHtml ( ) , /\n$/ , "" ) + "\n\n" + y ( c . getHtml ( ) , /^\n/ , "" ) , CKEDITOR . env . ie ? c . $ . outerHTML = "\x3cpre\x3e" + d + "\x3c/pre\x3e" : c . setHtml ( d ) , k . remove ( ) ) } else c && n ( b ) } function g ( a ) { var b = [ ] ; y ( a . getOuterHtml ( ) , /(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi , function ( a , b , c ) { return b + "\x3c/pre\x3e" + c + "\x3cpre\x3e" } ) . replace ( /<pre\b.*?>([\s\S]*?)<\/pre>/gi , function ( a , c ) { b . push ( c ) } ) ; return b } function y ( 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 z ( a , b ) { var c ; 1 < a . length && ( 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 = y ( e , /^[ \t]*\n/ , "" ) , e = y ( e , /\n$/ , "" ) , e = y ( e , /^[ \t]+|[ \t]+$/g , function ( a , b ) { return 1 == a . length ? "\x26nbsp;" : b ? " " + CKEDITOR . tools . repeat ( "\x26nbsp;" , a . length - 1 ) : CKEDITOR . tools . repeat ( "\x26nbsp;" , a . length - 1 ) + " " } ) , e = e . replace ( /\n/g , "\x3cbr\x3e" ) , e = e . replace ( /[ \t]{2,}/g , function ( a ) { return CKEDITOR . tools . repeat ( "\x26nbsp;" ,
a . length - 1 ) + " " } ) ; if ( c ) { var g = b . clone ( ) ; g . setHtml ( e ) ; c . append ( g ) } else b . setHtml ( e ) } return c || b } function x ( a , b ) { var c = this . _ . definition , d = c . attributes , c = c . styles , e = J ( this ) [ a . getName ( ) ] , g = CKEDITOR . tools . isEmpty ( d ) && CKEDITOR . tools . isEmpty ( c ) , f ; for ( f in d ) if ( "class" != f && ! this . _ . definition . fullMatch || a . getAttribute ( f ) == m ( f , d [ f ] ) ) b && "data-" == f . slice ( 0 , 5 ) || ( g = a . hasAttribute ( f ) , a . removeAttribute ( f ) ) ; for ( var h in c ) this . _ . definition . fullMatch && a . getStyle ( h ) != m ( h , c [ h ] , ! 0 ) || ( g = g || ! ! a . getStyle ( h ) , a . removeStyle ( h ) ) ;
v( a , e , A [ a . getName ( ) ] ) ; g && ( this . _ . definition . alwaysRemoveElement ? n ( a , 1 ) : ! CKEDITOR . dtd . $block [ a . getName ( ) ] || this . _ . enterMode == CKEDITOR . ENTER _BR && ! a . hasAttributes ( ) ? n ( a ) : a . renameNode ( this . _ . enterMode == CKEDITOR . ENTER _P ? "p" : "div" ) ) } function E( a ) { for ( var b = J ( this ) , c = a . getElementsByTag ( this . element ) , d , e = c . count ( ) ; 0 <= -- e ; ) d = c . getItem ( e ) , d . isReadOnly ( ) || x . call ( this , d , ! 0 ) ; for ( var g in b ) if ( g != this . element ) for ( c = a . getElementsByTag ( g ) , e = c . count ( ) - 1 ; 0 <= e ; e -- ) d = c . getItem ( e ) , d . isReadOnly ( ) || v ( d , b [ g ] ) } function v ( a ,
b , c ) { if ( b = b && b . attributes ) for ( var d = 0 ; d < b . length ; d ++ ) { var e = b [ d ] [ 0 ] , g ; if ( g = a . getAttribute ( e ) ) { var f = b [ d ] [ 1 ] ; ( null === f || f . test && f . test ( g ) || "string" == typeof f && g == f ) && a . removeAttribute ( e ) } } c || n( a ) } function n ( a , b ) { if ( ! a . hasAttributes ( ) || b ) if ( CKEDITOR . dtd . $block [ a . getName ( ) ] ) { var c = a . getPrevious ( w) , d = a . getNext ( w ) ; ! 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 ( ! 0 ) } else c = a . getFirst ( ) , d = a . getLast ( ) ,
a . remove ( ! 0 ) , c && ( c . type == CKEDITOR . NODE _ELEMENT && c . mergeSiblings ( ) , d && ! c . equals ( d ) && d . type == CKEDITOR . NODE _ELEMENT && d . mergeSiblings ( ) ) } function H ( 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 ) ; a . getDocument ( ) . removeCustomData ( "doc_processing_style" ) ; return a } function I ( a , b ) { for ( var c in a ) a [ c ] = a [ c ] . replace ( B , function ( a , c ) { return b [ c ] } ) } function J ( 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 ] , g , f ; "string" == typeof e ? g = e . toLowerCase ( ) : ( g = e . element ? e . element . toLowerCase ( ) : a . element , f = e . attributes ) ; e = b [ g ] || ( b [ g ] = { } ) ; if ( f ) { var e = e . attributes =
e . attributes || [ ] , h ; for ( h in f ) e . push ( [ h . toLowerCase ( ) , f [ h ] ] ) } } } return b } function m ( a , b , c ) { var d = new CKEDITOR . dom . element ( "span" ) ; d [ c ? "setStyle" : "setAttribute" ] ( a , b ) ; return d [ c ? "getStyle" : "getAttribute" ] ( a ) } function C ( a , b ) { function c ( a , b ) { return "font-family" == b . toLowerCase ( ) ? a . replace ( /["']/g , "" ) : a } "string" == typeof a && ( a = CKEDITOR . tools . parseCssText ( a ) ) ; "string" == typeof b && ( b = CKEDITOR . tools . parseCssText ( b , ! 0 ) ) ; for ( var d in a ) if ( ! ( d in b ) || c ( b [ d ] , d ) != c ( a [ d ] , d ) && "inherit" != a [ d ] && "inherit" != b [ d ] ) return ! 1 ;
return ! 0 } function K ( a , b , c ) { var d = a . getRanges ( ) ; b = b ? this . removeFromRange : this . applyToRange ; for ( var e , g = d . createIterator ( ) ; e = g . getNextRange ( ) ; ) b . call ( this , e , c ) ; a . selectRanges ( d ) } var A = { 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 } , L = { 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 } , r = /\s*(?:;\s*|$)/ , B= /#\((.+?)\)/g , D = CKEDITOR . dom . walker . bookmark ( 0 , 1 ) , w = CKEDITOR . dom . walker . whitespaces ( 1 ) ; CKEDITOR . style = function ( a , b ) { if ( "string" == typeof a . type ) return new CKEDITOR . style . customHandlers [ a . type ] ( a ) ; var c = a . attributes ; c && c . style && ( a . styles = CKEDITOR . tools . extend ( { } , a . styles , CKEDITOR . tools . parseCssText ( c . style ) ) , delete c . style ) ; b && ( a = CKEDITOR . tools . clone ( a ) , I( a . attributes , b ) , I ( a . styles , b ) ) ; c = this . element = a . element ? "string" == typeof a . element ? a . element . toLowerCase ( ) :
a . element : "*" ; this . type = a . type || ( A [ c ] ? CKEDITOR . STYLE _BLOCK : L [ c ] ? CKEDITOR . STYLE _OBJECT : CKEDITOR . STYLE _INLINE ) ; "object" == typeof this . element && ( this . type = CKEDITOR . STYLE _OBJECT ) ; this . _ = { definition : a } } ; CKEDITOR . style . prototype = { apply : function ( a ) { if ( a instanceof CKEDITOR . dom . document ) return K . call ( this , a . getSelection ( ) ) ; if ( this . checkApplicable ( a . elementPath ( ) , a ) ) { var b = this . _ . enterMode ; b || ( this . _ . enterMode = a . activeEnterMode ) ; K . call ( this , a . getSelection ( ) , 0 , a ) ; this . _ . enterMode = b } } , remove : function ( a ) { if ( a instanceof
CKEDITOR . dom . document ) return K . call ( this , a . getSelection ( ) , 1 ) ; if ( this . checkApplicable ( a . elementPath ( ) , a ) ) { var b = this . _ . enterMode ; b || ( this . _ . enterMode = a . activeEnterMode ) ; K . call ( this , a . getSelection ( ) , 1 , a ) ; this . _ . enterMode = b } } , applyToRange : function ( a ) { this . applyToRange = this . type == CKEDITOR . STYLE _INLINE ? b : this . type == CKEDITOR . STYLE _BLOCK ? h : this . type == CKEDITOR . STYLE _OBJECT ? e : null ; return this . applyToRange ( a ) } , removeFromRange : function ( a ) { this . removeFromRange = this . type == CKEDITOR . STYLE _INLINE ? c : this . type == CKEDITOR . STYLE _BLOCK ?
l : this . type == CKEDITOR . STYLE _OBJECT ? k : 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 , ! 0 , b ) ; case CKEDITOR . STYLE _OBJECT : case CKEDITOR . STYLE _INLINE : for ( var c = a . elements , d = 0 , e ; d < c . length ; d ++ ) if ( e = c [ d ] , this . type != CKEDITOR . STYLE _INLINE || e != a . block && e != a . blockLimit ) { if ( this . type == CKEDITOR . STYLE _OBJECT ) { var g = e . getName ( ) ; if ( ! ( "string" == typeof this . element ?
scrollIntoView : function ( ) { this . getType ( ) != CKEDITOR . SELECTION _NONE && this . getRanges ( ) [ 0 ] . scrollIntoView ( ) } , removeAllRanges : function ( ) { if ( this . getType ( ) != CKEDITOR . SELECTION _NONE ) { var a = this . getNative ( ) ; try { a && a [ m ? "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 ( ) ) && ! a . equals ( b ) ; ) if ( a . getAttribute ( "data-nostyle" ) ) c = a ; else if ( ! d ) { var e = a . getAttribute ( "contentEditable" ) ; "false" == e ? c = a : "true" == e && ( d = 1 ) } return c } function d ( a , b , c , d ) { return ( a . getPosition ( b ) | d ) == d && ( ! c . childRule || c . childRule ( a ) ) } function b ( c ) { var e = c . document ; if ( c . collapsed ) e = M ( this , e ) , c . insertNode ( e ) , c . moveToPosition ( e , CKEDITOR . POSITION _BEFORE _END ) ; else { var g = this . element , h = this . _ . definition , k , l = h . ignoreReadonly , q = l || h . includeReadonly ; null ==
q&& ( q = c . root . getCustomData ( "cke_includeReadonly" ) ) ; var m= CKEDITOR . dtd [ g ] ; m || ( k = ! 0 , m = CKEDITOR . dtd . span ) ; c . enlarge ( CKEDITOR . ENLARGE _INLINE , 1 ) ; c . trim ( ) ; var r= c . createBookmark ( ) , w = r . startNode , u = r . endNode , t = w , x ; if ( ! l ) { var v = c . getCommonAncestor ( ) , l = a ( w, v ) , v = a ( u , v ) ; l && ( t = l . getNextSourceNode ( ! 0 ) ) ; v&& ( u = v ) } for ( t . getPosition ( u ) == CKEDITOR . POSITION _FOLLOWING && ( t= 0 ) ; t ; ) { l = ! 1 ; if ( t . equals ( u ) ) t = null , l = ! 0 ; else { var z= t . type == CKEDITOR . NODE _ELEMENT ? t. getName ( ) : null , v = z && "false" == t . getAttribute ( "contentEditable" ) , y = z &&
- 1 !== CKEDITOR . tools . array . indexOf ( CKEDITOR . style . unstylableElements , z) , y = z && ( t . getAttribute ( "data-nostyle" ) || y ) ; if ( z && t . data ( "cke-bookmark" ) || t . type === CKEDITOR . NODE _COMMENT ) { t= t . getNextSourceNode ( ! 0 ) ; continue } if ( v&& q && CKEDITOR . dtd . $block [ z ] ) for ( var D = t , E = f ( D ) , F = void 0 , G = E . length , H = 0 , D = G && new CKEDITOR . dom . range ( D. getDocument ( ) ) ; H < G ; ++ H ) { var F = E [ H ] , J = CKEDITOR . filter . instances [ F . data ( "cke-filter" ) ] ; if ( J? J . check ( this ) : 1 ) D . selectNodeContents ( F ) , b . call ( this , D ) } E = z ? ! m [ z ] || y ? 0 : v && ! q ? 0 : d ( t , u , h , T ) : 1 ; if ( E ) if ( F =
t. getParent ( ) , E = h , G = g , H = k , ! F || ! ( F . getDtd ( ) || CKEDITOR . dtd . span ) [ G] && ! H || E . parentRule && ! E . parentRule ( F ) ) l = ! 0 ; else { if ( x|| z && CKEDITOR . dtd . $removeEmpty [ z ] && ( t . getPosition ( u ) | T ) != T || ( x = c . clone ( ) , x . setStartBefore ( t ) ) , z = t . type , z == CKEDITOR . NODE _TEXT || v || z == CKEDITOR . NODE _ELEMENT && ! t . getChildCount ( ) ) { for ( var z= t , K ; ( l = ! z . getNext ( B ) ) && ( K = z . getParent ( ) , m [ K . getName ( ) ] ) && d ( K, w , h , O ) ; ) z = K ; x . setEndAfter ( z ) } } else l = ! 0 ; t = t . getNextSourceNode ( y || v ) } if ( l && x && ! x . collapsed ) { for ( var l = M( this , e ) , v = l . hasAttributes ( ) , y = x . getCommonAncestor ( ) ,
z= { } , E = { } , F = { } , G = { } , U , R , Y ; l && y ; ) { if ( y . getName ( ) == g ) { for ( U in h . attributes ) ! G [ U ] && ( Y = y . getAttribute ( R ) ) && ( l . getAttribute ( U ) == Y ? E [ U ] = 1 : G [ U ] = 1 ) ; for ( R in h . styles ) ! F [ R ] && ( Y = y . getStyle ( R ) ) && ( l . getStyle ( R ) == Y ? z [ R ] = 1 : F [ R ] = 1 ) } y = y . getParent ( ) } for ( U in E ) l . removeAttribute ( U ) ; for ( R in z ) l . removeStyle ( R ) ; v && ! l . hasAttributes ( ) && ( l = null ) ; l ? ( x . extractContents ( ) . appendTo ( l ) , x. insertNode ( l ) , A . call ( this , l ) , l . mergeSiblings ( ) , CKEDITOR . env . ie || l . $ . normalize ( ) ) : ( l = new CKEDITOR . dom . element ( "span" ) , x . extractContents ( ) . appendTo ( l ) ,
x. insertNode ( l ) , A . call ( this , l ) , l . remove ( ! 0 ) ) ; x= null } } c . moveToBookmark ( r ) ; c . shrink ( CKEDITOR . SHRINK _TEXT ) ; c . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) } } function c ( a ) { function b ( ) { for ( var a = new CKEDITOR . dom . elementPath ( d . getParent ( ) ) , c = new CKEDITOR . dom . elementPath ( q . getParent ( ) ) , e = null , g = null , f = 0 ; f < a . elements . length ; f ++ ) { var h = a . elements [ f ] ; if ( h == a . block || h == a . blockLimit ) break ; m . checkElementRemovable ( h , ! 0 ) && ( e = h ) } for ( f = 0 ; f < c . elements . length ; f ++ ) { h = c . elements [ f ] ; if ( h == c . block || h == c . blockLimit ) break ; m . checkElementRemovable ( h ,
! 0 ) && ( g = h ) } g && q . breakParent ( g ) ; e && d . breakParent ( e ) } a . enlarge ( CKEDITOR . ENLARGE _INLINE , 1 ) ; var c = a . createBookmark ( ) , d = c . startNode , e = this . _ . definition . alwaysRemoveElement ; if ( a . collapsed ) { for ( var g = new CKEDITOR . dom . elementPath ( d . getParent ( ) , a . root ) , f , h = 0 , k ; h < g . elements . length && ( k = g . elements [ h ] ) && k != g . block && k != g . blockLimit ; h ++ ) if ( this . checkElementRemovable ( k ) ) { var l ; ! e && a . collapsed && ( a . checkBoundaryOfElement ( k , CKEDITOR . END ) || ( l = a . checkBoundaryOfElement ( k , CKEDITOR . START ) ) ) ? ( f = k , f . match = l ? "start" : "end" ) :
( k . mergeSiblings ( ) , k . is ( this . element ) ? z. call ( this , k ) : t ( k , E ( this ) [ k . getName ( ) ] ) ) } if ( f ) { e = d ; for ( h = 0 ; ; h ++ ) { k = g . elements [ h ] ; if ( k . equals ( f ) ) break ; else if ( k . match ) continue ; else k = k . clone ( ) ; k . append ( e ) ; e = k } e [ "start" == f . match ? "insertBefore" : "insertAfter" ] ( f ) } } else { var q= c . endNode , m = this ; b ( ) ; for ( g = d ; ! g . equals ( q ) ; ) f = g . getNextSourceNode ( ) , g . type == CKEDITOR . NODE _ELEMENT && this . checkElementRemovable ( g ) && ( g . getName ( ) == this . element ? z. call ( this , g ) : t ( g , E ( this ) [ g . getName ( ) ] ) , f . type == CKEDITOR . NODE _ELEMENT && f . contains ( d ) &&
( b ( ) , f = d . getNext ( ) ) ) , g = f } a . moveToBookmark ( c ) ; a . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) } function f ( a ) { var b = [ ] ; a . forEach ( function ( a ) { if ( "true" == a . getAttribute ( "contenteditable" ) ) return b . push ( a ) , ! 1 } , CKEDITOR . NODE _ELEMENT , ! 0 ) ; return b } function e ( a ) { var b = a . getEnclosedNode ( ) || a . getCommonAncestor ( ! 1 , ! 0 ) ; ( a = ( new CKEDITOR . dom . elementPath ( b , a . root ) ) . contains ( this . element , 1 ) ) && ! a . isReadOnly ( ) && v ( a , this ) } function k ( a ) { var b = a . getCommonAncestor ( ! 0 , ! 0 ) ; 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 ( ! 0 ) , c = a . createIterator ( ) ; c . enforceRealBlocks = ! 0 ; this . _ . enterMode && ( c . enlargeBr = this . _ . enterMode != CKEDITOR . ENTER _BR ) ; for ( var d , e = a . document , g ; d = c . getNextParagraph ( ) ; ) ! d . isReadOnly ( ) && ( c . activeFilter ? c . activeFilter . check ( this ) : 1 ) && ( g = M ( this , e , d ) , q ( d , g ) ) ; a . moveToBookmark ( b ) } function l ( a ) { var b = a . createBookmark ( 1 ) ,
c = a . createIterator ( ) ; c . enforceRealBlocks = ! 0 ; c . enlargeBr = this . _ . enterMode != CKEDITOR . ENTER _BR ; for ( var d , e ; d = c . getNextParagraph ( ) ; ) this . checkElementRemovable ( d ) && ( d . is ( "pre" ) ? ( ( e = this . _ . enterMode == CKEDITOR . ENTER _BR ? null : a . document . createElement ( this . _ . enterMode == CKEDITOR . ENTER _P ? "p" : "div" ) ) && d . copyAttributes ( e ) , q ( d , e ) ) : z . call ( this , d ) ) ; a . moveToBookmark ( b ) } function q ( a , b ) { var c = ! b ; 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 = w ( 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 = "\x3cpre\x3e" + f + "\x3c/pre\x3e" ; e . copyAttributes ( h . getFirst ( ) ) ; e = h . getFirst ( ) . remove ( ) } else e . setHtml ( f ) ; b = e } else f ? b = x ( c ? [ a . getHtml ( ) ] : g ( a ) , b ) : a . moveChildren ( b ) ; b . replace ( a ) ; if ( d ) { var c = b , k ; ( k = c . getPrevious ( G ) ) &&
k . type == CKEDITOR . NODE _ELEMENT && k . is ( "pre" ) && ( d = w ( k . getHtml ( ) , /\n$/ , "" ) + "\n\n" + w ( c . getHtml ( ) , /^\n/ , "" ) , CKEDITOR . env . ie ? c . $ . outerHTML = "\x3cpre\x3e" + d + "\x3c/pre\x3e" : c . setHtml ( d ) , k . remove ( ) ) } else c && m ( b ) } function g ( a ) { var b = [ ] ; w ( a . getOuterHtml ( ) , /(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi , function ( a , b , c ) { return b + "\x3c/pre\x3e" + c + "\x3cpre\x3e" } ) . replace ( /<pre\b.*?>([\s\S]*?)<\/pre>/gi , function ( a , c ) { b . push ( c ) } ) ; return b } function w ( 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 x ( a , b ) { var c ; 1 < a . length && ( 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 = w ( e , /^[ \t]*\n/ , "" ) , e = w ( e , /\n$/ , "" ) , e = w ( e , /^[ \t]+|[ \t]+$/g , function ( a , b ) { return 1 == a . length ? "\x26nbsp;" : b ? " " + CKEDITOR . tools . repeat ( "\x26nbsp;" , a . length - 1 ) : CKEDITOR . tools . repeat ( "\x26nbsp;" , a . length - 1 ) + " " } ) , e = e . replace ( /\n/g , "\x3cbr\x3e" ) , e = e . replace ( /[ \t]{2,}/g , function ( a ) { return CKEDITOR . tools . repeat ( "\x26nbsp;" ,
a . length - 1 ) + " " } ) ; if ( c ) { var g = b . clone ( ) ; g . setHtml ( e ) ; c . append ( g ) } else b . setHtml ( e ) } return c || b } function z ( a , b ) { var c = this . _ . definition , d = c . attributes , c = c . styles , e = E ( this ) [ a . getName ( ) ] , g = CKEDITOR . tools . isEmpty ( d ) && CKEDITOR . tools . isEmpty ( c ) , f ; for ( f in d ) if ( "class" != f && ! this . _ . definition . fullMatch || a . getAttribute ( f ) == u ( f , d [ f ] ) ) b && "data-" == f . slice ( 0 , 5 ) || ( g = a . hasAttribute ( f ) , a . removeAttribute ( f ) ) ; for ( var h in c ) this . _ . definition . fullMatch && a . getStyle ( h ) != u ( h , c [ h ] , ! 0 ) || ( g = g || ! ! a . getStyle ( h ) , a . removeStyle ( h ) ) ;
t( a , e , y [ a . getName ( ) ] ) ; g && ( this . _ . definition . alwaysRemoveElement ? m ( a , 1 ) : ! CKEDITOR . dtd . $block [ a . getName ( ) ] || this . _ . enterMode == CKEDITOR . ENTER _BR && ! a . hasAttributes ( ) ? m ( a ) : a . renameNode ( this . _ . enterMode == CKEDITOR . ENTER _P ? "p" : "div" ) ) } function A( a ) { for ( var b = E ( this ) , c = a . getElementsByTag ( this . element ) , d , e = c . count ( ) ; 0 <= -- e ; ) d = c . getItem ( e ) , d . isReadOnly ( ) || z . call ( this , d , ! 0 ) ; for ( var g in b ) if ( g != this . element ) for ( c = a . getElementsByTag ( g ) , e = c . count ( ) - 1 ; 0 <= e ; e -- ) d = c . getItem ( e ) , d . isReadOnly ( ) || t ( d , b [ g ] ) } function t ( a ,
b , c ) { if ( b = b && b . attributes ) for ( var d = 0 ; d < b . length ; d ++ ) { var e = b [ d ] [ 0 ] , g ; if ( g = a . getAttribute ( e ) ) { var f = b [ d ] [ 1 ] ; ( null === f || f . test && f . test ( g ) || "string" == typeof f && g == f ) && a . removeAttribute ( e ) } } c || m( a ) } function m ( a , b ) { if ( ! a . hasAttributes ( ) || b ) if ( CKEDITOR . dtd . $block [ a . getName ( ) ] ) { var c = a . getPrevious ( G) , d = a . getNext ( G ) ; ! 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 ( ! 0 ) } else c = a . getFirst ( ) , d = a . getLast ( ) ,
a . remove ( ! 0 ) , c && ( c . type == CKEDITOR . NODE _ELEMENT && c . mergeSiblings ( ) , d && ! c . equals ( d ) && d . type == CKEDITOR . NODE _ELEMENT && d . mergeSiblings ( ) ) } function M ( a , b , c ) { var d ; d = a . element ; "*" == d && ( d = "span" ) ; d = new CKEDITOR . dom . element ( d , b ) ; c && c . copyAttributes ( d ) ; d = v ( d , a ) ; b . getCustomData ( "doc_processing_style" ) && d . hasAttribute ( "id" ) ? d . removeAttribute ( "id" ) : b . setCustomData ( "doc_processing_style" , 1 ) ; return d } function v ( 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 ) ; a . getDocument ( ) . removeCustomData ( "doc_processing_style" ) ; return a } function J ( 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 ] , g , f ; "string" == typeof e ? g = e . toLowerCase ( ) : ( g = e . element ? e . element . toLowerCase ( ) : a . element , f = e . attributes ) ; e = b [ g ] || ( b [ g ] = { } ) ; if ( f ) { var e = e . attributes =
e . attributes || [ ] , h ; for ( h in f ) e . push ( [ h . toLowerCase ( ) , f [ h ] ] ) } } } return b } function u ( a , b , c ) { var d = new CKEDITOR . dom . element ( "span" ) ; d [ c ? "setStyle" : "setAttribute" ] ( a , b ) ; return d [ c ? "getStyle" : "getAttribute" ] ( a ) } function F ( a , b ) { function c ( a , b ) { return "font-family" == b . toLowerCase ( ) ? a . replace ( /["']/g , "" ) : a } "string" == typeof a && ( a = CKEDITOR . tools . parseCssText ( a ) ) ; "string" == typeof b && ( b = CKEDITOR . tools . parseCssText ( b , ! 0 ) ) ; for ( var d in a ) if ( ! ( d in b ) || c ( b [ d ] , d ) != c ( a [ d ] , d ) && "inherit" != a [ d ] && "inherit" != b [ d ] ) return ! 1 ;
return ! 0 } function H ( a , b , c ) { var d = a . getRanges ( ) ; b = b ? this . removeFromRange : this . applyToRange ; for ( var e , g = d . createIterator ( ) ; e = g . getNextRange ( ) ; ) b . call ( this , e , c ) ; a . selectRanges ( d ) } var y = { 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 } , K = { 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 } , r = /\s*(?:;\s*|$)/ , D= /#\((.+?)\)/g , B = CKEDITOR . dom . walker . bookmark ( 0 , 1 ) , G = CKEDITOR . dom . walker . whitespaces ( 1 ) ; CKEDITOR . style = function ( a , b ) { if ( "string" == typeof a . type ) return new CKEDITOR . style . customHandlers [ a . type ] ( a ) ; var c = a . attributes ; c && c . style && ( a . styles = CKEDITOR . tools . extend ( { } , a . styles , CKEDITOR . tools . parseCssText ( c . style ) ) , delete c . style ) ; b && ( a = CKEDITOR . tools . clone ( a ) , J( a . attributes , b ) , J ( a . styles , b ) ) ; c = this . element = a . element ? "string" == typeof a . element ? a . element . toLowerCase ( ) :
a . element : "*" ; this . type = a . type || ( y [ c ] ? CKEDITOR . STYLE _BLOCK : K [ c ] ? CKEDITOR . STYLE _OBJECT : CKEDITOR . STYLE _INLINE ) ; "object" == typeof this . element && ( this . type = CKEDITOR . STYLE _OBJECT ) ; this . _ = { definition : a } } ; CKEDITOR . style . prototype = { apply : function ( a ) { if ( a instanceof CKEDITOR . dom . document ) return H . call ( this , a . getSelection ( ) ) ; if ( this . checkApplicable ( a . elementPath ( ) , a ) ) { var b = this . _ . enterMode ; b || ( this . _ . enterMode = a . activeEnterMode ) ; H . call ( this , a . getSelection ( ) , 0 , a ) ; this . _ . enterMode = b } } , remove : function ( a ) { if ( a instanceof
CKEDITOR . dom . document ) return H . call ( this , a . getSelection ( ) , 1 ) ; if ( this . checkApplicable ( a . elementPath ( ) , a ) ) { var b = this . _ . enterMode ; b || ( this . _ . enterMode = a . activeEnterMode ) ; H . call ( this , a . getSelection ( ) , 1 , a ) ; this . _ . enterMode = b } } , applyToRange : function ( a ) { this . applyToRange = this . type == CKEDITOR . STYLE _INLINE ? b : this . type == CKEDITOR . STYLE _BLOCK ? h : this . type == CKEDITOR . STYLE _OBJECT ? e : null ; return this . applyToRange ( a ) } , removeFromRange : function ( a ) { this . removeFromRange = this . type == CKEDITOR . STYLE _INLINE ? c : this . type == CKEDITOR . STYLE _BLOCK ?
l : this . type == CKEDITOR . STYLE _OBJECT ? k : null ; return this . removeFromRange ( a ) } , applyToObject : function ( a ) { v ( a , this ) } , checkActive : function ( a , b ) { switch ( this . type ) { case CKEDITOR . STYLE _BLOCK : return this . checkElementRemovable ( a . block || a . blockLimit , ! 0 , b ) ; case CKEDITOR . STYLE _OBJECT : case CKEDITOR . STYLE _INLINE : for ( var c = a . elements , d = 0 , e ; d < c . length ; d ++ ) if ( e = c [ d ] , this . type != CKEDITOR . STYLE _INLINE || e != a . block && e != a . blockLimit ) { if ( this . type == CKEDITOR . STYLE _OBJECT ) { var g = e . getName ( ) ; if ( ! ( "string" == typeof this . element ?
g == this . element : g in this . element ) ) continue } if ( this . checkElementRemovable ( e , ! 0 , b ) ) return ! 0 } } return ! 1 } , checkApplicable : function ( a , b , c ) { b && b instanceof CKEDITOR . filter && ( c = b ) ; if ( c && ! c . check ( this ) ) return ! 1 ; switch ( this . type ) { case CKEDITOR . STYLE _OBJECT : return ! ! a . contains ( this . element ) ; case CKEDITOR . STYLE _BLOCK : return ! ! a . blockLimit . getDtd ( ) [ this . element ] } return ! 0 } , checkElementMatch : function ( a , b ) { var c = this . _ . definition ; if ( ! a || ! c . ignoreReadonly && a . isReadOnly ( ) ) return ! 1 ; var d = a . getName ( ) ; if ( "string" == typeof this . element ?
d == this . element : d in this . element ) { if ( ! b && ! a . hasAttributes ( ) ) return ! 0 ; if ( d = c . _AC ) c = d ; else { var d = { } , e = 0 , g = c . attributes ; if ( g ) for ( var f in g ) e ++ , d [ f ] = g [ f ] ; if ( f = CKEDITOR . style . getStyleText ( c ) ) d . style || e ++ , d . style = f ; d . _length = e ; c = c . _AC = d } if ( c . _length ) { for ( var h in c ) if ( "_length" != h ) if ( d = a . getAttribute ( h ) || "" , "style" == h ? C ( c [ h ] , d ) : c [ h ] == d ) { if ( ! b ) return ! 0 } else if ( b ) return ! 1 ; if ( b ) return ! 0 } else return ! 0 } return ! 1 } , checkElementRemovable : function ( a , b , c ) { if ( this . checkElementMatch ( a , b , c ) ) return ! 0 ; if ( b = J ( this ) [ a . getName ( ) ] ) { var d ;
d == this . element : d in this . element ) { if ( ! b && ! a . hasAttributes ( ) ) return ! 0 ; if ( d = c . _AC ) c = d ; else { var d = { } , e = 0 , g = c . attributes ; if ( g ) for ( var f in g ) e ++ , d [ f ] = g [ f ] ; if ( f = CKEDITOR . style . getStyleText ( c ) ) d . style || e ++ , d . style = f ; d . _length = e ; c = c . _AC = d } if ( c . _length ) { for ( var h in c ) if ( "_length" != h ) if ( d = a . getAttribute ( h ) || "" , "style" == h ? F ( c [ h ] , d ) : c [ h ] == d ) { if ( ! b ) return ! 0 } else if ( b ) return ! 1 ; if ( b ) return ! 0 } else return ! 0 } return ! 1 } , checkElementRemovable : function ( a , b , c ) { if ( this . checkElementMatch ( a , b , c ) ) return ! 0 ; if ( b = E ( this ) [ a . getName ( ) ] ) { var d ;
if ( ! ( b = b . attributes ) ) return ! 0 ; for ( c = 0 ; c < b . length ; c ++ ) if ( d = b [ c ] [ 0 ] , d = a . getAttribute ( d ) ) { var e = b [ c ] [ 1 ] ; if ( null === e ) return ! 0 ; if ( "string" == typeof e ) { if ( d == e ) return ! 0 } else if ( e . test ( d ) ) return ! 0 } } return ! 1 } , buildPreview : function ( a ) { var b = this . _ . definition , c = [ ] , d = b . element ; "bdo" == d && ( d = "span" ) ; var c = [ "\x3c" , d ] , e = b . attributes ; if ( e ) for ( var g in e ) c . push ( " " , g , '\x3d"' , e [ g ] , '"' ) ; ( e = CKEDITOR . style . getStyleText ( b ) ) && c . push ( ' style\x3d"' , e , '"' ) ; c . push ( "\x3e" , a || b . name , "\x3c/" , d , "\x3e" ) ; 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 ( r , ";" ) ) ; for ( var e in b ) { var g = b [ e ] , f = ( e + ":" + g ) . replace ( r , ";" ) ; "inherit" == g ? d += f : c += f } c . length && ( c = CKEDITOR . tools . normalizeCssText ( c , ! 0 ) ) ; return a . _ST = c + d } ; CKEDITOR . style . customHandlers = { } ; CKEDITOR . style . unstylableElements = [ ] ; 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 , ! 0 ) ; return this . customHandlers [ a . type ] = b } ; var Q = CKEDITOR . POSITION _PRECEDING | CKEDITOR . POSITION _IDENTICAL | CKEDITOR . POSITION _IS _CONTAINED , S = CKEDITOR . POSITION _FOLLOWING | CKEDITOR . POSITION _IDENTICAL | CKEDITOR . POSITION _IS _CONTAINED } ) ( ) ; CKEDITOR . styleCommand = function ( a , d ) { this . requiredContent = this . allowedContent = this . style = a ; CKEDITOR . tools . extend ( this , d , ! 0 ) } ;
{ assignedTo : CKEDITOR . STYLE _OBJECT } , a , ! 0 ) ; return this . customHandlers [ a . type ] = b } ; var T = CKEDITOR . POSITION _PRECEDING | CKEDITOR . POSITION _IDENTICAL | CKEDITOR . POSITION _IS _CONTAINED , O = CKEDITOR . POSITION _FOLLOWING | CKEDITOR . POSITION _IDENTICAL | CKEDITOR . POSITION _IS _CONTAINED } ) ( ) ; CKEDITOR . styleCommand = function ( a , d ) { this . requiredContent = this . allowedContent = this . style = a ; CKEDITOR . tools . extend ( this , d , ! 0 ) } ;
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 , d , b ) { CKEDITOR . stylesSet . addExternal ( a , d , "" ) ; CKEDITOR . stylesSet . load ( a , b ) } ;
CKEDITOR . tools . extend ( CKEDITOR . editor . prototype , { attachStyleStateChange : function ( a , d ) { var b = this . _ . styleStateChangeCallbacks ; b || ( b = this . _ . styleStateChangeCallbacks = [ ] , this . on ( "selectionChange" , function ( a ) { for ( var d = 0 ; d < b . length ; d ++ ) { var e = b [ d ] , k = e . style . checkActive ( a . data . path , this ) ? CKEDITOR . TRISTATE _ON : CKEDITOR . TRISTATE _OFF ; e . fn . call ( this , k ) } } ) ) ; b . push ( { style : a , fn : d } ) } , applyStyle : function ( a ) { a . apply ( this ) } , removeStyle : function ( a ) { a . remove ( this ) } , getStylesSet : function ( a ) { if ( this . _ . stylesDefinitions ) a ( this . _ . stylesDefinitions ) ;
else { var d = this , b = d . config . stylesCombo _stylesSet || d . config . stylesSet ; if ( ! 1 === b ) a ( null ) ; else if ( b instanceof Array ) d . _ . 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 ) { d . _ . stylesDefinitions = b [ c ] ; a ( d . _ . stylesDefinitions ) } ) } } } } ) ;
@ -539,10 +540,10 @@ b,c,d,f){b=[b,c,d];void 0!==f&&b.push(f);return a+"("+b.join(",")+")"},formatHsl
a . green , this . _ . blue = a . blue , this . _ . alpha = a . alpha , a . type === CKEDITOR . tools . color . TYPE _HSL && ( this . _ . hue = a . hue , this . _ . saturation = a . saturation , this . _ . lightness = a . lightness ) ) : this . _ . isValidColor = ! 1 } } , matchStringToNamedColor : function ( a ) { return CKEDITOR . tools . color . namedColors [ a . toLowerCase ( ) ] || null } , extractColorChannelsFromHex : function ( a ) { - 1 === a . indexOf ( "#" ) && ( a = "#" + a ) ; a . match ( CKEDITOR . tools . color . hex3CharsRegExp ) && ( a = this . _ . hex3ToHex6 ( a ) ) ; a . match ( CKEDITOR . tools . color . hex4CharsRegExp ) && ( a = this . _ . hex4ToHex8 ( a ) ) ;
if ( ! a . match ( CKEDITOR . tools . color . hex6CharsRegExp ) && ! a . match ( CKEDITOR . tools . color . hex8CharsRegExp ) ) return null ; a = a . split ( "" ) ; var b = 1 ; a [ 7 ] && a [ 8 ] && ( b = parseInt ( a [ 7 ] + a [ 8 ] , 16 ) , b /= CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE , b = Number ( b . toFixed ( 1 ) ) ) ; return { type : CKEDITOR . tools . color . TYPE _RGB , red : parseInt ( a [ 1 ] + a [ 2 ] , 16 ) , green : parseInt ( a [ 3 ] + a [ 4 ] , 16 ) , blue : parseInt ( a [ 5 ] + a [ 6 ] , 16 ) , alpha : b } } , extractColorChannelsFromRgba : function ( b ) { var c = this . _ . extractColorChannelsByPattern ( b , CKEDITOR . tools . color . rgbRegExp ) ; if ( ! c ||
3 > c . length || 4 < c . length ) return null ; var f = 4 === c . length ; b = a ( c [ 0 ] , CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE ) ; var l = a ( c [ 1 ] , CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE ) , q = a ( c [ 2 ] , CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE ) , g = 1 ; f && ( g = d ( c [ 3 ] , CKEDITOR . tools . color . MAX _ALPHA _CHANNEL _VALUE ) ) ; c = { type : CKEDITOR . tools . color . TYPE _RGB , red : b , green : l , blue : q , alpha : g } ; return this . _ . areColorChannelsValid ( b , l , q , g ) ? c : null } , extractColorChannelsFromHsla : function ( b ) { var c = this . _ . extractColorChannelsByPattern ( b , CKEDITOR . tools . color . hslRegExp ) ;
if ( ! c || 3 > c . length || 4 < c . length ) return null ; var f = 4 === c . length , l = a ( c [ 0 ] , CKEDITOR . tools . color . MAX _HUE _CHANNEL _VALUE ) , q = d ( c [ 1 ] , CKEDITOR . tools . color . MAX _SATURATION _LIGHTNESS _CHANNEL _VALUE ) , g = d ( c [ 2 ] , CKEDITOR . tools . color . MAX _SATURATION _LIGHTNESS _CHANNEL _VALUE ) , y = 1 ; b = this . _ . hslToRgb ( l , q , g ) ; f && ( y = d ( c [ 3 ] , CKEDITOR . tools . color . MAX _ALPHA _CHANNEL _VALUE ) ) ; b . push ( y ) ; c = { type : CKEDITOR . tools . color . TYPE _HSL , red : b [ 0 ] , green : b [ 1 ] , blue : b [ 2 ] , alpha : b [ 3 ] , hue : l , saturation : Math . round ( 100 * q ) , lightness : Math . round ( 100 * g ) } ; return this . _ . areColorChannelsValid ( b [ 0 ] ,
if ( ! c || 3 > c . length || 4 < c . length ) return null ; var f = 4 === c . length , l = a ( c [ 0 ] , CKEDITOR . tools . color . MAX _HUE _CHANNEL _VALUE ) , q = d ( c [ 1 ] , CKEDITOR . tools . color . MAX _SATURATION _LIGHTNESS _CHANNEL _VALUE ) , g = d ( c [ 2 ] , CKEDITOR . tools . color . MAX _SATURATION _LIGHTNESS _CHANNEL _VALUE ) , w = 1 ; b = this . _ . hslToRgb ( l , q , g ) ; f && ( w = d ( c [ 3 ] , CKEDITOR . tools . color . MAX _ALPHA _CHANNEL _VALUE ) ) ; b . push ( w ) ; c = { type : CKEDITOR . tools . color . TYPE _HSL , red : b [ 0 ] , green : b [ 1 ] , blue : b [ 2 ] , alpha : b [ 3 ] , hue : l , saturation : Math . round ( 100 * q ) , lightness : Math . round ( 100 * g ) } ; return this . _ . areColorChannelsValid ( b [ 0 ] ,
b [ 1 ] , b [ 2 ] , b [ 3 ] ) ? c : null } , hex3ToHex6 : function ( a ) { a = a . split ( "" ) ; return "#" + a [ 1 ] + a [ 1 ] + a [ 2 ] + a [ 2 ] + a [ 3 ] + a [ 3 ] } , hex4ToHex8 : function ( a ) { return this . _ . hex3ToHex6 ( a . substr ( 0 , 4 ) ) + CKEDITOR . tools . repeat ( a [ 4 ] , 2 ) } , extractColorChannelsByPattern : function ( a , b ) { var c = a . match ( b ) ; if ( ! c ) return null ; var d = - 1 === c [ 1 ] . indexOf ( "," ) ? /\s/ : "," , d = c [ 1 ] . split ( d ) , d = CKEDITOR . tools . array . reduce ( d , function ( a , b ) { var c = CKEDITOR . tools . trim ( b ) ; return 0 === c . length ? a : a . concat ( [ c ] ) } , [ ] ) ; c [ 2 ] && ( c = CKEDITOR . tools . trim ( c [ 2 ] . replace ( /[\/,]/ , "" ) ) , d . push ( c ) ) ;
return d } , areColorChannelsValid : function ( a , b , d , f ) { return c ( a , 0 , CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE ) && c ( b , 0 , CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE ) && c ( d , 0 , CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE ) && c ( f , 0 , CKEDITOR . tools . color . MAX _ALPHA _CHANNEL _VALUE ) } , hslToRgb : function ( a , b , c ) { var d = function ( d ) { var g = ( d + a / 30 ) % 12 ; d = b * Math . min ( c , 1 - c ) ; g = Math . min ( g - 3 , 9 - g , 1 ) ; g = Math . max ( - 1 , g ) ; return Math . round ( ( c - d * g ) * CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE ) } ; return [ d ( 0 ) , d ( 8 ) , d ( 4 ) ] } , rgbToHsl : function ( a , b , c ) { a /=
CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE ; b /= CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE ; var d = c / CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE , f = Math . max ( a , b , d ) , g = Math . min ( a , b , d ) ; c = f - g ; var y = 0 ; switch ( f ) { case a : y = ( b - d ) / c % 6 ; break ; case b : y = ( d - a ) / c + 2 ; break ; case d : y = ( a - b ) / c + 4 } a = 0 === c ? 0 : 60 * y ; b = ( f + g ) / 2 ; f = 0 ; 1 !== b && 0 !== b && ( f = c / ( 1 - Math . abs ( 2 * b - 1 ) ) ) ; a = Math . round ( a ) ; f = Math . round ( 100 * f ) ; b = Math . round ( 100 * b ) ; return [ a , f , b ] } } , statics : { TYPE _RGB : 1 , TYPE _HSL : 2 , MAX _RGB _CHANNEL _VALUE : 255 , MAX _ALPHA _CHANNEL _VALUE : 1 , MAX _HUE _CHANNEL _VALUE : 360 ,
CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE ; b /= CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE ; var d = c / CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE , f = Math . max ( a , b , d ) , g = Math . min ( a , b , d ) ; c = f - g ; var w = 0 ; switch ( f ) { case a : w = ( b - d ) / c % 6 ; break ; case b : w = ( d - a ) / c + 2 ; break ; case d : w = ( a - b ) / c + 4 } a = 0 === c ? 0 : 60 * w ; b = ( f + g ) / 2 ; f = 0 ; 1 !== b && 0 !== b && ( f = c / ( 1 - Math . abs ( 2 * b - 1 ) ) ) ; a = Math . round ( a ) ; f = Math . round ( 100 * f ) ; b = Math . round ( 100 * b ) ; return [ a , f , b ] } } , statics : { TYPE _RGB : 1 , TYPE _HSL : 2 , MAX _RGB _CHANNEL _VALUE : 255 , MAX _ALPHA _CHANNEL _VALUE : 1 , MAX _HUE _CHANNEL _VALUE : 360 ,
MAX _SATURATION _LIGHTNESS _CHANNEL _VALUE : 1 , hex3CharsRegExp : /#([0-9a-f]{3}$)/gim , hex4CharsRegExp : /#([0-9a-f]{4}$)/gim , hex6CharsRegExp : /#([0-9a-f]{6}$)/gim , hex8CharsRegExp : /#([0-9a-f]{8}$)/gim , rgbRegExp : /rgba?\(([.,\d\s%]*)(\s*\/\s*[\d.%]+)?\s*\)/i , hslRegExp : /hsla?\((\s*(?:[.\d]+(?:deg)?)(?:\s*,?\s*[.\d]+%){2})((?:(?:\s*\/\s*)|(?:\s*,\s*))[\d.]+%?)?\s*\)/i , namedColors : { aliceblue : "#F0F8FF" , antiquewhite : "#FAEBD7" , aqua : "#00FFFF" , aquamarine : "#7FFFD4" , azure : "#F0FFFF" , beige : "#F5F5DC" , bisque : "#FFE4C4" , black : "#000000" ,
blanchedalmond : "#FFEBCD" , blue : "#0000FF" , blueviolet : "#8A2BE2" , brown : "#A52A2A" , burlywood : "#DEB887" , cadetblue : "#5F9EA0" , chartreuse : "#7FFF00" , chocolate : "#D2691E" , coral : "#FF7F50" , cornflowerblue : "#6495ED" , cornsilk : "#FFF8DC" , crimson : "#DC143C" , cyan : "#00FFFF" , darkblue : "#00008B" , darkcyan : "#008B8B" , darkgoldenrod : "#B8860B" , darkgray : "#A9A9A9" , darkgreen : "#006400" , darkgrey : "#A9A9A9" , darkkhaki : "#BDB76B" , darkmagenta : "#8B008B" , darkolivegreen : "#556B2F" , darkorange : "#FF8C00" , darkorchid : "#9932CC" , darkred : "#8B0000" , darksalmon : "#E9967A" ,
darkseagreen : "#8FBC8F" , darkslateblue : "#483D8B" , darkslategray : "#2F4F4F" , darkslategrey : "#2F4F4F" , darkturquoise : "#00CED1" , darkviolet : "#9400D3" , deeppink : "#FF1493" , deepskyblue : "#00BFFF" , dimgray : "#696969" , dimgrey : "#696969" , dodgerblue : "#1E90FF" , firebrick : "#B22222" , floralwhite : "#FFFAF0" , forestgreen : "#228B22" , fuchsia : "#FF00FF" , gainsboro : "#DCDCDC" , ghostwhite : "#F8F8FF" , gold : "#FFD700" , goldenrod : "#DAA520" , gray : "#808080" , green : "#008000" , greenyellow : "#ADFF2F" , grey : "#808080" , honeydew : "#F0FFF0" , hotpink : "#FF69B4" ,
@ -552,7 +553,7 @@ orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFE
slategrey : "#708090" , snow : "#FFFAFA" , springgreen : "#00FF7F" , steelblue : "#4682B4" , tan : "#D2B48C" , teal : "#008080" , thistle : "#D8BFD8" , tomato : "#FF6347" , turquoise : "#40E0D0" , violet : "#EE82EE" , windowtext : "windowtext" , wheat : "#F5DEB3" , white : "#FFFFFF" , whitesmoke : "#F5F5F5" , yellow : "#FFFF00" , yellowgreen : "#9ACD32" } } } ) ; CKEDITOR . tools . style . parse . _colors = CKEDITOR . tools . color . namedColors } ) ( ) ; CKEDITOR . dom . comment = function ( a , d ) { "string" == typeof a && ( a = ( d ? d . $ : 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 "\x3c!--" + this . $ . nodeValue + "--\x3e" } } ) ; "use strict" ;
( function ( ) { var a = { } , d = { } , 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 || ( d [ b ] = 1 ) ; CKEDITOR . dom . elementPath = function ( b , f ) { var e = null , k = null , h = [ ] , l = b , q ; f = f || b . getDocument ( ) . getBody ( ) ; l || ( l = f ) ; do if ( l . type == CKEDITOR . NODE _ELEMENT ) { h . push ( l ) ; if ( ! this . lastElement && ( this . lastElement = l , l . is ( CKEDITOR . dtd . $object ) || "false" == l . getAttribute ( "contenteditable" ) ) ) continue ; if ( l . equals ( f ) ) break ; if ( ! k && ( q = l . getName ( ) ,
"true" == l . getAttribute ( "contenteditable" ) ? k = l : ! e && d [ q ] && ( e = l ) , a [ q ] ) ) { if ( q = ! e && "div" == q ) { a : { q = l . getChildren ( ) ; for ( var g = 0 , y= q . count ( ) ; g < y ; g ++ ) { var z = q . getItem ( g ) ; if ( z . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $block [ z . getName ( ) ] ) { q = ! 0 ; break a } } q = ! 1 } q = ! q } q ? e = l : k = l } } while ( l = l . getParent ( ) ) ; k || ( k = f ) ; this . block = e ; this . blockLimit = k ; this . root = f ; this . elements = h } } ) ( ) ;
"true" == l . getAttribute ( "contenteditable" ) ? k = l : ! e && d [ q ] && ( e = l ) , a [ q ] ) ) { if ( q = ! e && "div" == q ) { a : { q = l . getChildren ( ) ; for ( var g = 0 , w= q . count ( ) ; g < w ; g ++ ) { var x = q . getItem ( g ) ; if ( x . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $block [ x . getName ( ) ] ) { q = ! 0 ; break a } } q = ! 1 } q = ! q } q ? e = l : k = l } } while ( l = l . getParent ( ) ) ; k || ( k = f ) ; this . block = e ; this . blockLimit = k ; this . root = f ; this . elements = h } } ) ( ) ;
CKEDITOR . dom . elementPath . prototype = { compare : function ( a ) { var d = this . elements ; a = a && a . elements ; if ( ! a || d . length != a . length ) return ! 1 ; for ( var b = 0 ; b < d . length ; b ++ ) if ( ! d [ b ] . equals ( a [ b ] ) ) return ! 1 ; return ! 0 } , contains : function ( a , d , b ) { var c = 0 , f ; "string" == typeof a && ( f = function ( b ) { return b . getName ( ) == a } ) ; a instanceof CKEDITOR . dom . element ? f = function ( b ) { return b . equals ( a ) } : CKEDITOR . tools . isArray ( a ) ? f = function ( b ) { return - 1 < CKEDITOR . tools . indexOf ( a , b . getName ( ) ) } : "function" == typeof a ? f = a : "object" == typeof a && ( f = function ( b ) { return b . getName ( ) in
a } ) ; var e = this . elements , k = e . length ; d && ( b ? c += 1 : -- k ) ; b && ( e = Array . prototype . slice . call ( e , 0 ) , e . reverse ( ) ) ; for ( ; c < k ; c ++ ) if ( f ( e [ c ] ) ) return e [ c ] ; return null } , isContextFor : function ( a ) { var d ; return a in CKEDITOR . dtd . $block ? ( d = this . contains ( CKEDITOR . dtd . $intermediate ) || this . root . equals ( this . block ) && this . block || this . blockLimit , ! ! d . getDtd ( ) [ a ] ) : ! 0 } , direction : function ( ) { return ( this . block || this . blockLimit || this . root ) . getDirection ( 1 ) } } ;
CKEDITOR . dom . text = function ( a , d ) { "string" == typeof a && ( a = ( d ? d . $ : document ) . createTextNode ( a ) ) ; this . $ = a } ; CKEDITOR . dom . text . prototype = new CKEDITOR . dom . node ;
@ -570,7 +571,7 @@ c(this,"panel"));a=[[l,a]];f([b],d,a);f(h,e,a)}).call(this,a)}});var k="cke_ui_c
[ [ l , a ] ] ) } } ; b . on ( "panelShow" , a ) ; b . on ( "menuShow" , a ) ; b . config . uiColor && b . setUiColor ( b . config . uiColor ) } } ) } ) ( ) ;
( function ( ) { var a = CKEDITOR . dom . element . createFromHtml ( '\x3cdiv style\x3d"width:0;height:0;position:absolute;left:-10000px;border:1px solid;border-color:red blue"\x3e\x3c/div\x3e' , CKEDITOR . document ) ; a . appendTo ( CKEDITOR . document . getHead ( ) ) ; try { var d = a . getComputedStyle ( "border-top-color" ) , b = a . getComputedStyle ( "border-right-color" ) ; CKEDITOR . env . hc = ! ( ! d || d != b ) } catch ( c ) { CKEDITOR . env . hc = ! 1 } a . remove ( ) ; CKEDITOR . env . hc && ( CKEDITOR . env . cssClass += " cke_hc" ) ; CKEDITOR . document . appendStyleText ( ".cke{visibility:hidden;}" ) ;
CKEDITOR . status = "loaded" ; CKEDITOR . fireOnce ( "loaded" ) ; if ( a = CKEDITOR . _ . pending ) for ( delete CKEDITOR . _ . pending , d = 0 ; d < a . length ; d ++ ) CKEDITOR . editor . prototype . constructor . apply ( a [ d ] [ 0 ] , a [ d ] [ 1 ] ) , CKEDITOR . add ( a [ d ] [ 0 ] ) } ) ( ) ; / *
Copyright ( c ) 2003 - 202 1, CKSource - Frederico Knabben . All rights reserved .
Copyright ( c ) 2003 - 202 2, CKSource Holding sp . z o . o . All rights reserved .
For licensing , see LICENSE . md or https : //ckeditor.com/legal/ckeditor-oss-license
* /
CKEDITOR . skin . name = "moono" ; CKEDITOR . skin . ua _editor = "ie,iequirks,ie7,ie8,gecko" ; CKEDITOR . skin . ua _dialog = "ie,iequirks,ie7,ie8" ;
@ -893,14 +894,14 @@ r=[],l,a=d.count()-1;0<=a;a--)(l=d.getItem(a))&&l.is&&l.is("li")&&r.push(l)}e&&e
( b . type != CKEDITOR . NODE _ELEMENT || ! p [ b . getName ( ) ] ) ; ) { if ( f . editable ( ) . equals ( b ) ) { b = ! 1 ; break } b = b . getParent ( ) } b || ( b = c . startPath ( ) . contains ( p ) ) && c . setEndAt ( b , CKEDITOR . POSITION _BEFORE _END ) ; if ( ! b ) { var d = c . getEnclosedNode ( ) ; d && d . type == CKEDITOR . NODE _ELEMENT && d . getName ( ) in p && ( c . setStartAt ( d , CKEDITOR . POSITION _AFTER _START ) , c . setEndAt ( d , CKEDITOR . POSITION _BEFORE _END ) , b = d ) } b && c . startContainer . type == CKEDITOR . NODE _ELEMENT && c . startContainer . getName ( ) in p && ( d = new CKEDITOR . dom . walker ( c ) , d . evaluator = n , c . startContainer =
d . next ( ) ) ; b && c . endContainer . type == CKEDITOR . NODE _ELEMENT && c . endContainer . getName ( ) in p && ( d = new CKEDITOR . dom . walker ( c ) , d . evaluator = n , c . endContainer = d . previous ( ) ) ; if ( b ) return g ( b ) } return 0 } function n ( f ) { return f . type == CKEDITOR . NODE _ELEMENT && f . is ( "li" ) } function x ( f ) { return y ( f ) && z ( f ) } var y = CKEDITOR . dom . walker . whitespaces ( ! 0 ) , z = CKEDITOR . dom . walker . bookmark ( ! 1 , ! 0 ) , u = CKEDITOR . TRISTATE _DISABLED , v = CKEDITOR . TRISTATE _OFF ; CKEDITOR . plugins . add ( "indentlist" , { requires : "indent" , init : function ( f ) { function g ( f ) { k . specificDefinition . apply ( this ,
arguments ) ; this . requiredContent = [ "ul" , "ol" ] ; f . on ( "key" , function ( g ) { var c = f . elementPath ( ) ; if ( "wysiwyg" == f . mode && g . data . keyCode == this . indentKey && c ) { var m = this . getContext ( c ) ; ! m || this . isIndent && CKEDITOR . plugins . indentList . firstItemInPath ( this . context , c , m ) || ( f . execCommand ( this . relatedGlobal ) , g . cancel ( ) ) } } , this ) ; this . jobs [ this . isIndent ? 10 : 30 ] = { refresh : this . isIndent ? function ( f , c ) { var g = this . getContext ( c ) , b = CKEDITOR . plugins . indentList . firstItemInPath ( this . context , c , g ) ; return g && this . isIndent && ! b ? v : u } : function ( f ,
c ) { return ! this . getContext ( c ) || this . isIndent ? u : v } , exec : CKEDITOR . tools . bind ( w , this ) } } var k = CKEDITOR . plugins . indent ; k . registerCommands ( f , { indentlist : new g ( f , "indentlist" , ! 0 ) , outdentlist : new g ( f , "outdentlist" ) } ) ; CKEDITOR . tools . extend ( g . prototype , k . specificDefinition . prototype , { context : { ol : 1 , ul : 1 } } ) } } ) ; CKEDITOR . plugins . indentList = { } ; CKEDITOR . plugins . indentList . firstItemInPath = function ( f , g , k ) { var q = g . contains ( n ) ; k || ( k = g . contains ( f ) ) ; return k && q && q . equals ( k . getFirst ( n ) ) } } ) ( ) ; ( function ( ) { function q ( a , c ) { c = void 0 === c || c ; var b ; if ( c ) b = a . getComputedStyle ( "text-align" ) ; else { for ( ; ! a . hasAttribute || ! a . hasAttribute ( "align" ) && ! a . getStyle ( "text-align" ) ; ) { b = a . getParent ( ) ; if ( ! b ) break ; a = b } b = a . getStyle ( "text-align" ) || a . getAttribute ( "align" ) || "" } b && ( b = b . replace ( /(?:-(?:moz|webkit)-)?(?:start|auto)/i , "" ) ) ; ! b && c && ( b = "rtl" == a . getComputedStyle ( "direction" ) ? "right" : "left" ) ; return b } function h ( a , c , b ) { this . editor = a ; this . name = c ; this . value = b ; this . context = "p" ; c = a . config . justifyClasses ; var f = a . config . enterMode ==
c ) { return ! this . getContext ( c ) || this . isIndent ? u : v } , exec : CKEDITOR . tools . bind ( w , this ) } } var k = CKEDITOR . plugins . indent ; k . registerCommands ( f , { indentlist : new g ( f , "indentlist" , ! 0 ) , outdentlist : new g ( f , "outdentlist" ) } ) ; CKEDITOR . tools . extend ( g . prototype , k . specificDefinition . prototype , { context : { ol : 1 , ul : 1 } } ) } } ) ; CKEDITOR . plugins . indentList = { } ; CKEDITOR . plugins . indentList . firstItemInPath = function ( f , g , k ) { var q = g . contains ( n ) ; k || ( k = g . contains ( f ) ) ; return k && q && q . equals ( k . getFirst ( n ) ) } } ) ( ) ; ( function ( ) { function p ( a , c ) { var b ; if ( c ) b = a . getComputedStyle ( "text-align" ) ; else { for ( ; ! a . hasAttribute || ! a . hasAttribute ( "align" ) && ! a . getStyle ( "text-align" ) ; ) { b = a . getParent ( ) ; if ( ! b ) break ; a = b } b = a . getStyle ( "text-align" ) || a . getAttribute ( "align" ) || "" } b && ( b = b . replace ( /(?:-(?:moz|webkit)-)?(?:start|auto)/i , "" ) ) ; ! b && c && ( b = "rtl" == a . getComputedStyle ( "direction" ) ? "right" : "left" ) ; return b } function h ( a , c , b ) { this . editor = a ; this . name = c ; this . value = b ; this . context = "p" ; c = a . config . justifyClasses ; var f = a . config . enterMode ==
CKEDITOR . ENTER _P ? "p" : "div" ; if ( c ) { switch ( b ) { case "left" : this . cssClassName = c [ 0 ] ; break ; case "center" : this . cssClassName = c [ 1 ] ; break ; case "right" : this . cssClassName = c [ 2 ] ; break ; case "justify" : this . cssClassName = c [ 3 ] } this . cssClassRegex = new RegExp ( "(?:^|\\s+)(?:" + c . join ( "|" ) + ")(?\x3d$|\\s)" ) ; this . requiredContent = f + "(" + this . cssClassName + ")" } else this . requiredContent = f + "{text-align}" ; this . allowedContent = { "caption div h1 h2 h3 h4 h5 h6 p pre td th li" : { propertiesOnly : ! 0 , styles : this . cssClassName ? null : "text-align" ,
classes : this . cssClassName || null } } ; a . config . enterMode == CKEDITOR . ENTER _BR && ( this . allowedContent . div = ! 0 ) } function m ( a ) { var c = a . editor , b = c . createRange ( ) ; b . setStartBefore ( a . data . node ) ; b . setEndAfter ( a . data . node ) ; for ( var f = new CKEDITOR . dom . walker ( b ) , d ; d = f . next ( ) ; ) if ( d . type == CKEDITOR . NODE _ELEMENT ) if ( ! d . equals ( a . data . node ) && d . getDirection ( ) ) b . setStartAfter ( d ) , f = new CKEDITOR . dom . walker ( b ) ; else { var e = c . config . justifyClasses ; e && ( d . hasClass ( e [ 0 ] ) ? ( d . removeClass ( e [ 0 ] ) , d . addClass ( e [ 2 ] ) ) : d . hasClass ( e [ 2 ] ) && ( d . removeClass ( e [ 2 ] ) ,
d . addClass ( e [ 0 ] ) ) ) ; e = d . getStyle ( "text-align" ) ; "left" == e ? d . setStyle ( "text-align" , "right" ) : "right" == e && d . setStyle ( "text-align" , "left" ) } } h . prototype = { exec : function ( a ) { var c = a . getSelection ( ) , b = a . config . enterMode ; if ( c ) { for ( var f = c . createBookmarks ( ) , d = c . getRanges ( ) , e = this . cssClassName , h , g , k= a . config . useComputedState , k = void 0 === k || k , n = d . length - 1 ; 0 <= n ; n -- ) for ( h = d [ n ] . createIterator ( ) , h . enlargeBr = b != CKEDITOR . ENTER _BR ; g = h . getNextParagraph ( b == CKEDITOR . ENTER _P ? "p" : "div" ) ; ) if ( ! g . isReadOnly ( ) ) { var l = g . getName ( ) ,
p ; p = a . activeFilter . check ( l + "{text-align}" ) ; if ( ( l= a . activeFilter . check ( l + "(" + e + ")" ) ) || p ) { g . removeAttribute ( "align" ) ; g . removeStyle ( "text-align" ) ; var m = e && ( g . $ . className = CKEDITOR . tools . ltrim ( g . $ . className . replace ( this . cssClassRegex , "" ) ) ) , r = this . state == CKEDITOR . TRISTATE _OFF && ( ! k|| q ( g , ! 0 ) != this . value ) ; e && l? r ? g . addClass ( e ) : m || g . removeAttribute ( "class" ) : r&& p && g . setStyle ( "text-align" , this . value ) } } a . focus ( ) ; a . forceNextSelectionCheck ( ) ; c . selectBookmarks ( f ) } } , refresh : function ( a , c ) { var b = c . block || c . blockLimit ,
f = b . getName ( ) , d = b . equals ( a . editable ( ) ) , f = this . cssClassName ? a . activeFilter . check ( f + "(" + this . cssClassName + ")" ) : a . activeFilter . check ( f + "{text-align}" ) ; d && ! CKEDITOR . dtd . $list [ c . lastElement . getName ( ) ] ? this . setState ( CKEDITOR . TRISTATE _OFF ) : ! d && f ? this . setState ( q ( b , this . editor . config . useComputedState ) == this . value ? CKEDITOR . TRISTATE _ON : CKEDITOR . TRISTATE _OFF ) : this . setState ( CKEDITOR . TRISTATE _DISABLED ) } } ; CKEDITOR . plugins . add ( "justify" , { init : function ( a ) { if ( ! a . blockless ) { var c = new h ( a , "justifyleft" , "left" ) , b = new h ( a ,
"justifycenter" , "center" ) , f = new h ( a , "justifyright" , "right" ) , d = new h ( a , "justifyblock" , "justify" ) ; a . addCommand ( "justifyleft" , c ) ; a . addCommand ( "justifycenter" , b ) ; a . addCommand ( "justifyright" , f ) ; a . addCommand ( "justifyblock" , d ) ; a . ui . addButton && ( a . ui . addButton ( "JustifyLeft" , { label : a . lang . common . alignLeft , command : "justifyleft" , toolbar : "align,10" } ) , a . ui . addButton ( "JustifyCenter" , { label : a . lang . common . center , command : "justifycenter" , toolbar : "align,20" } ) , a . ui . addButton ( "JustifyRight" , { label : a . lang . common . alignRight ,
command : "justifyright" , toolbar : "align,30" } ) , a . ui . addButton ( "JustifyBlock" , { label : a . lang . common . justify , command : "justifyblock" , toolbar : "align,40" } ) ) ; a . on ( "dirChanged" , m ) } } } ) } ) ( ) ; ( function ( ) { function f ( b , a ) { var c = k . exec ( b ) , d = k . exec ( a ) ; if ( c ) { if ( ! c [ 2 ] && "px" == d [ 2 ] ) return d [ 1 ] ; if ( "px" == c [ 2 ] && ! d [ 2 ] ) return d [ 1 ] + "px" } return a } function m ( b ) { return { elements : { $ : function ( a ) { var c = a . attributes , c = c && c [ "data-cke-realelement" ] , d = l ( b , decodeURIComponent ( c ) ) ; if ( ( c = ( c = c && new CKEDITOR . htmlParser . fragment . fromHtml ( d ) ) && c . children [ 0 ] ) && a . attributes [ "data-cke-resizable" ] ) { var e = ( new h ( a ) ) . rules ; a = c . attributes ; d = e . width ; e = e . height ; d && ( a . width = f ( a . width , d ) ) ; e && ( a . height = f ( a . height , e ) ) } return c } } } }
classes : this . cssClassName || null } } ; a . config . enterMode == CKEDITOR . ENTER _BR && ( this . allowedContent . div = ! 0 ) } function l ( a ) { var c = a . editor , b = c . createRange ( ) ; b . setStartBefore ( a . data . node ) ; b . setEndAfter ( a . data . node ) ; for ( var f = new CKEDITOR . dom . walker ( b ) , d ; d = f . next ( ) ; ) if ( d . type == CKEDITOR . NODE _ELEMENT ) if ( ! d . equals ( a . data . node ) && d . getDirection ( ) ) b . setStartAfter ( d ) , f = new CKEDITOR . dom . walker ( b ) ; else { var e = c . config . justifyClasses ; e && ( d . hasClass ( e [ 0 ] ) ? ( d . removeClass ( e [ 0 ] ) , d . addClass ( e [ 2 ] ) ) : d . hasClass ( e [ 2 ] ) && ( d . removeClass ( e [ 2 ] ) ,
d . addClass ( e [ 0 ] ) ) ) ; e = d . getStyle ( "text-align" ) ; "left" == e ? d . setStyle ( "text-align" , "right" ) : "right" == e && d . setStyle ( "text-align" , "left" ) } } h . prototype = { exec : function ( a ) { var c = a . getSelection ( ) , b = a . config . enterMode ; if ( c ) { for ( var f = c . createBookmarks ( ) , d = c . getRanges ( ) , e = this . cssClassName , h , g , l= a . config . useComputedState , m = d . length - 1 ; 0 <= m ; m -- ) for ( h = d [ m ] . createIterator ( ) , h . enlargeBr = b != CKEDITOR . ENTER _BR ; g = h . getNextParagraph ( b == CKEDITOR . ENTER _P ? "p" : "div" ) ; ) if ( ! g . isReadOnly ( ) ) { var k = g . getName ( ) , n ; n = a . activeFilter . check ( k +
"{text-align}" ) ; if ( ( k= a . activeFilter . check ( k + "(" + e + ")" ) ) || n ) { g . removeAttribute ( "align" ) ; g . removeStyle ( "text-align" ) ; var r = e && ( g . $ . className = CKEDITOR . tools . ltrim ( g . $ . className . replace ( this . cssClassRegex , "" ) ) ) , q = this . state == CKEDITOR . TRISTATE _OFF && ( ! l|| p ( g , ! 0 ) != this . value ) ; e && k? q ? g . addClass ( e ) : r || g . removeAttribute ( "class" ) : q&& n && g . setStyle ( "text-align" , this . value ) } } a . focus ( ) ; a . forceNextSelectionCheck ( ) ; c . selectBookmarks ( f ) } } , refresh : function ( a , c ) { var b = c . block || c . blockLimit , f = b . getName ( ) , d = b . equals ( a . editable ( ) ) ,
f = this . cssClassName ? a . activeFilter . check ( f + "(" + this . cssClassName + ")" ) : a . activeFilter . check ( f + "{text-align}" ) ; d && ! CKEDITOR . dtd . $list [ c . lastElement . getName ( ) ] ? this . setState ( CKEDITOR . TRISTATE _OFF ) : ! d && f ? this . setState ( p ( b , this . editor . config . useComputedState ) == this . value ? CKEDITOR . TRISTATE _ON : CKEDITOR . TRISTATE _OFF ) : this . setState ( CKEDITOR . TRISTATE _DISABLED ) } } ; CKEDITOR . plugins . add ( "justify" , { init : function ( a ) { if ( ! a . blockless ) { var c = new h ( a , "justifyleft" , "left" ) , b = new h ( a , "justifycenter" , "center" ) , f = new h ( a ,
"justifyright" , "right" ) , d = new h ( a , "justifyblock" , "justify" ) ; a . addCommand ( "justifyleft" , c ) ; a . addCommand ( "justifycenter" , b ) ; a . addCommand ( "justifyright" , f ) ; a . addCommand ( "justifyblock" , d ) ; a . ui . addButton && ( a . ui . addButton ( "JustifyLeft" , { label : a . lang . common . alignLeft , command : "justifyleft" , toolbar : "align,10" } ) , a . ui . addButton ( "JustifyCenter" , { label : a . lang . common . center , command : "justifycenter" , toolbar : "align,20" } ) , a . ui . addButton ( "JustifyRight" , { label : a . lang . common . alignRight , command : "justifyright" , toolbar : "align,30" } ) ,
a . ui . addButton ( "JustifyBlock" , { label : a . lang . common . justify , command : "justifyblock" , toolbar : "align,40" } ) ) ; a . on ( "dirChanged" , l ) } } } ) } ) ( ) ; ( function ( ) { function f ( b , a ) { var c = k . exec ( b ) , d = k . exec ( a ) ; if ( c ) { if ( ! c [ 2 ] && "px" == d [ 2 ] ) return d [ 1 ] ; if ( "px" == c [ 2 ] && ! d [ 2 ] ) return d [ 1 ] + "px" } return a } function m ( b ) { return { elements : { $ : function ( a ) { var c = a . attributes , c = c && c [ "data-cke-realelement" ] , d = l ( b , decodeURIComponent ( c ) ) ; if ( ( c = ( c = c && new CKEDITOR . htmlParser . fragment . fromHtml ( d ) ) && c . children [ 0 ] ) && a . attributes [ "data-cke-resizable" ] ) { var e = ( new h ( a ) ) . rules ; a = c . attributes ; d = e . width ; e = e . height ; d && ( a . width = f ( a . width , d ) ) ; e && ( a . height = f ( a . height , e ) ) } return c } } } }
function l ( b , a ) { var c = [ ] , d = /^cke:/i , e = new CKEDITOR . htmlParser . filter ( { elements : { "^" : function ( a ) { d . test ( a . name ) && ( a . name = a . name . replace ( d , "" ) , c . push ( a ) ) } , iframe : function ( a ) { a . children = [ ] } } } ) , n = b . activeFilter , f = new CKEDITOR . htmlParser . basicWriter , g = CKEDITOR . htmlParser . fragment . fromHtml ( a ) ; e . applyTo ( g ) ; n . applyTo ( g ) ; CKEDITOR . tools . array . forEach ( c , function ( a ) { a . name = "cke:" + a . name } ) ; g . writeHtml ( f ) ; return f . getHtml ( ) } var h = CKEDITOR . htmlParser . cssStyle , g = CKEDITOR . tools . cssLength , k = /^((?:\d*(?:\.\d+))|(?:\d+))(.*)?$/i ;
CKEDITOR . plugins . add ( "fakeobjects" , { init : function ( b ) { b . filter . allow ( "img[!data-cke-realelement,src,alt,title](*){*}" , "fakeobjects" ) } , afterInit : function ( b ) { var a = b . dataProcessor ; ( a = a && a . htmlFilter ) && a . addRules ( m ( b ) , { applyToAll : ! 0 } ) } } ) ; CKEDITOR . editor . prototype . createFakeElement = function ( b , a , c , d ) { var e = this . lang . fakeobjects , e = e [ c ] || e . unknown ; a = { "class" : a , "data-cke-realelement" : encodeURIComponent ( b . getOuterHtml ( ) ) , "data-cke-real-node-type" : b . type , alt : e , title : e , align : b . getAttribute ( "align" ) || "" } ; CKEDITOR . env . hc ||
( a . src = CKEDITOR . tools . transparentImageData ) ; c && ( a [ "data-cke-real-element-type" ] = c ) ; d && ( a [ "data-cke-resizable" ] = d , c = new h , d = b . getAttribute ( "width" ) , b = b . getAttribute ( "height" ) , d && ( c . rules . width = g ( d ) ) , b && ( c . rules . height = g ( b ) ) , c . populate ( a ) ) ; return this . document . createElement ( "img" , { attributes : a } ) } ; CKEDITOR . editor . prototype . createFakeParserElement = function ( b , a , c , d ) { var e = this . lang . fakeobjects , e = e [ c ] || e . unknown , f ; f = new CKEDITOR . htmlParser . basicWriter ; b . writeHtml ( f ) ; f = f . getHtml ( ) ; a = { "class" : a , "data-cke-realelement" : encodeURIComponent ( f ) ,
@ -928,7 +929,7 @@ b){var a={img:1,table:1,tbody:1,thead:1,tfoot:1,input:1,select:1,textarea:1},e=b
function ( ) { } ; CKEDITOR . removeAnchorCommand . prototype = { exec : function ( c ) { var b = c . getSelection ( ) , a = b . createBookmarks ( ) , e ; if ( b && ( e = b . getSelectedElement ( ) ) && ( e . getChildCount ( ) ? e . is ( "a" ) : CKEDITOR . plugins . link . tryRestoreFakeAnchor ( c , e ) ) ) e . remove ( 1 ) ; else if ( e = CKEDITOR . plugins . link . getSelectedLink ( c ) ) e . hasAttribute ( "href" ) ? ( e . removeAttributes ( { name : 1 , "data-cke-saved-name" : 1 } ) , e . removeClass ( "cke_anchor" ) ) : e . remove ( 1 ) ; b . selectBookmarks ( a ) } , requiredContent : "a[name]" } ; CKEDITOR . tools . extend ( CKEDITOR . config , { linkShowAdvancedTab : ! 0 ,
linkShowTargetTab : ! 0 , linkDefaultProtocol : "http://" } ) } ) ( ) ; ( function ( ) { function K ( a , l , d , f ) { for ( var e = CKEDITOR . plugins . list . listToArray ( l . root , d ) , g = [ ] , b = 0 ; b < l . contents . length ; b ++ ) { var h = l . contents [ b ] ; ( h = h . getAscendant ( "li" , ! 0 ) ) && ! h . getCustomData ( "list_item_processed" ) && ( g . push ( h ) , CKEDITOR . dom . element . setMarker ( d , h , "list_item_processed" , ! 0 ) ) } for ( var h = l . root . getDocument ( ) , k , c , b = 0 ; b < g . length ; b ++ ) { var p = g [ b ] . getCustomData ( "listarray_index" ) ; k = e [ p ] . parent ; k . is ( this . type ) || ( c = h . createElement ( this . type ) , k . copyAttributes ( c , { start : 1 , type : 1 } ) , c . removeStyle ( "list-style-type" ) ,
e [ p ] . parent = c ) } d = CKEDITOR . plugins . list . arrayToList ( e , d , null , a . config . enterMode ) ; for ( var m , e = d . listNode . getChildCount ( ) , b = 0 ; b < e && ( m = d . listNode . getChild ( b ) ) ; b ++ ) m . getName ( ) == this . type && f . push ( m ) ; d . listNode . replace ( l . root ) ; a . fire ( "contentDomInvalidated" ) } function L ( a , l , d ) { var f = l . contents , e = l . root . getDocument ( ) , g = [ ] ; if ( 1 == f . length && f [ 0 ] . equals ( l . root ) ) { var b = e . createElement ( "div" ) ; f [ 0 ] . moveChildren && f [ 0 ] . moveChildren ( b ) ; f [ 0 ] . append ( b ) ; f [ 0 ] = b } l = l . contents [ 0 ] . getParent ( ) ; for ( b = 0 ; b < f . length ; b ++ ) l = l . getCommonAncestor ( f [ b ] . getParent ( ) ) ;
a = a . config . useComputedState ; var h , k ; a = void 0 === a || a ; for ( b = 0 ; b < f . length ; b ++ ) for ( var c = f [ b ] , p ; p = c . getParent ( ) ; ) { if ( p . equals ( l ) ) { g . push ( c ) ; ! k && c . getDirection ( ) && ( k = 1 ) ; c = c . getDirection ( a ) ; null !== h && ( h = h && h != c ? null : c ) ; break } c = p } if ( ! ( 1 > g . length ) ) { f = g [ g . length - 1 ] . getNext ( ) ; b = e . createElement ( this . type ) ; for ( d . push ( b ) ; g . length ; ) d = g . shift ( ) , a = e . createElement ( "li" ) , c = d , c . is ( "pre" ) || M . test ( c . getName ( ) ) || "false" == c . getAttribute ( "contenteditable" ) ? d . appendTo ( a ) : ( d . copyAttributes ( a ) , h && d . getDirection ( ) && ( a . removeStyle ( "direction" ) ,
a = a . config . useComputedState ; for ( var h , k , b = 0 ; b < f . length ; b ++ ) for ( var c = f [ b ] , p ; p = c . getParent ( ) ; ) { if ( p . equals ( l ) ) { g . push ( c ) ; ! k && c . getDirection ( ) && ( k = 1 ) ; c = c . getDirection ( a ) ; null !== h && ( h = h && h != c ? null : c ) ; break } c = p } if ( ! ( 1 > g . length ) ) { f = g [ g . length - 1 ] . getNext ( ) ; b = e . createElement ( this . type ) ; for ( d . push ( b ) ; g . length ; ) d = g . shift ( ) , a = e . createElement ( "li" ) , c = d , c . is ( "pre" ) || M . test ( c . getName ( ) ) || "false" == c . getAttribute ( "contenteditable" ) ? d . appendTo ( a ) : ( d . copyAttributes ( a ) , h && d . getDirection ( ) && ( a . removeStyle ( "direction" ) ,
a . removeAttribute ( "dir" ) ) , d . moveChildren ( a ) , d . remove ( ) ) , a . appendTo ( b ) ; h && k && b . setAttribute ( "dir" , h ) ; f ? b . insertBefore ( f ) : b . appendTo ( l ) } } function N ( a , l , d ) { function f ( b ) { if ( ! ( ! ( c = k [ b ? "getFirst" : "getLast" ] ( ) ) || c . is && c . isBlockBoundary ( ) || ! ( p = l . root [ b ? "getPrevious" : "getNext" ] ( CKEDITOR . dom . walker . invisible ( ! 0 ) ) ) || p . is && p . isBlockBoundary ( { br : 1 } ) ) ) a . document . createElement ( "br" ) [ b ? "insertBefore" : "insertAfter" ] ( c ) } for ( var e = CKEDITOR . plugins . list . listToArray ( l . root , d ) , g = [ ] , b = 0 ; b < l . contents . length ; b ++ ) { var h =
l . contents [ b ] ; ( h = h . getAscendant ( "li" , ! 0 ) ) && ! h . getCustomData ( "list_item_processed" ) && ( g . push ( h ) , CKEDITOR . dom . element . setMarker ( d , h , "list_item_processed" , ! 0 ) ) } h = null ; for ( b = 0 ; b < g . length ; b ++ ) h = g [ b ] . getCustomData ( "listarray_index" ) , e [ h ] . indent = - 1 ; for ( b = h + 1 ; b < e . length ; b ++ ) if ( e [ b ] . indent > e [ b - 1 ] . indent + 1 ) { g = e [ b - 1 ] . indent + 1 - e [ b ] . indent ; for ( h = e [ b ] . indent ; e [ b ] && e [ b ] . indent >= h ; ) e [ b ] . indent += g , b ++ ; b -- } var k = CKEDITOR . plugins . list . arrayToList ( e , d , null , a . config . enterMode , l . root . getAttribute ( "dir" ) ) . listNode , c , p ;
f ( ! 0 ) ; f ( ) ; k . replace ( l . root ) ; a . fire ( "contentDomInvalidated" ) } function C ( a , l ) { this . name = a ; this . context = this . type = l ; this . allowedContent = l + " li" ; this . requiredContent = l } function F ( a , l , d , f ) { for ( var e , g ; e = a [ f ? "getLast" : "getFirst" ] ( O ) ; ) ( g = e . getDirection ( 1 ) ) !== l . getDirection ( 1 ) && e . setAttribute ( "dir" , g ) , e . remove ( ) , d ? e [ f ? "insertBefore" : "insertAfter" ] ( d ) : l . append ( e , f ) , d = e } function G ( a ) { function l ( d ) { var f = a [ d ? "getPrevious" : "getNext" ] ( t ) ; f && f . type == CKEDITOR . NODE _ELEMENT && f . is ( a . getName ( ) ) && ( F ( a , f , null , ! d ) , a . remove ( ) ,
@ -970,22 +971,22 @@ null};k.prototype={onKeydown:function(a){var b=a.data.getKey();if(229!==b)if(-1<
! 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 } , activateInputEventListener : function ( ) { this . ignoreInputEvent = ! 1 } , 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 ) ; a . on ( "afterPaste" , c . activateInputEventListener , 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 m = CKEDITOR . plugins . undo . KeyEventsStack = function ( ) { this . stack = [ ] } ; m . prototype = { push : function ( a ) { a = this . stack . push ( { keyCode : a , inputs : 0 } ) ; return this . stack [ a - 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 x ( a ) { function d ( a ) { var b = ! 1 ; h . attachListener ( h , "keydown" , function ( ) { var d = c . getBody ( ) . getElementsByTag ( a ) ; if ( ! b ) { for ( var e= 0 ; e < d . count ( ) ; e ++ ) d . getItem ( e ) . setCustomData ( "retain" , ! 0 ) ; b = ! 0 } } , null , null , 1 ) ; h . attachListener ( h , "keyup" , function ( ) { var e = c . getElementsByTag ( a ) ; b && ( 1 == e. count ( ) && ! e . getItem ( 0 ) . getCustomData ( "retain" ) && CKEDITOR . tools . isEmpty ( e . getItem ( 0 ) . getAttributes ( ) ) && e . getItem ( 0 ) . remove ( 1 ) , b = ! 1 ) } ) } var b = this . editor ; if ( b && ! b . isDetached ( ) ) { var c = a . document , f= c . body , e = c . getElementById ( "cke_actscrpt" ) ;
e&& e . parentNode . removeChild ( e ) ; ( e = c . getElementById ( "cke_shimscrpt" ) ) && e. parentNode . removeChild ( e ) ; ( e = c . getElementById ( "cke_basetagscrpt" ) ) && e. parentNode . removeChild ( e ) ; f . contentEditable = ! 0 ; CKEDITOR . env . ie && ( f. hideFocus = ! 0 , f . disabled = ! 0 , f . removeAttribute ( "disabled" ) ) ; delete this . _ . isLoadingData ; this . $ = f ; c = new CKEDITOR . dom . document ( c ) ; this . setup ( ) ; this . fixInitialSelection ( ) ; var h = this ; CKEDITOR . env . ie && ! CKEDITOR . env . edge && c . getDocumentElement ( ) . addClass ( c . $ . compatMode ) ; CKEDITOR . env . ie && ! CKEDITOR . env . edge &&
b . enterMode != CKEDITOR . ENTER _P ? d ( "p" ) : CKEDITOR . env . edge && 15 > CKEDITOR . env . version && b . enterMode != CKEDITOR . ENTER _DIV && d ( "div" ) ; if ( CKEDITOR . env . webkit || CKEDITOR . env . ie && 10 < CKEDITOR . env . version ) c . getDocumentElement ( ) . on ( "mousedown" , function ( a ) { a . data . getTarget ( ) . is ( "html" ) && setTimeout ( function ( ) { b . editable ( ) . focus ( ) } ) } ) ; y ( b ) ; try { b . document . $ . execCommand ( "2D-position" , ! 1 , ! 0 ) } catch ( l ) { } ( CKEDITOR . env . gecko || CKEDITOR . env . ie && "CSS1Compat" == b . document . $ . compatMode ) && this . attachListener ( this , "keydown" , function ( a ) { var c =
a . data . getKeystroke ( ) ; if ( 33 == c || 34 == c ) if ( CKEDITOR . env . ie ) setTimeout ( function ( ) { b . getSelection ( ) . scrollIntoView ( ) } , 0 ) ; else if ( b . window . $ . innerHeight > this . $ . offsetHeight ) { var e= b . createRange ( ) ; e [ 33 == c ? "moveToElementEditStart" : "moveToElementEditEnd" ] ( this ) ; e . select ( ) ; a . data . preventDefault ( ) } } ) ; CKEDITOR . env . ie && this . attachListener ( c , "blur" , function ( ) { try { c . $ . selection . empty ( ) } catch ( a ) { } } ) ; CKEDITOR . env . iOS && this . attachListener ( c , "touchend" , function ( ) { a . focus ( ) } ) ; f = b . document . getElementsByTag ( "title" ) . getItem ( 0 ) ;
f. data ( "cke-title" , f . getText ( ) ) ; CKEDITOR . env . ie && ( b . document . $ . title = this . _ . docTitle ) ; CKEDITOR . tools . setTimeout ( function ( ) { "unloaded" == this . status && ( this . status = "ready" ) ; b . fire ( "contentDom" ) ; this . _ . isPendingFocus && ( b . focus ( ) , this . _ . isPendingFocus = ! 1 ) ; setTimeout ( function ( ) { b . fire ( "dataReady" ) } , 0 ) } , 0 , this ) } } function y ( a ) { function d ( ) { var c ; a . editable ( ) . attachListener ( a , "selectionChange" , function ( ) { var d = a . getSelection ( ) . getSelectedElement ( ) ; d && ( c && ( c . detachEvent ( "onresizestart" , b ) , c = null ) , d . $ . attachEvent ( "onresizestart" ,
b ) , c = d . $ ) } ) } function b ( a ) { a . returnValue = ! 1 } if ( CKEDITOR . env . gecko ) try { var c = a . document . $ ; c . execCommand ( "enableObjectResizing" , ! 1 , ! a . config . disableObjectResizing ) ; c . execCommand ( "enableInlineTableEditing" , ! 1 , ! a . config . disableNativeTableHandles ) } catch ( f ) { } else CKEDITOR . env . ie && 11 > CKEDITOR . env . version && a . config . disableObjectResizing && d ( ) } function z ( ) { var a = [ ] ; if ( 8 <= CKEDITOR . document . $ . documentMode ) { a . push ( "html.CSS1Compat [contenteditable\x3dfalse]{min-height:0 !important}" ) ; var d = [ ] , b ; for ( b in CKEDITOR . dtd . $removeEmpty ) d . push ( "html.CSS1Compat " +
b + "[contenteditable\x3dfalse]" ) ; a . push ( d . join ( "," ) + "{display:inline-block}" ) } else CKEDITOR . env . gecko && ( a . push ( "html{height:100% !important}" ) , a . push ( "img:-moz-broken{-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}" ) ) ; a . push ( "html{cursor:text;*cursor:auto}" ) ; a . push ( "img,input,textarea{cursor:default}" ) ; return a . join ( "\n" ) } var n ; CKEDITOR . plugins . add ( "wysiwygarea" , { init : function ( a ) { a . config . fullPage && a . addFeature ( { allowedContent : "html head title; style [media,type]; body (*)[id]; meta link [*]" ,
requiredContent : "body" } ) ; a . addMode ( "wysiwyg" , function ( d ) { function b ( b ) { b && b . removeListener ( ) ; if ( ! a . isDestroyed ( ) && ! a . isDetached ( ) && ( a . editable ( new n ( a , g . getFrameDocument ( ) . getBody ( ) ) ) , a . setData ( a . getData ( 1 ) , d ) , v) ) { if ( w ) a . on ( "mode" , c , { iframe : g , editor : a , callback : d } ) ; a . on ( "mode" , function ( ) { a . status = "ready" } ) ; f ( ) } } function c ( a ) { a && a . removeListener ( ) ; g . on ( "load" , function ( ) { q&& ( q = ! 1 , l ( ) ) } ) } function f ( ) { r = new MutationObserver ( function ( a ) { CKEDITOR . tools . array . forEach ( a , e ) } ) ; r . observe ( a . config . observableParent ,
{ childList : ! 0 , subtree : ! 0 } ) } function e ( a ) { "childList" === a . type && 0 !== a . addedNodes . length && CKEDITOR . tools . array . forEach ( a . addedNodes , h ) } function h ( b ) { b . contains && b . contains ( a . container . $ ) && ( w? q = ! 0 : l ( ) ) } function l ( ) { var b = a . getData ( ! 1 ) , c ; a . editable ( ) . preserveIframe = ! 0 ; a . editable ( null ) ; c = new n ( a , g . getFrameDocument ( ) . getBody ( ) ) ; a . editable ( c ) ; a . status = "recreating" ; a . setData ( b , { callback : d , internal : ! 1 , noSnapshot : ! 1 } ) } var k = "document.open();" + ( CKEDITOR . env . ie ? "(" + CKEDITOR . tools . fixDomain + ")();" : "" ) + "document.close();" ,
k = CKEDITOR . env . air ? "javascript:void(0)" : CKEDITOR . env . ie && ! CKEDITOR . env . edge ? "javascript:void(function(){" + encodeURIComponent ( k ) + "}())" : "" , g = CKEDITOR . dom . element . createFromHtml ( '\x3ciframe src\x3d"' + k + '" frameBorder\x3d"0"\x3e\x3c/iframe\x3e' ) ; g . setStyles ( { width : "100%" , height : "100%" } ) ; g . addClass ( "cke_wysiwyg_frame" ) . addClass ( "cke_reset" ) ; k = a . ui . space ( "contents" ) ; k. append ( g ) ; var u = CKEDITOR . env . ie && ! CKEDITOR . env . edge || CKEDITOR . env . gecko ; if ( u ) g . on ( "load" , b ) ; var m= a . title , p = a . fire ( "ariaEditorHelpLabel" ,
{ } ) . label , q= ! 1 , w = CKEDITOR . env . ie && 11 === CKEDITOR . env . version , v= ! ! window . MutationObserver , r ; m && ( CKEDITOR . env . ie && p&& ( m += ", " + p ) , g . setAttribute ( "title" , m) ) ; if ( p ) { var m = CKEDITOR . tools . getNextId ( ) , t = CKEDITOR . dom . element . createFromHtml ( '\x3cspan id\x3d"' + m+ '" class\x3d"cke_voice_label"\x3e' + p + "\x3c/span\x3e" ) ; k . append ( t , 1 ) ; g . setAttribute ( "aria-describedby" , m ) } a . on ( "beforeModeUnload" , function ( a ) { a . removeListener ( ) ; t&& t . remove ( ) ; v && r . disconnect ( ) } ) ; g . setAttributes ( { tabIndex : a . tabIndex , allowTransparency : "true" } ) ;
! u && b ( ) ; a . fire ( "ariaWidget" , g ) } ) } } ) ; CKEDITOR . editor . prototype . addContentsCss = function ( a ) { var d = this . config , b = d . contentsCss ; CKEDITOR . tools . isArray ( b ) || ( d . contentsCss = b ? [ b ] : [ ] ) ; d . contentsCss . push ( a ) } ; n = CKEDITOR . tools . createClass ( { $ : function ( ) { this . base . apply ( this , arguments ) ; this . _ . frameLoadedHandler = CKEDITOR . tools . addFunction ( function ( a ) { CKEDITOR . tools . setTimeout ( x , 0 , this , a ) } , this ) ; this . _ . docTitle = this . getWindow ( ) . getFrame ( ) . getAttribute ( "title" ) } , base : CKEDITOR . editable , proto : { preserveIframe : ! 1 , setData : function ( a ,
d ) { var b = this . editor ; if ( d ) this . setHtml ( a ) , this . fixInitialSelection ( ) , b . fire ( "dataReady" ) ; else { this . _ . isLoadingData = ! 0 ; b . _ . dataStore = { id : 1 } ; var c = b . config , f= c . fullPage , e = c . docType , h = CKEDITOR . tools . buildStyleHtml ( z ( ) ) . replace ( /<style>/ , '\x3cstyle data-cke-temp\x3d"1"\x3e' ) ; f || ( h += CKEDITOR . tools . buildStyleHtml ( b . config . contentsCss ) ) ; var l = c . baseHref ? '\x3cbase href\x3d"' + c . baseHref + '" data-cke-temp\x3d"1" /\x3e' : "" ; f && ( a = a . replace ( /<!DOCTYPE[^>]*>/i , function ( a ) { b . docType = e = a ; return "" } ) . replace ( /<\?xml\s[^\?]*\?>/i ,
function ( a ) { b . xmlDeclaration = a ; return "" } ) ) ; a = b . dataProcessor . toHtml ( a ) ; f ? ( /<body[\s|>]/ . test ( a ) || ( a = "\x3cbody\x3e" + a ) , /<html[\s|>]/ . test ( a ) || ( a = "\x3chtml\x3e" + a + "\x3c/html\x3e" ) , /<head[\s|>]/ . test ( a ) ? /<title[\s|>]/ . test ( a ) || ( a = a . replace ( /<head[^>]*>/ , "$\x26\x3ctitle\x3e\x3c/title\x3e" ) ) : a = a . replace ( /<html[^>]*>/ , "$\x26\x3chead\x3e\x3ctitle\x3e\x3c/title\x3e\x3c/head\x3e" ) , l && ( a = a . replace ( /<head[^>]*?>/ , "$\x26" + l ) ) , a = a . replace ( /<\/head\s*>/ , h + "$\x26" ) , a = e + a ) : a = c . docType + '\x3chtml dir\x3d"' + c . contentsLangDirection +
'" lang\x3d"' + ( c . contentsLanguage || b . langCode ) + '"\x3e\x3chead\x3e\x3ctitle\x3e' + this . _ . docTitle + "\x3c/title\x3e" + l + h + "\x3c/head\x3e\x3cbody" + ( c . bodyId ? ' id\x3d"' + c . bodyId + '"' : "" ) + ( c . bodyClass ? ' class\x3d"' + c . bodyClass + '"' : "" ) + "\x3e" + a + "\x3c/body\x3e\x3c/html\x3e" ; CKEDITOR . env . gecko && ( a = a . replace ( /<body/ , '\x3cbody contenteditable\x3d"true" ' ) , 2E4 > CKEDITOR . env . version && ( a = a . replace ( /<body[^>]*>/ , "$\x26\x3c!-- cke-content-start --\x3e" ) ) ) ; c = '\x3cscript id\x3d"cke_actscrpt" type\x3d"text/javascript"' +
( CKEDITOR . env . ie ? ' defer\x3d"defer" ' : "" ) + "\x3evar wasLoaded\x3d0;function onload(){if(!wasLoaded)window.parent.CKEDITOR \x26\x26 window.parent.CKEDITOR.tools.callFunction(" + this . _ . frameLoadedHandler + ",window);wasLoaded\x3d1;}" + ( CKEDITOR . env . ie ? "onload();" : 'document.addEventListener("DOMContentLoaded", onload, false );' ) + "\x3c/script\x3e" ; CKEDITOR . env . ie && 9 > CKEDITOR . env . version && ( c += '\x3cscript id\x3d"cke_shimscrpt"\x3ewindow.parent.CKEDITOR.tools.enableHtml5Elements(document)\x3c/script\x3e' ) ; l &&
CKEDITOR . env . ie && 10 > CKEDITOR . env . version && ( c += '\x3cscript id\x3d"cke_basetagscrpt"\x3evar baseTag \x3d document.querySelector( "base" );baseTag.href \x3d baseTag.href;\x3c/script\x3e' ) ; a = a . replace ( /(?=\s*<\/(:?head)>)/ , c ) ; this . clearCustomData ( ) ; this . clearListeners ( ) ; b . fire ( "contentDomUnload" ) ; var k = this . getDocument ( ) ; try { k. write ( a ) } catch ( g ) { setTimeout ( function ( ) { k . write ( a ) } , 0 ) } } } , getData : function ( a ) { if ( a ) return this . getHtml ( ) ; a = this . editor ; var d = a . config , b = d . fullPage , c = b && a . docType , f = b && a . xmlDeclaration ,
e = this . getDocument ( ) , b = b ? e . getDocumentElement ( ) . getOuterHtml ( ) : e . getBody ( ) . getHtml ( ) ; CKEDITOR . env . gecko && d . enterMode != CKEDITOR . ENTER _BR && ( b = b . replace ( /<br>(?=\s*(:?$|<\/body>))/ , "" ) ) ; b = a . dataProcessor . toDataFormat ( b ) ; f&& ( b = f + "\n" + b ) ; c && ( b = c + "\n" + b ) ; return b } , focus : function ( ) { this . _ . isLoadingData ? this . _ . isPendingFocus = ! 0 : n . baseProto . focus . call ( this ) } , detach : function ( ) { if ( ! this . preserveIframe ) { var a = this . editor , d = a . document , a = a . container . findOne ( "iframe.cke_wysiwyg_frame" ) ; n . baseProto . detach . call ( this ) ;
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 v ( a ) { function d ( a ) { var b = ! 1 ; h . attachListener ( h , "keydown" , function ( ) { var f = c . getBody ( ) . getElementsByTag ( a ) ; if ( ! b ) { for ( var d= 0 ; d < f . count ( ) ; d ++ ) f . getItem ( d ) . setCustomData ( "retain" , ! 0 ) ; b = ! 0 } } , null , null , 1 ) ; h . attachListener ( h , "keyup" , function ( ) { var d = c . getElementsByTag ( a ) ; b && ( 1 == d. count ( ) && ! d . getItem ( 0 ) . getCustomData ( "retain" ) && CKEDITOR . tools . isEmpty ( d . getItem ( 0 ) . getAttributes ( ) ) && d . getItem ( 0 ) . remove ( 1 ) , b = ! 1 ) } ) } var b = this . editor ; if ( b && ! b . isDetached ( ) ) { var c = a . document , e= c . body , f = c . getElementById ( "cke_actscrpt" ) ;
f&& f . parentNode . removeChild ( f ) ; ( f = c . getElementById ( "cke_shimscrpt" ) ) && f. parentNode . removeChild ( f ) ; ( f = c . getElementById ( "cke_basetagscrpt" ) ) && f. parentNode . removeChild ( f ) ; e . contentEditable = ! 0 ; CKEDITOR . env . ie && ( e. hideFocus = ! 0 , e . disabled = ! 0 , e . removeAttribute ( "disabled" ) ) ; delete this . _ . isLoadingData ; this . $ = e ; c = new CKEDITOR . dom . document ( c ) ; this . setup ( ) ; this . fixInitialSelection ( ) ; var h = this ; CKEDITOR . env . ie && ! CKEDITOR . env . edge && c . getDocumentElement ( ) . addClass ( c . $ . compatMode ) ; CKEDITOR . env . ie && ! CKEDITOR . env . edge &&
b . enterMode != CKEDITOR . ENTER _P ? d ( "p" ) : CKEDITOR . env . edge && 15 > CKEDITOR . env . version && b . enterMode != CKEDITOR . ENTER _DIV && d ( "div" ) ; if ( CKEDITOR . env . webkit || CKEDITOR . env . ie && 10 < CKEDITOR . env . version ) c . getDocumentElement ( ) . on ( "mousedown" , function ( a ) { a . data . getTarget ( ) . is ( "html" ) && setTimeout ( function ( ) { b . editable ( ) . focus ( ) } ) } ) ; w ( b ) ; try { b . document . $ . execCommand ( "2D-position" , ! 1 , ! 0 ) } catch ( g ) { } ( CKEDITOR . env . gecko || CKEDITOR . env . ie && "CSS1Compat" == b . document . $ . compatMode ) && this . attachListener ( this , "keydown" , function ( a ) { var c =
a . data . getKeystroke ( ) ; if ( 33 == c || 34 == c ) if ( CKEDITOR . env . ie ) setTimeout ( function ( ) { b . getSelection ( ) . scrollIntoView ( ) } , 0 ) ; else if ( b . window . $ . innerHeight > this . $ . offsetHeight ) { var d= b . createRange ( ) ; d [ 33 == c ? "moveToElementEditStart" : "moveToElementEditEnd" ] ( this ) ; d . select ( ) ; a . data . preventDefault ( ) } } ) ; CKEDITOR . env . ie && this . attachListener ( c , "blur" , function ( ) { try { c . $ . selection . empty ( ) } catch ( a ) { } } ) ; CKEDITOR . env . iOS && this . attachListener ( c , "touchend" , function ( ) { a . focus ( ) } ) ; e = b . document . getElementsByTag ( "title" ) . getItem ( 0 ) ;
e. data ( "cke-title" , e . getText ( ) ) ; CKEDITOR . env . ie && ( b . document . $ . title = this . _ . docTitle ) ; CKEDITOR . tools . setTimeout ( function ( ) { "unloaded" == this . status && ( this . status = "ready" ) ; b . fire ( "contentDom" ) ; this . _ . isPendingFocus && ( b . focus ( ) , this . _ . isPendingFocus = ! 1 ) ; setTimeout ( function ( ) { b . fire ( "dataReady" ) } , 0 ) } , 0 , this ) } } function w ( a ) { function d ( ) { var c ; a . editable ( ) . attachListener ( a , "selectionChange" , function ( ) { var d = a . getSelection ( ) . getSelectedElement ( ) ; d && ( c && ( c . detachEvent ( "onresizestart" , b ) , c = null ) , d . $ . attachEvent ( "onresizestart" ,
b ) , c = d . $ ) } ) } function b ( a ) { a . returnValue = ! 1 } if ( CKEDITOR . env . gecko ) try { var c = a . document . $ ; c . execCommand ( "enableObjectResizing" , ! 1 , ! a . config . disableObjectResizing ) ; c . execCommand ( "enableInlineTableEditing" , ! 1 , ! a . config . disableNativeTableHandles ) } catch ( e ) { } else CKEDITOR . env . ie && 11 > CKEDITOR . env . version && a . config . disableObjectResizing && d ( ) } function x ( ) { var a = [ ] ; if ( 8 <= CKEDITOR . document . $ . documentMode ) { a . push ( "html.CSS1Compat [contenteditable\x3dfalse]{min-height:0 !important}" ) ; var d = [ ] , b ; for ( b in CKEDITOR . dtd . $removeEmpty ) d . push ( "html.CSS1Compat " +
b + "[contenteditable\x3dfalse]" ) ; a . push ( d . join ( "," ) + "{display:inline-block}" ) } else CKEDITOR . env . gecko && ( a . push ( "html{height:100% !important}" ) , a . push ( "img:-moz-broken{-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}" ) ) ; a . push ( "html{cursor:text;*cursor:auto}" ) ; a . push ( "img,input,textarea{cursor:default}" ) ; return a . join ( "\n" ) } var l ; CKEDITOR . plugins . add ( "wysiwygarea" , { init : function ( a ) { a . config . fullPage && a . addFeature ( { allowedContent : "html head title; style [media,type]; body (*)[id]; meta link [*]" ,
requiredContent : "body" } ) ; a . addMode ( "wysiwyg" , function ( d ) { function b ( b ) { b && b . removeListener ( ) ; if ( ! a . isDestroyed ( ) && ! a . isDetached ( ) && ( a . editable ( new l ( a , g . getFrameDocument ( ) . getBody ( ) ) ) , a . setData ( a . getData ( 1 ) , d ) , t) ) { if ( u ) a . on ( "mode" , c , { iframe : g , editor : a , callback : d } ) ; a . on ( "mode" , function ( ) { a . status = "ready" } ) ; e ( ) } } function c ( a ) { a && a . removeListener ( ) ; g . on ( "load" , function ( ) { p&& ( p = ! 1 , f ( ) ) } ) } function e ( ) { m = new MutationObserver ( function ( b ) { for ( var c = 0 ; c < b . length ; c ++ ) { var d = b [ c ] ; if ( "childList" === d . type && 0 !==
d . addedNodes . length ) for ( var e = 0 ; e < d . addedNodes . length ; e ++ ) { var g = d . addedNodes [ e ] ; g . contains && g . contains ( a . container . $ ) && ( u? p = ! 0 : f ( ) ) } } } ) ; m . observe ( a . config . observableParent , { childList : ! 0 , subtree : ! 0 } ) } function f ( ) { var b = a . getData ( ! 1 ) , c ; a . editable ( ) . preserveIframe = ! 0 ; a . editable ( null ) ; c = new l ( a , g . getFrameDocument ( ) . getBody ( ) ) ; a . editable ( c ) ; a . status = "recreating" ; a . setData ( b , { callback : d , internal : ! 1 , noSnapshot : ! 1 } ) } var h = "document.open();" + ( CKEDITOR . env . ie ? "(" + CKEDITOR . tools . fixDomain + ")();" : "" ) + "document.close();" ,
h = CKEDITOR . env . air ? "javascript:void(0)" : CKEDITOR . env . ie && ! CKEDITOR . env . edge ? "javascript:void(function(){" + encodeURIComponent ( h ) + "}())" : "" , g = CKEDITOR . dom . element . createFromHtml ( '\x3ciframe src\x3d"' + h + '" frameBorder\x3d"0"\x3e\x3c/iframe\x3e' ) ; g . setStyles ( { width : "100%" , height : "100%" } ) ; g . addClass ( "cke_wysiwyg_frame" ) . addClass ( "cke_reset" ) ; h = a . ui . space ( "contents" ) ; h. append ( g ) ; var r = CKEDITOR . env . ie && ! CKEDITOR . env . edge || CKEDITOR . env . gecko ; if ( r ) g . on ( "load" , b ) ; var k= a . title , n = a . fire ( "ariaEditorHelpLabel" ,
{ } ) . label , p= ! 1 , u = CKEDITOR . env . ie && 11 === CKEDITOR . env . version , t= ! ! window . MutationObserver , m ; k && ( CKEDITOR . env . ie && n&& ( k += ", " + n ) , g . setAttribute ( "title" , k) ) ; if ( n ) { var k = CKEDITOR . tools . getNextId ( ) , q = CKEDITOR . dom . element . createFromHtml ( '\x3cspan id\x3d"' + k+ '" class\x3d"cke_voice_label"\x3e' + n + "\x3c/span\x3e" ) ; h . append ( q , 1 ) ; g . setAttribute ( "aria-describedby" , k ) } a . on ( "beforeModeUnload" , function ( a ) { a . removeListener ( ) ; q&& q . remove ( ) ; t && m . disconnect ( ) } ) ; a . on ( "destroy" , function ( ) { m && m . disconnect ( ) } ) ; g . setAttributes ( { tabIndex : a . tabIndex ,
allowTransparency : "true" } ) ; ! r && b ( ) ; a . fire ( "ariaWidget" , g ) } ) } } ) ; CKEDITOR . editor . prototype . addContentsCss = function ( a ) { var d = this . config , b = d . contentsCss ; CKEDITOR . tools . isArray ( b ) || ( d . contentsCss = b ? [ b ] : [ ] ) ; d . contentsCss . push ( a ) } ; l = CKEDITOR . tools . createClass ( { $ : function ( ) { this . base . apply ( this , arguments ) ; this . _ . frameLoadedHandler = CKEDITOR . tools . addFunction ( function ( a ) { CKEDITOR . tools . setTimeout ( v , 0 , this , a ) } , this ) ; this . _ . docTitle = this . getWindow ( ) . getFrame ( ) . getAttribute ( "title" ) } , base : CKEDITOR . editable , proto : { preserveIframe : ! 1 ,
setData : function ( a , d ) { var b = this . editor ; if ( d ) this . setHtml ( a ) , this . fixInitialSelection ( ) , b . fire ( "dataReady" ) ; else { this . _ . isLoadingData = ! 0 ; b . _ . dataStore = { id : 1 } ; var c = b . config , e= c . fullPage , f = c . docType , h = CKEDITOR . tools . buildStyleHtml ( x ( ) ) . replace ( /<style>/ , '\x3cstyle data-cke-temp\x3d"1"\x3e' ) ; e || ( h += CKEDITOR . tools . buildStyleHtml ( b . config . contentsCss ) ) ; var g = c . baseHref ? '\x3cbase href\x3d"' + c . baseHref + '" data-cke-temp\x3d"1" /\x3e' : "" ; e && ( a = a . replace ( /<!DOCTYPE[^>]*>/i , function ( a ) { b . docType = f = a ; return "" } ) . replace ( /<\?xml\s[^\?]*\?>/i ,
function ( a ) { b . xmlDeclaration = a ; return "" } ) ) ; a = b . dataProcessor . toHtml ( a ) ; e ? ( /<body[\s|>]/ . test ( a ) || ( a = "\x3cbody\x3e" + a ) , /<html[\s|>]/ . test ( a ) || ( a = "\x3chtml\x3e" + a + "\x3c/html\x3e" ) , /<head[\s|>]/ . test ( a ) ? /<title[\s|>]/ . test ( a ) || ( a = a . replace ( /<head[^>]*>/ , "$\x26\x3ctitle\x3e\x3c/title\x3e" ) ) : a = a . replace ( /<html[^>]*>/ , "$\x26\x3chead\x3e\x3ctitle\x3e\x3c/title\x3e\x3c/head\x3e" ) , g && ( a = a . replace ( /<head[^>]*?>/ , "$\x26" + g ) ) , a = a . replace ( /<\/head\s*>/ , h + "$\x26" ) , a = f + a ) : a = c . docType + '\x3chtml dir\x3d"' + c . contentsLangDirection +
'" lang\x3d"' + ( c . contentsLanguage || b . langCode ) + '"\x3e\x3chead\x3e\x3ctitle\x3e' + this . _ . docTitle + "\x3c/title\x3e" + g + h + "\x3c/head\x3e\x3cbody" + ( c . bodyId ? ' id\x3d"' + c . bodyId + '"' : "" ) + ( c . bodyClass ? ' class\x3d"' + c . bodyClass + '"' : "" ) + "\x3e" + a + "\x3c/body\x3e\x3c/html\x3e" ; CKEDITOR . env . gecko && ( a = a . replace ( /<body/ , '\x3cbody contenteditable\x3d"true" ' ) , 2E4 > CKEDITOR . env . version && ( a = a . replace ( /<body[^>]*>/ , "$\x26\x3c!-- cke-content-start --\x3e" ) ) ) ; c = '\x3cscript id\x3d"cke_actscrpt" type\x3d"text/javascript"' +
( CKEDITOR . env . ie ? ' defer\x3d"defer" ' : "" ) + "\x3evar wasLoaded\x3d0;function onload(){if(!wasLoaded)window.parent.CKEDITOR \x26\x26 window.parent.CKEDITOR.tools.callFunction(" + this . _ . frameLoadedHandler + ",window);wasLoaded\x3d1;}" + ( CKEDITOR . env . ie ? "onload();" : 'document.addEventListener("DOMContentLoaded", onload, false );' ) + "\x3c/script\x3e" ; CKEDITOR . env . ie && 9 > CKEDITOR . env . version && ( c += '\x3cscript id\x3d"cke_shimscrpt"\x3ewindow.parent.CKEDITOR.tools.enableHtml5Elements(document)\x3c/script\x3e' ) ; g &&
CKEDITOR . env . ie && 10 > CKEDITOR . env . version && ( c += '\x3cscript id\x3d"cke_basetagscrpt"\x3evar baseTag \x3d document.querySelector( "base" );baseTag.href \x3d baseTag.href;\x3c/script\x3e' ) ; a = a . replace ( /(?=\s*<\/(:?head)>)/ , c ) ; this . clearCustomData ( ) ; this . clearListeners ( ) ; b . fire ( "contentDomUnload" ) ; var l = this . getDocument ( ) ; try { l. write ( a ) } catch ( k ) { setTimeout ( function ( ) { l . write ( a ) } , 0 ) } } } , getData : function ( a ) { if ( a ) return this . getHtml ( ) ; a = this . editor ; var d = a . config , b = d . fullPage , c = b && a . docType , e = b && a . xmlDeclaration ,
f = this . getDocument ( ) , b = b ? f . getDocumentElement ( ) . getOuterHtml ( ) : f . getBody ( ) . getHtml ( ) ; CKEDITOR . env . gecko && d . enterMode != CKEDITOR . ENTER _BR && ( b = b . replace ( /<br>(?=\s*(:?$|<\/body>))/ , "" ) ) ; b = a . dataProcessor . toDataFormat ( b ) ; e&& ( b = e + "\n" + b ) ; c && ( b = c + "\n" + b ) ; return b } , focus : function ( ) { this . _ . isLoadingData ? this . _ . isPendingFocus = ! 0 : l . baseProto . focus . call ( this ) } , detach : function ( ) { if ( ! this . preserveIframe ) { var a = this . editor , d = a . document , a = a . container . findOne ( "iframe.cke_wysiwyg_frame" ) ; l . baseProto . detach . call ( this ) ;
this . clearCustomData ( this . _ . expandoNumber ) ; d . getDocumentElement ( ) . clearCustomData ( ) ; CKEDITOR . tools . removeFunction ( this . _ . frameLoadedHandler ) ; a && ( a . clearCustomData ( ) , ( d = a . removeCustomData ( "onResize" ) ) && d . removeListener ( ) , a . isDetached ( ) || a . remove ( ) ) } } } } ) } ) ( ) ; CKEDITOR . config . disableObjectResizing = ! 1 ; CKEDITOR . config . disableNativeTableHandles = ! 0 ; CKEDITOR . config . disableNativeSpellChecker = ! 0 ; CKEDITOR . config . observableParent = CKEDITOR . document . $ ; CKEDITOR . config . plugins = 'basicstyles,blockquote,dialogui,dialog,notification,button,toolbar,clipboard,panelbutton,panel,floatpanel,colorbutton,enterkey,floatingspace,listblock,richcombo,font,horizontalrule,indent,indentlist,justify,fakeobjects,link,list,smiley,undo,wysiwygarea' ; 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 ( 'bold,0,,italic,24,,strike,48,,subscript,72,,superscript,96,,underline,120,,blockquote,144,,copy-rtl,168,,copy,192,,cut-rtl,216,,cut,240,,paste-rtl,264,,paste,288,,bgcolor,312,,textcolor,336,,horizontalrule,360,,indent-rtl,384,,indent,408,,outdent-rtl,432,,outdent,456,,justifyblock,480,,justifycenter,504,,justifyleft,528,,justifyright,552,,anchor-rtl,576,,anchor,600,,link,624,,unlink,648,,bulletedlist-rtl,672,,bulletedlist,696,,numberedlist-rtl,720,,numberedlist,744,,smiley,768,,redo-rtl,792,,redo,816,,undo-rtl,840,,undo,864,' , 'icons_hidpi.png' ) ; else setIcons ( 'bold,0,auto,italic,24,auto,strike,48,auto,subscript,72,auto,superscript,96,auto,underline,120,auto,blockquote,144,auto,copy-rtl,168,auto,copy,192,auto,cut-rtl,216,auto,cut,240,auto,paste-rtl,264,auto,paste,288,auto,bgcolor,312,auto,textcolor,336,auto,horizontalrule,360,auto,indent-rtl,384,auto,indent,408,auto,outdent-rtl,432,auto,outdent,456,auto,justifyblock,480,auto,justifycenter,504,auto,justifyleft,528,auto,justifyright,552,auto,anchor-rtl,576,auto,anchor,600,auto,link,624,auto,unlink,648,auto,bulletedlist-rtl,672,auto,bulletedlist,696,auto,numberedlist-rtl,720,auto,numberedlist,744,auto,smiley,768,auto,redo-rtl,792,auto,redo,816,auto,undo-rtl,840,auto,undo,864,auto' , 'icons.png' ) ; } ) ( ) ; CKEDITOR . lang . languages = { "de" : 1 , "en" : 1 } ; } ( ) ) ;