@@ -2,14 +2,14 @@
Copyright ( c ) 2003 - 2022 , CKSource Holding sp . z o . o . All rights reserved .
For licensing , see LICENSE . md or https : //ckeditor.com/legal/ckeditor-oss-license/
* /
( function ( ) { if ( window . CKEDITOR && window . CKEDITOR . dom ) return ; window . CKEDITOR || ( window . CKEDITOR = function ( ) { var a = /(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i , d = { timestamp : "M4I8 " , version : "4.19.0 " , revision : "c08cfedb60 " , 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 : "M6K9 " , version : "4.19.1 " , revision : "445cf24ebd " , rnd : Math . floor ( 900 * Math . random ( ) ) + 100 , _ : { pending : [ ] , basePathSrcPattern : a } , status : "unloaded" , basePath : function ( ) { var b = window . CKEDITOR _BASEPATH || "" ; if ( ! b ) for ( var c = document . getElementsByTagName ( "script" ) , d = 0 ; d < c . length ; d ++ ) { var h = c [ d ] . src . match ( a ) ; if ( h ) { b = h [ 1 ] ; break } } - 1 == b . indexOf ( ":/" ) && "//" != b . slice ( 0 , 2 ) && ( b = 0 === b . indexOf ( "/" ) ? location . href . match ( /^.*?:\/\/[^\/]*/ ) [ 0 ] +
b : location . href . match ( /^[^\?]*\/(?:)/ ) [ 0 ] + b ) ; if ( ! b ) throw 'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.' ; return b } ( ) , getUrl : function ( a ) { - 1 == a . indexOf ( ":/" ) && 0 !== a . indexOf ( "/" ) && ( a = this . basePath + a ) ; return a = this . appendTimestamp ( a ) } , appendTimestamp : function ( a ) { if ( ! this . timestamp || "/" === a . charAt ( a . length - 1 ) || /[&?]t=/ . test ( a ) ) return a ; var b = 0 <= a . indexOf ( "?" ) ? "\x26" : "?" ; return a + b + "t\x3d" + this . timestamp } ,
domReady : function ( ) { function a ( ) { try { document . addEventListener ? ( document . removeEventListener ( "DOMContentLoaded" , a , ! 1 ) , window . removeEventListener ( "load" , a , ! 1 ) , b ( ) ) : document . attachEvent && "complete" === document . readyState && ( document . detachEvent ( "onreadystatechange" , a ) , window . detachEvent ( "onload" , a ) , b ( ) ) } catch ( c ) { } } function b ( ) { for ( var a ; a = c . shift ( ) ; ) a ( ) } var c = [ ] ; return function ( b ) { function e ( ) { try { document . documentElement . doScroll ( "left" ) } catch ( b ) { setTimeout ( e , 1 ) ; return } a ( ) } c . push ( b ) ; "complete" === document . readyState &&
setTimeout ( a , 1 ) ; if ( 1 == c . length ) if ( document . addEventListener ) document . addEventListener ( "DOMContentLoaded" , a , ! 1 ) , window . addEventListener ( "load" , a , ! 1 ) ; else if ( document . attachEvent ) { document . attachEvent ( "onreadystatechange" , a ) ; window . attachEvent ( "onload" , a ) ; b = ! 1 ; try { b = ! window . frameElement } catch ( d ) { } document . documentElement . doScroll && b && e ( ) } } } ( ) } , b = window . CKEDITOR _GETURL ; if ( b ) { var c = d . getUrl ; d . getUrl = function ( a ) { return b . call ( d , a ) || c . call ( d , a ) } } return d } ( ) ) ;
( function ( ) { var a = { } ; CKEDITOR . event || ( CKEDITOR . event = function ( ) { } , CKEDITOR . event . implementOn = function ( a ) { var b = CKEDITOR . event . prototype , c ; for ( c in b ) null == a [ c ] && ( a [ c ] = b [ c ] ) } , CKEDITOR . event . prototype = function ( ) { function d ( a ) { var e = b ( this ) ; return e [ a ] || ( e [ a ] = new c ( a ) ) } var b = function ( a ) { a = a . getPrivate && a . getPrivate ( ) || a . _ || ( a . _ = { } ) ; return a . events || ( a . events = { } ) } , c = function ( a ) { this . name = a ; this . listeners = [ ] } ; c . prototype = { getListenerIndex : function ( a ) { for ( var b = 0 , c = this . listeners ; b < c . length ; b ++ ) if ( c [ b ] . fn ==
a ) return b ; return - 1 } } ; return { define : function ( a , b ) { var c = d . call ( this , a ) ; CKEDITOR . tools . extend ( c , b , ! 0 ) } , on : function ( b , c , k , h , q ) { function m ( x , y , l , A ) { x = { name : b , sender : this , editor : x , data : y , listenerData : h , stop : l , cancel : A , removeListener : g } ; return ! 1 === c . call ( k , x ) ? a : x . data } function g ( ) { x . removeListener ( b , c ) } var x = this , y = d . call ( this , b ) ; if ( 0 > y . getListenerIndex ( c ) ) { y = y . listeners ; k || ( k = this ) ; isNaN ( q ) && ( q = 10 ) ; m . fn = c ; m . priority = q ; for ( var A = y . length - 1 ; 0 <= A ; A -- ) if ( y [ A ] . priority <= q ) return y . splice ( A + 1 , 0 , m ) , { removeListener : g } ;
y . unshift ( m ) } return { removeListener : g } } , once : function ( ) { var a = Array . prototype . slice . call ( arguments ) , b = a [ 1 ] ; a [ 1 ] = function ( a ) { a . removeListener ( ) ; return b . apply ( this , arguments ) } ; return this . on . apply ( this , a ) } , capture : function ( ) { CKEDITOR . event . useCapture = 1 ; var a = this . on . apply ( this , arguments ) ; CKEDITOR . event . useCapture = 0 ; return a } , fire : function ( ) { var c = 0 , e = function ( ) { c = 1 } , d = 0 , h = function ( ) { d = 1 } ; return function ( q , m , g ) { var x = b ( this ) [ q ] ; q = c ; var y = d ; c = d = 0 ; if ( x ) { var A = x . listeners ; if ( A . length ) for ( var A = A . slice ( 0 ) ,
F , v = 0 ; v < A . length ; v ++ ) { if ( x . errorProof ) try { F = A [ v ] . call ( this , g , m , e , h ) } catch ( l ) { } else F = A [ v ] . call ( this , g , m , e , h ) ; F === a ? d = 1 : "undefined" != typeof F && ( m = F ) ; if ( c || d ) break } } m = d ? ! 1 : "undefined" == typeof m ? ! 0 : m ; c = q ; d = y ; return m } } ( ) , fireOnce : function ( a , c , d ) { c = this . fire ( a , c , d ) ; delete b ( this ) [ a ] ; return c } , removeListener : function ( a , c ) { var d = b ( this ) [ a ] ; if ( d ) { var h = d . getListenerIndex ( c ) ; 0 <= h && d . listeners . splice ( h , 1 ) } } , removeAllListeners : function ( ) { var a = b ( this ) , c ; for ( c in a ) delete a [ c ] } , hasListeners : function ( a ) { return ( a =
a ) return b ; return - 1 } } ; return { define : function ( a , b ) { var c = d . call ( this , a ) ; CKEDITOR . tools . extend ( c , b , ! 0 ) } , on : function ( b , c , k , h , p ) { function m ( x , y , A , p ) { x = { name : b , sender : this , editor : x , data : y , listenerData : h , stop : A , cancel : p , removeListener : g } ; return ! 1 === c . call ( k , x ) ? a : x . data } function g ( ) { x . removeListener ( b , c ) } var x = this , y = d . call ( this , b ) ; if ( 0 > y . getListenerIndex ( c ) ) { y = y . listeners ; k || ( k = this ) ; isNaN ( p ) && ( p = 10 ) ; m . fn = c ; m . priority = p ; for ( var A = y . length - 1 ; 0 <= A ; A -- ) if ( y [ A ] . priority <= p ) return y . splice ( A + 1 , 0 , m ) , { removeListener : g } ;
y . unshift ( m ) } return { removeListener : g } } , once : function ( ) { var a = Array . prototype . slice . call ( arguments ) , b = a [ 1 ] ; a [ 1 ] = function ( a ) { a . removeListener ( ) ; return b . apply ( this , arguments ) } ; return this . on . apply ( this , a ) } , capture : function ( ) { CKEDITOR . event . useCapture = 1 ; var a = this . on . apply ( this , arguments ) ; CKEDITOR . event . useCapture = 0 ; return a } , fire : function ( ) { var c = 0 , e = function ( ) { c = 1 } , d = 0 , h = function ( ) { d = 1 } ; return function ( p , m , g ) { var x = b ( this ) [ p ] ; p = c ; var y = d ; c = d = 0 ; if ( x ) { var A = x . listeners ; if ( A . length ) for ( var A = A . slice ( 0 ) ,
F , v = 0 ; v < A . length ; v ++ ) { if ( x . errorProof ) try { F = A [ v ] . call ( this , g , m , e , h ) } catch ( l ) { } else F = A [ v ] . call ( this , g , m , e , h ) ; F === a ? d = 1 : "undefined" != typeof F && ( m = F ) ; if ( c || d ) break } } m = d ? ! 1 : "undefined" == typeof m ? ! 0 : m ; c = p ; d = y ; return m } } ( ) , 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 ] ) ) ;
@@ -20,45 +20,45 @@ CKEDITOR.loadFullCore,d=CKEDITOR.loadFullCoreTimeout;a&&(CKEDITOR.status="basic_
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 , y , b ) { this . _minInterval = a ; this . _context = b ; this . _lastOutput = this . _scheduledTimer = 0 ; this . _output = CKEDITOR . tools . bind ( y , 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 x = ( new Date ) . getTime ( ) - c . _lastOutput ; x < c . _minInterval ? c . _scheduledTimer = setTimeout ( a , c . _minInterval - x ) : a ( ) } } } function d ( x , y , b ) { a . call ( this , x , y , b ) ; this . _args = [ ] ; var c = this ; this . input = CKEDITOR . tools . override ( this . input ,
function ( a ) { return function ( ) { c . _args = Array . prototype . slice . call ( arguments ) ; a . call ( this ) } } ) } var b = [ ] , c = CKEDITOR . env . gecko ? "-moz-" : CKEDITOR . env . webkit ? "-webkit-" : CKEDITOR . env . ie ? "-ms-" : "" , f = /&/g , e = />/g , k = /</g , h = /"/g , q = /&(lt|gt|amp|quot|nbsp|shy|#\d{1,5});/g , m = { lt : "\x3c" , gt : "\x3e" , amp : "\x26" , quot : '"' , nbsp : " " , shy : " " } , g = function ( a , y ) { return "#" == y [ 0 ] ? String . fromCharCode ( parseInt ( y . slice ( 1 ) , 10 ) ) : m [ y ] } ; CKEDITOR . on ( "reset" , function ( ) { b = [ ] } ) ; CKEDITOR . tools = { arrayCompare : function ( a , y ) { if ( ! a && ! y ) return ! 0 ;
function ( a ) { return function ( ) { c . _args = Array . prototype . slice . call ( arguments ) ; a . call ( this ) } } ) } var b = [ ] , c = CKEDITOR . env . gecko ? "-moz-" : CKEDITOR . env . webkit ? "-webkit-" : CKEDITOR . env . ie ? "-ms-" : "" , f = /&/g , e = />/g , k = /</g , h = /"/g , p = /&(lt|gt|amp|quot|nbsp|shy|#\d{1,5});/g , m = { lt : "\x3c" , gt : "\x3e" , amp : "\x26" , quot : '"' , nbsp : " " , shy : " " } , g = function ( a , y ) { return "#" == y [ 0 ] ? String . fromCharCode ( parseInt ( y . slice ( 1 ) , 10 ) ) : m [ y ] } ; CKEDITOR . on ( "reset" , function ( ) { b = [ ] } ) ; CKEDITOR . tools = { arrayCompare : function ( a , y ) { if ( ! a && ! y ) return ! 0 ;
if ( ! a || ! y || a . length != y . length ) return ! 1 ; for ( var b = 0 ; b < a . length ; b ++ ) if ( a [ b ] != y [ 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 , g ; "boolean" == typeof ( c = arguments [ b - 1 ] ) ? b -- : "boolean" == typeof ( c = arguments [ b - 2 ] ) && ( g = arguments [ b - 1 ] , b -= 2 ) ; for ( var h = 1 ; h < b ; h ++ ) { var l = arguments [ h ] || { } ; CKEDITOR . tools . array . forEach ( CKEDITOR . tools . object . keys ( l ) , function ( b ) { if ( ! 0 === c || null == a [ b ] ) if ( ! g || b in g ) a [ b ] = l [ b ] } ) } return a } , prototypedCopy : function ( a ) { var b = function ( ) { } ;
b . prototype = a ; return new b } , copy : function ( a ) { var b = { } , c ; for ( c in a ) b [ c ] = a [ c ] ; return b } , isArray : function ( a ) { return "[object Array]" == Object . prototype . toString . call ( a ) } , isEmpty : function ( a ) { for ( var b in a ) if ( a . hasOwnProperty ( b ) ) return ! 1 ; return ! 0 } , cssVendorPrefix : function ( a , b , g ) { if ( g ) return c + a + ":" + b + ";" + a + ":" + b ; g = { } ; g [ a ] = b ; g [ c + a ] = b ; return g } , cssStyleToDomStyle : function ( ) { var a = document . createElement ( "div" ) . style , b = "undefined" != typeof a . cssFloat ? "cssFloat" : "undefined" != typeof a . styleFloat ? "styleFloat" :
"float" ; return function ( a ) { return "float" == a ? b : a . replace ( /-./g , function ( a ) { return a . substr ( 1 ) . toUpperCase ( ) } ) } } ( ) , buildStyleHtml : function ( a ) { a = [ ] . concat ( a ) ; for ( var b , c = [ ] , g = 0 ; g < a . length ; g ++ ) if ( b = a [ g ] ) / @ import | [ { } ] / . test ( b ) ? c . push ( "\x3cstyle\x3e" + b + "\x3c/style\x3e" ) : ( b = CKEDITOR . appendTimestamp ( b ) , c . push ( '\x3clink type\x3d"text/css" rel\x3dstylesheet href\x3d"' + b + '"\x3e' ) ) ; return c . join ( "" ) } , htmlEncode : function ( a ) { return void 0 === a || null === a ? "" : String ( a ) . replace ( f , "\x26amp;" ) . replace ( e , "\x26gt;" ) . replace ( k ,
"\x26lt;" ) } , htmlDecode : function ( a ) { return a . replace ( q , g ) } , htmlEncodeAttr : function ( a ) { return CKEDITOR . tools . htmlEncode ( a ) . replace ( h , "\x26quot;" ) } , htmlDecodeAttr : function ( a ) { return CKEDITOR . tools . htmlDecode ( a ) } , transformPlainTextToHtml : function ( a , b ) { var c = b == CKEDITOR . ENTER _BR , g = this . htmlEncode ( a . replace ( /\r\n/g , "\n" ) ) , g = g . replace ( /\t/g , "\x26nbsp;\x26nbsp; \x26nbsp;" ) , h = b == CKEDITOR . ENTER _P ? "p" : "div" ; if ( ! c ) { var l = /\n{2}/g ; if ( l . test ( g ) ) var e = "\x3c" + h + "\x3e" , d = "\x3c/" + h + "\x3e" , g = e + g . replace ( l , function ( ) { return d +
"\x26lt;" ) } , htmlDecode : function ( a ) { return a . replace ( p , g ) } , htmlEncodeAttr : function ( a ) { return CKEDITOR . tools . htmlEncode ( a ) . replace ( h , "\x26quot;" ) } , htmlDecodeAttr : function ( a ) { return CKEDITOR . tools . htmlDecode ( a ) } , transformPlainTextToHtml : function ( a , b ) { var c = b == CKEDITOR . ENTER _BR , g = this . htmlEncode ( a . replace ( /\r\n/g , "\n" ) ) , g = g . replace ( /\t/g , "\x26nbsp;\x26nbsp; \x26nbsp;" ) , h = b == CKEDITOR . ENTER _P ? "p" : "div" ; if ( ! c ) { var l = /\n{2}/g ; if ( l . test ( g ) ) var e = "\x3c" + h + "\x3e" , d = "\x3c/" + h + "\x3e" , g = e + g . replace ( l , function ( ) { return d +
e } ) + d } g = g . replace ( /\n/g , "\x3cbr\x3e" ) ; c || ( g = g . replace ( new RegExp ( "\x3cbr\x3e(?\x3d\x3c/" + h + "\x3e)" ) , function ( a ) { return CKEDITOR . tools . repeat ( a , 2 ) } ) ) ; g = g . replace ( /^ | $/g , "\x26nbsp;" ) ; return g = g . replace ( /(>|\s) /g , function ( a , b ) { return b + "\x26nbsp;" } ) . replace ( / (?=<)/g , "\x26nbsp;" ) } , getNextNumber : function ( ) { var a = 0 ; return function ( ) { return ++ a } } ( ) , getNextId : function ( ) { return "cke_" + this . getNextNumber ( ) } , getUniqueId : function ( ) { for ( var a = "e" , b = 0 ; 8 > b ; b ++ ) a += Math . floor ( 65536 * ( 1 + Math . random ( ) ) ) . toString ( 16 ) . substring ( 1 ) ;
return a } , override : function ( a , b ) { var c = b ( a ) ; c . prototype = a . prototype ; return c } , setTimeout : function ( a , b , c , g , h ) { h || ( h = window ) ; c || ( c = h ) ; return h . setTimeout ( function ( ) { g ? a . apply ( c , [ ] . concat ( g ) ) : a . apply ( c ) } , b || 0 ) } , throttle : function ( a , b , c ) { return new this . buffers . throttle ( a , b , c ) } , trim : function ( ) { var a = /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g ; return function ( b ) { return b . replace ( a , "" ) } } ( ) , ltrim : function ( ) { var a = /^[ \t\n\r]+/g ; return function ( b ) { return b . replace ( a , "" ) } } ( ) , rtrim : function ( ) { var a = /[ \t\n\r]+$/g ; return function ( b ) { return b . replace ( a ,
"" ) } } ( ) , indexOf : function ( a , b ) { if ( "function" == typeof b ) for ( var c = 0 , g = a . length ; c < g ; c ++ ) { if ( b ( a [ c ] ) ) return c } else { if ( a . indexOf ) return a . indexOf ( b ) ; c = 0 ; for ( g = a . length ; c < g ; c ++ ) if ( a [ c ] === b ) return c } return - 1 } , search : function ( a , b ) { var c = CKEDITOR . tools . indexOf ( a , b ) ; return 0 <= c ? a [ c ] : null } , bind : function ( a , b ) { var c = Array . prototype . slice . call ( arguments , 2 ) ; return function ( ) { return a . apply ( b , c . concat ( Array . prototype . slice . call ( arguments ) ) ) } } , createClass : function ( a ) { var b = a . $ , c = a . base , g = a . privates || a . _ , h = a . proto ;
a = a . statics ; ! b && ( b = function ( ) { c && this . base . apply ( this , arguments ) } ) ; if ( g ) var l = b , b = function ( ) { var a = this . _ || ( this . _ = { } ) , b ; for ( b in g ) { var c = g [ b ] ; a [ b ] = "function" == typeof c ? CKEDITOR . tools . bind ( c , this ) : c } l . apply ( this , arguments ) } ; c && ( b . prototype = this . prototypedCopy ( c . prototype ) , b . prototype . constructor = b , b . base = c , b . baseProto = c . prototype , b . prototype . base = function w ( ) { this . base = c . prototype . base ; c . apply ( this , arguments ) ; this . base = w } ) ; h && this . extend ( b . prototype , h , ! 0 ) ; a && this . extend ( b , a , ! 0 ) ; return b } , addFunction : function ( a ,
c ) { return b . push ( function ( ) { return a . apply ( c || this , arguments ) } ) - 1 } , removeFunction : function ( a ) { b [ a ] = null } , callFunction : function ( a ) { var c = b [ a ] ; return c && c . apply ( window , Array . prototype . slice . call ( arguments , 1 ) ) } , cssLength : function ( ) { var a = /^-?\d+\.?\d*px$/ , b ; return function ( c ) { b = CKEDITOR . tools . trim ( c + "" ) + "px" ; return a . test ( b ) ? b : c || "" } } ( ) , convertToPx : function ( ) { var a , b ; return function ( c ) { 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 ( c ) ) { var g = 0 > parseFloat ( c ) ; g && ( c = c . replace ( "-" , "" ) ) ; a . setStyle ( "width" , c ) ; b = a . getClientRect ( ) ; c = Math . round ( b . width ) ; return g ? - c : c } return c } } ( ) , repeat : function ( a , b ) { return Array ( b + 1 ) . join ( a ) } , tryThese : function ( ) { for ( var a , b = 0 , c = arguments . length ; b < c ; b ++ ) { var g = arguments [ b ] ; try { a = g ( ) ; break } catch ( h ) { } } return a } , genKey : function ( ) { return Array . prototype . slice . call ( arguments ) . join ( "-" ) } , defer : function ( a ) { return function ( ) { var b = arguments ,
c = this ; window . setTimeout ( function ( ) { a . apply ( c , b ) } , 0 ) } } , normalizeCssText : function ( a , b ) { var c = [ ] , g , h = CKEDITOR . tools . parseCssText ( a , ! 0 , b ) ; for ( g in h ) c . push ( g + ":" + h [ g ] ) ; c . sort ( ) ; return c . length ? c . join ( ";" ) + ";" : "" } , convertRgbToHex : function ( a ) { return a . replace ( /(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi , function ( a , b , c , g ) { a = [ b , c , g ] ; for ( b = 0 ; 3 > b ; b ++ ) a [ b ] = ( "0" + parseInt ( a [ b ] , 10 ) . toString ( 16 ) ) . slice ( - 2 ) ; return "#" + a . join ( "" ) } ) } , normalizeHex : function ( a ) { return a . replace ( /#(([0-9a-f]{3}){1,2})($|;|\s+)/gi ,
function ( a , b , c , g ) { a = b . toLowerCase ( ) ; 3 == a . length && ( a = a . split ( "" ) , a = [ a [ 0 ] , a [ 0 ] , a [ 1 ] , a [ 1 ] , a [ 2 ] , a [ 2 ] ] . join ( "" ) ) ; return "#" + a + g } ) } , _isValidColorFormat : function ( a ) { if ( ! a ) return ! 1 ; a = a . replace ( /\s+/g , "" ) ; return /^[a-z0-9()#%,./]+$/i . test ( a ) } , parseCssText : function ( a , b , c ) { var g = { } ; c && ( a = ( new CKEDITOR . dom . element ( "span" ) ) . setAttribute ( "style" , a ) . getAttribute ( "style" ) || "" ) ; a && ( a = CKEDITOR . tools . normalizeHex ( CKEDITOR . tools . convertRgbToHex ( a ) ) ) ; if ( ! a || ";" == a ) return g ; a . replace ( /"/g , '"' ) . replace ( /\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g ,
function ( a , c , x ) { b && ( c = c . toLowerCase ( ) , "font-family" == c && ( x = x . replace ( /\s*,\s*/g , "," ) ) , x = CKEDITOR . tools . trim ( x ) ) ; g [ c ] = x } ) ; return g } , writeCssText : function ( a , b ) { var c , g = [ ] ; for ( c in a ) g . push ( c + ":" + a [ c ] ) ; b && g . sort ( ) ; return g . join ( "; " ) } , objectCompare : function ( a , b , c ) { var g ; if ( ! a && ! b ) return ! 0 ; if ( ! a || ! b ) return ! 1 ; for ( g in a ) if ( a [ g ] != b [ g ] ) return ! 1 ; if ( ! c ) for ( g in b ) if ( a [ g ] != b [ g ] ) return ! 1 ; return ! 0 } , objectKeys : function ( a ) { return CKEDITOR . tools . object . keys ( a ) } , convertArrayToObject : function ( a , b ) { var c = { } ; 1 == arguments . length &&
( b = ! 0 ) ; for ( var g = 0 , h = a . length ; g < h ; ++ g ) c [ a [ g ] ] = b ; return c } , getStyledSpans : function ( a , b ) { var c = CKEDITOR . env . ie && 8 == CKEDITOR . env . version ? a . toUpperCase ( ) : a , c = b . find ( "span[style*\x3d" + c + "]" ) . toArray ( ) ; return CKEDITOR . tools . array . filter ( c , function ( b ) { return ! ! b . getStyle ( a ) } ) } , fixDomain : function ( ) { for ( var a ; ; ) try { a = window . parent . document . domain ; break } catch ( b ) { a = a ? a . replace ( /.+?(?:\.|$)/ , "" ) : document . domain ; if ( ! a ) break ; document . domain = a } return ! ! a } , eventsBuffer : function ( a , b , c ) { return new this . buffers . event ( a ,
b , c ) } , enableHtml5Elements : function ( a , b ) { for ( var c = "abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup main mark meter nav output progress section summary time video" . split ( " " ) , g = c . length , h ; g -- ; ) h = a . createElement ( c [ g ] ) , b && a . appendChild ( h ) } , checkIfAnyArrayItemMatches : function ( a , b ) { for ( var c = 0 , g = a . length ; c < g ; ++ c ) if ( a [ c ] . match ( b ) ) return ! 0 ; return ! 1 } , checkIfAnyObjectPropertyMatches : function ( a , b ) { for ( var c in a ) if ( c . match ( b ) ) return ! 0 ; return ! 1 } , keystrokeToString : function ( a ,
b ) { var c = this . keystrokeToArray ( a , b ) ; c . display = c . display . join ( "+" ) ; c . aria = c . aria . join ( "+" ) ; return c } , keystrokeToArray : function ( a , b ) { var c = b & 16711680 , g = b & 65535 , h = CKEDITOR . env . mac , l = [ ] , e = [ ] ; c & CKEDITOR . CTRL && ( l . push ( h ? "⌘" : a [ 17 ] ) , e . push ( h ? a [ 224 ] : a [ 17 ] ) ) ; c & CKEDITOR . ALT && ( l . push ( h ? "⌥" : a [ 18 ] ) , e . push ( a [ 18 ] ) ) ; c & CKEDITOR . SHIFT && ( l . push ( h ? "⇧" : a [ 16 ] ) , e . push ( a [ 16 ] ) ) ; g && ( a [ g ] ? ( l . push ( a [ g ] ) , e . push ( a [ g ] ) ) : ( l . push ( String . fromCharCode ( g ) ) , e . push ( String . fromCharCode ( g ) ) ) ) ; return { display : l , aria : e } } , transparentImageData : "data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw\x3d\x3d" ,
getCookie : function ( a ) { a = a . toLowerCase ( ) ; for ( var b = document . cookie . split ( ";" ) , c , g , h = 0 ; h < b . length ; h ++ ) if ( c = b [ h ] . split ( "\x3d" ) , g = decodeURIComponent ( CKEDITOR . tools . trim ( c [ 0 ] ) . toLowerCase ( ) ) , g === a ) return decodeURIComponent ( 1 < c . length ? c [ 1 ] : "" ) ; return null } , setCookie : function ( a , b ) { document . cookie = encodeURIComponent ( a ) + "\x3d" + encodeURIComponent ( b ) + ";path\x3d/" } , getCsrfToken : function ( ) { var a = CKEDITOR . tools . getCookie ( "ckCsrfToken" ) ; if ( ! a || 40 != a . length ) { var a = [ ] , b = "" ; if ( window . crypto && window . crypto . getRandomValues ) a =
new Uint8Array ( 40 ) , window . crypto . getRandomValues ( a ) ; else for ( var c = 0 ; 40 > c ; c ++ ) a . push ( Math . floor ( 256 * Math . random ( ) ) ) ; for ( c = 0 ; c < a . length ; c ++ ) var g = "abcdefghijklmnopqrstuvwxyz0123456789" . charAt ( a [ c ] % 36 ) , b = b + ( . 5 < Math . random ( ) ? g . toUpperCase ( ) : g ) ; a = b ; CKEDITOR . tools . setCookie ( "ckCsrfToken" , a ) } return a } , escapeCss : function ( a ) { if ( a ) if ( window . CSS && CSS . escape ) a = CSS . escape ( a ) ; else { a = String ( a ) ; for ( var b = a . length , c = - 1 , g , h = "" , l = a . charCodeAt ( 0 ) ; ++ c < b ; ) g = a . charCodeAt ( c ) , h = 0 == g ? h + "� " : 127 == g || 1 <= g && 31 >= g || 0 == c && 48 <=
g && 57 >= g || 1 == c && 48 <= g && 57 >= g && 45 == l ? h + ( "\\" + g . toString ( 16 ) + " " ) : 0 == c && 1 == b && 45 == g ? h + ( "\\" + a . charAt ( c ) ) : 128 <= g || 45 == g || 95 == g || 48 <= g && 57 >= g || 65 <= g && 90 >= g || 97 <= g && 122 >= g ? h + a . charAt ( c ) : h + ( "\\" + a . charAt ( c ) ) ; a = h } else a = "" ; return a } , getMouseButton : function ( a ) { return ( a = a && a . data ? a . data . $ : a ) ? CKEDITOR . tools . normalizeMouseButton ( a . button ) : ! 1 } , normalizeMouseButton : function ( a , b ) { if ( ! CKEDITOR . env . ie || 9 <= CKEDITOR . env . version && ! CKEDITOR . env . ie6Compat ) return a ; for ( var c = [ [ CKEDITOR . MOUSE _BUTTON _LEFT , 1 ] , [ CKEDITOR . MOUSE _BUTTON _MIDDLE ,
4 ] , [ CKEDITOR . MOUSE _BUTTON _RIGHT , 2 ] ] , g = 0 ; g < c . length ; g ++ ) { var h = c [ g ] ; if ( h [ 0 ] === a && b ) return h [ 1 ] ; if ( ! b && h [ 1 ] === a ) return h [ 0 ] } } , convertHexStringToBytes : function ( a ) { var b = [ ] , c = a . length / 2 , g ; for ( g = 0 ; g < c ; g ++ ) b . push ( parseInt ( a . substr ( 2 * g , 2 ) , 16 ) ) ; return b } , convertBytesToBase64 : function ( a ) { var b = "" , c = a . length , g ; for ( g = 0 ; g < c ; g += 3 ) { var h = a . slice ( g , g + 3 ) , l = h . length , e = [ ] , d ; if ( 3 > l ) for ( d = l ; 3 > d ; d ++ ) h [ d ] = 0 ; e [ 0 ] = ( h [ 0 ] & 252 ) >> 2 ; e [ 1 ] = ( h [ 0 ] & 3 ) << 4 | h [ 1 ] >> 4 ; e [ 2 ] = ( h [ 1 ] & 15 ) << 2 | ( h [ 2 ] & 192 ) >> 6 ; e [ 3 ] = h [ 2 ] & 63 ; for ( d = 0 ; 4 > d ; d ++ ) b = d <= l ?
b + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" . charAt ( e [ d ] ) : b + "\x3d" } return b } , style : { parse : { _borderStyle : "none hidden dotted dashed solid double groove ridge inset outset" . split ( " " ) , _widthRegExp : /^(thin|medium|thick|[\+-]?\d+(\.\d+)?[a-z%]+|[\+-]?0+(\.0+)?|\.\d+[a-z%]+)$/ , _rgbaRegExp : /rgba?\(\s*\d+%?\s*,\s*\d+%?\s*,\s*\d+%?\s*(?:,\s*[0-9.]+\s*)?\)/gi , _hslaRegExp : /hsla?\(\s*[0-9.]+\s*,\s*\d+%\s*,\s*\d+%\s*(?:,\s*[0-9.]+\s*)?\)/gi , background : function ( a ) { var b = { } , c = this . _findColor ( a ) ;
c . length && ( b . color = c [ 0 ] , CKEDITOR . tools . array . forEach ( c , function ( b ) { a = a . replace ( b , "" ) } ) ) ; if ( a = CKEDITOR . tools . trim ( a ) ) b . unprocessed = a ; return b } , margin : function ( a ) { return CKEDITOR . tools . style . parse . sideShorthand ( a , function ( a ) { return a . match ( /(?:\-?[\.\d]+(?:%|\w*)|auto|inherit|initial|unset|revert)/g ) || [ "0px" ] } ) } , sideShorthand : function ( a , b ) { function c ( a ) { g . top = h [ a [ 0 ] ] ; g . right = h [ a [ 1 ] ] ; g . bottom = h [ a [ 2 ] ] ; g . left = h [ a [ 3 ] ] } var g = { } , h = b ? b ( a ) : a . split ( /\s+/ ) ; switch ( h . length ) { case 1 : c ( [ 0 , 0 , 0 , 0 ] ) ; break ; case 2 : c ( [ 0 ,
1 , 0 , 1 ] ) ; break ; case 3 : c ( [ 0 , 1 , 2 , 1 ] ) ; break ; case 4 : c ( [ 0 , 1 , 2 , 3 ] ) } return g } , border : function ( a ) { return CKEDITOR . tools . style . border . fromCssRule ( a ) } , _findColor : function ( a ) { var b = [ ] , c = CKEDITOR . tools . array , b = b . concat ( a . match ( this . _rgbaRegExp ) || [ ] ) , b = b . concat ( a . match ( this . _hslaRegExp ) || [ ] ) ; return b = b . concat ( c . filter ( a . split ( /\s+/ ) , function ( a ) { return a . match ( /^\#[a-f0-9]{3}(?:[a-f0-9]{3})?$/gi ) ? ! 0 : a . toLowerCase ( ) in CKEDITOR . tools . style . parse . _colors } ) ) } } } , array : { filter : function ( a , b , c ) { var g = [ ] ; this . forEach ( a ,
function ( h , l ) { b . call ( c , h , l , a ) && g . push ( h ) } ) ; return g } , find : function ( a , b , c ) { for ( var g = a . length , h = 0 ; h < g ; ) { if ( b . call ( c , a [ h ] , h , a ) ) return a [ h ] ; h ++ } } , forEach : function ( a , b , c ) { var g = a . length , h ; for ( h = 0 ; h < g ; h ++ ) b . call ( c , a [ h ] , h , a ) } , map : function ( a , b , c ) { for ( var g = [ ] , h = 0 ; h < a . length ; h ++ ) g . push ( b . call ( c , a [ h ] , h , a ) ) ; return g } , reduce : function ( a , b , c , g ) { for ( var h = 0 ; h < a . length ; h ++ ) c = b . call ( g , c , a [ h ] , h , a ) ; return c } , every : function ( a , b , c ) { if ( ! a . length ) return ! 0 ; b = this . filter ( a , b , c ) ; return a . length === b . length } , some : function ( a ,
b , c ) { for ( var g = 0 ; g < a . length ; g ++ ) if ( b . call ( c , a [ g ] , g , a ) ) return ! 0 ; return ! 1 } , zip : function ( a , b ) { return CKEDITOR . tools . array . map ( a , function ( a , c ) { return [ a , b [ c ] ] } ) } , unique : function ( a ) { return this . filter ( a , function ( b , c ) { return c === CKEDITOR . tools . array . indexOf ( a , b ) } ) } } , object : { DONT _ENUMS : "toString toLocaleString valueOf hasOwnProperty isPrototypeOf propertyIsEnumerable constructor" . split ( " " ) , entries : function ( a ) { return CKEDITOR . tools . array . map ( CKEDITOR . tools . object . keys ( a ) , function ( b ) { return [ b , a [ b ] ] } ) } , values : function ( a ) { return CKEDITOR . tools . array . map ( CKEDITOR . tools . object . keys ( a ) ,
function ( b ) { return a [ b ] } ) } , keys : function ( a ) { var b = Object . prototype . hasOwnProperty , c = [ ] , g = CKEDITOR . tools . object . DONT _ENUMS ; if ( CKEDITOR . env . ie && 9 > CKEDITOR . env . version && ( ! a || "object" !== typeof a ) ) { b = [ ] ; if ( "string" === typeof a ) for ( c = 0 ; c < a . length ; c ++ ) b . push ( String ( c ) ) ; return b } for ( var h in a ) c . push ( h ) ; if ( CKEDITOR . env . ie && 9 > CKEDITOR . env . version ) for ( h = 0 ; h < g . length ; h ++ ) b . call ( a , g [ h ] ) && c . push ( g [ h ] ) ; return c } , findKey : function ( a , b ) { if ( "object" !== typeof a ) return null ; for ( var c in a ) if ( a [ c ] === b ) return c ; return null } ,
merge : function ( a , b ) { var c = CKEDITOR . tools , g = c . clone ( a ) , h = c . clone ( b ) ; c . array . forEach ( c . object . keys ( h ) , function ( a ) { g [ a ] = "object" === typeof h [ a ] && "object" === typeof g [ a ] ? c . object . merge ( g [ a ] , h [ a ] ) : h [ a ] } ) ; return g } } , getAbsoluteRectPosition : function ( a , b ) { function c ( a ) { if ( a ) { var b = a . getClientRect ( ) ; g . top += b . top ; g . left += b . left ; "x" in g && "y" in g && ( g . x += b . x , g . y += b . y ) ; c ( a . getWindow ( ) . getFrame ( ) ) } } var g = CKEDITOR . tools . copy ( b ) ; c ( a . getFrame ( ) ) ; var h = CKEDITOR . document . getWindow ( ) . getScrollPosition ( ) ; g . top += h . y ; g . left +=
h . x ; "x" in g && "y" in g && ( g . y += h . y , g . x += h . x ) ; g . right = g . left + g . width ; g . bottom = g . top + g . height ; return g } } ; 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 , g ) { var h = a [ "border-" + g ] || b [ g ] ; c [ g ] = h ? CKEDITOR . tools . style . parse . sideShorthand ( h ) : null ; return c } , { } ) ; return CKEDITOR . tools . array . reduce ( [ "top" , "right" , "bottom" , "left" ] , function ( b , g ) { var h = { } , e ; for ( e in c ) { var d = a [ "border-" + g + "-" + e ] ; h [ e ] = d ? d : c [ e ] && c [ e ] [ g ] } b [ "border-" + g ] = 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 e in b ) delete c [ e ] } return c } , b = { } , c = { } , f = { address : 1 , article : 1 , aside : 1 , blockquote : 1 , details : 1 , div : 1 , dl : 1 , fieldset : 1 , figure : 1 , footer : 1 , form : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , header : 1 , hgroup : 1 , hr : 1 , main : 1 , menu : 1 , nav : 1 , ol : 1 , p : 1 , pre : 1 , section : 1 , table : 1 , ul : 1 } , e = { command : 1 , link : 1 , meta : 1 , noscript : 1 , script : 1 , style : 1 } , k = { } , h = { "#" : 1 } , q = { center : 1 , dir : 1 , noframes : 1 } ;
a ( b , { a : 1 , abbr : 1 , area : 1 , audio : 1 , b : 1 , bdi : 1 , bdo : 1 , br : 1 , button : 1 , canvas : 1 , cite : 1 , code : 1 , command : 1 , datalist : 1 , del : 1 , dfn : 1 , em : 1 , embed : 1 , i : 1 , iframe : 1 , img : 1 , input : 1 , ins : 1 , kbd : 1 , keygen : 1 , label : 1 , map : 1 , mark : 1 , meter : 1 , noscript : 1 , object : 1 , output : 1 , progress : 1 , q : 1 , ruby : 1 , s : 1 , samp : 1 , script : 1 , select : 1 , small : 1 , span : 1 , strong : 1 , sub : 1 , sup : 1 , textarea : 1 , time : 1 , u : 1 , "var" : 1 , video : 1 , wbr : 1 } , h , { acronym : 1 , applet : 1 , basefont : 1 , big : 1 , font : 1 , isindex : 1 , strike : 1 , style : 1 , tt : 1 } ) ; a ( c , f , b , q ) ; d = { a : d ( b , { a : 1 , button : 1 } ) , abbr : b , address : c ,
return a } , override : function ( a , b ) { var c = b ( a ) ; c . prototype = a . prototype ; return c } , setTimeout : function ( a , b , c , g , h ) { h || ( h = window ) ; c || ( c = h ) ; return h . setTimeout ( function ( ) { g ? a . apply ( c , [ ] . concat ( g ) ) : a . apply ( c ) } , b || 0 ) } , debounce : function ( a , b ) { var c ; return function ( ) { var g = this , h = arguments ; clearTimeout ( c ) ; c = setTimeout ( function ( ) { c = null ; a . apply ( g , h ) } , b ) } } , throttle : function ( a , b , c ) { return new this . buffers . throttle ( a , b , c ) } , trim : function ( ) { var a = /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g ; return function ( b ) { return b . replace ( a ,
"" ) } } ( ) , ltrim : function ( ) { var a = /^[ \t\n\r]+/g ; return function ( b ) { return b . replace ( a , "" ) } } ( ) , rtrim : function ( ) { var a = /[ \t\n\r]+$/g ; return function ( b ) { return b . replace ( a , "" ) } } ( ) , indexOf : function ( a , b ) { if ( "function" == typeof b ) for ( var c = 0 , g = a . length ; c < g ; c ++ ) { if ( b ( a [ c ] ) ) return c } else { if ( a . indexOf ) return a . indexOf ( b ) ; c = 0 ; for ( g = a . length ; c < g ; c ++ ) if ( a [ c ] === b ) return c } return - 1 } , search : function ( a , b ) { var c = CKEDITOR . tools . indexOf ( a , b ) ; return 0 <= c ? a [ c ] : null } , bind : function ( a , b ) { var c = Array . prototype . slice . call ( arguments ,
2 ) ; return function ( ) { return a . apply ( b , c . concat ( Array . prototype . slice . call ( arguments ) ) ) } } , createClass : function ( a ) { var b = a . $ , c = a . base , g = a . privates || a . _ , h = a . proto ; a = a . statics ; ! b && ( b = function ( ) { c && this . base . apply ( this , arguments ) } ) ; if ( g ) var l = b , b = function ( ) { var a = this . _ || ( this . _ = { } ) , b ; for ( b in g ) { var c = g [ b ] ; a [ b ] = "function" == typeof c ? CKEDITOR . tools . bind ( c , this ) : c } l . apply ( this , arguments ) } ; c && ( b . prototype = this . prototypedCopy ( c . prototype ) , b . prototype . constructor = b , b . base = c , b . baseProto = c . prototype , b . prototype . base =
function w ( ) { this . base = c . prototype . base ; c . apply ( this , arguments ) ; this . base = w } ) ; h && this . extend ( b . prototype , h , ! 0 ) ; a && this . extend ( b , a , ! 0 ) ; return b } , addFunction : function ( a , c ) { return b . push ( function ( ) { return a . apply ( c || this , arguments ) } ) - 1 } , removeFunction : function ( a ) { b [ a ] = null } , callFunction : function ( a ) { var c = b [ a ] ; return c && c . apply ( window , Array . prototype . slice . call ( arguments , 1 ) ) } , cssLength : function ( ) { var a = /^-?\d+\.?\d*px$/ , b ; return function ( c ) { b = CKEDITOR . tools . trim ( c + "" ) + "px" ; return a . test ( b ) ? b : c || "" } } ( ) ,
convertToPx : function ( ) { var a , b ; return function ( c ) { if ( ! a || a . isDetached ( ) ) 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 ( c ) ) { var g = 0 > parseFloat ( c ) ; g && ( c = c . replace ( "-" , "" ) ) ; a . setStyle ( "width" , c ) ; b = a . getClientRect ( ) ; c = Math . round ( b . width ) ; return g ? - c : c } return c } } ( ) , repeat : function ( a , b ) { return Array ( b + 1 ) . join ( a ) } , tryThese : function ( ) { for ( var a ,
b = 0 , c = arguments . length ; b < c ; b ++ ) { var g = arguments [ b ] ; try { a = g ( ) ; break } catch ( h ) { } } return a } , genKey : function ( ) { return Array . prototype . slice . call ( arguments ) . join ( "-" ) } , defer : function ( a ) { return function ( ) { var b = arguments , c = this ; window . setTimeout ( function ( ) { a . apply ( c , b ) } , 0 ) } } , normalizeCssText : function ( a , b ) { var c = [ ] , g , h = CKEDITOR . tools . parseCssText ( a , ! 0 , b ) ; for ( g in h ) c . push ( g + ":" + h [ g ] ) ; c . sort ( ) ; return c . length ? c . join ( ";" ) + ";" : "" } , convertRgbToHex : function ( a ) { return a . replace ( /(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi ,
function ( a , b , c , g ) { a = [ b , c , g ] ; for ( b = 0 ; 3 > b ; b ++ ) a [ b ] = ( "0" + parseInt ( a [ b ] , 10 ) . toString ( 16 ) ) . slice ( - 2 ) ; return "#" + a . join ( "" ) } ) } , normalizeHex : function ( a ) { return a . replace ( /#(([0-9a-f]{3}){1,2})($|;|\s+)/gi , function ( a , b , c , g ) { a = b . toLowerCase ( ) ; 3 == a . length && ( a = a . split ( "" ) , a = [ a [ 0 ] , a [ 0 ] , a [ 1 ] , a [ 1 ] , a [ 2 ] , a [ 2 ] ] . join ( "" ) ) ; return "#" + a + g } ) } , _isValidColorFormat : function ( a ) { if ( ! a ) return ! 1 ; a = a . replace ( /\s+/g , "" ) ; return /^[a-z0-9()#%,./]+$/i . test ( a ) } , parseCssText : function ( a , b , c ) { var g = { } ; c && ( a = ( new CKEDITOR . dom . element ( "span" ) ) . setAttribute ( "style" ,
a ) . getAttribute ( "style" ) || "" ) ; a && ( a = CKEDITOR . tools . normalizeHex ( CKEDITOR . tools . convertRgbToHex ( a ) ) ) ; if ( ! a || ";" == a ) return g ; a . replace ( /"/g , '"' ) . replace ( /\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g , function ( a , c , x ) { b && ( c = c . toLowerCase ( ) , "font-family" == c && ( x = x . replace ( /\s*,\s*/g , "," ) ) , x = CKEDITOR . tools . trim ( x ) ) ; g [ c ] = x } ) ; return g } , writeCssText : function ( a , b ) { var c , g = [ ] ; for ( c in a ) g . push ( c + ":" + a [ c ] ) ; b && g . sort ( ) ; return g . join ( "; " ) } , objectCompare : function ( a , b , c ) { var g ; if ( ! a && ! b ) return ! 0 ; if ( ! a || ! b ) return ! 1 ;
for ( g in a ) if ( a [ g ] != b [ g ] ) return ! 1 ; if ( ! c ) for ( g in b ) if ( a [ g ] != b [ g ] ) return ! 1 ; return ! 0 } , objectKeys : function ( a ) { return CKEDITOR . tools . object . keys ( a ) } , convertArrayToObject : function ( a , b ) { var c = { } ; 1 == arguments . length && ( b = ! 0 ) ; for ( var g = 0 , h = a . length ; g < h ; ++ g ) c [ a [ g ] ] = b ; return c } , getStyledSpans : function ( a , b ) { var c = CKEDITOR . env . ie && 8 == CKEDITOR . env . version ? a . toUpperCase ( ) : a , c = b . find ( "span[style*\x3d" + c + "]" ) . toArray ( ) ; return CKEDITOR . tools . array . filter ( c , function ( b ) { return ! ! b . getStyle ( a ) } ) } , fixDomain : function ( ) { for ( var a ; ; ) try { a =
window . parent . document . domain ; break } catch ( b ) { a = a ? a . replace ( /.+?(?:\.|$)/ , "" ) : document . domain ; if ( ! a ) break ; document . domain = a } return ! ! a } , eventsBuffer : function ( a , b , c ) { return new this . buffers . event ( a , b , c ) } , enableHtml5Elements : function ( a , b ) { for ( var c = "abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup main mark meter nav output progress section summary time video" . split ( " " ) , g = c . length , h ; g -- ; ) h = a . createElement ( c [ g ] ) , b && a . appendChild ( h ) } , checkIfAnyArrayItemMatches : function ( a ,
b ) { for ( var c = 0 , g = a . length ; c < g ; ++ c ) if ( a [ c ] . match ( b ) ) return ! 0 ; return ! 1 } , checkIfAnyObjectPropertyMatches : function ( a , b ) { for ( var c in a ) if ( c . match ( b ) ) return ! 0 ; return ! 1 } , keystrokeToString : function ( a , b ) { var c = this . keystrokeToArray ( a , b ) ; c . display = c . display . join ( "+" ) ; c . aria = c . aria . join ( "+" ) ; return c } , keystrokeToArray : function ( a , b ) { var c = b & 16711680 , g = b & 65535 , h = CKEDITOR . env . mac , l = [ ] , e = [ ] ; c & CKEDITOR . CTRL && ( l . push ( h ? "⌘" : a [ 17 ] ) , e . push ( h ? a [ 224 ] : a [ 17 ] ) ) ; c & CKEDITOR . ALT && ( l . push ( h ? "⌥" : a [ 18 ] ) , e . push ( a [ 18 ] ) ) ; c & CKEDITOR . SHIFT &&
( l . push ( h ? "⇧" : a [ 16 ] ) , e . push ( a [ 16 ] ) ) ; g && ( a [ g ] ? ( l . push ( a [ g ] ) , e . push ( a [ g ] ) ) : ( l . push ( String . fromCharCode ( g ) ) , e . push ( String . fromCharCode ( g ) ) ) ) ; return { display : l , aria : e } } , transparentImageData : "data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw\x3d\x3d" , getCookie : function ( a ) { a = a . toLowerCase ( ) ; for ( var b = document . cookie . split ( ";" ) , c , g , h = 0 ; h < b . length ; h ++ ) if ( c = b [ h ] . split ( "\x3d" ) , g = decodeURIComponent ( CKEDITOR . tools . trim ( c [ 0 ] ) . toLowerCase ( ) ) , g === a ) return decodeURIComponent ( 1 < c . length ?
c [ 1 ] : "" ) ; return null } , setCookie : function ( a , b ) { document . cookie = encodeURIComponent ( a ) + "\x3d" + encodeURIComponent ( b ) + ";path\x3d/" } , getCsrfToken : function ( ) { var a = CKEDITOR . tools . getCookie ( "ckCsrfToken" ) ; if ( ! a || 40 != a . length ) { var a = [ ] , b = "" ; if ( window . crypto && window . crypto . getRandomValues ) a = new Uint8Array ( 40 ) , window . crypto . getRandomValues ( a ) ; else for ( var c = 0 ; 40 > c ; c ++ ) a . push ( Math . floor ( 256 * Math . random ( ) ) ) ; for ( c = 0 ; c < a . length ; c ++ ) var g = "abcdefghijklmnopqrstuvwxyz0123456789" . charAt ( a [ c ] % 36 ) , b = b + ( . 5 < Math . random ( ) ?
g . toUpperCase ( ) : g ) ; a = b ; CKEDITOR . tools . setCookie ( "ckCsrfToken" , a ) } return a } , escapeCss : function ( a ) { if ( a ) if ( window . CSS && CSS . escape ) a = CSS . escape ( a ) ; else { a = String ( a ) ; for ( var b = a . length , c = - 1 , g , h = "" , l = a . charCodeAt ( 0 ) ; ++ c < b ; ) g = a . charCodeAt ( c ) , h = 0 == g ? h + "� " : 127 == g || 1 <= g && 31 >= g || 0 == c && 48 <= g && 57 >= g || 1 == c && 48 <= g && 57 >= g && 45 == l ? h + ( "\\" + g . toString ( 16 ) + " " ) : 0 == c && 1 == b && 45 == g ? h + ( "\\" + a . charAt ( c ) ) : 128 <= g || 45 == g || 95 == g || 48 <= g && 57 >= g || 65 <= g && 90 >= g || 97 <= g && 122 >= g ? h + a . charAt ( c ) : h + ( "\\" + a . charAt ( c ) ) ; a = h } else a = "" ; return a } ,
getMouseButton : function ( a ) { return ( a = a && a . data ? a . data . $ : a ) ? CKEDITOR . tools . normalizeMouseButton ( a . button ) : ! 1 } , normalizeMouseButton : function ( a , b ) { if ( ! CKEDITOR . env . ie || 9 <= CKEDITOR . env . version && ! CKEDITOR . env . ie6Compat ) return a ; for ( var c = [ [ CKEDITOR . MOUSE _BUTTON _LEFT , 1 ] , [ CKEDITOR . MOUSE _BUTTON _MIDDLE , 4 ] , [ CKEDITOR . MOUSE _BUTTON _RIGHT , 2 ] ] , g = 0 ; g < c . length ; g ++ ) { var h = c [ g ] ; if ( h [ 0 ] === a && b ) return h [ 1 ] ; if ( ! b && h [ 1 ] === a ) return h [ 0 ] } } , convertHexStringToBytes : function ( a ) { var b = [ ] , c = a . length / 2 , g ; for ( g = 0 ; g < c ; g ++ ) b . push ( parseInt ( a . substr ( 2 *
g , 2 ) , 16 ) ) ; return b } , convertBytesToBase64 : function ( a ) { var b = "" , c = a . length , g ; for ( g = 0 ; g < c ; g += 3 ) { var h = a . slice ( g , g + 3 ) , l = h . length , e = [ ] , d ; if ( 3 > l ) for ( d = l ; 3 > d ; d ++ ) h [ d ] = 0 ; e [ 0 ] = ( h [ 0 ] & 252 ) >> 2 ; e [ 1 ] = ( h [ 0 ] & 3 ) << 4 | h [ 1 ] >> 4 ; e [ 2 ] = ( h [ 1 ] & 15 ) << 2 | ( h [ 2 ] & 192 ) >> 6 ; e [ 3 ] = h [ 2 ] & 63 ; for ( d = 0 ; 4 > d ; d ++ ) b = d <= l ? b + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" . charAt ( e [ d ] ) : b + "\x3d" } return b } , style : { parse : { _borderStyle : "none hidden dotted dashed solid double groove ridge inset outset" . split ( " " ) , _widthRegExp : /^(thin|medium|thick|[\+-]?\d+(\.\d+)?[a-z%]+|[\+-]?0+(\.0+)?|\.\d+[a-z%]+)$/ ,
_rgbaRegExp : /rgba?\(\s*\d+%?\s*,\s*\d+%?\s*,\s*\d+%?\s*(?:,\s*[0-9.]+\s*)?\)/gi , _hslaRegExp : /hsla?\(\s*[0-9.]+\s*,\s*\d+%\s*,\s*\d+%\s*(?:,\s*[0-9.]+\s*)?\)/gi , background : function ( a ) { var b = { } , c = this . _findColor ( a ) ; c . length && ( b . color = c [ 0 ] , CKEDITOR . tools . array . forEach ( c , function ( b ) { a = a . replace ( b , "" ) } ) ) ; if ( a = CKEDITOR . tools . trim ( a ) ) b . unprocessed = a ; return b } , margin : function ( a ) { return CKEDITOR . tools . style . parse . sideShorthand ( a , function ( a ) { return a . match ( /(?:\-?[\.\d]+(?:%|\w*)|auto|inherit|initial|unset|revert)/g ) ||
[ "0px" ] } ) } , sideShorthand : function ( a , b ) { function c ( a ) { g . top = h [ a [ 0 ] ] ; g . right = h [ a [ 1 ] ] ; g . bottom = h [ a [ 2 ] ] ; g . left = h [ a [ 3 ] ] } var g = { } , h = b ? b ( a ) : a . split ( /\s+/ ) ; switch ( h . length ) { case 1 : c ( [ 0 , 0 , 0 , 0 ] ) ; break ; case 2 : c ( [ 0 , 1 , 0 , 1 ] ) ; break ; case 3 : c ( [ 0 , 1 , 2 , 1 ] ) ; break ; case 4 : c ( [ 0 , 1 , 2 , 3 ] ) } return g } , border : function ( a ) { return CKEDITOR . tools . style . border . fromCssRule ( a ) } , _findColor : function ( a ) { var b = [ ] , c = CKEDITOR . tools . array , b = b . concat ( a . match ( this . _rgbaRegExp ) || [ ] ) , b = b . concat ( a . match ( this . _hslaRegExp ) || [ ] ) ; return b = b . concat ( c . filter ( a . split ( /\s+/ ) ,
function ( a ) { return a . match ( /^\#[a-f0-9]{3}(?:[a-f0-9]{3})?$/gi ) ? ! 0 : a . toLowerCase ( ) in CKEDITOR . tools . style . parse . _colors } ) ) } } } , array : { filter : function ( a , b , c ) { var g = [ ] ; this . forEach ( a , function ( h , l ) { b . call ( c , h , l , a ) && g . push ( h ) } ) ; return g } , find : function ( a , b , c ) { for ( var g = a . length , h = 0 ; h < g ; ) { if ( b . call ( c , a [ h ] , h , a ) ) return a [ h ] ; h ++ } } , forEach : function ( a , b , c ) { var g = a . length , h ; for ( h = 0 ; h < g ; h ++ ) b . call ( c , a [ h ] , h , a ) } , map : function ( a , b , c ) { for ( var g = [ ] , h = 0 ; h < a . length ; h ++ ) g . push ( b . call ( c , a [ h ] , h , a ) ) ; return g } , reduce : function ( a ,
b , c , g ) { for ( var h = 0 ; h < a . length ; h ++ ) c = b . call ( g , c , a [ h ] , h , a ) ; return c } , every : function ( a , b , c ) { if ( ! a . length ) return ! 0 ; b = this . filter ( a , b , c ) ; return a . length === b . length } , some : function ( a , b , c ) { for ( var g = 0 ; g < a . length ; g ++ ) if ( b . call ( c , a [ g ] , g , a ) ) return ! 0 ; return ! 1 } , zip : function ( a , b ) { return CKEDITOR . tools . array . map ( a , function ( a , c ) { return [ a , b [ c ] ] } ) } , unique : function ( a ) { return this . filter ( a , function ( b , c ) { return c === CKEDITOR . tools . array . indexOf ( a , b ) } ) } } , object : { DONT _ENUMS : "toString toLocaleString valueOf hasOwnProperty isPrototypeOf propertyIsEnumerable constructor" . split ( " " ) ,
entries : function ( a ) { return CKEDITOR . tools . array . map ( CKEDITOR . tools . object . keys ( a ) , function ( b ) { return [ b , a [ b ] ] } ) } , values : function ( a ) { return CKEDITOR . tools . array . map ( CKEDITOR . tools . object . keys ( a ) , function ( b ) { return a [ b ] } ) } , keys : function ( a ) { var b = Object . prototype . hasOwnProperty , c = [ ] , g = CKEDITOR . tools . object . DONT _ENUMS ; if ( CKEDITOR . env . ie && 9 > CKEDITOR . env . version && ( ! a || "object" !== typeof a ) ) { b = [ ] ; if ( "string" === typeof a ) for ( c = 0 ; c < a . length ; c ++ ) b . push ( String ( c ) ) ; return b } for ( var h in a ) c . push ( h ) ; if ( CKEDITOR . env . ie &&
9 > CKEDITOR . env . version ) for ( h = 0 ; h < g . length ; h ++ ) b . call ( a , g [ h ] ) && c . push ( g [ h ] ) ; return c } , findKey : function ( a , b ) { if ( "object" !== typeof a ) return null ; for ( var c in a ) if ( a [ c ] === b ) return c ; return null } , merge : function ( a , b ) { var c = CKEDITOR . tools , g = c . clone ( a ) , h = c . clone ( b ) ; c . array . forEach ( c . object . keys ( h ) , function ( a ) { g [ a ] = "object" === typeof h [ a ] && "object" === typeof g [ a ] ? c . object . merge ( g [ a ] , h [ a ] ) : h [ a ] } ) ; return g } } , getAbsoluteRectPosition : function ( a , b ) { function c ( a ) { if ( a ) { var b = a . getClientRect ( ) ; g . top += b . top ; g . left +=
b . left ; "x" in g && "y" in g && ( g . x += b . x , g . y += b . y ) ; c ( a . getWindow ( ) . getFrame ( ) ) } } var g = CKEDITOR . tools . copy ( b ) ; c ( a . getFrame ( ) ) ; var h = CKEDITOR . document . getWindow ( ) . getScrollPosition ( ) ; g . top += h . y ; g . left += h . x ; "x" in g && "y" in g && ( g . y += h . y , g . x += h . x ) ; g . right = g . left + g . width ; g . bottom = g . top + g . height ; return g } } ; 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 , g ) { var h = a [ "border-" + g ] || b [ g ] ; c [ g ] = h ? CKEDITOR . tools . style . parse . sideShorthand ( h ) : null ; return c } , { } ) ; return CKEDITOR . tools . array . reduce ( [ "top" , "right" , "bottom" , "left" ] , function ( b , g ) { var h = { } , e ; for ( e in c ) { var d =
a [ "border-" + g + "-" + e ] ; h [ e ] = d ? d : c [ e ] && c [ e ] [ g ] } b [ "border-" + g ] = 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 e in b ) delete c [ e ] } return c } , b = { } , c = { } , f = { address : 1 , article : 1 , aside : 1 , blockquote : 1 , details : 1 , div : 1 , dl : 1 , fieldset : 1 , figure : 1 , footer : 1 , form : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , header : 1 , hgroup : 1 , hr : 1 , main : 1 , menu : 1 , nav : 1 , ol : 1 , p : 1 , pre : 1 , section : 1 , table : 1 , ul : 1 } , e = { command : 1 , link : 1 , meta : 1 , noscript : 1 , script : 1 , style : 1 } , k = { } , h = { "#" : 1 } , p = { center : 1 , dir : 1 , noframes : 1 } ;
a ( b , { a : 1 , abbr : 1 , area : 1 , audio : 1 , b : 1 , bdi : 1 , bdo : 1 , br : 1 , button : 1 , canvas : 1 , cite : 1 , code : 1 , command : 1 , datalist : 1 , del : 1 , dfn : 1 , em : 1 , embed : 1 , i : 1 , iframe : 1 , img : 1 , input : 1 , ins : 1 , kbd : 1 , keygen : 1 , label : 1 , map : 1 , mark : 1 , meter : 1 , noscript : 1 , object : 1 , output : 1 , progress : 1 , q : 1 , ruby : 1 , s : 1 , samp : 1 , script : 1 , select : 1 , small : 1 , span : 1 , strong : 1 , sub : 1 , sup : 1 , textarea : 1 , time : 1 , u : 1 , "var" : 1 , video : 1 , wbr : 1 } , h , { acronym : 1 , applet : 1 , basefont : 1 , big : 1 , font : 1 , isindex : 1 , strike : 1 , style : 1 , tt : 1 } ) ; a ( c , f , b , p ) ; d = { a : d ( b , { a : 1 , button : 1 } ) , abbr : b , address : c ,
area : k , article : c , aside : c , audio : a ( { source : 1 , track : 1 } , c ) , b : b , base : k , bdi : b , bdo : b , blockquote : c , body : c , br : k , button : d ( b , { a : 1 , button : 1 } ) , canvas : b , caption : c , cite : b , code : b , col : k , colgroup : { col : 1 } , command : k , 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 : k , 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 : k , html : a ( { head : 1 ,
body : 1 } , c , e ) , i : b , iframe : h , img : k , input : k , ins : b , kbd : b , keygen : k , label : b , legend : b , li : c , link : k , main : c , map : c , mark : b , menu : a ( { li : 1 } , c ) , meta : k , meter : d ( b , { meter : 1 } ) , nav : c , noscript : a ( { link : 1 , meta : 1 , style : 1 } , b ) , object : a ( { param : 1 } , b ) , ol : { li : 1 } , optgroup : { option : 1 } , option : h , output : b , p : b , param : k , pre : b , progress : d ( b , { progress : 1 } ) , q : b , rp : b , rt : b , ruby : a ( { rp : 1 , rt : 1 } , b ) , s : b , samp : b , script : h , section : c , select : { optgroup : 1 , option : 1 } , small : b , source : k , span : b , strong : b , style : h , sub : b , summary : a ( { h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 } , b ) ,
sup : b , table : { caption : 1 , colgroup : 1 , thead : 1 , tfoot : 1 , tbody : 1 , tr : 1 } , tbody : { tr : 1 } , td : c , textarea : h , tfoot : { tr : 1 } , th : c , thead : { tr : 1 } , time : d ( b , { time : 1 } ) , title : h , tr : { th : 1 , td : 1 } , track : k , u : b , ul : { li : 1 } , "var" : b , video : a ( { source : 1 , track : 1 } , c ) , wbr : k , acronym : b , applet : a ( { param : 1 } , c ) , basefont : k , big : b , center : c , dialog : k , dir : { li : 1 } , font : b , isindex : k , noframes : c , strike : b , tt : b } ; a ( d , { $block : a ( { audio : 1 , dd : 1 , dt : 1 , figcaption : 1 , li : 1 , video : 1 } , f , q ) , $blockLimit : { article : 1 , aside : 1 , audio : 1 , body : 1 , caption : 1 , details : 1 , dir : 1 , div : 1 , dl : 1 ,
sup : b , table : { caption : 1 , colgroup : 1 , thead : 1 , tfoot : 1 , tbody : 1 , tr : 1 } , tbody : { tr : 1 } , td : c , textarea : h , tfoot : { tr : 1 } , th : c , thead : { tr : 1 } , time : d ( b , { time : 1 } ) , title : h , tr : { th : 1 , td : 1 } , track : k , u : b , ul : { li : 1 } , "var" : b , video : a ( { source : 1 , track : 1 } , c ) , wbr : k , acronym : b , applet : a ( { param : 1 } , c ) , basefont : k , big : b , center : c , dialog : k , dir : { li : 1 } , font : b , isindex : k , noframes : c , strike : b , tt : b } ; a ( d , { $block : a ( { audio : 1 , dd : 1 , dt : 1 , figcaption : 1 , li : 1 , video : 1 } , f , p ) , $blockLimit : { article : 1 , aside : 1 , audio : 1 , body : 1 , caption : 1 , details : 1 , dir : 1 , div : 1 , dl : 1 ,
fieldset : 1 , figcaption : 1 , figure : 1 , footer : 1 , form : 1 , header : 1 , hgroup : 1 , main : 1 , menu : 1 , nav : 1 , ol : 1 , section : 1 , table : 1 , td : 1 , th : 1 , tr : 1 , ul : 1 , video : 1 } , $cdata : { script : 1 , style : 1 } , $editable : { address : 1 , article : 1 , aside : 1 , blockquote : 1 , body : 1 , details : 1 , div : 1 , fieldset : 1 , figcaption : 1 , footer : 1 , form : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , header : 1 , hgroup : 1 , main : 1 , nav : 1 , p : 1 , pre : 1 , section : 1 } , $empty : { area : 1 , base : 1 , basefont : 1 , br : 1 , col : 1 , command : 1 , dialog : 1 , embed : 1 , hr : 1 , img : 1 , input : 1 , isindex : 1 , keygen : 1 , link : 1 , meta : 1 , param : 1 , source : 1 ,
track : 1 , wbr : 1 } , $inline : b , $list : { dl : 1 , ol : 1 , ul : 1 } , $listItem : { dd : 1 , dt : 1 , li : 1 } , $nonBodyContent : a ( { body : 1 , head : 1 , html : 1 } , d . head ) , $nonEditable : { applet : 1 , audio : 1 , button : 1 , embed : 1 , iframe : 1 , map : 1 , object : 1 , option : 1 , param : 1 , script : 1 , textarea : 1 , video : 1 } , $object : { applet : 1 , audio : 1 , button : 1 , hr : 1 , iframe : 1 , img : 1 , input : 1 , object : 1 , select : 1 , table : 1 , textarea : 1 , video : 1 } , $removeEmpty : { abbr : 1 , acronym : 1 , b : 1 , bdi : 1 , bdo : 1 , big : 1 , cite : 1 , code : 1 , del : 1 , dfn : 1 , em : 1 , font : 1 , i : 1 , ins : 1 , label : 1 , kbd : 1 , mark : 1 , meter : 1 , output : 1 , q : 1 , ruby : 1 ,
s : 1 , samp : 1 , small : 1 , span : 1 , strike : 1 , strong : 1 , sub : 1 , sup : 1 , time : 1 , tt : 1 , u : 1 , "var" : 1 } , $tabIndex : { a : 1 , area : 1 , button : 1 , input : 1 , object : 1 , select : 1 , textarea : 1 } , $tableContent : { caption : 1 , col : 1 , colgroup : 1 , tbody : 1 , td : 1 , tfoot : 1 , th : 1 , thead : 1 , tr : 1 } , $transparent : { a : 1 , audio : 1 , canvas : 1 , del : 1 , ins : 1 , map : 1 , noscript : 1 , object : 1 , video : 1 } , $intermediate : { caption : 1 , colgroup : 1 , dd : 1 , dt : 1 , figcaption : 1 , legend : 1 , li : 1 , optgroup : 1 , option : 1 , rp : 1 , rt : 1 , summary : 1 , tbody : 1 , td : 1 , tfoot : 1 , th : 1 , thead : 1 , tr : 1 } } ) ; return d } ( ) ;
@@ -124,7 +124,7 @@ arguments)}catch(g){}else a.apply(this,arguments);return this}:a}(),setAttribute
"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 ( ; l && ! l . equals ( v ) ; ) b -= l . $ . scrollLeft , c -= l . $ . scrollTop , l = l . getParent ( ) ; l = v ; v = ( f = v . $ . offsetParent ) ? new CKEDITOR . dom . element ( f ) : null } a && ( f = this . getWindow ( ) , v = a . getWindow ( ) , ! f . equals ( v ) && f . $ . frameElement && ( a = ( new CKEDITOR . dom . element ( f . $ . frameElement ) ) . getDocumentPosition ( a ) , b += a . x , c += a . y ) ) ; document . documentElement . getBoundingClientRect || ! CKEDITOR . env . gecko ||
e || ( b += this . $ . clientLeft ? 1 : 0 , c += this . $ . clientTop ? 1 : 0 ) ; return { x : b , y : c } } , scrollIntoView : function ( a ) { var b = this . getParent ( ) ; if ( b ) { do if ( ( b . $ . clientWidth && b . $ . clientWidth < b . $ . scrollWidth || b . $ . clientHeight && b . $ . clientHeight < b . $ . scrollHeight ) && ! b . is ( "body" ) && this . scrollIntoParent ( b , a , 1 ) , b . is ( "html" ) ) { var c = b . getWindow ( ) ; try { var g = c . $ . frameElement ; g && ( b = new CKEDITOR . dom . element ( g ) ) } catch ( d ) { } } while ( b = b . getParent ( ) ) } } , scrollIntoParent : function ( a , b , c ) { var g , d , e , f ; function k ( b , c ) { /body|html/ . test ( a . getName ( ) ) ?
a . getWindow ( ) . $ . scrollBy ( b , c ) : ( a . $ . scrollLeft += b , a . $ . scrollTop += c ) } function v ( a , b ) { var c = { x : 0 , y : 0 } ; if ( ! a . is ( L ? "body" : "html" ) ) { var g = a . $ . getBoundingClientRect ( ) ; c . x = g . left ; c . y = g . top } g = a . getWindow ( ) ; g . equals ( b ) || ( g = v ( CKEDITOR . dom . element . get ( g . $ . frameElement ) , b ) , c . x += g . x , c . y += g . y ) ; return c } function l ( a , b ) { return parseInt ( a . getComputedStyle ( "margin-" + b ) || 0 , 10 ) || 0 } ! a && ( a = this . getWindow ( ) ) ; e = a . getDocument ( ) ; var L = "BackCompat" == e . $ . compatMode ; a instanceof CKEDITOR . dom . window && ( a = L ? e . getBody ( ) : e . getDocumentElement ( ) ) ;
CKEDITOR . env . webkit && ( e = this . getEditor ( ! 1 ) ) && ( e . _ . previousScrollTop = null ) ; e = a . getWindow ( ) ; d = v ( this , e ) ; var w = v ( a , e ) , J = this . $ . offsetHeight ; g = this . $ . offsetWidth ; var G = a . $ . clientHeight , p = a . $ . clientWidth ; e = d . x - l ( this , "left" ) - w . x || 0 ; f = d . y - l ( this , "top" ) - w . y || 0 ; g = d . x + g + l ( this , "right" ) - ( w . x + p ) || 0 ; d = d . y + J + l ( this , "bottom" ) - ( w . y + G ) || 0 ; ( 0 > f || 0 < d ) && k ( 0 , ! 0 === b ? f : ! 1 === b ? d : 0 > f ? f : d ) ; c && ( 0 > e || 0 < g ) && k ( 0 > e ? e : g , 0 ) } , setState : function ( a , b , c ) { b = b || "cke" ; switch ( a ) { case CKEDITOR . TRISTATE _ON : this . addClass ( b + "_on" ) ; this . removeClass ( b +
CKEDITOR . env . webkit && ( e = this . getEditor ( ! 1 ) ) && ( e . _ . previousScrollTop = null ) ; e = a . getWindow ( ) ; d = v ( this , e ) ; var w = v ( a , e ) , J = this . $ . offsetHeight ; g = this . $ . offsetWidth ; var G = a . $ . clientHeight , q = a . $ . clientWidth ; e = d . x - l ( this , "left" ) - w . x || 0 ; f = d . y - l ( this , "top" ) - w . y || 0 ; g = d . x + g + l ( this , "right" ) - ( w . x + q ) || 0 ; d = d . y + J + l ( this , "bottom" ) - ( w . y + G ) || 0 ; ( 0 > f || 0 < d ) && k ( 0 , ! 0 === b ? f : ! 1 === b ? d : 0 > f ? f : d ) ; c && ( 0 > e || 0 < g ) && k ( 0 > e ? e : g , 0 ) } , setState : function ( a , b , c ) { b = b || "cke" ; switch ( a ) { case CKEDITOR . TRISTATE _ON : this . addClass ( b + "_on" ) ; this . removeClass ( b +
"_off" ) ; this . removeClass ( b + "_disabled" ) ; c && this . setAttribute ( "aria-pressed" , ! 0 ) ; c && this . removeAttribute ( "aria-disabled" ) ; break ; case CKEDITOR . TRISTATE _DISABLED : this . addClass ( b + "_disabled" ) ; this . removeClass ( b + "_off" ) ; this . removeClass ( b + "_on" ) ; c && this . setAttribute ( "aria-disabled" , ! 0 ) ; c && this . removeAttribute ( "aria-pressed" ) ; break ; default : this . addClass ( b + "_off" ) , this . removeClass ( b + "_on" ) , this . removeClass ( b + "_disabled" ) , c && this . removeAttribute ( "aria-pressed" ) , c && this . removeAttribute ( "aria-disabled" ) } } ,
getFrameDocument : function ( ) { var a = this . $ ; try { a . contentWindow . document } catch ( b ) { a . src = a . src } return a && new CKEDITOR . dom . document ( a . contentWindow . document ) } , copyAttributes : function ( a , b ) { var c = this . $ . attributes ; b = b || { } ; for ( var g = 0 ; g < c . length ; g ++ ) { var d = c [ g ] , e = d . nodeName . toLowerCase ( ) , f ; if ( ! ( e in b ) ) if ( "checked" == e && ( f = this . getAttribute ( e ) ) ) a . setAttribute ( e , f ) ; else if ( ! CKEDITOR . env . ie || this . hasAttribute ( e ) ) f = this . getAttribute ( e ) , null === f && ( f = d . nodeValue ) , a . setAttribute ( e , f ) } "" !== this . $ . style . cssText &&
( a . $ . style . cssText = this . $ . style . cssText ) } , renameNode : function ( a ) { if ( this . getName ( ) != a ) { var b = this . getDocument ( ) ; a = new CKEDITOR . dom . element ( a , b ) ; this . copyAttributes ( a ) ; this . moveChildren ( a ) ; this . getParent ( ! 0 ) && this . $ . parentNode . replaceChild ( a . $ , this . $ ) ; a . $ [ "data-cke-expando" ] = this . $ [ "data-cke-expando" ] ; this . $ = a . $ ; delete this . getName } } , getChild : function ( ) { function a ( b , c ) { var g = b . childNodes ; if ( 0 <= c && c < g . length ) return g [ c ] } return function ( b ) { var c = this . $ ; if ( b . slice ) for ( b = b . slice ( ) ; 0 < b . length && c ; ) c = a ( c ,
@@ -135,23 +135,23 @@ d)}else g[g[a]?a:c](b)},isDetached:function(){var a=this.getDocument(),b=a.getDo
( b -= c . call ( this , a ) ) , this . setStyle ( a , b + "px" ) ) } ; CKEDITOR . dom . element . prototype . getSize = function ( a , b ) { var d = Math . max ( this . $ [ "offset" + CKEDITOR . tools . capitalize ( a ) ] , this . $ [ "client" + CKEDITOR . tools . capitalize ( a ) ] ) || 0 ; b && ( d -= c . call ( this , a ) ) ; return d } } ) ( ) ; CKEDITOR . dom . documentFragment = function ( a ) { a = a || CKEDITOR . document ; this . $ = a . type == CKEDITOR . NODE _DOCUMENT ? a . $ . createDocumentFragment ( ) : a } ;
CKEDITOR . tools . extend ( CKEDITOR . dom . documentFragment . prototype , CKEDITOR . dom . element . prototype , { type : CKEDITOR . NODE _DOCUMENT _FRAGMENT , insertAfterNode : function ( a ) { a = a . $ ; a . parentNode . insertBefore ( this . $ , a . nextSibling ) } , getHtml : function ( ) { var a = new CKEDITOR . dom . element ( "div" ) ; this . clone ( 1 , 1 ) . appendTo ( a ) ; return a . getHtml ( ) . replace ( /\s*data-cke-expando=".*?"/g , "" ) } } , ! 0 , { append : 1 , appendBogus : 1 , clone : 1 , getFirst : 1 , getHtml : 1 , getLast : 1 , getParent : 1 , getNext : 1 , getPrevious : 1 , appendTo : 1 , moveChildren : 1 , insertBefore : 1 ,
insertAfterNode : 1 , replace : 1 , trim : 1 , type : 1 , ltrim : 1 , rtrim : 1 , getDocument : 1 , getChildCount : 1 , getChild : 1 , getChildren : 1 } ) ; CKEDITOR . tools . extend ( CKEDITOR . dom . documentFragment . prototype , CKEDITOR . dom . document . prototype , ! 0 , { find : 1 , findOne : 1 } ) ;
( function ( ) { function a ( a , b ) { var c = this . range ; if ( this . _ . end ) return null ; if ( ! this . _ . start ) { this . _ . start = 1 ; if ( c . collapsed ) return this . end ( ) , null ; c . optimize ( ) } var g , d = c . startContainer ; g = c . endContainer ; var e = c . startOffset , f = c . endOffset , x , h = this . guard , k = this . type , m = a ? "getPreviousSourceNode" : "getNextSourceNode" ; if ( ! a && ! this . _ . guardLTR ) { var q = g . type == CKEDITOR . NODE _ELEMENT ? g : g . getParent ( ) , E = g . type == CKEDITOR . NODE _ELEMENT ? g . getChild ( f ) : g . getNext ( ) ; this . _ . guardLTR = function ( a , b ) { return ( ! b || ! q . equals ( a ) ) && ( ! E ||
( function ( ) { function a ( a , b ) { var c = this . range ; if ( this . _ . end ) return null ; if ( ! this . _ . start ) { this . _ . start = 1 ; if ( c . collapsed ) return this . end ( ) , null ; c . optimize ( ) } var g , d = c . startContainer ; g = c . endContainer ; var e = c . startOffset , f = c . endOffset , x , h = this . guard , k = this . type , m = a ? "getPreviousSourceNode" : "getNextSourceNode" ; if ( ! a && ! this . _ . guardLTR ) { var p = g . type == CKEDITOR . NODE _ELEMENT ? g : g . getParent ( ) , E = g . type == CKEDITOR . NODE _ELEMENT ? g . getChild ( f ) : g . getNext ( ) ; this . _ . guardLTR = function ( a , b ) { return ( ! b || ! p . equals ( a ) ) && ( ! E ||
! a . equals ( E ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } if ( a && ! this . _ . guardRTL ) { var C = d . type == CKEDITOR . NODE _ELEMENT ? d : d . getParent ( ) , t = d . type == CKEDITOR . NODE _ELEMENT ? e ? d . getChild ( e - 1 ) : null : d . getPrevious ( ) ; this . _ . guardRTL = function ( a , b ) { return ( ! b || ! C . equals ( a ) ) && ( ! t || ! a . equals ( t ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } var B = a ? this . _ . guardRTL : this . _ . guardLTR ; x = h ? function ( a , b ) { return ! 1 === B ( a , b ) ? ! 1 : h ( a , b ) } : B ; this . current ? g = this . current [ m ] ( ! 1 , k , x ) : ( a ? g . type == CKEDITOR . NODE _ELEMENT &&
( g = 0 < f ? g . getChild ( f - 1 ) : ! 1 === x ( g , ! 0 ) ? null : g . getPreviousSourceNode ( ! 0 , k , x ) ) : ( g = d , g . type == CKEDITOR . NODE _ELEMENT && ( ( g = g . getChild ( e ) ) || ( g = ! 1 === x ( d , ! 0 ) ? null : d . getNextSourceNode ( ! 0 , k , x ) ) ) ) , g && ! 1 === x ( g ) && ( g = null ) ) ; for ( ; g && ! this . _ . end ; ) { this . current = g ; if ( ! this . evaluator || ! 1 !== this . evaluator ( g ) ) { if ( ! b ) return g } else if ( b && this . evaluator ) return ! 1 ; g = g [ m ] ( ! 1 , k , x ) } this . end ( ) ; return this . current = null } function d ( b ) { for ( var c , g = null ; c = a . call ( this , b ) ; ) g = c ; return g } CKEDITOR . dom . walker = CKEDITOR . tools . createClass ( { $ : function ( a ) { this . range =
a ; this . _ = { } } , proto : { end : function ( ) { this . _ . end = 1 } , next : function ( ) { return a . call ( this ) } , previous : function ( ) { return a . call ( this , 1 ) } , checkForward : function ( ) { return ! 1 !== a . call ( this , 0 , 1 ) } , checkBackward : function ( ) { return ! 1 !== a . call ( this , 1 , 1 ) } , lastForward : function ( ) { return d . call ( this ) } , lastBackward : function ( ) { return d . call ( this , 1 ) } , reset : function ( ) { delete this . current ; this . _ = { } } } } ) ; var b = { block : 1 , "list-item" : 1 , table : 1 , "table-row-group" : 1 , "table-header-group" : 1 , "table-footer-group" : 1 , "table-row" : 1 , "table-column-group" : 1 ,
"table-column" : 1 , "table-cell" : 1 , "table-caption" : 1 } , c = { absolute : 1 , fixed : 1 } ; CKEDITOR . dom . element . prototype . isBlockBoundary = function ( a ) { return "none" != this . getComputedStyle ( "float" ) || this . getComputedStyle ( "position" ) in c || ! b [ this . getComputedStyle ( "display" ) ] ? ! ! ( this . is ( CKEDITOR . dtd . $block ) || a && this . is ( a ) ) : ! 0 } ; CKEDITOR . dom . walker . blockBoundary = function ( a ) { return function ( b ) { return ! ( b . type == CKEDITOR . NODE _ELEMENT && b . isBlockBoundary ( a ) ) } } ; CKEDITOR . dom . walker . listItemBoundary = function ( ) { return this . blockBoundary ( { br : 1 } ) } ;
CKEDITOR . dom . walker . bookmark = function ( a , b ) { function c ( a ) { return a && a . getName && "span" == a . getName ( ) && a . data ( "cke-bookmark" ) } return function ( g ) { var d , e ; d = g && g . type != CKEDITOR . NODE _ELEMENT && ( e = g . getParent ( ) ) && c ( e ) ; d = a ? d : d || c ( g ) ; return ! ! ( b ^ d ) } } ; CKEDITOR . dom . walker . whitespaces = function ( a ) { return function ( b ) { var c ; b && b . type == CKEDITOR . NODE _TEXT && ( c = ! CKEDITOR . tools . trim ( b . getText ( ) ) || CKEDITOR . env . webkit && b . getText ( ) == CKEDITOR . dom . selection . FILLING _CHAR _SEQUENCE ) ; return ! ! ( a ^ c ) } } ; CKEDITOR . dom . walker . invisible =
function ( a ) { var b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . env . webkit ? 1 : 0 ; return function ( g ) { b ( g ) ? g = 1 : ( g . type == CKEDITOR . NODE _TEXT && ( g = g . getParent ( ) ) , g = g . $ . offsetWidth <= c ) ; return ! ! ( a ^ g ) } } ; CKEDITOR . dom . walker . nodeType = function ( a , b ) { return function ( c ) { return ! ! ( b ^ c . type == a ) } } ; CKEDITOR . dom . walker . bogus = function ( a ) { function b ( a ) { return ! e ( a ) && ! k ( a ) } return function ( c ) { var g = CKEDITOR . env . needsBrFiller ? c . is && c . is ( "br" ) : c . getText && f . test ( c . getText ( ) ) ; g && ( g = c . getParent ( ) , c = c . getNext ( b ) , g = g . isBlockBoundary ( ) &&
( ! c || c . type == CKEDITOR . NODE _ELEMENT && c . isBlockBoundary ( ) ) ) ; return ! ! ( a ^ g ) } } ; CKEDITOR . dom . walker . temp = function ( a ) { return function ( b ) { b . type != CKEDITOR . NODE _ELEMENT && ( b = b . getParent ( ) ) ; b = b && b . hasAttribute ( "data-cke-temp" ) ; return ! ! ( a ^ b ) } } ; var f = /^[\t\r\n ]*(?: |\xa0)$/ , e = CKEDITOR . dom . walker . whitespaces ( ) , k = CKEDITOR . dom . walker . bookmark ( ) , h = CKEDITOR . dom . walker . temp ( ) , q = function ( a ) { return k ( a ) || e ( a ) || a . type == CKEDITOR . NODE _ELEMENT && a . is ( CKEDITOR . dtd . $inline ) && ! a . is ( CKEDITOR . dtd . $empty ) } ; CKEDITOR . dom . walker . ignored =
( ! c || c . type == CKEDITOR . NODE _ELEMENT && c . isBlockBoundary ( ) ) ) ; return ! ! ( a ^ g ) } } ; CKEDITOR . dom . walker . temp = function ( a ) { return function ( b ) { b . type != CKEDITOR . NODE _ELEMENT && ( b = b . getParent ( ) ) ; b = b && b . hasAttribute ( "data-cke-temp" ) ; return ! ! ( a ^ b ) } } ; var f = /^[\t\r\n ]*(?: |\xa0)$/ , e = CKEDITOR . dom . walker . whitespaces ( ) , k = CKEDITOR . dom . walker . bookmark ( ) , h = CKEDITOR . dom . walker . temp ( ) , p = function ( a ) { return k ( a ) || e ( a ) || a . type == CKEDITOR . NODE _ELEMENT && a . is ( CKEDITOR . dtd . $inline ) && ! a . is ( CKEDITOR . dtd . $empty ) } ; CKEDITOR . dom . walker . ignored =
function ( a ) { return function ( b ) { b = e ( b ) || k ( b ) || h ( b ) ; return ! ! ( a ^ b ) } } ; var m = CKEDITOR . dom . walker . ignored ( ) ; CKEDITOR . dom . walker . empty = function ( a ) { return function ( b ) { for ( var c = 0 , g = b . getChildCount ( ) ; c < g ; ++ c ) if ( ! m ( b . getChild ( c ) ) ) return ! ! a ; return ! a } } ; var g = 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 =
m ( 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 ) && g ( b ) ) ? ! 0 : ! 1 ; return ! ! ( a ^ b ) } } ; CKEDITOR . dom . element . prototype . getBogus = function ( ) { var a = this ; do a = a . getPreviousSourceNode ( ) ; while ( q ( a ) ) ; return a && ( CKEDITOR . env . needsBrFiller ? a . is && a . is ( "br" ) : a . getText && f . test ( a . getText ( ) ) ) ? a : ! 1 } } ) ( ) ; "use strict" ;
m ( 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 ) && g ( b ) ) ? ! 0 : ! 1 ; return ! ! ( a ^ b ) } } ; CKEDITOR . dom . element . prototype . getBogus = function ( ) { var a = this ; do a = a . getPreviousSourceNode ( ) ; while ( p ( a ) ) ; return a && ( CKEDITOR . env . needsBrFiller ? a . is && a . is ( "br" ) : a . getText && f . test ( a . getText ( ) ) ) ? a : ! 1 } } ) ( ) ; "use strict" ;
CKEDITOR . dom . range = function ( a ) { this . endOffset = this . endContainer = this . startOffset = this . startContainer = null ; this . collapsed = ! 0 ; var d = a instanceof CKEDITOR . dom . document ; this . document = d ? a : a . getDocument ( ) ; this . root = d ? a . getBody ( ) : a } ;
( function ( ) { function a ( a ) { a . collapsed = a . startContainer && a . endContainer && a . startContainer . equals ( a . endContainer ) && a . startOffset == a . endOffset } function d ( a , b , c , d , e ) { function f ( a , b , c , g ) { var R = c ? a . getPrevious ( ) : a . getNext ( ) ; if ( g && k ) return R ; q || g ? b . append ( a . clone ( ! 0 , e ) , c ) : ( a . remove ( ) , m && b . append ( a , c ) ) ; return R } function l ( ) { var a , b , c , g = Math . min ( N . length , r . length ) ; for ( a = 0 ; a < g ; a ++ ) if ( b = N [ a ] , c = r [ a ] , ! b . equals ( c ) ) return a ; return a - 1 } function h ( ) { var b = I - 1 , c = B && z && ! p . equals ( u ) ; b < M - 1 || b < n - 1 || c ? ( c ? a . moveToPosition ( u ,
CKEDITOR . POSITION _BEFORE _START ) : n == b + 1 && t ? a . moveToPosition ( r [ b ] , CKEDITOR . POSITION _BEFORE _END ) : a . moveToPosition ( r [ b + 1 ] , CKEDITOR . POSITION _BEFORE _START ) , d && ( b = N [ b + 1 ] ) && b . type == CKEDITOR . NODE _ELEMENT && ( c = CKEDITOR . dom . element . createFromHtml ( '\x3cspan data-cke-bookmark\x3d"1" style\x3d"display:none"\x3e\x26nbsp;\x3c/span\x3e' , a . document ) , c . insertAfter ( b ) , b . mergeSiblings ( ! 1 ) , a . moveToBookmark ( { startNode : c } ) ) ) : a . collapse ( ! 0 ) } a . optimizeBookmark ( ) ; var k = 0 === b , m = 1 == b , q = 2 == b ; b = q || m ; var p = a . startContainer , u = a . endContainer ,
K = a . startOffset , E = a . endOffset , C , t , B , z , H , O ; if ( q && u . type == CKEDITOR . NODE _TEXT && ( p . equals ( u ) || p . type === CKEDITOR . NODE _ELEMENT && p . getFirst ( ) . equals ( u ) ) ) c . append ( a . document . createText ( u . substring ( K , E ) ) ) ; else { u . type == CKEDITOR . NODE _TEXT ? q ? O = ! 0 : u = u . split ( E ) : 0 < u . getChildCount ( ) ? E >= u . getChildCount ( ) ? ( u = u . getChild ( E - 1 ) , t = ! 0 ) : u = u . getChild ( E ) : z = t = ! 0 ; p . type == CKEDITOR . NODE _TEXT ? q ? H = ! 0 : p . split ( K ) : 0 < p . getChildCount ( ) ? 0 === K ? ( p = p . getChild ( K ) , C = ! 0 ) : p = p . getChild ( K - 1 ) : B = C = ! 0 ; for ( var N = p . getParents ( ) , r = u . getParents ( ) , I = l ( ) ,
M = N . length - 1 , n = r . length - 1 , D = c , R , aa , X , ea = - 1 , V = I ; V <= M ; V ++ ) { aa = N [ V ] ; X = aa . getNext ( ) ; for ( V != M || aa . equals ( r [ V ] ) && M < n ? b && ( R = D . append ( aa . clone ( 0 , e ) ) ) : C ? f ( aa , D , ! 1 , B ) : H && D . append ( a . document . createText ( aa . substring ( K ) ) ) ; X ; ) { if ( X . equals ( r [ V ] ) ) { ea = V ; break } X = f ( X , D ) } D = R } D = c ; for ( V = I ; V <= n ; V ++ ) if ( c = r [ V ] , X = c . getPrevious ( ) , c . equals ( N [ V ] ) ) b && ( D = D . getChild ( 0 ) ) ; else { V != n || c . equals ( N [ V ] ) && n < M ? b && ( R = D . append ( c . clone ( 0 , e ) ) ) : t ? f ( c , D , ! 1 , z ) : O && D . append ( a . document . createText ( c . substring ( 0 , E ) ) ) ; if ( V > ea ) for ( ; X ; ) X = f ( X , D , ! 0 ) ; D = R } q ||
( function ( ) { function a ( a ) { a . collapsed = a . startContainer && a . endContainer && a . startContainer . equals ( a . endContainer ) && a . startOffset == a . endOffset } function d ( a , b , c , d , e ) { function f ( a , b , c , g ) { var R = c ? a . getPrevious ( ) : a . getNext ( ) ; if ( g && k ) return R ; p || g ? b . append ( a . clone ( ! 0 , e ) , c ) : ( a . remove ( ) , m && b . append ( a , c ) ) ; return R } function l ( ) { var a , b , c , g = Math . min ( O . length , r . length ) ; for ( a = 0 ; a < g ; a ++ ) if ( b = O [ a ] , c = r [ a ] , ! b . equals ( c ) ) return a ; return a - 1 } function h ( ) { var b = I - 1 , c = B && z && ! q . equals ( u ) ; b < M - 1 || b < n - 1 || c ? ( c ? a . moveToPosition ( u ,
CKEDITOR . POSITION _BEFORE _START ) : n == b + 1 && t ? a . moveToPosition ( r [ b ] , CKEDITOR . POSITION _BEFORE _END ) : a . moveToPosition ( r [ b + 1 ] , CKEDITOR . POSITION _BEFORE _START ) , d && ( b = O [ b + 1 ] ) && b . type == CKEDITOR . NODE _ELEMENT && ( c = CKEDITOR . dom . element . createFromHtml ( '\x3cspan data-cke-bookmark\x3d"1" style\x3d"display:none"\x3e\x26nbsp;\x3c/span\x3e' , a . document ) , c . insertAfter ( b ) , b . mergeSiblings ( ! 1 ) , a . moveToBookmark ( { startNode : c } ) ) ) : a . collapse ( ! 0 ) } a . optimizeBookmark ( ) ; var k = 0 === b , m = 1 == b , p = 2 == b ; b = p || m ; var q = a . startContainer , u = a . endContainer ,
K = a . startOffset , E = a . endOffset , C , t , B , z , H , N ; if ( p && u . type == CKEDITOR . NODE _TEXT && ( q . equals ( u ) || q . type === CKEDITOR . NODE _ELEMENT && q . getFirst ( ) . equals ( u ) ) ) c . append ( a . document . createText ( u . substring ( K , E ) ) ) ; else { u . type == CKEDITOR . NODE _TEXT ? p ? N = ! 0 : u = u . split ( E ) : 0 < u . getChildCount ( ) ? E >= u . getChildCount ( ) ? ( u = u . getChild ( E - 1 ) , t = ! 0 ) : u = u . getChild ( E ) : z = t = ! 0 ; q . type == CKEDITOR . NODE _TEXT ? p ? H = ! 0 : q . split ( K ) : 0 < q . getChildCount ( ) ? 0 === K ? ( q = q . getChild ( K ) , C = ! 0 ) : q = q . getChild ( K - 1 ) : B = C = ! 0 ; for ( var O = q . getParents ( ) , r = u . getParents ( ) , I = l ( ) ,
M = O . length - 1 , n = r . length - 1 , D = c , R , aa , X , ea = - 1 , V = I ; V <= M ; V ++ ) { aa = O [ V ] ; X = aa . getNext ( ) ; for ( V != M || aa . equals ( r [ V ] ) && M < n ? b && ( R = D . append ( aa . clone ( 0 , e ) ) ) : C ? f ( aa , D , ! 1 , B ) : H && D . append ( a . document . createText ( aa . substring ( K ) ) ) ; X ; ) { if ( X . equals ( r [ V ] ) ) { ea = V ; break } X = f ( X , D ) } D = R } D = c ; for ( V = I ; V <= n ; V ++ ) if ( c = r [ V ] , X = c . getPrevious ( ) , c . equals ( O [ V ] ) ) b && ( D = D . getChild ( 0 ) ) ; else { V != n || c . equals ( O [ V ] ) && n < M ? b && ( R = D . append ( c . clone ( 0 , e ) ) ) : t ? f ( c , D , ! 1 , z ) : N && D . append ( a . document . createText ( c . substring ( 0 , E ) ) ) ; if ( V > ea ) for ( ; X ; ) X = f ( X , D , ! 0 ) ; D = R } p ||
h ( ) } } function b ( ) { var a = ! 1 , b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . dom . walker . bookmark ( ! 0 ) , d = CKEDITOR . dom . walker . bogus ( ) ; return function ( f ) { return c ( f ) || b ( f ) ? ! 0 : d ( f ) && ! a ? a = ! 0 : f . type == CKEDITOR . NODE _TEXT && ( f . hasAscendant ( "pre" ) || CKEDITOR . tools . trim ( f . getText ( ) ) . length ) || f . type == CKEDITOR . NODE _ELEMENT && ! f . is ( e ) ? ! 1 : ! 0 } } function c ( a ) { var b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . dom . walker . bookmark ( 1 ) ; return function ( d ) { return c ( d ) || b ( d ) ? ! 0 : ! a && k ( d ) || d . type == CKEDITOR . NODE _ELEMENT && d . is ( CKEDITOR . dtd . $removeEmpty ) } }
function f ( a ) { return function ( ) { var b ; return this [ a ? "getPreviousNode" : "getNextNode" ] ( function ( a ) { ! b && m ( a ) && ( b = a ) ; return q ( a ) && ! ( k ( a ) && a . equals ( b ) ) } ) } } var e = { abbr : 1 , acronym : 1 , b : 1 , bdo : 1 , big : 1 , cite : 1 , code : 1 , del : 1 , dfn : 1 , em : 1 , font : 1 , i : 1 , ins : 1 , label : 1 , kbd : 1 , q : 1 , samp : 1 , small : 1 , span : 1 , strike : 1 , strong : 1 , sub : 1 , sup : 1 , tt : 1 , u : 1 , "var" : 1 } , k = CKEDITOR . dom . walker . bogus ( ) , h = /^[\t\r\n ]*(?: |\xa0)$/ , q = CKEDITOR . dom . walker . editable ( ) , m = CKEDITOR . dom . walker . ignored ( ! 0 ) ; CKEDITOR . dom . range . prototype = { clone : function ( ) { var a =
function f ( a ) { return function ( ) { var b ; return this [ a ? "getPreviousNode" : "getNextNode" ] ( function ( a ) { ! b && m ( a ) && ( b = a ) ; return p ( a ) && ! ( k ( a ) && a . equals ( b ) ) } ) } } var e = { abbr : 1 , acronym : 1 , b : 1 , bdo : 1 , big : 1 , cite : 1 , code : 1 , del : 1 , dfn : 1 , em : 1 , font : 1 , i : 1 , ins : 1 , label : 1 , kbd : 1 , q : 1 , samp : 1 , small : 1 , span : 1 , strike : 1 , strong : 1 , sub : 1 , sup : 1 , tt : 1 , u : 1 , "var" : 1 } , k = CKEDITOR . dom . walker . bogus ( ) , h = /^[\t\r\n ]*(?: |\xa0)$/ , p = CKEDITOR . dom . walker . editable ( ) , m = CKEDITOR . dom . walker . ignored ( ! 0 ) ; CKEDITOR . dom . range . prototype = { clone : function ( ) { var a =
new CKEDITOR . dom . range ( this . root ) ; a . _setStartContainer ( this . startContainer ) ; a . startOffset = this . startOffset ; a . _setEndContainer ( this . endContainer ) ; a . endOffset = this . endOffset ; a . collapsed = this . collapsed ; return a } , collapse : function ( a ) { a ? ( this . _setEndContainer ( this . startContainer ) , this . endOffset = this . startOffset ) : ( this . _setStartContainer ( this . endContainer ) , this . startOffset = this . endOffset ) ; this . collapsed = ! 0 } , cloneContents : function ( a ) { var b = new CKEDITOR . dom . documentFragment ( this . document ) ; this . collapsed ||
d ( this , 2 , b , ! 1 , "undefined" == typeof a ? ! 0 : a ) ; return b } , deleteContents : function ( a ) { this . collapsed || d ( this , 0 , null , a ) } , extractContents : function ( a , b ) { var c = new CKEDITOR . dom . documentFragment ( this . document ) ; this . collapsed || d ( this , 1 , c , a , "undefined" == typeof b ? ! 0 : b ) ; return c } , equals : function ( a ) { return this . startOffset === a . startOffset && this . endOffset === a . endOffset && this . startContainer . equals ( a . startContainer ) && this . endContainer . equals ( a . endContainer ) } , createBookmark : function ( a ) { function b ( a ) { return a . getAscendant ( function ( a ) { var b ;
if ( b = a . data && a . data ( "cke-temp" ) ) b = - 1 === CKEDITOR . tools . array . indexOf ( [ "cke_copybin" , "cke_pastebin" ] , a . getAttribute ( "id" ) ) ; return b } , ! 0 ) } var c = this . startContainer , d = this . endContainer , e = this . collapsed , f , l , h , k ; f = this . document . createElement ( "span" ) ; f . data ( "cke-bookmark" , 1 ) ; f . setStyle ( "display" , "none" ) ; f . setHtml ( "\x26nbsp;" ) ; a && ( h = "cke_bm_" + CKEDITOR . tools . getNextNumber ( ) , f . setAttribute ( "id" , h + ( e ? "C" : "S" ) ) ) ; e || ( l = f . clone ( ) , l . setHtml ( "\x26nbsp;" ) , a && l . setAttribute ( "id" , h + "E" ) , k = this . clone ( ) , b ( d ) && ( d = b ( d ) ,
@@ -164,17 +164,17 @@ else if(1>e)b=b.getPreviousSourceNode();else{for(b=b.$;b.lastChild;)b=b.lastChil
a . type != CKEDITOR . NODE _ELEMENT && ( b ? b >= a . getLength ( ) && this . setStartAfter ( a ) : this . setStartBefore ( a ) ) ; a = this . endContainer ; b = this . endOffset ; a . type != CKEDITOR . NODE _ELEMENT && ( b ? b >= a . getLength ( ) && this . setEndAfter ( a ) : this . setEndBefore ( a ) ) } , optimizeBookmark : function ( ) { var a = this . startContainer , b = this . endContainer ; a . is && a . is ( "span" ) && a . data ( "cke-bookmark" ) && this . setStartAt ( a , CKEDITOR . POSITION _BEFORE _START ) ; b && b . is && b . is ( "span" ) && b . data ( "cke-bookmark" ) && this . setEndAt ( b , CKEDITOR . POSITION _AFTER _END ) } , trim : function ( a ,
b ) { var c = this . startContainer , d = this . startOffset , e = this . collapsed ; if ( ( ! a || e ) && c && c . type == CKEDITOR . NODE _TEXT ) { if ( d ) if ( d >= c . getLength ( ) ) d = c . getIndex ( ) + 1 , c = c . getParent ( ) ; else { var f = c . split ( d ) , d = c . getIndex ( ) + 1 , c = c . getParent ( ) ; this . startContainer . equals ( this . endContainer ) ? this . setEnd ( f , this . endOffset - this . startOffset ) : c . equals ( this . endContainer ) && ( this . endOffset += 1 ) } else d = c . getIndex ( ) , c = c . getParent ( ) ; this . setStart ( c , d ) ; if ( e ) { this . collapse ( ! 0 ) ; return } } c = this . endContainer ; d = this . endOffset ; b || e || ! c || c . type !=
CKEDITOR . NODE _TEXT || ( d ? ( d >= c . getLength ( ) || c . split ( d ) , d = c . getIndex ( ) + 1 ) : d = c . getIndex ( ) , c = c . getParent ( ) , this . setEnd ( c , d ) ) } , enlarge : function ( a , b ) { function c ( a ) { return a && a . type == CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "contenteditable" ) ? null : a } function d ( a , b , c ) { var g = new CKEDITOR . dom . range ( c ) ; g . setStart ( a , b ) ; g . setEndAt ( c , CKEDITOR . POSITION _BEFORE _END ) ; c = new CKEDITOR . dom . walker ( g ) ; for ( c . guard = function ( a ) { return ! ( a . type == CKEDITOR . NODE _ELEMENT && a . isBlockBoundary ( ) ) } ; g = c . next ( ) ; ) { if ( g . type != CKEDITOR . NODE _TEXT ) return ! 1 ;
f = g != a ? g . getText ( ) : g . substring ( b ) ; if ( e . test ( f ) ) return ! 1 } return ! 0 } var e = new RegExp ( /[^\s\ufeff]/ ) , f , l ; switch ( a ) { case CKEDITOR . ENLARGE _INLINE : var h = 1 ; case CKEDITOR . ENLARGE _ELEMENT : if ( this . collapsed ) break ; var k = this . getCommonAncestor ( ) ; l = this . root ; var m , q , p , u , K , E = ! 1 , C ; C = this . startContainer ; var t = this . startOffset ; C . type == CKEDITOR . NODE _TEXT ? ( t && ( C = ! CKEDITOR . tools . trim ( C . substring ( 0 , t ) ) . length && C , E = ! ! C ) , C && ( ( u = C . getPrevious ( ) ) || ( p = C . getParent ( ) ) ) ) : ( t && ( u = C . getChild ( t - 1 ) || C . getLast ( ) ) , u || ( p = C ) ) ; for ( p = c ( p ) ; p ||
u ; ) { if ( p && ! u ) { ! K && p . equals ( k ) && ( K = ! 0 ) ; if ( h ? p . isBlockBoundary ( ) : ! l . contains ( p ) ) break ; E && "inline" == p . getComputedStyle ( "display" ) || ( E = ! 1 , K ? m = p : this . setStartBefore ( p ) ) ; u = p . getPrevious ( ) } for ( ; u ; ) if ( C = ! 1 , u . type == CKEDITOR . NODE _COMMENT ) u = u . getPrevious ( ) ; else { if ( u . type == CKEDITOR . NODE _TEXT ) f = u . getText ( ) , e . test ( f ) && ( u = null ) , C = /[\s\ufeff]$/ . test ( f ) ; else if ( ( u . $ . offsetWidth > ( CKEDITOR . env . webkit ? 1 : 0 ) || b && u . is ( "br" ) ) && ! u . data ( "cke-bookmark" ) ) if ( E && CKEDITOR . dtd . $removeEmpty [ u . getName ( ) ] ) { f = u . getText ( ) ; if ( e . test ( f ) ) u =
null ; else for ( var t = u . $ . getElementsByTagName ( "*" ) , B = 0 , z ; z = t [ B ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ z . nodeName . toLowerCase ( ) ] ) { u = null ; break } u && ( C = ! ! f . length ) } else u = null ; C && ( E ? K ? m = p : p && this . setStartBefore ( p ) : E = ! 0 ) ; if ( u ) { C = u . getPrevious ( ) ; if ( ! p && ! C ) { p = u ; u = null ; break } u = C } else p = null } p && ( p = c ( p . getParent ( ) ) ) } C = this . endContainer ; t = this . endOffset ; p = u = null ; K = E = ! 1 ; C . type == CKEDITOR . NODE _TEXT ? CKEDITOR . tools . trim ( C . substring ( t ) ) . length ? E = ! 0 : ( E = ! C . getLength ( ) , t == C . getLength ( ) ? ( u = C . getNext ( ) ) || ( p = C . getParent ( ) ) : d ( C ,
t , l ) && ( p = C . getParent ( ) ) ) : ( u = C . getChild ( t ) ) || ( p = C ) ; for ( ; p || u ; ) { if ( p && ! u ) { ! K && p . equals ( k ) && ( K = ! 0 ) ; if ( h ? p . isBlockBoundary ( ) : ! l . contains ( p ) ) break ; E && "inline" == p . getComputedStyle ( "display" ) || ( E = ! 1 , K ? q = p : p && this . setEndAfter ( p ) ) ; u = p . getNext ( ) } for ( ; u ; ) { C = ! 1 ; if ( u . type == CKEDITOR . NODE _TEXT ) f = u . getText ( ) , d ( u , 0 , l ) || ( u = null ) , C = /^[\s\ufeff]/ . test ( f ) ; else if ( u . type == CKEDITOR . NODE _ELEMENT ) { if ( ( 0 < u . $ . offsetWidth || b && u . is ( "br" ) ) && ! u . data ( "cke-bookmark" ) ) if ( E && CKEDITOR . dtd . $removeEmpty [ u . getName ( ) ] ) { f = u . getText ( ) ; if ( e . test ( f ) ) u =
null ; else for ( t = u . $ . getElementsByTagName ( "*" ) , B = 0 ; z = t [ B ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ z . nodeName . toLowerCase ( ) ] ) { u = null ; break } u && ( C = ! ! f . length ) } else u = null } else C = 1 ; C && E && ( K ? q = p : this . setEndAfter ( p ) ) ; if ( u ) { C = u . getNext ( ) ; if ( ! p && ! C ) { p = u ; u = null ; break } u = C } else p = null } p && ( p = c ( p . getParent ( ) ) ) } m && q && ( k = m . contains ( q ) ? q : m , this . setStartBefore ( k ) , this . setEndAfter ( k ) ) ; break ; case CKEDITOR . ENLARGE _BLOCK _CONTENTS : case CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : p = new CKEDITOR . dom . range ( this . root ) ; l = this . root ; p . setStartAt ( l ,
CKEDITOR . POSITION _AFTER _START ) ; p . setEnd ( this . startContainer , this . startOffset ) ; p = new CKEDITOR . dom . walker ( p ) ; var H , O , N = CKEDITOR . dom . walker . blockBoundary ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? { br : 1 } : null ) , r = null , I = function ( a ) { if ( a . type == CKEDITOR . NODE _ELEMENT && "false" == a . getAttribute ( "contenteditable" ) ) if ( r ) { if ( r . equals ( a ) ) { r = null ; return } } else r = a ; else if ( r ) return ; var b = N ( a ) ; b || ( H = a ) ; return b } , h = function ( a ) { var b = I ( a ) ; ! b && a . is && a . is ( "br" ) && ( O = a ) ; return b } ; p . guard = I ; p = p . lastBackward ( ) ; H = H || l ; this . setStartAt ( H ,
! H . is ( "br" ) && ( ! p && this . checkStartOfBlock ( ) || p && H . contains ( p ) ) ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _AFTER _END ) ; if ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ) { p = this . clone ( ) ; p = new CKEDITOR . dom . walker ( p ) ; var M = CKEDITOR . dom . walker . whitespaces ( ) , n = CKEDITOR . dom . walker . bookmark ( ) ; p . evaluator = function ( a ) { return ! M ( a ) && ! n ( a ) } ; if ( ( p = p . previous ( ) ) && p . type == CKEDITOR . NODE _ELEMENT && p . is ( "br" ) ) break } p = this . clone ( ) ; p . collapse ( ) ; p . setEndAt ( l , CKEDITOR . POSITION _BEFORE _END ) ; p = new CKEDITOR . dom . walker ( p ) ; p . guard =
a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? h : I ; H = r = O = null ; p = p . lastForward ( ) ; H = H || l ; this . setEndAt ( H , ! p && this . checkEndOfBlock ( ) || p && H . contains ( p ) ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _BEFORE _START ) ; O && this . setEndAfter ( O ) } } , shrink : function ( a , b , c ) { var d = "boolean" === typeof c ? c : c && "boolean" === typeof c . shrinkOnBlockBoundary ? c . shrinkOnBlockBoundary : ! 0 , e = c && c . skipBogus ; if ( ! this . collapsed ) { a = a || CKEDITOR . SHRINK _TEXT ; var f = this . clone ( ) , l = this . startContainer , h = this . endContainer , k = this . startOffset , m = this . endOffset ,
q = c = 1 ; l && l . type == CKEDITOR . NODE _TEXT && ( k ? k >= l . getLength ( ) ? f . setStartAfter ( l ) : ( f . setStartBefore ( l ) , c = 0 ) : f . setStartBefore ( l ) ) ; h && h . type == CKEDITOR . NODE _TEXT && ( m ? m >= h . getLength ( ) ? f . setEndAfter ( h ) : ( f . setEndAfter ( h ) , q = 0 ) : f . setEndBefore ( h ) ) ; var f = new CKEDITOR . dom . walker ( f ) , p = CKEDITOR . dom . walker . bookmark ( ) , u = CKEDITOR . dom . walker . bogus ( ) ; f . evaluator = function ( b ) { return b . type == ( a == CKEDITOR . SHRINK _ELEMENT ? CKEDITOR . NODE _ELEMENT : CKEDITOR . NODE _TEXT ) } ; var K ; f . guard = function ( b , c ) { if ( e && u ( b ) || p ( b ) ) return ! 0 ; if ( a == CKEDITOR . SHRINK _ELEMENT &&
b . type == CKEDITOR . NODE _TEXT || c && b . equals ( K ) || ! 1 === d && b . type == CKEDITOR . NODE _ELEMENT && b . isBlockBoundary ( ) || b . type == CKEDITOR . NODE _ELEMENT && b . hasAttribute ( "contenteditable" ) ) return ! 1 ; c || b . type != CKEDITOR . NODE _ELEMENT || ( K = b ) ; return ! 0 } ; c && ( l = f [ a == CKEDITOR . SHRINK _ELEMENT ? "lastForward" : "next" ] ( ) ) && this . setStartAt ( l , b ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _BEFORE _START ) ; q && ( f . reset ( ) , ( f = f [ a == CKEDITOR . SHRINK _ELEMENT ? "lastBackward" : "previous" ] ( ) ) && this . setEndAt ( f , b ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _AFTER _END ) ) ;
return ! ( ! c && ! q ) } } , insertNode : function ( a ) { this . optimizeBookmark ( ) ; this . trim ( ! 1 , ! 0 ) ; var b = this . startContainer , c = b . getChild ( this . startOffset ) ; c ? a . insertBefore ( c ) : b . append ( a ) ; a . getParent ( ) && a . getParent ( ) . equals ( this . endContainer ) && this . endOffset ++ ; this . setStartBefore ( a ) } , moveToPosition : function ( a , b ) { this . setStartAt ( a , b ) ; this . collapse ( ! 0 ) } , moveToRange : function ( a ) { this . setStart ( a . startContainer , a . startOffset ) ; this . setEnd ( a . endContainer , a . endOffset ) } , selectNodeContents : function ( a ) { this . setStart ( a , 0 ) ; this . setEnd ( a ,
f = g != a ? g . getText ( ) : g . substring ( b ) ; if ( e . test ( f ) ) return ! 1 } return ! 0 } var e = new RegExp ( /[^\s\ufeff]/ ) , f , l ; switch ( a ) { case CKEDITOR . ENLARGE _INLINE : var h = 1 ; case CKEDITOR . ENLARGE _ELEMENT : if ( this . collapsed ) break ; var k = this . getCommonAncestor ( ) ; l = this . root ; var m , p , q , u , K , E = ! 1 , C ; C = this . startContainer ; var t = this . startOffset ; C . type == CKEDITOR . NODE _TEXT ? ( t && ( C = ! CKEDITOR . tools . trim ( C . substring ( 0 , t ) ) . length && C , E = ! ! C ) , C && ( ( u = C . getPrevious ( ) ) || ( q = C . getParent ( ) ) ) ) : ( t && ( u = C . getChild ( t - 1 ) || C . getLast ( ) ) , u || ( q = C ) ) ; for ( q = c ( q ) ; q ||
u ; ) { if ( q && ! u ) { ! K && q . equals ( k ) && ( K = ! 0 ) ; if ( h ? q . isBlockBoundary ( ) : ! l . contains ( q ) ) break ; E && "inline" == q . getComputedStyle ( "display" ) || ( E = ! 1 , K ? m = q : this . setStartBefore ( q ) ) ; u = q . getPrevious ( ) } for ( ; u ; ) if ( C = ! 1 , u . type == CKEDITOR . NODE _COMMENT ) u = u . getPrevious ( ) ; else { if ( u . type == CKEDITOR . NODE _TEXT ) f = u . getText ( ) , e . test ( f ) && ( u = null ) , C = /[\s\ufeff]$/ . test ( f ) ; else if ( ( u . $ . offsetWidth > ( CKEDITOR . env . webkit ? 1 : 0 ) || b && u . is ( "br" ) ) && ! u . data ( "cke-bookmark" ) ) if ( E && CKEDITOR . dtd . $removeEmpty [ u . getName ( ) ] ) { f = u . getText ( ) ; if ( e . test ( f ) ) u =
null ; else for ( var t = u . $ . getElementsByTagName ( "*" ) , B = 0 , z ; z = t [ B ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ z . nodeName . toLowerCase ( ) ] ) { u = null ; break } u && ( C = ! ! f . length ) } else u = null ; C && ( E ? K ? m = q : q && this . setStartBefore ( q ) : E = ! 0 ) ; if ( u ) { C = u . getPrevious ( ) ; if ( ! q && ! C ) { q = u ; u = null ; break } u = C } else q = null } q && ( q = c ( q . getParent ( ) ) ) } C = this . endContainer ; t = this . endOffset ; q = u = null ; K = E = ! 1 ; C . type == CKEDITOR . NODE _TEXT ? CKEDITOR . tools . trim ( C . substring ( t ) ) . length ? E = ! 0 : ( E = ! C . getLength ( ) , t == C . getLength ( ) ? ( u = C . getNext ( ) ) || ( q = C . getParent ( ) ) : d ( C ,
t , l ) && ( q = C . getParent ( ) ) ) : ( u = C . getChild ( t ) ) || ( q = C ) ; for ( ; q || u ; ) { if ( q && ! u ) { ! K && q . equals ( k ) && ( K = ! 0 ) ; if ( h ? q . isBlockBoundary ( ) : ! l . contains ( q ) ) break ; E && "inline" == q . getComputedStyle ( "display" ) || ( E = ! 1 , K ? p = q : q && this . setEndAfter ( q ) ) ; u = q . getNext ( ) } for ( ; u ; ) { C = ! 1 ; if ( u . type == CKEDITOR . NODE _TEXT ) f = u . getText ( ) , d ( u , 0 , l ) || ( u = null ) , C = /^[\s\ufeff]/ . test ( f ) ; else if ( u . type == CKEDITOR . NODE _ELEMENT ) { if ( ( 0 < u . $ . offsetWidth || b && u . is ( "br" ) ) && ! u . data ( "cke-bookmark" ) ) if ( E && CKEDITOR . dtd . $removeEmpty [ u . getName ( ) ] ) { f = u . getText ( ) ; if ( e . test ( f ) ) u =
null ; else for ( t = u . $ . getElementsByTagName ( "*" ) , B = 0 ; z = t [ B ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ z . nodeName . toLowerCase ( ) ] ) { u = null ; break } u && ( C = ! ! f . length ) } else u = null } else C = 1 ; C && E && ( K ? p = q : this . setEndAfter ( q ) ) ; if ( u ) { C = u . getNext ( ) ; if ( ! q && ! C ) { q = u ; u = null ; break } u = C } else q = null } q && ( q = c ( q . getParent ( ) ) ) } m && p && ( k = m . contains ( p ) ? p : m , this . setStartBefore ( k ) , this . setEndAfter ( k ) ) ; break ; case CKEDITOR . ENLARGE _BLOCK _CONTENTS : case CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : q = new CKEDITOR . dom . range ( this . root ) ; l = this . root ; q . setStartAt ( l ,
CKEDITOR . POSITION _AFTER _START ) ; q . setEnd ( this . startContainer , this . startOffset ) ; q = new CKEDITOR . dom . walker ( q ) ; var H , N , O = CKEDITOR . dom . walker . blockBoundary ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? { br : 1 } : null ) , r = null , I = function ( a ) { if ( a . type == CKEDITOR . NODE _ELEMENT && "false" == a . getAttribute ( "contenteditable" ) ) if ( r ) { if ( r . equals ( a ) ) { r = null ; return } } else r = a ; else if ( r ) return ; var b = O ( a ) ; b || ( H = a ) ; return b } , h = function ( a ) { var b = I ( a ) ; ! b && a . is && a . is ( "br" ) && ( N = a ) ; return b } ; q . guard = I ; q = q . lastBackward ( ) ; H = H || l ; this . setStartAt ( H ,
! H . is ( "br" ) && ( ! q && this . checkStartOfBlock ( ) || q && H . contains ( q ) ) ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _AFTER _END ) ; if ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ) { q = this . clone ( ) ; q = new CKEDITOR . dom . walker ( q ) ; var M = CKEDITOR . dom . walker . whitespaces ( ) , n = CKEDITOR . dom . walker . bookmark ( ) ; q . evaluator = function ( a ) { return ! M ( a ) && ! n ( a ) } ; if ( ( q = q . previous ( ) ) && q . type == CKEDITOR . NODE _ELEMENT && q . is ( "br" ) ) break } q = this . clone ( ) ; q . collapse ( ) ; q . setEndAt ( l , CKEDITOR . POSITION _BEFORE _END ) ; q = new CKEDITOR . dom . walker ( q ) ; q . guard =
a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? h : I ; H = r = N = null ; q = q . lastForward ( ) ; H = H || l ; this . setEndAt ( H , ! q && this . checkEndOfBlock ( ) || q && H . contains ( q ) ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _BEFORE _START ) ; N && this . setEndAfter ( N ) } } , shrink : function ( a , b , c ) { var d = "boolean" === typeof c ? c : c && "boolean" === typeof c . shrinkOnBlockBoundary ? c . shrinkOnBlockBoundary : ! 0 , e = c && c . skipBogus ; if ( ! this . collapsed ) { a = a || CKEDITOR . SHRINK _TEXT ; var f = this . clone ( ) , l = this . startContainer , h = this . endContainer , k = this . startOffset , m = this . endOffset ,
p = c = 1 ; l && l . type == CKEDITOR . NODE _TEXT && ( k ? k >= l . getLength ( ) ? f . setStartAfter ( l ) : ( f . setStartBefore ( l ) , c = 0 ) : f . setStartBefore ( l ) ) ; h && h . type == CKEDITOR . NODE _TEXT && ( m ? m >= h . getLength ( ) ? f . setEndAfter ( h ) : ( f . setEndAfter ( h ) , p = 0 ) : f . setEndBefore ( h ) ) ; var f = new CKEDITOR . dom . walker ( f ) , q = CKEDITOR . dom . walker . bookmark ( ) , u = CKEDITOR . dom . walker . bogus ( ) ; f . evaluator = function ( b ) { return b . type == ( a == CKEDITOR . SHRINK _ELEMENT ? CKEDITOR . NODE _ELEMENT : CKEDITOR . NODE _TEXT ) } ; var K ; f . guard = function ( b , c ) { if ( e && u ( b ) || q ( b ) ) return ! 0 ; if ( a == CKEDITOR . SHRINK _ELEMENT &&
b . type == CKEDITOR . NODE _TEXT || c && b . equals ( K ) || ! 1 === d && b . type == CKEDITOR . NODE _ELEMENT && b . isBlockBoundary ( ) || b . type == CKEDITOR . NODE _ELEMENT && b . hasAttribute ( "contenteditable" ) ) return ! 1 ; c || b . type != CKEDITOR . NODE _ELEMENT || ( K = b ) ; return ! 0 } ; c && ( l = f [ a == CKEDITOR . SHRINK _ELEMENT ? "lastForward" : "next" ] ( ) ) && this . setStartAt ( l , b ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _BEFORE _START ) ; p && ( f . reset ( ) , ( f = f [ a == CKEDITOR . SHRINK _ELEMENT ? "lastBackward" : "previous" ] ( ) ) && this . setEndAt ( f , 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 ,
a . type == CKEDITOR . NODE _TEXT ? a . getLength ( ) : a . getChildCount ( ) ) } , setStart : function ( b , c ) { b . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $empty [ b . getName ( ) ] && ( c = b . getIndex ( ) , b = b . getParent ( ) ) ; this . _setStartContainer ( b ) ; this . startOffset = c ; this . endContainer || ( this . _setEndContainer ( b ) , this . endOffset = c ) ; a ( this ) } , setEnd : function ( b , c ) { b . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $empty [ b . getName ( ) ] && ( c = b . getIndex ( ) + 1 , b = b . getParent ( ) ) ; this . _setEndContainer ( b ) ; this . endOffset = c ; this . startContainer || ( this . _setStartContainer ( b ) ,
this . startOffset = c ) ; a ( this ) } , setStartAfter : function ( a ) { this . setStart ( a . getParent ( ) , a . getIndex ( ) + 1 ) } , setStartBefore : function ( a ) { this . setStart ( a . getParent ( ) , a . getIndex ( ) ) } , setEndAfter : function ( a ) { this . setEnd ( a . getParent ( ) , a . getIndex ( ) + 1 ) } , setEndBefore : function ( a ) { this . setEnd ( a . getParent ( ) , a . getIndex ( ) ) } , setStartAt : function ( b , c ) { switch ( c ) { case CKEDITOR . POSITION _AFTER _START : this . setStart ( b , 0 ) ; break ; case CKEDITOR . POSITION _BEFORE _END : b . type == CKEDITOR . NODE _TEXT ? this . setStart ( b , b . getLength ( ) ) : this . setStart ( b ,
b . getChildCount ( ) ) ; break ; case CKEDITOR . POSITION _BEFORE _START : this . setStartBefore ( b ) ; break ; case CKEDITOR . POSITION _AFTER _END : this . setStartAfter ( b ) } a ( this ) } , setEndAt : function ( b , c ) { switch ( c ) { case CKEDITOR . POSITION _AFTER _START : this . setEnd ( b , 0 ) ; break ; case CKEDITOR . POSITION _BEFORE _END : b . type == CKEDITOR . NODE _TEXT ? this . setEnd ( b , b . getLength ( ) ) : this . setEnd ( b , b . getChildCount ( ) ) ; break ; case CKEDITOR . POSITION _BEFORE _START : this . setEndBefore ( b ) ; break ; case CKEDITOR . POSITION _AFTER _END : this . setEndAfter ( b ) } a ( this ) } , fixBlock : function ( a ,
@@ -203,13 +203,13 @@ d.endNode.equals(c),h&&k&&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 , f ) { a : { null == f && ( f = d ( e ) ) ; for ( var h ; h = f . shift ( ) ; ) if ( h . getDtd ( ) . p ) { f = { element : h , remaining : f } ; break a } f = null } if ( ! f ) return 0 ; if ( ( h = CKEDITOR . filter . instances [ f . element . data ( "cke-filter" ) ] ) && ! h . check ( c ) ) return b ( a ,
c , e , f . remaining ) ; c = new CKEDITOR . dom . range ( f . element ) ; c . selectNodeContents ( f . element ) ; c = c . createIterator ( ) ; c . enlargeBr = a . enlargeBr ; c . enforceRealBlocks = a . enforceRealBlocks ; c . activeFilter = c . filter = h ; a . _ . nestedEditable = { element : f . element , container : e , remaining : f . remaining , iterator : c } ; return 1 } function c ( a , b , c ) { if ( ! b ) return ! 1 ; a = a . clone ( ) ; a . collapse ( ! c ) ; return a . checkBoundaryOfElement ( b , c ? CKEDITOR . START : CKEDITOR . END ) } var f = /^[\r\n\t ]+$/ , e = CKEDITOR . dom . walker . bookmark ( ! 1 , ! 0 ) , k = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ,
h = function ( a ) { return e ( a ) && k ( a ) } , q = { dd : 1 , dt : 1 , li : 1 } ; a . prototype = { getNextParagraph : function ( a ) { var d , k , y , A , F ; 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 =
h = function ( a ) { return e ( a ) && k ( a ) } , p = { dd : 1 , dt : 1 , li : 1 } ; a . prototype = { getNextParagraph : function ( a ) { var d , k , y , A , F ; a = a || "p" ; if ( this . _ . nestedEditable ) { if ( d = this . _ . nestedEditable . iterator . getNextParagraph ( a ) ) return this . activeFilter = this . _ . nestedEditable . iterator . activeFilter , d ; this . activeFilter = this . filter ; if ( b ( this , a , this . _ . nestedEditable . container , this . _ . nestedEditable . remaining ) ) return this . activeFilter = this . _ . nestedEditable . iterator . activeFilter , this . _ . nestedEditable . iterator . getNextParagraph ( a ) ; this . _ . nestedEditable =
null } if ( ! this . range . root . getDtd ( ) [ a ] ) return null ; if ( ! this . _ . started ) { var v = this . range . clone ( ) ; k = v . startPath ( ) ; var l = v . endPath ( ) , L = ! v . collapsed && c ( v , k . block ) , w = ! v . collapsed && c ( v , l . block , 1 ) ; v . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 ) ; L && v . setStartAt ( k . block , CKEDITOR . POSITION _BEFORE _END ) ; w && v . setEndAt ( l . block , CKEDITOR . POSITION _AFTER _START ) ; k = v . endContainer . hasAscendant ( "pre" , ! 0 ) || v . startContainer . hasAscendant ( "pre" , ! 0 ) ; v . enlarge ( this . forceBrBreak && ! k || ! this . enlargeBr ? CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : CKEDITOR . ENLARGE _BLOCK _CONTENTS ) ;
v . collapsed || ( k = new CKEDITOR . dom . walker ( v . clone ( ) ) , l = CKEDITOR . dom . walker . bookmark ( ! 0 , ! 0 ) , k . evaluator = l , this . _ . nextNode = k . next ( ) , k = new CKEDITOR . dom . walker ( v . clone ( ) ) , k . evaluator = l , k = k . previous ( ) , this . _ . lastNode = k . getNextSourceNode ( ! 0 , null , v . root ) , this . _ . lastNode && this . _ . lastNode . type == CKEDITOR . NODE _TEXT && ! CKEDITOR . tools . trim ( this . _ . lastNode . getText ( ) ) && this . _ . lastNode . getParent ( ) . isBlockBoundary ( ) && ( l = this . range . clone ( ) , l . moveToPosition ( this . _ . lastNode , CKEDITOR . POSITION _AFTER _END ) , l . checkEndOfBlock ( ) &&
( l = new CKEDITOR . dom . elementPath ( l . endContainer , l . root ) , this . _ . lastNode = ( l . block || l . blockLimit ) . getNextSourceNode ( ! 0 ) ) ) , this . _ . lastNode && v . root . contains ( this . _ . lastNode ) || ( this . _ . lastNode = this . _ . docEndMarker = v . document . createText ( "" ) , this . _ . lastNode . insertAfter ( k ) ) , v = null ) ; this . _ . started = 1 ; k = v } l = this . _ . nextNode ; v = this . _ . lastNode ; for ( this . _ . nextNode = null ; l ; ) { var L = 0 , w = l . hasAscendant ( "pre" ) , J = l . type != CKEDITOR . NODE _ELEMENT , G = 0 ; if ( J ) l . type == CKEDITOR . NODE _TEXT && f . test ( l . getText ( ) ) && ( J = 0 ) ; else { var p = l . getName ( ) ;
if ( CKEDITOR . dtd . $block [ p ] && "false" == l . getAttribute ( "contenteditable" ) ) { d = l ; b ( this , a , d ) ; break } else if ( l . isBlockBoundary ( this . forceBrBreak && ! w && { br : 1 } ) ) { if ( "br" == p ) J = 1 ; else if ( ! k && ! l . getChildCount ( ) && "hr" != p ) { d = l ; y = l . equals ( v ) ; break } k && ( k . setEndAt ( l , CKEDITOR . POSITION _BEFORE _START ) , "br" != p && ( this . _ . nextNode = l ) ) ; L = 1 } else { if ( l . getFirst ( ) ) { k || ( k = this . range . clone ( ) , k . setStartAt ( l , CKEDITOR . POSITION _BEFORE _START ) ) ; l = l . getFirst ( ) ; continue } J = 1 } } J && ! k && ( k = this . range . clone ( ) , k . setStartAt ( l , CKEDITOR . POSITION _BEFORE _START ) ) ;
y = ( ! L || J ) && l . equals ( v ) ; if ( k && ! L ) for ( ; ! l . getNext ( h ) && ! y ; ) { p = l . getParent ( ) ; if ( p . isBlockBoundary ( this . forceBrBreak && ! w && { br : 1 } ) ) { L = 1 ; J = 0 ; y || p . equals ( v ) ; k . setEndAt ( p , CKEDITOR . POSITION _BEFORE _END ) ; break } l = p ; J = 1 ; y = l . equals ( v ) ; G = 1 } J && k . setEndAt ( l , CKEDITOR . POSITION _AFTER _END ) ; l = this . _getNextSourceNode ( l , G , v ) ; if ( ( y = ! l ) || L && k ) break } if ( ! d ) { if ( ! k ) return this . _ . docEndMarker && this . _ . docEndMarker . remove ( ) , this . _ . nextNode = null ; d = new CKEDITOR . dom . elementPath ( k . startContainer , k . root ) ; l = d . blockLimit ; L = { div : 1 , th : 1 , td : 1 } ;
d = d . block ; ! d && l && ! this . enforceRealBlocks && L [ l . getName ( ) ] && k . checkStartOfBlock ( ) && k . checkEndOfBlock ( ) && ! l . equals ( k . root ) ? d = l : ! d || this . enforceRealBlocks && d . is ( q ) ? ( d = this . range . document . createElement ( a ) , k . extractContents ( ) . appendTo ( d ) , d . trim ( ) , k . insertNode ( d ) , A = F = ! 0 ) : "li" != d . getName ( ) ? k . checkStartOfBlock ( ) && k . checkEndOfBlock ( ) || ( d = d . clone ( ! 1 ) , k . extractContents ( ) . appendTo ( d ) , d . trim ( ) , F = k . splitBlock ( ) , A = ! F . wasStartOfBlock , F = ! F . wasEndOfBlock , k . insertNode ( d ) ) : y || ( this . _ . nextNode = d . equals ( v ) ? null : this . _getNextSourceNode ( k . getBoundaryNodes ( ) . endNode ,
( l = new CKEDITOR . dom . elementPath ( l . endContainer , l . root ) , this . _ . lastNode = ( l . block || l . blockLimit ) . getNextSourceNode ( ! 0 ) ) ) , this . _ . lastNode && v . root . contains ( this . _ . lastNode ) || ( this . _ . lastNode = this . _ . docEndMarker = v . document . createText ( "" ) , this . _ . lastNode . insertAfter ( k ) ) , v = null ) ; this . _ . started = 1 ; k = v } l = this . _ . nextNode ; v = this . _ . lastNode ; for ( this . _ . nextNode = null ; l ; ) { var L = 0 , w = l . hasAscendant ( "pre" ) , J = l . type != CKEDITOR . NODE _ELEMENT , G = 0 ; if ( J ) l . type == CKEDITOR . NODE _TEXT && f . test ( l . getText ( ) ) && ( J = 0 ) ; else { var q = l . getName ( ) ;
if ( CKEDITOR . dtd . $block [ q ] && "false" == l . getAttribute ( "contenteditable" ) ) { d = l ; b ( this , a , d ) ; break } else if ( l . isBlockBoundary ( this . forceBrBreak && ! w && { br : 1 } ) ) { if ( "br" == q ) J = 1 ; else if ( ! k && ! l . getChildCount ( ) && "hr" != q ) { d = l ; y = l . equals ( v ) ; break } k && ( k . setEndAt ( l , CKEDITOR . POSITION _BEFORE _START ) , "br" != q && ( this . _ . nextNode = l ) ) ; L = 1 } else { if ( l . getFirst ( ) ) { k || ( k = this . range . clone ( ) , k . setStartAt ( l , CKEDITOR . POSITION _BEFORE _START ) ) ; l = l . getFirst ( ) ; continue } J = 1 } } J && ! k && ( k = this . range . clone ( ) , k . setStartAt ( l , CKEDITOR . POSITION _BEFORE _START ) ) ;
y = ( ! L || J ) && l . equals ( v ) ; if ( k && ! L ) for ( ; ! l . getNext ( h ) && ! y ; ) { q = l . getParent ( ) ; if ( q . isBlockBoundary ( this . forceBrBreak && ! w && { br : 1 } ) ) { L = 1 ; J = 0 ; y || q . equals ( v ) ; k . setEndAt ( q , CKEDITOR . POSITION _BEFORE _END ) ; break } l = q ; J = 1 ; y = l . equals ( v ) ; G = 1 } J && k . setEndAt ( l , CKEDITOR . POSITION _AFTER _END ) ; l = this . _getNextSourceNode ( l , G , v ) ; if ( ( y = ! l ) || L && k ) break } if ( ! d ) { if ( ! k ) return this . _ . docEndMarker && this . _ . docEndMarker . remove ( ) , this . _ . nextNode = null ; d = new CKEDITOR . dom . elementPath ( k . startContainer , k . root ) ; l = d . blockLimit ; L = { div : 1 , th : 1 , td : 1 } ;
d = d . block ; ! d && l && ! this . enforceRealBlocks && L [ l . getName ( ) ] && k . checkStartOfBlock ( ) && k . checkEndOfBlock ( ) && ! l . equals ( k . root ) ? d = l : ! d || this . enforceRealBlocks && d . is ( p ) ? ( d = this . range . document . createElement ( a ) , k . extractContents ( ) . appendTo ( d ) , d . trim ( ) , k . insertNode ( d ) , A = F = ! 0 ) : "li" != d . getName ( ) ? k . checkStartOfBlock ( ) && k . checkEndOfBlock ( ) || ( d = d . clone ( ! 1 ) , k . extractContents ( ) . appendTo ( d ) , d . trim ( ) , F = k . splitBlock ( ) , A = ! F . wasStartOfBlock , F = ! F . wasEndOfBlock , k . insertNode ( d ) ) : y || ( this . _ . nextNode = d . equals ( v ) ? null : this . _getNextSourceNode ( k . getBoundaryNodes ( ) . endNode ,
1 , v ) ) } A && ( A = d . getPrevious ( ) ) && A . type == CKEDITOR . NODE _ELEMENT && ( "br" == A . getName ( ) ? A . remove ( ) : A . getLast ( ) && "br" == A . getLast ( ) . $ . nodeName . toLowerCase ( ) && A . getLast ( ) . remove ( ) ) ; F && ( A = d . getLast ( ) ) && A . type == CKEDITOR . NODE _ELEMENT && "br" == A . getName ( ) && ( ! CKEDITOR . env . needsBrFiller || A . getPrevious ( e ) || A . getNext ( e ) ) && A . remove ( ) ; this . _ . nextNode || ( this . _ . nextNode = y || d . equals ( v ) || ! v ? null : this . _getNextSourceNode ( d , 1 , v ) ) ; return d } , _getNextSourceNode : function ( a , b , c ) { function d ( a ) { return ! ( a . equals ( c ) || a . equals ( f ) ) } var f =
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" ,
@@ -217,21 +217,21 @@ CKEDITOR.command=function(a,d){this.uiItems=[];this.exec=function(b){if(this.sta
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 , useComputedState : ! 0 , width : "" , baseFloatZIndex : 1E4 , blockedKeystrokes : [ CKEDITOR . CTRL + 66 , CKEDITOR . CTRL + 73 , CKEDITOR . CTRL + 85 ] } ;
( function ( ) { function a ( a , b , c , d , e ) { var f , g ; a = [ ] ; for ( f in b ) { g = b [ f ] ; g = "boolean" == typeof g ? { } : "function" == typeof g ? { match : g } : B ( g ) ; "$" != f . charAt ( 0 ) && ( g . elements = f ) ; c && ( g . featureName = c . toLowerCase ( ) ) ; var n = g ; n . elements = k ( n . elements , /\s+/ ) || null ; n . propertiesOnly = n . propertiesOnly || ! 0 === n . elements ; var t = /\s*,\s*/ , r = void 0 ; for ( r in O ) { n [ r ] = k ( n [ r ] , t ) || null ; var l = n , z = N [ r ] , h = k ( n [ N [ r ] ] , t ) , E = n [ r ] , D = [ ] , H = ! 0 , I = void 0 ; h ? H = ! 1 : h = { } ; for ( I in E ) "!" == I . charAt ( 0 ) && ( I = I . slice ( 1 ) , D . push ( I ) , h [ I ] = ! 0 , H = ! 1 ) ; for ( ; I = D . pop ( ) ; ) E [ I ] =
E [ "!" + I ] , delete E [ "!" + I ] ; l [ z ] = ( H ? ! 1 : h ) || null } n . match = n . match || null ; d . push ( g ) ; a . push ( g ) } b = e . elements ; e = e . generic ; var C ; c = 0 ; for ( d = a . length ; c < d ; ++ c ) { f = B ( a [ c ] ) ; g = ! 0 === f . classes || ! 0 === f . styles || ! 0 === f . attributes ; n = f ; r = z = t = void 0 ; for ( t in O ) n [ t ] = L ( n [ t ] ) ; l = ! 0 ; for ( r in N ) { t = N [ r ] ; z = n [ t ] ; h = [ ] ; E = void 0 ; for ( E in z ) - 1 < E . indexOf ( "*" ) ? h . push ( new RegExp ( "^" + E . replace ( /\*/g , ".*" ) + "$" ) ) : h . push ( E ) ; z = h ; z . length && ( n [ t ] = z , l = ! 1 ) } n . nothingRequired = l ; n . noProperties = ! ( n . attributes || n . classes || n . 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 } : B ( g ) ; "$" != f . charAt ( 0 ) && ( g . elements = f ) ; c && ( g . featureName = c . toLowerCase ( ) ) ; var n = g ; n . elements = k ( n . elements , /\s+/ ) || null ; n . propertiesOnly = n . propertiesOnly || ! 0 === n . elements ; var t = /\s*,\s*/ , r = void 0 ; for ( r in N ) { n [ r ] = k ( n [ r ] , t ) || null ; var l = n , z = O [ r ] , h = k ( n [ O [ r ] ] , t ) , E = n [ r ] , D = [ ] , H = ! 0 , I = void 0 ; h ? H = ! 1 : h = { } ; for ( I in E ) "!" == I . charAt ( 0 ) && ( I = I . slice ( 1 ) , D . push ( I ) , h [ I ] = ! 0 , H = ! 1 ) ; for ( ; I = D . pop ( ) ; ) E [ I ] =
E [ "!" + I ] , delete E [ "!" + I ] ; l [ z ] = ( H ? ! 1 : h ) || null } n . match = n . match || null ; d . push ( g ) ; a . push ( g ) } b = e . elements ; e = e . generic ; var C ; c = 0 ; for ( d = a . length ; c < d ; ++ c ) { f = B ( a [ c ] ) ; g = ! 0 === f . classes || ! 0 === f . styles || ! 0 === f . attributes ; n = f ; r = z = t = void 0 ; for ( t in N ) n [ t ] = L ( n [ t ] ) ; l = ! 0 ; for ( r in O ) { t = O [ r ] ; z = n [ t ] ; h = [ ] ; E = void 0 ; for ( E in z ) - 1 < E . indexOf ( "*" ) ? h . push ( new RegExp ( "^" + E . replace ( /\*/g , ".*" ) + "$" ) ) : h . push ( E ) ; z = h ; z . length && ( n [ t ] = z , l = ! 1 ) } n . nothingRequired = l ; n . noProperties = ! ( n . attributes || n . classes || n . styles ) ; if ( ! 0 === f . elements ||
null === f . elements ) e [ g ? "unshift" : "push" ] ( f ) ; else for ( C in n = f . elements , delete f . elements , n ) if ( b [ C ] ) b [ C ] [ g ? "unshift" : "push" ] ( f ) ; else b [ C ] = [ f ] } } function d ( a , c , d , e ) { if ( ! a . match || a . match ( c ) ) if ( e || h ( a , c ) ) if ( a . propertiesOnly || ( d . valid = ! 0 ) , d . allAttributes || ( d . allAttributes = b ( a . attributes , c . attributes , d . validAttributes ) ) , d . allStyles || ( d . allStyles = b ( a . styles , c . styles , d . validStyles ) ) , ! d . allClasses ) { a = a . classes ; c = c . classes ; e = d . validClasses ; if ( a ) if ( ! 0 === a ) a = ! 0 ; else { for ( var f = 0 , g = c . length , n ; f < g ; ++ f ) n = c [ f ] , e [ n ] ||
( e [ n ] = a ( n ) ) ; a = ! 1 } else a = ! 1 ; d . allClasses = a } } function b ( a , b , c ) { if ( ! a ) return ! 1 ; if ( ! 0 === a ) return ! 0 ; for ( var d in b ) c [ d ] || ( c [ d ] = a ( d ) ) ; return ! 1 } function c ( a , b , c ) { if ( ! a . match || a . match ( b ) ) { if ( a . noProperties ) return ! 1 ; c . hadInvalidAttribute = f ( a . attributes , b . attributes ) || c . hadInvalidAttribute ; c . hadInvalidStyle = f ( a . styles , b . styles ) || c . hadInvalidStyle ; a = a . classes ; b = b . classes ; if ( a ) { for ( var d = ! 1 , e = ! 0 === a , g = b . length ; g -- ; ) if ( e || a ( b [ g ] ) ) b . splice ( g , 1 ) , d = ! 0 ; a = d } else a = ! 1 ; c . hadInvalidClass = a || c . hadInvalidClass } } function f ( a ,
b ) { if ( ! a ) return ! 1 ; var c = ! 1 , d = ! 0 === a , e ; for ( e in b ) if ( d || a ( e ) ) delete b [ e ] , c = ! 0 ; return c } function e ( a , b , c ) { if ( a . disabled || a . customConfig && ! c || ! b ) return ! 1 ; a . _ . cachedChecks = { } ; return ! 0 } function k ( a , b ) { if ( ! a ) return ! 1 ; if ( ! 0 === a ) return a ; if ( "string" == typeof a ) return a = z ( 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 q ( b . styles , a . requiredStyles ) && q ( b . attributes , a . requiredAttributes ) } function q ( 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 m ( a ) { if ( ! a ) return { } ;
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 p ( b . styles , a . requiredStyles ) && p ( b . attributes , a . requiredAttributes ) } function p ( 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 m ( a ) { if ( ! a ) return { } ;
a = a . split ( /\s*,\s*/ ) . sort ( ) ; for ( var b = { } ; a . length ; ) b [ a . shift ( ) ] = "cke-test" ; return b } function g ( a ) { var b , c , d , e , f = { } , g = 1 ; for ( a = z ( a ) ; b = a . match ( r ) ; ) ( 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 ( I [ b ] ) ; return c ? z ( 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 A ( a , b , e , f ) { var g = 0 , t ; f . toHtml && ( b . name = b . name . replace ( M , "$1" ) ) ; if ( f . doCallbacks && a . elementCallbacks ) { a : { t = a . elementCallbacks ; for ( var r = 0 , z = t . length , B ; r < z ; ++ r ) if ( B = t [ r ] ( b ) ) { t = B ; break a } t = void 0 } if ( t ) return t } if ( f . doTransform && ( t = a . _ . transformations [ b . name ] ) ) { y ( b ) ; for ( r = 0 ; r < t . length ; ++ r ) p ( a , b , t [ r ] ) ; v ( b ) } if ( f . doFilter ) { a : { r = b . name ; z = a . _ ; a = z . allowedRules . elements [ r ] ; t = z . allowedRules . generic ; r = z . disallowedRules . elements [ r ] ; z = z . disallowedRules . generic ;
"" , 1 ) ) ; a . classes || ( a . classes = c ? c . split ( /\s+/ ) : [ ] ) } function A ( a , b , e , f ) { var g = 0 , t ; f . toHtml && ( b . name = b . name . replace ( M , "$1" ) ) ; if ( f . doCallbacks && a . elementCallbacks ) { a : { t = a . elementCallbacks ; for ( var r = 0 , z = t . length , B ; r < z ; ++ r ) if ( B = t [ r ] ( b ) ) { t = B ; break a } t = void 0 } if ( t ) return t } if ( f . doTransform && ( t = a . _ . transformations [ b . name ] ) ) { y ( b ) ; for ( r = 0 ; r < t . length ; ++ r ) q ( a , b , t [ r ] ) ; v ( b ) } if ( f . doFilter ) { a : { r = b . name ; z = a . _ ; a = z . allowedRules . elements [ r ] ; t = z . allowedRules . generic ; r = z . disallowedRules . elements [ r ] ; z = z . disallowedRules . generic ;
B = f . skipRequired ; var k = { valid : ! 1 , validAttributes : { } , validClasses : { } , validStyles : { } , allAttributes : ! 1 , allClasses : ! 1 , allStyles : ! 1 , hadInvalidAttribute : ! 1 , hadInvalidClass : ! 1 , hadInvalidStyle : ! 1 } , h , E ; if ( a || t ) { y ( b ) ; if ( r ) for ( h = 0 , E = r . length ; h < E ; ++ h ) if ( ! 1 === c ( r [ h ] , b , k ) ) { a = null ; break a } if ( z ) for ( h = 0 , E = z . length ; h < E ; ++ h ) c ( z [ h ] , b , k ) ; if ( a ) for ( h = 0 , E = a . length ; h < E ; ++ h ) d ( a [ h ] , b , k , B ) ; if ( t ) for ( h = 0 , E = t . length ; h < E ; ++ h ) d ( t [ h ] , b , k , B ) ; a = k } else a = null } if ( ! a || ! a . valid ) return e . push ( b ) , 1 ; E = a . validAttributes ; var D = a . validStyles ;
t = a . validClasses ; var r = b . attributes , H = b . styles , z = b . classes ; B = b . classBackup ; var N = b . styleBackup , I , C , O = [ ] , k = [ ] , m = /^data-cke-/ ; h = ! 1 ; delete r . style ; delete r [ "class" ] ; delete b . classBackup ; delete b . styleBackup ; if ( ! a . allAttributes ) for ( I in r ) E [ I ] || ( m . test ( I ) ? I == ( C = I . replace ( /^data-cke-saved-/ , "" ) ) || E [ C ] || ( delete r [ I ] , h = ! 0 ) : ( delete r [ I ] , h = ! 0 ) ) ; if ( ! a . allStyles || a . hadInvalidStyle ) { for ( I in H ) a . allStyles || D [ I ] ? O . push ( I + ":" + H [ I ] ) : h = ! 0 ; O . length && ( r . style = O . sort ( ) . join ( "; " ) ) } else N && ( r . style = N ) ; if ( ! a . allClasses ||
t = a . validClasses ; var r = b . attributes , H = b . styles , z = b . classes ; B = b . classBackup ; var O = b . styleBackup , I , C , N = [ ] , k = [ ] , m = /^data-cke-/ ; h = ! 1 ; delete r . style ; delete r [ "class" ] ; delete b . classBackup ; delete b . styleBackup ; if ( ! a . allAttributes ) for ( I in r ) E [ I ] || ( m . test ( I ) ? I == ( C = I . replace ( /^data-cke-saved-/ , "" ) ) || E [ C ] || ( delete r [ I ] , h = ! 0 ) : ( delete r [ I ] , h = ! 0 ) ) ; if ( ! a . allStyles || a . hadInvalidStyle ) { for ( I in H ) a . allStyles || D [ I ] ? N . push ( I + ":" + H [ I ] ) : h = ! 0 ; N . length && ( r . style = N . sort ( ) . join ( "; " ) ) } else O && ( r . style = O ) ; if ( ! a . allClasses ||
a . hadInvalidClass ) { for ( I = 0 ; I < z . length ; ++ I ) ( a . allClasses || t [ z [ I ] ] ) && k . push ( z [ I ] ) ; k . length && ( r [ "class" ] = k . sort ( ) . join ( " " ) ) ; B && k . length < B . split ( /\s+/ ) . length && ( h = ! 0 ) } else B && ( r [ "class" ] = B ) ; h && ( g = 1 ) ; if ( ! f . skipFinalValidation && ! l ( b ) ) return e . push ( b ) , 1 } f . toHtml && ( b . name = b . name . replace ( n , "cke:$1" ) ) ; return g } function F ( 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 l ( 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 L ( a ) { if ( ! a ) return ! 1 ; if ( ! 0 === a ) return ! 0 ; var b = F ( a ) ; return function ( c ) { return c in a || b && c . match ( b ) } } function w ( ) { return new CKEDITOR . htmlParser . element ( "br" ) } function J ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && ( "br" ==
a . name || t . $block [ a . name ] ) } function G ( a , b , c ) { var d = a . name ; if ( t . $empty [ d ] || ! a . children . length ) "hr" == d && "br" == b ? a . replaceWith ( w ( ) ) : ( a . parent && c . push ( { check : "it" , el : a . parent } ) , a . remove ( ) ) ; else if ( t . $block [ d ] || "tr" == d ) if ( "br" == b ) a . previous && ! J ( a . previous ) && ( b = w ( ) , b . insertBefore ( a ) ) , a . next && ! J ( a . next ) && ( b = w ( ) , b . insertAfter ( a ) ) , a . replaceWithChildren ( ) ; else { var d = a . children , e ; b : { e = t [ b ] ; for ( var f = 0 , g = d . length , n ; f < g ; ++ f ) if ( n = d [ f ] , n . type == CKEDITOR . NODE _ELEMENT && ! e [ n . name ] ) { e = ! 1 ; break b } e = ! 0 } if ( e ) a . name = b , a . attributes =
{ } , c . push ( { check : "parent-down" , el : a } ) ; else { e = a . parent ; for ( var f = e . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || "body" == e . name , r , z , g = d . length ; 0 < g ; ) n = d [ -- g ] , f && ( n . type == CKEDITOR . NODE _TEXT || n . type == CKEDITOR . NODE _ELEMENT && t . $inline [ n . name ] ) ? ( r || ( r = new CKEDITOR . htmlParser . element ( b ) , r . insertAfter ( a ) , c . push ( { check : "parent-down" , el : r } ) ) , r . add ( n , 0 ) ) : ( r = null , z = t [ e . name ] || t . span , n . insertAfter ( a ) , e . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || n . type != CKEDITOR . NODE _ELEMENT || z [ n . name ] || c . push ( { check : "el-up" , el : n } ) ) ; a . remove ( ) } } else d in
{ style : 1 , script : 1 } ? a . remove ( ) : ( a . parent && c . push ( { check : "it" , el : a . parent } ) , a . replaceWithChildren ( ) ) } function p ( 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 , D ) ; break } } function u ( a , b ) { var c = b . getDefinition ( ) , d = c . attributes , e = c . styles , f , g , n , t ; if ( a . name != c . element ) return ! 1 ; for ( f in d ) if ( "class" == f ) for ( c = d [ f ] . split ( /\s+/ ) , n = a . classes . join ( "|" ) ; t = c . pop ( ) ; ) { if ( - 1 == n . indexOf ( t ) ) return ! 1 } else if ( a . attributes [ f ] != d [ f ] ) return ! 1 ; for ( g in e ) if ( a . styles [ g ] !=
{ style : 1 , script : 1 } ? a . remove ( ) : ( a . parent && c . push ( { check : "it" , el : a . parent } ) , a . replaceWithChildren ( ) ) } function q ( 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 , D ) ; break } } function u ( a , b ) { var c = b . getDefinition ( ) , d = c . attributes , e = c . styles , f , g , n , t ; if ( a . name != c . element ) return ! 1 ; for ( f in d ) if ( "class" == f ) for ( c = d [ f ] . split ( /\s+/ ) , n = a . classes . join ( "|" ) ; t = c . pop ( ) ; ) { if ( - 1 == n . indexOf ( t ) ) return ! 1 } else if ( a . attributes [ f ] != d [ f ] ) return ! 1 ; for ( g in e ) if ( a . styles [ g ] !=
e [ g ] ) return ! 1 ; return ! 0 } function K ( a , b ) { var c , d ; "string" == typeof a ? c = a : a instanceof CKEDITOR . style ? d = a : ( c = a [ 0 ] , d = a [ 1 ] ) ; return [ { element : c , left : d , right : function ( a , c ) { c . transform ( a , b ) } } ] } function E ( a ) { return function ( b ) { return u ( b , a ) } } function C ( a ) { return function ( b , c ) { c [ a ] ( b ) } } var t = CKEDITOR . dtd , B = CKEDITOR . tools . copy , z = CKEDITOR . tools . trim , H = [ "" , "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 ( H [ c . enterMode ] +
" " + H [ c . shiftEnterMode ] , "default" , 1 ) , this . disallow ( c . config . disallowedContent ) ) } else this . customConfig = ! 1 , this . allow ( b || a , "default" , 1 ) } ; CKEDITOR . filter . instances = { } ; CKEDITOR . filter . prototype = { allow : function ( b , c , d ) { if ( ! e ( this , b , d ) ) return ! 1 ; var f , n ; if ( "string" == typeof b ) b = g ( b ) ; else if ( b instanceof CKEDITOR . style ) { if ( b . toAllowedContentRules ) return this . allow ( b . toAllowedContentRules ( this . editor ) , c , d ) ; f = b . getDefinition ( ) ; b = { } ; d = f . attributes ; b [ f . element ] = f = { styles : f . styles , requiredStyles : f . styles && CKEDITOR . tools . object . keys ( f . styles ) } ;
@@ -243,14 +243,14 @@ addContentForms:function(a){if(!this.disabled&&a){var b,c,d=[],e;for(b=0;b<a.len
this . addContentForms ( a . contentForms ) ; return a . requiredContent && ( this . customConfig || this . disallowedContent . length ) ? this . check ( a . requiredContent ) : ! 0 } , addTransformations : function ( a ) { var b , c ; if ( ! this . disabled && a ) { var d = this . _ . transformations , e ; for ( e = 0 ; e < a . length ; ++ e ) { b = a [ e ] ; var f = void 0 , g = void 0 , n = void 0 , t = void 0 , r = void 0 , z = void 0 ; c = [ ] ; for ( g = 0 ; g < b . length ; ++ g ) n = b [ g ] , "string" == typeof n ? ( n = n . split ( /\s*:\s*/ ) , t = n [ 0 ] , r = null , z = n [ 1 ] ) : ( t = n . check , r = n . left , z = n . right ) , f || ( f = n , f = f . element ? f . element : t ? t . match ( /^([a-z0-9]+)/i ) [ 0 ] :
f . left . getDefinition ( ) . element ) , r instanceof CKEDITOR . style && ( r = E ( r ) ) , c . push ( { check : t == f ? null : t , left : r , right : "string" == typeof z ? C ( z ) : z } ) ; b = f ; d [ b ] || ( d [ b ] = [ ] ) ; d [ b ] . push ( c ) } } } , check : function ( a , b , c ) { if ( this . disabled ) return ! 0 ; if ( CKEDITOR . tools . isArray ( a ) ) { for ( var d = a . length ; d -- ; ) if ( this . check ( a [ d ] , b , c ) ) return ! 0 ; return ! 1 } var e , f ; if ( "string" == typeof a ) { f = a + "\x3c" + ( ! 1 === b ? "0" : "1" ) + ( c ? "1" : "0" ) + "\x3e" ; if ( f in this . _ . cachedChecks ) return this . _ . cachedChecks [ f ] ; e = g ( a ) . $1 ; var n = e . styles , d = e . classes ; e . name = e . elements ;
e . classes = d = d ? d . split ( /\s*,\s*/ ) : [ ] ; e . styles = m ( n ) ; e . attributes = m ( e . attributes ) ; e . children = [ ] ; d . length && ( e . attributes [ "class" ] = d . join ( " " ) ) ; n && ( e . attributes . style = CKEDITOR . tools . writeCssText ( e . styles ) ) } else e = a . getDefinition ( ) , n = e . styles , d = e . attributes || { } , n && ! CKEDITOR . tools . isEmpty ( n ) ? ( n = B ( n ) , d . style = CKEDITOR . tools . writeCssText ( n , ! 0 ) ) : n = { } , e = { name : e . element , attributes : d , classes : d [ "class" ] ? d [ "class" ] . split ( /\s+/ ) : [ ] , styles : n , children : [ ] } ; var n = CKEDITOR . tools . clone ( e ) , t = [ ] , r ; if ( ! 1 !== b && ( r = this . _ . transformations [ e . name ] ) ) { for ( d =
0 ; d < r . length ; ++ d ) p ( this , e , r [ d ] ) ; v ( e ) } A ( this , n , 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 , n . attributes , ! 0 ) , b && ( e . attributes [ "class" ] = b ) ) ; "string" == typeof a && ( this . _ . cachedChecks [ f ] = c ) ; return c } , getAllowedEnterMode : function ( ) { var a = [ "p" , "div" , "br" ] , b = { p : CKEDITOR . ENTER _P , div : CKEDITOR . ENTER _DIV , br : CKEDITOR . ENTER _BR } ;
0 ; d < r . length ; ++ d ) q ( this , e , r [ d ] ) ; v ( e ) } A ( this , n , 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 , n . attributes , ! 0 ) , b && ( e . attributes [ "class" ] = b ) ) ; "string" == typeof a && ( this . _ . cachedChecks [ f ] = c ) ; return c } , getAllowedEnterMode : function ( ) { var a = [ "p" , "div" , "br" ] , b = { p : CKEDITOR . ENTER _P , div : CKEDITOR . ENTER _DIV , br : CKEDITOR . ENTER _BR } ;
return function ( c , d ) { var e = a . slice ( ) , f ; if ( this . check ( H [ 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 O = { styles : 1 , attributes : 1 , classes : 1 } , N = { styles : "requiredStyles" , attributes : "requiredAttributes" , classes : "requiredClasses" } , r = /^([a-z0-9\-*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i , I = { styles : /{([^}]+)}/ , attrs : /\[([^\]]+)\]/ , classes : /\(([^\)]+)\)/ } , M = /^cke:(object|embed|param)$/ , n = /^(object|embed|param)$/ , D ; D = CKEDITOR . filter . transformationsTools = { sizeToStyle : function ( a ) { this . lengthToStyle ( a ,
delete this . _ ; delete this . allowedContent ; delete this . disallowedContent } } ; var N = { styles : 1 , attributes : 1 , classes : 1 } , O = { styles : "requiredStyles" , attributes : "requiredAttributes" , classes : "requiredClasses" } , r = /^([a-z0-9\-*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i , I = { styles : /{([^}]+)}/ , attrs : /\[([^\]]+)\]/ , classes : /\(([^\)]+)\)/ } , M = /^cke:(object|embed|param)$/ , n = /^(object|embed|param)$/ , D ; D = 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 : u , transform : function ( a , b ) { if ( "string" == typeof b ) a . name = b ; else { var c = b . getDefinition ( ) , d = c . styles , e = c . attributes , f , n , g , t ; a . name = c . element ; for ( f in e ) if ( "class" ==
f ) for ( c = a . classes . join ( "|" ) , g = e [ f ] . split ( /\s+/ ) ; t = g . pop ( ) ; ) - 1 == c . indexOf ( t ) && a . classes . push ( t ) ; else a . attributes [ f ] = e [ f ] ; for ( n in d ) a . styles [ n ] = d [ n ] } } } } ) ( ) ;
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 : u , transform : function ( a , b ) { if ( "string" == typeof b ) a . name = b ; else { var c = b . getDefinition ( ) , d = c . styles , e = c . attributes , f , g , n , t ; a . name = c . element ; for ( f in e ) if ( "class" ==
f ) for ( c = a . classes . join ( "|" ) , n = e [ f ] . split ( /\s+/ ) ; t = n . pop ( ) ; ) - 1 == c . indexOf ( t ) && a . classes . push ( t ) ; else a . attributes [ f ] = e [ f ] ; for ( g in d ) a . styles [ g ] = d [ g ] } } } } ) ( ) ;
( function ( ) { CKEDITOR . focusManager = function ( a ) { if ( a . focusManager ) return a . focusManager ; this . hasFocus = ! 1 ; this . currentActive = null ; this . _ = { editor : a } ; return this } ; CKEDITOR . focusManager . _ = { blurDelay : 200 } ; CKEDITOR . focusManager . prototype = { focus : function ( a ) { this . _ . timer && clearTimeout ( this . _ . timer ) ; a && ( this . currentActive = a ) ; this . hasFocus || this . _ . locked || ( ( a = CKEDITOR . currentInstance ) && a . focusManager . blur ( 1 ) , this . hasFocus = ! 0 , ( a = this . _ . editor . container ) && a . addClass ( "cke_focus" ) , this . _ . editor . fire ( "focus" ) ) } , lock : function ( ) { this . _ . locked =
1 } , unlock : function ( ) { delete this . _ . locked } , blur : function ( a ) { function d ( ) { if ( this . hasFocus ) { this . hasFocus = ! 1 ; var a = this . _ . editor . container ; a && a . removeClass ( "cke_focus" ) ; this . _ . editor . fire ( "blur" ) } } if ( ! this . _ . locked ) { this . _ . timer && clearTimeout ( this . _ . timer ) ; var b = CKEDITOR . focusManager . _ . blurDelay ; a || ! b ? d . call ( this ) : this . _ . timer = CKEDITOR . tools . setTimeout ( function ( ) { delete this . _ . timer ; d . call ( this ) } , b , this ) } } , add : function ( a , d ) { var b = a . getCustomData ( "focusmanager" ) ; if ( ! b || b != this ) { b && b . remove ( a ) ; var b =
"focus" , c = "blur" ; d && ( CKEDITOR . env . ie ? ( b = "focusin" , c = "focusout" ) : CKEDITOR . event . useCapture = 1 ) ; var f = { blur : function ( ) { a . equals ( this . currentActive ) && this . blur ( ) } , focus : function ( ) { this . focus ( a ) } } ; a . on ( b , f . focus , this ) ; a . on ( c , f . blur , this ) ; d && ( CKEDITOR . event . useCapture = 0 ) ; a . setCustomData ( "focusmanager" , this ) ; a . setCustomData ( "focusmanager_handlers" , f ) } } , remove : function ( a ) { a . removeCustomData ( "focusmanager" ) ; var d = a . removeCustomData ( "focusmanager_handlers" ) ; a . removeListener ( "blur" , d . blur ) ; a . removeListener ( "focus" ,
@@ -258,11 +258,11 @@ d.focus)}}})();CKEDITOR.keystrokeHandler=function(a){if(a.keystrokeHandler)retur
( function ( ) { var a , d = function ( b ) { b = b . data ; var d = b . getKeystroke ( ) , e = this . keystrokes [ d ] , k = this . _ . editor ; a = ! 1 === k . fire ( "key" , { keyCode : d , domEvent : b } ) ; a || ( e && ( a = ! 1 !== k . execCommand ( e , { from : "keystrokeHandler" } ) ) , a || ( a = ! ! this . blockedKeystrokes [ d ] ) ) ; a && b . preventDefault ( ! 0 ) ; return ! a } , b = function ( b ) { a && ( a = ! 1 , b . data . preventDefault ( ! 0 ) ) } ; CKEDITOR . keystrokeHandler . prototype = { attach : function ( a ) { a . on ( "keydown" , d , this ) ; if ( CKEDITOR . env . gecko && CKEDITOR . env . mac ) a . on ( "keypress" , b , this ) } } } ) ( ) ;
( function ( ) { CKEDITOR . lang = { languages : { af : 1 , ar : 1 , az : 1 , bg : 1 , bn : 1 , bs : 1 , ca : 1 , cs : 1 , cy : 1 , da : 1 , de : 1 , "de-ch" : 1 , el : 1 , "en-au" : 1 , "en-ca" : 1 , "en-gb" : 1 , en : 1 , eo : 1 , es : 1 , "es-mx" : 1 , et : 1 , eu : 1 , fa : 1 , fi : 1 , fo : 1 , "fr-ca" : 1 , fr : 1 , gl : 1 , gu : 1 , he : 1 , hi : 1 , hr : 1 , hu : 1 , id : 1 , is : 1 , it : 1 , ja : 1 , ka : 1 , km : 1 , ko : 1 , ku : 1 , lt : 1 , lv : 1 , mk : 1 , mn : 1 , ms : 1 , nb : 1 , nl : 1 , no : 1 , oc : 1 , pl : 1 , "pt-br" : 1 , pt : 1 , ro : 1 , ru : 1 , si : 1 , sk : 1 , sl : 1 , sq : 1 , "sr-latn" : 1 , sr : 1 , sv : 1 , th : 1 , tr : 1 , tt : 1 , ug : 1 , uk : 1 , vi : 1 , "zh-cn" : 1 , zh : 1 } , rtl : { ar : 1 , fa : 1 , he : 1 , ku : 1 , ug : 1 } , load : function ( a , d , b ) { a && CKEDITOR . lang . languages [ a ] ||
( a = this . detect ( d , a ) ) ; var c = this ; d = function ( ) { c [ a ] . dir = c . rtl [ a ] ? "rtl" : "ltr" ; b ( a , c [ a ] ) } ; this [ a ] ? d ( ) : CKEDITOR . scriptLoader . load ( CKEDITOR . getUrl ( "lang/" + a + ".js" ) , d , this ) } , detect : function ( a , d ) { var b = this . languages ; d = d || navigator . userLanguage || navigator . language || a ; var c = d . toLowerCase ( ) . match ( /([a-z]+)(?:-([a-z]+))?/ ) , f = c [ 1 ] , c = c [ 2 ] ; b [ f + "-" + c ] ? f = f + "-" + c : b [ f ] || ( f = null ) ; CKEDITOR . lang . detect = f ? function ( ) { return f } : function ( a ) { return a } ; return f || a } } } ) ( ) ;
CKEDITOR . scriptLoader = function ( ) { var a = { } , d = { } ; return { load : function ( b , c , f , e ) { var k = "string" == typeof b ; k && ( b = [ b ] ) ; f || ( f = CKEDITOR ) ; var h = b . length , q = h , m = [ ] , g = [ ] , x = function ( a ) { c && ( k ? c . call ( f , a ) : c . call ( f , m , g ) ) } ; if ( 0 === q ) x ( ! 0 ) ; else { var y = function ( a , b ) { ( b ? m : g ) . push ( a ) ; 0 >= -- q && ( e && CKEDITOR . document . getDocumentElement ( ) . removeStyle ( "cursor" ) , x ( b ) ) } , A = 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 ) } , F = function ( b ) { if ( a [ b ] ) y ( b , ! 0 ) ; else { var e = d [ b ] || ( d [ b ] = [ ] ) ; e . push ( y ) ; if ( ! ( 1 < e . length ) ) { var f =
CKEDITOR . scriptLoader = function ( ) { var a = { } , d = { } ; return { load : function ( b , c , f , e ) { var k = "string" == typeof b ; k && ( b = [ b ] ) ; f || ( f = CKEDITOR ) ; var h = b . length , p = h , m = [ ] , g = [ ] , x = function ( a ) { c && ( k ? c . call ( f , a ) : c . call ( f , m , g ) ) } ; if ( 0 === p ) x ( ! 0 ) ; else { var y = function ( a , b ) { ( b ? m : g ) . push ( a ) ; 0 >= -- p && ( e && CKEDITOR . document . getDocumentElement ( ) . removeStyle ( "cursor" ) , x ( b ) ) } , A = 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 ) } , F = 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 , A ( b , ! 0 ) } : ( f . $ . onload = function ( ) { setTimeout ( function ( ) { f . $ . onload = null ; f . $ . onerror = null ; A ( b , ! 0 ) } , 0 ) } , f . $ . onerror = function ( ) { f . $ . onload = null ; f . $ . onerror = null ; A ( b , ! 1 ) } ) ) ; f . appendTo ( CKEDITOR . document . getHead ( ) ) } } } ; e && CKEDITOR . document . getDocumentElement ( ) . setStyle ( "cursor" ,
"wait" ) ; for ( var v = 0 ; v < h ; v ++ ) F ( b [ v ] ) } } , queue : function ( ) { function a ( ) { var b ; ( b = c [ 0 ] ) && this . load ( b . scriptUrl , b . callback , CKEDITOR , 0 ) } var c = [ ] ; return function ( d , e ) { var k = this ; c . push ( { scriptUrl : d , callback : function ( ) { e && e . apply ( this , arguments ) ; c . shift ( ) ; a . call ( k ) } } ) ; 1 == c . length && a . call ( this ) } } ( ) } } ( ) ; CKEDITOR . resourceManager = function ( a , d ) { this . basePath = a ; this . fileName = d ; this . registered = { } ; this . loaded = { } ; this . externals = { } ; this . _ = { waitingList : { } } } ;
CKEDITOR . resourceManager . prototype = { add : function ( a , d ) { if ( this . registered [ a ] ) throw Error ( '[CKEDITOR.resourceManager.add] The resource name "' + a + '" is already registered.' ) ; var b = this . registered [ a ] = d || { } ; b . name = a ; b . path = this . getPath ( a ) ; CKEDITOR . fire ( a + CKEDITOR . tools . capitalize ( this . fileName ) + "Ready" , b ) ; return this . get ( a ) } , get : function ( a ) { return this . registered [ a ] || null } , getPath : function ( a ) { var d = this . externals [ a ] ; return CKEDITOR . getUrl ( d && d . dir || this . basePath + a + "/" ) } , getFilePath : function ( a ) { var d = this . externals [ a ] ;
return CKEDITOR . getUrl ( this . getPath ( a ) + ( d ? d . file : this . fileName + ".js" ) ) } , addExternal : function ( a , d , b ) { b || ( d = d . replace ( /[^\/]+$/ , function ( a ) { b = a ; return "" } ) ) ; b = b || this . fileName + ".js" ; a = a . split ( "," ) ; for ( var c = 0 ; c < a . length ; c ++ ) this . externals [ a [ c ] ] = { dir : d , file : b } } , load : function ( a , d , b ) { CKEDITOR . tools . isArray ( a ) || ( a = a ? [ a ] : [ ] ) ; for ( var c = this . loaded , f = this . registered , e = [ ] , k = { } , h = { } , q = 0 ; q < a . length ; q ++ ) { var m = a [ q ] ; if ( m ) if ( c [ m ] || f [ m ] ) h [ m ] = this . get ( m ) ; else { var g = this . getFilePath ( m ) ; e . push ( g ) ; g in k || ( k [ g ] = [ ] ) ; k [ g ] . push ( m ) } } CKEDITOR . scriptLoader . load ( e ,
return CKEDITOR . getUrl ( this . getPath ( a ) + ( d ? d . file : this . fileName + ".js" ) ) } , addExternal : function ( a , d , b ) { b || ( d = d . replace ( /[^\/]+$/ , function ( a ) { b = a ; return "" } ) ) ; b = b || this . fileName + ".js" ; a = a . split ( "," ) ; for ( var c = 0 ; c < a . length ; c ++ ) this . externals [ a [ c ] ] = { dir : d , file : b } } , load : function ( a , d , b ) { CKEDITOR . tools . isArray ( a ) || ( a = a ? [ a ] : [ ] ) ; for ( var c = this . loaded , f = this . registered , e = [ ] , k = { } , h = { } , p = 0 ; p < a . length ; p ++ ) { var m = a [ p ] ; if ( m ) if ( c [ m ] || f [ m ] ) h [ m ] = this . get ( m ) ; else { var g = this . getFilePath ( m ) ; e . push ( g ) ; g in k || ( k [ g ] = [ ] ) ; k [ g ] . push ( m ) } } CKEDITOR . scriptLoader . load ( e ,
function ( a , e ) { if ( e . length ) throw Error ( '[CKEDITOR.resourceManager.load] Resource name "' + k [ e [ 0 ] ] . join ( "," ) + '" was not found at "' + e [ 0 ] + '".' ) ; for ( var f = 0 ; f < a . length ; f ++ ) for ( var g = k [ a [ f ] ] , m = 0 ; m < g . length ; m ++ ) { var l = g [ m ] ; h [ l ] = this . get ( l ) ; c [ l ] = 1 } d . call ( b , h ) } , this ) } } ; CKEDITOR . plugins = new CKEDITOR . resourceManager ( "plugins/" , "plugin" ) ;
CKEDITOR . plugins . load = CKEDITOR . tools . override ( CKEDITOR . plugins . load , function ( a ) { var d = { } ; return function ( b , c , f ) { var e = { } , k = function ( b ) { a . call ( this , b , function ( a ) { CKEDITOR . tools . extend ( e , a ) ; var b = [ ] , g ; for ( g in a ) { var h = a [ g ] , y = h && h . requires ; if ( ! d [ g ] ) { if ( h . icons ) for ( var A = h . icons . split ( "," ) , F = A . length ; F -- ; ) CKEDITOR . skin . addIcon ( A [ F ] , h . path + "icons/" + ( CKEDITOR . env . hidpi && h . hidpi ? "hidpi/" : "" ) + A [ F ] + ".png" ) ; h . isSupportedEnvironment = h . isSupportedEnvironment || function ( ) { return ! 0 } ; d [ g ] = 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 ) k . call ( this , b ) ; else { for ( g in e ) h = e [ g ] , h . onLoad && ! h . onLoad . _called && ( ! 1 === h . onLoad ( ) && delete e [ g ] , h . onLoad . _called = 1 ) ; c && c . call ( f || window , e ) } } , this ) } ; k . call ( this , b ) } } ) ; CKEDITOR . plugins . setLang = function ( a , d , b ) { var c = this . get ( a ) ; a = c . langEntries || ( c . langEntries = { } ) ; c = c . lang || ( c . lang = [ ] ) ; c . split && ( c = c . split ( "," ) ) ; - 1 == CKEDITOR . tools . indexOf ( c , d ) && c . push ( d ) ; a [ d ] = b } ;
@@ -275,11 +275,11 @@ c);this.on("selectionChange",function(a){e(this,a.data.path)});this.on("activeFi
null , this ) ; CKEDITOR . add ( this ) ; CKEDITOR . tools . setTimeout ( function ( ) { this . isDestroyed ( ) || this . isDetached ( ) || h ( this , a ) } , 0 , this ) } function d ( ) { do var a = "editor" + ++ F ; while ( CKEDITOR . instances [ a ] ) ; return a } function b ( a , b ) { return b == CKEDITOR . ELEMENT _MODE _INLINE ? a . is ( CKEDITOR . dtd . $editable ) || a . is ( "textarea" ) : b == CKEDITOR . ELEMENT _MODE _REPLACE ? ! a . is ( CKEDITOR . dtd . $nonBodyContent ) : 1 } function c ( ) { var a = this . commands , b ; for ( b in a ) f ( this , a [ b ] ) } function f ( a , b ) { b [ b . startDisabled ? "disable" : a . readOnly && ! b . readOnly ? "disable" :
b . modes [ a . mode ] ? "enable" : "disable" ] ( ) } function e ( a , b , c ) { if ( b ) { var d , e , f = a . commands ; for ( e in f ) d = f [ e ] , ( c || d . contextSensitive ) && d . refresh ( a , b ) } } function k ( a ) { var b = a . config . customConfig ; if ( ! b ) return ! 1 ; var b = CKEDITOR . getUrl ( b ) , c = v [ b ] || ( v [ b ] = { } ) ; c . fn ? ( c . fn . call ( a , a . config ) , CKEDITOR . getUrl ( a . config . customConfig ) != b && k ( a ) || a . fireOnce ( "customConfigLoaded" ) ) : CKEDITOR . scriptLoader . queue ( b , function ( ) { c . fn = c . fn || CKEDITOR . editorConfig || function ( ) { } ; k ( a ) } ) ; return ! 0 } function h ( a , b ) { a . on ( "customConfigLoaded" , function ( ) { if ( b ) { if ( b . on ) for ( var c in b . on ) a . on ( c ,
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 ) ; q ( a ) } ) ; b && null != b . customConfig && ( a . config . customConfig = b . customConfig ) ; k ( a ) || a . fireOnce ( "customConfigLoaded" ) }
function q ( a ) { CKEDITOR . skin . loadPart ( "editor" , function ( ) { m ( a ) } ) } function m ( a ) { CKEDITOR . lang . load ( a . config . language , a . config . defaultLanguage , function ( b , c ) { var d = a . config . title , e = a . config . applicationTitle ; a . langCode = b ; a . lang = CKEDITOR . tools . prototypedCopy ( c ) ; a . title = "string" == typeof d || ! 1 === d ? d : [ a . lang . editor , a . name ] . join ( ", " ) ; a . applicationTitle = "string" == typeof e || ! 1 === e ? e : [ a . lang . application , a . name ] . join ( ", " ) ; a . config . contentsLangDirection || ( a . config . contentsLangDirection = a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ?
! 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 ) ; p ( a ) } ) ; b && null != b . customConfig && ( a . config . customConfig = b . customConfig ) ; k ( a ) || a . fireOnce ( "customConfigLoaded" ) }
function p ( a ) { CKEDITOR . skin . loadPart ( "editor" , function ( ) { m ( a ) } ) } function m ( a ) { CKEDITOR . lang . load ( a . config . language , a . config . defaultLanguage , function ( b , c ) { var d = a . config . title , e = a . config . applicationTitle ; a . langCode = b ; a . lang = CKEDITOR . tools . prototypedCopy ( c ) ; a . title = "string" == typeof d || ! 1 === d ? d : [ a . lang . editor , a . name ] . join ( ", " ) ; a . applicationTitle = "string" == typeof e || ! 1 === e ? e : [ a . lang . application , a . name ] . join ( ", " ) ; a . config . contentsLangDirection || ( a . config . contentsLangDirection = a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ?
a . element . getDirection ( 1 ) : a . lang . dir ) ; a . fire ( "langLoaded" ) ; g ( a ) } ) } function g ( a ) { a . getStylesSet ( function ( b ) { a . once ( "loaded" , function ( ) { a . fire ( "stylesSet" , { styles : b } ) } , null , null , 1 ) ; 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 ( b ) { var d = [ ] , e = [ ] , f = [ ] ; a . plugins = CKEDITOR . tools . extend ( { } , a . plugins , b ) ; for ( var g in b ) { var k = b [ g ] , O = k . lang , N = null , r = k . requires , I ; CKEDITOR . tools . isArray ( r ) && ( r = r . join ( "," ) ) ; if ( r && ( I = r . match ( h ) ) ) for ( ; r = I . pop ( ) ; ) CKEDITOR . error ( "editor-plugin-required" , { plugin : r . replace ( "," , "" ) , requiredBy : g } ) ; O && ! a . lang [ g ] && ( O . split && ( O = O . split ( "," ) ) , 0 <= CKEDITOR . tools . indexOf ( O , a . langCode ) ?
N = a . langCode : ( N = a . langCode . replace ( /-.*/ , "" ) , N = N != a . langCode && 0 <= CKEDITOR . tools . indexOf ( O , N ) ? N : 0 <= CKEDITOR . tools . indexOf ( O , "en" ) ? "en" : O [ 0 ] ) , k . langEntries && k . langEntries [ N ] ? ( a . lang [ g ] = k . langEntries [ N ] , N = null ) : f . push ( CKEDITOR . getUrl ( k . path + "lang/" + N + ".js" ) ) ) ; e . push ( N ) ; d . push ( k ) } CKEDITOR . scriptLoader . load ( f , function ( ) { if ( ! a . isDestroyed ( ) && ! a . isDetached ( ) ) { for ( var b = [ "beforeInit" , "init" , "afterInit" ] , f = 0 ; f < b . length ; f ++ ) for ( var g = 0 ; g < d . length ; g ++ ) { var r = d [ g ] ; 0 === f && e [ g ] && r . lang && r . langEntries && ( a . lang [ r . name ] =
f . replace ( /,/g , "|" ) + ")(?\x3d,|$)" , "g" ) , d = d . replace ( h , "" ) ; CKEDITOR . env . air && ( d += ",adobeair" ) ; CKEDITOR . plugins . load ( d . split ( "," ) , function ( b ) { var d = [ ] , e = [ ] , f = [ ] ; a . plugins = CKEDITOR . tools . extend ( { } , a . plugins , b ) ; for ( var g in b ) { var k = b [ g ] , N = k . lang , O = null , r = k . requires , I ; CKEDITOR . tools . isArray ( r ) && ( r = r . join ( "," ) ) ; if ( r && ( I = r . match ( h ) ) ) for ( ; r = I . pop ( ) ; ) CKEDITOR . error ( "editor-plugin-required" , { plugin : r . replace ( "," , "" ) , requiredBy : g } ) ; N && ! a . lang [ g ] && ( N . split && ( N = N . split ( "," ) ) , 0 <= CKEDITOR . tools . indexOf ( N , a . langCode ) ?
O = a . langCode : ( O = a . langCode . replace ( /-.*/ , "" ) , O = O != a . langCode && 0 <= CKEDITOR . tools . indexOf ( N , O ) ? O : 0 <= CKEDITOR . tools . indexOf ( N , "en" ) ? "en" : N [ 0 ] ) , k . langEntries && k . langEntries [ O ] ? ( a . lang [ g ] = k . langEntries [ O ] , O = null ) : f . push ( CKEDITOR . getUrl ( k . path + "lang/" + O + ".js" ) ) ) ; e . push ( O ) ; d . push ( k ) } CKEDITOR . scriptLoader . load ( f , function ( ) { if ( ! a . isDestroyed ( ) && ! a . isDetached ( ) ) { for ( var b = [ "beforeInit" , "init" , "afterInit" ] , f = 0 ; f < b . length ; f ++ ) for ( var g = 0 ; g < d . length ; g ++ ) { var r = d [ g ] ; 0 === f && e [ g ] && r . lang && r . langEntries && ( a . lang [ r . name ] =
r . langEntries [ e [ g ] ] ) ; if ( r [ b [ f ] ] ) r [ 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 A ( a , b ) { function c ( a ) { var b = a . startContainer , d = a . endContainer , e = b . is && b . is ( "tr" ) , f = b . is && b . is ( "td" ) ; a = f && b . equals ( d ) && a . endOffset === b . getChildCount ( ) ; b = f && 1 === b . getChildCount ( ) && "img" === b . getChildren ( ) . getItem ( 0 ) . getName ( ) ; return e || a && ! b ? ! 0 : ! 1 } function d ( a ) { var b = a . startContainer ; return b . is ( "tr" ) ? a . cloneContents ( ) : b . clone ( ! 0 ) } for ( var e = new CKEDITOR . dom . documentFragment , f , g , h , k = 0 ; k < a . length ; k ++ ) { var C = a [ k ] , t = C . startContainer . getAscendant ( "tr" ,
! 0 ) ; c ( C ) ? ( f || ( f = t . getAscendant ( "table" ) . clone ( ) , f . append ( t . getAscendant ( { thead : 1 , tbody : 1 , tfoot : 1 } ) . clone ( ) ) , e . append ( f ) , f = f . findOne ( "thead, tbody, tfoot" ) ) , g && g . equals ( t ) || ( g = t , h = t . clone ( ) , f . append ( h ) ) , h . append ( d ( C ) ) ) : e . append ( C . cloneContents ( ) ) } return f ? e : b . getHtmlFromRange ( a [ 0 ] ) } a . prototype = CKEDITOR . editor . prototype ; CKEDITOR . editor = a ; var F = 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" ,
@@ -298,7 +298,7 @@ CKEDITOR.warn("editor-delayed-creation",{method:"interval - "+d+" ms"});var e=se
typeof a . delayIfDetached ? a . delayIfDetached : CKEDITOR . config . delayIfDetached , a . delayIfDetached _interval = isNaN ( a . delayIfDetached _interval ) ? CKEDITOR . config . delayIfDetached _interval : a . delayIfDetached _interval , a . delayIfDetached _callback = a . delayIfDetached _callback || CKEDITOR . config . delayIfDetached _callback ) } } ) ( ) ; CKEDITOR . ELEMENT _MODE _NONE = 0 ; CKEDITOR . ELEMENT _MODE _REPLACE = 1 ; CKEDITOR . ELEMENT _MODE _APPENDTO = 2 ; CKEDITOR . ELEMENT _MODE _INLINE = 3 ; CKEDITOR . config . delayIfDetached = ! 1 ;
CKEDITOR . config . delayIfDetached _callback = void 0 ; CKEDITOR . config . delayIfDetached _interval = 50 ; CKEDITOR . htmlParser = function ( ) { this . _ = { htmlPartsRegex : /<(?:(?:\/([^>]+)>)|(?:!--([\S|\s]*?)--!?>)|(?:([^\/\s>]+)((?:\s+[\w\-:.]+(?:\s*=\s*?(?:(?:"[^"]*")|(?:'[^']*')|[^\s"'\/>]+))?)*)[\S\s]*?(\/?)>))/g } } ;
( function ( ) { var a = /([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g , d = { checked : 1 , compact : 1 , declare : 1 , defer : 1 , disabled : 1 , ismap : 1 , multiple : 1 , nohref : 1 , noresize : 1 , noshade : 1 , nowrap : 1 , readonly : 1 , selected : 1 } ; CKEDITOR . htmlParser . prototype = { onTagOpen : function ( ) { } , onTagClose : function ( ) { } , onText : function ( ) { } , onCDATA : function ( ) { } , onComment : function ( ) { } , parse : function ( b ) { for ( var c , f , e = 0 , k ; c = this . _ . htmlPartsRegex . exec ( b ) ; ) { f = c . index ; if ( f > e ) if ( e = b . substring ( e , f ) , k ) k . push ( e ) ; else this . onText ( e ) ;
e = this . _ . htmlPartsRegex . lastIndex ; if ( f = c [ 1 ] ) if ( f = f . toLowerCase ( ) , k && CKEDITOR . dtd . $cdata [ f ] && ( this . onCDATA ( k . join ( "" ) ) , k = null ) , ! k ) { this . onTagClose ( f ) ; continue } if ( k ) k . push ( c [ 0 ] ) ; else if ( f = c [ 3 ] ) { if ( f = f . toLowerCase ( ) , ! /="/ . test ( f ) ) { var h = { } , q , m = c [ 4 ] ; c = ! ! c [ 5 ] ; if ( m ) for ( ; q = a . exec ( m ) ; ) { var g = q [ 1 ] . toLowerCase ( ) ; q = q [ 2 ] || q [ 3 ] || q [ 4 ] || "" ; h [ g ] = ! q && d [ g ] ? g : CKEDITOR . tools . htmlDecodeAttr ( q ) } this . onTagOpen ( f , h , c ) ; ! k && CKEDITOR . dtd . $cdata [ f ] && ( k = [ ] ) } } else if ( f = c [ 2 ] ) this . onComment ( f ) } if ( b . length > e ) this . onText ( b . substring ( e ,
e = this . _ . htmlPartsRegex . lastIndex ; if ( f = c [ 1 ] ) if ( f = f . toLowerCase ( ) , k && CKEDITOR . dtd . $cdata [ f ] && ( this . onCDATA ( k . join ( "" ) ) , k = null ) , ! k ) { this . onTagClose ( f ) ; continue } if ( k ) k . push ( c [ 0 ] ) ; else if ( f = c [ 3 ] ) { if ( f = f . toLowerCase ( ) , ! /="/ . test ( f ) ) { var h = { } , p , m = c [ 4 ] ; c = ! ! c [ 5 ] ; if ( m ) for ( ; p = a . exec ( m ) ; ) { var g = p [ 1 ] . toLowerCase ( ) ; p = p [ 2 ] || p [ 3 ] || p [ 4 ] || "" ; h [ g ] = ! p && d [ g ] ? g : CKEDITOR . tools . htmlDecodeAttr ( p ) } this . onTagOpen ( f , h , c ) ; ! k && CKEDITOR . dtd . $cdata [ f ] && ( k = [ ] ) } } else if ( f = c [ 2 ] ) this . onComment ( f ) } if ( b . length > e ) this . onText ( b . substring ( e ,
b . length ) ) } } } ) ( ) ;
CKEDITOR . htmlParser . basicWriter = CKEDITOR . tools . createClass ( { $ : function ( ) { this . _ = { output : [ ] } } , proto : { openTag : function ( a ) { this . _ . output . push ( "\x3c" , a ) } , openTagClose : function ( a , d ) { d ? this . _ . output . push ( " /\x3e" ) : this . _ . output . push ( "\x3e" ) } , attribute : function ( a , d ) { "string" == typeof d && ( d = CKEDITOR . tools . htmlEncodeAttr ( d ) ) ; this . _ . output . push ( " " , a , '\x3d"' , d , '"' ) } , closeTag : function ( a ) { this . _ . output . push ( "\x3c/" , a , "\x3e" ) } , text : function ( a ) { this . _ . output . push ( a ) } , comment : function ( a ) { this . _ . output . push ( "\x3c!--" , a ,
"--\x3e" ) } , write : function ( a ) { this . _ . output . push ( a ) } , reset : function ( ) { this . _ . output = [ ] ; this . _ . indent = ! 1 } , getHtml : function ( a ) { var d = this . _ . output . join ( "" ) ; a && this . reset ( ) ; return d } } } ) ; "use strict" ;
@@ -310,13 +310,13 @@ CKEDITOR.htmlParser.comment.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlPar
( function ( ) { CKEDITOR . htmlParser . cdata = function ( a ) { this . value = a } ; CKEDITOR . htmlParser . cdata . prototype = CKEDITOR . tools . extend ( new CKEDITOR . htmlParser . node , { type : CKEDITOR . NODE _TEXT , filter : function ( a ) { var d = this . getAscendant ( "style" ) ; if ( d && d . getAscendant ( { math : 1 , svg : 1 } ) ) { var d = CKEDITOR . htmlParser . fragment . fromHtml ( this . value ) , b = new CKEDITOR . htmlParser . basicWriter ; a . applyTo ( d ) ; d . writeHtml ( b ) ; this . value = b . getHtml ( ) } } , writeHtml : function ( a ) { a . write ( this . value ) } } ) } ) ( ) ; "use strict" ;
CKEDITOR . htmlParser . fragment = function ( ) { this . children = [ ] ; this . parent = null ; this . _ = { isBlockLike : ! 0 , hasInlineStarted : ! 1 } } ;
( function ( ) { function a ( a ) { return a . attributes [ "data-cke-survive" ] ? ! 1 : "a" == a . name && a . attributes . href || CKEDITOR . dtd . $removeEmpty [ a . name ] } var d = CKEDITOR . tools . extend ( { table : 1 , ul : 1 , ol : 1 , dl : 1 } , CKEDITOR . dtd . table , CKEDITOR . dtd . ul , CKEDITOR . dtd . ol , CKEDITOR . dtd . dl ) , b = { ol : 1 , ul : 1 } , c = CKEDITOR . tools . extend ( { } , { html : 1 } , CKEDITOR . dtd . html , CKEDITOR . dtd . body , CKEDITOR . dtd . head , { style : 1 , script : 1 } ) , f = { ul : "li" , ol : "li" , dl : "dd" , table : "tbody" , tbody : "tr" , thead : "tr" , tfoot : "tr" , tr : "td" } ; CKEDITOR . htmlParser . fragment . fromHtml =
function ( e , k , h ) { function q ( a ) { var b ; if ( 0 < l . length ) for ( var c = 0 ; c < l . length ; c ++ ) { var d = l [ c ] , e = d . name , f = CKEDITOR . dtd [ e ] , g = w . name && CKEDITOR . dtd [ w . name ] ; g && ! g [ e ] || a && f && ! f [ a ] && CKEDITOR . dtd [ a ] ? e == w . name && ( x ( w , w . parent , 1 ) , c -- ) : ( b || ( m ( ) , b = 1 ) , d = d . clone ( ) , d . parent = w , w = d , l . splice ( c , 1 ) , c -- ) } } function m ( ) { for ( ; L . length ; ) x ( L . shift ( ) , w ) } function g ( a ) { if ( a . _ . isBlockLike && "pre" != a . name && "textarea" != a . name ) { var b = a . children . length , c = a . children [ b - 1 ] , d ; c && c . type == CKEDITOR . NODE _TEXT && ( ( d = CKEDITOR . tools . rtrim ( c . value ) ) ?
function ( e , k , h ) { function p ( a ) { var b ; if ( 0 < l . length ) for ( var c = 0 ; c < l . length ; c ++ ) { var d = l [ c ] , e = d . name , f = CKEDITOR . dtd [ e ] , g = w . name && CKEDITOR . dtd [ w . name ] ; g && ! g [ e ] || a && f && ! f [ a ] && CKEDITOR . dtd [ a ] ? e == w . name && ( x ( w , w . parent , 1 ) , c -- ) : ( b || ( m ( ) , b = 1 ) , d = d . clone ( ) , d . parent = w , w = d , l . splice ( c , 1 ) , c -- ) } } function m ( ) { for ( ; L . length ; ) x ( L . shift ( ) , w ) } function g ( a ) { if ( a . _ . isBlockLike && "pre" != a . name && "textarea" != a . name ) { var b = a . children . length , c = a . children [ b - 1 ] , d ; c && c . type == CKEDITOR . NODE _TEXT && ( ( d = CKEDITOR . tools . rtrim ( c . value ) ) ?
c . value = d : a . children . length = b - 1 ) } } function x ( b , c , d ) { c = c || w || v ; var e = w ; void 0 === b . previous && ( y ( c , b ) && ( w = c , F . onTagOpen ( h , { } ) , b . returnPoint = c = w ) , g ( b ) , a ( b ) && ! b . children . length || c . add ( b ) , "pre" == b . name && ( G = ! 1 ) , "textarea" == b . name && ( J = ! 1 ) ) ; b . returnPoint ? ( w = b . returnPoint , delete b . returnPoint ) : w = d ? c : e } function y ( 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 A ( 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 F = new CKEDITOR . htmlParser , v = k instanceof CKEDITOR . htmlParser . element ? k : "string" == typeof k ? new CKEDITOR . htmlParser . element ( k ) : new CKEDITOR . htmlParser . fragment , l = [ ] , L = [ ] , w = v , J = "textarea" == v . name , G = "pre" == v . name ; F . 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 ) ) l . push ( f ) ; else { if ( "pre" == e ) G = ! 0 ; else { if ( "br" == e && G ) { w . add ( new CKEDITOR . htmlParser . text ( "\n" ) ) ; return } "textarea" == e && ( J = ! 0 ) } if ( "br" == e ) L . push ( f ) ; else { for ( ; ! ( h = ( g = w . name ) ? CKEDITOR . dtd [ g ] || ( w . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : c , f . isUnknown || w . isUnknown || h [ e ] ) ; ) if ( w . isOptionalClose ) F . onTagClose ( g ) ; else if ( e in b && g in b ) g = w . children , ( g = g [ g . length - 1 ] ) && "li" == g . name || x ( g = new CKEDITOR . htmlParser . element ( "li" ) , w ) , ! f . returnPoint && ( f . returnPoint = w ) , w = g ; else if ( e in CKEDITOR . dtd . $listItem &&
! A ( e , g ) ) F . onTagOpen ( "li" == e ? "ul" : "dl" , { } , 0 , 1 ) ; else if ( g in d && ! A ( e , g ) ) ! f . returnPoint && ( f . returnPoint = w ) , w = w . parent ; else if ( g in CKEDITOR . dtd . $inline && l . unshift ( w ) , w . parent ) x ( w , w . parent , 1 ) ; else { f . isOrphan = 1 ; break } q ( e ) ; m ( ) ; f . parent = w ; f . isEmpty ? x ( f ) : w = f } } } ; F . onTagClose = function ( a ) { for ( var b = l . length - 1 ; 0 <= b ; b -- ) if ( a == l [ b ] . name ) { l . splice ( b , 1 ) ; return } for ( var c = [ ] , d = [ ] , e = w ; 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 ] ; x ( f , f . parent ) } w =
! A ( e , g ) ) F . onTagOpen ( "li" == e ? "ul" : "dl" , { } , 0 , 1 ) ; else if ( g in d && ! A ( e , g ) ) ! f . returnPoint && ( f . returnPoint = w ) , w = w . parent ; else if ( g in CKEDITOR . dtd . $inline && l . unshift ( w ) , w . parent ) x ( w , w . parent , 1 ) ; else { f . isOrphan = 1 ; break } p ( e ) ; m ( ) ; f . parent = w ; f . isEmpty ? x ( f ) : w = f } } } ; F . onTagClose = function ( a ) { for ( var b = l . length - 1 ; 0 <= b ; b -- ) if ( a == l [ b ] . name ) { l . splice ( b , 1 ) ; return } for ( var c = [ ] , d = [ ] , e = w ; 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 ] ; x ( f , f . parent ) } w =
e ; e . _ . isBlockLike ? m ( ) : ( b = CKEDITOR . config . shiftLineBreaks , ! 0 !== b && L . length && ( "function" !== typeof b ? m ( ) : ( b = b ( L [ L . length - 1 ] ) , ! 0 !== b && ( m ( ) , b instanceof CKEDITOR . htmlParser . text && w . add ( b ) , b instanceof CKEDITOR . htmlParser . element && x ( b , w ) ) ) ) ) ; x ( e , e . parent ) ; e == w && ( w = w . parent ) ; l = l . concat ( d ) } "body" == a && ( h = ! 1 ) } ; F . onText = function ( a ) { if ( ! ( w . _ . hasInlineStarted && ! L . length || G || J ) && ( a = CKEDITOR . tools . ltrim ( a ) , 0 === a . length ) ) return ; var b = w . name , e = b ? CKEDITOR . dtd [ b ] || ( w . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) :
c ; if ( ! J && ! e [ "#" ] && b in d ) F . onTagOpen ( f [ b ] || "" ) , F . onText ( a ) ; else { m ( ) ; q ( ) ; G || J || ( a = a . replace ( /[\t\r\n ]{2,}|[\t\r\n]/g , " " ) ) ; a = new CKEDITOR . htmlParser . text ( a ) ; if ( y ( w , a ) ) this . onTagOpen ( h , { } , 0 , 1 ) ; w . add ( a ) } } ; F . onCDATA = function ( a ) { w . add ( new CKEDITOR . htmlParser . cdata ( a ) ) } ; F . onComment = function ( a ) { m ( ) ; q ( ) ; w . add ( new CKEDITOR . htmlParser . comment ( a ) ) } ; F . parse ( e ) ; for ( m ( ) ; w != v ; ) x ( w , w . parent , 1 ) ; g ( v ) ; return v } ; CKEDITOR . htmlParser . fragment . prototype = { type : CKEDITOR . NODE _DOCUMENT _FRAGMENT , add : function ( a , b ) { isNaN ( b ) &&
c ; if ( ! J && ! e [ "#" ] && b in d ) F . onTagOpen ( f [ b ] || "" ) , F . onText ( a ) ; else { m ( ) ; p ( ) ; G || J || ( a = a . replace ( /[\t\r\n ]{2,}|[\t\r\n]/g , " " ) ) ; a = new CKEDITOR . htmlParser . text ( a ) ; if ( y ( w , a ) ) this . onTagOpen ( h , { } , 0 , 1 ) ; w . add ( a ) } } ; F . onCDATA = function ( a ) { w . add ( new CKEDITOR . htmlParser . cdata ( a ) ) } ; F . onComment = function ( a ) { m ( ) ; p ( ) ; w . add ( new CKEDITOR . htmlParser . comment ( a ) ) } ; F . parse ( e ) ; for ( m ( ) ; w != v ; ) x ( w , w . parent , 1 ) ; g ( v ) ; return v } ; CKEDITOR . htmlParser . fragment . prototype = { type : CKEDITOR . NODE _DOCUMENT _FRAGMENT , add : function ( a , b ) { isNaN ( b ) &&
( b = this . children . length ) ; var c = 0 < b ? this . children [ b - 1 ] : null ; if ( c ) { if ( a . _ . isBlockLike && c . type == CKEDITOR . NODE _TEXT && ( c . value = CKEDITOR . tools . rtrim ( c . value ) , 0 === c . value . length ) ) { this . children . pop ( ) ; this . add ( a ) ; return } c . next = a } a . previous = c ; a . parent = this ; this . children . splice ( b , 0 , a ) ; this . _ . hasInlineStarted || ( this . _ . hasInlineStarted = a . type == CKEDITOR . NODE _TEXT || a . type == CKEDITOR . NODE _ELEMENT && ! a . _ . isBlockLike ) } , filter : function ( a , b ) { b = this . getFilterContext ( b ) ; a . onRoot ( b , this ) ; this . filterChildren ( a , ! 1 , b ) } , filterChildren : function ( a ,
b , c ) { if ( this . childrenFilteredBy != a . id ) { c = this . getFilterContext ( c ) ; if ( b && ! this . parent ) a . onRoot ( c , this ) ; this . childrenFilteredBy = a . id ; for ( b = 0 ; b < this . children . length ; b ++ ) ! 1 === this . children [ b ] . filter ( a , c ) && b -- } } , writeHtml : function ( a , b ) { b && this . filter ( b ) ; this . writeChildrenHtml ( a ) } , writeChildrenHtml : function ( a , b , c ) { var d = this . getFilterContext ( ) ; if ( c && ! this . parent && b ) b . onRoot ( d , this ) ; b && this . filterChildren ( b , ! 1 , d ) ; b = 0 ; c = this . children ; for ( d = c . length ; b < d ; b ++ ) c [ b ] . writeHtml ( a ) } , forEach : function ( a , b , c ) { if ( ! ( c ||
b && this . type != b ) ) var d = a ( this ) ; if ( ! 1 !== d ) { c = this . children ; for ( var f = 0 ; f < c . length ; f ++ ) d = c [ f ] , d . type == CKEDITOR . NODE _ELEMENT ? d . forEach ( a , b ) : b && d . type != b || a ( d ) } } , getFilterContext : function ( a ) { return a || { } } } ; CKEDITOR . config . shiftLineBreaks = ! 0 } ) ( ) ; "use strict" ;
@@ -324,36 +324,36 @@ b&&this.type!=b))var d=a(this);if(!1!==d){c=this.children;for(var f=0;f<c.length
c . priority ) ; "number" != typeof f && ( f = 10 ) ; "object" != typeof c && ( c = { } ) ; a . elementNames && this . elementNameRules . addMany ( a . elementNames , f , c ) ; a . attributeNames && this . attributeNameRules . addMany ( a . attributeNames , f , c ) ; a . elements && d ( this . elementsRules , a . elements , f , c ) ; a . attributes && d ( this . attributesRules , a . attributes , f , c ) ; a . text && this . textRules . add ( a . text , f , c ) ; a . comment && this . commentRules . add ( a . comment , f , c ) ; a . root && this . rootRules . add ( a . root , f , c ) } , applyTo : function ( a ) { a . filter ( this ) } , onElementName : function ( a , c ) { return this . elementNameRules . execOnName ( a ,
c ) } , onAttributeName : function ( a , c ) { return this . attributeNameRules . execOnName ( a , c ) } , onText : function ( a , c , d ) { return this . textRules . exec ( a , c , d ) } , onComment : function ( a , c , d ) { return this . commentRules . exec ( a , c , d ) } , onRoot : function ( a , c ) { return this . rootRules . exec ( a , c ) } , onElement : function ( a , c ) { for ( var d = [ this . elementsRules [ "^" ] , this . elementsRules [ c . name ] , this . elementsRules . $ ] , e , k = 0 ; 3 > k ; k ++ ) if ( e = d [ k ] ) { e = e . exec ( a , c , this ) ; if ( ! 1 === e ) return null ; if ( e && e != c ) return this . onNode ( a , e ) ; if ( c . parent && ! c . name ) break } return c } ,
onNode : function ( a , c ) { var d = c . type ; return d == CKEDITOR . NODE _ELEMENT ? this . onElement ( a , c ) : d == CKEDITOR . NODE _TEXT ? new CKEDITOR . htmlParser . text ( this . onText ( a , c . value , c ) ) : d == CKEDITOR . NODE _COMMENT ? new CKEDITOR . htmlParser . comment ( this . onComment ( a , c . value , c ) ) : null } , onAttribute : function ( a , c , d , e ) { return ( d = this . attributesRules [ d ] ) ? d . exec ( a , e , c , this ) : e } } } ) ; CKEDITOR . htmlParser . filterRulesGroup = a ; a . prototype = { add : function ( a , c , d ) { this . rules . splice ( this . findIndex ( c ) , 0 , { value : a , priority : c , options : d } ) } , addMany : function ( a ,
c , d ) { for ( var e = [ this . findIndex ( c ) , 0 ] , k = 0 , h = a . length ; k < h ; k ++ ) e . push ( { value : a [ k ] , priority : c , options : d } ) ; this . rules . splice . apply ( this . rules , e ) } , findIndex : function ( a ) { for ( var c = this . rules , d = c . length - 1 ; 0 <= d && a < c [ d ] . priority ; ) d -- ; return d + 1 } , exec : function ( a , c ) { var d = c instanceof CKEDITOR . htmlParser . node || c instanceof CKEDITOR . htmlParser . fragment , e = Array . prototype . slice . call ( arguments , 1 ) , k = this . rules , h = k . length , q , m , g , x ; for ( x = 0 ; x < h ; x ++ ) if ( d && ( q = c . type , m = c . name ) , g = k [ x ] , ! ( a . nonEditable && ! g . options . applyToAll ||
a . nestedEditable && g . options . excludeNestedEditable ) ) { g = g . value . apply ( null , e ) ; if ( ! 1 === g || d && g && ( g . name != m || g . type != q ) ) return g ; null != g && ( e [ 0 ] = c = g ) } return c } , execOnName : function ( a , c ) { for ( var d = 0 , e = this . rules , k = e . length , h ; c && d < k ; d ++ ) h = e [ d ] , a . nonEditable && ! h . options . applyToAll || a . nestedEditable && h . options . excludeNestedEditable || ( c = c . replace ( h . value [ 0 ] , h . value [ 1 ] ) ) ; return c } } } ) ( ) ;
c , d ) { for ( var e = [ this . findIndex ( c ) , 0 ] , k = 0 , h = a . length ; k < h ; k ++ ) e . push ( { value : a [ k ] , priority : c , options : d } ) ; this . rules . splice . apply ( this . rules , e ) } , findIndex : function ( a ) { for ( var c = this . rules , d = c . length - 1 ; 0 <= d && a < c [ d ] . priority ; ) d -- ; return d + 1 } , exec : function ( a , c ) { var d = c instanceof CKEDITOR . htmlParser . node || c instanceof CKEDITOR . htmlParser . fragment , e = Array . prototype . slice . call ( arguments , 1 ) , k = this . rules , h = k . length , p , m , g , x ; for ( x = 0 ; x < h ; x ++ ) if ( d && ( p = c . type , m = c . name ) , g = k [ x ] , ! ( a . nonEditable && ! g . options . applyToAll ||
a . nestedEditable && g . options . excludeNestedEditable ) ) { g = g . value . apply ( null , e ) ; if ( ! 1 === g || d && g && ( g . name != m || g . type != p ) ) return g ; null != g && ( e [ 0 ] = c = g ) } return c } , execOnName : function ( a , c ) { for ( var d = 0 , e = this . rules , k = e . length , h ; c && d < k ; d ++ ) h = e [ d ] , a . nonEditable && ! h . options . applyToAll || a . nestedEditable && h . options . excludeNestedEditable || ( c = c . replace ( h . value [ 0 ] , h . value [ 1 ] ) ) ; return c } } } ) ( ) ;
( function ( ) { function a ( a , d ) { function g ( a ) { return a || CKEDITOR . env . needsNbspFiller ? new CKEDITOR . htmlParser . text ( " " ) : new CKEDITOR . htmlParser . element ( "br" , { "data-cke-bogus" : 1 } ) } function t ( a , d ) { return function ( f ) { if ( f . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ) { var n = [ ] , t = b ( f ) , z , B ; if ( t ) for ( r ( t , 1 ) && n . push ( t ) ; t ; ) e ( t ) && ( z = c ( t ) ) && r ( z ) && ( ( B = c ( z ) ) && ! e ( B ) ? n . push ( z ) : ( g ( h ) . insertAfter ( z ) , z . remove ( ) ) ) , t = t . previous ; for ( t = 0 ; t < n . length ; t ++ ) n [ t ] . remove ( ) ; if ( n = ! a || ! 1 !== ( "function" == typeof d ? d ( f ) : d ) ) h || CKEDITOR . env . needsBrFiller ||
f . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ? h || CKEDITOR . env . needsBrFiller || ! ( 7 < document . documentMode || f . name in CKEDITOR . dtd . tr || f . name in CKEDITOR . dtd . $listItem ) ? ( n = b ( f ) , n = ! n || "form" == f . name && "input" == n . name ) : n = ! 1 : n = ! 1 ; n && f . add ( g ( a ) ) } } } function r ( a , b ) { if ( ( ! h || CKEDITOR . env . needsBrFiller ) && a . type == CKEDITOR . NODE _ELEMENT && "br" == a . name && ! a . attributes [ "data-cke-eol" ] ) return ! 0 ; var c ; return a . type == CKEDITOR . NODE _TEXT && ( c = a . value . match ( L ) ) && ( 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 B ) || ! h && ( ( c = a . previous ) && "br" == c . name || ! c || e ( c ) ) ) ? ! 0 : ! 1 } var z = { elements : { } } , h = "html" == d , B = CKEDITOR . tools . extend ( { } , p ) , E ; for ( E in B ) "#" in J [ E ] || delete B [ E ] ; for ( E in B ) z . elements [ E ] = t ( h , a . config . fillEmptyBlocks ) ; z . root = t ( h , ! 1 ) ; z . elements . br = function ( a ) { return function ( b ) { if ( b . parent . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ) { var d = b . attributes ; if ( "data-cke-bogus" in d || "data-cke-eol" in d ) delete d [ "data-cke-bogus" ] ; else { for ( d = b . next ; d && f ( d ) ; ) d =
a . value = c [ 0 ] ) , ! CKEDITOR . env . needsBrFiller && h && ( ! b || a . parent . name in B ) || ! h && ( ( c = a . previous ) && "br" == c . name || ! c || e ( c ) ) ) ? ! 0 : ! 1 } var z = { elements : { } } , h = "html" == d , B = CKEDITOR . tools . extend ( { } , q ) , E ; for ( E in B ) "#" in J [ E ] || delete B [ E ] ; for ( E in B ) z . elements [ E ] = t ( h , a . config . fillEmptyBlocks ) ; z . root = t ( h , ! 1 ) ; z . elements . br = function ( a ) { return function ( b ) { if ( b . parent . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ) { var d = b . attributes ; if ( "data-cke-bogus" in d || "data-cke-eol" in d ) delete d [ "data-cke-bogus" ] ; else { for ( d = b . next ; d && f ( d ) ; ) d =
d . next ; var n = c ( b ) ; ! d && e ( b . parent ) ? k ( b . parent , g ( a ) ) : e ( d ) && n && ! e ( n ) && g ( a ) . insertBefore ( d ) } } } } ( h ) ; return z } function d ( a , b ) { return a != CKEDITOR . ENTER _BR && ! 1 !== b ? a == CKEDITOR . ENTER _DIV ? "div" : "p" : ! 1 } function b ( a ) { for ( a = a . children [ a . children . length - 1 ] ; a && f ( a ) ; ) a = a . previous ; return a } function c ( a ) { for ( a = a . previous ; a && f ( a ) ; ) a = a . previous ; return a } function f ( a ) { return a . type == CKEDITOR . NODE _TEXT && ! CKEDITOR . tools . trim ( a . value ) || a . type == CKEDITOR . NODE _ELEMENT && a . attributes [ "data-cke-bookmark" ] } function e ( a ) { return a &&
( a . type == CKEDITOR . NODE _ELEMENT && a . name in p || a . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT ) } function k ( a , b ) { var c = a . children [ a . children . length - 1 ] ; a . children . push ( b ) ; b . parent = a ; c && ( c . next = b , b . previous = c ) } function h ( a ) { a = a . attributes ; "false" != a . contenteditable && ( a [ "data-cke-editable" ] = a . contenteditable ? "true" : 1 ) ; a . contenteditable = "false" } function q ( a ) { a = a . attributes ; switch ( a [ "data-cke-editable" ] ) { case "true" : a . contenteditable = "true" ; break ; case "1" : delete a . contenteditable } } function m ( a , b ) { return a . replace ( t ,
function ( a , c , d ) { return "\x3c" + c + d . replace ( B , function ( a , c ) { return z . test ( c ) && - 1 == d . indexOf ( "data-cke-saved-" + c ) ? " data-cke-saved-" + a + " data-cke-" + b + "-" + a : a } ) + "\x3e" } ) } function g ( a , b ) { return a . replace ( b , function ( a , b , c ) { 0 === a . indexOf ( "\x3ctextarea" ) && ( a = b + A ( 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 ( N , function ( a , b ) { return decodeURIComponent ( b ) } ) } function y ( a ) { return a . replace ( /\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g ,
( a . type == CKEDITOR . NODE _ELEMENT && a . name in q || a . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT ) } function k ( a , b ) { var c = a . children [ a . children . length - 1 ] ; a . children . push ( b ) ; b . parent = a ; c && ( c . next = b , b . previous = c ) } function h ( a ) { a = a . attributes ; "false" != a . contenteditable && ( a [ "data-cke-editable" ] = a . contenteditable ? "true" : 1 ) ; a . contenteditable = "false" } function p ( a ) { a = a . attributes ; switch ( a [ "data-cke-editable" ] ) { case "true" : a . contenteditable = "true" ; break ; case "1" : delete a . contenteditable } } function m ( a , b ) { return a . replace ( t ,
function ( a , c , d ) { return "\x3c" + c + d . replace ( B , function ( a , c ) { return z . test ( c ) && - 1 == d . indexOf ( "data-cke-saved-" + c ) ? " data-cke-saved-" + a + " data-cke-" + b + "-" + a : a } ) + "\x3e" } ) } function g ( a , b ) { return a . replace ( b , function ( a , b , c ) { 0 === a . indexOf ( "\x3ctextarea" ) && ( a = b + A ( 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 ( O , function ( a , b ) { return decodeURIComponent ( b ) } ) } function y ( a ) { return a . replace ( /\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g ,
function ( a ) { return "\x3c!--" + w + "{C}" + encodeURIComponent ( a ) . replace ( /--/g , "%2D%2D" ) + "--\x3e" } ) } function A ( a ) { return a . replace ( /\x3c!--\{cke_protected\}\{C\}([\s\S]+?)--\x3e/g , function ( a , b ) { return decodeURIComponent ( b ) } ) } function F ( 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 , c ) { var d = [ ] , e = b . config . protectedSource , f = b . _ . dataStore ||
( b . _ . dataStore = { id : 1 } ) , g = new RegExp ( "\x3c\\!--\\{cke_temp_" + c + "(comment)?\\}(\\d*?)--\x3e" , "g" ) , e = [ /<script[\s\S]*?(<\/script>|$)/gi , /<noscript[\s\S]*?<\/noscript>/gi , /<meta[\s\S]*?\/?>/gi ] . concat ( e ) ; a = a . replace ( /\x3c!--[\s\S]*?--\x3e/g , function ( a ) { return "\x3c!--{cke_temp_" + c + "comment}" + ( d . push ( a ) - 1 ) + "--\x3e" } ) ; for ( var t = 0 ; t < e . length ; t ++ ) a = a . replace ( e [ t ] , function ( a ) { a = a . replace ( g , function ( a , b , c ) { return d [ c ] } ) ; return g . test ( a ) ? a : "\x3c!--{cke_temp_" + c + "}" + ( d . push ( a ) - 1 ) + "--\x3e" } ) ; a = a . replace ( g , function ( a ,
b , c ) { return "\x3c!--" + w + ( b ? "{C}" : "" ) + encodeURIComponent ( d [ c ] ) . 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 ) { f [ f . id ] = decodeURIComponent ( b ) ; return "{cke_protected_" + f . id ++ + "}" } ) } ) ; return a = a . replace ( /<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g , function ( a , c , d , e ) { return "\x3c" + c + d + "\x3e" + F ( A ( e ) , b ) + "\x3c/" + c + "\x3e" } ) } var l ; CKEDITOR . htmlDataProcessor =
function ( b ) { var c , e , f = this ; this . editor = b ; this . dataFilter = c = new CKEDITOR . htmlParser . filter ; this . htmlFilter = e = new CKEDITOR . htmlParser . filter ; this . writer = new CKEDITOR . htmlParser . basicWriter ; c . addRules ( u ) ; c . addRules ( K , { applyToAll : ! 0 } ) ; c . addRules ( a ( b , "data" ) , { applyToAll : ! 0 } ) ; e . addRules ( E ) ; e . addRules ( C , { applyToAll : ! 0 } ) ; e . addRules ( a ( b , "html" ) , { applyToAll : ! 0 } ) ; b . on ( "toHtml" , function ( a ) { var c ; var e = window . crypto || window . msCrypto ; c = e ? e . getRandomValues ( new Uint32Array ( 1 ) ) [ 0 ] : Math . floor ( 9E9 * Math . random ( ) + 1E9 ) ;
a = a . data ; var e = a . dataValue , e = l ( e ) , e = v ( e , b , c ) , e = g ( e , O ) , e = m ( e , c ) , e = g ( e , H ) , e = e . replace ( r , "$1cke:$2" ) , e = e . replace ( M , "\x3ccke:$1$2\x3e\x3c/cke:$1\x3e" ) , e = e . replace ( /(<pre\b[^>]*>)(\r\n|\n)/g , "$1$2$2" ) , e = e . replace ( /([^a-z0-9<\-])(on\w{3,})(?!>)/gi , "$1data-cke-" + c + "-$2" ) , f = a . context || b . editable ( ) . getName ( ) , t ; CKEDITOR . env . ie && 9 > CKEDITOR . env . version && "pre" == f && ( f = "div" , e = "\x3cpre\x3e" + e + "\x3c/pre\x3e" , t = 1 ) ; f = b . document . createElement ( f ) ; f . setHtml ( "a" + e ) ; e = f . getHtml ( ) . substr ( 1 ) ; e = e . replace ( new RegExp ( "data-cke-" +
a = a . data ; var e = a . dataValue , e = l ( e ) , e = v ( e , b , c ) , e = g ( e , N ) , e = m ( e , c ) , e = g ( e , H ) , e = e . replace ( r , "$1cke:$2" ) , e = e . replace ( M , "\x3ccke:$1$2\x3e\x3c/cke:$1\x3e" ) , e = e . replace ( /(<pre\b[^>]*>)(\r\n|\n)/g , "$1$2$2" ) , e = e . replace ( /([^a-z0-9<\-])(on\w{3,})(?!>)/gi , "$1data-cke-" + c + "-$2" ) , f = a . context || b . editable ( ) . getName ( ) , t ; CKEDITOR . env . ie && 9 > CKEDITOR . env . version && "pre" == f && ( f = "div" , e = "\x3cpre\x3e" + e + "\x3c/pre\x3e" , t = 1 ) ; f = b . document . createElement ( f ) ; f . setHtml ( "a" + e ) ; e = f . getHtml ( ) . substr ( 1 ) ; e = e . replace ( new RegExp ( "data-cke-" +
c + "-" , "ig" ) , "" ) ; t && ( e = e . replace ( /^<pre>|<\/pre>$/gi , "" ) ) ; e = e . replace ( I , "$1$2" ) ; e = x ( e ) ; e = A ( e ) ; c = ! 1 === a . fixForBody ? ! 1 : d ( a . enterMode , b . config . autoParagraph ) ; e = CKEDITOR . htmlParser . fragment . fromHtml ( e , a . context , c ) ; c && ( t = e , ! t . children . length && CKEDITOR . dtd [ t . name ] [ c ] && ( c = new CKEDITOR . htmlParser . element ( c ) , t . add ( c ) ) ) ; a . dataValue = e } , null , null , 5 ) ; b . on ( "toHtml" , function ( a ) { a . data . filter . applyTo ( a . data . dataValue , ! 0 , a . data . dontFilter , a . data . enterMode ) && b . fire ( "dataFiltered" ) } , null , null , 6 ) ; b . on ( "toHtml" , function ( a ) { a . data . dataValue . filterChildren ( f . dataFilter ,
! 0 ) } , null , null , 10 ) ; b . on ( "toHtml" , function ( a ) { a = a . data ; var b = a . dataValue , c = new CKEDITOR . htmlParser . basicWriter ; b . writeChildrenHtml ( c ) ; b = c . getHtml ( ! 0 ) ; a . dataValue = 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 ( f . htmlFilter ,
! 0 ) } , null , null , 10 ) ; b . on ( "toDataFormat" , function ( a ) { a . data . filter . applyTo ( a . data . dataValue , ! 1 , ! 0 ) } , null , null , 11 ) ; b . on ( "toDataFormat" , function ( a ) { var c = a . data . dataValue , d = f . writer ; d . reset ( ) ; c . writeChildrenHtml ( d ) ; c = d . getHtml ( ! 0 ) ; c = A ( c ) ; c = F ( c , b ) ; a . data . dataValue = c } , null , null , 15 ) } ; CKEDITOR . htmlDataProcessor . prototype = { toHtml : function ( a , b , c , d ) { var e = this . editor , f , g , t , r ; b && "object" == typeof b ? ( f = b . context , c = b . fixForBody , d = b . dontFilter , g = b . filter , t = b . enterMode , r = 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 : t || e . enterMode , protectedWhitespaces : r } ) . 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 F ( a ,
this . editor ) } , unprotectRealComments : function ( a ) { return A ( a ) } } ; var L = /(?: |\xa0)$/ , w = "{cke_protected}" , J = CKEDITOR . dtd , G = "caption colgroup col thead tfoot tbody" . split ( " " ) , p = CKEDITOR . tools . extend ( { } , J . $blockLimit , J . $block ) , u = { elements : { input : h , textarea : h } } , K = { attributeNames : [ [ /^on/ , "data-cke-pa-on" ] , [ /^srcdoc/ , "data-cke-pa-srcdoc" ] , [ /^data-cke-expando$/ , "" ] ] , elements : { iframe : function ( a ) { if ( a . attributes && a . attributes . src ) { var b = a . attributes . src . toLowerCase ( ) . replace ( /[^a-z]/gi , "" ) ; if ( 0 === b . indexOf ( "javascript" ) ||
this . editor ) } , unprotectRealComments : function ( a ) { return A ( a ) } } ; var L = /(?: |\xa0)$/ , w = "{cke_protected}" , J = CKEDITOR . dtd , G = "caption colgroup col thead tfoot tbody" . split ( " " ) , q = CKEDITOR . tools . extend ( { } , J . $blockLimit , J . $block ) , u = { elements : { input : h , textarea : h } } , K = { attributeNames : [ [ /^on/ , "data-cke-pa-on" ] , [ /^srcdoc/ , "data-cke-pa-srcdoc" ] , [ /^data-cke-expando$/ , "" ] ] , elements : { iframe : function ( a ) { if ( a . attributes && a . attributes . src ) { var b = a . attributes . src . toLowerCase ( ) . replace ( /[^a-z]/gi , "" ) ; if ( 0 === b . indexOf ( "javascript" ) ||
0 === b . indexOf ( "data" ) ) a . attributes [ "data-cke-pa-src" ] = a . attributes . src , delete a . attributes . src } } } } , E = { 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 } } } , C = { 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 ( G , a . name ) , d = CKEDITOR . tools . indexOf ( G , b . name ) ) ; - 1 < c && - 1 < d && c != d || ( c = a . parent ? a . getIndex ( ) : - 1 , d = b . parent ? b . getIndex ( ) : - 1 ) ; return c > d ? 1 : - 1 } ) } , param : function ( a ) { a . children =
[ ] ; a . isEmpty = ! 0 ; return a } , span : function ( a ) { "Apple-style-span" == a . attributes [ "class" ] && delete a . name } , html : function ( a ) { delete a . attributes . contenteditable ; delete a . attributes [ "class" ] } , body : function ( a ) { delete a . attributes . spellcheck ; delete a . attributes . contenteditable } , style : function ( a ) { var b = a . children [ 0 ] ; b && b . value && ( b . value = CKEDITOR . tools . trim ( b . value ) ) ; a . attributes . type || ( a . attributes . type = "text/css" ) } , title : function ( a ) { var b = a . children [ 0 ] ; ! b && k ( a , b = new CKEDITOR . htmlParser . text ) ; b . value = a . attributes [ "data-cke-title" ] ||
"" } , input : q , textarea : q } , attributes : { "class" : function ( a ) { return CKEDITOR . tools . ltrim ( a . replace ( /(?:^|\s+)cke_[^\s]*/g , "" ) ) || ! 1 } } } ; CKEDITOR . env . ie && ( C . attributes . style = function ( a ) { return a . replace ( /(^|;)([^\:]+)/g , function ( a ) { return a . toLowerCase ( ) } ) } ) ; var t = /<(a|area|img|input|source)\b([^>]*)>/gi , B = /([\w-:]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi , z = /^(href|src|name)$/i , H = /(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi , O = /(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi ,
N = /<cke:encoded>([^<]*)<\/cke:encoded>/gi , r = /(<\/?)((?:object|embed|param|html|body|head|title)([\s][^>]*)?>)/gi , I = /(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi , M = /<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi ; l = function ( ) { function a ( b , c ) { for ( var d = 0 ; d < b . length ; d ++ ) { var e = b [ d ] ; e . lastIndex = 0 ; if ( e . test ( c ) ) return ! 0 } return ! 1 } function b ( a ) { return CKEDITOR . tools . array . reduce ( a . split ( "" ) , function ( a , b ) { var d = b . toLowerCase ( ) , e = b . toUpperCase ( ) , f = c ( d ) ; d !== e && ( f += "|" + c ( e ) ) ; return a + ( "(" + f + ")" ) } , "" ) } function c ( a ) { var b ;
"" } , input : p , textarea : p } , attributes : { "class" : function ( a ) { return CKEDITOR . tools . ltrim ( a . replace ( /(?:^|\s+)cke_[^\s]*/g , "" ) ) || ! 1 } } } ; CKEDITOR . env . ie && ( C . attributes . style = function ( a ) { return a . replace ( /(^|;)([^\:]+)/g , function ( a ) { return a . toLowerCase ( ) } ) } ) ; var t = /<(a|area|img|input|source)\b([^>]*)>/gi , B = /([\w-:]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi , z = /^(href|src|name)$/i , H = /(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi , N = /(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi ,
O = /<cke:encoded>([^<]*)<\/cke:encoded>/gi , r = /(<\/?)((?:object|embed|param|html|body|head|title)([\s][^>]*)?>)/gi , I = /(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi , M = /<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi ; l = function ( ) { function a ( b , c ) { for ( var d = 0 ; d < b . length ; d ++ ) { var e = b [ d ] ; e . lastIndex = 0 ; if ( e . test ( c ) ) return ! 0 } return ! 1 } function b ( a ) { return CKEDITOR . tools . array . reduce ( a . split ( "" ) , function ( a , b ) { var d = b . toLowerCase ( ) , e = b . toUpperCase ( ) , f = c ( d ) ; d !== e && ( f += "|" + c ( e ) ) ; return a + ( "(" + f + ")" ) } , "" ) } function c ( a ) { var b ;
b = a . charCodeAt ( 0 ) ; var d = b . toString ( 16 ) ; b = { htmlCode : "\x26#" + b + ";?" , hex : "\x26#x0*" + d + ";?" , entity : { "\x3c" : "\x26lt;" , "\x3e" : "\x26gt;" , ":" : "\x26colon;" } [ a ] } ; for ( var e in b ) b [ e ] && ( a += "|" + b [ e ] ) ; return a } var d = [ new RegExp ( "(" + b ( "\x3ccke:encoded\x3e" ) + "(.*?)" + b ( "\x3c/cke:encoded\x3e" ) + ")|(" + b ( "\x3c" ) + b ( "/" ) + "?" + b ( "cke:encoded\x3e" ) + ")" , "gi" ) , new RegExp ( "((" + b ( "{cke_protected" ) + ")(_[0-9]*)?" + b ( "}" ) + ")" , "gi" ) , /<!(?:\s*-\s*){2,3}!?\s*>/g ] ; return function ( b ) { for ( ; a ( d , b ) ; ) for ( var c = d , e = 0 ; e < c . length ; e ++ ) b = b . replace ( c [ e ] ,
"" ) ; return b } } ( ) } ) ( ) ; "use strict" ; CKEDITOR . htmlParser . element = function ( a , d ) { this . name = a ; this . attributes = d || { } ; this . children = [ ] ; var b = a || "" , c = b . match ( /^cke:(.*)/ ) ; c && ( b = c [ 1 ] ) ; b = ! ! ( CKEDITOR . dtd . $nonBodyContent [ b ] || CKEDITOR . dtd . $block [ b ] || CKEDITOR . dtd . $listItem [ b ] || CKEDITOR . dtd . $tableContent [ b ] || CKEDITOR . dtd . $nonEditable [ b ] || "br" == b ) ; this . isEmpty = ! ! CKEDITOR . dtd . $empty [ a ] ; this . isUnknown = ! CKEDITOR . dtd [ a ] ; this . _ = { isBlockLike : b , hasInlineStarted : this . isEmpty || ! b } } ;
CKEDITOR . htmlParser . cssStyle = function ( a ) { var d = { } ; ( ( a instanceof CKEDITOR . htmlParser . element ? a . attributes . style : a ) || "" ) . replace ( /"/g , '"' ) . replace ( /\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g , function ( a , c , f ) { "font-family" == c && ( f = f . replace ( /["']/g , "" ) ) ; d [ c . toLowerCase ( ) ] = f } ) ; return { rules : d , populate : function ( a ) { var c = this . toString ( ) ; c && ( a instanceof CKEDITOR . dom . element ? a . setAttribute ( "style" , c ) : a instanceof CKEDITOR . htmlParser . element ? a . attributes . style = c : a . style = c ) } , toString : function ( ) { var a = [ ] , c ;
for ( c in d ) d [ c ] && a . push ( c , ":" , d [ c ] , ";" ) ; return a . join ( "" ) } } } ;
( function ( ) { function a ( a ) { return function ( b ) { return b . type == CKEDITOR . NODE _ELEMENT && ( "string" == typeof a ? b . name == a : b . name in a ) } } var d = function ( a , b ) { a = a [ 0 ] ; b = b [ 0 ] ; return a < b ? - 1 : a > b ? 1 : 0 } , b = CKEDITOR . htmlParser . fragment . prototype ; CKEDITOR . htmlParser . element . prototype = CKEDITOR . tools . extend ( new CKEDITOR . htmlParser . node , { type : CKEDITOR . NODE _ELEMENT , add : b . add , clone : function ( ) { return new CKEDITOR . htmlParser . element ( this . name , this . attributes ) } , filter : function ( a , b ) { var d = this , k , h ; b = d . getFilterContext ( b ) ; if ( ! d . parent ) a . onRoot ( b ,
d ) ; for ( ; ; ) { k = d . name ; if ( ! ( h = a . onElementName ( b , k ) ) ) return this . remove ( ) , ! 1 ; d . name = h ; if ( ! ( d = a . onElement ( b , d ) ) ) return this . remove ( ) , ! 1 ; if ( d !== this ) return this . replaceWith ( d ) , ! 1 ; if ( d . name == k ) break ; if ( d . type != CKEDITOR . NODE _ELEMENT ) return this . replaceWith ( d ) , ! 1 ; if ( ! d . name ) return this . replaceWithChildren ( ) , ! 1 } k = d . attributes ; var q , m ; for ( q in k ) { for ( h = k [ q ] ; ; ) if ( m = a . onAttributeName ( b , q ) ) if ( m != q ) delete k [ q ] , q = m ; else break ; else { delete k [ q ] ; break } m && ( ! 1 === ( h = a . onAttribute ( b , d , m , h ) ) ? delete k [ m ] : k [ m ] = h ) } d . isEmpty ||
this . filterChildren ( a , ! 1 , b ) ; return ! 0 } , filterChildren : b . filterChildren , writeHtml : function ( a , b ) { b && this . filter ( b ) ; var e = this . name , k = [ ] , h = this . attributes , q , m ; a . openTag ( e , h ) ; for ( q in h ) k . push ( [ q , h [ q ] ] ) ; a . sortAttributes && k . sort ( d ) ; q = 0 ; for ( m = k . length ; q < m ; q ++ ) h = k [ q ] , a . attribute ( h [ 0 ] , h [ 1 ] ) ; a . openTagClose ( e , this . isEmpty ) ; this . writeChildrenHtml ( a ) ; this . isEmpty || a . closeTag ( e ) } , writeChildrenHtml : b . writeChildrenHtml , replaceWithChildren : function ( ) { for ( var a = this . children , b = a . length ; b ; ) a [ -- b ] . insertAfter ( this ) ;
d ) ; for ( ; ; ) { k = d . name ; if ( ! ( h = a . onElementName ( b , k ) ) ) return this . remove ( ) , ! 1 ; d . name = h ; if ( ! ( d = a . onElement ( b , d ) ) ) return this . remove ( ) , ! 1 ; if ( d !== this ) return this . replaceWith ( d ) , ! 1 ; if ( d . name == k ) break ; if ( d . type != CKEDITOR . NODE _ELEMENT ) return this . replaceWith ( d ) , ! 1 ; if ( ! d . name ) return this . replaceWithChildren ( ) , ! 1 } k = d . attributes ; var p , m ; for ( p in k ) { for ( h = k [ p ] ; ; ) if ( m = a . onAttributeName ( b , p ) ) if ( m != p ) delete k [ p ] , p = m ; else break ; else { delete k [ p ] ; break } m && ( ! 1 === ( h = a . onAttribute ( b , d , m , h ) ) ? delete k [ m ] : k [ m ] = h ) } d . isEmpty ||
this . filterChildren ( a , ! 1 , b ) ; return ! 0 } , filterChildren : b . filterChildren , writeHtml : function ( a , b ) { b && this . filter ( b ) ; var e = this . name , k = [ ] , h = this . attributes , p , m ; a . openTag ( e , h ) ; for ( p in h ) k . push ( [ p , h [ p ] ] ) ; a . sortAttributes && k . sort ( d ) ; p = 0 ; for ( m = k . length ; p < m ; p ++ ) h = k [ p ] , a . attribute ( h [ 0 ] , h [ 1 ] ) ; a . openTagClose ( e , this . isEmpty ) ; this . writeChildrenHtml ( a ) ; this . isEmpty || a . closeTag ( e ) } , writeChildrenHtml : b . writeChildrenHtml , replaceWithChildren : function ( ) { for ( var a = this . children , b = a . length ; b ; ) a [ -- b ] . insertAfter ( this ) ;
this . remove ( ) } , forEach : b . forEach , getFirst : function ( b ) { if ( ! b ) return this . children . length ? this . children [ 0 ] : null ; "function" != typeof b && ( b = a ( b ) ) ; for ( var d = 0 , e = this . children . length ; d < e ; ++ d ) if ( b ( this . children [ d ] ) ) return this . children [ d ] ; return null } , getHtml : function ( ) { var a = new CKEDITOR . htmlParser . basicWriter ; this . writeChildrenHtml ( a ) ; return a . getHtml ( ) } , setHtml : function ( a ) { a = this . children = CKEDITOR . htmlParser . fragment . fromHtml ( a ) . children ; for ( var b = 0 , d = a . length ; b < d ; ++ b ) a [ b ] . parent = this } , getOuterHtml : function ( ) { var a =
new CKEDITOR . htmlParser . basicWriter ; this . writeHtml ( a ) ; return a . getHtml ( ) } , split : function ( a ) { for ( var b = this . children . splice ( a , this . children . length - a ) , d = this . clone ( ) , k = 0 ; k < b . length ; ++ k ) b [ k ] . parent = d ; d . children = b ; b [ 0 ] && ( b [ 0 ] . previous = null ) ; 0 < a && ( this . children [ a - 1 ] . next = null ) ; this . parent . add ( d , this . getIndex ( ) + 1 ) ; return d } , find : function ( a , b ) { void 0 === b && ( b = ! 1 ) ; var d = [ ] , k ; for ( k = 0 ; k < this . children . length ; k ++ ) { var h = this . children [ k ] ; "function" == typeof a && a ( h ) ? d . push ( h ) : "string" == typeof a && h . name === a && d . push ( h ) ;
b && h . find && ( d = d . concat ( h . find ( a , b ) ) ) } return d } , findOne : function ( a , b ) { var d = null , k = CKEDITOR . tools . array . find ( this . children , function ( h ) { var k = "function" === typeof a ? a ( h ) : h . name === a ; if ( k || ! b ) return k ; h . children && h . findOne && ( d = h . findOne ( a , ! 0 ) ) ; return ! ! d } ) ; return d || k || null } , addClass : function ( a ) { if ( ! this . hasClass ( a ) ) { var b = this . attributes [ "class" ] || "" ; this . attributes [ "class" ] = b + ( b ? " " : "" ) + a } } , removeClass : function ( a ) { var b = this . attributes [ "class" ] ; b && ( ( b = CKEDITOR . tools . trim ( b . replace ( new RegExp ( "(?:\\s+|^)" +
@@ -368,20 +368,20 @@ f.container;b&&a&&(a.clearCustomData(),a.remove());b&&b.show();f.element.clearCu
CKEDITOR . replaceClass = "ckeditor" ;
( function ( ) { function a ( a , f , e , k ) { a = CKEDITOR . editor . _getEditorElement ( a ) ; if ( ! a ) return null ; if ( CKEDITOR . editor . shouldDelayEditorCreation ( a , f ) ) return CKEDITOR . editor . initializeDelayedEditorCreation ( a , f , "replace" ) ; var h = new CKEDITOR . editor ( f , a , k ) ; k == CKEDITOR . ELEMENT _MODE _REPLACE && ( a . setStyle ( "visibility" , "hidden" ) , h . _ . required = a . hasAttribute ( "required" ) , a . removeAttribute ( "required" ) ) ; e && h . setData ( e , null , ! 0 ) ; h . on ( "loaded" , function ( ) { h . isDestroyed ( ) || h . isDetached ( ) || ( b ( h ) , k == CKEDITOR . ELEMENT _MODE _REPLACE &&
h . config . autoUpdateElement && a . $ . form && h . _attachToForm ( ) , h . setMode ( h . config . startupMode , function ( ) { h . resetDirty ( ) ; h . status = "ready" ; h . fireOnce ( "instanceReady" ) ; CKEDITOR . fire ( "instanceReady" , null , h ) } ) ) } ) ; h . on ( "destroy" , d ) ; return h } function d ( ) { var a = this . container , b = this . element ; a && ( a . clearCustomData ( ) , a . remove ( ) ) ; b && ( b . clearCustomData ( ) , this . elementMode == CKEDITOR . ELEMENT _MODE _REPLACE && ( b . show ( ) , this . _ . required && b . setAttribute ( "required" , "required" ) ) , delete this . element ) } function b ( a ) { var b = a . name , d =
a . element , k = a . elementMode , h = a . fire ( "uiSpace" , { space : "top" , html : "" } ) . html , q = a . fire ( "uiSpace" , { space : "bottom" , html : "" } ) . html , m = new CKEDITOR . template ( '\x3c{outerEl} id\x3d"cke_{name}" class\x3d"{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} ' + CKEDITOR . env . cssClass + '" dir\x3d"{langDir}" lang\x3d"{langCode}" role\x3d"application"' + ( a . applicationTitle ? ' aria-labelledby\x3d"cke_{name}_arialbl"' : "" ) + "\x3e" + ( a . applicationTitle ? '\x3cspan id\x3d"cke_{name}_arialbl" class\x3d"cke_voice_label"\x3e{voiceLabel}\x3c/span\x3e' :
a . element , k = a . elementMode , h = a . fire ( "uiSpace" , { space : "top" , html : "" } ) . html , p = a . fire ( "uiSpace" , { space : "bottom" , html : "" } ) . html , m = new CKEDITOR . template ( '\x3c{outerEl} id\x3d"cke_{name}" class\x3d"{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} ' + CKEDITOR . env . cssClass + '" dir\x3d"{langDir}" lang\x3d"{langCode}" role\x3d"application"' + ( a . applicationTitle ? ' aria-labelledby\x3d"cke_{name}_arialbl"' : "" ) + "\x3e" + ( a . applicationTitle ? '\x3cspan id\x3d"cke_{name}_arialbl" class\x3d"cke_voice_label"\x3e{voiceLabel}\x3c/span\x3e' :
"" ) + '\x3c{outerEl} class\x3d"cke_inner cke_reset" role\x3d"presentation"\x3e{topHtml}\x3c{outerEl} id\x3d"{contentId}" class\x3d"cke_contents cke_reset" role\x3d"presentation"\x3e\x3c/{outerEl}\x3e{bottomHtml}\x3c/{outerEl}\x3e\x3c/{outerEl}\x3e' ) , b = CKEDITOR . dom . element . createFromHtml ( m . output ( { id : a . id , name : b , langDir : a . lang . dir , langCode : a . langCode , voiceLabel : a . applicationTitle , topHtml : h ? '\x3cspan id\x3d"' + a . ui . spaceId ( "top" ) + '" class\x3d"cke_top cke_reset_all" role\x3d"presentation" style\x3d"height:auto"\x3e' +
h + "\x3c/span\x3e" : "" , contentId : a . ui . spaceId ( "contents" ) , bottomHtml : q ? '\x3cspan id\x3d"' + a . ui . spaceId ( "bottom" ) + '" class\x3d"cke_bottom cke_reset_all" role\x3d"presentation"\x3e' + q + "\x3c/span\x3e" : "" , outerEl : CKEDITOR . env . ie ? "span" : "div" } ) ) ; k == CKEDITOR . ELEMENT _MODE _REPLACE ? ( d . hide ( ) , b . insertAfter ( d ) ) : d . append ( b ) ; a . container = b ; a . ui . contentsElement = a . ui . space ( "contents" ) ; h && a . ui . space ( "top" ) . unselectable ( ) ; q && a . ui . space ( "bottom" ) . unselectable ( ) ; d = a . config . width ; k = a . config . height ; d && b . setStyle ( "width" ,
h + "\x3c/span\x3e" : "" , contentId : a . ui . spaceId ( "contents" ) , bottomHtml : p ? '\x3cspan id\x3d"' + a . ui . spaceId ( "bottom" ) + '" class\x3d"cke_bottom cke_reset_all" role\x3d"presentation"\x3e' + p + "\x3c/span\x3e" : "" , outerEl : CKEDITOR . env . ie ? "span" : "div" } ) ) ; k == CKEDITOR . ELEMENT _MODE _REPLACE ? ( d . hide ( ) , b . insertAfter ( d ) ) : d . append ( b ) ; a . container = b ; a . ui . contentsElement = a . ui . space ( "contents" ) ; h && a . ui . space ( "top" ) . unselectable ( ) ; p && a . ui . space ( "bottom" ) . unselectable ( ) ; d = a . config . width ; k = a . config . height ; d && b . setStyle ( "width" ,
CKEDITOR . tools . cssLength ( d ) ) ; k && a . ui . space ( "contents" ) . setStyle ( "height" , CKEDITOR . tools . cssLength ( k ) ) ; b . disableContextMenu ( ) ; CKEDITOR . env . webkit && b . on ( "focus" , function ( ) { a . focus ( ) } ) ; a . fireOnce ( "uiReady" ) } CKEDITOR . replace = function ( b , d ) { return a ( b , d , null , CKEDITOR . ELEMENT _MODE _REPLACE ) } ; CKEDITOR . appendTo = function ( b , d , e ) { return a ( b , d , e , CKEDITOR . ELEMENT _MODE _APPENDTO ) } ; CKEDITOR . replaceAll = function ( ) { for ( var a = document . getElementsByTagName ( "textarea" ) , b = 0 ; b < a . length ; b ++ ) { var d = null , k = a [ b ] ; if ( k . name || k . id ) { if ( "string" ==
typeof arguments [ 0 ] ) { if ( ! ( new RegExp ( "(?:^|\\s)" + arguments [ 0 ] + "(?:$|\\s)" ) ) . test ( k . className ) ) continue } else if ( "function" == typeof arguments [ 0 ] && ( d = { } , ! 1 === arguments [ 0 ] ( k , d ) ) ) continue ; this . replace ( k , d ) } } } ; CKEDITOR . editor . prototype . addMode = function ( a , b ) { ( this . _ . modes || ( this . _ . modes = { } ) ) [ a ] = b } ; CKEDITOR . editor . prototype . setMode = function ( a , b ) { var d = this , k = this . _ . modes ; if ( a != d . mode && k && k [ a ] ) { d . fire ( "beforeSetMode" , a ) ; if ( d . mode ) { var h = d . checkDirty ( ) , k = d . _ . previousModeData , q , m = 0 ; d . fire ( "beforeModeUnload" ) ;
d . editable ( 0 ) ; d . _ . previousMode = d . mode ; d . _ . previousModeData = q = d . getData ( 1 ) ; "source" == d . mode && k == q && ( d . fire ( "lockSnapshot" , { forceUpdate : ! 0 } ) , m = 1 ) ; d . ui . space ( "contents" ) . setHtml ( "" ) ; d . mode = "" } else d . _ . previousModeData = d . getData ( 1 ) ; this . _ . modes [ a ] ( function ( ) { d . mode = a ; void 0 !== h && ! h && d . resetDirty ( ) ; m ? d . fire ( "unlockSnapshot" ) : "wysiwyg" == a && d . fire ( "saveSnapshot" ) ; setTimeout ( function ( ) { d . isDestroyed ( ) || d . isDetached ( ) || ( d . fire ( "mode" ) , b && b . call ( d ) ) } , 0 ) } ) } } ; CKEDITOR . editor . prototype . resize = function ( a , b , d , k ) { var h =
this . container , q = this . ui . space ( "contents" ) , m = CKEDITOR . env . webkit && this . document && this . document . getWindow ( ) . $ . frameElement ; k = k ? this . container . getFirst ( function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasClass ( "cke_inner" ) } ) : h ; if ( a || 0 === a ) a = CKEDITOR . tools . convertToPx ( CKEDITOR . tools . cssLength ( a ) ) ; k . setSize ( "width" , a , ! 0 ) ; m && ( m . style . width = "1%" ) ; b = CKEDITOR . tools . convertToPx ( CKEDITOR . tools . cssLength ( b ) ) ; var g = ( k . $ . offsetHeight || 0 ) - ( q . $ . clientHeight || 0 ) , h = Math . max ( b - ( d ? 0 : g ) , 0 ) ; b = d ? b + g : b ; q . setStyle ( "height" ,
typeof arguments [ 0 ] ) { if ( ! ( new RegExp ( "(?:^|\\s)" + arguments [ 0 ] + "(?:$|\\s)" ) ) . test ( k . className ) ) continue } else if ( "function" == typeof arguments [ 0 ] && ( d = { } , ! 1 === arguments [ 0 ] ( k , d ) ) ) continue ; this . replace ( k , d ) } } } ; CKEDITOR . editor . prototype . addMode = function ( a , b ) { ( this . _ . modes || ( this . _ . modes = { } ) ) [ a ] = b } ; CKEDITOR . editor . prototype . setMode = function ( a , b ) { var d = this , k = this . _ . modes ; if ( a != d . mode && k && k [ a ] ) { d . fire ( "beforeSetMode" , a ) ; if ( d . mode ) { var h = d . checkDirty ( ) , k = d . _ . previousModeData , p , m = 0 ; d . fire ( "beforeModeUnload" ) ;
d . editable ( 0 ) ; d . _ . previousMode = d . mode ; d . _ . previousModeData = p = d . getData ( 1 ) ; "source" == d . mode && k == p && ( d . fire ( "lockSnapshot" , { forceUpdate : ! 0 } ) , m = 1 ) ; d . ui . space ( "contents" ) . setHtml ( "" ) ; d . mode = "" } else d . _ . previousModeData = d . getData ( 1 ) ; this . _ . modes [ a ] ( function ( ) { d . mode = a ; void 0 !== h && ! h && d . resetDirty ( ) ; m ? d . fire ( "unlockSnapshot" ) : "wysiwyg" == a && d . fire ( "saveSnapshot" ) ; setTimeout ( function ( ) { d . isDestroyed ( ) || d . isDetached ( ) || ( d . fire ( "mode" ) , b && b . call ( d ) ) } , 0 ) } ) } } ; CKEDITOR . editor . prototype . resize = function ( a , b , d , k ) { var h =
this . container , p = this . ui . space ( "contents" ) , m = CKEDITOR . env . webkit && this . document && this . document . getWindow ( ) . $ . frameElement ; k = k ? this . container . getFirst ( function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasClass ( "cke_inner" ) } ) : h ; if ( a || 0 === a ) a = CKEDITOR . tools . convertToPx ( CKEDITOR . tools . cssLength ( a ) ) ; k . setSize ( "width" , a , ! 0 ) ; m && ( m . style . width = "1%" ) ; b = CKEDITOR . tools . convertToPx ( CKEDITOR . tools . cssLength ( b ) ) ; var g = ( k . $ . offsetHeight || 0 ) - ( p . $ . clientHeight || 0 ) , h = Math . max ( b - ( d ? 0 : g ) , 0 ) ; b = d ? b + g : b ; p . setStyle ( "height" ,
CKEDITOR . tools . cssLength ( h ) ) ; m && ( m . style . width = "100%" ) ; this . fire ( "resize" , { outerHeight : b , contentsHeight : h , outerWidth : a || k . getSize ( "width" ) } ) } ; CKEDITOR . editor . prototype . getResizable = function ( a ) { return a ? this . ui . space ( "contents" ) : this . container } ; CKEDITOR . domReady ( function ( ) { CKEDITOR . replaceClass && CKEDITOR . replaceAll ( CKEDITOR . replaceClass ) } ) } ) ( ) ; CKEDITOR . config . startupMode = "wysiwyg" ;
( function ( ) { function a ( a ) { var b = a . editor , e = a . data . path , g = e . blockLimit , f = a . data . selection , h = f . getRanges ( ) [ 0 ] , k ; if ( CKEDITOR . env . gecko || CKEDITOR . env . ie && CKEDITOR . env . needsBrFiller ) if ( f = d ( f , e ) ) f . appendBogus ( ) , k = CKEDITOR . env . ie && ! CKEDITOR . env . edge || CKEDITOR . env . edge && b . _ . previousActive ; q ( b , e . block , g ) && h . collapsed && ! h . getCommonAncestor ( ) . isReadOnly ( ) && ( e = h . clone ( ) , e . enlarge ( CKEDITOR . ENLARGE _BLOCK _CONTENTS ) , g = new CKEDITOR . dom . walker ( e ) , g . guard = function ( a ) { return ! c ( a ) || a . type == CKEDITOR . NODE _COMMENT || a . isReadOnly ( ) } ,
( function ( ) { function a ( a ) { var b = a . editor , e = a . data . path , g = e . blockLimit , f = a . data . selection , h = f . getRanges ( ) [ 0 ] , k ; if ( CKEDITOR . env . gecko || CKEDITOR . env . ie && CKEDITOR . env . needsBrFiller ) if ( f = d ( f , e ) ) f . appendBogus ( ) , k = CKEDITOR . env . ie && ! CKEDITOR . env . edge || CKEDITOR . env . edge && b . _ . previousActive ; p ( b , e . block , g ) && h . collapsed && ! h . getCommonAncestor ( ) . isReadOnly ( ) && ( e = h . clone ( ) , e . enlarge ( CKEDITOR . ENLARGE _BLOCK _CONTENTS ) , g = new CKEDITOR . dom . walker ( e ) , g . guard = function ( a ) { return ! c ( a ) || a . type == CKEDITOR . NODE _COMMENT || a . isReadOnly ( ) } ,
! g . checkForward ( ) || e . checkStartOfBlock ( ) && e . checkEndOfBlock ( ) ) && ( b = h . fixBlock ( ! 0 , b . activeEnterMode == CKEDITOR . ENTER _DIV ? "div" : "p" ) , CKEDITOR . env . needsBrFiller || ( b = b . getFirst ( c ) ) && b . type == CKEDITOR . NODE _TEXT && CKEDITOR . tools . trim ( b . getText ( ) ) . match ( /^(?: |\xa0)$/ ) && b . remove ( ) , k = 1 , a . cancel ( ) ) ; k && h . select ( ) } function d ( a , b ) { if ( a . isFake ) return 0 ; var d = b . block || b . blockLimit , e = d && d . getLast ( c ) ; if ( ! ( ! d || ! d . isBlockBoundary ( ) || e && e . type == CKEDITOR . NODE _ELEMENT && e . isBlockBoundary ( ) || d . is ( "pre" ) || d . getBogus ( ) ) ) return d }
function b ( a ) { var b = a . data . getTarget ( ) ; b . is ( "input" ) && ( b = b . getAttribute ( "type" ) , "submit" != b && "reset" != b || a . data . preventDefault ( ) ) } function c ( a ) { return A ( a ) && F ( a ) } function f ( a , b ) { return function ( c ) { var d = c . data . $ . toElement || c . data . $ . fromElement || c . data . $ . relatedTarget ; ( d = d && d . nodeType == CKEDITOR . NODE _ELEMENT ? new CKEDITOR . dom . element ( d ) : null ) && ( b . equals ( d ) || b . contains ( d ) ) || a . call ( this , c ) } } function e ( a ) { return ! ! a . getRanges ( ) [ 0 ] . startPath ( ) . contains ( { table : 1 , ul : 1 , ol : 1 , dl : 1 } ) } function k ( a ) { function b ( a ) { var e =
{ table : 1 , ul : 1 , ol : 1 , dl : 1 } ; return function ( b , g ) { g && b . type == CKEDITOR . NODE _ELEMENT && b . is ( e ) && ( d = b ) ; if ( ! ( g || ! c ( b ) || a && l ( b ) ) ) return ! 1 } } var d , g = a . getRanges ( ) [ 0 ] , f = a . root ; return e ( a ) && ( a = g . clone ( ) , a . collapse ( 1 ) , a . setStartAt ( f , CKEDITOR . POSITION _AFTER _START ) , f = new CKEDITOR . dom . walker ( a ) , f . guard = b ( ) , f . checkBackward ( ) , d ) ? ( a = g . clone ( ) , a . collapse ( ) , a . setEndAt ( d , CKEDITOR . POSITION _AFTER _END ) , f = new CKEDITOR . dom . walker ( a ) , f . guard = b ( ! 0 ) , d = ! 1 , f . checkForward ( ) , d ) : null } function h ( a ) { return a . block . getParent ( ) . getChildCount ( ) }
function q ( a , b , c ) { return ! 1 !== a . config . autoParagraph && a . activeEnterMode != CKEDITOR . ENTER _BR && ( a . editable ( ) . equals ( c ) && ! b || b && "true" == b . getAttribute ( "contenteditable" ) ) } function m ( a ) { return a . activeEnterMode != CKEDITOR . ENTER _BR && ! 1 !== a . config . autoParagraph ? a . activeEnterMode == CKEDITOR . ENTER _DIV ? "div" : "p" : ! 1 } function g ( a ) { a && a . isEmptyInlineRemoveable ( ) && a . remove ( ) } function x ( a ) { var b = a . editor ; b . getSelection ( ) . scrollIntoView ( ) ; setTimeout ( function ( ) { b . fire ( "saveSnapshot" ) } , 0 ) } function y ( 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 A , F , v , l , L , w , J , G , p , u , K = { ul : 1 , ol : 1 , dl : 1 } ; CKEDITOR . editable = CKEDITOR . tools . createClass ( { base : CKEDITOR . dom . element , $ : function ( a , b ) { this . base ( b . $ || b ) ; this . editor = a ; this . status = "unloaded" ; this . hasFocus = ! 1 ; this . setup ( ) } , proto : { focus : function ( ) { var a ; if ( CKEDITOR . env . webkit && ! this . hasFocus && ( a = this . editor . _ . previousActive || this . getDocument ( ) . getActive ( ) , this . contains ( a ) ) ) { a . focus ( ) ; return } CKEDITOR . env . edge && 14 < CKEDITOR . env . version &&
function p ( a , b , c ) { return ! 1 !== a . config . autoParagraph && a . activeEnterMode != CKEDITOR . ENTER _BR && ( a . editable ( ) . equals ( c ) && ! b || b && "true" == b . getAttribute ( "contenteditable" ) ) } function m ( a ) { return a . activeEnterMode != CKEDITOR . ENTER _BR && ! 1 !== a . config . autoParagraph ? a . activeEnterMode == CKEDITOR . ENTER _DIV ? "div" : "p" : ! 1 } function g ( a ) { a && a . isEmptyInlineRemoveable ( ) && a . remove ( ) } function x ( a ) { var b = a . editor ; b . getSelection ( ) . scrollIntoView ( ) ; setTimeout ( function ( ) { b . fire ( "saveSnapshot" ) } , 0 ) } function y ( 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 A , F , v , l , L , w , J , G , q , u , K = { ul : 1 , ol : 1 , dl : 1 } ; CKEDITOR . editable = CKEDITOR . tools . createClass ( { base : CKEDITOR . dom . element , $ : function ( a , b ) { this . base ( b . $ || b ) ; this . editor = a ; this . status = "unloaded" ; this . hasFocus = ! 1 ; this . setup ( ) } , proto : { focus : function ( ) { var a ; if ( CKEDITOR . env . webkit && ! this . hasFocus && ( a = this . editor . _ . previousActive || this . getDocument ( ) . getActive ( ) , this . contains ( a ) ) ) { a . focus ( ) ; return } CKEDITOR . env . edge && 14 < CKEDITOR . env . version &&
! this . hasFocus && this . getDocument ( ) . equals ( CKEDITOR . document ) && ( this . editor . _ . previousScrollTop = this . $ . scrollTop ) ; try { if ( ! CKEDITOR . env . ie || CKEDITOR . env . edge && 14 < CKEDITOR . env . version || ! this . getDocument ( ) . equals ( CKEDITOR . document ) ) if ( CKEDITOR . env . chrome ) { var b = this . $ . scrollTop ; this . $ . focus ( ) ; this . $ . scrollTop = b } else this . $ . focus ( ) ; else this . $ . setActive ( ) } catch ( c ) { if ( ! CKEDITOR . env . ie ) throw c ; } CKEDITOR . env . safari && ! this . isInline ( ) && ( a = CKEDITOR . document . getActive ( ) , a . equals ( this . getWindow ( ) . getFrame ( ) ) ||
this . getWindow ( ) . focus ( ) ) } , on : function ( a , b ) { var c = Array . prototype . slice . call ( arguments , 0 ) ; CKEDITOR . env . ie && /^focus|blur$/ . exec ( a ) && ( a = "focus" == a ? "focusin" : "focusout" , b = f ( b , this ) , c [ 0 ] = a , c [ 1 ] = b ) ; return CKEDITOR . dom . element . prototype . on . apply ( this , c ) } , attachListener : function ( a ) { ! this . _ . listeners && ( this . _ . listeners = [ ] ) ; var b = Array . prototype . slice . call ( arguments , 1 ) , b = a . on . apply ( a , b ) ; this . _ . listeners . push ( b ) ; return b } , clearListeners : function ( ) { var a = this . _ . listeners ; try { for ( ; a . length ; ) a . pop ( ) . removeListener ( ) } catch ( b ) { } } ,
restoreAttrs : function ( ) { var a = this . _ . attrChanges , b , c ; for ( c in a ) a . hasOwnProperty ( c ) && ( b = a [ c ] , null !== b ? this . setAttribute ( c , b ) : this . removeAttribute ( c ) ) } , attachClass : function ( a ) { var b = this . getCustomData ( "classes" ) ; this . hasClass ( a ) || ( ! b && ( b = [ ] ) , b . push ( a ) , this . setCustomData ( "classes" , b ) , this . addClass ( a ) ) } , changeAttr : function ( a , b ) { var c = this . getAttribute ( a ) ; b !== c && ( ! this . _ . attrChanges && ( this . _ . attrChanges = { } ) , a in this . _ . attrChanges || ( this . _ . attrChanges [ a ] = c ) , this . setAttribute ( a , b ) ) } , insertText : function ( a ) { this . editor . focus ( ) ;
@@ -392,7 +392,7 @@ G(b));var h,k;if(f)for(;(h=b.getCommonAncestor(0,1))&&(k=CKEDITOR.dtd[h.getName(
this . status && ( this . status = "ready" ) ; this . editor . fire ( "dataReady" ) } , getData : function ( a ) { var b = this . getHtml ( ) ; a || ( b = this . editor . dataProcessor . toDataFormat ( b ) ) ; return b } , setReadOnly : function ( a ) { this . setAttribute ( "contenteditable" , String ( ! a ) ) ; this . setAttribute ( "aria-readonly" , String ( a ) ) } , detach : function ( ) { this . status = "detached" ; this . editor . setData ( this . editor . getData ( ) , { internal : ! 0 } ) ; this . clearListeners ( ) ; try { this . _ . cleanCustomData ( ) } catch ( a ) { if ( ! CKEDITOR . env . ie || - 2146828218 !== a . number ) throw a ; } this . editor . fire ( "contentDomUnload" ) ;
delete this . editor . document ; delete this . editor . window ; delete this . editor } , isInline : function ( ) { return this . getDocument ( ) . equals ( CKEDITOR . document ) } , fixInitialSelection : function ( ) { function a ( ) { var b = c . getDocument ( ) . $ , d = b . getSelection ( ) , e ; a : if ( d . anchorNode && d . anchorNode == c . $ ) e = ! 0 ; else { if ( CKEDITOR . env . webkit && ( e = c . getDocument ( ) . getActive ( ) ) && e . equals ( c ) && ! d . anchorNode ) { e = ! 0 ; break a } e = void 0 } e && ( e = new CKEDITOR . dom . range ( c ) , e . moveToElementEditStart ( c ) , b = b . createRange ( ) , b . setStart ( e . startContainer . $ , e . startOffset ) ,
b . collapse ( ! 0 ) , d . removeAllRanges ( ) , d . addRange ( b ) ) } function b ( ) { var a = c . getDocument ( ) . $ , d = a . selection , e = c . getDocument ( ) . getActive ( ) ; "None" == d . type && e . equals ( c ) && ( d = new CKEDITOR . dom . range ( c ) , a = a . body . createTextRange ( ) , d . moveToElementEditStart ( c ) , d = d . startContainer , d . type != CKEDITOR . NODE _ELEMENT && ( d = d . getParent ( ) ) , a . moveToElementText ( d . $ ) , a . collapse ( ! 0 ) , a . select ( ) ) } var c = this ; if ( CKEDITOR . env . ie && ( 9 > CKEDITOR . env . version || CKEDITOR . env . quirks ) ) this . hasFocus && ( this . focus ( ) , b ( ) ) ; else if ( this . hasFocus ) this . focus ( ) ,
a ( ) ; else this . once ( "focus" , function ( ) { a ( ) } , null , null , - 999 ) } , getHtmlFromRange : function ( a ) { if ( a . collapsed ) return new CKEDITOR . dom . documentFragment ( a . document ) ; a = { doc : this . getDocument ( ) , range : a . clone ( ) } ; p . eol . detect ( a , this ) ; p . bogus . exclude ( a ) ; p . cell . shrink ( a ) ; a . fragment = a . range . cloneContents ( ) ; p . tree . rebuild ( a , this ) ; p . eol . fix ( a , this ) ; return new CKEDITOR . dom . documentFragment ( a . fragment . $ ) } , extractHtmlFromRange : function ( a , b ) { var c = u , d = { range : a , doc : a . document } , e = this . getHtmlFromRange ( a ) ; if ( a . collapsed ) return a . optimize ( ) ,
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 ( ) } ; q . eol . detect ( a , this ) ; q . bogus . exclude ( a ) ; q . cell . shrink ( a ) ; a . fragment = a . range . cloneContents ( ) ; q . tree . rebuild ( a , this ) ; q . eol . fix ( a , this ) ; return new CKEDITOR . dom . documentFragment ( a . fragment . $ ) } , extractHtmlFromRange : function ( a , b ) { var c = u , d = { range : a , doc : a . document } , e = this . getHtmlFromRange ( a ) ; if ( a . collapsed ) return a . optimize ( ) ,
e ; a . enlarge ( CKEDITOR . ENLARGE _INLINE , 1 ) ; c . table . detectPurge ( d ) ; d . bookmark = a . createBookmark ( ) ; delete d . range ; var g = this . editor . createRange ( ) ; g . moveToPosition ( d . bookmark . startNode , CKEDITOR . POSITION _BEFORE _START ) ; d . targetBookmark = g . createBookmark ( ) ; c . list . detectMerge ( d , this ) ; c . table . detectRanges ( d , this ) ; c . block . detectMerge ( d , this ) ; d . tableContentsRanges ? ( c . table . deleteRanges ( d ) , a . moveToBookmark ( d . bookmark ) , d . range = a ) : ( a . moveToBookmark ( d . bookmark ) , d . range = a , a . extractContents ( c . detectExtractMerge ( d ) ) ) ; a . moveToBookmark ( d . targetBookmark ) ;
a . optimize ( ) ; c . fixUneditableRangePosition ( a ) ; c . list . merge ( d , this ) ; c . table . purge ( d , this ) ; c . block . merge ( d , this ) ; if ( b ) { c = a . startPath ( ) ; if ( d = a . checkStartOfBlock ( ) && a . checkEndOfBlock ( ) && c . block && ! a . root . equals ( c . block ) ) { a : { var d = c . block . getElementsByTag ( "span" ) , g = 0 , f ; if ( d ) for ( ; f = d . getItem ( g ++ ) ; ) if ( ! F ( f ) ) { d = ! 0 ; break a } d = ! 1 } d = ! d } d && ( a . moveToPosition ( c . block , CKEDITOR . POSITION _BEFORE _START ) , c . block . remove ( ) ) } else c . autoParagraph ( this . editor , a ) , v ( 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 ( L , 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 ,
@@ -400,38 +400,38 @@ return e},setup:function(){var a=this.editor;this.attachListener(a,"beforeGetDat
a . elementMode != CKEDITOR . ELEMENT _MODE _REPLACE && a . elementMode != CKEDITOR . ELEMENT _MODE _APPENDTO || this . attachClass ( "cke_editable_themed" ) ; this . attachClass ( "cke_contents_" + a . config . contentsLangDirection ) ; a . keystrokeHandler . blockedKeystrokes [ 8 ] = + a . readOnly ; a . keystrokeHandler . attach ( this ) ; this . on ( "blur" , function ( ) { this . hasFocus = ! 1 } , null , null , - 1 ) ; this . on ( "focus" , function ( ) { this . hasFocus = ! 0 } , null , null , - 1 ) ; if ( CKEDITOR . env . webkit ) this . on ( "scroll" , function ( ) { a . _ . previousScrollTop = a . editable ( ) . $ . scrollTop } , null ,
null , - 1 ) ; if ( CKEDITOR . env . edge && 14 < CKEDITOR . env . version ) { var d = function ( ) { var b = a . editable ( ) ; null != a . _ . previousScrollTop && b . getDocument ( ) . equals ( CKEDITOR . document ) && ( b . $ . scrollTop = a . _ . previousScrollTop , a . _ . previousScrollTop = null , this . removeListener ( "scroll" , d ) ) } ; this . on ( "scroll" , d ) } a . focusManager . add ( this ) ; this . equals ( CKEDITOR . document . getActive ( ) ) && ( this . hasFocus = ! 0 , a . once ( "contentDom" , function ( ) { a . focusManager . focus ( this ) } , this ) ) ; this . isInline ( ) && this . changeAttr ( "tabindex" , a . tabIndex ) ; if ( ! this . is ( "textarea" ) ) { a . document =
this . getDocument ( ) ; a . window = this . getWindow ( ) ; var g = a . document ; this . changeAttr ( "spellcheck" , ! a . config . disableNativeSpellChecker ) ; var f = a . config . contentsLangDirection ; this . getDirection ( 1 ) != f && this . changeAttr ( "dir" , f ) ; var z = CKEDITOR . getCss ( ) ; if ( z ) { var f = g . getHead ( ) , H = f . getCustomData ( "stylesheet" ) ; H ? z != H . getText ( ) && ( CKEDITOR . env . ie && 9 > CKEDITOR . env . version ? H . $ . styleSheet . cssText = z : H . setText ( z ) ) : ( z = g . appendStyleText ( z ) , z = new CKEDITOR . dom . element ( z . ownerNode || z . owningElement ) , f . setCustomData ( "stylesheet" ,
z ) , z . data ( "cke-temp" , 1 ) ) } f = g . getCustomData ( "stylesheet_ref" ) || 0 ; g . setCustomData ( "stylesheet_ref" , f + 1 ) ; this . setCustomData ( "cke_includeReadonly" , ! a . config . disableReadonlyStyling ) ; this . attachListener ( this , "click" , function ( a ) { a = a . data ; var b = ( new CKEDITOR . dom . elementPath ( a . getTarget ( ) , this ) ) . contains ( "a" ) ; b && 2 != a . $ . button && b . isReadOnly ( ) && a . preventDefault ( ) } ) ; var O = { 8 : 1 , 46 : 1 } ; this . attachListener ( a , "key" , function ( b ) { if ( a . readOnly ) return ! 0 ; var c = b . data . domEvent . getKey ( ) , d , g = a . getSelection ( ) ; if ( 0 !== g . getRanges ( ) . length ) { if ( c in
O ) { var f ; b = g . getRanges ( ) [ 0 ] ; var t = b . startPath ( ) , z , B , H , c = 8 == c , m = ! 1 ; if ( CKEDITOR . env . ie && 11 > CKEDITOR . env . version && g . getSelectedElement ( ) ) f = g . getSelectedElement ( ) ; else if ( e ( g ) ) { var l = new CKEDITOR . dom . walker ( b ) , q = b . collapsed ? b . startContainer : l . next ( ) , m = ! 1 , C ; if ( b . checkStartOfBlock ( ) ) { C = b . startPath ( ) . block || b . startPath ( ) . blockLimit ; var p = C . getName ( ) ; C = - 1 !== CKEDITOR . tools . array . indexOf ( [ "dd" , "dt" , "li" ] , p ) && null === C . getPrevious ( ) } else C = ! 1 ; if ( C ) { for ( ; q && ! m ; ) m = q . $ . nodeName . toLowerCase ( ) , m = ! ! K [ m ] , q = l . next ( ) ;
l = h ( b . startPath ( ) ) ; q = h ( b . endPath ( ) ) ; m = m || l !== q } else m = void 0 ; m || ( f = k ( g ) ) } f || m ? ( a . fire ( "saveSnapshot" ) , m ? ( ( d = b . startContainer . getAscendant ( K , ! 0 ) ) ? ( b . setStart ( d , 0 ) , b . enlarge ( CKEDITOR . ENLARGE _ELEMENT ) , f = b ) : f = null , f . deleteContents ( ) ) : ( b . moveToPosition ( f , CKEDITOR . POSITION _BEFORE _START ) , f . remove ( ) ) , b . select ( ) , a . fire ( "saveSnapshot" ) , d = 1 ) : b . collapsed && ( ( z = t . block ) && ( H = z [ c ? "getPrevious" : "getNext" ] ( A ) ) && H . type == CKEDITOR . NODE _ELEMENT && H . is ( "table" ) && b [ c ? "checkStartOfBlock" : "checkEndOfBlock" ] ( ) ? ( a . fire ( "saveSnapshot" ) ,
z ) , z . data ( "cke-temp" , 1 ) ) } f = g . getCustomData ( "stylesheet_ref" ) || 0 ; g . setCustomData ( "stylesheet_ref" , f + 1 ) ; this . setCustomData ( "cke_includeReadonly" , ! a . config . disableReadonlyStyling ) ; this . attachListener ( this , "click" , function ( a ) { a = a . data ; var b = ( new CKEDITOR . dom . elementPath ( a . getTarget ( ) , this ) ) . contains ( "a" ) ; b && 2 != a . $ . button && b . isReadOnly ( ) && a . preventDefault ( ) } ) ; var N = { 8 : 1 , 46 : 1 } ; this . attachListener ( a , "key" , function ( b ) { if ( a . readOnly ) return ! 0 ; var c = b . data . domEvent . getKey ( ) , d , g = a . getSelection ( ) ; if ( 0 !== g . getRanges ( ) . length ) { if ( c in
N ) { var f ; b = g . getRanges ( ) [ 0 ] ; var t = b . startPath ( ) , z , B , H , c = 8 == c , m = ! 1 ; if ( CKEDITOR . env . ie && 11 > CKEDITOR . env . version && g . getSelectedElement ( ) ) f = g . getSelectedElement ( ) ; else if ( e ( g ) ) { var l = new CKEDITOR . dom . walker ( b ) , p = b . collapsed ? b . startContainer : l . next ( ) , m = ! 1 , C ; if ( b . checkStartOfBlock ( ) ) { C = b . startPath ( ) . block || b . startPath ( ) . blockLimit ; var q = C . getName ( ) ; C = - 1 !== CKEDITOR . tools . array . indexOf ( [ "dd" , "dt" , "li" ] , q ) && null === C . getPrevious ( ) } else C = ! 1 ; if ( C ) { for ( ; p && ! m ; ) m = p . $ . nodeName . toLowerCase ( ) , m = ! ! K [ m ] , p = l . next ( ) ;
l = h ( b . startPath ( ) ) ; p = h ( b . endPath ( ) ) ; m = m || l !== p } else m = void 0 ; m || ( f = k ( g ) ) } f || m ? ( a . fire ( "saveSnapshot" ) , m ? ( ( d = b . startContainer . getAscendant ( K , ! 0 ) ) ? ( b . setStart ( d , 0 ) , b . enlarge ( CKEDITOR . ENLARGE _ELEMENT ) , f = b ) : f = null , f . deleteContents ( ) ) : ( b . moveToPosition ( f , CKEDITOR . POSITION _BEFORE _START ) , f . remove ( ) ) , b . select ( ) , a . fire ( "saveSnapshot" ) , d = 1 ) : b . collapsed && ( ( z = t . block ) && ( H = z [ c ? "getPrevious" : "getNext" ] ( A ) ) && H . type == CKEDITOR . NODE _ELEMENT && H . is ( "table" ) && b [ c ? "checkStartOfBlock" : "checkEndOfBlock" ] ( ) ? ( a . fire ( "saveSnapshot" ) ,
b [ c ? "checkEndOfBlock" : "checkStartOfBlock" ] ( ) && z . remove ( ) , b [ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( H ) , b . select ( ) , a . fire ( "saveSnapshot" ) , d = 1 ) : t . blockLimit && t . blockLimit . is ( "td" ) && ( B = t . blockLimit . getAscendant ( "table" ) ) && b . checkBoundaryOfElement ( B , c ? CKEDITOR . START : CKEDITOR . END ) && ( H = B [ c ? "getPrevious" : "getNext" ] ( A ) ) ? ( a . fire ( "saveSnapshot" ) , b [ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( H ) , b . checkStartOfBlock ( ) && b . checkEndOfBlock ( ) ? H . remove ( ) : b . select ( ) , a . fire ( "saveSnapshot" ) , d = 1 ) : ( B = t . contains ( [ "td" , "th" , "caption" ] ) ) &&
b . checkBoundaryOfElement ( B , 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 O && ! 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 ,
b . checkBoundaryOfElement ( B , 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 N && ! 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 ( L , "" ) ) ) { 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 O && ( b = a . getSelection ( ) , 0 !== b . getRanges ( ) . length ) ) { var c = 8 == c , d = b . getRanges ( ) [ 0 ] ; b = d . startPath ( ) ; if ( d . collapsed ) a : { var e = b . block ; if ( e && d [ c ? "checkStartOfBlock" : "checkEndOfBlock" ] ( ! 0 ) && d . moveToClosestEditablePosition ( e , ! c ) && d . collapsed ) { if ( d . startContainer . type == CKEDITOR . NODE _ELEMENT ) { var g = d . startContainer . getChild ( d . startOffset - ( c ? 1 : 0 ) ) ; if ( g && g . type == CKEDITOR . NODE _ELEMENT && g . is ( "hr" ) ) { a . fire ( "saveSnapshot" ) ; g . remove ( ) ; b = ! 0 ; break a } } d = d . startPath ( ) . block ; if ( ! d || d && d . contains ( e ) ) b =
b . data . domEvent . getKey ( ) ; if ( c in N && ( b = a . getSelection ( ) , 0 !== b . getRanges ( ) . length ) ) { var c = 8 == c , d = b . getRanges ( ) [ 0 ] ; b = d . startPath ( ) ; if ( d . collapsed ) a : { var e = b . block ; if ( e && d [ c ? "checkStartOfBlock" : "checkEndOfBlock" ] ( ! 0 ) && d . moveToClosestEditablePosition ( e , ! c ) && d . collapsed ) { if ( d . startContainer . type == CKEDITOR . NODE _ELEMENT ) { var g = d . startContainer . getChild ( d . startOffset - ( c ? 1 : 0 ) ) ; if ( g && g . type == CKEDITOR . NODE _ELEMENT && g . is ( "hr" ) ) { a . fire ( "saveSnapshot" ) ; g . remove ( ) ; b = ! 0 ; break a } } d = d . startPath ( ) . block ; if ( ! d || d && d . contains ( e ) ) b =
void 0 ; else { a . fire ( "saveSnapshot" ) ; var f ; ( f = ( c ? d : e ) . getBogus ( ) ) && f . remove ( ) ; f = a . getSelection ( ) ; g = f . createBookmarks ( ) ; ( c ? e : d ) . moveChildren ( c ? d : e , ! 1 ) ; b . lastElement . mergeSiblings ( ) ; y ( e , d , ! c ) ; f . selectBookmarks ( g ) ; b = ! 0 } } else b = ! 1 } else c = d , f = b . block , d = c . endPath ( ) . block , f && d && ! f . equals ( d ) ? ( a . fire ( "saveSnapshot" ) , ( e = f . getBogus ( ) ) && e . remove ( ) , c . enlarge ( CKEDITOR . ENLARGE _INLINE ) , c . deleteContents ( ) , d . getParent ( ) && ( d . moveChildren ( f , ! 1 ) , b . lastElement . mergeSiblings ( ) , y ( f , d , ! 0 ) ) , c = a . getSelection ( ) . getRanges ( ) [ 0 ] ,
c . collapse ( 1 ) , c . optimize ( ) , "" === c . startContainer . getHtml ( ) && c . startContainer . appendBogus ( ) , c . select ( ) , b = ! 0 ) : b = ! 1 ; if ( ! b ) return ; a . getSelection ( ) . scrollIntoView ( ) ; a . fire ( "saveSnapshot" ) ; return ! 1 } } , this , null , 100 ) } } , getUniqueId : function ( ) { var a ; try { this . _ . expandoNumber = a = CKEDITOR . dom . domObject . prototype . getUniqueId . call ( this ) } catch ( b ) { a = this . _ && this . _ . expandoNumber } return a } } , _ : { cleanCustomData : function ( ) { this . removeClass ( "cke_editable" ) ; this . restoreAttrs ( ) ; for ( var a = this . removeCustomData ( "classes" ) ; a &&
a . length ; ) this . removeClass ( a . pop ( ) ) ; if ( ! this . is ( "textarea" ) ) { var a = this . getDocument ( ) , b = a . getHead ( ) ; if ( b . getCustomData ( "stylesheet" ) ) { var c = a . getCustomData ( "stylesheet_ref" ) ; -- c ? a . setCustomData ( "stylesheet_ref" , c ) : ( a . removeCustomData ( "stylesheet_ref" ) , b . removeCustomData ( "stylesheet" ) . remove ( ) ) } } } } } ) ; CKEDITOR . editor . prototype . editable = function ( a ) { var b = this . _ . editable ; if ( b && a ) return 0 ; if ( ! arguments . length ) return b ; a ? b = a instanceof CKEDITOR . editable ? a : new CKEDITOR . editable ( this , a ) : ( b && b . detach ( ) , b =
null ) ; return this . _ . editable = b } ; CKEDITOR . on ( "instanceLoaded" , function ( b ) { var c = b . editor ; c . on ( "insertElement" , function ( a ) { a = a . data ; a . type == CKEDITOR . NODE _ELEMENT && ( a . is ( "input" ) || a . is ( "textarea" ) ) && ( "false" != a . getAttribute ( "contentEditable" ) && a . data ( "cke-editable" , a . hasAttribute ( "contenteditable" ) ? "true" : "1" ) , a . setAttribute ( "contentEditable" , ! 1 ) ) } ) ; c . on ( "selectionChange" , function ( b ) { if ( ! c . readOnly ) { var d = c . getSelection ( ) ; d && ! d . isLocked && ( d = c . checkDirty ( ) , c . fire ( "lockSnapshot" ) , a ( b ) , c . fire ( "unlockSnapshot" ) ,
! d && c . resetDirty ( ) ) } } ) } ) ; CKEDITOR . on ( "instanceCreated" , function ( a ) { var b = a . editor ; b . on ( "mode" , function ( ) { var a = b . editable ( ) ; if ( a && a . isInline ( ) ) { var c = b . title ; a . changeAttr ( "role" , "textbox" ) ; a . changeAttr ( "aria-multiline" , "true" ) ; c && 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}" ) ; A = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ; F = CKEDITOR . dom . walker . bookmark ( ! 1 , ! 0 ) ; v = CKEDITOR . dom . walker . empty ( ) ; l = CKEDITOR . dom . walker . bogus ( ) ; L = /(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi ; w =
function ( ) { function a ( b ) { return b . type == CKEDITOR . NODE _ELEMENT } function b ( c , d ) { var e , g , f , r , h = [ ] , t = d . range . startContainer ; e = d . range . startPath ( ) ; for ( var t = l [ t . getName ( ) ] , k = 0 , z = c . getChildren ( ) , B = z . count ( ) , H = - 1 , I = - 1 , M = 0 , m = e . contains ( l . $list ) ; k < B ; ++ k ) e = z . getItem ( k ) , a ( e ) ? ( f = e . getName ( ) , m && f in CKEDITOR . dtd . $list ? h = h . concat ( b ( e , d ) ) : ( r = ! ! t [ f ] , "br" != f || ! e . data ( "cke-eol" ) || k && k != B - 1 || ( M = ( g = k ? h [ k - 1 ] . node : z . getItem ( k + 1 ) ) && ( ! a ( g ) || ! g . is ( "br" ) ) , g = g && a ( g ) && l . $block [ g . getName ( ) ] ) , - 1 != H || r || ( H = k ) , r || ( I = k ) , h . push ( { isElement : 1 ,
isLineBreak : M , isBlock : e . isBlockBoundary ( ) , hasBlockSibling : g , node : e , name : f , allowed : r } ) , g = M = 0 ) ) : h . push ( { isElement : 0 , node : e , allowed : 1 } ) ; - 1 < H && ( h [ H ] . firstNotAllowed = 1 ) ; - 1 < I && ( h [ I ] . lastNotAllowed = 1 ) ; return h } function d ( b , c ) { var e = [ ] , g = b . getChildren ( ) , f = g . count ( ) , h , r = 0 , k = l [ c ] , z = ! b . is ( l . $inline ) || b . is ( "br" ) ; for ( z && e . push ( " " ) ; r < f ; r ++ ) h = g . getItem ( r ) , a ( h ) && ! h . is ( k ) ? e = e . concat ( d ( h , c ) ) : e . push ( h ) ; z && e . push ( " " ) ; return e } function e ( b ) { return a ( b . startContainer ) && b . startContainer . getChild ( b . startOffset - 1 ) } function f ( b ) { return b &&
function ( ) { function a ( b ) { return b . type == CKEDITOR . NODE _ELEMENT } function b ( c , d ) { var e , g , f , h , r = [ ] , t = d . range . startContainer ; e = d . range . startPath ( ) ; for ( var t = l [ t . getName ( ) ] , k = 0 , z = c . getChildren ( ) , B = z . count ( ) , H = - 1 , I = - 1 , M = 0 , N = e . contains ( l . $list ) ; k < B ; ++ k ) e = z . getItem ( k ) , a ( e ) ? ( f = e . getName ( ) , N && f in CKEDITOR . dtd . $list ? r = r . concat ( b ( e , d ) ) : ( h = ! ! t [ f ] , "br" != f || ! e . data ( "cke-eol" ) || k && k != B - 1 || ( M = ( g = k ? r [ k - 1 ] . node : z . getItem ( k + 1 ) ) && ( ! a ( g ) || ! g . is ( "br" ) ) , g = g && a ( g ) && l . $block [ g . getName ( ) ] ) , - 1 != H || h || ( H = k ) , h || ( I = k ) , r . push ( { isElement : 1 ,
isLineBreak : M , isBlock : e . isBlockBoundary ( ) , hasBlockSibling : g , node : e , name : f , allowed : h } ) , g = M = 0 ) ) : r . push ( { isElement : 0 , node : e , allowed : 1 } ) ; - 1 < H && ( r [ H ] . firstNotAllowed = 1 ) ; - 1 < I && ( r [ I ] . lastNotAllowed = 1 ) ; return r } function d ( b , c ) { var e = [ ] , g = b . getChildren ( ) , f = g . count ( ) , r , h = 0 , k = l [ c ] , z = ! b . is ( l . $inline ) || b . is ( "br" ) ; for ( z && e . push ( " " ) ; h < f ; h ++ ) r = g . getItem ( h ) , a ( r ) && ! r . is ( k ) ? e = e . concat ( d ( r , c ) ) : e . push ( r ) ; z && 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 ( l . $removeEmpty ) || b . is ( "a" ) && ! b . isBlockBoundary ( ) ) } function h ( b , c , d , e ) { var g = b . clone ( ) , f , t ; g . setEndAt ( c , CKEDITOR . POSITION _BEFORE _END ) ; ( f = ( new CKEDITOR . dom . walker ( g ) ) . next ( ) ) && a ( f ) && r [ f . getName ( ) ] && ( t = f . getPrevious ( ) ) && a ( t ) && ! t . getParent ( ) . equals ( b . startContainer ) && d . contains ( t ) && e . contains ( f ) && f . isIdentical ( t ) && ( f . moveChildren ( t ) , f . remove ( ) , h ( b , c , d , e ) ) } function k ( b , c ) { function d ( b , c ) { if ( c . isBlock && c . isElement && ! c . node . is ( "br" ) && a ( b ) && b . is ( "br" ) ) return b . remove ( ) , 1 } var e = c . endContainer . getChild ( c . endOffset ) ,
g = c . endContainer . getChild ( c . endOffset - 1 ) ; e && d ( e , b [ b . length - 1 ] ) ; g && d ( g , b [ 0 ] ) && ( c . setEnd ( c . endContainer , c . endOffset - 1 ) , c . collapse ( ) ) } var l = CKEDITOR . dtd , r = { p : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , ul : 1 , ol : 1 , li : 1 , pre : 1 , dl : 1 , blockquote : 1 } , I = { p : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 } , M = CKEDITOR . tools . extend ( { } , l . $inline ) ; delete M . br ; return function ( r , D , R , p ) { var x = r . editor , v = ! 1 , y ; "unfiltered_html" == D && ( D = "html" , v = ! 0 ) ; if ( ! p . checkReadOnly ( ) ) { var A = ( new CKEDITOR . dom . elementPath ( p . startContainer , p . root ) ) . blockLimit ||
p . root ; D = { type : D , dontFilter : v , editable : r , editor : x , range : p , blockLimit : A , mergeCandidates : [ ] , zombies : [ ] } ; var v = D . range , A = D . mergeCandidates , u = "html" === D . type , w , T , F , W , K ; "text" == D . type && v . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 , ! 1 ) && ( T = CKEDITOR . dom . element . createFromHtml ( "\x3cspan\x3e\x26nbsp;\x3c/span\x3e" , v . document ) , v . insertNode ( T ) , v . setStartAfter ( T ) ) ; F = new CKEDITOR . dom . elementPath ( v . startContainer ) ; D . endPath = W = new CKEDITOR . dom . elementPath ( v . endContainer ) ; if ( ! v . collapsed ) { w = W . block || W . blockLimit ; var Z = v . getCommonAncestor ( ) ;
g = c . endContainer . getChild ( c . endOffset - 1 ) ; e && d ( e , b [ b . length - 1 ] ) ; g && d ( g , b [ 0 ] ) && ( c . setEnd ( c . endContainer , c . endOffset - 1 ) , c . collapse ( ) ) } var l = CKEDITOR . dtd , r = { p : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , ul : 1 , ol : 1 , li : 1 , pre : 1 , dl : 1 , blockquote : 1 } , I = { p : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 } , M = CKEDITOR . tools . extend ( { } , l . $inline ) ; delete M . br ; return function ( r , D , R , q ) { var x = r . editor , v = ! 1 , y ; "unfiltered_html" == D && ( D = "html" , v = ! 0 ) ; if ( ! q . checkReadOnly ( ) ) { var A = ( new CKEDITOR . dom . elementPath ( q . startContainer , q . root ) ) . blockLimit ||
q . root ; D = { type : D , dontFilter : v , editable : r , editor : x , range : q , blockLimit : A , mergeCandidates : [ ] , zombies : [ ] } ; var v = D . range , A = D . mergeCandidates , u = "html" === D . type , w , T , F , W , K ; "text" == D . type && v . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 , ! 1 ) && ( T = CKEDITOR . dom . element . createFromHtml ( "\x3cspan\x3e\x26nbsp;\x3c/span\x3e" , v . document ) , v . insertNode ( T ) , v . setStartAfter ( T ) ) ; F = new CKEDITOR . dom . elementPath ( v . startContainer ) ; D . endPath = W = new CKEDITOR . dom . elementPath ( v . endContainer ) ; if ( ! v . collapsed ) { w = W . block || W . blockLimit ; var Z = v . getCommonAncestor ( ) ;
w && ! w . equals ( Z ) && ! w . contains ( Z ) && v . checkEndOfBlock ( ) && D . zombies . push ( w ) ; v . deleteContents ( ) } for ( ; ( K = e ( v ) ) && a ( K ) && K . isBlockBoundary ( ) && F . contains ( K ) ; ) v . moveToPosition ( K , CKEDITOR . POSITION _BEFORE _END ) ; h ( v , D . blockLimit , F , W ) ; T && ( v . setEndBefore ( T ) , v . collapse ( ) , T . remove ( ) ) ; T = v . startPath ( ) ; if ( w = T . contains ( f , ! 1 , 1 ) ) y = v . splitElement ( w ) , D . inlineStylesRoot = w , D . inlineStylesPeak = T . lastElement ; T = v . createBookmark ( ) ; u && ( g ( w ) , g ( y ) ) ; ( w = T . startNode . getPrevious ( c ) ) && a ( w ) && f ( w ) && A . push ( w ) ; ( w = T . startNode . getNext ( c ) ) && a ( w ) &&
f ( w ) && A . push ( w ) ; for ( w = T . startNode ; ( w = w . getParent ( ) ) && f ( w ) ; ) A . push ( w ) ; v . moveToBookmark ( T ) ; y = r . getHtml ( ) ; y = "" === y || y . match ( L ) ; x . enterMode === CKEDITOR . ENTER _DIV && y && ( ( x = r . getFirst ( ) ) && x . remove ( ) , p . setStartAt ( r , CKEDITOR . POSITION _AFTER _START ) , p . collapse ( ! 0 ) ) ; if ( r = R ) { r = D . range ; if ( "text" == D . type && D . inlineStylesRoot ) { p = D . inlineStylesPeak ; x = p . getDocument ( ) . createText ( "{cke-peak}" ) ; for ( y = D . inlineStylesRoot . getParent ( ) ; ! p . equals ( y ) ; ) x = x . appendTo ( p . clone ( ) ) , p = p . getParent ( ) ; R = x . getOuterHtml ( ) . split ( "{cke-peak}" ) . join ( R ) } p =
D . blockLimit . getName ( ) ; if ( /^\s+|\s+$/ . test ( R ) && "span" in CKEDITOR . dtd [ p ] ) { var J = '\x3cspan data-cke-marker\x3d"1"\x3e\x26nbsp;\x3c/span\x3e' ; R = J + R + J } R = D . editor . dataProcessor . toHtml ( R , { context : null , fixForBody : ! 1 , protectedWhitespaces : ! ! J , dontFilter : D . dontFilter , filter : D . editor . activeFilter , enterMode : D . editor . activeEnterMode } ) ; p = r . document . createElement ( "body" ) ; p . setHtml ( R ) ; J && ( p . getFirst ( ) . remove ( ) , p . getLast ( ) . remove ( ) ) ; if ( ( J = r . startPath ( ) . block ) && ( 1 != J . getChildCount ( ) || ! J . getBogus ( ) ) ) a : { var Q ; if ( 1 ==
p . getChildCount ( ) && a ( Q = p . getFirst ( ) ) && Q . is ( I ) && ! Q . hasAttribute ( "contenteditable" ) ) { J = Q . getElementsByTag ( "*" ) ; r = 0 ; for ( y = J . count ( ) ; r < y ; r ++ ) if ( x = J . getItem ( r ) , ! x . is ( M ) ) break a ; Q . moveChildren ( Q . getParent ( 1 ) ) ; Q . remove ( ) } } D . dataWrapper = p ; r = R } if ( r ) { Q = D . range ; r = Q . document ; p = D . blockLimit ; y = 0 ; var G , J = [ ] , ca , P ; R = T = 0 ; var U , x = Q . startContainer ; K = D . endPath . elements [ 0 ] ; var S , v = K . getPosition ( x ) , A = ! ! K . getCommonAncestor ( x ) && v != CKEDITOR . POSITION _IDENTICAL && ! ( v & CKEDITOR . POSITION _CONTAINS + CKEDITOR . POSITION _IS _CONTAINED ) ,
x = b ( D . dataWrapper , D ) ; for ( D . editor . enterMode !== CKEDITOR . ENTER _BR && k ( x , Q ) ; y < x . length ; y ++ ) { v = x [ y ] ; if ( u = v . isLineBreak ) u = Q , w = p , W = F = void 0 , v . hasBlockSibling ? u = 1 : ( F = u . startContainer . getAscendant ( l . $block , 1 ) ) && F . is ( { div : 1 , p : 1 } ) ? ( W = F . getPosition ( w ) , W == CKEDITOR . POSITION _IDENTICAL || W == CKEDITOR . POSITION _CONTAINS ? u = 0 : ( w = u . splitElement ( F ) , u . moveToPosition ( w , CKEDITOR . POSITION _AFTER _START ) , u = 1 ) ) : u = 0 ; if ( u ) R = 0 < y ; else { u = Q . startPath ( ) ; ! v . isBlock && q ( D . editor , u . block , u . blockLimit ) && ( P = m ( D . editor ) ) && ( P = r . createElement ( P ) ,
P . appendBogus ( ) , Q . insertNode ( P ) , CKEDITOR . env . needsBrFiller && ( G = P . getBogus ( ) ) && G . remove ( ) , Q . moveToPosition ( P , CKEDITOR . POSITION _BEFORE _END ) ) ; if ( ( u = Q . startPath ( ) . block ) && ! u . equals ( ca ) ) { if ( G = u . getBogus ( ) ) G . remove ( ) , J . push ( u ) ; ca = u } v . firstNotAllowed && ( T = 1 ) ; if ( T && v . isElement ) { u = Q . startContainer ; for ( w = null ; u && ! l [ u . getName ( ) ] [ v . name ] ; ) { if ( u . equals ( p ) ) { u = null ; break } w = u ; u = u . getParent ( ) } if ( u ) w && ( U = Q . splitElement ( w ) , D . zombies . push ( U ) , D . zombies . push ( w ) ) ; else { w = p . getName ( ) ; S = ! y ; u = y == x . length - 1 ; w = d ( v . node , w ) ; F = [ ] ;
f ( w ) && A . push ( w ) ; for ( w = T . startNode ; ( w = w . getParent ( ) ) && f ( w ) ; ) A . push ( w ) ; v . moveToBookmark ( T ) ; y = r . getHtml ( ) ; y = "" === y || y . match ( L ) ; x . enterMode === CKEDITOR . ENTER _DIV && y && ( ( x = r . getFirst ( ) ) && x . remove ( ) , q . setStartAt ( r , CKEDITOR . POSITION _AFTER _START ) , q . collapse ( ! 0 ) ) ; if ( r = R ) { r = D . range ; if ( "text" == D . type && D . inlineStylesRoot ) { q = D . inlineStylesPeak ; x = q . getDocument ( ) . createText ( "{cke-peak}" ) ; for ( y = D . inlineStylesRoot . getParent ( ) ; ! q . equals ( y ) ; ) x = x . appendTo ( q . clone ( ) ) , q = q . getParent ( ) ; R = x . getOuterHtml ( ) . split ( "{cke-peak}" ) . join ( R ) } q =
D . blockLimit . getName ( ) ; if ( /^\s+|\s+$/ . test ( R ) && "span" in CKEDITOR . dtd [ q ] ) { var J = '\x3cspan data-cke-marker\x3d"1"\x3e\x26nbsp;\x3c/span\x3e' ; R = J + R + J } R = D . editor . dataProcessor . toHtml ( R , { context : null , fixForBody : ! 1 , protectedWhitespaces : ! ! J , dontFilter : D . dontFilter , filter : D . editor . activeFilter , enterMode : D . editor . activeEnterMode } ) ; q = r . document . createElement ( "body" ) ; q . setHtml ( R ) ; J && ( q . getFirst ( ) . remove ( ) , q . getLast ( ) . remove ( ) ) ; if ( ( J = r . startPath ( ) . block ) && ( 1 != J . getChildCount ( ) || ! J . getBogus ( ) ) ) a : { var Q ; if ( 1 ==
q . getChildCount ( ) && a ( Q = q . getFirst ( ) ) && Q . is ( I ) && ! Q . hasAttribute ( "contenteditable" ) ) { J = Q . getElementsByTag ( "*" ) ; r = 0 ; for ( y = J . count ( ) ; r < y ; r ++ ) if ( x = J . getItem ( r ) , ! x . is ( M ) ) break a ; Q . moveChildren ( Q . getParent ( 1 ) ) ; Q . remove ( ) } } D . dataWrapper = q ; r = R } if ( r ) { Q = D . range ; r = Q . document ; q = D . blockLimit ; y = 0 ; var G , J = [ ] , ca , P ; R = T = 0 ; var U , x = Q . startContainer ; K = D . endPath . elements [ 0 ] ; var S , v = K . getPosition ( x ) , A = ! ! K . getCommonAncestor ( x ) && v != CKEDITOR . POSITION _IDENTICAL && ! ( v & CKEDITOR . POSITION _CONTAINS + CKEDITOR . POSITION _IS _CONTAINED ) ,
x = b ( D . dataWrapper , D ) ; for ( D . editor . enterMode !== CKEDITOR . ENTER _BR && k ( x , Q ) ; y < x . length ; y ++ ) { v = x [ y ] ; if ( u = v . isLineBreak ) u = Q , w = q , W = F = void 0 , v . hasBlockSibling ? u = 1 : ( F = u . startContainer . getAscendant ( l . $block , 1 ) ) && F . is ( { div : 1 , p : 1 } ) ? ( W = F . getPosition ( w ) , W == CKEDITOR . POSITION _IDENTICAL || W == CKEDITOR . POSITION _CONTAINS ? u = 0 : ( w = u . splitElement ( F ) , u . moveToPosition ( w , CKEDITOR . POSITION _AFTER _START ) , u = 1 ) ) : u = 0 ; if ( u ) R = 0 < y ; else { u = Q . startPath ( ) ; ! v . isBlock && p ( D . editor , u . block , u . blockLimit ) && ( P = m ( D . editor ) ) && ( P = r . createElement ( P ) ,
P . appendBogus ( ) , Q . insertNode ( P ) , CKEDITOR . env . needsBrFiller && ( G = P . getBogus ( ) ) && G . remove ( ) , Q . moveToPosition ( P , CKEDITOR . POSITION _BEFORE _END ) ) ; if ( ( u = Q . startPath ( ) . block ) && ! u . equals ( ca ) ) { if ( G = u . getBogus ( ) ) G . remove ( ) , J . push ( u ) ; ca = u } v . firstNotAllowed && ( T = 1 ) ; if ( T && v . isElement ) { u = Q . startContainer ; for ( w = null ; u && ! l [ u . getName ( ) ] [ v . name ] ; ) { if ( u . equals ( q ) ) { u = null ; break } w = u ; u = u . getParent ( ) } if ( u ) w && ( U = Q . splitElement ( w ) , D . zombies . push ( U ) , D . zombies . push ( w ) ) ; else { w = q . getName ( ) ; S = ! y ; u = y == x . length - 1 ; w = d ( v . node , w ) ; F = [ ] ;
W = w . length ; for ( var Z = 0 , Y = void 0 , da = 0 , fa = - 1 ; Z < W ; Z ++ ) Y = w [ Z ] , " " == Y ? ( da || S && ! Z || ( F . push ( new CKEDITOR . dom . text ( " " ) ) , fa = F . length ) , da = 1 ) : ( F . push ( Y ) , da = 0 ) ; u && fa == F . length && F . pop ( ) ; S = F } } if ( S ) { for ( ; u = S . pop ( ) ; ) Q . insertNode ( u ) ; S = 0 } else Q . insertNode ( v . node ) ; v . lastNotAllowed && y < x . length - 1 && ( ( U = A ? K : U ) && Q . setEndAt ( U , CKEDITOR . POSITION _AFTER _START ) , T = 0 ) ; Q . collapse ( ) } } 1 != x . length ? G = ! 1 : ( G = x [ 0 ] , G = G . isElement && "false" == G . node . getAttribute ( "contenteditable" ) ) ; G && ( R = ! 0 , u = x [ 0 ] . node , Q . setStartAt ( u , CKEDITOR . POSITION _BEFORE _START ) ,
Q . setEndAt ( u , CKEDITOR . POSITION _AFTER _END ) ) ; D . dontMoveCaret = R ; D . bogusNeededBlocks = J } G = D . range ; var ba ; S = D . bogusNeededBlocks ; for ( ca = G . createBookmark ( ) ; P = D . zombies . pop ( ) ; ) P . getParent ( ) && ( U = G . clone ( ) , U . moveToElementEditStart ( P ) , U . removeEmptyBlocksAtEnd ( ) ) ; if ( S ) for ( ; P = S . pop ( ) ; ) CKEDITOR . env . needsBrFiller ? P . appendBogus ( ) : P . append ( G . document . createText ( " " ) ) ; for ( ; P = D . mergeCandidates . pop ( ) ; ) P . mergeSiblings ( ) ; CKEDITOR . env . webkit && G . startPath ( ) && ( P = G . startPath ( ) , P . block ? P . block . $ . normalize ( ) : P . blockLimit && P . blockLimit . $ . normalize ( ) ) ;
G . moveToBookmark ( ca ) ; if ( ! D . dontMoveCaret ) { for ( P = e ( G ) ; P && a ( P ) && ! P . is ( l . $empty ) ; ) { if ( P . isBlockBoundary ( ) ) G . moveToPosition ( P , CKEDITOR . POSITION _BEFORE _END ) ; else { if ( f ( P ) && P . getHtml ( ) . match ( /(\s| )$/g ) ) { ba = null ; break } ba = G . clone ( ) ; ba . moveToPosition ( P , CKEDITOR . POSITION _BEFORE _END ) } P = P . getLast ( c ) } ba && G . moveToRange ( ba ) } } } } ( ) ; J = function ( ) { function a ( b ) { b = new CKEDITOR . dom . walker ( b ) ; b . guard = function ( a , b ) { if ( b ) return ! 1 ; if ( a . type == CKEDITOR . NODE _ELEMENT ) return a . is ( CKEDITOR . dtd . $tableContent ) } ; b . evaluator = function ( a ) { return a . type ==
CKEDITOR . NODE _ELEMENT } ; return b } function b ( a , c , d ) { c = a . getDocument ( ) . createElement ( c ) ; a . append ( c , d ) ; return c } function c ( a ) { var b = a . count ( ) , d ; for ( b ; 0 < b -- ; ) d = a . getItem ( b ) , CKEDITOR . tools . trim ( d . getHtml ( ) ) || ( d . appendBogus ( ) , CKEDITOR . env . ie && 9 > CKEDITOR . env . version && d . getChildCount ( ) && d . getFirst ( ) . remove ( ) ) } return function ( d ) { var e = d . startContainer , g = e . getAscendant ( "table" , 1 ) , f = ! 1 ; c ( g . getElementsByTag ( "td" ) ) ; c ( g . getElementsByTag ( "th" ) ) ; g = d . clone ( ) ; g . setStart ( e , 0 ) ; g = a ( g ) . lastBackward ( ) ; g || ( g = d . clone ( ) , g . setEndAt ( e ,
CKEDITOR . POSITION _BEFORE _END ) , g = a ( g ) . lastForward ( ) , f = ! 0 ) ; g || ( g = e ) ; g . is ( "table" ) ? ( d . setStartAt ( g , CKEDITOR . POSITION _BEFORE _START ) , d . collapse ( ! 0 ) , g . remove ( ) ) : ( g . is ( { tbody : 1 , thead : 1 , tfoot : 1 } ) && ( g = b ( g , "tr" , f ) ) , g . is ( "tr" ) && ( g = b ( g , g . getParent ( ) . is ( "thead" ) ? "th" : "td" , f ) ) , ( e = g . getBogus ( ) ) && e . remove ( ) , d . moveToPosition ( g , f ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _BEFORE _END ) ) } } ( ) ; G = function ( ) { function a ( b ) { b = new CKEDITOR . dom . walker ( b ) ; b . guard = function ( a , b ) { if ( b ) return ! 1 ; if ( a . type == CKEDITOR . NODE _ELEMENT ) return a . is ( CKEDITOR . dtd . $list ) ||
a . is ( CKEDITOR . dtd . $listItem ) } ; b . evaluator = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . is ( CKEDITOR . dtd . $listItem ) } ; return b } return function ( b ) { var c = b . startContainer , d = ! 1 , e ; e = b . clone ( ) ; e . setStart ( c , 0 ) ; e = a ( e ) . lastBackward ( ) ; e || ( e = b . clone ( ) , e . setEndAt ( c , CKEDITOR . POSITION _BEFORE _END ) , e = a ( e ) . lastForward ( ) , d = ! 0 ) ; e || ( e = c ) ; e . is ( CKEDITOR . dtd . $list ) ? ( b . setStartAt ( e , CKEDITOR . POSITION _BEFORE _START ) , b . collapse ( ! 0 ) , e . remove ( ) ) : ( ( c = e . getBogus ( ) ) && c . remove ( ) , b . moveToPosition ( e , d ? CKEDITOR . POSITION _AFTER _START :
CKEDITOR . POSITION _BEFORE _END ) , b . select ( ) ) } } ( ) ; p = { eol : { detect : function ( a , b ) { var c = a . range , d = c . clone ( ) , e = c . clone ( ) , g = new CKEDITOR . dom . elementPath ( c . startContainer , b ) , f = new CKEDITOR . dom . elementPath ( c . endContainer , b ) ; d . collapse ( 1 ) ; e . collapse ( ) ; g . block && d . checkBoundaryOfElement ( g . block , CKEDITOR . END ) && ( c . setStartAfter ( g . block ) , a . prependEolBr = 1 ) ; f . block && e . checkBoundaryOfElement ( f . block , CKEDITOR . START ) && ( c . setEndBefore ( f . block ) , a . appendEolBr = 1 ) } , fix : function ( a , b ) { var c = b . getDocument ( ) , d ; a . appendEolBr && ( d =
CKEDITOR . POSITION _BEFORE _END ) , b . select ( ) ) } } ( ) ; q = { eol : { detect : function ( a , b ) { var c = a . range , d = c . clone ( ) , e = c . clone ( ) , g = new CKEDITOR . dom . elementPath ( c . startContainer , b ) , f = new CKEDITOR . dom . elementPath ( c . endContainer , b ) ; d . collapse ( 1 ) ; e . collapse ( ) ; g . block && d . checkBoundaryOfElement ( g . block , CKEDITOR . END ) && ( c . setStartAfter ( g . block ) , a . prependEolBr = 1 ) ; f . block && e . checkBoundaryOfElement ( f . block , CKEDITOR . START ) && ( c . setEndBefore ( f . block ) , a . appendEolBr = 1 ) } , fix : function ( a , b ) { var c = b . getDocument ( ) , d ; a . appendEolBr && ( d =
this . createEolBr ( c ) , a . fragment . append ( d ) ) ; ! a . prependEolBr || d && ! d . getPrevious ( ) || a . fragment . append ( this . createEolBr ( c ) , 1 ) } , createEolBr : function ( a ) { return a . createElement ( "br" , { attributes : { "data-cke-eol" : 1 } } ) } } , bogus : { exclude : function ( a ) { var b = a . range . getBoundaryNodes ( ) , c = b . startNode , b = b . endNode ; ! b || ! l ( b ) || c && c . equals ( b ) || a . range . setEndBefore ( b ) } } , tree : { rebuild : function ( a , b ) { var c = a . range , d = c . getCommonAncestor ( ) , e = new CKEDITOR . dom . elementPath ( d , b ) , g = new CKEDITOR . dom . elementPath ( c . startContainer , b ) ,
c = new CKEDITOR . dom . elementPath ( c . endContainer , b ) , f ; d . type == CKEDITOR . NODE _TEXT && ( d = d . getParent ( ) ) ; if ( e . blockLimit . is ( { tr : 1 , table : 1 } ) ) { var h = e . contains ( "table" ) . getParent ( ) ; f = function ( a ) { return ! a . equals ( h ) } } else if ( e . block && e . block . is ( CKEDITOR . dtd . $listItem ) && ( g = g . contains ( CKEDITOR . dtd . $list ) , c = c . contains ( CKEDITOR . dtd . $list ) , ! g . equals ( c ) ) ) { var r = e . contains ( CKEDITOR . dtd . $list ) . getParent ( ) ; f = function ( a ) { return ! a . equals ( r ) } } f || ( f = function ( a ) { return ! a . equals ( e . block ) && ! a . equals ( e . blockLimit ) } ) ; this . rebuildFragment ( a ,
b , d , f ) } , rebuildFragment : function ( a , b , c , d ) { for ( var e ; c && ! c . equals ( b ) && d ( c ) ; ) e = c . clone ( 0 , 1 ) , a . fragment . appendTo ( e ) , a . fragment = e , c = c . getParent ( ) } } , cell : { shrink : function ( a ) { a = a . range ; var b = a . startContainer , c = a . endContainer , d = a . startOffset , e = a . endOffset ; b . type == CKEDITOR . NODE _ELEMENT && b . equals ( c ) && b . is ( "tr" ) && ++ d == e && a . shrink ( CKEDITOR . SHRINK _TEXT ) } } } ; u = function ( ) { function a ( b , c ) { var d = b . getParent ( ) ; if ( d . is ( CKEDITOR . dtd . $inline ) ) b [ c ? "insertBefore" : "insertAfter" ] ( d ) } function b ( c , d , e ) { a ( d ) ; a ( e , 1 ) ; for ( var g ; g =
@@ -444,25 +444,25 @@ return e===CKEDITOR.POSITION_IDENTICAL?!1:0===(e&d)}var d={td:1,th:1,caption:1};
b . setEndAfter ( g ) , a . purgeTableBookmark = b . createBookmark ( ) ) } } , detectRanges : function ( e , g ) { var f = c ( g , e . bookmark ) , h = f . clone ( ) , k , n , m = f . getCommonAncestor ( ) ; m . is ( CKEDITOR . dtd . $tableContent ) && ! m . is ( d ) && ( m = m . getAscendant ( "table" , ! 0 ) ) ; n = m ; m = new CKEDITOR . dom . elementPath ( f . startContainer , n ) ; n = new CKEDITOR . dom . elementPath ( f . endContainer , n ) ; m = m . contains ( "table" ) ; n = n . contains ( "table" ) ; if ( m || n ) m && n && b ( m , n ) ? ( e . tableSurroundingRange = h , h . setStartAt ( m , CKEDITOR . POSITION _AFTER _END ) , h . setEndAt ( n , CKEDITOR . POSITION _BEFORE _START ) ,
h = f . clone ( ) , h . setEndAt ( m , CKEDITOR . POSITION _AFTER _END ) , k = f . clone ( ) , k . setStartAt ( n , CKEDITOR . POSITION _BEFORE _START ) , k = a ( h ) . concat ( a ( k ) ) ) : m ? n || ( e . tableSurroundingRange = h , h . setStartAt ( m , CKEDITOR . POSITION _AFTER _END ) , f . setEndAt ( m , CKEDITOR . POSITION _AFTER _END ) ) : ( e . tableSurroundingRange = h , h . setEndAt ( n , CKEDITOR . POSITION _BEFORE _START ) , f . setStartAt ( n , CKEDITOR . POSITION _AFTER _START ) ) , e . tableContentsRanges = k ? k : a ( f ) } , deleteRanges : function ( a ) { for ( var b ; b = a . tableContentsRanges . pop ( ) ; ) b . extractContents ( ) , v ( 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 ; q ( a , c . block , c . blockLimit ) && ( d = m ( a ) ) && ( d = b . document . createElement ( d ) , d . appendBogus ( ) , b . insertNode ( d ) , b . moveToPosition ( d , CKEDITOR . POSITION _AFTER _START ) ) } } } ( ) } ) ( ) ;
fixUneditableRangePosition : function ( a ) { a . startContainer . getDtd ( ) [ "#" ] || a . moveToClosestEditablePosition ( null , ! 0 ) } , autoParagraph : function ( a , b ) { var c = b . startPath ( ) , d ; p ( a , c . block , c . blockLimit ) && ( d = m ( a ) ) && ( d = b . document . createElement ( d ) , d . appendBogus ( ) , b . insertNode ( d ) , b . moveToPosition ( d , CKEDITOR . POSITION _AFTER _START ) ) } } } ( ) } ) ( ) ;
( function ( ) { function a ( a ) { return CKEDITOR . plugins . widget && CKEDITOR . plugins . widget . isDomWidget ( a ) } function d ( b , c ) { if ( 0 === b . length || a ( b [ 0 ] . getEnclosedNode ( ) ) ) return ! 1 ; var d , e ; if ( ( d = ! c && 1 === b . length ) && ! ( d = b [ 0 ] . collapsed ) ) { var g = b [ 0 ] ; d = g . startContainer . getAscendant ( { td : 1 , th : 1 } , ! 0 ) ; var f = g . endContainer . getAscendant ( { td : 1 , th : 1 } , ! 0 ) ; e = CKEDITOR . tools . trim ; d && d . equals ( f ) && ! d . findOne ( "td, th, tr, tbody, table" ) ? ( g = g . cloneContents ( ) , d = g . getFirst ( ) ? e ( g . getFirst ( ) . getText ( ) ) !== e ( d . getText ( ) ) : ! 0 ) : d = ! 1 } if ( d ) return ! 1 ;
for ( e = 0 ; e < b . length ; e ++ ) if ( d = b [ e ] . _getTableElement ( ) , ! d ) return ! 1 ; return ! 0 } function b ( a ) { function b ( a ) { a = a . find ( "td, th" ) ; var c = [ ] , d ; for ( d = 0 ; d < a . count ( ) ; d ++ ) c . push ( a . getItem ( d ) ) ; return c } var c = [ ] , d , e ; for ( e = 0 ; e < a . length ; e ++ ) d = a [ e ] . _getTableElement ( ) , d . is && d . is ( { td : 1 , th : 1 } ) ? c . push ( d ) : c = c . concat ( b ( d ) ) ; return c } function c ( a ) { a = b ( a ) ; var c = "" , d = [ ] , e , g ; for ( g = 0 ; g < a . length ; g ++ ) e && ! e . equals ( a [ g ] . getAscendant ( "tr" ) ) ? ( c += d . join ( "\t" ) + "\n" , e = a [ g ] . getAscendant ( "tr" ) , d = [ ] ) : 0 === g && ( e = a [ g ] . getAscendant ( "tr" ) ) , d . push ( a [ g ] . getText ( ) ) ;
return c += d . join ( "\t" ) } function f ( a ) { var b = this . root . editor , d = b . getSelection ( 1 ) ; this . reset ( ) ; G = ! 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 = L ++ ; b . _ . fakeSelection = this ; G = ! 1 ; this . root . fire ( "selectionchange" ) } function e ( ) { var b = this . _ . fakeSelection , c ; if ( b ) { c = this . getSelection ( 1 ) ;
var e ; if ( ! ( e = ! c ) && ( e = ! c . isHidden ( ) ) ) { e = b ; var g = c . getRanges ( ) , f = e . getRanges ( ) , h = g . length && g [ 0 ] . _getTableElement ( ) && g [ 0 ] . _getTableElement ( ) . getAscendant ( "table" , ! 0 ) , k = f . length && f [ 0 ] . _getTableElement ( ) && f [ 0 ] . _getTableElement ( ) . getAscendant ( "table" , ! 0 ) , m = 1 === g . length && g [ 0 ] . _getTableElement ( ) && g [ 0 ] . _getTableElement ( ) . is ( "table" ) , M = 1 === f . length && f [ 0 ] . _getTableElement ( ) && f [ 0 ] . _getTableElement ( ) . is ( "table" ) ; if ( a ( e . getSelectedElement ( ) ) ) e = ! 1 ; else { var n = 1 === g . length && g [ 0 ] . collapsed , f = d ( g , ! ! CKEDITOR . env . webkit ) &&
d ( f ) ; h = h && k ? h . equals ( k ) || k . contains ( h ) : ! 1 ; h && ( n || f ) ? ( m && ! M && e . selectRanges ( g ) , e = ! 0 ) : e = ! 1 } e = ! e } e && ( b . reset ( ) , b = 0 ) } if ( ! b && ( b = c || this . getSelection ( 1 ) , ! b || b . getType ( ) == CKEDITOR . SELECTION _NONE ) ) return ; this . fire ( "selectionCheck" , b ) ; c = this . elementPath ( ) ; c . compare ( this . _ . selectionPreviousPath ) || ( e = this . _ . selectionPreviousPath && this . _ . selectionPreviousPath . blockLimit . equals ( c . blockLimit ) , ! CKEDITOR . env . webkit && ! CKEDITOR . env . gecko || e || ( this . _ . previousActive = this . document . getActive ( ) ) , this . _ . selectionPreviousPath =
c , this . fire ( "selectionChange" , { selection : b , path : c } ) ) } function k ( ) { u = ! 0 ; p || ( h . call ( this ) , p = CKEDITOR . tools . setTimeout ( h , 200 , this ) ) } function h ( ) { p = null ; u && ( CKEDITOR . tools . setTimeout ( e , 0 , this ) , u = ! 1 ) } function q ( a ) { return K ( a ) || a . type == CKEDITOR . NODE _ELEMENT && ! a . is ( CKEDITOR . dtd . $empty ) ? ! 0 : ! 1 } function m ( 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 ( q ,
null , c ) , e = a . getNextNode ( q , null , c ) ; return b ( d ) || b ( e , 1 ) || ! ( d || e || c . type == CKEDITOR . NODE _ELEMENT && c . isBlockBoundary ( ) && c . getBogus ( ) ) ? ! 0 : ! 1 } function g ( a ) { x ( a , ! 1 ) ; var b = a . getDocument ( ) . createText ( w ) ; 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 ) , g = w . length ; if ( c . getLength ( ) > g && e && e . intersectsNode ( c . $ ) ) { var f = [ { node : d . anchorNode , offset : d . anchorOffset } ,
c , this . fire ( "selectionChange" , { selection : b , path : c } ) ) } function k ( ) { u = ! 0 ; q || ( h . call ( this ) , q = CKEDITOR . tools . setTimeout ( h , 200 , this ) ) } function h ( ) { q = null ; u && ( CKEDITOR . tools . setTimeout ( e , 0 , this ) , u = ! 1 ) } function p ( a ) { return K ( a ) || a . type == CKEDITOR . NODE _ELEMENT && ! a . is ( CKEDITOR . dtd . $empty ) ? ! 0 : ! 1 } function m ( 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 ( p ,
null , c ) , e = a . getNextNode ( p , null , c ) ; return b ( d ) || b ( e , 1 ) || ! ( d || e || c . type == CKEDITOR . NODE _ELEMENT && c . isBlockBoundary ( ) && c . getBogus ( ) ) ? ! 0 : ! 1 } function g ( a ) { x ( a , ! 1 ) ; var b = a . getDocument ( ) . createText ( w ) ; 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 ) , g = w . length ; if ( c . getLength ( ) > g && e && e . intersectsNode ( c . $ ) ) { var f = [ { node : d . anchorNode , offset : d . anchorOffset } ,
{ node : d . focusNode , offset : d . focusOffset } ] ; d . anchorNode == c . $ && d . anchorOffset > g && ( f [ 0 ] . offset -= g ) ; d . focusNode == c . $ && d . focusOffset > g && ( f [ 1 ] . offset -= g ) } } c . setText ( y ( c . getText ( ) , 1 ) ) ; f && ( c = a . getDocument ( ) . $ , d = c . getSelection ( ) , c = c . createRange ( ) , c . setStart ( f [ 0 ] . node , f [ 0 ] . offset ) , c . collapse ( ! 0 ) , d . removeAllRanges ( ) , d . addRange ( c ) , d . extend ( f [ 1 ] . node , f [ 1 ] . offset ) ) } } function y ( a , b ) { return b ? a . replace ( J , function ( a , b ) { return b ? " " : "" } ) : a . replace ( w , "" ) } function A ( a , b ) { var c = b && CKEDITOR . tools . htmlEncode ( b ) || "\x26nbsp;" ,
c = CKEDITOR . dom . element . createFromHtml ( '\x3cdiv data-cke-hidden-sel\x3d"1" data-cke-temp\x3d"1" style\x3d"' + ( CKEDITOR . env . ie && 14 > CKEDITOR . env . version ? "display:none" : "position:fixed;top:0;left:-1000px;width:0;height:0;overflow:hidden;" ) + '"\x3e' + c + "\x3c/div\x3e" , a . document ) ; a . fire ( "lockSnapshot" ) ; a . editable ( ) . append ( c ) ; var d = a . getSelection ( 1 ) , e = a . createRange ( ) , g = d . root . on ( "selectionchange" , function ( a ) { a . cancel ( ) } , null , null , 0 ) ; e . setStartAt ( c , CKEDITOR . POSITION _AFTER _START ) ; e . setEndAt ( c , CKEDITOR . POSITION _BEFORE _END ) ;
d . selectRanges ( [ e ] ) ; g . removeListener ( ) ; a . fire ( "unlockSnapshot" ) ; a . _ . hiddenSelectionContainer = c } function F ( a ) { var b = { 37 : 1 , 39 : 1 , 8 : 1 , 46 : 1 } ; return function ( c ) { var d = c . data . getKeystroke ( ) ; if ( b [ d ] ) { var e = a . getSelection ( ) , g = e . getRanges ( ) [ 0 ] ; e . isCollapsed ( ) && ( g = g [ 38 > d ? "getPreviousEditableNode" : "getNextEditableNode" ] ( ) ) && g . type == CKEDITOR . NODE _ELEMENT && "false" == g . getAttribute ( "contenteditable" ) && ( e = e . getStartElement ( ) , ! e . isBlockBoundary ( ) || "" !== ( void 0 === e . $ . textContent ? e . $ . innerText : e . $ . textContent ) || 8 !==
d && 46 !== d || ( e . remove ( ) , a . fire ( "saveSnapshot" ) ) , a . getSelection ( ) . fake ( g ) , c . data . preventDefault ( ) , c . cancel ( ) ) } } } function v ( a ) { for ( var b = 0 ; b < a . length ; b ++ ) { var c = a [ b ] ; c . getCommonAncestor ( ) . isReadOnly ( ) && a . splice ( b , 1 ) ; if ( ! c . collapsed ) { if ( c . startContainer . isReadOnly ( ) ) for ( var d = c . startContainer , e ; d && ! ( ( e = d . type == CKEDITOR . NODE _ELEMENT ) && d . is ( "body" ) || ! d . isReadOnly ( ) ) ; ) e && "false" == d . getAttribute ( "contentEditable" ) && c . setStartAfter ( d ) , d = d . getParent ( ) ; d = c . startContainer ; e = c . endContainer ; var g = c . startOffset ,
d . selectRanges ( [ e ] ) ; g . removeListener ( ) ; a . fire ( "unlockSnapshot" ) ; a . _ . hiddenSelectionContainer = c } function F ( b ) { var c = { 37 : 1 , 39 : 1 , 8 : 1 , 46 : 1 } ; return function ( d ) { var e = d . data . getKeystroke ( ) ; if ( c [ e ] ) { var g = b . getSelection ( ) , f = g . getRanges ( ) [ 0 ] ; g . isCollapsed ( ) && ( f = f [ 38 > e ? "getPreviousEditableNode" : "getNextEditableNode" ] ( ) ) && f . type == CKEDITOR . NODE _ELEMENT && "false" == f . getAttribute ( "contenteditable" ) && ( g = g . getStartElement ( ) , ! g . isBlockBoundary ( ) || "" !== ( void 0 === g . $ . textContent ? g . $ . innerText : g . $ . textContent ) || a ( g . getFirst ( ) ) ||
8 !== e && 46 !== e || ( g . remove ( ) , b . fire ( "saveSnapshot" ) ) , b . getSelection ( ) . fake ( f ) , d . data . preventDefault ( ) , d . cancel ( ) ) } } } function v ( a ) { for ( var b = 0 ; b < a . length ; b ++ ) { var c = a [ b ] ; c . getCommonAncestor ( ) . isReadOnly ( ) && a . splice ( b , 1 ) ; if ( ! c . collapsed ) { if ( c . startContainer . isReadOnly ( ) ) for ( var d = c . startContainer , e ; d && ! ( ( e = d . type == CKEDITOR . NODE _ELEMENT ) && d . is ( "body" ) || ! d . isReadOnly ( ) ) ; ) e && "false" == d . getAttribute ( "contentEditable" ) && c . setStartAfter ( d ) , d = d . getParent ( ) ; d = c . startContainer ; e = c . endContainer ; var g = c . startOffset ,
f = c . endOffset , h = c . clone ( ) ; d && d . type == CKEDITOR . NODE _TEXT && ( g >= d . getLength ( ) ? h . setStartAfter ( d ) : h . setStartBefore ( d ) ) ; e && e . type == CKEDITOR . NODE _TEXT && ( f ? h . setEndAfter ( e ) : h . setEndBefore ( e ) ) ; d = new CKEDITOR . dom . walker ( h ) ; d . evaluator = function ( d ) { if ( d . type == CKEDITOR . NODE _ELEMENT && d . isReadOnly ( ) ) { var e = c . clone ( ) ; c . setEndBefore ( d ) ; c . collapsed && a . splice ( b -- , 1 ) ; d . getPosition ( h . endContainer ) & CKEDITOR . POSITION _CONTAINS || ( e . setStartAfter ( d ) , e . collapsed || a . splice ( b + 1 , 0 , e ) ) ; return ! 0 } return ! 1 } ; d . next ( ) } } return a } var l =
"function" != typeof window . getSelection , L = 1 , w = CKEDITOR . tools . repeat ( " " , 7 ) , J = new RegExp ( w + "( )?" , "g" ) , G , p , u , K = CKEDITOR . dom . walker . invisible ( 1 ) , E = 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 ( ) { p = new CKEDITOR . dom . selection ( c . getSelection ( ) ) ; p . lock ( ) } function b ( ) { h . removeListener ( "mouseup" ,
"function" != typeof window . getSelection , L = 1 , w = CKEDITOR . tools . repeat ( " " , 7 ) , J = new RegExp ( w + "( )?" , "g" ) , G , q , u , K = CKEDITOR . dom . walker . invisible ( 1 ) , E = 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 ( ) { q = new CKEDITOR . dom . selection ( c . getSelection ( ) ) ; q . 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 == f . $ && c . select ( ) } function d ( a ) { var b , c ; b = ( b = this . document . getActive ( ) ) ? "input" === b . getName ( ) || "textarea" === b . getName ( ) : ! 1 ; b || ( b = this . getSelection ( 1 ) , ( c = g ( b ) ) && ! c . equals ( n ) && ( b . selectElement ( c ) , a . data . preventDefault ( ) ) ) } function g ( a ) { a = a . getRanges ( ) [ 0 ] ; return a ? ( a = a . startContainer . getAscendant ( function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "contenteditable" ) } ,
! 0 ) ) && "false" === a . getAttribute ( "contenteditable" ) ? a : null : null } var f = c . document , h = CKEDITOR . document , n = c . editable ( ) , t = f . getBody ( ) , m = f . getDocumentElement ( ) , B = n . isInline ( ) , q , p ; CKEDITOR . env . gecko && n . attachListener ( n , "focus" , function ( a ) { a . removeListener ( ) ; 0 !== q && ( a = c . getSelection ( ) . getNative ( ) ) && a . isCollapsed && a . anchorNode == n . $ && ( a = c . createRange ( ) , a . moveToElementEditStart ( n ) , a . select ( ) ) } , null , null , - 2 ) ; n . attachListener ( n , CKEDITOR . env . webkit || CKEDITOR . env . gecko ? "focusin" : "focus" , function ( ) { if ( q && ( CKEDITOR . env . webkit ||
CKEDITOR . env . gecko ) ) { q = c . _ . previousActive && c . _ . previousActive . equals ( f . getActive ( ) ) ; var a = null != c . _ . previousScrollTop && c . _ . previousScrollTop != n . $ . scrollTop ; CKEDITOR . env . webkit && q && a && ( n . $ . scrollTop = c . _ . previousScrollTop ) } c . unlockSelection ( q ) ; q = 0 } , null , null , - 1 ) ; n . attachListener ( n , "mousedown" , function ( ) { q = 0 } ) ; if ( CKEDITOR . env . ie || CKEDITOR . env . gecko || B ) l ? n . attachListener ( n , "beforedeactivate" , a , null , null , - 1 ) : n . attachListener ( c , "selectionCheck" , a , null , null , - 1 ) , n . attachListener ( n , CKEDITOR . env . webkit || CKEDITOR . env . gecko ?
"focusout" : "blur" , function ( ) { var a = p && ( p . isFake || 2 > p . getRanges ( ) . length ) ; CKEDITOR . env . gecko && ! B && a || ( c . lockSelection ( p ) , q = 1 ) } , null , null , - 1 ) , n . attachListener ( n , "mousedown" , function ( ) { q = 0 } ) ; if ( CKEDITOR . env . ie && ! B ) { var v ; n . attachListener ( n , "mousedown" , function ( a ) { 2 == a . data . $ . button && ( ( a = c . document . getSelection ( ) ) && a . getType ( ) != CKEDITOR . SELECTION _NONE || ( v = c . window . getScrollPosition ( ) ) ) } ) ; n . attachListener ( n , "mouseup" , function ( a ) { 2 == a . data . $ . button && v && ( c . document . $ . documentElement . scrollLeft = v . x , c . document . $ . documentElement . scrollTop =
! 0 ) ) && "false" === a . getAttribute ( "contenteditable" ) ? a : null : null } var f = c . document , h = CKEDITOR . document , n = c . editable ( ) , t = f . getBody ( ) , m = f . getDocumentElement ( ) , B = n . isInline ( ) , p , q ; CKEDITOR . env . gecko && n . attachListener ( n , "focus" , function ( a ) { a . removeListener ( ) ; 0 !== p && ( a = c . getSelection ( ) . getNative ( ) ) && a . isCollapsed && a . anchorNode == n . $ && ( a = c . createRange ( ) , a . moveToElementEditStart ( n ) , a . select ( ) ) } , null , null , - 2 ) ; n . attachListener ( n , CKEDITOR . env . webkit || CKEDITOR . env . gecko ? "focusin" : "focus" , function ( ) { if ( p && ( CKEDITOR . env . webkit ||
CKEDITOR . env . gecko ) ) { p = c . _ . previousActive && c . _ . previousActive . equals ( f . getActive ( ) ) ; var a = null != c . _ . previousScrollTop && c . _ . previousScrollTop != n . $ . scrollTop ; CKEDITOR . env . webkit && p && a && ( n . $ . scrollTop = c . _ . previousScrollTop ) } c . unlockSelection ( p ) ; p = 0 } , null , null , - 1 ) ; n . attachListener ( n , "mousedown" , function ( ) { p = 0 } ) ; if ( CKEDITOR . env . ie || CKEDITOR . env . gecko || B ) l ? n . attachListener ( n , "beforedeactivate" , a , null , null , - 1 ) : n . attachListener ( c , "selectionCheck" , a , null , null , - 1 ) , n . attachListener ( n , CKEDITOR . env . webkit || CKEDITOR . env . gecko ?
"focusout" : "blur" , function ( ) { var a = q && ( q . isFake || 2 > q . getRanges ( ) . length ) ; CKEDITOR . env . gecko && ! B && a || ( c . lockSelection ( q ) , p = 1 ) } , null , null , - 1 ) , n . attachListener ( n , "mousedown" , function ( ) { p = 0 } ) ; if ( CKEDITOR . env . ie && ! B ) { var v ; n . attachListener ( n , "mousedown" , function ( a ) { 2 == a . data . $ . button && ( ( a = c . document . getSelection ( ) ) && a . getType ( ) != CKEDITOR . SELECTION _NONE || ( v = c . window . getScrollPosition ( ) ) ) } ) ; n . attachListener ( n , "mouseup" , function ( a ) { 2 == a . data . $ . button && v && ( c . document . $ . documentElement . scrollLeft = v . x , c . document . $ . documentElement . scrollTop =
v . y ) ; v = null } ) ; if ( "BackCompat" != f . $ . compatMode ) { if ( CKEDITOR . env . ie7Compat || CKEDITOR . env . ie6Compat ) { var u , w ; m . on ( "mousedown" , function ( a ) { function b ( a ) { a = a . data . $ ; if ( u ) { var c = t . $ . createTextRange ( ) ; try { c . moveToPoint ( a . clientX , a . clientY ) } catch ( d ) { } u . setEndPoint ( 0 > w . compareEndPoints ( "StartToStart" , c ) ? "EndToEnd" : "StartToStart" , c ) ; u . select ( ) } } function c ( ) { m . removeListener ( "mousemove" , b ) ; h . removeListener ( "mouseup" , c ) ; m . removeListener ( "mouseup" , c ) ; u . select ( ) } a = a . data ; if ( a . getTarget ( ) . is ( "html" ) && a . $ . y < m . $ . clientHeight &&
a . $ . x < m . $ . clientWidth ) { u = t . $ . createTextRange ( ) ; try { u . moveToPoint ( a . $ . clientX , a . $ . clientY ) } catch ( d ) { } w = u . 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 ) ) } ) } } n . attachListener ( n , "selectionchange" , e , c ) ; n . attachListener ( n , "keyup" , k , c ) ; n . attachListener ( n , "touchstart" , k , c ) ; n . attachListener ( n , "touchend" , k , c ) ; CKEDITOR . env . ie && n . attachListener ( n ,
"keydown" , d , c ) ; n . attachListener ( n , CKEDITOR . env . webkit || CKEDITOR . env . gecko ? "focusin" : "focus" , function ( ) { c . forceNextSelectionCheck ( ) ; c . selectionChange ( 1 ) } ) ; if ( B && ( CKEDITOR . env . webkit || CKEDITOR . env . gecko ) ) { var y ; n . attachListener ( n , "mousedown" , function ( ) { y = 1 } ) ; n . attachListener ( f . getDocumentElement ( ) , "mouseup" , function ( ) { y && k . call ( c ) ; y = 0 } ) } else n . attachListener ( CKEDITOR . env . ie ? n : f . getDocumentElement ( ) , "mouseup" , k , c ) ; CKEDITOR . env . webkit && n . attachListener ( f , "keydown" , function ( a ) { switch ( a . data . getKey ( ) ) { case 13 : case 33 : case 34 : case 35 : case 36 : case 37 : case 39 : case 8 : case 45 : case 46 : n . hasFocus &&
@@ -475,9 +475,9 @@ this._.savedSelection;return b?(b.unlock(a),delete this._.savedSelection,!0):!1}
new CKEDITOR . dom . node ( e . commonAncestorContainer ) ; else { try { e = a . createRange ( ) } catch ( g ) { } d = e && CKEDITOR . dom . element . get ( e . item && e . item ( 0 ) || e . parentElement ( ) ) } if ( ! d || d . type != CKEDITOR . NODE _ELEMENT && d . type != CKEDITOR . NODE _TEXT || ! this . root . equals ( d ) && ! this . root . contains ( d ) ) this . _ . cache . type = CKEDITOR . SELECTION _NONE , this . _ . cache . startElement = null , this . _ . cache . selectedElement = null , this . _ . cache . selectedText = "" , this . _ . cache . ranges = new CKEDITOR . dom . rangeList ; return this } ; var C = { 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 : g , FILLING _CHAR _SEQUENCE : w } ) ; CKEDITOR . dom . selection . prototype = { getNative : function ( ) { return void 0 !== this . _ . cache . nativeSel ? this . _ . cache . nativeSel : this . _ . cache . nativeSel = l ? this . document . $ . selection : this . document . getWindow ( ) . $ . getSelection ( ) } , getType : l ? 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 && C [ d . childNodes [ c . startOffset ] . nodeName . toLowerCase ( ) ] && ( b = CKEDITOR . SELECTION _ELEMENT ) } return a . type = b } , getRanges : function ( ) { var a = l ? function ( ) { function a ( b ) { return ( new CKEDITOR . dom . node ( b ) ) . getIndex ( ) } var b = function ( b , c ) { b = b . duplicate ( ) ; b . collapse ( c ) ; var d = b . parentElement ( ) ; if ( ! d . hasChildNodes ( ) ) return { container : d , offset : 0 } ; for ( var e = d . children , g , f , h = b . duplicate ( ) , k = 0 , m = e . length - 1 , t = - 1 , l , q ; k <= m ; ) if ( t = Math . floor ( ( k + m ) / 2 ) , g = e [ t ] , h . moveToElementText ( g ) , l = h . compareEndPoints ( "StartToStart" ,
b ) , 0 < l ) m = t - 1 ; else if ( 0 > l ) k = t + 1 ; else return { container : d , offset : a ( g ) } ; if ( - 1 == t || t == e . length - 1 && 0 > l ) { h . moveToElementText ( d ) ; h . setEndPoint ( "StartToStart" , b ) ; h = h . text . replace ( /(\r\n|\r)/g , "\n" ) . length ; e = d . childNodes ; if ( ! h ) return g = e [ e . length - 1 ] , g . nodeType != CKEDITOR . NODE _TEXT ? { container : d , offset : e . length } : { container : g , offset : g . nodeValue . length } ; for ( d = e . length ; 0 < h && 0 < d ; ) f = e [ -- d ] , f . nodeType == CKEDITOR . NODE _TEXT && ( q = f , h -= f . nodeValue . length ) ; return { container : q , offset : - h } } h . collapse ( 0 < l ? ! 0 : ! 1 ) ; h . setEndPoint ( 0 <
l ? "StartToStart" : "EndToStart" , b ) ; h = h . text . replace ( /(\r\n|\r)/g , "\n" ) . length ; if ( ! h ) return { container : d , offset : a ( g ) + ( 0 < l ? 0 : 1 ) } ; for ( ; 0 < h ; ) try { f = g [ 0 < l ? "previousSibling" : "nextSibling" ] , f . nodeType == CKEDITOR . NODE _TEXT && ( h -= f . nodeValue . length , q = f ) , g = f } catch ( p ) { return { container : d , offset : a ( g ) } } return { container : q , offset : 0 < l ? - h : q . 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 ) ,
c . startOffset && C [ d . childNodes [ c . startOffset ] . nodeName . toLowerCase ( ) ] && ( b = CKEDITOR . SELECTION _ELEMENT ) } return a . type = b } , getRanges : function ( ) { var a = l ? function ( ) { function a ( b ) { return ( new CKEDITOR . dom . node ( b ) ) . getIndex ( ) } var b = function ( b , c ) { b = b . duplicate ( ) ; b . collapse ( c ) ; var d = b . parentElement ( ) ; if ( ! d . hasChildNodes ( ) ) return { container : d , offset : 0 } ; for ( var e = d . children , g , f , h = b . duplicate ( ) , k = 0 , m = e . length - 1 , t = - 1 , l , p ; k <= m ; ) if ( t = Math . floor ( ( k + m ) / 2 ) , g = e [ t ] , h . moveToElementText ( g ) , l = h . compareEndPoints ( "StartToStart" ,
b ) , 0 < l ) m = t - 1 ; else if ( 0 > l ) k = t + 1 ; else return { container : d , offset : a ( g ) } ; if ( - 1 == t || t == e . length - 1 && 0 > l ) { h . moveToElementText ( d ) ; h . setEndPoint ( "StartToStart" , b ) ; h = h . text . replace ( /(\r\n|\r)/g , "\n" ) . length ; e = d . childNodes ; if ( ! h ) return g = e [ e . length - 1 ] , g . nodeType != CKEDITOR . NODE _TEXT ? { container : d , offset : e . length } : { container : g , offset : g . nodeValue . length } ; for ( d = e . length ; 0 < h && 0 < d ; ) f = e [ -- d ] , f . nodeType == CKEDITOR . NODE _TEXT && ( p = f , h -= f . nodeValue . length ) ; return { container : p , offset : - h } } h . collapse ( 0 < l ? ! 0 : ! 1 ) ; h . setEndPoint ( 0 <
l ? "StartToStart" : "EndToStart" , b ) ; h = h . text . replace ( /(\r\n|\r)/g , "\n" ) . length ; if ( ! h ) return { container : d , offset : a ( g ) + ( 0 < l ? 0 : 1 ) } ; for ( ; 0 < h ; ) try { f = g [ 0 < l ? "previousSibling" : "nextSibling" ] , f . nodeType == CKEDITOR . NODE _TEXT && ( h -= f . nodeValue . length , p = f ) , g = f } catch ( q ) { return { container : d , offset : a ( g ) } } return { container : p , offset : 0 < l ? - 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 g = c . item ( e ) , f = g . parentNode , h = 0 , a = new CKEDITOR . dom . range ( this . root ) ; h < f . childNodes . length && f . childNodes [ h ] != g ; h ++ ) ; a . setStart ( new CKEDITOR . dom . node ( f ) , h ) ; a . setEnd ( new CKEDITOR . dom . node ( f ) ,
h + 1 ) ; d . push ( a ) } return d } return [ ] } } ( ) : function ( ) { var a = [ ] , b , c = this . getNative ( ) ; if ( ! c ) return a ; for ( var d = 0 ; d < c . rangeCount ; d ++ ) { var e = c . getRangeAt ( d ) ; b = new CKEDITOR . dom . range ( this . root ) ; b . setStart ( new CKEDITOR . dom . node ( e . startContainer ) , e . startOffset ) ; b . setEnd ( new CKEDITOR . dom . node ( e . endContainer ) , e . endOffset ) ; a . push ( b ) } return a } ; return function ( b ) { var c = this . _ . cache , d = c . ranges ; d || ( c . ranges = d = new CKEDITOR . dom . rangeList ( a . call ( this ) ) ) ; return b ? v ( new CKEDITOR . dom . rangeList ( d . slice ( ) ) ) : d } } ( ) , getStartElement : function ( ) { var a =
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 ( ) ;
@@ -485,46 +485,46 @@ if((b=b.getChild(c.startOffset))&&b.type==CKEDITOR.NODE_ELEMENT)for(c=b.getFirst
c . type == CKEDITOR . NODE _ELEMENT && C [ 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 = l ? "Control" == b . type ? "" : b . createRange ( ) . text : b . toString ( ) ; return a . selectedText = b } , lock : function ( ) { this . getRanges ( ) ; this . getStartElement ( ) ; this . getSelectedElement ( ) ; this . getSelectedText ( ) ; this . _ . cache . nativeSel = null ;
this . isLocked = 1 } , unlock : function ( a ) { if ( this . isLocked ) { if ( a ) var b = this . getSelectedElement ( ) , c = this . getRanges ( ) , e = this . isFake ; this . isLocked = 0 ; this . reset ( ) ; a && ( a = b || c [ 0 ] && c [ 0 ] . getCommonAncestor ( ) ) && a . getAscendant ( "body" , 1 ) && ( ( a = this . root . editor ) && a . plugins . tableselection && a . plugins . tableselection . isSupportedEnvironment ( a ) && d ( c ) ? f . call ( this , c ) : e ? this . fake ( b ) : b && 2 > c . length ? this . selectElement ( b ) : this . selectRanges ( c ) ) } } , reset : function ( ) { this . _ . cache = { } ; this . isFake = 0 ; var a = this . root . editor ; if ( a && a . _ . fakeSelection ) if ( this . rev ==
a . _ . fakeSelection . rev ) { delete a . _ . fakeSelection ; var b = a . _ . hiddenSelectionContainer ; if ( b ) { var c = a . checkDirty ( ) ; a . fire ( "lockSnapshot" ) ; b . remove ( ) ; a . fire ( "unlockSnapshot" ) ; ! c && a . resetDirty ( ) } delete a . _ . hiddenSelectionContainer } else CKEDITOR . warn ( "selection-fake-reset" ) ; this . rev = L ++ } , selectElement : function ( a ) { var b = new CKEDITOR . dom . range ( this . root ) ; b . setStartBefore ( a ) ; b . setEndAfter ( a ) ; this . selectRanges ( [ b ] ) } , selectRanges : function ( a ) { var b = this . root . editor , c = b && b . _ . hiddenSelectionContainer ; this . reset ( ) ;
if ( c ) for ( var c = this . root , e , h = 0 ; h < a . length ; ++ h ) e = a [ h ] , e . endContainer . equals ( c ) && ( e . endOffset = Math . min ( e . endOffset , c . getChildCount ( ) ) ) ; if ( a . length ) if ( this . isLocked ) { var k = CKEDITOR . document . getActive ( ) ; this . unlock ( ) ; this . selectRanges ( a ) ; this . lock ( ) ; k && ! k . equals ( this . root ) && k . focus ( ) } else { var r ; a : { var q , M ; if ( 1 == a . length && ! ( M = a [ 0 ] ) . collapsed && ( r = M . getEnclosedNode ( ) ) && r . type == CKEDITOR . NODE _ELEMENT && ( M = M . clone ( ) , M . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 ) , ( q = M . getEnclosedNode ( ) ) && q . type == CKEDITOR . NODE _ELEMENT &&
( r = q ) , "false" == r . getAttribute ( "contenteditable" ) ) ) break a ; r = void 0 } if ( r ) this . fake ( r ) ; else if ( b && b . plugins . tableselection && b . plugins . tableselection . isSupportedEnvironment ( b ) && d ( a ) && ! G && ! a [ 0 ] . _getTableElement ( { table : 1 } ) . hasAttribute ( "data-cke-tableselection-ignored" ) ) f . call ( this , a ) ; else { if ( l ) { q = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ; r = /\ufeff|\u00a0/ ; M = { table : 1 , tbody : 1 , tr : 1 } ; 1 < a . length && ( b = a [ a . length - 1 ] , a [ 0 ] . setEnd ( b . endContainer , b . endOffset ) ) ; b = a [ 0 ] ; a = b . collapsed ; var n , D , p ; if ( ( c = b . getEnclosedNode ( ) ) &&
c . type == CKEDITOR . NODE _ELEMENT && c . getName ( ) in C && ( ! c . is ( "a" ) || ! c . getText ( ) ) ) try { p = c . $ . createControlRange ( ) ; p . addElement ( c . $ ) ; p . select ( ) ; return } catch ( v ) { } if ( b . startContainer . type == CKEDITOR . NODE _ELEMENT && b . startContainer . getName ( ) in M || b . endContainer . type == CKEDITOR . NODE _ELEMENT && b . endContainer . getName ( ) in M ) b . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) , a = b . collapsed ; p = b . createBookmark ( ) ; M = p . startNode ; a || ( k = p . endNode ) ; p = b . document . $ . body . createTextRange ( ) ; p . moveToElementText ( M . $ ) ; p . moveStart ( "character" , 1 ) ; k ? ( r =
b . document . $ . body . createTextRange ( ) , r . moveToElementText ( k . $ ) , p . setEndPoint ( "EndToEnd" , r ) , p . moveEnd ( "character" , - 1 ) ) : ( n = M . getNext ( q ) , D = M . hasAscendant ( "pre" ) , n = ! ( n && n . getText && n . getText ( ) . match ( r ) ) && ( D || ! M . hasPrevious ( ) || M . getPrevious ( ) . is && M . getPrevious ( ) . is ( "br" ) ) , D = b . document . createElement ( "span" ) , D . setHtml ( "\x26#65279;" ) , D . insertBefore ( M ) , n && b . document . createText ( " " ) . insertBefore ( M ) ) ; b . setStartBefore ( M ) ; M . remove ( ) ; a ? ( n ? ( p . moveStart ( "character" , - 1 ) , p . select ( ) , b . document . $ . selection . clear ( ) ) : p . select ( ) ,
b . moveToPosition ( D , CKEDITOR . POSITION _BEFORE _START ) , D . remove ( ) ) : ( b . setEndBefore ( k ) , k . remove ( ) , p . select ( ) ) } else { k = this . getNative ( ) ; if ( ! k ) return ; this . removeAllRanges ( ) ; for ( p = 0 ; p < a . length ; p ++ ) { if ( p < a . length - 1 && ( n = a [ p ] , D = a [ p + 1 ] , r = n . clone ( ) , r . setStart ( n . endContainer , n . endOffset ) , r . setEnd ( D . startContainer , D . startOffset ) , ! r . collapsed && ( r . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) , b = r . getCommonAncestor ( ) , r = r . getEnclosedNode ( ) , b . isReadOnly ( ) || r && r . isReadOnly ( ) ) ) ) { D . setStart ( n . startContainer , n . startOffset ) ; a . splice ( p -- ,
1 ) ; continue } b = a [ p ] ; D = this . document . $ . createRange ( ) ; b . collapsed && CKEDITOR . env . webkit && m ( b ) && ( r = g ( this . root ) , b . insertNode ( r ) , ( n = r . getNext ( ) ) && ! r . getPrevious ( ) && n . type == CKEDITOR . NODE _ELEMENT && "br" == n . getName ( ) ? ( x ( this . root ) , b . moveToPosition ( n , CKEDITOR . POSITION _BEFORE _START ) ) : b . moveToPosition ( r , CKEDITOR . POSITION _AFTER _END ) ) ; D . setStart ( b . startContainer . $ , b . startOffset ) ; try { D . setEnd ( b . endContainer . $ , b . endOffset ) } catch ( u ) { if ( 0 <= u . toString ( ) . indexOf ( "NS_ERROR_ILLEGAL_VALUE" ) ) b . collapse ( 1 ) , D . setEnd ( b . endContainer . $ ,
if ( c ) for ( var c = this . root , e , h = 0 ; h < a . length ; ++ h ) e = a [ h ] , e . endContainer . equals ( c ) && ( e . endOffset = Math . min ( e . endOffset , c . getChildCount ( ) ) ) ; if ( a . length ) if ( this . isLocked ) { var k = CKEDITOR . document . getActive ( ) ; this . unlock ( ) ; this . selectRanges ( a ) ; this . lock ( ) ; k && ! k . equals ( this . root ) && k . focus ( ) } else { var r ; a : { var p , M ; if ( 1 == a . length && ! ( M = a [ 0 ] ) . collapsed && ( r = M . getEnclosedNode ( ) ) && r . type == CKEDITOR . NODE _ELEMENT && ( M = M . clone ( ) , M . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 ) , ( p = M . getEnclosedNode ( ) ) && p . type == CKEDITOR . NODE _ELEMENT &&
( r = p ) , "false" == r . getAttribute ( "contenteditable" ) ) ) break a ; r = void 0 } if ( r ) this . fake ( r ) ; else if ( b && b . plugins . tableselection && b . plugins . tableselection . isSupportedEnvironment ( b ) && d ( a ) && ! G && ! a [ 0 ] . _getTableElement ( { table : 1 } ) . hasAttribute ( "data-cke-tableselection-ignored" ) ) f . call ( this , a ) ; else { if ( l ) { p = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ; r = /\ufeff|\u00a0/ ; M = { table : 1 , tbody : 1 , tr : 1 } ; 1 < a . length && ( b = a [ a . length - 1 ] , a [ 0 ] . setEnd ( b . endContainer , b . endOffset ) ) ; b = a [ 0 ] ; a = b . collapsed ; var n , D , q ; if ( ( c = b . getEnclosedNode ( ) ) &&
c . type == CKEDITOR . NODE _ELEMENT && c . getName ( ) in C && ( ! c . is ( "a" ) || ! c . getText ( ) ) ) try { q = c . $ . createControlRange ( ) ; q . addElement ( c . $ ) ; q . select ( ) ; return } catch ( v ) { } if ( b . startContainer . type == CKEDITOR . NODE _ELEMENT && b . startContainer . getName ( ) in M || b . endContainer . type == CKEDITOR . NODE _ELEMENT && b . endContainer . getName ( ) in M ) b . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) , a = b . collapsed ; q = b . createBookmark ( ) ; M = q . startNode ; a || ( k = q . endNode ) ; q = b . document . $ . body . createTextRange ( ) ; q . moveToElementText ( M . $ ) ; q . moveStart ( "character" , 1 ) ; k ? ( r =
b . document . $ . body . createTextRange ( ) , r . moveToElementText ( k . $ ) , q . setEndPoint ( "EndToEnd" , r ) , q . moveEnd ( "character" , - 1 ) ) : ( n = M . getNext ( p ) , D = M . hasAscendant ( "pre" ) , n = ! ( n && n . getText && n . getText ( ) . match ( r ) ) && ( D || ! M . hasPrevious ( ) || M . getPrevious ( ) . is && M . getPrevious ( ) . is ( "br" ) ) , D = b . document . createElement ( "span" ) , D . setHtml ( "\x26#65279;" ) , D . insertBefore ( M ) , n && b . document . createText ( " " ) . insertBefore ( M ) ) ; b . setStartBefore ( M ) ; M . remove ( ) ; a ? ( n ? ( q . moveStart ( "character" , - 1 ) , q . select ( ) , b . document . $ . selection . clear ( ) ) : q . select ( ) ,
b . moveToPosition ( D , CKEDITOR . POSITION _BEFORE _START ) , D . remove ( ) ) : ( b . setEndBefore ( k ) , k . remove ( ) , q . select ( ) ) } else { k = this . getNative ( ) ; if ( ! k ) return ; this . removeAllRanges ( ) ; for ( q = 0 ; q < a . length ; q ++ ) { if ( q < a . length - 1 && ( n = a [ q ] , D = a [ q + 1 ] , r = n . clone ( ) , r . setStart ( n . endContainer , n . endOffset ) , r . setEnd ( D . startContainer , D . startOffset ) , ! r . collapsed && ( r . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) , b = r . getCommonAncestor ( ) , r = r . getEnclosedNode ( ) , b . isReadOnly ( ) || r && r . isReadOnly ( ) ) ) ) { D . setStart ( n . startContainer , n . startOffset ) ; a . splice ( q -- ,
1 ) ; continue } b = a [ q ] ; D = this . document . $ . createRange ( ) ; b . collapsed && CKEDITOR . env . webkit && m ( b ) && ( r = g ( this . root ) , b . insertNode ( r ) , ( n = r . getNext ( ) ) && ! r . getPrevious ( ) && n . type == CKEDITOR . NODE _ELEMENT && "br" == n . getName ( ) ? ( x ( this . root ) , b . moveToPosition ( n , CKEDITOR . POSITION _BEFORE _START ) ) : b . moveToPosition ( r , CKEDITOR . POSITION _AFTER _END ) ) ; D . setStart ( b . startContainer . $ , b . startOffset ) ; try { D . setEnd ( b . endContainer . $ , b . endOffset ) } catch ( u ) { if ( 0 <= u . toString ( ) . indexOf ( "NS_ERROR_ILLEGAL_VALUE" ) ) b . collapse ( 1 ) , D . setEnd ( b . endContainer . $ ,
b . endOffset ) ; else throw u ; } k . addRange ( D ) } } 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 ( ) ; A ( 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 = L ++ ; c . _ . fakeSelection =
this ; this . root . fire ( "selectionchange" ) } , isHidden : function ( ) { var a = this . getCommonAncestor ( ) ; a && a . type == CKEDITOR . NODE _TEXT && ( a = a . getParent ( ) ) ; return ! ( ! a || ! a . data ( "cke-hidden-sel" ) ) } , isInTable : function ( a ) { return d ( this . getRanges ( ) , a ) } , isCollapsed : function ( ) { var a = this . getRanges ( ) ; return 1 === a . length && a [ 0 ] . collapsed } , createBookmarks : function ( a ) { a = this . getRanges ( ) . createBookmarks ( a ) ; this . isFake && ( a . isFake = 1 ) ; return a } , createBookmarks2 : function ( a ) { a = this . getRanges ( ) . createBookmarks2 ( a ) ; this . isFake && ( a . isFake =
1 ) ; return a } , selectBookmarks : function ( a ) { for ( var b = [ ] , c , e = 0 ; e < a . length ; e ++ ) { var g = new CKEDITOR . dom . range ( this . root ) ; g . moveToBookmark ( a [ e ] ) ; b . push ( g ) } a . isFake && ( c = d ( b ) ? b [ 0 ] . _getTableElement ( ) : b [ 0 ] . getEnclosedNode ( ) , c && c . type == CKEDITOR . NODE _ELEMENT || ( CKEDITOR . warn ( "selection-not-fake" ) , a . isFake = 0 ) ) ; a . isFake && ! d ( b ) ? this . fake ( c ) : this . selectRanges ( b ) ; return this } , getCommonAncestor : function ( ) { var a = this . getRanges ( ) ; return a . length ? a [ 0 ] . startContainer . getCommonAncestor ( a [ a . length - 1 ] . endContainer ) : null } ,
scrollIntoView : function ( ) { this . getType ( ) != CKEDITOR . SELECTION _NONE && this . getRanges ( ) [ 0 ] . scrollIntoView ( ) } , removeAllRanges : function ( ) { if ( this . getType ( ) != CKEDITOR . SELECTION _NONE ) { var a = this . getNative ( ) ; try { a && a [ l ? "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 = L ( this , e ) , c . insertNode ( e ) , c . moveToPosition ( e , CKEDITOR . POSITION _BEFORE _END ) ; else { var g = this . element , h = this . _ . definition , k , m = h . ignoreReadonly , l = m || h . includeReadonly ; null ==
l && ( l = c . root . getCustomData ( "cke_includeReadonly" ) ) ; var q = CKEDITOR . dtd [ g ] ; q || ( k = ! 0 , q = CKEDITOR . dtd . span ) ; c . enlarge ( CKEDITOR . ENLARGE _INLINE , 1 ) ; c . trim ( ) ; var p = c . createBookmark ( ) , t = p . startNode , v = p . endNode , x = t , u ; if ( ! m ) { var y = c . getCommonAncestor ( ) , m = a ( t , y ) , y = a ( v , y ) ; m && ( x = m . getNextSourceNode ( ! 0 ) ) ; y && ( v = y ) } for ( x . getPosition ( v ) == CKEDITOR . POSITION _FOLLOWING && ( x = 0 ) ; x ; ) { m = ! 1 ; if ( x . equals ( v ) ) x = null , m = ! 0 ; else { var w = x . type == CKEDITOR . NODE _ELEMENT ? x . getName ( ) : null , y = w && "false" == x . getAttribute ( "contentEditable" ) , A = w &&
- 1 !== CKEDITOR . tools . array . indexOf ( CKEDITOR . style . unstylableElements , w ) , A = w && ( x . getAttribute ( "data-nostyle" ) || A ) ; if ( w && x . data ( "cke-bookmark" ) || x . type === CKEDITOR . NODE _COMMENT ) { x = x . getNextSourceNode ( ! 0 ) ; continue } if ( y && l && CKEDITOR . dtd . $block [ w ] ) for ( var C = x , B = f ( C ) , E = void 0 , G = B . length , H = 0 , C = G && new CKEDITOR . dom . range ( C . getDocument ( ) ) ; H < G ; ++ H ) { var E = B [ H ] , J = CKEDITOR . filter . instances [ E . data ( "cke-filter" ) ] ; if ( J ? J . check ( this ) : 1 ) C . selectNodeContents ( E ) , b . call ( this , C ) } B = w ? ! q [ w ] || A ? 0 : y && ! l ? 0 : d ( x , v , h , O ) : 1 ; if ( B ) if ( E =
x . getParent ( ) , B = h , G = g , H = k , ! E || ! ( E . getDtd ( ) || CKEDITOR . dtd . span ) [ G ] && ! H || B . parentRule && ! B . parentRule ( E ) ) m = ! 0 ; else { if ( u || w && CKEDITOR . dtd . $removeEmpty [ w ] && ( x . getPosition ( v ) | O ) != O || ( u = c . clone ( ) , u . setStartBefore ( x ) ) , w = x . type , w == CKEDITOR . NODE _TEXT || y || w == CKEDITOR . NODE _ELEMENT && ! x . getChildCount ( ) ) { for ( var w = x , K ; ( m = ! w . getNext ( z ) ) && ( K = w . getParent ( ) , q [ K . getName ( ) ] ) && d ( K , t , h , N ) ; ) w = K ; u . setEndAfter ( w ) } } else m = ! 0 ; x = x . getNextSourceNode ( A || y ) } if ( m && u && ! u . collapsed ) { for ( var m = L ( this , e ) , y = m . hasAttributes ( ) , A = u . getCommonAncestor ( ) ,
l && ( l = c . root . getCustomData ( "cke_includeReadonly" ) ) ; var p = CKEDITOR . dtd [ g ] ; p || ( k = ! 0 , p = CKEDITOR . dtd . span ) ; c . enlarge ( CKEDITOR . ENLARGE _INLINE , 1 ) ; c . trim ( ) ; var q = c . createBookmark ( ) , t = q . startNode , v = q . endNode , x = t , u ; if ( ! m ) { var y = c . getCommonAncestor ( ) , m = a ( t , y ) , y = a ( v , y ) ; m && ( x = m . getNextSourceNode ( ! 0 ) ) ; y && ( v = y ) } for ( x . getPosition ( v ) == CKEDITOR . POSITION _FOLLOWING && ( x = 0 ) ; x ; ) { m = ! 1 ; if ( x . equals ( v ) ) x = null , m = ! 0 ; else { var w = x . type == CKEDITOR . NODE _ELEMENT ? x . getName ( ) : null , y = w && "false" == x . getAttribute ( "contentEditable" ) , A = w &&
- 1 !== CKEDITOR . tools . array . indexOf ( CKEDITOR . style . unstylableElements , w ) , A = w && ( x . getAttribute ( "data-nostyle" ) || A ) ; if ( w && x . data ( "cke-bookmark" ) || x . type === CKEDITOR . NODE _COMMENT ) { x = x . getNextSourceNode ( ! 0 ) ; continue } if ( y && l && CKEDITOR . dtd . $block [ w ] ) for ( var C = x , B = f ( C ) , E = void 0 , G = B . length , H = 0 , C = G && new CKEDITOR . dom . range ( C . getDocument ( ) ) ; H < G ; ++ H ) { var E = B [ H ] , J = CKEDITOR . filter . instances [ E . data ( "cke-filter" ) ] ; if ( J ? J . check ( this ) : 1 ) C . selectNodeContents ( E ) , b . call ( this , C ) } B = w ? ! p [ w ] || A ? 0 : y && ! l ? 0 : d ( x , v , h , N ) : 1 ; if ( B ) if ( E =
x . getParent ( ) , B = h , G = g , H = k , ! E || ! ( E . getDtd ( ) || CKEDITOR . dtd . span ) [ G ] && ! H || B . parentRule && ! B . parentRule ( E ) ) m = ! 0 ; else { if ( u || w && CKEDITOR . dtd . $removeEmpty [ w ] && ( x . getPosition ( v ) | N ) != N || ( u = c . clone ( ) , u . setStartBefore ( x ) ) , w = x . type , w == CKEDITOR . NODE _TEXT || y || w == CKEDITOR . NODE _ELEMENT && ! x . getChildCount ( ) ) { for ( var w = x , K ; ( m = ! w . getNext ( z ) ) && ( K = w . getParent ( ) , p [ K . getName ( ) ] ) && d ( K , t , h , O ) ; ) w = K ; u . setEndAfter ( w ) } } else m = ! 0 ; x = x . getNextSourceNode ( A || y ) } if ( m && u && ! u . collapsed ) { for ( var m = L ( this , e ) , y = m . hasAttributes ( ) , A = u . getCommonAncestor ( ) ,
w = { } , B = { } , E = { } , G = { } , U , S , Y ; m && A ; ) { if ( A . getName ( ) == g ) { for ( U in h . attributes ) ! G [ U ] && ( Y = A . getAttribute ( S ) ) && ( m . getAttribute ( U ) == Y ? B [ U ] = 1 : G [ U ] = 1 ) ; for ( S in h . styles ) ! E [ S ] && ( Y = A . getStyle ( S ) ) && ( m . getStyle ( S ) == Y ? w [ S ] = 1 : E [ S ] = 1 ) } A = A . getParent ( ) } for ( U in B ) m . removeAttribute ( U ) ; for ( S in w ) m . removeStyle ( S ) ; y && ! m . hasAttributes ( ) && ( m = null ) ; m ? ( u . extractContents ( ) . appendTo ( m ) , u . insertNode ( m ) , F . call ( this , m ) , m . mergeSiblings ( ) , CKEDITOR . env . ie || m . $ . normalize ( ) ) : ( m = new CKEDITOR . dom . element ( "span" ) , u . extractContents ( ) . appendTo ( m ) ,
u . insertNode ( m ) , F . call ( this , m ) , m . remove ( ! 0 ) ) ; u = null } } c . moveToBookmark ( p ) ; 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 ( l . getParent ( ) ) , e = null , g = null , f = 0 ; f < a . elements . length ; f ++ ) { var h = a . elements [ f ] ; if ( h == a . block || h == a . blockLimit ) break ; q . checkElementRemovable ( h , ! 0 ) && ( e = h ) } for ( f = 0 ; f < c . elements . length ; f ++ ) { h = c . elements [ f ] ; if ( h == c . block || h == c . blockLimit ) break ; q . checkElementRemovable ( h ,
u . insertNode ( m ) , F . call ( this , m ) , m . remove ( ! 0 ) ) ; u = null } } c . moveToBookmark ( q ) ; 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 ( l . getParent ( ) ) , e = null , g = null , f = 0 ; f < a . elements . length ; f ++ ) { var h = a . elements [ f ] ; if ( h == a . block || h == a . blockLimit ) break ; p . checkElementRemovable ( h , ! 0 ) && ( e = h ) } for ( f = 0 ; f < c . elements . length ; f ++ ) { h = c . elements [ f ] ; if ( h == c . block || h == c . blockLimit ) break ; p . checkElementRemovable ( h ,
! 0 ) && ( g = h ) } g && l . breakParent ( g ) ; e && d . breakParent ( e ) } a . enlarge ( CKEDITOR . ENLARGE _INLINE , 1 ) ; var c = a . createBookmark ( ) , d = c . startNode , e = this . _ . definition . alwaysRemoveElement ; if ( a . collapsed ) { for ( var g = new CKEDITOR . dom . elementPath ( d . getParent ( ) , a . root ) , f , h = 0 , k ; h < g . elements . length && ( k = g . elements [ h ] ) && k != g . block && k != g . blockLimit ; h ++ ) if ( this . checkElementRemovable ( k ) ) { var m ; ! e && a . collapsed && ( a . checkBoundaryOfElement ( k , CKEDITOR . END ) || ( m = a . checkBoundaryOfElement ( k , CKEDITOR . START ) ) ) ? ( f = k , f . match = m ? "start" : "end" ) :
( k . mergeSiblings ( ) , k . is ( this . element ) ? A . call ( this , k ) : v ( k , G ( this ) [ k . getName ( ) ] ) ) } if ( f ) { e = d ; for ( h = 0 ; ; h ++ ) { k = g . elements [ h ] ; if ( k . equals ( f ) ) break ; else if ( k . match ) continue ; else k = k . clone ( ) ; k . append ( e ) ; e = k } e [ "start" == f . match ? "insertBefore" : "insertAfter" ] ( f ) } } else { var l = c . endNode , q = this ; b ( ) ; for ( g = d ; ! g . equals ( l ) ; ) f = g . getNextSourceNode ( ) , g . type == CKEDITOR . NODE _ELEMENT && this . checkElementRemovable ( g ) && ( g . getName ( ) == this . element ? A . call ( this , g ) : v ( g , G ( this ) [ g . getName ( ) ] ) , f . type == CKEDITOR . NODE _ELEMENT && f . contains ( d ) &&
( k . mergeSiblings ( ) , k . is ( this . element ) ? A . call ( this , k ) : v ( k , G ( this ) [ k . getName ( ) ] ) ) } if ( f ) { e = d ; for ( h = 0 ; ; h ++ ) { k = g . elements [ h ] ; if ( k . equals ( f ) ) break ; else if ( k . match ) continue ; else k = k . clone ( ) ; k . append ( e ) ; e = k } e [ "start" == f . match ? "insertBefore" : "insertAfter" ] ( f ) } } else { var l = c . endNode , p = this ; b ( ) ; for ( g = d ; ! g . equals ( l ) ; ) f = g . getNextSourceNode ( ) , g . type == CKEDITOR . NODE _ELEMENT && this . checkElementRemovable ( g ) && ( g . getName ( ) == this . element ? A . call ( this , g ) : v ( g , G ( this ) [ g . getName ( ) ] ) , f . type == CKEDITOR . NODE _ELEMENT && f . contains ( d ) &&
( b ( ) , f = d . getNext ( ) ) ) , g = f } a . moveToBookmark ( c ) ; a . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) } function f ( a ) { var b = [ ] ; a . forEach ( function ( a ) { if ( "true" == a . getAttribute ( "contenteditable" ) ) return b . push ( a ) , ! 1 } , CKEDITOR . NODE _ELEMENT , ! 0 ) ; return b } function e ( a ) { var b = a . getEnclosedNode ( ) || a . getCommonAncestor ( ! 1 , ! 0 ) ; ( a = ( new CKEDITOR . dom . elementPath ( b , a . root ) ) . contains ( this . element , 1 ) ) && ! a . isReadOnly ( ) && w ( a , this ) } function k ( a ) { var b = a . getCommonAncestor ( ! 0 , ! 0 ) ; if ( a = ( new CKEDITOR . dom . elementPath ( b , a . root ) ) . contains ( this . element ,
1 ) ) { var b = this . _ . definition , c = b . attributes ; if ( c ) for ( var d in c ) a . removeAttribute ( d , c [ d ] ) ; if ( b . styles ) for ( var e in b . styles ) b . styles . hasOwnProperty ( e ) && a . removeStyle ( e ) } } function h ( a ) { var b = a . createBookmark ( ! 0 ) , c = a . createIterator ( ) ; c . enforceRealBlocks = ! 0 ; this . _ . enterMode && ( c . enlargeBr = this . _ . enterMode != CKEDITOR . ENTER _BR ) ; for ( var d , e = a . document , g ; d = c . getNextParagraph ( ) ; ) ! d . isReadOnly ( ) && ( c . activeFilter ? c . activeFilter . check ( this ) : 1 ) && ( g = L ( this , e , d ) , m ( d , g ) ) ; a . moveToBookmark ( b ) } function q ( a ) { var b = a . createBookmark ( 1 ) ,
1 ) ) { var b = this . _ . definition , c = b . attributes ; if ( c ) for ( var d in c ) a . removeAttribute ( d , c [ d ] ) ; if ( b . styles ) for ( var e in b . styles ) b . styles . hasOwnProperty ( e ) && a . removeStyle ( e ) } } function h ( a ) { var b = a . createBookmark ( ! 0 ) , c = a . createIterator ( ) ; c . enforceRealBlocks = ! 0 ; this . _ . enterMode && ( c . enlargeBr = this . _ . enterMode != CKEDITOR . ENTER _BR ) ; for ( var d , e = a . document , g ; d = c . getNextParagraph ( ) ; ) ! d . isReadOnly ( ) && ( c . activeFilter ? c . activeFilter . check ( this ) : 1 ) && ( g = L ( this , e , d ) , m ( d , g ) ) ; a . moveToBookmark ( b ) } function p ( 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 ) , m ( d , e ) ) : A . call ( this , d ) ) ; a . moveToBookmark ( b ) } function m ( a , b ) { var c = ! b ; c && ( b = a . getDocument ( ) . createElement ( "div" ) , a . copyAttributes ( b ) ) ; var d = b && b . is ( "pre" ) , e = a . is ( "pre" ) , f = ! d && e ; if ( d && ! e ) { e = b ; ( f =
a . getBogus ( ) ) && f . remove ( ) ; f = a . getHtml ( ) ; f = x ( f , /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g , "" ) ; f = f . replace ( /[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi , "$1" ) ; f = f . replace ( /([ \t\n\r]+| )/g , " " ) ; f = f . replace ( /<br\b[^>]*>/gi , "\n" ) ; if ( CKEDITOR . env . ie ) { var h = a . getDocument ( ) . createElement ( "div" ) ; h . append ( e ) ; e . $ . outerHTML = "\x3cpre\x3e" + f + "\x3c/pre\x3e" ; e . copyAttributes ( h . getFirst ( ) ) ; e = h . getFirst ( ) . remove ( ) } else e . setHtml ( f ) ; b = e } else f ? b = y ( c ? [ a . getHtml ( ) ] : g ( a ) , b ) : a . moveChildren ( b ) ; b . replace ( a ) ; if ( d ) { var c = b , k ; ( k = c . getPrevious ( H ) ) &&
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 && l ( b ) } function g ( 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 g = b . clone ( ) ; g . setHtml ( e ) ; c . append ( g ) } else b . setHtml ( e ) } return c || b } function A ( a , b ) { var c = this . _ . definition , d = c . attributes , c = c . styles , e = G ( this ) [ a . getName ( ) ] , g = CKEDITOR . tools . isEmpty ( d ) && CKEDITOR . tools . isEmpty ( c ) , f ; for ( f in d ) if ( "class" != f && ! this . _ . definition . fullMatch || a . getAttribute ( f ) == p ( f , d [ f ] ) ) b && "data-" == f . slice ( 0 , 5 ) || ( g = a . hasAttribute ( f ) , a . removeAttribute ( f ) ) ; for ( var h in c ) this . _ . definition . fullMatch && a . getStyle ( h ) != p ( h , c [ h ] , ! 0 ) || ( g = g || ! ! a . getStyle ( h ) , a . removeStyle ( h ) ) ;
a . length - 1 ) + " " } ) ; if ( c ) { var g = b . clone ( ) ; g . setHtml ( e ) ; c . append ( g ) } else b . setHtml ( e ) } return c || b } function A ( a , b ) { var c = this . _ . definition , d = c . attributes , c = c . styles , e = G ( this ) [ a . getName ( ) ] , g = CKEDITOR . tools . isEmpty ( d ) && CKEDITOR . tools . isEmpty ( c ) , f ; for ( f in d ) if ( "class" != f && ! this . _ . definition . fullMatch || a . getAttribute ( f ) == q ( f , d [ f ] ) ) b && "data-" == f . slice ( 0 , 5 ) || ( g = a . hasAttribute ( f ) , a . removeAttribute ( f ) ) ; for ( var h in c ) this . _ . definition . fullMatch && a . getStyle ( h ) != q ( h , c [ h ] , ! 0 ) || ( g = g || ! ! a . getStyle ( h ) , a . removeStyle ( h ) ) ;
v ( a , e , E [ a . getName ( ) ] ) ; g && ( this . _ . definition . alwaysRemoveElement ? l ( a , 1 ) : ! CKEDITOR . dtd . $block [ a . getName ( ) ] || this . _ . enterMode == CKEDITOR . ENTER _BR && ! a . hasAttributes ( ) ? l ( a ) : a . renameNode ( this . _ . enterMode == CKEDITOR . ENTER _P ? "p" : "div" ) ) } function F ( a ) { for ( var b = G ( this ) , c = a . getElementsByTag ( this . element ) , d , e = c . count ( ) ; 0 <= -- e ; ) d = c . getItem ( e ) , d . isReadOnly ( ) || A . call ( this , d , ! 0 ) ; for ( var g in b ) if ( g != this . element ) for ( c = a . getElementsByTag ( g ) , e = c . count ( ) - 1 ; 0 <= e ; e -- ) d = c . getItem ( e ) , d . isReadOnly ( ) || v ( d , b [ g ] ) } function v ( a ,
b , c ) { if ( b = b && b . attributes ) for ( var d = 0 ; d < b . length ; d ++ ) { var e = b [ d ] [ 0 ] , g ; if ( g = a . getAttribute ( e ) ) { var f = b [ d ] [ 1 ] ; ( null === f || f . test && f . test ( g ) || "string" == typeof f && g == f ) && a . removeAttribute ( e ) } } c || l ( a ) } function l ( a , b ) { if ( ! a . hasAttributes ( ) || b ) if ( CKEDITOR . dtd . $block [ a . getName ( ) ] ) { var c = a . getPrevious ( H ) , d = a . getNext ( H ) ; ! 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 L ( a , b , c ) { var d ; d = a . element ; "*" == d && ( d = "span" ) ; d = new CKEDITOR . dom . element ( d , b ) ; c && c . copyAttributes ( d ) ; d = w ( d , a ) ; b . getCustomData ( "doc_processing_style" ) && d . hasAttribute ( "id" ) ? d . removeAttribute ( "id" ) : b . setCustomData ( "doc_processing_style" , 1 ) ; return d } function w ( a , b ) { var c = b . _ . definition , d = c . attributes , c = CKEDITOR . style . getStyleText ( c ) ; if ( d ) for ( var e in d ) a . setAttribute ( e ,
d [ e ] ) ; c && a . setAttribute ( "style" , c ) ; a . getDocument ( ) . removeCustomData ( "doc_processing_style" ) ; return a } function J ( a , b ) { for ( var c in a ) a [ c ] = a [ c ] . replace ( B , function ( a , c ) { return b [ c ] } ) } function G ( a ) { if ( a . _ . overrides ) return a . _ . overrides ; var b = a . _ . overrides = { } , c = a . _ . definition . overrides ; if ( c ) { CKEDITOR . tools . isArray ( c ) || ( c = [ c ] ) ; for ( var d = 0 ; d < c . length ; d ++ ) { var e = c [ d ] , g , f ; "string" == typeof e ? g = e . toLowerCase ( ) : ( g = e . element ? e . element . toLowerCase ( ) : a . element , f = e . attributes ) ; e = b [ g ] || ( b [ g ] = { } ) ; if ( f ) { var e = e . attributes =
e . attributes || [ ] , h ; for ( h in f ) e . push ( [ h . toLowerCase ( ) , f [ h ] ] ) } } } return b } function p ( a , b , c ) { var d = new CKEDITOR . dom . element ( "span" ) ; d [ c ? "setStyle" : "setAttribute" ] ( a , b ) ; return d [ c ? "getStyle" : "getAttribute" ] ( a ) } function u ( 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 ;
e . attributes || [ ] , h ; for ( h in f ) e . push ( [ h . toLowerCase ( ) , f [ h ] ] ) } } } return b } function q ( a , b , c ) { var d = new CKEDITOR . dom . element ( "span" ) ; d [ c ? "setStyle" : "setAttribute" ] ( a , b ) ; return d [ c ? "getStyle" : "getAttribute" ] ( a ) } function u ( a , b ) { function c ( a , b ) { return "font-family" == b . toLowerCase ( ) ? a . replace ( /["']/g , "" ) : a } "string" == typeof a && ( a = CKEDITOR . tools . parseCssText ( a ) ) ; "string" == typeof b && ( b = CKEDITOR . tools . parseCssText ( b , ! 0 ) ) ; for ( var d in a ) if ( ! ( d in b ) || c ( b [ d ] , d ) != c ( a [ d ] , d ) && "inherit" != a [ d ] && "inherit" != b [ d ] ) return ! 1 ;
return ! 0 } function K ( a , b , c ) { var d = a . getRanges ( ) ; b = b ? this . removeFromRange : this . applyToRange ; for ( var e , g = d . createIterator ( ) ; e = g . getNextRange ( ) ; ) b . call ( this , e , c ) ; a . selectRanges ( d ) } var E = { 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 } , C = { 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 } , t = /\s*(?:;\s*|$)/ , B = /#\((.+?)\)/g , z = CKEDITOR . dom . walker . bookmark ( 0 , 1 ) , H = CKEDITOR . dom . walker . whitespaces ( 1 ) ; CKEDITOR . style = function ( a , b ) { if ( "string" == typeof a . type ) return new CKEDITOR . style . customHandlers [ a . type ] ( a ) ; var c = a . attributes ; c && c . style && ( a . styles = CKEDITOR . tools . extend ( { } , a . styles , CKEDITOR . tools . parseCssText ( c . style ) ) , delete c . style ) ; b && ( a = CKEDITOR . tools . clone ( a ) , J ( a . attributes , b ) , J ( a . styles , b ) ) ; c = this . element = a . element ? "string" == typeof a . element ? a . element . toLowerCase ( ) :
a . element : "*" ; this . type = a . type || ( E [ c ] ? CKEDITOR . STYLE _BLOCK : C [ c ] ? CKEDITOR . STYLE _OBJECT : CKEDITOR . STYLE _INLINE ) ; "object" == typeof this . element && ( this . type = CKEDITOR . STYLE _OBJECT ) ; this . _ = { definition : a } } ; CKEDITOR . style . prototype = { apply : function ( a ) { if ( a instanceof CKEDITOR . dom . document ) return K . call ( this , a . getSelection ( ) ) ; if ( this . checkApplicable ( a . elementPath ( ) , a ) ) { var b = this . _ . enterMode ; b || ( this . _ . enterMode = a . activeEnterMode ) ; K . call ( this , a . getSelection ( ) , 0 , a ) ; this . _ . enterMode = b } } , remove : function ( a ) { if ( a instanceof
CKEDITOR . dom . document ) return K . call ( this , a . getSelection ( ) , 1 ) ; if ( this . checkApplicable ( a . elementPath ( ) , a ) ) { var b = this . _ . enterMode ; b || ( this . _ . enterMode = a . activeEnterMode ) ; K . call ( this , a . getSelection ( ) , 1 , a ) ; this . _ . enterMode = b } } , applyToRange : function ( a ) { this . applyToRange = this . type == CKEDITOR . STYLE _INLINE ? b : this . type == CKEDITOR . STYLE _BLOCK ? h : this . type == CKEDITOR . STYLE _OBJECT ? e : null ; return this . applyToRange ( a ) } , removeFromRange : function ( a ) { this . removeFromRange = this . type == CKEDITOR . STYLE _INLINE ? c : this . type == CKEDITOR . STYLE _BLOCK ?
q : this . type == CKEDITOR . STYLE _OBJECT ? k : null ; return this . removeFromRange ( a ) } , applyToObject : function ( a ) { w ( a , this ) } , checkActive : function ( a , b ) { switch ( this . type ) { case CKEDITOR . STYLE _BLOCK : return this . checkElementRemovable ( a . block || a . blockLimit , ! 0 , b ) ; case CKEDITOR . STYLE _OBJECT : case CKEDITOR . STYLE _INLINE : for ( var c = a . elements , d = 0 , e ; d < c . length ; d ++ ) if ( e = c [ d ] , this . type != CKEDITOR . STYLE _INLINE || e != a . block && e != a . blockLimit ) { if ( this . type == CKEDITOR . STYLE _OBJECT ) { var g = e . getName ( ) ; if ( ! ( "string" == typeof this . element ?
p : this . type == CKEDITOR . STYLE _OBJECT ? k : null ; return this . removeFromRange ( a ) } , applyToObject : function ( a ) { w ( a , this ) } , checkActive : function ( a , b ) { switch ( this . type ) { case CKEDITOR . STYLE _BLOCK : return this . checkElementRemovable ( a . block || a . blockLimit , ! 0 , b ) ; case CKEDITOR . STYLE _OBJECT : case CKEDITOR . STYLE _INLINE : for ( var c = a . elements , d = 0 , e ; d < c . length ; d ++ ) if ( e = c [ d ] , this . type != CKEDITOR . STYLE _INLINE || e != a . block && e != a . blockLimit ) { if ( this . type == CKEDITOR . STYLE _OBJECT ) { var g = e . getName ( ) ; if ( ! ( "string" == typeof this . element ?
g == this . element : g in this . element ) ) continue } if ( this . checkElementRemovable ( e , ! 0 , b ) ) return ! 0 } } return ! 1 } , checkApplicable : function ( a , b , c ) { b && b instanceof CKEDITOR . filter && ( c = b ) ; if ( c && ! c . check ( this ) ) return ! 1 ; switch ( this . type ) { case CKEDITOR . STYLE _OBJECT : return ! ! a . contains ( this . element ) ; case CKEDITOR . STYLE _BLOCK : return ! ! a . blockLimit . getDtd ( ) [ this . element ] } return ! 0 } , checkElementMatch : function ( a , b ) { var c = this . _ . definition ; if ( ! a || ! c . ignoreReadonly && a . isReadOnly ( ) ) return ! 1 ; var d = a . getName ( ) ; if ( "string" == typeof this . element ?
d == this . element : d in this . element ) { if ( ! b && ! a . hasAttributes ( ) ) return ! 0 ; if ( d = c . _AC ) c = d ; else { var d = { } , e = 0 , g = c . attributes ; if ( g ) for ( var f in g ) e ++ , d [ f ] = g [ f ] ; if ( f = CKEDITOR . style . getStyleText ( c ) ) d . style || e ++ , d . style = f ; d . _length = e ; c = c . _AC = d } if ( c . _length ) { for ( var h in c ) if ( "_length" != h ) if ( d = a . getAttribute ( h ) || "" , "style" == h ? u ( c [ h ] , d ) : c [ h ] == d ) { if ( ! b ) return ! 0 } else if ( b ) return ! 1 ; if ( b ) return ! 0 } else return ! 0 } return ! 1 } , checkElementRemovable : function ( a , b , c ) { if ( this . checkElementMatch ( a , b , c ) ) return ! 0 ; if ( b = G ( this ) [ a . getName ( ) ] ) { var d ;
if ( ! ( b = b . attributes ) ) return ! 0 ; for ( c = 0 ; c < b . length ; c ++ ) if ( d = b [ c ] [ 0 ] , d = a . getAttribute ( d ) ) { var e = b [ c ] [ 1 ] ; if ( null === e ) return ! 0 ; if ( "string" == typeof e ) { if ( d == e ) return ! 0 } else if ( e . test ( d ) ) return ! 0 } } return ! 1 } , buildPreview : function ( a ) { var b = this . _ . definition , c = [ ] , d = b . element ; "bdo" == d && ( d = "span" ) ; var c = [ "\x3c" , d ] , e = b . attributes ; if ( e ) for ( var g in e ) c . push ( " " , g , '\x3d"' , e [ g ] , '"' ) ; ( e = CKEDITOR . style . getStyleText ( b ) ) && c . push ( ' style\x3d"' , e , '"' ) ; c . push ( "\x3e" , a || b . name , "\x3c/" , d , "\x3e" ) ; return c . join ( "" ) } , getDefinition : function ( ) { return this . _ . definition } } ;
CKEDITOR . style . getStyleText = function ( a ) { var b = a . _ST ; if ( b ) return b ; var b = a . styles , c = a . attributes && a . attributes . style || "" , d = "" ; c . length && ( c = c . replace ( t , ";" ) ) ; for ( var e in b ) { var g = b [ e ] , f = ( e + ":" + g ) . replace ( t , ";" ) ; "inherit" == g ? d += f : c += f } c . length && ( c = CKEDITOR . tools . normalizeCssText ( c , ! 0 ) ) ; return a . _ST = c + d } ; CKEDITOR . style . customHandlers = { } ; CKEDITOR . style . unstylableElements = [ ] ; CKEDITOR . style . addCustomHandler = function ( a ) { var b = function ( a ) { this . _ = { definition : a } ; this . setup && this . setup ( a ) } ; b . prototype = CKEDITOR . tools . extend ( CKEDITOR . tools . prototypedCopy ( CKEDITOR . style . prototype ) ,
{ assignedTo : CKEDITOR . STYLE _OBJECT } , a , ! 0 ) ; return this . customHandlers [ a . type ] = b } ; var O = CKEDITOR . POSITION _PRECEDING | CKEDITOR . POSITION _IDENTICAL | CKEDITOR . POSITION _IS _CONTAINED , N = CKEDITOR . POSITION _FOLLOWING | CKEDITOR . POSITION _IDENTICAL | CKEDITOR . POSITION _IS _CONTAINED } ) ( ) ; CKEDITOR . styleCommand = function ( a , d ) { this . requiredContent = this . allowedContent = this . style = a ; CKEDITOR . tools . extend ( this , d , ! 0 ) } ;
{ assignedTo : CKEDITOR . STYLE _OBJECT } , a , ! 0 ) ; return this . customHandlers [ a . type ] = b } ; var N = CKEDITOR . POSITION _PRECEDING | CKEDITOR . POSITION _IDENTICAL | CKEDITOR . POSITION _IS _CONTAINED , O = CKEDITOR . POSITION _FOLLOWING | CKEDITOR . POSITION _IDENTICAL | CKEDITOR . POSITION _IS _CONTAINED } ) ( ) ; CKEDITOR . styleCommand = function ( a , d ) { this . requiredContent = this . allowedContent = this . style = a ; CKEDITOR . tools . extend ( this , d , ! 0 ) } ;
CKEDITOR . styleCommand . prototype . exec = function ( a ) { a . focus ( ) ; this . state == CKEDITOR . TRISTATE _OFF ? a . applyStyle ( this . style ) : this . state == CKEDITOR . TRISTATE _ON && a . removeStyle ( this . style ) } ; CKEDITOR . stylesSet = new CKEDITOR . resourceManager ( "" , "stylesSet" ) ; CKEDITOR . addStylesSet = CKEDITOR . tools . bind ( CKEDITOR . stylesSet . add , CKEDITOR . stylesSet ) ; CKEDITOR . loadStylesSet = function ( a , d , b ) { CKEDITOR . stylesSet . addExternal ( a , d , "" ) ; CKEDITOR . stylesSet . load ( a , b ) } ;
CKEDITOR . tools . extend ( CKEDITOR . editor . prototype , { attachStyleStateChange : function ( a , d ) { var b = this . _ . styleStateChangeCallbacks ; b || ( b = this . _ . styleStateChangeCallbacks = [ ] , this . on ( "selectionChange" , function ( a ) { for ( var d = 0 ; d < b . length ; d ++ ) { var e = b [ d ] , k = e . style . checkActive ( a . data . path , this ) ? CKEDITOR . TRISTATE _ON : CKEDITOR . TRISTATE _OFF ; e . fn . call ( this , k ) } } ) ) ; b . push ( { style : a , fn : d } ) } , applyStyle : function ( a ) { a . apply ( this ) } , removeStyle : function ( a ) { a . remove ( this ) } , getStylesSet : function ( a ) { if ( this . _ . stylesDefinitions ) a ( this . _ . stylesDefinitions ) ;
else { var d = this , b = d . config . stylesCombo _stylesSet || d . config . stylesSet ; if ( ! 1 === b ) a ( null ) ; else if ( b instanceof Array ) d . _ . stylesDefinitions = b , a ( b ) ; else { b || ( b = "default" ) ; var b = b . split ( ":" ) , c = b [ 0 ] ; CKEDITOR . stylesSet . addExternal ( c , b [ 1 ] ? b . slice ( 1 ) . join ( ":" ) : CKEDITOR . getUrl ( "styles.js" ) , "" ) ; CKEDITOR . stylesSet . load ( c , function ( b ) { d . _ . stylesDefinitions = b [ c ] ; a ( d . _ . stylesDefinitions ) } ) } } } } ) ;
@@ -540,8 +540,8 @@ a[0],a[1],a[2],this._.alpha)},getInitialValue:function(){return this._.initialCo
b , c , d , f ) { b = [ b , c , d ] ; void 0 !== f && b . push ( f ) ; return a + "(" + b . join ( "," ) + ")" } , formatHslString : function ( a , b , c , d , f ) { return a + "(" + b + "," + c + "%," + d + "%" + ( void 0 !== f ? "," + f : "" ) + ")" } , parseInput : function ( a ) { if ( "string" !== typeof a ) this . _ . isValidColor = ! 1 ; else { a = CKEDITOR . tools . trim ( a ) ; var b = this . _ . matchStringToNamedColor ( a ) ; b && ( a = b ) ; var b = this . _ . extractColorChannelsFromHex ( a ) , c = this . _ . extractColorChannelsFromRgba ( a ) ; a = this . _ . extractColorChannelsFromHsla ( a ) ; ( a = b || c || a ) ? ( this . _ . type = a . type , this . _ . red = a . red , this . _ . green =
a . green , this . _ . blue = a . blue , this . _ . alpha = a . alpha , a . type === CKEDITOR . tools . color . TYPE _HSL && ( this . _ . hue = a . hue , this . _ . saturation = a . saturation , this . _ . lightness = a . lightness ) ) : this . _ . isValidColor = ! 1 } } , matchStringToNamedColor : function ( a ) { return CKEDITOR . tools . color . namedColors [ a . toLowerCase ( ) ] || null } , extractColorChannelsFromHex : function ( a ) { - 1 === a . indexOf ( "#" ) && ( a = "#" + a ) ; a . match ( CKEDITOR . tools . color . hex3CharsRegExp ) && ( a = this . _ . hex3ToHex6 ( a ) ) ; a . match ( CKEDITOR . tools . color . hex4CharsRegExp ) && ( a = this . _ . hex4ToHex8 ( a ) ) ;
if ( ! a . match ( CKEDITOR . tools . color . hex6CharsRegExp ) && ! a . match ( CKEDITOR . tools . color . hex8CharsRegExp ) ) return null ; a = a . split ( "" ) ; var b = 1 ; a [ 7 ] && a [ 8 ] && ( b = parseInt ( a [ 7 ] + a [ 8 ] , 16 ) , b /= CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE , b = Number ( b . toFixed ( 1 ) ) ) ; return { type : CKEDITOR . tools . color . TYPE _RGB , red : parseInt ( a [ 1 ] + a [ 2 ] , 16 ) , green : parseInt ( a [ 3 ] + a [ 4 ] , 16 ) , blue : parseInt ( a [ 5 ] + a [ 6 ] , 16 ) , alpha : b } } , extractColorChannelsFromRgba : function ( b ) { var c = this . _ . extractColorChannelsByPattern ( b , CKEDITOR . tools . color . rgbRegExp ) ; if ( ! c ||
3 > c . length || 4 < c . length ) return null ; var f = 4 === c . length ; b = a ( c [ 0 ] , CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE ) ; var q = a ( c [ 1 ] , CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE ) , m = a ( c [ 2 ] , CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE ) , g = 1 ; f && ( g = d ( c [ 3 ] , CKEDITOR . tools . color . MAX _ALPHA _CHANNEL _VALUE ) ) ; c = { type : CKEDITOR . tools . color . TYPE _RGB , red : b , green : q , blue : m , alpha : g } ; return this . _ . areColorChannelsValid ( b , q , m , g ) ? c : null } , extractColorChannelsFromHsla : function ( b ) { var c = this . _ . extractColorChannelsByPattern ( b , CKEDITOR . tools . color . hslRegExp ) ;
if ( ! c || 3 > c . length || 4 < c . length ) return null ; var f = 4 === c . length , q = a ( c [ 0 ] , CKEDITOR . tools . color . MAX _HUE _CHANNEL _VALUE ) , m = d ( c [ 1 ] , CKEDITOR . tools . color . MAX _SATURATION _LIGHTNESS _CHANNEL _VALUE ) , g = d ( c [ 2 ] , CKEDITOR . tools . color . MAX _SATURATION _LIGHTNESS _CHANNEL _VALUE ) , x = 1 ; b = this . _ . hslToRgb ( q , m , g ) ; f && ( x = d ( c [ 3 ] , CKEDITOR . tools . color . MAX _ALPHA _CHANNEL _VALUE ) ) ; b . push ( x ) ; c = { type : CKEDITOR . tools . color . TYPE _HSL , red : b [ 0 ] , green : b [ 1 ] , blue : b [ 2 ] , alpha : b [ 3 ] , hue : q , saturation : Math . round ( 100 * m ) , lightness : Math . round ( 100 * g ) } ; return this . _ . areColorChannelsValid ( b [ 0 ] ,
3 > c . length || 4 < c . length ) return null ; var f = 4 === c . length ; b = a ( c [ 0 ] , CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE ) ; var p = a ( c [ 1 ] , CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE ) , m = a ( c [ 2 ] , CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE ) , g = 1 ; f && ( g = d ( c [ 3 ] , CKEDITOR . tools . color . MAX _ALPHA _CHANNEL _VALUE ) ) ; c = { type : CKEDITOR . tools . color . TYPE _RGB , red : b , green : p , blue : m , alpha : g } ; return this . _ . areColorChannelsValid ( b , p , m , g ) ? c : null } , extractColorChannelsFromHsla : function ( b ) { var c = this . _ . extractColorChannelsByPattern ( b , CKEDITOR . tools . color . hslRegExp ) ;
if ( ! c || 3 > c . length || 4 < c . length ) return null ; var f = 4 === c . length , p = a ( c [ 0 ] , CKEDITOR . tools . color . MAX _HUE _CHANNEL _VALUE ) , m = d ( c [ 1 ] , CKEDITOR . tools . color . MAX _SATURATION _LIGHTNESS _CHANNEL _VALUE ) , g = d ( c [ 2 ] , CKEDITOR . tools . color . MAX _SATURATION _LIGHTNESS _CHANNEL _VALUE ) , x = 1 ; b = this . _ . hslToRgb ( p , m , g ) ; f && ( x = d ( c [ 3 ] , CKEDITOR . tools . color . MAX _ALPHA _CHANNEL _VALUE ) ) ; b . push ( x ) ; c = { type : CKEDITOR . tools . color . TYPE _HSL , red : b [ 0 ] , green : b [ 1 ] , blue : b [ 2 ] , alpha : b [ 3 ] , hue : p , saturation : Math . round ( 100 * m ) , lightness : Math . round ( 100 * g ) } ; return this . _ . areColorChannelsValid ( b [ 0 ] ,
b [ 1 ] , b [ 2 ] , b [ 3 ] ) ? c : null } , hex3ToHex6 : function ( a ) { a = a . split ( "" ) ; return "#" + a [ 1 ] + a [ 1 ] + a [ 2 ] + a [ 2 ] + a [ 3 ] + a [ 3 ] } , hex4ToHex8 : function ( a ) { return this . _ . hex3ToHex6 ( a . substr ( 0 , 4 ) ) + CKEDITOR . tools . repeat ( a [ 4 ] , 2 ) } , extractColorChannelsByPattern : function ( a , b ) { var c = a . match ( b ) ; if ( ! c ) return null ; var d = - 1 === c [ 1 ] . indexOf ( "," ) ? /\s/ : "," , d = c [ 1 ] . split ( d ) , d = CKEDITOR . tools . array . reduce ( d , function ( a , b ) { var c = CKEDITOR . tools . trim ( b ) ; return 0 === c . length ? a : a . concat ( [ c ] ) } , [ ] ) ; c [ 2 ] && ( c = CKEDITOR . tools . trim ( c [ 2 ] . replace ( /[\/,]/ , "" ) ) , d . push ( c ) ) ;
return d } , areColorChannelsValid : function ( a , b , d , f ) { return c ( a , 0 , CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE ) && c ( b , 0 , CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE ) && c ( d , 0 , CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE ) && c ( f , 0 , CKEDITOR . tools . color . MAX _ALPHA _CHANNEL _VALUE ) } , hslToRgb : function ( a , b , c ) { var d = function ( d ) { var g = ( d + a / 30 ) % 12 ; d = b * Math . min ( c , 1 - c ) ; g = Math . min ( g - 3 , 9 - g , 1 ) ; g = Math . max ( - 1 , g ) ; return Math . round ( ( c - d * g ) * CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE ) } ; return [ d ( 0 ) , d ( 8 ) , d ( 4 ) ] } , rgbToHsl : function ( a , b , c ) { a /=
CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE ; b /= CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE ; var d = c / CKEDITOR . tools . color . MAX _RGB _CHANNEL _VALUE , f = Math . max ( a , b , d ) , g = Math . min ( a , b , d ) ; c = f - g ; var x = 0 ; switch ( f ) { 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 = ( f + g ) / 2 ; f = 0 ; 1 !== b && 0 !== b && ( f = c / ( 1 - Math . abs ( 2 * b - 1 ) ) ) ; a = Math . round ( a ) ; f = Math . round ( 100 * f ) ; b = Math . round ( 100 * b ) ; return [ a , f , b ] } } , statics : { TYPE _RGB : 1 , TYPE _HSL : 2 , MAX _RGB _CHANNEL _VALUE : 255 , MAX _ALPHA _CHANNEL _VALUE : 1 , MAX _HUE _CHANNEL _VALUE : 360 ,
@@ -553,23 +553,23 @@ limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",maroon:"#800000",mediumaqu
orchid : "#DA70D6" , palegoldenrod : "#EEE8AA" , palegreen : "#98FB98" , paleturquoise : "#AFEEEE" , palevioletred : "#DB7093" , papayawhip : "#FFEFD5" , peachpuff : "#FFDAB9" , peru : "#CD853F" , pink : "#FFC0CB" , plum : "#DDA0DD" , powderblue : "#B0E0E6" , purple : "#800080" , rebeccapurple : "#663399" , red : "#FF0000" , rosybrown : "#BC8F8F" , royalblue : "#4169E1" , saddlebrown : "#8B4513" , 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 , f ) { var e = null , k = null , h = [ ] , q = b , m ; f = f || b . getDocument ( ) . getBody ( ) ; q || ( q = f ) ; do if ( q . type == CKEDITOR . NODE _ELEMENT ) { h . push ( q ) ; if ( ! this . lastElement && ( this . lastElement = q , q . is ( CKEDITOR . dtd . $object ) || "false" == q . getAttribute ( "contenteditable" ) ) ) continue ; if ( q . equals ( f ) ) break ; if ( ! k && ( m = q . getName ( ) ,
"true" == q . getAttribute ( "contenteditable" ) ? k = q : ! e && d [ m ] && ( e = q ) , a [ m ] ) ) { if ( m = ! e && "div" == m ) { a : { m = q . getChildren ( ) ; for ( var g = 0 , x = m . count ( ) ; g < x ; g ++ ) { var y = m . getItem ( g ) ; if ( y . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $block [ y . getName ( ) ] ) { m = ! 0 ; break a } } m = ! 1 } m = ! m } m ? e = q : k = q } } while ( q = q . getParent ( ) ) ; k || ( k = f ) ; this . block = e ; this . blockLimit = k ; this . root = f ; this . elements = h } } ) ( ) ;
( function ( ) { var a = { } , d = { } , b ; for ( b in CKEDITOR . dtd . $blockLimit ) b in CKEDITOR . dtd . $list || ( a [ b ] = 1 ) ; for ( b in CKEDITOR . dtd . $block ) b in CKEDITOR . dtd . $blockLimit || b in CKEDITOR . dtd . $empty || ( d [ b ] = 1 ) ; CKEDITOR . dom . elementPath = function ( b , f ) { var e = null , k = null , h = [ ] , p = b , m ; f = f || b . getDocument ( ) . getBody ( ) ; p || ( p = f ) ; do if ( p . type == CKEDITOR . NODE _ELEMENT ) { h . push ( p ) ; if ( ! this . lastElement && ( this . lastElement = p , p . is ( CKEDITOR . dtd . $object ) || "false" == p . getAttribute ( "contenteditable" ) ) ) continue ; if ( p . equals ( f ) ) break ; if ( ! k && ( m = p . getName ( ) ,
"true" == p . getAttribute ( "contenteditable" ) ? k = p : ! e && d [ m ] && ( e = p ) , a [ m ] ) ) { if ( m = ! e && "div" == m ) { a : { m = p . getChildren ( ) ; for ( var g = 0 , x = m . count ( ) ; g < x ; g ++ ) { var y = m . getItem ( g ) ; if ( y . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $block [ y . getName ( ) ] ) { m = ! 0 ; break a } } m = ! 1 } m = ! m } m ? e = p : k = p } } while ( p = p . getParent ( ) ) ; k || ( k = f ) ; this . block = e ; this . blockLimit = k ; this . root = f ; this . elements = h } } ) ( ) ;
CKEDITOR . dom . elementPath . prototype = { compare : function ( a ) { var d = this . elements ; a = a && a . elements ; if ( ! a || d . length != a . length ) return ! 1 ; for ( var b = 0 ; b < d . length ; b ++ ) if ( ! d [ b ] . equals ( a [ b ] ) ) return ! 1 ; return ! 0 } , contains : function ( a , d , b ) { var c = 0 , f ; "string" == typeof a && ( f = function ( b ) { return b . getName ( ) == a } ) ; a instanceof CKEDITOR . dom . element ? f = function ( b ) { return b . equals ( a ) } : CKEDITOR . tools . isArray ( a ) ? f = function ( b ) { return - 1 < CKEDITOR . tools . indexOf ( a , b . getName ( ) ) } : "function" == typeof a ? f = a : "object" == typeof a && ( f = function ( b ) { return b . getName ( ) in
a } ) ; var e = this . elements , k = e . length ; d && ( b ? c += 1 : -- k ) ; b && ( e = Array . prototype . slice . call ( e , 0 ) , e . reverse ( ) ) ; for ( ; c < k ; c ++ ) if ( f ( e [ c ] ) ) return e [ c ] ; return null } , isContextFor : function ( a ) { var d ; return a in CKEDITOR . dtd . $block ? ( d = this . contains ( CKEDITOR . dtd . $intermediate ) || this . root . equals ( this . block ) && this . block || this . blockLimit , ! ! d . getDtd ( ) [ a ] ) : ! 0 } , direction : function ( ) { return ( this . block || this . blockLimit || this . root ) . getDirection ( 1 ) } } ;
CKEDITOR . dom . text = function ( a , d ) { "string" == typeof a && ( a = ( d ? d . $ : document ) . createTextNode ( a ) ) ; this . $ = a } ; CKEDITOR . dom . text . prototype = new CKEDITOR . dom . node ;
CKEDITOR . tools . extend ( CKEDITOR . dom . text . prototype , { type : CKEDITOR . NODE _TEXT , getLength : function ( ) { return this . $ . nodeValue . length } , getText : function ( ) { return this . $ . nodeValue } , setText : function ( a ) { this . $ . nodeValue = a } , isEmpty : function ( a ) { var d = this . getText ( ) ; a && ( d = CKEDITOR . tools . trim ( d ) ) ; return ! d || d === CKEDITOR . dom . selection . FILLING _CHAR _SEQUENCE } , split : function ( a ) { var d = this . $ . parentNode , b = d . childNodes . length , c = this . getLength ( ) , f = this . getDocument ( ) , e = new CKEDITOR . dom . text ( this . $ . splitText ( a ) , f ) ; d . childNodes . length ==
b && ( a >= c ? ( e = f . createText ( "" ) , e . insertAfter ( this ) ) : ( a = f . createText ( "" ) , a . insertAfter ( e ) , a . remove ( ) ) ) ; return e } , substring : function ( a , d ) { return "number" != typeof d ? this . $ . nodeValue . substr ( a ) : this . $ . nodeValue . substring ( a , d ) } } ) ;
( function ( ) { function a ( a , c , d ) { var e = a . serializable , k = c [ d ? "endContainer" : "startContainer" ] , h = d ? "endOffset" : "startOffset" , q = e ? c . document . getById ( a . startNode ) : a . startNode ; a = e ? c . document . getById ( a . endNode ) : a . endNode ; k . equals ( q . getPrevious ( ) ) ? ( c . startOffset = c . startOffset - k . getLength ( ) - a . getPrevious ( ) . getLength ( ) , k = a . getNext ( ) ) : k . equals ( a . getPrevious ( ) ) && ( c . startOffset -= k . getLength ( ) , k = a . getNext ( ) ) ; k . equals ( q . getParent ( ) ) && c [ h ] ++ ; k . equals ( a . getParent ( ) ) && c [ h ] ++ ; c [ d ? "endContainer" : "startContainer" ] = k ; return c }
CKEDITOR . dom . rangeList = function ( a ) { if ( a instanceof CKEDITOR . dom . rangeList ) return a ; a ? a instanceof CKEDITOR . dom . range && ( a = [ a ] ) : a = [ ] ; return CKEDITOR . tools . extend ( a , d ) } ; var d = { createIterator : function ( ) { var a = this , c = CKEDITOR . dom . walker . bookmark ( ) , d = [ ] , e ; return { getNextRange : function ( k ) { e = void 0 === e ? 0 : e + 1 ; var h = a [ e ] ; if ( h && 1 < a . length ) { if ( ! e ) for ( var q = a . length - 1 ; 0 <= q ; q -- ) d . unshift ( a [ q ] . createBookmark ( ! 0 ) ) ; if ( k ) for ( var m = 0 ; a [ e + m + 1 ] ; ) { var g = h . document ; k = 0 ; q = g . getById ( d [ m ] . endNode ) ; for ( g = g . getById ( d [ m + 1 ] . startNode ) ; ; ) { q =
q . getNextSourceNode ( ! 1 ) ; if ( g . equals ( q ) ) k = 1 ; else if ( c ( q ) || q . type == CKEDITOR . NODE _ELEMENT && q . isBlockBoundary ( ) ) continue ; break } if ( ! k ) break ; m ++ } for ( h . moveToBookmark ( d . shift ( ) ) ; m -- ; ) q = a [ ++ e ] , q . moveToBookmark ( d . shift ( ) ) , h . setEnd ( q . endContainer , q . endOffset ) } return h } } } , createBookmarks : function ( b ) { for ( var c = [ ] , d , e = 0 ; e < this . length ; e ++ ) { c . push ( d = this [ e ] . createBookmark ( b , ! 0 ) ) ; for ( var k = e + 1 ; k < this . length ; k ++ ) this [ k ] = a ( d , this [ k ] ) , this [ k ] = a ( d , this [ k ] , ! 0 ) } return c } , createBookmarks2 : function ( a ) { for ( var c = [ ] , d = 0 ; d <
( function ( ) { function a ( a , c , d ) { var e = a . serializable , k = c [ d ? "endContainer" : "startContainer" ] , h = d ? "endOffset" : "startOffset" , p = e ? c . document . getById ( a . startNode ) : a . startNode ; a = e ? c . document . getById ( a . endNode ) : a . endNode ; k . equals ( p . getPrevious ( ) ) ? ( c . startOffset = c . startOffset - k . getLength ( ) - a . getPrevious ( ) . getLength ( ) , k = a . getNext ( ) ) : k . equals ( a . getPrevious ( ) ) && ( c . startOffset -= k . getLength ( ) , k = a . getNext ( ) ) ; k . equals ( p . getParent ( ) ) && c [ h ] ++ ; k . equals ( a . getParent ( ) ) && c [ h ] ++ ; c [ d ? "endContainer" : "startContainer" ] = k ; return c }
CKEDITOR . dom . rangeList = function ( a ) { if ( a instanceof CKEDITOR . dom . rangeList ) return a ; a ? a instanceof CKEDITOR . dom . range && ( a = [ a ] ) : a = [ ] ; return CKEDITOR . tools . extend ( a , d ) } ; var d = { createIterator : function ( ) { var a = this , c = CKEDITOR . dom . walker . bookmark ( ) , d = [ ] , e ; return { getNextRange : function ( k ) { e = void 0 === e ? 0 : e + 1 ; var h = a [ e ] ; if ( h && 1 < a . length ) { if ( ! e ) for ( var p = a . length - 1 ; 0 <= p ; p -- ) d . unshift ( a [ p ] . createBookmark ( ! 0 ) ) ; if ( k ) for ( var m = 0 ; a [ e + m + 1 ] ; ) { var g = h . document ; k = 0 ; p = g . getById ( d [ m ] . endNode ) ; for ( g = g . getById ( d [ m + 1 ] . startNode ) ; ; ) { p =
p . getNextSourceNode ( ! 1 ) ; if ( g . equals ( p ) ) k = 1 ; else if ( c ( p ) || p . type == CKEDITOR . NODE _ELEMENT && p . isBlockBoundary ( ) ) continue ; break } if ( ! k ) break ; m ++ } for ( h . moveToBookmark ( d . shift ( ) ) ; m -- ; ) p = a [ ++ e ] , p . moveToBookmark ( d . shift ( ) ) , h . setEnd ( p . endContainer , p . endOffset ) } return h } } } , createBookmarks : function ( b ) { for ( var c = [ ] , d , e = 0 ; e < this . length ; e ++ ) { c . push ( d = this [ e ] . createBookmark ( b , ! 0 ) ) ; for ( var k = e + 1 ; k < this . length ; k ++ ) this [ k ] = a ( d , this [ k ] ) , this [ k ] = a ( d , this [ k ] , ! 0 ) } return c } , createBookmarks2 : function ( a ) { for ( var c = [ ] , d = 0 ; d <
this . length ; d ++ ) c . push ( this [ d ] . createBookmark2 ( a ) ) ; return c } , moveToBookmarks : function ( a ) { for ( var c = 0 ; c < this . length ; c ++ ) this [ c ] . moveToBookmark ( a [ c ] ) } } } ) ( ) ;
( function ( ) { function a ( ) { return CKEDITOR . getUrl ( CKEDITOR . skinName . split ( "," ) [ 1 ] || "skins/" + CKEDITOR . skinName . split ( "," ) [ 0 ] + "/" ) } function d ( b ) { var c = CKEDITOR . skin [ "ua_" + b ] , d = CKEDITOR . env ; if ( c ) for ( var c = c . split ( "," ) . sort ( function ( a , b ) { return a > b ? - 1 : 1 } ) , e = 0 , f ; e < c . length ; e ++ ) if ( f = c [ e ] , d . ie && ( f . replace ( /^ie/ , "" ) == d . version || d . quirks && "iequirks" == f ) && ( f = "ie" ) , d [ f ] ) { b += "_" + c [ e ] ; break } return CKEDITOR . getUrl ( a ( ) + b + ".css" ) } function b ( a , b ) { e [ a ] || ( CKEDITOR . document . appendStyleSheet ( d ( a ) ) , e [ a ] = 1 ) ; b && b ( ) } function c ( a ) { var b =
a . getById ( k ) ; b || ( b = a . getHead ( ) . append ( "style" ) , b . setAttribute ( "id" , k ) , b . setAttribute ( "type" , "text/css" ) ) ; return b } function f ( a , b , c ) { var d , e , f ; if ( CKEDITOR . env . webkit ) for ( b = b . split ( "}" ) . slice ( 0 , - 1 ) , e = 0 ; e < b . length ; e ++ ) b [ e ] = b [ e ] . split ( "{" ) ; for ( var h = 0 ; h < a . length ; h ++ ) if ( CKEDITOR . env . webkit ) for ( e = 0 ; e < b . length ; e ++ ) { f = b [ e ] [ 1 ] ; for ( d = 0 ; d < c . length ; d ++ ) f = f . replace ( c [ d ] [ 0 ] , c [ d ] [ 1 ] ) ; a [ h ] . $ . sheet . addRule ( b [ e ] [ 0 ] , f ) } else { f = b ; for ( d = 0 ; d < c . length ; d ++ ) f = f . replace ( c [ d ] [ 0 ] , c [ d ] [ 1 ] ) ; CKEDITOR . env . ie && 11 > CKEDITOR . env . version ?
a [ h ] . $ . styleSheet . cssText += f : a [ h ] . $ . innerHTML += f } } var e = { } ; CKEDITOR . skin = { path : a , loadPart : function ( c , d ) { CKEDITOR . skin . name != CKEDITOR . skinName . split ( "," ) [ 0 ] ? CKEDITOR . scriptLoader . load ( CKEDITOR . getUrl ( a ( ) + "skin.js" ) , function ( ) { b ( c , d ) } ) : b ( c , d ) } , getPath : function ( a ) { return CKEDITOR . getUrl ( d ( a ) ) } , icons : { } , addIcon : function ( a , b , c , d ) { a = a . toLowerCase ( ) ; this . icons [ a ] || ( this . icons [ a ] = { path : b , offset : c || 0 , bgsize : d || "16px" } ) } , getIconStyle : function ( a , b , c , d , e ) { var f ; a && ( a = a . toLowerCase ( ) , b && ( f = this . icons [ a + "-rtl" ] ) ,
f || ( f = this . icons [ a ] ) ) ; a = c || f && f . path || "" ; d = d || f && f . offset ; e = e || f && f . bgsize || "16px" ; a && ( a = a . replace ( /'/g , "\\'" ) ) ; return a && "background-image:url('" + CKEDITOR . getUrl ( a ) + "');background-position:0 " + d + "px;background-size:" + e + ";" } } ; CKEDITOR . tools . extend ( CKEDITOR . editor . prototype , { getUiColor : function ( ) { return this . uiColor } , setUiColor : function ( a ) { var b = c ( CKEDITOR . document ) ; return ( this . setUiColor = function ( a ) { this . uiColor = a ; var c = CKEDITOR . skin . chameleon , d = "" , e = "" ; "function" == typeof c && ( d = c ( this , "editor" ) , e =
c ( this , "panel" ) ) ; a = [ [ q , a ] ] ; f ( [ b ] , d , a ) ; f ( h , e , a ) } ) . call ( this , a ) } } ) ; var k = "cke_ui_color" , h = [ ] , q = /\$color/g ; CKEDITOR . on ( "instanceLoaded" , function ( a ) { if ( ! CKEDITOR . env . ie || ! CKEDITOR . env . quirks ) { var b = a . editor ; a = function ( a ) { a = ( a . data [ 0 ] || a . data ) . element . getElementsByTag ( "iframe" ) . getItem ( 0 ) . getFrameDocument ( ) ; if ( ! a . getById ( "cke_ui_color" ) ) { var d = c ( a ) ; h . push ( d ) ; b . on ( "destroy" , function ( ) { h = CKEDITOR . tools . array . filter ( h , function ( a ) { return d !== a } ) } ) ; ( a = b . getUiColor ( ) ) && f ( [ d ] , CKEDITOR . skin . chameleon ( b , "panel" ) ,
[ [ q , a ] ] ) } } ; b . on ( "panelShow" , a ) ; b . on ( "menuShow" , a ) ; b . config . uiColor && b . setUiColor ( b . config . uiColor ) } } ) } ) ( ) ;
c ( this , "panel" ) ) ; a = [ [ p , a ] ] ; f ( [ b ] , d , a ) ; f ( h , e , a ) } ) . call ( this , a ) } } ) ; var k = "cke_ui_color" , h = [ ] , p = /\$color/g ; CKEDITOR . on ( "instanceLoaded" , function ( a ) { if ( ! CKEDITOR . env . ie || ! CKEDITOR . env . quirks ) { var b = a . editor ; a = function ( a ) { a = ( a . data [ 0 ] || a . data ) . element . getElementsByTag ( "iframe" ) . getItem ( 0 ) . getFrameDocument ( ) ; if ( ! a . getById ( "cke_ui_color" ) ) { var d = c ( a ) ; h . push ( d ) ; b . on ( "destroy" , function ( ) { h = CKEDITOR . tools . array . filter ( h , function ( a ) { return d !== a } ) } ) ; ( a = b . getUiColor ( ) ) && f ( [ d ] , CKEDITOR . skin . chameleon ( b , "panel" ) ,
[ [ p , a ] ] ) } } ; b . on ( "panelShow" , a ) ; b . on ( "menuShow" , a ) ; b . config . uiColor && b . setUiColor ( b . config . uiColor ) } } ) } ) ( ) ;
( function ( ) { var a = CKEDITOR . dom . element . createFromHtml ( '\x3cdiv style\x3d"width:0;height:0;position:absolute;left:-10000px;border:1px solid;border-color:red blue"\x3e\x3c/div\x3e' , CKEDITOR . document ) ; a . appendTo ( CKEDITOR . document . getHead ( ) ) ; try { var d = a . getComputedStyle ( "border-top-color" ) , b = a . getComputedStyle ( "border-right-color" ) ; CKEDITOR . env . hc = ! ( ! d || d != b ) } catch ( c ) { CKEDITOR . env . hc = ! 1 } a . remove ( ) ; CKEDITOR . env . hc && ( CKEDITOR . env . cssClass += " cke_hc" ) ; CKEDITOR . document . appendStyleText ( ".cke{visibility:hidden;}" ) ;
CKEDITOR . status = "loaded" ; CKEDITOR . fireOnce ( "loaded" ) ; if ( a = CKEDITOR . _ . pending ) for ( delete CKEDITOR . _ . pending , d = 0 ; d < a . length ; d ++ ) CKEDITOR . editor . prototype . constructor . apply ( a [ d ] [ 0 ] , a [ d ] [ 1 ] ) , CKEDITOR . add ( a [ d ] [ 0 ] ) } ) ( ) ; CKEDITOR . skin . name = "n1theme" ; CKEDITOR . skin . ua _editor = "ie,iequirks,ie8,gecko" ; CKEDITOR . skin . ua _dialog = "ie,iequirks,ie8" ; CKEDITOR . plugins . add ( "dialogui" , { onLoad : function ( ) { var h = function ( b ) { this . _ || ( this . _ = { } ) ; this . _ [ "default" ] = this . _ . initValue = b [ "default" ] || "" ; this . _ . required = b . required || ! 1 ; for ( var a = [ this . _ ] , d = 1 ; d < arguments . length ; d ++ ) a . push ( arguments [ d ] ) ; a . push ( ! 0 ) ; CKEDITOR . tools . extend . apply ( CKEDITOR . tools , a ) ; return this . _ } , r = { build : function ( b , a , d ) { return new CKEDITOR . ui . dialog . textInput ( b , a , d ) } } , n = { build : function ( b , a , d ) { return new CKEDITOR . ui . dialog [ a . type ] ( b , a , d ) } } , q = { isChanged : function ( ) { return this . getValue ( ) !=
this . getInitValue ( ) } , reset : function ( b ) { this . setValue ( this . getInitValue ( ) , b ) } , setInitValue : function ( ) { this . _ . initValue = this . getValue ( ) } , resetInitValue : function ( ) { this . _ . initValue = this . _ [ "default" ] } , getInitValue : function ( ) { return this . _ . initValue } } , v = CKEDITOR . tools . extend ( { } , CKEDITOR . ui . dialog . uiElement . prototype . eventProcessors , { onChange : function ( b , a ) { this . _ . domOnChangeRegistered || ( b . on ( "load" , function ( ) { this . getInputElement ( ) . on ( "change" , function ( ) { b . parts . dialog . isVisible ( ) && this . fire ( "change" , { value : this . getValue ( ) } ) } ,
@@ -598,11 +598,11 @@ accessKeyDown:function(){this.focus()},keyboardFocusable:!0},!0);CKEDITOR.ui.dia
setValue : function ( b ) { if ( this . bidi ) { var a = b && b . charAt ( 0 ) ; ( a = " " == a ? "ltr" : " " == a ? "rtl" : null ) && ( b = b . slice ( 1 ) ) ; this . setDirectionMarker ( a ) } b || ( b = "" ) ; return CKEDITOR . ui . dialog . uiElement . prototype . setValue . apply ( this , arguments ) } , getValue : function ( ) { var b = CKEDITOR . ui . dialog . uiElement . prototype . getValue . call ( this ) ; if ( this . bidi && b ) { var a = this . getDirectionMarker ( ) ; a && ( b = ( "ltr" == a ? " " : " " ) + b ) } return b } , setDirectionMarker : function ( b ) { var a = this . getInputElement ( ) ; b ? a . setAttributes ( { dir : b , "data-cke-dir-marker" : b } ) :
this . getDirectionMarker ( ) && a . removeAttributes ( [ "dir" , "data-cke-dir-marker" ] ) } , getDirectionMarker : function ( ) { return this . getInputElement ( ) . data ( "cke-dir-marker" ) } , keyboardFocusable : ! 0 } , q , ! 0 ) ; CKEDITOR . ui . dialog . textarea . prototype = new CKEDITOR . ui . dialog . textInput ; CKEDITOR . ui . dialog . select . prototype = CKEDITOR . tools . extend ( new CKEDITOR . ui . dialog . labeledElement , { getInputElement : function ( ) { return this . _ . select . getElement ( ) } , add : function ( b , a , d ) { var f = new CKEDITOR . dom . element ( "option" , this . getDialog ( ) . getParentEditor ( ) . document ) ,
c = this . getInputElement ( ) . $ ; f . $ . text = b ; f . $ . value = void 0 === a || null === a ? b : a ; void 0 === d || null === d ? CKEDITOR . env . ie ? c . add ( f . $ ) : c . add ( f . $ , null ) : c . add ( f . $ , d ) ; return this } , remove : function ( b ) { this . getInputElement ( ) . $ . remove ( b ) ; return this } , clear : function ( ) { for ( var b = this . getInputElement ( ) . $ ; 0 < b . length ; ) b . remove ( 0 ) ; return this } , keyboardFocusable : ! 0 } , q , ! 0 ) ; CKEDITOR . ui . dialog . checkbox . prototype = CKEDITOR . tools . extend ( new CKEDITOR . ui . dialog . uiElement , { getInputElement : function ( ) { return this . _ . checkbox . getElement ( ) } ,
setValue : function ( b , a ) { this . getInputElement ( ) . $ . checked = b ; ! a && this . fire ( "change" , { value : b } ) } , getValue : function ( ) { return this . getInputElement ( ) . $ . checked } , accessKeyUp : function ( ) { this . setValue ( ! this . getValue ( ) ) } , eventProcessors : { onChange : function ( b , a ) { if ( ! CKEDITOR . env . ie || 8 < CKEDITOR . env . version ) return v . onChange . apply ( this , arguments ) ; b . on ( "load" , function ( ) { var a = this . _ . checkbox . getElement ( ) ; a . on ( "propertychange" , function ( b ) { b = b . data . $ ; "checked" == b . propertyName && this . fire ( "change" , { value : a . $ . checked } ) } ,
this ) } , this ) ; this . on ( "change" , a ) ; return null } } , keyboardFocusable : ! 0 } , q , ! 0 ) ; CKEDITOR . ui . dialog . radio . prototype = CKEDITOR . tools . extend ( new CKEDITOR . ui . dialog . uiElement , { setValue : function ( b , a ) { for ( var d = this . _ . children , f , c = 0 ; c < d . length && ( f = d [ c ] ) ; c ++ ) f . getElement ( ) . $ . checked = f . getValue ( ) == b ; ! a && this . fire ( "change" , { value : b } ) } , getValue : function ( ) { for ( var b = this . _ . children , a = 0 ; a < b . length ; a ++ ) if ( b [ a ] . getElement ( ) . $ . checked ) return b [ a ] . getValue ( ) ; return null } , accessKeyUp : function ( ) { var b = this . _ . children , a ;
for ( a = 0 ; a < b . length ; a ++ ) if ( b [ a ] . getElement ( ) . $ . checked ) { b [ a ] . getElement ( ) . focus ( ) ; return } b [ 0 ] . getElement ( ) . focus ( ) } , eventProcessors : { onChange : function ( b , a ) { if ( ! CKEDITOR . env . ie || 8 < CKEDITOR . env . version ) return v . onChange . apply ( this , arguments ) ; b . on ( "load" , function ( ) { for ( var a = this . _ . children , b = this , c = 0 ; c < a . length ; c ++ ) a [ c ] . getElement ( ) . on ( "propertychange" , function ( a ) { a = a . data . $ ; "checked" == a . propertyName && this . $ . checked && b . fire ( "change" , { value : this . getAttribute ( "value" ) } ) } ) } , this ) ; this . on ( "change" , a ) ; return null } } } ,
q , ! 0 ) ; CKEDITOR . ui . dialog . file . prototype = CKEDITOR . tools . extend ( new CKEDITOR . ui . dialog . labeledElement , q , { getInputElement : function ( ) { var b = CKEDITOR . document . getById ( this . _ . frameId ) . getFrameDocument ( ) ; return 0 < b . $ . forms . length ? new CKEDITOR . dom . element ( b . $ . forms [ 0 ] . elements [ 0 ] ) : this . getElement ( ) } , submit : function ( ) { this . getInputElement ( ) . getParent ( ) . $ . submit ( ) ; return this } , getAction : function ( ) { return this . getInputElement ( ) . getParent ( ) . $ . action } , registerEvents : function ( b ) { var a = /^on([A-Z]\w+)/ , d , f = function ( a ,
b , c , d ) { a . on ( "formLoaded" , function ( ) { a . getInputElement ( ) . on ( c , d , a ) } ) } , c ; for ( c in b ) if ( d = c . match ( a ) ) this . eventProcessors [ c ] ? this . eventProcessors [ c ] . call ( this , this . _ . dialog , b [ c ] ) : f ( this , this . _ . dialog , d [ 1 ] . toLowerCase ( ) , b [ c ] ) ; return this } , reset : function ( ) { function b ( ) { d . $ . open ( ) ; var b = "" ; f . size && ( b = f . size - ( CKEDITOR . env . ie ? 7 : 0 ) ) ; var h = a . frameId + "_input" ; d . $ . write ( [ '\x3chtml dir\x3d"' + g + '" lang\x3d"' + k + '"\x3e\x3chead\x3e\x3ctitle\x3e\x3c/title\x3e\x3c/head\x3e\x3cbody style\x3d"margin: 0; overflow: hidden; background: transparent;"\x3e' ,
setValue : function ( b , a ) { this . getInputElement ( ) . $ . checked = b ; ! a && this . fire ( "change" , { value : b } ) ; return this } , getValue : function ( ) { return this . getInputElement ( ) . $ . checked } , accessKeyUp : function ( ) { this . setValue ( ! this . getValue ( ) ) } , eventProcessors : { onChange : function ( b , a ) { if ( ! CKEDITOR . env . ie || 8 < CKEDITOR . env . version ) return v . onChange . apply ( this , arguments ) ; b . on ( "load" , function ( ) { var a = this . _ . checkbox . getElement ( ) ; a . on ( "propertychange" , function ( b ) { b = b . data . $ ; "checked" == b . propertyName && this . fire ( "change" , { value : a . $ . checked } ) } ,
this ) } , this ) ; this . on ( "change" , a ) ; return null } } , keyboardFocusable : ! 0 } , q , ! 0 ) ; CKEDITOR . ui . dialog . radio . prototype = CKEDITOR . tools . extend ( new CKEDITOR . ui . dialog . uiElement , { setValue : function ( b , a ) { for ( var d = this . _ . children , f , c = 0 ; c < d . length && ( f = d [ c ] ) ; c ++ ) f . getElement ( ) . $ . checked = f . getValue ( ) == b ; ! a && this . fire ( "change" , { value : b } ) ; return this } , getValue : function ( ) { for ( var b = this . _ . children , a = 0 ; a < b . length ; a ++ ) if ( b [ a ] . getElement ( ) . $ . checked ) return b [ a ] . getValue ( ) ; return null } , accessKeyUp : function ( ) { var b = this . _ . children ,
a ; for ( a = 0 ; a < b . length ; a ++ ) if ( b [ a ] . getElement ( ) . $ . checked ) { b [ a ] . getElement ( ) . focus ( ) ; return } b [ 0 ] . getElement ( ) . focus ( ) } , eventProcessors : { onChange : function ( b , a ) { if ( ! CKEDITOR . env . ie || 8 < CKEDITOR . env . version ) return v . onChange . apply ( this , arguments ) ; b . on ( "load" , function ( ) { for ( var a = this . _ . children , b = this , c = 0 ; c < a . length ; c ++ ) a [ c ] . getElement ( ) . on ( "propertychange" , function ( a ) { a = a . data . $ ; "checked" == a . propertyName && this . $ . checked && b . fire ( "change" , { value : this . getAttribute ( "value" ) } ) } ) } , this ) ; this . on ( "change" , a ) ;
return null } } } , q , ! 0 ) ; CKEDITOR . ui . dialog . file . prototype = CKEDITOR . tools . extend ( new CKEDITOR . ui . dialog . labeledElement , q , { getInputElement : function ( ) { var b = CKEDITOR . document . getById ( this . _ . frameId ) . getFrameDocument ( ) ; return 0 < b . $ . forms . length ? new CKEDITOR . dom . element ( b . $ . forms [ 0 ] . elements [ 0 ] ) : this . getElement ( ) } , submit : function ( ) { this . getInputElement ( ) . getParent ( ) . $ . submit ( ) ; return this } , getAction : function ( ) { return this . getInputElement ( ) . getParent ( ) . $ . action } , registerEvents : function ( b ) { var a = /^on([A-Z]\w+)/ ,
d , f = function ( a , b , c , d ) { a . on ( "formLoaded" , function ( ) { a . getInputElement ( ) . on ( c , d , a ) } ) } , c ; for ( c in b ) if ( d = c . match ( a ) ) this . eventProcessors [ c ] ? this . eventProcessors [ c ] . call ( this , this . _ . dialog , b [ c ] ) : f ( this , this . _ . dialog , d [ 1 ] . toLowerCase ( ) , b [ c ] ) ; return this } , reset : function ( ) { function b ( ) { d . $ . open ( ) ; var b = "" ; f . size && ( b = f . size - ( CKEDITOR . env . ie ? 7 : 0 ) ) ; var h = a . frameId + "_input" ; d . $ . write ( [ '\x3chtml dir\x3d"' + g + '" lang\x3d"' + k + '"\x3e\x3chead\x3e\x3ctitle\x3e\x3c/title\x3e\x3c/head\x3e\x3cbody style\x3d"margin: 0; overflow: hidden; background: transparent;"\x3e' ,
'\x3cform enctype\x3d"multipart/form-data" method\x3d"POST" dir\x3d"' + g + '" lang\x3d"' + k + '" action\x3d"' , CKEDITOR . tools . htmlEncode ( f . action ) , '"\x3e\x3clabel id\x3d"' , a . labelId , '" for\x3d"' , h , '" style\x3d"display:none"\x3e' , CKEDITOR . tools . htmlEncode ( f . label ) , '\x3c/label\x3e\x3cinput style\x3d"width:100%" id\x3d"' , h , '" aria-labelledby\x3d"' , a . labelId , '" type\x3d"file" name\x3d"' , CKEDITOR . tools . htmlEncode ( f . id || "cke_upload" ) , '" size\x3d"' , CKEDITOR . tools . htmlEncode ( 0 < b ? b : "" ) , '" /\x3e\x3c/form\x3e\x3c/body\x3e\x3c/html\x3e\x3cscript\x3e' ,
CKEDITOR . env . ie ? "(" + CKEDITOR . tools . fixDomain + ")();" : "" , "window.parent.CKEDITOR.tools.callFunction(" + e + ");" , "window.onbeforeunload \x3d function() {window.parent.CKEDITOR.tools.callFunction(" + m + ")}" , "\x3c/script\x3e" ] . join ( "" ) ) ; d . $ . close ( ) ; for ( b = 0 ; b < c . length ; b ++ ) c [ b ] . enable ( ) } var a = this . _ , d = CKEDITOR . document . getById ( a . frameId ) . getFrameDocument ( ) , f = a . definition , c = a . buttons , e = this . formLoadedNumber , m = this . formUnloadNumber , g = a . dialog . _ . editor . lang . dir , k = a . dialog . _ . editor . langCode ; e || ( e = this . formLoadedNumber =
CKEDITOR . tools . addFunction ( function ( ) { this . fire ( "formLoaded" ) } , this ) , m = this . formUnloadNumber = CKEDITOR . tools . addFunction ( function ( ) { this . getInputElement ( ) . clearCustomData ( ) } , this ) , this . getDialog ( ) . _ . editor . on ( "destroy" , function ( ) { CKEDITOR . tools . removeFunction ( e ) ; CKEDITOR . tools . removeFunction ( m ) } ) ) ; CKEDITOR . env . gecko ? setTimeout ( b , 500 ) : b ( ) } , getValue : function ( ) { return this . getInputElement ( ) . $ . value || "" } , setInitValue : function ( ) { this . _ . initValue = "" } , eventProcessors : { onChange : function ( b , a ) { this . _ . domOnChangeRegistered ||
@@ -614,29 +614,29 @@ a];return null}function K(a,b){for(var c=a.$.getElementsByTagName("input"),e=0,d
this . focus ( ) ) ; b && alert ( b ) ; this . fire ( "validated" , { valid : a , msg : b } ) } function Y ( ) { var a = this . getInputElement ( ) ; a && a . removeAttribute ( "aria-invalid" ) } function Z ( a ) { var b = CKEDITOR . dom . element . createFromHtml ( CKEDITOR . addTemplate ( "dialog" , aa ) . output ( { id : CKEDITOR . tools . getNextNumber ( ) , editorId : a . id , langDir : a . lang . dir , langCode : a . langCode , editorDialogClass : "cke_editor_" + a . name . replace ( /\./g , "\\." ) + "_dialog" , closeTitle : a . lang . common . close , hidpi : CKEDITOR . env . hidpi ? "cke_hidpi" : "" } ) ) , c = b . getChild ( [ 0 , 0 , 0 , 0 , 0 ] ) , e =
c . getChild ( 0 ) , d = c . getChild ( 1 ) ; a . plugins . clipboard && CKEDITOR . plugins . clipboard . preventDefaultDropOnElement ( c ) ; ! CKEDITOR . env . ie || CKEDITOR . env . quirks || CKEDITOR . env . edge || ( a = "javascript:void(function(){" + encodeURIComponent ( "document.open();(" + CKEDITOR . tools . fixDomain + ")();document.close();" ) + "}())" , CKEDITOR . dom . element . createFromHtml ( '\x3ciframe frameBorder\x3d"0" class\x3d"cke_iframe_shim" src\x3d"' + a + '" tabIndex\x3d"-1"\x3e\x3c/iframe\x3e' ) . appendTo ( c . getParent ( ) ) ) ; e . unselectable ( ) ; d . unselectable ( ) ;
return { element : b , parts : { dialog : b . getChild ( 0 ) , title : e , close : d , tabs : c . getChild ( 2 ) , contents : c . getChild ( [ 3 , 0 , 0 , 0 ] ) , footer : c . getChild ( [ 3 , 0 , 1 , 0 ] ) } } } function L ( a , b , c ) { this . element = b ; this . focusIndex = c ; this . tabIndex = 0 ; this . isFocusable = function ( ) { return ! b . getAttribute ( "disabled" ) && b . isVisible ( ) } ; this . focus = function ( ) { a . _ . currentFocusIndex = this . focusIndex ; this . element . focus ( ) } ; b . on ( "keydown" , function ( a ) { a . data . getKeystroke ( ) in { 32 : 1 , 13 : 1 } && this . fire ( "click" ) } ) ; b . on ( "focus" , function ( ) { this . fire ( "mouseover" ) } ) ;
b . on ( "blur" , function ( ) { this . fire ( "mouseout" ) } ) } function ba ( a ) { function b ( ) { a . layout ( ) } var c = CKEDITOR . document . getWindow ( ) ; c . on ( "resize" , b ) ; a . on ( "hide" , function ( ) { c . removeListener ( "resize" , b ) } ) } function M ( a , b ) { this . dialog = a ; for ( var c = b . contents , e = 0 , d ; d = c [ e ] ; e ++ ) c [ e ] = d && new N ( a , d ) ; CKEDITOR . tools . extend ( this , b ) } function N ( a , b ) { this . _ = { dialog : a } ; CKEDITOR . tools . extend ( this , b ) } function ca ( a ) { function b ( b ) { var c = a . getSize ( ) , h = a . parts . dialog . getParent ( ) . getClientSize ( ) , q = b . data . $ . screenX , n = b . data . $ . screenY ,
r = q - e . x , m = n - e . y ; e = { x : q , y : n } ; d . x += r ; d . y += m ; q = d . x + k [ 3 ] < g ? - k [ 3 ] : d . x - k [ 1 ] > h . width - c . width - g ? h . width - c . width + ( "rtl" == f . lang . dir ? 0 : k [ 1 ] ) : d . x ; c = d . y + k [ 0 ] < g ? - k [ 0 ] : d . y - k [ 2 ] > h . height - c . height - g ? h . height - c . height + k [ 2 ] : d . y ; q = Math . floor ( q ) ; c = Math . floor ( c ) ; a . move ( q , c , 1 ) ; b . data . preventDefault ( ) } function c ( ) { CKEDITOR . document . removeListener ( "mousemove" , b ) ; CKEDITOR . document . removeListener ( "mouseup" , c ) ; if ( CKEDITOR . env . ie6Compat ) { var a = u . getChild ( 0 ) . getFrameDocument ( ) ; a . removeListener ( "mousemove" , b ) ; a . removeListener ( "mouseup" ,
b . on ( "blur" , function ( ) { this . fire ( "mouseout" ) } ) } function ba ( a ) { function b ( ) { a . layout ( ) } var c = CKEDITOR . document . getWindow ( ) ; c . on ( "resize" , b ) ; a . on ( "hide" , function ( ) { c . removeListener ( "resize" , b ) } ) } function M ( a , b ) { this . dialog = a ; for ( var c = b . contents , e = 0 , d ; d = c [ e ] ; e ++ ) c [ e ] = d && new N ( a , d ) ; CKEDITOR . tools . extend ( this , b ) } function N ( a , b ) { this . _ = { dialog : a } ; CKEDITOR . tools . extend ( this , b ) } function ca ( a ) { function b ( b ) { var c = a . getSize ( ) , h = a . parts . dialog . getParent ( ) . getClientSize ( ) , q = b . data . $ . screenX , m = b . data . $ . screenY ,
r = q - e . x , n = m - e . y ; e = { x : q , y : m } ; d . x += r ; d . y += n ; q = d . x + k [ 3 ] < g ? - k [ 3 ] : d . x - k [ 1 ] > h . width - c . width - g ? h . width - c . width + ( "rtl" == f . lang . dir ? 0 : k [ 1 ] ) : d . x ; c = d . y + k [ 0 ] < g ? - k [ 0 ] : d . y - k [ 2 ] > h . height - c . height - g ? h . height - c . height + k [ 2 ] : d . y ; q = Math . floor ( q ) ; c = Math . floor ( c ) ; a . move ( q , c , 1 ) ; b . data . preventDefault ( ) } function c ( ) { CKEDITOR . document . removeListener ( "mousemove" , b ) ; CKEDITOR . document . removeListener ( "mouseup" , c ) ; if ( CKEDITOR . env . ie6Compat ) { var a = u . getChild ( 0 ) . getFrameDocument ( ) ; a . removeListener ( "mousemove" , b ) ; a . removeListener ( "mouseup" ,
c ) } } var e = null , d = null , f = a . getParentEditor ( ) , g = f . config . dialog _magnetDistance , k = CKEDITOR . skin . margins || [ 0 , 0 , 0 , 0 ] ; "undefined" == typeof g && ( g = 20 ) ; a . parts . title . on ( "mousedown" , function ( f ) { if ( ! a . _ . moved ) { var g = a . _ . element ; g . getFirst ( ) . setStyle ( "position" , "absolute" ) ; g . removeStyle ( "display" ) ; a . _ . moved = ! 0 ; a . layout ( ) } e = { x : f . data . $ . screenX , y : f . data . $ . screenY } ; CKEDITOR . document . on ( "mousemove" , b ) ; CKEDITOR . document . on ( "mouseup" , c ) ; d = a . getPosition ( ) ; CKEDITOR . env . ie6Compat && ( g = u . getChild ( 0 ) . getFrameDocument ( ) , g . on ( "mousemove" ,
b ) , g . on ( "mouseup" , c ) ) ; f . data . preventDefault ( ) } , a ) } function da ( a ) { function b ( b ) { var c = "rtl" == f . lang . dir , n = h . width , q = h . height , w = n + ( b . data . $ . screenX - l . x ) * ( c ? - 1 : 1 ) * ( a . _ . moved ? 1 : 2 ) , A = q + ( b . data . $ . screenY - l . y ) * ( a . _ . moved ? 1 : 2 ) , C = a . _ . element . getFirst ( ) , C = c && parseInt ( C . getComputedStyle ( "right" ) , 10 ) , v = a . getPosition ( ) ; v . x = v . x || 0 ; v . y = v . y || 0 ; v . y + A > p . height && ( A = p . height - v . y ) ; ( c ? C : v . x ) + w > p . width && ( w = p . width - ( c ? C : v . x ) ) ; A = Math . floor ( A ) ; w = Math . floor ( w ) ; if ( d == CKEDITOR . DIALOG _RESIZE _WIDTH || d == CKEDITOR . DIALOG _RESIZE _BOTH ) n =
Math . max ( e . minWidth || 0 , w - g ) ; if ( d == CKEDITOR . DIALOG _RESIZE _HEIGHT || d == CKEDITOR . DIALOG _RESIZE _BOTH ) q = Math . max ( e . minHeight || 0 , A - k ) ; a . resize ( n , q ) ; a . _ . moved && O ( a , a . _ . position . x , a . _ . position . y ) ; a . _ . moved || a . layout ( ) ; b . data . preventDefault ( ) } function c ( ) { CKEDITOR . document . removeListener ( "mouseup" , c ) ; CKEDITOR . document . removeListener ( "mousemove" , b ) ; q && ( q . remove ( ) , q = null ) ; if ( CKEDITOR . env . ie6Compat ) { var a = u . getChild ( 0 ) . getFrameDocument ( ) ; a . removeListener ( "mouseup" , c ) ; a . removeListener ( "mousemove" , b ) } } var e = a . definition ,
d = e . resizable ; if ( d != CKEDITOR . DIALOG _RESIZE _NONE ) { var f = a . getParentEditor ( ) , g , k , p , l , h , q , n = CKEDITOR . tools . addFunction ( function ( d ) { function e ( a ) { return a . isVisible ( ) } h = a . getSize ( ) ; var f = a . parts . contents , n = f . $ . getElementsByTagName ( "iframe" ) . length , w = ! ( CKEDITOR . env . gecko || CKEDITOR . env . ie && CKEDITOR . env . quirks ) ; n && ( q = CKEDITOR . dom . element . createFromHtml ( '\x3cdiv class\x3d"cke_dialog_resize_cover" style\x3d"height: 100%; position: absolute; width: 100%; left:0; top:0;"\x3e\x3c/div\x3e' ) , f . append ( q ) ) ; k = h . height -
b ) , g . on ( "mouseup" , c ) ) ; f . data . preventDefault ( ) } , a ) } function da ( a ) { function b ( b ) { var c = "rtl" == f . lang . dir , m = h . width , q = h . height , w = m + ( b . data . $ . screenX - l . x ) * ( c ? - 1 : 1 ) * ( a . _ . moved ? 1 : 2 ) , A = q + ( b . data . $ . screenY - l . y ) * ( a . _ . moved ? 1 : 2 ) , C = a . _ . element . getFirst ( ) , C = c && parseInt ( C . getComputedStyle ( "right" ) , 10 ) , v = a . getPosition ( ) ; v . x = v . x || 0 ; v . y = v . y || 0 ; v . y + A > p . height && ( A = p . height - v . y ) ; ( c ? C : v . x ) + w > p . width && ( w = p . width - ( c ? C : v . x ) ) ; A = Math . floor ( A ) ; w = Math . floor ( w ) ; if ( d == CKEDITOR . DIALOG _RESIZE _WIDTH || d == CKEDITOR . DIALOG _RESIZE _BOTH ) m =
Math . max ( e . minWidth || 0 , w - g ) ; if ( d == CKEDITOR . DIALOG _RESIZE _HEIGHT || d == CKEDITOR . DIALOG _RESIZE _BOTH ) q = Math . max ( e . minHeight || 0 , A - k ) ; a . resize ( m , q ) ; a . _ . moved && O ( a , a . _ . position . x , a . _ . position . y ) ; a . _ . moved || a . layout ( ) ; b . data . preventDefault ( ) } function c ( ) { CKEDITOR . document . removeListener ( "mouseup" , c ) ; CKEDITOR . document . removeListener ( "mousemove" , b ) ; q && ( q . remove ( ) , q = null ) ; if ( CKEDITOR . env . ie6Compat ) { var a = u . getChild ( 0 ) . getFrameDocument ( ) ; a . removeListener ( "mouseup" , c ) ; a . removeListener ( "mousemove" , b ) } } var e = a . definition ,
d = e . resizable ; if ( d != CKEDITOR . DIALOG _RESIZE _NONE ) { var f = a . getParentEditor ( ) , g , k , p , l , h , q , m = CKEDITOR . tools . addFunction ( function ( d ) { function e ( a ) { return a . isVisible ( ) } h = a . getSize ( ) ; var f = a . parts . contents , m = f . $ . getElementsByTagName ( "iframe" ) . length , w = ! ( CKEDITOR . env . gecko || CKEDITOR . env . ie && CKEDITOR . env . quirks ) ; m && ( q = CKEDITOR . dom . element . createFromHtml ( '\x3cdiv class\x3d"cke_dialog_resize_cover" style\x3d"height: 100%; position: absolute; width: 100%; left:0; top:0;"\x3e\x3c/div\x3e' ) , f . append ( q ) ) ; k = h . height -
a . parts . contents . getFirst ( e ) . getSize ( "height" , w ) ; g = h . width - a . parts . contents . getFirst ( e ) . getSize ( "width" , 1 ) ; l = { x : d . screenX , y : d . screenY } ; p = CKEDITOR . document . getWindow ( ) . getViewPaneSize ( ) ; CKEDITOR . document . on ( "mousemove" , b ) ; CKEDITOR . document . on ( "mouseup" , c ) ; CKEDITOR . env . ie6Compat && ( f = u . getChild ( 0 ) . getFrameDocument ( ) , f . on ( "mousemove" , b ) , f . on ( "mouseup" , c ) ) ; d . preventDefault && d . preventDefault ( ) } ) ; a . on ( "load" , function ( ) { var b = "" ; d == CKEDITOR . DIALOG _RESIZE _WIDTH ? b = " cke_resizer_horizontal" : d == CKEDITOR . DIALOG _RESIZE _HEIGHT &&
( b = " cke_resizer_vertical" ) ; b = CKEDITOR . dom . element . createFromHtml ( '\x3cdiv class\x3d"cke_resizer' + b + " cke_resizer_" + f . lang . dir + '" title\x3d"' + CKEDITOR . tools . htmlEncode ( f . lang . common . resize ) + '" onmousedown\x3d"CKEDITOR.tools.callFunction(' + n + ', event )"\x3e' + ( "ltr" == f . lang . dir ? "◢" : "◣" ) + "\x3c/div\x3e" ) ; a . parts . footer . append ( b , 1 ) } ) ; f . on ( "destroy" , function ( ) { CKEDITOR . tools . removeFunction ( n ) } ) } } function O ( a , b , c ) { var e = a . parts . dialog . getParent ( ) . getClientSize ( ) , d = a . getSize ( ) , f = a . _ . viewportRatio , g = Math . max ( e . width -
( b = " cke_resizer_vertical" ) ; b = CKEDITOR . dom . element . createFromHtml ( '\x3cdiv class\x3d"cke_resizer' + b + " cke_resizer_" + f . lang . dir + '" title\x3d"' + CKEDITOR . tools . htmlEncode ( f . lang . common . resize ) + '" onmousedown\x3d"CKEDITOR.tools.callFunction(' + m + ', event )"\x3e' + ( "ltr" == f . lang . dir ? "◢" : "◣" ) + "\x3c/div\x3e" ) ; a . parts . footer . append ( b , 1 ) } ) ; f . on ( "destroy" , function ( ) { CKEDITOR . tools . removeFunction ( m ) } ) } } function O ( a , b , c ) { var e = a . parts . dialog . getParent ( ) . getClientSize ( ) , d = a . getSize ( ) , f = a . _ . viewportRatio , g = Math . max ( e . width -
d . width , 0 ) , e = Math . max ( e . height - d . height , 0 ) ; f . width = g ? b / g : f . width ; f . height = e ? c / e : f . height ; a . _ . viewportRatio = f } function H ( a ) { a . data . preventDefault ( 1 ) } function P ( a ) { var b = a . config , c = CKEDITOR . skinName || a . config . skin , e = b . dialog _backgroundCoverColor || ( "moono-lisa" == c ? "black" : "white" ) , c = b . dialog _backgroundCoverOpacity , d = b . baseFloatZIndex , b = CKEDITOR . tools . genKey ( e , c , d ) , f = B [ b ] ; CKEDITOR . document . getBody ( ) . addClass ( "cke_dialog_open" ) ; f ? f . show ( ) : ( d = [ '\x3cdiv tabIndex\x3d"-1" style\x3d"position: ' , CKEDITOR . env . ie6Compat ?
"absolute" : "fixed" , "; z-index: " , d , "; top: 0px; left: 0px; " , "; width: 100%; height: 100%;" , CKEDITOR . env . ie6Compat ? "" : "background-color: " + e , '" class\x3d"cke_dialog_background_cover"\x3e' ] , CKEDITOR . env . ie6Compat && ( e = "\x3chtml\x3e\x3cbody style\x3d\\'background-color:" + e + ";\\'\x3e\x3c/body\x3e\x3c/html\x3e" , d . push ( '\x3ciframe hidefocus\x3d"true" frameborder\x3d"0" id\x3d"cke_dialog_background_iframe" src\x3d"javascript:' ) , d . push ( "void((function(){" + encodeURIComponent ( "document.open();(" + CKEDITOR . tools . fixDomain +
")();document.write( '" + e + "' );document.close();" ) + "})())" ) , d . push ( '" style\x3d"position:absolute;left:0;top:0;width:100%;height: 100%;filter: progid:DXImageTransform.Microsoft.Alpha(opacity\x3d0)"\x3e\x3c/iframe\x3e' ) ) , d . push ( "\x3c/div\x3e" ) , f = CKEDITOR . dom . element . createFromHtml ( d . join ( "" ) ) , f . setOpacity ( void 0 !== c ? c : . 5 ) , f . on ( "keydown" , H ) , f . on ( "keypress" , H ) , f . on ( "keyup" , H ) , f . appendTo ( CKEDITOR . document . getBody ( ) ) , B [ b ] = f ) ; a . focusManager . add ( f ) ; u = f ; CKEDITOR . env . mac && CKEDITOR . env . webkit || f . focus ( ) } function Q ( a ) { CKEDITOR . document . getBody ( ) . removeClass ( "cke_dialog_open" ) ;
u && ( a . focusManager . remove ( u ) , u . hide ( ) ) } function R ( a ) { var b = a . data . $ . ctrlKey || a . data . $ . metaKey , c = a . data . $ . altKey , e = a . data . $ . shiftKey , d = String . fromCharCode ( a . data . $ . keyCode ) ; ( b = x [ ( b ? "CTRL+" : "" ) + ( c ? "ALT+" : "" ) + ( e ? "SHIFT+" : "" ) + d ] ) && b . length && ( b = b [ b . length - 1 ] , b . keydown && b . keydown . call ( b . uiElement , b . dialog , b . key ) , a . data . preventDefault ( ) ) } function S ( a ) { var b = a . data . $ . ctrlKey || a . data . $ . metaKey , c = a . data . $ . altKey , e = a . data . $ . shiftKey , d = String . fromCharCode ( a . data . $ . keyCode ) ; ( b = x [ ( b ? "CTRL+" : "" ) + ( c ? "ALT+" : "" ) + ( e ?
"SHIFT+" : "" ) + d ] ) && b . length && ( b = b [ b . length - 1 ] , b . keyup && ( b . keyup . call ( b . uiElement , b . dialog , b . key ) , a . data . preventDefault ( ) ) ) } function T ( a , b , c , e , d ) { ( x [ c ] || ( x [ c ] = [ ] ) ) . push ( { uiElement : a , dialog : b , key : c , keyup : d || a . accessKeyUp , keydown : e || a . accessKeyDown } ) } function ea ( a ) { for ( var b in x ) { for ( var c = x [ b ] , e = c . length - 1 ; 0 <= e ; e -- ) c [ e ] . dialog != a && c [ e ] . uiElement != a || c . splice ( e , 1 ) ; 0 === c . length && delete x [ b ] } } function fa ( a , b ) { a . _ . accessKeyMap [ b ] && a . selectPage ( a . _ . accessKeyMap [ b ] ) } function ga ( ) { } var y = CKEDITOR . tools . cssLength ,
U , u , V = ! 1 , D = ! CKEDITOR . env . ie || CKEDITOR . env . edge , aa = '\x3cdiv class\x3d"cke_reset_all cke_dialog_container {editorId} {editorDialogClass} {hidpi}" dir\x3d"{langDir}" style\x3d"' + ( D ? "display:flex" : "" ) + '" lang\x3d"{langCode}" role\x3d"dialog" aria-labelledby\x3d"cke_dialog_title_{id}"\x3e\x3ctable class\x3d"cke_dialog ' + CKEDITOR . env . cssClass + ' cke_{langDir}" style\x3d"' + ( D ? "margin:auto" : "position:absolute" ) + '" role\x3d"presentation"\x3e\x3ctr\x3e\x3ctd role\x3d"presentation"\x3e\x3cdiv class\x3d"cke_dialog_body" role\x3d"presentation"\x3e\x3cdiv id\x3d"cke_dialog_title_{id}" class\x3d"cke_dialog_title" role\x3d"presentation"\x3e\x3c/div\x3e\x3ca id\x3d"cke_dialog_close_button_{id}" class\x3d"cke_dialog_close_button" href\x3d"javascript:void(0)" title\x3d"{closeTitle}" role\x3d"button"\x3e\x3cspan class\x3d"cke_label"\x3eX\x3c/span\x3e\x3c/a\x3e\x3cdiv id\x3d"cke_dialog_tabs_{id}" class\x3d"cke_dialog_tabs" role\x3d"tablist"\x3e\x3c/div\x3e\x3ctable class\x3d"cke_dialog_contents" role\x3d"presentation"\x3e\x3ctr\x3e\x3ctd id\x3d"cke_dialog_contents_{id}" class\x3d"cke_dialog_contents_body" role\x3d"presentation"\x3e\x3c/td\x3e\x3c/tr\x3e\x3ctr\x3e\x3ctd id\x3d"cke_dialog_footer_{id}" class\x3d"cke_dialog_footer" role\x3d"presentation"\x3e\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e\x3c/div\x3e\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e\x3c/div\x3e' ;
CKEDITOR . dialog = function ( a , b ) { function c ( ) { var a = m . _ . focusList ; a . sort ( function ( a , b ) { return a . tabIndex != b . tabIndex ? b . tabIndex - a . tabIndex : a . focusIndex - b . focusIndex } ) ; for ( var b = a . length , c = 0 ; c < b ; c ++ ) a [ c ] . focusIndex = c } function e ( a ) { var b = m . _ . focusList ; a = a || 0 ; if ( ! ( 1 > b . length ) ) { var c = m . _ . currentFocusIndex ; m . _ . tabBarMode && 0 > a && ( c = 0 ) ; try { b [ c ] . getInputElement ( ) . $ . blur ( ) } catch ( d ) { } var e = c , f = 1 < m . _ . pageCount ; do { e += a ; if ( f && ! m . _ . tabBarMode && ( e == b . length || - 1 == e ) ) { m . _ . tabBarMode = ! 0 ; m . _ . tabs [ m . _ . currentTabId ] [ 0 ] . focus ( ) ;
m . _ . currentFocusIndex = - 1 ; return } e = ( e + b . length ) % b . length ; if ( e == c ) break } while ( a && ! b [ e ] . isFocusable ( ) ) ; b [ e ] . focus ( ) ; "text" == b [ e ] . type && b [ e ] . select ( ) } } function d ( b ) { if ( m == CKEDITOR . dialog . _ . currentTop ) { var c = b . data . getKeystroke ( ) , d = "rtl" == a . lang . dir , g = [ 37 , 38 , 39 , 40 ] ; q = n = 0 ; if ( 9 == c || c == CKEDITOR . SHIFT + 9 ) e ( c == CKEDITOR . SHIFT + 9 ? - 1 : 1 ) , q = 1 ; else if ( c == CKEDITOR . ALT + 121 && ! m . _ . tabBarMode && 1 < m . getPageCount ( ) ) I ( m ) , q = 1 ; else if ( - 1 != CKEDITOR . tools . indexOf ( g , c ) && m . _ . tabBarMode ) c = - 1 != CKEDITOR . tools . indexOf ( [ d ? 39 : 37 , 38 ] , c ) ?
J . call ( m ) : W . call ( m ) , m . selectPage ( c ) , m . _ . tabs [ c ] [ 0 ] . focus ( ) , q = 1 ; else if ( 13 != c && 32 != c || ! m . _ . tabBarMode ) if ( 13 == c ) c = b . data . getTarget ( ) , c . is ( "a" , "button" , "select" , "textarea" ) || c . is ( "input" ) && "button" == c . $ . type || ( ( c = this . getButton ( "ok" ) ) && CKEDITOR . tools . setTimeout ( c . click , 0 , c ) , q = 1 ) , n = 1 ; else if ( 27 == c ) ( c = this . getButton ( "cancel" ) ) ? CKEDITOR . tools . setTimeout ( c . click , 0 , c ) : ! 1 !== this . fire ( "cancel" , { hide : ! 0 } ) . hide && this . hide ( ) , n = 1 ; else return ; else this . selectPage ( this . _ . currentTabId ) , this . _ . tabBarMode = ! 1 , this . _ . currentFocusIndex =
- 1 , e ( 1 ) , q = 1 ; f ( b ) } } function f ( a ) { q ? a . data . preventDefault ( 1 ) : n && a . data . stopPropagation ( ) } var g = CKEDITOR . dialog . _ . dialogDefinitions [ b ] , k = CKEDITOR . tools . clone ( U ) , p = a . config . dialog _buttonsOrder || "OS" , l = a . lang . dir , h = { } , q , n ; ( "OS" == p && CKEDITOR . env . mac || "rtl" == p && "ltr" == l || "ltr" == p && "rtl" == l ) && k . buttons . reverse ( ) ; g = CKEDITOR . tools . extend ( g ( a ) , k ) ; g = CKEDITOR . tools . clone ( g ) ; g = new M ( this , g ) ; k = Z ( a ) ; this . _ = { editor : a , element : k . element , name : b , model : null , contentSize : { width : 0 , height : 0 } , size : { width : 0 , height : 0 } , contents : { } ,
CKEDITOR . dialog = function ( a , b ) { function c ( ) { var a = n . _ . focusList ; a . sort ( function ( a , b ) { return a . tabIndex != b . tabIndex ? b . tabIndex - a . tabIndex : a . focusIndex - b . focusIndex } ) ; for ( var b = a . length , c = 0 ; c < b ; c ++ ) a [ c ] . focusIndex = c } function e ( a ) { var b = n . _ . focusList ; a = a || 0 ; if ( ! ( 1 > b . length ) ) { var c = n . _ . currentFocusIndex ; n . _ . tabBarMode && 0 > a && ( c = 0 ) ; try { b [ c ] . getInputElement ( ) . $ . blur ( ) } catch ( d ) { } var e = c , f = 1 < n . _ . pageCount ; do { e += a ; if ( f && ! n . _ . tabBarMode && ( e == b . length || - 1 == e ) ) { n . _ . tabBarMode = ! 0 ; n . _ . tabs [ n . _ . currentTabId ] [ 0 ] . focus ( ) ;
n . _ . currentFocusIndex = - 1 ; return } e = ( e + b . length ) % b . length ; if ( e == c ) break } while ( a && ! b [ e ] . isFocusable ( ) ) ; b [ e ] . focus ( ) ; "text" == b [ e ] . type && b [ e ] . select ( ) } } function d ( b ) { if ( n == CKEDITOR . dialog . _ . currentTop ) { var c = b . data . getKeystroke ( ) , d = "rtl" == a . lang . dir , g = [ 37 , 38 , 39 , 40 ] ; q = m = 0 ; if ( 9 == c || c == CKEDITOR . SHIFT + 9 ) e ( c == CKEDITOR . SHIFT + 9 ? - 1 : 1 ) , q = 1 ; else if ( c == CKEDITOR . ALT + 121 && ! n . _ . tabBarMode && 1 < n . getPageCount ( ) ) I ( n ) , q = 1 ; else if ( - 1 != CKEDITOR . tools . indexOf ( g , c ) && n . _ . tabBarMode ) c = - 1 != CKEDITOR . tools . indexOf ( [ d ? 39 : 37 , 38 ] , c ) ?
J . call ( n ) : W . call ( n ) , n . selectPage ( c ) , n . _ . tabs [ c ] [ 0 ] . focus ( ) , q = 1 ; else if ( 13 != c && 32 != c || ! n . _ . tabBarMode ) if ( 13 == c ) c = b . data . getTarget ( ) , c . is ( "a" , "button" , "select" , "textarea" ) || c . is ( "input" ) && "button" == c . $ . type || ( ( c = this . getButton ( "ok" ) ) && CKEDITOR . tools . setTimeout ( c . click , 0 , c ) , q = 1 ) , m = 1 ; else if ( 27 == c ) ( c = this . getButton ( "cancel" ) ) ? CKEDITOR . tools . setTimeout ( c . click , 0 , c ) : ! 1 !== this . fire ( "cancel" , { hide : ! 0 } ) . hide && this . hide ( ) , m = 1 ; else return ; else this . selectPage ( this . _ . currentTabId ) , this . _ . tabBarMode = ! 1 , this . _ . currentFocusIndex =
- 1 , e ( 1 ) , q = 1 ; f ( b ) } } function f ( a ) { q ? a . data . preventDefault ( 1 ) : m && a . data . stopPropagation ( ) } var g = CKEDITOR . dialog . _ . dialogDefinitions [ b ] , k = CKEDITOR . tools . clone ( U ) , p = a . config . dialog _buttonsOrder || "OS" , l = a . lang . dir , h = { } , q , m ; ( "OS" == p && CKEDITOR . env . mac || "rtl" == p && "ltr" == l || "ltr" == p && "rtl" == l ) && k . buttons . reverse ( ) ; g = CKEDITOR . tools . extend ( g ( a ) , k ) ; g = CKEDITOR . tools . clone ( g ) ; g = new M ( this , g ) ; k = Z ( a ) ; this . _ = { editor : a , element : k . element , name : b , model : null , contentSize : { width : 0 , height : 0 } , size : { width : 0 , height : 0 } , contents : { } ,
buttons : { } , accessKeyMap : { } , viewportRatio : { width : . 5 , height : . 5 } , tabs : { } , tabIdList : [ ] , currentTabId : null , currentTabIndex : null , pageCount : 0 , lastTab : null , tabBarMode : ! 1 , focusList : [ ] , currentFocusIndex : 0 , hasFocus : ! 1 } ; this . parts = k . parts ; CKEDITOR . tools . setTimeout ( function ( ) { a . fire ( "ariaWidget" , this . parts . contents ) } , 0 , this ) ; k = { top : 0 , visibility : "hidden" } ; CKEDITOR . env . ie6Compat && ( k . position = "absolute" ) ; k [ "rtl" == l ? "right" : "left" ] = 0 ; this . parts . dialog . setStyles ( k ) ; CKEDITOR . event . call ( this ) ; this . definition = g = CKEDITOR . fire ( "dialogDefinition" ,
{ name : b , definition : g , dialog : this } , a ) . definition ; if ( ! ( "removeDialogTabs" in a . _ ) && a . config . removeDialogTabs ) { k = a . config . removeDialogTabs . split ( ";" ) ; for ( l = 0 ; l < k . length ; l ++ ) if ( p = k [ l ] . split ( ":" ) , 2 == p . length ) { var r = p [ 0 ] ; h [ r ] || ( h [ r ] = [ ] ) ; h [ r ] . push ( p [ 1 ] ) } a . _ . removeDialogTabs = h } if ( a . _ . removeDialogTabs && ( h = a . _ . removeDialogTabs [ b ] ) ) for ( l = 0 ; l < h . length ; l ++ ) g . removeContents ( h [ l ] ) ; if ( g . onLoad ) this . on ( "load" , g . onLoad ) ; if ( g . onShow ) this . on ( "show" , g . onShow ) ; if ( g . onHide ) this . on ( "hide" , g . onHide ) ; if ( g . onOk ) this . on ( "ok" ,
function ( b ) { a . fire ( "saveSnapshot" ) ; setTimeout ( function ( ) { a . fire ( "saveSnapshot" ) } , 0 ) ; ! 1 === g . onOk . call ( this , b ) && ( b . data . hide = ! 1 ) } ) ; this . state = CKEDITOR . DIALOG _STATE _IDLE ; if ( g . onCancel ) this . on ( "cancel" , function ( a ) { ! 1 === g . onCancel . call ( this , a ) && ( a . data . hide = ! 1 ) } ) ; var m = this , t = function ( a ) { var b = m . _ . contents , c = ! 1 , d ; for ( d in b ) for ( var e in b [ d ] ) if ( c = a . call ( this , b [ d ] [ e ] ) ) return } ; this . on ( "ok" , function ( a ) { t ( function ( b ) { if ( b . validate ) { var c = b . validate ( this ) , d = "string" == typeof c || ! 1 === c ; d && ( a . data . hide = ! 1 , a . stop ( ) ) ;
function ( b ) { a . fire ( "saveSnapshot" ) ; setTimeout ( function ( ) { a . fire ( "saveSnapshot" ) } , 0 ) ; ! 1 === g . onOk . call ( this , b ) && ( b . data . hide = ! 1 ) } ) ; this . state = CKEDITOR . DIALOG _STATE _IDLE ; if ( g . onCancel ) this . on ( "cancel" , function ( a ) { ! 1 === g . onCancel . call ( this , a ) && ( a . data . hide = ! 1 ) } ) ; var n = this , t = function ( a ) { var b = n . _ . contents , c = ! 1 , d ; for ( d in b ) for ( var e in b [ d ] ) if ( c = a . call ( this , b [ d ] [ e ] ) ) return } ; this . on ( "ok" , function ( a ) { t ( function ( b ) { if ( b . validate ) { var c = b . validate ( this ) , d = "string" == typeof c || ! 1 === c ; d && ( a . data . hide = ! 1 , a . stop ( ) ) ;
X . call ( b , ! d , "string" == typeof c ? c : void 0 ) ; return d } } ) } , this , null , 0 ) ; this . on ( "cancel" , function ( b ) { t ( function ( c ) { if ( c . isChanged ( ) ) return a . config . dialog _noConfirmCancel || confirm ( a . lang . common . confirmCancel ) || ( b . data . hide = ! 1 ) , ! 0 } ) } , this , null , 0 ) ; this . parts . close . on ( "click" , function ( a ) { ! 1 !== this . fire ( "cancel" , { hide : ! 0 } ) . hide && this . hide ( ) ; a . data . preventDefault ( ) } , this ) ; this . changeFocus = e ; var z = this . _ . element ; a . focusManager . add ( z , 1 ) ; this . on ( "show" , function ( ) { z . on ( "keydown" , d , this ) ; if ( CKEDITOR . env . gecko ) z . on ( "keypress" ,
f , this ) } ) ; this . on ( "hide" , function ( ) { z . removeListener ( "keydown" , d ) ; CKEDITOR . env . gecko && z . removeListener ( "keypress" , f ) ; t ( function ( a ) { Y . apply ( a ) } ) } ) ; this . on ( "iframeAdded" , function ( a ) { ( new CKEDITOR . dom . document ( a . data . iframe . $ . contentWindow . document ) ) . on ( "keydown" , d , this , null , 0 ) } ) ; this . on ( "show" , function ( ) { c ( ) ; var b = 1 < m . _ . pageCount ; a . config . dialog _startupFocusTab && b ? ( m . _ . tabBarMode = ! 0 , m . _ . tabs [ m . _ . currentTabId ] [ 0 ] . focus ( ) , m . _ . currentFocusIndex = - 1 ) : this . _ . hasFocus || ( this . _ . currentFocusIndex = b ? - 1 : this . _ . focusList . length -
f , this ) } ) ; this . on ( "hide" , function ( ) { z . removeListener ( "keydown" , d ) ; CKEDITOR . env . gecko && z . removeListener ( "keypress" , f ) ; t ( function ( a ) { Y . apply ( a ) } ) } ) ; this . on ( "iframeAdded" , function ( a ) { ( new CKEDITOR . dom . document ( a . data . iframe . $ . contentWindow . document ) ) . on ( "keydown" , d , this , null , 0 ) } ) ; this . on ( "show" , function ( ) { c ( ) ; var b = 1 < n . _ . pageCount ; a . config . dialog _startupFocusTab && b ? ( n . _ . tabBarMode = ! 0 , n . _ . tabs [ n . _ . currentTabId ] [ 0 ] . focus ( ) , n . _ . currentFocusIndex = - 1 ) : this . _ . hasFocus || ( this . _ . currentFocusIndex = b ? - 1 : this . _ . focusList . length -
1 , g . onFocus ? ( b = g . onFocus . call ( this ) ) && b . focus ( ) : e ( 1 ) ) } , this , null , 4294967295 ) ; if ( CKEDITOR . env . ie6Compat ) this . on ( "load" , function ( ) { var a = this . getElement ( ) , b = a . getFirst ( ) ; b . remove ( ) ; b . appendTo ( a ) } , this ) ; ca ( this ) ; da ( this ) ; ( new CKEDITOR . dom . text ( g . title , CKEDITOR . document ) ) . appendTo ( this . parts . title ) ; for ( l = 0 ; l < g . contents . length ; l ++ ) ( h = g . contents [ l ] ) && this . addPage ( h ) ; this . parts . tabs . on ( "click" , function ( a ) { var b = a . data . getTarget ( ) ; b . hasClass ( "cke_dialog_tab" ) && ( b = b . $ . id , this . selectPage ( b . substring ( 4 , b . lastIndexOf ( "_" ) ) ) ,
I ( this ) , a . data . preventDefault ( ) ) } , this ) ; l = [ ] ; h = CKEDITOR . dialog . _ . uiElementBuilders . hbox . build ( this , { type : "hbox" , className : "cke_dialog_footer_buttons" , widths : [ ] , children : g . buttons } , l ) . getChild ( ) ; this . parts . footer . setHtml ( l . join ( "" ) ) ; for ( l = 0 ; l < h . length ; l ++ ) this . _ . buttons [ h [ l ] . id ] = h [ l ] } ; CKEDITOR . dialog . prototype = { destroy : function ( ) { this . hide ( ) ; this . _ . element . remove ( ) } , resize : function ( a , b ) { if ( ! this . _ . contentSize || this . _ . contentSize . width != a || this . _ . contentSize . height != b ) { CKEDITOR . dialog . fire ( "resize" ,
{ 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 ||
@@ -662,9 +662,9 @@ isTabEnabled:function(a,b,c){a=a.config.removeDialogTabs;return!(a&&a.match(new
function ( a , c ) { c = c || { } ; return CKEDITOR . tools . extend ( { id : "cancel" , type : "button" , label : a . lang . common . cancel , "class" : "cke_dialog_ui_button_cancel" , onClick : function ( a ) { a = a . data . dialog ; ! 1 !== a . fire ( "cancel" , { hide : ! 0 } ) . hide && a . hide ( ) } } , c , ! 0 ) } ; a . type = "button" ; a . override = function ( b ) { return CKEDITOR . tools . extend ( function ( c ) { return a ( c , b ) } , { type : "button" } , ! 0 ) } ; return a } ( ) , addUIElement : function ( a , b ) { this . _ . uiElementBuilders [ a ] = b } } ) ; CKEDITOR . dialog . _ = { uiElementBuilders : { } , dialogDefinitions : { } , currentTop : null , currentZIndex : null } ;
CKEDITOR . event . implementOn ( CKEDITOR . dialog ) ; CKEDITOR . event . implementOn ( CKEDITOR . dialog . prototype ) ; U = { resizable : CKEDITOR . DIALOG _RESIZE _BOTH , minWidth : 600 , minHeight : 400 , buttons : [ CKEDITOR . dialog . okButton , CKEDITOR . dialog . cancelButton ] } ; var E = function ( a , b , c ) { for ( var e = 0 , d ; d = a [ e ] ; e ++ ) if ( d . id == b || c && d [ c ] && ( d = E ( d [ c ] , b , c ) ) ) return d ; return null } , F = function ( a , b , c , e , d ) { if ( c ) { for ( var f = 0 , g ; g = a [ f ] ; f ++ ) { if ( g . id == c ) return a . splice ( f , 0 , b ) , b ; if ( e && g [ e ] && ( g = F ( g [ e ] , b , c , e , ! 0 ) ) ) return g } if ( d ) return null } a . push ( b ) ; return b } ,
G = function ( a , b , c ) { for ( var e = 0 , d ; d = a [ e ] ; e ++ ) { if ( d . id == b ) return a . splice ( e , 1 ) ; if ( c && d [ c ] && ( d = G ( d [ c ] , b , c ) ) ) return d } return null } ; M . prototype = { getContents : function ( a ) { return E ( this . contents , a ) } , getButton : function ( a ) { return E ( this . buttons , a ) } , addContents : function ( a , b ) { return F ( this . contents , a , b ) } , addButton : function ( a , b ) { return F ( this . buttons , a , b ) } , removeContents : function ( a ) { G ( this . contents , a ) } , removeButton : function ( a ) { G ( this . buttons , a ) } } ; N . prototype = { get : function ( a ) { return E ( this . elements , a , "children" ) } ,
add : function ( a , b ) { return F ( this . elements , a , b , "children" ) } , remove : function ( a ) { G ( this . elements , a , "children" ) } } ; var B = { } , x = { } ; ( function ( ) { CKEDITOR . ui . dialog = { uiElement : function ( a , b , c , e , d , f , g ) { if ( ! ( 4 > arguments . length ) ) { var k = ( e . call ? e ( b ) : e ) || "div" , p = [ "\x3c" , k , " " ] , l = ( d && d . call ? d ( b ) : d ) || { } , h = ( f && f . call ? f ( b ) : f ) || { } , q = ( g && g . call ? g . call ( this , a , b ) : g ) || "" , n = this . domId = h . id || CKEDITOR . tools . getNextId ( ) + "_uiElement" ; b . requiredContent && ! a . getParentEditor ( ) . filter . check ( b . requiredContent ) && ( l . display = "none" , this . notAllowed =
! 0 ) ; h . id = n ; var r = { } ; b . type && ( r [ "cke_dialog_ui_" + b . type ] = 1 ) ; b . className && ( r [ b . className ] = 1 ) ; b . disabled && ( r . cke _disabled = 1 ) ; for ( var m = h [ "class" ] && h [ "class" ] . split ? h [ "class" ] . split ( " " ) : [ ] , n = 0 ; n < m . length ; n ++ ) m [ n ] && ( r [ m [ n ] ] = 1 ) ; m = [ ] ; for ( n in r ) m . push ( n ) ; h [ "class" ] = m . join ( " " ) ; b . title && ( h . title = b . title ) ; r = ( b . style || "" ) . split ( ";" ) ; b . align && ( m = b . align , l [ "margin-left" ] = "left" == m ? 0 : "auto" , l [ "margin-right" ] = "right" == m ? 0 : "auto" ) ; for ( n in l ) r . push ( n + ":" + l [ n ] ) ; b . hidden && r . push ( "display:none" ) ; for ( n = r . length - 1 ; 0 <=
n ; n -- ) "" === r [ n ] && r . splice ( n , 1 ) ; 0 < r . length && ( h . style = ( h . style ? h . style + "; " : "" ) + r . join ( "; " ) ) ; for ( n in h ) p . push ( n + '\x3d"' + CKEDITOR . tools . htmlEncode ( h [ n ] ) + '" ' ) ; p . push ( "\x3e" , q , "\x3c/" , k , "\x3e" ) ; c . push ( p . join ( "" ) ) ; ( this . _ || ( this . _ = { } ) ) . dialog = a ; "boolean" == typeof b . isChanged && ( this . isChanged = function ( ) { return b . isChanged } ) ; "function" == typeof b . isChanged && ( this . isChanged = b . isChanged ) ; "function" == typeof b . setValue && ( this . setValue = CKEDITOR . tools . override ( this . setValue , function ( a ) { return function ( c ) { a . call ( this ,
add : function ( a , b ) { return F ( this . elements , a , b , "children" ) } , remove : function ( a ) { G ( this . elements , a , "children" ) } } ; var B = { } , x = { } ; ( function ( ) { CKEDITOR . ui . dialog = { uiElement : function ( a , b , c , e , d , f , g ) { if ( ! ( 4 > arguments . length ) ) { var k = ( e . call ? e ( b ) : e ) || "div" , p = [ "\x3c" , k , " " ] , l = ( d && d . call ? d ( b ) : d ) || { } , h = ( f && f . call ? f ( b ) : f ) || { } , q = ( g && g . call ? g . call ( this , a , b ) : g ) || "" , m = this . domId = h . id || CKEDITOR . tools . getNextId ( ) + "_uiElement" ; b . requiredContent && ! a . getParentEditor ( ) . filter . check ( b . requiredContent ) && ( l . display = "none" , this . notAllowed =
! 0 ) ; h . id = m ; var r = { } ; b . type && ( r [ "cke_dialog_ui_" + b . type ] = 1 ) ; b . className && ( r [ b . className ] = 1 ) ; b . disabled && ( r . cke _disabled = 1 ) ; for ( var n = h [ "class" ] && h [ "class" ] . split ? h [ "class" ] . split ( " " ) : [ ] , m = 0 ; m < n . length ; m ++ ) n [ m ] && ( r [ n [ m ] ] = 1 ) ; n = [ ] ; for ( m in r ) n . push ( m ) ; h [ "class" ] = n . join ( " " ) ; b . title && ( h . title = b . title ) ; r = ( b . style || "" ) . split ( ";" ) ; b . align && ( n = b . align , l [ "margin-left" ] = "left" == n ? 0 : "auto" , l [ "margin-right" ] = "right" == n ? 0 : "auto" ) ; for ( m in l ) r . push ( m + ":" + l [ m ] ) ; b . hidden && r . push ( "display:none" ) ; for ( m = r . length - 1 ; 0 <=
m ; m -- ) "" === r [ m ] && r . splice ( m , 1 ) ; 0 < r . length && ( h . style = ( h . style ? h . style + "; " : "" ) + r . join ( "; " ) ) ; for ( m in h ) p . push ( m + '\x3d"' + CKEDITOR . tools . htmlEncode ( h [ m ] ) + '" ' ) ; p . push ( "\x3e" , q , "\x3c/" , k , "\x3e" ) ; c . push ( p . join ( "" ) ) ; ( this . _ || ( this . _ = { } ) ) . dialog = a ; "boolean" == typeof b . isChanged && ( this . isChanged = function ( ) { return b . isChanged } ) ; "function" == typeof b . isChanged && ( this . isChanged = b . isChanged ) ; "function" == typeof b . setValue && ( this . setValue = CKEDITOR . tools . override ( this . setValue , function ( a ) { return function ( c ) { a . call ( this ,
b . setValue . call ( this , c ) ) } } ) ) ; "function" == typeof b . getValue && ( this . getValue = CKEDITOR . tools . override ( this . getValue , function ( a ) { return function ( ) { return b . getValue . call ( this , a . call ( this ) ) } } ) ) ; CKEDITOR . event . implementOn ( this ) ; this . registerEvents ( b ) ; this . accessKeyUp && this . accessKeyDown && b . accessKey && T ( this , a , "CTRL+" + b . accessKey ) ; var t = this ; a . on ( "load" , function ( ) { var b = t . getInputElement ( ) ; if ( b ) { var c = t . type in { checkbox : 1 , ratio : 1 } && CKEDITOR . env . ie && 8 > CKEDITOR . env . version ? "cke_dialog_ui_focused" : "" ; b . on ( "focus" ,
function ( ) { a . _ . tabBarMode = ! 1 ; a . _ . hasFocus = ! 0 ; t . fire ( "focus" ) ; c && this . addClass ( c ) } ) ; b . on ( "blur" , function ( ) { t . fire ( "blur" ) ; c && this . removeClass ( c ) } ) } } ) ; CKEDITOR . tools . extend ( this , b ) ; this . keyboardFocusable && ( this . tabIndex = b . tabIndex || 0 , this . focusIndex = a . _ . focusList . push ( this ) - 1 , this . on ( "focus" , function ( ) { a . _ . currentFocusIndex = t . focusIndex } ) ) } } , hbox : function ( a , b , c , e , d ) { if ( ! ( 4 > arguments . length ) ) { this . _ || ( this . _ = { } ) ; var f = this . _ . children = b , g = d && d . widths || null , k = d && d . height || null , p , l = { role : "presentation" } ;
d && d . align && ( l . align = d . align ) ; CKEDITOR . ui . dialog . uiElement . call ( this , a , d || { type : "hbox" } , e , "table" , { } , l , function ( ) { var a = [ '\x3ctbody\x3e\x3ctr class\x3d"cke_dialog_ui_hbox"\x3e' ] ; for ( p = 0 ; p < c . length ; p ++ ) { var b = "cke_dialog_ui_hbox_child" , e = [ ] ; 0 === p && ( b = "cke_dialog_ui_hbox_first" ) ; p == c . length - 1 && ( b = "cke_dialog_ui_hbox_last" ) ; a . push ( '\x3ctd class\x3d"' , b , '" role\x3d"presentation" ' ) ; g ? g [ p ] && e . push ( "width:" + y ( g [ p ] ) ) : e . push ( "width:" + Math . floor ( 100 / c . length ) + "%" ) ; k && e . push ( "height:" + y ( k ) ) ; d && void 0 !== d . padding &&
@@ -676,12 +676,12 @@ a&&this._.dialog.selectPage(a);return this},focus:function(){this.selectParentTa
b , this ) } , onHide : function ( a , b ) { a . on ( "hide" , b , this ) } } , accessKeyDown : function ( ) { this . focus ( ) } , accessKeyUp : function ( ) { } , disable : function ( ) { var a = this . getElement ( ) ; this . getInputElement ( ) . setAttribute ( "disabled" , "true" ) ; a . addClass ( "cke_disabled" ) } , enable : function ( ) { var a = this . getElement ( ) ; this . getInputElement ( ) . removeAttribute ( "disabled" ) ; a . removeClass ( "cke_disabled" ) } , isEnabled : function ( ) { return ! this . getElement ( ) . hasClass ( "cke_disabled" ) } , isVisible : function ( ) { return this . getInputElement ( ) . isVisible ( ) } ,
isFocusable : function ( ) { return this . isEnabled ( ) && this . isVisible ( ) ? ! 0 : ! 1 } } ; CKEDITOR . ui . dialog . hbox . prototype = CKEDITOR . tools . extend ( new CKEDITOR . ui . dialog . uiElement , { getChild : function ( a ) { if ( 1 > arguments . length ) return this . _ . children . concat ( ) ; a . splice || ( a = [ a ] ) ; return 2 > a . length ? this . _ . children [ a [ 0 ] ] : this . _ . children [ a [ 0 ] ] && this . _ . children [ a [ 0 ] ] . getChild ? this . _ . children [ a [ 0 ] ] . getChild ( a . slice ( 1 , a . length ) ) : null } } , ! 0 ) ; CKEDITOR . ui . dialog . vbox . prototype = new CKEDITOR . ui . dialog . hbox ; ( function ( ) { var a = { build : function ( a ,
c , e ) { for ( var d = c . children , f , g = [ ] , k = [ ] , p = 0 ; p < d . length && ( f = d [ p ] ) ; p ++ ) { var l = [ ] ; g . push ( l ) ; k . push ( CKEDITOR . dialog . _ . uiElementBuilders [ f . type ] . build ( a , f , l ) ) } return new CKEDITOR . ui . dialog [ c . type ] ( a , k , g , e , c ) } } ; CKEDITOR . dialog . addUIElement ( "hbox" , a ) ; CKEDITOR . dialog . addUIElement ( "vbox" , a ) } ) ( ) ; CKEDITOR . dialogCommand = function ( a , b ) { this . dialogName = a ; CKEDITOR . tools . extend ( this , b , ! 0 ) } ; CKEDITOR . dialogCommand . prototype = { exec : function ( a ) { var b = this . tabId ; a . openDialog ( this . dialogName , function ( a ) { b && a . selectPage ( b ) } ) } ,
canUndo : ! 1 , editorFocus : 1 } ; ( function ( ) { var a = /^\d*$/ , b = /^\d*(?:\.\d+)?$/ , c = /^(((\d*(\.\d+))|(\d*))(px|\%)?)?$/ , e = /^(((\d*(\.\d+))|(\d*))(px|em|ex|in|cm|mm|pt|pc|\%)?)?$/i , d = /^(--|-?([a-zA-Z_]|\\))(\\|[a-zA-Z0-9-_])*\s*?:\s*?[^:;]+$/ ; CKEDITOR . VALIDATE _OR = 1 ; CKEDITOR . VALIDATE _AND = 2 ; CKEDITOR . dialog . validate = { functions : function ( ) { var a = arguments ; return function ( ) { var b = this && this . getValue ? this . getValue ( ) : a [ 0 ] , c , d = CKEDITOR . VALIDATE _AND , e = [ ] , h ; for ( h = 0 ; h < a . length ; h ++ ) if ( "function" == typeof a [ h ] ) e . push ( a [ h ] ) ;
else break ; h < a . length && "string" == typeof a [ h ] && ( c = a [ h ] , h ++ ) ; h < a . length && "number" == typeof a [ h ] && ( d = a [ h ] ) ; var q = d == CKEDITOR . VALIDATE _AND ? ! 0 : ! 1 ; for ( h = 0 ; h < e . length ; h ++ ) q = d == CKEDITOR . VALIDATE _AND ? q && e [ h ] ( b ) : q || e [ h ] ( b ) ; return q ? ! 0 : c } } , regex : function ( a , b ) { return function ( c ) { c = this && this . getValue ? this . getValue ( ) : c ; return a . test ( c ) ? ! 0 : b } } , notEmpty : function ( a ) { var b = RegExp ( "^[\\u0020\\u00a0\\u1680\\u202f\\u205f\\u3000\\u2000-\\u200a\\s]+|[\\u0020\\u00a0\\u1680\\u202f\\u205f\\u3000\\u2000-\\u200a\\s]+$" , "g" ) ;
return function ( c ) { return 0 < ( this && this . getValue ? this . getValue ( ) : c ) . replace ( b , "" ) . length || a } } , integer : function ( b ) { return this . regex ( a , b ) } , number : function ( a ) { return this . regex ( b , a ) } , cssLength : function ( a ) { return this . functions ( function ( a ) { return e . test ( CKEDITOR . tools . trim ( a ) ) } , a ) } , htmlLength : function ( a ) { return this . functions ( function ( a ) { return c . test ( CKEDITOR . tools . trim ( a ) ) } , a ) } , inlineStyle : function ( a ) { return this . functions ( function ( a ) { a = CKEDITOR . tools . trim ( a ) . split ( ";" ) ; "" === a [ a . length - 1 ] && a . pop ( ) ;
return CKEDITOR . tools . array . every ( a , function ( a ) { return d . test ( CKEDITOR . tools . trim ( a ) ) } ) } , a ) } , equals : function ( a , b ) { return this . functions ( function ( b ) { return b == a } , b ) } , notEqual : function ( a , b ) { return this . functions ( function ( b ) { return b != a } , b ) } } ; CKEDITOR . on ( "instanceDestroyed" , function ( a ) { if ( CKEDITOR . tools . isEmpty ( CKEDITOR . instances ) ) { for ( var b ; b = CKEDITOR . dialog . _ . currentTop ; ) b . hide ( ) ; for ( var c in B ) B [ c ] . remove ( ) ; B = { } } a = a . editor . _ . storedDialogs ; for ( var d in a ) a [ d ] . destroy ( ) } ) } ) ( ) ; CKEDITOR . tools . extend ( CKEDITOR . editor . prototype ,
{ openDialog : function ( a , b , c ) { var e = null , d = CKEDITOR . dialog . _ . dialogDefinitions [ a ] ; null === CKEDITOR . dialog . _ . currentTop && P ( this ) ; if ( "function" == typeof d ) d = this . _ . storedDialogs || ( this . _ . storedDialogs = { } ) , e = d [ a ] || ( d [ a ] = new CKEDITOR . dialog ( this , a ) ) , e . setModel ( c ) , b && b . call ( e , e ) , e . show ( ) ; else { if ( "failed" == d ) throw Q ( this ) , Error ( '[CKEDITOR.dialog.openDialog] Dialog "' + a + '" failed when loading definition.' ) ; "string" == typeof d && CKEDITOR . scriptLoader . load ( CKEDITOR . getUrl ( d ) , function ( ) { "function" != typeof CKEDITOR . dialog . _ . dialogDefinitions [ a ] &&
( CKEDITOR . dialog . _ . dialogDefinitions [ a ] = "failed" ) ; this . openDialog ( a , b , c ) } , this , 0 , 1 ) } CKEDITOR . skin . loadPart ( "dialog" ) ; if ( e ) e . once ( "hide" , function ( ) { e . setModel ( null ) } , null , null , 999 ) ; return e } } ) ; CKEDITOR . plugins . add ( "dialog" , { requires : "dialogui" , init : function ( a ) { V || ( CKEDITOR . document . appendStyleSheet ( this . path + "styles/dialog.css" ) , V = ! 0 ) ; a . on ( "doubleclick" , function ( b ) { b . data . dialog && a . openDialog ( b . data . dialog ) } , null , null , 999 ) } } ) } ) ( ) ; CKEDITOR . plugins . add ( "about" , { requires : "dialog" , init : function ( a ) { var b = a . addCommand ( "about" , new CKEDITOR . dialogCommand ( "about" ) ) ; b . modes = { wysiwyg : 1 , source : 1 } ; b . canUndo = ! 1 ; b . readOnly = 1 ; a . ui . addButton && a . ui . addButton ( "About" , { label : a . lang . about . dlgTitle , command : "about" , toolbar : "about" } ) ; CKEDITOR . dialog . add ( "about" , this . path + "dialogs/about.js" ) } } ) ; ( function ( ) { function h ( a ) { function m ( ) { e = a . document ; n = e [ CKEDITOR . env . ie ? "getBody" : "getDocumentElement" ] ( ) ; c = CKEDITOR . env . quirks ? e . getBody ( ) : e . getDocumentElement ( ) ; var d = CKEDITOR . env . quirks ? c : c . findOne ( "body" ) ; d && ( d . setStyle ( "height" , "auto" ) , d . setStyle ( "min-height" , CKEDITOR . env . safari ? "0%" : "auto" ) ) ; f = CKEDITOR . dom . element . createFromHtml ( '\x3cspan style\x3d"margin:0;padding:0;border:0;clear:both;width:1px;height:1px;display:block;"\x3e' + ( CKEDITOR . env . webkit ? "\x26nbsp;" : "" ) + "\x3c/span\x3e" , e ) } function g ( ) { k &&
canUndo : ! 1 , editorFocus : 1 } ; ( function ( ) { var a = /^\d*$/ , b = /^\d*(?:\.\d+)?$/ , c = /^(((\d*(\.\d+))|(\d*))(px|\%)?)?$/ , e = /^(((\d*(\.\d+))|(\d*))(px|em|ex|in|cm|mm|pt|pc|\%)?)?$/i , d = /^(--|-?([a-zA-Z_]|\\))(\\|[a-zA-Z0-9-_])*\s*?:\s*?[^:;]+$/ ; CKEDITOR . VALIDATE _OR = 1 ; CKEDITOR . VALIDATE _AND = 2 ; CKEDITOR . dialog . validate = { functions : function ( ) { var a = arguments ; return function ( b ) { this && this . getValue && ( b = this . getValue ( ) ) ; var c , d = CKEDITOR . VALIDATE _AND , e = [ ] , h ; for ( h = 0 ; h < a . length ; h ++ ) if ( "function" == typeof a [ h ] ) e . push ( a [ h ] ) ;
else break ; h < a . length && "string" == typeof a [ h ] && ( c = a [ h ] , h ++ ) ; h < a . length && "number" == typeof a [ h ] && ( d = a [ h ] ) ; h = d == CKEDITOR . VALIDATE _AND ; for ( var q = 0 ; q < e . length ; q ++ ) { var m = ! 0 === e [ q ] ( b ) ; h = d == CKEDITOR . VALIDATE _AND ? h && m : h || m } return h ? ! 0 : c } } , regex : function ( a , b ) { return this . functions ( function ( b ) { return a . test ( b ) } , b ) } , notEmpty : function ( a ) { return this . functions ( function ( a ) { return 0 < a . replace ( RegExp ( "^[\\u0020\\u00a0\\u1680\\u202f\\u205f\\u3000\\u2000-\\u200a\\s]+|[\\u0020\\u00a0\\u1680\\u202f\\u205f\\u3000\\u2000-\\u200a\\s]+$" ,
"g" ) , "" ) . length } , a ) } , integer : function ( b ) { return this . regex ( a , b ) } , number : function ( a ) { return this . regex ( b , a ) } , cssLength : function ( a ) { return this . functions ( function ( a ) { return e . test ( CKEDITOR . tools . trim ( a ) ) } , a ) } , htmlLength : function ( a ) { return this . functions ( function ( a ) { return c . test ( CKEDITOR . tools . trim ( a ) ) } , a ) } , inlineStyle : function ( a ) { return this . functions ( function ( a ) { a = CKEDITOR . tools . trim ( a ) . split ( ";" ) ; "" === a [ a . length - 1 ] && a . pop ( ) ; return CKEDITOR . tools . array . every ( a , function ( a ) { return d . test ( CKEDITOR . tools . trim ( a ) ) } ) } ,
a ) } , equals : function ( a , b ) { return this . functions ( function ( b ) { return b == a } , b ) } , notEqual : function ( a , b ) { return this . functions ( function ( b ) { return b != a } , b ) } } ; CKEDITOR . on ( "instanceDestroyed" , function ( a ) { if ( CKEDITOR . tools . isEmpty ( CKEDITOR . instances ) ) { for ( var b ; b = CKEDITOR . dialog . _ . currentTop ; ) b . hide ( ) ; for ( var c in B ) B [ c ] . remove ( ) ; B = { } } a = a . editor . _ . storedDialogs ; for ( var d in a ) a [ d ] . destroy ( ) } ) } ) ( ) ; CKEDITOR . tools . extend ( CKEDITOR . editor . prototype , { openDialog : function ( a , b , c ) { var e = null , d = CKEDITOR . dialog . _ . dialogDefinitions [ a ] ;
null === CKEDITOR . dialog . _ . currentTop && P ( this ) ; if ( "function" == typeof d ) d = this . _ . storedDialogs || ( this . _ . storedDialogs = { } ) , e = d [ a ] || ( d [ a ] = new CKEDITOR . dialog ( this , a ) ) , e . setModel ( c ) , b && b . call ( e , e ) , e . show ( ) ; else { if ( "failed" == d ) throw Q ( this ) , Error ( '[CKEDITOR.dialog.openDialog] Dialog "' + a + '" failed when loading definition.' ) ; "string" == typeof d && CKEDITOR . scriptLoader . load ( CKEDITOR . getUrl ( d ) , function ( ) { "function" != typeof CKEDITOR . dialog . _ . dialogDefinitions [ a ] && ( CKEDITOR . dialog . _ . dialogDefinitions [ a ] = "failed" ) ;
this . openDialog ( a , b , c ) } , this , 0 , 1 ) } CKEDITOR . skin . loadPart ( "dialog" ) ; if ( e ) e . once ( "hide" , function ( ) { e . setModel ( null ) } , null , null , 999 ) ; return e } } ) ; CKEDITOR . plugins . add ( "dialog" , { requires : "dialogui" , init : function ( a ) { V || ( CKEDITOR . document . appendStyleSheet ( this . path + "styles/dialog.css" ) , V = ! 0 ) ; a . on ( "doubleclick" , function ( b ) { b . data . dialog && a . openDialog ( b . data . dialog ) } , null , null , 999 ) } } ) } ) ( ) ; CKEDITOR . plugins . add ( "about" , { requires : "dialog" , init : function ( a ) { var b = a . addCommand ( "about" , new CKEDITOR . dialogCommand ( "about" ) ) ; b . modes = { wysiwyg : 1 , source : 1 } ; b . canUndo = ! 1 ; b . readOnly = 1 ; a . ui . addButton && a . ui . addButton ( "About" , { label : a . lang . about . dlgTitle , command : "about" , toolbar : "about" } ) ; CKEDITOR . dialog . add ( "about" , this . path + "dialogs/about.js" ) } } ) ; ( function ( ) { function h ( a ) { function m ( ) { e = a . document ; n = e [ CKEDITOR . env . ie ? "getBody" : "getDocumentElement" ] ( ) ; c = CKEDITOR . env . quirks ? e . getBody ( ) : e . getDocumentElement ( ) ; var d = CKEDITOR . env . quirks ? c : c . findOne ( "body" ) ; d && ( d . setStyle ( "height" , "auto" ) , d . setStyle ( "min-height" , CKEDITOR . env . safari ? "0%" : "auto" ) ) ; f = CKEDITOR . dom . element . createFromHtml ( '\x3cspan style\x3d"margin:0;padding:0;border:0;clear:both;width:1px;height:1px;display:block;"\x3e' + ( CKEDITOR . env . webkit ? "\x26nbsp;" : "" ) + "\x3c/span\x3e" , e ) } function g ( ) { k &&
c . setStyle ( "overflow-y" , "hidden" ) ; var d = a . window . getViewPaneSize ( ) . height , b ; n . append ( f ) ; b = f . getDocumentPosition ( e ) . y + f . $ . offsetHeight ; f . remove ( ) ; b += h ; b = Math . max ( b , r ) ; b = Math . min ( b , p ) ; b != d && l != b && ( b = a . fire ( "autoGrow" , { currentHeight : d , newHeight : b } ) . newHeight , a . resize ( null , b , ! 0 ) , l = b ) ; k || ( b < p && c . $ . scrollHeight > c . $ . clientHeight ? c . setStyle ( "overflow-y" , "hidden" ) : c . removeStyle ( "overflow-y" ) ) } var l , e , n , c , f , h = a . config . autoGrow _bottomSpace || 0 , r = void 0 !== a . config . autoGrow _minHeight ? a . config . autoGrow _minHeight :
200 , p = a . config . autoGrow _maxHeight || Infinity , k = ! a . config . autoGrow _maxHeight ; a . addCommand ( "autogrow" , { exec : g , modes : { wysiwyg : 1 } , readOnly : 1 , canUndo : ! 1 , editorFocus : ! 1 } ) ; var t = { contentDom : 1 , key : 1 , selectionChange : 1 , insertElement : 1 , mode : 1 } , q ; for ( q in t ) a . on ( q , function ( d ) { "wysiwyg" == d . editor . mode && setTimeout ( function ( ) { var b = a . getCommand ( "maximize" ) ; ! a . window || b && b . state == CKEDITOR . TRISTATE _ON ? l = null : ( g ( ) , k || g ( ) ) } , 100 ) } ) ; a . on ( "afterCommandExec" , function ( a ) { "maximize" == a . data . name && "wysiwyg" == a . editor . mode &&
( a . data . command . state == CKEDITOR . TRISTATE _ON ? c . removeStyle ( "overflow-y" ) : g ( ) ) } ) ; a . on ( "contentDom" , m ) ; m ( ) ; a . config . autoGrow _onStartup && a . editable ( ) . isVisible ( ) && a . execCommand ( "autogrow" ) } CKEDITOR . plugins . add ( "autogrow" , { init : function ( a ) { if ( a . elementMode != CKEDITOR . ELEMENT _MODE _INLINE ) a . on ( "instanceReady" , function ( ) { a . editable ( ) . isInline ( ) ? a . ui . space ( "contents" ) . setStyle ( "height" , "auto" ) : h ( a ) } ) } } ) } ) ( ) ; CKEDITOR . plugins . add ( "base64image" , { lang : "af ar bg bn bs ca cs cy da de el en en-au en-ca en-gb eo es et eu fa fi fo fr fr-ca gl gu he hi hr hu id is it ja ka km ko ku lt lv mk mn ms nb nl no pl pt pt-br ro ru si sk sl sq sr sr-latn sv th tr ug uk vi zh zh-cn" . split ( " " ) , requires : "dialog" , icons : "base64image" , hidpi : ! 0 , init : function ( a ) { a . ui . addButton ( "base64image" , { label : a . lang . common . image , command : "base64imageDialog" , toolbar : "insert" } ) ; CKEDITOR . dialog . add ( "base64imageDialog" , this . path + "dialogs/base64image.js" ) ;
@@ -689,22 +689,30 @@ a.addCommand("base64imageDialog",new CKEDITOR.dialogCommand("base64imageDialog",
( b . data . dialog = "base64imageDialog" , a . getSelection ( ) . selectElement ( b . data . element ) ) } ) ; a . addMenuItem && ( a . addMenuGroup ( "base64imageGroup" ) , a . addMenuItem ( "base64imageItem" , { label : a . lang . common . image , icon : this . path + "icons/base64image.png" , command : "base64imageDialog" , group : "base64imageGroup" } ) ) ; a . contextMenu && a . contextMenu . addListener ( function ( b ) { if ( b && b . getName ( ) === "img" ) { a . getSelection ( ) . selectElement ( b ) ; return { base64imageItem : CKEDITOR . TRISTATE _ON } } return null } ) } } ) ; CKEDITOR . plugins . add ( "basicstyles" , { init : function ( c ) { var e = 0 , d = function ( g , d , b , a ) { if ( a ) { a = new CKEDITOR . style ( a ) ; var f = h [ b ] ; f . unshift ( a ) ; c . attachStyleStateChange ( a , function ( a ) { ! c . readOnly && c . getCommand ( b ) . setState ( a ) } ) ; c . addCommand ( b , new CKEDITOR . styleCommand ( a , { contentForms : f } ) ) ; c . ui . addButton && c . ui . addButton ( g , { isToggle : ! 0 , label : d , command : b , toolbar : "basicstyles," + ( e += 10 ) } ) } } , h = { bold : [ "strong" , "b" , [ "span" , function ( a ) { a = a . styles [ "font-weight" ] ; return "bold" == a || 700 <= + a } ] ] , italic : [ "em" , "i" , [ "span" , function ( a ) { return "italic" ==
a . styles [ "font-style" ] } ] ] , underline : [ "u" , [ "span" , function ( a ) { return "underline" == a . styles [ "text-decoration" ] } ] ] , strike : [ "s" , "strike" , [ "span" , function ( a ) { return "line-through" == a . styles [ "text-decoration" ] } ] ] , subscript : [ "sub" ] , superscript : [ "sup" ] } , b = c . config , a = c . lang . basicstyles ; d ( "Bold" , a . bold , "bold" , b . coreStyles _bold ) ; d ( "Italic" , a . italic , "italic" , b . coreStyles _italic ) ; d ( "Underline" , a . underline , "underline" , b . coreStyles _underline ) ; d ( "Strike" , a . strike , "strike" , b . coreStyles _strike ) ; d ( "Subscript" , a . subscript ,
"subscript" , b . coreStyles _subscript ) ; d ( "Superscript" , a . superscript , "superscript" , b . coreStyles _superscript ) ; c . setKeystroke ( [ [ CKEDITOR . CTRL + 66 , "bold" ] , [ CKEDITOR . CTRL + 73 , "italic" ] , [ CKEDITOR . CTRL + 85 , "underline" ] ] ) } } ) ; CKEDITOR . config . coreStyles _bold = { element : "strong" , overrides : "b" } ; CKEDITOR . config . coreStyles _italic = { element : "em" , overrides : "i" } ; CKEDITOR . config . coreStyles _underline = { element : "u" } ; CKEDITOR . config . coreStyles _strike = { element : "s" , overrides : "strike" } ; CKEDITOR . config . coreStyles _subscript = { element : "sub" } ;
CKEDITOR . config . coreStyles _superscript = { element : "sup" } ; ( function ( ) { var m = { exec : function ( g ) { var a = g . getCommand ( "blockquote" ) . state , k = g . getSelection ( ) , c = k && k . getRanges ( ) [ 0 ] ; if ( c ) { var h = k . createBookmarks ( ) ; if ( CKEDITOR . env . ie ) { var e = h [ 0 ] . startNode , b = h [ 0 ] . endNode , d ; if ( e && "blockquote" == e . getParent ( ) . getName ( ) ) for ( d = e ; d = d . getNext ( ) ; ) if ( d . type == CKEDITOR . NODE _ELEMENT && d . isBlockBoundary ( ) ) { e . move ( d , ! 0 ) ; break } if ( b && "blockquote" == b . getParent ( ) . getName ( ) ) for ( d = b ; d = d . getPrevious ( ) ; ) if ( d . type == CKEDITOR . NODE _ELEMENT && d . isBlockBoundary ( ) ) { b . move ( d ) ; break } } var f = c . createIterator ( ) ;
CKEDITOR . config . coreStyles _superscript = { element : "sup" } ; ( function ( ) { function q ( a , f , e , b ) { if ( ! a . isReadOnly ( ) && ! a . equals ( e . editable ( ) ) ) { CKEDITOR . dom . element . setMarker ( b , a , "bidi_processed" , 1 ) ; b = a ; for ( var c = e . editable ( ) ; ( b = b . getParent ( ) ) && ! b . equals ( c ) ; ) if ( b . getCustomData ( "bidi_processed" ) ) { a . removeStyle ( "direction" ) ; a . removeAttribute ( "dir" ) ; return } b = e . config . useComputedState ; ( b ? a . getComputedStyle ( "direction" ) : a . getStyle ( "direction" ) || a . hasAttribute ( "dir" ) ) != f && ( a . removeStyle ( "direction" ) , b ? ( a . removeAttribute ( "dir" ) , f ! =a . getComputedStyle ( "direction" ) && a . setAttribute ( "dir" ,
f ) ) : a . setAttribute ( "dir" , f ) , e . forceNextSelectionCheck ( ) ) } } function v ( a , f , e ) { var b = a . getCommonAncestor ( ! 1 , ! 0 ) ; a = a . clone ( ) ; a . enlarge ( e == CKEDITOR . ENTER _BR ? CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : CKEDITOR . ENLARGE _BLOCK _CONTENTS ) ; if ( a . checkBoundaryOfElement ( b , CKEDITOR . START ) && a . checkBoundaryOfElement ( b , CKEDITOR . END ) ) { for ( var c ; b && b . type == CKEDITOR . NODE _ELEMENT && ( c = b . getParent ( ) ) && 1 == c . getChildCount ( ) && ! ( b . getName ( ) in f ) ; ) b = c ; return b . type == CKEDITOR . NODE _ELEMENT && b . getName ( ) in f && b } } function p ( a ) { return { context : "p" ,
allowedContent : { "h1 h2 h3 h4 h5 h6 table ul ol blockquote div tr p div li td" : { propertiesOnly : ! 0 , attributes : "dir" } } , requiredContent : "p[dir]" , refresh : function ( a , e ) { var b = a . config . useComputedState , c ; if ( ! b ) { c = e . lastElement ; for ( var h = a . editable ( ) ; c && ! ( c . getName ( ) in u || c . equals ( h ) ) ; ) { var d = c . getParent ( ) ; if ( ! d ) break ; c = d } } c = c || e . block || e . blockLimit ; c . equals ( a . editable ( ) ) && ( h = a . getSelection ( ) . getRanges ( ) [ 0 ] . getEnclosedNode ( ) ) && h . type == CKEDITOR . NODE _ELEMENT && ( c = h ) ; c && ( b = b ? c . getComputedStyle ( "direction" ) : c . getStyle ( "direction" ) ||
c . getAttribute ( "dir" ) , a . getCommand ( "bidirtl" ) . setState ( "rtl" == b ? CKEDITOR . TRISTATE _ON : CKEDITOR . TRISTATE _OFF ) , a . getCommand ( "bidiltr" ) . setState ( "ltr" == b ? CKEDITOR . TRISTATE _ON : CKEDITOR . TRISTATE _OFF ) ) ; b = ( e . block || e . blockLimit || a . editable ( ) ) . getDirection ( 1 ) ; b != ( a . _ . selDir || a . lang . dir ) && ( a . _ . selDir = b , a . fire ( "contentDirChanged" , b ) ) } , exec : function ( f ) { var e = f . getSelection ( ) , b = f . config . enterMode , c = e . getRanges ( ) ; if ( c && c . length ) { for ( var h = { } , d = e . createBookmarks ( ) , c = c . createIterator ( ) , g , l = 0 ; g = c . getNextRange ( 1 ) ; ) { var k =
g . getEnclosedNode ( ) ; k && ( ! k || k . type == CKEDITOR . NODE _ELEMENT && k . getName ( ) in r ) || ( k = v ( g , t , b ) ) ; k && q ( k , a , f , h ) ; var m = new CKEDITOR . dom . walker ( g ) , n = d [ l ] . startNode , p = d [ l ++ ] . endNode ; m . evaluator = function ( a ) { var c = b == CKEDITOR . ENTER _P ? "p" : "div" , d ; if ( d = ( a ? a . type == CKEDITOR . NODE _ELEMENT : ! 1 ) && a . getName ( ) in t ) { if ( c = a . is ( c ) ) c = ( c = a . getParent ( ) ) ? c . type == CKEDITOR . NODE _ELEMENT : ! 1 ; d = ! ( c && a . getParent ( ) . is ( "blockquote" ) ) } return ! ! ( d && a . getPosition ( n ) & CKEDITOR . POSITION _FOLLOWING && ( a . getPosition ( p ) & CKEDITOR . POSITION _PRECEDING +
CKEDITOR . POSITION _CONTAINS ) == CKEDITOR . POSITION _PRECEDING ) } ; for ( ; k = m . next ( ) ; ) q ( k , a , f , h ) ; g = g . createIterator ( ) ; for ( g . enlargeBr = b != CKEDITOR . ENTER _BR ; k = g . getNextParagraph ( b == CKEDITOR . ENTER _P ? "p" : "div" ) ; ) q ( k , a , f , h ) } CKEDITOR . dom . element . clearAllMarkers ( h ) ; f . forceNextSelectionCheck ( ) ; e . selectBookmarks ( d ) ; f . focus ( ) } } } } function w ( a ) { var f = a == l . setAttribute , e = a == l . removeAttribute , b = /\bdirection\s*:\s*(.*?)\s*(:?$|;)/ ; return function ( c , h ) { if ( ! this . isReadOnly ( ) ) { var d ; if ( d = c == ( f || e ? "dir" : "direction" ) || "style" ==
c && ( e || b . test ( h ) ) ) { a : { d = this ; for ( var g = d . getDocument ( ) . getBody ( ) . getParent ( ) ; d ; ) { if ( d . equals ( g ) ) { d = ! 1 ; break a } d = d . getParent ( ) } d = ! 0 } d = ! d } if ( d && ( d = this . getDirection ( 1 ) , g = a . apply ( this , arguments ) , d != this . getDirection ( 1 ) ) ) return this . getDocument ( ) . fire ( "dirChanged" , this ) , g } return a . apply ( this , arguments ) } } var t = { table : 1 , ul : 1 , ol : 1 , blockquote : 1 , div : 1 } , r = { } , u = { } ; CKEDITOR . tools . extend ( r , t , { tr : 1 , p : 1 , div : 1 , li : 1 } ) ; CKEDITOR . tools . extend ( u , r , { td : 1 } ) ; CKEDITOR . plugins . add ( "bidi" , { init : function ( a ) { function f ( b , c , e ,
d , f ) { a . addCommand ( e , new CKEDITOR . command ( a , d ) ) ; a . ui . addButton && a . ui . addButton ( b , { isToggle : ! 0 , label : c , command : e , toolbar : "bidi," + f } ) } if ( ! a . blockless ) { var e = a . lang . bidi ; f ( "BidiLtr" , e . ltr , "bidiltr" , p ( "ltr" ) , 10 ) ; f ( "BidiRtl" , e . rtl , "bidirtl" , p ( "rtl" ) , 20 ) ; a . on ( "contentDom" , function ( ) { a . document . on ( "dirChanged" , function ( b ) { a . fire ( "dirChanged" , { node : b . data , dir : b . data . getDirection ( 1 ) } ) } ) } ) ; a . on ( "contentDirChanged" , function ( b ) { b = ( a . lang . dir != b . data ? "add" : "remove" ) + "Class" ; var c = a . ui . space ( a . config . toolbarLocation ) ;
if ( c ) c [ b ] ( "cke_mixed_dir_content" ) } ) } } } ) ; for ( var l = CKEDITOR . dom . element . prototype , n = [ "setStyle" , "removeStyle" , "setAttribute" , "removeAttribute" ] , m = 0 ; m < n . length ; m ++ ) l [ n [ m ] ] = CKEDITOR . tools . override ( l [ n [ m ] ] , w ) } ) ( ) ; ( function ( ) { var m = { exec : function ( g ) { var a = g . getCommand ( "blockquote" ) . state , k = g . getSelection ( ) , c = k && k . getRanges ( ) [ 0 ] ; if ( c ) { var h = k . createBookmarks ( ) ; if ( CKEDITOR . env . ie ) { var e = h [ 0 ] . startNode , b = h [ 0 ] . endNode , d ; if ( e && "blockquote" == e . getParent ( ) . getName ( ) ) for ( d = e ; d = d . getNext ( ) ; ) if ( d . type == CKEDITOR . NODE _ELEMENT && d . isBlockBoundary ( ) ) { e . move ( d , ! 0 ) ; break } if ( b && "blockquote" == b . getParent ( ) . getName ( ) ) for ( d = b ; d = d . getPrevious ( ) ; ) if ( d . type == CKEDITOR . NODE _ELEMENT && d . isBlockBoundary ( ) ) { b . move ( d ) ; break } } var f = c . createIterator ( ) ;
f . enlargeBr = g . config . enterMode != CKEDITOR . ENTER _BR ; if ( a == CKEDITOR . TRISTATE _OFF ) { for ( e = [ ] ; a = f . getNextParagraph ( ) ; ) e . push ( a ) ; 1 > e . length && ( a = g . document . createElement ( g . config . enterMode == CKEDITOR . ENTER _P ? "p" : "div" ) , b = h . shift ( ) , c . insertNode ( a ) , a . append ( new CKEDITOR . dom . text ( " " , g . document ) ) , c . moveToBookmark ( b ) , c . selectNodeContents ( a ) , c . collapse ( ! 0 ) , b = c . createBookmark ( ) , e . push ( a ) , h . unshift ( b ) ) ; d = e [ 0 ] . getParent ( ) ; c = [ ] ; for ( b = 0 ; b < e . length ; b ++ ) a = e [ b ] , d = d . getCommonAncestor ( a . getParent ( ) ) ; for ( a = { table : 1 , tbody : 1 ,
tr : 1 , ol : 1 , ul : 1 } ; a [ d . getName ( ) ] ; ) d = d . getParent ( ) ; for ( b = null ; 0 < e . length ; ) { for ( a = e . shift ( ) ; ! a . getParent ( ) . equals ( d ) ; ) a = a . getParent ( ) ; a . equals ( b ) || c . push ( a ) ; b = a } for ( ; 0 < c . length ; ) if ( a = c . shift ( ) , "blockquote" == a . getName ( ) ) { for ( b = new CKEDITOR . dom . documentFragment ( g . document ) ; a . getFirst ( ) ; ) b . append ( a . getFirst ( ) . remove ( ) ) , e . push ( b . getLast ( ) ) ; b . replace ( a ) } else e . push ( a ) ; c = g . document . createElement ( "blockquote" ) ; for ( c . insertBefore ( e [ 0 ] ) ; 0 < e . length ; ) a = e . shift ( ) , c . append ( a ) } else if ( a == CKEDITOR . TRISTATE _ON ) { b = [ ] ;
for ( d = { } ; a = f . getNextParagraph ( ) ; ) { for ( e = c = null ; a . getParent ( ) ; ) { if ( "blockquote" == a . getParent ( ) . getName ( ) ) { c = a . getParent ( ) ; e = a ; break } a = a . getParent ( ) } c && e && ! e . getCustomData ( "blockquote_moveout" ) && ( b . push ( e ) , CKEDITOR . dom . element . setMarker ( d , e , "blockquote_moveout" , ! 0 ) ) } CKEDITOR . dom . element . clearAllMarkers ( d ) ; a = [ ] ; e = [ ] ; for ( d = { } ; 0 < b . length ; ) f = b . shift ( ) , c = f . getParent ( ) , f . getPrevious ( ) ? f . getNext ( ) ? ( f . breakParent ( f . getParent ( ) ) , e . push ( f . getNext ( ) ) ) : f . remove ( ) . insertAfter ( c ) : f . remove ( ) . insertBefore ( c ) , c . getCustomData ( "blockquote_processed" ) ||
( e . push ( c ) , CKEDITOR . dom . element . setMarker ( d , c , "blockquote_processed" , ! 0 ) ) , a . push ( f ) ; CKEDITOR . dom . element . clearAllMarkers ( d ) ; for ( b = e . length - 1 ; 0 <= b ; b -- ) { c = e [ b ] ; a : { d = c ; for ( var f = 0 , m = d . getChildCount ( ) , l = void 0 ; f < m && ( l = d . getChild ( f ) ) ; f ++ ) if ( l . type == CKEDITOR . NODE _ELEMENT && l . isBlockBoundary ( ) ) { d = ! 1 ; break a } d = ! 0 } d && c . remove ( ) } if ( g . config . enterMode == CKEDITOR . ENTER _BR ) for ( c = ! 0 ; a . length ; ) if ( f = a . shift ( ) , "div" == f . getName ( ) ) { b = new CKEDITOR . dom . documentFragment ( g . document ) ; ! c || ! f . getPrevious ( ) || f . getPrevious ( ) . type ==
CKEDITOR . NODE _ELEMENT && f . getPrevious ( ) . isBlockBoundary ( ) || b . append ( g . document . createElement ( "br" ) ) ; for ( c = f . getNext ( ) && ! ( f . getNext ( ) . type == CKEDITOR . NODE _ELEMENT && f . getNext ( ) . isBlockBoundary ( ) ) ; f . getFirst ( ) ; ) f . getFirst ( ) . remove ( ) . appendTo ( b ) ; c && b . append ( g . document . createElement ( "br" ) ) ; b . replace ( f ) ; c = ! 1 } } k . selectBookmarks ( h ) ; g . focus ( ) } } , refresh : function ( g , a ) { this . setState ( g . elementPath ( a . block || a . blockLimit ) . contains ( "blockquote" , 1 ) ? CKEDITOR . TRISTATE _ON : CKEDITOR . TRISTATE _OFF ) } , context : "blockquote" , allowedContent : "blockquote" ,
requiredContent : "blockquote" } ; CKEDITOR . plugins . add ( "blockquote" , { init : function ( g ) { g . blockless || ( g . addCommand ( "blockquote" , m ) , g . ui . addButton && g . ui . addButton ( "Blockquote" , { isToggle : ! 0 , label : g . lang . blockquote . toolbar , command : "blockquote" , toolbar : "blocks,10" } ) ) } } ) } ) ( ) ; ( function ( ) { var c = '\x3ca id\x3d"{id}" class\x3d"cke_button cke_button__{name} cke_button_{state} {cls}"' + ( CKEDITOR . env . gecko && ! CKEDITOR . env . hc ? "" : " href\x3d\"javascript:void('{titleJs}')\"" ) + ' title\x3d"{title}" tabindex\x3d"-1" hidefocus\x3d"true" role\x3d"button" aria-labelledby\x3d"{id}_label" aria-describedby\x3d"{id}_description" aria-haspopup\x3d"{hasArrow}" aria-disabled\x3d"{ariaDisabled}"{toggleAriaHtml}' ; CKEDITOR . env . gecko && CKEDITOR . env . mac && ( c += ' onkeypress\x3d"return false;"' ) ; CKEDITOR . env . gecko &&
( c += ' onblur\x3d"this.style.cssText \x3d this.style.cssText;"' ) ; var l = "" ; CKEDITOR . env . ie && ( l = 'return false;" onmouseup\x3d"CKEDITOR.tools.getMouseButton(event)\x3d\x3dCKEDITOR.MOUSE_BUTTON_LEFT\x26\x26' ) ; var c = c + ( ' onkeydown\x3d"return CKEDITOR.tools.callFunction({keydownFn},event);" onfocus\x3d"return CKEDITOR.tools.callFunction({focusFn},event);" onclick\x3d"' + l + 'CKEDITOR.tools.callFunction({clickFn},this);return false;"\x3e\x3cspan class\x3d"cke_button_icon cke_button__{iconName}_icon" style\x3d"{style}"' ) +
requiredContent : "blockquote" } ; CKEDITOR . plugins . add ( "blockquote" , { init : function ( g ) { g . blockless || ( g . addCommand ( "blockquote" , m ) , g . ui . addButton && g . ui . addButton ( "Blockquote" , { isToggle : ! 0 , label : g . lang . blockquote . toolbar , command : "blockquote" , toolbar : "blocks,10" } ) ) } } ) } ) ( ) ; ( function ( ) { var c = '\x3ca id\x3d"{id}" class\x3d"cke_button cke_button__{name} cke_button_{state} {cls}"' + ( CKEDITOR . env . gecko && ! CKEDITOR . env . hc ? "" : " href\x3d\"javascript:void('{titleJs}')\"" ) + ' title\x3d"{title}" tabindex\x3d"-1" hidefocus\x3d"true" role\x3d"button" aria-labelledby\x3d"{id}_label" aria-describedby\x3d"{id}_description" aria-haspopup\x3d"{hasArrow}" aria-disabled\x3d"{ariaDisabled}"{hasArrowAriaHtml}{ toggleAriaHtml}' ; CKEDITOR . env . gecko && CKEDITOR . env . mac && ( c += ' onkeypress\x3d"return false;"' ) ;
CKEDITOR . env . gecko && ( c += ' onblur\x3d"this.style.cssText \x3d this.style.cssText;"' ) ; var l = "" ; CKEDITOR . env . ie && ( l = 'return false;" onmouseup\x3d"CKEDITOR.tools.getMouseButton(event)\x3d\x3dCKEDITOR.MOUSE_BUTTON_LEFT\x26\x26' ) ; var c = c + ( ' onkeydown\x3d"return CKEDITOR.tools.callFunction({keydownFn},event);" onfocus\x3d"return CKEDITOR.tools.callFunction({focusFn},event);" onclick\x3d"' + l + 'CKEDITOR.tools.callFunction({clickFn},this);return false;"\x3e\x3cspan class\x3d"cke_button_icon cke_button__{iconName}_icon" style\x3d"{style}"' ) +
'\x3e\x26nbsp;\x3c/span\x3e\x3cspan id\x3d"{id}_label" class\x3d"cke_button_label cke_button__{name}_label" aria-hidden\x3d"false"\x3e{label}\x3c/span\x3e\x3cspan id\x3d"{id}_description" class\x3d"cke_button_label" aria-hidden\x3d"false"\x3e{ariaShortcutSpace}{ariaShortcut}\x3c/span\x3e{arrowHtml}\x3c/a\x3e' , v = CKEDITOR . addTemplate ( "buttonArrow" , '\x3cspan class\x3d"cke_button_arrow"\x3e' + ( CKEDITOR . env . hc ? "\x26#9660;" : "" ) + "\x3c/span\x3e" ) , w = CKEDITOR . addTemplate ( "button" , c ) ; CKEDITOR . plugins . add ( "button" ,
{ beforeInit : function ( a ) { a . ui . addHandler ( CKEDITOR . UI _BUTTON , CKEDITOR . ui . button . handler ) } } ) ; CKEDITOR . UI _BUTTON = "button" ; CKEDITOR . ui . button = function ( a ) { CKEDITOR . tools . extend ( this , a , { isToggle : a . isToggle || ! 1 , title : a . label , click : a . click || function ( b ) { b . execCommand ( a . command ) } } ) ; this . _ = { } } ; CKEDITOR . ui . button . handler = { create : function ( a ) { return new CKEDITOR . ui . button ( a ) } } ; CKEDITOR . ui . button . prototype = { render : function ( a , b ) { function c ( ) { var f = a . mode ; f && ( f = this . modes [ f ] ? void 0 !== p [ f ] ? p [ f ] : CKEDITOR . TRISTATE _OFF :
CKEDITOR . TRISTATE _DISABLED , f = a . readOnly && ! this . readOnly ? CKEDITOR . TRISTATE _DISABLED : f , this . setState ( f ) , this . refresh && this . refresh ( ) ) } var p = null , q = CKEDITOR . env , r = this . _ . id = CKEDITOR . tools . getNextId ( ) , g = "" , d = this . command , l , m , k ; this . _ . editor = a ; var e = { id : r , button : this , editor : a , focus : function ( ) { CKEDITOR . document . getById ( r ) . focus ( ) } , execute : function ( ) { this . button . click ( a ) } , attach : function ( a ) { this . button . attach ( a ) } } , x = CKEDITOR . tools . addFunction ( function ( a ) { if ( e . onkey ) return a = new CKEDITOR . dom . event ( a ) , ! 1 !==
e . onkey ( e , a . getKeystroke ( ) ) } ) , y = CKEDITOR . tools . addFunction ( function ( a ) { var b ; e . onfocus && ( b = ! 1 !== e . onfocus ( e , new CKEDITOR . dom . event ( a ) ) ) ; return b } ) , u = 0 ; e . clickFn = l = CKEDITOR . tools . addFunction ( function ( ) { u && ( a . unlockSelection ( 1 ) , u = 0 ) ; e . execute ( ) ; q . iOS && a . focus ( ) } ) ; this . modes ? ( p = { } , a . on ( "beforeModeUnload" , function ( ) { a . mode && this . _ . state != CKEDITOR . TRISTATE _DISABLED && ( p [ a . mode ] = this . _ . state ) } , this ) , a . on ( "activeFilterChange" , c , this ) , a . on ( "mode" , c , this ) , ! this . readOnly && a . on ( "readOnly" , c , this ) ) : d && ( d = a . getCommand ( d ) ) &&
( d . on ( "state" , function ( ) { this . setState ( d . state ) } , this ) , g += d . state == CKEDITOR . TRISTATE _ON ? "on" : d . state == CKEDITOR . TRISTATE _DISABLED ? "disabled" : "off" ) ; var n ; if ( this . directional ) a . on ( "contentDirChanged" , function ( b ) { var c = CKEDITOR . document . getById ( this . _ . id ) , d = c . getFirst ( ) ; b = b . data ; b != a . lang . dir ? c . addClass ( "cke_" + b ) : c . removeClass ( "cke_ltr" ) . removeClass ( "cke_rtl" ) ; d . setAttribute ( "style" , CKEDITOR . skin . getIconStyle ( n , "rtl" == b , this . icon , this . iconOffset ) ) } , this ) ; d ? ( m = a . getCommandKeystroke ( d ) ) && ( k = CKEDITOR . tools . keystrokeToString ( a . lang . common . keyboard ,
m ) ) : g += "off" ; m = this . name || this . command ; var h = null , t = this . icon ; n = m ; this . icon && ! /\./ . test ( this . icon ) ? ( n = this . icon , t = null ) : ( this . icon && ( h = this . icon ) , CKEDITOR . env . hidpi && this . iconHiDpi && ( h = this . iconHiDpi ) ) ; h ? ( CKEDITOR . skin . addIcon ( h , h ) , t = null ) : h = n ; g = { id : r , name : m , iconName : n , label : this . label , cls : ( this . hasArrow ? "cke_button_expandable " : "" ) + ( this . className || "" ) , state : g , ariaDisabled : "disabled" == g ? "true" : "false" , title : this . title + ( k ? " (" + k . display + ")" : "" ) , ariaShortcutSpace : k ? "\x26nbsp;" : "" , ariaShortcut : k ? a . lang . common . keyboardShortcut +
" " + k . aria : "" , titleJs : q . gecko && ! q . hc ? "" : ( this . title || "" ) . replace ( "'" , "" ) , hasArrow : "string" === typeof this . hasArrow && this . hasArrow || ( this . hasArrow ? "true" : "false" ) , keydownFn : x , focusFn : y , clickFn : l , style : CKEDITOR . skin . getIconStyle ( h , "rtl" == a . lang . dir , t , this . iconOffset ) , arrowHtml : this . hasArrow ? v . output ( ) : "" , toggleAriaHtml : this . isToggle ? 'aria-pressed\x3d"false"' : "" } ; w . output ( g , b ) ; if ( this . onRender ) this . onRender ( ) ; return e } , setState : function ( a ) { if ( this . _ . state == a ) return ! 1 ; this . _ . state = a ; var b = CKEDITOR . document . getById ( this . _ . id ) ;
return b ? ( b . setState ( a , "cke_button" ) , b . setAttribute ( "aria-disabled" , a == CKEDITOR . TRISTATE _DISABLED ) , this . isToggle && ! this . hasArrow ? b . setAttribute ( "aria-pressed" , a === CKEDITOR . TRISTATE _ON ) : this . hasArrow && b . setAttribute ( "aria-expanded" , a == CKEDITOR . TRISTATE _ON ) , ! 0 ) : ! 1 } , getState : function ( ) { return this . _ . state } , toFeature : function ( a ) { if ( this . _ . feature ) return this . _ . feature ; var b = this ; this . allowedContent || this . requiredContent || ! this . command || ( b = a . getCommand ( this . command ) || b ) ; return this . _ . feature = b } } ; CKEDITOR . ui . prototype . addButton =
" " + k . aria : "" , titleJs : q . gecko && ! q . hc ? "" : ( this . title || "" ) . replace ( "'" , "" ) , hasArrow : "string" === typeof this . hasArrow && this . hasArrow || ( this . hasArrow ? "true" : "false" ) , keydownFn : x , focusFn : y , clickFn : l , style : CKEDITOR . skin . getIconStyle ( h , "rtl" == a . lang . dir , t , this . iconOffset ) , arrowHtml : this . hasArrow ? v . output ( ) : "" , hasArrowAriaHtml : this . hasArrow ? ' aria-expanded\x3d"false"' : "" , toggleAriaHtml : this . isToggle ? 'aria-pressed\x3d"false"' : "" } ; w . output ( g , b ) ; if ( this . onRender ) this . onRender ( ) ; return e } , setState : function ( a ) { if ( this . _ . state ==
a ) return ! 1 ; this . _ . state = a ; var b = CKEDITOR . document . getById ( this . _ . id ) ; return b ? ( b . setState ( a , "cke_button" ) , b . setAttribute ( "aria-disabled" , a == CKEDITOR . TRISTATE _DISABLED ) , this . isToggle && ! this . hasArrow && b . setAttribute ( "aria-pressed" , a === CKEDITOR . TRISTATE _ON ) , ! 0 ) : ! 1 } , getState : function ( ) { return this . _ . state } , toFeature : function ( a ) { if ( this . _ . feature ) return this . _ . feature ; var b = this ; this . allowedContent || this . requiredContent || ! this . command || ( b = a . getCommand ( this . command ) || b ) ; return this . _ . feature = b } } ; CKEDITOR . ui . prototype . addButton =
function ( a , b ) { this . add ( a , CKEDITOR . UI _BUTTON , b ) } } ) ( ) ; ( function ( ) { function q ( b , a ) { CKEDITOR . tools . extend ( this , a , { editor : b , id : "cke-" + CKEDITOR . tools . getUniqueId ( ) , area : b . _ . notificationArea } ) ; a . type || ( this . type = "info" ) ; this . element = this . _createElement ( ) ; b . plugins . clipboard && CKEDITOR . plugins . clipboard . preventDefaultDropOnElement ( this . element ) } function r ( b ) { var a = this ; this . editor = b ; this . notifications = [ ] ; this . element = this . _createElement ( ) ; this . _uiBuffer = CKEDITOR . tools . eventsBuffer ( 10 , this . _layout , this ) ; this . _changeBuffer = CKEDITOR . tools . eventsBuffer ( 500 , this . _layout ,
this ) ; b . on ( "destroy" , function ( ) { a . _removeListeners ( ) ; a . element . remove ( ) } ) } CKEDITOR . plugins . add ( "notification" , { init : function ( b ) { function a ( b ) { var a = new CKEDITOR . dom . element ( "div" ) ; a . setStyles ( { position : "fixed" , "margin-left" : "-9999px" } ) ; a . setAttributes ( { "aria-live" : "assertive" , "aria-atomic" : "true" } ) ; a . setText ( b ) ; CKEDITOR . document . getBody ( ) . append ( a ) ; setTimeout ( function ( ) { a . remove ( ) } , 100 ) } b . _ . notificationArea = new r ( b ) ; b . showNotification = function ( a , d , e ) { var f , l ; "progress" == d ? f = e : l = e ; a = new CKEDITOR . plugins . notification ( b ,
{ message : a , type : d , progress : f , duration : l } ) ; a . show ( ) ; return a } ; b . on ( "key" , function ( c ) { if ( 27 == c . data . keyCode ) { var d = b . _ . notificationArea . notifications ; d . length && ( a ( b . lang . notification . closed ) , d [ d . length - 1 ] . hide ( ) , c . cancel ( ) ) } } ) } } ) ; q . prototype = { show : function ( ) { ! 1 !== this . editor . fire ( "notificationShow" , { notification : this } ) && ( this . area . add ( this ) , this . _hideAfterTimeout ( ) ) } , update : function ( b ) { var a = ! 0 ; ! 1 === this . editor . fire ( "notificationUpdate" , { notification : this , options : b } ) && ( a = ! 1 ) ; var c = this . element , d = c . findOne ( ".cke_notification_message" ) ,
@@ -722,12 +730,12 @@ a){return b.order==a.order?0:0>a.order?-1:0>b.order?1:b.order<a.order?-1:1});ret
h . name = d . name , a . push ( h ) ) ; return a } var b = a . config . removeButtons , b = b && b . split ( "," ) , e = a . config . toolbar ; "string" == typeof e && ( e = a . config [ "toolbar_" + e ] ) ; return a . toolbar = e ? h ( e ) : d ( ) } function v ( a ) { return a . _ . toolbarGroups || ( a . _ . toolbarGroups = [ { name : "document" , groups : [ "mode" , "document" , "doctools" ] } , { name : "clipboard" , groups : [ "clipboard" , "undo" ] } , { name : "editing" , groups : [ "find" , "selection" , "spellchecker" ] } , { name : "forms" } , "/" , { name : "basicstyles" , groups : [ "basicstyles" , "cleanup" ] } , { name : "paragraph" , groups : [ "list" ,
"indent" , "blocks" , "align" , "bidi" ] } , { name : "links" } , { name : "insert" } , "/" , { name : "styles" } , { name : "colors" } , { name : "tools" } , { name : "others" } , { name : "about" } ] ) } var z = function ( ) { this . toolbars = [ ] } ; z . prototype . focus = function ( ) { for ( var a = 0 , d ; d = this . toolbars [ a ++ ] ; ) for ( var f = 0 , c ; c = d . items [ f ++ ] ; ) if ( c . focus ) { c . focus ( ) ; return } } ; var E = { modes : { wysiwyg : 1 , source : 1 } , readOnly : 1 , exec : function ( a ) { a . toolbox && ( CKEDITOR . env . ie || CKEDITOR . env . air ? setTimeout ( function ( ) { a . toolbox . focus ( ) } , 100 ) : a . toolbox . focus ( ) ) } } ; CKEDITOR . plugins . add ( "toolbar" ,
{ requires : "button" , init : function ( a ) { var d , f = function ( c , h ) { var b , e = "rtl" == a . lang . dir , k = a . config . toolbarGroupCycling , q = e ? 37 : 39 , e = e ? 39 : 37 , k = void 0 === k || k ; switch ( h ) { case 9 : case CKEDITOR . SHIFT + 9 : for ( ; ! b || ! b . items . length ; ) if ( b = 9 == h ? ( b ? b . next : c . toolbar . next ) || a . toolbox . toolbars [ 0 ] : ( b ? b . previous : c . toolbar . previous ) || a . toolbox . toolbars [ a . toolbox . toolbars . length - 1 ] , b . items . length ) for ( c = b . items [ d ? b . items . length - 1 : 0 ] ; c && ! c . focus ; ) ( c = d ? c . previous : c . next ) || ( b = 0 ) ; c && c . focus ( ) ; return ! 1 ; case q : b = c ; do b = b . next , ! b &&
k && ( b = c . toolbar . items [ 0 ] ) ; while ( b && ! b . focus ) ; b ? b . focus ( ) : f ( c , 9 ) ; return ! 1 ; case 40 : return c . button && c . button . hasArrow ? c . execute ( ) : f ( c , 40 == h ? q : e ) , ! 1 ; case e : case 38 : b = c ; do b = b . previous , ! b && k && ( b = c . toolbar . items [ c . toolbar . items . length - 1 ] ) ; while ( b && ! b . focus ) ; b ? b . focus ( ) : ( d = 1 , f ( c , CKEDITOR . SHIFT + 9 ) , d = 0 ) ; return ! 1 ; case 27 : return a . focus ( ) , ! 1 ; case 13 : case 32 : return c . execute ( ) , ! 1 } return ! 0 } ; a . on ( "uiSpace" , function ( c ) { if ( c . data . space == a . config . toolbarLocation ) { c . removeListener ( ) ; a . toolbox = new z ; var d = CKEDITOR . tools . getNextId ( ) ,
b = [ '\x3cspan id\x3d"' , d , '" class\x3d"cke_voice_label"\x3e' , a . lang . toolbar . toolbars , "\x3c/span\x3e" , '\x3cspan id\x3d"' + a . ui . spaceId ( "toolbox" ) + '" class\x3d"cke_toolbox" role\x3d"group" aria-labelledby\x3d"' , d , '" onmousedown\x3d"return false;"\x3e' ] , d = ! 1 !== a . config . toolbarStartupExpanded , e , k ; a . config . toolbarCanCollapse && a . elementMode != CKEDITOR . ELEMENT _MODE _INLINE && b . push ( '\x3cspan class\x3d"cke_toolbox_main"' + ( d ? "\x3e" : ' style\x3d"display:none"\x3e' ) ) ; for ( var q = a . toolbox . toolbars , n = D ( a ) , g = n . length ,
l = 0 ; l < g ; l ++ ) { var r , m = 0 , w , p = n [ l ] , v = "/" !== p && ( "/" === n [ l + 1 ] || l == g - 1 ) , x ; if ( p ) if ( e && ( b . push ( "\x3c/span\x3e" ) , k = e = 0 ) , "/" === p ) b . push ( '\x3cspan class\x3d"cke_toolbar_break"\x3e\x3c/span\x3e' ) ; else { x = p . items || p ; for ( var y = 0 ; y < x . length ; y ++ ) { var t = x [ y ] , A ; if ( t ) { var B = function ( c ) { c = c . render ( a , b ) ; u = m . items . push ( c ) - 1 ; 0 < u && ( c . previous = m . items [ u - 1 ] , c . previous . next = c ) ; c . toolbar = m ; c . onkey = f } ; if ( t . type == CKEDITOR . UI _SEPARATOR ) k = e && t ; else { A = ! 1 !== t . canGroup ; if ( ! m ) { r = CKEDITOR . tools . getNextId ( ) ; m = { id : r , items : [ ] } ; w = p . name &&
( a . lang . toolbar . toolbarGroups [ p . name ] || p . name ) ; b . push ( '\x3cspan id\x3d"' , r , '" class\x3d"cke_toolbar' + ( v ? ' cke_toolbar_last"' : '"' ) , w ? ' aria-labelledby\x3d"' + r + '_label"' : "" , ' role\x3d"toolbar"\x3e' ) ; w && b . push ( '\x3cspan id\x3d"' , r , '_label" class\x3d"cke_voice_label"\x3e' , w , "\x3c/span\x3e" ) ; b . push ( '\x3cspan class\x3d"cke_toolbar_start"\x3e\x3c/span\x3e' ) ; var u = q . push ( m ) - 1 ; 0 < u && ( m . previous = q [ u - 1 ] , m . previous . next = m ) } A ? e || ( b . push ( '\x3cspan class\x3d"cke_toolgroup" role\x3d"presentation"\x3e' ) , e = 1 ) : e && ( b . push ( "\x3c/span\x3e" ) ,
e = 0 ) ; k && ( B ( k ) , k = 0 ) ; B ( t ) } } } e && ( b . push ( "\x3c/span\x3e" ) , k = e = 0 ) ; m && b . push ( '\x3cspan class\x3d"cke_toolbar_end"\x3e\x3c/span\x3e\x3c/span\x3e' ) } } a . config . toolbarCanCollapse && b . push ( "\x3c/span\x3e" ) ; if ( a . config . toolbarCanCollapse && a . elementMode != CKEDITOR . ELEMENT _MODE _INLINE ) { var C = CKEDITOR . tools . addFunction ( function ( ) { a . execCommand ( "toolbarCollapse" ) } ) ; a . on ( "destroy" , function ( ) { CKEDITOR . tools . removeFunction ( C ) } ) ; a . addCommand ( "toolbarCollapse" , { readOnly : 1 , exec : function ( b ) { var a = b . ui . space ( "toolbar_collapser" ) ,
c = a . getPrevious ( ) , d = b . ui . space ( "contents" ) , e = c . getParent ( ) , h = parseInt ( d . $ . style . height , 10 ) , g = e . $ . offsetHeight , f = a . hasClass ( "cke_toolbox_collapser_min" ) ; f ? ( c . show ( ) , a . removeClass ( "cke_toolbox_collapser_min" ) , a . setAttribute ( "title" , b . lang . toolbar . toolbarCollapse ) ) : ( c . hide ( ) , a . addClass ( "cke_toolbox_collapser_min" ) , a . setAttribute ( "title" , b . lang . toolbar . toolbarExpand ) ) ; a . getFirst ( ) . setText ( f ? "▲" : "◀" ) ; d . setStyle ( "height" , h - ( e . $ . offsetHeight - g ) + "px" ) ; b . fire ( "resize" , { outerHeight : b . container . $ . offsetHeight ,
k && ( b = c . toolbar . items [ 0 ] ) ; while ( b && ! b . focus ) ; b ? b . focus ( ) : f ( c , 9 ) ; return ! 1 ; case 40 : return c . button && c . button . hasArrow ? c . execute ( ) : f ( c , 40 == h ? q : e ) , ! 1 ; case e : case 38 : b = c ; do b = b . previous , ! b && k && ( b = c . toolbar . items [ c . toolbar . items . length - 1 ] ) ; while ( b && ! b . focus ) ; b ? b . focus ( ) : ( d = 1 , f ( c , CKEDITOR . SHIFT + 9 ) , d = 0 ) ; return ! 1 ; case 27 : return a . focus ( ) , ! 1 ; case 13 : case 32 : return c . execute ( ) , ! 1 ; case CKEDITOR . ALT + 122 : return a . execCommand ( "elementsPathFocus" ) , ! 1 } return ! 0 } ; a . on ( "uiSpace" , function ( c ) { if ( c . data . space == a . config . toolbarLocation ) { c . removeListener ( ) ;
a . toolbox = new z ; var d = CKEDITOR . tools . getNextId ( ) , b = [ '\x3cspan id\x3d"' , d , '" class\x3d"cke_voice_label"\x3e' , a . lang . toolbar . toolbars , "\x3c/span\x3e" , '\x3cspan id\x3d"' + a . ui . spaceId ( "toolbox" ) + '" class\x3d"cke_toolbox" role\x3d"group" aria-labelledby\x3d"' , d , '" onmousedown\x3d"return false;"\x3e' ] , d = ! 1 !== a . config . toolbarStartupExpanded , e , k ; a . config . toolbarCanCollapse && a . elementMode != CKEDITOR . ELEMENT _MODE _INLINE && b . push ( '\x3cspan class\x3d"cke_toolbox_main"' + ( d ? "\x3e" : ' style\x3d"display:none"\x3e' ) ) ;
for ( var q = a . toolbox . toolbars , n = D ( a ) , g = n . length , l = 0 ; l < g ; l ++ ) { var r , m = 0 , w , p = n [ l ] , v = "/" !== p && ( "/" === n [ l + 1 ] || l == g - 1 ) , x ; if ( p ) if ( e && ( b . push ( "\x3c/span\x3e" ) , k = e = 0 ) , "/" === p ) b . push ( '\x3cspan class\x3d"cke_toolbar_break"\x3e\x3c/span\x3e' ) ; else { x = p . items || p ; for ( var y = 0 ; y < x . length ; y ++ ) { var t = x [ y ] , A ; if ( t ) { var B = function ( c ) { c = c . render ( a , b ) ; u = m . items . push ( c ) - 1 ; 0 < u && ( c . previous = m . items [ u - 1 ] , c . previous . next = c ) ; c . toolbar = m ; c . onkey = f } ; if ( t . type == CKEDITOR . UI _SEPARATOR ) k = e && t ; else { A = ! 1 !== t . canGroup ; if ( ! m ) { r = CKEDITOR . tools . getNextId ( ) ;
m = { id : r , items : [ ] } ; w = p . name && ( a . lang . toolbar . toolbarGroups [ p . name ] || p . name ) ; b . push ( '\x3cspan id\x3d"' , r , '" class\x3d"cke_toolbar' + ( v ? ' cke_toolbar_last"' : '"' ) , w ? ' aria-labelledby\x3d"' + r + '_label"' : "" , ' role\x3d"toolbar"\x3e' ) ; w && b . push ( '\x3cspan id\x3d"' , r , '_label" class\x3d"cke_voice_label"\x3e' , w , "\x3c/span\x3e" ) ; b . push ( '\x3cspan class\x3d"cke_toolbar_start"\x3e\x3c/span\x3e' ) ; var u = q . push ( m ) - 1 ; 0 < u && ( m . previous = q [ u - 1 ] , m . previous . next = m ) } A ? e || ( b . push ( '\x3cspan class\x3d"cke_toolgroup" role\x3d"presentation"\x3e' ) ,
e = 1 ) : e && ( b . push ( "\x3c/span\x3e" ) , e = 0 ) ; k && ( B ( k ) , k = 0 ) ; B ( t ) } } } e && ( b . push ( "\x3c/span\x3e" ) , k = e = 0 ) ; m && b . push ( '\x3cspan class\x3d"cke_toolbar_end"\x3e\x3c/span\x3e\x3c/span\x3e' ) } } a . config . toolbarCanCollapse && b . push ( "\x3c/span\x3e" ) ; if ( a . config . toolbarCanCollapse && a . elementMode != CKEDITOR . ELEMENT _MODE _INLINE ) { var C = CKEDITOR . tools . addFunction ( function ( ) { a . execCommand ( "toolbarCollapse" ) } ) ; a . on ( "destroy" , function ( ) { CKEDITOR . tools . removeFunction ( C ) } ) ; a . addCommand ( "toolbarCollapse" , { readOnly : 1 , exec : function ( b ) { var a =
b . ui . space ( "toolbar_collapser" ) , c = a . getPrevious ( ) , d = b . ui . space ( "contents" ) , e = c . getParent ( ) , h = parseInt ( d . $ . style . height , 10 ) , g = e . $ . offsetHeight , f = a . hasClass ( "cke_toolbox_collapser_min" ) ; f ? ( c . show ( ) , a . removeClass ( "cke_toolbox_collapser_min" ) , a . setAttribute ( "title" , b . lang . toolbar . toolbarCollapse ) ) : ( c . hide ( ) , a . addClass ( "cke_toolbox_collapser_min" ) , a . setAttribute ( "title" , b . lang . toolbar . toolbarExpand ) ) ; a . getFirst ( ) . setText ( f ? "▲" : "◀" ) ; d . setStyle ( "height" , 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 ) ;
@@ -788,9 +796,9 @@ CKEDITOR.plugins.clipboard.fallbackDataTransfer;-1===CKEDITOR.tools.indexOf(c._c
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 . config . clipboard _handleImages = ! 0 ; 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" ,
"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 , k = f . parent || CKEDITOR . document . getBody ( ) , h = CKEDITOR . document . getById ( this . _ . id ) , d = this . _ . panel = new CKEDITOR . ui . floatPanel ( c , k , 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 ) ; h . setAttribute ( "aria-expanded" , "true" ) ; 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 ; h . setAttribute ( "aria-expanded" , "false" ) ; 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" ,
'\x3cdiv lang\x3d"{langCode}" id\x3d"{id}" dir\x3d{dir} class\x3d"cke cke_reset_all {editorId} cke_panel cke_panel {cls} cke_{dir}" style\x3d"z-index:{z-index}" role\x3d"presentation"\x3e{frame}\x3c/div\x3e' ) , h = CKEDITOR . addTemplate ( "panel-frame" , '\x3ciframe id\x3d"{id}" class\x3d"cke_panel_frame" role\x3d"presentation" frameborder\x3d"0" src\x3d"{src}"\x3e\x3c/iframe\x3e' ) , k = CKEDITOR . addTemplate ( "panel-frame-inner" , '\x3c!DOCTYPE html\x3e\x3chtml class\x3d"cke_panel_container {env}" dir\x3d"{dir}" lang\x3d"{langCode}"\x3e\x3chead\x3e{css}\x3c/head\x3e\x3cbody class\x3d"cke_{dir}" style\x3d"margin:0;padding:0" onload\x3d"{onload}"\x3e\x3c/body\x3e\x3c/html\x3e' ) ;
CKEDITOR . ui . panel . prototype = { render : function ( a , b ) { var e = { editorId : a . id , id : this . id , langCode : a . langCode , dir : a . lang . dir , cls : this . className , frame : "" , env : CKEDITOR . env . cssClass , "z-index" : a . config . baseFloatZIndex + 1 } ; this . getHolderElement = function ( ) { var a = this . _ . holder ; if ( ! a ) { if ( this . isFramed ) { var a = this . document . getById ( this . id + "_frame" ) , b = a . getParent ( ) , a = a . getFrameDocument ( ) ; CKEDITOR . env . iOS && b . setStyles ( { overflow : "scroll" , "-webkit-overflow-scrolling" : "touch" } ) ; b = CKEDITOR . tools . addFunction ( CKEDITOR . tools . bind ( function ( ) { this . isLoaded =
! 0 ; if ( this . onLoad ) this . onLoad ( ) } , this ) ) ; a . write ( k . output ( CKEDITOR . tools . extend ( { css : CKEDITOR . tools . buildStyleHtml ( this . css ) , onload : "window.parent.CKEDITOR.tools.callFunction(" + b + ");" } , e ) ) ) ; a . getWindow ( ) . $ . CKEDITOR = CKEDITOR ; a . on ( "keydown" , function ( a ) { var b = a . data . getKeystroke ( ) , c = this . document . getById ( this . id ) . getAttribute ( "dir" ) ; if ( "input" !== a . data . getTarget ( ) . getName ( ) || 37 !== b && 39 !== b ) this . _ . onKeyDown && ! 1 === this . _ . onKeyDown ( b ) ? "input" === a . data . getTarget ( ) . getName ( ) && 32 === b || a . data . preventDefault ( ) :
@@ -861,7 +869,59 @@ CKEDITOR.SELECTION_NONE&&(this.editor.focus(),a=a||CKEDITOR.document.getDocument
"left" : "right" ] , e = b . bottom ; a . contextMenu . open ( a . document . getBody ( ) . getParent ( ) , null , d , e ) } } ) ; a . setKeystroke ( CKEDITOR . SHIFT + 121 , "contextMenu" ) ; a . setKeystroke ( CKEDITOR . CTRL + CKEDITOR . SHIFT + 121 , "contextMenu" ) } } ) ; ( function ( ) { CKEDITOR . plugins . add ( "div" , { requires : "dialog" , init : function ( a ) { if ( ! a . blockless ) { var c = a . lang . div , b = "div(*)" ; CKEDITOR . dialog . isTabEnabled ( a , "editdiv" , "advanced" ) && ( b += ";div[dir,id,lang,title]{*}" ) ; a . addCommand ( "creatediv" , new CKEDITOR . dialogCommand ( "creatediv" , { allowedContent : b , requiredContent : "div" , contextSensitive : ! 0 , contentTransformations : [ [ "div: alignmentToStyle" ] ] , refresh : function ( a , c ) { this . setState ( "div" in ( a . config . div _wrapTable ? c . root : c . blockLimit ) . getDtd ( ) ? CKEDITOR . TRISTATE _OFF :
CKEDITOR . TRISTATE _DISABLED ) } } ) ) ; a . addCommand ( "editdiv" , new CKEDITOR . dialogCommand ( "editdiv" , { requiredContent : "div" } ) ) ; a . addCommand ( "removediv" , { requiredContent : "div" , exec : function ( a ) { function c ( b ) { ( b = CKEDITOR . plugins . div . getSurroundDiv ( a , b ) ) && ! b . data ( "cke-div-added" ) && ( f . push ( b ) , b . data ( "cke-div-added" ) ) } for ( var b = a . getSelection ( ) , g = b && b . getRanges ( ) , e , h = b . createBookmarks ( ) , f = [ ] , d = 0 ; d < g . length ; d ++ ) e = g [ d ] , e . collapsed ? c ( b . getStartElement ( ) ) : ( e = new CKEDITOR . dom . walker ( e ) , e . evaluator = c , e . lastForward ( ) ) ;
for ( d = 0 ; d < f . length ; d ++ ) f [ d ] . remove ( ! 0 ) ; b . selectBookmarks ( h ) } } ) ; a . ui . addButton && a . ui . addButton ( "CreateDiv" , { label : c . toolbar , command : "creatediv" , toolbar : "blocks,50" } ) ; a . addMenuItems && ( a . addMenuItems ( { editdiv : { label : c . edit , command : "editdiv" , group : "div" , order : 1 } , removediv : { label : c . remove , command : "removediv" , group : "div" , order : 5 } } ) , a . contextMenu && a . contextMenu . addListener ( function ( b ) { return ! b || b . isReadOnly ( ) ? null : CKEDITOR . plugins . div . getSurroundDiv ( a ) ? { editdiv : CKEDITOR . TRISTATE _OFF , removediv : CKEDITOR . TRISTATE _OFF } :
null } ) ) ; CKEDITOR . dialog . add ( "creatediv" , this . path + "dialogs/div.js" ) ; CKEDITOR . dialog . add ( "editdiv" , this . path + "dialogs/div.js" ) } } } ) ; CKEDITOR . plugins . div = { getSurroundDiv : function ( a , c ) { var b = a . elementPath ( c ) ; return a . elementPath ( b . blockLimit ) . contains ( function ( a ) { return a . is ( "div" ) && ! a . isReadOnly ( ) } , 1 ) } } } ) ( ) ; ( function ( ) { function x ( a , e , b ) { b = a . config . forceEnterMode || b ; if ( "wysiwyg" == a . mode ) { e || ( e = a . activeEnterMode ) ; var l = a . elementPath ( ) ; l && ! l . isContextFor ( "p" ) && ( e = CKEDITOR . ENTER _BR , b = 1 ) ; a . fire ( "saveSnapshot" ) ; e == CKEDITOR . ENTER _BR ? u ( a , e , null , b ) : r ( a , e , null , b ) ; a . fire ( "saveSnapshot ") } } function y ( a ) { a = a . getSelection ( ) . getRanges ( ! 0 ) ; for ( var e = a . length - 1 ; 0 < e ; e -- ) a [ e ] . deleteContents ( ) ; return a [ 0 ] } function z ( a ) { var e = a . startContainer . getAscendant ( function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && "true" == a . getAttribute ( "contenteditable" ) } ,
null } ) ) ; CKEDITOR . dialog . add ( "creatediv" , this . path + "dialogs/div.js" ) ; CKEDITOR . dialog . add ( "editdiv" , this . path + "dialogs/div.js" ) } } } ) ; CKEDITOR . plugins . div = { getSurroundDiv : function ( a , c ) { var b = a . elementPath ( c ) ; return a . elementPath ( b . blockLimit ) . contains ( function ( a ) { return a . is ( "div" ) && ! a . isReadOnly ( ) } , 1 ) } } } ) ( ) ; ( function ( ) { function b ( a , b , d ) { this . editor = a ; this . lastMatched = null ; this . ignoreNext = ! 1 ; this . callback = b ; this . ignoredKeys = [ 16 , 17 , 18 , 91 , 35 , 36 , 37 , 38 , 39 , 40 , 33 , 34 ] ; this . _listeners = [ ] ; this . throttle = d || 0 ; this . _buffer = CKEDITOR . tools . throttle ( this . throttle , function ( a ) { ( a = this . callback ( a ) ) ? a . text != this . lastMatched && ( this . lastMatched = a . text , this . fire ( "matched" , a ) ) : this . lastMatched && this . unmatch ( ) } , this ) } CKEDITOR . plugins . add ( "textwatcher ", { } ) ; b . prototype = { attach : function ( ) { function a ( ) { var a = c . editable ( ) ; this . _listeners . push ( a . attachListener ( a ,
"keyup" , b , this ) ) } function b ( a ) { this . check ( a ) } function d ( ) { this . unmatch ( ) } var c = this . editor ; this . _listeners . push ( c . on ( "contentDom" , a , this ) ) ; this . _listeners . push ( c . on ( "blur" , d , this ) ) ; this . _listeners . push ( c . on ( "beforeModeUnload" , d , this ) ) ; this . _listeners . push ( c . on ( "setData" , d , this ) ) ; this . _listeners . push ( c . on ( "afterCommandExec" , d , this ) ) ; c . editable ( ) && a . call ( this ) ; return this } , check : function ( a ) { this . ignoreNext ? this . ignoreNext = ! 1 : a && "keyup" == a . name && - 1 != CKEDITOR . tools . array . indexOf ( this . ignoredKeys , a . data . getKey ( ) ) ||
( a = this . editor . getSelection ( ) ) && ( a = a . getRanges ( ) [ 0 ] ) && this . _buffer . input ( a ) } , consumeNext : function ( ) { this . ignoreNext = ! 0 ; return this } , unmatch : function ( ) { this . lastMatched = null ; this . fire ( "unmatched" ) ; return this } , destroy : function ( ) { CKEDITOR . tools . array . forEach ( this . _listeners , function ( a ) { a . removeListener ( ) } ) ; this . _listeners = [ ] } } ; CKEDITOR . event . implementOn ( b . prototype ) ; CKEDITOR . plugins . textWatcher = b } ) ( ) ; ( function ( ) { function d ( a , b ) { var c = a . config . autocomplete _commitKeystrokes || CKEDITOR . config . autocomplete _commitKeystrokes ; this . editor = a ; this . throttle = void 0 !== b . throttle ? b . throttle : 20 ; this . view = this . getView ( ) ; this . model = this . getModel ( b . dataCallback ) ; this . model . itemsLimit = b . itemsLimit ; this . textWatcher = this . getTextWatcher ( b . textTestCallback ) ; this . commitKeystrokes = CKEDITOR . tools . array . isArray ( c ) ? c . slice ( ) : [ c ] ; this . _listeners = [ ] ; this . outputTemplate = void 0 !== b . outputTemplate ? new CKEDITOR . template ( b . outputTemplate ) :
null ; b . itemTemplate && ( this . view . itemTemplate = new CKEDITOR . template ( b . itemTemplate ) ) ; if ( "ready" === this . editor . status ) this . attach ( ) ; else this . editor . on ( "instanceReady" , function ( ) { this . attach ( ) } , this ) ; a . on ( "destroy" , function ( ) { this . destroy ( ) } , this ) } function g ( a ) { this . itemTemplate = new CKEDITOR . template ( '\x3cli data-id\x3d"{id}"\x3e{name}\x3c/li\x3e' ) ; this . editor = a } function f ( a ) { this . dataCallback = a ; this . isActive = ! 1 ; this . itemsLimit = 0 } function h ( a ) { return CKEDITOR . tools . array . reduce ( CKEDITOR . tools . object . keys ( a ) ,
function ( b , c ) { b [ c ] = CKEDITOR . tools . htmlEncode ( a [ c ] ) ; return b } , { } ) } CKEDITOR . plugins . add ( "autocomplete" , { requires : "textwatcher" , onLoad : function ( ) { CKEDITOR . document . appendStyleSheet ( this . path + "skins/default.css" ) } , isSupportedEnvironment : function ( ) { return ! CKEDITOR . env . ie || 8 < CKEDITOR . env . version } } ) ; d . prototype = { attach : function ( ) { var a = this . editor , b = CKEDITOR . document . getWindow ( ) , c = a . editable ( ) , k = c . isInline ( ) ? c : c . getDocument ( ) ; CKEDITOR . env . iOS && ! c . isInline ( ) && ( k = a . window . getFrame ( ) . getParent ( ) ) ; this . view . append ( ) ;
this . view . attach ( ) ; this . textWatcher . attach ( ) ; this . _listeners . push ( this . textWatcher . on ( "matched" , this . onTextMatched , this ) ) ; this . _listeners . push ( this . textWatcher . on ( "unmatched" , this . onTextUnmatched , this ) ) ; this . _listeners . push ( this . model . on ( "change-data" , this . modelChangeListener , this ) ) ; this . _listeners . push ( this . model . on ( "change-selectedItemId" , this . onSelectedItemId , this ) ) ; this . _listeners . push ( this . view . on ( "change-selectedItemId" , this . onSelectedItemId , this ) ) ; this . _listeners . push ( this . view . on ( "click-item" ,
this . onItemClick , this ) ) ; this . _listeners . push ( this . model . on ( "change-isActive" , this . updateAriaAttributesOnEditable , this ) ) ; this . _listeners . push ( b . on ( "scroll" , function ( ) { this . viewRepositionListener ( ) } , this ) ) ; this . _listeners . push ( k . on ( "scroll" , function ( ) { this . viewRepositionListener ( ) } , this ) ) ; this . _listeners . push ( this . view . element . on ( "mousedown" , function ( a ) { a . data . preventDefault ( ) } , null , null , 9999 ) ) ; c && ( this . registerPanelNavigation ( ) , this . addAriaAttributesToEditable ( ) ) ; a . on ( "contentDom" , function ( ) { this . registerPanelNavigation ( ) ;
this . addAriaAttributesToEditable ( ) } , this ) } , registerPanelNavigation : function ( ) { var a = this . editor . editable ( ) ; this . _listeners . push ( a . attachListener ( a , "keydown" , function ( a ) { this . onKeyDown ( a ) } , this , null , 5 ) ) } , addAriaAttributesToEditable : function ( ) { var a = this . editor . editable ( ) , b = this . view . element . getAttribute ( "id" ) ; a . isInline ( ) && ( a . setAttribute ( "aria-controls" , b ) , a . setAttribute ( "aria-activedescendant" , "" ) , a . setAttribute ( "aria-autocomplete" , "list" ) , a . setAttribute ( "aria-expanded" , "false" ) ) } , updateAriaAttributesOnEditable : function ( a ) { var b =
this . editor . editable ( ) ; a = a . data ; b && b . isInline ( ) && ( b . setAttribute ( "aria-expanded" , a ? "true" : "false" ) , a || b . setAttribute ( "aria-activedescendant" , "" ) ) } , updateAriaActiveDescendantAttributeOnEditable : function ( a ) { var b = this . editor . editable ( ) ; b . isInline ( ) && b . setAttribute ( "aria-activedescendant" , a ) } , removeAriaAttributesFromEditable : function ( ) { var a = this . editor . editable ( ) ; a && a . isInline ( ) && ( a . removeAttributes ( [ "aria-controls" , "aria-expanded" , "aria-activedescendant" ] ) , a . setAttribute ( "aria-autocomplete" , "none" ) ) } ,
close : function ( ) { this . model . setActive ( ! 1 ) ; this . view . close ( ) } , commit : function ( a ) { if ( this . model . isActive ) { this . close ( ) ; if ( null == a && ( a = this . model . selectedItemId , null == a ) ) return ; a = this . model . getItemById ( a ) ; var b = this . editor ; b . fire ( "saveSnapshot" ) ; b . getSelection ( ) . selectRanges ( [ this . model . range ] ) ; b . insertHtml ( this . getHtmlToInsert ( a ) , "text" ) ; b . fire ( "saveSnapshot" ) } } , destroy : function ( ) { CKEDITOR . tools . array . forEach ( this . _listeners , function ( a ) { a . removeListener ( ) } ) ; this . _listeners = [ ] ; this . view . element && this . view . element . remove ( ) ;
this . removeAriaAttributesFromEditable ( ) } , getHtmlToInsert : function ( a ) { a = h ( a ) ; return this . outputTemplate ? this . outputTemplate . output ( a ) : a . name } , getModel : function ( a ) { var b = this ; return new f ( function ( c , k ) { return a . call ( this , CKEDITOR . tools . extend ( { autocomplete : b } , c ) , k ) } ) } , getTextWatcher : function ( a ) { return new CKEDITOR . plugins . textWatcher ( this . editor , a , this . throttle ) } , getView : function ( ) { return new g ( this . editor ) } , open : function ( ) { this . model . hasData ( ) && ( this . model . setActive ( ! 0 ) , this . view . open ( ) , this . model . selectFirst ( ) ,
this . view . updatePosition ( this . model . range ) ) } , viewRepositionListener : function ( ) { this . model . isActive && this . view . updatePosition ( this . model . range ) } , modelChangeListener : function ( a ) { this . model . hasData ( ) ? ( this . view . updateItems ( a . data ) , this . open ( ) ) : this . close ( ) } , onItemClick : function ( a ) { this . commit ( a . data ) } , onKeyDown : function ( a ) { if ( this . model . isActive ) { var b = a . data . getKey ( ) , c = ! 1 ; 27 == b ? ( this . close ( ) , this . textWatcher . unmatch ( ) , c = ! 0 ) : 40 == b ? ( this . model . selectNext ( ) , c = ! 0 ) : 38 == b ? ( this . model . selectPrevious ( ) , c = ! 0 ) :
- 1 != CKEDITOR . tools . indexOf ( this . commitKeystrokes , b ) && ( this . commit ( ) , this . textWatcher . unmatch ( ) , c = ! 0 ) ; c && ( a . cancel ( ) , a . data . preventDefault ( ) , this . textWatcher . consumeNext ( ) ) } } , onSelectedItemId : function ( a ) { a = a . data ; var b = this . view . getItemById ( a ) ; this . model . setItem ( a ) ; this . view . selectItem ( a ) ; this . updateAriaActiveDescendantAttributeOnEditable ( b . getAttribute ( "id" ) ) } , onTextMatched : function ( a ) { this . model . setActive ( ! 1 ) ; this . model . setQuery ( a . data . text , a . data . range ) } , onTextUnmatched : function ( ) { this . model . query =
null ; this . model . lastRequestId = null ; this . close ( ) } } ; g . prototype = { append : function ( ) { this . document = CKEDITOR . document ; this . element = this . createElement ( ) ; this . document . getBody ( ) . append ( this . element ) } , appendItems : function ( a ) { this . element . setHtml ( "" ) ; this . element . append ( a ) } , attach : function ( ) { this . element . on ( "click" , function ( a ) { ( a = a . data . getTarget ( ) . getAscendant ( this . isItemElement , ! 0 ) ) && this . fire ( "click-item" , a . data ( "id" ) ) } , this ) ; this . element . on ( "mouseover" , function ( a ) { a = a . data . getTarget ( ) ; this . element . contains ( a ) &&
( a = a . getAscendant ( function ( a ) { return a . hasAttribute ( "data-id" ) } , ! 0 ) ) && ( a = a . data ( "id" ) , this . fire ( "change-selectedItemId" , a ) ) } , this ) } , close : function ( ) { this . element . removeClass ( "cke_autocomplete_opened" ) } , createElement : function ( ) { var a = new CKEDITOR . dom . element ( "ul" , this . document ) , b = CKEDITOR . tools . getNextId ( ) ; a . setAttribute ( "id" , b ) ; a . addClass ( "cke_autocomplete_panel" ) ; a . setStyle ( "z-index" , this . editor . config . baseFloatZIndex - 3 ) ; a . setAttribute ( "role" , "listbox" ) ; return a } , createItem : function ( a ) { a = h ( a ) ; a =
CKEDITOR . dom . element . createFromHtml ( this . itemTemplate . output ( a ) , this . document ) ; var b = CKEDITOR . tools . getNextId ( ) ; a . setAttribute ( "id" , b ) ; a . setAttribute ( "role" , "option" ) ; return a } , getViewPosition : function ( a ) { a = a . getClientRects ( ) ; a = a [ a . length - 1 ] ; var b ; b = this . editor . editable ( ) ; b = b . isInline ( ) ? CKEDITOR . document . getWindow ( ) . getScrollPosition ( ) : b . getParent ( ) . getDocumentPosition ( CKEDITOR . document ) ; var c = CKEDITOR . document . getBody ( ) ; "static" === c . getComputedStyle ( "position" ) && ( c = c . getParent ( ) ) ; c = c . getDocumentPosition ( ) ;
b . x -= c . x ; b . y -= c . y ; return { top : a . top + b . y , bottom : a . top + a . height + b . y , left : a . left + b . x } } , getItemById : function ( a ) { return this . element . findOne ( 'li[data-id\x3d"' + a + '"]' ) } , isItemElement : function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && Boolean ( a . data ( "id" ) ) } , open : function ( ) { this . element . addClass ( "cke_autocomplete_opened" ) } , selectItem : function ( a ) { null != this . selectedItemId && this . getItemById ( this . selectedItemId ) . removeClass ( "cke_autocomplete_selected" ) ; var b = this . getItemById ( a ) ; b . addClass ( "cke_autocomplete_selected" ) ;
this . selectedItemId = a ; this . scrollElementTo ( b ) } , setPosition : function ( a ) { var b = this . element . getWindow ( ) , c = b . getViewPaneSize ( ) , b = function ( a ) { var b = a . editorViewportRect , c = a . caretRect , e = a . viewHeight , d = a . scrollPositionY , g = a . windowHeight ; if ( b . bottom < c . bottom ) return Math . min ( c . top , b . bottom ) - e ; a = c . top - b . top ; var f = b . bottom - c . bottom , h = c . top - e < d ; if ( e > f && e < a && ! h ) return c . top - e ; if ( b . top > c . top ) return Math . max ( c . bottom , b . top ) ; d = c . bottom + e > g + d ; return e > f && e < a || ! d ? Math . min ( b . bottom , c . bottom ) : c . top - e } ( { editorViewportRect : function ( a ) { var b =
a . editable ( ) ; return CKEDITOR . env . iOS && ! b . isInline ( ) ? a . window . getFrame ( ) . getParent ( ) . getClientRect ( ! 0 ) : b . isInline ( ) ? b . getClientRect ( ! 0 ) : a . window . getFrame ( ) . getClientRect ( ! 0 ) } ( this . editor ) , caretRect : a , viewHeight : this . element . getSize ( "height" ) , scrollPositionY : b . getScrollPosition ( ) . y , windowHeight : c . height } ) ; a = function ( a ) { var b = a . leftPosition , c = a . viewWidth ; a = a . windowWidth ; return b + c > a ? a - c : b } ( { leftPosition : a . left , viewWidth : this . element . getSize ( "width" ) , windowWidth : c . width } ) ; this . element . setStyles ( { left : a +
"px" , top : b + "px" } ) } , scrollElementTo : function ( a ) { a . scrollIntoParent ( this . element ) } , updateItems : function ( a ) { var b , c = new CKEDITOR . dom . documentFragment ( this . document ) ; for ( b = 0 ; b < a . length ; ++ b ) c . append ( this . createItem ( a [ b ] ) ) ; this . appendItems ( c ) ; this . selectedItemId = null } , updatePosition : function ( a ) { this . setPosition ( this . getViewPosition ( a ) ) } } ; CKEDITOR . event . implementOn ( g . prototype ) ; f . prototype = { getIndexById : function ( a ) { if ( ! this . hasData ( ) ) return - 1 ; for ( var b = this . data , c = 0 , d = b . length ; c < d ; c ++ ) if ( b [ c ] . id == a ) return c ;
return - 1 } , getItemById : function ( a ) { a = this . getIndexById ( a ) ; return ~ a && this . data [ a ] || null } , hasData : function ( ) { return Boolean ( this . data && this . data . length ) } , setItem : function ( a ) { if ( 0 > this . getIndexById ( a ) ) throw Error ( "Item with given id does not exist" ) ; this . selectedItemId = a } , select : function ( a ) { this . fire ( "change-selectedItemId" , a ) } , selectFirst : function ( ) { this . hasData ( ) && this . select ( this . data [ 0 ] . id ) } , selectLast : function ( ) { this . hasData ( ) && this . select ( this . data [ this . data . length - 1 ] . id ) } , selectNext : function ( ) { if ( null ==
this . selectedItemId ) this . selectFirst ( ) ; else { var a = this . getIndexById ( this . selectedItemId ) ; 0 > a || a + 1 == this . data . length ? this . selectFirst ( ) : this . select ( this . data [ a + 1 ] . id ) } } , selectPrevious : function ( ) { if ( null == this . selectedItemId ) this . selectLast ( ) ; else { var a = this . getIndexById ( this . selectedItemId ) ; 0 >= a ? this . selectLast ( ) : this . select ( this . data [ a - 1 ] . id ) } } , setActive : function ( a ) { this . isActive = a ; this . fire ( "change-isActive" , a ) } , setQuery : function ( a , b ) { var c = this , d = CKEDITOR . tools . getNextId ( ) ; this . lastRequestId = d ;
this . query = a ; this . range = b ; this . selectedItemId = this . data = null ; this . dataCallback ( { query : a , range : b } , function ( a ) { d == c . lastRequestId && ( c . data = c . itemsLimit ? a . slice ( 0 , c . itemsLimit ) : a , c . fire ( "change-data" , c . data ) ) } ) } } ; CKEDITOR . event . implementOn ( f . prototype ) ; CKEDITOR . plugins . autocomplete = d ; d . view = g ; d . model = f ; CKEDITOR . config . autocomplete _commitKeystrokes = [ 9 , 13 ] } ) ( ) ; ( function ( ) { function h ( b , d ) { for ( var a = b . length , c = 0 , e = 0 ; e < a ; e += 1 ) { var g = b [ e ] ; if ( d >= c && c + g . getText ( ) . length >= d ) return { element : g , offset : d - c } ; c += g . getText ( ) . length } return null } function m ( b , d ) { for ( var a = 0 ; a < b . length ; a ++ ) if ( d ( b [ a ] ) ) return a ; return - 1 } CKEDITOR . plugins . add ( "textmatch" , { } ) ; CKEDITOR . plugins . textMatch = { } ; CKEDITOR . plugins . textMatch . match = function ( b , d ) { var a = CKEDITOR . plugins . textMatch . getTextAndOffset ( b ) , c = CKEDITOR . dom . selection . FILLING _CHAR _SEQUENCE , e = 0 ; if ( a ) return 0 == a . text . indexOf ( c ) && ( e = c . length ,
a . text = a . text . replace ( c , "" ) , a . offset -= e ) , ( c = d ( a . text , a . offset ) ) ? { range : CKEDITOR . plugins . textMatch . getRangeInText ( b , c . start , c . end + e ) , text : a . text . slice ( c . start , c . end ) } : null } ; CKEDITOR . plugins . textMatch . getTextAndOffset = function ( b ) { if ( ! b . collapsed ) return null ; var d = "" , a = 0 , c = CKEDITOR . plugins . textMatch . getAdjacentTextNodes ( b ) , e = ! 1 , g , h = b . startContainer . type != CKEDITOR . NODE _ELEMENT ; g = h ? m ( c , function ( a ) { return b . startContainer . equals ( a ) } ) : b . startOffset - ( c [ 0 ] ? c [ 0 ] . getIndex ( ) : 0 ) ; for ( var k = c . length , f = 0 ; f < k ; f +=
1 ) { var l = c [ f ] , d = d + l . getText ( ) ; e || ( h ? f == g ? ( e = ! 0 , a += b . startOffset ) : a += l . getText ( ) . length : ( f == g && ( e = ! 0 ) , 0 < f && ( a += c [ f - 1 ] . getText ( ) . length ) , k == g && f + 1 == k && ( a += l . getText ( ) . length ) ) ) } return { text : d , offset : a } } ; CKEDITOR . plugins . textMatch . getRangeInText = function ( b , d , a ) { var c = new CKEDITOR . dom . range ( b . root ) ; b = CKEDITOR . plugins . textMatch . getAdjacentTextNodes ( b ) ; d = h ( b , d ) ; a = h ( b , a ) ; c . setStart ( d . element , d . offset ) ; c . setEnd ( a . element , a . offset ) ; return c } ; CKEDITOR . plugins . textMatch . getAdjacentTextNodes = function ( b ) { if ( ! b . collapsed ) return [ ] ;
var d = [ ] , a , c , e ; b . startContainer . type != CKEDITOR . NODE _ELEMENT ? ( a = b . startContainer . getParent ( ) . getChildren ( ) , b = b . startContainer . getIndex ( ) ) : ( a = b . startContainer . getChildren ( ) , b = b . startOffset ) ; for ( e = b ; c = a . getItem ( -- e ) ; ) if ( c . type == CKEDITOR . NODE _TEXT ) d . unshift ( c ) ; else break ; for ( e = b ; c = a . getItem ( e ++ ) ; ) if ( c . type == CKEDITOR . NODE _TEXT ) d . push ( c ) ; else break ; return d } } ) ( ) ; ( function ( ) { CKEDITOR . plugins . add ( "xml" , { } ) ; CKEDITOR . xml = function ( c ) { var a = null ; if ( "object" == typeof c ) a = c ; else if ( c = ( c || "" ) . replace ( / /g , " " ) , "ActiveXObject" in window ) { try { a = new ActiveXObject ( "MSXML2.DOMDocument" ) } catch ( b ) { try { a = new ActiveXObject ( "Microsoft.XmlDom" ) } catch ( d ) { } } a && ( a . async = ! 1 , a . resolveExternals = ! 1 , a . validateOnParse = ! 1 , a . loadXML ( c ) ) } else window . DOMParser && ( a = ( new DOMParser ) . parseFromString ( c , "text/xml" ) ) ; this . baseXml = a } ; CKEDITOR . xml . prototype = { selectSingleNode : function ( c , a ) { var b =
this . baseXml ; if ( a || ( a = b ) ) { if ( "selectSingleNode" in a ) return a . selectSingleNode ( c ) ; if ( b . evaluate ) return ( b = b . evaluate ( c , a , null , 9 , null ) ) && b . singleNodeValue || null } return null } , selectNodes : function ( c , a ) { var b = this . baseXml , d = [ ] ; if ( a || ( a = b ) ) { if ( "selectNodes" in a ) return a . selectNodes ( c ) ; if ( b . evaluate && ( b = b . evaluate ( c , a , null , 5 , null ) ) ) for ( var e ; e = b . iterateNext ( ) ; ) d . push ( e ) } return d } , getInnerXml : function ( c , a ) { var b = this . selectSingleNode ( c , a ) , d = [ ] ; if ( b ) for ( b = b . firstChild ; b ; ) b . xml ? d . push ( b . xml ) : window . XMLSerializer &&
d . push ( ( new XMLSerializer ) . serializeToString ( b ) ) , b = b . nextSibling ; return d . length ? d . join ( "" ) : null } } } ) ( ) ; ( function ( ) { CKEDITOR . plugins . add ( "ajax" , { requires : "xml" } ) ; CKEDITOR . ajax = function ( ) { function k ( ) { if ( ! CKEDITOR . env . ie || "file:" != location . protocol ) try { return new XMLHttpRequest } catch ( a ) { } try { return new ActiveXObject ( "Msxml2.XMLHTTP" ) } catch ( b ) { } try { return new ActiveXObject ( "Microsoft.XMLHTTP" ) } catch ( c ) { } return null } function h ( a , b ) { if ( 4 != a . readyState || ! ( 200 <= a . status && 300 > a . status || 304 == a . status || 0 === a . status || 1223 == a . status ) ) return null ; switch ( b ) { case "text" : return a . responseText ; case "xml" : var c = a . responseXML ;
return new CKEDITOR . xml ( c && c . firstChild ? c : a . responseText ) ; case "arraybuffer" : return a . response ; default : return null } } function g ( a , b , c ) { var e = ! ! b , d = k ( ) ; if ( ! d ) return null ; e && "text" !== c && "xml" !== c && ( d . responseType = c ) ; d . open ( "GET" , a , e ) ; e && ( d . onreadystatechange = function ( ) { 4 == d . readyState && ( b ( h ( d , c ) ) , d = null ) } ) ; d . send ( null ) ; return e ? "" : h ( d , c ) } function l ( a , b , c , e , d ) { var f = k ( ) ; if ( ! f ) return null ; f . open ( "POST" , a , ! 0 ) ; f . onreadystatechange = function ( ) { 4 == f . readyState && ( e && e ( h ( f , d ) ) , f = null ) } ; f . setRequestHeader ( "Content-type" ,
c || "application/x-www-form-urlencoded; charset\x3dUTF-8" ) ; f . send ( b ) } return { load : function ( a , b , c ) { return g ( a , b , c || "text" ) } , post : function ( a , b , c , e ) { return l ( a , b , c , e , "text" ) } , loadXml : function ( a , b ) { return g ( a , b , "xml" ) } , loadText : function ( a , b ) { return g ( a , b , "text" ) } , loadBinary : function ( a , b ) { return g ( a , b , "arraybuffer" ) } } } ( ) } ) ( ) ; ( function ( ) { function k ( a ) { a . name || ( a . name = e ( a . id . replace ( /::.*$/ , ":" ) . replace ( /^:|:$/g , "" ) ) ) ; return a } var g = ! 1 , f = CKEDITOR . tools . array , e = CKEDITOR . tools . htmlEncodeAttr , h = CKEDITOR . tools . createClass ( { $ : function ( a , d ) { var c = this . lang = a . lang . emoji , b = this ; this . listeners = [ ] ; this . plugin = d ; this . editor = a ; this . groups = [ { name : "people" , sectionName : c . groups . people , svgId : "cke4-icon-emoji-2" , position : { x : - 21 , y : 0 } , items : [ ] } , { name : "nature" , sectionName : c . groups . nature , svgId : "cke4-icon-emoji-3" , position : { x : - 42 , y : 0 } , items : [ ] } ,
{ name : "food" , sectionName : c . groups . food , svgId : "cke4-icon-emoji-4" , position : { x : - 63 , y : 0 } , items : [ ] } , { name : "travel" , sectionName : c . groups . travel , svgId : "cke4-icon-emoji-6" , position : { x : - 42 , y : - 21 } , items : [ ] } , { name : "activities" , sectionName : c . groups . activities , svgId : "cke4-icon-emoji-5" , position : { x : - 84 , y : 0 } , items : [ ] } , { name : "objects" , sectionName : c . groups . objects , svgId : "cke4-icon-emoji-7" , position : { x : 0 , y : - 21 } , items : [ ] } , { name : "symbols" , sectionName : c . groups . symbols , svgId : "cke4-icon-emoji-8" , position : { x : - 21 , y : - 21 } ,
items : [ ] } , { name : "flags" , sectionName : c . groups . flags , svgId : "cke4-icon-emoji-9" , position : { x : - 63 , y : - 21 } , items : [ ] } ] ; this . elements = { } ; a . ui . addToolbarGroup ( "emoji" , "insert" ) ; a . ui . add ( "EmojiPanel" , CKEDITOR . UI _PANELBUTTON , { label : "emoji" , title : c . title , modes : { wysiwyg : 1 } , editorFocus : 0 , toolbar : "insert" , panel : { css : [ CKEDITOR . skin . getPath ( "editor" ) , d . path + "skins/default.css" ] , attributes : { role : "listbox" , "aria-label" : c . title } , markFirst : ! 1 } , onBlock : function ( d , c ) { var e = c . keys , f = "rtl" === a . lang . dir ; e [ f ? 37 : 39 ] = "next" ; e [ 40 ] =
"next" ; e [ 9 ] = "next" ; e [ f ? 39 : 37 ] = "prev" ; e [ 38 ] = "prev" ; e [ CKEDITOR . SHIFT + 9 ] = "prev" ; e [ 32 ] = "click" ; b . blockElement = c . element ; b . emojiList = b . editor . _ . emoji . list ; b . addEmojiToGroups ( ) ; c . element . getAscendant ( "html" ) . addClass ( "cke_emoji" ) ; c . element . getDocument ( ) . appendStyleSheet ( CKEDITOR . getUrl ( CKEDITOR . basePath + "contents.css" ) ) ; c . element . addClass ( "cke_emoji-panel_block" ) ; c . element . setHtml ( b . createEmojiBlock ( ) ) ; c . element . removeAttribute ( "title" ) ; d . element . addClass ( "cke_emoji-panel" ) ; b . items = c . _ . getItems ( ) ; b . blockObject =
c ; b . elements . emojiItems = c . element . find ( ".cke_emoji-outer_emoji_block li \x3e a" ) ; b . elements . sectionHeaders = c . element . find ( ".cke_emoji-outer_emoji_block h2" ) ; b . elements . input = c . element . findOne ( "input" ) ; b . inputIndex = b . getItemIndex ( b . items , b . elements . input ) ; b . elements . emojiBlock = c . element . findOne ( ".cke_emoji-outer_emoji_block" ) ; b . elements . navigationItems = c . element . find ( "nav li" ) ; b . elements . statusIcon = c . element . findOne ( ".cke_emoji-status_icon" ) ; b . elements . statusDescription = c . element . findOne ( "p.cke_emoji-status_description" ) ;
b . elements . statusName = c . element . findOne ( "p.cke_emoji-status_full_name" ) ; b . elements . sections = c . element . find ( "section" ) ; b . registerListeners ( ) } , onOpen : b . openReset ( ) } ) } , proto : { registerListeners : function ( ) { f . forEach ( this . listeners , function ( a ) { var d = a . listener , c = a . event , b = a . ctx || this ; f . forEach ( this . blockElement . find ( a . selector ) . toArray ( ) , function ( a ) { a . on ( c , d , b ) } ) } , this ) } , createEmojiBlock : function ( ) { var a = [ ] ; this . loadSVGNavigationIcons ( ) ; a . push ( this . createGroupsNavigation ( ) ) ; a . push ( this . createSearchSection ( ) ) ;
a . push ( this . createEmojiListBlock ( ) ) ; a . push ( this . createStatusBar ( ) ) ; return '\x3cdiv class\x3d"cke_emoji-inner_panel"\x3e' + a . join ( "" ) + "\x3c/div\x3e" } , createGroupsNavigation : function ( ) { var a , d ; this . editor . plugins . emoji . isSVGSupported ( ) ? ( d = CKEDITOR . env . safari ? 'xlink:href\x3d"#{svgId}"' : 'href\x3d"#{svgId}"' , a = new CKEDITOR . template ( '\x3cli class\x3d"cke_emoji-navigation_item" data-cke-emoji-group\x3d"{group}"\x3e\x3ca href\x3d"#" title\x3d"{name}" draggable\x3d"false" _cke_focus\x3d"1"\x3e\x3csvg viewBox\x3d"0 0 34 34" aria-labelledby\x3d"{svgId}-title"\x3e\x3ctitle id\x3d"{svgId}-title"\x3e{name}\x3c/title\x3e\x3cuse ' +
d + "\x3e\x3c/use\x3e\x3c/svg\x3e\x3c/a\x3e\x3c/li\x3e" ) , d = f . reduce ( this . groups , function ( c , b ) { return b . items . length ? c + a . output ( { group : e ( b . name ) , name : e ( b . sectionName ) , svgId : e ( b . svgId ) , translateX : b . translate && b . translate . x ? e ( b . translate . x ) : 0 , translateY : b . translate && b . translate . y ? e ( b . translate . y ) : 0 } ) : c } , "" ) ) : ( d = CKEDITOR . getUrl ( this . plugin . path + "assets/iconsall.png" ) , a = new CKEDITOR . template ( '\x3cli class\x3d"cke_emoji-navigation_item" data-cke-emoji-group\x3d"{group}"\x3e\x3ca href\x3d"#" draggable\x3d"false" _cke_focus\x3d"1" title\x3d"{name}"\x3e\x3cspan style\x3d"background-image:url(' +
d + ');background-repeat:no-repeat;background-position:{positionX}px {positionY}px;"\x3e\x3c/span\x3e\x3c/a\x3e\x3c/li\x3e' ) , d = f . reduce ( this . groups , function ( c , b ) { return b . items . length ? c + a . output ( { group : e ( b . name ) , name : e ( b . sectionName ) , positionX : b . position . x , positionY : b . position . y } ) : c } , "" ) ) ; this . listeners . push ( { selector : "nav" , event : "click" , listener : function ( a ) { var b = a . data . getTarget ( ) . getAscendant ( "li" , ! 0 ) ; b && ( f . forEach ( this . elements . navigationItems . toArray ( ) , function ( a ) { a . equals ( b ) ? a . addClass ( "active" ) :
a . removeClass ( "active" ) } ) , this . clearSearchAndMoveFocus ( b ) , a . data . preventDefault ( ) ) } } ) ; return '\x3cnav aria-label\x3d"' + e ( this . lang . navigationLabel ) + '"\x3e\x3cul\x3e' + d + "\x3c/ul\x3e\x3c/nav\x3e" } , createSearchSection : function ( ) { this . listeners . push ( { selector : "input" , event : "input" , listener : CKEDITOR . tools . throttle ( 200 , this . filter , this ) . input } ) ; this . listeners . push ( { selector : "input" , event : "click" , listener : function ( ) { this . blockObject . _ . markItem ( this . inputIndex ) } } ) ; return '\x3clabel class\x3d"cke_emoji-search"\x3e' +
this . getLoupeIcon ( ) + '\x3cinput placeholder\x3d"' + e ( this . lang . searchPlaceholder ) + '" type\x3d"search" aria-label\x3d"' + e ( this . lang . searchLabel ) + '" role\x3d"search" _cke_focus\x3d"1"\x3e\x3c/label\x3e' } , createEmojiListBlock : function ( ) { this . listeners . push ( { selector : ".cke_emoji-outer_emoji_block" , event : "scroll" , listener : CKEDITOR . tools . throttle ( 150 , this . refreshNavigationStatus , this ) . input } ) ; this . listeners . push ( { selector : ".cke_emoji-outer_emoji_block" , event : "click" , listener : function ( a ) { a . data . getTarget ( ) . data ( "cke-emoji-name" ) &&
this . editor . execCommand ( "insertEmoji" , { emojiText : a . data . getTarget ( ) . data ( "cke-emoji-symbol" ) } ) } } ) ; this . listeners . push ( { selector : ".cke_emoji-outer_emoji_block" , event : "mouseover" , listener : function ( a ) { this . updateStatusbar ( a . data . getTarget ( ) ) } } ) ; this . listeners . push ( { selector : ".cke_emoji-outer_emoji_block" , event : "keyup" , listener : function ( ) { this . updateStatusbar ( this . items . getItem ( this . blockObject . _ . focusIndex ) ) } } ) ; return '\x3cdiv class\x3d"cke_emoji-outer_emoji_block"\x3e' + this . getEmojiSections ( ) + "\x3c/div\x3e" } ,
createStatusBar : function ( ) { return '\x3cdiv class\x3d"cke_emoji-status_bar"\x3e\x3cdiv class\x3d"cke_emoji-status_icon"\x3e\x3c/div\x3e\x3cp class\x3d"cke_emoji-status_description"\x3e\x3c/p\x3e\x3cp class\x3d"cke_emoji-status_full_name"\x3e\x3c/p\x3e\x3c/div\x3e' } , getLoupeIcon : function ( ) { var a = CKEDITOR . getUrl ( this . plugin . path + "assets/iconsall.png" ) ; return this . editor . plugins . emoji . isSVGSupported ( ) ? ( a = CKEDITOR . env . safari ? 'xlink:href\x3d"#cke4-icon-emoji-10"' : 'href\x3d"#cke4-icon-emoji-10"' , '\x3csvg viewBox\x3d"0 0 34 34" role\x3d"img" aria-hidden\x3d"true" class\x3d"cke_emoji-search_loupe"\x3e\x3cuse ' +
a + "\x3e\x3c/use\x3e\x3c/svg\x3e" ) : '\x3cspan class\x3d"cke_emoji-search_loupe" aria-hidden\x3d"true" style\x3d"background-image:url(' + a + ');"\x3e\x3c/span\x3e' } , getEmojiSections : function ( ) { return f . reduce ( this . groups , function ( a , d ) { return d . items . length ? a + this . getEmojiSection ( d ) : a } , "" , this ) } , getEmojiSection : function ( a ) { var d = e ( a . name ) , c = e ( a . sectionName ) ; a = this . getEmojiListGroup ( a . items ) ; return '\x3csection data-cke-emoji-group\x3d"' + d + '" \x3e\x3ch2 id\x3d"' + d + '"\x3e' + c + "\x3c/h2\x3e\x3cul\x3e" + a + "\x3c/ul\x3e\x3c/section\x3e" } ,
getEmojiListGroup : function ( a ) { var d = new CKEDITOR . template ( '\x3cli class\x3d"cke_emoji-item"\x3e\x3ca draggable\x3d"false" data-cke-emoji-full-name\x3d"{id}" data-cke-emoji-name\x3d"{name}" data-cke-emoji-symbol\x3d"{symbol}" data-cke-emoji-group\x3d"{group}" data-cke-emoji-keywords\x3d"{keywords}" title\x3d"{name}" href\x3d"#" _cke_focus\x3d"1"\x3e{symbol}\x3c/a\x3e\x3c/li\x3e' ) ; return f . reduce ( a , function ( a , b ) { k ( b ) ; return a + d . output ( { symbol : e ( b . symbol ) , id : e ( b . id ) , name : b . name , group : e ( b . group ) , keywords : e ( ( b . keywords ||
[ ] ) . join ( "," ) ) } ) } , "" , this ) } , filter : function ( a ) { var d = { } , c = "string" === typeof a ? a : a . sender . getValue ( ) ; f . forEach ( this . elements . emojiItems . toArray ( ) , function ( a ) { var e ; a : { e = a . data ( "cke-emoji-name" ) ; var f = a . data ( "cke-emoji-keywords" ) ; if ( - 1 !== e . indexOf ( c ) ) e = ! 0 ; else { if ( f ) for ( e = f . split ( "," ) , f = 0 ; f < e . length ; f ++ ) if ( - 1 !== e [ f ] . indexOf ( c ) ) { e = ! 0 ; break a } e = ! 1 } } e || "" === c ? ( a . removeClass ( "hidden" ) , a . getParent ( ) . removeClass ( "hidden" ) , d [ a . data ( "cke-emoji-group" ) ] = ! 0 ) : ( a . addClass ( "hidden" ) , a . getParent ( ) . addClass ( "hidden" ) ) } ) ;
f . forEach ( this . elements . sectionHeaders . toArray ( ) , function ( a ) { d [ a . getId ( ) ] ? ( a . getParent ( ) . removeClass ( "hidden" ) , a . removeClass ( "hidden" ) ) : ( a . addClass ( "hidden" ) , a . getParent ( ) . addClass ( "hidden" ) ) } ) ; this . refreshNavigationStatus ( ) } , clearSearchInput : function ( ) { this . elements . input . setValue ( "" ) ; this . filter ( "" ) } , openReset : function ( ) { var a = this , d ; return function ( ) { d || ( a . filter ( "" ) , d = ! 0 ) ; a . elements . emojiBlock . $ . scrollTop = 0 ; a . refreshNavigationStatus ( ) ; a . clearSearchInput ( ) ; CKEDITOR . tools . setTimeout ( function ( ) { a . elements . input . focus ( ! 0 ) ;
a . blockObject . _ . markItem ( a . inputIndex ) } , 0 , a ) ; a . clearStatusbar ( ) } } , refreshNavigationStatus : function ( ) { var a = this . elements . emojiBlock . getClientRect ( ) . top , d , c ; d = f . filter ( this . elements . sections . toArray ( ) , function ( b ) { var c = b . getClientRect ( ) ; return ! c . height || b . findOne ( "h2" ) . hasClass ( "hidden" ) ? ! 1 : c . height + c . top > a } ) ; c = d . length ? d [ 0 ] . data ( "cke-emoji-group" ) : ! 1 ; f . forEach ( this . elements . navigationItems . toArray ( ) , function ( a ) { a . data ( "cke-emoji-group" ) === c ? a . addClass ( "active" ) : a . removeClass ( "active" ) } ) } , updateStatusbar : function ( a ) { "a" ===
a . getName ( ) && a . hasAttribute ( "data-cke-emoji-name" ) && ( this . elements . statusIcon . setText ( e ( a . getText ( ) ) ) , this . elements . statusDescription . setText ( e ( a . data ( "cke-emoji-name" ) ) ) , this . elements . statusName . setText ( e ( a . data ( "cke-emoji-full-name" ) ) ) ) } , clearStatusbar : function ( ) { this . elements . statusIcon . setText ( "" ) ; this . elements . statusDescription . setText ( "" ) ; this . elements . statusName . setText ( "" ) } , clearSearchAndMoveFocus : function ( a ) { this . clearSearchInput ( ) ; this . moveFocus ( a . data ( "cke-emoji-group" ) ) } , moveFocus : function ( a ) { a =
this . blockElement . findOne ( 'a[data-cke-emoji-group\x3d"' + e ( a ) + '"]' ) ; var d ; a && ( d = this . getItemIndex ( this . items , a ) , a . focus ( ! 0 ) , a . getAscendant ( "section" ) . getFirst ( ) . scrollIntoView ( ! 0 ) , this . blockObject . _ . markItem ( d ) ) } , getItemIndex : function ( a , d ) { return f . indexOf ( a . toArray ( ) , function ( a ) { return a . equals ( d ) } ) } , loadSVGNavigationIcons : function ( ) { if ( this . editor . plugins . emoji . isSVGSupported ( ) ) { var a = this . blockElement . getDocument ( ) ; CKEDITOR . ajax . load ( CKEDITOR . getUrl ( this . plugin . path + "assets/iconsall.svg" ) , function ( d ) { var c =
new CKEDITOR . dom . element ( "div" ) ; c . addClass ( "cke_emoji-navigation_icons" ) ; c . setHtml ( d ) ; a . getBody ( ) . append ( c ) } ) } } , addEmojiToGroups : function ( ) { var a = { } ; f . forEach ( this . groups , function ( d ) { a [ d . name ] = d . items } , this ) ; f . forEach ( this . emojiList , function ( d ) { a [ d . group ] . push ( d ) } , this ) } } } ) ; CKEDITOR . plugins . add ( "emoji" , { requires : "autocomplete,textmatch,ajax,panelbutton,floatpanel" , icons : "emojipanel" , hidpi : ! 0 , isSupportedEnvironment : function ( ) { return ! CKEDITOR . env . ie || 11 <= CKEDITOR . env . version } , beforeInit : function ( ) { this . isSupportedEnvironment ( ) &&
! g && ( CKEDITOR . document . appendStyleSheet ( this . path + "skins/default.css" ) , g = ! 0 ) } , init : function ( a ) { if ( this . isSupportedEnvironment ( ) ) { var d = CKEDITOR . tools . array ; CKEDITOR . ajax . load ( CKEDITOR . getUrl ( a . config . emoji _emojiListUrl || "plugins/emoji/emoji.json" ) , function ( c ) { function b ( ) { a . _ . emoji . autocomplete = new CKEDITOR . plugins . autocomplete ( a , { textTestCallback : e ( ) , dataCallback : g , itemTemplate : '\x3cli data-id\x3d"{id}" class\x3d"cke_emoji-suggestion_item"\x3e\x3cspan\x3e{symbol}\x3c/span\x3e {name}\x3c/li\x3e' ,
outputTemplate : "{symbol}" } ) } function e ( ) { return function ( a ) { return a . collapsed ? CKEDITOR . plugins . textMatch . match ( a , f ) : null } } function f ( a , b ) { var c = a . slice ( 0 , b ) , d = c . match ( new RegExp ( "(?:\\s|^)(:\\S{" + l + "}\\S*)$" ) ) ; return d ? { start : c . lastIndexOf ( d [ 1 ] ) , end : b } : null } function g ( a , b ) { var c = a . query . substr ( 1 ) . toLowerCase ( ) , e = d . filter ( h , function ( a ) { return - 1 !== a . id . toLowerCase ( ) . indexOf ( c ) } ) . sort ( function ( a , b ) { var d = ! a . id . substr ( 1 ) . indexOf ( c ) , e = ! b . id . substr ( 1 ) . indexOf ( c ) ; return d != e ? d ? - 1 : 1 : a . id > b . id ? 1 : - 1 } ) , e = d . map ( e ,
k ) ; b ( e ) } if ( null !== c ) { void 0 === a . _ . emoji && ( a . _ . emoji = { } ) ; void 0 === a . _ . emoji . list && ( a . _ . emoji . list = JSON . parse ( c ) ) ; var h = a . _ . emoji . list , l = void 0 === a . config . emoji _minChars ? 2 : a . config . emoji _minChars ; if ( "ready" !== a . status ) a . once ( "instanceReady" , b ) ; else b ( ) } } ) ; a . addCommand ( "insertEmoji" , { exec : function ( a , b ) { a . insertHtml ( b . emojiText ) } } ) ; a . plugins . toolbar && new h ( a , this ) } } , isSVGSupported : function ( ) { return ! CKEDITOR . env . ie || CKEDITOR . env . edge } } ) } ) ( ) ; ( function ( ) { function x ( a , e , b ) { b = a . config . forceEnterMode || b ; if ( "wysiwyg" == a . mode ) { e || ( e = a . activeEnterMode ) ; var l = a . elementPath ( ) ; l && ! l . isContextFor ( "p" ) && ( e = CKEDITOR . ENTER _BR , b = 1 ) ; a . fire ( "saveSnapshot" ) ; e == CKEDITOR . ENTER _BR ? u ( a , e , null , b ) : r ( a , e , null , b ) ; a . fire ( "saveSnapshot" ) } } function y ( a ) { a = a . getSelection ( ) . getRanges ( ! 0 ) ; for ( var e = a . length - 1 ; 0 < e ; e -- ) a [ e ] . deleteContents ( ) ; return a [ 0 ] } function z ( a ) { var e = a . startContainer . getAscendant ( function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && "true" == a . getAttribute ( "contenteditable" ) } ,
! 0 ) ; if ( a . root . equals ( e ) ) return a ; e = new CKEDITOR . dom . range ( e ) ; e . moveToRange ( a ) ; return e } CKEDITOR . plugins . add ( "enterkey" , { init : function ( a ) { a . addCommand ( "enter" , { modes : { wysiwyg : 1 } , editorFocus : ! 1 , exec : function ( a ) { x ( a ) } } ) ; a . addCommand ( "shiftEnter" , { modes : { wysiwyg : 1 } , editorFocus : ! 1 , exec : function ( a ) { x ( a , a . activeShiftEnterMode , 1 ) } } ) ; a . setKeystroke ( [ [ 13 , "enter" ] , [ CKEDITOR . SHIFT + 13 , "shiftEnter" ] ] ) } } ) ; var A = CKEDITOR . dom . walker . whitespaces ( ) , B = CKEDITOR . dom . walker . bookmark ( ) , v , u , r , w ; CKEDITOR . plugins . enterkey =
{ enterBlock : function ( a , e , b , l ) { function n ( a ) { var b ; if ( a === CKEDITOR . ENTER _BR || - 1 === CKEDITOR . tools . indexOf ( [ "td" , "th" ] , p . lastElement . getName ( ) ) || 1 !== p . lastElement . getChildCount ( ) ) return ! 1 ; a = p . lastElement . getChild ( 0 ) . clone ( ! 0 ) ; ( b = a . getBogus ( ) ) && b . remove ( ) ; return a . getText ( ) . length ? ! 1 : ! 0 } if ( b = b || y ( a ) ) { b = z ( b ) ; var g = b . document , f = b . checkStartOfBlock ( ) , k = b . checkEndOfBlock ( ) , p = a . elementPath ( b . startContainer ) , c = p . block , m = e == CKEDITOR . ENTER _DIV ? "div" : "p" , d ; if ( c && f && k ) { f = c . getParent ( ) ; if ( f . is ( "li" ) && 1 < f . getChildCount ( ) ) { g =
new CKEDITOR . dom . element ( "li" ) ; d = a . createRange ( ) ; g . insertAfter ( f ) ; c . remove ( ) ; d . setStart ( g , 0 ) ; a . getSelection ( ) . selectRanges ( [ d ] ) ; return } if ( c . is ( "li" ) || c . getParent ( ) . is ( "li" ) ) { c . is ( "li" ) || ( c = c . getParent ( ) , f = c . getParent ( ) ) ; d = f . getParent ( ) ; b = ! c . hasPrevious ( ) ; var h = ! c . hasNext ( ) ; l = a . getSelection ( ) ; var m = l . createBookmarks ( ) , t = c . getDirection ( 1 ) , k = c . getAttribute ( "class" ) , q = c . getAttribute ( "style" ) , r = d . getDirection ( 1 ) != t ; a = a . enterMode != CKEDITOR . ENTER _BR || r || q || k ; if ( d . is ( "li" ) ) b || h ? ( b && h && f . remove ( ) , c [ h ? "insertAfter" :
@@ -984,15 +1044,11 @@ a.ui.addButton("BulletedList",{isToggle:!0,label:a.lang.list.bulletedlist,comman
if ( b ) { var c ; ( c = g . contains ( u ) ) && e . checkBoundaryOfElement ( c , CKEDITOR . START ) && ( c = c . getParent ( ) ) && c . is ( "li" ) && ( c = A ( c ) ) ? ( f = c , c = c . getPrevious ( t ) , d . moveToPosition ( c && z ( c ) ? c : f , CKEDITOR . POSITION _BEFORE _START ) ) : ( k . range . setStartAt ( h , CKEDITOR . POSITION _AFTER _START ) , k . range . setEnd ( e . startContainer , e . startOffset ) , ( c = k . previous ( ) ) && c . type == CKEDITOR . NODE _ELEMENT && ( c . getName ( ) in u || c . is ( "li" ) ) && ( c . is ( "li" ) || ( k . range . selectNodeContents ( c ) , k . reset ( ) , k . evaluator = H , c = k . previous ( ) ) , f = c , d . moveToElementEditEnd ( f ) , d . moveToPosition ( d . endPath ( ) . block ,
CKEDITOR . POSITION _BEFORE _END ) ) ) ; if ( f ) D ( a , d , e ) , l . cancel ( ) ; else { var p = g . contains ( u ) ; p && e . checkBoundaryOfElement ( p , CKEDITOR . START ) && ( f = p . getFirst ( t ) , e . checkBoundaryOfElement ( f , CKEDITOR . START ) && ( c = p . getPrevious ( t ) , A ( f ) ? c && ( e . moveToElementEditEnd ( c ) , e . select ( ) ) : a . execCommand ( "outdent" ) , l . cancel ( ) ) ) } } else if ( f = g . contains ( "li" ) ) { if ( k . range . setEndAt ( h , CKEDITOR . POSITION _BEFORE _END ) , b = ( h = f . getLast ( t ) ) && H ( h ) ? h : f , g = 0 , ( c = k . next ( ) ) && c . type == CKEDITOR . NODE _ELEMENT && c . getName ( ) in u && c . equals ( h ) ? ( g = 1 , c = k . next ( ) ) : e . checkBoundaryOfElement ( b ,
CKEDITOR . END ) && ( g = 2 ) , g && c ) { e = e . clone ( ) ; e . moveToElementEditStart ( c ) ; if ( 1 == g && ( d . optimize ( ) , ! d . startContainer . equals ( f ) ) ) { for ( f = d . startContainer ; f . is ( CKEDITOR . dtd . $inline ) ; ) p = f , f = f . getParent ( ) ; p && d . moveToPosition ( p , CKEDITOR . POSITION _AFTER _END ) } 2 == g && ( d . moveToPosition ( d . endPath ( ) . block , CKEDITOR . POSITION _BEFORE _END ) , e . endPath ( ) . block && e . moveToPosition ( e . endPath ( ) . block , CKEDITOR . POSITION _AFTER _START ) ) ; D ( a , d , e ) ; l . cancel ( ) } } else k . range . setEndAt ( h , CKEDITOR . POSITION _BEFORE _END ) , ( c = k . next ( ) ) && c . type == CKEDITOR . NODE _ELEMENT &&
c . is ( u ) && ( c = c . getFirst ( t ) , g . block && e . checkStartOfBlock ( ) && e . checkEndOfBlock ( ) ? ( g . block . remove ( ) , e . moveToElementEditStart ( c ) , e . select ( ) ) : A ( c ) ? ( e . moveToElementEditStart ( c ) , e . select ( ) ) : ( e = e . clone ( ) , e . moveToElementEditStart ( c ) , D ( a , d , e ) ) , l . cancel ( ) ) ; setTimeout ( function ( ) { a . selectionChange ( 1 ) } ) } } } ) ) } } ) } ) ( ) ; CKEDITOR . plugins . add ( "menubutton" , { requires : "button,menu" , onLoad : function ( ) { var d = function ( c ) { var a = this . _ , b = a . menu ; a . state !== CKEDITOR . TRISTATE _DISABLED && ( a . on && b ? b . hide ( ) : ( a . previousState = a . state , b || ( b = a . menu = new CKEDITOR . menu ( c , { panel : { className : "cke_menu_panel" , attributes : { "aria-label" : c . lang . common . options } } } ) , b . onHide = CKEDITOR . tools . bind ( function ( ) { var b = this . command ? c . getCommand ( this . command ) . modes : this . modes ; this . setState ( ! b || b [ c . mode ] ? a . previousState : CKEDITOR . TRISTATE _DISABLED ) ; a . on = 0 } , this ) ,
this . onMenu && b . addListener ( this . onMenu ) ) , this . setState ( CKEDITOR . TRISTATE _ON ) , a . on = 1 , setTimeout ( function ( ) { b . show ( CKEDITOR . document . getById ( a . id ) , 4 ) } , 0 ) ) ) } ; CKEDITOR . ui . menuButton = CKEDITOR . tools . createClass ( { base : CKEDITOR . ui . button , $ : function ( c ) { delete c . panel ; this . base ( c ) ; this . hasArrow = "menu" ; this . click = d } , statics : { handler : { create : function ( c ) { return new CKEDITOR . ui . menuButton ( c ) } } } } ) } , beforeInit : function ( d ) { d . ui . addHandler ( CKEDITOR . UI _MENUBUTTON , CKEDITOR . ui . menuButton . handler ) } } ) ;
CKEDITOR . UI _MENUBUTTON = "menubutton" ; CKEDITOR . plugins . add ( "onchange" , { init : function ( a ) { function b ( ) { a . readOnly || d || ( d = setTimeout ( function ( ) { d = 0 ; a . fire ( "change" ) } , a . config . minimumChangeMilliseconds || 100 ) ) } var d , g = window . MutationObserver || window . WebKitMutationObserver || window . MozMutationObserver , f ; a . on ( "destroy" , function ( ) { d && clearTimeout ( d ) ; d = null } ) ; a . on ( "saveSnapshot" , function ( a ) { ( ! a . data || ! a . data . contentOnly ) && b ( ) } ) ; var e = a . getCommand ( "undo" ) ; e && e . on ( "afterUndo" , b ) ; ( e = a . getCommand ( "redo" ) ) && e . on ( "afterRedo" , b ) ; a . on ( "afterCommandExec" ,
c . is ( u ) && ( c = c . getFirst ( t ) , g . block && e . checkStartOfBlock ( ) && e . checkEndOfBlock ( ) ? ( g . block . remove ( ) , e . moveToElementEditStart ( c ) , e . select ( ) ) : A ( c ) ? ( e . moveToElementEditStart ( c ) , e . select ( ) ) : ( e = e . clone ( ) , e . moveToElementEditStart ( c ) , D ( a , d , e ) ) , l . cancel ( ) ) ; setTimeout ( function ( ) { a . selectionChange ( 1 ) } ) } } } ) ) } } ) } ) ( ) ; CKEDITOR . plugins . add ( "menubutton" , { requires : "button,menu" , onLoad : function ( ) { var d = function ( c ) { var a = this . _ , d = CKEDITOR . document . getById ( a . id ) , b = a . menu ; a . state !== CKEDITOR . TRISTATE _DISABLED && ( a . on && b ? b . hide ( ) : ( a . previousState = a . state , b || ( b = a . menu = new CKEDITOR . menu ( c , { panel : { className : "cke_menu_panel" , attributes : { "aria-label" : c . lang . common . options } } } ) , b . onHide = CKEDITOR . tools . bind ( function ( ) { var b = this . command ? c . getCommand ( this . command ) . modes : this . modes ; this . setState ( ! b || b [ c . mode ] ? a . previousState : CKEDITOR . TRISTATE _DISABLED ) ;
a . on = 0 ; d . setAttribute ( "aria-expanded" , "false" ) } , this ) , this . onMenu && b . addListener ( this . onMenu ) ) , this . setState ( CKEDITOR . TRISTATE _ON ) , a . on = 1 , d . setAttribute ( "aria-expanded" , "true" ) , setTimeout ( function ( ) { b . show ( CKEDITOR . document . getById ( a . id ) , 4 ) } , 0 ) ) ) } ; CKEDITOR . ui . menuButton = CKEDITOR . tools . createClass ( { base : CKEDITOR . ui . button , $ : function ( c ) { delete c . panel ; this . base ( c ) ; this . hasArrow = "menu" ; this . click = d } , statics : { handler : { create : function ( c ) { return new CKEDITOR . ui . menuButton ( c ) } } } } ) } , beforeInit : function ( d ) { d . ui . addHandler ( CKEDITOR . UI _MENUBUTTON ,
CKEDITOR . ui . menuButton . handler ) } } ) ; CKEDITOR . UI _MENUBUTTON = "menubutton" ; CKEDITOR . plugins . add ( "onchange" , { init : function ( a ) { function b ( ) { a . readOnly || d || ( d = setTimeout ( function ( ) { d = 0 ; a . fire ( "change" ) } , a . config . minimumChangeMilliseconds || 100 ) ) } var d , g = window . MutationObserver || window . WebKitMutationObserver || window . MozMutationObserver , f ; a . on ( "destroy" , function ( ) { d && clearTimeout ( d ) ; d = null } ) ; a . on ( "saveSnapshot" , function ( a ) { ( ! a . data || ! a . data . contentOnly ) && b ( ) } ) ; var e = a . getCommand ( "undo" ) ; e && e . on ( "afterUndo" , b ) ; ( e = a . getCommand ( "redo" ) ) && e . on ( "afterRedo" , b ) ; a . on ( "afterCommandExec" ,
function ( a ) { "source" != a . data . name && ! 1 !== a . data . command . canUndo && b ( ) } ) ; g && ( f = new g ( function ( ) { b ( ) } ) , window . console && window . console . log && console . log ( "Detecting changes using MutationObservers" ) ) ; a . on ( "contentDom" , function ( ) { if ( f ) var c = setInterval ( function ( ) { if ( typeof a . document === "object" ) { f . observe ( a . document . getBody ( ) . $ , { attributes : true , childList : true , characterData : true } ) ; clearInterval ( c ) } } , 100 ) ; a . document . on ( "keydown" , function ( a ) { if ( ! a . data . $ . ctrlKey && ! a . data . $ . metaKey ) { a = a . data . $ . keyCode ; ( a == 8 ||
a == 13 || a == 32 || a >= 46 && a <= 90 || a >= 96 && a <= 111 || a >= 186 && a <= 222 || a == 229 ) && b ( ) } } ) ; a . document . on ( "drop" , b ) ; a . document . getBody ( ) . on ( "drop" , b ) } ) ; a . on ( "mode" , function ( ) { if ( a . mode == "source" ) { var c = a . textarea || a . _ . editable ; c . on ( "keydown" , function ( a ) { ! a . data . $ . ctrlKey && ! a . data . $ . metaKey && b ( ) } ) ; c . on ( "drop" , b ) ; c . on ( "input" , b ) ; if ( CKEDITOR . env . ie ) { c . on ( "cut" , b ) ; c . on ( "paste" , b ) } } } ) } } ) ; ( function ( ) { CKEDITOR . plugins . add ( "xml" , { } ) ; CKEDITOR . xml = function ( c ) { var a = null ; if ( "object" == typeof c ) a = c ; else if ( c = ( c || "" ) . replace ( / /g , " " ) , "ActiveXObject" in window ) { try { a = new ActiveXObject ( "MSXML2.DOMDocument" ) } catch ( b ) { try { a = new ActiveXObject ( "Microsoft.XmlDom" ) } catch ( d ) { } } a && ( a . async = ! 1 , a . resolveExternals = ! 1 , a . validateOnParse = ! 1 , a . loadXML ( c ) ) } else window . DOMParser && ( a = ( new DOMParser ) . parseFromString ( c , "text/xml" ) ) ; this . baseXml = a } ; CKEDITOR . xml . prototype = { selectSingleNode : function ( c , a ) { var b =
this . baseXml ; if ( a || ( a = b ) ) { if ( "selectSingleNode" in a ) return a . selectSingleNode ( c ) ; if ( b . evaluate ) return ( b = b . evaluate ( c , a , null , 9 , null ) ) && b . singleNodeValue || null } return null } , selectNodes : function ( c , a ) { var b = this . baseXml , d = [ ] ; if ( a || ( a = b ) ) { if ( "selectNodes" in a ) return a . selectNodes ( c ) ; if ( b . evaluate && ( b = b . evaluate ( c , a , null , 5 , null ) ) ) for ( var e ; e = b . iterateNext ( ) ; ) d . push ( e ) } return d } , getInnerXml : function ( c , a ) { var b = this . selectSingleNode ( c , a ) , d = [ ] ; if ( b ) for ( b = b . firstChild ; b ; ) b . xml ? d . push ( b . xml ) : window . XMLSerializer &&
d . push ( ( new XMLSerializer ) . serializeToString ( b ) ) , b = b . nextSibling ; return d . length ? d . join ( "" ) : null } } } ) ( ) ; ( function ( ) { CKEDITOR . plugins . add ( "ajax" , { requires : "xml" } ) ; CKEDITOR . ajax = function ( ) { function k ( ) { if ( ! CKEDITOR . env . ie || "file:" != location . protocol ) try { return new XMLHttpRequest } catch ( a ) { } try { return new ActiveXObject ( "Msxml2.XMLHTTP" ) } catch ( b ) { } try { return new ActiveXObject ( "Microsoft.XMLHTTP" ) } catch ( c ) { } return null } function h ( a , b ) { if ( 4 != a . readyState || ! ( 200 <= a . status && 300 > a . status || 304 == a . status || 0 === a . status || 1223 == a . status ) ) return null ; switch ( b ) { case "text" : return a . responseText ; case "xml" : var c = a . responseXML ;
return new CKEDITOR . xml ( c && c . firstChild ? c : a . responseText ) ; case "arraybuffer" : return a . response ; default : return null } } function g ( a , b , c ) { var e = ! ! b , d = k ( ) ; if ( ! d ) return null ; e && "text" !== c && "xml" !== c && ( d . responseType = c ) ; d . open ( "GET" , a , e ) ; e && ( d . onreadystatechange = function ( ) { 4 == d . readyState && ( b ( h ( d , c ) ) , d = null ) } ) ; d . send ( null ) ; return e ? "" : h ( d , c ) } function l ( a , b , c , e , d ) { var f = k ( ) ; if ( ! f ) return null ; f . open ( "POST" , a , ! 0 ) ; f . onreadystatechange = function ( ) { 4 == f . readyState && ( e && e ( h ( f , d ) ) , f = null ) } ; f . setRequestHeader ( "Content-type" ,
c || "application/x-www-form-urlencoded; charset\x3dUTF-8" ) ; f . send ( b ) } return { load : function ( a , b , c ) { return g ( a , b , c || "text" ) } , post : function ( a , b , c , e ) { return l ( a , b , c , e , "text" ) } , loadXml : function ( a , b ) { return g ( a , b , "xml" ) } , loadText : function ( a , b ) { return g ( a , b , "text" ) } , loadBinary : function ( a , b ) { return g ( a , b , "arraybuffer" ) } } } ( ) } ) ( ) ; ( function ( ) { function n ( a , b ) { return CKEDITOR . tools . array . filter ( a , function ( a ) { return a . canHandle ( b ) } ) . sort ( function ( a , c ) { return a . priority === c . priority ? 0 : a . priority - c . priority } ) } function k ( a , b ) { var d = a . shift ( ) ; d && d . handle ( b , function ( ) { k ( a , b ) } ) } function p ( a ) { var b = CKEDITOR . tools . array . reduce ( a , function ( a , c ) { return CKEDITOR . tools . array . isArray ( c . filters ) ? a . concat ( c . filters ) : a } , [ ] ) ; return CKEDITOR . tools . array . filter ( b , function ( a , c ) { return CKEDITOR . tools . array . indexOf ( b , a ) === c } ) } function l ( a , b ) { var d =
a == 13 || a == 32 || a >= 46 && a <= 90 || a >= 96 && a <= 111 || a >= 186 && a <= 222 || a == 229 ) && b ( ) } } ) ; a . document . on ( "drop" , b ) ; a . document . getBody ( ) . on ( "drop" , b ) } ) ; a . on ( "mode" , function ( ) { if ( a . mode == "source" ) { var c = a . textarea || a . _ . editable ; c . on ( "keydown" , function ( a ) { ! a . data . $ . ctrlKey && ! a . data . $ . metaKey && b ( ) } ) ; c . on ( "drop" , b ) ; c . on ( "input" , b ) ; if ( CKEDITOR . env . ie ) { c . on ( "cut" , b ) ; c . on ( "paste" , b ) } } } ) } } ) ; ( function ( ) { function n ( a , b ) { return CKEDITOR . tools . array . filter ( a , function ( a ) { return a . canHandle ( b ) } ) . sort ( function ( a , c ) { return a . priority === c . priority ? 0 : a . priority - c . priority } ) } function k ( a , b ) { var d = a . shift ( ) ; d && d . handle ( b , function ( ) { k ( a , b ) } ) } function p ( a ) { var b = CKEDITOR . tools . array . reduce ( a , function ( a , c ) { return CKEDITOR . tools . array . isArray ( c . filters ) ? a . concat ( c . filters ) : a } , [ ] ) ; return CKEDITOR . tools . array . filter ( b , function ( a , c ) { return CKEDITOR . tools . array . indexOf ( b , a ) === c } ) } function l ( a , b ) { var d =
0 , c , e ; if ( ! CKEDITOR . tools . array . isArray ( a ) || 0 === a . length ) return ! 0 ; c = CKEDITOR . tools . array . filter ( a , function ( a ) { return - 1 === CKEDITOR . tools . array . indexOf ( m , a ) } ) ; if ( 0 < c . length ) for ( e = 0 ; e < c . length ; e ++ ) ( function ( a ) { CKEDITOR . scriptLoader . queue ( a , function ( e ) { e && m . push ( a ) ; ++ d === c . length && b ( ) } ) } ) ( c [ e ] ) ; return 0 === c . length } var m = [ ] , q = CKEDITOR . tools . createClass ( { $ : function ( ) { this . handlers = [ ] } , proto : { register : function ( a ) { "number" !== typeof a . priority && ( a . priority = 10 ) ; this . handlers . push ( a ) } , addPasteListener : function ( a ) { a . on ( "paste" ,
function ( b ) { var d = n ( this . handlers , b ) , c ; if ( 0 !== d . length ) { c = p ( d ) ; c = l ( c , function ( ) { return a . fire ( "paste" , b . data ) } ) ; if ( ! c ) return b . cancel ( ) ; k ( d , b ) } } , this , null , 3 ) } } } ) ; CKEDITOR . plugins . add ( "pastetools" , { requires : [ "clipboard" , "ajax" ] , beforeInit : function ( a ) { a . pasteTools = new q ; a . pasteTools . addPasteListener ( a ) } } ) ; CKEDITOR . plugins . pastetools = { filters : { } , loadFilters : l , createFilter : function ( a ) { var b = CKEDITOR . tools . array . isArray ( a . rules ) ? a . rules : [ a . rules ] , d = a . additionalTransforms ; return function ( a , e ) { var f = new CKEDITOR . htmlParser . basicWriter ,
g = new CKEDITOR . htmlParser . filter , h ; d && ( a = d ( a , e ) ) ; CKEDITOR . tools . array . forEach ( b , function ( b ) { g . addRules ( b ( a , e , g ) ) } ) ; h = CKEDITOR . htmlParser . fragment . fromHtml ( a ) ; g . applyTo ( h ) ; h . writeHtml ( f ) ; return f . getHtml ( ) } } , getClipboardData : function ( a , b ) { var d ; return CKEDITOR . plugins . clipboard . isCustomDataTypesSupported || "text/html" === b ? ( d = a . dataTransfer . getData ( b , ! 0 ) ) || "text/html" !== b ? d : a . dataValue : null } , getConfigValue : function ( a , b ) { if ( a && a . config ) { var d = CKEDITOR . tools , c = a . config , e = d . object . keys ( c ) , f = [ "pasteTools_" +
@@ -1254,60 +1310,4 @@ a=a.replace(/<body/,'\x3cbody role\x3d"textbox" aria-multiline\x3d"true"');b.tit
",window);wasLoaded\x3d1;}" + ( CKEDITOR . env . ie ? "onload();" : 'document.addEventListener("DOMContentLoaded", onload, false );' ) + "\x3c/script\x3e" ; CKEDITOR . env . ie && 9 > CKEDITOR . env . version && ( c += '\x3cscript id\x3d"cke_shimscrpt"\x3ewindow.parent.CKEDITOR.tools.enableHtml5Elements(document)\x3c/script\x3e' ) ; g && CKEDITOR . env . ie && 10 > CKEDITOR . env . version && ( c += '\x3cscript id\x3d"cke_basetagscrpt"\x3evar baseTag \x3d document.querySelector( "base" );baseTag.href \x3d baseTag.href;\x3c/script\x3e' ) ; a = a . replace ( /(?=\s*<\/(:?head)>)/ ,
c ) ; this . clearCustomData ( ) ; this . clearListeners ( ) ; b . fire ( "contentDomUnload" ) ; var l = this . getDocument ( ) ; try { l . write ( a ) } catch ( k ) { setTimeout ( function ( ) { l . write ( a ) } , 0 ) } } } , getData : function ( a ) { if ( a ) return this . getHtml ( ) ; a = this . editor ; var e = a . config , b = e . fullPage , c = b && a . docType , f = b && a . xmlDeclaration , d = this . getDocument ( ) , d = b ? d . getDocumentElement ( ) . getOuterHtml ( ) : d . getBody ( ) . getHtml ( ) ; CKEDITOR . env . gecko && e . enterMode != CKEDITOR . ENTER _BR && ( d = d . replace ( /<br>(?=\s*(:?$|<\/body>))/ , "" ) ) ; b && ( d = d . replace ( /<body(.*?)role="?textbox"?/i ,
"\x3cbody$1" ) . replace ( /<body(.*?)aria-multiline="?true"?/i , "\x3cbody$1" ) . replace ( /<body(.*?)tabindex="?0"?/i , "\x3cbody$1" ) . replace ( /<body(.*?)aria-label="(.+?)"/i , "\x3cbody$1" ) . replace ( /<body(.*?)aria-readonly="?(?:true|false)"?/i , "\x3cbody$1" ) ) ; d = a . dataProcessor . toDataFormat ( d ) ; f && ( d = f + "\n" + d ) ; c && ( d = c + "\n" + d ) ; return d } , focus : function ( ) { this . _ . isLoadingData ? this . _ . isPendingFocus = ! 0 : l . baseProto . focus . call ( this ) } , detach : function ( ) { if ( ! this . preserveIframe ) { 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 . observableParent = CKEDITOR . document . $ ; ( function ( ) { function q ( a , f , e , b ) { if ( ! a . isReadOnly ( ) && ! a . equals ( e . editable ( ) ) ) { CKEDITOR . dom . element . setMarker ( b , a , "bidi_processed" , 1 ) ; b = a ; for ( var c = e . editable ( ) ; ( b = b . getParent ( ) ) && ! b . equals ( c ) ; ) if ( b . getCustomData ( "bidi_processed" ) ) { a . removeStyle ( "direction" ) ; a . removeAttribute ( "dir" ) ; return } b = e . config . useComputedState ; ( b ? a . getComputedStyle ( "direction" ) : a . getStyle ( "direction" ) || a . hasAttribute ( "dir" ) ) != f && ( a . removeStyle ( "direction" ) , b ? ( a . removeAttribute ( "dir" ) , f != a . getComputedStyle ( "direction" ) && a . setAttribute ( "di r" ,
f ) ) : a . setAttribute ( "dir" , f ) , e . forceNextSelectionCheck ( ) ) } } function v ( a , f , e ) { var b = a . getCommonAncestor ( ! 1 , ! 0 ) ; a = a . clone ( ) ; a . enlarge ( e == CKEDITOR . ENTER _BR ? CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : CKEDITOR . ENLARGE _BLOCK _CONTENTS ) ; if ( a . checkBoundaryOfElement ( b , CKEDITOR . START ) && a . checkBoundaryOfElement ( b , CKEDITOR . END ) ) { for ( var c ; b && b . type == CKEDITOR . NODE _ELEMENT && ( c = b . getParent ( ) ) && 1 == c . getChildCount ( ) && ! ( b . getName ( ) in f ) ; ) b = c ; return b . type == CKEDITOR . NODE _ELEMENT && b . getName ( ) in f && b } } function p ( a ) { return { context : "p" ,
allowedContent : { "h1 h2 h3 h4 h5 h6 table ul ol blockquote div tr p div li td" : { propertiesOnly : ! 0 , attributes : "dir" } } , requiredContent : "p[dir]" , refresh : function ( a , e ) { var b = a . config . useComputedState , c ; if ( ! b ) { c = e . lastElement ; for ( var h = a . editable ( ) ; c && ! ( c . getName ( ) in u || c . equals ( h ) ) ; ) { var d = c . getParent ( ) ; if ( ! d ) break ; c = d } } c = c || e . block || e . blockLimit ; c . equals ( a . editable ( ) ) && ( h = a . getSelection ( ) . getRanges ( ) [ 0 ] . getEnclosedNode ( ) ) && h . type == CKEDITOR . NODE _ELEMENT && ( c = h ) ; c && ( b = b ? c . getComputedStyle ( "direction" ) : c . getStyle ( "direction" ) ||
c . getAttribute ( "dir" ) , a . getCommand ( "bidirtl" ) . setState ( "rtl" == b ? CKEDITOR . TRISTATE _ON : CKEDITOR . TRISTATE _OFF ) , a . getCommand ( "bidiltr" ) . setState ( "ltr" == b ? CKEDITOR . TRISTATE _ON : CKEDITOR . TRISTATE _OFF ) ) ; b = ( e . block || e . blockLimit || a . editable ( ) ) . getDirection ( 1 ) ; b != ( a . _ . selDir || a . lang . dir ) && ( a . _ . selDir = b , a . fire ( "contentDirChanged" , b ) ) } , exec : function ( f ) { var e = f . getSelection ( ) , b = f . config . enterMode , c = e . getRanges ( ) ; if ( c && c . length ) { for ( var h = { } , d = e . createBookmarks ( ) , c = c . createIterator ( ) , g , l = 0 ; g = c . getNextRange ( 1 ) ; ) { var k =
g . getEnclosedNode ( ) ; k && ( ! k || k . type == CKEDITOR . NODE _ELEMENT && k . getName ( ) in r ) || ( k = v ( g , t , b ) ) ; k && q ( k , a , f , h ) ; var m = new CKEDITOR . dom . walker ( g ) , n = d [ l ] . startNode , p = d [ l ++ ] . endNode ; m . evaluator = function ( a ) { var c = b == CKEDITOR . ENTER _P ? "p" : "div" , d ; if ( d = ( a ? a . type == CKEDITOR . NODE _ELEMENT : ! 1 ) && a . getName ( ) in t ) { if ( c = a . is ( c ) ) c = ( c = a . getParent ( ) ) ? c . type == CKEDITOR . NODE _ELEMENT : ! 1 ; d = ! ( c && a . getParent ( ) . is ( "blockquote" ) ) } return ! ! ( d && a . getPosition ( n ) & CKEDITOR . POSITION _FOLLOWING && ( a . getPosition ( p ) & CKEDITOR . POSITION _PRECEDING +
CKEDITOR . POSITION _CONTAINS ) == CKEDITOR . POSITION _PRECEDING ) } ; for ( ; k = m . next ( ) ; ) q ( k , a , f , h ) ; g = g . createIterator ( ) ; for ( g . enlargeBr = b != CKEDITOR . ENTER _BR ; k = g . getNextParagraph ( b == CKEDITOR . ENTER _P ? "p" : "div" ) ; ) q ( k , a , f , h ) } CKEDITOR . dom . element . clearAllMarkers ( h ) ; f . forceNextSelectionCheck ( ) ; e . selectBookmarks ( d ) ; f . focus ( ) } } } } function w ( a ) { var f = a == l . setAttribute , e = a == l . removeAttribute , b = /\bdirection\s*:\s*(.*?)\s*(:?$|;)/ ; return function ( c , h ) { if ( ! this . isReadOnly ( ) ) { var d ; if ( d = c == ( f || e ? "dir" : "direction" ) || "style" ==
c && ( e || b . test ( h ) ) ) { a : { d = this ; for ( var g = d . getDocument ( ) . getBody ( ) . getParent ( ) ; d ; ) { if ( d . equals ( g ) ) { d = ! 1 ; break a } d = d . getParent ( ) } d = ! 0 } d = ! d } if ( d && ( d = this . getDirection ( 1 ) , g = a . apply ( this , arguments ) , d != this . getDirection ( 1 ) ) ) return this . getDocument ( ) . fire ( "dirChanged" , this ) , g } return a . apply ( this , arguments ) } } var t = { table : 1 , ul : 1 , ol : 1 , blockquote : 1 , div : 1 } , r = { } , u = { } ; CKEDITOR . tools . extend ( r , t , { tr : 1 , p : 1 , div : 1 , li : 1 } ) ; CKEDITOR . tools . extend ( u , r , { td : 1 } ) ; CKEDITOR . plugins . add ( "bidi" , { init : function ( a ) { function f ( b , c , e ,
d , f ) { a . addCommand ( e , new CKEDITOR . command ( a , d ) ) ; a . ui . addButton && a . ui . addButton ( b , { isToggle : ! 0 , label : c , command : e , toolbar : "bidi," + f } ) } if ( ! a . blockless ) { var e = a . lang . bidi ; f ( "BidiLtr" , e . ltr , "bidiltr" , p ( "ltr" ) , 10 ) ; f ( "BidiRtl" , e . rtl , "bidirtl" , p ( "rtl" ) , 20 ) ; a . on ( "contentDom" , function ( ) { a . document . on ( "dirChanged" , function ( b ) { a . fire ( "dirChanged" , { node : b . data , dir : b . data . getDirection ( 1 ) } ) } ) } ) ; a . on ( "contentDirChanged" , function ( b ) { b = ( a . lang . dir != b . data ? "add" : "remove" ) + "Class" ; var c = a . ui . space ( a . config . toolbarLocation ) ;
if ( c ) c [ b ] ( "cke_mixed_dir_content" ) } ) } } } ) ; for ( var l = CKEDITOR . dom . element . prototype , n = [ "setStyle" , "removeStyle" , "setAttribute" , "removeAttribute" ] , m = 0 ; m < n . length ; m ++ ) l [ n [ m ] ] = CKEDITOR . tools . override ( l [ n [ m ] ] , w ) } ) ( ) ; ( function ( ) { function b ( a , b , d ) { this . editor = a ; this . lastMatched = null ; this . ignoreNext = ! 1 ; this . callback = b ; this . ignoredKeys = [ 16 , 17 , 18 , 91 , 35 , 36 , 37 , 38 , 39 , 40 , 33 , 34 ] ; this . _listeners = [ ] ; this . throttle = d || 0 ; this . _buffer = CKEDITOR . tools . throttle ( this . throttle , function ( a ) { ( a = this . callback ( a ) ) ? a . text != this . lastMatched && ( this . lastMatched = a . text , this . fire ( "matched" , a ) ) : this . lastMatched && this . unmatch ( ) } , this ) } CKEDITOR . plugins . add ( "textwatcher" , { } ) ; b . prototype = { attach : function ( ) { function a ( ) { var a = c . editable ( ) ; this . _listeners . push ( a . attachListener ( a ,
"keyup" , b , this ) ) } function b ( a ) { this . check ( a ) } function d ( ) { this . unmatch ( ) } var c = this . editor ; this . _listeners . push ( c . on ( "contentDom" , a , this ) ) ; this . _listeners . push ( c . on ( "blur" , d , this ) ) ; this . _listeners . push ( c . on ( "beforeModeUnload" , d , this ) ) ; this . _listeners . push ( c . on ( "setData" , d , this ) ) ; this . _listeners . push ( c . on ( "afterCommandExec" , d , this ) ) ; c . editable ( ) && a . call ( this ) ; return this } , check : function ( a ) { this . ignoreNext ? this . ignoreNext = ! 1 : a && "keyup" == a . name && - 1 != CKEDITOR . tools . array . indexOf ( this . ignoredKeys , a . data . getKey ( ) ) ||
( a = this . editor . getSelection ( ) ) && ( a = a . getRanges ( ) [ 0 ] ) && this . _buffer . input ( a ) } , consumeNext : function ( ) { this . ignoreNext = ! 0 ; return this } , unmatch : function ( ) { this . lastMatched = null ; this . fire ( "unmatched" ) ; return this } , destroy : function ( ) { CKEDITOR . tools . array . forEach ( this . _listeners , function ( a ) { a . removeListener ( ) } ) ; this . _listeners = [ ] } } ; CKEDITOR . event . implementOn ( b . prototype ) ; CKEDITOR . plugins . textWatcher = b } ) ( ) ; ( function ( ) { function d ( a , b ) { var c = a . config . autocomplete _commitKeystrokes || CKEDITOR . config . autocomplete _commitKeystrokes ; this . editor = a ; this . throttle = void 0 !== b . throttle ? b . throttle : 20 ; this . view = this . getView ( ) ; this . model = this . getModel ( b . dataCallback ) ; this . model . itemsLimit = b . itemsLimit ; this . textWatcher = this . getTextWatcher ( b . textTestCallback ) ; this . commitKeystrokes = CKEDITOR . tools . array . isArray ( c ) ? c . slice ( ) : [ c ] ; this . _listeners = [ ] ; this . outputTemplate = void 0 !== b . outputTemplate ? new CKEDITOR . template ( b . outputTemplate ) :
null ; b . itemTemplate && ( this . view . itemTemplate = new CKEDITOR . template ( b . itemTemplate ) ) ; if ( "ready" === this . editor . status ) this . attach ( ) ; else this . editor . on ( "instanceReady" , function ( ) { this . attach ( ) } , this ) ; a . on ( "destroy" , function ( ) { this . destroy ( ) } , this ) } function g ( a ) { this . itemTemplate = new CKEDITOR . template ( '\x3cli data-id\x3d"{id}"\x3e{name}\x3c/li\x3e' ) ; this . editor = a } function f ( a ) { this . dataCallback = a ; this . isActive = ! 1 ; this . itemsLimit = 0 } function h ( a ) { return CKEDITOR . tools . array . reduce ( CKEDITOR . tools . object . keys ( a ) ,
function ( b , c ) { b [ c ] = CKEDITOR . tools . htmlEncode ( a [ c ] ) ; return b } , { } ) } CKEDITOR . plugins . add ( "autocomplete" , { requires : "textwatcher" , onLoad : function ( ) { CKEDITOR . document . appendStyleSheet ( this . path + "skins/default.css" ) } , isSupportedEnvironment : function ( ) { return ! CKEDITOR . env . ie || 8 < CKEDITOR . env . version } } ) ; d . prototype = { attach : function ( ) { var a = this . editor , b = CKEDITOR . document . getWindow ( ) , c = a . editable ( ) , k = c . isInline ( ) ? c : c . getDocument ( ) ; CKEDITOR . env . iOS && ! c . isInline ( ) && ( k = a . window . getFrame ( ) . getParent ( ) ) ; this . view . append ( ) ;
this . view . attach ( ) ; this . textWatcher . attach ( ) ; this . _listeners . push ( this . textWatcher . on ( "matched" , this . onTextMatched , this ) ) ; this . _listeners . push ( this . textWatcher . on ( "unmatched" , this . onTextUnmatched , this ) ) ; this . _listeners . push ( this . model . on ( "change-data" , this . modelChangeListener , this ) ) ; this . _listeners . push ( this . model . on ( "change-selectedItemId" , this . onSelectedItemId , this ) ) ; this . _listeners . push ( this . view . on ( "change-selectedItemId" , this . onSelectedItemId , this ) ) ; this . _listeners . push ( this . view . on ( "click-item" ,
this . onItemClick , this ) ) ; this . _listeners . push ( this . model . on ( "change-isActive" , this . updateAriaAttributesOnEditable , this ) ) ; this . _listeners . push ( b . on ( "scroll" , function ( ) { this . viewRepositionListener ( ) } , this ) ) ; this . _listeners . push ( k . on ( "scroll" , function ( ) { this . viewRepositionListener ( ) } , this ) ) ; this . _listeners . push ( this . view . element . on ( "mousedown" , function ( a ) { a . data . preventDefault ( ) } , null , null , 9999 ) ) ; c && ( this . registerPanelNavigation ( ) , this . addAriaAttributesToEditable ( ) ) ; a . on ( "contentDom" , function ( ) { this . registerPanelNavigation ( ) ;
this . addAriaAttributesToEditable ( ) } , this ) } , registerPanelNavigation : function ( ) { var a = this . editor . editable ( ) ; this . _listeners . push ( a . attachListener ( a , "keydown" , function ( a ) { this . onKeyDown ( a ) } , this , null , 5 ) ) } , addAriaAttributesToEditable : function ( ) { var a = this . editor . editable ( ) , b = this . view . element . getAttribute ( "id" ) ; a . isInline ( ) && ( a . setAttribute ( "aria-controls" , b ) , a . setAttribute ( "aria-activedescendant" , "" ) , a . setAttribute ( "aria-autocomplete" , "list" ) , a . setAttribute ( "aria-expanded" , "false" ) ) } , updateAriaAttributesOnEditable : function ( a ) { var b =
this . editor . editable ( ) ; a = a . data ; b && b . isInline ( ) && ( b . setAttribute ( "aria-expanded" , a ? "true" : "false" ) , a || b . setAttribute ( "aria-activedescendant" , "" ) ) } , updateAriaActiveDescendantAttributeOnEditable : function ( a ) { var b = this . editor . editable ( ) ; b . isInline ( ) && b . setAttribute ( "aria-activedescendant" , a ) } , removeAriaAttributesFromEditable : function ( ) { var a = this . editor . editable ( ) ; a && a . isInline ( ) && ( a . removeAttributes ( [ "aria-controls" , "aria-expanded" , "aria-activedescendant" ] ) , a . setAttribute ( "aria-autocomplete" , "none" ) ) } ,
close : function ( ) { this . model . setActive ( ! 1 ) ; this . view . close ( ) } , commit : function ( a ) { if ( this . model . isActive ) { this . close ( ) ; if ( null == a && ( a = this . model . selectedItemId , null == a ) ) return ; a = this . model . getItemById ( a ) ; var b = this . editor ; b . fire ( "saveSnapshot" ) ; b . getSelection ( ) . selectRanges ( [ this . model . range ] ) ; b . insertHtml ( this . getHtmlToInsert ( a ) , "text" ) ; b . fire ( "saveSnapshot" ) } } , destroy : function ( ) { CKEDITOR . tools . array . forEach ( this . _listeners , function ( a ) { a . removeListener ( ) } ) ; this . _listeners = [ ] ; this . view . element && this . view . element . remove ( ) ;
this . removeAriaAttributesFromEditable ( ) } , getHtmlToInsert : function ( a ) { a = h ( a ) ; return this . outputTemplate ? this . outputTemplate . output ( a ) : a . name } , getModel : function ( a ) { var b = this ; return new f ( function ( c , k ) { return a . call ( this , CKEDITOR . tools . extend ( { autocomplete : b } , c ) , k ) } ) } , getTextWatcher : function ( a ) { return new CKEDITOR . plugins . textWatcher ( this . editor , a , this . throttle ) } , getView : function ( ) { return new g ( this . editor ) } , open : function ( ) { this . model . hasData ( ) && ( this . model . setActive ( ! 0 ) , this . view . open ( ) , this . model . selectFirst ( ) ,
this . view . updatePosition ( this . model . range ) ) } , viewRepositionListener : function ( ) { this . model . isActive && this . view . updatePosition ( this . model . range ) } , modelChangeListener : function ( a ) { this . model . hasData ( ) ? ( this . view . updateItems ( a . data ) , this . open ( ) ) : this . close ( ) } , onItemClick : function ( a ) { this . commit ( a . data ) } , onKeyDown : function ( a ) { if ( this . model . isActive ) { var b = a . data . getKey ( ) , c = ! 1 ; 27 == b ? ( this . close ( ) , this . textWatcher . unmatch ( ) , c = ! 0 ) : 40 == b ? ( this . model . selectNext ( ) , c = ! 0 ) : 38 == b ? ( this . model . selectPrevious ( ) , c = ! 0 ) :
- 1 != CKEDITOR . tools . indexOf ( this . commitKeystrokes , b ) && ( this . commit ( ) , this . textWatcher . unmatch ( ) , c = ! 0 ) ; c && ( a . cancel ( ) , a . data . preventDefault ( ) , this . textWatcher . consumeNext ( ) ) } } , onSelectedItemId : function ( a ) { a = a . data ; var b = this . view . getItemById ( a ) ; this . model . setItem ( a ) ; this . view . selectItem ( a ) ; this . updateAriaActiveDescendantAttributeOnEditable ( b . getAttribute ( "id" ) ) } , onTextMatched : function ( a ) { this . model . setActive ( ! 1 ) ; this . model . setQuery ( a . data . text , a . data . range ) } , onTextUnmatched : function ( ) { this . model . query =
null ; this . model . lastRequestId = null ; this . close ( ) } } ; g . prototype = { append : function ( ) { this . document = CKEDITOR . document ; this . element = this . createElement ( ) ; this . document . getBody ( ) . append ( this . element ) } , appendItems : function ( a ) { this . element . setHtml ( "" ) ; this . element . append ( a ) } , attach : function ( ) { this . element . on ( "click" , function ( a ) { ( a = a . data . getTarget ( ) . getAscendant ( this . isItemElement , ! 0 ) ) && this . fire ( "click-item" , a . data ( "id" ) ) } , this ) ; this . element . on ( "mouseover" , function ( a ) { a = a . data . getTarget ( ) ; this . element . contains ( a ) &&
( a = a . getAscendant ( function ( a ) { return a . hasAttribute ( "data-id" ) } , ! 0 ) ) && ( a = a . data ( "id" ) , this . fire ( "change-selectedItemId" , a ) ) } , this ) } , close : function ( ) { this . element . removeClass ( "cke_autocomplete_opened" ) } , createElement : function ( ) { var a = new CKEDITOR . dom . element ( "ul" , this . document ) , b = CKEDITOR . tools . getNextId ( ) ; a . setAttribute ( "id" , b ) ; a . addClass ( "cke_autocomplete_panel" ) ; a . setStyle ( "z-index" , this . editor . config . baseFloatZIndex - 3 ) ; a . setAttribute ( "role" , "listbox" ) ; return a } , createItem : function ( a ) { a = h ( a ) ; a =
CKEDITOR . dom . element . createFromHtml ( this . itemTemplate . output ( a ) , this . document ) ; var b = CKEDITOR . tools . getNextId ( ) ; a . setAttribute ( "id" , b ) ; a . setAttribute ( "role" , "option" ) ; return a } , getViewPosition : function ( a ) { a = a . getClientRects ( ) ; a = a [ a . length - 1 ] ; var b ; b = this . editor . editable ( ) ; b = b . isInline ( ) ? CKEDITOR . document . getWindow ( ) . getScrollPosition ( ) : b . getParent ( ) . getDocumentPosition ( CKEDITOR . document ) ; var c = CKEDITOR . document . getBody ( ) ; "static" === c . getComputedStyle ( "position" ) && ( c = c . getParent ( ) ) ; c = c . getDocumentPosition ( ) ;
b . x -= c . x ; b . y -= c . y ; return { top : a . top + b . y , bottom : a . top + a . height + b . y , left : a . left + b . x } } , getItemById : function ( a ) { return this . element . findOne ( 'li[data-id\x3d"' + a + '"]' ) } , isItemElement : function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && Boolean ( a . data ( "id" ) ) } , open : function ( ) { this . element . addClass ( "cke_autocomplete_opened" ) } , selectItem : function ( a ) { null != this . selectedItemId && this . getItemById ( this . selectedItemId ) . removeClass ( "cke_autocomplete_selected" ) ; var b = this . getItemById ( a ) ; b . addClass ( "cke_autocomplete_selected" ) ;
this . selectedItemId = a ; this . scrollElementTo ( b ) } , setPosition : function ( a ) { var b = this . element . getWindow ( ) , c = b . getViewPaneSize ( ) , b = function ( a ) { var b = a . editorViewportRect , c = a . caretRect , e = a . viewHeight , d = a . scrollPositionY , g = a . windowHeight ; if ( b . bottom < c . bottom ) return Math . min ( c . top , b . bottom ) - e ; a = c . top - b . top ; var f = b . bottom - c . bottom , h = c . top - e < d ; if ( e > f && e < a && ! h ) return c . top - e ; if ( b . top > c . top ) return Math . max ( c . bottom , b . top ) ; d = c . bottom + e > g + d ; return e > f && e < a || ! d ? Math . min ( b . bottom , c . bottom ) : c . top - e } ( { editorViewportRect : function ( a ) { var b =
a . editable ( ) ; return CKEDITOR . env . iOS && ! b . isInline ( ) ? a . window . getFrame ( ) . getParent ( ) . getClientRect ( ! 0 ) : b . isInline ( ) ? b . getClientRect ( ! 0 ) : a . window . getFrame ( ) . getClientRect ( ! 0 ) } ( this . editor ) , caretRect : a , viewHeight : this . element . getSize ( "height" ) , scrollPositionY : b . getScrollPosition ( ) . y , windowHeight : c . height } ) ; a = function ( a ) { var b = a . leftPosition , c = a . viewWidth ; a = a . windowWidth ; return b + c > a ? a - c : b } ( { leftPosition : a . left , viewWidth : this . element . getSize ( "width" ) , windowWidth : c . width } ) ; this . element . setStyles ( { left : a +
"px" , top : b + "px" } ) } , scrollElementTo : function ( a ) { a . scrollIntoParent ( this . element ) } , updateItems : function ( a ) { var b , c = new CKEDITOR . dom . documentFragment ( this . document ) ; for ( b = 0 ; b < a . length ; ++ b ) c . append ( this . createItem ( a [ b ] ) ) ; this . appendItems ( c ) ; this . selectedItemId = null } , updatePosition : function ( a ) { this . setPosition ( this . getViewPosition ( a ) ) } } ; CKEDITOR . event . implementOn ( g . prototype ) ; f . prototype = { getIndexById : function ( a ) { if ( ! this . hasData ( ) ) return - 1 ; for ( var b = this . data , c = 0 , d = b . length ; c < d ; c ++ ) if ( b [ c ] . id == a ) return c ;
return - 1 } , getItemById : function ( a ) { a = this . getIndexById ( a ) ; return ~ a && this . data [ a ] || null } , hasData : function ( ) { return Boolean ( this . data && this . data . length ) } , setItem : function ( a ) { if ( 0 > this . getIndexById ( a ) ) throw Error ( "Item with given id does not exist" ) ; this . selectedItemId = a } , select : function ( a ) { this . fire ( "change-selectedItemId" , a ) } , selectFirst : function ( ) { this . hasData ( ) && this . select ( this . data [ 0 ] . id ) } , selectLast : function ( ) { this . hasData ( ) && this . select ( this . data [ this . data . length - 1 ] . id ) } , selectNext : function ( ) { if ( null ==
this . selectedItemId ) this . selectFirst ( ) ; else { var a = this . getIndexById ( this . selectedItemId ) ; 0 > a || a + 1 == this . data . length ? this . selectFirst ( ) : this . select ( this . data [ a + 1 ] . id ) } } , selectPrevious : function ( ) { if ( null == this . selectedItemId ) this . selectLast ( ) ; else { var a = this . getIndexById ( this . selectedItemId ) ; 0 >= a ? this . selectLast ( ) : this . select ( this . data [ a - 1 ] . id ) } } , setActive : function ( a ) { this . isActive = a ; this . fire ( "change-isActive" , a ) } , setQuery : function ( a , b ) { var c = this , d = CKEDITOR . tools . getNextId ( ) ; this . lastRequestId = d ;
this . query = a ; this . range = b ; this . selectedItemId = this . data = null ; this . dataCallback ( { query : a , range : b } , function ( a ) { d == c . lastRequestId && ( c . data = c . itemsLimit ? a . slice ( 0 , c . itemsLimit ) : a , c . fire ( "change-data" , c . data ) ) } ) } } ; CKEDITOR . event . implementOn ( f . prototype ) ; CKEDITOR . plugins . autocomplete = d ; d . view = g ; d . model = f ; CKEDITOR . config . autocomplete _commitKeystrokes = [ 9 , 13 ] } ) ( ) ; ( function ( ) { function h ( b , d ) { for ( var a = b . length , c = 0 , e = 0 ; e < a ; e += 1 ) { var g = b [ e ] ; if ( d >= c && c + g . getText ( ) . length >= d ) return { element : g , offset : d - c } ; c += g . getText ( ) . length } return null } function m ( b , d ) { for ( var a = 0 ; a < b . length ; a ++ ) if ( d ( b [ a ] ) ) return a ; return - 1 } CKEDITOR . plugins . add ( "textmatch" , { } ) ; CKEDITOR . plugins . textMatch = { } ; CKEDITOR . plugins . textMatch . match = function ( b , d ) { var a = CKEDITOR . plugins . textMatch . getTextAndOffset ( b ) , c = CKEDITOR . dom . selection . FILLING _CHAR _SEQUENCE , e = 0 ; if ( a ) return 0 == a . text . indexOf ( c ) && ( e = c . length ,
a . text = a . text . replace ( c , "" ) , a . offset -= e ) , ( c = d ( a . text , a . offset ) ) ? { range : CKEDITOR . plugins . textMatch . getRangeInText ( b , c . start , c . end + e ) , text : a . text . slice ( c . start , c . end ) } : null } ; CKEDITOR . plugins . textMatch . getTextAndOffset = function ( b ) { if ( ! b . collapsed ) return null ; var d = "" , a = 0 , c = CKEDITOR . plugins . textMatch . getAdjacentTextNodes ( b ) , e = ! 1 , g , h = b . startContainer . type != CKEDITOR . NODE _ELEMENT ; g = h ? m ( c , function ( a ) { return b . startContainer . equals ( a ) } ) : b . startOffset - ( c [ 0 ] ? c [ 0 ] . getIndex ( ) : 0 ) ; for ( var k = c . length , f = 0 ; f < k ; f +=
1 ) { var l = c [ f ] , d = d + l . getText ( ) ; e || ( h ? f == g ? ( e = ! 0 , a += b . startOffset ) : a += l . getText ( ) . length : ( f == g && ( e = ! 0 ) , 0 < f && ( a += c [ f - 1 ] . getText ( ) . length ) , k == g && f + 1 == k && ( a += l . getText ( ) . length ) ) ) } return { text : d , offset : a } } ; CKEDITOR . plugins . textMatch . getRangeInText = function ( b , d , a ) { var c = new CKEDITOR . dom . range ( b . root ) ; b = CKEDITOR . plugins . textMatch . getAdjacentTextNodes ( b ) ; d = h ( b , d ) ; a = h ( b , a ) ; c . setStart ( d . element , d . offset ) ; c . setEnd ( a . element , a . offset ) ; return c } ; CKEDITOR . plugins . textMatch . getAdjacentTextNodes = function ( b ) { if ( ! b . collapsed ) return [ ] ;
var d = [ ] , a , c , e ; b . startContainer . type != CKEDITOR . NODE _ELEMENT ? ( a = b . startContainer . getParent ( ) . getChildren ( ) , b = b . startContainer . getIndex ( ) ) : ( a = b . startContainer . getChildren ( ) , b = b . startOffset ) ; for ( e = b ; c = a . getItem ( -- e ) ; ) if ( c . type == CKEDITOR . NODE _TEXT ) d . unshift ( c ) ; else break ; for ( e = b ; c = a . getItem ( e ++ ) ; ) if ( c . type == CKEDITOR . NODE _TEXT ) d . push ( c ) ; else break ; return d } } ) ( ) ; ( function ( ) { function k ( a ) { a . name || ( a . name = e ( a . id . replace ( /::.*$/ , ":" ) . replace ( /^:|:$/g , "" ) ) ) ; return a } var g = ! 1 , f = CKEDITOR . tools . array , e = CKEDITOR . tools . htmlEncodeAttr , h = CKEDITOR . tools . createClass ( { $ : function ( a , d ) { var c = this . lang = a . lang . emoji , b = this ; this . listeners = [ ] ; this . plugin = d ; this . editor = a ; this . groups = [ { name : "people" , sectionName : c . groups . people , svgId : "cke4-icon-emoji-2" , position : { x : - 21 , y : 0 } , items : [ ] } , { name : "nature" , sectionName : c . groups . nature , svgId : "cke4-icon-emoji-3" , position : { x : - 42 , y : 0 } , items : [ ] } ,
{ name : "food" , sectionName : c . groups . food , svgId : "cke4-icon-emoji-4" , position : { x : - 63 , y : 0 } , items : [ ] } , { name : "travel" , sectionName : c . groups . travel , svgId : "cke4-icon-emoji-6" , position : { x : - 42 , y : - 21 } , items : [ ] } , { name : "activities" , sectionName : c . groups . activities , svgId : "cke4-icon-emoji-5" , position : { x : - 84 , y : 0 } , items : [ ] } , { name : "objects" , sectionName : c . groups . objects , svgId : "cke4-icon-emoji-7" , position : { x : 0 , y : - 21 } , items : [ ] } , { name : "symbols" , sectionName : c . groups . symbols , svgId : "cke4-icon-emoji-8" , position : { x : - 21 , y : - 21 } ,
items : [ ] } , { name : "flags" , sectionName : c . groups . flags , svgId : "cke4-icon-emoji-9" , position : { x : - 63 , y : - 21 } , items : [ ] } ] ; this . elements = { } ; a . ui . addToolbarGroup ( "emoji" , "insert" ) ; a . ui . add ( "EmojiPanel" , CKEDITOR . UI _PANELBUTTON , { label : "emoji" , title : c . title , modes : { wysiwyg : 1 } , editorFocus : 0 , toolbar : "insert" , panel : { css : [ CKEDITOR . skin . getPath ( "editor" ) , d . path + "skins/default.css" ] , attributes : { role : "listbox" , "aria-label" : c . title } , markFirst : ! 1 } , onBlock : function ( d , c ) { var e = c . keys , f = "rtl" === a . lang . dir ; e [ f ? 37 : 39 ] = "next" ; e [ 40 ] =
"next" ; e [ 9 ] = "next" ; e [ f ? 39 : 37 ] = "prev" ; e [ 38 ] = "prev" ; e [ CKEDITOR . SHIFT + 9 ] = "prev" ; e [ 32 ] = "click" ; b . blockElement = c . element ; b . emojiList = b . editor . _ . emoji . list ; b . addEmojiToGroups ( ) ; c . element . getAscendant ( "html" ) . addClass ( "cke_emoji" ) ; c . element . getDocument ( ) . appendStyleSheet ( CKEDITOR . getUrl ( CKEDITOR . basePath + "contents.css" ) ) ; c . element . addClass ( "cke_emoji-panel_block" ) ; c . element . setHtml ( b . createEmojiBlock ( ) ) ; c . element . removeAttribute ( "title" ) ; d . element . addClass ( "cke_emoji-panel" ) ; b . items = c . _ . getItems ( ) ; b . blockObject =
c ; b . elements . emojiItems = c . element . find ( ".cke_emoji-outer_emoji_block li \x3e a" ) ; b . elements . sectionHeaders = c . element . find ( ".cke_emoji-outer_emoji_block h2" ) ; b . elements . input = c . element . findOne ( "input" ) ; b . inputIndex = b . getItemIndex ( b . items , b . elements . input ) ; b . elements . emojiBlock = c . element . findOne ( ".cke_emoji-outer_emoji_block" ) ; b . elements . navigationItems = c . element . find ( "nav li" ) ; b . elements . statusIcon = c . element . findOne ( ".cke_emoji-status_icon" ) ; b . elements . statusDescription = c . element . findOne ( "p.cke_emoji-status_description" ) ;
b . elements . statusName = c . element . findOne ( "p.cke_emoji-status_full_name" ) ; b . elements . sections = c . element . find ( "section" ) ; b . registerListeners ( ) } , onOpen : b . openReset ( ) } ) } , proto : { registerListeners : function ( ) { f . forEach ( this . listeners , function ( a ) { var d = a . listener , c = a . event , b = a . ctx || this ; f . forEach ( this . blockElement . find ( a . selector ) . toArray ( ) , function ( a ) { a . on ( c , d , b ) } ) } , this ) } , createEmojiBlock : function ( ) { var a = [ ] ; this . loadSVGNavigationIcons ( ) ; a . push ( this . createGroupsNavigation ( ) ) ; a . push ( this . createSearchSection ( ) ) ;
a . push ( this . createEmojiListBlock ( ) ) ; a . push ( this . createStatusBar ( ) ) ; return '\x3cdiv class\x3d"cke_emoji-inner_panel"\x3e' + a . join ( "" ) + "\x3c/div\x3e" } , createGroupsNavigation : function ( ) { var a , d ; this . editor . plugins . emoji . isSVGSupported ( ) ? ( d = CKEDITOR . env . safari ? 'xlink:href\x3d"#{svgId}"' : 'href\x3d"#{svgId}"' , a = new CKEDITOR . template ( '\x3cli class\x3d"cke_emoji-navigation_item" data-cke-emoji-group\x3d"{group}"\x3e\x3ca href\x3d"#" title\x3d"{name}" draggable\x3d"false" _cke_focus\x3d"1"\x3e\x3csvg viewBox\x3d"0 0 34 34" aria-labelledby\x3d"{svgId}-title"\x3e\x3ctitle id\x3d"{svgId}-title"\x3e{name}\x3c/title\x3e\x3cuse ' +
d + "\x3e\x3c/use\x3e\x3c/svg\x3e\x3c/a\x3e\x3c/li\x3e" ) , d = f . reduce ( this . groups , function ( c , b ) { return b . items . length ? c + a . output ( { group : e ( b . name ) , name : e ( b . sectionName ) , svgId : e ( b . svgId ) , translateX : b . translate && b . translate . x ? e ( b . translate . x ) : 0 , translateY : b . translate && b . translate . y ? e ( b . translate . y ) : 0 } ) : c } , "" ) ) : ( d = CKEDITOR . getUrl ( this . plugin . path + "assets/iconsall.png" ) , a = new CKEDITOR . template ( '\x3cli class\x3d"cke_emoji-navigation_item" data-cke-emoji-group\x3d"{group}"\x3e\x3ca href\x3d"#" draggable\x3d"false" _cke_focus\x3d"1" title\x3d"{name}"\x3e\x3cspan style\x3d"background-image:url(' +
d + ');background-repeat:no-repeat;background-position:{positionX}px {positionY}px;"\x3e\x3c/span\x3e\x3c/a\x3e\x3c/li\x3e' ) , d = f . reduce ( this . groups , function ( c , b ) { return b . items . length ? c + a . output ( { group : e ( b . name ) , name : e ( b . sectionName ) , positionX : b . position . x , positionY : b . position . y } ) : c } , "" ) ) ; this . listeners . push ( { selector : "nav" , event : "click" , listener : function ( a ) { var b = a . data . getTarget ( ) . getAscendant ( "li" , ! 0 ) ; b && ( f . forEach ( this . elements . navigationItems . toArray ( ) , function ( a ) { a . equals ( b ) ? a . addClass ( "active" ) :
a . removeClass ( "active" ) } ) , this . clearSearchAndMoveFocus ( b ) , a . data . preventDefault ( ) ) } } ) ; return '\x3cnav aria-label\x3d"' + e ( this . lang . navigationLabel ) + '"\x3e\x3cul\x3e' + d + "\x3c/ul\x3e\x3c/nav\x3e" } , createSearchSection : function ( ) { this . listeners . push ( { selector : "input" , event : "input" , listener : CKEDITOR . tools . throttle ( 200 , this . filter , this ) . input } ) ; this . listeners . push ( { selector : "input" , event : "click" , listener : function ( ) { this . blockObject . _ . markItem ( this . inputIndex ) } } ) ; return '\x3clabel class\x3d"cke_emoji-search"\x3e' +
this . getLoupeIcon ( ) + '\x3cinput placeholder\x3d"' + e ( this . lang . searchPlaceholder ) + '" type\x3d"search" aria-label\x3d"' + e ( this . lang . searchLabel ) + '" role\x3d"search" _cke_focus\x3d"1"\x3e\x3c/label\x3e' } , createEmojiListBlock : function ( ) { this . listeners . push ( { selector : ".cke_emoji-outer_emoji_block" , event : "scroll" , listener : CKEDITOR . tools . throttle ( 150 , this . refreshNavigationStatus , this ) . input } ) ; this . listeners . push ( { selector : ".cke_emoji-outer_emoji_block" , event : "click" , listener : function ( a ) { a . data . getTarget ( ) . data ( "cke-emoji-name" ) &&
this . editor . execCommand ( "insertEmoji" , { emojiText : a . data . getTarget ( ) . data ( "cke-emoji-symbol" ) } ) } } ) ; this . listeners . push ( { selector : ".cke_emoji-outer_emoji_block" , event : "mouseover" , listener : function ( a ) { this . updateStatusbar ( a . data . getTarget ( ) ) } } ) ; this . listeners . push ( { selector : ".cke_emoji-outer_emoji_block" , event : "keyup" , listener : function ( ) { this . updateStatusbar ( this . items . getItem ( this . blockObject . _ . focusIndex ) ) } } ) ; return '\x3cdiv class\x3d"cke_emoji-outer_emoji_block"\x3e' + this . getEmojiSections ( ) + "\x3c/div\x3e" } ,
createStatusBar : function ( ) { return '\x3cdiv class\x3d"cke_emoji-status_bar"\x3e\x3cdiv class\x3d"cke_emoji-status_icon"\x3e\x3c/div\x3e\x3cp class\x3d"cke_emoji-status_description"\x3e\x3c/p\x3e\x3cp class\x3d"cke_emoji-status_full_name"\x3e\x3c/p\x3e\x3c/div\x3e' } , getLoupeIcon : function ( ) { var a = CKEDITOR . getUrl ( this . plugin . path + "assets/iconsall.png" ) ; return this . editor . plugins . emoji . isSVGSupported ( ) ? ( a = CKEDITOR . env . safari ? 'xlink:href\x3d"#cke4-icon-emoji-10"' : 'href\x3d"#cke4-icon-emoji-10"' , '\x3csvg viewBox\x3d"0 0 34 34" role\x3d"img" aria-hidden\x3d"true" class\x3d"cke_emoji-search_loupe"\x3e\x3cuse ' +
a + "\x3e\x3c/use\x3e\x3c/svg\x3e" ) : '\x3cspan class\x3d"cke_emoji-search_loupe" aria-hidden\x3d"true" style\x3d"background-image:url(' + a + ');"\x3e\x3c/span\x3e' } , getEmojiSections : function ( ) { return f . reduce ( this . groups , function ( a , d ) { return d . items . length ? a + this . getEmojiSection ( d ) : a } , "" , this ) } , getEmojiSection : function ( a ) { var d = e ( a . name ) , c = e ( a . sectionName ) ; a = this . getEmojiListGroup ( a . items ) ; return '\x3csection data-cke-emoji-group\x3d"' + d + '" \x3e\x3ch2 id\x3d"' + d + '"\x3e' + c + "\x3c/h2\x3e\x3cul\x3e" + a + "\x3c/ul\x3e\x3c/section\x3e" } ,
getEmojiListGroup : function ( a ) { var d = new CKEDITOR . template ( '\x3cli class\x3d"cke_emoji-item"\x3e\x3ca draggable\x3d"false" data-cke-emoji-full-name\x3d"{id}" data-cke-emoji-name\x3d"{name}" data-cke-emoji-symbol\x3d"{symbol}" data-cke-emoji-group\x3d"{group}" data-cke-emoji-keywords\x3d"{keywords}" title\x3d"{name}" href\x3d"#" _cke_focus\x3d"1"\x3e{symbol}\x3c/a\x3e\x3c/li\x3e' ) ; return f . reduce ( a , function ( a , b ) { k ( b ) ; return a + d . output ( { symbol : e ( b . symbol ) , id : e ( b . id ) , name : b . name , group : e ( b . group ) , keywords : e ( ( b . keywords ||
[ ] ) . join ( "," ) ) } ) } , "" , this ) } , filter : function ( a ) { var d = { } , c = "string" === typeof a ? a : a . sender . getValue ( ) ; f . forEach ( this . elements . emojiItems . toArray ( ) , function ( a ) { var e ; a : { e = a . data ( "cke-emoji-name" ) ; var f = a . data ( "cke-emoji-keywords" ) ; if ( - 1 !== e . indexOf ( c ) ) e = ! 0 ; else { if ( f ) for ( e = f . split ( "," ) , f = 0 ; f < e . length ; f ++ ) if ( - 1 !== e [ f ] . indexOf ( c ) ) { e = ! 0 ; break a } e = ! 1 } } e || "" === c ? ( a . removeClass ( "hidden" ) , a . getParent ( ) . removeClass ( "hidden" ) , d [ a . data ( "cke-emoji-group" ) ] = ! 0 ) : ( a . addClass ( "hidden" ) , a . getParent ( ) . addClass ( "hidden" ) ) } ) ;
f . forEach ( this . elements . sectionHeaders . toArray ( ) , function ( a ) { d [ a . getId ( ) ] ? ( a . getParent ( ) . removeClass ( "hidden" ) , a . removeClass ( "hidden" ) ) : ( a . addClass ( "hidden" ) , a . getParent ( ) . addClass ( "hidden" ) ) } ) ; this . refreshNavigationStatus ( ) } , clearSearchInput : function ( ) { this . elements . input . setValue ( "" ) ; this . filter ( "" ) } , openReset : function ( ) { var a = this , d ; return function ( ) { d || ( a . filter ( "" ) , d = ! 0 ) ; a . elements . emojiBlock . $ . scrollTop = 0 ; a . refreshNavigationStatus ( ) ; a . clearSearchInput ( ) ; CKEDITOR . tools . setTimeout ( function ( ) { a . elements . input . focus ( ! 0 ) ;
a . blockObject . _ . markItem ( a . inputIndex ) } , 0 , a ) ; a . clearStatusbar ( ) } } , refreshNavigationStatus : function ( ) { var a = this . elements . emojiBlock . getClientRect ( ) . top , d , c ; d = f . filter ( this . elements . sections . toArray ( ) , function ( b ) { var c = b . getClientRect ( ) ; return ! c . height || b . findOne ( "h2" ) . hasClass ( "hidden" ) ? ! 1 : c . height + c . top > a } ) ; c = d . length ? d [ 0 ] . data ( "cke-emoji-group" ) : ! 1 ; f . forEach ( this . elements . navigationItems . toArray ( ) , function ( a ) { a . data ( "cke-emoji-group" ) === c ? a . addClass ( "active" ) : a . removeClass ( "active" ) } ) } , updateStatusbar : function ( a ) { "a" ===
a . getName ( ) && a . hasAttribute ( "data-cke-emoji-name" ) && ( this . elements . statusIcon . setText ( e ( a . getText ( ) ) ) , this . elements . statusDescription . setText ( e ( a . data ( "cke-emoji-name" ) ) ) , this . elements . statusName . setText ( e ( a . data ( "cke-emoji-full-name" ) ) ) ) } , clearStatusbar : function ( ) { this . elements . statusIcon . setText ( "" ) ; this . elements . statusDescription . setText ( "" ) ; this . elements . statusName . setText ( "" ) } , clearSearchAndMoveFocus : function ( a ) { this . clearSearchInput ( ) ; this . moveFocus ( a . data ( "cke-emoji-group" ) ) } , moveFocus : function ( a ) { a =
this . blockElement . findOne ( 'a[data-cke-emoji-group\x3d"' + e ( a ) + '"]' ) ; var d ; a && ( d = this . getItemIndex ( this . items , a ) , a . focus ( ! 0 ) , a . getAscendant ( "section" ) . getFirst ( ) . scrollIntoView ( ! 0 ) , this . blockObject . _ . markItem ( d ) ) } , getItemIndex : function ( a , d ) { return f . indexOf ( a . toArray ( ) , function ( a ) { return a . equals ( d ) } ) } , loadSVGNavigationIcons : function ( ) { if ( this . editor . plugins . emoji . isSVGSupported ( ) ) { var a = this . blockElement . getDocument ( ) ; CKEDITOR . ajax . load ( CKEDITOR . getUrl ( this . plugin . path + "assets/iconsall.svg" ) , function ( d ) { var c =
new CKEDITOR . dom . element ( "div" ) ; c . addClass ( "cke_emoji-navigation_icons" ) ; c . setHtml ( d ) ; a . getBody ( ) . append ( c ) } ) } } , addEmojiToGroups : function ( ) { var a = { } ; f . forEach ( this . groups , function ( d ) { a [ d . name ] = d . items } , this ) ; f . forEach ( this . emojiList , function ( d ) { a [ d . group ] . push ( d ) } , this ) } } } ) ; CKEDITOR . plugins . add ( "emoji" , { requires : "autocomplete,textmatch,ajax,panelbutton,floatpanel" , icons : "emojipanel" , hidpi : ! 0 , isSupportedEnvironment : function ( ) { return ! CKEDITOR . env . ie || 11 <= CKEDITOR . env . version } , beforeInit : function ( ) { this . isSupportedEnvironment ( ) &&
! g && ( CKEDITOR . document . appendStyleSheet ( this . path + "skins/default.css" ) , g = ! 0 ) } , init : function ( a ) { if ( this . isSupportedEnvironment ( ) ) { var d = CKEDITOR . tools . array ; CKEDITOR . ajax . load ( CKEDITOR . getUrl ( a . config . emoji _emojiListUrl || "plugins/emoji/emoji.json" ) , function ( c ) { function b ( ) { a . _ . emoji . autocomplete = new CKEDITOR . plugins . autocomplete ( a , { textTestCallback : e ( ) , dataCallback : g , itemTemplate : '\x3cli data-id\x3d"{id}" class\x3d"cke_emoji-suggestion_item"\x3e\x3cspan\x3e{symbol}\x3c/span\x3e {name}\x3c/li\x3e' ,
outputTemplate : "{symbol}" } ) } function e ( ) { return function ( a ) { return a . collapsed ? CKEDITOR . plugins . textMatch . match ( a , f ) : null } } function f ( a , b ) { var c = a . slice ( 0 , b ) , d = c . match ( new RegExp ( "(?:\\s|^)(:\\S{" + l + "}\\S*)$" ) ) ; return d ? { start : c . lastIndexOf ( d [ 1 ] ) , end : b } : null } function g ( a , b ) { var c = a . query . substr ( 1 ) . toLowerCase ( ) , e = d . filter ( h , function ( a ) { return - 1 !== a . id . toLowerCase ( ) . indexOf ( c ) } ) . sort ( function ( a , b ) { var d = ! a . id . substr ( 1 ) . indexOf ( c ) , e = ! b . id . substr ( 1 ) . indexOf ( c ) ; return d != e ? d ? - 1 : 1 : a . id > b . id ? 1 : - 1 } ) , e = d . map ( e ,
k ) ; b ( e ) } if ( null !== c ) { void 0 === a . _ . emoji && ( a . _ . emoji = { } ) ; void 0 === a . _ . emoji . list && ( a . _ . emoji . list = JSON . parse ( c ) ) ; var h = a . _ . emoji . list , l = void 0 === a . config . emoji _minChars ? 2 : a . config . emoji _minChars ; if ( "ready" !== a . status ) a . once ( "instanceReady" , b ) ; else b ( ) } } ) ; a . addCommand ( "insertEmoji" , { exec : function ( a , b ) { a . insertHtml ( b . emojiText ) } } ) ; a . plugins . toolbar && new h ( a , this ) } } , isSVGSupported : function ( ) { return ! CKEDITOR . env . ie || CKEDITOR . env . edge } } ) } ) ( ) ; 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,wysiwygarea,bidi,textwatcher,autocomplete,textmatch,emoji' ; 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,,bidiltr,1128,,bidirtl,1152,,emojipanel,1176,' , '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,bidiltr,1128,auto,bidirtl,1152,auto,emojipanel,1176,auto' , 'icons.png' ) ; } ) ( ) ; CKEDITOR . lang . languages = { "ar" : 1 , "bg" : 1 , "bs" : 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 } ; } ( ) ) ;
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 . observableParent = CKEDITOR . document . $ ; CKEDITOR . config . plugins = 'dialogui,dialog,about,autogrow,base64image,basicstyles,bidi,blockquote,button,notification,toolbar,clipboard,panelbutton,panel,floatpanel,colorbutton,colordialog,menu,contextmenu,div,textwatcher,autocomplete,textmatch,xml,ajax,emoji,enterkey,entities,fakeobjects,floatingspace,listblock,richcombo,font,format,image,indent,indentlist,justify,link,list,menubutton,onchange,pastetools,pastefromgdocs,pastefromword,pastetext,scayt,sourcearea,tab,table,tabletools,tableresize,undo,lineutils,widgetselection,widget,filetools,notificationaggregator,uploadwidget,uploadimage,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,,bidiltr,192,,bidirtl,216,,blockquote,240,,copy-rtl,264,,copy,288,,cut-rtl,312,,cut,336,,paste-rtl,360,,paste,384,,bgcolor,408,,textcolor,432,,creatediv,456,,emojipanel,480,,image,504,,indent-rtl,528,,indent,552,,outdent-rtl,576,,outdent,600,,justifyblock,624,,justifycenter,648,,justifyleft,672,,justifyright,696,,anchor-rtl,720,,anchor,744,,link,768,,unlink,792,,bulletedlist-rtl,816,,bulletedlist,840,,numberedlist-rtl,864,,numberedlist,888,,pastefromword-rtl,912,,pastefromword,936,,pastetext-rtl,960,,pastetext,984,,scayt,1008,,source-rtl,1032,,source,1056,,table,1080,,redo-rtl,1104,,redo,1128,,undo-rtl,1152,,undo,1176,' , '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,bidiltr,192,auto,bidirtl,216,auto,blockquote,240,auto,copy-rtl,264,auto,copy,288,auto,cut-rtl,312,auto,cut,336,auto,paste-rtl,360,auto,paste,384,auto,bgcolor,408,auto,textcolor,432,auto,creatediv,456,auto,emojipanel,480,auto,image,504,auto,indent-rtl,528,auto,indent,552,auto,outdent-rtl,576,auto,outdent,600,auto,justifyblock,624,auto,justifycenter,648,auto,justifyleft,672,auto,justifyright,696,auto,anchor-rtl,720,auto,anchor,744,auto,link,768,auto,unlink,792,auto,bulletedlist-rtl,816,auto,bulletedlist,840,auto,numberedlist-rtl,864,auto,numberedlist,888,auto,pastefromword-rtl,912,auto,pastefromword,936,auto,pastetext-rtl,960,auto,pastetext,984,auto,scayt,1008,auto,source-rtl,1032,auto,source,1056,auto,table,1080,auto,redo-rtl,1104,auto,redo,1128,auto,undo-rtl,1152,auto,undo,1176,auto' , 'icons.png' ) ; } ) ( ) ; CKEDITOR . lang . languages = { "ar" : 1 , "bg" : 1 , "bs" : 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 , "t r" : 1 , "uk" : 1 , "zh" : 1 , "zh-cn" : 1 } ; } ( ) ) ;