@@ -2,14 +2,14 @@
Copyright ( c ) 2003 - 2021 , CKSource - Frederico Knabben . 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 : "L4KA " , version : "4.16.1 " , revision : "cae20318d4 " , 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 ] +
( function ( ) { if ( window . CKEDITOR && window . CKEDITOR . dom ) return ; window . CKEDITOR || ( window . CKEDITOR = function ( ) { var a = /(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i , d = { timestamp : "L7C8 " , version : "4.16.2 " , revision : "4e64f67219 " , 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 ( ) { 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 , l , h , k ) { function p ( x , y , z , k ) { x = { name : b , sender : this , editor : x , data : y , listenerData : h , stop : z , cancel : k , removeListener : f } ; return ! 1 === c . call ( l , x ) ? a : x . data } function f ( ) { x . removeListener ( b , c ) } var x = this , y = d . call ( this , b ) ; if ( 0 > y . getListenerIndex ( c ) ) { y = y . listeners ; l || ( l = this ) ; isNaN ( k ) && ( k = 10 ) ; p . fn = c ; p . priority = k ; for ( var z = y . length - 1 ; 0 <= z ; z -- ) if ( y [ z ] . priority <= k ) return y . splice ( z + 1 , 0 , p ) , { removeListener : f } ;
y . unshift ( p ) } return { removeListener : f } } , 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 ( k , p , f ) { var x = b ( this ) [ k ] ; k = c ; var y = d ; c = d = 0 ; if ( x ) { var z = x . listeners ; if ( z . length ) for ( var z = z . slice ( 0 ) ,
C , w = 0 ; w < z . length ; w ++ ) { if ( x . errorProof ) try { C = z [ w ] . call ( this , f , p , e , h ) } catch ( n ) { } else C = z [ w ] . call ( this , f , p , e , h ) ; C === a ? d = 1 : "undefined" != typeof C && ( p = C ) ; if ( c || d ) break } } p = d ? ! 1 : "undefined" == typeof p ? ! 0 : p ; c = k ; d = y ; return p } } ( ) , 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 , l , h , k ) { function p ( y , z , x , k ) { y = { name : b , sender : this , editor : y , data : z , listenerData : h , stop : x , cancel : k , removeListener : f } ; return ! 1 === c . call ( l , y ) ? a : y . data } function f ( ) { y . removeListener ( b , c ) } var y = this , z = d . call ( this , b ) ; if ( 0 > z . getListenerIndex ( c ) ) { z = z . listeners ; l || ( l = this ) ; isNaN ( k ) && ( k = 10 ) ; p . fn = c ; p . priority = k ; for ( var x = z . length - 1 ; 0 <= x ; x -- ) if ( z [ x ] . priority <= k ) return z . splice ( x + 1 , 0 , p ) , { removeListener : f } ;
z . unshift ( p ) } return { removeListener : f } } , 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 ( k , p , f ) { var y = b ( this ) [ k ] ; k = c ; var z = d ; c = d = 0 ; if ( y ) { var x = y . listeners ; if ( x . length ) for ( var x = x . slice ( 0 ) ,
C , v = 0 ; v < x . length ; v ++ ) { if ( y . errorProof ) try { C = x [ v ] . call ( this , f , p , e , h ) } catch ( n ) { } else C = x [ v ] . call ( this , f , p , e , h ) ; C === a ? d = 1 : "undefined" != typeof C && ( p = C ) ; if ( c || d ) break } } p = d ? ! 1 : "undefined" == typeof p ? ! 0 : p ; c = k ; d = z ; return p } } ( ) , 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,9 +19,9 @@ 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 , b , c ) { this . _minInterval = a ; this . _context = c ; this . _lastOutput = this . _scheduledTimer = 0 ; this . _output = CKEDITOR . tools . bind ( b , c || { } ) ; var f = this ; this . input = function ( ) { function a ( ) { f . _lastOutput = ( new Date ) . getTime ( ) ; f . _scheduledTimer = 0 ; f . _call ( ) } if ( ! f . _scheduledTimer || ! 1 !== f . _reschedule ( ) ) { var x = ( new Date ) . getTime ( ) - f . _lastOutput ; x < f . _minInterval ? f . _scheduledTimer = setTimeout ( a , f . _minInterval - x ) : a ( ) } } } function d ( x , b , c ) { a . call ( this , x , b , c ) ; this . _args = [ ] ; var f = this ; this . input = CKEDITOR . tools . override ( this . input ,
function ( a ) { return function ( ) { f . _args = Array . prototype . slice . call ( arguments ) ; a . call ( this ) } } ) } var b = [ ] , c = CKEDITOR . env . gecko ? "-moz-" : CKEDITOR . env . webkit ? "-webkit-" : CKEDITOR . env . ie ? "-ms-" : "" , g = /&/g , e = />/g , l = /</g , h = /"/g , k = /&(lt|gt|amp|quot|nbsp|shy|#\d{1,5});/g , p = { lt : "\x3c" , gt : "\x3e" , amp : "\x26" , quot : '"' , nbsp : " " , shy : " " } , f = function ( a , b ) { return "#" == b [ 0 ] ? String . fromCharCode ( parseInt ( b . slice ( 1 ) , 10 ) ) : p [ b ] } ; CKEDITOR . on ( "reset" , function ( ) { b = [ ] } ) ; CKEDITOR . tools = { arrayCompare : function ( a , b ) { if ( ! a && ! b ) return ! 0 ;
if ( ! a || ! b || a . length != b . length ) return ! 1 ; for ( var c = 0 ; c < a . length ; c ++ ) if ( a [ c ] != b [ c ] ) return ! 1 ; return ! 0 } , getIndex : function ( a , b ) { for ( var c = 0 ; c < a . length ; ++ c ) if ( b ( a [ c ] ) ) return c ; 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 ] =
( 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-" : "" , g = /&/g , e = />/g , l = /</g , h = /"/g , k = /&(lt|gt|amp|quot|nbsp|shy|#\d{1,5});/g , p = { lt : "\x3c" , gt : "\x3e" , amp : "\x26" , quot : '"' , nbsp : " " , shy : " " } , f = function ( a , z ) { return "#" == z [ 0 ] ? String . fromCharCode ( parseInt ( z . slice ( 1 ) , 10 ) ) : p [ 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 , b ) { for ( var c = 0 ; c < a . length ; ++ c ) if ( b ( a [ c ] ) ) return c ; 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 , f ; "boolean" == typeof ( c = arguments [ b - 1 ] ) ? b -- : "boolean" == typeof ( c = arguments [ b - 2 ] ) && ( f = 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 ( ! f || b in f ) a [ b ] = n [ 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 , f ) { if ( f ) return c + a + ":" + b + ";" + a + ":" + b ; f = { } ; f [ a ] = b ; f [ c + a ] = b ; return f } , 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 = [ ] , f = 0 ; f < a . length ; f ++ ) if ( b = a [ f ] ) / @ 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 ( g , "\x26amp;" ) . replace ( e , "\x26gt;" ) . replace ( l , "\x26lt;" ) } , htmlDecode : function ( a ) { return a . replace ( k ,
@@ -33,26 +33,27 @@ a=a.statics;!b&&(b=function(){c&&this.base.apply(this,arguments)});if(f)var n=b,
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 f = arguments [ b ] ; try { a = f ( ) ; 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 = [ ] , f , h = CKEDITOR . tools . parseCssText ( a , ! 0 , b ) ; for ( f in h ) c . push ( f + ":" + h [ f ] ) ; 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 , f ) { a = [ b , c , f ] ; 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 , f ) { 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 + f } ) } , _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 f = { } ; 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 f ; a . replace ( /"/g , '"' ) . replace ( /\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g , function ( a , c , x ) { b && ( c =
c . toLowerCase ( ) , "font-family" == c && ( x = x . replace ( /\s*,\s*/g , "," ) ) , x = CKEDITOR . tools . trim ( x ) ) ; f [ c ] = x } ) ; return f } , writeCssText : function ( a , b ) { var c , f = [ ] ; for ( c in a ) f . push ( c + ":" + a [ c ] ) ; b && f . sort ( ) ; return f . join ( "; " ) } , objectCompare : function ( a , b , c ) { var f ; if ( ! a && ! b ) return ! 0 ; if ( ! a || ! b ) return ! 1 ; for ( f in a ) if ( a [ f ] != b [ f ] ) return ! 1 ; if ( ! c ) for ( f in b ) if ( a [ f ] != b [ f ] ) 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 + f } ) } , _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 f = { } ; 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 f ; 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 ) ) ; f [ c ] = y } ) ; return f } , writeCssText : function ( a , b ) { var c , f = [ ] ; for ( c in a ) f . push ( c + ":" + a [ c ] ) ; b && f . sort ( ) ; return f . join ( "; " ) } , objectCompare : function ( a , b , c ) { var f ; if ( ! a && ! b ) return ! 0 ; if ( ! a || ! b ) return ! 1 ; for ( f in a ) if ( a [ f ] != b [ f ] ) return ! 1 ; if ( ! c ) for ( f in b ) if ( a [ f ] != b [ f ] ) 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 f = 0 , h = a . length ; f < h ; ++ f ) c [ a [ f ] ] = 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 ( " " ) , f = c . length , h ; f -- ; ) h = a . createElement ( c [ f ] ) , b && a . appendChild ( h ) } , checkIfAnyArrayItemMatches : function ( a , b ) { for ( var c = 0 , f = a . length ; c < f ; ++ 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 , f = b & 65535 , h = CKEDITOR . env . mac , n = [ ] , k = [ ] ; c & CKEDITOR . CTRL && ( n . push ( h ? "⌘" : a [ 17 ] ) , k . push ( h ? a [ 224 ] : a [ 17 ] ) ) ; c & CKEDITOR . ALT && ( n . push ( h ? "⌥" : a [ 18 ] ) , k . push ( a [ 18 ] ) ) ; c & CKEDITOR . SHIFT && ( n . push ( h ? "⇧" : a [ 16 ] ) , k . push ( a [ 16 ] ) ) ; f && ( a [ f ] ? ( n . push ( a [ f ] ) , k . push ( a [ f ] ) ) : ( n . push ( String . fromCharCode ( f ) ) , k . push ( String . fromCharCode ( f ) ) ) ) ; return { display : n , aria : k } } , transparentImageData : "data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw\x3d\x3d" ,
getCookie : function ( a ) { a = a . toLowerCase ( ) ; for ( var b = document . cookie . split ( ";" ) , c , f , h = 0 ; h < b . length ; h ++ ) if ( c = b [ h ] . split ( "\x3d" ) , f = decodeURIComponent ( CKEDITOR . tools . trim ( c [ 0 ] ) . toLowerCase ( ) ) , f === 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 f = "abcdefghijklmnopqrstuvwxyz0123456789" . charAt ( a [ c ] % 36 ) , b = b + ( . 5 < Math . random ( ) ? f . toUpperCase ( ) : f ) ; a = b ; CKEDITOR . tools . setCookie ( "ckCsrfToken" , a ) } return a } , escapeCss : function ( a ) { return a ? window . CSS && CSS . escape ? CSS . escape ( a ) : isNaN ( parseInt ( a . charAt ( 0 ) , 10 ) ) ? a : "\\3" + a . charAt ( 0 ) + " " + a . substring ( 1 , a . length ) : "" } , 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 ] ] , f = 0 ; f < c . length ; f ++ ) { var h = c [ f ] ; 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 , f ; for ( f = 0 ; f < c ; f ++ ) b . push ( parseInt ( a . substr ( 2 * f , 2 ) , 16 ) ) ; return b } , convertBytesToBase64 : function ( a ) { var b =
"" , c = a . length , f ; for ( f = 0 ; f < c ; f += 3 ) { var h = a . slice ( f , f + 3 ) , n = h . length , k = [ ] , d ; if ( 3 > n ) for ( d = n ; 3 > d ; d ++ ) h [ d ] = 0 ; k [ 0 ] = ( h [ 0 ] & 252 ) >> 2 ; k [ 1 ] = ( h [ 0 ] & 3 ) << 4 | h [ 1 ] >> 4 ; k [ 2 ] = ( h [ 1 ] & 15 ) << 2 | ( h [ 2 ] & 192 ) >> 6 ; k [ 3 ] = h [ 2 ] & 63 ; for ( d = 0 ; 4 > d ; d ++ ) b = d <= n ? b + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" . charAt ( k [ 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 ) { f . top = h [ a [ 0 ] ] ; f . right = h [ a [ 1 ] ] ; f . bottom = h [ a [ 2 ] ] ; f . left = h [ a [ 3 ] ] } var f = { } , 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 f } , 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 f = [ ] ; this . forEach ( a , function ( h , n ) { b . call ( c , h , n , a ) && f . push ( h ) } ) ; return f } , find : function ( a , b , c ) { for ( var f = a . length , h = 0 ; h < f ; ) { if ( b . call ( c , a [ h ] , h , a ) ) return a [ h ] ; h ++ } } , forEach : function ( a , b , c ) { var f = a . length , h ; for ( h = 0 ; h < f ; h ++ ) b . call ( c , a [ h ] , h , a ) } , map : function ( a , b , c ) { for ( var f = [ ] , h = 0 ; h < a . length ; h ++ ) f . push ( b . call ( c , a [ h ] , h , a ) ) ; return f } , reduce : function ( a ,
b , c , f ) { for ( var h = 0 ; h < a . length ; h ++ ) c = b . call ( f , 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 f = 0 ; f < a . length ; f ++ ) if ( b . call ( c , a [ f ] , f , 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 = [ ] , f = 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 < f . length ; h ++ ) b . call ( a , f [ h ] ) && c . push ( f [ 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 , f = c . clone ( a ) , h = c . clone ( b ) ; c . array . forEach ( c . object . keys ( h ) , function ( a ) { f [ a ] = "object" === typeof h [ a ] && "object" === typeof f [ a ] ? c . object . merge ( f [ a ] , h [ a ] ) : h [ a ] } ) ; return f } } , getAbsoluteRectPosition : function ( a , b ) { function c ( a ) { if ( a ) { var b = a . getClientRect ( ) ; f . top += b . top ; f . left +=
b . left ; "x" in f && "y" in f && ( f . x += b . x , f . y += b . y ) ; c ( a . getWindow ( ) . getFrame ( ) ) } } var f = CKEDITOR . tools . copy ( b ) ; c ( a . getFrame ( ) ) ; var h = CKEDITOR . document . getWindow ( ) . getScrollPosition ( ) ; f . top += h . y ; f . left += h . x ; "x" in f && "y" in f && ( f . y += h . y , f . x += h . x ) ; f . right = f . left + f . width ; f . bottom = f . top + f . height ; return f } } ; a . prototype = { reset : function ( ) { this . _lastOutput = 0 ; this . _clearTimer ( ) } , _reschedule : function ( ) { return ! 1 } , _call : function ( ) { this . _output ( ) } , _clearTimer : function ( ) { this . _scheduledTimer && clearTimeout ( this . _scheduledTimer ) ;
this . _scheduledTimer = 0 } } ; d . prototype = CKEDITOR . tools . prototypedCopy ( a . prototype ) ; d . prototype . _reschedule = function ( ) { this . _scheduledTimer && this . _clearTimer ( ) } ; d . prototype . _call = function ( ) { this . _output . apply ( this . _context , this . _args ) } ; CKEDITOR . tools . buffers = { } ; CKEDITOR . tools . buffers . event = a ; CKEDITOR . tools . buffers . throttle = d ; CKEDITOR . tools . style . border = CKEDITOR . tools . createClass ( { $ : function ( a ) { a = a || { } ; this . width = a . width ; this . style = a . style ; this . color = a . color ; this . _ . normalize ( ) } , _ : { normalizeMap : { color : [ [ /windowtext/g ,
"black" ] ] } , normalize : function ( ) { for ( var a in this . _ . normalizeMap ) { var b = this [ a ] ; b && ( this [ a ] = CKEDITOR . tools . array . reduce ( this . _ . normalizeMap [ a ] , function ( a , b ) { return a . replace ( b [ 0 ] , b [ 1 ] ) } , b ) ) } } } , proto : { toString : function ( ) { return CKEDITOR . tools . array . filter ( [ this . width , this . style , this . color ] , function ( a ) { return ! ! a } ) . join ( " " ) } } , statics : { fromCssRule : function ( a ) { var b = { } , c = a . split ( /\s+/g ) ; a = CKEDITOR . tools . style . parse . _findColor ( a ) ; a . length && ( b . color = a [ 0 ] ) ; CKEDITOR . tools . array . forEach ( c , function ( a ) { b . style ||
- 1 === CKEDITOR . tools . indexOf ( CKEDITOR . tools . style . parse . _borderStyle , a ) ? ! b . width && CKEDITOR . tools . style . parse . _widthRegExp . test ( a ) && ( b . width = a ) : b . style = a } ) ; return new CKEDITOR . tools . style . border ( b ) } , splitCssValues : function ( a , b ) { b = b || { } ; var c = CKEDITOR . tools . array . reduce ( [ "width" , "style" , "color" ] , function ( c , f ) { var h = a [ "border-" + f ] || b [ f ] ; c [ f ] = h ? CKEDITOR . tools . style . parse . sideShorthand ( h ) : null ; return c } , { } ) ; return CKEDITOR . tools . array . reduce ( [ "top" , "right" , "bottom" , "left" ] , function ( b , f ) { var h = { } , k ; for ( k in c ) { var d =
a [ "border-" + f + "-" + k ] ; h [ k ] = d ? d : c [ k ] && c [ k ] [ f ] } b [ "border-" + f ] = new CKEDITOR . tools . style . border ( h ) ; return b } , { } ) } } } ) ; CKEDITOR . tools . array . indexOf = CKEDITOR . tools . indexOf ; CKEDITOR . tools . array . isArray = CKEDITOR . tools . isArray ; CKEDITOR . MOUSE _BUTTON _LEFT = 0 ; CKEDITOR . MOUSE _BUTTON _MIDDLE = 1 ; CKEDITOR . MOUSE _BUTTON _RIGHT = 2 } ) ( ) ;
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 f = "abcdefghijklmnopqrstuvwxyz0123456789" . charAt ( a [ c ] % 36 ) , b = b + ( . 5 < Math . random ( ) ? f . toUpperCase ( ) : f ) ; 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 , f , h = "" , n = a . charCodeAt ( 0 ) ; ++ c < b ; ) f = a . charCodeAt ( c ) , h = 0 == f ? h + "� " : 127 == f || 1 <= f && 31 >= f || 0 == c && 48 <=
f && 57 >= f || 1 == c && 48 <= f && 57 >= f && 45 == n ? h + ( "\\" + f . toString ( 16 ) + " " ) : 0 == c && 1 == b && 45 == f ? h + ( "\\" + a . charAt ( c ) ) : 128 <= f || 45 == f || 95 == f || 48 <= f && 57 >= f || 65 <= f && 90 >= f || 97 <= f && 122 >= f ? 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 ] ] , f = 0 ; f < c . length ; f ++ ) { var h = c [ f ] ; 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 , f ; for ( f = 0 ; f < c ; f ++ ) b . push ( parseInt ( a . substr ( 2 * f , 2 ) , 16 ) ) ; return b } , convertBytesToBase64 : function ( a ) { var b = "" , c = a . length , f ; for ( f = 0 ; f < c ; f += 3 ) { var h = a . slice ( f , f + 3 ) , n = h . length , k = [ ] , d ; if ( 3 > n ) for ( d = n ; 3 > d ; d ++ ) h [ d ] = 0 ; k [ 0 ] = ( h [ 0 ] & 252 ) >> 2 ; k [ 1 ] = ( h [ 0 ] & 3 ) << 4 | h [ 1 ] >> 4 ; k [ 2 ] = ( h [ 1 ] & 15 ) << 2 | ( h [ 2 ] & 192 ) >> 6 ; k [ 3 ] = h [ 2 ] & 63 ; for ( d = 0 ; 4 > d ; d ++ ) b = d <= n ?
b + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" . charAt ( k [ 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 ) { f . top = h [ a [ 0 ] ] ; f . right = h [ a [ 1 ] ] ; f . bottom = h [ a [ 2 ] ] ; f . left = h [ a [ 3 ] ] } var f = { } , 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 f } , 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 f = [ ] ; this . forEach ( a ,
function ( h , n ) { b . call ( c , h , n , a ) && f . push ( h ) } ) ; return f } , find : function ( a , b , c ) { for ( var f = a . length , h = 0 ; h < f ; ) { if ( b . call ( c , a [ h ] , h , a ) ) return a [ h ] ; h ++ } } , forEach : function ( a , b , c ) { var f = a . length , h ; for ( h = 0 ; h < f ; h ++ ) b . call ( c , a [ h ] , h , a ) } , map : function ( a , b , c ) { for ( var f = [ ] , h = 0 ; h < a . length ; h ++ ) f . push ( b . call ( c , a [ h ] , h , a ) ) ; return f } , reduce : function ( a , b , c , f ) { for ( var h = 0 ; h < a . length ; h ++ ) c = b . call ( f , 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 f = 0 ; f < a . length ; f ++ ) if ( b . call ( c , a [ f ] , f , 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 = [ ] , f = 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 < f . length ; h ++ ) b . call ( a , f [ h ] ) && c . push ( f [ 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 , f = c . clone ( a ) , h = c . clone ( b ) ; c . array . forEach ( c . object . keys ( h ) , function ( a ) { f [ a ] = "object" === typeof h [ a ] && "object" === typeof f [ a ] ? c . object . merge ( f [ a ] , h [ a ] ) : h [ a ] } ) ; return f } } , getAbsoluteRectPosition : function ( a , b ) { function c ( a ) { if ( a ) { var b = a . getClientRect ( ) ; f . top += b . top ; f . left += b . left ; "x" in f && "y" in f && ( f . x += b . x , f . y += b . y ) ; c ( a . getWindow ( ) . getFrame ( ) ) } } var f = CKEDITOR . tools . copy ( b ) ; c ( a . getFrame ( ) ) ; var h = CKEDITOR . document . getWindow ( ) . getScrollPosition ( ) ; f . top += h . y ; f . left +=
h . x ; "x" in f && "y" in f && ( f . y += h . y , f . x += h . x ) ; f . right = f . left + f . width ; f . bottom = f . top + f . height ; return f } } ; a . prototype = { reset : function ( ) { this . _lastOutput = 0 ; this . _clearTimer ( ) } , _reschedule : function ( ) { return ! 1 } , _call : function ( ) { this . _output ( ) } , _clearTimer : function ( ) { this . _scheduledTimer && clearTimeout ( this . _scheduledTimer ) ; this . _scheduledTimer = 0 } } ; d . prototype = CKEDITOR . tools . prototypedCopy ( a . prototype ) ; d . prototype . _reschedule = function ( ) { this . _scheduledTimer && this . _clearTimer ( ) } ; d . prototype . _call = function ( ) { this . _output . apply ( this . _context ,
this . _args ) } ; CKEDITOR . tools . buffers = { } ; CKEDITOR . tools . buffers . event = a ; CKEDITOR . tools . buffers . throttle = d ; CKEDITOR . tools . style . border = CKEDITOR . tools . createClass ( { $ : function ( a ) { a = a || { } ; this . width = a . width ; this . style = a . style ; this . color = a . color ; this . _ . normalize ( ) } , _ : { normalizeMap : { color : [ [ /windowtext/g , "black" ] ] } , normalize : function ( ) { for ( var a in this . _ . normalizeMap ) { var b = this [ a ] ; b && ( this [ a ] = CKEDITOR . tools . array . reduce ( this . _ . normalizeMap [ a ] , function ( a , b ) { return a . replace ( b [ 0 ] , b [ 1 ] ) } , b ) ) } } } , proto : { toString : function ( ) { return CKEDITOR . tools . array . filter ( [ this . width ,
this . style , this . color ] , function ( a ) { return ! ! a } ) . join ( " " ) } } , statics : { fromCssRule : function ( a ) { var b = { } , c = a . split ( /\s+/g ) ; a = CKEDITOR . tools . style . parse . _findColor ( a ) ; a . length && ( b . color = a [ 0 ] ) ; CKEDITOR . tools . array . forEach ( c , function ( a ) { b . style || - 1 === CKEDITOR . tools . indexOf ( CKEDITOR . tools . style . parse . _borderStyle , a ) ? ! b . width && CKEDITOR . tools . style . parse . _widthRegExp . test ( a ) && ( b . width = a ) : b . style = a } ) ; return new CKEDITOR . tools . style . border ( b ) } , splitCssValues : function ( a , b ) { b = b || { } ; var c = CKEDITOR . tools . array . reduce ( [ "width" ,
"style" , "color" ] , function ( c , f ) { var h = a [ "border-" + f ] || b [ f ] ; c [ f ] = h ? CKEDITOR . tools . style . parse . sideShorthand ( h ) : null ; return c } , { } ) ; return CKEDITOR . tools . array . reduce ( [ "top" , "right" , "bottom" , "left" ] , function ( b , f ) { var h = { } , k ; for ( k in c ) { var d = a [ "border-" + f + "-" + k ] ; h [ k ] = d ? d : c [ k ] && c [ k ] [ f ] } b [ "border-" + f ] = new CKEDITOR . tools . style . border ( h ) ; return b } , { } ) } } } ) ; CKEDITOR . tools . array . indexOf = CKEDITOR . tools . indexOf ; CKEDITOR . tools . array . isArray = CKEDITOR . tools . isArray ; CKEDITOR . MOUSE _BUTTON _LEFT = 0 ; CKEDITOR . MOUSE _BUTTON _MIDDLE =
1 ; CKEDITOR . MOUSE _BUTTON _RIGHT = 2 } ) ( ) ;
CKEDITOR . dtd = function ( ) { var a = CKEDITOR . tools . extend , d = function ( a , b ) { for ( var c = CKEDITOR . tools . clone ( a ) , h = 1 ; h < arguments . length ; h ++ ) { b = arguments [ h ] ; for ( var k in b ) delete c [ k ] } return c } , b = { } , c = { } , g = { address : 1 , article : 1 , aside : 1 , blockquote : 1 , details : 1 , div : 1 , dl : 1 , fieldset : 1 , figure : 1 , footer : 1 , form : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , header : 1 , hgroup : 1 , hr : 1 , main : 1 , menu : 1 , nav : 1 , ol : 1 , p : 1 , pre : 1 , section : 1 , table : 1 , ul : 1 } , e = { command : 1 , link : 1 , meta : 1 , noscript : 1 , script : 1 , style : 1 } , l = { } , h = { "#" : 1 } , k = { center : 1 , dir : 1 , noframes : 1 } ;
a ( b , { a : 1 , abbr : 1 , area : 1 , audio : 1 , b : 1 , bdi : 1 , bdo : 1 , br : 1 , button : 1 , canvas : 1 , cite : 1 , code : 1 , command : 1 , datalist : 1 , del : 1 , dfn : 1 , em : 1 , embed : 1 , i : 1 , iframe : 1 , img : 1 , input : 1 , ins : 1 , kbd : 1 , keygen : 1 , label : 1 , map : 1 , mark : 1 , meter : 1 , noscript : 1 , object : 1 , output : 1 , progress : 1 , q : 1 , ruby : 1 , s : 1 , samp : 1 , script : 1 , select : 1 , small : 1 , span : 1 , strong : 1 , sub : 1 , sup : 1 , textarea : 1 , time : 1 , u : 1 , "var" : 1 , video : 1 , wbr : 1 } , h , { acronym : 1 , applet : 1 , basefont : 1 , big : 1 , font : 1 , isindex : 1 , strike : 1 , style : 1 , tt : 1 } ) ; a ( c , g , b , k ) ; d = { a : d ( b , { a : 1 , button : 1 } ) , abbr : b , address : c ,
area : l , article : c , aside : c , audio : a ( { source : 1 , track : 1 } , c ) , b : b , base : l , bdi : b , bdo : b , blockquote : c , body : c , br : l , button : d ( b , { a : 1 , button : 1 } ) , canvas : b , caption : c , cite : b , code : b , col : l , colgroup : { col : 1 } , command : l , datalist : a ( { option : 1 } , b ) , dd : c , del : b , details : a ( { summary : 1 } , c ) , dfn : b , div : c , dl : { dt : 1 , dd : 1 } , dt : c , em : b , embed : l , fieldset : a ( { legend : 1 } , c ) , figcaption : c , figure : a ( { figcaption : 1 } , c ) , footer : c , form : c , h1 : b , h2 : b , h3 : b , h4 : b , h5 : b , h6 : b , head : a ( { title : 1 , base : 1 } , e ) , header : c , hgroup : { h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 } , hr : l , html : a ( { head : 1 ,
@@ -119,11 +120,11 @@ arguments)}catch(f){}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" ] , f ; "border" == a && ( f = [ "color" , "style" , "width" ] ) ; for ( var b = [ ] , d = 0 ; d < c . length ; d ++ ) if ( f ) for ( var e =
0 ; e < f . length ; e ++ ) b . push ( [ a , c [ d ] , f [ 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 , f = b . count ( ) ; c < f ; 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 , f = this . getDocument ( ) , d = f . getBody ( ) , e = "BackCompat" == f . $ . compatMode ; if ( document . documentElement . getBoundingClientRect && ( CKEDITOR . env . ie ?
8 !== CKEDITOR . env . version : 1 ) ) { var g = this . $ . getBoundingClientRect ( ) , l = f . $ . documentElement , w = l . clientTop || d . $ . clientTop || 0 , n = l . clientLeft || d . $ . clientLeft || 0 , H = ! 0 ; CKEDITOR . env . ie && ( H = f . getDocumentElement ( ) . contains ( this ) , f = f . getBody ( ) . contains ( this ) , H = e && f || ! e && H ) ; H && ( CKEDITOR . env . webkit || CKEDITOR . env . ie && 12 <= CKEDITOR . env . version ? ( b = d . $ . scrollLeft || l . scrollLeft , c = d . $ . scrollTop || l . scrollTop ) : ( c = e ? d . $ : l , b = c . scrollLeft , c = c . scrollTop ) , b = g . left + b - n , c = g . top + c - w ) } else for ( w = this , n = null ; w && "body" != w . getName ( ) &&
"html" != w . getName ( ) ; ) { b += w . $ . offsetLeft - w . $ . scrollLeft ; c += w . $ . offsetTop - w . $ . scrollTop ; w . equals ( this ) || ( b += w . $ . clientLeft || 0 , c += w . $ . clientTop || 0 ) ; for ( ; n && ! n . equals ( w ) ; ) b -= n . $ . scrollLeft , c -= n . $ . scrollTop , n = n . getParent ( ) ; n = w ; w = ( g = w . $ . offsetParent ) ? new CKEDITOR . dom . element ( g ) : null } a && ( g = this . getWindow ( ) , w = a . getWindow ( ) , ! g . equals ( w ) && g . $ . frameElement && ( a = ( new CKEDITOR . dom . element ( g . $ . frameElement ) ) . getDocumentPosition ( a ) , b += a . x , c += a . y ) ) ; document . documentElement . getBoundingClientRect || ! CKEDITOR . env . gecko ||
8 !== CKEDITOR . env . version : 1 ) ) { var g = this . $ . getBoundingClientRect ( ) , l = f . $ . documentElement , v = l . clientTop || d . $ . clientTop || 0 , n = l . clientLeft || d . $ . clientLeft || 0 , H = ! 0 ; CKEDITOR . env . ie && ( H = f . getDocumentElement ( ) . contains ( this ) , f = f . getBody ( ) . contains ( this ) , H = e && f || ! e && H ) ; H && ( CKEDITOR . env . webkit || CKEDITOR . env . ie && 12 <= CKEDITOR . env . version ? ( b = d . $ . scrollLeft || l . scrollLeft , c = d . $ . scrollTop || l . scrollTop ) : ( c = e ? d . $ : l , b = c . scrollLeft , c = c . scrollTop ) , b = g . left + b - n , c = g . 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 = ( g = v . $ . offsetParent ) ? new CKEDITOR . dom . element ( g ) : null } a && ( g = this . getWindow ( ) , v = a . getWindow ( ) , ! g . equals ( v ) && g . $ . frameElement && ( a = ( new CKEDITOR . dom . element ( g . $ . 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 f = c . $ . frameElement ; f && ( b = new CKEDITOR . dom . element ( f ) ) } catch ( d ) { } } while ( b = b . getParent ( ) ) } } , scrollIntoParent : function ( a , b , c ) { var f , d , e , g ; function l ( b , c ) { /body|html/ . test ( a . getName ( ) ) ?
a . getWindow ( ) . $ . scrollBy ( b , c ) : ( a . $ . scrollLeft += b , a . $ . scrollTop += c ) } function w ( a , b ) { var c = { x : 0 , y : 0 } ; if ( ! a . is ( H ? "body" : "html" ) ) { var f = a . $ . getBoundingClientRect ( ) ; c . x = f . left ; c . y = f . top } f = a . getWindow ( ) ; f . equals ( b ) || ( f = w ( CKEDITOR . dom . element . get ( f . $ . frameElement ) , b ) , c . x += f . x , c . y += f . 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 = w ( this , e ) ; var q = w ( a , e ) , I = this . $ . offsetHeight ; f = this . $ . offsetWidth ; var K = a . $ . clientHeight , m = a . $ . clientWidth ; e = d . x - n ( this , "left" ) - q . x || 0 ; g = d . y - n ( this , "top" ) - q . y || 0 ; f = d . x + f + n ( this , "right" ) - ( q . x + m ) || 0 ; d = d . y + I + n ( this , "bottom" ) - ( q . y + K ) || 0 ; ( 0 > g || 0 < d ) && l ( 0 , ! 0 === b ? g : ! 1 === b ? d : 0 > g ? g : d ) ; c && ( 0 > e || 0 < f ) && l ( 0 > e ? e : f , 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 v ( a , b ) { var c = { x : 0 , y : 0 } ; if ( ! a . is ( H ? "body" : "html" ) ) { var f = a . $ . getBoundingClientRect ( ) ; c . x = f . left ; c . y = f . top } f = a . getWindow ( ) ; f . equals ( b ) || ( f = v ( CKEDITOR . dom . element . get ( f . $ . frameElement ) , b ) , c . x += f . x , c . y += f . 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 q = v ( a , e ) , I = this . $ . offsetHeight ; f = this . $ . offsetWidth ; var K = a . $ . clientHeight , m = a . $ . clientWidth ; e = d . x - n ( this , "left" ) - q . x || 0 ; g = d . y - n ( this , "top" ) - q . y || 0 ; f = d . x + f + n ( this , "right" ) - ( q . x + m ) || 0 ; d = d . y + I + n ( this , "bottom" ) - ( q . y + K ) || 0 ; ( 0 > g || 0 < d ) && l ( 0 , ! 0 === b ? g : ! 1 === b ? d : 0 > g ? g : d ) ; c && ( 0 > e || 0 < f ) && l ( 0 > e ? e : f , 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 f = 0 ; f < c . length ; f ++ ) { var d = c [ f ] , e = d . nodeName . toLowerCase ( ) , g ; if ( ! ( e in b ) ) if ( "checked" == e && ( g = this . getAttribute ( e ) ) ) a . setAttribute ( e , g ) ; else if ( ! CKEDITOR . env . ie || this . hasAttribute ( e ) ) g = this . getAttribute ( e ) , null === g && ( g = d . nodeValue ) , a . setAttribute ( e , g ) } "" !== 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 f = b . childNodes ; if ( 0 <= c && c < f . length ) return f [ c ] } return function ( b ) { var c = this . $ ; if ( b . slice ) for ( b = b . slice ( ) ; 0 < b . length && c ; ) c = a ( c ,
@@ -134,21 +135,21 @@ d)}else f[f[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 f , d = c . startContainer ; f = c . endContainer ; var e = c . startOffset , g = c . endOffset , x , h = this . guard , m = this . type , l = a ? "getPreviousSourceNode" : "getNextSourceNode" ; if ( ! a && ! this . _ . guardLTR ) { var L = f . type == CKEDITOR . NODE _ELEMENT ? f : f . getParent ( ) , A = f . type == CKEDITOR . NODE _ELEMENT ? f . getChild ( g ) : f . getNext ( ) ; this . _ . guardLTR = function ( a , b ) { return ( ! b || ! L . equals ( a ) ) && ( ! A ||
! a . equals ( A ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } if ( a && ! this . _ . guardRTL ) { var p = 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 || ! p . equals ( a ) ) && ( ! r || ! a . equals ( r ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } var F = a ? this . _ . guardRTL : this . _ . guardLTR ; x = h ? function ( a , b ) { return ! 1 === F ( a , b ) ? ! 1 : h ( a , b ) } : F ; this . current ? f = this . current [ l ] ( ! 1 , m , x ) : ( a ? f . type == CKEDITOR . NODE _ELEMENT &&
( f = 0 < g ? f . getChild ( g - 1 ) : ! 1 === x ( f , ! 0 ) ? null : f . getPreviousSourceNode ( ! 0 , m , x ) ) : ( f = d , f . type == CKEDITOR . NODE _ELEMENT && ( ( f = f . getChild ( e ) ) || ( f = ! 1 === x ( d , ! 0 ) ? null : d . getNextSourceNode ( ! 0 , m , x ) ) ) ) , f && ! 1 === x ( f ) && ( f = null ) ) ; for ( ; f && ! this . _ . end ; ) { this . current = f ; if ( ! this . evaluator || ! 1 !== this . evaluator ( f ) ) { if ( ! b ) return f } else if ( b && this . evaluator ) return ! 1 ; f = f [ l ] ( ! 1 , m , x ) } this . end ( ) ; return this . current = null } function d ( b ) { for ( var c , f = null ; c = a . call ( this , b ) ; ) f = c ; return f } 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 f , d = c . startContainer ; f = c . endContainer ; var e = c . startOffset , g = c . endOffset , h , y = this . guard , m = this . type , l = a ? "getPreviousSourceNode" : "getNextSourceNode" ; if ( ! a && ! this . _ . guardLTR ) { var L = f . type == CKEDITOR . NODE _ELEMENT ? f : f . getParent ( ) , A = f . type == CKEDITOR . NODE _ELEMENT ? f . getChild ( g ) : f . getNext ( ) ; this . _ . guardLTR = function ( a , b ) { return ( ! b || ! L . equals ( a ) ) && ( ! A ||
! a . equals ( A ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } if ( a && ! this . _ . guardRTL ) { var p = 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 || ! p . equals ( a ) ) && ( ! r || ! a . equals ( r ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } var F = a ? this . _ . guardRTL : this . _ . guardLTR ; h = y ? function ( a , b ) { return ! 1 === F ( a , b ) ? ! 1 : y ( a , b ) } : F ; this . current ? f = this . current [ l ] ( ! 1 , m , h ) : ( a ? f . type == CKEDITOR . NODE _ELEMENT &&
( f = 0 < g ? f . getChild ( g - 1 ) : ! 1 === h ( f , ! 0 ) ? null : f . getPreviousSourceNode ( ! 0 , m , h ) ) : ( f = d , f . type == CKEDITOR . NODE _ELEMENT && ( ( f = f . getChild ( e ) ) || ( f = ! 1 === h ( d , ! 0 ) ? null : d . getNextSourceNode ( ! 0 , m , h ) ) ) ) , f && ! 1 === h ( f ) && ( f = null ) ) ; for ( ; f && ! this . _ . end ; ) { this . current = f ; if ( ! this . evaluator || ! 1 !== this . evaluator ( f ) ) { if ( ! b ) return f } else if ( b && this . evaluator ) return ! 1 ; f = f [ l ] ( ! 1 , m , h ) } this . end ( ) ; return this . current = null } function d ( b ) { for ( var c , f = null ; c = a . call ( this , b ) ; ) f = c ; return f } 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 ( f ) { var d , e ; d = f && f . type != CKEDITOR . NODE _ELEMENT && ( e = f . getParent ( ) ) && c ( e ) ; d = a ? d : d || c ( f ) ; 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 ( f ) { b ( f ) ? f = 1 : ( f . type == CKEDITOR . NODE _TEXT && ( f = f . getParent ( ) ) , f = f . $ . offsetWidth <= c ) ; return ! ! ( a ^ f ) } } ; 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 ) && ! l ( a ) } return function ( c ) { var f = CKEDITOR . env . needsBrFiller ? c . is && c . is ( "br" ) : c . getText && g . test ( c . getText ( ) ) ; f && ( f = c . getParent ( ) , c = c . getNext ( b ) , f = f . isBlockBoundary ( ) &&
( ! c || c . type == CKEDITOR . NODE _ELEMENT && c . isBlockBoundary ( ) ) ) ; return ! ! ( a ^ f ) } } ; CKEDITOR . dom . walker . temp = function ( a ) { return function ( b ) { b . type != CKEDITOR . NODE _ELEMENT && ( b = b . getParent ( ) ) ; b = b && b . hasAttribute ( "data-cke-temp" ) ; return ! ! ( a ^ b ) } } ; var g = /^[\t\r\n ]*(?: |\xa0)$/ , e = CKEDITOR . dom . walker . whitespaces ( ) , l = CKEDITOR . dom . walker . bookmark ( ) , h = CKEDITOR . dom . walker . temp ( ) , k = function ( a ) { return l ( 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 ) || l ( b ) || h ( b ) ; return ! ! ( a ^ b ) } } ; var p = CKEDITOR . dom . walker . ignored ( ) ; CKEDITOR . dom . walker . empty = function ( a ) { return function ( b ) { for ( var c = 0 , f = b . getChildCount ( ) ; c < f ; ++ c ) if ( ! p ( b . getChild ( c ) ) ) return ! ! a ; return ! a } } ; var f = CKEDITOR . dom . walker . empty ( ) , x = 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 =
p ( 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 ( x ) && f ( b ) ) ? ! 0 : ! 1 ; return ! ! ( a ^ b ) } } ; CKEDITOR . dom . element . prototype . getBogus = function ( ) { var a = this ; do a = a . getPreviousSourceNode ( ) ; while ( k ( a ) ) ; return a && ( CKEDITOR . env . needsBrFiller ? a . is && a . is ( "br" ) : a . getText && g . test ( a . getText ( ) ) ) ? a : ! 1 } } ) ( ) ;
function ( a ) { return function ( b ) { b = e ( b ) || l ( b ) || h ( b ) ; return ! ! ( a ^ b ) } } ; var p = CKEDITOR . dom . walker . ignored ( ) ; CKEDITOR . dom . walker . empty = function ( a ) { return function ( b ) { for ( var c = 0 , f = b . getChildCount ( ) ; c < f ; ++ c ) if ( ! p ( b . getChild ( c ) ) ) return ! ! a ; return ! a } } ; var f = 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 =
p ( 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 ) && f ( b ) ) ? ! 0 : ! 1 ; return ! ! ( a ^ b ) } } ; CKEDITOR . dom . element . prototype . getBogus = function ( ) { var a = this ; do a = a . getPreviousSourceNode ( ) ; while ( k ( a ) ) ; return a && ( CKEDITOR . env . needsBrFiller ? a . is && a . is ( "br" ) : a . getText && g . 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 g ( a , b , c , f ) { var D = c ? a . getPrevious ( ) : a . getNext ( ) ; if ( f && l ) return D ; k || f ? b . append ( a . clone ( ! 0 , e ) , c ) : ( a . remove ( ) , p && b . append ( a , c ) ) ; return D } function n ( ) { var a , b , c , f = Math . min ( S . length , t . length ) ; for ( a = 0 ; a < f ; a ++ ) if ( b = S [ a ] , c = t [ a ] , ! b . equals ( c ) ) return a ; return a - 1 } function h ( ) { var b = O - 1 , c = F && E && ! m . equals ( G ) ; b < J - 1 || b < v - 1 || c ? ( c ? a . moveToPosition ( G ,
CKEDITOR . POSITION _BEFORE _START ) : v == 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 l = 0 === b , p = 1 == b , k = 2 == b ; b = k || p ; var m = a . startContainer , G = a . endContainer ,
L = a . startOffset , A = a . endOffset , M , r , F , E , u , Q ; if ( k && G . type == CKEDITOR . NODE _TEXT && ( m . equals ( G ) || m . type === CKEDITOR . NODE _ELEMENT && m . getFirst ( ) . equals ( G ) ) ) c . append ( a . document . createText ( G . substring ( L , A ) ) ) ; else { G . type == CKEDITOR . NODE _TEXT ? k ? Q = ! 0 : G = G . split ( A ) : 0 < G . getChildCount ( ) ? A >= G . getChildCount ( ) ? ( G = G . getChild ( A - 1 ) , r = ! 0 ) : G = G . getChild ( A ) : E = r = ! 0 ; m . type == CKEDITOR . NODE _TEXT ? k ? u = ! 0 : m . split ( L ) : 0 < m . getChildCount ( ) ? 0 === L ? ( m = m . getChild ( L ) , M = ! 0 ) : m = m . getChild ( L - 1 ) : F = M = ! 0 ; for ( var S = m . getParents ( ) , t = G . getParents ( ) , O = n ( ) ,
J = S . length - 1 , v = t . length - 1 , B = c , D , da , aa , fa = - 1 , U = O ; U <= J ; U ++ ) { da = S [ U ] ; aa = da . getNext ( ) ; for ( U != J || da . equals ( t [ U ] ) && J < v ? b && ( D = B . append ( da . clone ( 0 , e ) ) ) : M ? g ( da , B , ! 1 , F ) : u && B . append ( a . document . createText ( da . substring ( L ) ) ) ; aa ; ) { if ( aa . equals ( t [ U ] ) ) { fa = U ; break } aa = g ( aa , B ) } B = D } B = c ; for ( U = O ; U <= v ; U ++ ) if ( c = t [ U ] , aa = c . getPrevious ( ) , c . equals ( S [ U ] ) ) b && ( B = B . getChild ( 0 ) ) ; else { U != v || c . equals ( S [ U ] ) && v < J ? b && ( D = B . append ( c . clone ( 0 , e ) ) ) : r ? g ( c , B , ! 1 , E ) : Q && B . append ( a . document . createText ( c . substring ( 0 , A ) ) ) ; if ( U > fa ) for ( ; aa ; ) aa = g ( aa ,
( 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 g ( a , b , c , f ) { var D = c ? a . getPrevious ( ) : a . getNext ( ) ; if ( f && l ) return D ; k || f ? b . append ( a . clone ( ! 0 , e ) , c ) : ( a . remove ( ) , p && b . append ( a , c ) ) ; return D } function n ( ) { var a , b , c , f = Math . min ( S . length , t . length ) ; for ( a = 0 ; a < f ; a ++ ) if ( b = S [ a ] , c = t [ a ] , ! b . equals ( c ) ) return a ; return a - 1 } function h ( ) { var b = O - 1 , c = F && E && ! m . equals ( G ) ; b < J - 1 || b < u - 1 || c ? ( c ? a . moveToPosition ( G ,
CKEDITOR . POSITION _BEFORE _START ) : u == 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 l = 0 === b , p = 1 == b , k = 2 == b ; b = k || p ; var m = a . startContainer , G = a . endContainer ,
L = a . startOffset , A = a . endOffset , M , r , F , E , w , Q ; if ( k && G . type == CKEDITOR . NODE _TEXT && ( m . equals ( G ) || m . type === CKEDITOR . NODE _ELEMENT && m . getFirst ( ) . equals ( G ) ) ) c . append ( a . document . createText ( G . substring ( L , A ) ) ) ; else { G . type == CKEDITOR . NODE _TEXT ? k ? Q = ! 0 : G = G . split ( A ) : 0 < G . getChildCount ( ) ? A >= G . getChildCount ( ) ? ( G = G . getChild ( A - 1 ) , r = ! 0 ) : G = G . getChild ( A ) : E = r = ! 0 ; m . type == CKEDITOR . NODE _TEXT ? k ? w = ! 0 : m . split ( L ) : 0 < m . getChildCount ( ) ? 0 === L ? ( m = m . getChild ( L ) , M = ! 0 ) : m = m . getChild ( L - 1 ) : F = M = ! 0 ; for ( var S = m . getParents ( ) , t = G . getParents ( ) , O = n ( ) ,
J = S . length - 1 , u = t . length - 1 , B = c , D , da , aa , fa = - 1 , U = O ; U <= J ; U ++ ) { da = S [ U ] ; aa = da . getNext ( ) ; for ( U != J || da . equals ( t [ U ] ) && J < u ? b && ( D = B . append ( da . clone ( 0 , e ) ) ) : M ? g ( da , B , ! 1 , F ) : w && B . append ( a . document . createText ( da . substring ( L ) ) ) ; aa ; ) { if ( aa . equals ( t [ U ] ) ) { fa = U ; break } aa = g ( aa , B ) } B = D } B = c ; for ( U = O ; U <= u ; U ++ ) if ( c = t [ U ] , aa = c . getPrevious ( ) , c . equals ( S [ U ] ) ) b && ( B = B . getChild ( 0 ) ) ; else { U != u || c . equals ( S [ U ] ) && u < J ? b && ( D = B . append ( c . clone ( 0 , e ) ) ) : r ? g ( c , B , ! 1 , E ) : Q && B . append ( a . document . createText ( c . substring ( 0 , A ) ) ) ; if ( U > fa ) for ( ; aa ; ) aa = g ( aa ,
B , ! 0 ) ; B = D } k || h ( ) } } function b ( ) { var a = ! 1 , b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . dom . walker . bookmark ( ! 0 ) , d = CKEDITOR . dom . walker . bogus ( ) ; return function ( g ) { return c ( g ) || b ( g ) ? ! 0 : d ( g ) && ! a ? a = ! 0 : g . type == CKEDITOR . NODE _TEXT && ( g . hasAscendant ( "pre" ) || CKEDITOR . tools . trim ( g . getText ( ) ) . length ) || g . type == CKEDITOR . NODE _ELEMENT && ! g . 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 && l ( d ) || d . type == CKEDITOR . NODE _ELEMENT &&
d . is ( CKEDITOR . dtd . $removeEmpty ) } } function g ( a ) { return function ( ) { var b ; return this [ a ? "getPreviousNode" : "getNextNode" ] ( function ( a ) { ! b && p ( a ) && ( b = a ) ; return k ( a ) && ! ( l ( 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 } , l = CKEDITOR . dom . walker . bogus ( ) , h = /^[\t\r\n ]*(?: |\xa0)$/ , k = CKEDITOR . dom . walker . editable ( ) , p = 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 ) ;
@@ -168,9 +169,9 @@ for(k=c(k);k||m;){if(k&&!m){!G&&k.equals(n)&&(G=!0);if(e?k.isBlockBoundary():!h.
if ( d . test ( M ) ) m = null ; else for ( var r = m . $ . getElementsByTagName ( "*" ) , F = 0 , E ; E = r [ F ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ E . nodeName . toLowerCase ( ) ] ) { m = null ; break } m && ( A = ! ! M . length ) } else m = null ; A && ( L ? G ? l = k : k && this . setStartBefore ( k ) : L = ! 0 ) ; if ( m ) { A = m . getPrevious ( ) ; if ( ! k && ! A ) { k = m ; m = null ; break } m = A } else k = null } k && ( k = c ( k . getParent ( ) ) ) } A = this . endContainer ; r = this . endOffset ; k = m = null ; G = L = ! 1 ; A . type == CKEDITOR . NODE _TEXT ? CKEDITOR . tools . trim ( A . substring ( r ) ) . length ? L = ! 0 : ( L = ! A . getLength ( ) , r == A . getLength ( ) ? ( m = A . getNext ( ) ) || ( k = A . getParent ( ) ) :
g ( A , r ) && ( k = A . getParent ( ) ) ) : ( m = A . getChild ( r ) ) || ( k = A ) ; for ( ; k || m ; ) { if ( k && ! m ) { ! G && k . equals ( n ) && ( G = ! 0 ) ; if ( e ? k . isBlockBoundary ( ) : ! h . contains ( k ) ) break ; L && "inline" == k . getComputedStyle ( "display" ) || ( L = ! 1 , G ? p = k : k && this . setEndAfter ( k ) ) ; m = k . getNext ( ) } for ( ; m ; ) { A = ! 1 ; if ( m . type == CKEDITOR . NODE _TEXT ) M = m . getText ( ) , g ( m , 0 ) || ( m = null ) , A = /^[\s\ufeff]/ . test ( M ) ; else if ( m . type == CKEDITOR . NODE _ELEMENT ) { if ( ( 0 < m . $ . offsetWidth || b && m . is ( "br" ) ) && ! m . data ( "cke-bookmark" ) ) if ( L && CKEDITOR . dtd . $removeEmpty [ m . getName ( ) ] ) { M = m . getText ( ) ; if ( d . test ( M ) ) m =
null ; else for ( r = m . $ . getElementsByTagName ( "*" ) , F = 0 ; E = r [ F ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ E . nodeName . toLowerCase ( ) ] ) { m = null ; break } m && ( A = ! ! M . length ) } else m = null } else A = 1 ; A && L && ( G ? p = k : this . setEndAfter ( k ) ) ; if ( m ) { A = m . getNext ( ) ; if ( ! k && ! A ) { k = m ; m = null ; break } m = A } else k = null } k && ( k = c ( k . getParent ( ) ) ) } l && p && ( n = l . contains ( p ) ? p : l , this . setStartBefore ( n ) , this . setEndAfter ( n ) ) ; break ; case CKEDITOR . ENLARGE _BLOCK _CONTENTS : case CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : k = new CKEDITOR . dom . range ( this . root ) ; h = this . root ; k . setStartAt ( h ,
CKEDITOR . POSITION _AFTER _START ) ; k . setEnd ( this . startContainer , this . startOffset ) ; k = new CKEDITOR . dom . walker ( k ) ; var u , 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 || ( u = a ) ; return b } , e = function ( a ) { var b = O ( a ) ; ! b && a . is && a . is ( "br" ) && ( Q = a ) ; return b } ; k . guard = O ; k = k . lastBackward ( ) ; u = u || h ; this . setStartAt ( u ,
! u . is ( "br" ) && ( ! k && this . checkStartOfBlock ( ) || k && u . contains ( k ) ) ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _AFTER _END ) ; if ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ) { k = this . clone ( ) ; k = new CKEDITOR . dom . walker ( k ) ; var J = CKEDITOR . dom . walker . whitespaces ( ) , v = CKEDITOR . dom . walker . bookmark ( ) ; k . evaluator = function ( a ) { return ! J ( a ) && ! v ( a ) } ; if ( ( k = k . previous ( ) ) && k . type == CKEDITOR . NODE _ELEMENT && k . is ( "br" ) ) break } k = this . clone ( ) ; k . collapse ( ) ; k . setEndAt ( h , CKEDITOR . POSITION _BEFORE _END ) ; k = new CKEDITOR . dom . walker ( k ) ; k . guard =
a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? e : O ; u = t = Q = null ; k = k . lastForward ( ) ; u = u || h ; this . setEndAt ( u , ! k && this . checkEndOfBlock ( ) || k && u . contains ( k ) ? 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 g = this . clone ( ) , n = this . startContainer , h = this . endContainer , l = this . startOffset , k = this . endOffset ,
CKEDITOR . POSITION _AFTER _START ) ; k . setEnd ( this . startContainer , this . startOffset ) ; k = new CKEDITOR . dom . walker ( k ) ; 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 } ; k . guard = O ; k = k . lastBackward ( ) ; w = w || h ; this . setStartAt ( w ,
! w . is ( "br" ) && ( ! k && this . checkStartOfBlock ( ) || k && w . contains ( k ) ) ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _AFTER _END ) ; if ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ) { k = this . clone ( ) ; k = new CKEDITOR . dom . walker ( k ) ; var J = CKEDITOR . dom . walker . whitespaces ( ) , u = CKEDITOR . dom . walker . bookmark ( ) ; k . evaluator = function ( a ) { return ! J ( a ) && ! u ( a ) } ; if ( ( k = k . previous ( ) ) && k . type == CKEDITOR . NODE _ELEMENT && k . is ( "br" ) ) break } k = this . clone ( ) ; k . collapse ( ) ; k . setEndAt ( h , CKEDITOR . POSITION _BEFORE _END ) ; k = new CKEDITOR . dom . walker ( k ) ; k . guard =
a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? e : O ; w = t = Q = null ; k = k . lastForward ( ) ; w = w || h ; this . setEndAt ( w , ! k && this . checkEndOfBlock ( ) || k && w . contains ( k ) ? 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 g = this . clone ( ) , n = this . startContainer , h = this . endContainer , l = this . startOffset , k = this . endOffset ,
p = c = 1 ; n && n . type == CKEDITOR . NODE _TEXT && ( l ? l >= n . getLength ( ) ? g . setStartAfter ( n ) : ( g . setStartBefore ( n ) , c = 0 ) : g . setStartBefore ( n ) ) ; h && h . type == CKEDITOR . NODE _TEXT && ( k ? k >= h . getLength ( ) ? g . setEndAfter ( h ) : ( g . setEndAfter ( h ) , p = 0 ) : g . setEndBefore ( h ) ) ; var g = new CKEDITOR . dom . walker ( g ) , m = CKEDITOR . dom . walker . bookmark ( ) , G = CKEDITOR . dom . walker . bogus ( ) ; g . evaluator = function ( b ) { return b . type == ( a == CKEDITOR . SHRINK _ELEMENT ? CKEDITOR . NODE _ELEMENT : CKEDITOR . NODE _TEXT ) } ; var L ; g . guard = function ( b , c ) { if ( e && G ( b ) || m ( b ) ) return ! 0 ; if ( a == CKEDITOR . SHRINK _ELEMENT &&
b . type == CKEDITOR . NODE _TEXT || c && b . equals ( L ) || ! 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 || ( L = b ) ; return ! 0 } ; c && ( n = g [ a == CKEDITOR . SHRINK _ELEMENT ? "lastForward" : "next" ] ( ) ) && this . setStartAt ( n , b ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _BEFORE _START ) ; p && ( g . reset ( ) , ( g = g [ a == CKEDITOR . SHRINK _ELEMENT ? "lastBackward" : "previous" ] ( ) ) && this . setEndAt ( g , b ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _AFTER _END ) ) ;
return ! ( ! c && ! p ) } } , 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 ,
@@ -181,8 +182,8 @@ b){var c=this.createBookmark(),d=this.document.createElement(b);this.collapse(a)
a && ( e || ( e = this . fixBlock ( ! 0 , a ) , g = ( new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) ) . block ) , g || ( g = this . fixBlock ( ! 1 , a ) ) ) ; c = e && this . checkStartOfBlock ( ) ; d = g && this . checkEndOfBlock ( ) ; this . deleteContents ( ) ; e && e . equals ( g ) && ( d ? ( n = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) , this . moveToPosition ( g , CKEDITOR . POSITION _AFTER _END ) , g = null ) : c ? ( n = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) , this . moveToPosition ( e , CKEDITOR . POSITION _BEFORE _START ) , e = null ) : ( g = this . splitElement ( e , b ||
! 1 ) , e . is ( "ul" , "ol" ) || e . appendBogus ( ) ) ) ; return { previousBlock : e , nextBlock : g , 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 ( ) ||
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 , g ; e && ! e . equals ( d . root ) && ! e . getFirst ( a ( e ) ) ; ) g = e . getParent ( ) , this [ b ? "setEndAt" : "setStartAt" ] ( e , CKEDITOR . POSITION _AFTER _END ) , e . remove ( 1 ) , e = g ; 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 ( ) { var a = this . startContainer , c = this . startOffset ; CKEDITOR . env . ie && c && a . type == CKEDITOR . NODE _TEXT && ( a = CKEDITOR . tools . ltrim ( a . substring ( 0 , c ) ) , h . test ( a ) && this . trim ( 0 , 1 ) ) ; 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 ( ) { var a = this . endContainer , c = this . endOffset ; CKEDITOR . env . ie && a . type == CKEDITOR . NODE _TEXT && ( a = CKEDITOR . tools . rtrim ( a . substring ( c ) ) , h . test ( a ) && this . trim ( 1 , 0 ) ) ; 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 ) ;
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 ) ;
@@ -202,54 +203,54 @@ d.endNode.equals(c),h&&l&&e.push(c);return e}};CKEDITOR.dom.range.mergeRanges=fu
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 , g ) { a : { null == g && ( g = d ( e ) ) ; for ( var h ; h = g . shift ( ) ; ) if ( h . getDtd ( ) . p ) { g = { element : h , remaining : g } ; break a } g = null } if ( ! g ) return 0 ; if ( ( h = CKEDITOR . filter . instances [ g . element . data ( "cke-filter" ) ] ) && ! h . check ( c ) ) return b ( a ,
c , e , g . remaining ) ; c = new CKEDITOR . dom . range ( g . element ) ; c . selectNodeContents ( g . element ) ; c = c . createIterator ( ) ; c . enlargeBr = a . enlargeBr ; c . enforceRealBlocks = a . enforceRealBlocks ; c . activeFilter = c . filter = h ; a . _ . nestedEditable = { element : g . element , container : e , remaining : g . 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 g = /^[\r\n\t ]+$/ , e = CKEDITOR . dom . walker . bookmark ( ! 1 , ! 0 ) , l = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ,
h = function ( a ) { return e ( a ) && l ( a ) } , k = { dd : 1 , dt : 1 , li : 1 } ; a . prototype = { getNextParagraph : function ( a ) { var d , l , y , z , C ; 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 w = this . range . clone ( ) ; l = w . startPath ( ) ; var n = w . endPath ( ) , H = ! w . collapsed && c ( w , l . block ) , q = ! w . collapsed && c ( w , n . block , 1 ) ; w . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 ) ; H && w . setStartAt ( l . block , CKEDITOR . POSITION _BEFORE _END ) ; q && w . setEndAt ( n . block , CKEDITOR . POSITION _AFTER _START ) ; l = w . endContainer . hasAscendant ( "pre" , ! 0 ) || w . startContainer . hasAscendant ( "pre" , ! 0 ) ; w . enlarge ( this . forceBrBreak && ! l || ! this . enlargeBr ? CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : CKEDITOR . ENLARGE _BLOCK _CONTENTS ) ;
w . collapsed || ( l = new CKEDITOR . dom . walker ( w . clone ( ) ) , n = CKEDITOR . dom . walker . bookmark ( ! 0 , ! 0 ) , l . evaluator = n , this . _ . nextNode = l . next ( ) , l = new CKEDITOR . dom . walker ( w . clone ( ) ) , l . evaluator = n , l = l . previous ( ) , this . _ . lastNode = l . getNextSourceNode ( ! 0 , null , w . 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 && w . root . contains ( this . _ . lastNode ) || ( this . _ . lastNode = this . _ . docEndMarker = w . document . createText ( "" ) , this . _ . lastNode . insertAfter ( l ) ) , w = null ) ; this . _ . started = 1 ; l = w } n = this . _ . nextNode ; w = this . _ . lastNode ; for ( this . _ . nextNode = null ; n ; ) { var H = 0 , q = n . hasAscendant ( "pre" ) , I = n . type != CKEDITOR . NODE _ELEMENT , K = 0 ; if ( I ) n . type == CKEDITOR . NODE _TEXT && g . 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 && ! q && { br : 1 } ) ) { if ( "br" == m ) I = 1 ; else if ( ! l && ! n . getChildCount ( ) && "hr" != m ) { d = n ; y = n . equals ( w ) ; break } l && ( l . setEndAt ( n , CKEDITOR . POSITION _BEFORE _START ) , "br" != m && ( this . _ . nextNode = n ) ) ; H = 1 } else { if ( n . getFirst ( ) ) { l || ( l = this . range . clone ( ) , l . setStartAt ( n , CKEDITOR . POSITION _BEFORE _START ) ) ; n = n . getFirst ( ) ; continue } I = 1 } } I && ! l && ( l = this . range . clone ( ) , l . setStartAt ( n , CKEDITOR . POSITION _BEFORE _START ) ) ;
y = ( ! H || I ) && n . equals ( w ) ; if ( l && ! H ) for ( ; ! n . getNext ( h ) && ! y ; ) { m = n . getParent ( ) ; if ( m . isBlockBoundary ( this . forceBrBreak && ! q && { br : 1 } ) ) { H = 1 ; I = 0 ; y || m . equals ( w ) ; l . setEndAt ( m , CKEDITOR . POSITION _BEFORE _END ) ; break } n = m ; I = 1 ; y = n . equals ( w ) ; K = 1 } I && l . setEndAt ( n , CKEDITOR . POSITION _AFTER _END ) ; n = this . _getNextSourceNode ( n , K , w ) ; if ( ( y = ! n ) || H && l ) break } if ( ! d ) { if ( ! l ) return this . _ . docEndMarker && this . _ . docEndMarker . remove ( ) , this . _ . nextNode = null ; d = new CKEDITOR . dom . elementPath ( l . startContainer , l . root ) ; n = d . blockLimit ; H = { div : 1 , th : 1 , td : 1 } ;
d = d . block ; ! d && n && ! this . enforceRealBlocks && H [ n . getName ( ) ] && l . checkStartOfBlock ( ) && l . checkEndOfBlock ( ) && ! n . equals ( l . root ) ? d = n : ! d || this . enforceRealBlocks && d . is ( k ) ? ( d = this . range . document . createElement ( a ) , l . extractContents ( ) . appendTo ( d ) , d . trim ( ) , l . insertNode ( d ) , z = C = ! 0 ) : "li" != d . getName ( ) ? l . checkStartOfBlock ( ) && l . checkEndOfBlock ( ) || ( d = d . clone ( ! 1 ) , l . extractContents ( ) . appendTo ( d ) , d . trim ( ) , C = l . splitBlock ( ) , z = ! C . wasStartOfBlock , C = ! C . wasEndOfBlock , l . insertNode ( d ) ) : y || ( this . _ . nextNode = d . equals ( w ) ? null : this . _getNextSourceNode ( l . getBoundaryNodes ( ) . endNode ,
1 , w ) ) } z && ( z = d . getPrevious ( ) ) && z . type == CKEDITOR . NODE _ELEMENT && ( "br" == z . getName ( ) ? z . remove ( ) : z . getLast ( ) && "br" == z . getLast ( ) . $ . nodeName . toLowerCase ( ) && z . getLast ( ) . remove ( ) ) ; C && ( 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 = y || d . equals ( w ) || ! w ? null : this . _getNextSourceNode ( d , 1 , w ) ) ; return d } , _getNextSourceNode : function ( a , b , c ) { function d ( a ) { return ! ( a . equals ( c ) || a . equals ( g ) ) } var g =
h = function ( a ) { return e ( a ) && l ( a ) } , k = { dd : 1 , dt : 1 , li : 1 } ; a . prototype = { getNextParagraph : function ( a ) { var d , l , z , x , C ; 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 ( ) ; l = v . startPath ( ) ; var n = v . endPath ( ) , H = ! v . collapsed && c ( v , l . block ) , q = ! v . collapsed && c ( v , n . block , 1 ) ; v . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 ) ; H && v . setStartAt ( l . block , CKEDITOR . POSITION _BEFORE _END ) ; q && v . setEndAt ( n . block , CKEDITOR . POSITION _AFTER _START ) ; l = v . endContainer . hasAscendant ( "pre" , ! 0 ) || v . startContainer . hasAscendant ( "pre" , ! 0 ) ; v . enlarge ( this . forceBrBreak && ! l || ! this . enlargeBr ? CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : CKEDITOR . ENLARGE _BLOCK _CONTENTS ) ;
v . collapsed || ( l = new CKEDITOR . dom . walker ( v . clone ( ) ) , n = CKEDITOR . dom . walker . bookmark ( ! 0 , ! 0 ) , l . evaluator = n , this . _ . nextNode = l . next ( ) , l = new CKEDITOR . dom . walker ( v . clone ( ) ) , l . evaluator = n , l = l . previous ( ) , this . _ . lastNode = l . 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 ( l ) ) , v = null ) ; this . _ . started = 1 ; l = v } n = this . _ . nextNode ; v = this . _ . lastNode ; for ( this . _ . nextNode = null ; n ; ) { var H = 0 , q = n . hasAscendant ( "pre" ) , I = n . type != CKEDITOR . NODE _ELEMENT , K = 0 ; if ( I ) n . type == CKEDITOR . NODE _TEXT && g . 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 && ! q && { br : 1 } ) ) { if ( "br" == m ) I = 1 ; else if ( ! l && ! n . getChildCount ( ) && "hr" != m ) { d = n ; z = n . equals ( v ) ; break } l && ( l . setEndAt ( n , CKEDITOR . POSITION _BEFORE _START ) , "br" != m && ( this . _ . nextNode = n ) ) ; H = 1 } else { if ( n . getFirst ( ) ) { l || ( l = this . range . clone ( ) , l . setStartAt ( n , CKEDITOR . POSITION _BEFORE _START ) ) ; n = n . getFirst ( ) ; continue } I = 1 } } I && ! l && ( l = this . range . clone ( ) , l . setStartAt ( n , CKEDITOR . POSITION _BEFORE _START ) ) ;
z = ( ! H || I ) && n . equals ( v ) ; if ( l && ! H ) for ( ; ! n . getNext ( h ) && ! z ; ) { m = n . getParent ( ) ; if ( m . isBlockBoundary ( this . forceBrBreak && ! q && { br : 1 } ) ) { H = 1 ; I = 0 ; z || m . equals ( v ) ; l . setEndAt ( m , CKEDITOR . POSITION _BEFORE _END ) ; break } n = m ; I = 1 ; z = n . equals ( v ) ; K = 1 } I && l . setEndAt ( n , CKEDITOR . POSITION _AFTER _END ) ; n = this . _getNextSourceNode ( n , K , v ) ; if ( ( z = ! n ) || H && l ) break } if ( ! d ) { if ( ! l ) return this . _ . docEndMarker && this . _ . docEndMarker . remove ( ) , this . _ . nextNode = null ; d = new CKEDITOR . dom . elementPath ( l . startContainer , l . root ) ; n = d . blockLimit ; H = { div : 1 , th : 1 , td : 1 } ;
d = d . block ; ! d && n && ! this . enforceRealBlocks && H [ n . getName ( ) ] && l . checkStartOfBlock ( ) && l . checkEndOfBlock ( ) && ! n . equals ( l . root ) ? d = n : ! d || this . enforceRealBlocks && d . is ( k ) ? ( d = this . range . document . createElement ( a ) , l . extractContents ( ) . appendTo ( d ) , d . trim ( ) , l . insertNode ( d ) , x = C = ! 0 ) : "li" != d . getName ( ) ? l . checkStartOfBlock ( ) && l . checkEndOfBlock ( ) || ( d = d . clone ( ! 1 ) , l . extractContents ( ) . appendTo ( d ) , d . trim ( ) , C = l . splitBlock ( ) , x = ! C . wasStartOfBlock , C = ! C . wasEndOfBlock , l . insertNode ( d ) ) : z || ( this . _ . nextNode = d . equals ( v ) ? null : this . _getNextSourceNode ( l . 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 ( ) ) ; C && ( 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 ( g ) ) } var g =
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 } : F ( g ) ; "$" != f . charAt ( 0 ) && ( g . elements = f ) ; c && ( g . featureName = c . toLowerCase ( ) ) ; var m = g ; m . elements = l ( m . elements , /\s+/ ) || null ; m . propertiesOnly = m . propertiesOnly || ! 0 === m . elements ; var v = /\s*,\s*/ , r = void 0 ; for ( r in Q ) { m [ r ] = l ( m [ r ] , v ) || null ; var E = m , t = S [ r ] , n = l ( m [ S [ r ] ] , v ) , h = m [ r ] , u = [ ] , B = ! 0 , O = void 0 ; n ? B = ! 1 : n = { } ; for ( O in h ) "!" == O . charAt ( 0 ) && ( O = O . slice ( 1 ) , u . push ( O ) , n [ O ] = ! 0 , B = ! 1 ) ; for ( ; O = u . pop ( ) ; ) h [ O ] =
h [ "!" + O ] , delete h [ "!" + O ] ; E [ t ] = ( B ? ! 1 : n ) || null } m . match = m . match || null ; d . push ( g ) ; a . push ( g ) } b = e . elements ; e = e . generic ; var G ; c = 0 ; for ( d = a . length ; c < d ; ++ c ) { f = F ( a [ c ] ) ; g = ! 0 === f . classes || ! 0 === f . styles || ! 0 === f . attributes ; m = f ; r = t = v = void 0 ; for ( v in Q ) m [ v ] = H ( m [ v ] ) ; E = ! 0 ; for ( r in S ) { v = S [ r ] ; t = m [ v ] ; n = [ ] ; h = void 0 ; for ( h in t ) - 1 < h . indexOf ( "*" ) ? n . push ( new RegExp ( "^" + h . replace ( /\*/g , ".*" ) + "$" ) ) : n . push ( h ) ; t = n ; t . length && ( m [ v ] = t , E = ! 1 ) } m . nothingRequired = E ; m . noProperties = ! ( m . attributes || m . classes || m . styles ) ; if ( ! 0 === f . elements ||
( 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 } : F ( g ) ; "$" != f . charAt ( 0 ) && ( g . elements = f ) ; c && ( g . featureName = c . toLowerCase ( ) ) ; var m = g ; m . elements = l ( m . elements , /\s+/ ) || null ; m . propertiesOnly = m . propertiesOnly || ! 0 === m . elements ; var u = /\s*,\s*/ , r = void 0 ; for ( r in Q ) { m [ r ] = l ( m [ r ] , u ) || null ; var E = m , t = S [ r ] , h = l ( m [ S [ r ] ] , u ) , n = m [ r ] , w = [ ] , B = ! 0 , O = void 0 ; h ? B = ! 1 : h = { } ; for ( O in n ) "!" == O . charAt ( 0 ) && ( O = O . slice ( 1 ) , w . push ( O ) , h [ O ] = ! 0 , B = ! 1 ) ; for ( ; O = w . pop ( ) ; ) n [ O ] =
n [ "!" + O ] , delete n [ "!" + O ] ; E [ t ] = ( B ? ! 1 : h ) || null } m . match = m . match || null ; d . push ( g ) ; a . push ( g ) } b = e . elements ; e = e . generic ; var G ; c = 0 ; for ( d = a . length ; c < d ; ++ c ) { f = F ( a [ c ] ) ; g = ! 0 === f . classes || ! 0 === f . styles || ! 0 === f . attributes ; m = f ; r = t = u = void 0 ; for ( u in Q ) m [ u ] = H ( m [ u ] ) ; E = ! 0 ; for ( r in S ) { u = S [ r ] ; t = m [ u ] ; h = [ ] ; n = void 0 ; for ( n in t ) - 1 < n . indexOf ( "*" ) ? h . push ( new RegExp ( "^" + n . replace ( /\*/g , ".*" ) + "$" ) ) : h . push ( n ) ; t = h ; t . length && ( m [ u ] = t , E = ! 1 ) } m . nothingRequired = E ; m . noProperties = ! ( m . attributes || m . classes || m . styles ) ; if ( ! 0 === f . elements ||
null === f . elements ) e [ g ? "unshift" : "push" ] ( f ) ; else for ( G in m = f . elements , delete f . elements , m ) if ( b [ G ] ) b [ G ] [ g ? "unshift" : "push" ] ( f ) ; else b [ G ] = [ 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 = g ( a . attributes , b . attributes ) || c . hadInvalidAttribute ; c . hadInvalidStyle = g ( a . styles , b . styles ) || c . hadInvalidStyle ; a = a . classes ; b = b . classes ; if ( a ) { for ( var d = ! 1 , e = ! 0 === a , f = b . length ; f -- ; ) if ( e || a ( b [ f ] ) ) b . splice ( f , 1 ) , d = ! 0 ; a = d } else a = ! 1 ; c . hadInvalidClass = a || c . hadInvalidClass } } function g ( 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 l ( a , b ) { if ( ! a ) return ! 1 ; if ( ! 0 === a ) return a ; if ( "string" == typeof a ) return a = E ( 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 k ( b . styles , a . requiredStyles ) && k ( b . attributes , a . requiredAttributes ) } function k ( 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 p ( a ) { if ( ! a ) return { } ;
a = a . split ( /\s*,\s*/ ) . sort ( ) ; for ( var b = { } ; a . length ; ) b [ a . shift ( ) ] = "cke-test" ; return b } function f ( a ) { var b , c , d , e , f = { } , g = 1 ; for ( a = E ( a ) ; b = a . match ( t ) ; ) ( c = b [ 2 ] ) ? ( d = x ( c , "styles" ) , e = x ( c , "attrs" ) , c = x ( 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 x ( a , b ) { var c = a . match ( O [ b ] ) ; return c ? E ( c [ 1 ] ) : null } function y ( 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 ( J , "$1" ) ) ; if ( f . doCallbacks && a . elementCallbacks ) { a : { r = a . elementCallbacks ; for ( var t = 0 , E = r . length , h ; t < E ; ++ t ) if ( h = r [ t ] ( b ) ) { r = h ; break a } r = void 0 } if ( r ) return r } if ( f . doTransform && ( r = a . _ . transformations [ b . name ] ) ) { y ( b ) ; for ( t = 0 ; t < r . length ; ++ t ) m ( a , b , r [ t ] ) ; w ( b ) } if ( f . doFilter ) { a : { t = b . name ; E = a . _ ; a = E . allowedRules . elements [ t ] ; r = E . allowedRules . generic ; t = E . disallowedRules . elements [ t ] ; E = E . disallowedRules . generic ;
h = f . skipRequired ; var l = { valid : ! 1 , validAttributes : { } , validClasses : { } , validStyles : { } , allAttributes : ! 1 , allClasses : ! 1 , allStyles : ! 1 , hadInvalidAttribute : ! 1 , hadInvalidClass : ! 1 , hadInvalidStyle : ! 1 } , u , F ; if ( a || r ) { y ( b ) ; if ( t ) for ( u = 0 , F = t . length ; u < F ; ++ u ) if ( ! 1 === c ( t [ u ] , b , l ) ) { a = null ; break a } if ( E ) for ( u = 0 , F = E . length ; u < F ; ++ u ) c ( E [ u ] , b , l ) ; if ( a ) for ( u = 0 , F = a . length ; u < F ; ++ u ) d ( a [ u ] , b , l , h ) ; if ( r ) for ( u = 0 , F = r . length ; u < F ; ++ u ) d ( r [ u ] , b , l , h ) ; a = l } else a = null } if ( ! a || ! a . valid ) return e . push ( b ) , 1 ; F = a . validAttributes ; var O = a . validStyles ;
r = a . validClasses ; var t = b . attributes , B = b . styles , E = b . classes ; h = b . classBackup ; var G = b . styleBackup , k , A , L = [ ] , l = [ ] , Q = /^data-cke-/ ; u = ! 1 ; delete t . style ; delete t [ "class" ] ; delete b . classBackup ; delete b . styleBackup ; if ( ! a . allAttributes ) for ( k in t ) F [ k ] || ( Q . test ( k ) ? k == ( A = k . replace ( /^data-cke-saved-/ , "" ) ) || F [ A ] || ( delete t [ k ] , u = ! 0 ) : ( delete t [ k ] , u = ! 0 ) ) ; if ( ! a . allStyles || a . hadInvalidStyle ) { for ( k in B ) a . allStyles || O [ k ] ? L . push ( k + ":" + B [ k ] ) : u = ! 0 ; L . length && ( t . style = L . sort ( ) . join ( "; " ) ) } else G && ( t . style = G ) ; if ( ! a . allClasses ||
a . hadInvalidClass ) { for ( k = 0 ; k < E . length ; ++ k ) ( a . allClasses || r [ E [ k ] ] ) && l . push ( E [ k ] ) ; l . length && ( t [ "class" ] = l . sort ( ) . join ( " " ) ) ; h && l . length < h . split ( /\s+/ ) . length && ( u = ! 0 ) } else h && ( t [ "class" ] = h ) ; u && ( g = 1 ) ; if ( ! f . skipFinalValidation && ! n ( b ) ) return e . push ( b ) , 1 } f . toHtml && ( b . name = b . name . replace ( v , "cke:$1" ) ) ; return g } function C ( 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 w ( a ) { var b = a . attributes , c ; delete b . style ; delete b [ "class" ] ;
a = a . split ( /\s*,\s*/ ) . sort ( ) ; for ( var b = { } ; a . length ; ) b [ a . shift ( ) ] = "cke-test" ; return b } function f ( a ) { var b , c , d , e , f = { } , g = 1 ; for ( a = E ( 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 ? E ( 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 ( J , "$1" ) ) ; if ( f . doCallbacks && a . elementCallbacks ) { a : { r = a . elementCallbacks ; for ( var t = 0 , E = r . length , h ; t < E ; ++ t ) if ( h = r [ t ] ( b ) ) { r = h ; 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 ; E = a . _ ; a = E . allowedRules . elements [ t ] ; r = E . allowedRules . generic ; t = E . disallowedRules . elements [ t ] ; E = E . disallowedRules . generic ;
h = f . skipRequired ; var l = { valid : ! 1 , validAttributes : { } , validClasses : { } , validStyles : { } , allAttributes : ! 1 , allClasses : ! 1 , allStyles : ! 1 , hadInvalidAttribute : ! 1 , hadInvalidClass : ! 1 , hadInvalidStyle : ! 1 } , w , F ; if ( a || r ) { z ( b ) ; if ( t ) for ( w = 0 , F = t . length ; w < F ; ++ w ) if ( ! 1 === c ( t [ w ] , b , l ) ) { a = null ; break a } if ( E ) for ( w = 0 , F = E . length ; w < F ; ++ w ) c ( E [ w ] , b , l ) ; if ( a ) for ( w = 0 , F = a . length ; w < F ; ++ w ) d ( a [ w ] , b , l , h ) ; if ( r ) for ( w = 0 , F = r . length ; w < F ; ++ w ) d ( r [ w ] , b , l , h ) ; a = l } else a = null } if ( ! a || ! a . valid ) return e . push ( b ) , 1 ; F = a . validAttributes ; var O = a . validStyles ;
r = a . validClasses ; var t = b . attributes , B = b . styles , E = b . classes ; h = b . classBackup ; var G = b . styleBackup , k , A , L = [ ] , l = [ ] , Q = /^data-cke-/ ; w = ! 1 ; delete t . style ; delete t [ "class" ] ; delete b . classBackup ; delete b . styleBackup ; if ( ! a . allAttributes ) for ( k in t ) F [ k ] || ( Q . test ( k ) ? k == ( A = k . replace ( /^data-cke-saved-/ , "" ) ) || F [ A ] || ( delete t [ k ] , w = ! 0 ) : ( delete t [ k ] , w = ! 0 ) ) ; if ( ! a . allStyles || a . hadInvalidStyle ) { for ( k in B ) a . allStyles || O [ k ] ? L . push ( k + ":" + B [ k ] ) : w = ! 0 ; L . length && ( t . style = L . sort ( ) . join ( "; " ) ) } else G && ( t . style = G ) ; if ( ! a . allClasses ||
a . hadInvalidClass ) { for ( k = 0 ; k < E . length ; ++ k ) ( a . allClasses || r [ E [ k ] ] ) && l . push ( E [ k ] ) ; l . length && ( t [ "class" ] = l . sort ( ) . join ( " " ) ) ; h && l . length < h . split ( /\s+/ ) . length && ( w = ! 0 ) } else h && ( t [ "class" ] = h ) ; w && ( g = 1 ) ; if ( ! f . skipFinalValidation && ! n ( b ) ) return e . push ( b ) , 1 } f . toHtml && ( b . name = b . name . replace ( u , "cke:$1" ) ) ; return g } function C ( 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 = C ( a ) ; return function ( c ) { return c in a || b && c . match ( b ) } } function q ( ) { return new CKEDITOR . htmlParser . element ( "br" ) } function I ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && ( "br" ==
a . name || r . $block [ a . name ] ) } function K ( a , b , c ) { var d = a . name ; if ( r . $empty [ d ] || ! a . children . length ) "hr" == d && "br" == b ? a . replaceWith ( q ( ) ) : ( 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 = q ( ) , b . insertBefore ( a ) ) , a . next && ! I ( a . next ) && ( b = q ( ) , 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 , v , t , g = d . length ; 0 < g ; ) m = d [ -- g ] , f && ( m . type == CKEDITOR . NODE _TEXT || m . type == CKEDITOR . NODE _ELEMENT && r . $inline [ m . name ] ) ? ( v || ( v = new CKEDITOR . htmlParser . element ( b ) , v . insertAfter ( a ) , c . push ( { check : "parent-down" , el : v } ) ) , v . add ( m , 0 ) ) : ( v = 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 , B ) ; break } } function G ( a , b ) { var c = b . getDefinition ( ) , d = c . attributes , e = c . styles , f , m , g , v ; if ( a . name != c . element ) return ! 1 ; for ( f in d ) if ( "class" == f ) for ( c = d [ f ] . split ( /\s+/ ) , g = a . classes . join ( "|" ) ; v = c . pop ( ) ; ) { if ( - 1 == g . indexOf ( v ) ) return ! 1 } else if ( a . attributes [ f ] != d [ f ] ) return ! 1 ; for ( m in e ) if ( a . styles [ m ] !=
e [ m ] ) return ! 1 ; return ! 0 } function L ( 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 G ( b , a ) } } function M ( a ) { return function ( b , c ) { c [ a ] ( b ) } } var r = CKEDITOR . dtd , F = CKEDITOR . tools . copy , E = CKEDITOR . tools . trim , u = [ "" , "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 ( u [ c . enterMode ] +
" " + u [ 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 m , g ; if ( "string" == typeof b ) b = f ( b ) ; else if ( b instanceof CKEDITOR . style ) { if ( b . toAllowedContentRules ) return this . allow ( b . toAllowedContentRules ( this . editor ) , c , d ) ; m = b . getDefinition ( ) ; b = { } ; d = m . attributes ; b [ m . element ] = m = { styles : m . styles , requiredStyles : m . styles && CKEDITOR . tools . object . keys ( m . styles ) } ;
d && ( d = F ( d ) , m . classes = d [ "class" ] ? d [ "class" ] . split ( /\s+/ ) : null , m . requiredClasses = m . classes , delete d [ "class" ] , m . attributes = d , m . requiredAttributes = d && CKEDITOR . tools . object . keys ( d ) ) } else if ( CKEDITOR . tools . isArray ( b ) ) { for ( m = 0 ; m < b . length ; ++ m ) g = this . allow ( b [ m ] , c , d ) ; return g } 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 = [ ] , m = this . editor && this . editor . config . protectedSource , g , v = ! 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 ( g = z ( e , a , f , t ) , g & 1 ) v = ! 0 ; else if ( g & 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 , E , h ; if ( m ) for ( E = 0 ; E < m . length ; ++ E ) if ( ( h = d . match ( m [ E ] ) ) && h [ 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 , t ) ; c = ! c . length } c || f . push ( a ) } } , null , ! 0 ) ; f . length && ( v = ! 0 ) ; var E ; a = [ ] ; d = u [ d || ( this . editor ? this . editor . enterMode : CKEDITOR . ENTER _P ) ] ; for ( var h ; c = f . pop ( ) ; ) c . type == CKEDITOR . NODE _ELEMENT ? K ( c , d , a ) : c . remove ( ) ; for ( ; E = a . pop ( ) ; ) if ( c = E . el , c . parent ) switch ( h = r [ c . parent . name ] || r . span , E . check ) { case "it" : r . $removeEmpty [ c . name ] && ! c . children . length ? K ( c , d , a ) : n ( c ) || K ( c , d , a ) ; break ; case "el-up" : c . parent . type ==
CKEDITOR . NODE _DOCUMENT _FRAGMENT || h [ c . name ] || K ( c , d , a ) ; break ; case "parent-down" : c . parent . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || h [ c . name ] || K ( c . parent , d , a ) } return v } , 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 = f ( b ) ) ; a ( this , b , null , this . disallowedContent , this . _ . disallowedRules ) ; return ! 0 } ,
{ } , c . push ( { check : "parent-down" , el : a } ) ; else { e = a . parent ; for ( var f = e . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || "body" == e . name , u , t , g = d . length ; 0 < g ; ) m = d [ -- g ] , f && ( m . type == CKEDITOR . NODE _TEXT || m . type == CKEDITOR . NODE _ELEMENT && r . $inline [ m . name ] ) ? ( u || ( u = new CKEDITOR . htmlParser . element ( b ) , u . insertAfter ( a ) , c . push ( { check : "parent-down" , el : u } ) ) , u . add ( m , 0 ) ) : ( u = 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 , B ) ; break } } function G ( a , b ) { var c = b . getDefinition ( ) , d = c . attributes , e = c . styles , f , m , g , u ; if ( a . name != c . element ) return ! 1 ; for ( f in d ) if ( "class" == f ) for ( c = d [ f ] . split ( /\s+/ ) , g = a . classes . join ( "|" ) ; u = c . pop ( ) ; ) { if ( - 1 == g . indexOf ( u ) ) return ! 1 } else if ( a . attributes [ f ] != d [ f ] ) return ! 1 ; for ( m in e ) if ( a . styles [ m ] !=
e [ m ] ) return ! 1 ; return ! 0 } function L ( 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 G ( b , a ) } } function M ( a ) { return function ( b , c ) { c [ a ] ( b ) } } var r = CKEDITOR . dtd , F = CKEDITOR . tools . copy , E = 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 m , g ; if ( "string" == typeof b ) b = f ( b ) ; else if ( b instanceof CKEDITOR . style ) { if ( b . toAllowedContentRules ) return this . allow ( b . toAllowedContentRules ( this . editor ) , c , d ) ; m = b . getDefinition ( ) ; b = { } ; d = m . attributes ; b [ m . element ] = m = { styles : m . styles , requiredStyles : m . styles && CKEDITOR . tools . object . keys ( m . styles ) } ;
d && ( d = F ( d ) , m . classes = d [ "class" ] ? d [ "class" ] . split ( /\s+/ ) : null , m . requiredClasses = m . classes , delete d [ "class" ] , m . attributes = d , m . requiredAttributes = d && CKEDITOR . tools . object . keys ( d ) ) } else if ( CKEDITOR . tools . isArray ( b ) ) { for ( m = 0 ; m < b . length ; ++ m ) g = this . allow ( b [ m ] , c , d ) ; return g } 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 = [ ] , m = this . editor && this . editor . config . protectedSource , g , u = ! 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 ( g = x ( e , a , f , t ) , g & 1 ) u = ! 0 ; else if ( g & 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 , E , h ; if ( m ) for ( E = 0 ; E < m . length ; ++ E ) if ( ( h = d . match ( m [ E ] ) ) && h [ 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 && ( u = ! 0 ) ; var E ; a = [ ] ; d = w [ d || ( this . editor ? this . editor . enterMode : CKEDITOR . ENTER _P ) ] ; for ( var h ; c = f . pop ( ) ; ) c . type == CKEDITOR . NODE _ELEMENT ? K ( c , d , a ) : c . remove ( ) ; for ( ; E = a . pop ( ) ; ) if ( c = E . el , c . parent ) switch ( h = r [ c . parent . name ] || r . span , E . check ) { case "it" : r . $removeEmpty [ c . name ] && ! c . children . length ? K ( c , d , a ) : n ( c ) || K ( c , d , a ) ; break ; case "el-up" : c . parent . type ==
CKEDITOR . NODE _DOCUMENT _FRAGMENT || h [ c . name ] || K ( c , d , a ) ; break ; case "parent-down" : c . parent . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || h [ c . name ] || K ( c . parent , d , a ) } return u } , 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 = f ( 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 ( L ( 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 , m = void 0 , g = void 0 , v = void 0 , t = void 0 , r = void 0 ; c = [ ] ; for ( m = 0 ; m < b . length ; ++ m ) g = b [ m ] , "string" == typeof g ? ( g = g . split ( /\s*:\s*/ ) , v = g [ 0 ] , t = null , r = g [ 1 ] ) : ( v = g . check , t = g . left , r = g . right ) , f || ( f = g , f = f . element ? f . element : v ? v . match ( /^([a-z0-9]+)/i ) [ 0 ] :
f . left . getDefinition ( ) . element ) , t instanceof CKEDITOR . style && ( t = A ( t ) ) , c . push ( { check : v == f ? null : v , left : t , right : "string" == typeof r ? M ( 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 , g ; if ( "string" == typeof a ) { g = a + "\x3c" + ( ! 1 === b ? "0" : "1" ) + ( c ? "1" : "0" ) + "\x3e" ; if ( g in this . _ . cachedChecks ) return this . _ . cachedChecks [ g ] ; e = f ( a ) . $1 ; var v = e . styles , d = e . classes ; e . name = e . elements ;
e . classes = d = d ? d . split ( /\s*,\s*/ ) : [ ] ; e . styles = p ( v ) ; e . attributes = p ( e . attributes ) ; e . children = [ ] ; d . length && ( e . attributes [ "class" ] = d . join ( " " ) ) ; v && ( e . attributes . style = CKEDITOR . tools . writeCssText ( e . styles ) ) } else e = a . getDefinition ( ) , v = e . styles , d = e . attributes || { } , v && ! CKEDITOR . tools . isEmpty ( v ) ? ( v = F ( v ) , d . style = CKEDITOR . tools . writeCssText ( v , ! 0 ) ) : v = { } , e = { name : e . element , attributes : d , classes : d [ "class" ] ? d [ "class" ] . split ( /\s+/ ) : [ ] , styles : v , children : [ ] } ; var v = 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 ] ) ; w ( e ) } z ( this , v , 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 , v . attributes , ! 0 ) , b && ( e . attributes [ "class" ] = b ) ) ; "string" == typeof a && ( this . _ . cachedChecks [ g ] = 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 ( u [ 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 : /\(([^\)]+)\)/ } , J = /^cke:(object|embed|param)$/ , v = /^(object|embed|param)$/ , B ; B = CKEDITOR . filter . transformationsTools = { sizeToStyle : function ( a ) { this . lengthToStyle ( a ,
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 , m = void 0 , g = void 0 , u = void 0 , t = void 0 , r = void 0 ; c = [ ] ; for ( m = 0 ; m < b . length ; ++ m ) g = b [ m ] , "string" == typeof g ? ( g = g . split ( /\s*:\s*/ ) , u = g [ 0 ] , t = null , r = g [ 1 ] ) : ( u = g . check , t = g . left , r = g . right ) , f || ( f = g , f = f . element ? f . element : u ? u . match ( /^([a-z0-9]+)/i ) [ 0 ] :
f . left . getDefinition ( ) . element ) , t instanceof CKEDITOR . style && ( t = A ( t ) ) , c . push ( { check : u == f ? null : u , left : t , right : "string" == typeof r ? M ( 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 , g ; if ( "string" == typeof a ) { g = a + "\x3c" + ( ! 1 === b ? "0" : "1" ) + ( c ? "1" : "0" ) + "\x3e" ; if ( g in this . _ . cachedChecks ) return this . _ . cachedChecks [ g ] ; e = f ( a ) . $1 ; var u = e . styles , d = e . classes ; e . name = e . elements ;
e . classes = d = d ? d . split ( /\s*,\s*/ ) : [ ] ; e . styles = p ( u ) ; e . attributes = p ( e . attributes ) ; e . children = [ ] ; d . length && ( e . attributes [ "class" ] = d . join ( " " ) ) ; u && ( e . attributes . style = CKEDITOR . tools . writeCssText ( e . styles ) ) } else e = a . getDefinition ( ) , u = e . styles , d = e . attributes || { } , u && ! CKEDITOR . tools . isEmpty ( u ) ? ( u = F ( u ) , d . style = CKEDITOR . tools . writeCssText ( u , ! 0 ) ) : u = { } , e = { name : e . element , attributes : d , classes : d [ "class" ] ? d [ "class" ] . split ( /\s+/ ) : [ ] , styles : u , children : [ ] } ; var u = 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 , u , 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 , u . attributes , ! 0 ) , b && ( e . attributes [ "class" ] = b ) ) ; "string" == typeof a && ( this . _ . cachedChecks [ g ] = 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 : /\(([^\)]+)\)/ } , J = /^cke:(object|embed|param)$/ , u = /^(object|embed|param)$/ , B ; B = 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 : G , transform : function ( a , b ) { if ( "string" == typeof b ) a . name = b ; else { var c = b . getDefinition ( ) , d = c . styles , e = c . attributes , f , m , g , v ; a . name = c . element ; for ( f in e ) if ( "class" ==
f ) for ( c = a . classes . join ( "|" ) , g = e [ f ] . split ( /\s+/ ) ; v = g . pop ( ) ; ) - 1 == c . indexOf ( v ) && a . classes . push ( v ) ; else a . attributes [ f ] = e [ f ] ; for ( m in d ) a . styles [ m ] = d [ m ] } } } } ) ( ) ;
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 : G , transform : function ( a , b ) { if ( "string" == typeof b ) a . name = b ; else { var c = b . getDefinition ( ) , d = c . styles , e = c . attributes , f , m , g , u ; a . name = c . element ; for ( f in e ) if ( "class" ==
f ) for ( c = a . classes . join ( "|" ) , g = e [ f ] . split ( /\s+/ ) ; u = g . pop ( ) ; ) - 1 == c . indexOf ( u ) && a . classes . push ( u ) ; else a . attributes [ f ] = e [ f ] ; for ( m in d ) a . styles [ m ] = d [ m ] } } } } ) ( ) ;
( 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 g = { blur : function ( ) { a . equals ( this . currentActive ) && this . blur ( ) } , focus : function ( ) { this . focus ( a ) } } ; a . on ( b , g . focus , this ) ; a . on ( c , g . blur , this ) ; d && ( CKEDITOR . event . useCapture = 0 ) ; a . setCustomData ( "focusmanager" , this ) ; a . setCustomData ( "focusmanager_handlers" , g ) } } , remove : function ( a ) { a . removeCustomData ( "focusmanager" ) ; var d = a . removeCustomData ( "focusmanager_handlers" ) ; a . removeListener ( "blur" , d . blur ) ; a . removeListener ( "focus" ,
@@ -257,14 +258,14 @@ 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 ] , l = this . _ . editor ; a = ! 1 === l . fire ( "key" , { keyCode : d , domEvent : b } ) ; a || ( e && ( a = ! 1 !== l . 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]+))?/ ) , g = c [ 1 ] , c = c [ 2 ] ; b [ g + "-" + c ] ? g = g + "-" + c : b [ g ] || ( g = null ) ; CKEDITOR . lang . detect = g ? function ( ) { return g } : function ( a ) { return a } ; return g || a } } } ) ( ) ;
CKEDITOR . scriptLoader = function ( ) { var a = { } , d = { } ; return { load : function ( b , c , g , e ) { var l = "string" == typeof b ; l && ( b = [ b ] ) ; g || ( g = CKEDITOR ) ; var h = b . length , k = h , p = [ ] , f = [ ] , x = function ( a ) { c && ( l ? c . call ( g , a ) : c . call ( g , p , f ) ) } ; if ( 0 === k ) x ( ! 0 ) ; else { var y = function ( a , b ) { ( b ? p : f ) . push ( a ) ; 0 >= -- k && ( e && CKEDITOR . document . getDocumentElement ( ) . removeStyle ( "cursor" ) , x ( 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 ) } , C = function ( b ) { if ( a [ b ] ) y ( b , ! 0 ) ; else { var e = d [ b ] || ( d [ b ] = [ ] ) ; e . push ( y ) ; 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 w = 0 ; w < h ; w ++ ) C ( b [ w ] ) } } , queue : function ( ) { function a ( ) { var b ; ( b = c [ 0 ] ) && this . load ( b . scriptUrl , b . callback , CKEDITOR , 0 ) } var c = [ ] ; return function ( d , e ) { var l = this ; c . push ( { scriptUrl : d , callback : function ( ) { e && e . apply ( this , arguments ) ; c . shift ( ) ; a . call ( l ) } } ) ; 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 , g , e ) { var l = "string" == typeof b ; l && ( b = [ b ] ) ; g || ( g = CKEDITOR ) ; var h = b . length , k = h , p = [ ] , f = [ ] , y = function ( a ) { c && ( l ? c . call ( g , a ) : c . call ( g , p , f ) ) } ; if ( 0 === k ) y ( ! 0 ) ; else { var z = function ( a , b ) { ( b ? p : f ) . push ( a ) ; 0 >= -- k && ( 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 ) } , C = 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 ++ ) C ( 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 l = this ; c . push ( { scriptUrl : d , callback : function ( ) { e && e . apply ( this , arguments ) ; c . shift ( ) ; a . call ( l ) } } ) ; 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 , g = this . registered , e = [ ] , l = { } , h = { } , k = 0 ; k < a . length ; k ++ ) { var p = a [ k ] ; if ( p ) if ( c [ p ] || g [ p ] ) h [ p ] = this . get ( p ) ; else { var f = this . getFilePath ( p ) ; e . push ( f ) ; f in l || ( l [ f ] = [ ] ) ; l [ f ] . push ( p ) } } CKEDITOR . scriptLoader . load ( e ,
function ( a , e ) { if ( e . length ) throw Error ( '[CKEDITOR.resourceManager.load] Resource name "' + l [ e [ 0 ] ] . join ( "," ) + '" was not found at "' + e [ 0 ] + '".' ) ; for ( var f = 0 ; f < a . length ; f ++ ) for ( var g = l [ a [ f ] ] , k = 0 ; k < g . length ; k ++ ) { var n = g [ k ] ; 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 , g ) { var e = { } , l = function ( b ) { a . call ( this , b , function ( a ) { CKEDITOR . tools . extend ( e , a ) ; var b = [ ] , f ; for ( f in a ) { var h = a [ f ] , y = h && h . requires ; if ( ! d [ f ] ) { if ( h . icons ) for ( var z = h . icons . split ( "," ) , C = z . length ; C -- ; ) CKEDITOR . skin . addIcon ( z [ C ] , h . path + "icons/" + ( CKEDITOR . env . hidpi && h . hidpi ? "hidpi/" : "" ) + z [ C ] + ".png" ) ; h . isSupportedEnvironment = h . isSupportedEnvironment || function ( ) { return ! 0 } ; d [ f ] = 1 } if ( y ) for ( y . split && ( y =
y . split ( "," ) ) , h = 0 ; h < y . length ; h ++ ) e [ y [ h ] ] || b . push ( y [ h ] ) } if ( b . length ) l . call ( this , b ) ; else { for ( f in e ) h = e [ f ] , h . onLoad && ! h . onLoad . _called && ( ! 1 === h . onLoad ( ) && delete e [ f ] , h . onLoad . _called = 1 ) ; c && c . call ( g || window , e ) } } , this ) } ; l . 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 . plugins . load = CKEDITOR . tools . override ( CKEDITOR . plugins . load , function ( a ) { var d = { } ; return function ( b , c , g ) { var e = { } , l = function ( b ) { a . call ( this , b , function ( a ) { CKEDITOR . tools . extend ( e , a ) ; var b = [ ] , f ; for ( f in a ) { var h = a [ f ] , z = h && h . requires ; if ( ! d [ f ] ) { if ( h . icons ) for ( var x = h . icons . split ( "," ) , C = x . length ; C -- ; ) CKEDITOR . skin . addIcon ( x [ C ] , h . path + "icons/" + ( CKEDITOR . env . hidpi && h . hidpi ? "hidpi/" : "" ) + x [ C ] + ".png" ) ; h . isSupportedEnvironment = h . isSupportedEnvironment || function ( ) { return ! 0 } ; d [ f ] = 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 ) l . call ( this , b ) ; else { for ( f in e ) h = e [ f ] , h . onLoad && ! h . onLoad . _called && ( ! 1 === h . onLoad ( ) && delete e [ f ] , h . onLoad . _called = 1 ) ; c && c . call ( g || window , e ) } } , this ) } ; l . 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 ) ;
@@ -272,23 +273,23 @@ d},space:function(a){return CKEDITOR.document.getById(this.spaceId(a))},spaceId:
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" + ++ C ; 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 ) g ( this , a [ b ] ) } function g ( 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 l ( a ) { var b = a . config . customConfig ; if ( ! b ) return ! 1 ; var b = CKEDITOR . getUrl ( b ) , c = w [ b ] || ( w [ b ] = { } ) ; c . fn ? ( c . fn . call ( a , a . config ) , CKEDITOR . getUrl ( a . config . customConfig ) != b && l ( a ) || a . fireOnce ( "customConfigLoaded" ) ) : CKEDITOR . scriptLoader . queue ( b , function ( ) { c . fn = c . fn || CKEDITOR . editorConfig || function ( ) { } ; l ( 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 . 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 l ( 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 && l ( a ) || a . fireOnce ( "customConfigLoaded" ) ) : CKEDITOR . scriptLoader . queue ( b , function ( ) { c . fn = c . fn || CKEDITOR . editorConfig || function ( ) { } ; l ( 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 ) ; k ( a ) } ) ; b && null != b . customConfig && ( a . config . customConfig = b . customConfig ) ; l ( a ) || a . fireOnce ( "customConfigLoaded" ) }
function k ( a ) { CKEDITOR . skin . loadPart ( "editor" , function ( ) { p ( a ) } ) } function p ( 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" ) ; f ( a ) } ) } function f ( a ) { a . getStylesSet ( function ( b ) { a . once ( "loaded" ,
function ( ) { a . fire ( "stylesSet" , { styles : b } ) } , null , null , 1 ) ; x ( a ) } ) } function x ( 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 ( ) { 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 m in b ) { var g = b [ m ] , l = g . lang , k = null , t = g . 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 : m } ) ; l && ! a . lang [ m ] && ( l . split && ( l = l . split ( "," ) ) , 0 <= CKEDITOR . tools . indexOf ( l , a . langCode ) ? k = a . langCode : ( k = a . langCode . replace ( /-.*/ , "" ) , k = k != a . langCode && 0 <= CKEDITOR . tools . indexOf ( l , k ) ? k : 0 <= CKEDITOR . tools . indexOf ( l ,
"en" ) ? "en" : l [ 0 ] ) , g . langEntries && g . langEntries [ k ] ? ( a . lang [ m ] = g . langEntries [ k ] , k = null ) : f . push ( CKEDITOR . getUrl ( g . path + "lang/" + k + ".js" ) ) ) ; e . push ( k ) ; d . push ( g ) } 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 y ( ) { 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 ;
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 , l = 0 ; l < a . length ; l ++ ) { var k = a [ l ] , r = k . startContainer . getAscendant ( "tr" , ! 0 ) ; c ( k ) ? ( 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 ( k ) ) ) :
e . append ( k . cloneContents ( ) ) } return f ? e : b . getHtmlFromRange ( a [ 0 ] ) } a . prototype = CKEDITOR . editor . prototype ; CKEDITOR . editor = a ; var C = 0 , w = { } ; 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 && g ( this , c ) ; return this . commands [ a ] =
e . append ( k . cloneContents ( ) ) } return f ? e : b . getHtmlFromRange ( a [ 0 ] ) } a . prototype = CKEDITOR . editor . prototype ; CKEDITOR . editor = a ; var C = 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 && g ( 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 && y . 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 ,
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 = 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 y . 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 ) &&
{ 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 . ELEMENT _MODE _NONE = 0 ; CKEDITOR . ELEMENT _MODE _REPLACE = 1 ; CKEDITOR . ELEMENT _MODE _APPENDTO = 2 ;
@@ -305,13 +306,13 @@ CKEDITOR.htmlParser.comment.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlPar
( function ( ) { CKEDITOR . htmlParser . text = function ( a ) { this . value = a ; this . _ = { isBlockLike : ! 1 } } ; CKEDITOR . htmlParser . text . prototype = CKEDITOR . tools . extend ( new CKEDITOR . htmlParser . node , { type : CKEDITOR . NODE _TEXT , filter : function ( a , d ) { if ( ! ( this . value = a . onText ( d , this . value , this ) ) ) return this . remove ( ) , ! 1 } , writeHtml : function ( a , d ) { d && this . filter ( d ) ; a . text ( this . value ) } } ) } ) ( ) ; "use strict" ;
( function ( ) { CKEDITOR . htmlParser . cdata = function ( a ) { this . value = a } ; CKEDITOR . htmlParser . cdata . prototype = CKEDITOR . tools . extend ( new CKEDITOR . htmlParser . node , { type : CKEDITOR . NODE _TEXT , filter : function ( ) { } , writeHtml : function ( a ) { a . write ( this . value ) } } ) } ) ( ) ; "use strict" ; CKEDITOR . htmlParser . fragment = function ( ) { this . children = [ ] ; this . parent = null ; this . _ = { isBlockLike : ! 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 } ) , g = { ul : "li" , ol : "li" , dl : "dd" , table : "tbody" , tbody : "tr" , thead : "tr" , tfoot : "tr" , tr : "td" } ; CKEDITOR . htmlParser . fragment . fromHtml =
function ( e , l , h ) { function k ( 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 = q . name && CKEDITOR . dtd [ q . name ] ; g && ! g [ e ] || a && f && ! f [ a ] && CKEDITOR . dtd [ a ] ? e == q . name && ( x ( q , q . parent , 1 ) , c -- ) : ( b || ( p ( ) , b = 1 ) , d = d . clone ( ) , d . parent = q , q = d , n . splice ( c , 1 ) , c -- ) } } function p ( ) { for ( ; H . length ; ) x ( H . shift ( ) , q ) } function f ( 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 x ( b , c , d ) { c = c || q || w ; var e = q ; void 0 === b . previous && ( y ( c , b ) && ( q = c , C . onTagOpen ( h , { } ) , b . returnPoint = c = q ) , f ( b ) , a ( b ) && ! b . children . length || c . add ( b ) , "pre" == b . name && ( K = ! 1 ) , "textarea" == b . name && ( I = ! 1 ) ) ; b . returnPoint ? ( q = b . returnPoint , delete b . returnPoint ) : q = d ? c : e } function y ( a , b ) { if ( ( a == w || "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 C = new CKEDITOR . htmlParser , w = l instanceof CKEDITOR . htmlParser . element ? l : "string" == typeof l ? new CKEDITOR . htmlParser . element ( l ) : new CKEDITOR . htmlParser . fragment , n = [ ] , H = [ ] , q = w , I = "textarea" == w . name , K = "pre" == w . name ; C . 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 ) K = ! 0 ; else { if ( "br" == e && K ) { q . add ( new CKEDITOR . htmlParser . text ( "\n" ) ) ; return } "textarea" == e && ( I = ! 0 ) } if ( "br" == e ) H . push ( f ) ; else { for ( ; ! ( h = ( g = q . name ) ? CKEDITOR . dtd [ g ] || ( q . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : c , f . isUnknown || q . isUnknown || h [ e ] ) ; ) if ( q . isOptionalClose ) C . onTagClose ( g ) ; else if ( e in b && g in b ) g = q . children , ( g = g [ g . length - 1 ] ) && "li" == g . name || x ( g = new CKEDITOR . htmlParser . element ( "li" ) , q ) , ! f . returnPoint && ( f . returnPoint = q ) , q = g ; else if ( e in CKEDITOR . dtd . $listItem &&
! z ( e , g ) ) C . onTagOpen ( "li" == e ? "ul" : "dl" , { } , 0 , 1 ) ; else if ( g in d && ! z ( e , g ) ) ! f . returnPoint && ( f . returnPoint = q ) , q = q . parent ; else if ( g in CKEDITOR . dtd . $inline && n . unshift ( q ) , q . parent ) x ( q , q . parent , 1 ) ; else { f . isOrphan = 1 ; break } k ( e ) ; p ( ) ; f . parent = q ; f . isEmpty ? x ( f ) : q = f } } } ; C . 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 = q ; e != w && e . name != a ; ) e . _ . isBlockLike || d . unshift ( e ) , c . push ( e ) , e = e . returnPoint || e . parent ; if ( e != w ) { for ( b = 0 ; b < c . length ; b ++ ) { var f = c [ b ] ; x ( f , f . parent ) } q =
e ; e . _ . isBlockLike && p ( ) ; x ( e , e . parent ) ; e == q && ( q = q . parent ) ; n = n . concat ( d ) } "body" == a && ( h = ! 1 ) } ; C . onText = function ( a ) { if ( ! ( q . _ . hasInlineStarted && ! H . length || K || I ) && ( a = CKEDITOR . tools . ltrim ( a ) , 0 === a . length ) ) return ; var b = q . name , e = b ? CKEDITOR . dtd [ b ] || ( q . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : c ; if ( ! I && ! e [ "#" ] && b in d ) C . onTagOpen ( g [ b ] || "" ) , C . onText ( a ) ; else { p ( ) ; k ( ) ; K || I || ( a = a . replace ( /[\t\r\n ]{2,}|[\t\r\n]/g , " " ) ) ; a = new CKEDITOR . htmlParser . text ( a ) ; if ( y ( q , a ) ) this . onTagOpen ( h , { } , 0 , 1 ) ; q . add ( a ) } } ; C . onCDATA =
function ( a ) { q . add ( new CKEDITOR . htmlParser . cdata ( a ) ) } ; C . onComment = function ( a ) { p ( ) ; k ( ) ; q . add ( new CKEDITOR . htmlParser . comment ( a ) ) } ; C . parse ( e ) ; for ( p ( ) ; q != w ; ) x ( q , q . parent , 1 ) ; f ( w ) ; return w } ; 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 , l , h ) { function k ( 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 = q . name && CKEDITOR . dtd [ q . name ] ; g && ! g [ e ] || a && f && ! f [ a ] && CKEDITOR . dtd [ a ] ? e == q . name && ( y ( q , q . parent , 1 ) , c -- ) : ( b || ( p ( ) , b = 1 ) , d = d . clone ( ) , d . parent = q , q = d , n . splice ( c , 1 ) , c -- ) } } function p ( ) { for ( ; H . length ; ) y ( H . shift ( ) , q ) } function f ( 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 || q || v ; var e = q ; void 0 === b . previous && ( z ( c , b ) && ( q = c , C . onTagOpen ( h , { } ) , b . returnPoint = c = q ) , f ( b ) , a ( b ) && ! b . children . length || c . add ( b ) , "pre" == b . name && ( K = ! 1 ) , "textarea" == b . name && ( I = ! 1 ) ) ; b . returnPoint ? ( q = b . returnPoint , delete b . returnPoint ) : q = 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 C = new CKEDITOR . htmlParser , v = l instanceof CKEDITOR . htmlParser . element ? l : "string" == typeof l ? new CKEDITOR . htmlParser . element ( l ) : new CKEDITOR . htmlParser . fragment , n = [ ] , H = [ ] , q = v , I = "textarea" == v . name , K = "pre" == v . name ; C . 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 ) K = ! 0 ; else { if ( "br" == e && K ) { q . add ( new CKEDITOR . htmlParser . text ( "\n" ) ) ; return } "textarea" == e && ( I = ! 0 ) } if ( "br" == e ) H . push ( f ) ; else { for ( ; ! ( h = ( g = q . name ) ? CKEDITOR . dtd [ g ] || ( q . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : c , f . isUnknown || q . isUnknown || h [ e ] ) ; ) if ( q . isOptionalClose ) C . onTagClose ( g ) ; else if ( e in b && g in b ) g = q . children , ( g = g [ g . length - 1 ] ) && "li" == g . name || y ( g = new CKEDITOR . htmlParser . element ( "li" ) , q ) , ! f . returnPoint && ( f . returnPoint = q ) , q = g ; else if ( e in CKEDITOR . dtd . $listItem &&
! x ( e , g ) ) C . onTagOpen ( "li" == e ? "ul" : "dl" , { } , 0 , 1 ) ; else if ( g in d && ! x ( e , g ) ) ! f . returnPoint && ( f . returnPoint = q ) , q = q . parent ; else if ( g in CKEDITOR . dtd . $inline && n . unshift ( q ) , q . parent ) y ( q , q . parent , 1 ) ; else { f . isOrphan = 1 ; break } k ( e ) ; p ( ) ; f . parent = q ; f . isEmpty ? y ( f ) : q = f } } } ; C . 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 = q ; 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 ) } q =
e ; e . _ . isBlockLike && p ( ) ; y ( e , e . parent ) ; e == q && ( q = q . parent ) ; n = n . concat ( d ) } "body" == a && ( h = ! 1 ) } ; C . onText = function ( a ) { if ( ! ( q . _ . hasInlineStarted && ! H . length || K || I ) && ( a = CKEDITOR . tools . ltrim ( a ) , 0 === a . length ) ) return ; var b = q . name , e = b ? CKEDITOR . dtd [ b ] || ( q . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : c ; if ( ! I && ! e [ "#" ] && b in d ) C . onTagOpen ( g [ b ] || "" ) , C . onText ( a ) ; else { p ( ) ; k ( ) ; K || I || ( a = a . replace ( /[\t\r\n ]{2,}|[\t\r\n]/g , " " ) ) ; a = new CKEDITOR . htmlParser . text ( a ) ; if ( z ( q , a ) ) this . onTagOpen ( h , { } , 0 , 1 ) ; q . add ( a ) } } ; C . onCDATA =
function ( a ) { q . add ( new CKEDITOR . htmlParser . cdata ( a ) ) } ; C . onComment = function ( a ) { p ( ) ; k ( ) ; q . add ( new CKEDITOR . htmlParser . comment ( a ) ) } ; C . parse ( e ) ; for ( p ( ) ; q != v ; ) y ( q , q . parent , 1 ) ; f ( 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 =
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 g = 0 ; g < c . length ; g ++ ) d = c [ g ] , d . type == CKEDITOR . NODE _ELEMENT ? d . forEach ( a , b ) : b && d . type != b || a ( d ) } } , getFilterContext : function ( a ) { return a ||
{ } } } } ) ( ) ; "use strict" ;
@@ -319,28 +320,28 @@ c)&&b--}},writeHtml:function(a,b){b&&this.filter(b);this.writeChildrenHtml(a)},w
c . priority ) ; "number" != typeof g && ( g = 10 ) ; "object" != typeof c && ( c = { } ) ; a . elementNames && this . elementNameRules . addMany ( a . elementNames , g , c ) ; a . attributeNames && this . attributeNameRules . addMany ( a . attributeNames , g , c ) ; a . elements && d ( this . elementsRules , a . elements , g , c ) ; a . attributes && d ( this . attributesRules , a . attributes , g , c ) ; a . text && this . textRules . add ( a . text , g , c ) ; a . comment && this . commentRules . add ( a . comment , g , c ) ; a . root && this . rootRules . add ( a . root , g , 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 , l = 0 ; 3 > l ; l ++ ) if ( e = d [ l ] ) { 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 ] , l = 0 , h = a . length ; l < h ; l ++ ) e . push ( { value : a [ l ] , 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 ) , l = this . rules , h = l . length , k , p , f , x ; for ( x = 0 ; x < h ; x ++ ) if ( d && ( k = c . type , p = c . name ) , f = l [ x ] , ! ( a . nonEditable && ! f . options . applyToAll ||
c , d ) { for ( var e = [ this . findIndex ( c ) , 0 ] , l = 0 , h = a . length ; l < h ; l ++ ) e . push ( { value : a [ l ] , 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 ) , l = this . rules , h = l . length , k , p , f , y ; for ( y = 0 ; y < h ; y ++ ) if ( d && ( k = c . type , p = c . name ) , f = l [ y ] , ! ( a . nonEditable && ! f . options . applyToAll ||
a . nestedEditable && f . options . excludeNestedEditable ) ) { f = f . value . apply ( null , e ) ; if ( ! 1 === f || d && f && ( f . name != p || f . type != k ) ) return f ; null != f && ( e [ 0 ] = c = f ) } return c } , execOnName : function ( a , c ) { for ( var d = 0 , e = this . rules , l = e . length , h ; c && d < l ; 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 f ( 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 ( g ) { if ( g . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ) { var v = [ ] , m = b ( g ) , t , E ; if ( m ) for ( r ( m , 1 ) && v . push ( m ) ; m ; ) e ( m ) && ( t = c ( m ) ) && r ( t ) && ( ( E = c ( t ) ) && ! e ( E ) ? v . push ( t ) : ( f ( h ) . insertAfter ( t ) , t . remove ( ) ) ) , m = m . previous ; for ( m = 0 ; m < v . length ; m ++ ) v [ m ] . remove ( ) ; if ( v = ! a || ! 1 !== ( "function" == typeof d ? d ( g ) : d ) ) h || CKEDITOR . env . needsBrFiller ||
g . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ? h || CKEDITOR . env . needsBrFiller || ! ( 7 < document . documentMode || g . name in CKEDITOR . dtd . tr || g . name in CKEDITOR . dtd . $listItem ) ? ( v = b ( g ) , v = ! v || "form" == g . name && "input" == v . name ) : v = ! 1 : v = ! 1 ; v && g . add ( f ( 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 u ) || ! h && ( ( c = a . previous ) && "br" == c . name || ! c || e ( c ) ) ) ? ! 0 : ! 1 } var E = { elements : { } } , h = "html" == d , u = CKEDITOR . tools . extend ( { } , m ) , F ; for ( F in u ) "#" in I [ F ] || delete u [ F ] ; for ( F in u ) E . elements [ F ] = t ( h , a . config . fillEmptyBlocks ) ; E . root = t ( h , ! 1 ) ; E . 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 && g ( d ) ; ) d =
d . next ; var v = c ( b ) ; ! d && e ( b . parent ) ? l ( b . parent , f ( a ) ) : e ( d ) && v && ! e ( v ) && f ( a ) . insertBefore ( d ) } } } } ( h ) ; return E } 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 && g ( a ) ; ) a = a . previous ; return a } function c ( a ) { for ( a = a . previous ; a && g ( a ) ; ) a = a . previous ; return a } function g ( 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 &&
( function ( ) { function a ( a , d ) { function f ( 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 ( g ) { if ( g . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ) { var u = [ ] , m = b ( g ) , t , h ; if ( m ) for ( r ( m , 1 ) && u . push ( m ) ; m ; ) e ( m ) && ( t = c ( m ) ) && r ( t ) && ( ( h = c ( t ) ) && ! e ( h ) ? u . push ( t ) : ( f ( E ) . insertAfter ( t ) , t . remove ( ) ) ) , m = m . previous ; for ( m = 0 ; m < u . length ; m ++ ) u [ m ] . remove ( ) ; if ( u = ! a || ! 1 !== ( "function" == typeof d ? d ( g ) : d ) ) E || CKEDITOR . env . needsBrFiller ||
g . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ? E || CKEDITOR . env . needsBrFiller || ! ( 7 < document . documentMode || g . name in CKEDITOR . dtd . tr || g . name in CKEDITOR . dtd . $listItem ) ? ( u = b ( g ) , u = ! u || "form" == g . name && "input" == u . name ) : u = ! 1 : u = ! 1 ; u && g . add ( f ( a ) ) } } } function r ( a , b ) { if ( ( ! E || 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 && E && ( ! b || a . parent . name in w ) || ! E && ( ( c = a . previous ) && "br" == c . name || ! c || e ( c ) ) ) ? ! 0 : ! 1 } var h = { elements : { } } , E = "html" == d , w = CKEDITOR . tools . extend ( { } , m ) , F ; for ( F in w ) "#" in I [ F ] || delete w [ F ] ; for ( F in w ) h . elements [ F ] = t ( E , a . config . fillEmptyBlocks ) ; h . root = t ( E , ! 1 ) ; h . 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 && g ( d ) ; ) d =
d . next ; var u = c ( b ) ; ! d && e ( b . parent ) ? l ( b . parent , f ( a ) ) : e ( d ) && u && ! e ( u ) && f ( a ) . insertBefore ( d ) } } } } ( E ) ; return h } 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 && g ( a ) ; ) a = a . previous ; return a } function c ( a ) { for ( a = a . previous ; a && g ( a ) ; ) a = a . previous ; return a } function g ( 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 l ( 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 k ( a ) { a = a . attributes ; switch ( a [ "data-cke-editable" ] ) { case "true" : a . contenteditable = "true" ; break ; case "1" : delete a . contenteditable } } function p ( a ) { return a . replace ( r ,
function ( a , b , c ) { return "\x3c" + b + c . replace ( F , function ( a , b ) { return E . test ( b ) && - 1 == c . indexOf ( "data-cke-saved-" + b ) ? " data-cke-saved-" + a + " data-cke-" + CKEDITOR . rnd + "-" + a : a } ) + "\x3e" } ) } function f ( 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 x ( a ) { return a . replace ( S , function ( a , b ) { return decodeURIComponent ( b ) } ) } function y ( a ) { return a . replace ( /\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g ,
function ( a ) { return "\x3c!--" + q + "{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 C ( 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 w ( a , b ) { var c = [ ] , d = b . config . protectedSource , e = b . _ . dataStore || ( b . _ . dataStore =
function ( a , b , c ) { return "\x3c" + b + c . replace ( F , function ( a , b ) { return E . test ( b ) && - 1 == c . indexOf ( "data-cke-saved-" + b ) ? " data-cke-saved-" + a + " data-cke-" + CKEDITOR . rnd + "-" + a : a } ) + "\x3e" } ) } function f ( 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!--" + q + "{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 C ( 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!--" + q + ( 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" + C ( z ( e ) , b ) + "\x3c/" + c + "\x3e" } ) } var n ; CKEDITOR . htmlDataProcessor = function ( b ) { var c ,
e , g = 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 ( G ) ; c . addRules ( L , { applyToAll : ! 0 } ) ; c . addRules ( a ( b , "data" ) , { applyToAll : ! 0 } ) ; e . addRules ( A ) ; e . addRules ( M , { 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 = w ( c , b ) , c = f ( c , Q ) , c = p ( c ) , c = f ( c , u ) , c = c . replace ( t , "$1cke:$2" ) , c = c . replace ( J , "\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 g ; CKEDITOR . env . ie && 9 > CKEDITOR . env . version && "pre" == e && ( e = "div" , c = "\x3cpre\x3e" + c + "\x3c/pre\x3e" , g = 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" ) , "" ) ; g && ( c = c . replace ( /^<pre>|<\/pre>$/gi , "" ) ) ; c = c . replace ( O , "$1$2" ) ; c = x ( c ) ; c = z ( c ) ; e = ! 1 === a . fixForBody ? ! 1 :
"" ) + 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" + C ( x ( e ) , b ) + "\x3c/" + c + "\x3e" } ) } var n ; CKEDITOR . htmlDataProcessor = function ( b ) { var c ,
e , g = 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 ( G ) ; c . addRules ( L , { applyToAll : ! 0 } ) ; c . addRules ( a ( b , "data" ) , { applyToAll : ! 0 } ) ; e . addRules ( A ) ; e . addRules ( M , { 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 = f ( c , Q ) , c = p ( c ) , c = f ( c , w ) , c = c . replace ( t , "$1cke:$2" ) , c = c . replace ( J , "\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 g ; CKEDITOR . env . ie && 9 > CKEDITOR . env . version && "pre" == e && ( e = "div" , c = "\x3cpre\x3e" + c + "\x3c/pre\x3e" , g = 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" ) , "" ) ; g && ( c = c . replace ( /^<pre>|<\/pre>$/gi , "" ) ) ; c = c . replace ( O , "$1$2" ) ; c = y ( c ) ; c = x ( c ) ; e = ! 1 === a . fixForBody ? ! 1 :
d ( a . enterMode , b . config . autoParagraph ) ; c = CKEDITOR . htmlParser . fragment . fromHtml ( c , a . context , e ) ; e && ( g = c , ! g . children . length && CKEDITOR . dtd [ g . name ] [ e ] && ( e = new CKEDITOR . htmlParser . element ( e ) , g . 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 ( g . 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 = y ( 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 ( g . 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 = g . writer ; d . reset ( ) ; c . writeChildrenHtml ( d ) ; c = d . getHtml ( ! 0 ) ; c = z ( c ) ; c = C ( 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 w ( a , this . editor ) } , unprotectSource : function ( a ) { return C ( a , this . editor ) } } ; var H = /(?: |\xa0)$/ , q = "{cke_protected}" , I = CKEDITOR . dtd ,
K = "caption colgroup col thead tfoot tbody" . split ( " " ) , m = CKEDITOR . tools . extend ( { } , I . $blockLimit , I . $block ) , G = { elements : { input : h , textarea : h } } , L = { 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 } } } , M = { elementNames : [ [ /^cke:/ , "" ] , [ /^\?xml:namespace$/ , "" ] ] , attributeNames : [ [ /^data-cke-(saved|pa)-/ , "" ] , [ /^data-cke-.*/ , "" ] , [ "hidefocus" , "" ] ] , elements : { $ : function ( a ) { var b = a . attributes ; if ( b ) { if ( b [ "data-cke-temp" ] ) return ! 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 ( K , a . name ) , d = CKEDITOR . tools . indexOf ( K , 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 && l ( a , b = new CKEDITOR . htmlParser . text ) ; b . value = a . attributes [ "data-cke-title" ] || "" } , input : k , textarea : k } , attributes : { "class" : function ( a ) { return CKEDITOR . tools . ltrim ( a . replace ( /(?:^|\s+)cke_[^\s]*/g , "" ) ) || ! 1 } } } ;
CKEDITOR . env . ie && ( M . attributes . style = function ( a ) { return a . replace ( /(^|;)([^\:]+)/g , function ( a ) { return a . toLowerCase ( ) } ) } ) ; var r = /<(a|area|img|input|source)\b([^>]*)>/gi , F = /([\w-:]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi , E = /^(href|src|name)$/i , u = /(?:<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 ,
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 ( g . 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 = g . writer ; d . reset ( ) ; c . writeChildrenHtml ( d ) ; c = d . getHtml ( ! 0 ) ; c = x ( c ) ; c = C ( 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 C ( a , this . editor ) } , unprotectRealComments : function ( a ) { return x ( a ) } } ; var H =
/(?: |\xa0)$/ , q = "{cke_protected}" , I = CKEDITOR . dtd , K = "caption colgroup col thead tfoot tbody" . split ( " " ) , m = CKEDITOR . tools . extend ( { } , I . $blockLimit , I . $block ) , G = { elements : { input : h , textarea : h } } , L = { 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 } } } , M = { elementNames : [ [ /^cke:/ , "" ] , [ /^\?xml:namespace$/ , "" ] ] , attributeNames : [ [ /^data-cke-(saved|pa)-/ , "" ] , [ /^data-cke-.*/ , "" ] , [ "hidefocus" , "" ] ] , elements : { $ : function ( a ) { var b =
a . attributes ; if ( b ) { if ( b [ "data-cke-temp" ] ) return ! 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 ( K , a . name ) , d = CKEDITOR . tools . indexOf ( K , 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 && l ( a , b = new CKEDITOR . htmlParser . text ) ; b . value = a . attributes [ "data-cke-title" ] || "" } , input : k , textarea : k } , attributes : { "class" : function ( a ) { return CKEDITOR . tools . ltrim ( a . replace ( /(?:^|\s+)cke_[^\s]*/g ,
"" ) ) || ! 1 } } } ; CKEDITOR . env . ie && ( M . attributes . style = function ( a ) { return a . replace ( /(^|;)([^\:]+)/g , function ( a ) { return a . toLowerCase ( ) } ) } ) ; var r = /<(a|area|img|input|source)\b([^>]*)>/gi , F = /([\w-:]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi , E = /^(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 , J = /<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi ; n = function ( ) { function a ( c ) { return CKEDITOR . tools . array . reduce ( c . split ( "" ) , function ( a , c ) { var d = c . toLowerCase ( ) , e = c . toUpperCase ( ) , f = b ( d ) ; d !== e && ( f += "|" + b ( e ) ) ; return a + ( "(" + f + ")" ) } , "" ) } function b ( a ) { var c ; c = a . charCodeAt ( 0 ) ; var d = c . toString ( 16 ) ; c = { htmlCode : "\x26#" + c + ";?" , hex : "\x26#x0*" + d + ";?" , entity : { "\x3c" : "\x26lt;" , "\x3e" : "\x26gt;" , ":" : "\x26colon;" } [ a ] } ; for ( var e in c ) c [ e ] && ( a += "|" + c [ e ] ) ; return a } var c =
new RegExp ( "(" + a ( "\x3ccke:encoded\x3e" ) + "(.*?)" + a ( "\x3c/cke:encoded\x3e" ) + ")|(" + a ( "\x3c" ) + a ( "/" ) + "?" + a ( "cke:encoded\x3e" ) + ")" , "gi" ) , d = new RegExp ( "((" + a ( "{cke_protected" ) + ")(_[0-9]*)?" + a ( "}" ) + ")" , "gi" ) ; return function ( a ) { return a . replace ( c , "" ) . replace ( d , "" ) } } ( ) } ) ( ) ; "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 } } ;
@@ -372,9 +373,9 @@ l.setSize("width",a,!0);p&&(p.style.width="1%");b=CKEDITOR.tools.convertToPx(CKE
CKEDITOR . replaceAll ( CKEDITOR . replaceClass ) } ) } ) ( ) ; CKEDITOR . config . startupMode = "wysiwyg" ;
( function ( ) { function a ( a ) { var b = a . editor , e = a . data . path , f = e . blockLimit , g = a . data . selection , r = g . getRanges ( ) [ 0 ] , h ; if ( CKEDITOR . env . gecko || CKEDITOR . env . ie && CKEDITOR . env . needsBrFiller ) if ( g = d ( g , e ) ) g . appendBogus ( ) , h = CKEDITOR . env . ie && ! CKEDITOR . env . edge || CKEDITOR . env . edge && b . _ . previousActive ; l ( b , e . block , f ) && r . collapsed && ! r . getCommonAncestor ( ) . isReadOnly ( ) && ( e = r . clone ( ) , e . enlarge ( CKEDITOR . ENLARGE _BLOCK _CONTENTS ) , f = new CKEDITOR . dom . walker ( e ) , f . guard = function ( a ) { return ! c ( a ) || a . type == CKEDITOR . NODE _COMMENT || a . isReadOnly ( ) } ,
! f . 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 x ( a ) && y ( a ) } function g ( 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 ( f ) && ( d = b ) ; if ( ! ( e || ! c ( b ) ||
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 g ( 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 ( f ) && ( d = b ) ; if ( ! ( e || ! c ( b ) ||
a && C ( b ) ) ) return ! 1 } } var d , e = a . getRanges ( ) [ 0 ] ; a = a . root ; var f = { table : 1 , ul : 1 , ol : 1 , dl : 1 } ; if ( e . startPath ( ) . contains ( f ) ) { var g = e . clone ( ) ; g . collapse ( 1 ) ; g . setStartAt ( a , CKEDITOR . POSITION _AFTER _START ) ; a = new CKEDITOR . dom . walker ( g ) ; a . guard = b ( ) ; a . checkBackward ( ) ; if ( d ) return g = e . clone ( ) , g . collapse ( ) , g . setEndAt ( d , CKEDITOR . POSITION _AFTER _END ) , a = new CKEDITOR . dom . walker ( g ) , a . guard = b ( ! 0 ) , d = ! 1 , a . checkForward ( ) , d } return null } 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 h ( a ) { return a . activeEnterMode != CKEDITOR . ENTER _BR && ! 1 !== a . config . autoParagraph ? a . activeEnterMode == CKEDITOR . ENTER _DIV ? "div" : "p" : ! 1 } function k ( a ) { a && a . isEmptyInlineRemoveable ( ) && a . remove ( ) } function p ( a ) { var b = a . editor ; b . getSelection ( ) . scrollIntoView ( ) ; setTimeout ( function ( ) { b . fire ( "saveSnapshot" ) } , 0 ) } function f ( 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 x , y , z , C , w ,
! 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 k ( a ) { a && a . isEmptyInlineRemoveable ( ) && a . remove ( ) } function p ( a ) { var b = a . editor ; b . getSelection ( ) . scrollIntoView ( ) ; setTimeout ( function ( ) { b . fire ( "saveSnapshot" ) } , 0 ) } function f ( 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 , C , v ,
n , H , q , I , K ; 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 = g ( 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 ,
@@ -388,38 +389,38 @@ fixInitialSelection:function(){function a(){var b=c.getDocument().$,d=b.getSelec
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 = K , 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 f = this . editor . createRange ( ) ;
f . moveToPosition ( d . bookmark . startNode , CKEDITOR . POSITION _BEFORE _START ) ; d . targetBookmark = f . 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" ) , f = 0 , g ; if ( d ) for ( ; g = d . getItem ( f ++ ) ; ) if ( ! y ( g ) ) { 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 ) , z ( 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 ( w , 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 ( ) } ,
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" ) , f = 0 , g ; if ( d ) for ( ; g = d . getItem ( f ++ ) ; ) if ( ! z ( g ) ) { 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 g = a . document ; this . changeAttr ( "spellcheck" ,
! a . config . disableNativeSpellChecker ) ; var h = a . config . contentsLangDirection ; this . getDirection ( 1 ) != h && this . changeAttr ( "dir" , h ) ; var l = CKEDITOR . getCss ( ) ; if ( l ) { var h = g . getHead ( ) , r = h . getCustomData ( "stylesheet" ) ; r ? l != r . getText ( ) && ( CKEDITOR . env . ie && 9 > CKEDITOR . env . version ? r . $ . styleSheet . cssText = l : r . setText ( l ) ) : ( l = g . appendStyleText ( l ) , l = new CKEDITOR . dom . element ( l . ownerNode || l . owningElement ) , h . setCustomData ( "stylesheet" , l ) , l . data ( "cke-temp" , 1 ) ) } h = g . getCustomData ( "stylesheet_ref" ) || 0 ; g . 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 k = { 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 k ) { var f , g = b . getRanges ( ) [ 0 ] , h = g . startPath ( ) , r , l , B , c = 8 == c ; CKEDITOR . env . ie &&
11 > CKEDITOR . env . version && ( f = b . getSelectedElement ( ) ) || ( f = e ( b ) ) ? ( a . fire ( "saveSnapshot" ) , g . moveToPosition ( f , CKEDITOR . POSITION _BEFORE _START ) , f . remove ( ) , g . select ( ) , a . fire ( "saveSnapshot" ) , d = 1 ) : g . collapsed && ( ( r = h . block ) && ( B = r [ c ? "getPrevious" : "getNext" ] ( x ) ) && B . type == CKEDITOR . NODE _ELEMENT && B . is ( "table" ) && g [ c ? "checkStartOfBlock" : "checkEndOfBlock" ] ( ) ? ( a . fire ( "saveSnapshot" ) , g [ c ? "checkEndOfBlock" : "checkStartOfBlock" ] ( ) && r . remove ( ) , g [ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( B ) , g . select ( ) , a . fire ( "saveSnapshot" ) ,
d = 1 ) : h . blockLimit && h . blockLimit . is ( "td" ) && ( l = h . blockLimit . getAscendant ( "table" ) ) && g . checkBoundaryOfElement ( l , c ? CKEDITOR . START : CKEDITOR . END ) && ( B = l [ c ? "getPrevious" : "getNext" ] ( x ) ) ? ( a . fire ( "saveSnapshot" ) , g [ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( B ) , g . checkStartOfBlock ( ) && g . checkEndOfBlock ( ) ? B . remove ( ) : g . select ( ) , a . fire ( "saveSnapshot" ) , d = 1 ) : ( l = h . contains ( [ "td" , "th" , "caption" ] ) ) && g . checkBoundaryOfElement ( l , c ? CKEDITOR . START : CKEDITOR . END ) && ( d = 1 ) ) } return ! d } } ) ; a . blockless && CKEDITOR . env . ie && CKEDITOR . env . needsBrFiller &&
11 > CKEDITOR . env . version && ( f = b . getSelectedElement ( ) ) || ( f = e ( b ) ) ? ( a . fire ( "saveSnapshot" ) , g . moveToPosition ( f , CKEDITOR . POSITION _BEFORE _START ) , f . remove ( ) , g . select ( ) , a . fire ( "saveSnapshot" ) , d = 1 ) : g . collapsed && ( ( r = h . block ) && ( B = r [ c ? "getPrevious" : "getNext" ] ( y ) ) && B . type == CKEDITOR . NODE _ELEMENT && B . is ( "table" ) && g [ c ? "checkStartOfBlock" : "checkEndOfBlock" ] ( ) ? ( a . fire ( "saveSnapshot" ) , g [ c ? "checkEndOfBlock" : "checkStartOfBlock" ] ( ) && r . remove ( ) , g [ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( B ) , g . select ( ) , a . fire ( "saveSnapshot" ) ,
d = 1 ) : h . blockLimit && h . blockLimit . is ( "td" ) && ( l = h . blockLimit . getAscendant ( "table" ) ) && g . checkBoundaryOfElement ( l , c ? CKEDITOR . START : CKEDITOR . END ) && ( B = l [ c ? "getPrevious" : "getNext" ] ( y ) ) ? ( a . fire ( "saveSnapshot" ) , g [ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( B ) , g . checkStartOfBlock ( ) && g . checkEndOfBlock ( ) ? B . remove ( ) : g . select ( ) , a . fire ( "saveSnapshot" ) , d = 1 ) : ( l = h . contains ( [ "td" , "th" , "caption" ] ) ) && g . checkBoundaryOfElement ( l , 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 k && ! 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 ( w , "" ) ) ) { var c = a . createRange ( ) ; c . moveToElementEditStart ( b ) ;
"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 k && ( 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" ] ( ) && 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 h ; ( h = ( c ? d : e ) . getBogus ( ) ) && h . remove ( ) ; h = a . getSelection ( ) ; g = h . createBookmarks ( ) ; ( c ? e : d ) . moveChildren ( c ?
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 h ; ( h = ( c ? d : e ) . getBogus ( ) ) && h . remove ( ) ; h = a . getSelection ( ) ; g = h . createBookmarks ( ) ; ( c ? e : d ) . moveChildren ( c ?
d : e , ! 1 ) ; b . lastElement . mergeSiblings ( ) ; f ( e , d , ! c ) ; h . selectBookmarks ( g ) ; 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 ( ) , f ( 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}" ) ;
x = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ; y = CKEDITOR . dom . walker . bookmark ( ! 1 , ! 0 ) ; z = CKEDITOR . dom . walker . empty ( ) ; C = CKEDITOR . dom . walker . bogus ( ) ; w = /(^|<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 , f , g , h , r = [ ] , l = d . range . startContainer ; e = d . range . startPath ( ) ; for ( var l = E [ l . getName ( ) ] , k = 0 , F = c . getChildren ( ) , u = F . count ( ) , p = - 1 , n = - 1 , Q = 0 , A = e . contains ( E . $list ) ; k <
u ; ++ k ) e = F . getItem ( k ) , a ( e ) ? ( g = e . getName ( ) , A && g in CKEDITOR . dtd . $list ? r = r . concat ( b ( e , d ) ) : ( h = ! ! l [ g ] , "br" != g || ! e . data ( "cke-eol" ) || k && k != u - 1 || ( Q = ( f = k ? r [ k - 1 ] . node : F . getItem ( k + 1 ) ) && ( ! a ( f ) || ! f . is ( "br" ) ) , f = f && a ( f ) && E . $block [ f . getName ( ) ] ) , - 1 != p || h || ( p = k ) , h || ( n = k ) , r . push ( { isElement : 1 , isLineBreak : Q , isBlock : e . isBlockBoundary ( ) , hasBlockSibling : f , node : e , name : g , allowed : h } ) , f = Q = 0 ) ) : r . push ( { isElement : 0 , node : e , allowed : 1 } ) ; - 1 < p && ( r [ p ] . firstNotAllowed = 1 ) ; - 1 < n && ( r [ n ] . lastNotAllowed = 1 ) ; return r } function d ( b , c ) { var e = [ ] ,
f = b . getChildren ( ) , g = f . count ( ) , h , r = 0 , l = E [ c ] , k = ! b . is ( E . $inline ) || b . is ( "br" ) ; for ( k && e . push ( " " ) ; r < g ; r ++ ) h = f . getItem ( r ) , a ( h ) && ! h . is ( l ) ? e = e . concat ( d ( h , c ) ) : e . push ( h ) ; k && 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 ( E . $removeEmpty ) || b . is ( "a" ) && ! b . isBlockBoundary ( ) ) } function g ( b , c , d , e ) { var f = b . clone ( ) , h , l ; f . setEndAt ( c , CKEDITOR . POSITION _BEFORE _END ) ; ( h = ( new CKEDITOR . dom . walker ( f ) ) . next ( ) ) && a ( h ) && u [ h . getName ( ) ] &&
( l = h . getPrevious ( ) ) && a ( l ) && ! l . getParent ( ) . equals ( b . startContainer ) && d . contains ( l ) && e . contains ( h ) && h . isIdentical ( l ) && ( h . moveChildren ( l ) , h . remove ( ) , g ( b , c , d , e ) ) } function F ( 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 ) , f = c . endContainer . getChild ( c . endOffset - 1 ) ; e && d ( e , b [ b . length - 1 ] ) ; f && d ( f , b [ 0 ] ) && ( c . setEnd ( c . endContainer , c . endOffset - 1 ) , c . collapse ( ) ) } var E = CKEDITOR . dtd , u = { 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 } , p = { p : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 } , n = CKEDITOR . tools . extend ( { } , E . $inline ) ; delete n . br ; return function ( t , u , J , v ) { var B = t . editor , D = ! 1 , x ; "unfiltered_html" == u && ( u = "html" , D = ! 0 ) ; if ( ! v . checkReadOnly ( ) ) { var z = ( new CKEDITOR . dom . elementPath ( v . startContainer , v . root ) ) . blockLimit || v . root ; u = { type : u , dontFilter : D , editable : t , editor : B , range : v , blockLimit : z , mergeCandidates : [ ] , zombies : [ ] } ; var D = u . range , z = u . mergeCandidates , y = "html" === u . type , q , C , T , H , Z ; "text" == u . type &&
D . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 , ! 1 ) && ( C = CKEDITOR . dom . element . createFromHtml ( "\x3cspan\x3e\x26nbsp;\x3c/span\x3e" , D . document ) , D . insertNode ( C ) , D . setStartAfter ( C ) ) ; T = new CKEDITOR . dom . elementPath ( D . startContainer ) ; u . endPath = H = new CKEDITOR . dom . elementPath ( D . endContainer ) ; if ( ! D . collapsed ) { q = H . block || H . blockLimit ; var ca = D . getCommonAncestor ( ) ; q && ! q . equals ( ca ) && ! q . contains ( ca ) && D . checkEndOfBlock ( ) && u . zombies . push ( q ) ; D . deleteContents ( ) } for ( ; ( Z = e ( D ) ) && a ( Z ) && Z . isBlockBoundary ( ) && T . contains ( Z ) ; ) D . moveToPosition ( Z ,
CKEDITOR . POSITION _BEFORE _END ) ; g ( D , u . blockLimit , T , H ) ; C && ( D . setEndBefore ( C ) , D . collapse ( ) , C . remove ( ) ) ; C = D . startPath ( ) ; if ( q = C . contains ( f , ! 1 , 1 ) ) x = D . splitElement ( q ) , u . inlineStylesRoot = q , u . inlineStylesPeak = C . lastElement ; C = D . createBookmark ( ) ; y && ( k ( q ) , k ( x ) ) ; ( q = C . startNode . getPrevious ( c ) ) && a ( q ) && f ( q ) && z . push ( q ) ; ( q = C . startNode . getNext ( c ) ) && a ( q ) && f ( q ) && z . push ( q ) ; for ( q = C . startNode ; ( q = q . getParent ( ) ) && f ( q ) ; ) z . push ( q ) ; D . moveToBookmark ( C ) ; x = t . getHtml ( ) ; x = "" === x || x . match ( w ) ; B . enterMode === CKEDITOR . ENTER _DIV && x && ( ( B =
t . getFirst ( ) ) && B . remove ( ) , v . setStartAt ( t , CKEDITOR . POSITION _AFTER _START ) , v . collapse ( ! 0 ) ) ; if ( t = J ) { t = u . range ; if ( "text" == u . type && u . inlineStylesRoot ) { v = u . inlineStylesPeak ; B = v . getDocument ( ) . createText ( "{cke-peak}" ) ; for ( x = u . inlineStylesRoot . getParent ( ) ; ! v . equals ( x ) ; ) B = B . appendTo ( v . clone ( ) ) , v = v . getParent ( ) ; J = B . getOuterHtml ( ) . split ( "{cke-peak}" ) . join ( J ) } v = u . blockLimit . getName ( ) ; if ( /^\s+|\s+$/ . test ( J ) && "span" in CKEDITOR . dtd [ v ] ) { var V = '\x3cspan data-cke-marker\x3d"1"\x3e\x26nbsp;\x3c/span\x3e' ; J = V + J + V } J = u . editor . dataProcessor . toHtml ( J ,
{ context : null , fixForBody : ! 1 , protectedWhitespaces : ! ! V , dontFilter : u . dontFilter , filter : u . editor . activeFilter , enterMode : u . editor . activeEnterMode } ) ; v = t . document . createElement ( "body" ) ; v . setHtml ( J ) ; V && ( v . getFirst ( ) . remove ( ) , v . getLast ( ) . remove ( ) ) ; if ( ( V = t . startPath ( ) . block ) && ( 1 != V . getChildCount ( ) || ! V . getBogus ( ) ) ) a : { var P ; if ( 1 == v . getChildCount ( ) && a ( P = v . getFirst ( ) ) && P . is ( p ) && ! P . hasAttribute ( "contenteditable" ) ) { V = P . getElementsByTag ( "*" ) ; t = 0 ; for ( x = V . count ( ) ; t < x ; t ++ ) if ( B = V . getItem ( t ) , ! B . is ( n ) ) break a ; P . moveChildren ( P . getParent ( 1 ) ) ;
P . remove ( ) } } u . dataWrapper = v ; t = J } if ( t ) { P = u . range ; t = P . document ; v = u . blockLimit ; x = 0 ; var R , V = [ ] , I , N ; J = C = 0 ; var K , B = P . startContainer ; Z = u . endPath . elements [ 0 ] ; var ba , D = Z . getPosition ( B ) , z = ! ! Z . getCommonAncestor ( B ) && D != CKEDITOR . POSITION _IDENTICAL && ! ( D & CKEDITOR . POSITION _CONTAINS + CKEDITOR . POSITION _IS _CONTAINED ) , B = b ( u . dataWrapper , u ) ; for ( F ( B , P ) ; x < B . length ; x ++ ) { D = B [ x ] ; if ( y = D . isLineBreak ) y = P , q = v , H = T = void 0 , D . hasBlockSibling ? y = 1 : ( T = y . startContainer . getAscendant ( E . $block , 1 ) ) && T . is ( { div : 1 , p : 1 } ) ? ( H = T . getPosition ( q ) , H ==
CKEDITOR . POSITION _IDENTICAL || H == CKEDITOR . POSITION _CONTAINS ? y = 0 : ( q = y . splitElement ( T ) , y . moveToPosition ( q , CKEDITOR . POSITION _AFTER _START ) , y = 1 ) ) : y = 0 ; if ( y ) J = 0 < x ; else { y = P . startPath ( ) ; ! D . isBlock && l ( u . editor , y . block , y . blockLimit ) && ( N = h ( u . editor ) ) && ( N = t . createElement ( N ) , N . appendBogus ( ) , P . insertNode ( N ) , CKEDITOR . env . needsBrFiller && ( R = N . getBogus ( ) ) && R . remove ( ) , P . moveToPosition ( N , CKEDITOR . POSITION _BEFORE _END ) ) ; if ( ( y = P . startPath ( ) . block ) && ! y . equals ( I ) ) { if ( R = y . getBogus ( ) ) R . remove ( ) , V . push ( y ) ; I = y } D . firstNotAllowed &&
( C = 1 ) ; if ( C && D . isElement ) { y = P . startContainer ; for ( q = null ; y && ! E [ y . getName ( ) ] [ D . name ] ; ) { if ( y . equals ( v ) ) { y = null ; break } q = y ; y = y . getParent ( ) } if ( y ) q && ( K = P . splitElement ( q ) , u . zombies . push ( K ) , u . zombies . push ( q ) ) ; else { q = v . getName ( ) ; ba = ! x ; y = x == B . length - 1 ; q = d ( D . node , q ) ; T = [ ] ; H = q . length ; for ( var ca = 0 , ea = void 0 , X = 0 , W = - 1 ; ca < H ; ca ++ ) ea = q [ ca ] , " " == ea ? ( X || ba && ! ca || ( T . push ( new CKEDITOR . dom . text ( " " ) ) , W = T . length ) , X = 1 ) : ( T . push ( ea ) , X = 0 ) ; y && W == T . length && T . pop ( ) ; ba = T } } if ( ba ) { for ( ; y = ba . pop ( ) ; ) P . insertNode ( y ) ; ba = 0 } else P . insertNode ( D . node ) ;
D . lastNotAllowed && x < B . length - 1 && ( ( K = z ? Z : K ) && P . setEndAt ( K , CKEDITOR . POSITION _AFTER _START ) , C = 0 ) ; P . collapse ( ) } } 1 != B . length ? R = ! 1 : ( R = B [ 0 ] , R = R . isElement && "false" == R . node . getAttribute ( "contenteditable" ) ) ; R && ( J = ! 0 , y = B [ 0 ] . node , P . setStartAt ( y , CKEDITOR . POSITION _BEFORE _START ) , P . setEndAt ( y , CKEDITOR . POSITION _AFTER _END ) ) ; u . dontMoveCaret = J ; u . bogusNeededBlocks = V } R = u . range ; var Y ; ba = u . bogusNeededBlocks ; for ( I = R . createBookmark ( ) ; N = u . zombies . pop ( ) ; ) N . getParent ( ) && ( K = R . clone ( ) , K . moveToElementEditStart ( N ) , K . removeEmptyBlocksAtEnd ( ) ) ;
if ( ba ) for ( ; N = ba . pop ( ) ; ) CKEDITOR . env . needsBrFiller ? N . appendBogus ( ) : N . append ( R . document . createText ( " " ) ) ; for ( ; N = u . mergeCandidates . pop ( ) ; ) N . mergeSiblings ( ) ; CKEDITOR . env . webkit && R . startPath ( ) && ( N = R . startPath ( ) , N . block ? N . block . $ . normalize ( ) : N . blockLimit && N . blockLimit . $ . normalize ( ) ) ; R . moveToBookmark ( I ) ; if ( ! u . dontMoveCaret ) { for ( N = e ( R ) ; N && a ( N ) && ! N . is ( E . $empty ) ; ) { if ( N . isBlockBoundary ( ) ) R . moveToPosition ( N , CKEDITOR . POSITION _BEFORE _END ) ; else { if ( f ( N ) && N . getHtml ( ) . match ( /(\s| )$/g ) ) { Y = null ; break } Y = R . clone ( ) ;
y = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ; z = CKEDITOR . dom . walker . bookmark ( ! 1 , ! 0 ) ; x = CKEDITOR . dom . walker . empty ( ) ; C = 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 , f , g , h , r = [ ] , l = d . range . startContainer ; e = d . range . startPath ( ) ; for ( var l = E [ l . getName ( ) ] , k = 0 , F = c . getChildren ( ) , w = F . count ( ) , p = - 1 , n = - 1 , Q = 0 , A = e . contains ( E . $list ) ; k <
w ; ++ k ) e = F . getItem ( k ) , a ( e ) ? ( g = e . getName ( ) , A && g in CKEDITOR . dtd . $list ? r = r . concat ( b ( e , d ) ) : ( h = ! ! l [ g ] , "br" != g || ! e . data ( "cke-eol" ) || k && k != w - 1 || ( Q = ( f = k ? r [ k - 1 ] . node : F . getItem ( k + 1 ) ) && ( ! a ( f ) || ! f . is ( "br" ) ) , f = f && a ( f ) && E . $block [ f . getName ( ) ] ) , - 1 != p || h || ( p = k ) , h || ( n = k ) , r . push ( { isElement : 1 , isLineBreak : Q , isBlock : e . isBlockBoundary ( ) , hasBlockSibling : f , node : e , name : g , allowed : h } ) , f = Q = 0 ) ) : r . push ( { isElement : 0 , node : e , allowed : 1 } ) ; - 1 < p && ( r [ p ] . firstNotAllowed = 1 ) ; - 1 < n && ( r [ n ] . lastNotAllowed = 1 ) ; return r } function d ( b , c ) { var e = [ ] ,
f = b . getChildren ( ) , g = f . count ( ) , h , r = 0 , l = E [ c ] , k = ! b . is ( E . $inline ) || b . is ( "br" ) ; for ( k && e . push ( " " ) ; r < g ; r ++ ) h = f . getItem ( r ) , a ( h ) && ! h . is ( l ) ? e = e . concat ( d ( h , c ) ) : e . push ( h ) ; k && 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 ( E . $removeEmpty ) || b . is ( "a" ) && ! b . isBlockBoundary ( ) ) } function g ( b , c , d , e ) { var f = b . clone ( ) , h , l ; f . setEndAt ( c , CKEDITOR . POSITION _BEFORE _END ) ; ( h = ( new CKEDITOR . dom . walker ( f ) ) . next ( ) ) && a ( h ) && w [ h . getName ( ) ] &&
( l = h . getPrevious ( ) ) && a ( l ) && ! l . getParent ( ) . equals ( b . startContainer ) && d . contains ( l ) && e . contains ( h ) && h . isIdentical ( l ) && ( h . moveChildren ( l ) , h . remove ( ) , g ( b , c , d , e ) ) } function F ( 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 ) , f = c . endContainer . getChild ( c . endOffset - 1 ) ; e && d ( e , b [ b . length - 1 ] ) ; f && d ( f , b [ 0 ] ) && ( c . setEnd ( c . endContainer , c . endOffset - 1 ) , c . collapse ( ) ) } var E = 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 } , p = { p : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 } , n = CKEDITOR . tools . extend ( { } , E . $inline ) ; delete n . br ; return function ( t , w , J , u ) { var B = t . editor , D = ! 1 , y ; "unfiltered_html" == w && ( w = "html" , D = ! 0 ) ; if ( ! u . checkReadOnly ( ) ) { var z = ( new CKEDITOR . dom . elementPath ( u . startContainer , u . root ) ) . blockLimit || u . root ; w = { type : w , dontFilter : D , editable : t , editor : B , range : u , blockLimit : z , mergeCandidates : [ ] , zombies : [ ] } ; var D = w . range , z = w . mergeCandidates , x = "html" === w . type , q , C , T , H , Z ; "text" == w . type &&
D . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 , ! 1 ) && ( C = CKEDITOR . dom . element . createFromHtml ( "\x3cspan\x3e\x26nbsp;\x3c/span\x3e" , D . document ) , D . insertNode ( C ) , D . setStartAfter ( C ) ) ; T = new CKEDITOR . dom . elementPath ( D . startContainer ) ; w . endPath = H = new CKEDITOR . dom . elementPath ( D . endContainer ) ; if ( ! D . collapsed ) { q = H . block || H . blockLimit ; var ca = D . getCommonAncestor ( ) ; q && ! q . equals ( ca ) && ! q . contains ( ca ) && D . checkEndOfBlock ( ) && w . zombies . push ( q ) ; D . deleteContents ( ) } for ( ; ( Z = e ( D ) ) && a ( Z ) && Z . isBlockBoundary ( ) && T . contains ( Z ) ; ) D . moveToPosition ( Z ,
CKEDITOR . POSITION _BEFORE _END ) ; g ( D , w . blockLimit , T , H ) ; C && ( D . setEndBefore ( C ) , D . collapse ( ) , C . remove ( ) ) ; C = D . startPath ( ) ; if ( q = C . contains ( f , ! 1 , 1 ) ) y = D . splitElement ( q ) , w . inlineStylesRoot = q , w . inlineStylesPeak = C . lastElement ; C = D . createBookmark ( ) ; x && ( k ( q ) , k ( y ) ) ; ( q = C . startNode . getPrevious ( c ) ) && a ( q ) && f ( q ) && z . push ( q ) ; ( q = C . startNode . getNext ( c ) ) && a ( q ) && f ( q ) && z . push ( q ) ; for ( q = C . startNode ; ( q = q . getParent ( ) ) && f ( q ) ; ) z . push ( q ) ; D . moveToBookmark ( C ) ; y = t . getHtml ( ) ; y = "" === y || y . match ( v ) ; B . enterMode === CKEDITOR . ENTER _DIV && y && ( ( B =
t . getFirst ( ) ) && B . remove ( ) , u . setStartAt ( t , CKEDITOR . POSITION _AFTER _START ) , u . collapse ( ! 0 ) ) ; if ( t = J ) { t = w . range ; if ( "text" == w . type && w . inlineStylesRoot ) { u = w . inlineStylesPeak ; B = u . getDocument ( ) . createText ( "{cke-peak}" ) ; for ( y = w . inlineStylesRoot . getParent ( ) ; ! u . equals ( y ) ; ) B = B . appendTo ( u . clone ( ) ) , u = u . getParent ( ) ; J = B . getOuterHtml ( ) . split ( "{cke-peak}" ) . join ( J ) } u = w . blockLimit . getName ( ) ; if ( /^\s+|\s+$/ . test ( J ) && "span" in CKEDITOR . dtd [ u ] ) { var V = '\x3cspan data-cke-marker\x3d"1"\x3e\x26nbsp;\x3c/span\x3e' ; J = V + J + V } J = w . editor . dataProcessor . toHtml ( J ,
{ context : null , fixForBody : ! 1 , protectedWhitespaces : ! ! V , dontFilter : w . dontFilter , filter : w . editor . activeFilter , enterMode : w . editor . activeEnterMode } ) ; u = t . document . createElement ( "body" ) ; u . setHtml ( J ) ; V && ( u . getFirst ( ) . remove ( ) , u . getLast ( ) . remove ( ) ) ; if ( ( V = t . startPath ( ) . block ) && ( 1 != V . getChildCount ( ) || ! V . getBogus ( ) ) ) a : { var P ; if ( 1 == u . getChildCount ( ) && a ( P = u . getFirst ( ) ) && P . is ( p ) && ! P . hasAttribute ( "contenteditable" ) ) { V = P . getElementsByTag ( "*" ) ; t = 0 ; for ( y = V . count ( ) ; t < y ; t ++ ) if ( B = V . getItem ( t ) , ! B . is ( n ) ) break a ; P . moveChildren ( P . getParent ( 1 ) ) ;
P . remove ( ) } } w . dataWrapper = u ; t = J } if ( t ) { P = w . range ; t = P . document ; u = w . blockLimit ; y = 0 ; var R , V = [ ] , I , N ; J = C = 0 ; var K , B = P . startContainer ; Z = w . endPath . elements [ 0 ] ; var ba , D = Z . getPosition ( B ) , z = ! ! Z . getCommonAncestor ( B ) && D != CKEDITOR . POSITION _IDENTICAL && ! ( D & CKEDITOR . POSITION _CONTAINS + CKEDITOR . POSITION _IS _CONTAINED ) , B = b ( w . dataWrapper , w ) ; for ( F ( B , P ) ; y < B . length ; y ++ ) { D = B [ y ] ; if ( x = D . isLineBreak ) x = P , q = u , H = T = void 0 , D . hasBlockSibling ? x = 1 : ( T = x . startContainer . getAscendant ( E . $block , 1 ) ) && T . is ( { div : 1 , p : 1 } ) ? ( H = T . getPosition ( q ) , H ==
CKEDITOR . POSITION _IDENTICAL || H == CKEDITOR . POSITION _CONTAINS ? x = 0 : ( q = x . splitElement ( T ) , x . moveToPosition ( q , CKEDITOR . POSITION _AFTER _START ) , x = 1 ) ) : x = 0 ; if ( x ) J = 0 < y ; else { x = P . startPath ( ) ; ! D . isBlock && l ( w . editor , x . block , x . blockLimit ) && ( N = h ( w . editor ) ) && ( N = t . createElement ( N ) , N . appendBogus ( ) , P . insertNode ( N ) , CKEDITOR . env . needsBrFiller && ( R = N . getBogus ( ) ) && R . remove ( ) , P . moveToPosition ( N , CKEDITOR . POSITION _BEFORE _END ) ) ; if ( ( x = P . startPath ( ) . block ) && ! x . equals ( I ) ) { if ( R = x . getBogus ( ) ) R . remove ( ) , V . push ( x ) ; I = x } D . firstNotAllowed &&
( C = 1 ) ; if ( C && D . isElement ) { x = P . startContainer ; for ( q = null ; x && ! E [ x . getName ( ) ] [ D . name ] ; ) { if ( x . equals ( u ) ) { x = null ; break } q = x ; x = x . getParent ( ) } if ( x ) q && ( K = P . splitElement ( q ) , w . zombies . push ( K ) , w . zombies . push ( q ) ) ; else { q = u . getName ( ) ; ba = ! y ; x = y == B . length - 1 ; q = d ( D . node , q ) ; T = [ ] ; H = q . length ; for ( var ca = 0 , ea = void 0 , X = 0 , W = - 1 ; ca < H ; ca ++ ) ea = q [ 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 ( D . node ) ;
D . lastNotAllowed && y < B . length - 1 && ( ( K = z ? Z : K ) && P . setEndAt ( K , CKEDITOR . POSITION _AFTER _START ) , C = 0 ) ; P . collapse ( ) } } 1 != B . length ? R = ! 1 : ( R = B [ 0 ] , R = R . isElement && "false" == R . node . getAttribute ( "contenteditable" ) ) ; R && ( J = ! 0 , x = B [ 0 ] . node , P . setStartAt ( x , CKEDITOR . POSITION _BEFORE _START ) , P . setEndAt ( x , CKEDITOR . POSITION _AFTER _END ) ) ; w . dontMoveCaret = J ; w . bogusNeededBlocks = V } R = w . range ; var Y ; ba = w . bogusNeededBlocks ; for ( I = R . createBookmark ( ) ; N = w . zombies . pop ( ) ; ) N . getParent ( ) && ( K = R . clone ( ) , K . moveToElementEditStart ( N ) , K . removeEmptyBlocksAtEnd ( ) ) ;
if ( ba ) for ( ; N = ba . pop ( ) ; ) CKEDITOR . env . needsBrFiller ? N . appendBogus ( ) : N . append ( R . document . createText ( " " ) ) ; for ( ; N = w . mergeCandidates . pop ( ) ; ) N . mergeSiblings ( ) ; CKEDITOR . env . webkit && R . startPath ( ) && ( N = R . startPath ( ) , N . block ? N . block . $ . normalize ( ) : N . blockLimit && N . blockLimit . $ . normalize ( ) ) ; R . moveToBookmark ( I ) ; if ( ! w . dontMoveCaret ) { for ( N = e ( R ) ; N && a ( N ) && ! N . is ( E . $empty ) ; ) { if ( N . isBlockBoundary ( ) ) R . moveToPosition ( N , CKEDITOR . POSITION _BEFORE _END ) ; else { if ( f ( N ) && N . getHtml ( ) . match ( /(\s| )$/g ) ) { Y = null ; break } Y = R . clone ( ) ;
Y . moveToPosition ( N , CKEDITOR . POSITION _BEFORE _END ) } N = N . 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 , f = e . getAscendant ( "table" , 1 ) , g = ! 1 ; c ( f . getElementsByTag ( "td" ) ) ; c ( f . getElementsByTag ( "th" ) ) ; f = d . clone ( ) ; f . setStart ( e , 0 ) ; f = a ( f ) . lastBackward ( ) ; f || ( f = d . clone ( ) , f . setEndAt ( e , CKEDITOR . POSITION _BEFORE _END ) , f = a ( f ) . lastForward ( ) , g = ! 0 ) ; f || ( f = e ) ; f . is ( "table" ) ? ( d . setStartAt ( f , CKEDITOR . POSITION _BEFORE _START ) , d . collapse ( ! 0 ) , f . remove ( ) ) : ( f . is ( { tbody : 1 , thead : 1 , tfoot : 1 } ) && ( f = b ( f , "tr" , g ) ) , f . is ( "tr" ) &&
( f = b ( f , f . getParent ( ) . is ( "thead" ) ? "th" : "td" , g ) ) , ( e = f . getBogus ( ) ) && e . remove ( ) , d . moveToPosition ( f , g ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _BEFORE _END ) ) } } ( ) ; q = 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 =
@@ -427,7 +428,7 @@ b.clone();e.setStart(c,0);e=a(e).lastBackward();e||(e=b.clone(),e.setEndAt(c,CKE
b ) ; d . collapse ( 1 ) ; e . collapse ( ) ; f . block && d . checkBoundaryOfElement ( f . block , CKEDITOR . END ) && ( c . setStartAfter ( f . block ) , a . prependEolBr = 1 ) ; g . block && e . checkBoundaryOfElement ( g . block , CKEDITOR . START ) && ( c . setEndBefore ( g . 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 || ! C ( 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 ) , f = new CKEDITOR . dom . elementPath ( c . startContainer , b ) , c = new CKEDITOR . dom . elementPath ( c . endContainer , b ) , g ; d . type == CKEDITOR . NODE _TEXT && ( d = d . getParent ( ) ) ; if ( e . blockLimit . is ( { tr : 1 , table : 1 } ) ) { var h = e . contains ( "table" ) . getParent ( ) ; g = function ( a ) { return ! a . equals ( h ) } } else if ( e . block &&
e . block . is ( CKEDITOR . dtd . $listItem ) && ( f = f . contains ( CKEDITOR . dtd . $list ) , c = c . contains ( CKEDITOR . dtd . $list ) , ! f . equals ( c ) ) ) { var l = e . contains ( CKEDITOR . dtd . $list ) . getParent ( ) ; g = function ( a ) { return ! a . equals ( l ) } } g || ( g = function ( a ) { return ! a . equals ( e . block ) && ! a . equals ( e . blockLimit ) } ) ; this . rebuildFragment ( a , b , d , g ) } , 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 ) } } } ; K = 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 f ; f = e . getNext ( ) ; ) f . insertAfter ( d ) , d = f ; z ( 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 ) ,
d = a . startOffset , e = a . endOffset ; b . type == CKEDITOR . NODE _ELEMENT && b . equals ( c ) && b . is ( "tr" ) && ++ d == e && a . shrink ( CKEDITOR . SHRINK _TEXT ) } } } ; K = 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 f ; f = e . getNext ( ) ; ) f . insertAfter ( d ) , d = f ; 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 ( ) , f = d . endPath ( ) , g = e . contains ( CKEDITOR . dtd . $list ) , h = f . contains ( CKEDITOR . dtd . $list ) ; a . mergeList = g && h && g . getParent ( ) . equals ( h . getParent ( ) ) && ! g . equals ( h ) ; a . mergeListItems = e . block && f . block && e . block . is ( CKEDITOR . dtd . $listItem ) && f . 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 , f = new CKEDITOR . dom . elementPath ( d , c ) , g = new CKEDITOR . dom . elementPath ( e , c ) ; if ( a . mergeList ) { var h = f . contains ( CKEDITOR . dtd . $list ) , l = g . contains ( CKEDITOR . dtd . $list ) ; h . equals ( l ) || ( l . moveChildren ( h ) , l . remove ( ) ) } a . mergeListItems && ( f = f . contains ( CKEDITOR . dtd . $listItem ) , g = g . contains ( CKEDITOR . dtd . $listItem ) , f . equals ( g ) || b ( g , 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 , f = new CKEDITOR . dom . elementPath ( d , c ) , g = new CKEDITOR . dom . elementPath ( e , c ) , f = f . block , g = g . block ; f && g && ! f . equals ( g ) && b ( g , d , e ) ; d . remove ( ) ; e . remove ( ) } } } , table : function ( ) { function a ( c ) { var e = [ ] , f , g = new CKEDITOR . dom . walker ( c ) , h = c . startPath ( ) . contains ( d ) , t = c . endPath ( ) . contains ( d ) , l = { } ; g . guard = function ( a ,
@@ -435,81 +436,81 @@ g){if(a.type==CKEDITOR.NODE_ELEMENT){var k="visited_"+(g?"out":"in");if(a.getCus
! 0 ) , k = k && k . contains ( p ) || m && m . contains ( p ) ; else k = void 0 ; k && ( f = c . clone ( ) , f . selectNodeContents ( a ) , e . push ( f ) ) } } ; g . 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" ) , f = b . endPath ( ) . contains ( "table" ) ; c && f && b . checkBoundaryOfElement ( c , CKEDITOR . START ) && b . checkBoundaryOfElement ( f , CKEDITOR . END ) && ( b = a . range . clone ( ) , b . setStartBefore ( c ) , b . setEndAfter ( f ) , a . purgeTableBookmark = b . createBookmark ( ) ) } } , detectRanges : function ( e , f ) { var g = c ( f , e . bookmark ) , h = g . clone ( ) , l , t , k = g . getCommonAncestor ( ) ; k . is ( CKEDITOR . dtd . $tableContent ) && ! k . is ( d ) && ( k = k . getAscendant ( "table" , ! 0 ) ) ; t = k ; k = new CKEDITOR . dom . elementPath ( g . startContainer ,
t ) ; t = new CKEDITOR . dom . elementPath ( g . endContainer , t ) ; k = k . contains ( "table" ) ; t = t . contains ( "table" ) ; if ( k || t ) k && t && b ( k , t ) ? ( e . tableSurroundingRange = h , h . setStartAt ( k , CKEDITOR . POSITION _AFTER _END ) , h . setEndAt ( t , CKEDITOR . POSITION _BEFORE _START ) , h = g . clone ( ) , h . setEndAt ( k , CKEDITOR . POSITION _AFTER _END ) , l = g . clone ( ) , l . setStartAt ( t , CKEDITOR . POSITION _BEFORE _START ) , l = a ( h ) . concat ( a ( l ) ) ) : k ? t || ( e . tableSurroundingRange = h , h . setStartAt ( k , CKEDITOR . POSITION _AFTER _END ) , g . setEndAt ( k , CKEDITOR . POSITION _AFTER _END ) ) : ( e . tableSurroundingRange =
h , h . setEndAt ( t , CKEDITOR . POSITION _BEFORE _START ) , g . setStartAt ( t , CKEDITOR . POSITION _AFTER _START ) ) , e . tableContentsRanges = l ? l : a ( g ) } , deleteRanges : function ( a ) { for ( var b ; b = a . tableContentsRanges . pop ( ) ; ) b . extractContents ( ) , z ( 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 ) ;
h , h . setEndAt ( t , CKEDITOR . POSITION _BEFORE _START ) , g . setStartAt ( t , CKEDITOR . POSITION _AFTER _START ) ) , e . tableContentsRanges = l ? l : a ( g ) } , 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 ; l ( 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 ) { 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 f = b [ 0 ] ; d = f . startContainer . getAscendant ( { td : 1 , th : 1 } , ! 0 ) ; var g = f . endContainer . getAscendant ( { td : 1 , th : 1 } , ! 0 ) ; e = CKEDITOR . tools . trim ; d && d . equals ( g ) && ! d . findOne ( "td, th, tr, tbody, table" ) ? ( f = f . cloneContents ( ) , d = f . getFirst ( ) ? e ( f . 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 , f ; for ( f = 0 ; f < a . length ; f ++ ) e && ! e . equals ( a [ f ] . getAscendant ( "tr" ) ) ? ( c += d . join ( "\t" ) + "\n" , e = a [ f ] . getAscendant ( "tr" ) , d = [ ] ) : 0 === f && ( e = a [ f ] . getAscendant ( "tr" ) ) , d . push ( a [ f ] . getText ( ) ) ;
return c += d . join ( "\t" ) } function g ( a ) { var b = this . root . editor , d = b . getSelection ( 1 ) ; this . reset ( ) ; K = ! 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 ; K = ! 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 f = c . getRanges ( ) , g = e . getRanges ( ) , h = f . length && f [ 0 ] . _getTableElement ( ) && f [ 0 ] . _getTableElement ( ) . getAscendant ( "table" , ! 0 ) , l = g . length && g [ 0 ] . _getTableElement ( ) && g [ 0 ] . _getTableElement ( ) . getAscendant ( "table" , ! 0 ) , k = 1 === f . length && f [ 0 ] . _getTableElement ( ) && f [ 0 ] . _getTableElement ( ) . is ( "table" ) , J = 1 === g . length && g [ 0 ] . _getTableElement ( ) && g [ 0 ] . _getTableElement ( ) . is ( "table" ) ; if ( a ( e . getSelectedElement ( ) ) ) e = ! 1 ; else { var v = 1 === f . length && f [ 0 ] . collapsed , g = d ( f , ! ! CKEDITOR . env . webkit ) &&
d ( g ) ; h = h && l ? h . equals ( l ) || l . contains ( h ) : ! 1 ; h && ( v || g ) ? ( k && ! J && e . selectRanges ( f ) , 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 =
var e ; if ( ! ( e = ! c ) && ( e = ! c . isHidden ( ) ) ) { e = b ; var f = c . getRanges ( ) , g = e . getRanges ( ) , h = f . length && f [ 0 ] . _getTableElement ( ) && f [ 0 ] . _getTableElement ( ) . getAscendant ( "table" , ! 0 ) , l = g . length && g [ 0 ] . _getTableElement ( ) && g [ 0 ] . _getTableElement ( ) . getAscendant ( "table" , ! 0 ) , k = 1 === f . length && f [ 0 ] . _getTableElement ( ) && f [ 0 ] . _getTableElement ( ) . is ( "table" ) , J = 1 === g . length && g [ 0 ] . _getTableElement ( ) && g [ 0 ] . _getTableElement ( ) . is ( "table" ) ; if ( a ( e . getSelectedElement ( ) ) ) e = ! 1 ; else { var u = 1 === f . length && f [ 0 ] . collapsed , g = d ( f , ! ! CKEDITOR . env . webkit ) &&
d ( g ) ; h = h && l ? h . equals ( l ) || l . contains ( h ) : ! 1 ; h && ( u || g ) ? ( k && ! J && e . selectRanges ( f ) , 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 l ( ) { G = ! 0 ; m || ( h . call ( this ) , m = CKEDITOR . tools . setTimeout ( h , 200 , this ) ) } function h ( ) { m = null ; G && ( CKEDITOR . tools . setTimeout ( e , 0 , this ) , G = ! 1 ) } function k ( a ) { return L ( a ) || a . type == CKEDITOR . NODE _ELEMENT && ! a . is ( CKEDITOR . dtd . $empty ) ? ! 0 : ! 1 } function p ( 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 ( k ,
null , c ) , e = a . getNextNode ( k , null , c ) ; return b ( d ) || b ( e , 1 ) || ! ( d || e || c . type == CKEDITOR . NODE _ELEMENT && c . isBlockBoundary ( ) && c . getBogus ( ) ) ? ! 0 : ! 1 } function f ( a ) { x ( a , ! 1 ) ; var b = a . getDocument ( ) . createText ( q ) ; a . setCustomData ( "cke-fillingChar" , b ) ; return b } function x ( 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 ) , f = q . length ; if ( c . getLength ( ) > f && e && e . intersectsNode ( c . $ ) ) { var g = [ { node : d . anchorNode , offset : d . anchorOffset } ,
{ node : d . focusNode , offset : d . focusOffset } ] ; d . anchorNode == c . $ && d . anchorOffset > f && ( g [ 0 ] . offset -= f ) ; d . focusNode == c . $ && d . focusOffset > f && ( g [ 1 ] . offset -= f ) } } c . setText ( y ( c . getText ( ) , 1 ) ) ; g && ( c = a . getDocument ( ) . $ , d = c . getSelection ( ) , c = c . createRange ( ) , c . setStart ( g [ 0 ] . node , g [ 0 ] . offset ) , c . collapse ( ! 0 ) , d . removeAllRanges ( ) , d . addRange ( c ) , d . extend ( g [ 1 ] . node , g [ 1 ] . offset ) ) } } function y ( a , b ) { return b ? a . replace ( I , function ( a , b ) { return b ? " " : "" } ) : a . replace ( q , "" ) } function z ( a , b ) { var c = b && CKEDITOR . tools . htmlEncode ( b ) || "\x26nbsp;" ,
null , c ) , e = a . getNextNode ( k , null , c ) ; return b ( d ) || b ( e , 1 ) || ! ( d || e || c . type == CKEDITOR . NODE _ELEMENT && c . isBlockBoundary ( ) && c . getBogus ( ) ) ? ! 0 : ! 1 } function f ( a ) { y ( a , ! 1 ) ; var b = a . getDocument ( ) . createText ( q ) ; 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 ) , f = q . length ; if ( c . getLength ( ) > f && e && e . intersectsNode ( c . $ ) ) { var g = [ { node : d . anchorNode , offset : d . anchorOffset } ,
{ node : d . focusNode , offset : d . focusOffset } ] ; d . anchorNode == c . $ && d . anchorOffset > f && ( g [ 0 ] . offset -= f ) ; d . focusNode == c . $ && d . focusOffset > f && ( g [ 1 ] . offset -= f ) } } c . setText ( z ( c . getText ( ) , 1 ) ) ; g && ( c = a . getDocument ( ) . $ , d = c . getSelection ( ) , c = c . createRange ( ) , c . setStart ( g [ 0 ] . node , g [ 0 ] . offset ) , c . collapse ( ! 0 ) , d . removeAllRanges ( ) , d . addRange ( c ) , d . extend ( g [ 1 ] . node , g [ 1 ] . offset ) ) } } function z ( a , b ) { return b ? a . replace ( I , function ( a , b ) { return b ? " " : "" } ) : a . replace ( q , "" ) } function x ( 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 ( ) , f = 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 ] ) ; f . removeListener ( ) ; a . fire ( "unlockSnapshot" ) ; a . _ . hiddenSelectionContainer = c } function C ( 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 ( ) , f = e . getRanges ( ) [ 0 ] ; e . isCollapsed ( ) && ( f = f [ 38 > d ? "getPreviousEditableNode" : "getNextEditableNode" ] ( ) ) && f . type == CKEDITOR . NODE _ELEMENT && "false" == f . 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 ( f ) , c . data . preventDefault ( ) , c . cancel ( ) ) } } } function w ( 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 f = c . startOffset ,
d && 46 !== d || ( e . remove ( ) , a . fire ( "saveSnapshot" ) ) , a . getSelection ( ) . fake ( f ) , 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 f = c . startOffset ,
g = c . endOffset , h = c . clone ( ) ; d && d . type == CKEDITOR . NODE _TEXT && ( f >= d . getLength ( ) ? h . setStartAfter ( d ) : h . setStartBefore ( d ) ) ; e && e . type == CKEDITOR . NODE _TEXT && ( g ? h . setEndAfter ( e ) : h . setEndBefore ( e ) ) ; d = new CKEDITOR . dom . walker ( h ) ; d . evaluator = function ( d ) { if ( d . type == CKEDITOR . NODE _ELEMENT && d . isReadOnly ( ) ) { var e = c . clone ( ) ; c . setEndBefore ( d ) ; c . collapsed && a . splice ( b -- , 1 ) ; 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 , q = CKEDITOR . tools . repeat ( " " , 7 ) , I = new RegExp ( q + "( )?" , "g" ) , K , m , G , L = 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 ( ) { y = new CKEDITOR . dom . selection ( c . getSelection ( ) ) ; y . lock ( ) } function b ( ) { h . removeListener ( "mouseup" ,
! 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 ( ) { x = new CKEDITOR . dom . selection ( c . getSelection ( ) ) ; x . lock ( ) } function b ( ) { h . removeListener ( "mouseup" ,
b ) ; m . removeListener ( "mouseup" , b ) ; var a = CKEDITOR . document . $ . selection , c = a . createRange ( ) ; "None" != a . type && c . parentElement ( ) && c . parentElement ( ) . ownerDocument == g . $ && 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 = f ( b ) ) && ! c . equals ( k ) && ( b . selectElement ( c ) , a . data . preventDefault ( ) ) ) } function f ( 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 g = c . document , h = CKEDITOR . document , k = c . editable ( ) , r = g . getBody ( ) , m = g . getDocumentElement ( ) , p = k . isInline ( ) , F , y ; CKEDITOR . env . gecko && k . attachListener ( k , "focus" , function ( a ) { a . removeListener ( ) ; 0 !== F && ( a = c . getSelection ( ) . getNative ( ) ) && a . isCollapsed && a . anchorNode == k . $ && ( a = c . createRange ( ) , a . moveToElementEditStart ( k ) , a . select ( ) ) } , null , null , - 2 ) ; k . attachListener ( k , CKEDITOR . env . webkit || CKEDITOR . env . gecko ? "focusin" : "focus" , function ( ) { if ( F && ( CKEDITOR . env . webkit ||
! 0 ) ) && "false" === a . getAttribute ( "contenteditable" ) ? a : null : null } var g = c . document , h = CKEDITOR . document , k = c . editable ( ) , r = g . getBody ( ) , m = g . getDocumentElement ( ) , p = k . isInline ( ) , F , x ; CKEDITOR . env . gecko && k . attachListener ( k , "focus" , function ( a ) { a . removeListener ( ) ; 0 !== F && ( a = c . getSelection ( ) . getNative ( ) ) && a . isCollapsed && a . anchorNode == k . $ && ( a = c . createRange ( ) , a . moveToElementEditStart ( k ) , a . select ( ) ) } , null , null , - 2 ) ; k . attachListener ( k , CKEDITOR . env . webkit || CKEDITOR . env . gecko ? "focusin" : "focus" , function ( ) { if ( F && ( CKEDITOR . env . webkit ||
CKEDITOR . env . gecko ) ) { F = c . _ . previousActive && c . _ . previousActive . equals ( g . getActive ( ) ) ; var a = null != c . _ . previousScrollTop && c . _ . previousScrollTop != k . $ . scrollTop ; CKEDITOR . env . webkit && F && a && ( k . $ . scrollTop = c . _ . previousScrollTop ) } c . unlockSelection ( F ) ; F = 0 } , null , null , - 1 ) ; k . attachListener ( k , "mousedown" , function ( ) { F = 0 } ) ; if ( CKEDITOR . env . ie || CKEDITOR . env . gecko || p ) n ? k . attachListener ( k , "beforedeactivate" , a , null , null , - 1 ) : k . attachListener ( c , "selectionCheck" , a , null , null , - 1 ) , k . attachListener ( k , CKEDITOR . env . webkit || CKEDITOR . env . gecko ?
"focusout" : "blur" , function ( ) { var a = y && ( y . isFake || 2 > y . getRanges ( ) . length ) ; CKEDITOR . env . gecko && ! p && a || ( c . lockSelection ( y ) , F = 1 ) } , null , null , - 1 ) , k . attachListener ( k , "mousedown" , function ( ) { F = 0 } ) ; if ( CKEDITOR . env . ie && ! p ) { var q ; k . attachListener ( k , "mousedown" , function ( a ) { 2 == a . data . $ . button && ( ( a = c . document . getSelection ( ) ) && a . getType ( ) != CKEDITOR . SELECTION _NONE || ( q = c . window . getScrollPosition ( ) ) ) } ) ; k . attachListener ( k , "mouseup" , function ( a ) { 2 == a . data . $ . button && q && ( c . document . $ . documentElement . scrollLeft = q . x , c . document . $ . documentElement . scrollTop =
q . y ) ; q = null } ) ; if ( "BackCompat" != g . $ . compatMode ) { if ( CKEDITOR . env . ie7Compat || CKEDITOR . env . ie6Compat ) { var w , z ; m . on ( "mousedown" , function ( a ) { function b ( a ) { a = a . data . $ ; if ( w ) { var c = r . $ . createTextRange ( ) ; try { c . moveToPoint ( a . clientX , a . clientY ) } catch ( d ) { } w . setEndPoint ( 0 > z . compareEndPoints ( "StartToStart" , c ) ? "EndToEnd" : "StartToStart" , c ) ; w . select ( ) } } function c ( ) { m . removeListener ( "mousemove" , b ) ; h . removeListener ( "mouseup" , c ) ; m . removeListener ( "mouseup" , c ) ; w . select ( ) } a = a . data ; if ( a . getTarget ( ) . is ( "html" ) && a . $ . y < m . $ . clientHeight &&
a . $ . x < m . $ . clientWidth ) { w = r . $ . createTextRange ( ) ; try { w . moveToPoint ( a . $ . clientX , a . $ . clientY ) } catch ( d ) { } z = w . duplicate ( ) ; m . on ( "mousemove" , b ) ; h . on ( "mouseup" , c ) ; m . on ( "mouseup" , c ) } } ) } if ( 7 < CKEDITOR . env . version && 11 > CKEDITOR . env . version ) m . on ( "mousedown" , function ( a ) { a . data . getTarget ( ) . is ( "html" ) && ( h . on ( "mouseup" , b ) , m . on ( "mouseup" , b ) ) } ) } } k . attachListener ( k , "selectionchange" , e , c ) ; k . attachListener ( k , "keyup" , l , c ) ; k . attachListener ( k , "touchstart" , l , c ) ; k . attachListener ( k , "touchend" , l , c ) ; CKEDITOR . env . ie && k . attachListener ( k ,
"focusout" : "blur" , function ( ) { var a = x && ( x . isFake || 2 > x . getRanges ( ) . length ) ; CKEDITOR . env . gecko && ! p && a || ( c . lockSelection ( x ) , F = 1 ) } , null , null , - 1 ) , k . attachListener ( k , "mousedown" , function ( ) { F = 0 } ) ; if ( CKEDITOR . env . ie && ! p ) { var q ; k . attachListener ( k , "mousedown" , function ( a ) { 2 == a . data . $ . button && ( ( a = c . document . getSelection ( ) ) && a . getType ( ) != CKEDITOR . SELECTION _NONE || ( q = c . window . getScrollPosition ( ) ) ) } ) ; k . attachListener ( k , "mouseup" , function ( a ) { 2 == a . data . $ . button && q && ( c . document . $ . documentElement . scrollLeft = q . x , c . document . $ . documentElement . scrollTop =
q . y ) ; q = null } ) ; if ( "BackCompat" != g . $ . compatMode ) { if ( CKEDITOR . env . ie7Compat || CKEDITOR . env . ie6Compat ) { var z , v ; m . on ( "mousedown" , function ( a ) { function b ( a ) { a = a . data . $ ; if ( z ) { var c = r . $ . createTextRange ( ) ; try { c . moveToPoint ( a . clientX , a . clientY ) } catch ( d ) { } z . setEndPoint ( 0 > v . compareEndPoints ( "StartToStart" , c ) ? "EndToEnd" : "StartToStart" , c ) ; z . select ( ) } } function c ( ) { m . removeListener ( "mousemove" , b ) ; h . removeListener ( "mouseup" , c ) ; m . removeListener ( "mouseup" , c ) ; z . select ( ) } a = a . data ; if ( a . getTarget ( ) . is ( "html" ) && a . $ . y < m . $ . clientHeight &&
a . $ . x < m . $ . clientWidth ) { z = r . $ . createTextRange ( ) ; try { z . moveToPoint ( a . $ . clientX , a . $ . clientY ) } catch ( d ) { } v = z . duplicate ( ) ; m . on ( "mousemove" , b ) ; h . on ( "mouseup" , c ) ; m . on ( "mouseup" , c ) } } ) } if ( 7 < CKEDITOR . env . version && 11 > CKEDITOR . env . version ) m . on ( "mousedown" , function ( a ) { a . data . getTarget ( ) . is ( "html" ) && ( h . on ( "mouseup" , b ) , m . on ( "mouseup" , b ) ) } ) } } k . attachListener ( k , "selectionchange" , e , c ) ; k . attachListener ( k , "keyup" , l , c ) ; k . attachListener ( k , "touchstart" , l , c ) ; k . attachListener ( k , "touchend" , l , c ) ; CKEDITOR . env . ie && k . attachListener ( k ,
"keydown" , d , c ) ; k . attachListener ( k , CKEDITOR . env . webkit || CKEDITOR . env . gecko ? "focusin" : "focus" , function ( ) { c . forceNextSelectionCheck ( ) ; c . selectionChange ( 1 ) } ) ; if ( p && ( CKEDITOR . env . webkit || CKEDITOR . env . gecko ) ) { var A ; k . attachListener ( k , "mousedown" , function ( ) { A = 1 } ) ; k . attachListener ( g . getDocumentElement ( ) , "mouseup" , function ( ) { A && l . call ( c ) ; A = 0 } ) } else k . attachListener ( CKEDITOR . env . ie ? k : g . getDocumentElement ( ) , "mouseup" , l , c ) ; CKEDITOR . env . webkit && k . attachListener ( g , "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 : k . hasFocus &&
x ( k ) } } , null , null , - 1 ) ; k . attachListener ( k , "keydown" , C ( 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" ) &&
y ( k ) } } , null , null , - 1 ) ; k . attachListener ( k , "keydown" , C ( 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" ) ? ( x ( a ) , a . editor . fire ( "selectionCheck" ) ) : c . setCustomData ( "ready" , 1 ) ) } , null , null , - 1 ) ; b . on ( "beforeSetMode" , function ( ) { x ( b . editable ( ) ) } , null , null , - 1 ) ; b . on ( "getSnapshot" , function ( a ) { a . data && ( a . data = y ( a . data ) ) } , b , null , 20 ) ; b . on ( "toDataFormat" , function ( a ) { a . data . dataValue = y ( a . data . dataValue ) } , null , null , 0 ) } ) ; CKEDITOR . editor . prototype . selectionChange = function ( a ) { ( a ? e : l ) . call ( this ) } ; CKEDITOR . editor . prototype . getSelection = function ( a ) { return ! this . _ . savedSelection && ! this . _ . fakeSelection ||
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 : l ) . call ( this ) } ; CKEDITOR . editor . prototype . getSelection = function ( a ) { return ! this . _ . savedSelection && ! this . _ . fakeSelection ||
a ? ( a = this . editable ( ) ) && "wysiwyg" == this . mode ? 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 ( f ) { } d = e && CKEDITOR . dom . element . get ( e . item && e . item ( 0 ) || e . parentElement ( ) ) } if ( ! d || d . type != CKEDITOR . NODE _ELEMENT && d . type != CKEDITOR . NODE _TEXT || ! this . root . equals ( d ) && ! this . root . contains ( d ) ) this . _ . cache . type = CKEDITOR . SELECTION _NONE , this . _ . cache . startElement = null , this . _ . cache . selectedElement = null , this . _ . cache . selectedText = "" , this . _ . cache . ranges = new CKEDITOR . dom . rangeList ; return this } ; var M = { 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 : y , _createFillingCharSequenceNode : f , FILLING _CHAR _SEQUENCE : q } ) ; 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 ; var b = CKEDITOR . SELECTION _NONE ;
select : 1 , textarea : 1 , button : 1 , fieldset : 1 , thead : 1 , tfoot : 1 } ; CKEDITOR . tools . extend ( CKEDITOR . dom . selection , { _removeFillingCharSequenceString : z , _createFillingCharSequenceNode : f , FILLING _CHAR _SEQUENCE : q } ) ; 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 ; 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 && M [ 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 , f , g , h = b . duplicate ( ) , l = 0 , k = e . length - 1 , r = - 1 , m , p ; l <= k ; ) if ( r = Math . floor ( ( l + k ) / 2 ) , f = e [ r ] , h . moveToElementText ( f ) , m = h . compareEndPoints ( "StartToStart" , b ) , 0 < m ) k = r - 1 ; else if ( 0 > m ) l = r + 1 ; else return { container : d , offset : a ( f ) } ;
if ( - 1 == r || r == e . length - 1 && 0 > m ) { h . moveToElementText ( d ) ; h . setEndPoint ( "StartToStart" , b ) ; h = h . text . replace ( /(\r\n|\r)/g , "\n" ) . length ; e = d . childNodes ; if ( ! h ) return f = e [ e . length - 1 ] , f . nodeType != CKEDITOR . NODE _TEXT ? { container : d , offset : e . length } : { container : f , offset : f . nodeValue . length } ; for ( d = e . length ; 0 < h && 0 < d ; ) g = e [ -- d ] , g . nodeType == CKEDITOR . NODE _TEXT && ( p = g , h -= g . nodeValue . length ) ; return { container : p , offset : - h } } h . collapse ( 0 < m ? ! 0 : ! 1 ) ; h . setEndPoint ( 0 < m ? "StartToStart" : "EndToStart" , b ) ; h = h . text . replace ( /(\r\n|\r)/g , "\n" ) . length ;
if ( ! h ) return { container : d , offset : a ( f ) + ( 0 < m ? 0 : 1 ) } ; for ( ; 0 < h ; ) try { g = f [ 0 < m ? "previousSibling" : "nextSibling" ] , g . nodeType == CKEDITOR . NODE _TEXT && ( h -= g . nodeValue . length , p = g ) , f = g } catch ( n ) { return { container : d , offset : a ( f ) } } return { container : p , offset : 0 < m ? - h : p . 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 f = c . item ( e ) , g = f . parentNode , h = 0 , a = new CKEDITOR . dom . range ( this . root ) ; h < g . childNodes . length && g . childNodes [ h ] != f ; h ++ ) ; a . setStart ( new CKEDITOR . dom . node ( g ) , h ) ; a . setEnd ( new CKEDITOR . dom . node ( g ) , h + 1 ) ; d . push ( a ) } return d } return [ ] } } ( ) : function ( ) { var a =
[ ] , b , c = this . getNative ( ) ; if ( ! c ) return a ; for ( var d = 0 ; d < c . rangeCount ; d ++ ) { var e = c . getRangeAt ( d ) ; b = new CKEDITOR . dom . range ( this . root ) ; b . setStart ( new CKEDITOR . dom . node ( e . startContainer ) , e . startOffset ) ; b . setEnd ( new CKEDITOR . dom . node ( e . endContainer ) , e . endOffset ) ; a . push ( b ) } return a } ; return function ( b ) { var c = this . _ . cache , d = c . ranges ; d || ( c . ranges = d = new CKEDITOR . dom . rangeList ( a . call ( this ) ) ) ; return b ? w ( new CKEDITOR . dom . rangeList ( d . slice ( ) ) ) : d } } ( ) , getStartElement : function ( ) { var a = this . _ . cache ; if ( void 0 !== a . startElement ) return a . startElement ;
[ ] , 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 = 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 && M [ 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 ; 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 ) ? g . 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 l = CKEDITOR . document . getActive ( ) ; this . unlock ( ) ; this . selectRanges ( a ) ; this . lock ( ) ; l && ! l . equals ( this . root ) && l . focus ( ) } else { var k ; a : { var m , J ; if ( 1 == a . length && ! ( J = a [ 0 ] ) . collapsed && ( k = J . getEnclosedNode ( ) ) && k . type == CKEDITOR . NODE _ELEMENT && ( J = J . clone ( ) , J . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 ) , ( m = J . getEnclosedNode ( ) ) && m . type == CKEDITOR . NODE _ELEMENT && ( k = m ) , "false" == k . getAttribute ( "contenteditable" ) ) ) break a ;
k = void 0 } if ( k ) this . fake ( k ) ; else if ( b && b . plugins . tableselection && b . plugins . tableselection . isSupportedEnvironment ( b ) && d ( a ) && ! K && ! a [ 0 ] . _getTableElement ( { table : 1 } ) . hasAttribute ( "data-cke-tableselection-ignored" ) ) g . call ( this , a ) ; else { if ( n ) { m = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ; k = /\ufeff|\u00a0/ ; J = { 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 v , B , D ; if ( ( c = b . getEnclosedNode ( ) ) && c . type == CKEDITOR . NODE _ELEMENT && c . getName ( ) in M && ( ! c . is ( "a" ) ||
! c . getText ( ) ) ) try { D = c . $ . createControlRange ( ) ; D . addElement ( c . $ ) ; D . select ( ) ; return } catch ( y ) { } if ( b . startContainer . type == CKEDITOR . NODE _ELEMENT && b . startContainer . getName ( ) in J || b . endContainer . type == CKEDITOR . NODE _ELEMENT && b . endContainer . getName ( ) in J ) b . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) , a = b . collapsed ; D = b . createBookmark ( ) ; J = D . startNode ; a || ( l = D . endNode ) ; D = b . document . $ . body . createTextRange ( ) ; D . moveToElementText ( J . $ ) ; D . moveStart ( "character" , 1 ) ; l ? ( k = b . document . $ . body . createTextRange ( ) , k . moveToElementText ( l . $ ) ,
D . setEndPoint ( "EndToEnd" , k ) , D . moveEnd ( "character" , - 1 ) ) : ( v = J . getNext ( m ) , B = J . hasAscendant ( "pre" ) , v = ! ( v && v . getText && v . getText ( ) . match ( k ) ) && ( B || ! J . hasPrevious ( ) || J . getPrevious ( ) . is && J . getPrevious ( ) . is ( "br" ) ) , B = b . document . createElement ( "span" ) , B . setHtml ( "\x26#65279;" ) , B . insertBefore ( J ) , v && b . document . createText ( " " ) . insertBefore ( J ) ) ; b . setStartBefore ( J ) ; J . remove ( ) ; a ? ( v ? ( D . moveStart ( "character" , - 1 ) , D . select ( ) , b . document . $ . selection . clear ( ) ) : D . select ( ) , b . moveToPosition ( B , CKEDITOR . POSITION _BEFORE _START ) , B . remove ( ) ) :
( b . setEndBefore ( l ) , l . remove ( ) , D . select ( ) ) } else { l = this . getNative ( ) ; if ( ! l ) return ; this . removeAllRanges ( ) ; for ( D = 0 ; D < a . length ; D ++ ) { if ( D < a . length - 1 && ( v = a [ D ] , B = a [ D + 1 ] , k = v . clone ( ) , k . setStart ( v . endContainer , v . endOffset ) , k . setEnd ( B . startContainer , B . startOffset ) , ! k . collapsed && ( k . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) , b = k . getCommonAncestor ( ) , k = k . getEnclosedNode ( ) , b . isReadOnly ( ) || k && k . isReadOnly ( ) ) ) ) { B . setStart ( v . startContainer , v . startOffset ) ; a . splice ( D -- , 1 ) ; continue } b = a [ D ] ; B = this . document . $ . createRange ( ) ; b . collapsed &&
CKEDITOR . env . webkit && p ( b ) && ( k = f ( this . root ) , b . insertNode ( k ) , ( v = k . getNext ( ) ) && ! k . getPrevious ( ) && v . type == CKEDITOR . NODE _ELEMENT && "br" == v . getName ( ) ? ( x ( this . root ) , b . moveToPosition ( v , CKEDITOR . POSITION _BEFORE _START ) ) : b . moveToPosition ( k , CKEDITOR . POSITION _AFTER _END ) ) ; B . setStart ( b . startContainer . $ , b . startOffset ) ; try { B . setEnd ( b . endContainer . $ , b . endOffset ) } catch ( q ) { if ( 0 <= q . toString ( ) . indexOf ( "NS_ERROR_ILLEGAL_VALUE" ) ) b . collapse ( 1 ) , B . setEnd ( b . endContainer . $ , b . endOffset ) ; else throw q ; } l . addRange ( B ) } } 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 = H ++ ; c . _ . fakeSelection = this ; this . root . fire ( "selectionchange" ) } , isHidden : function ( ) { var a =
k = void 0 } if ( k ) this . fake ( k ) ; else if ( b && b . plugins . tableselection && b . plugins . tableselection . isSupportedEnvironment ( b ) && d ( a ) && ! K && ! a [ 0 ] . _getTableElement ( { table : 1 } ) . hasAttribute ( "data-cke-tableselection-ignored" ) ) g . call ( this , a ) ; else { if ( n ) { m = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ; k = /\ufeff|\u00a0/ ; J = { 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 u , B , D ; if ( ( c = b . getEnclosedNode ( ) ) && c . type == CKEDITOR . NODE _ELEMENT && c . getName ( ) in M && ( ! c . is ( "a" ) ||
! c . getText ( ) ) ) try { D = c . $ . createControlRange ( ) ; D . addElement ( c . $ ) ; D . select ( ) ; return } catch ( x ) { } if ( b . startContainer . type == CKEDITOR . NODE _ELEMENT && b . startContainer . getName ( ) in J || b . endContainer . type == CKEDITOR . NODE _ELEMENT && b . endContainer . getName ( ) in J ) b . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) , a = b . collapsed ; D = b . createBookmark ( ) ; J = D . startNode ; a || ( l = D . endNode ) ; D = b . document . $ . body . createTextRange ( ) ; D . moveToElementText ( J . $ ) ; D . moveStart ( "character" , 1 ) ; l ? ( k = b . document . $ . body . createTextRange ( ) , k . moveToElementText ( l . $ ) ,
D . setEndPoint ( "EndToEnd" , k ) , D . moveEnd ( "character" , - 1 ) ) : ( u = J . getNext ( m ) , B = J . hasAscendant ( "pre" ) , u = ! ( u && u . getText && u . getText ( ) . match ( k ) ) && ( B || ! J . hasPrevious ( ) || J . getPrevious ( ) . is && J . getPrevious ( ) . is ( "br" ) ) , B = b . document . createElement ( "span" ) , B . setHtml ( "\x26#65279;" ) , B . insertBefore ( J ) , u && b . document . createText ( " " ) . insertBefore ( J ) ) ; b . setStartBefore ( J ) ; J . remove ( ) ; a ? ( u ? ( D . moveStart ( "character" , - 1 ) , D . select ( ) , b . document . $ . selection . clear ( ) ) : D . select ( ) , b . moveToPosition ( B , CKEDITOR . POSITION _BEFORE _START ) , B . remove ( ) ) :
( b . setEndBefore ( l ) , l . remove ( ) , D . select ( ) ) } else { l = this . getNative ( ) ; if ( ! l ) return ; this . removeAllRanges ( ) ; for ( D = 0 ; D < a . length ; D ++ ) { if ( D < a . length - 1 && ( u = a [ D ] , B = a [ D + 1 ] , k = u . clone ( ) , k . setStart ( u . endContainer , u . endOffset ) , k . setEnd ( B . startContainer , B . startOffset ) , ! k . collapsed && ( k . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) , b = k . getCommonAncestor ( ) , k = k . getEnclosedNode ( ) , b . isReadOnly ( ) || k && k . isReadOnly ( ) ) ) ) { B . setStart ( u . startContainer , u . startOffset ) ; a . splice ( D -- , 1 ) ; continue } b = a [ D ] ; B = this . document . $ . createRange ( ) ; b . collapsed &&
CKEDITOR . env . webkit && p ( b ) && ( k = f ( this . root ) , b . insertNode ( k ) , ( u = k . getNext ( ) ) && ! k . getPrevious ( ) && u . type == CKEDITOR . NODE _ELEMENT && "br" == u . getName ( ) ? ( y ( this . root ) , b . moveToPosition ( u , CKEDITOR . POSITION _BEFORE _START ) ) : b . moveToPosition ( k , CKEDITOR . POSITION _AFTER _END ) ) ; B . setStart ( b . startContainer . $ , b . startOffset ) ; try { B . setEnd ( b . endContainer . $ , b . endOffset ) } catch ( q ) { if ( 0 <= q . toString ( ) . indexOf ( "NS_ERROR_ILLEGAL_VALUE" ) ) b . collapse ( 1 ) , B . setEnd ( b . endContainer . $ , b . endOffset ) ; else throw q ; } l . addRange ( B ) } } 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 = 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 f = new CKEDITOR . dom . range ( this . root ) ; f . moveToBookmark ( a [ e ] ) ; b . push ( f ) } 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 f = this . element , h = this . _ . definition , l , k = h . ignoreReadonly , m = k || h . includeReadonly ; null ==
m && ( m = c . root . getCustomData ( "cke_includeReadonly" ) ) ; var p = CKEDITOR . dtd [ f ] ; p || ( l = ! 0 , p = CKEDITOR . dtd . span ) ; c . enlarge ( CKEDITOR . ENLARGE _INLINE , 1 ) ; c . trim ( ) ; var n = c . createBookmark ( ) , x = n . startNode , y = n . endNode , q = x , r ; if ( ! k ) { var w = c . getCommonAncestor ( ) , k = a ( x , w ) , w = a ( y , w ) ; k && ( q = k . getNextSourceNode ( ! 0 ) ) ; w && ( y = w ) } for ( q . getPosition ( y ) == CKEDITOR . POSITION _FOLLOWING && ( q = 0 ) ; q ; ) { k = ! 1 ; if ( q . equals ( y ) ) q = null , k = ! 0 ; else { var u = q . type == CKEDITOR . NODE _ELEMENT ? q . getName ( ) : null , w = u && "false" == q . getAttribute ( "contentEditable" ) , z = u &&
- 1 !== CKEDITOR . tools . array . indexOf ( CKEDITOR . style . unstylableElements , u ) , z = u && ( q . getAttribute ( "data-nostyle" ) || z ) ; if ( u && q . data ( "cke-bookmark" ) || q . type === CKEDITOR . NODE _COMMENT ) { q = q . getNextSourceNode ( ! 0 ) ; continue } if ( w && m && CKEDITOR . dtd . $block [ u ] ) for ( var A = q , F = g ( A ) , G = void 0 , I = F . length , K = 0 , A = I && new CKEDITOR . dom . range ( A . getDocument ( ) ) ; K < I ; ++ K ) { var G = F [ K ] , L = CKEDITOR . filter . instances [ G . data ( "cke-filter" ) ] ; if ( L ? L . check ( this ) : 1 ) A . selectNodeContents ( G ) , b . call ( this , A ) } F = u ? ! p [ u ] || z ? 0 : w && ! m ? 0 : d ( q , y , h , Q ) : 1 ; if ( F ) if ( G =
q . getParent ( ) , F = h , I = f , K = l , ! G || ! ( G . getDtd ( ) || CKEDITOR . dtd . span ) [ I ] && ! K || F . parentRule && ! F . parentRule ( G ) ) k = ! 0 ; else { if ( r || u && CKEDITOR . dtd . $removeEmpty [ u ] && ( q . getPosition ( y ) | Q ) != Q || ( r = c . clone ( ) , r . setStartBefore ( q ) ) , u = q . type , u == CKEDITOR . NODE _TEXT || w || u == CKEDITOR . NODE _ELEMENT && ! q . getChildCount ( ) ) { for ( var u = q , M ; ( k = ! u . getNext ( E ) ) && ( M = u . getParent ( ) , p [ M . getName ( ) ] ) && d ( M , x , h , S ) ; ) u = M ; r . setEndAfter ( u ) } } else k = ! 0 ; q = q . getNextSourceNode ( z || w ) } if ( k && r && ! r . collapsed ) { for ( var k = H ( this , e ) , w = k . hasAttributes ( ) , z = r . getCommonAncestor ( ) ,
u = { } , F = { } , G = { } , I = { } , X , W , Y ; k && z ; ) { if ( z . getName ( ) == f ) { for ( X in h . attributes ) ! I [ X ] && ( Y = z . getAttribute ( W ) ) && ( k . getAttribute ( X ) == Y ? F [ X ] = 1 : I [ X ] = 1 ) ; for ( W in h . styles ) ! G [ W ] && ( Y = z . getStyle ( W ) ) && ( k . getStyle ( W ) == Y ? u [ W ] = 1 : G [ W ] = 1 ) } z = z . getParent ( ) } for ( X in F ) k . removeAttribute ( X ) ; for ( W in u ) k . removeStyle ( W ) ; w && ! k . hasAttributes ( ) && ( k = null ) ; k ? ( r . extractContents ( ) . appendTo ( k ) , r . insertNode ( k ) , C . call ( this , k ) , k . mergeSiblings ( ) , CKEDITOR . env . ie || k . $ . normalize ( ) ) : ( k = new CKEDITOR . dom . element ( "span" ) , r . extractContents ( ) . appendTo ( k ) ,
m && ( m = c . root . getCustomData ( "cke_includeReadonly" ) ) ; var p = CKEDITOR . dtd [ f ] ; p || ( l = ! 0 , p = CKEDITOR . dtd . span ) ; c . enlarge ( CKEDITOR . ENLARGE _INLINE , 1 ) ; c . trim ( ) ; var n = c . createBookmark ( ) , x = n . startNode , y = n . endNode , q = x , r ; if ( ! k ) { var z = c . getCommonAncestor ( ) , k = a ( x , z ) , z = a ( y , z ) ; k && ( q = k . getNextSourceNode ( ! 0 ) ) ; z && ( y = z ) } for ( q . getPosition ( y ) == CKEDITOR . POSITION _FOLLOWING && ( q = 0 ) ; q ; ) { k = ! 1 ; if ( q . equals ( y ) ) q = null , k = ! 0 ; else { var v = q . type == CKEDITOR . NODE _ELEMENT ? q . getName ( ) : null , z = v && "false" == q . getAttribute ( "contentEditable" ) , w = v &&
- 1 !== CKEDITOR . tools . array . indexOf ( CKEDITOR . style . unstylableElements , v ) , w = v && ( q . getAttribute ( "data-nostyle" ) || w ) ; if ( v && q . data ( "cke-bookmark" ) || q . type === CKEDITOR . NODE _COMMENT ) { q = q . getNextSourceNode ( ! 0 ) ; continue } if ( z && m && CKEDITOR . dtd . $block [ v ] ) for ( var A = q , F = g ( A ) , G = void 0 , I = F . length , K = 0 , A = I && new CKEDITOR . dom . range ( A . getDocument ( ) ) ; K < I ; ++ K ) { var G = F [ K ] , L = CKEDITOR . filter . instances [ G . data ( "cke-filter" ) ] ; if ( L ? L . check ( this ) : 1 ) A . selectNodeContents ( G ) , b . call ( this , A ) } F = v ? ! p [ v ] || w ? 0 : z && ! m ? 0 : d ( q , y , h , Q ) : 1 ; if ( F ) if ( G =
q . getParent ( ) , F = h , I = f , K = l , ! G || ! ( G . getDtd ( ) || CKEDITOR . dtd . span ) [ I ] && ! K || F . parentRule && ! F . parentRule ( G ) ) k = ! 0 ; else { if ( r || v && CKEDITOR . dtd . $removeEmpty [ v ] && ( q . getPosition ( y ) | Q ) != Q || ( r = c . clone ( ) , r . setStartBefore ( q ) ) , v = q . type , v == CKEDITOR . NODE _TEXT || z || v == CKEDITOR . NODE _ELEMENT && ! q . getChildCount ( ) ) { for ( var v = q , M ; ( k = ! v . getNext ( E ) ) && ( M = v . getParent ( ) , p [ M . getName ( ) ] ) && d ( M , x , h , S ) ; ) v = M ; r . setEndAfter ( v ) } } else k = ! 0 ; q = q . getNextSourceNode ( w || z ) } if ( k && r && ! r . collapsed ) { for ( var k = H ( this , e ) , z = k . hasAttributes ( ) , w = r . getCommonAncestor ( ) ,
v = { } , F = { } , G = { } , I = { } , X , W , Y ; k && w ; ) { if ( w . getName ( ) == f ) { for ( X in h . attributes ) ! I [ X ] && ( Y = w . getAttribute ( W ) ) && ( k . getAttribute ( X ) == Y ? F [ X ] = 1 : I [ X ] = 1 ) ; for ( W in h . styles ) ! G [ W ] && ( Y = w . getStyle ( W ) ) && ( k . getStyle ( W ) == Y ? v [ W ] = 1 : G [ W ] = 1 ) } w = w . getParent ( ) } for ( X in F ) k . removeAttribute ( X ) ; for ( W in v ) k . removeStyle ( W ) ; z && ! k . hasAttributes ( ) && ( k = null ) ; k ? ( r . extractContents ( ) . appendTo ( k ) , r . insertNode ( k ) , C . call ( this , k ) , k . mergeSiblings ( ) , CKEDITOR . env . ie || k . $ . normalize ( ) ) : ( k = new CKEDITOR . dom . element ( "span" ) , r . extractContents ( ) . appendTo ( k ) ,
r . insertNode ( k ) , C . call ( this , k ) , k . remove ( ! 0 ) ) ; r = 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 , f = null , g = 0 ; g < a . elements . length ; g ++ ) { var h = a . elements [ g ] ; if ( h == a . block || h == a . blockLimit ) break ; p . checkElementRemovable ( h , ! 0 ) && ( e = h ) } for ( g = 0 ; g < c . elements . length ; g ++ ) { h = c . elements [ g ] ; if ( h == c . block || h == c . blockLimit ) break ; p . checkElementRemovable ( h ,
! 0 ) && ( f = h ) } f && m . breakParent ( f ) ; 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 f = new CKEDITOR . dom . elementPath ( d . getParent ( ) , a . root ) , g , h = 0 , k ; h < f . elements . length && ( k = f . elements [ h ] ) && k != f . block && k != f . blockLimit ; h ++ ) if ( this . checkElementRemovable ( k ) ) { var l ; ! e && a . collapsed && ( a . checkBoundaryOfElement ( k , CKEDITOR . END ) || ( l = a . checkBoundaryOfElement ( k , CKEDITOR . START ) ) ) ? ( g = k , g . match = l ? "start" : "end" ) :
( k . mergeSiblings ( ) , k . is ( this . element ) ? z . call ( this , k ) : w ( k , K ( this ) [ k . getName ( ) ] ) ) } if ( g ) { e = d ; for ( h = 0 ; ; h ++ ) { k = f . elements [ h ] ; if ( k . equals ( g ) ) break ; else if ( k . match ) continue ; else k = k . clone ( ) ; k . append ( e ) ; e = k } e [ "start" == g . match ? "insertBefore" : "insertAfter" ] ( g ) } } else { var m = c . endNode , p = this ; b ( ) ; for ( f = d ; ! f . equals ( m ) ; ) g = f . getNextSourceNode ( ) , f . type == CKEDITOR . NODE _ELEMENT && this . checkElementRemovable ( f ) && ( f . getName ( ) == this . element ? z . call ( this , f ) : w ( f , K ( this ) [ f . getName ( ) ] ) , g . type == CKEDITOR . NODE _ELEMENT && g . contains ( d ) &&
( k . mergeSiblings ( ) , k . is ( this . element ) ? x . call ( this , k ) : v ( k , K ( this ) [ k . getName ( ) ] ) ) } if ( g ) { e = d ; for ( h = 0 ; ; h ++ ) { k = f . elements [ h ] ; if ( k . equals ( g ) ) break ; else if ( k . match ) continue ; else k = k . clone ( ) ; k . append ( e ) ; e = k } e [ "start" == g . match ? "insertBefore" : "insertAfter" ] ( g ) } } else { var m = c . endNode , p = this ; b ( ) ; for ( f = d ; ! f . equals ( m ) ; ) g = f . getNextSourceNode ( ) , f . type == CKEDITOR . NODE _ELEMENT && this . checkElementRemovable ( f ) && ( f . getName ( ) == this . element ? x . call ( this , f ) : v ( f , K ( this ) [ f . getName ( ) ] ) , g . type == CKEDITOR . NODE _ELEMENT && g . contains ( d ) &&
( b ( ) , g = d . getNext ( ) ) ) , f = g } a . moveToBookmark ( c ) ; a . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) } function g ( 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 ( ) && q ( a , this ) } function l ( 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 , f ; d = c . getNextParagraph ( ) ; ) ! d . isReadOnly ( ) && ( c . activeFilter ? c . activeFilter . check ( this ) : 1 ) && ( f = H ( this , e , d ) , p ( d , f ) ) ; a . moveToBookmark ( b ) } function k ( 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 ) , p ( d , e ) ) : z . call ( this , d ) ) ; a . moveToBookmark ( b ) } function p ( a , b ) { var c = ! b ; c && ( b = a . getDocument ( ) . createElement ( "div" ) , a . copyAttributes ( b ) ) ; var d = b && b . is ( "pre" ) , e = a . is ( "pre" ) , g = ! d && e ; if ( d && ! e ) { e = b ; ( g =
a . getBogus ( ) ) && g . remove ( ) ; g = a . getHtml ( ) ; g = x ( g , /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g , "" ) ; g = g . replace ( /[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi , "$1" ) ; g = g . replace ( /([ \t\n\r]+| )/g , " " ) ; g = g . replace ( /<br\b[^>]*>/gi , "\n" ) ; if ( CKEDITOR . env . ie ) { var h = a . getDocument ( ) . createElement ( "div" ) ; h . append ( e ) ; e . $ . outerHTML = "\x3cpre\x3e" + g + "\x3c/pre\x3e" ; e . copyAttributes ( h . getFirst ( ) ) ; e = h . getFirst ( ) . remove ( ) } else e . setHtml ( g ) ; b = e } else g ? b = y ( c ? [ a . getHtml ( ) ] : f ( a ) , b ) : a . moveChildren ( b ) ; b . replace ( a ) ; if ( d ) { var c = b , k ; ( k = c . getPrevious ( u ) ) &&
k . type == CKEDITOR . NODE _ELEMENT && k . is ( "pre" ) && ( d = x ( k . getHtml ( ) , /\n$/ , "" ) + "\n\n" + x ( c . getHtml ( ) , /^\n/ , "" ) , CKEDITOR . env . ie ? c . $ . outerHTML = "\x3cpre\x3e" + d + "\x3c/pre\x3e" : c . setHtml ( d ) , k . remove ( ) ) } else c && n ( b ) } function f ( a ) { var b = [ ] ; x ( 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 x ( 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 y ( 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 = x ( e , /^[ \t]*\n/ , "" ) , e = x ( e , /\n$/ , "" ) , e = x ( 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 f = b . clone ( ) ; f . setHtml ( e ) ; c . append ( f ) } else b . setHtml ( e ) } return c || b } function z ( a , b ) { var c = this . _ . definition , d = c . attributes , c = c . styles , e = K ( this ) [ a . getName ( ) ] , f = CKEDITOR . tools . isEmpty ( d ) && CKEDITOR . tools . isEmpty ( c ) , g ; for ( g in d ) if ( "class" != g && ! this . _ . definition . fullMatch || a . getAttribute ( g ) == m ( g , d [ g ] ) ) b && "data-" == g . slice ( 0 , 5 ) || ( f = a . hasAttribute ( g ) , a . removeAttribute ( g ) ) ; for ( var h in c ) this . _ . definition . fullMatch && a . getStyle ( h ) != m ( h , c [ h ] , ! 0 ) || ( f = f || ! ! a . getStyle ( h ) , a . removeStyle ( h ) ) ;
w ( a , e , A [ a . getName ( ) ] ) ; f && ( 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 C ( a ) { for ( var b = K ( 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 f in b ) if ( f != this . element ) for ( c = a . getElementsByTag ( f ) , e = c . count ( ) - 1 ; 0 <= e ; e -- ) d = c . getItem ( e ) , d . isReadOnly ( ) || w ( d , b [ f ] ) } function w ( a ,
b , c ) { if ( b = b && b . attributes ) for ( var d = 0 ; d < b . length ; d ++ ) { var e = b [ d ] [ 0 ] , f ; if ( f = a . getAttribute ( e ) ) { var g = b [ d ] [ 1 ] ; ( null === g || g . test && g . test ( f ) || "string" == typeof g && f == g ) && a . removeAttribute ( e ) } } c || n ( a ) } function n ( a , b ) { if ( ! a . hasAttributes ( ) || b ) if ( CKEDITOR . dtd . $block [ a . getName ( ) ] ) { var c = a . getPrevious ( u ) , d = a . getNext ( u ) ; ! 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 ( ) ,
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 ) , p ( d , e ) ) : x . call ( this , d ) ) ; a . moveToBookmark ( b ) } function p ( a , b ) { var c = ! b ; c && ( b = a . getDocument ( ) . createElement ( "div" ) , a . copyAttributes ( b ) ) ; var d = b && b . is ( "pre" ) , e = a . is ( "pre" ) , g = ! d && e ; if ( d && ! e ) { e = b ; ( g =
a . getBogus ( ) ) && g . remove ( ) ; g = a . getHtml ( ) ; g = y ( g , /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g , "" ) ; g = g . replace ( /[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi , "$1" ) ; g = g . replace ( /([ \t\n\r]+| )/g , " " ) ; g = g . replace ( /<br\b[^>]*>/gi , "\n" ) ; if ( CKEDITOR . env . ie ) { var h = a . getDocument ( ) . createElement ( "div" ) ; h . append ( e ) ; e . $ . outerHTML = "\x3cpre\x3e" + g + "\x3c/pre\x3e" ; e . copyAttributes ( h . getFirst ( ) ) ; e = h . getFirst ( ) . remove ( ) } else e . setHtml ( g ) ; b = e } else g ? b = z ( c ? [ a . getHtml ( ) ] : f ( 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 f ( 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 f = b . clone ( ) ; f . setHtml ( e ) ; c . append ( f ) } else b . setHtml ( e ) } return c || b } function x ( a , b ) { var c = this . _ . definition , d = c . attributes , c = c . styles , e = K ( this ) [ a . getName ( ) ] , f = CKEDITOR . tools . isEmpty ( d ) && CKEDITOR . tools . isEmpty ( c ) , g ; for ( g in d ) if ( "class" != g && ! this . _ . definition . fullMatch || a . getAttribute ( g ) == m ( g , d [ g ] ) ) b && "data-" == g . slice ( 0 , 5 ) || ( f = a . hasAttribute ( g ) , a . removeAttribute ( g ) ) ; for ( var h in c ) this . _ . definition . fullMatch && a . getStyle ( h ) != m ( h , c [ h ] , ! 0 ) || ( f = f || ! ! a . getStyle ( h ) , a . removeStyle ( h ) ) ;
v ( a , e , A [ a . getName ( ) ] ) ; f && ( 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 C ( a ) { for ( var b = K ( 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 f in b ) if ( f != this . element ) for ( c = a . getElementsByTag ( f ) , e = c . count ( ) - 1 ; 0 <= e ; e -- ) d = c . getItem ( e ) , d . isReadOnly ( ) || v ( d , b [ f ] ) } function v ( a ,
b , c ) { if ( b = b && b . attributes ) for ( var d = 0 ; d < b . length ; d ++ ) { var e = b [ d ] [ 0 ] , f ; if ( f = a . getAttribute ( e ) ) { var g = b [ d ] [ 1 ] ; ( null === g || g . test && g . test ( f ) || "string" == typeof g && f == g ) && 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 = q ( d , a ) ; b . getCustomData ( "doc_processing_style" ) && d . hasAttribute ( "id" ) ? d . removeAttribute ( "id" ) : b . setCustomData ( "doc_processing_style" , 1 ) ; return d } function q ( 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 ( F , function ( a , c ) { return b [ c ] } ) } function K ( a ) { if ( a . _ . overrides ) return a . _ . overrides ; var b = a . _ . overrides = { } , c = a . _ . definition . overrides ; if ( c ) { CKEDITOR . tools . isArray ( c ) || ( c = [ c ] ) ; for ( var d = 0 ; d < c . length ; d ++ ) { var e = c [ d ] , f , g ; "string" == typeof e ? f = e . toLowerCase ( ) : ( f = e . element ? e . element . toLowerCase ( ) : a . element , g = e . attributes ) ; e = b [ f ] || ( b [ f ] = { } ) ; if ( g ) { var e = e . attributes =
e . attributes || [ ] , h ; for ( h in g ) e . push ( [ h . toLowerCase ( ) , g [ h ] ] ) } } } return b } function m ( a , b , c ) { var d = new CKEDITOR . dom . element ( "span" ) ; d [ c ? "setStyle" : "setAttribute" ] ( a , b ) ; return d [ c ? "getStyle" : "getAttribute" ] ( a ) } function G ( 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 L ( a , b , c ) { var d = a . getRanges ( ) ; b = b ? this . removeFromRange : this . applyToRange ; for ( var e , f = d . createIterator ( ) ; e = f . 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 } , M = { 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*|$)/ , F = /#\((.+?)\)/g , E = CKEDITOR . dom . walker . bookmark ( 0 , 1 ) , u = 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 ( ) :
dt : 1 , dd : 1 , form : 1 , audio : 1 , video : 1 } , r = /\s*(?:;\s*|$)/ , F = /#\((.+?)\)/g , E = 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 : M [ 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 L . call ( this , a . getSelection ( ) ) ; if ( this . checkApplicable ( a . elementPath ( ) , a ) ) { var b = this . _ . enterMode ; b || ( this . _ . enterMode = a . activeEnterMode ) ; L . call ( this , a . getSelection ( ) , 0 , a ) ; this . _ . enterMode = b } } , remove : function ( a ) { if ( a instanceof
CKEDITOR . dom . document ) return L . call ( this , a . getSelection ( ) , 1 ) ; if ( this . checkApplicable ( a . elementPath ( ) , a ) ) { var b = this . _ . enterMode ; b || ( this . _ . enterMode = a . activeEnterMode ) ; L . 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 ?
k : this . type == CKEDITOR . STYLE _OBJECT ? l : null ; return this . removeFromRange ( a ) } , applyToObject : function ( a ) { q ( 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 f = e . getName ( ) ; if ( ! ( "string" == typeof this . element ?
@@ -535,7 +536,7 @@ a=this._.extractColorChannelsFromHsla(a);(a=b||c||a)?(this._.red=a[0],this._.gre
f = 1 ; b && ( f = d ( c [ 3 ] , CKEDITOR . tools . color . MAX _ALPHA _CHANNEL _VALUE ) ) ; return this . _ . areColorChannelsValid ( g , k , p , f ) ? [ g , k , p , f ] : null } , extractColorChannelsFromHsla : function ( b ) { var c = this . _ . extractColorChannelsByPattern ( b , CKEDITOR . tools . color . hslRegExp ) ; if ( ! c || ( b = 0 === b . indexOf ( "hsla" ) ) && 4 !== c . length || ! b && 3 !== c . length ) return null ; var g = a ( c [ 0 ] , CKEDITOR . tools . color . MAX _HUE _CHANNEL _VALUE ) , k = d ( c [ 1 ] , CKEDITOR . tools . color . MAX _SATURATION _LIGHTNESS _CHANNEL _VALUE ) , p = d ( c [ 2 ] , CKEDITOR . tools . color . MAX _SATURATION _LIGHTNESS _CHANNEL _VALUE ) ,
f = 1 , g = this . _ . hslToRgb ( g , k , p ) ; b && ( f = d ( c [ 3 ] , CKEDITOR . tools . color . MAX _ALPHA _CHANNEL _VALUE ) ) ; g . push ( f ) ; return this . _ . areColorChannelsValid ( g [ 0 ] , g [ 1 ] , g [ 2 ] , g [ 3 ] ) ? g : null } , hex3ToHex6 : function ( a ) { a = a . split ( "" ) ; return "#" + a [ 1 ] + a [ 1 ] + a [ 2 ] + a [ 2 ] + a [ 3 ] + a [ 3 ] } , extractColorChannelsByPattern : function ( a , b ) { var c = a . match ( b ) ; if ( ! c ) return null ; c = c [ 2 ] . split ( "," ) ; return c = CKEDITOR . tools . array . map ( c , function ( a ) { return CKEDITOR . tools . trim ( a ) } ) } , areColorChannelsValid : function ( a , b , d , g ) { 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 ( g , 0 , CKEDITOR . tools . color . MAX _ALPHA _CHANNEL _VALUE ) } , hslToRgb : function ( a , b , c ) { var d = function ( d ) { var f = ( d + a / 30 ) % 12 ; d = b * Math . min ( c , 1 - c ) ; f = Math . min ( f - 3 , 9 - f , 1 ) ; f = Math . max ( - 1 , f ) ; return Math . round ( ( c - d * f ) * 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 ,
g = Math . max ( a , b , d ) , f = Math . min ( a , b , d ) ; c = g - f ; var x = 0 ; switch ( g ) { case a : x = ( b - d ) / c % 6 ; break ; case b : x = ( d - a ) / c + 2 ; break ; case d : x = ( a - b ) / c + 4 } a = 0 === c ? 0 : 60 * x ; b = ( g + f ) / 2 ; g = 0 ; 1 !== b && 0 !== b && ( g = c / ( 1 - Math . abs ( 2 * b - 1 ) ) ) ; a = Math . round ( a ) ; g = 100 * Math . round ( g ) ; return [ a , g , 100 * b ] } } , statics : { 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 , hex6CharsRegExp : /#([0-9a-f]{6}$)/gim , hex8CharsRegExp : /#([0-9a-f]{8}$)/gim , rgbRegExp : /(rgb[a]?)\(([.,\d\s%]*)\)/i ,
g = Math . max ( a , b , d ) , f = Math . min ( a , b , d ) ; c = g - f ; var y = 0 ; switch ( g ) { 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 = ( g + f ) / 2 ; g = 0 ; 1 !== b && 0 !== b && ( g = c / ( 1 - Math . abs ( 2 * b - 1 ) ) ) ; a = Math . round ( a ) ; g = 100 * Math . round ( g ) ; return [ a , g , 100 * b ] } } , statics : { 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 , hex6CharsRegExp : /#([0-9a-f]{6}$)/gim , hex8CharsRegExp : /#([0-9a-f]{8}$)/gim , rgbRegExp : /(rgb[a]?)\(([.,\d\s%]*)\)/i ,
hslRegExp : /(hsl[a]?)\(([.,\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" , indianred : "#CD5C5C" , indigo : "#4B0082" , ivory : "#FFFFF0" , khaki : "#F0E68C" , lavender : "#E6E6FA" , lavenderblush : "#FFF0F5" , lawngreen : "#7CFC00" , lemonchiffon : "#FFFACD" , lightblue : "#ADD8E6" , lightcoral : "#F08080" , lightcyan : "#E0FFFF" , lightgoldenrodyellow : "#FAFAD2" , lightgray : "#D3D3D3" , lightgreen : "#90EE90" , lightgrey : "#D3D3D3" ,
@@ -544,7 +545,7 @@ mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD"
salmon : "#FA8072" , sandybrown : "#F4A460" , seagreen : "#2E8B57" , seashell : "#FFF5EE" , sienna : "#A0522D" , silver : "#C0C0C0" , skyblue : "#87CEEB" , slateblue : "#6A5ACD" , slategray : "#708090" , 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 , g ) { var e = null , l = null , h = [ ] , k = b , p ; g = g || b . getDocument ( ) . getBody ( ) ; k || ( k = g ) ; do if ( k . type == CKEDITOR . NODE _ELEMENT ) { h . push ( k ) ; if ( ! this . lastElement && ( this . lastElement = k , k . is ( CKEDITOR . dtd . $object ) || "false" == k . getAttribute ( "contenteditable" ) ) ) continue ; if ( k . equals ( g ) ) break ; if ( ! l && ( p = k . getName ( ) ,
"true" == k . getAttribute ( "contenteditable" ) ? l = k : ! e && d [ p ] && ( e = k ) , a [ p ] ) ) { if ( p = ! e && "div" == p ) { a : { p = k . getChildren ( ) ; for ( var f = 0 , x = p . count ( ) ; f < x ; f ++ ) { var y = p . getItem ( f ) ; if ( y . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $block [ y . getName ( ) ] ) { p = ! 0 ; break a } } p = ! 1 } p = ! p } p ? e = k : l = k } } while ( k = k . getParent ( ) ) ; l || ( l = g ) ; this . block = e ; this . blockLimit = l ; this . root = g ; this . elements = h } } ) ( ) ;
"true" == k . getAttribute ( "contenteditable" ) ? l = k : ! e && d [ p ] && ( e = k ) , a [ p ] ) ) { if ( p = ! e && "div" == p ) { a : { p = k . getChildren ( ) ; for ( var f = 0 , y = p . count ( ) ; f < y ; f ++ ) { var z = p . getItem ( f ) ; if ( z . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $block [ z . getName ( ) ] ) { p = ! 0 ; break a } } p = ! 1 } p = ! p } p ? e = k : l = k } } while ( k = k . getParent ( ) ) ; l || ( l = g ) ; this . block = e ; this . blockLimit = l ; this . root = g ; 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 , g ; "string" == typeof a && ( g = function ( b ) { return b . getName ( ) == a } ) ; a instanceof CKEDITOR . dom . element ? g = function ( b ) { return b . equals ( a ) } : CKEDITOR . tools . isArray ( a ) ? g = function ( b ) { return - 1 < CKEDITOR . tools . indexOf ( a , b . getName ( ) ) } : "function" == typeof a ? g = a : "object" == typeof a && ( g = function ( b ) { return b . getName ( ) in
a } ) ; var e = this . elements , l = e . length ; d && ( b ? c += 1 : -- l ) ; b && ( e = Array . prototype . slice . call ( e , 0 ) , e . reverse ( ) ) ; for ( ; c < l ; c ++ ) if ( g ( 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 ;
@@ -631,9 +632,9 @@ I(this),a.data.preventDefault())},this);m=[];k=CKEDITOR.dialog._.uiElementBuilde
{ dialog : this , width : a , height : b } , this . _ . editor ) ; this . fire ( "resize" , { width : a , height : b } , this . _ . editor ) ; this . parts . contents . setStyles ( { width : a + "px" , height : b + "px" } ) ; if ( "rtl" == this . _ . editor . lang . dir && this . _ . position ) { var c = this . parts . dialog . getParent ( ) . getClientSize ( ) . width ; this . _ . position . x = c - this . _ . contentSize . width - parseInt ( this . _ . element . getFirst ( ) . getStyle ( "right" ) , 10 ) } this . _ . contentSize = { width : a , height : b } } } , getSize : function ( ) { var a = this . _ . element . getFirst ( ) ; return { width : a . $ . offsetWidth || 0 , height : a . $ . offsetHeight ||
0 } } , move : function ( a , b , c ) { var e = this . _ . element . getFirst ( ) , d = "rtl" == this . _ . editor . lang . dir ; CKEDITOR . env . ie && e . setStyle ( "zoom" , "100%" ) ; var f = this . parts . dialog . getParent ( ) . getClientSize ( ) , g = this . getSize ( ) , h = this . _ . viewportRatio , p = Math . max ( f . width - g . width , 0 ) , f = Math . max ( f . height - g . height , 0 ) ; this . _ . position && this . _ . position . x == a && this . _ . position . y == b ? ( a = Math . floor ( p * h . width ) , b = Math . floor ( f * h . height ) ) : O ( this , a , b ) ; this . _ . position = { x : a , y : b } ; d && ( a = p - a ) ; b = { top : ( 0 < b ? b : 0 ) + "px" } ; b [ d ? "right" : "left" ] = ( 0 < a ? a : 0 ) + "px" ;
e . setStyles ( b ) ; c && ( this . _ . moved = 1 ) } , getPosition : function ( ) { return CKEDITOR . tools . extend ( { } , this . _ . position ) } , show : function ( ) { var a = this . _ . element , b = this . definition , c = CKEDITOR . document . getBody ( ) , e = this . _ . editor . config . baseFloatZIndex ; a . getParent ( ) && a . getParent ( ) . equals ( c ) ? a . setStyle ( "display" , D ? "flex" : "block" ) : a . appendTo ( c ) ; this . resize ( this . _ . contentSize && this . _ . contentSize . width || b . width || b . minWidth , this . _ . contentSize && this . _ . contentSize . height || b . height || b . minHeight ) ; this . reset ( ) ; null === this . _ . currentTabId &&
this . selectPage ( this . definition . contents [ 0 ] . id ) ; null === CKEDITOR . dialog . _ . currentZIndex && ( CKEDITOR . dialog . _ . currentZIndex = e ) ; this . _ . element . getFirst ( ) . setStyle ( "z-index" , CKEDITOR . dialog . _ . currentZIndex += 10 ) ; this . getElement ( ) . setStyle ( "z-index" , CKEDITOR . dialog . _ . currentZIndex ) ; null === CKEDITOR . dialog . _ . currentTop ? ( CKEDITOR . dialog . _ . currentTop = this , this . _ . parentDialog = null , P ( this . _ . editor ) ) : ( this . _ . parentDialog = CKEDITOR . dialog . _ . currentTop , c = this . _ . parentDialog . getElement ( ) . getFirst ( ) , c . $ . style . zIndex -=
Math . floor ( e / 2 ) , this . _ . parentDialog . getElement ( ) . setStyle ( "z-index" , c . $ . style . zIndex ) , CKEDITOR . dialog . _ . currentTop = this ) ; a . on ( "keydown" , R ) ; a . on ( "keyup" , S ) ; this . _ . hasFocus = ! 1 ; for ( var d in b . contents ) if ( b . contents [ d ] ) { var a = b . contents [ d ] , e = this . _ . tabs [ a . id ] , c = a . requiredContent , f = 0 ; if ( e ) { for ( var g in this . _ . contents [ a . id ] ) { var h = this . _ . contents [ a . id ] [ g ] ; "hbox" != h . type && "vbox" != h . type && h . getInputElement ( ) && ( h . requiredContent && ! this . _ . editor . activeFilter . check ( h . requiredContent ) ? h . disable ( ) : ( h . enable ( ) ,
f ++ ) ) } ! f || c && ! this . _ . editor . activeFilter . check ( c ) ? e [ 0 ] . addClass ( "cke_dialog_tab_disabled" ) : e [ 0 ] . removeClass ( "cke_dialog_tab_disabled" ) } } CKEDITOR . tools . setTimeout ( function ( ) { this . layout ( ) ; ba ( this ) ; this . parts . dialog . setStyle ( "visibility" , "" ) ; this . fireOnce ( "load" , { } ) ; CKEDITOR . ui . fire ( "ready" , this ) ; this . fire ( "show" , { } ) ; this . _ . editor . fire ( "dialogShow" , this ) ; this . _ . parentDialog || this . _ . editor . focusManager . lock ( ) ; this . foreach ( function ( a ) { a . setInitValue && a . setInitValue ( ) } ) } , 100 , this ) } , layout : function ( ) { var a =
this . selectPage ( this . definition . contents [ 0 ] . id ) ; null === CKEDITOR . dialog . _ . currentZIndex && ( CKEDITOR . dialog . _ . currentZIndex = e ) ; this . _ . element . getFirst ( ) . setStyle ( "z-index" , CKEDITOR . dialog . _ . currentZIndex += 10 ) ; this . getElement ( ) . setStyle ( "z-index" , CKEDITOR . dialog . _ . currentZIndex ) ; null === CKEDITOR . dialog . _ . currentTop ? ( CKEDITOR . dialog . _ . currentTop = this , this . _ . parentDialog = null , P ( this . _ . editor ) ) : CKEDITOR . dialog . _ . currentTop !== this && ( this . _ . parentDialog = CKEDITOR . dialog . _ . currentTop , c = this . _ . parentDialog . getElement ( ) . getFirst ( ) ,
c . $ . style . zIndex -= Math . floor ( e / 2 ) , this . _ . parentDialog . getElement ( ) . setStyle ( "z-index" , c . $ . style . zIndex ) , CKEDITOR . dialog . _ . currentTop = this ) ; a . on ( "keydown" , R ) ; a . on ( "keyup" , S ) ; this . _ . hasFocus = ! 1 ; for ( var d in b . contents ) if ( b . contents [ d ] ) { var a = b . contents [ d ] , e = this . _ . tabs [ a . id ] , c = a . requiredContent , f = 0 ; if ( e ) { for ( var g in this . _ . contents [ a . id ] ) { var h = this . _ . contents [ a . id ] [ g ] ; "hbox" != h . type && "vbox" != h . type && h . getInputElement ( ) && ( h . requiredContent && ! this . _ . editor . activeFilter . check ( h . requiredContent ) ? h . disable ( ) :
( h . enable ( ) , f ++ ) ) } ! f || c && ! this . _ . editor . activeFilter . check ( c ) ? e [ 0 ] . addClass ( "cke_dialog_tab_disabled" ) : e [ 0 ] . removeClass ( "cke_dialog_tab_disabled" ) } } CKEDITOR . tools . setTimeout ( function ( ) { this . layout ( ) ; ba ( this ) ; this . parts . dialog . setStyle ( "visibility" , "" ) ; this . fireOnce ( "load" , { } ) ; CKEDITOR . ui . fire ( "ready" , this ) ; this . fire ( "show" , { } ) ; this . _ . editor . fire ( "dialogShow" , this ) ; this . _ . parentDialog || this . _ . editor . focusManager . lock ( ) ; this . foreach ( function ( a ) { a . setInitValue && a . setInitValue ( ) } ) } , 100 , this ) } , layout : function ( ) { var a =
this . parts . dialog ; if ( this . _ . moved || ! D ) { var b = this . getSize ( ) , c = CKEDITOR . document . getWindow ( ) . getViewPaneSize ( ) , e ; this . _ . moved && this . _ . position ? ( e = this . _ . position . x , b = this . _ . position . y ) : ( e = ( c . width - b . width ) / 2 , b = ( c . height - b . height ) / 2 ) ; CKEDITOR . env . ie6Compat || ( a . setStyle ( "position" , "absolute" ) , a . removeStyle ( "margin" ) ) ; e = Math . floor ( e ) ; b = Math . floor ( b ) ; this . move ( e , b ) } } , foreach : function ( a ) { for ( var b in this . _ . contents ) for ( var c in this . _ . contents [ b ] ) a . call ( this , this . _ . contents [ b ] [ c ] ) ; return this } , reset : function ( ) { var a =
function ( a ) { a . reset && a . reset ( 1 ) } ; return function ( ) { this . foreach ( a ) ; return this } } ( ) , setupContent : function ( ) { var a = arguments ; this . foreach ( function ( b ) { b . setup && b . setup . apply ( b , a ) } ) } , commitContent : function ( ) { var a = arguments ; this . foreach ( function ( b ) { CKEDITOR . env . ie && this . _ . currentFocusIndex == b . focusIndex && b . getInputElement ( ) . $ . blur ( ) ; b . commit && b . commit . apply ( b , a ) } ) } , hide : function ( ) { if ( this . parts . dialog . isVisible ( ) ) { this . fire ( "hide" , { } ) ; this . _ . editor . fire ( "dialogHide" , this ) ; this . selectPage ( this . _ . tabIdList [ 0 ] ) ;
var a = this . _ . element ; a . setStyle ( "display" , "none" ) ; this . parts . dialog . setStyle ( "visibility" , "hidden" ) ; for ( ea ( this ) ; CKEDITOR . dialog . _ . currentTop != this ; ) CKEDITOR . dialog . _ . currentTop . hide ( ) ; if ( this . _ . parentDialog ) { var b = this . _ . parentDialog . getElement ( ) . getFirst ( ) ; this . _ . parentDialog . getElement ( ) . removeStyle ( "z-index" ) ; b . setStyle ( "z-index" , parseInt ( b . $ . style . zIndex , 10 ) + Math . floor ( this . _ . editor . config . baseFloatZIndex / 2 ) ) } else Q ( this . _ . editor ) ; if ( CKEDITOR . dialog . _ . currentTop = this . _ . parentDialog ) CKEDITOR . dialog . _ . currentZIndex -=
@@ -720,60 +721,60 @@ a.addCommand("toolbarCollapse",{readOnly:1,exec:function(b){var a=b.ui.space("to
h - ( e . $ . offsetHeight - g ) + "px" ) ; b . fire ( "resize" , { outerHeight : b . container . $ . offsetHeight , contentsHeight : d . $ . offsetHeight , outerWidth : b . container . $ . offsetWidth } ) } , modes : { wysiwyg : 1 , source : 1 } } ) ; a . setKeystroke ( CKEDITOR . ALT + ( CKEDITOR . env . ie || CKEDITOR . env . webkit ? 189 : 109 ) , "toolbarCollapse" ) ; b . push ( '\x3ca title\x3d"' + ( d ? a . lang . toolbar . toolbarCollapse : a . lang . toolbar . toolbarExpand ) + '" id\x3d"' + a . ui . spaceId ( "toolbar_collapser" ) + '" tabIndex\x3d"-1" class\x3d"cke_toolbox_collapser' ) ; d || b . push ( " cke_toolbox_collapser_min" ) ;
b . push ( '" onclick\x3d"CKEDITOR.tools.callFunction(' + C + ')"\x3e' , '\x3cspan class\x3d"cke_arrow"\x3e\x26#9650;\x3c/span\x3e' , "\x3c/a\x3e" ) } b . push ( "\x3c/span\x3e" ) ; c . data . html += b . join ( "" ) } } ) ; a . on ( "destroy" , function ( ) { if ( this . toolbox ) { var a , d = 0 , b , e , f ; for ( a = this . toolbox . toolbars ; d < a . length ; d ++ ) for ( e = a [ d ] . items , b = 0 ; b < e . length ; b ++ ) f = e [ b ] , f . clickFn && CKEDITOR . tools . removeFunction ( f . clickFn ) , f . keyDownFn && CKEDITOR . tools . removeFunction ( f . keyDownFn ) } } ) ; a . on ( "uiReady" , function ( ) { var c = a . ui . space ( "toolbox" ) ; c && a . focusManager . add ( c ,
1 ) } ) ; a . addCommand ( "toolbarFocus" , E ) ; a . setKeystroke ( CKEDITOR . ALT + 121 , "toolbarFocus" ) ; a . ui . add ( "-" , CKEDITOR . UI _SEPARATOR , { } ) ; a . ui . addHandler ( CKEDITOR . UI _SEPARATOR , { create : function ( ) { return { render : function ( a , d ) { d . push ( '\x3cspan class\x3d"cke_toolbar_separator" role\x3d"separator"\x3e\x3c/span\x3e' ) ; return { } } } } } ) } } ) ; CKEDITOR . ui . prototype . addToolbarGroup = function ( a , d , f ) { var c = v ( this . editor ) , h = 0 === d , b = { name : a } ; if ( f ) { if ( f = CKEDITOR . tools . search ( c , function ( a ) { return a . name == f } ) ) { ! f . groups && ( f . groups = [ ] ) ; if ( d &&
( d = CKEDITOR . tools . indexOf ( f . groups , d ) , 0 <= d ) ) { f . groups . splice ( d + 1 , 0 , a ) ; return } h ? f . groups . splice ( 0 , 0 , a ) : f . groups . push ( a ) ; return } d = null } d && ( d = CKEDITOR . tools . indexOf ( c , function ( a ) { return a . name == d } ) ) ; h ? c . splice ( 0 , 0 , a ) : "number" == typeof d ? c . splice ( d + 1 , 0 , b ) : c . push ( a ) } } ) ( ) ; CKEDITOR . UI _SEPARATOR = "separator" ; CKEDITOR . config . toolbarLocation = "top" ; ( function ( ) { function r ( a , b , c ) { b . type || ( b . type = "auto" ) ; if ( c && ! 1 === a . fire ( "beforePaste" , b ) || ! b . dataValue && b . dataTransfer . isEmpty ( ) ) return ! 1 ; b . dataValue || ( b . dataValue = "" ) ; if ( CKEDITOR . env . gecko && "drop" == b . method && a . toolbox ) a . once ( "afterPaste" , function ( ) { a . toolbox . focus ( ) } ) ; return a . fire ( "paste" , b ) } function x ( a ) { function b ( ) { var b = a . editable ( ) ; if ( CKEDITOR . plugins . clipboard . isCustomCopyCutSupported ) { var c = function ( b ) { a . getSelection ( ) . isCollapsed ( ) || ( a . readOnly && "cut" == b . name || p . initPasteDataTransfer ( b ,
a ) , b . data . preventDefault ( ) ) } ; b . on ( "copy" , c ) ; b . on ( "cut" , c ) ; b . on ( "cut" , function ( ) { a . readOnly || a . extractSelectedHtml ( ) } , null , null , 999 ) } b . on ( p . mainPasteEvent , function ( a ) { "beforepaste" == p . mainPasteEvent && n || k ( a ) } ) ; "beforepaste" == p . mainPasteEvent && ( b . on ( "paste" , function ( a ) { v || ( f ( ) , a . data . preventDefault ( ) , k ( a ) , e ( "paste" ) ) } ) , b . on ( "contextmenu" , h , null , null , 0 ) , b . on ( "beforepaste" , function ( a ) { ! a . data || a . data . $ . ctrlKey || a . data . $ . shiftKey || h ( ) } , null , null , 0 ) ) ; b . on ( "beforecut" , function ( ) { ! n && g ( a ) } ) ; var d ; b . attachListener ( CKEDITOR . env . ie ?
b : a . document . getDocumentElement ( ) , "mouseup" , function ( ) { d = setTimeout ( u , 0 ) } ) ; a . on ( "destroy" , function ( ) { clearTimeout ( d ) } ) ; b . on ( "keyup" , u ) } function c ( b ) { return { type : b , canUndo : "cut" == b , startDisabled : ! 0 , fakeKeystroke : "cut" == b ? CKEDITOR . CTRL + 88 : CKEDITOR . CTRL + 67 , exec : function ( ) { "cut" == this . type && g ( ) ; var b ; var c = this . type ; if ( CKEDITOR . env . ie ) b = e ( c ) ; else try { b = a . document . $ . execCommand ( c , ! 1 , null ) } catch ( d ) { b = ! 1 } b || a . showNotification ( a . lang . clipboard [ this . type + "Error" ] ) ; return b } } } function d ( ) { return { canUndo : ! 1 ,
async : ! 0 , fakeKeystroke : CKEDITOR . CTRL + 86 , exec : function ( a , b ) { function c ( b , g ) { g = "undefined" !== typeof g ? g : ! 0 ; b ? ( b . method = "paste" , b . dataTransfer || ( b . dataTransfer = p . initPasteDataTransfer ( ) ) , r ( a , b , g ) ) : e && ! a . _ . forcePasteDialog && a . showNotification ( f , "info" , a . config . clipboard _notificationDuration ) ; a . _ . forcePasteDialog = ! 1 ; a . fire ( "afterCommandExec" , { name : "paste" , command : d , returnValue : ! ! b } ) } b = "undefined" !== typeof b && null !== b ? b : { } ; var d = this , e = "undefined" !== typeof b . notification ? b . notification : ! 0 , g = b . type , m = CKEDITOR . tools . keystrokeToString ( a . lang . common . keyboard ,
a . getCommandKeystroke ( this ) ) , f = "string" === typeof e ? e : a . lang . clipboard . pasteNotification . replace ( /%1/ , '\x3ckbd aria-label\x3d"' + m . aria + '"\x3e' + m . display + "\x3c/kbd\x3e" ) , m = "string" === typeof b ? b : b . dataValue ; g && ! 0 !== a . config . forcePasteAsPlainText && "allow-word" !== a . config . forcePasteAsPlainText ? a . _ . nextPasteType = g : delete a . _ . nextPasteType ; "string" === typeof m ? c ( { dataValue : m } ) : a . getClipboardData ( c ) } } } function f ( ) { v = 1 ; setTimeout ( function ( ) { v = 0 } , 100 ) } function h ( ) { n = 1 ; setTimeout ( function ( ) { n = 0 } , 10 ) } function e ( b ) { var c =
a . document , d = c . getBody ( ) , e = ! 1 , g = function ( ) { e = ! 0 } ; d . on ( b , g ) ; 7 < CKEDITOR . env . version ? c . $ . execCommand ( b ) : c . $ . selection . createRange ( ) . execCommand ( b ) ; d . removeListener ( b , g ) ; return e } function g ( ) { if ( CKEDITOR . env . ie && ! CKEDITOR . env . quirks ) { var b = a . getSelection ( ) , c , d , e ; b . getType ( ) == CKEDITOR . SELECTION _ELEMENT && ( c = b . getSelectedElement ( ) ) && ( d = b . getRanges ( ) [ 0 ] , e = a . document . createText ( "" ) , e . insertBefore ( c ) , d . setStartBefore ( e ) , d . setEndAfter ( c ) , b . selectRanges ( [ d ] ) , setTimeout ( function ( ) { c . getParent ( ) && ( e . remove ( ) , b . selectElement ( c ) ) } ,
0 ) ) } } function l ( b , c ) { var d = a . document , e = a . editable ( ) , g = function ( a ) { a . cancel ( ) } , m ; if ( ! d . getById ( "cke_pastebin" ) ) { var f = a . getSelection ( ) , l = f . createBookmarks ( ) ; CKEDITOR . env . ie && f . root . fire ( "selectionchange" ) ; var k = new CKEDITOR . dom . element ( ! CKEDITOR . env . webkit && ! e . is ( "body" ) || CKEDITOR . env . ie ? "div" : "body" , d ) ; k . setAttributes ( { id : "cke_pastebin" , "data-cke-temp" : "1" } ) ; var h = 0 , d = d . getWindow ( ) ; CKEDITOR . env . webkit ? ( e . append ( k ) , k . addClass ( "cke_editable" ) , e . is ( "body" ) || ( h = "static" != e . getComputedStyle ( "position" ) ?
e : CKEDITOR . dom . element . get ( e . $ . offsetParent ) , h = h . getDocumentPosition ( ) . y ) ) : e . getAscendant ( CKEDITOR . env . ie ? "body" : "html" , 1 ) . append ( k ) ; k . setStyles ( { position : "absolute" , top : d . getScrollPosition ( ) . y - h + 10 + "px" , width : "1px" , height : Math . max ( 1 , d . getViewPaneSize ( ) . height - 20 ) + "px" , overflow : "hidden" , margin : 0 , padding : 0 } ) ; CKEDITOR . env . safari && k . setStyles ( CKEDITOR . tools . cssVendorPrefix ( "user-select" , "text" ) ) ; ( h = k . getParent ( ) . isReadOnly ( ) ) ? ( k . setOpacity ( 0 ) , k . setAttribute ( "contenteditable" , ! 0 ) ) : k . setStyle ( "ltr" == a . config . contentsLangDirection ?
"left" : "right" , "-10000px" ) ; a . on ( "selectionChange" , g , null , null , 0 ) ; if ( CKEDITOR . env . webkit || CKEDITOR . env . gecko ) m = e . once ( "blur" , g , null , null , - 100 ) ; h && k . focus ( ) ; h = new CKEDITOR . dom . range ( k ) ; h . selectNodeContents ( k ) ; var u = h . select ( ) ; CKEDITOR . env . ie && ( m = e . once ( "blur" , function ( ) { a . lockSelection ( u ) } ) ) ; var q = CKEDITOR . document . getWindow ( ) . getScrollPosition ( ) . y ; setTimeout ( function ( ) { CKEDITOR . env . webkit && ( CKEDITOR . document . getBody ( ) . $ . scrollTop = q ) ; m && m . removeListener ( ) ; CKEDITOR . env . ie && e . focus ( ) ; f . selectBookmarks ( l ) ;
k . remove ( ) ; var b ; CKEDITOR . env . webkit && ( b = k . getFirst ( ) ) && b . is && b . hasClass ( "Apple-style-span" ) && ( k = b ) ; a . removeListener ( "selectionChange" , g ) ; c ( k . getHtml ( ) ) } , 0 ) } } function t ( ) { if ( "paste" == p . mainPasteEvent ) return a . fire ( "beforePaste" , { type : "auto" , method : "paste" } ) , ! 1 ; a . focus ( ) ; f ( ) ; var b = a . focusManager ; b . lock ( ) ; if ( a . editable ( ) . fire ( p . mainPasteEvent ) && ! e ( "paste" ) ) return b . unlock ( ) , ! 1 ; b . unlock ( ) ; return ! 0 } function m ( b ) { if ( "wysiwyg" == a . mode ) switch ( b . data . keyCode ) { case CKEDITOR . CTRL + 86 : case CKEDITOR . SHIFT + 45 : b =
a . editable ( ) ; f ( ) ; "paste" == p . mainPasteEvent && b . fire ( "beforepaste" ) ; break ; case CKEDITOR . CTRL + 88 : case CKEDITOR . SHIFT + 46 : a . fire ( "saveSnapshot" ) , setTimeout ( function ( ) { a . fire ( "saveSnapshot" ) } , 50 ) } } function k ( b ) { var c = { type : "auto" , method : "paste" , dataTransfer : p . initPasteDataTransfer ( b ) } ; c . dataTransfer . cacheData ( ) ; var e = ! 1 !== a . fire ( "beforePaste" , c ) ; e && p . canClipboardApiBeTrusted ( c . dataTransfer , a ) ? ( b . data . preventDefault ( ) , setTimeout ( function ( ) { r ( a , c ) } , 0 ) ) : l ( b , function ( b ) { c . dataValue = b . replace ( /<span[^>]+data-cke-bookmark[^<]*?<\/span>/ig ,
"" ) ; e && r ( a , c ) } ) } function u ( ) { if ( "wysiwyg" == a . mode ) { var b = q ( "paste" ) ; a . getCommand ( "cut" ) . setState ( q ( "cut" ) ) ; a . getCommand ( "copy" ) . setState ( q ( "copy" ) ) ; a . getCommand ( "paste" ) . setState ( b ) ; a . fire ( "pasteState" , b ) } } function q ( b ) { var c = a . getSelection ( ) , c = c && c . getRanges ( ) [ 0 ] ; if ( ( a . readOnly || c && c . checkReadOnly ( ) ) && b in { paste : 1 , cut : 1 } ) return CKEDITOR . TRISTATE _DISABLED ; if ( "paste" == b ) return CKEDITOR . TRISTATE _OFF ; b = a . getSelection ( ) ; c = b . getRanges ( ) ; return b . getType ( ) == CKEDITOR . SELECTION _NONE || 1 == c . length && c [ 0 ] . collapsed ?
CKEDITOR . TRISTATE _DISABLED : CKEDITOR . TRISTATE _OFF } var p = CKEDITOR . plugins . clipboard , n = 0 , v = 0 ; ( function ( ) { a . on ( "key" , m ) ; a . on ( "contentDom" , b ) ; a . on ( "selectionChange" , u ) ; if ( a . contextMenu ) { a . contextMenu . addListener ( function ( ) { return { cut : q ( "cut" ) , copy : q ( "copy" ) , paste : q ( "paste" ) } } ) ; var c = null ; a . on ( "menuShow" , function ( ) { c && ( c . removeListener ( ) , c = null ) ; var b = a . contextMenu . findItemByCommandName ( "paste" ) ; b && b . element && ( c = b . element . on ( "touchend" , function ( ) { a . _ . forcePasteDialog = ! 0 } ) ) } ) } if ( a . ui . addButton ) a . once ( "instanceReady" ,
function ( ) { a . _ . pasteButtons && CKEDITOR . tools . array . forEach ( a . _ . pasteButtons , function ( b ) { if ( b = a . ui . get ( b ) ) if ( b = CKEDITOR . document . getById ( b . _ . id ) ) b . on ( "touchend" , function ( ) { a . _ . forcePasteDialog = ! 0 } ) } ) } ) } ) ( ) ; ( function ( ) { function b ( c , e , d , g , m ) { var k = a . lang . clipboard [ e ] ; a . addCommand ( e , d ) ; a . ui . addButton && a . ui . addButton ( c , { label : k , command : e , toolbar : "clipboard," + g } ) ; a . addMenuItems && a . addMenuItem ( e , { label : k , command : e , group : "clipboard" , order : m } ) } b ( "Cut" , "cut" , c ( "cut" ) , 10 , 1 ) ; b ( "Copy" , "copy" , c ( "copy" ) , 20 , 4 ) ; b ( "Paste" ,
"paste" , d ( ) , 30 , 8 ) ; a . _ . pasteButtons || ( a . _ . pasteButtons = [ ] ) ; a . _ . pasteButtons . push ( "Paste" ) } ) ( ) ; a . getClipboardData = function ( b , c ) { function e ( a ) { a . removeListener ( ) ; a . cancel ( ) ; c ( a . data ) } function d ( a ) { a . removeListener ( ) ; a . cancel ( ) ; c ( { type : m , dataValue : a . data . dataValue , dataTransfer : a . data . dataTransfer , method : "paste" } ) } var g = ! 1 , m = "auto" ; c || ( c = b , b = null ) ; a . on ( "beforePaste" , function ( a ) { a . removeListener ( ) ; g = ! 0 ; m = a . data . type } , null , null , 1E3 ) ; a . on ( "paste" , e , null , null , 0 ) ; ! 1 === t ( ) && ( a . removeListener ( "paste" , e ) , a . _ . forcePasteDialog &&
g && a . fire ( "pasteDialog" ) ? ( a . on ( "pasteDialogCommit" , d ) , a . on ( "dialogHide" , function ( a ) { a . removeListener ( ) ; a . data . removeListener ( "pasteDialogCommit" , d ) ; a . data . _ . committed || c ( null ) } ) ) : c ( null ) ) } } function y ( a ) { if ( CKEDITOR . env . webkit ) { if ( ! a . match ( /^[^<]*$/g ) && ! a . match ( /^(<div><br( ?\/)?><\/div>|<div>[^<]*<\/div>)*$/gi ) ) return "html" } else if ( CKEDITOR . env . ie ) { if ( ! a . match ( /^([^<]|<br( ?\/)?>)*$/gi ) && ! a . match ( /^(<p>([^<]|<br( ?\/)?>)*<\/p>|(\r\n))*$/gi ) ) return "html" } else if ( CKEDITOR . env . gecko ) { if ( ! a . match ( /^([^<]|<br( ?\/)?>)*$/gi ) ) return "html" } else return "html" ;
( d = CKEDITOR . tools . indexOf ( f . groups , d ) , 0 <= d ) ) { f . groups . splice ( d + 1 , 0 , a ) ; return } h ? f . groups . splice ( 0 , 0 , a ) : f . groups . push ( a ) ; return } d = null } d && ( d = CKEDITOR . tools . indexOf ( c , function ( a ) { return a . name == d } ) ) ; h ? c . splice ( 0 , 0 , a ) : "number" == typeof d ? c . splice ( d + 1 , 0 , b ) : c . push ( a ) } } ) ( ) ; CKEDITOR . UI _SEPARATOR = "separator" ; CKEDITOR . config . toolbarLocation = "top" ; ( function ( ) { function u ( a , b , c ) { b . type || ( b . type = "auto" ) ; if ( c && ! 1 === a . fire ( "beforePaste" , b ) || ! b . dataValue && b . dataTransfer . isEmpty ( ) ) return ! 1 ; b . dataValue || ( b . dataValue = "" ) ; if ( CKEDITOR . env . gecko && "drop" == b . method && a . toolbox ) a . once ( "afterPaste" , function ( ) { a . toolbox . focus ( ) } ) ; return a . fire ( "paste" , b ) } function x ( a ) { function b ( ) { var b = a . editable ( ) ; if ( CKEDITOR . plugins . clipboard . isCustomCopyCutSupported ) { var c = function ( b ) { a . getSelection ( ) . isCollapsed ( ) || ( a . readOnly && "cut" == b . name || m . initPasteDataTransfer ( b ,
a ) , b . data . preventDefault ( ) ) } ; b . on ( "copy" , c ) ; b . on ( "cut" , c ) ; b . on ( "cut" , function ( ) { a . readOnly || a . extractSelectedHtml ( ) } , null , null , 999 ) } b . on ( m . mainPasteEvent , function ( a ) { "beforepaste" == m . mainPasteEvent && l || k ( a ) } ) ; "beforepaste" == m . mainPasteEvent && ( b . on ( "paste" , function ( a ) { v || ( f ( ) , a . data . preventDefault ( ) , k ( a ) , e ( "paste" ) ) } ) , b . on ( "contextmenu" , g , null , null , 0 ) , b . on ( "beforepaste" , function ( a ) { ! a . data || a . data . $ . ctrlKey || a . data . $ . shiftKey || g ( ) } , null , null , 0 ) ) ; b . on ( "beforecut" , function ( ) { ! l && h ( a ) } ) ; var d ; b . attachListener ( CKEDITOR . env . ie ?
b : a . document . getDocumentElement ( ) , "mouseup" , function ( ) { d = setTimeout ( q , 0 ) } ) ; a . on ( "destroy" , function ( ) { clearTimeout ( d ) } ) ; b . on ( "keyup" , q ) } function c ( b ) { return { type : b , canUndo : "cut" == b , startDisabled : ! 0 , fakeKeystroke : "cut" == b ? CKEDITOR . CTRL + 88 : CKEDITOR . CTRL + 67 , exec : function ( ) { "cut" == this . type && h ( ) ; var b ; var c = this . type ; if ( CKEDITOR . env . ie ) b = e ( c ) ; else try { b = a . document . $ . execCommand ( c , ! 1 , null ) } catch ( d ) { b = ! 1 } b || a . showNotification ( a . lang . clipboard [ this . type + "Error" ] ) ; return b } } } function d ( ) { return { canUndo : ! 1 ,
async : ! 0 , fakeKeystroke : CKEDITOR . CTRL + 86 , exec : function ( a , b ) { function c ( b , h ) { h = "undefined" !== typeof h ? h : ! 0 ; b ? ( b . method = "paste" , b . dataTransfer || ( b . dataTransfer = m . initPasteDataTransfer ( ) ) , u ( a , b , h ) ) : e && ! a . _ . forcePasteDialog && a . showNotification ( p , "info" , a . config . clipboard _notificationDuration ) ; a . _ . forcePasteDialog = ! 1 ; a . fire ( "afterCommandExec" , { name : "paste" , command : d , returnValue : ! ! b } ) } b = "undefined" !== typeof b && null !== b ? b : { } ; var d = this , e = "undefined" !== typeof b . notification ? b . notification : ! 0 , h = b . type , f = CKEDITOR . tools . keystrokeToString ( a . lang . common . keyboard ,
a . getCommandKeystroke ( this ) ) , p = "string" === typeof e ? e : a . lang . clipboard . pasteNotification . replace ( /%1/ , '\x3ckbd aria-label\x3d"' + f . aria + '"\x3e' + f . display + "\x3c/kbd\x3e" ) , f = "string" === typeof b ? b : b . dataValue ; h && ! 0 !== a . config . forcePasteAsPlainText && "allow-word" !== a . config . forcePasteAsPlainText ? a . _ . nextPasteType = h : delete a . _ . nextPasteType ; "string" === typeof f ? c ( { dataValue : f } ) : a . getClipboardData ( c ) } } } function f ( ) { v = 1 ; setTimeout ( function ( ) { v = 0 } , 100 ) } function g ( ) { l = 1 ; setTimeout ( function ( ) { l = 0 } , 10 ) } function e ( b ) { var c =
a . document , d = c . getBody ( ) , e = ! 1 , h = function ( ) { e = ! 0 } ; d . on ( b , h ) ; 7 < CKEDITOR . env . version ? c . $ . execCommand ( b ) : c . $ . selection . createRange ( ) . execCommand ( b ) ; d . removeListener ( b , h ) ; return e } function h ( ) { if ( CKEDITOR . env . ie && ! CKEDITOR . env . quirks ) { var b = a . getSelection ( ) , c , d , e ; b . getType ( ) == CKEDITOR . SELECTION _ELEMENT && ( c = b . getSelectedElement ( ) ) && ( d = b . getRanges ( ) [ 0 ] , e = a . document . createText ( "" ) , e . insertBefore ( c ) , d . setStartBefore ( e ) , d . setEndAfter ( c ) , b . selectRanges ( [ d ] ) , setTimeout ( function ( ) { c . getParent ( ) && ( e . remove ( ) , b . selectElement ( c ) ) } ,
0 ) ) } } function n ( b , c ) { var d = a . document , e = a . editable ( ) , h = function ( a ) { a . cancel ( ) } , f ; if ( ! d . getById ( "cke_pastebin" ) ) { var p = a . getSelection ( ) , n = p . createBookmarks ( ) ; CKEDITOR . env . ie && p . root . fire ( "selectionchange" ) ; var k = new CKEDITOR . dom . element ( ! CKEDITOR . env . webkit && ! e . is ( "body" ) || CKEDITOR . env . ie ? "div" : "body" , d ) ; k . setAttributes ( { id : "cke_pastebin" , "data-cke-temp" : "1" } ) ; var g = 0 , d = d . getWindow ( ) ; CKEDITOR . env . webkit ? ( e . append ( k ) , k . addClass ( "cke_editable" ) , e . is ( "body" ) || ( g = "static" != e . getComputedStyle ( "position" ) ?
e : CKEDITOR . dom . element . get ( e . $ . offsetParent ) , g = g . getDocumentPosition ( ) . y ) ) : e . getAscendant ( CKEDITOR . env . ie ? "body" : "html" , 1 ) . append ( k ) ; k . setStyles ( { position : "absolute" , top : d . getScrollPosition ( ) . y - g + 10 + "px" , width : "1px" , height : Math . max ( 1 , d . getViewPaneSize ( ) . height - 20 ) + "px" , overflow : "hidden" , margin : 0 , padding : 0 } ) ; CKEDITOR . env . safari && k . setStyles ( CKEDITOR . tools . cssVendorPrefix ( "user-select" , "text" ) ) ; ( g = k . getParent ( ) . isReadOnly ( ) ) ? ( k . setOpacity ( 0 ) , k . setAttribute ( "contenteditable" , ! 0 ) ) : k . setStyle ( "ltr" == a . config . contentsLangDirection ?
"left" : "right" , "-10000px" ) ; a . on ( "selectionChange" , h , null , null , 0 ) ; if ( CKEDITOR . env . webkit || CKEDITOR . env . gecko ) f = e . once ( "blur" , h , null , null , - 100 ) ; g && k . focus ( ) ; g = new CKEDITOR . dom . range ( k ) ; g . selectNodeContents ( k ) ; var q = g . select ( ) ; CKEDITOR . env . ie && ( f = e . once ( "blur" , function ( ) { a . lockSelection ( q ) } ) ) ; var t = CKEDITOR . document . getWindow ( ) . getScrollPosition ( ) . y ; setTimeout ( function ( ) { CKEDITOR . env . webkit && ( CKEDITOR . document . getBody ( ) . $ . scrollTop = t ) ; f && f . removeListener ( ) ; CKEDITOR . env . ie && e . focus ( ) ; p . selectBookmarks ( n ) ;
k . remove ( ) ; var b ; CKEDITOR . env . webkit && ( b = k . getFirst ( ) ) && b . is && b . hasClass ( "Apple-style-span" ) && ( k = b ) ; a . removeListener ( "selectionChange" , h ) ; c ( k . getHtml ( ) ) } , 0 ) } } function r ( ) { if ( "paste" == m . mainPasteEvent ) return a . fire ( "beforePaste" , { type : "auto" , method : "paste" } ) , ! 1 ; a . focus ( ) ; f ( ) ; var b = a . focusManager ; b . lock ( ) ; if ( a . editable ( ) . fire ( m . mainPasteEvent ) && ! e ( "paste" ) ) return b . unlock ( ) , ! 1 ; b . unlock ( ) ; return ! 0 } function p ( b ) { if ( "wysiwyg" == a . mode ) switch ( b . data . keyCode ) { case CKEDITOR . CTRL + 86 : case CKEDITOR . SHIFT + 45 : b =
a . editable ( ) ; f ( ) ; "paste" == m . mainPasteEvent && b . fire ( "beforepaste" ) ; break ; case CKEDITOR . CTRL + 88 : case CKEDITOR . SHIFT + 46 : a . fire ( "saveSnapshot" ) , setTimeout ( function ( ) { a . fire ( "saveSnapshot" ) } , 50 ) } } function k ( b ) { var c = { type : "auto" , method : "paste" , dataTransfer : m . initPasteDataTransfer ( b ) } ; c . dataTransfer . cacheData ( ) ; var e = ! 1 !== a . fire ( "beforePaste" , c ) ; e && m . canClipboardApiBeTrusted ( c . dataTransfer , a ) ? ( b . data . preventDefault ( ) , setTimeout ( function ( ) { u ( a , c ) } , 0 ) ) : n ( b , function ( b ) { c . dataValue = b . replace ( /<span[^>]+data-cke-bookmark[^<]*?<\/span>/ig ,
"" ) ; e && u ( a , c ) } ) } function q ( ) { if ( "wysiwyg" == a . mode ) { var b = t ( "paste" ) ; a . getCommand ( "cut" ) . setState ( t ( "cut" ) ) ; a . getCommand ( "copy" ) . setState ( t ( "copy" ) ) ; a . getCommand ( "paste" ) . setState ( b ) ; a . fire ( "pasteState" , b ) } } function t ( b ) { var c = a . getSelection ( ) , c = c && c . getRanges ( ) [ 0 ] ; if ( ( a . readOnly || c && c . checkReadOnly ( ) ) && b in { paste : 1 , cut : 1 } ) return CKEDITOR . TRISTATE _DISABLED ; if ( "paste" == b ) return CKEDITOR . TRISTATE _OFF ; b = a . getSelection ( ) ; c = b . getRanges ( ) ; return b . getType ( ) == CKEDITOR . SELECTION _NONE || 1 == c . length && c [ 0 ] . collapsed ?
CKEDITOR . TRISTATE _DISABLED : CKEDITOR . TRISTATE _OFF } var m = CKEDITOR . plugins . clipboard , l = 0 , v = 0 ; ( function ( ) { a . on ( "key" , p ) ; a . on ( "contentDom" , b ) ; a . on ( "selectionChange" , q ) ; if ( a . contextMenu ) { a . contextMenu . addListener ( function ( ) { return { cut : t ( "cut" ) , copy : t ( "copy" ) , paste : t ( "paste" ) } } ) ; var c = null ; a . on ( "menuShow" , function ( ) { c && ( c . removeListener ( ) , c = null ) ; var b = a . contextMenu . findItemByCommandName ( "paste" ) ; b && b . element && ( c = b . element . on ( "touchend" , function ( ) { a . _ . forcePasteDialog = ! 0 } ) ) } ) } if ( a . ui . addButton ) a . once ( "instanceReady" ,
function ( ) { a . _ . pasteButtons && CKEDITOR . tools . array . forEach ( a . _ . pasteButtons , function ( b ) { if ( b = a . ui . get ( b ) ) if ( b = CKEDITOR . document . getById ( b . _ . id ) ) b . on ( "touchend" , function ( ) { a . _ . forcePasteDialog = ! 0 } ) } ) } ) } ) ( ) ; ( function ( ) { function b ( c , e , d , h , f ) { var p = a . lang . clipboard [ e ] ; a . addCommand ( e , d ) ; a . ui . addButton && a . ui . addButton ( c , { label : p , command : e , toolbar : "clipboard," + h } ) ; a . addMenuItems && a . addMenuItem ( e , { label : p , command : e , group : "clipboard" , order : f } ) } b ( "Cut" , "cut" , c ( "cut" ) , 10 , 1 ) ; b ( "Copy" , "copy" , c ( "copy" ) , 20 , 4 ) ; b ( "Paste" ,
"paste" , d ( ) , 30 , 8 ) ; a . _ . pasteButtons || ( a . _ . pasteButtons = [ ] ) ; a . _ . pasteButtons . push ( "Paste" ) } ) ( ) ; a . getClipboardData = function ( b , c ) { function e ( a ) { a . removeListener ( ) ; a . cancel ( ) ; c ( a . data ) } function d ( a ) { a . removeListener ( ) ; a . cancel ( ) ; c ( { type : f , dataValue : a . data . dataValue , dataTransfer : a . data . dataTransfer , method : "paste" } ) } var h = ! 1 , f = "auto" ; c || ( c = b , b = null ) ; a . on ( "beforePaste" , function ( a ) { a . removeListener ( ) ; h = ! 0 ; f = a . data . type } , null , null , 1E3 ) ; a . on ( "paste" , e , null , null , 0 ) ; ! 1 === r ( ) && ( a . removeListener ( "paste" , e ) , a . _ . forcePasteDialog &&
h && a . fire ( "pasteDialog" ) ? ( a . on ( "pasteDialogCommit" , d ) , a . on ( "dialogHide" , function ( a ) { a . removeListener ( ) ; a . data . removeListener ( "pasteDialogCommit" , d ) ; a . data . _ . committed || c ( null ) } ) ) : c ( null ) ) } } function y ( a ) { if ( CKEDITOR . env . webkit ) { if ( ! a . match ( /^[^<]*$/g ) && ! a . match ( /^(<div><br( ?\/)?><\/div>|<div>[^<]*<\/div>)*$/gi ) ) return "html" } else if ( CKEDITOR . env . ie ) { if ( ! a . match ( /^([^<]|<br( ?\/)?>)*$/gi ) && ! a . match ( /^(<p>([^<]|<br( ?\/)?>)*<\/p>|(\r\n))*$/gi ) ) return "html" } else if ( CKEDITOR . env . gecko ) { if ( ! a . match ( /^([^<]|<br( ?\/)?>)*$/gi ) ) return "html" } else return "html" ;
return "htmlifiedtext" } function z ( a , b ) { function c ( a ) { return CKEDITOR . tools . repeat ( "\x3c/p\x3e\x3cp\x3e" , ~ ~ ( a / 2 ) ) + ( 1 == a % 2 ? "\x3cbr\x3e" : "" ) } b = b . replace ( /(?!\u3000)\s+/g , " " ) . replace ( /> +</g , "\x3e\x3c" ) . replace ( /<br ?\/>/gi , "\x3cbr\x3e" ) ; b = b . replace ( /<\/?[A-Z]+>/g , function ( a ) { return a . toLowerCase ( ) } ) ; if ( b . match ( /^[^<]$/ ) ) return b ; CKEDITOR . env . webkit && - 1 < b . indexOf ( "\x3cdiv\x3e" ) && ( b = b . replace ( /^(<div>(<br>|)<\/div>)(?!$|(<div>(<br>|)<\/div>))/g , "\x3cbr\x3e" ) . replace ( /^(<div>(<br>|)<\/div>){2}(?!$)/g , "\x3cdiv\x3e\x3c/div\x3e" ) ,
b . match ( /<div>(<br>|)<\/div>/ ) && ( b = "\x3cp\x3e" + b . replace ( /(<div>(<br>|)<\/div>)+/g , function ( a ) { return c ( a . split ( "\x3c/div\x3e\x3cdiv\x3e" ) . length + 1 ) } ) + "\x3c/p\x3e" ) , b = b . replace ( /<\/div><div>/g , "\x3cbr\x3e" ) , b = b . replace ( /<\/?div>/g , "" ) ) ; CKEDITOR . env . gecko && a . enterMode != CKEDITOR . ENTER _BR && ( CKEDITOR . env . gecko && ( b = b . replace ( /^<br><br>$/ , "\x3cbr\x3e" ) ) , - 1 < b . indexOf ( "\x3cbr\x3e\x3cbr\x3e" ) && ( b = "\x3cp\x3e" + b . replace ( /(<br>){2,}/g , function ( a ) { return c ( a . length / 4 ) } ) + "\x3c/p\x3e" ) ) ; return A ( a , b ) } function B ( a ) { function b ( ) { var a =
{ } , b ; for ( b in CKEDITOR . dtd ) "$" != b . charAt ( 0 ) && "div" != b && "span" != b && ( a [ b ] = 1 ) ; return a } var c = { } ; return { get : function ( d ) { return "plain-text" == d ? c . plainText || ( c . plainText = new CKEDITOR . filter ( a , "br" ) ) : "semantic-content" == d ? ( ( d = c . semanticContent ) || ( d = new CKEDITOR . filter ( a , { } ) , d . allow ( { $1 : { elements : b ( ) , attributes : ! 0 , styles : ! 1 , classes : ! 1 } } ) , d = c . semanticContent = d ) , d ) : d ? new CKEDITOR . filter ( a , d ) : null } } } function w ( a , b , c ) { b = CKEDITOR . htmlParser . fragment . fromHtml ( b ) ; var d = new CKEDITOR . htmlParser . basicWriter ; c . applyTo ( b ,
! 0 , ! 1 , a . activeEnterMode ) ; b . writeHtml ( d ) ; return d . getHtml ( ) } function A ( a , b ) { a . enterMode == CKEDITOR . ENTER _BR ? b = b . replace ( /(<\/p><p>)+/g , function ( a ) { return CKEDITOR . tools . repeat ( "\x3cbr\x3e" , a . length / 7 * 2 ) } ) . replace ( /<\/?p>/g , "" ) : a . enterMode == CKEDITOR . ENTER _DIV && ( b = b . replace ( /<(\/)?p>/g , "\x3c$1div\x3e" ) ) ; return b } function C ( a ) { a . data . preventDefault ( ) ; a . data . $ . dataTransfer . dropEffect = "none" } function D ( a ) { var b = CKEDITOR . plugins . clipboard ; a . on ( "contentDom" , function ( ) { function c ( b , c , e ) { c . select ( ) ; r ( a , { dataTransfer : e ,
method : "drop" } , 1 ) ; e . sourceEditor . fire ( "saveSnapshot" ) ; e . sourceEditor . editable ( ) . extractHtmlFromRange ( b ) ; e . sourceEditor . getSelection ( ) . selectRanges ( [ b ] ) ; e . sourceEditor . fire ( "saveSnapshot" ) } function d ( c , e ) { c . select ( ) ; r ( a , { dataTransfer : e , method : "drop" } , 1 ) ; b . resetDragDataTransfer ( ) } function f ( b , c , e ) { var d = { $ : b . data . $ , target : b . data . getTarget ( ) } ; c && ( d . dragRange = c ) ; e && ( d . dropRange = e ) ; ! 1 === a . fire ( b . name , d ) && b . data . preventDefault ( ) } function h ( a ) { a . type != CKEDITOR . NODE _ELEMENT && ( a = a . getParent ( ) ) ; return a . getChildCount ( ) }
var e = a . editable ( ) , g = CKEDITOR . plugins . clipboard . getDropTarget ( a ) , l = a . ui . space ( "top" ) , t = a . ui . space ( "bottom" ) ; b . preventDefaultDropOnElement ( l ) ; b . preventDefaultDropOnElement ( t ) ; e . attachListener ( g , "dragstart" , f ) ; e . attachListener ( a , "dragstart" , b . resetDragDataTransfer , b , null , 1 ) ; e . attachListener ( a , "dragstart" , function ( c ) { b . initDragDataTransfer ( c , a ) } , null , null , 2 ) ; e . attachListener ( a , "dragstart" , function ( ) { var c = b . dragRange = a . getSelection ( ) . getRanges ( ) [ 0 ] ; CKEDITOR . env . ie && 10 > CKEDITOR . env . version && ( b . dragStartContainerChildCount =
c ? h ( c . startContainer ) : null , b . dragEndContainerChildCount = c ? h ( c . endContainer ) : null ) } , null , null , 100 ) ; e . attachListener ( g , "dragend" , f ) ; e . attachListener ( a , "dragend" , b . initDragDataTransfer , b , null , 1 ) ; e . attachListener ( a , "dragend" , b . resetDragDataTransfer , b , null , 100 ) ; e . attachListener ( g , "dragover" , function ( a ) { if ( CKEDITOR . env . edge ) a . data . preventDefault ( ) ; else { var b = a . data . getTarget ( ) ; b && b . is && b . is ( "html" ) ? a . data . preventDefault ( ) : CKEDITOR . env . ie && CKEDITOR . plugins . clipboard . isFileApiSupported && a . data . $ . dataTransfer . types . contains ( "Files" ) &&
a . data . preventDefault ( ) } } ) ; e . attachListener ( g , "drop" , function ( c ) { if ( ! c . data . $ . defaultPrevented && ( c . data . preventDefault ( ) , ! a . readOnly ) ) { var e = c . data . getTarget ( ) ; if ( ! e . isReadOnly ( ) || e . type == CKEDITOR . NODE _ELEMENT && e . is ( "html" ) ) { var e = b . getRangeAtDropPosition ( c , a ) , d = b . dragRange ; e && f ( c , d , e ) } } } , null , null , 9999 ) ; e . attachListener ( a , "drop" , b . initDragDataTransfer , b , null , 1 ) ; e . attachListener ( a , "drop" , function ( e ) { if ( e = e . data ) { var g = e . dropRange , f = e . dragRange , l = e . dataTransfer ; l . getTransferType ( a ) == CKEDITOR . DATA _TRANSFER _INTERNAL ?
setTimeout ( function ( ) { b . internalDrop ( f , g , l , a ) } , 0 ) : l . getTransferType ( a ) == CKEDITOR . DATA _TRANSFER _CROSS _EDITORS ? c ( f , g , l ) : d ( g , l ) } } , null , null , 9999 ) } ) } var n ; CKEDITOR . plugins . add ( "clipboard" , { requires : "dialog,notification,toolbar" , init : function ( a ) { function b ( a ) { if ( ! a || h === a . id ) return ! 1 ; var b = a . getTypes ( ) , b = 1 === b . length && "Files" === b [ 0 ] ; a = 1 === a . getFilesCount ( ) ; return b && a } var c , d = B ( a ) ; a . config . forcePasteAsPlainText ? c = "plain-text" : a . config . pasteFilter ? c = a . config . pasteFilter : ! CKEDITOR . env . webkit || "pasteFilter" in
a . config || ( c = "semantic-content" ) ; a . pasteFilter = d . get ( c ) ; x ( a ) ; D ( a ) ; CKEDITOR . dialog . add ( "paste" , CKEDITOR . getUrl ( this . path + "dialogs/paste.js" ) ) ; if ( CKEDITOR . env . gecko ) { var f = [ "image/png" , "image/jpeg" , "image/gif" ] , h ; a . on ( "paste" , function ( c ) { var d = c . data , l = d . dataTransfer ; if ( ! d . dataValue && "paste" == d . method && b ( l ) && ( l = l . getFile ( 0 ) , - 1 != CKEDITOR . tools . indexOf ( f , l . type ) ) ) { var t = new FileReader ; t . addEventListener ( "load" , function ( ) { c . data . dataValue = '\x3cimg src\x3d"' + t . result + '" /\x3e' ; a . fire ( "paste" , c . data ) } , ! 1 ) ;
t . addEventListener ( "abort" , function ( ) { a . fire ( "paste" , c . data ) } , ! 1 ) ; t . addEventListener ( "error" , function ( ) { a . fire ( "paste" , c . data ) } , ! 1 ) ; t . readAsDataURL ( l ) ; h = d . dataTransfer . id ; c . stop ( ) } } , null , null , 1 ) } a . on ( "paste" , function ( b ) { b . data . dataTransfer || ( b . data . dataTransfer = new CKEDITOR . plugins . clipboard . dataTransfer ) ; if ( ! b . data . dataValue ) { var c = b . data . dataTransfer , d = c . getData ( "text/html" ) ; if ( d ) b . data . dataValue = d , b . data . type = "html" ; else if ( d = c . getData ( "text/plain" ) ) b . data . dataValue = a . editable ( ) . transformPlainTextToHtml ( d ) ,
! 0 , ! 1 , a . activeEnterMode ) ; b . writeHtml ( d ) ; return d . getHtml ( ) } function A ( a , b ) { a . enterMode == CKEDITOR . ENTER _BR ? b = b . replace ( /(<\/p><p>)+/g , function ( a ) { return CKEDITOR . tools . repeat ( "\x3cbr\x3e" , a . length / 7 * 2 ) } ) . replace ( /<\/?p>/g , "" ) : a . enterMode == CKEDITOR . ENTER _DIV && ( b = b . replace ( /<(\/)?p>/g , "\x3c$1div\x3e" ) ) ; return b } function C ( a ) { a . data . preventDefault ( ) ; a . data . $ . dataTransfer . dropEffect = "none" } function D ( a ) { var b = CKEDITOR . plugins . clipboard ; a . on ( "contentDom" , function ( ) { function c ( b , c , e ) { c . select ( ) ; u ( a , { dataTransfer : e ,
method : "drop" } , 1 ) ; e . sourceEditor . fire ( "saveSnapshot" ) ; e . sourceEditor . editable ( ) . extractHtmlFromRange ( b ) ; e . sourceEditor . getSelection ( ) . selectRanges ( [ b ] ) ; e . sourceEditor . fire ( "saveSnapshot" ) } function d ( c , e ) { c . select ( ) ; u ( a , { dataTransfer : e , method : "drop" } , 1 ) ; b . resetDragDataTransfer ( ) } function f ( b , c , e ) { var d = { $ : b . data . $ , target : b . data . getTarget ( ) } ; c && ( d . dragRange = c ) ; e && ( d . dropRange = e ) ; ! 1 === a . fire ( b . name , d ) && b . data . preventDefault ( ) } function g ( a ) { a . type != CKEDITOR . NODE _ELEMENT && ( a = a . getParent ( ) ) ; return a . getChildCount ( ) }
var e = a . editable ( ) , h = CKEDITOR . plugins . clipboard . getDropTarget ( a ) , n = a . ui . space ( "top" ) , r = a . ui . space ( "bottom" ) ; b . preventDefaultDropOnElement ( n ) ; b . preventDefaultDropOnElement ( r ) ; e . attachListener ( h , "dragstart" , f ) ; e . attachListener ( a , "dragstart" , b . resetDragDataTransfer , b , null , 1 ) ; e . attachListener ( a , "dragstart" , function ( c ) { b . initDragDataTransfer ( c , a ) } , null , null , 2 ) ; e . attachListener ( a , "dragstart" , function ( ) { var c = b . dragRange = a . getSelection ( ) . getRanges ( ) [ 0 ] ; CKEDITOR . env . ie && 10 > CKEDITOR . env . version && ( b . dragStartContainerChildCount =
c ? g ( c . startContainer ) : null , b . dragEndContainerChildCount = c ? g ( c . endContainer ) : null ) } , null , null , 100 ) ; e . attachListener ( h , "dragend" , f ) ; e . attachListener ( a , "dragend" , b . initDragDataTransfer , b , null , 1 ) ; e . attachListener ( a , "dragend" , b . resetDragDataTransfer , b , null , 100 ) ; e . attachListener ( h , "dragover" , function ( a ) { if ( CKEDITOR . env . edge ) a . data . preventDefault ( ) ; else { var b = a . data . getTarget ( ) ; b && b . is && b . is ( "html" ) ? a . data . preventDefault ( ) : CKEDITOR . env . ie && CKEDITOR . plugins . clipboard . isFileApiSupported && a . data . $ . dataTransfer . types . contains ( "Files" ) &&
a . data . preventDefault ( ) } } ) ; e . attachListener ( h , "drop" , function ( c ) { if ( ! c . data . $ . defaultPrevented && ( c . data . preventDefault ( ) , ! a . readOnly ) ) { var e = c . data . getTarget ( ) ; if ( ! e . isReadOnly ( ) || e . type == CKEDITOR . NODE _ELEMENT && e . is ( "html" ) ) { var e = b . getRangeAtDropPosition ( c , a ) , d = b . dragRange ; e && f ( c , d , e ) } } } , null , null , 9999 ) ; e . attachListener ( a , "drop" , b . initDragDataTransfer , b , null , 1 ) ; e . attachListener ( a , "drop" , function ( e ) { if ( e = e . data ) { var h = e . dropRange , f = e . dragRange , g = e . dataTransfer ; g . getTransferType ( a ) == CKEDITOR . DATA _TRANSFER _INTERNAL ?
setTimeout ( function ( ) { b . internalDrop ( f , h , g , a ) } , 0 ) : g . getTransferType ( a ) == CKEDITOR . DATA _TRANSFER _CROSS _EDITORS ? c ( f , h , g ) : d ( h , g ) } } , null , null , 9999 ) } ) } var l ; CKEDITOR . plugins . add ( "clipboard" , { requires : "dialog,notification,toolbar" , init : function ( a ) { function b ( a ) { if ( ! a || g === a . id ) return ! 1 ; var b = a . getTypes ( ) , b = 1 === b . length && "Files" === b [ 0 ] ; a = 1 === a . getFilesCount ( ) ; return b && a } var c , d = B ( a ) ; a . config . forcePasteAsPlainText ? c = "plain-text" : a . config . pasteFilter ? c = a . config . pasteFilter : ! CKEDITOR . env . webkit || "pasteFilter" in
a . config || ( c = "semantic-content" ) ; a . pasteFilter = d . get ( c ) ; x ( a ) ; D ( a ) ; CKEDITOR . dialog . add ( "paste" , CKEDITOR . getUrl ( this . path + "dialogs/paste.js" ) ) ; if ( CKEDITOR . env . gecko ) { var f = [ "image/png" , "image/jpeg" , "image/gif" ] , g ; a . on ( "paste" , function ( c ) { var d = c . data , n = d . dataTransfer ; if ( ! d . dataValue && "paste" == d . method && b ( n ) && ( n = n . getFile ( 0 ) , - 1 != CKEDITOR . tools . indexOf ( f , n . type ) ) ) { var r = new FileReader ; r . addEventListener ( "load" , function ( ) { c . data . dataValue = '\x3cimg src\x3d"' + r . result + '" /\x3e' ; a . fire ( "paste" , c . data ) } , ! 1 ) ;
r . addEventListener ( "abort" , function ( ) { a . fire ( "paste" , c . data ) } , ! 1 ) ; r . addEventListener ( "error" , function ( ) { a . fire ( "paste" , c . data ) } , ! 1 ) ; r . readAsDataURL ( n ) ; g = d . dataTransfer . id ; c . stop ( ) } } , null , null , 1 ) } a . on ( "paste" , function ( b ) { b . data . dataTransfer || ( b . data . dataTransfer = new CKEDITOR . plugins . clipboard . dataTransfer ) ; if ( ! b . data . dataValue ) { var c = b . data . dataTransfer , d = c . getData ( "text/html" ) ; if ( d ) b . data . dataValue = d , b . data . type = "html" ; else if ( d = c . getData ( "text/plain" ) ) b . data . dataValue = a . editable ( ) . transformPlainTextToHtml ( d ) ,
b . data . type = "text" } } , null , null , 1 ) ; a . on ( "paste" , function ( a ) { var b = a . data . dataValue , c = CKEDITOR . dtd . $block ; - 1 < b . indexOf ( "Apple-" ) && ( b = b . replace ( /<span class="Apple-converted-space"> <\/span>/gi , " " ) , "html" != a . data . type && ( b = b . replace ( /<span class="Apple-tab-span"[^>]*>([^<]*)<\/span>/gi , function ( a , b ) { return b . replace ( /\t/g , "\x26nbsp;\x26nbsp; \x26nbsp;" ) } ) ) , - 1 < b . indexOf ( '\x3cbr class\x3d"Apple-interchange-newline"\x3e' ) && ( a . data . startsWithEOL = 1 , a . data . preSniffing = "html" , b = b . replace ( /<br class="Apple-interchange-newline">/ ,
"" ) ) , b = b . replace ( /(<[^>]+) class="Apple-[^"]*"/gi , "$1" ) ) ; if ( b . match ( /^<[^<]+cke_(editable|contents)/i ) ) { var d , f , h = new CKEDITOR . dom . element ( "div" ) ; for ( h . setHtml ( b ) ; 1 == h . getChildCount ( ) && ( d = h . getFirst ( ) ) && d . type == CKEDITOR . NODE _ELEMENT && ( d . hasClass ( "cke_editable" ) || d . hasClass ( "cke_contents" ) ) ; ) h = f = d ; f && ( b = f . getHtml ( ) . replace ( /<br>$/i , "" ) ) } CKEDITOR . env . ie ? b = b . replace ( /^ (?: |\r\n)?<(\w+)/g , function ( b , d ) { return d . toLowerCase ( ) in c ? ( a . data . preSniffing = "html" , "\x3c" + d ) : b } ) : CKEDITOR . env . webkit ? b = b . replace ( /<\/(\w+)><div><br><\/div>$/ ,
function ( b , d ) { return d in c ? ( a . data . endsWithEOL = 1 , "\x3c/" + d + "\x3e" ) : b } ) : CKEDITOR . env . gecko && ( b = b . replace ( /(\s)<br>$/ , "$1" ) ) ; a . data . dataValue = b } , null , null , 3 ) ; a . on ( "paste" , function ( b ) { b = b . data ; var c = a . _ . nextPasteType || b . type , f = b . dataValue , h , m = a . config . clipboard _defaultContentType || "html" , k = b . dataTransfer . getTransferType ( a ) == CKEDITOR . DATA _TRANSFER _EXTERNAL , n = ! 0 === a . config . forcePasteAsPlainText ; h = "html" == c || "html" == b . preSniffing ? "html" : y ( f ) ; delete a . _ . nextPasteType ; "htmlifiedtext" == h && ( f = z ( a . config , f ) ) ;
if ( "text" == c && "html" == h ) f = w ( a , f , d . get ( "plain-text" ) ) ; else if ( k && a . pasteFilter && ! b . dontFilter || n ) f = w ( a , f , a . pasteFilter ) ; b . startsWithEOL && ( f = '\x3cbr data-cke-eol\x3d"1"\x3e' + f ) ; b . endsWithEOL && ( f += '\x3cbr data-cke-eol\x3d"1"\x3e' ) ; "auto" == c && ( c = "html" == h || "html" == m ? "html" : "text" ) ; b . type = c ; b . dataValue = f ; delete b . preSniffing ; delete b . startsWithEOL ; delete b . endsWithEOL } , null , null , 6 ) ; a . on ( "paste" , function ( b ) { b = b . data ; b . dataValue && ( a . insertHtml ( b . dataValue , b . type , b . range ) , setTimeout ( function ( ) { a . fire ( "afterPaste" ) } ,
"" ) ) , b = b . replace ( /(<[^>]+) class="Apple-[^"]*"/gi , "$1" ) ) ; if ( b . match ( /^<[^<]+cke_(editable|contents)/i ) ) { var d , f , g = new CKEDITOR . dom . element ( "div" ) ; for ( g . setHtml ( b ) ; 1 == g . getChildCount ( ) && ( d = g . getFirst ( ) ) && d . type == CKEDITOR . NODE _ELEMENT && ( d . hasClass ( "cke_editable" ) || d . hasClass ( "cke_contents" ) ) ; ) g = f = d ; f && ( b = f . getHtml ( ) . replace ( /<br>$/i , "" ) ) } CKEDITOR . env . ie ? b = b . replace ( /^ (?: |\r\n)?<(\w+)/g , function ( b , d ) { return d . toLowerCase ( ) in c ? ( a . data . preSniffing = "html" , "\x3c" + d ) : b } ) : CKEDITOR . env . webkit ? b = b . replace ( /<\/(\w+)><div><br><\/div>$/ ,
function ( b , d ) { return d in c ? ( a . data . endsWithEOL = 1 , "\x3c/" + d + "\x3e" ) : b } ) : CKEDITOR . env . gecko && ( b = b . replace ( /(\s)<br>$/ , "$1" ) ) ; a . data . dataValue = b } , null , null , 3 ) ; a . on ( "paste" , function ( b ) { b = b . data ; var c = a . _ . nextPasteType || b . type , f = b . dataValue , g , l = a . config . clipboard _defaultContentType || "html" , k = b . dataTransfer . getTransferType ( a ) == CKEDITOR . DATA _TRANSFER _EXTERNAL , q = ! 0 === a . config . forcePasteAsPlainText ; g = "html" == c || "html" == b . preSniffing ? "html" : y ( f ) ; delete a . _ . nextPasteType ; "htmlifiedtext" == g && ( f = z ( a . config , f ) ) ;
if ( "text" == c && "html" == g ) f = w ( a , f , d . get ( "plain-text" ) ) ; else if ( k && a . pasteFilter && ! b . dontFilter || q ) f = w ( a , f , a . pasteFilter ) ; b . startsWithEOL && ( f = '\x3cbr data-cke-eol\x3d"1"\x3e' + f ) ; b . endsWithEOL && ( f += '\x3cbr data-cke-eol\x3d"1"\x3e' ) ; "auto" == c && ( c = "html" == g || "html" == l ? "html" : "text" ) ; b . type = c ; b . dataValue = f ; delete b . preSniffing ; delete b . startsWithEOL ; delete b . endsWithEOL } , null , null , 6 ) ; a . on ( "paste" , function ( b ) { b = b . data ; b . dataValue && ( a . insertHtml ( b . dataValue , b . type , b . range ) , setTimeout ( function ( ) { a . fire ( "afterPaste" ) } ,
0 ) ) } , null , null , 1E3 ) ; a . on ( "pasteDialog" , function ( b ) { setTimeout ( function ( ) { a . openDialog ( "paste" , b . data ) } , 0 ) } ) } } ) ; CKEDITOR . plugins . clipboard = { isCustomCopyCutSupported : CKEDITOR . env . ie && 16 > CKEDITOR . env . version || CKEDITOR . env . iOS && 605 > CKEDITOR . env . version ? ! 1 : ! 0 , isCustomDataTypesSupported : ! CKEDITOR . env . ie || 16 <= CKEDITOR . env . version , isFileApiSupported : ! CKEDITOR . env . ie || 9 < CKEDITOR . env . version , mainPasteEvent : CKEDITOR . env . ie && ! CKEDITOR . env . edge ? "beforepaste" : "paste" , addPasteButton : function ( a , b , c ) { a . ui . addButton &&
( a . ui . addButton ( b , c ) , a . _ . pasteButtons || ( a . _ . pasteButtons = [ ] ) , a . _ . pasteButtons . push ( b ) ) } , canClipboardApiBeTrusted : function ( a , b ) { return a . getTransferType ( b ) != CKEDITOR . DATA _TRANSFER _EXTERNAL || CKEDITOR . env . chrome && ! a . isEmpty ( ) || CKEDITOR . env . gecko && ( a . getData ( "text/html" ) || a . getFilesCount ( ) ) || CKEDITOR . env . safari && 603 <= CKEDITOR . env . version && ! CKEDITOR . env . iOS || CKEDITOR . env . iOS && 605 <= CKEDITOR . env . version || CKEDITOR . env . edge && 16 <= CKEDITOR . env . version ? ! 0 : ! 1 } , getDropTarget : function ( a ) { var b = a . editable ( ) ; return CKEDITOR . env . ie &&
9 > CKEDITOR . env . version || b . isInline ( ) ? b : a . document } , fixSplitNodesAfterDrop : function ( a , b , c , d ) { function f ( a , c , d ) { var f = a ; f . type == CKEDITOR . NODE _TEXT && ( f = a . getParent ( ) ) ; if ( f . equals ( c ) && d != c . getChildCount ( ) ) return a = b . startContainer . getChild ( b . startOffset - 1 ) , c = b . startContainer . getChild ( b . startOffset ) , a && a . type == CKEDITOR . NODE _TEXT && c && c . type == CKEDITOR . NODE _TEXT && ( d = a . getLength ( ) , a . setText ( a . getText ( ) + c . getText ( ) ) , c . remove ( ) , b . setStart ( a , d ) , b . collapse ( ! 0 ) ) , ! 0 } var h = b . startContainer ; "number" == typeof d && "number" ==
typeof c && h . type == CKEDITOR . NODE _ELEMENT && ( f ( a . startContainer , h , c ) || f ( a . endContainer , h , d ) ) } , isDropRangeAffectedByDragRange : function ( a , b ) { var c = b . startContainer , d = b . endOffset ; return a . endContainer . equals ( c ) && a . endOffset <= d || a . startContainer . getParent ( ) . equals ( c ) && a . startContainer . getIndex ( ) < d || a . endContainer . getParent ( ) . equals ( c ) && a . endContainer . getIndex ( ) < d ? ! 0 : ! 1 } , internalDrop : function ( a , b , c , d ) { var f = CKEDITOR . plugins . clipboard , h = d . editable ( ) , e , g ; d . fire ( "saveSnapshot" ) ; d . fire ( "lockSnapshot" , { dontUpdate : 1 } ) ;
CKEDITOR . env . ie && 10 > CKEDITOR . env . version && this . fixSplitNodesAfterDrop ( a , b , f . dragStartContainerChildCount , f . dragEndContainerChildCount ) ; ( g = this . isDropRangeAffectedByDragRange ( a , b ) ) || ( e = a . createBookmark ( ! 1 ) ) ; f = b . clone ( ) . createBookmark ( ! 1 ) ; g && ( e = a . createBookmark ( ! 1 ) ) ; a = e . startNode ; b = e . endNode ; g = f . startNode ; b && a . getPosition ( g ) & CKEDITOR . POSITION _PRECEDING && b . getPosition ( g ) & CKEDITOR . POSITION _FOLLOWING && g . insertBefore ( a ) ; a = d . createRange ( ) ; a . moveToBookmark ( e ) ; h . extractHtmlFromRange ( a , 1 ) ; b = d . createRange ( ) ;
f . startNode . getCommonAncestor ( h ) || ( f = d . getSelection ( ) . createBookmarks ( ) [ 0 ] ) ; b . moveToBookmark ( f ) ; r ( d , { dataTransfer : c , method : "drop" , range : b } , 1 ) ; d . fire ( "unlockSnapshot" ) } , getRangeAtDropPosition : function ( a , b ) { var c = a . data . $ , d = c . clientX , f = c . clientY , h = b . getSelection ( ! 0 ) . getRanges ( ) [ 0 ] , e = b . createRange ( ) ; if ( a . data . testRange ) return a . data . testRange ; if ( document . caretRangeFromPoint && b . document . $ . caretRangeFromPoint ( d , f ) ) c = b . document . $ . caretRangeFromPoint ( d , f ) , e . setStart ( CKEDITOR . dom . node ( c . startContainer ) , c . startOffset ) ,
e . collapse ( ! 0 ) ; else if ( c . rangeParent ) e . setStart ( CKEDITOR . dom . node ( c . rangeParent ) , c . rangeOffset ) , e . collapse ( ! 0 ) ; else { if ( CKEDITOR . env . ie && 8 < CKEDITOR . env . version && h && b . editable ( ) . hasFocus ) return h ; if ( document . body . createTextRange ) { b . focus ( ) ; c = b . document . getBody ( ) . $ . createTextRange ( ) ; try { for ( var g = ! 1 , l = 0 ; 20 > l && ! g ; l ++ ) { if ( ! g ) try { c . moveToPoint ( d , f - l ) , g = ! 0 } catch ( n ) { } if ( ! g ) try { c . moveToPoint ( d , f + l ) , g = ! 0 } catch ( m ) { } } if ( g ) { var k = "cke-temp-" + ( new Date ) . getTime ( ) ; c . pasteHTML ( '\x3cspan id\x3d"' + k + '"\x3e \x3c/span\x3e' ) ;
var u = b . document . getById ( k ) ; e . moveToPosition ( u , CKEDITOR . POSITION _BEFORE _START ) ; u . remove ( ) } else { var q = b . document . $ . elementFromPoint ( d , f ) , p = new CKEDITOR . dom . element ( q ) , r ; if ( p . equals ( b . editable ( ) ) || "html" == p . getName ( ) ) return h && h . startContainer && ! h . startContainer . equals ( b . editable ( ) ) ? h : null ; r = p . getClientRect ( ) ; d < r . left ? e . setStartAt ( p , CKEDITOR . POSITION _AFTER _START ) : e . setStartAt ( p , CKEDITOR . POSITION _BEFORE _END ) ; e . collapse ( ! 0 ) } } catch ( v ) { return null } } else return null } return e } , initDragDataTransfer : function ( a ,
9 > CKEDITOR . env . version || b . isInline ( ) ? b : a . document } , fixSplitNodesAfterDrop : function ( a , b , c , d ) { function f ( a , c , d ) { var f = a ; f . type == CKEDITOR . NODE _TEXT && ( f = a . getParent ( ) ) ; if ( f . equals ( c ) && d != c . getChildCount ( ) ) return a = b . startContainer . getChild ( b . startOffset - 1 ) , c = b . startContainer . getChild ( b . startOffset ) , a && a . type == CKEDITOR . NODE _TEXT && c && c . type == CKEDITOR . NODE _TEXT && ( d = a . getLength ( ) , a . setText ( a . getText ( ) + c . getText ( ) ) , c . remove ( ) , b . setStart ( a , d ) , b . collapse ( ! 0 ) ) , ! 0 } var g = b . startContainer ; "number" == typeof d && "number" ==
typeof c && g . type == CKEDITOR . NODE _ELEMENT && ( f ( a . startContainer , g , c ) || f ( a . endContainer , g , d ) ) } , isDropRangeAffectedByDragRange : function ( a , b ) { var c = b . startContainer , d = b . endOffset ; return a . endContainer . equals ( c ) && a . endOffset <= d || a . startContainer . getParent ( ) . equals ( c ) && a . startContainer . getIndex ( ) < d || a . endContainer . getParent ( ) . equals ( c ) && a . endContainer . getIndex ( ) < d ? ! 0 : ! 1 } , internalDrop : function ( a , b , c , d ) { var f = CKEDITOR . plugins . clipboard , g = d . editable ( ) , e , h ; d . fire ( "saveSnapshot" ) ; d . fire ( "lockSnapshot" , { dontUpdate : 1 } ) ;
CKEDITOR . env . ie && 10 > CKEDITOR . env . version && this . fixSplitNodesAfterDrop ( a , b , f . dragStartContainerChildCount , f . dragEndContainerChildCount ) ; ( h = this . isDropRangeAffectedByDragRange ( a , b ) ) || ( e = a . createBookmark ( ! 1 ) ) ; f = b . clone ( ) . createBookmark ( ! 1 ) ; h && ( e = a . createBookmark ( ! 1 ) ) ; a = e . startNode ; b = e . endNode ; h = f . startNode ; b && a . getPosition ( h ) & CKEDITOR . POSITION _PRECEDING && b . getPosition ( h ) & CKEDITOR . POSITION _FOLLOWING && h . insertBefore ( a ) ; a = d . createRange ( ) ; a . moveToBookmark ( e ) ; g . extractHtmlFromRange ( a , 1 ) ; b = d . createRange ( ) ;
f . startNode . getCommonAncestor ( g ) || ( f = d . getSelection ( ) . createBookmarks ( ) [ 0 ] ) ; b . moveToBookmark ( f ) ; u ( d , { dataTransfer : c , method : "drop" , range : b } , 1 ) ; d . fire ( "unlockSnapshot" ) } , getRangeAtDropPosition : function ( a , b ) { var c = a . data . $ , d = c . clientX , f = c . clientY , g = b . getSelection ( ! 0 ) . getRanges ( ) [ 0 ] , e = b . createRange ( ) ; if ( a . data . testRange ) return a . data . testRange ; if ( document . caretRangeFromPoint && b . document . $ . caretRangeFromPoint ( d , f ) ) c = b . document . $ . caretRangeFromPoint ( d , f ) , e . setStart ( CKEDITOR . dom . node ( c . startContainer ) , c . startOffset ) ,
e . collapse ( ! 0 ) ; else if ( c . rangeParent ) e . setStart ( CKEDITOR . dom . node ( c . rangeParent ) , c . rangeOffset ) , e . collapse ( ! 0 ) ; else { if ( CKEDITOR . env . ie && 8 < CKEDITOR . env . version && g && b . editable ( ) . hasFocus ) return g ; if ( document . body . createTextRange ) { b . focus ( ) ; c = b . document . getBody ( ) . $ . createTextRange ( ) ; try { for ( var h = ! 1 , l = 0 ; 20 > l && ! h ; l ++ ) { if ( ! h ) try { c . moveToPoint ( d , f - l ) , h = ! 0 } catch ( r ) { } if ( ! h ) try { c . moveToPoint ( d , f + l ) , h = ! 0 } catch ( p ) { } } if ( h ) { var k = "cke-temp-" + ( new Date ) . getTime ( ) ; c . pasteHTML ( '\x3cspan id\x3d"' + k + '"\x3e \x3c/span\x3e' ) ;
var q = b . document . getById ( k ) ; e . moveToPosition ( q , CKEDITOR . POSITION _BEFORE _START ) ; q . remove ( ) } else { var t = b . document . $ . elementFromPoint ( d , f ) , m = new CKEDITOR . dom . element ( t ) , u ; if ( m . equals ( b . editable ( ) ) || "html" == m . getName ( ) ) return g && g . startContainer && ! g . startContainer . equals ( b . editable ( ) ) ? g : null ; u = m . getClientRect ( ) ; d < u . left ? e . setStartAt ( m , CKEDITOR . POSITION _AFTER _START ) : e . setStartAt ( m , CKEDITOR . POSITION _BEFORE _END ) ; e . collapse ( ! 0 ) } } catch ( v ) { return null } } else return null } return e } , initDragDataTransfer : function ( a ,
b ) { var c = a . data . $ ? a . data . $ . dataTransfer : null , d = new this . dataTransfer ( c , b ) ; "dragstart" === a . name && d . storeId ( ) ; c ? this . dragData && d . id == this . dragData . id ? d = this . dragData : this . dragData = d : this . dragData ? d = this . dragData : this . dragData = d ; a . data . dataTransfer = d } , resetDragDataTransfer : function ( ) { this . dragData = null } , initPasteDataTransfer : function ( a , b ) { if ( this . isCustomCopyCutSupported ) { if ( a && a . data && a . data . $ ) { var c = a . data . $ . clipboardData , d = new this . dataTransfer ( c , b ) ; "copy" !== a . name && "cut" !== a . name || d . storeId ( ) ; this . copyCutData &&
d . id == this . copyCutData . id ? ( d = this . copyCutData , d . $ = c ) : this . copyCutData = d ; return d } return new this . dataTransfer ( null , b ) } return new this . dataTransfer ( CKEDITOR . env . edge && a && a . data . $ && a . data . $ . clipboardData || null , b ) } , preventDefaultDropOnElement : function ( a ) { a && a . on ( "dragover" , C ) } } ; n = CKEDITOR . plugins . clipboard . isCustomDataTypesSupported ? "cke/id" : "Text" ; CKEDITOR . plugins . clipboard . dataTransfer = function ( a , b ) { a && ( this . $ = a ) ; this . _ = { metaRegExp : /^<meta.*?>/i , bodyRegExp : /<body(?:[\s\S]*?)>([\s\S]*)<\/body>/i , fragmentRegExp : /\s*\x3c!--StartFragment--\x3e|\x3c!--EndFragment--\x3e\s*/g ,
data : { } , files : [ ] , nativeHtmlCache : "" , normalizeType : function ( a ) { a = a . toLowerCase ( ) ; return "text" == a || "text/plain" == a ? "Text" : "url" == a ? "URL" : a } } ; this . _ . fallbackDataTransfer = new CKEDITOR . plugins . clipboard . fallbackDataTransfer ( this ) ; this . id = this . getData ( n ) ; this . id || ( this . id = "Text" == n ? "" : "cke-" + CKEDITOR . tools . getUniqueId ( ) ) ; b && ( this . sourceEditor = b , this . setData ( "text/html" , b . getSelectedHtml ( 1 ) ) , "Text" == n || this . getData ( "text/plain" ) || this . setData ( "text/plain" , b . getSelection ( ) . getSelectedText ( ) ) ) } ; CKEDITOR . DATA _TRANSFER _INTERNAL =
d . id == this . copyCutData . id ? ( d = this . copyCutData , d . $ = c ) : this . copyCutData = d ; return d } return new this . dataTransfer ( null , b ) } return new this . dataTransfer ( CKEDITOR . env . edge && a && a . data . $ && a . data . $ . clipboardData || null , b ) } , preventDefaultDropOnElement : function ( a ) { a && a . on ( "dragover" , C ) } } ; l = CKEDITOR . plugins . clipboard . isCustomDataTypesSupported ? "cke/id" : "Text" ; CKEDITOR . plugins . clipboard . dataTransfer = function ( a , b ) { a && ( this . $ = a ) ; this . _ = { metaRegExp : /^<meta.*?>/i , fragmentRegExp : /\s*\x3c!--StartFragment--\x3e|\x3c!--EndFragment--\x3e\s*/g ,
data : { } , files : [ ] , nativeHtmlCache : "" , normalizeType : function ( a ) { a = a . toLowerCase ( ) ; return "text" == a || "text/plain" == a ? "Text" : "url" == a ? "URL" : a } } ; this . _ . fallbackDataTransfer = new CKEDITOR . plugins . clipboard . fallbackDataTransfer ( this ) ; this . id = this . getData ( l ) ; this . id || ( this . id = "Text" == l ? "" : "cke-" + CKEDITOR . tools . getUniqueId ( ) ) ; b && ( this . sourceEditor = b , this . setData ( "text/html" , b . getSelectedHtml ( 1 ) ) , "Text" == l || this . getData ( "text/plain" ) || this . setData ( "text/plain" , b . getSelection ( ) . getSelectedText ( ) ) ) } ; CKEDITOR . DATA _TRANSFER _INTERNAL =
1 ; CKEDITOR . DATA _TRANSFER _CROSS _EDITORS = 2 ; CKEDITOR . DATA _TRANSFER _EXTERNAL = 3 ; CKEDITOR . plugins . clipboard . dataTransfer . prototype = { getData : function ( a , b ) { a = this . _ . normalizeType ( a ) ; var c = "text/html" == a && b ? this . _ . nativeHtmlCache : this . _ . data [ a ] ; if ( void 0 === c || null === c || "" === c ) { if ( this . _ . fallbackDataTransfer . isRequired ( ) ) c = this . _ . fallbackDataTransfer . getData ( a , b ) ; else try { c = this . $ . getData ( a ) || "" } catch ( d ) { c = "" } "text/html" != a || b || ( c = this . _stripHtml ( c ) ) } "Text" == a && CKEDITOR . env . gecko && this . getFilesCount ( ) && "file://" ==
c . substring ( 0 , 7 ) && ( c = "" ) ; if ( "string" === typeof c ) var f = c . indexOf ( "\x3c/html\x3e" ) , c = - 1 !== f ? c . substring ( 0 , f + 7 ) : c ; return c } , setData : function ( a , b ) { a = this . _ . normalizeType ( a ) ; "text/html" == a ? ( this . _ . data [ a ] = this . _stripHtml ( b ) , this . _ . nativeHtmlCache = b ) : this . _ . data [ a ] = b ; if ( CKEDITOR . plugins . clipboard . isCustomDataTypesSupported || "URL" == a || "Text" == a ) if ( "Text" == n && "Text" == a && ( this . id = b ) , this . _ . fallbackDataTransfer . isRequired ( ) ) this . _ . fallbackDataTransfer . setData ( a , b ) ; else try { this . $ . setData ( a , b ) } catch ( c ) { } } , storeId : function ( ) { "Text" !==
n && this . setData ( n , this . id ) } , getTransferType : function ( a ) { return this . sourceEditor ? this . sourceEditor == a ? CKEDITOR . DATA _TRANSFER _INTERNAL : CKEDITOR . DATA _TRANSFER _CROSS _EDITORS : CKEDITOR . DATA _TRANSFER _EXTERNAL } , cacheData : function ( ) { function a ( a ) { a = b . _ . normalizeType ( a ) ; var c = b . getData ( a ) ; "text/html" == a && ( b . _ . nativeHtmlCache = b . getData ( a , ! 0 ) , c = b . _stripHtml ( c ) ) ; c && ( b . _ . data [ a ] = c ) } if ( this . $ ) { var b = this , c , d ; if ( CKEDITOR . plugins . clipboard . isCustomDataTypesSupported ) { if ( this . $ . types ) for ( c = 0 ; c < this . $ . types . length ; c ++ ) a ( this . $ . types [ c ] ) } else a ( "Text" ) ,
c . substring ( 0 , 7 ) && ( c = "" ) ; if ( "string" === typeof c ) var f = c . indexOf ( "\x3c/html\x3e" ) , c = - 1 !== f ? c . substring ( 0 , f + 7 ) : c ; return c } , setData : function ( a , b ) { a = this . _ . normalizeType ( a ) ; "text/html" == a ? ( this . _ . data [ a ] = this . _stripHtml ( b ) , this . _ . nativeHtmlCache = b ) : this . _ . data [ a ] = b ; if ( CKEDITOR . plugins . clipboard . isCustomDataTypesSupported || "URL" == a || "Text" == a ) if ( "Text" == l && "Text" == a && ( this . id = b ) , this . _ . fallbackDataTransfer . isRequired ( ) ) this . _ . fallbackDataTransfer . setData ( a , b ) ; else try { this . $ . setData ( a , b ) } catch ( c ) { } } , storeId : function ( ) { "Text" !==
l && this . setData ( l , this . id ) } , getTransferType : function ( a ) { return this . sourceEditor ? this . sourceEditor == a ? CKEDITOR . DATA _TRANSFER _INTERNAL : CKEDITOR . DATA _TRANSFER _CROSS _EDITORS : CKEDITOR . DATA _TRANSFER _EXTERNAL } , cacheData : function ( ) { function a ( a ) { a = b . _ . normalizeType ( a ) ; var c = b . getData ( a ) ; "text/html" == a && ( b . _ . nativeHtmlCache = b . getData ( a , ! 0 ) , c = b . _stripHtml ( c ) ) ; c && ( b . _ . data [ a ] = c ) } if ( this . $ ) { var b = this , c , d ; if ( CKEDITOR . plugins . clipboard . isCustomDataTypesSupported ) { if ( this . $ . types ) for ( c = 0 ; c < this . $ . types . length ; c ++ ) a ( this . $ . types [ c ] ) } else a ( "Text" ) ,
a ( "URL" ) ; d = this . _getImageFromClipboard ( ) ; if ( this . $ && this . $ . files || d ) { this . _ . files = [ ] ; if ( this . $ . files && this . $ . files . length ) for ( c = 0 ; c < this . $ . files . length ; c ++ ) this . _ . files . push ( this . $ . files [ c ] ) ; 0 === this . _ . files . length && d && this . _ . files . push ( d ) } } } , getFilesCount : function ( ) { return this . _ . files . length ? this . _ . files . length : this . $ && this . $ . files && this . $ . files . length ? this . $ . files . length : this . _getImageFromClipboard ( ) ? 1 : 0 } , getFile : function ( a ) { return this . _ . files . length ? this . _ . files [ a ] : this . $ && this . $ . files && this . $ . files . length ?
this . $ . files [ a ] : 0 === a ? this . _getImageFromClipboard ( ) : void 0 } , isEmpty : function ( ) { var a = { } , b ; if ( this . getFilesCount ( ) ) return ! 1 ; CKEDITOR . tools . array . forEach ( CKEDITOR . tools . object . keys ( this . _ . data ) , function ( b ) { a [ b ] = 1 } ) ; if ( this . $ ) if ( CKEDITOR . plugins . clipboard . isCustomDataTypesSupported ) { if ( this . $ . types ) for ( var c = 0 ; c < this . $ . types . length ; c ++ ) a [ this . $ . types [ c ] ] = 1 } else a . Text = 1 , a . URL = 1 ; "Text" != n && ( a [ n ] = 0 ) ; for ( b in a ) if ( a [ b ] && "" !== this . getData ( b ) ) return ! 1 ; return ! 0 } , getTypes : function ( ) { return this . $ && this . $ . types ?
[ ] . slice . call ( this . $ . types ) : [ ] } , _getImageFromClipboard : function ( ) { var a ; try { if ( this . $ && this . $ . items && this . $ . items [ 0 ] && ( a = this . $ . items [ 0 ] . getAsFile ( ) ) && a . type ) return a } catch ( b ) { } } , _stripHtml : function ( a ) { if ( a && a . length ) { a = a . replace ( this . _ . metaRegExp , "" ) ; var b = this . _ . bodyRegExp . exec ( a ) ; b && b . length && ( a = b [ 1 ] , a = a . replace ( this . _ . fragmentRegExp , "" ) ) } return a } } ; CKEDITOR . plugins . clipboard . fallbackDataTransfer = function ( a ) { this . _dataTransfer = a ; this . _customDataFallbackType = "text/html "} ; CKEDITOR . plugins . clipboard . fallbackDataTransfer . _isCustomMimeTypeSupported =
null ; CKEDITOR . plugins . clipboard . fallbackDataTransfer . _customTypes = [ ] ; CKEDITOR . plugins . clipboard . fallbackDataTransfer . prototype = { isRequired : function ( ) { var a = CKEDITOR . plugins . clipboard . fallbackDataTransfer , b = this . _dataTransfer . $ ; if ( null === a . _isCustomMimeTypeSupported ) if ( b ) { a . _isCustomMimeTypeSupported = ! 1 ; if ( CKEDITOR . env . edge && 17 <= CKEDITOR . env . version ) return ! 0 ; try { b . setData ( "cke/mimetypetest" , "cke test value" ) , a . _isCustomMimeTypeSupported = "cke test value" === b . getData ( "cke/mimetypetest" ) , b . clearData ( "cke/mimetypetest" ) } catch ( c ) { } } else return ! 1 ;
return ! a . _isCustomMimeTypeSupported } , getData : function ( a , b ) { var c = this . _getData ( this . _customDataFallbackType , ! 0 ) ; if ( b ) return c ; var c = this . _extractDataComment ( c ) , d = null , d = a === this . _customDataFallbackType ? c . content : c . data && c . data [ a ] ? c . data [ a ] : this . _getData ( a , ! 0 ) ; return null !== d ? d : "" } , setData : function ( a , b ) { var c = a === this . _customDataFallbackType ; c && ( b = this . _applyDataComment ( b , this . _getFallbackTypeData ( ) ) ) ; var d = b , f = this . _dataTransfer . $ ; try { f . setData ( a , d ) , c && ( this . _dataTransfer . _ . nativeHtmlCache = d ) } catch ( h ) { if ( this . _isUnsupportedMimeTypeError ( h ) ) { c =
CKEDITOR . plugins . clipboard . fallbackDataTransfer ; - 1 === CKEDITOR . tools . indexOf ( c . _customTypes , a ) && c . _customTypes . push ( a ) ; var c = this . _getFallbackTypeContent ( ) , e = this . _getFallbackTypeData ( ) ; e [ a ] = d ; try { d = this . _applyDataComment ( c , e ) , f . setData ( this . _customDataFallbackType , d ) , this . _dataTransfer . _ . nativeHtmlCache = d } catch ( g ) { d = "" } } } return d } , _getData : function ( a , b ) { var c = this . _dataTransfer . _ . data ; if ( ! b && c [ a ] ) return c [ a ] ; try { return this . _dataTransfer . $ . getData ( a ) } catch ( d ) { return null } } , _getFallbackTypeContent : function ( ) { var a =
this . _dataTransfer . _ . data [ this . _customDataFallbackType ] ; a || ( a = this . _extractDataComment ( this . _getData ( this . _customDataFallbackType , ! 0 ) ) . content ) ; return a } , _getFallbackTypeData : function ( ) { var a = CKEDITOR . plugins . clipboard . fallbackDataTransfer . _customTypes , b = this . _extractDataComment ( this . _getData ( this . _customDataFallbackType , ! 0 ) ) . data || { } , c = this . _dataTransfer . _ . data ; CKEDITOR . tools . array . forEach ( a , function ( a ) { void 0 !== c [ a ] ? b [ a ] = c [ a ] : void 0 !== b [ a ] && ( b [ a ] = b [ a ] ) } , this ) ; return b } , _isUnsupportedMimeTypeError : function ( a ) { return a . message &&
- 1 !== a . message . search ( /element not found/gi ) } , _extractDataComment : function ( a ) { var b = { data : null , content : a || "" } ; if ( a && 16 < a . length ) { var c ; ( c = /\x3c!--cke-data:(.*?)--\x3e/g . exec ( a ) ) && c [ 1 ] && ( b . data = JSON . parse ( decodeURIComponent ( c [ 1 ] ) ) , b . content = a . replace ( c [ 0 ] , "" ) ) } return b } , _applyDataComment : function ( a , b ) { var c = "" ; b && CKEDITOR . tools . object . keys ( b ) . length && ( c = "\x3c!--cke-data:" + encodeURIComponent ( JSON . stringify ( b ) ) + "--\x3e" ) ; return c + ( a && a . length ? a : "" ) } } } ) ( ) ;
CKEDITOR . config . clipboard _notificationDuration = 1E4 ; CKEDITOR . plugins . add ( "panelbutton" , { requires : "button" , onLoad : function ( ) { function e ( c ) { var b = this . _ ; b . state != CKEDITOR . TRISTATE _DISABLED && ( this . createPanel ( c ) , b . on ? b . panel . hide ( ) : b . panel . showBlock ( this . _ . id , this . document . getById ( this . _ . id ) , 4 ) ) } CKEDITOR . ui . panelButton = CKEDITOR . tools . createClass ( { base : CKEDITOR . ui . button , $ : function ( c ) { var b = c . panel || { } ; delete c . panel ; this . base ( c ) ; this . document = b . parent && b . parent . getDocument ( ) || CKEDITOR . document ; b . block = { attributes : b . attributes } ; b . toolbarRelated = ! 0 ; this . hasArrow =
this . $ . files [ a ] : 0 === a ? this . _getImageFromClipboard ( ) : void 0 } , isEmpty : function ( ) { var a = { } , b ; if ( this . getFilesCount ( ) ) return ! 1 ; CKEDITOR . tools . array . forEach ( CKEDITOR . tools . object . keys ( this . _ . data ) , function ( b ) { a [ b ] = 1 } ) ; if ( this . $ ) if ( CKEDITOR . plugins . clipboard . isCustomDataTypesSupported ) { if ( this . $ . types ) for ( var c = 0 ; c < this . $ . types . length ; c ++ ) a [ this . $ . types [ c ] ] = 1 } else a . Text = 1 , a . URL = 1 ; "Text" != l && ( a [ l ] = 0 ) ; for ( b in a ) if ( a [ b ] && "" !== this . getData ( b ) ) return ! 1 ; return ! 0 } , getTypes : function ( ) { return this . $ && this . $ . types ?
[ ] . slice . call ( this . $ . types ) : [ ] } , _getImageFromClipboard : function ( ) { var a ; try { if ( this . $ && this . $ . items && this . $ . items [ 0 ] && ( a = this . $ . items [ 0 ] . getAsFile ( ) ) && a . type ) return a } catch ( b ) { } } , _stripHtml : function ( a ) { function b ( a ) { var b = new CKEDITOR . htmlParser , f , g ; b . onTagOpen = function ( a ) { "body" === a && ( f = b . _ . htmlPartsRegex . lastIndex ) } ; b . onTagClose = function ( a ) { "body" === a && ( g = b . _ . htmlPartsRegex . lastIndex ) } ; b . parse ( a ) ; return "number" !== typeof f || "number" !== typeof g ? a : a . substring ( f , g ) . replace ( /<\/body\s*>$/gi , " ") } a && a . length &&
( a = b ( a ) , a = a . replace ( this . _ . metaRegExp , "" ) , a = a . replace ( this . _ . fragmentRegExp , "" ) ) ; return a } } ; CKEDITOR . plugins . clipboard . fallbackDataTransfer = function ( a ) { this . _dataTransfer = a ; this . _customDataFallbackType = "text/html" } ; CKEDITOR . plugins . clipboard . fallbackDataTransfer . _isCustomMimeTypeSupported = null ; CKEDITOR . plugins . clipboard . fallbackDataTransfer . _customTypes = [ ] ; CKEDITOR . plugins . clipboard . fallbackDataTransfer . prototype = { isRequired : function ( ) { var a = CKEDITOR . plugins . clipboard . fallbackDataTransfer , b = this . _dataTransfer . $ ;
if ( null === a . _isCustomMimeTypeSupported ) if ( b ) { a . _isCustomMimeTypeSupported = ! 1 ; if ( CKEDITOR . env . edge && 17 <= CKEDITOR . env . version ) return ! 0 ; try { b . setData ( "cke/mimetypetest" , "cke test value" ) , a . _isCustomMimeTypeSupported = "cke test value" === b . getData ( "cke/mimetypetest" ) , b . clearData ( "cke/mimetypetest" ) } catch ( c ) { } } else return ! 1 ; return ! a . _isCustomMimeTypeSupported } , getData : function ( a , b ) { var c = this . _getData ( this . _customDataFallbackType , ! 0 ) ; if ( b ) return c ; var c = this . _extractDataComment ( c ) , d = null , d = a === this . _customDataFallbackType ?
c . content : c . data && c . data [ a ] ? c . data [ a ] : this . _getData ( a , ! 0 ) ; return null !== d ? d : "" } , setData : function ( a , b ) { var c = a === this . _customDataFallbackType ; c && ( b = this . _applyDataComment ( b , this . _getFallbackTypeData ( ) ) ) ; var d = b , f = this . _dataTransfer . $ ; try { f . setData ( a , d ) , c && ( this . _dataTransfer . _ . nativeHtmlCache = d ) } catch ( g ) { if ( this . _isUnsupportedMimeTypeError ( g ) ) { c = CKEDITOR . plugins . clipboard . fallbackDataTransfer ; - 1 === CKEDITOR . tools . indexOf ( c . _customTypes , a ) && c . _customTypes . push ( a ) ; var c = this . _getFallbackTypeContent ( ) ,
e = this . _getFallbackTypeData ( ) ; e [ a ] = d ; try { d = this . _applyDataComment ( c , e ) , f . setData ( this . _customDataFallbackType , d ) , this . _dataTransfer . _ . nativeHtmlCache = d } catch ( h ) { d = "" } } } return d } , _getData : function ( a , b ) { var c = this . _dataTransfer . _ . data ; if ( ! b && c [ a ] ) return c [ a ] ; try { return this . _dataTransfer . $ . getData ( a ) } catch ( d ) { return null } } , _getFallbackTypeContent : function ( ) { var a = this . _dataTransfer . _ . data [ this . _customDataFallbackType ] ; a || ( a = this . _extractDataComment ( this . _getData ( this . _customDataFallbackType , ! 0 ) ) . content ) ;
return a } , _getFallbackTypeData : function ( ) { var a = CKEDITOR . plugins . clipboard . fallbackDataTransfer . _customTypes , b = this . _extractDataComment ( this . _getData ( this . _customDataFallbackType , ! 0 ) ) . data || { } , c = this . _dataTransfer . _ . data ; CKEDITOR . tools . array . forEach ( a , function ( a ) { void 0 !== c [ a ] ? b [ a ] = c [ a ] : void 0 !== b [ a ] && ( b [ a ] = b [ a ] ) } , this ) ; return b } , _isUnsupportedMimeTypeError : function ( a ) { return a . message && - 1 !== a . message . search ( /element not found/gi ) } , _extractDataComment : function ( a ) { var b = { data : null , content : a || "" } ; if ( a &&
16 < a . length ) { var c ; ( c = /\x3c!--cke-data:(.*?)--\x3e/g . exec ( a ) ) && c [ 1 ] && ( b . data = JSON . parse ( decodeURIComponent ( c [ 1 ] ) ) , b . content = a . replace ( c [ 0 ] , "" ) ) } return b } , _applyDataComment : function ( a , b ) { var c = "" ; b && CKEDITOR . tools . object . keys ( b ) . length && ( c = "\x3c!--cke-data:" + encodeURIComponent ( JSON . stringify ( b ) ) + "--\x3e" ) ; return c + ( a && a . length ? a : "" ) } } } ) ( ) ; CKEDITOR . config . clipboard _notificationDuration = 1E4 ; CKEDITOR . plugins . add ( "panelbutton" , { requires : "button" , onLoad : function ( ) { function e ( c ) { var b = this . _ ; b . state != CKEDITOR . TRISTATE _DISABLED && ( this . createPanel ( c ) , b . on ? b . panel . hide ( ) : b . panel . showBlock ( this . _ . id , this . document . getById ( this . _ . id ) , 4 ) ) } CKEDITOR . ui . panelButton = CKEDITOR . tools . createClass ( { base : CKEDITOR . ui . button , $ : function ( c ) { var b = c . panel || { } ; delete c . panel ; this . base ( c ) ; this . document = b . parent && b . parent . getDocument ( ) || CKEDITOR . document ; b . block = { attributes : b . attributes } ; b . toolbarRelated = ! 0 ; this . hasArrow =
"listbox" ; this . click = e ; this . _ = { panelDefinition : b } } , statics : { handler : { create : function ( c ) { return new CKEDITOR . ui . panelButton ( c ) } } } , proto : { createPanel : function ( c ) { var b = this . _ ; if ( ! b . panel ) { var f = this . _ . panelDefinition , e = this . _ . panelDefinition . block , h = f . parent || CKEDITOR . document . getBody ( ) , d = this . _ . panel = new CKEDITOR . ui . floatPanel ( c , h , f ) , f = d . addBlock ( b . id , e ) , a = this , g = c . getCommand ( this . command ) ; d . onShow = function ( ) { a . className && this . element . addClass ( a . className + "_panel" ) ; a . setState ( CKEDITOR . TRISTATE _ON ) ;
b . on = 1 ; a . editorFocus && c . focus ( ) ; if ( a . onOpen ) a . onOpen ( ) } ; d . onHide = function ( d ) { a . className && this . element . getFirst ( ) . removeClass ( a . className + "_panel" ) ; ! a . modes && g ? a . setStateFromCommand ( g ) : a . setState ( a . modes && a . modes [ c . mode ] ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED ) ; b . on = 0 ; if ( ! d && a . onClose ) a . onClose ( ) } ; d . onEscape = function ( ) { d . hide ( 1 ) ; a . document . getById ( b . id ) . focus ( ) } ; if ( this . onBlock ) this . onBlock ( d , f ) ; f . onHide = function ( ) { b . on = 0 ; ! a . modes && a . command ? a . setStateFromCommand ( g ) : a . setState ( CKEDITOR . TRISTATE _OFF ) } } } ,
setStateFromCommand : function ( c ) { this . setState ( c . state ) } } } ) } , beforeInit : function ( e ) { e . ui . addHandler ( CKEDITOR . UI _PANELBUTTON , CKEDITOR . ui . panelButton . handler ) } } ) ; CKEDITOR . UI _PANELBUTTON = "panelbutton" ; ( function ( ) { CKEDITOR . plugins . add ( "panel" , { beforeInit : function ( a ) { a . ui . addHandler ( CKEDITOR . UI _PANEL , CKEDITOR . ui . panel . handler ) } } ) ; CKEDITOR . UI _PANEL = "panel" ; CKEDITOR . ui . panel = function ( a , b ) { b && CKEDITOR . tools . extend ( this , b ) ; CKEDITOR . tools . extend ( this , { className : "" , css : [ ] } ) ; this . id = CKEDITOR . tools . getNextId ( ) ; this . document = a ; this . isFramed = this . forceIFrame || this . css . length ; this . _ = { blocks : { } } } ; CKEDITOR . ui . panel . handler = { create : function ( a ) { return new CKEDITOR . ui . panel ( a ) } } ; var g = CKEDITOR . addTemplate ( "panel" ,
@@ -803,27 +804,27 @@ a.focus();delete this._.lastFocused;this._.showBlockParams=null;this._.editor.fi
d = t . element . find ( "[role\x3doption]" ) . toArray ( ) , e = 0 ; e < d . length ; e ++ ) d [ e ] . setAttributes ( { "aria-posinset" : e + 1 , "aria-setsize" : d . length } ) } var g = d . name , h = d . type , k = d . title , C = d . order , m = d . commandName ; d = d . contentTransformations || { } ; var A = new CKEDITOR . style ( r [ "colorButton_" + h + "Style" ] ) , q = CKEDITOR . tools . getNextId ( ) + "_colorBox" , x = { type : h } , y = new CKEDITOR . style ( r [ "colorButton_" + h + "Style" ] , { color : "inherit" } ) , B = function ( ) { return CKEDITOR . tools . addFunction ( function ( d , b , e ) { a . focus ( ) ; a . fire ( "saveSnapshot" ) ; "?" == d ? a . getColorFromDialog ( function ( a ) { a &&
z ( a , b , u ) } , null , x ) : z ( d && "#" + d , b , u ) ; e && ( e . setAttribute ( "cke_colorlast" , ! 0 ) , a . once ( "selectionChange" , function ( ) { e . removeAttribute ( "cke_colorlast" ) } ) ) } ) } ( ) , u = l . getRowLimit ( a ) ? new l ( a , "back" == h ? "background-color" : "color" , B ) : void 0 , t ; a . addCommand ( m , { contextSensitive : ! 0 , exec : function ( a , d ) { if ( ! a . readOnly ) { var b = d . newStyle ; a . removeStyle ( y ) ; a . focus ( ) ; b && a . applyStyle ( b ) ; a . fire ( "saveSnapshot" ) } } , refresh : function ( a , d ) { y . checkApplicable ( d , a , a . activeFilter ) ? y . checkActive ( d , a ) ? this . setState ( CKEDITOR . TRISTATE _ON ) :
this . setState ( CKEDITOR . TRISTATE _OFF ) : this . setState ( CKEDITOR . TRISTATE _DISABLED ) } } ) ; a . ui . add ( g , CKEDITOR . UI _PANELBUTTON , { label : k , title : k , command : m , editorFocus : 0 , toolbar : "colors," + C , allowedContent : A , requiredContent : A , contentTransformations : d , panel : { css : CKEDITOR . skin . getPath ( "editor" ) , attributes : { role : "listbox" , "aria-label" : p . panelTitle } } , select : function ( a ) { var d = r . colorButton _colors . split ( "," ) ; a = CKEDITOR . tools . array . find ( d , a ) ; a = n . normalizeColor ( a ) ; v ( t , a ) ; t . _ . markFirstDisplayed ( ) } , onBlock : function ( d , b ) { t =
b ; b . autoSize = ! 0 ; b . element . addClass ( "cke_colorblock" ) ; b . element . setHtml ( c ( q , B , u ? u . getLength ( ) : 0 ) ) ; b . element . getDocument ( ) . getBody ( ) . setStyle ( "overflow" , "hidden" ) ; CKEDITOR . ui . fire ( "ready" , this ) ; var e = b . keys , h = "rtl" == a . lang . dir ; e [ h ? 37 : 39 ] = "next" ; e [ 40 ] = "next" ; e [ 9 ] = "next" ; e [ h ? 39 : 37 ] = "prev" ; e [ 38 ] = "prev" ; e [ CKEDITOR . SHIFT + 9 ] = "prev" ; e [ 32 ] = "click" ; u && u . setContainer ( b . element . findOne ( ".cke_colorhistory" ) ) } , onOpen : function ( ) { var d = a . getSelection ( ) , b = d && d . getStartElement ( ) , e = a . elementPath ( b ) , c = "back" == h ? "background-color" :
"color" ; if ( e ) { b = e . block || e . blockLimit || a . document . getBody ( ) ; do e = b && b . getComputedStyle ( c ) || "transparent" ; while ( "back" == h && "transparent" == e && b && ( b = b . getParent ( ) ) ) ; e && "transparent" != e || ( e = "#ffffff" ) ; r . colorButton _enableAutomatic && t . element . findOne ( "#" + q ) . setStyle ( "background-color" , e ) ; if ( b = d && d . getRanges ( ) [ 0 ] ) { for ( var d = new CKEDITOR . dom . walker ( b ) , g = b . collapsed ? b . startContainer : d . next ( ) , b = "" ; g ; ) { g . type !== CKEDITOR . NODE _ELEMENT && ( g = g . getParent ( ) ) ; g = n . normalizeColor ( g . getComputedStyle ( c ) ) ; b = b || g ; if ( b !==
g ) { b = "" ; break } g = d . next ( ) } "transparent" == b && ( b = "" ) ; "fore" == h && ( x . automaticTextColor = "#" + n . normalizeColor ( e ) ) ; x . selectionColor = b ? "#" + b : "" ; v ( t , b ) } return e } } } ) } function c ( b , c , f ) { var g = [ ] , h = r . colorButton _colors . split ( "," ) , k = a . plugins . colordialog && r . colorButton _enableMore ; f = h . length + f + ( k ? 1 : 0 ) ; var v = 1 ; r . colorButton _enableAutomatic && ( f += 1 , v += 1 , g . push ( '\x3ca class\x3d"cke_colorauto" _cke_focus\x3d1 hidefocus\x3dtrue' , ' title\x3d"' , p . auto , '"' , ' draggable\x3d"false"' , ' ondragstart\x3d"return false;"' , ' onclick\x3d"CKEDITOR.tools.callFunction(' ,
c , ',null);return false;"' , " href\x3d\"javascript:void('" , p . auto , "')\"" , ' role\x3d"option" aria-posinset\x3d"1" aria-setsize\x3d"' , f , '"\x3e' , '\x3ctable role\x3d"presentation" cellspacing\x3d0 cellpadding\x3d0 width\x3d"100%"\x3e' , "\x3ctr\x3e" , '\x3ctd colspan\x3d"' , a . config . colorButton _colorsPerRow , '" align\x3d"center"\x3e' , '\x3cspan class\x3d"cke_colorbox" id\x3d"' , b , '"\x3e\x3c/span\x3e' , p . auto , "\x3c/td\x3e" , "\x3c/tr\x3e" , "\x3c/table\x3e" , "\x3c/a\x3e" ) ) ; g . push ( '\x3ctable role\x3d"presentation" cellspacing\x3d0 cellpadding\x3d0 width\x3d"100%"\x3e\x3ctbody\x3e' ) ;
for ( b = 0 ; b < h . length ; b ++ ) { 0 === b % a . config . colorButton _colorsPerRow && g . push ( "\x3c/tr\x3e\x3ctr\x3e" ) ; var m = h [ b ] . split ( "/" ) , q = m [ 0 ] , m = new n ( a , { color : m [ 1 ] || q , label : m [ 1 ] ? q : void 0 } , c ) ; m . setPositionIndex ( v + b , f ) ; g . push ( m . getHtml ( ) ) } l . getRowLimit ( a ) && l . renderContainer ( g , a ) ; k && g . push ( "\x3c/tr\x3e" , "\x3ctr\x3e" , '\x3ctd colspan\x3d"' , a . config . colorButton _colorsPerRow , '" align\x3d"center"\x3e' , '\x3ca class\x3d"cke_colormore" _cke_focus\x3d1 hidefocus\x3dtrue' , ' title\x3d"' , p . more , '"' , ' draggable\x3d"false"' , ' ondragstart\x3d"return false;"' ,
' onclick\x3d"CKEDITOR.tools.callFunction(' , c , ",'?');return false;\"" , " href\x3d\"javascript:void('" , p . more , "')\"" , ' role\x3d"option" aria-posinset\x3d"' , f , '" aria-setsize\x3d"' , f , '"\x3e' , p . more , "\x3c/a\x3e" , "\x3c/td\x3e" ) ; g . push ( "\x3c/tr\x3e\x3c/tbody\x3e\x3c/table\x3e" ) ; return g . join ( "" ) } function f ( a ) { return "false" == a . getAttribute ( "contentEditable" ) || a . getAttribute ( "data-nostyle" ) } function v ( a , b ) { var c = a . _ . getItems ( ) , g = a . element . findOne ( "[aria-selected]" ) , f = a . element . findOne ( "[cke_colorlast]" ) ;
g && g . removeAttribute ( "aria-selected" ) ; if ( f ) f . setAttribute ( "aria-selected" , ! 0 ) ; else for ( g = 0 ; g < c . count ( ) ; g ++ ) if ( f = c . getItem ( g ) , b && b == n . normalizeColor ( f . getAttribute ( "data-value" ) ) ) { f . setAttribute ( "aria-selected" , ! 0 ) ; break } } var r = a . config , p = a . lang . colorbutton ; if ( ! CKEDITOR . env . hc ) { b ( { name : "TextColor" , type : "fore" , commandName : "textColor" , title : p . textColorTitle , order : 10 , contentTransformations : [ [ { element : "font" , check : "span{color}" , left : function ( a ) { return ! ! a . attributes . color } , right : function ( a ) { a . name = "span" ;
a . attributes . color && ( a . styles . color = a . attributes . color ) ; delete a . attributes . color } } ] ] } ) ; var k , q = a . config . colorButton _normalizeBackground ; if ( void 0 === q || q ) k = [ [ { element : "span" , left : function ( a ) { var b = CKEDITOR . tools ; if ( "span" != a . name || ! a . styles || ! a . styles . background ) return ! 1 ; a = b . style . parse . background ( a . styles . background ) ; return a . color && 1 === b . object . keys ( a ) . length } , right : function ( b ) { var c = ( new CKEDITOR . style ( a . config . colorButton _backStyle , { color : b . styles . background } ) ) . getDefinition ( ) ; b . name = c . element ;
b . styles = c . styles ; b . attributes = c . attributes || { } ; return b } } ] ] ; b ( { name : "BGColor" , type : "back" , commandName : "bgColor" , title : p . bgColorTitle , order : 20 , contentTransformations : k } ) } } } ) ; n = CKEDITOR . tools . createClass ( { $ : function ( a , b , c ) { this . $ = new CKEDITOR . dom . element ( "td" ) ; this . color = CKEDITOR . tools . _isValidColorFormat ( b . color ) ? b . color : "" ; this . clickFn = c ; this . label = b . label || n . colorNames ( a ) [ this . color ] || this . color ; this . setHtml ( ) } , statics : { colorNames : function ( a ) { return a . lang . colorbutton . colors } , normalizeColor : function ( a ) { var b =
/^(rgb|hsl)a\(/g . test ( a ) , c = /^rgba\((\s*0\s*,?){4}\)$/g . test ( a ) ; return b && ! c ? ( a = new CKEDITOR . tools . color ( a ) , CKEDITOR . tools . normalizeHex ( a . getHex ( ) || "" ) . replace ( /#/g , "" ) ) : CKEDITOR . tools . normalizeHex ( "#" + CKEDITOR . tools . convertRgbToHex ( a || "" ) ) . replace ( /#/g , "" ) } } , proto : { getElement : function ( ) { return this . $ } , getHtml : function ( ) { return this . getElement ( ) . getOuterHtml ( ) } , setHtml : function ( ) { this . getElement ( ) . setHtml ( '\x3ca class\x3d"cke_colorbox" _cke_focus\x3d1 hidefocus\x3dtrue title\x3d"' + this . label + '" draggable\x3d"false" ondragstart\x3d"return false;" onclick\x3d"CKEDITOR.tools.callFunction(' +
this . clickFn + ",'" + this . color + "','" + this . label + "', this); return false;\" href\x3d\"javascript:void('" + this . color + '\')" data-value\x3d"' + this . color + '" role\x3d"option"\x3e\x3cspan class\x3d"cke_colorbox" style\x3d"background-color:#' + this . color + '"\x3e\x3c/span\x3e\x3c/a\x3e' ) } , setPositionIndex : function ( a , b ) { this . getElement ( ) . getChild ( 0 ) . setAttributes ( { "aria-posinset" : a , "aria-setsize" : b } ) } } } ) ; k = CKEDITOR . tools . createClass ( { $ : function ( ) { this . $ = new CKEDITOR . dom . element ( "tr" ) ; this . $ . addClass ( "cke_colorhistory_row" ) ;
this . boxes = [ ] } , proto : { getElement : function ( ) { return this . $ } , removeLastColor : function ( ) { this . getElement ( ) . getLast ( ) . remove ( ) ; return this . boxes . pop ( ) } , addNewColor : function ( a ) { this . boxes . unshift ( a ) ; this . getElement ( ) . append ( a . getElement ( ) , ! 0 ) } , extractColorBox : function ( a ) { var b = CKEDITOR . tools . getIndex ( this . boxes , function ( b ) { return b . color === a } ) ; if ( 0 > b ) return null ; this . boxes [ b ] . getElement ( ) . remove ( ) ; return this . boxes . splice ( b , 1 ) [ 0 ] } } } ) ; l = CKEDITOR . tools . createClass ( { $ : function ( a , b , c ) { this . editor = a ; this . cssProperty =
b ; this . clickFn = c ; this . rows = [ ] ; this . _ . addNewRow ( ) ; if ( this . editor . config . colorButton _renderContentColors ) this . editor . once ( "instanceReady" , function ( ) { this . renderContentColors ( ) } , this ) } , statics : { renderContainer : function ( a , b ) { a . push ( '\x3c/tbody\x3e\x3ctbody class\x3d"cke_colorhistory" style\x3d"display:none;"\x3e' , "\x3ctr\x3e" , '\x3ctd colspan\x3d"' , b . config . colorButton _colorsPerRow , '" align\x3d"center"\x3e' , "\x3cspan\x3e\x3chr\x3e\x3c/span\x3e" , "\x3c/td\x3e" , "\x3c/tr\x3e" , "\x3c/tbody\x3e\x3ctbody\x3e" ) } ,
getRowLimit : function ( a ) { return a . config . colorButton _historyRowLimit } , getCapacity : function ( a ) { return l . getRowLimit ( a ) * a . config . colorButton _colorsPerRow } , colorList : CKEDITOR . tools . style . parse . _colors } , _ : { countColors : function ( ) { var a = CKEDITOR . tools . getStyledSpans ( this . cssProperty , this . editor . editable ( ) ) ; return CKEDITOR . tools . array . reduce ( a , function ( a , c ) { var f = this . _ . getHexCode ( c , this . cssProperty , l . colorList ) ; a [ f ] = a [ f ] || 0 ; a [ f ] += 1 ; return a } , { } , this ) } , getHexCode : function ( a , b , c ) { var f = a . getStyle ( b ) ; return f in
c ? c [ f ] . substr ( 1 ) : n . normalizeColor ( a . getComputedStyle ( b ) ) . toUpperCase ( ) } , sortByOccurrencesAscending : function ( a , b ) { var c = [ ] , f ; for ( f in a ) { var k = { } ; k [ b ] = f ; k . frequency = a [ f ] ; c . push ( k ) } c . sort ( function ( a , b ) { return b . frequency - a . frequency } ) ; this . _ . trimToCapacity ( c ) ; return c . reverse ( ) } , trimToCapacity : function ( a ) { a . splice ( l . getCapacity ( this . editor ) ) } , addColors : function ( a ) { CKEDITOR . tools . array . forEach ( a , function ( a ) { this . addColor ( a . colorCode ) } , this ) } , extractColorBox : function ( a ) { for ( var b = 0 ; b < this . rows . length ; b ++ ) { var c =
this . rows [ b ] . extractColorBox ( a ) ; if ( c ) return c } return null } , moveToBeginning : function ( a ) { this . rows [ 0 ] . addNewColor ( a ) } , createAtBeginning : function ( a ) { this . _ . moveToBeginning ( new n ( this . editor , { color : a } , this . clickFn ) ) } , addNewRow : function ( ) { this . rows . push ( new k ) ; this . container && this . container . append ( this . rows [ this . rows . length - 1 ] . getElement ( ) ) } , alignRows : function ( ) { for ( var a = 0 ; a < l . getRowLimit ( this . editor ) && ! ( this . rows [ a ] . boxes . length <= this . editor . config . colorButton _colorsPerRow ) ; a ++ ) this . rows [ a + 1 ] ? this . _ . moveLastBoxToNextRow ( a ) :
a < l . getRowLimit ( this . editor ) - 1 ? ( this . _ . addNewRow ( ) , this . _ . moveLastBoxToNextRow ( a ) ) : this . rows [ a ] . removeLastColor ( ) } , moveLastBoxToNextRow : function ( a ) { this . rows [ a + 1 ] . addNewColor ( this . rows [ a ] . removeLastColor ( ) ) } , refreshPositions : function ( ) { var a = this . _ . countPanelElements ( ) , b = this . _ . calculateFirstPosition ( a ) ; CKEDITOR . tools . array . forEach ( this . rows , function ( c ) { CKEDITOR . tools . array . forEach ( c . boxes , function ( c ) { c . setPositionIndex ( b , a ) ; b += 1 } ) } ) } , countPanelElements : function ( ) { var a = this . editor . config . colorButton _colors . split ( "," ) . length +
this . getLength ( ) ; this . editor . plugins . colordialog && this . editor . config . colorButton _enableMore && ( a += 1 ) ; this . editor . config . colorButton _enableAutomatic && ( a += 1 ) ; return a } , calculateFirstPosition : function ( a ) { return this . editor . plugins . colordialog && this . editor . config . colorButton _enableMore ? a - this . getLength ( ) : a - this . getLength ( ) + 1 } , attachRows : function ( ) { CKEDITOR . tools . array . forEach ( this . rows , function ( a ) { this . container . append ( a . getElement ( ) ) } , this ) } } , proto : { setContainer : function ( a ) { this . container = a ; this . _ . attachRows ( ) ;
this . getLength ( ) && this . show ( ) } , show : function ( ) { this . container && this . container . show ( ) } , renderContentColors : function ( ) { var a = this . _ . countColors ( ) ; CKEDITOR . tools . isEmpty ( a ) || ( a = this . _ . sortByOccurrencesAscending ( a , "colorCode" ) , this . _ . addColors ( a ) , this . _ . refreshPositions ( ) ) } , addColor : function ( a ) { var b = this . _ . extractColorBox ( a ) ; this . container && ! this . container . isVisible ( ) && this . show ( ) ; b ? this . _ . moveToBeginning ( b ) : this . _ . createAtBeginning ( a ) ; this . _ . alignRows ( ) } , getLength : function ( ) { return CKEDITOR . tools . array . reduce ( this . rows ,
function ( a , b ) { return a + b . boxes . length } , 0 ) } } } ) } ) ( ) ; CKEDITOR . config . colorButton _enableMore = ! 0 ; CKEDITOR . config . colorButton _colors = "1ABC9C,2ECC71,3498DB,9B59B6,4E5F70,F1C40F,16A085,27AE60,2980B9,8E44AD,2C3E50,F39C12,E67E22,E74C3C,ECF0F1,95A5A6,DDD,FFF,D35400,C0392B,BDC3C7,7F8C8D,999,000" ; CKEDITOR . config . colorButton _foreStyle = { element : "span" , styles : { color : "#(color)" } , overrides : [ { element : "font" , attributes : { color : null } } ] } ; CKEDITOR . config . colorButton _backStyle = { element : "span" , styles : { "background-color" : "#(color)" } } ;
CKEDITOR . config . colorButton _enableAutomatic = ! 0 ; CKEDITOR . config . colorButton _colorsPerRow = 6 ; CKEDITOR . config . colorButton _historyRowLimit = 1 ; CKEDITOR . config . colorButton _renderContentColors = ! 0 ; CKEDITOR . plugins . colordialog = { requires : "dialog" , init : function ( b ) { var d = new CKEDITOR . dialogCommand ( "colordialog" ) ; d . editorFocus = ! 1 ; b . addCommand ( "colordialog" , d ) ; CKEDITOR . dialog . add ( "colordialog" , this . path + "dialogs/colordialog.js" ) ; b . getColorFromDialog = function ( d , k , g ) { var c , e , h , f ; c = function ( a ) { h ( this ) ; ( a = "ok" == a . name ? this . getValueOf ( "picker" , "selectedColor" ) : null ) && ! CKEDITOR . tools . _isValidColorFormat ( a ) && ( a = null ) ; /^[0-9a-f]{3}([0-9a-f]{3})?$/i . test ( a ) && ( a = "#" + a ) ; d . call ( k , a ) } ; e = function ( a ) { g && ( a . data =
b ; b . autoSize = ! 0 ; b . element . addClass ( "cke_colorblock" ) ; b . element . setHtml ( c ( q , B , u ? u . getLength ( ) : 0 ) ) ; b . element . getDocument ( ) . getBody ( ) . setStyle ( "overflow" , "hidden" ) ; b . element . getAscendant ( { html : 1 } ) . setStyle ( "overflow" , "hidden" ) ; CKEDITOR . ui . fire ( "ready" , this ) ; var e = b . keys , h = "rtl" == a . lang . dir ; e [ h ? 37 : 39 ] = "next" ; e [ 40 ] = "next" ; e [ 9 ] = "next" ; e [ h ? 39 : 37 ] = "prev" ; e [ 38 ] = "prev" ; e [ CKEDITOR . SHIFT + 9 ] = "prev" ; e [ 32 ] = "click" ; u && u . setContainer ( b . element . findOne ( ".cke_colorhistory" ) ) } , onOpen : function ( ) { var d = a . getSelection ( ) ,
b = d && d . getStartElement ( ) , e = a . elementPath ( b ) , c = "back" == h ? "background-color" : "color" ; if ( e ) { b = e . block || e . blockLimit || a . document . getBody ( ) ; do e = b && b . getComputedStyle ( c ) || "transparent" ; while ( "back" == h && "transparent" == e && b && ( b = b . getParent ( ) ) ) ; e && "transparent" != e || ( e = "#ffffff" ) ; r . colorButton _enableAutomatic && t . element . findOne ( "#" + q ) . setStyle ( "background-color" , e ) ; if ( b = d && d . getRanges ( ) [ 0 ] ) { for ( var d = new CKEDITOR . dom . walker ( b ) , g = b . collapsed ? b . startContainer : d . next ( ) , b = "" ; g ; ) { g . type !== CKEDITOR . NODE _ELEMENT &&
( g = g . getParent ( ) ) ; g = n . normalizeColor ( g . getComputedStyle ( c ) ) ; b = b || g ; if ( b !== g ) { b = "" ; break } g = d . next ( ) } "transparent" == b && ( b = "" ) ; "fore" == h && ( x . automaticTextColor = "#" + n . normalizeColor ( e ) ) ; x . selectionColor = b ? "#" + b : "" ; v ( t , b ) } return e } } } ) } function c ( b , c , f ) { var g = [ ] , h = r . colorButton _colors . split ( "," ) , k = a . plugins . colordialog && r . colorButton _enableMore ; f = h . length + f + ( k ? 1 : 0 ) ; var v = 1 ; r . colorButton _enableAutomatic && ( f += 1 , v += 1 , g . push ( '\x3ca class\x3d"cke_colorauto" _cke_focus\x3d1 hidefocus\x3dtrue' , ' title\x3d"' , p . auto ,
'"' , ' draggable\x3d"false"' , ' ondragstart\x3d"return false;"' , ' onclick\x3d"CKEDITOR.tools.callFunction(' , c , ',null);return false;"' , " href\x3d\"javascript:void('" , p . auto , "')\"" , ' role\x3d"option" aria-posinset\x3d"1" aria-setsize\x3d"' , f , '"\x3e' , '\x3ctable role\x3d"presentation" cellspacing\x3d0 cellpadding\x3d0 width\x3d"100%"\x3e' , "\x3ctr\x3e" , '\x3ctd colspan\x3d"' , a . config . colorButton _colorsPerRow , '" align\x3d"center"\x3e' , '\x3cspan class\x3d"cke_colorbox" id\x3d"' , b , '"\x3e\x3c/span\x3e' , p . auto ,
"\x3c/td\x3e" , "\x3c/tr\x3e" , "\x3c/table\x3e" , "\x3c/a\x3e" ) ) ; g . push ( '\x3ctable role\x3d"presentation" cellspacing\x3d0 cellpadding\x3d0 width\x3d"100%"\x3e\x3ctbody\x3e' ) ; for ( b = 0 ; b < h . length ; b ++ ) { 0 === b % a . config . colorButton _colorsPerRow && g . push ( "\x3c/tr\x3e\x3ctr\x3e" ) ; var m = h [ b ] . split ( "/" ) , q = m [ 0 ] , m = new n ( a , { color : m [ 1 ] || q , label : m [ 1 ] ? q : void 0 } , c ) ; m . setPositionIndex ( v + b , f ) ; g . push ( m . getHtml ( ) ) } l . getRowLimit ( a ) && l . renderContainer ( g , a ) ; k && g . push ( "\x3c/tr\x3e" , "\x3ctr\x3e" , '\x3ctd colspan\x3d"' , a . config . colorButton _colorsPerRow ,
'" align\x3d"center"\x3e' , '\x3ca class\x3d"cke_colormore" _cke_focus\x3d1 hidefocus\x3dtrue' , ' title\x3d"' , p . more , '"' , ' draggable\x3d"false"' , ' ondragstart\x3d"return false;"' , ' onclick\x3d"CKEDITOR.tools.callFunction(' , c , ",'?');return false;\"" , " href\x3d\"javascript:void('" , p . more , "')\"" , ' role\x3d"option" aria-posinset\x3d"' , f , '" aria-setsize\x3d"' , f , '"\x3e' , p . more , "\x3c/a\x3e" , "\x3c/td\x3e" ) ; g . push ( "\x3c/tr\x3e\x3c/tbody\x3e\x3c/table\x3e" ) ; return g . join ( "" ) } function f ( a ) { return "false" == a . getAttribute ( "contentEditable" ) ||
a . getAttribute ( "data-nostyle" ) } function v ( a , b ) { var c = a . _ . getItems ( ) , g = a . element . findOne ( "[aria-selected]" ) , f = a . element . findOne ( "[cke_colorlast]" ) ; g && g . removeAttribute ( "aria-selected" ) ; if ( f ) f . setAttribute ( "aria-selected" , ! 0 ) ; else for ( g = 0 ; g < c . count ( ) ; g ++ ) if ( f = c . getItem ( g ) , b && b == n . normalizeColor ( f . getAttribute ( "data-value" ) ) ) { f . setAttribute ( "aria-selected" , ! 0 ) ; break } } var r = a . config , p = a . lang . colorbutton ; if ( ! CKEDITOR . env . hc ) { b ( { name : "TextColor" , type : "fore" , commandName : "textColor" , title : p . textColorTitle ,
order : 10 , contentTransformations : [ [ { element : "font" , check : "span{color}" , left : function ( a ) { return ! ! a . attributes . color } , right : function ( a ) { a . name = "span" ; a . attributes . color && ( a . styles . color = a . attributes . color ) ; delete a . attributes . color } } ] ] } ) ; var k , q = a . config . colorButton _normalizeBackground ; if ( void 0 === q || q ) k = [ [ { element : "span" , left : function ( a ) { var b = CKEDITOR . tools ; if ( "span" != a . name || ! a . styles || ! a . styles . background ) return ! 1 ; a = b . style . parse . background ( a . styles . background ) ; return a . color && 1 === b . object . keys ( a ) . length } ,
right : function ( b ) { var c = ( new CKEDITOR . style ( a . config . colorButton _backStyle , { color : b . styles . background } ) ) . getDefinition ( ) ; b . name = c . element ; b . styles = c . styles ; b . attributes = c . attributes || { } ; return b } } ] ] ; b ( { name : "BGColor" , type : "back" , commandName : "bgColor" , title : p . bgColorTitle , order : 20 , contentTransformations : k } ) } } } ) ; n = CKEDITOR . tools . createClass ( { $ : function ( a , b , c ) { this . $ = new CKEDITOR . dom . element ( "td" ) ; this . color = CKEDITOR . tools . _isValidColorFormat ( b . color ) ? b . color : "" ; this . clickFn = c ; this . label = b . label || n . colorNames ( a ) [ this . color ] ||
this . color ; this . setHtml ( ) } , statics : { colorNames : function ( a ) { return a . lang . colorbutton . colors } , normalizeColor : function ( a ) { var b = /^(rgb|hsl)a\(/g . test ( a ) , c = /^rgba\((\s*0\s*,?){4}\)$/g . test ( a ) ; return b && ! c ? ( a = new CKEDITOR . tools . color ( a ) , CKEDITOR . tools . normalizeHex ( a . getHex ( ) || "" ) . replace ( /#/g , "" ) ) : CKEDITOR . tools . normalizeHex ( "#" + CKEDITOR . tools . convertRgbToHex ( a || "" ) ) . replace ( /#/g , "" ) } } , proto : { getElement : function ( ) { return this . $ } , getHtml : function ( ) { return this . getElement ( ) . getOuterHtml ( ) } , setHtml : function ( ) { this . getElement ( ) . setHtml ( '\x3ca class\x3d"cke_colorbox" _cke_focus\x3d1 hidefocus\x3dtrue title\x3d"' +
this . label + '" draggable\x3d"false" ondragstart\x3d"return false;" onclick\x3d"CKEDITOR.tools.callFunction(' + this . clickFn + ",'" + this . color + "','" + this . label + "', this); return false;\" href\x3d\"javascript:void('" + this . color + '\')" data-value\x3d"' + this . color + '" role\x3d"option"\x3e\x3cspan class\x3d"cke_colorbox" style\x3d"background-color:#' + this . color + '"\x3e\x3c/span\x3e\x3c/a\x3e' ) } , setPositionIndex : function ( a , b ) { this . getElement ( ) . getChild ( 0 ) . setAttributes ( { "aria-posinset" : a , "aria-setsize" : b } ) } } } ) ;
k = CKEDITOR . tools . createClass ( { $ : function ( ) { this . $ = new CKEDITOR . dom . element ( "tr" ) ; this . $ . addClass ( "cke_colorhistory_row" ) ; this . boxes = [ ] } , proto : { getElement : function ( ) { return this . $ } , removeLastColor : function ( ) { this . getElement ( ) . getLast ( ) . remove ( ) ; return this . boxes . pop ( ) } , addNewColor : function ( a ) { this . boxes . unshift ( a ) ; this . getElement ( ) . append ( a . getElement ( ) , ! 0 ) } , extractColorBox : function ( a ) { var b = CKEDITOR . tools . getIndex ( this . boxes , function ( b ) { return b . color === a } ) ; if ( 0 > b ) return null ; this . boxes [ b ] . getElement ( ) . remove ( ) ;
return this . boxes . splice ( b , 1 ) [ 0 ] } } } ) ; l = CKEDITOR . tools . createClass ( { $ : function ( a , b , c ) { this . editor = a ; this . cssProperty = b ; this . clickFn = c ; this . rows = [ ] ; this . _ . addNewRow ( ) ; if ( this . editor . config . colorButton _renderContentColors ) this . editor . once ( "instanceReady" , function ( ) { this . renderContentColors ( ) } , this ) } , statics : { renderContainer : function ( a , b ) { a . push ( '\x3c/tbody\x3e\x3ctbody class\x3d"cke_colorhistory" style\x3d"display:none;"\x3e' , "\x3ctr\x3e" , '\x3ctd colspan\x3d"' , b . config . colorButton _colorsPerRow , '" align\x3d"center"\x3e' ,
"\x3cspan\x3e\x3chr\x3e\x3c/span\x3e" , "\x3c/td\x3e" , "\x3c/tr\x3e" , "\x3c/tbody\x3e\x3ctbody\x3e" ) } , getRowLimit : function ( a ) { return a . config . colorButton _historyRowLimit } , getCapacity : function ( a ) { return l . getRowLimit ( a ) * a . config . colorButton _colorsPerRow } , colorList : CKEDITOR . tools . style . parse . _colors } , _ : { countColors : function ( ) { var a = CKEDITOR . tools . getStyledSpans ( this . cssProperty , this . editor . editable ( ) ) ; return CKEDITOR . tools . array . reduce ( a , function ( a , c ) { var f = this . _ . getHexCode ( c , this . cssProperty , l . colorList ) ;
a [ f ] = a [ f ] || 0 ; a [ f ] += 1 ; return a } , { } , this ) } , getHexCode : function ( a , b , c ) { var f = a . getStyle ( b ) ; return f in c ? c [ f ] . substr ( 1 ) : n . normalizeColor ( a . getComputedStyle ( b ) ) . toUpperCase ( ) } , sortByOccurrencesAscending : function ( a , b ) { var c = [ ] , f ; for ( f in a ) { var k = { } ; k [ b ] = f ; k . frequency = a [ f ] ; c . push ( k ) } c . sort ( function ( a , b ) { return b . frequency - a . frequency } ) ; this . _ . trimToCapacity ( c ) ; return c . reverse ( ) } , trimToCapacity : function ( a ) { a . splice ( l . getCapacity ( this . editor ) ) } , addColors : function ( a ) { CKEDITOR . tools . array . forEach ( a , function ( a ) { this . addColor ( a . colorCode ) } ,
this ) } , extractColorBox : function ( a ) { for ( var b = 0 ; b < this . rows . length ; b ++ ) { var c = this . rows [ b ] . extractColorBox ( a ) ; if ( c ) return c } return null } , moveToBeginning : function ( a ) { this . rows [ 0 ] . addNewColor ( a ) } , createAtBeginning : function ( a ) { this . _ . moveToBeginning ( new n ( this . editor , { color : a } , this . clickFn ) ) } , addNewRow : function ( ) { this . rows . push ( new k ) ; this . container && this . container . append ( this . rows [ this . rows . length - 1 ] . getElement ( ) ) } , alignRows : function ( ) { for ( var a = 0 ; a < l . getRowLimit ( this . editor ) && ! ( this . rows [ a ] . boxes . length <=
this . editor . config . colorButton _colorsPerRow ) ; a ++ ) this . rows [ a + 1 ] ? this . _ . moveLastBoxToNextRow ( a ) : a < l . getRowLimit ( this . editor ) - 1 ? ( this . _ . addNewRow ( ) , this . _ . moveLastBoxToNextRow ( a ) ) : this . rows [ a ] . removeLastColor ( ) } , moveLastBoxToNextRow : function ( a ) { this . rows [ a + 1 ] . addNewColor ( this . rows [ a ] . removeLastColor ( ) ) } , refreshPositions : function ( ) { var a = this . _ . countPanelElements ( ) , b = this . _ . calculateFirstPosition ( a ) ; CKEDITOR . tools . array . forEach ( this . rows , function ( c ) { CKEDITOR . tools . array . forEach ( c . boxes , function ( c ) { c . setPositionIndex ( b ,
a ) ; b += 1 } ) } ) } , countPanelElements : function ( ) { var a = this . editor . config . colorButton _colors . split ( "," ) . length + this . getLength ( ) ; this . editor . plugins . colordialog && this . editor . config . colorButton _enableMore && ( a += 1 ) ; this . editor . config . colorButton _enableAutomatic && ( a += 1 ) ; return a } , calculateFirstPosition : function ( a ) { return this . editor . plugins . colordialog && this . editor . config . colorButton _enableMore ? a - this . getLength ( ) : a - this . getLength ( ) + 1 } , attachRows : function ( ) { CKEDITOR . tools . array . forEach ( this . rows , function ( a ) { this . container . append ( a . getElement ( ) ) } ,
this ) } } , proto : { setContainer : function ( a ) { this . container = a ; this . _ . attachRows ( ) ; this . getLength ( ) && this . show ( ) } , show : function ( ) { this . container && this . container . show ( ) } , renderContentColors : function ( ) { var a = this . _ . countColors ( ) ; CKEDITOR . tools . isEmpty ( a ) || ( a = this . _ . sortByOccurrencesAscending ( a , "colorCode" ) , this . _ . addColors ( a ) , this . _ . refreshPositions ( ) ) } , addColor : function ( a ) { var b = this . _ . extractColorBox ( a ) ; this . container && ! this . container . isVisible ( ) && this . show ( ) ; b ? this . _ . moveToBeginning ( b ) : this . _ . createAtBeginning ( a ) ;
this . _ . alignRows ( ) } , getLength : function ( ) { return CKEDITOR . tools . array . reduce ( this . rows , function ( a , b ) { return a + b . boxes . length } , 0 ) } } } ) } ) ( ) ; CKEDITOR . config . colorButton _enableMore = ! 0 ; CKEDITOR . config . colorButton _colors = "1ABC9C,2ECC71,3498DB,9B59B6,4E5F70,F1C40F,16A085,27AE60,2980B9,8E44AD,2C3E50,F39C12,E67E22,E74C3C,ECF0F1,95A5A6,DDD,FFF,D35400,C0392B,BDC3C7,7F8C8D,999,000" ; CKEDITOR . config . colorButton _foreStyle = { element : "span" , styles : { color : "#(color)" } , overrides : [ { element : "font" , attributes : { color : null } } ] } ;
CKEDITOR . config . colorButton _backStyle = { element : "span" , styles : { "background-color" : "#(color)" } } ; CKEDITOR . config . colorButton _enableAutomatic = ! 0 ; CKEDITOR . config . colorButton _colorsPerRow = 6 ; CKEDITOR . config . colorButton _historyRowLimit = 1 ; CKEDITOR . config . colorButton _renderContentColors = ! 0 ; CKEDITOR . plugins . colordialog = { requires : "dialog" , init : function ( b ) { var d = new CKEDITOR . dialogCommand ( "colordialog" ) ; d . editorFocus = ! 1 ; b . addCommand ( "colordialog" , d ) ; CKEDITOR . dialog . add ( "colordialog" , this . path + "dialogs/colordialog.js" ) ; b . getColorFromDialog = function ( d , k , g ) { var c , e , h , f ; c = function ( a ) { h ( this ) ; ( a = "ok" == a . name ? this . getValueOf ( "picker" , "selectedColor" ) : null ) && ! CKEDITOR . tools . _isValidColorFormat ( a ) && ( a = null ) ; /^[0-9a-f]{3}([0-9a-f]{3})?$/i . test ( a ) && ( a = "#" + a ) ; d . call ( k , a ) } ; e = function ( a ) { g && ( a . data =
g ) } ; h = function ( a ) { a . removeListener ( "ok" , c ) ; a . removeListener ( "cancel" , c ) ; a . removeListener ( "show" , e ) } ; f = function ( a ) { a . on ( "ok" , c ) ; a . on ( "cancel" , c ) ; a . on ( "show" , e , null , null , 5 ) } ; b . execCommand ( "colordialog" ) ; if ( b . _ . storedDialogs && b . _ . storedDialogs . colordialog ) f ( b . _ . storedDialogs . colordialog ) ; else CKEDITOR . on ( "dialogDefinition" , function ( a ) { if ( "colordialog" == a . data . name ) { var b = a . data . definition ; a . removeListener ( ) ; b . onLoad = CKEDITOR . tools . override ( b . onLoad , function ( a ) { return function ( ) { f ( this ) ; b . onLoad = a ; "function" ==
typeof a && a . call ( this ) } } ) } } ) } } } ; CKEDITOR . plugins . add ( "colordialog" , CKEDITOR . plugins . colordialog ) ; CKEDITOR . plugins . add ( "menu" , { requires : "floatpanel" , beforeInit : function ( m ) { for ( var k = m . config . menu _groups . split ( "," ) , n = m . _ . menuGroups = { } , r = m . _ . menuItems = { } , p = 0 ; p < k . length ; p ++ ) n [ k [ p ] ] = p + 1 ; m . addMenuGroup = function ( c , a ) { n [ c ] = a || 100 } ; m . addMenuItem = function ( c , a ) { n [ a . group ] && ( r [ c ] = new CKEDITOR . menuItem ( this , c , a ) ) } ; m . addMenuItems = function ( c ) { for ( var a in c ) this . addMenuItem ( a , c [ a ] ) } ; m . getMenuItem = function ( c ) { return r [ c ] } ; m . removeMenuItem = function ( c ) { delete r [ c ] } } } ) ;
( function ( ) { function m ( a ) { a . sort ( function ( a , f ) { return a . group < f . group ? - 1 : a . group > f . group ? 1 : a . order < f . order ? - 1 : a . order > f . order ? 1 : 0 } ) } var k = '\x3cspan class\x3d"cke_menuitem"\x3e\x3ca id\x3d"{id}" class\x3d"cke_menubutton cke_menubutton__{name} cke_menubutton_{state} {cls}" href\x3d"{href}" title\x3d"{title}" tabindex\x3d"-1" _cke_focus\x3d1 hidefocus\x3d"true" role\x3d"{role}" aria-label\x3d"{attrLabel}" aria-describedby\x3d"{id}_description" aria-haspopup\x3d"{hasPopup}" aria-disabled\x3d"{disabled}" {ariaChecked} draggable\x3d"false"' ,
@@ -861,11 +862,12 @@ CKEDITOR.POSITION_AFTER_START)):b.setStartAt(a,CKEDITOR.POSITION_AFTER_END)),b.c
CKEDITOR . plugins . add ( "entities" , { afterInit : function ( a ) { function f ( b ) { return h [ b ] } function g ( a ) { return "force" != c . entities _processNumerical && b [ a ] ? b [ a ] : "\x26#" + a . charCodeAt ( 0 ) + ";" } var c = a . config ; if ( a = ( a = a . dataProcessor ) && a . htmlFilter ) { var e = [ ] ; ! 1 !== c . basicEntities && e . push ( "nbsp,gt,lt,amp" ) ; c . entities && ( e . length && e . push ( "quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,euro" ) ,
c . entities _latin && e . push ( "Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,OElig,oelig,Scaron,scaron,Yuml" ) , c . entities _greek && e . push ( "Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,upsih,piv" ) ,
c . entities _additional && e . push ( c . entities _additional ) ) ; var b = k ( e . join ( "," ) ) , d = b . regex ? "[" + b . regex + "]" : "a^" ; delete b . regex ; c . entities && c . entities _processNumerical && ( d = "[^ -~]|" + d ) ; var d = new RegExp ( d , "g" ) , h = k ( "nbsp,gt,lt,amp,shy" , ! 0 ) , l = new RegExp ( h . regex , "g" ) ; a . addRules ( { text : function ( a ) { return a . replace ( l , f ) . replace ( d , g ) } } , { applyToAll : ! 0 , excludeNestedEditable : ! 0 } ) } } } ) } ) ( ) ; CKEDITOR . config . basicEntities = ! 0 ; CKEDITOR . config . entities = ! 0 ; CKEDITOR . config . entities _latin = ! 0 ; CKEDITOR . config . entities _greek = ! 0 ;
CKEDITOR . config . entities _additional = "#39" ; ( function ( ) { function g ( a , b ) { var c = l . exec ( a ) , d = l . exec ( b ) ; if ( c ) { if ( ! c [ 2 ] && "px" == d [ 2 ] ) return d [ 1 ] ; if ( "px" == c [ 2 ] && ! d [ 2 ] ) return d [ 1 ] + "px" } return b } var k = CKEDITOR . htmlParser . cssStyle , h = CKEDITOR . tools . cssLength , l = /^((?:\d*(?:\.\d+))|(?:\d+))(.*)?$/i , m = { elements : { $ : function ( a ) { var b = a . attributes ; if ( ( b = ( b = ( b = b && b [ "data-cke-realelement" ] ) && new CKEDITOR . htmlParser . fragment . fromHtml ( decodeURIComponent ( b ) ) ) && b . children [ 0 ] ) && a . attributes [ "data-cke-resizable" ] ) { var c = ( new k ( a ) ) . rules ; a = b . attributes ; var d = c . width ,
c = c . height ; d && ( a . width = g ( a . width , d ) ) ; c && ( a . height = g ( a . height , c ) ) } return b } } } ; CKEDITOR . plugins . add ( "fakeobjects" , { init : function ( a ) { a . filter . allow ( "img[!data-cke-realelement,src,alt,title](*){*}" , "fakeobjects" ) } , afterInit : function ( a ) { ( a = ( a = a . dataProcessor ) && a . htmlFilter ) && a . addRules ( m , { applyToAll : ! 0 } ) } } ) ; CKEDITOR . editor . prototype . createFakeElement = function ( a , b , c , d ) { var e = this . lang . fakeobjects , e = e [ c ] || e . unknown ; b = { "class" : b , "data-cke-realelement" : encodeURIComponent ( a . getOuterHtml ( ) ) , "data-cke-real-node-type" : a . type ,
alt : e , title : e , align : a . getAttribute ( "align" ) || " "} ; CKEDITOR . env . hc || ( b . src = CKEDITOR . tools . transparentImageData ) ; c && ( b [ " data-cke-real- element-type" ] = c ) ; d && ( b [ "data-cke-resizable" ] = d , c = new k , d = a . getAttribute ( "width" ) , a = a . getAttribute ( "height" ) , d && ( c . rules . width = h ( d ) ) , a && ( c . rules . height = h ( a ) ) , c . populate ( b ) ) ; return this . document . createElement ( "img" , { attributes : b } ) } ; CKEDITOR . editor . prototype . createFakeParserElement = function ( a , b , c , d ) { var e = this . lang . fakeobjects , e = e [ c ] || e . unknown , f ; f = new CKEDITOR . htmlParser . basicWriter ;
a . writeHtml ( f ) ; f = f . getHtml ( ) ; b = { "class" : b , "data-cke-realelement" : encodeURIComponent ( f ) , "data-cke-real-node-type" : a . type , alt : e , title : e , align : a . attributes . align || "" } ; CKEDITOR . env . hc || ( b . src = CKEDITOR . tools . transparentImageData ) ; c && ( b [ "data-cke-real-element-type" ] = c ) ; d && ( b [ "data-cke-resizable" ] = d , d = a . attributes , a = new k , c = d . width , d = d . height , void 0 !== c && ( a . rules . width = h ( c ) ) , void 0 !== d && ( a . rules . height = h ( d ) ) , a . populate ( b ) ) ; return new CKEDITOR . htmlParser . element ( "img" , b ) } ; CKEDITOR . editor . prototype . restoreRealElement =
function ( a ) { if ( a . data ( "cke-real-node-type" ) != CKEDITOR . NODE _ELEMENT ) return null ; var b = CKEDITOR . dom . element . createFromHtml ( decodeURIComponent ( a . data ( " cke-realelement" ) ) , this . document ) ; if ( a . data ( "cke-resizable" ) ) { var c = a . getStyle ( "width" ) ; a = a . getStyle ( "height" ) ; c && b . setAttribute ( "width" , g ( b . getAttribute ( "width" ) , c ) ) ; a && b . setAttribute ( "height" , g ( b . getAttribute ( "height" ) , a ) ) } return b } } ) ( ) ; ( function ( ) { function k ( a ) { var l = a . config , p = a . fire ( "uiSpace" , { space : "top" , html : "" } ) . html , t = function ( ) { function f ( a , c , e ) { b . setStyle ( c , w ( e ) ) ; b . setStyle ( "position" , a ) } function e ( a ) { var b = k . getDocumentPosition ( ) ; switch ( a ) { case "top" : f ( "absolute" , "top" , b . y - q - r ) ; break ; case "pin" : f ( "fixed" , "top" , x ) ; break ; case "bottom" : f ( "absolute" , "top" , b . y + ( c . height || c . bottom - c . top ) + r ) } m = a } var m , k , n , c , h , q , v , p = l . floatSpaceDockedOffsetX || 0 , r = l . floatSpaceDockedOffsetY || 0 , u = l . floatSpacePinnedOffsetX || 0 , x = l . floatSpacePinnedOffsetY ||
CKEDITOR . config . entities _additional = "#39" ; ( 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 ) ,
"data-cke-real-node-type" : b . type , alt : e , title : e , align : b . attributes . align || "" } ; CKEDITOR . env . hc || ( a . src = CKEDITOR . tools . transparentImageData ) ; c && ( a [ "data- cke-real- element-type" ] = c ) ; d && ( a [ "data-cke-resizable" ] = d , d = b . attributes , b = new h , c = d . width , d = d . height , void 0 !== c && ( b . rules . width = g ( c ) ) , void 0 !== d && ( b . rules . height = g ( d ) ) , b . populate ( a ) ) ; return new CKEDITOR . htmlParser . element ( "img" , a ) } ; CKEDITOR . editor . prototype . restoreRealElement = function ( b ) { if ( b . data ( "cke-real-node-type" ) != CKEDITOR . NODE _ELEMENT ) return null ;
var a = decodeURIComponent ( b . data ( "cke-realelement" ) ) , a = l ( this , a ) , a = CKEDITOR . dom . element . createFromHtml ( a , this . document ) ; if ( b . data ( "cke-resizable" ) ) { var c = b . getStyle ( "width" ) ; b = b . getStyle ( "height" ) ; c && a . setAttribute ( "width" , f ( a . getAttribute ( "width" ) , c ) ) ; b && a . setAttribute ( "height" , f ( a . getAttribute ( "height" ) , b ) ) } return a } } ) ( ) ; ( function ( ) { function k ( a ) { var l = a . config , p = a . fire ( "uiSpace" , { space : "top" , html : "" } ) . html , t = function ( ) { function f ( a , c , e ) { b . setStyle ( c , w ( e ) ) ; b . setStyle ( "position" , a ) } function e ( a ) { var b = k . getDocumentPosition ( ) ; switch ( a ) { case "top" : f ( "absolute" , "top" , b . y - q - r ) ; break ; case "pin" : f ( "fixed" , "top" , x ) ; break ; case "bottom" : f ( "absolute" , "top" , b . y + ( c . height || c . bottom - c . top ) + r ) } m = a } var m , k , n , c , h , q , v , p = l . floatSpaceDockedOffsetX || 0 , r = l . floatSpaceDockedOffsetY || 0 , u = l . floatSpacePinnedOffsetX || 0 , x = l . floatSpacePinnedOffsetY ||
0 ; return function ( d ) { if ( k = a . editable ( ) ) { var f = d && "focus" == d . name ; f && b . show ( ) ; a . fire ( "floatingSpaceLayout" , { show : f } ) ; b . removeStyle ( "left" ) ; b . removeStyle ( "right" ) ; n = b . getClientRect ( ) ; c = k . getClientRect ( ) ; h = g . getViewPaneSize ( ) ; q = n . height ; v = "pageXOffset" in g . $ ? g . $ . pageXOffset : CKEDITOR . document . $ . documentElement . scrollLeft ; m ? ( q + r <= c . top ? e ( "top" ) : q + r > h . height - c . bottom ? e ( "pin" ) : e ( "bottom" ) , d = h . width / 2 , d = l . floatSpacePreferRight ? "right" : 0 < c . left && c . right < h . width && c . width > n . width ? "rtl" == l . contentsLangDirection ?
"right" : "left" : d - c . left > c . right - d ? "left" : "right" , n . width > h . width ? ( d = "left" , f = 0 ) : ( f = "left" == d ? 0 < c . left ? c . left : 0 : c . right < h . width ? h . width - c . right : 0 , f + n . width > h . width && ( d = "left" == d ? "right" : "left" , f = 0 ) ) , b . setStyle ( d , w ( ( "pin" == m ? u : p ) + f + ( "pin" == m ? 0 : "left" == d ? v : - v ) ) ) ) : ( m = "pin" , e ( "pin" ) , t ( d ) ) } } } ( ) ; if ( p ) { var k = new CKEDITOR . template ( '\x3cdiv id\x3d"cke_{name}" class\x3d"cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_float cke_{langDir} ' + CKEDITOR . env . cssClass + '" dir\x3d"{langDir}" title\x3d"' + ( CKEDITOR . env . gecko ?
" " : "" ) + '" lang\x3d"{langCode}" role\x3d"application" style\x3d"{style}"' + ( a . title ? ' aria-labelledby\x3d"cke_{name}_arialbl"' : " " ) + "\x3e" + ( a . title ? '\x3cspan id\x3d"cke_{name}_arialbl" class\x3d"cke_voice_label"\x3e{voiceLabel}\x3c/span\x3e' : " " ) + '\x3cdiv class\x3d"cke_inner"\x3e\x3cdiv id\x3d"{topId}" class\x3d"cke_top" role\x3d"presentation"\x3e{content}\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e' ) , b = CKEDITOR . document . getBody ( ) . append ( CKEDITOR . dom . element . createFromHtml ( k . output ( { content : p , id : a . id , langDir : a . lang . dir ,
@@ -890,16 +892,16 @@ d._.on=1;d.editorFocus&&!a.focusManager.hasFocus&&a.focus();if(d.onOpen)d.onOpen
b ) { this . _ . value = a ; var c = this . document . getById ( "cke_" + this . id + "_text" ) ; c && ( a || b ? c . removeClass ( "cke_combo_inlinelabel" ) : ( b = this . label , c . addClass ( "cke_combo_inlinelabel" ) ) , c . setText ( "undefined" != typeof b ? b : a ) ) ; var c = "undefined" != typeof b ? b : a , e = this . label , c = c === e ? c : c + ", " + e ; ( e = this . document . getById ( "cke_" + this . id + "_label" ) ) && e . setText ( c ) } , getValue : function ( ) { return this . _ . value || "" } , unmarkAll : function ( ) { this . _ . list . unmarkAll ( ) } , mark : function ( a ) { this . _ . list . mark ( a ) } , hideItem : function ( a ) { this . _ . list . hideItem ( a ) } ,
hideGroup : function ( a ) { this . _ . list . hideGroup ( a ) } , showAll : function ( ) { this . _ . list . showAll ( ) } , add : function ( a , b , c ) { this . _ . items [ a ] = c || a ; this . _ . list . add ( a , b , c ) } , startGroup : function ( a ) { this . _ . list . startGroup ( a ) } , commit : function ( ) { this . _ . committed || ( this . _ . list . commit ( ) , this . _ . committed = 1 , CKEDITOR . ui . fire ( "ready" , this ) ) ; this . _ . committed = 1 } , setState : function ( a ) { if ( this . _ . state != a ) { var b = this . document . getById ( "cke_" + this . id ) , c = b . getElementsByTag ( "a" ) . getItem ( 0 ) ; b . setState ( a , "cke_combo" ) ; a == CKEDITOR . TRISTATE _DISABLED ?
b . setAttribute ( "aria-disabled" , ! 0 ) : b . removeAttribute ( "aria-disabled" ) ; c && c . setAttribute ( "aria-expanded" , a == CKEDITOR . TRISTATE _ON ) ; this . _ . state = a } } , getState : function ( ) { return this . _ . state } , enable : function ( ) { this . _ . state == CKEDITOR . TRISTATE _DISABLED && this . setState ( this . _ . lastState ) } , disable : function ( ) { this . _ . state != CKEDITOR . TRISTATE _DISABLED && ( this . _ . lastState = this . _ . state , this . setState ( CKEDITOR . TRISTATE _DISABLED ) ) } , destroy : function ( ) { CKEDITOR . tools . array . forEach ( this . _ . listeners , function ( a ) { a . removeListener ( ) } ) ;
this . _ . listeners = [ ] } , select : function ( a ) { if ( ! CKEDITOR . tools . isEmpty ( this . _ . items ) ) for ( var b in this . _ . items ) if ( a ( { value : b , text : this . _ . items [ b ] } ) ) { this . setValue ( b ) ; break } } } , statics : { handler : { create : function ( a ) { return new CKEDITOR . ui . richCombo ( a ) } } } } ) ; CKEDITOR . ui . prototype . addRichCombo = function ( a , b ) { this . add ( a , CKEDITOR . UI _RICHCOMBO , b ) } } ) ( ) ; ( function ( ) { function k ( a , b ) { var c = a . config , d = b . lang , e = new CKEDITOR . style ( b . styleDefinition ) , f = new l ( { entries : b . entries , styleVariable : b . styleVariable , styleDefinition : b . styleDefinition } ) , g ; a . addCommand ( b . commandName , { exec : function ( a , b ) { var c = b . newStyle , d = b . oldStyle , e = a . getSelection ( ) . getRanges ( ) [ 0 ] , f = void 0 === c ; if ( d || c ) if ( d && e . collapsed && m ( { editor : a , range : e , style : d } ) , f ) a . removeStyle ( d ) ; else { if ( e = d ) e = d instanceof CKEDITOR . style && c instanceof CKEDITOR . style ? CKEDITOR . style . getStyleText ( d . getDefinition ( ) ) ===
CKEDITOR . style . getStyleText ( c . getDefinition ( ) ) : ! 1 , e = ! e ; e && a . removeStyle ( d ) ; a . applyStyle ( c ) } } , refresh : function ( a , b ) { e . checkApplicable ( b , a , a . activeFilter ) || this . setState ( CKEDITOR . TRISTATE _DISABLED ) } } ) ; g = a . getCommand ( b . commandName ) ; a . ui . addRichCombo ( b . comboName , { label : d . label , title : d . panelTitle , command : b . commandName , toolbar : "styles," + b . order , defaultValue : "cke-default" , allowedContent : e , requiredContent : e , contentTransformations : "span" === b . styleDefinition . element ? [ [ { element : "font" , check : "span" , left : function ( a ) { return ! ! a . attributes . size ||
! ! a . attributes . align || ! ! a . attributes . face } , right : function ( a ) { var b = " x-small small medium large x-large xx-large 48px" . split ( " " ) ; a . name = "span" ; a . attributes . size && ( a . styles [ "font-size" ] = b [ a . attributes . size ] , delete a . attributes . size ) ; a . attributes . align && ( a . styles [ "text-align" ] = a . attributes . align , delete a . attributes . align ) ; a . attributes . face && ( a . styles [ "font-family" ] = a . attributes . face , delete a . attributes . face ) } } ] ] : null , panel : { css : [ CKEDITOR . skin . getPath ( "editor" ) ] . concat ( c . contentsCss ) , multiSelect : ! 1 ,
attributes : { "aria-label" : d . panelTitle } } , init : function ( ) { var b = "(" + a . lang . common . optionDefault + ")" ; this . startGroup ( d . panelTitle ) ; this . add ( this . defaultValue , b , b ) ; f . addToCombo ( this ) } , onClick : function ( c ) { var d = this . getValue ( ) ; a . focus ( ) ; a . fire ( "saveSnapshot" ) ; a . execCommand ( b . commandName , { newStyle : f . getStyle ( c ) , oldStyle : f . getStyle ( d ) } ) ; a . fire ( "saveSnapshot" ) } , onRender : function ( ) { a . on ( "selectionChange" , function ( c ) { var d = this . getValue ( ) ; ( c = f . getMatchingValue ( a , c . data . path ) ) ? c != d && this . setValue ( c ) : this . setValue ( "" ,
b . defaultLabel ) } , this ) ; g . on ( "state" , function ( ) { this . setState ( g . state ) } , this ) } , refresh : function ( ) { this . setState ( g . state ) } } ) } function m ( a ) { var b = a . editor , c = a . range , d = a . style , e , f , g ; e = b . elementPath ( ) ; if ( a = e . contains ( function ( a ) { return d . checkElementRemovable ( a ) } ) ) { f = c . checkBoundaryOfElement ( a , CKEDITOR . START ) ; g = c . checkBoundaryOfElement ( a , CKEDITOR . END ) ; if ( f && g ) { for ( f = c . createBookmark ( ) ; e = a . getFirst ( ) ; ) e . insertBefore ( a ) ; a . remove ( ) ; c . moveToBookmark ( f ) } else f || g ? c . moveToPosition ( a , f ? CKEDITOR . POSITION _BEFORE _START :
CKEDITOR . POSITION _AFTER _END ) : ( c . splitElement ( a ) , c . moveToPosition ( a , CKEDITOR . POSITION _AFTER _END ) ) , h ( c , e . elements . slice ( ) , a ) ; b . getSelection ( ) . selectRanges ( [ c ] ) } } function h ( a , b , c ) { var d = b . pop ( ) ; if ( d ) { if ( c ) return h ( a , b , d . equals ( c ) ? null : c ) ; c = d . clone ( ) ; a . insertNode ( c ) ; a . moveToPosition ( c , CKEDITOR . POSITION _AFTER _START ) ; h ( a , b ) } } var l = CKEDITOR . tools . createClass ( { $ : function ( a ) { var b = a . entries . split ( ";" ) ; this . _ . data = { } ; this . _ . names = [ ] ; for ( var c = 0 ; c < b . length ; c ++ ) { var d = b [ c ] , e , f ; d ? ( d = d . split ( "/" ) , e = d [ 0 ] , d = d [ 1 ] ,
f = { } , f [ a . styleVariable ] = d || e , this . _ . data [ e ] = new CKEDITOR . style ( a . styleDefinition , f ) , this . _ . data [ e ] . _ . definition . name = e , this . _ . names . push ( e ) ) : ( b . splice ( c , 1 ) , c -- ) } } , proto : { getStyle : function ( a ) { return this . _ . data [ a ] } , addToCombo : function ( a ) { for ( var b = 0 ; b < this . _ . names . length ; b ++ ) { var c = this . _ . names [ b ] ; a . add ( c , this . getStyle ( c ) . buildPreview ( ) , c ) } } , getMatchingValue : function ( a , b ) { for ( var c = b . elements , d = 0 , e ; d < c . length ; d ++ ) if ( e = c [ d ] , e = this . _ . findMatchingStyleName ( a , e ) ) return e ; return null } } , _ : { findMatchingStyleName : function ( a ,
b ) { return CKEDITOR . tools . array . find ( this . _ . names , function ( c ) { return this . getStyle ( c ) . checkElementMatch ( b , ! 0 , a ) } , this ) } } } ) ; CKEDITOR . plugins . add ( "font" , { requires : "richcombo" , init : function ( a ) { var b = a . config ; k ( a , { comboName : "Font" , commandName : "font" , styleVariable : "family" , lang : a . lang . font , entries : b . font _names , defaultLabel : b . font _defaultLabel , styleDefinition : b . font _style , order : 30 } ) ; k ( a , { comboName : "FontSize" , commandName : "fontSize" , styleVariable : "size" , lang : a . lang . font . fontSize , entries : b . fontSize _sizes , defaultLabel : b . fontSize _defaultLabel ,
styleDefinition : b . fontSize _style , order : 40 } ) } } ) } ) ( ) ; CKEDITOR . config . font _names = "Arial/Arial, Helvetica, sans-serif;Comic Sans MS/Comic Sans MS, cursive;Courier New/Courier New, Courier, monospace;Georgia/Georgia, serif;Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;Tahoma/Tahoma, Geneva, sans-serif;Times New Roman/Times New Roman, Times, serif;Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;Verdana/Verdana, Geneva, sans-serif" ; CKEDITOR . config . font _defaultLabel = "" ;
CKEDITOR . config . font _style = { element : "span" , styles : { "font-family" : "#(family)" } , overrides : [ { element : "font" , attributes : { face : null } } ] } ; CKEDITOR . config . fontSize _sizes = "8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px" ; CKEDITOR . config . fontSize _defaultLabel = "" ; CKEDITOR . config . fontSize _style = { element : "span" , styles : { "font-size" : "#(size)" } , overrides : [ { element : "font" , attributes : { size : null } } ] } ; CKEDITOR . plugins . add ( "format" , { requires : "richcombo" , init : function ( a ) { if ( ! a . blockless ) { for ( var f = a . config , c = a . lang . format , l = f . format _tags . split ( ";" ) , d = { } , m = 0 , n = [ ] , g = 0 ; g < l . length ; g ++ ) { var h = l [ g ] , k = new CKEDITOR . style ( f [ "format_" + h ] ) ; if ( ! a . filter . customConfig || a . filter . check ( k ) ) m ++ , d [ h ] = k , d [ h ] . _ . enterMode = a . config . enterMode , n . push ( k ) } 0 !== m && a . ui . addRichCombo ( "Format" , { label : c . label , title : c . panelTitle , toolbar : "styles,20" , allowedContent : n , panel : { css : [ CKEDITOR . skin . getPath ( "editor" ) ] . concat ( f . contentsCss ) ,
this . _ . listeners = [ ] } , select : function ( a ) { if ( ! CKEDITOR . tools . isEmpty ( this . _ . items ) ) for ( var b in this . _ . items ) if ( a ( { value : b , text : this . _ . items [ b ] } ) ) { this . setValue ( b ) ; break } } } , statics : { handler : { create : function ( a ) { return new CKEDITOR . ui . richCombo ( a ) } } } } ) ; CKEDITOR . ui . prototype . addRichCombo = function ( a , b ) { this . add ( a , CKEDITOR . UI _RICHCOMBO , b ) } } ) ( ) ; ( function ( ) { function k ( a , b ) { var c = a . config , e = b . lang , d = new CKEDITOR . style ( b . styleDefinition ) , f = new l ( { entries : b . entries , styleVariable : b . styleVariable , styleDefinition : b . styleDefinition } ) , g ; a . addCommand ( b . commandName , { exec : function ( a , b ) { var c = b . newStyle , d = b . oldStyle , e = a . getSelection ( ) . getRanges ( ) [ 0 ] , f = void 0 === c ; if ( d || c ) d && e . collapsed && m ( { editor : a , range : e , style : d } ) , f ? a . removeStyle ( d ) : ( d && ! n ( d , c ) && a . removeStyle ( d ) , a . applyStyle ( c ) ) } , refresh : function ( a , b ) { d . checkApplicable ( b , a , a . activeFilter ) || this . setState ( CKEDITOR . TRISTATE _DISABLED ) } } ) ;
g = a . getCommand ( b . commandName ) ; a . ui . addRichCombo ( b . comboName , { label : e . label , title : e . panelTitle , command : b . commandName , toolbar : "styles," + b . order , defaultValue : "cke-default" , allowedContent : d , requiredContent : d , contentTransformations : "span" === b . styleDefinition . element ? [ [ { element : "font" , check : "span" , left : function ( a ) { return ! ! a . attributes . size || ! ! a . attributes . align || ! ! a . attributes . face } , right : function ( a ) { var b = " x-small small medium large x-large xx-large 48px" . split ( " " ) ; a . name = "span" ; a . attributes . size && ( a . styles [ "font-size" ] =
b [ a . attributes . size ] , delete a . attributes . size ) ; a . attributes . align && ( a . styles [ "text-align" ] = a . attributes . align , delete a . attributes . align ) ; a . attributes . face && ( a . styles [ "font-family" ] = a . attributes . face , delete a . attributes . face ) } } ] ] : null , panel : { css : [ CKEDITOR . skin . getPath ( "editor" ) ] . concat ( c . contentsCss ) , multiSelect : ! 1 , attributes : { "aria-label" : e . panelTitle } } , init : function ( ) { var b = "(" + a . lang . common . optionDefault + ")" ; this . startGroup ( e . panelTitle ) ; this . add ( this . defaultValue , b , b ) ; f . addToCombo ( this ) } , onClick : function ( c ) { var d =
this . getValue ( ) ; a . focus ( ) ; a . fire ( "saveSnapshot" ) ; a . execCommand ( b . commandName , { newStyle : f . getStyle ( c ) , oldStyle : f . getStyle ( d ) } ) ; a . fire ( "saveSnapshot" ) } , onRender : function ( ) { a . on ( "selectionChange" , function ( c ) { var d = this . getValue ( ) ; ( c = f . getMatchingValue ( a , c . data . path ) ) ? c != d && this . setValue ( c ) : this . setValue ( "" , b . defaultLabel ) } , this ) ; g . on ( "state" , function ( ) { this . setState ( g . state ) } , this ) } , refresh : function ( ) { this . setState ( g . state ) } } ) } function n ( a , b ) { if ( ! ( a instanceof CKEDITOR . style && b instanceof CKEDITOR . style ) ) return ! 1 ;
var c = function ( a , b ) { var c = a . getDefinition ( ) . attributes , e = b . getDefinition ( ) . attributes ; return CKEDITOR . tools . objectCompare ( c , e ) } ( a , b ) , e = function ( a , b ) { return CKEDITOR . style . getStyleText ( a . getDefinition ( ) ) === CKEDITOR . style . getStyleText ( b . getDefinition ( ) ) } ( a , b ) ; return c && e } function m ( a ) { var b = a . editor , c = a . range , e = a . style , d , f , g ; d = b . elementPath ( ) ; if ( a = d . contains ( function ( a ) { return e . checkElementRemovable ( a ) } ) ) { f = c . checkBoundaryOfElement ( a , CKEDITOR . START ) ; g = c . checkBoundaryOfElement ( a , CKEDITOR . END ) ; if ( f &&
g ) { for ( f = c . createBookmark ( ) ; d = a . getFirst ( ) ; ) d . insertBefore ( a ) ; a . remove ( ) ; c . moveToBookmark ( f ) } else f || g ? c . moveToPosition ( a , f ? CKEDITOR . POSITION _BEFORE _START : CKEDITOR . POSITION _AFTER _END ) : ( c . splitElement ( a ) , c . moveToPosition ( a , CKEDITOR . POSITION _AFTER _END ) ) , h ( c , d . elements . slice ( ) , a ) ; b . getSelection ( ) . selectRanges ( [ c ] ) } } function h ( a , b , c ) { var e = b . pop ( ) ; if ( e ) { if ( c ) return h ( a , b , e . equals ( c ) ? null : c ) ; c = e . clone ( ) ; a . insertNode ( c ) ; a . moveToPosition ( c , CKEDITOR . POSITION _AFTER _START ) ; h ( a , b ) } } var l = CKEDITOR . tools . createClass ( { $ : function ( a ) { var b =
a . entries . split ( ";" ) ; this . _ . data = { } ; this . _ . names = [ ] ; for ( var c = 0 ; c < b . length ; c ++ ) { var e = b [ c ] , d , f ; e ? ( e = e . split ( "/" ) , d = e [ 0 ] , e = e [ 1 ] , f = { } , f [ a . styleVariable ] = e || d , this . _ . data [ d ] = new CKEDITOR . style ( a . styleDefinition , f ) , this . _ . data [ d ] . _ . definition . name = d , this . _ . names . push ( d ) ) : ( b . splice ( c , 1 ) , c -- ) } } , proto : { getStyle : function ( a ) { return this . _ . data [ a ] } , addToCombo : function ( a ) { for ( var b = 0 ; b < this . _ . names . length ; b ++ ) { var c = this . _ . names [ b ] ; a . add ( c , this . getStyle ( c ) . buildPreview ( ) , c ) } } , getMatchingValue : function ( a , b ) { for ( var c =
b . elements , e = 0 , d ; e < c . length ; e ++ ) if ( d = c [ e ] , d = this . _ . findMatchingStyleName ( a , d ) ) return d ; return null } } , _ : { findMatchingStyleName : function ( a , b ) { return CKEDITOR . tools . array . find ( this . _ . names , function ( c ) { return this . getStyle ( c ) . checkElementMatch ( b , ! 0 , a ) } , this ) } } } ) ; CKEDITOR . plugins . add ( "font" , { requires : "richcombo" , init : function ( a ) { var b = a . config ; k ( a , { comboName : "Font" , commandName : "font" , styleVariable : "family" , lang : a . lang . font , entries : b . font _names , defaultLabel : b . font _defaultLabel , styleDefinition : b . font _style ,
order : 30 } ) ; k ( a , { comboName : "FontSize" , commandName : "fontSize" , styleVariable : "size" , lang : a . lang . font . fontSize , entries : b . fontSize _sizes , defaultLabel : b . fontSize _defaultLabel , styleDefinition : b . fontSize _style , order : 40 } ) } } ) } ) ( ) ; CKEDITOR . config . font _names = "Arial/Arial, Helvetica, sans-serif;Comic Sans MS/Comic Sans MS, cursive;Courier New/Courier New, Courier, monospace;Georgia/Georgia, serif;Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;Tahoma/Tahoma, Geneva, sans-serif;Times New Roman/Times New Roman, Times, serif;Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;Verdana/Verdana, Geneva, sans-serif" ;
CKEDITOR . config . font _defaultLabel = "" ; CKEDITOR . config . font _style = { element : "span" , styles : { "font-family" : "#(family)" } , overrides : [ { element : "font" , attributes : { face : null } } ] } ; CKEDITOR . config . fontSize _sizes = "8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px" ; CKEDITOR . config . fontSize _defaultLabel = "" ; CKEDITOR . config . fontSize _style = { element : "span" , styles : { "font-size" : "#(size)" } , overrides : [ { element : "font" , attributes : { size : null } } ] } ; CKEDITOR . plugins . add ( "format" , { requires : "richcombo" , init : function ( a ) { if ( ! a . blockless ) { for ( var f = a . config , c = a . lang . format , l = f . format _tags . split ( ";" ) , d = { } , m = 0 , n = [ ] , g = 0 ; g < l . length ; g ++ ) { var h = l [ g ] , k = new CKEDITOR . style ( f [ "format_" + h ] ) ; if ( ! a . filter . customConfig || a . filter . check ( k ) ) m ++ , d [ h ] = k , d [ h ] . _ . enterMode = a . config . enterMode , n . push ( k ) } 0 !== m && a . ui . addRichCombo ( "Format" , { label : c . label , title : c . panelTitle , toolbar : "styles,20" , allowedContent : n , panel : { css : [ CKEDITOR . skin . getPath ( "editor" ) ] . concat ( f . contentsCss ) ,
multiSelect : ! 1 , attributes : { "aria-label" : c . panelTitle } } , init : function ( ) { this . startGroup ( c . panelTitle ) ; for ( var a in d ) { var e = c [ "tag_" + a ] ; this . add ( a , d [ a ] . buildPreview ( e ) , e ) } } , onClick : function ( b ) { a . focus ( ) ; a . fire ( "saveSnapshot" ) ; b = d [ b ] ; var e = a . elementPath ( ) ; a . fire ( "stylesRemove" , { type : CKEDITOR . STYLE _BLOCK } ) ; b . checkActive ( e , a ) || a . applyStyle ( b ) ; setTimeout ( function ( ) { a . fire ( "saveSnapshot" ) } , 0 ) } , onRender : function ( ) { a . on ( "selectionChange" , function ( b ) { var e = this . getValue ( ) ; b = b . data . path ; this . refresh ( ) ; for ( var c in d ) if ( d [ c ] . checkActive ( b ,
a ) ) { c != e && this . setValue ( c , a . lang . format [ "tag_" + c ] ) ; return } this . setValue ( "" ) } , this ) } , onOpen : function ( ) { this . showAll ( ) ; for ( var b in d ) a . activeFilter . check ( d [ b ] ) || this . hideItem ( b ) } , refresh : function ( ) { var b = a . elementPath ( ) ; if ( b ) { if ( b . isContextFor ( "p" ) ) for ( var c in d ) if ( a . activeFilter . check ( d [ c ] ) ) return ; this . setState ( CKEDITOR . TRISTATE _DISABLED ) } } } ) } } } ) ; CKEDITOR . config . format _tags = "p;h1;h2;h3;h4;h5;h6;pre;address;div" ; CKEDITOR . config . format _p = { element : "p" } ; CKEDITOR . config . format _div = { element : "div" } ;
CKEDITOR . config . format _pre = { element : "pre" } ; CKEDITOR . config . format _address = { element : "address" } ; CKEDITOR . config . format _h1 = { element : "h1" } ; CKEDITOR . config . format _h2 = { element : "h2" } ; CKEDITOR . config . format _h3 = { element : "h3" } ; CKEDITOR . config . format _h4 = { element : "h4" } ; CKEDITOR . config . format _h5 = { element : "h5" } ; CKEDITOR . config . format _h6 = { element : "h6" } ; ( function ( ) { function e ( b , a ) { a || ( a = b . getSelection ( ) . getSelectedElement ( ) ) ; if ( a && a . is ( "img" ) && ! a . data ( "cke-realelement" ) && ! a . isReadOnly ( ) ) return a } function f ( b ) { var a = b . getStyle ( "float" ) ; if ( "inherit" == a || "none" == a ) a = 0 ; a || ( a = b . getAttribute ( "align" ) ) ; return a } CKEDITOR . plugins . add ( "image" , { requires : "dialog" , init : function ( b ) { if ( ! b . plugins . detectConflict ( "image" , [ "easyimage" , "image2" ] ) ) { CKEDITOR . dialog . add ( "image" , this . path + "dialogs/image.js" ) ; var a = "img[alt,!src]{border-style,border-width,float,height,margin,margin-bottom,margin-left,margin-right,margin-top,width}" ;
@@ -1005,17 +1007,17 @@ a.scayt)&&b.setMarkupPaused&&b.setMarkupPaused(!0)});a.on("autocompletePanelHide
( a . config . scayt _inlineModeImmediateMarkup = ! 1 ) ; c . state . grayt [ a . name ] = a . config . grayt _autoStartup ; a . config . scayt _contextCommands || ( a . config . scayt _contextCommands = "ignoreall|add" ) ; a . config . scayt _contextMenuItemsOrder || ( a . config . scayt _contextMenuItemsOrder = "suggest|moresuggest|control" ) ; a . config . scayt _sLang || ( a . config . scayt _sLang = "en_US" ) ; if ( void 0 === a . config . scayt _maxSuggestions || "number" != typeof a . config . scayt _maxSuggestions || 0 > a . config . scayt _maxSuggestions ) a . config . scayt _maxSuggestions = 3 ; if ( void 0 ===
a . config . scayt _minWordLength || "number" != typeof a . config . scayt _minWordLength || 1 > a . config . scayt _minWordLength ) a . config . scayt _minWordLength = 3 ; if ( void 0 === a . config . scayt _customDictionaryIds || "string" !== typeof a . config . scayt _customDictionaryIds ) a . config . scayt _customDictionaryIds = "" ; if ( void 0 === a . config . scayt _userDictionaryName || "string" !== typeof a . config . scayt _userDictionaryName ) a . config . scayt _userDictionaryName = null ; if ( "string" === typeof a . config . scayt _uiTabs && 3 === a . config . scayt _uiTabs . split ( "," ) . length ) { var d =
[ ] , b = [ ] ; a . config . scayt _uiTabs = a . config . scayt _uiTabs . split ( "," ) ; CKEDITOR . tools . search ( a . config . scayt _uiTabs , function ( a ) { 1 === Number ( a ) || 0 === Number ( a ) ? ( b . push ( ! 0 ) , d . push ( Number ( a ) ) ) : b . push ( ! 1 ) } ) ; null === CKEDITOR . tools . search ( b , ! 1 ) ? a . config . scayt _uiTabs = d : a . config . scayt _uiTabs = [ 1 , 1 , 1 ] } else a . config . scayt _uiTabs = [ 1 , 1 , 1 ] ; "string" != typeof a . config . scayt _serviceProtocol && ( a . config . scayt _serviceProtocol = null ) ; "string" != typeof a . config . scayt _serviceHost && ( a . config . scayt _serviceHost = null ) ; "string" != typeof a . config . scayt _servicePort &&
( a . config . scayt _servicePort = null ) ; "string" != typeof a . config . scayt _servicePath && ( a . config . scayt _servicePath = null ) ; a . config . scayt _moreSuggestions || ( a . config . scayt _moreSuggestions = "on" ) ; "string" !== typeof a . config . scayt _customerId && ( a . config . scayt _customerId = "1:WvF0D4-UtPqN1-43nkD4-NKvUm2-daQqk3-LmNiI-z7Ysb4-mwry24-T8YrS3-Q2tpq2" ) ; "string" !== typeof a . config . scayt _customPunctuation && ( a . config . scayt _customPunctuation = "-" ) ; "string" !== typeof a . config . scayt _srcUrl && ( c = document . location . protocol , c = - 1 != c . search ( / https? :/) ?
c : "http:" , a . config . scayt _srcUrl = c + "//svc.webspellchecker.net/spellcheck31/wscbundle/wscbundle.js" ) ; "boolean" !== typeof CKEDITOR . config . scayt _handleCheckDirty && ( CKEDITOR . config . scayt _handleCheckDirty = ! 0 ) ; "boolean" !== typeof CKEDITOR . config . scayt _handleUndoRedo && ( CKEDITOR . config . scayt _handleUndoRedo = ! 0 ) ; CKEDITOR . config . scayt _handleUndoRedo = CKEDITOR . plugins . undo ? CKEDITOR . config . scayt _handleUndoRedo : ! 1 ; a . config . scayt _ignoreAllCapsWords && "boolean" !== typeof a . config . scayt _ignoreAllCapsWords && ( a . config . scayt _ignoreAllCapsWords =
! 1 ) ; a . config . scayt _ignoreDomainNames && "boolean" !== typeof a . config . scayt _ignoreDomainNames && ( a . config . scayt _ignoreDomainNames = ! 1 ) ; a . config . scayt _ignoreWordsWithMixedCases && "boolean" !== typeof a . config . scayt _ignoreWordsWithMixedCases && ( a . config . scayt _ignoreWordsWithMixedCases = ! 1 ) ; a . config . scayt _ignoreWordsWithNumbers && "boolean" !== typeof a . config . scayt _ignoreWordsWithNumbers && ( a . config . scayt _ignoreWordsWithNumbers = ! 1 ) ; if ( a . config . scayt _disableOptionsStorage ) { var c = CKEDITOR . tools . isArray ( a . config . scayt _disableOptionsStorage ) ?
a . config . scayt _disableOptionsStorage : "string" === typeof a . config . scayt _disableOptionsStorage ? [ a . config . scayt _disableOptionsStorage ] : void 0 , e = "all options lang ignore-all-caps-words ignore-domain-names ignore-words-with-mixed-cases ignore-words-with-numbers" . split ( " " ) , f = [ "lang" , "ignore-all-caps-words" , "ignore-domain-names" , "ignore-words-with-mixed-cases" , "ignore-words-with-numbers" ] , g = CKEDITOR . tools . search , k = CKEDITOR . tools . indexOf ; a . config . scayt _disableOptionsStorage = function ( a ) { for ( var b = [ ] , d = 0 ; d <
a . length ; d ++ ) { var c = a [ d ] , p = ! ! g ( a , "options" ) ; if ( ! g ( e , c ) || p && g ( f , function ( a ) { if ( "lang" === a ) return ! 1 } ) ) return ; g ( f , c ) && f . splice ( k ( f , c ) , 1 ) ; if ( "all" === c || p && g ( a , "lang" ) ) return [ ] ; "options" === c && ( f = [ "lang" ] ) } return b = b . concat ( f ) } ( c ) } } , addRule : function ( a ) { var c = CKEDITOR . plugins . scayt , d = a . dataProcessor , b = d && d . htmlFilter , e = a . _ . elementsPath && a . _ . elementsPath . filters , d = d && d . dataFilter , f = a . addRemoveFormatFilter , g = function ( b ) { if ( a . scayt && ( b . hasAttribute ( c . options . data _attribute _name ) || b . hasAttribute ( c . options . problem _grammar _data _attribute ) ) ) return ! 1 } ,
k = function ( b ) { var d = ! 0 ; a . scayt && ( b . hasAttribute ( c . options . data _attribute _name ) || b . hasAttribute ( c . options . problem _grammar _data _attribute ) ) && ( d = ! 1 ) ; return d } ; e && e . push ( g ) ; d && d . addRules ( { elements : { span : function ( a ) { var b = a . hasClass ( c . options . misspelled _word _class ) && a . attributes [ c . options . data _attribute _name ] , d = a . hasClass ( c . options . problem _grammar _class ) && a . attributes [ c . options . problem _grammar _data _attribute ] ; c && ( b || d ) && delete a . name ; return a } } } ) ; b && b . addRules ( { elements : { span : function ( a ) { var b = a . hasClass ( c . options . misspelled _word _class ) &&
a . attributes [ c . options . data _attribute _name ] , d = a . hasClass ( c . options . problem _grammar _class ) && a . attributes [ c . options . problem _grammar _data _attribute ] ; c && ( b || d ) && delete a . name ; return a } } } ) ; f && f . call ( a , k ) } , scaytMenuDefinition : function ( a ) { var c = this , d = CKEDITOR . plugins . scayt ; a = a . scayt ; return { scayt : { scayt _ignore : { label : a . getLocal ( "btn_ignore" ) , group : "scayt_control" , order : 1 , exec : function ( a ) { a . scayt . ignoreWord ( ) } } , scayt _ignoreall : { label : a . getLocal ( "btn_ignoreAll" ) , group : "scayt_control" , order : 2 , exec : function ( a ) { a . scayt . ignoreAllWords ( ) } } ,
scayt _add : { label : a . getLocal ( "btn_addWord" ) , group : "scayt_control" , order : 3 , exec : function ( a ) { var d = a . scayt ; setTimeout ( function ( ) { d . addWordToUserDictionary ( ) } , 10 ) } } , scayt _option : { label : a . getLocal ( "btn_options" ) , group : "scayt_control" , order : 4 , exec : function ( a ) { a . scayt . tabToOpen = "options" ; d . openDialog ( c . dialogName , a ) } , verification : function ( a ) { return 1 == a . config . scayt _uiTabs [ 0 ] ? ! 0 : ! 1 } } , scayt _language : { label : a . getLocal ( "btn_langs" ) , group : "scayt_control" , order : 5 , exec : function ( a ) { a . scayt . tabToOpen = "langs" ; d . openDialog ( c . dialogName ,
a ) } , verification : function ( a ) { return 1 == a . config . scayt _uiTabs [ 1 ] ? ! 0 : ! 1 } } , scayt _dictionary : { label : a . getLocal ( "btn_dictionaries" ) , group : "scayt_control" , order : 6 , exec : function ( a ) { a . scayt . tabToOpen = "dictionaries" ; d . openDialog ( c . dialogName , a ) } , verification : function ( a ) { return 1 == a . config . scayt _uiTabs [ 2 ] ? ! 0 : ! 1 } } , scayt _about : { label : a . getLocal ( "btn_about" ) , group : "scayt_control" , order : 7 , exec : function ( a ) { a . scayt . tabToOpen = "about" ; d . openDialog ( c . dialogName , a ) } } } , grayt : { grayt _problemdescription : { label : "Grammar problem description" ,
group : "grayt_description" , order : 1 , state : CKEDITOR . TRISTATE _DISABLED , exec : function ( a ) { } } , grayt _ignore : { label : a . getLocal ( "btn_ignore" ) , group : "grayt_control" , order : 2 , exec : function ( a ) { a . scayt . ignorePhrase ( ) } } , grayt _ignoreall : { label : a . getLocal ( "btn_ignoreAll" ) , group : "grayt_control" , order : 3 , exec : function ( a ) { a . scayt . ignoreAllPhrases ( ) } } } } } , buildSuggestionMenuItems : function ( a , c , d ) { var b = { } , e = { } , f = d ? "word" : "phrase" , g = d ? "startGrammarCheck" : "startSpellCheck" , k = a . scayt ; if ( 0 < c . length && "no_any_suggestions" !== c [ 0 ] ) if ( d ) for ( d =
0 ; d < c . length ; d ++ ) { var l = "scayt_suggest_" + CKEDITOR . plugins . scayt . suggestions [ d ] . replace ( " " , "_" ) ; a . addCommand ( l , this . createCommand ( CKEDITOR . plugins . scayt . suggestions [ d ] , f , g ) ) ; d < a . config . scayt _maxSuggestions ? ( a . addMenuItem ( l , { label : c [ d ] , command : l , group : "scayt_suggest" , order : d + 1 } ) , b [ l ] = CKEDITOR . TRISTATE _OFF ) : ( a . addMenuItem ( l , { label : c [ d ] , command : l , group : "scayt_moresuggest" , order : d + 1 } ) , e [ l ] = CKEDITOR . TRISTATE _OFF , "on" === a . config . scayt _moreSuggestions && ( a . addMenuItem ( "scayt_moresuggest" , { label : k . getLocal ( "btn_moreSuggestions" ) ,
( a . config . scayt _servicePort = null ) ; "string" != typeof a . config . scayt _servicePath && ( a . config . scayt _servicePath = null ) ; a . config . scayt _moreSuggestions || ( a . config . scayt _moreSuggestions = "on" ) ; "string" !== typeof a . config . scayt _customerId && ( a . config . scayt _customerId = "1:WvF0D4-UtPqN1-43nkD4-NKvUm2-daQqk3-LmNiI-z7Ysb4-mwry24-T8YrS3-Q2tpq2" ) ; "string" !== typeof a . config . scayt _customPunctuation && ( a . config . scayt _customPunctuation = "-" ) ; "string" !== typeof a . config . scayt _srcUrl && ( a . config . scayt _srcUrl = " https://svc.webspellchecker.net/spellcheck31/wscbundle/wscbundle.js" ) ;
"boolean" !== typeof CKEDITOR . config . scayt _handleCheckDirty && ( CKEDITOR . config . scayt _handleCheckDirty = ! 0 ) ; "boolean" !== typeof CKEDITOR . config . scayt _handleUndoRedo && ( CKEDITOR . config . scayt _handleUndoRedo = ! 0 ) ; CKEDITOR . config . scayt _handleUndoRedo = CKEDITOR . plugins . undo ? CKEDITOR . config . scayt _handleUndoRedo : ! 1 ; a . config . scayt _ignoreAllCapsWords && "boolean" !== typeof a . config . scayt _ignoreAllCapsWords && ( a . config . scayt _ignoreAllCapsWords = ! 1 ) ; a . config . scayt _ignoreDomainNames && "boolean" !== typeof a . config . scayt _ignoreDomainNames &&
( a . config . scayt _ignoreDomainNames = ! 1 ) ; a . config . scayt _ignoreWordsWithMixedCases && "boolean" !== typeof a . config . scayt _ignoreWordsWithMixedCases && ( a . config . scayt _ignoreWordsWithMixedCases = ! 1 ) ; a . config . scayt _ignoreWordsWithNumbers && "boolean" !== typeof a . config . scayt _ignoreWordsWithNumbers && ( a . config . scayt _ignoreWordsWithNumbers = ! 1 ) ; if ( a . config . scayt _disableOptionsStorage ) { var c = CKEDITOR . tools . isArray ( a . config . scayt _disableOptionsStorage ) ? a . config . scayt _disableOptionsStorage : "string" === typeof a . config . scayt _disableOptionsStorage ?
[ a . config . scayt _disableOptionsStorage ] : void 0 , e = "all options lang ignore-all-caps-words ignore-domain-names ignore-words-with-mixed-cases ignore-words-with-numbers" . split ( " " ) , f = [ "lang" , "ignore-all-caps-words" , "ignore-domain-names" , "ignore-words-with-mixed-cases" , "ignore-words-with-numbers" ] , g = CKEDITOR . tools . search , k = CKEDITOR . tools . indexOf ; a . config . scayt _disableOptionsStorage = function ( a ) { for ( var b = [ ] , d = 0 ; d < a . length ; d ++ ) { var c = a [ d ] , p = ! ! g ( a , "options" ) ; if ( ! g ( e , c ) || p && g ( f , function ( a ) { if ( "lang" === a ) return ! 1 } ) ) return ;
g ( f , c ) && f . splice ( k ( f , c ) , 1 ) ; if ( "all" === c || p && g ( a , "lang" ) ) return [ ] ; "options" === c && ( f = [ "lang" ] ) } return b = b . concat ( f ) } ( c ) } } , addRule : function ( a ) { var c = CKEDITOR . plugins . scayt , d = a . dataProcessor , b = d && d . htmlFilter , e = a . _ . elementsPath && a . _ . elementsPath . filters , d = d && d . dataFilter , f = a . addRemoveFormatFilter , g = function ( b ) { if ( a . scayt && ( b . hasAttribute ( c . options . data _attribute _name ) || b . hasAttribute ( c . options . problem _grammar _data _attribute ) ) ) return ! 1 } , k = function ( b ) { var d = ! 0 ; a . scayt && ( b . hasAttribute ( c . options . data _attribute _name ) ||
b . hasAttribute ( c . options . problem _grammar _data _attribute ) ) && ( d = ! 1 ) ; return d } ; e && e . push ( g ) ; d && d . addRules ( { elements : { span : function ( a ) { var b = a . hasClass ( c . options . misspelled _word _class ) && a . attributes [ c . options . data _attribute _name ] , d = a . hasClass ( c . options . problem _grammar _class ) && a . attributes [ c . options . problem _grammar _data _attribute ] ; c && ( b || d ) && delete a . name ; return a } } } ) ; b && b . addRules ( { elements : { span : function ( a ) { var b = a . hasClass ( c . options . misspelled _word _class ) && a . attributes [ c . options . data _attribute _name ] ,
d = a . hasClass ( c . options . problem _grammar _class ) && a . attributes [ c . options . problem _grammar _data _attribute ] ; c && ( b || d ) && delete a . name ; return a } } } ) ; f && f . call ( a , k ) } , scaytMenuDefinition : function ( a ) { var c = this , d = CKEDITOR . plugins . scayt ; a = a . scayt ; return { scayt : { scayt _ignore : { label : a . getLocal ( "btn_ignore" ) , group : "scayt_control" , order : 1 , exec : function ( a ) { a . scayt . ignoreWord ( ) } } , scayt _ignoreall : { label : a . getLocal ( "btn_ignoreAll" ) , group : "scayt_control" , order : 2 , exec : function ( a ) { a . scayt . ignoreAllWords ( ) } } , scayt _add : { label : a . getLocal ( "btn_addWord" ) ,
group : "scayt_control" , order : 3 , exec : function ( a ) { var d = a . scayt ; setTimeout ( function ( ) { d . addWordToUserDictionary ( ) } , 10 ) } } , scayt _option : { label : a . getLocal ( "btn_options" ) , group : "scayt_control" , order : 4 , exec : function ( a ) { a . scayt . tabToOpen = "options" ; d . openDialog ( c . dialogName , a ) } , verification : function ( a ) { return 1 == a . config . scayt _uiTabs [ 0 ] ? ! 0 : ! 1 } } , scayt _language : { label : a . getLocal ( "btn_langs" ) , group : "scayt_control" , order : 5 , exec : function ( a ) { a . scayt . tabToOpen = "langs" ; d . openDialog ( c . dialogName , a ) } , verification : function ( a ) { return 1 ==
a . config . scayt _uiTabs [ 1 ] ? ! 0 : ! 1 } } , scayt _dictionary : { label : a . getLocal ( "btn_dictionaries" ) , group : "scayt_control" , order : 6 , exec : function ( a ) { a . scayt . tabToOpen = "dictionaries" ; d . openDialog ( c . dialogName , a ) } , verification : function ( a ) { return 1 == a . config . scayt _uiTabs [ 2 ] ? ! 0 : ! 1 } } , scayt _about : { label : a . getLocal ( "btn_about" ) , group : "scayt_control" , order : 7 , exec : function ( a ) { a . scayt . tabToOpen = "about" ; d . openDialog ( c . dialogName , a ) } } } , grayt : { grayt _problemdescription : { label : "Grammar problem description" , group : "grayt_description" ,
order : 1 , state : CKEDITOR . TRISTATE _DISABLED , exec : function ( a ) { } } , grayt _ignore : { label : a . getLocal ( "btn_ignore" ) , group : "grayt_control" , order : 2 , exec : function ( a ) { a . scayt . ignorePhrase ( ) } } , grayt _ignoreall : { label : a . getLocal ( "btn_ignoreAll" ) , group : "grayt_control" , order : 3 , exec : function ( a ) { a . scayt . ignoreAllPhrases ( ) } } } } } , buildSuggestionMenuItems : function ( a , c , d ) { var b = { } , e = { } , f = d ? "word" : "phrase" , g = d ? "startGrammarCheck" : "startSpellCheck" , k = a . scayt ; if ( 0 < c . length && "no_any_suggestions" !== c [ 0 ] ) if ( d ) for ( d = 0 ; d < c . length ; d ++ ) { var l =
"scayt_suggest_" + CKEDITOR . plugins . scayt . suggestions [ d ] . replace ( " " , "_" ) ; a . addCommand ( l , this . createCommand ( CKEDITOR . plugins . scayt . suggestions [ d ] , f , g ) ) ; d < a . config . scayt _maxSuggestions ? ( a . addMenuItem ( l , { label : c [ d ] , command : l , group : "scayt_suggest" , order : d + 1 } ) , b [ l ] = CKEDITOR . TRISTATE _OFF ) : ( a . addMenuItem ( l , { label : c [ d ] , command : l , group : "scayt_moresuggest" , order : d + 1 } ) , e [ l ] = CKEDITOR . TRISTATE _OFF , "on" === a . config . scayt _moreSuggestions && ( a . addMenuItem ( "scayt_moresuggest" , { label : k . getLocal ( "btn_moreSuggestions" ) ,
group : "scayt_moresuggest" , order : 10 , getItems : function ( ) { return e } } ) , b . scayt _moresuggest = CKEDITOR . TRISTATE _OFF ) ) } else for ( d = 0 ; d < c . length ; d ++ ) l = "grayt_suggest_" + CKEDITOR . plugins . scayt . suggestions [ d ] . replace ( " " , "_" ) , a . addCommand ( l , this . createCommand ( CKEDITOR . plugins . scayt . suggestions [ d ] , f , g ) ) , a . addMenuItem ( l , { label : c [ d ] , command : l , group : "grayt_suggest" , order : d + 1 } ) , b [ l ] = CKEDITOR . TRISTATE _OFF ; else b . no _scayt _suggest = CKEDITOR . TRISTATE _DISABLED , a . addCommand ( "no_scayt_suggest" , { exec : function ( ) { } } ) , a . addMenuItem ( "no_scayt_suggest" ,
{ label : k . getLocal ( "btn_noSuggestions" ) || "no_scayt_suggest" , command : "no_scayt_suggest" , group : "scayt_suggest" , order : 0 } ) ; return b } , menuGenerator : function ( a , c ) { var d = a . scayt , b = this . scaytMenuDefinition ( a ) , e = { } , f = a . config . scayt _contextCommands . split ( "|" ) , g = c . getAttribute ( d . getLangAttribute ( ) ) || d . getLang ( ) , k , l , m , n ; l = d . isScaytNode ( c ) ; m = d . isGraytNode ( c ) ; l ? ( b = b . scayt , k = c . getAttribute ( d . getScaytNodeAttributeName ( ) ) , d . fire ( "getSuggestionsList" , { lang : g , word : k } ) , e = this . buildSuggestionMenuItems ( a , CKEDITOR . plugins . scayt . suggestions ,
l ) ) : m && ( b = b . grayt , e = c . getAttribute ( d . getGraytNodeAttributeName ( ) ) , d . getGraytNodeRuleAttributeName ? ( k = c . getAttribute ( d . getGraytNodeRuleAttributeName ( ) ) , d . getProblemDescriptionText ( e , k , g ) ) : d . getProblemDescriptionText ( e , g ) , n = d . getProblemDescriptionText ( e , k , g ) , b . grayt _problemdescription && n && ( n = n . replace ( /([.!?])\s/g , "$1\x3cbr\x3e" ) , b . grayt _problemdescription . label = n ) , d . fire ( "getGrammarSuggestionsList" , { lang : g , phrase : e , rule : k } ) , e = this . buildSuggestionMenuItems ( a , CKEDITOR . plugins . scayt . suggestions , l ) ) ; if ( l &&
@@ -1154,22 +1156,22 @@ g.getClipboardHtml&&(k=CKEDITOR.htmlParser.fragment.fromHtml(g.getClipboardHtml(
CKEDITOR . NODE _ELEMENT && k . attributes [ "data-cke-widget-wrapper" ] && k . replaceWith ( l ) ; a . wrapElement ( g [ 0 ] , g [ 1 ] ) } c = b . data . protectedWhitespaces ? 3 == b . data . dataValue . children . length && h . isParserWidgetWrapper ( b . data . dataValue . children [ 1 ] ) : 1 == b . data . dataValue . children . length && h . isParserWidgetWrapper ( b . data . dataValue . children [ 0 ] ) } , null , null , 8 ) ; b . on ( "dataReady" , function ( ) { if ( d ) for ( var c = b . editable ( ) . find ( ".cke_widget_wrapper" ) , f , g , l = 0 , k = c . count ( ) ; l < k ; ++ l ) f = c . getItem ( l ) , g = f . getFirst ( h . isDomWidgetElement ) , g . type ==
CKEDITOR . NODE _ELEMENT && g . data ( "widget" ) ? ( g . replace ( f ) , a . wrapElement ( g ) ) : f . remove ( ) ; d = 0 ; a . destroyAll ( ! 0 ) ; a . initOnAll ( ) } ) ; b . on ( "loadSnapshot" , function ( b ) { /data-cke-widget/ . test ( b . data ) && ( d = 1 ) ; a . destroyAll ( ! 0 ) } , null , null , 9 ) ; b . on ( "paste" , function ( a ) { a = a . data ; a . dataValue = a . dataValue . replace ( fa , ea ) ; a . range && ( a = h . getNestedEditable ( b . editable ( ) , a . range . startContainer ) ) && ( a = CKEDITOR . filter . instances [ a . data ( "cke-filter" ) ] ) && b . setActiveFilter ( a ) } ) ; b . on ( "afterInsertHtml" , function ( d ) { d . data . intoRange ? a . checkWidgets ( { initOnlyNew : ! 0 } ) :
( b . fire ( "lockSnapshot" ) , a . checkWidgets ( { initOnlyNew : ! 0 , focusInited : c } ) , b . fire ( "unlockSnapshot" ) ) } ) } function H ( a ) { var b = a . selected , c = [ ] , d = b . slice ( 0 ) , e = null ; return { select : function ( a ) { 0 > CKEDITOR . tools . indexOf ( b , a ) && c . push ( a ) ; a = CKEDITOR . tools . indexOf ( d , a ) ; 0 <= a && d . splice ( a , 1 ) ; return this } , focus : function ( a ) { e = a ; return this } , commit : function ( ) { var f = a . focused !== e , g , l ; a . editor . fire ( "lockSnapshot" ) ; for ( f && ( g = a . focused ) && x ( a , g ) ; g = d . pop ( ) ; ) b . splice ( CKEDITOR . tools . indexOf ( b , g ) , 1 ) , g . isInited ( ) && ( l = g . editor . checkDirty ( ) ,
g . setSelected ( ! 1 ) , ! l && g . editor . resetDirty ( ) ) ; f && e && ( l = a . editor . checkDirty ( ) , a . focused = e , a . fire ( "widgetFocused" , { widget : e } ) , e . setFocused ( ! 0 ) , ! l && a . editor . resetDirty ( ) ) ; for ( ; g = c . pop ( ) ; ) b . push ( g ) , g . setSelected ( ! 0 ) ; a . editor . fire ( "unlockSnapshot" ) } } } function ga ( a ) { a && a . addFilterRule ( function ( a ) { return a . replace ( /\s*cke_widget_selected/g , "" ) . replace ( /\s*cke_widget_focused/g , "" ) . replace ( /<span[^>]*cke_widget_drag_handler_container[^>]*.*?<\/span>/gmi , "" ) } ) } function I ( a , b , c ) { var d = 0 ; b = J ( b ) ; var e = a . data . classes ||
{ } , f ; if ( b ) { for ( e = CKEDITOR . tools . clone ( e ) ; f = b . pop ( ) ; ) c ? e [ f ] || ( d = e [ f ] = 1 ) : e [ f ] && ( delete e [ f ] , d = 1 ) ; d && a . setData ( "classes" , e ) } } function K ( a ) { a . cancel ( ) } function G ( a , b ) { var c = a . widgets . focused , d , e , f ; u . hasCopyBin ( a ) || ( e = new u ( a , { beforeDestroy : function ( ) { ! b && c && c . focus ( ) ; f && a . getSelection ( ) . selectBookmarks ( f ) ; d && CKEDITOR . plugins . widgetselection . addFillers ( a . editable ( ) ) } , afterDestroy : function ( ) { b && ! a . readOnly && ( c ? a . widgets . del ( c ) : a . extractSelectedHtml ( ) , a . fire ( "saveSnapshot" ) ) } } ) , c || ( d = CKEDITOR . env . webkit &&
CKEDITOR . plugins . widgetselection . isWholeContentSelected ( a . editable ( ) ) , f = a . getSelection ( ) . createBookmarks ( ! 0 ) ) , e . handle ( F ( a ) ) ) } function J ( a ) { return ( a = ( a = a . getDefinition ( ) . attributes ) && a [ "class" ] ) ? a . split ( /\s+/ ) : null } function L ( ) { var a = CKEDITOR . document . getActive ( ) , b = this . editor , c = b . editable ( ) ; ( c . isInline ( ) ? c : b . document . getWindow ( ) . getFrame ( ) ) . equals ( a ) && b . focusManager . focus ( c ) } function M ( ) { CKEDITOR . env . gecko && this . editor . unlockSelection ( ) ; CKEDITOR . env . webkit || ( this . editor . forceNextSelectionCheck ( ) ,
this . editor . selectionChange ( 1 ) ) } function F ( a ) { var b = a . getSelectedHtml ( ! 0 ) ; if ( a . widgets . focused ) return a . widgets . focused . getClipboardHtml ( ) ; a . once ( "toDataFormat" , function ( a ) { a . data . widgetsCopy = ! 0 } , null , null , - 1 ) ; return a . dataProcessor . toDataFormat ( b ) } function Y ( a , b ) { ha ( a ) ; N ( a ) ; ia ( a ) ; O ( a ) ; ja ( a ) ; ka ( a ) ; la ( a ) ; if ( CKEDITOR . env . ie && 9 > CKEDITOR . env . version ) a . wrapper . on ( "dragstart" , function ( b ) { var d = b . data . getTarget ( ) ; h . getNestedEditable ( a , d ) || a . inline && h . isDomDragHandler ( d ) || b . data . preventDefault ( ) } ) ; a . wrapper . removeClass ( "cke_widget_new" ) ;
a . element . addClass ( "cke_widget_element" ) ; a . on ( "key" , function ( b ) { b = b . data . keyCode ; if ( 13 == b ) a . edit ( ) ; else { if ( b == CKEDITOR . CTRL + 67 || b == CKEDITOR . CTRL + 88 ) { G ( a . editor , b == CKEDITOR . CTRL + 88 ) ; return } if ( b in P || CKEDITOR . CTRL & b || CKEDITOR . ALT & b ) return } return ! 1 } , null , null , 999 ) ; a . on ( "doubleclick" , function ( b ) { a . edit ( ) && b . cancel ( ) } ) ; if ( b . data ) a . on ( "data" , b . data ) ; if ( b . edit ) a . on ( "edit" , b . edit ) } function ha ( a ) { ( a . wrapper = a . element . getParent ( ) ) . setAttribute ( "data-cke-widget-id" , a . id ) } function N ( a , b ) { a . partSelectors || ( a . partSelectors =
a . parts ) ; if ( a . parts ) { var c = { } , d , e ; for ( e in a . partSelectors ) b || ! a . parts [ e ] || "string" == typeof a . parts [ e ] ? ( d = a . wrapper . findOne ( a . partSelectors [ e ] ) , c [ e ] = d ) : c [ e ] = a . parts [ e ] ; a . parts = c } } function ia ( a ) { var b = a . editables , c , d ; a . editables = { } ; if ( a . editables ) for ( c in b ) d = b [ c ] , a . initEditable ( c , "string" == typeof d ? { selector : d } : d ) } function O ( a ) { if ( ! 0 === a . mask ) ma ( a ) ; else if ( a . mask ) { var b = new CKEDITOR . tools . buffers . throttle ( 250 , na , a ) , c = CKEDITOR . env . gecko ? 300 : 0 , d , e ; a . on ( "focus" , function ( ) { b . input ( ) ; d = a . editor . on ( "change" ,
b . input ) ; e = a . on ( "blur" , function ( ) { d . removeListener ( ) ; e . removeListener ( ) } ) } ) ; a . editor . on ( "instanceReady" , function ( ) { setTimeout ( function ( ) { b . input ( ) } , c ) } ) ; a . editor . on ( "mode" , function ( ) { setTimeout ( function ( ) { b . input ( ) } , c ) } ) ; if ( CKEDITOR . env . gecko ) { var f = a . element . find ( "img" ) ; CKEDITOR . tools . array . forEach ( f . toArray ( ) , function ( a ) { a . on ( "load" , function ( ) { b . input ( ) } ) } ) } for ( var g in a . editables ) a . editables [ g ] . on ( "focus" , function ( ) { a . editor . on ( "change" , b . input ) ; e && e . removeListener ( ) } ) , a . editables [ g ] . on ( "blur" ,
function ( ) { a . editor . removeListener ( "change" , b . input ) } ) ; b . input ( ) } } function ma ( a ) { var b = a . wrapper . findOne ( ".cke_widget_mask" ) ; b || ( b = new CKEDITOR . dom . element ( "img" , a . editor . document ) , b . setAttributes ( { src : CKEDITOR . tools . transparentImageData , "class" : "cke_reset cke_widget_mask" } ) , a . wrapper . append ( b ) ) ; a . mask = b } function na ( ) { if ( this . wrapper ) { this . maskPart = this . maskPart || this . mask ; var a = this . parts [ this . maskPart ] , b ; if ( a && "string" != typeof a ) { b = this . wrapper . findOne ( ".cke_widget_partial_mask" ) ; b || ( b = new CKEDITOR . dom . element ( "img" ,
this . editor . document ) , b . setAttributes ( { src : CKEDITOR . tools . transparentImageData , "class" : "cke_reset cke_widget_partial_mask" } ) , this . wrapper . append ( b ) ) ; this . mask = b ; var c = b . $ , d = a . $ , e = ! ( c . offsetTop == d . offsetTop && c . offsetLeft == d . offsetLeft ) ; if ( c . offsetWidth != d . offsetWidth || c . offsetHeight != d . offsetHeight || e ) c = a . getParent ( ) , d = CKEDITOR . plugins . widget . isDomWidget ( c ) , b . setStyles ( { top : a . $ . offsetTop + ( d ? 0 : c . $ . offsetTop ) + "px" , left : a . $ . offsetLeft + ( d ? 0 : c . $ . offsetLeft ) + "px" , width : a . $ . offsetWidth + "px" , height : a . $ . offsetHeight +
"px" } ) } } } function ja ( a ) { if ( a . draggable ) { var b = a . editor , c = a . wrapper . getLast ( h . isDomDragHandlerContainer ) , d ; c ? d = c . findOne ( "img" ) : ( c = new CKEDITOR . dom . element ( "span" , b . document ) , c . setAttributes ( { "class" : "cke_reset cke_widget_drag_handler_container" , style : "background:rgba(220,220,220,0.5);background-image:url(" + b . plugins . widget . path + "images/handle.png);display:none;" } ) , d = new CKEDITOR . dom . element ( "img" , b . document ) , d . setAttributes ( { "class" : "cke_reset cke_widget_drag_handler" , "data-cke-widget-drag-handler" : "1" ,
src : CKEDITOR . tools . transparentImageData , width : 15 , title : b . lang . widget . move , height : 15 , role : "presentation" } ) , a . inline && d . setAttribute ( "draggable" , "true" ) , c . append ( d ) , a . wrapper . append ( c ) ) ; a . wrapper . on ( "dragover" , function ( a ) { a . data . preventDefault ( ) } ) ; a . wrapper . on ( "mouseenter" , a . updateDragHandlerPosition , a ) ; setTimeout ( function ( ) { a . on ( "data" , a . updateDragHandlerPosition , a ) } , 50 ) ; if ( ! a . inline && ( d . on ( "mousedown" , oa , a ) , CKEDITOR . env . ie && 9 > CKEDITOR . env . version ) ) d . on ( "dragstart" , function ( a ) { a . data . preventDefault ( ! 0 ) } ) ;
a . dragHandlerContainer = c } } function oa ( a ) { function b ( ) { var b ; for ( r . reset ( ) ; b = l . pop ( ) ; ) b . removeListener ( ) ; var c = k ; b = a . sender ; var d = this . repository . finder , e = this . repository . liner , f = this . editor , g = this . editor . editable ( ) ; CKEDITOR . tools . isEmpty ( e . visible ) || ( c = d . getRange ( c [ 0 ] ) , this . focus ( ) , f . fire ( "drop" , { dropRange : c , target : c . startContainer } ) ) ; g . removeClass ( "cke_widget_dragging" ) ; e . hideVisible ( ) ; f . fire ( "dragend" , { target : b } ) } if ( CKEDITOR . tools . getMouseButton ( a ) === CKEDITOR . MOUSE _BUTTON _LEFT ) { var c = this . repository . finder ,
d = this . repository . locator , e = this . repository . liner , f = this . editor , g = f . editable ( ) , l = [ ] , k = [ ] , h , m ; this . repository . _ . draggedWidget = this ; var w = c . greedySearch ( ) , r = CKEDITOR . tools . eventsBuffer ( 50 , function ( ) { h = d . locate ( w ) ; k = d . sort ( m , 1 ) ; k . length && ( e . prepare ( w , h ) , e . placeLine ( k [ 0 ] ) , e . cleanup ( ) ) } ) ; g . addClass ( "cke_widget_dragging" ) ; l . push ( g . on ( "mousemove" , function ( a ) { m = a . data . $ . clientY ; r . input ( ) } ) ) ; f . fire ( "dragstart" , { target : a . sender } ) ; l . push ( f . document . once ( "mouseup" , b , this ) ) ; g . isInline ( ) || l . push ( CKEDITOR . document . once ( "mouseup" ,
b , this ) ) } } function ka ( a ) { var b = null ; a . on ( "data" , function ( ) { var a = this . data . classes , d ; if ( b != a ) { for ( d in b ) a && a [ d ] || this . removeClass ( d ) ; for ( d in a ) this . addClass ( d ) ; b = a } } ) } function la ( a ) { a . on ( "data" , function ( ) { if ( a . wrapper ) { var b = this . getLabel ? this . getLabel ( ) : this . editor . lang . widget . label . replace ( /%1/ , this . pathName || this . element . getName ( ) ) ; a . wrapper . setAttribute ( "role" , "region" ) ; a . wrapper . setAttribute ( "aria-label" , b ) } } , null , null , 9999 ) } function v ( a ) { a . element . data ( "cke-widget-data" , encodeURIComponent ( JSON . stringify ( a . data ) ) ) }
function pa ( ) { function a ( ) { } function b ( a , b , c ) { return c && this . checkElement ( a ) ? ( a = c . widgets . getByElement ( a , ! 0 ) ) && a . checkStyleActive ( this ) : ! 1 } function c ( a ) { function b ( a , c , d ) { for ( var e = a . length , f = 0 ; f < e ; ) { if ( c . call ( d , a [ f ] , f , a ) ) return a [ f ] ; f ++ } } function c ( a ) { function b ( a , c ) { var d = CKEDITOR . tools . object . keys ( a ) , e = CKEDITOR . tools . object . keys ( c ) ; if ( d . length !== e . length ) return ! 1 ; for ( var f in a ) if ( ( "object" !== typeof a [ f ] || "object" !== typeof c [ f ] || ! b ( a [ f ] , c [ f ] ) ) && a [ f ] !== c [ f ] ) return ! 1 ; return ! 0 } return function ( c ) { return b ( a . getDefinition ( ) ,
c . getDefinition ( ) ) } } var h = a . widget , k ; d [ h ] || ( d [ h ] = { } ) ; for ( var n = 0 , m = a . group . length ; n < m ; n ++ ) k = a . group [ n ] , d [ h ] [ k ] || ( d [ h ] [ k ] = [ ] ) , k = d [ h ] [ k ] , b ( k , c ( a ) ) || k . push ( a ) } var d = { } ; CKEDITOR . style . addCustomHandler ( { type : "widget" , setup : function ( a ) { this . widget = a . widget ; ( this . group = "string" == typeof a . group ? [ a . group ] : a . group ) && c ( this ) } , apply : function ( a ) { var b ; a instanceof CKEDITOR . editor && this . checkApplicable ( a . elementPath ( ) , a ) && ( b = a . widgets . focused , this . group && this . removeStylesFromSameGroup ( a ) , b . applyStyle ( this ) ) } , remove : function ( a ) { a instanceof
g . setSelected ( ! 1 ) , ! l && g . editor . resetDirty ( ) ) ; f && e && ( l = a . editor . checkDirty ( ) , a . focused = e , a . fire ( "widgetFocused" , { widget : e } ) , e . setFocused ( ! 0 ) , ! l && a . editor . resetDirty ( ) ) ; for ( ; g = c . pop ( ) ; ) b . push ( g ) , g . setSelected ( ! 0 ) ; a . editor . fire ( "unlockSnapshot" ) } } } function ga ( a ) { a && a . addFilterRule ( function ( a ) { return a . replace ( /\s*cke_widget_selected/g , "" ) . replace ( /\s*cke_widget_focused/g , "" ) } ) } function I ( a , b , c ) { var d = 0 ; b = J ( b ) ; var e = a . data . classes || { } , f ; if ( b ) { for ( e = CKEDITOR . tools . clone ( e ) ; f = b . pop ( ) ; ) c ? e [ f ] || ( d = e [ f ] = 1 ) :
e [ f ] && ( delete e [ f ] , d = 1 ) ; d && a . setData ( "classes" , e ) } } function K ( a ) { a . cancel ( ) } function G ( a , b ) { var c = a . widgets . focused , d , e , f ; u . hasCopyBin ( a ) || ( e = new u ( a , { beforeDestroy : function ( ) { ! b && c && c . focus ( ) ; f && a . getSelection ( ) . selectBookmarks ( f ) ; d && CKEDITOR . plugins . widgetselection . addFillers ( a . editable ( ) ) } , afterDestroy : function ( ) { b && ! a . readOnly && ( c ? a . widgets . del ( c ) : a . extractSelectedHtml ( ) , a . fire ( "saveSnapshot" ) ) } } ) , c || ( d = CKEDITOR . env . webkit && CKEDITOR . plugins . widgetselection . isWholeContentSelected ( a . editable ( ) ) ,
f = a . getSelection ( ) . createBookmarks ( ! 0 ) ) , e . handle ( F ( a ) ) ) } function J ( a ) { return ( a = ( a = a . getDefinition ( ) . attributes ) && a [ "class" ] ) ? a . split ( /\s+/ ) : null } function L ( ) { var a = CKEDITOR . document . getActive ( ) , b = this . editor , c = b . editable ( ) ; ( c . isInline ( ) ? c : b . document . getWindow ( ) . getFrame ( ) ) . equals ( a ) && b . focusManager . focus ( c ) } function M ( ) { CKEDITOR . env . gecko && this . editor . unlockSelection ( ) ; CKEDITOR . env . webkit || ( this . editor . forceNextSelectionCheck ( ) , this . editor . selectionChange ( 1 ) ) } function F ( a ) { var b = a . getSelectedHtml ( ! 0 ) ;
if ( a . widgets . focused ) return a . widgets . focused . getClipboardHtml ( ) ; a . once ( "toDataFormat" , function ( a ) { a . data . widgetsCopy = ! 0 } , null , null , - 1 ) ; return a . dataProcessor . toDataFormat ( b ) } function Y ( a , b ) { ha ( a ) ; N ( a ) ; ia ( a ) ; O ( a ) ; ja ( a ) ; ka ( a ) ; la ( a ) ; if ( CKEDITOR . env . ie && 9 > CKEDITOR . env . version ) a . wrapper . on ( "dragstart" , function ( b ) { var d = b . data . getTarget ( ) ; h . getNestedEditable ( a , d ) || a . inline && h . isDomDragHandler ( d ) || b . data . preventDefault ( ) } ) ; a . wrapper . removeClass ( "cke_widget_new" ) ; a . element . addClass ( "cke_widget_element" ) ;
a . on ( "key" , function ( b ) { b = b . data . keyCode ; if ( 13 == b ) a . edit ( ) ; else { if ( b == CKEDITOR . CTRL + 67 || b == CKEDITOR . CTRL + 88 ) { G ( a . editor , b == CKEDITOR . CTRL + 88 ) ; return } if ( b in P || CKEDITOR . CTRL & b || CKEDITOR . ALT & b ) return } return ! 1 } , null , null , 999 ) ; a . on ( "doubleclick" , function ( b ) { a . edit ( ) && b . cancel ( ) } ) ; if ( b . data ) a . on ( "data" , b . data ) ; if ( b . edit ) a . on ( "edit" , b . edit ) } function ha ( a ) { ( a . wrapper = a . element . getParent ( ) ) . setAttribute ( "data-cke-widget-id" , a . id ) } function N ( a , b ) { a . partSelectors || ( a . partSelectors = a . parts ) ; if ( a . parts ) { var c =
{ } , d , e ; for ( e in a . partSelectors ) b || ! a . parts [ e ] || "string" == typeof a . parts [ e ] ? ( d = a . wrapper . findOne ( a . partSelectors [ e ] ) , c [ e ] = d ) : c [ e ] = a . parts [ e ] ; a . parts = c } } function ia ( a ) { var b = a . editables , c , d ; a . editables = { } ; if ( a . editables ) for ( c in b ) d = b [ c ] , a . initEditable ( c , "string" == typeof d ? { selector : d } : d ) } function O ( a ) { if ( ! 0 === a . mask ) ma ( a ) ; else if ( a . mask ) { var b = new CKEDITOR . tools . buffers . throttle ( 250 , na , a ) , c = CKEDITOR . env . gecko ? 300 : 0 , d , e ; a . on ( "focus" , function ( ) { b . input ( ) ; d = a . editor . on ( "change" , b . input ) ; e = a . on ( "blur" ,
function ( ) { d . removeListener ( ) ; e . removeListener ( ) } ) } ) ; a . editor . on ( "instanceReady" , function ( ) { setTimeout ( function ( ) { b . input ( ) } , c ) } ) ; a . editor . on ( "mode" , function ( ) { setTimeout ( function ( ) { b . input ( ) } , c ) } ) ; if ( CKEDITOR . env . gecko ) { var f = a . element . find ( "img" ) ; CKEDITOR . tools . array . forEach ( f . toArray ( ) , function ( a ) { a . on ( "load" , function ( ) { b . input ( ) } ) } ) } for ( var g in a . editables ) a . editables [ g ] . on ( "focus" , function ( ) { a . editor . on ( "change" , b . input ) ; e && e . removeListener ( ) } ) , a . editables [ g ] . on ( "blur" , function ( ) { a . editor . removeListener ( "change" ,
b . input ) } ) ; b . input ( ) } } function ma ( a ) { var b = a . wrapper . findOne ( ".cke_widget_mask" ) ; b || ( b = new CKEDITOR . dom . element ( "img" , a . editor . document ) , b . setAttributes ( { src : CKEDITOR . tools . transparentImageData , "class" : "cke_reset cke_widget_mask" } ) , a . wrapper . append ( b ) ) ; a . mask = b } function na ( ) { if ( this . wrapper ) { this . maskPart = this . maskPart || this . mask ; var a = this . parts [ this . maskPart ] , b ; if ( a && "string" != typeof a ) { b = this . wrapper . findOne ( ".cke_widget_partial_mask" ) ; b || ( b = new CKEDITOR . dom . element ( "img" , this . editor . document ) ,
b . setAttributes ( { src : CKEDITOR . tools . transparentImageData , "class" : "cke_reset cke_widget_partial_mask" } ) , this . wrapper . append ( b ) ) ; this . mask = b ; var c = b . $ , d = a . $ , e = ! ( c . offsetTop == d . offsetTop && c . offsetLeft == d . offsetLeft ) ; if ( c . offsetWidth != d . offsetWidth || c . offsetHeight != d . offsetHeight || e ) c = a . getParent ( ) , d = CKEDITOR . plugins . widget . isDomWidget ( c ) , b . setStyles ( { top : a . $ . offsetTop + ( d ? 0 : c . $ . offsetTop ) + "px" , left : a . $ . offsetLeft + ( d ? 0 : c . $ . offsetLeft ) + "px" , width : a . $ . offsetWidth + "px" , height : a . $ . offsetHeight + "px" } ) } } } function ja ( a ) { if ( a . draggable ) { var b =
a . editor , c = a . wrapper . getLast ( h . isDomDragHandlerContainer ) , d ; c ? d = c . findOne ( "img" ) : ( c = new CKEDITOR . dom . element ( "span" , b . document ) , c . setAttributes ( { "class" : "cke_reset cke_widget_drag_handler_container" , style : "background:rgba(220,220,220,0.5);background-image:url(" + b . plugins . widget . path + "images/handle.png);display:none;" } ) , d = new CKEDITOR . dom . element ( "img" , b . document ) , d . setAttributes ( { "class" : "cke_reset cke_widget_drag_handler" , "data-cke-widget-drag-handler" : "1" , src : CKEDITOR . tools . transparentImageData ,
width : 15 , title : b . lang . widget . move , height : 15 , role : "presentation" } ) , a . inline && d . setAttribute ( "draggable" , "true" ) , c . append ( d ) , a . wrapper . append ( c ) ) ; a . wrapper . on ( "dragover" , function ( a ) { a . data . preventDefault ( ) } ) ; a . wrapper . on ( "mouseenter" , a . updateDragHandlerPosition , a ) ; setTimeout ( function ( ) { a . on ( "data" , a . updateDragHandlerPosition , a ) } , 50 ) ; if ( ! a . inline && ( d . on ( "mousedown" , oa , a ) , CKEDITOR . env . ie && 9 > CKEDITOR . env . version ) ) d . on ( "dragstart" , function ( a ) { a . data . preventDefault ( ! 0 ) } ) ; a . dragHandlerContainer = c } } function oa ( a ) { function b ( ) { var b ;
for ( r . reset ( ) ; b = l . pop ( ) ; ) b . removeListener ( ) ; var c = k ; b = a . sender ; var d = this . repository . finder , e = this . repository . liner , f = this . editor , g = this . editor . editable ( ) ; CKEDITOR . tools . isEmpty ( e . visible ) || ( c = d . getRange ( c [ 0 ] ) , this . focus ( ) , f . fire ( "drop" , { dropRange : c , target : c . startContainer } ) ) ; g . removeClass ( "cke_widget_dragging" ) ; e . hideVisible ( ) ; f . fire ( "dragend" , { target : b } ) } if ( CKEDITOR . tools . getMouseButton ( a ) === CKEDITOR . MOUSE _BUTTON _LEFT ) { var c = this . repository . finder , d = this . repository . locator , e = this . repository . liner ,
f = this . editor , g = f . editable ( ) , l = [ ] , k = [ ] , h , m ; this . repository . _ . draggedWidget = this ; var w = c . greedySearch ( ) , r = CKEDITOR . tools . eventsBuffer ( 50 , function ( ) { h = d . locate ( w ) ; k = d . sort ( m , 1 ) ; k . length && ( e . prepare ( w , h ) , e . placeLine ( k [ 0 ] ) , e . cleanup ( ) ) } ) ; g . addClass ( "cke_widget_dragging" ) ; l . push ( g . on ( "mousemove" , function ( a ) { m = a . data . $ . clientY ; r . input ( ) } ) ) ; f . fire ( "dragstart" , { target : a . sender } ) ; l . push ( f . document . once ( "mouseup" , b , this ) ) ; g . isInline ( ) || l . push ( CKEDITOR . document . once ( "mouseup" , b , this ) ) } } function ka ( a ) { var b =
null ; a . on ( "data" , function ( ) { var a = this . data . classes , d ; if ( b != a ) { for ( d in b ) a && a [ d ] || this . removeClass ( d ) ; for ( d in a ) this . addClass ( d ) ; b = a } } ) } function la ( a ) { a . on ( "data" , function ( ) { if ( a . wrapper ) { var b = this . getLabel ? this . getLabel ( ) : this . editor . lang . widget . label . replace ( /%1/ , this . pathName || this . element . getName ( ) ) ; a . wrapper . setAttribute ( "role" , "region" ) ; a . wrapper . setAttribute ( "aria-label" , b ) } } , null , null , 9999 ) } function v ( a ) { a . element . data ( "cke-widget-data" , encodeURIComponent ( JSON . stringify ( a . data ) ) ) } function pa ( ) { function a ( ) { }
function b ( a , b , c ) { return c && this . checkElement ( a ) ? ( a = c . widgets . getByElement ( a , ! 0 ) ) && a . checkStyleActive ( this ) : ! 1 } function c ( a ) { function b ( a , c , d ) { for ( var e = a . length , f = 0 ; f < e ; ) { if ( c . call ( d , a [ f ] , f , a ) ) return a [ f ] ; f ++ } } function c ( a ) { function b ( a , c ) { var d = CKEDITOR . tools . object . keys ( a ) , e = CKEDITOR . tools . object . keys ( c ) ; if ( d . length !== e . length ) return ! 1 ; for ( var f in a ) if ( ( "object" !== typeof a [ f ] || "object" !== typeof c [ f ] || ! b ( a [ f ] , c [ f ] ) ) && a [ f ] !== c [ f ] ) return ! 1 ; return ! 0 } return function ( c ) { return b ( a . getDefinition ( ) , c . getDefinition ( ) ) } }
var h = a . widget , k ; d [ h ] || ( d [ h ] = { } ) ; for ( var n = 0 , m = a . group . length ; n < m ; n ++ ) k = a . group [ n ] , d [ h ] [ k ] || ( d [ h ] [ k ] = [ ] ) , k = d [ h ] [ k ] , b ( k , c ( a ) ) || k . push ( a ) } var d = { } ; CKEDITOR . style . addCustomHandler ( { type : "widget" , setup : function ( a ) { this . widget = a . widget ; ( this . group = "string" == typeof a . group ? [ a . group ] : a . group ) && c ( this ) } , apply : function ( a ) { var b ; a instanceof CKEDITOR . editor && this . checkApplicable ( a . elementPath ( ) , a ) && ( b = a . widgets . focused , this . group && this . removeStylesFromSameGroup ( a ) , b . applyStyle ( this ) ) } , remove : function ( a ) { a instanceof
CKEDITOR . editor && this . checkApplicable ( a . elementPath ( ) , a ) && a . widgets . focused . removeStyle ( this ) } , removeStylesFromSameGroup : function ( a ) { var b = ! 1 , c , h ; if ( ! ( a instanceof CKEDITOR . editor ) ) return ! 1 ; h = a . elementPath ( ) ; if ( this . checkApplicable ( h , a ) ) for ( var k = 0 , n = this . group . length ; k < n ; k ++ ) { c = d [ this . widget ] [ this . group [ k ] ] ; for ( var m = 0 ; m < c . length ; m ++ ) c [ m ] !== this && c [ m ] . checkActive ( h , a ) && ( a . widgets . focused . removeStyle ( c [ m ] ) , b = ! 0 ) } return b } , checkActive : function ( a , b ) { return this . checkElementMatch ( a . lastElement , 0 , b ) } ,
checkApplicable : function ( a , b ) { return b instanceof CKEDITOR . editor ? this . checkElement ( a . lastElement ) : ! 1 } , checkElementMatch : b , checkElementRemovable : b , checkElement : function ( a ) { return h . isDomWidgetWrapper ( a ) ? ( a = a . getFirst ( h . isDomWidgetElement ) ) && a . data ( "widget" ) == this . widget : ! 1 } , buildPreview : function ( a ) { return a || this . _ . definition . name } , toAllowedContentRules : function ( a ) { if ( ! a ) return null ; a = a . widgets . registered [ this . widget ] ; var b , c = { } ; if ( ! a ) return null ; if ( a . styleableElements ) { b = this . getClassesArray ( ) ; if ( ! b ) return null ;
c [ a . styleableElements ] = { classes : b , propertiesOnly : ! 0 } ; return c } return a . styleToAllowedContentRules ? a . styleToAllowedContentRules ( this ) : null } , getClassesArray : function ( ) { var a = this . _ . definition . attributes && this . _ . definition . attributes [ "class" ] ; return a ? CKEDITOR . tools . trim ( a ) . split ( /\s+/ ) : null } , applyToRange : a , removeFromRange : a , applyToObject : a } ) } CKEDITOR . plugins . add ( "widget" , { requires : "lineutils,clipboard,widgetselection" , onLoad : function ( ) { void 0 !== CKEDITOR . document . $ . querySelectorAll && ( CKEDITOR . addCss ( '.cke_widget_wrapper{position:relative;outline:none}.cke_widget_inline{display:inline-block}.cke_widget_wrapper:hover\x3e.cke_widget_element{outline:2px solid #ffd25c;cursor:default}.cke_widget_wrapper:hover .cke_widget_editable{outline:2px solid #ffd25c}.cke_widget_wrapper.cke_widget_focused\x3e.cke_widget_element,.cke_widget_wrapper .cke_widget_editable.cke_widget_editable_focused{outline:2px solid #47a4f5}.cke_widget_editable{cursor:text}.cke_widget_drag_handler_container{position:absolute;width:15px;height:0;display:block;opacity:0.75;transition:height 0s 0.2s;line-height:0}.cke_widget_wrapper:hover\x3e.cke_widget_drag_handler_container{height:15px;transition:none}.cke_widget_drag_handler_container:hover{opacity:1}.cke_editable[contenteditable\x3d"false"] .cke_widget_drag_handler_container{display:none;}img.cke_widget_drag_handler{cursor:move;width:15px;height:15px;display:inline-block}.cke_widget_mask{position:absolute;top:0;left:0;width:100%;height:100%;display:block}.cke_widget_partial_mask{position:absolute;display:block}.cke_editable.cke_widget_dragging, .cke_editable.cke_widget_dragging *{cursor:move !important}' ) ,
@@ -1193,7 +1195,7 @@ d=0;if("string"==typeof a)c[a]!==b&&(c[a]=b,d=1);else{var e=a;for(a in e)c[a]!==
b = { x : b . offsetLeft , y : b . offsetTop - 15 } ; c && b . x == c . x && b . y == c . y || ( c = a . checkDirty ( ) , a . fire ( "lockSnapshot" ) , this . dragHandlerContainer . setStyles ( { top : b . y + "px" , left : b . x + "px" } ) , this . dragHandlerContainer . removeStyle ( "display" ) , a . fire ( "unlockSnapshot" ) , ! c && a . resetDirty ( ) , this . _ . dragHandlerOffset = b ) } } ; CKEDITOR . event . implementOn ( h . prototype ) ; h . getNestedEditable = function ( a , b ) { return ! b || b . equals ( a ) ? null : h . isDomNestedEditable ( b ) ? b : h . getNestedEditable ( a , b . getParent ( ) ) } ; h . isDomDragHandler = function ( a ) { return a . type ==
CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "data-cke-widget-drag-handler" ) } ; h . isDomDragHandlerContainer = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasClass ( "cke_widget_drag_handler_container" ) } ; h . isDomNestedEditable = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "data-cke-widget-editable" ) } ; h . isDomWidgetElement = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "data-widget" ) } ; h . isDomWidgetWrapper = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "data-cke-widget-wrapper" ) } ;
h . isDomWidget = function ( a ) { return a ? this . isDomWidgetWrapper ( a ) || this . isDomWidgetElement ( a ) : ! 1 } ; h . isParserWidgetElement = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && ! ! a . attributes [ "data-widget" ] } ; h . isParserWidgetWrapper = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && ! ! a . attributes [ "data-cke-widget-wrapper" ] } ; h . WRAPPER _CLASS _PREFIX = "cke_widget_wrapper_" ; t . prototype = CKEDITOR . tools . extend ( CKEDITOR . tools . prototypedCopy ( CKEDITOR . dom . element . prototype ) , { setData : function ( a ) { this . _ . initialSetData ||
this . editor . widgets . destroyAll ( ! 1 , this ) ; this . _ . initialSetData = ! 1 ; a = this . editor . dataProcessor . unprotectSource ( a ) ; a = this . editor . dataProcessor . toHtml ( a , { context : this . getName ( ) , filter : this . filter , enterMode : this . enterMode } ) ; this . setHtml ( a ) ; this . editor . widgets . initOnAll ( this ) } , getData : function ( ) { return this . editor . dataProcessor . toDataFormat ( this . getHtml ( ) , { context : this . getName ( ) , filter : this . filter , enterMode : this . enterMode } ) } } ) ; var fa = /^(?:<(?:div|span)(?: data-cke-temp="1")?(?: id="cke_copybin")?(?: data-cke-temp="1")?>)?(?:<(?:div|span)(?: style="[^"]+")?>)?<span [^>]*data-cke-copybin-start="1"[^>]*>.?<\/span>([\s\S]+)<span [^>]*data-cke-copybin-end="1"[^>]*>.?<\/span>(?:<\/(?:div|span)>)?(?:<\/(?:div|span)>)?$/i ,
this . editor . widgets . destroyAll ( ! 1 , this ) ; this . _ . initialSetData = ! 1 ; a = this . editor . dataProcessor . unprotectRealComments ( a ) ; a = this . editor . dataProcessor . unprotectSource ( a ) ; a = this . editor . dataProcessor . toHtml ( a , { context : this . getName ( ) , filter : this . filter , enterMode : this . enterMode } ) ; this . setHtml ( a ) ; this . editor . widgets . initOnAll ( this ) } , getData : function ( ) { return this . editor . dataProcessor . toDataFormat ( this . getHtml ( ) , { context : this . getName ( ) , filter : this . filter , enterMode : this . enterMode } ) } } ) ; var fa = /^(?:<(?:div|span)(?: data-cke-temp="1")?(?: id="cke_copybin")?(?: data-cke-temp="1")?>)?(?:<(?:div|span)(?: style="[^"]+")?>)?<span [^>]*data-cke-copybin-start="1"[^>]*>.?<\/span>([\s\S]+)<span [^>]*data-cke-copybin-end="1"[^>]*>.?<\/span>(?:<\/(?:div|span)>)?(?:<\/(?:div|span)>)?$/i ,
P = { 37 : 1 , 38 : 1 , 39 : 1 , 40 : 1 , 8 : 1 , 46 : 1 } ; P [ CKEDITOR . SHIFT + 121 ] = 1 ; var u = CKEDITOR . tools . createClass ( { $ : function ( a , b ) { this . _ . createCopyBin ( a , b ) ; this . _ . createListeners ( b ) } , _ : { createCopyBin : function ( a ) { var b = a . document , c = CKEDITOR . env . edge && 16 <= CKEDITOR . env . version , d = ! a . blockless && ! CKEDITOR . env . ie || c ? "div" : "span" , c = b . createElement ( d ) , b = b . createElement ( d ) ; b . setAttributes ( { id : "cke_copybin" , "data-cke-temp" : "1" } ) ; c . setStyles ( { position : "absolute" , width : "1px" , height : "1px" , overflow : "hidden" } ) ; c . setStyle ( "ltr" == a . config . contentsLangDirection ?
"left" : "right" , "-5000px" ) ; this . editor = a ; this . copyBin = c ; this . container = b } , createListeners : function ( a ) { a && ( a . beforeDestroy && ( this . beforeDestroy = a . beforeDestroy ) , a . afterDestroy && ( this . afterDestroy = a . afterDestroy ) ) } } , proto : { handle : function ( a ) { var b = this . copyBin , c = this . editor , d = this . container , e = CKEDITOR . env . ie && 9 > CKEDITOR . env . version , f = c . document . getDocumentElement ( ) . $ , g = c . createRange ( ) , h = this , k = CKEDITOR . env . mac && CKEDITOR . env . webkit , n = k ? 100 : 0 , m = window . requestAnimationFrame && ! k ? requestAnimationFrame : setTimeout ,
p , r , q ; b . setHtml ( '\x3cspan data-cke-copybin-start\x3d"1"\x3e \x3c/span\x3e' + a + '\x3cspan data-cke-copybin-end\x3d"1"\x3e \x3c/span\x3e' ) ; c . fire ( "lockSnapshot" ) ; d . append ( b ) ; c . editable ( ) . append ( d ) ; p = c . on ( "selectionChange" , K , null , null , 0 ) ; r = c . widgets . on ( "checkSelection" , K , null , null , 0 ) ; e && ( q = f . scrollTop ) ; g . selectNodeContents ( b ) ; g . select ( ) ; e && ( f . scrollTop = q ) ; return new CKEDITOR . tools . promise ( function ( a ) { m ( function ( ) { h . beforeDestroy && h . beforeDestroy ( ) ; d . remove ( ) ; p . removeListener ( ) ; r . removeListener ( ) ; c . fire ( "unlockSnapshot" ) ;
@@ -1238,4 +1240,4 @@ h&&(a=a.replace(/<head[^>]*?>/,"$\x26"+h)),a=a.replace(/<\/head\s*>/,g+"$\x26"),
( 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.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' ) ;
h && 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 ( l ) { setTimeout ( function ( ) { k . write ( a ) } , 0 ) } } } , getData : function ( a ) { if ( a ) return this . getHtml ( ) ; a = this . editor ; var e = a . config , b = e . fullPage , c = b && a . docType , d = b && a . xmlDeclaration ,
f = this . getDocument ( ) , b = b ? f . getDocumentElement ( ) . getOuterHtml ( ) : f . getBody ( ) . getHtml ( ) ; CKEDITOR . env . gecko && e . enterMode != CKEDITOR . ENTER _BR && ( b = b . replace ( /<br>(?=\s*(:?$|<\/body>))/ , "" ) ) ; b = a . dataProcessor . toDataFormat ( b ) ; d && ( b = d + "\n" + b ) ; c && ( b = c + "\n" + b ) ; return b } , focus : function ( ) { this . _ . isLoadingData ? this . _ . isPendingFocus = ! 0 : l . baseProto . focus . call ( this ) } , detach : function ( ) { var a = this . editor , e = a . document , a = a . container . findOne ( "iframe.cke_wysiwyg_frame" ) ; l . baseProto . detach . call ( this ) ; this . clearCustomData ( this . _ . expandoNumber ) ;
e . getDocumentElement ( ) . clearCustomData ( ) ; CKEDITOR . tools . removeFunction ( this . _ . frameLoadedHandler ) ; a && ( a . clearCustomData ( ) , ( e = a . removeCustomData ( "onResize" ) ) && e . removeListener ( ) , a . isDetached ( ) || a . remove ( ) ) } } } ) } ) ( ) ; CKEDITOR . config . disableObjectResizing = ! 1 ; CKEDITOR . config . disableNativeTableHandles = ! 0 ; CKEDITOR . config . disableNativeSpellChecker = ! 0 ; CKEDITOR . config . plugins = 'dialogui,dialog,about,autogrow,base64image,basicstyles,blockquote,button,notification,toolbar,clipboard,panelbutton,panel,floatpanel,colorbutton,colordialog,menu,contextmenu,div,enterkey,entities,fakeobjects,floatingspace,listblock,richcombo,font,format,image,indent,indentlist,justify,link,list,menubutton,onchange,xml,ajax,pastetools,pastefromgdocs,pastefromword,pastetext,scayt,sourcearea,tab,table,tabletools,tableresize,undo,lineutils,widgetselection,widget,filetools,notificationaggregator,uploadwidget,uploadimage,wsc,wysiwygarea' ; CKEDITOR . config . skin = 'n1theme' ; ( 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 ( 'about,0,,base64image,24,,bold,48,,italic,72,,strike,96,,subscript,120,,superscript,144,,underline,168,,blockquote,192,,copy-rtl,216,,copy,240,,cut-rtl,264,,cut,288,,paste-rtl,312,,paste,336,,bgcolor,360,,textcolor,384,,creatediv,408,,image,432,,indent-rtl,456,,indent,480,,outdent-rtl,504,,outdent,528,,justifyblock,552,,justifycenter,576,,justifyleft,600,,justifyright,624,,anchor-rtl,648,,anchor,672,,link,696,,unlink,720,,bulletedlist-rtl,744,,bulletedlist,768,,numberedlist-rtl,792,,numberedlist,816,,pastefromword-rtl,840,,pastefromword,864,,pastetext-rtl,888,,pastetext,912,,scayt,936,,source-rtl,960,,source,984,,table,1008,,redo-rtl,1032,,redo,1056,,undo-rtl,1080,,undo,1104,,spellchecker,1128,' , 'icons_hidpi.png' ) ; else setIcons ( 'about,0,auto,base64image,24,auto,bold,48,auto,italic,72,auto,strike,96,auto,subscript,120,auto,superscript,144,auto,underline,168,auto,blockquote,192,auto,copy-rtl,216,auto,copy,240,auto,cut-rtl,264,auto,cut,288,auto,paste-rtl,312,auto,paste,336,auto,bgcolor,360,auto,textcolor,384,auto,creatediv,408,auto,image,432,auto,indent-rtl,456,auto,indent,480,auto,outdent-rtl,504,auto,outdent,528,auto,justifyblock,552,auto,justifycenter,576,auto,justifyleft,600,auto,justifyright,624,auto,anchor-rtl,648,auto,anchor,672,auto,link,696,auto,unlink,720,auto,bulletedlist-rtl,744,auto,bulletedlist,768,auto,numberedlist-rtl,792,auto,numberedlist,816,auto,pastefromword-rtl,840,auto,pastefromword,864,auto,pastetext-rtl,888,auto,pastetext,912,auto,scayt,936,auto,source-rtl,960,auto,source,984,auto,table,1008,auto,redo-rtl,1032,auto,redo,1056,auto,undo-rtl,1080,auto,undo,1104,auto,spellchecker,1128,auto' , 'icons.png' ) ; } ) ( ) ; CKEDITOR . lang . languages = { "ar" : 1 , "ca" : 1 , "cs" : 1 , "sr-latn" : 1 , " cy": 1 , "da" : 1 , "de" : 1 , "en" : 1 , "es" : 1 , "eu" : 1 , "fi" : 1 , "fr" : 1 , "he" : 1 , "hr" : 1 , "hu" : 1 , "is" : 1 , "it" : 1 , "ja" : 1 , "lt" : 1 , "lv" : 1 , "mk" : 1 , "nb" : 1 , "nl" : 1 , "no" : 1 , "pl" : 1 , "pt" : 1 , "pt-br" : 1 , "ro" : 1 , "ru" : 1 , "sk" : 1 , "sl" : 1 , "sr" : 1 , "sv" : 1 , "tr" : 1 , "uk" : 1 , "zh" : 1 , "zh-cn" : 1 } ; } ( ) ) ;
e . getDocumentElement ( ) . clearCustomData ( ) ; CKEDITOR . tools . removeFunction ( this . _ . frameLoadedHandler ) ; a && ( a . clearCustomData ( ) , ( e = a . removeCustomData ( "onResize" ) ) && e . removeListener ( ) , a . isDetached ( ) || a . remove ( ) ) } } } ) } ) ( ) ; CKEDITOR . config . disableObjectResizing = ! 1 ; CKEDITOR . config . disableNativeTableHandles = ! 0 ; CKEDITOR . config . disableNativeSpellChecker = ! 0 ; CKEDITOR . config . plugins = 'dialogui,dialog,about,autogrow,base64image,basicstyles,blockquote,button,notification,toolbar,clipboard,panelbutton,panel,floatpanel,colorbutton,colordialog,menu,contextmenu,div,enterkey,entities,fakeobjects,floatingspace,listblock,richcombo,font,format,image,indent,indentlist,justify,link,list,menubutton,onchange,xml,ajax,pastetools,pastefromgdocs,pastefromword,pastetext,scayt,sourcearea,tab,table,tabletools,tableresize,undo,lineutils,widgetselection,widget,filetools,notificationaggregator,uploadwidget,uploadimage,wsc,wysiwygarea' ; CKEDITOR . config . skin = 'n1theme' ; ( 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 ( 'about,0,,base64image,24,,bold,48,,italic,72,,strike,96,,subscript,120,,superscript,144,,underline,168,,blockquote,192,,copy-rtl,216,,copy,240,,cut-rtl,264,,cut,288,,paste-rtl,312,,paste,336,,bgcolor,360,,textcolor,384,,creatediv,408,,image,432,,indent-rtl,456,,indent,480,,outdent-rtl,504,,outdent,528,,justifyblock,552,,justifycenter,576,,justifyleft,600,,justifyright,624,,anchor-rtl,648,,anchor,672,,link,696,,unlink,720,,bulletedlist-rtl,744,,bulletedlist,768,,numberedlist-rtl,792,,numberedlist,816,,pastefromword-rtl,840,,pastefromword,864,,pastetext-rtl,888,,pastetext,912,,scayt,936,,source-rtl,960,,source,984,,table,1008,,redo-rtl,1032,,redo,1056,,undo-rtl,1080,,undo,1104,,spellchecker,1128,' , 'icons_hidpi.png' ) ; else setIcons ( 'about,0,auto,base64image,24,auto,bold,48,auto,italic,72,auto,strike,96,auto,subscript,120,auto,superscript,144,auto,underline,168,auto,blockquote,192,auto,copy-rtl,216,auto,copy,240,auto,cut-rtl,264,auto,cut,288,auto,paste-rtl,312,auto,paste,336,auto,bgcolor,360,auto,textcolor,384,auto,creatediv,408,auto,image,432,auto,indent-rtl,456,auto,indent,480,auto,outdent-rtl,504,auto,outdent,528,auto,justifyblock,552,auto,justifycenter,576,auto,justifyleft,600,auto,justifyright,624,auto,anchor-rtl,648,auto,anchor,672,auto,link,696,auto,unlink,720,auto,bulletedlist-rtl,744,auto,bulletedlist,768,auto,numberedlist-rtl,792,auto,numberedlist,816,auto,pastefromword-rtl,840,auto,pastefromword,864,auto,pastetext-rtl,888,auto,pastetext,912,auto,scayt,936,auto,source-rtl,960,auto,source,984,auto,table,1008,auto,redo-rtl,1032,auto,redo,1056,auto,undo-rtl,1080,auto,undo,1104,auto,spellchecker,1128,auto' , 'icons.png' ) ; } ) ( ) ; CKEDITOR . lang . languages = { "ar" : 1 , "ca" : 1 , "cs" : 1 , "cy" : 1 , "da" : 1 , "de" : 1 , "en" : 1 , "es" : 1 , "eu" : 1 , "fi" : 1 , "fr" : 1 , "he" : 1 , "hr" : 1 , "hu" : 1 , "is" : 1 , "it" : 1 , "ja" : 1 , "lt" : 1 , "lv" : 1 , "mk" : 1 , "nb" : 1 , "nl" : 1 , "no" : 1 , "pl" : 1 , "pt" : 1 , "pt-br" : 1 , "ro" : 1 , "ru" : 1 , "sk" : 1 , "sl" : 1 , "sr" : 1 , "sr-latn" : 1 , " sv": 1 , "tr" : 1 , "uk" : 1 , "zh" : 1 , "zh-cn" : 1 } ; } ( ) ) ;