@@ -2,14 +2,14 @@
Copyright ( c ) 2003 - 2020 , CKSource - Frederico Knabben . All rights reserved .
For licensing , see LICENSE . md or https : //ckeditor.com/legal/ckeditor-oss-license
* /
( function ( ) { if ( window . CKEDITOR && window . CKEDITOR . dom ) return ; window . CKEDITOR || ( window . CKEDITOR = function ( ) { var a = /(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i , d = { timestamp : "K24B " , version : "4.14.0 " , revision : "8a12b04171 " , 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 g = c [ d ] . src . match ( a ) ; if ( g ) { b = g [ 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 : "K5H9 " , version : "4.14.1 " , revision : "eb2d11644 " , 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 g = c [ d ] . src . match ( a ) ; if ( g ) { b = g [ 1 ] ; break } } - 1 == b . indexOf ( ":/" ) && "//" != b . slice ( 0 , 2 ) && ( b = 0 === b . indexOf ( "/" ) ? location . href . match ( /^.*?:\/\/[^\/]*/ ) [ 0 ] +
b : location . href . match ( /^[^\?]*\/(?:)/ ) [ 0 ] + b ) ; if ( ! b ) throw 'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.' ; return b } ( ) , getUrl : function ( a ) { - 1 == a . indexOf ( ":/" ) && 0 !== a . indexOf ( "/" ) && ( a = this . basePath + a ) ; this . timestamp && "/" != a . charAt ( a . length - 1 ) && ! /[&?]t=/ . test ( a ) && ( a += ( 0 <= a . indexOf ( "?" ) ? "\x26" : "?" ) + "t\x3d" + this . timestamp ) ; return a } , domReady : function ( ) { function a ( ) { try { document . addEventListener ? ( document . removeEventListener ( "DOMContentLoaded" ,
a , ! 1 ) , b ( ) ) : document . attachEvent && "complete" === document . readyState && ( document . detachEvent ( "onreadystatechange" , a ) , b ( ) ) } catch ( c ) { } } function b ( ) { for ( var a ; a = c . shift ( ) ; ) a ( ) } var c = [ ] ; return function ( b ) { function d ( ) { try { document . documentElement . doScroll ( "left" ) } catch ( b ) { setTimeout ( d , 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 ( h ) { } document . documentElement . doScroll && b && d ( ) } } } ( ) } , 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 } ( ) ) ;
CKEDITOR . event || ( CKEDITOR . event = function ( ) { } , CKEDITOR . event . implementOn = function ( a ) { var d = CKEDITOR . event . prototype , b ; for ( b in d ) null == a [ b ] && ( a [ b ] = d [ b ] ) } , CKEDITOR . event . prototype = function ( ) { function a ( a ) { var f = d ( this ) ; return f [ a ] || ( f [ a ] = new b ( a ) ) } var d = function ( a ) { a = a . getPrivate && a . getPrivate ( ) || a . _ || ( a . _ = { } ) ; return a . events || ( a . events = { } ) } , b = function ( a ) { this . name = a ; this . listeners = [ ] } ; b . prototype = { getListenerIndex : function ( a ) { for ( var b = 0 , d = this . listeners ; b < d . length ; b ++ ) if ( d [ b ] . fn == a ) return b ; return - 1 } } ;
return { define : function ( b , d ) { var h = a . call ( this , b ) ; CKEDITOR . tools . extend ( h , d , ! 0 ) } , on : function ( b , d , h , k , g ) { function l ( a , x , t , e ) { a = { name : b , sender : this , editor : a , data : x , listenerData : k , stop : t , cancel : e , removeListener : v } ; return ! 1 === d . call ( h , a ) ? ! 1 : a . data } function v ( ) { x . removeListener ( b , d ) } var e = a . call ( this , b ) ; if ( 0 > e . getListenerIndex ( d ) ) { e = e . listeners ; h || ( h = this ) ; isNaN ( g ) && ( g = 10 ) ; var x = this ; l . fn = d ; l . priority = g ; for ( var t = e . length - 1 ; 0 <= t ; t -- ) if ( e [ t ] . priority <= g ) return e . splice ( t + 1 , 0 , l ) , { removeListener : v } ; e . unshift ( l ) } return { removeListener : v } } ,
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 a = 0 , b = function ( ) { a = 1 } , h = 0 , k = function ( ) { h = 1 } ; return function ( g , l , v ) { var e = d ( this ) [ g ] ; g = a ; var x = h ; a = h = 0 ; if ( e ) { var t = e . listeners ; if ( t . length ) for ( var t = t . slice ( 0 ) , z , G = 0 ; G < t . length ; G ++ ) { if ( e . errorProof ) try { z =
t [ G ] . call ( this , v , l , b , k ) } catch ( u ) { } else z = t [ G ] . call ( this , v , l , b , k ) ; ! 1 === z ? h = 1 : "undefined" != typeof z && ( l = z ) ; if ( a || h ) break } } l = h ? ! 1 : "undefined" == typeof l ? ! 0 : l ; a = g ; h = x ; return l } } ( ) , fireOnce : function ( a , b , h ) { b = this . fire ( a , b , h ) ; delete d ( this ) [ a ] ; return b } , removeListener : function ( a , b ) { var h = d ( this ) [ a ] ; if ( h ) { var k = h . getListenerIndex ( b ) ; 0 <= k && h . listeners . splice ( k , 1 ) } } , removeAllListeners : function ( ) { var a = d ( this ) , b ; for ( b in a ) delete a [ b ] } , hasListeners : function ( a ) { return ( a = d ( this ) [ a ] ) && 0 < a . listeners . length } } } ( ) ) ;
return { define : function ( b , d ) { var h = a . call ( this , b ) ; CKEDITOR . tools . extend ( h , d , ! 0 ) } , on : function ( b , d , h , k , g ) { function l ( a , x , w , e ) { a = { name : b , sender : this , editor : a , data : x , listenerData : k , stop : w , cancel : e , removeListener : u } ; return ! 1 === d . call ( h , a ) ? ! 1 : a . data } function u ( ) { x . removeListener ( b , d ) } var e = a . call ( this , b ) ; if ( 0 > e . getListenerIndex ( d ) ) { e = e . listeners ; h || ( h = this ) ; isNaN ( g ) && ( g = 10 ) ; var x = this ; l . fn = d ; l . priority = g ; for ( var w = e . length - 1 ; 0 <= w ; w -- ) if ( e [ w ] . priority <= g ) return e . splice ( w + 1 , 0 , l ) , { removeListener : u } ; e . unshift ( l ) } return { removeListener : u } } ,
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 a = 0 , b = function ( ) { a = 1 } , h = 0 , k = function ( ) { h = 1 } ; return function ( g , l , u ) { var e = d ( this ) [ g ] ; g = a ; var x = h ; a = h = 0 ; if ( e ) { var w = e . listeners ; if ( w . length ) for ( var w = w . slice ( 0 ) , z , G = 0 ; G < w . length ; G ++ ) { if ( e . errorProof ) try { z =
w [ G ] . call ( this , u , l , b , k ) } catch ( t ) { } else z = w [ G ] . call ( this , u , l , b , k ) ; ! 1 === z ? h = 1 : "undefined" != typeof z && ( l = z ) ; if ( a || h ) break } } l = h ? ! 1 : "undefined" == typeof l ? ! 0 : l ; a = g ; h = x ; return l } } ( ) , fireOnce : function ( a , b , h ) { b = this . fire ( a , b , h ) ; delete d ( this ) [ a ] ; return b } , removeListener : function ( a , b ) { var h = d ( this ) [ a ] ; if ( h ) { var k = h . getListenerIndex ( b ) ; 0 <= k && h . listeners . splice ( k , 1 ) } } , removeAllListeners : function ( ) { var a = d ( this ) , b ; for ( b in a ) delete a [ b ] } , hasListeners : function ( a ) { return ( a = d ( 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,7 +20,7 @@ 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 , b , e ) { this . _minInterval = a ; this . _context = e ; this . _lastOutput = this . _scheduledTimer = 0 ; this . _output = CKEDITOR . tools . bind ( b , e || { } ) ; 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 , b , e ) { a . call ( this , x , b , e ) ; 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 , h = />/g , k = /</g , g = /"/g , l = /&(lt|gt|amp|quot|nbsp|shy|#\d{1,5});/g , v = { lt : "\x3c" , gt : "\x3e" , amp : "\x26" , quot : '"' , nbsp : " " , shy : " " } , e = function ( a , b ) { return "#" == b [ 0 ] ? String . fromCharCode ( parseInt ( b . slice ( 1 ) , 10 ) ) : v [ b ] } ; CKEDITOR . on ( "reset" , function ( ) { b = [ ] } ) ; CKEDITOR . tools = { arrayCompare : function ( a , b ) { if ( ! a && ! b ) 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 , h = />/g , k = /</g , g = /"/g , l = /&(lt|gt|amp|quot|nbsp|shy|#\d{1,5});/g , u = { lt : "\x3c" , gt : "\x3e" , amp : "\x26" , quot : '"' , nbsp : " " , shy : " " } , e = function ( a , b ) { return "#" == b [ 0 ] ? String . fromCharCode ( parseInt ( b . slice ( 1 ) , 10 ) ) : u [ b ] } ; CKEDITOR . on ( "reset" , function ( ) { b = [ ] } ) ; CKEDITOR . tools = { arrayCompare : function ( a , b ) { if ( ! a && ! b ) return ! 0 ;
if ( ! a || ! b || a . length != b . length ) return ! 1 ; for ( var e = 0 ; e < a . length ; e ++ ) if ( a [ e ] != b [ e ] ) return ! 1 ; return ! 0 } , getIndex : function ( a , b ) { for ( var e = 0 ; e < a . length ; ++ e ) if ( b ( a [ e ] ) ) return e ; return - 1 } , clone : function ( a ) { var b ; if ( a && a instanceof Array ) { b = [ ] ; for ( var e = 0 ; e < a . length ; e ++ ) b [ e ] = CKEDITOR . tools . clone ( a [ e ] ) ; 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 ( e in a ) b [ e ] =
CKEDITOR . tools . clone ( a [ e ] ) ; 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 , e , c ; "boolean" == typeof ( e = arguments [ b - 1 ] ) ? b -- : "boolean" == typeof ( e = arguments [ b - 2 ] ) && ( c = arguments [ b - 1 ] , b -= 2 ) ; for ( var g = 1 ; g < b ; g ++ ) { var n = arguments [ g ] || { } ; CKEDITOR . tools . array . forEach ( CKEDITOR . tools . object . keys ( n ) , function ( b ) { if ( ! 0 === e || null == a [ b ] ) if ( ! c || b in c ) a [ b ] = n [ b ] } ) } return a } , prototypedCopy : function ( a ) { var b = function ( ) { } ;
b . prototype = a ; return new b } , copy : function ( a ) { var b = { } , e ; for ( e in a ) b [ e ] = a [ e ] ; 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 , e ) { if ( e ) return c + a + ":" + b + ";" + a + ":" + b ; e = { } ; e [ a ] = b ; e [ c + a ] = b ; return e } , cssStyleToDomStyle : function ( ) { var a = document . createElement ( "div" ) . style , b = "undefined" != typeof a . cssFloat ? "cssFloat" : "undefined" != typeof a . styleFloat ? "styleFloat" :
@@ -121,16 +121,16 @@ c.specified:!1}return CKEDITOR.env.ie?8>CKEDITOR.env.version?function(b){return"
[ ] ; c . data ( "cke-bookmark" ) || c . isEmptyInlineRemoveable ( ) ; ) if ( d . push ( c ) , c = e ? c . getNext ( ) : c . getPrevious ( ) , ! c || c . type != CKEDITOR . NODE _ELEMENT ) return ; if ( b . isIdentical ( c ) ) { for ( var g = e ? b . getLast ( ) : b . getFirst ( ) ; d . length ; ) d . shift ( ) . move ( b , ! e ) ; c . moveChildren ( b , ! e ) ; c . remove ( ) ; g && g . type == CKEDITOR . NODE _ELEMENT && g . mergeSiblings ( ) } } } return function ( b ) { if ( ! 1 === b || CKEDITOR . dtd . $removeEmpty [ this . getName ( ) ] || this . is ( "a" ) ) a ( this , this . getNext ( ) , ! 0 ) , a ( this , this . getPrevious ( ) ) } } ( ) , show : function ( ) { this . setStyles ( { display : "" ,
visibility : "" } ) } , setAttribute : function ( ) { var a = function ( a , b ) { this . $ . setAttribute ( a , b ) ; return this } ; return CKEDITOR . env . ie && ( CKEDITOR . env . ie7Compat || CKEDITOR . env . quirks ) ? function ( b , c ) { "class" == b ? this . $ . className = c : "style" == b ? this . $ . style . cssText = c : "tabindex" == b ? this . $ . tabIndex = c : "checked" == b ? this . $ . checked = c : "contenteditable" == b ? a . call ( this , "contentEditable" , c ) : a . apply ( this , arguments ) ; return this } : CKEDITOR . env . ie8Compat && CKEDITOR . env . secure ? function ( b , c ) { if ( "src" == b && c . match ( /^http:\/\// ) ) try { a . apply ( this ,
arguments ) } catch ( e ) { } else a . apply ( this , arguments ) ; return this } : a } ( ) , setAttributes : function ( a ) { for ( var b in a ) this . setAttribute ( b , a [ b ] ) ; return this } , setValue : function ( a ) { this . $ . value = a ; return this } , removeAttribute : function ( ) { var a = function ( a ) { this . $ . removeAttribute ( a ) } ; return CKEDITOR . env . ie && ( CKEDITOR . env . ie7Compat || CKEDITOR . env . quirks ) ? function ( a ) { "class" == a ? a = "className" : "tabindex" == a ? a = "tabIndex" : "contenteditable" == a && ( a = "contentEditable" ) ; this . $ . removeAttribute ( a ) } : a } ( ) , removeAttributes : function ( a ) { if ( CKEDITOR . tools . isArray ( a ) ) for ( var b =
0 ; b < a . length ; b ++ ) this . removeAttribute ( a [ b ] ) ; else for ( b in a = a || this . getAttributes ( ) , a ) a . hasOwnProperty ( b ) && this . removeAttribute ( b ) } , removeStyle : function ( a ) { var b = this . $ . style ; if ( b . removeProperty || "border" != a && "margin" != a && "padding" != a ) b . removeProperty ? b . removeProperty ( a ) : b . removeAttribute ( CKEDITOR . tools . cssStyleToDomStyle ( a ) ) , this . $ . style . cssText || this . removeAttribute ( "style" ) ; else { var c = [ "top" , "left" , "right" , "bottom" ] , e ; "border" == a && ( e = [ "color" , "style" , "width" ] ) ; for ( var b = [ ] , d = 0 ; d < c . length ; d ++ ) if ( e ) for ( var t =
0 ; t < e . length ; t ++ ) b . push ( [ a , c [ d ] , e [ t ] ] . join ( "-" ) ) ; else b . push ( [ a , c [ d ] ] . join ( "-" ) ) ; for ( a = 0 ; a < b . length ; a ++ ) this . removeStyle ( b [ a ] ) } } , setStyle : function ( a , b ) { this . $ . style [ CKEDITOR . tools . cssStyleToDomStyle ( a ) ] = b ; return this } , setStyles : function ( a ) { for ( var b in a ) this . setStyle ( b , a [ b ] ) ; return this } , setOpacity : function ( a ) { CKEDITOR . env . ie && 9 > CKEDITOR . env . version ? ( a = Math . round ( 100 * a ) , this . setStyle ( "filter" , 100 <= a ? "" : "progid:DXImageTransform.Microsoft.Alpha(opacity\x3d" + a + ")" ) ) : this . setStyle ( "opacity" , a ) } , unselectable : function ( ) { this . setStyles ( CKEDITOR . tools . cssVendorPrefix ( "user-select" ,
"none" ) ) ; if ( CKEDITOR . env . ie ) { this . setAttribute ( "unselectable" , "on" ) ; for ( var a , b = this . getElementsByTag ( "*" ) , c = 0 , e = b . count ( ) ; c < e ; c ++ ) a = b . getItem ( c ) , a . setAttribute ( "unselectable" , "on" ) } } , getPositionedAncestor : function ( ) { for ( var a = this ; "html" != a . getName ( ) ; ) { if ( "static" != a . getComputedStyle ( "position" ) ) return a ; a = a . getParent ( ) } return null } , getDocumentPosition : function ( a ) { var b = 0 , c = 0 , e = this . getDocument ( ) , d = e . getBody ( ) , t = "BackCompat" == e . $ . compatMode ; if ( document . documentElement . getBoundingClientRect && ( CKEDITOR . env . ie ?
8 !== CKEDITOR . env . version : 1 ) ) { var f = this . $ . getBoundingClientRect ( ) , h = e . $ . documentElement , u = h . clientTop || d . $ . clientTop || 0 , n = h . clientLeft || d . $ . clientLeft || 0 , k = ! 0 ; CKEDITOR . env . ie && ( k = e . getDocumentElement ( ) . contains ( this ) , e = e . getBody ( ) . contains ( this ) , k = t && e || ! t && k ) ; k && ( CKEDITOR . env . webkit || CKEDITOR . env . ie && 12 <= CKEDITOR . env . version ? ( b = d . $ . scrollLeft || h . scrollLeft , c = d . $ . scrollTop || h . scrollTop ) : ( c = t ? d . $ : h , b = c . scrollLeft , c = c . scrollTop ) , b = f . left + b - n , c = f . top + c - u ) } else for ( u = this , n = null ; u && "body" != u . getName ( ) &&
"html" != u . getName ( ) ; ) { b += u . $ . offsetLeft - u . $ . scrollLeft ; c += u . $ . offsetTop - u . $ . scrollTop ; u . equals ( this ) || ( b += u . $ . clientLeft || 0 , c += u . $ . clientTop || 0 ) ; for ( ; n && ! n . equals ( u ) ; ) b -= n . $ . scrollLeft , c -= n . $ . scrollTop , n = n . getParent ( ) ; n = u ; u = ( f = u . $ . offsetParent ) ? new CKEDITOR . dom . element ( f ) : null } a && ( f = this . getWindow ( ) , u = a . getWindow ( ) , ! f . equals ( u ) && f . $ . frameElement && ( a = ( new CKEDITOR . dom . element ( f . $ . frameElement ) ) . getDocumentPosition ( a ) , b += a . x , c += a . y ) ) ; document . documentElement . getBoundingClientRect || ! CKEDITOR . env . gecko ||
t || ( 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 e = c . $ . frameElement ; e && ( b = new CKEDITOR . dom . element ( e ) ) } catch ( d ) { } } while ( b = b . getParent ( ) ) } } , scrollIntoParent : function ( a , b , c ) { var e , d , t , f ; function h ( b , c ) { /body|html/ . test ( a . getName ( ) ) ?
a . getWindow ( ) . $ . scrollBy ( b , c ) : ( a . $ . scrollLeft += b , a . $ . scrollTop += c ) } function u ( a , b ) { var c = { x : 0 , y : 0 } ; if ( ! a . is ( k ? "body" : "html" ) ) { var e = a . $ . getBoundingClientRect ( ) ; c . x = e . left ; c . y = e . top } e = a . getWindow ( ) ; e . equals ( b ) || ( e = u ( CKEDITOR . dom . element . get ( e . $ . frameElement ) , b ) , c . x += e . x , c . y += e . y ) ; return c } function n ( a , b ) { return parseInt ( a . getComputedStyle ( "margin-" + b ) || 0 , 10 ) || 0 } ! a && ( a = this . getWindow ( ) ) ; t = a . getDocument ( ) ; var k = "BackCompat" == t . $ . compatMode ; a instanceof CKEDITOR . dom . window && ( a = k ? t . getBody ( ) : t . getDocumentElement ( ) ) ;
CKEDITOR . env . webkit && ( t = this . getEditor ( ! 1 ) ) && ( t . _ . previousScrollTop = null ) ; t = a . getWindow ( ) ; d = u ( this , t ) ; var y = u ( a , t ) , H = this . $ . offsetHeight ; e = this . $ . offsetWidth ; var I = a . $ . clientHeight , m = a . $ . clientWidth ; t = d . x - n ( this , "left" ) - y . x || 0 ; f = d . y - n ( this , "top" ) - y . y || 0 ; e = d . x + e + n ( this , "right" ) - ( y . x + m ) || 0 ; d = d . y + H + n ( this , "bottom" ) - ( y . y + I ) || 0 ; ( 0 > f || 0 < d ) && h ( 0 , ! 0 === b ? f : ! 1 === b ? d : 0 > f ? f : d ) ; c && ( 0 > t || 0 < e ) && h ( 0 > t ? t : e , 0 ) } , setState : function ( a , b , c ) { b = b || "cke" ; switch ( a ) { case CKEDITOR . TRISTATE _ON : this . addClass ( b + "_on" ) ; this . removeClass ( b +
0 ; b < a . length ; b ++ ) this . removeAttribute ( a [ b ] ) ; else for ( b in a = a || this . getAttributes ( ) , a ) a . hasOwnProperty ( b ) && this . removeAttribute ( b ) } , removeStyle : function ( a ) { var b = this . $ . style ; if ( b . removeProperty || "border" != a && "margin" != a && "padding" != a ) b . removeProperty ? b . removeProperty ( a ) : b . removeAttribute ( CKEDITOR . tools . cssStyleToDomStyle ( a ) ) , this . $ . style . cssText || this . removeAttribute ( "style" ) ; else { var c = [ "top" , "left" , "right" , "bottom" ] , e ; "border" == a && ( e = [ "color" , "style" , "width" ] ) ; for ( var b = [ ] , d = 0 ; d < c . length ; d ++ ) if ( e ) for ( var w =
0 ; w < e . length ; w ++ ) b . push ( [ a , c [ d ] , e [ w ] ] . join ( "-" ) ) ; else b . push ( [ a , c [ d ] ] . join ( "-" ) ) ; for ( a = 0 ; a < b . length ; a ++ ) this . removeStyle ( b [ a ] ) } } , setStyle : function ( a , b ) { this . $ . style [ CKEDITOR . tools . cssStyleToDomStyle ( a ) ] = b ; return this } , setStyles : function ( a ) { for ( var b in a ) this . setStyle ( b , a [ b ] ) ; return this } , setOpacity : function ( a ) { CKEDITOR . env . ie && 9 > CKEDITOR . env . version ? ( a = Math . round ( 100 * a ) , this . setStyle ( "filter" , 100 <= a ? "" : "progid:DXImageTransform.Microsoft.Alpha(opacity\x3d" + a + ")" ) ) : this . setStyle ( "opacity" , a ) } , unselectable : function ( ) { this . setStyles ( CKEDITOR . tools . cssVendorPrefix ( "user-select" ,
"none" ) ) ; if ( CKEDITOR . env . ie ) { this . setAttribute ( "unselectable" , "on" ) ; for ( var a , b = this . getElementsByTag ( "*" ) , c = 0 , e = b . count ( ) ; c < e ; c ++ ) a = b . getItem ( c ) , a . setAttribute ( "unselectable" , "on" ) } } , getPositionedAncestor : function ( ) { for ( var a = this ; "html" != a . getName ( ) ; ) { if ( "static" != a . getComputedStyle ( "position" ) ) return a ; a = a . getParent ( ) } return null } , getDocumentPosition : function ( a ) { var b = 0 , c = 0 , e = this . getDocument ( ) , d = e . getBody ( ) , w = "BackCompat" == e . $ . compatMode ; if ( document . documentElement . getBoundingClientRect && ( CKEDITOR . env . ie ?
8 !== CKEDITOR . env . version : 1 ) ) { var f = this . $ . getBoundingClientRect ( ) , h = e . $ . documentElement , t = h . clientTop || d . $ . clientTop || 0 , n = h . clientLeft || d . $ . clientLeft || 0 , k = ! 0 ; CKEDITOR . env . ie && ( k = e . getDocumentElement ( ) . contains ( this ) , e = e . getBody ( ) . contains ( this ) , k = w && e || ! w && k ) ; k && ( CKEDITOR . env . webkit || CKEDITOR . env . ie && 12 <= CKEDITOR . env . version ? ( b = d . $ . scrollLeft || h . scrollLeft , c = d . $ . scrollTop || h . scrollTop ) : ( c = w ? d . $ : h , b = c . scrollLeft , c = c . scrollTop ) , b = f . left + b - n , c = f . top + c - t ) } else for ( t = this , n = null ; t && "body" != t . getName ( ) &&
"html" != t . getName ( ) ; ) { b += t . $ . offsetLeft - t . $ . scrollLeft ; c += t . $ . offsetTop - t . $ . scrollTop ; t . equals ( this ) || ( b += t . $ . clientLeft || 0 , c += t . $ . clientTop || 0 ) ; for ( ; n && ! n . equals ( t ) ; ) b -= n . $ . scrollLeft , c -= n . $ . scrollTop , n = n . getParent ( ) ; n = t ; t = ( f = t . $ . offsetParent ) ? new CKEDITOR . dom . element ( f ) : null } a && ( f = this . getWindow ( ) , t = a . getWindow ( ) , ! f . equals ( t ) && f . $ . frameElement && ( a = ( new CKEDITOR . dom . element ( f . $ . frameElement ) ) . getDocumentPosition ( a ) , b += a . x , c += a . y ) ) ; document . documentElement . getBoundingClientRect || ! CKEDITOR . env . gecko ||
w || ( 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 e = c . $ . frameElement ; e && ( b = new CKEDITOR . dom . element ( e ) ) } catch ( d ) { } } while ( b = b . getParent ( ) ) } } , scrollIntoParent : function ( a , b , c ) { var e , d , w , f ; function h ( b , c ) { /body|html/ . test ( a . getName ( ) ) ?
a . getWindow ( ) . $ . scrollBy ( b , c ) : ( a . $ . scrollLeft += b , a . $ . scrollTop += c ) } function t ( a , b ) { var c = { x : 0 , y : 0 } ; if ( ! a . is ( k ? "body" : "html" ) ) { var e = a . $ . getBoundingClientRect ( ) ; c . x = e . left ; c . y = e . top } e = a . getWindow ( ) ; e . equals ( b ) || ( e = t ( CKEDITOR . dom . element . get ( e . $ . frameElement ) , b ) , c . x += e . x , c . y += e . y ) ; return c } function n ( a , b ) { return parseInt ( a . getComputedStyle ( "margin-" + b ) || 0 , 10 ) || 0 } ! a && ( a = this . getWindow ( ) ) ; w = a . getDocument ( ) ; var k = "BackCompat" == w . $ . compatMode ; a instanceof CKEDITOR . dom . window && ( a = k ? w . getBody ( ) : w . getDocumentElement ( ) ) ;
CKEDITOR . env . webkit && ( w = this . getEditor ( ! 1 ) ) && ( w . _ . previousScrollTop = null ) ; w = a . getWindow ( ) ; d = t ( this , w ) ; var y = t ( a , w ) , H = this . $ . offsetHeight ; e = this . $ . offsetWidth ; var I = a . $ . clientHeight , m = a . $ . clientWidth ; w = d . x - n ( this , "left" ) - y . x || 0 ; f = d . y - n ( this , "top" ) - y . y || 0 ; e = d . x + e + n ( this , "right" ) - ( y . x + m ) || 0 ; d = d . y + H + n ( this , "bottom" ) - ( y . y + I ) || 0 ; ( 0 > f || 0 < d ) && h ( 0 , ! 0 === b ? f : ! 1 === b ? d : 0 > f ? f : d ) ; c && ( 0 > w || 0 < e ) && h ( 0 > w ? w : e , 0 ) } , setState : function ( a , b , c ) { b = b || "cke" ; switch ( a ) { case CKEDITOR . TRISTATE _ON : this . addClass ( b + "_on" ) ; this . removeClass ( b +
"_off" ) ; this . removeClass ( b + "_disabled" ) ; c && this . setAttribute ( "aria-pressed" , ! 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 e = 0 ; e < c . length ; e ++ ) { var d = c [ e ] , t = d . nodeName . toLowerCase ( ) , f ; if ( ! ( t in b ) ) if ( "checked" == t && ( f = this . getAttribute ( t ) ) ) a . setAttribute ( t , f ) ; else if ( ! CKEDITOR . env . ie || this . hasAttribute ( t ) ) f = this . getAttribute ( t ) , null === f && ( f = d . nodeValue ) , a . setAttribute ( t , f ) } "" !== this . $ . style . cssText &&
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 e = 0 ; e < c . length ; e ++ ) { var d = c [ e ] , w = d . nodeName . toLowerCase ( ) , f ; if ( ! ( w in b ) ) if ( "checked" == w && ( f = this . getAttribute ( w ) ) ) a . setAttribute ( w , f ) ; else if ( ! CKEDITOR . env . ie || this . hasAttribute ( w ) ) f = this . getAttribute ( w ) , null === f && ( f = d . nodeValue ) , a . setAttribute ( w , 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 e = b . childNodes ; if ( 0 <= c && c < e . length ) return e [ c ] } return function ( b ) { var c = this . $ ; if ( b . slice ) for ( b = b . slice ( ) ; 0 < b . length && c ; ) c = a ( c ,
b . shift ( ) ) ; else c = a ( c , b ) ; return c ? new CKEDITOR . dom . node ( c ) : null } } ( ) , getChildCount : function ( ) { return this . $ . childNodes . length } , disableContextMenu : function ( ) { function a ( b ) { return b . type == CKEDITOR . NODE _ELEMENT && b . hasClass ( "cke_enable_context_menu" ) } this . on ( "contextmenu" , function ( b ) { b . data . getTarget ( ) . getAscendant ( a , ! 0 ) || b . data . preventDefault ( ) } ) } , getDirection : function ( a ) { return a ? this . getComputedStyle ( "direction" ) || this . getDirection ( ) || this . getParent ( ) && this . getParent ( ) . getDirection ( 1 ) || this . getDocument ( ) . $ . dir ||
"ltr" : this . getStyle ( "direction" ) || this . getAttribute ( "dir" ) } , data : function ( a , b ) { a = "data-" + a ; if ( void 0 === b ) return this . getAttribute ( a ) ; ! 1 === b ? this . removeAttribute ( a ) : this . setAttribute ( a , b ) ; return null } , getEditor : function ( a ) { var b = CKEDITOR . instances , c , e , d ; a = a || void 0 === a ; for ( c in b ) if ( e = b [ c ] , e . element . equals ( this ) && e . elementMode != CKEDITOR . ELEMENT _MODE _APPENDTO || ! a && ( d = e . editable ( ) ) && ( d . equals ( this ) || d . contains ( this ) ) ) return e ; return null } , find : function ( a ) { var c = d ( this ) ; a = new CKEDITOR . dom . nodeList ( this . $ . querySelectorAll ( b ( this ,
@@ -139,23 +139,23 @@ d)}else e[e[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 e , d = c . startContainer ; e = c . endContainer ; var f = c . startOffset , x = c . endOffset , h , g = this . guard , m = this . type , B = a ? "getPreviousSourceNode" : "getNextSourceNode" ; if ( ! a && ! this . _ . guardLTR ) { var K = e . type == CKEDITOR . NODE _ELEMENT ? e : e . getParent ( ) , A = e . type == CKEDITOR . NODE _ELEMENT ? e . getChild ( x ) : e . getNext ( ) ; this . _ . guardLTR = function ( a , b ) { return ( ! b || ! K . equals ( a ) ) && ( ! A ||
! a . equals ( A ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } if ( a && ! this . _ . guardRTL ) { var k = d . type == CKEDITOR . NODE _ELEMENT ? d : d . getParent ( ) , r = d . type == CKEDITOR . NODE _ELEMENT ? f ? d . getChild ( f - 1 ) : null : d . getPrevious ( ) ; this . _ . guardRTL = function ( a , b ) { return ( ! b || ! k . equals ( a ) ) && ( ! r || ! a . equals ( r ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } var C = a ? this . _ . guardRTL : this . _ . guardLTR ; h = g ? function ( a , b ) { return ! 1 === C ( a , b ) ? ! 1 : g ( a , b ) } : C ; this . current ? e = this . current [ B ] ( ! 1 , m , h ) : ( a ? e . type == CKEDITOR . NODE _ELEMENT &&
( e = 0 < x ? e . getChild ( x - 1 ) : ! 1 === h ( e , ! 0 ) ? null : e . getPreviousSourceNode ( ! 0 , m , h ) ) : ( e = d , e . type == CKEDITOR . NODE _ELEMENT && ( ( e = e . getChild ( f ) ) || ( e = ! 1 === h ( d , ! 0 ) ? null : d . getNextSourceNode ( ! 0 , m , h ) ) ) ) , e && ! 1 === h ( e ) && ( e = null ) ) ; for ( ; e && ! this . _ . end ; ) { this . current = e ; if ( ! this . evaluator || ! 1 !== this . evaluator ( e ) ) { if ( ! b ) return e } else if ( b && this . evaluator ) return ! 1 ; e = e [ B ] ( ! 1 , m , h ) } this . end ( ) ; return this . current = null } function d ( b ) { for ( var c , e = null ; c = a . call ( this , b ) ; ) e = c ; return e } CKEDITOR . dom . walker = CKEDITOR . tools . createClass ( { $ : function ( a ) { this . range =
( function ( ) { function a ( a , b ) { var c = this . range ; if ( this . _ . end ) return null ; if ( ! this . _ . start ) { this . _ . start = 1 ; if ( c . collapsed ) return this . end ( ) , null ; c . optimize ( ) } var e , d = c . startContainer ; e = c . endContainer ; var f = c . startOffset , x = c . endOffset , h , g = this . guard , m = this . type , C = a ? "getPreviousSourceNode" : "getNextSourceNode" ; if ( ! a && ! this . _ . guardLTR ) { var K = e . type == CKEDITOR . NODE _ELEMENT ? e : e . getParent ( ) , A = e . type == CKEDITOR . NODE _ELEMENT ? e . getChild ( x ) : e . getNext ( ) ; this . _ . guardLTR = function ( a , b ) { return ( ! b || ! K . equals ( a ) ) && ( ! A ||
! a . equals ( A ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } if ( a && ! this . _ . guardRTL ) { var k = d . type == CKEDITOR . NODE _ELEMENT ? d : d . getParent ( ) , r = d . type == CKEDITOR . NODE _ELEMENT ? f ? d . getChild ( f - 1 ) : null : d . getPrevious ( ) ; this . _ . guardRTL = function ( a , b ) { return ( ! b || ! k . equals ( a ) ) && ( ! r || ! a . equals ( r ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } var D = a ? this . _ . guardRTL : this . _ . guardLTR ; h = g ? function ( a , b ) { return ! 1 === D ( a , b ) ? ! 1 : g ( a , b ) } : D ; this . current ? e = this . current [ C ] ( ! 1 , m , h ) : ( a ? e . type == CKEDITOR . NODE _ELEMENT &&
( e = 0 < x ? e . getChild ( x - 1 ) : ! 1 === h ( e , ! 0 ) ? null : e . getPreviousSourceNode ( ! 0 , m , h ) ) : ( e = d , e . type == CKEDITOR . NODE _ELEMENT && ( ( e = e . getChild ( f ) ) || ( e = ! 1 === h ( d , ! 0 ) ? null : d . getNextSourceNode ( ! 0 , m , h ) ) ) ) , e && ! 1 === h ( e ) && ( e = null ) ) ; for ( ; e && ! this . _ . end ; ) { this . current = e ; if ( ! this . evaluator || ! 1 !== this . evaluator ( e ) ) { if ( ! b ) return e } else if ( b && this . evaluator ) return ! 1 ; e = e [ C ] ( ! 1 , m , h ) } this . end ( ) ; return this . current = null } function d ( b ) { for ( var c , e = null ; c = a . call ( this , b ) ; ) e = c ; return e } 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 ( e ) { var d , f ; d = e && e . type != CKEDITOR . NODE _ELEMENT && ( f = e . getParent ( ) ) && c ( f ) ; d = a ? d : d || c ( e ) ; 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 ( e ) { b ( e ) ? e = 1 : ( e . type == CKEDITOR . NODE _TEXT && ( e = e . getParent ( ) ) , e = e . $ . offsetWidth <= c ) ; return ! ! ( a ^ e ) } } ; CKEDITOR . dom . walker . nodeType = function ( a , b ) { return function ( c ) { return ! ! ( b ^ c . type == a ) } } ; CKEDITOR . dom . walker . bogus = function ( a ) { function b ( a ) { return ! h ( a ) && ! k ( a ) } return function ( c ) { var e = CKEDITOR . env . needsBrFiller ? c . is && c . is ( "br" ) : c . getText && f . test ( c . getText ( ) ) ; e && ( e = c . getParent ( ) , c = c . getNext ( b ) , e = e . isBlockBoundary ( ) &&
( ! c || c . type == CKEDITOR . NODE _ELEMENT && c . isBlockBoundary ( ) ) ) ; return ! ! ( a ^ e ) } } ; 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)$/ , h = CKEDITOR . dom . walker . whitespaces ( ) , k = CKEDITOR . dom . walker . bookmark ( ) , g = CKEDITOR . dom . walker . temp ( ) , l = function ( a ) { return k ( a ) || h ( 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 = h ( b ) || k ( b ) || g ( b ) ; return ! ! ( a ^ b ) } } ; var v = CKEDITOR . dom . walker . ignored ( ) ; CKEDITOR . dom . walker . empty = function ( a ) { return function ( b ) { for ( var c = 0 , e = b . getChildCount ( ) ; c < e ; ++ c ) if ( ! v ( b . getChild ( c ) ) ) return ! ! a ; return ! a } } ; var e = 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 =
v ( 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 ) && e ( b ) ) ? ! 0 : ! 1 ; return ! ! ( a ^ b ) } } ; CKEDITOR . dom . element . prototype . getBogus = function ( ) { var a = this ; do a = a . getPreviousSourceNode ( ) ; while ( l ( a ) ) ; return a && ( CKEDITOR . env . needsBrFiller ? a . is && a . is ( "br" ) : a . getText && f . test ( a . getText ( ) ) ) ? a : ! 1 } } ) ( ) ;
function ( a ) { return function ( b ) { b = h ( b ) || k ( b ) || g ( b ) ; return ! ! ( a ^ b ) } } ; var u = CKEDITOR . dom . walker . ignored ( ) ; CKEDITOR . dom . walker . empty = function ( a ) { return function ( b ) { for ( var c = 0 , e = b . getChildCount ( ) ; c < e ; ++ c ) if ( ! u ( b . getChild ( c ) ) ) return ! ! a ; return ! a } } ; var e = 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 =
u ( 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 ) && e ( b ) ) ? ! 0 : ! 1 ; return ! ! ( a ^ b ) } } ; CKEDITOR . dom . element . prototype . getBogus = function ( ) { var a = this ; do a = a . getPreviousSourceNode ( ) ; while ( l ( a ) ) ; return a && ( CKEDITOR . env . needsBrFiller ? a . is && a . is ( "br" ) : a . getText && f . test ( a . getText ( ) ) ) ? a : ! 1 } } ) ( ) ;
CKEDITOR . dom . range = function ( a ) { this . endOffset = this . endContainer = this . startOffset = this . startContainer = null ; this . collapsed = ! 0 ; var d = a instanceof CKEDITOR . dom . document ; this . document = d ? a : a . getDocument ( ) ; this . root = d ? a . getBody ( ) : a } ;
( function ( ) { function a ( a ) { a . collapsed = a . startContainer && a . endContainer && a . startContainer . equals ( a . endContainer ) && a . startOffset == a . endOffset } function d ( a , b , c , d , f ) { function h ( a , b , c , e ) { var D = c ? a . getPrevious ( ) : a . getNext ( ) ; if ( e && k ) return D ; l || e ? b . append ( a . clone ( ! 0 , f ) , c ) : ( a . remove ( ) , v && b . append ( a , c ) ) ; return D } function n ( ) { var a , b , c , e = Math . min ( S . length , p . length ) ; for ( a = 0 ; a < e ; a ++ ) if ( b = S [ a ] , c = p [ a ] , ! b . equals ( c ) ) return a ; return a - 1 } function g ( ) { var b = N - 1 , c = C && F && ! m . equals ( B ) ; b < O - 1 || b < q - 1 || c ? ( c ? a . moveToPosition ( B ,
CKEDITOR . POSITION _BEFORE _START ) : q == b + 1 && r ? a . moveToPosition ( p [ b ] , CKEDITOR . POSITION _BEFORE _END ) : a . moveToPosition ( p [ b + 1 ] , CKEDITOR . POSITION _BEFORE _START ) , d && ( b = S [ b + 1 ] ) && b . type == CKEDITOR . NODE _ELEMENT && ( c = CKEDITOR . dom . element . createFromHtml ( '\x3cspan data-cke-bookmark\x3d"1" style\x3d"display:none"\x3e\x26nbsp;\x3c/span\x3e' , a . document ) , c . insertAfter ( b ) , b . mergeSiblings ( ! 1 ) , a . moveToBookmark ( { startNode : c } ) ) ) : a . collapse ( ! 0 ) } a . optimizeBookmark ( ) ; var k = 0 === b , v = 1 == b , l = 2 == b ; b = l || v ; var m = a . startContainer , B = a . endContainer ,
K = a . startOffset , A = a . endOffset , M , r , C , F , w , T ; if ( l && B . type == CKEDITOR . NODE _TEXT && ( m . equals ( B ) || m . type === CKEDITOR . NODE _ELEMENT && m . getFirst ( ) . equals ( B ) ) ) c . append ( a . document . createText ( B . substring ( K , A ) ) ) ; else { B . type == CKEDITOR . NODE _TEXT ? l ? T = ! 0 : B = B . split ( A ) : 0 < B . getChildCount ( ) ? A >= B . getChildCount ( ) ? ( B = B . getChild ( A - 1 ) , r = ! 0 ) : B = B . getChild ( A ) : F = r = ! 0 ; m . type == CKEDITOR . NODE _TEXT ? l ? w = ! 0 : m . split ( K ) : 0 < m . getChildCount ( ) ? 0 === K ? ( m = m . getChild ( K ) , M = ! 0 ) : m = m . getChild ( K - 1 ) : C = M = ! 0 ; for ( var S = m . getParents ( ) , p = B . getParents ( ) , N = n ( ) ,
O = S . length - 1 , q = p . length - 1 , E = c , D , ba , J , da = - 1 , U = N ; U <= O ; U ++ ) { ba = S [ U ] ; J = ba . getNext ( ) ; for ( U != O || ba . equals ( p [ U ] ) && O < q ? b && ( D = E . append ( ba . clone ( 0 , f ) ) ) : M ? h ( ba , E , ! 1 , C ) : w && E . append ( a . document . createText ( ba . substring ( K ) ) ) ; J ; ) { if ( J . equals ( p [ U ] ) ) { da = U ; break } J = h ( J , E ) } E = D } E = c ; for ( U = N ; U <= q ; U ++ ) if ( c = p [ U ] , J = c . getPrevious ( ) , c . equals ( S [ U ] ) ) b && ( E = E . getChild ( 0 ) ) ; else { U != q || c . equals ( S [ U ] ) && q < O ? b && ( D = E . append ( c . clone ( 0 , f ) ) ) : r ? h ( c , E , ! 1 , F ) : T && E . append ( a . document . createText ( c . substring ( 0 , A ) ) ) ; if ( U > da ) for ( ; J ; ) J = h ( J , E , ! 0 ) ; E = D } l ||
( 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 , f ) { function h ( a , b , c , e ) { var E = c ? a . getPrevious ( ) : a . getNext ( ) ; if ( e && k ) return E ; l || e ? b . append ( a . clone ( ! 0 , f ) , c ) : ( a . remove ( ) , u && b . append ( a , c ) ) ; return E } function n ( ) { var a , b , c , e = Math . min ( S . length , p . length ) ; for ( a = 0 ; a < e ; a ++ ) if ( b = S [ a ] , c = p [ a ] , ! b . equals ( c ) ) return a ; return a - 1 } function g ( ) { var b = N - 1 , c = D && B && ! m . equals ( C ) ; b < O - 1 || b < q - 1 || c ? ( c ? a . moveToPosition ( C ,
CKEDITOR . POSITION _BEFORE _START ) : q == b + 1 && r ? a . moveToPosition ( p [ b ] , CKEDITOR . POSITION _BEFORE _END ) : a . moveToPosition ( p [ b + 1 ] , CKEDITOR . POSITION _BEFORE _START ) , d && ( b = S [ b + 1 ] ) && b . type == CKEDITOR . NODE _ELEMENT && ( c = CKEDITOR . dom . element . createFromHtml ( '\x3cspan data-cke-bookmark\x3d"1" style\x3d"display:none"\x3e\x26nbsp;\x3c/span\x3e' , a . document ) , c . insertAfter ( b ) , b . mergeSiblings ( ! 1 ) , a . moveToBookmark ( { startNode : c } ) ) ) : a . collapse ( ! 0 ) } a . optimizeBookmark ( ) ; var k = 0 === b , u = 1 == b , l = 2 == b ; b = l || u ; var m = a . startContainer , C = a . endContainer ,
K = a . startOffset , A = a . endOffset , M , r , D , B , v , T ; if ( l && C . type == CKEDITOR . NODE _TEXT && ( m . equals ( C ) || m . type === CKEDITOR . NODE _ELEMENT && m . getFirst ( ) . equals ( C ) ) ) c . append ( a . document . createText ( C . substring ( K , A ) ) ) ; else { C . type == CKEDITOR . NODE _TEXT ? l ? T = ! 0 : C = C . split ( A ) : 0 < C . getChildCount ( ) ? A >= C . getChildCount ( ) ? ( C = C . getChild ( A - 1 ) , r = ! 0 ) : C = C . getChild ( A ) : B = r = ! 0 ; m . type == CKEDITOR . NODE _TEXT ? l ? v = ! 0 : m . split ( K ) : 0 < m . getChildCount ( ) ? 0 === K ? ( m = m . getChild ( K ) , M = ! 0 ) : m = m . getChild ( K - 1 ) : D = M = ! 0 ; for ( var S = m . getParents ( ) , p = C . getParents ( ) , N = n ( ) ,
O = S . length - 1 , q = p . length - 1 , F = c , E , ba , J , da = - 1 , U = N ; U <= O ; U ++ ) { ba = S [ U ] ; J = ba . getNext ( ) ; for ( U != O || ba . equals ( p [ U ] ) && O < q ? b && ( E = F . append ( ba . clone ( 0 , f ) ) ) : M ? h ( ba , F , ! 1 , D ) : v && F . append ( a . document . createText ( ba . substring ( K ) ) ) ; J ; ) { if ( J . equals ( p [ U ] ) ) { da = U ; break } J = h ( J , F ) } F = E } F = c ; for ( U = N ; U <= q ; U ++ ) if ( c = p [ U ] , J = c . getPrevious ( ) , c . equals ( S [ U ] ) ) b && ( F = F . getChild ( 0 ) ) ; else { U != q || c . equals ( S [ U ] ) && q < O ? b && ( E = F . append ( c . clone ( 0 , f ) ) ) : r ? h ( c , F , ! 1 , B ) : T && F . append ( a . document . createText ( c . substring ( 0 , A ) ) ) ; if ( U > da ) for ( ; J ; ) J = h ( J , F , ! 0 ) ; F = E } l ||
g ( ) } } 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 ( h ) ? ! 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 && v ( a ) && ( b = a ) ; return l ( a ) && ! ( k ( a ) && a . equals ( b ) ) } ) } } var h = { 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 ( ) , g = /^[\t\r\n ]*(?: |\xa0)$/ , l = CKEDITOR . dom . walker . editable ( ) , v = 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 && u ( a ) && ( b = a ) ; return l ( a ) && ! ( k ( a ) && a . equals ( b ) ) } ) } } var h = { 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 ( ) , g = /^[\t\r\n ]*(?: |\xa0)$/ , l = CKEDITOR . dom . walker . editable ( ) , u = 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 , f = this . collapsed , h , n , g , k ; h = this . document . createElement ( "span" ) ; h . data ( "cke-bookmark" , 1 ) ; h . setStyle ( "display" , "none" ) ; h . setHtml ( "\x26nbsp;" ) ; a && ( g = "cke_bm_" + CKEDITOR . tools . getNextNumber ( ) , h . setAttribute ( "id" , g + ( f ? "C" : "S" ) ) ) ; f || ( n = h . clone ( ) , n . setHtml ( "\x26nbsp;" ) , a && n . setAttribute ( "id" , g + "E" ) , k = this . clone ( ) , b ( d ) && ( d = b ( d ) ,
@@ -168,17 +168,17 @@ else if(1>f)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 , f = this . collapsed ; if ( ( ! a || f ) && c && c . type == CKEDITOR . NODE _TEXT ) { if ( d ) if ( d >= c . getLength ( ) ) d = c . getIndex ( ) + 1 , c = c . getParent ( ) ; else { var h = c . split ( d ) , d = c . getIndex ( ) + 1 , c = c . getParent ( ) ; this . startContainer . equals ( this . endContainer ) ? this . setEnd ( h , this . endOffset - this . startOffset ) : c . equals ( this . endContainer ) && ( this . endOffset += 1 ) } else d = c . getIndex ( ) , c = c . getParent ( ) ; this . setStart ( c , d ) ; if ( f ) { this . collapse ( ! 0 ) ; return } } c = this . endContainer ; d = this . endOffset ; b || f || ! c || c . type !=
CKEDITOR . NODE _TEXT || ( d ? ( d >= c . getLength ( ) || c . split ( d ) , d = c . getIndex ( ) + 1 ) : d = c . getIndex ( ) , c = c . getParent ( ) , this . setEnd ( c , d ) ) } , enlarge : function ( a , b ) { function c ( a ) { return a && a . type == CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "contenteditable" ) ? null : a } var d = new RegExp ( /[^\s\ufeff]/ ) ; switch ( a ) { case CKEDITOR . ENLARGE _INLINE : var f = 1 ; case CKEDITOR . ENLARGE _ELEMENT : var h = function ( a , b ) { var c = new CKEDITOR . dom . range ( g ) ; c . setStart ( a , b ) ; c . setEndAt ( g , CKEDITOR . POSITION _BEFORE _END ) ; var c = new CKEDITOR . dom . walker ( c ) , e ; for ( c . guard =
function ( a ) { return ! ( a . type == CKEDITOR . NODE _ELEMENT && a . isBlockBoundary ( ) ) } ; e = c . next ( ) ; ) { if ( e . type != CKEDITOR . NODE _TEXT ) return ! 1 ; M = e != a ? e . getText ( ) : e . substring ( b ) ; if ( d . test ( M ) ) return ! 1 } return ! 0 } ; if ( this . collapsed ) break ; var n = this . getCommonAncestor ( ) , g = this . root , k , v , l , m , B , K = ! 1 , A , M ; A = this . startContainer ; var r = this . startOffset ; A . type == CKEDITOR . NODE _TEXT ? ( r && ( A = ! CKEDITOR . tools . trim ( A . substring ( 0 , r ) ) . length && A , K = ! ! A ) , A && ( ( m = A . getPrevious ( ) ) || ( l = A . getParent ( ) ) ) ) : ( r && ( m = A . getChild ( r - 1 ) || A . getLast ( ) ) , m || ( l = A ) ) ;
for ( l = c ( l ) ; l || m ; ) { if ( l && ! m ) { ! B && l . equals ( n ) && ( B = ! 0 ) ; if ( f ? l . isBlockBoundary ( ) : ! g . contains ( l ) ) break ; K && "inline" == l . getComputedStyle ( "display" ) || ( K = ! 1 , B ? k = l : this . setStartBefore ( l ) ) ; m = l . getPrevious ( ) } for ( ; m ; ) if ( A = ! 1 , m . type == CKEDITOR . NODE _COMMENT ) m = m . getPrevious ( ) ; else { if ( m . type == CKEDITOR . NODE _TEXT ) M = m . getText ( ) , d . test ( M ) && ( m = null ) , A = /[\s\ufeff]$/ . test ( M ) ; else if ( ( m . $ . offsetWidth > ( CKEDITOR . env . webkit ? 1 : 0 ) || b && m . is ( "br" ) ) && ! m . data ( "cke-bookmark" ) ) if ( K && CKEDITOR . dtd . $removeEmpty [ m . getName ( ) ] ) { M = m . getText ( ) ;
if ( d . test ( M ) ) m = null ; else for ( var r = m . $ . getElementsByTagName ( "*" ) , C = 0 , F ; F = r [ C ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ F . nodeName . toLowerCase ( ) ] ) { m = null ; break } m && ( A = ! ! M . length ) } else m = null ; A && ( K ? B ? k = l : l && this . setStartBefore ( l ) : K = ! 0 ) ; if ( m ) { A = m . getPrevious ( ) ; if ( ! l && ! A ) { l = m ; m = null ; break } m = A } else l = null } l && ( l = c ( l . getParent ( ) ) ) } A = this . endContainer ; r = this . endOffset ; l = m = null ; B = K = ! 1 ; A . type == CKEDITOR . NODE _TEXT ? CKEDITOR . tools . trim ( A . substring ( r ) ) . length ? K = ! 0 : ( K = ! A . getLength ( ) , r == A . getLength ( ) ? ( m = A . getNext ( ) ) || ( l = A . getParent ( ) ) :
h ( A , r ) && ( l = A . getParent ( ) ) ) : ( m = A . getChild ( r ) ) || ( l = A ) ; for ( ; l || m ; ) { if ( l && ! m ) { ! B && l . equals ( n ) && ( B = ! 0 ) ; if ( f ? l . isBlockBoundary ( ) : ! g . contains ( l ) ) break ; K && "inline" == l . getComputedStyle ( "display" ) || ( K = ! 1 , B ? v = l : l && this . setEndAfter ( l ) ) ; m = l . getNext ( ) } for ( ; m ; ) { A = ! 1 ; if ( m . type == CKEDITOR . NODE _TEXT ) M = m . getText ( ) , h ( m , 0 ) || ( m = null ) , A = /^[\s\ufeff]/ . test ( M ) ; else if ( m . type == CKEDITOR . NODE _ELEMENT ) { if ( ( 0 < m . $ . offsetWidth || b && m . is ( "br" ) ) && ! m . data ( "cke-bookmark" ) ) if ( K && CKEDITOR . dtd . $removeEmpty [ m . getName ( ) ] ) { M = m . getText ( ) ; if ( d . test ( M ) ) m =
null ; else for ( r = m . $ . getElementsByTagName ( "*" ) , C = 0 ; F = r [ C ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ F . nodeName . toLowerCase ( ) ] ) { m = null ; break } m && ( A = ! ! M . length ) } else m = null } else A = 1 ; A && K && ( B ? v = l : this . setEndAfter ( l ) ) ; if ( m ) { A = m . getNext ( ) ; if ( ! l && ! A ) { l = m ; m = null ; break } m = A } else l = null } l && ( l = c ( l . getParent ( ) ) ) } k && v && ( n = k . contains ( v ) ? v : k , this . setStartBefore ( n ) , this . setEndAfter ( n ) ) ; break ; case CKEDITOR . ENLARGE _BLOCK _CONTENTS : case CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : l = new CKEDITOR . dom . range ( this . root ) ; g = this . root ; l . setStartAt ( g ,
CKEDITOR . POSITION _AFTER _START ) ; l . setEnd ( this . startContainer , this . startOffset ) ; l = new CKEDITOR . dom . walker ( l ) ; var w , T , S = CKEDITOR . dom . walker . blockBoundary ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? { br : 1 } : null ) , p = null , N = function ( a ) { if ( a . type == CKEDITOR . NODE _ELEMENT && "false" == a . getAttribute ( "contenteditable" ) ) if ( p ) { if ( p . equals ( a ) ) { p = null ; return } } else p = a ; else if ( p ) return ; var b = S ( a ) ; b || ( w = a ) ; return b } , f = function ( a ) { var b = N ( a ) ; ! b && a . is && a . is ( "br" ) && ( T = a ) ; return b } ; l . guard = N ; l = l . lastBackward ( ) ; w = w || g ; this . setStartAt ( w ,
! w . is ( "br" ) && ( ! l && this . checkStartOfBlock ( ) || l && w . contains ( l ) ) ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _AFTER _END ) ; if ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ) { l = this . clone ( ) ; l = new CKEDITOR . dom . walker ( l ) ; var O = CKEDITOR . dom . walker . whitespaces ( ) , q = CKEDITOR . dom . walker . bookmark ( ) ; l . evaluator = function ( a ) { return ! O ( a ) && ! q ( a ) } ; if ( ( l = l . previous ( ) ) && l . type == CKEDITOR . NODE _ELEMENT && l . is ( "br" ) ) break } l = this . clone ( ) ; l . collapse ( ) ; l . setEndAt ( g , CKEDITOR . POSITION _BEFORE _END ) ; l = new CKEDITOR . dom . walker ( l ) ; l . guard =
a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? f : N ; w = p = T = null ; l = l . lastForward ( ) ; w = w || g ; this . setEndAt ( w , ! l && this . checkEndOfBlock ( ) || l && w . contains ( l ) ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _BEFORE _START ) ; T && this . setEndAfter ( T ) } } , shrink : function ( a , b , c ) { var d = "boolean" === typeof c ? c : c && "boolean" === typeof c . shrinkOnBlockBoundary ? c . shrinkOnBlockBoundary : ! 0 , f = c && c . skipBogus ; if ( ! this . collapsed ) { a = a || CKEDITOR . SHRINK _TEXT ; var h = this . clone ( ) , n = this . startContainer , g = this . endContainer , k = this . startOffset , l = this . endOffset ,
v = c = 1 ; n && n . type == CKEDITOR . NODE _TEXT && ( k ? k >= n . getLength ( ) ? h . setStartAfter ( n ) : ( h . setStartBefore ( n ) , c = 0 ) : h . setStartBefore ( n ) ) ; g && g . type == CKEDITOR . NODE _TEXT && ( l ? l >= g . getLength ( ) ? h . setEndAfter ( g ) : ( h . setEndAfter ( g ) , v = 0 ) : h . setEndBefore ( g ) ) ; var h = new CKEDITOR . dom . walker ( h ) , m = CKEDITOR . dom . walker . bookmark ( ) , B = CKEDITOR . dom . walker . bogus ( ) ; h . evaluator = function ( b ) { return b . type == ( a == CKEDITOR . SHRINK _ELEMENT ? CKEDITOR . NODE _ELEMENT : CKEDITOR . NODE _TEXT ) } ; var K ; h . guard = function ( b , c ) { if ( f && B ( b ) || m ( b ) ) return ! 0 ; if ( a == CKEDITOR . SHRINK _ELEMENT &&
b . type == CKEDITOR . NODE _TEXT || c && b . equals ( K ) || ! 1 === d && b . type == CKEDITOR . NODE _ELEMENT && b . isBlockBoundary ( ) || b . type == CKEDITOR . NODE _ELEMENT && b . hasAttribute ( "contenteditable" ) ) return ! 1 ; c || b . type != CKEDITOR . NODE _ELEMENT || ( K = b ) ; return ! 0 } ; c && ( n = h [ a == CKEDITOR . SHRINK _ELEMENT ? "lastForward" : "next" ] ( ) ) && this . setStartAt ( n , b ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _BEFORE _START ) ; v && ( h . reset ( ) , ( h = h [ a == CKEDITOR . SHRINK _ELEMENT ? "lastBackward" : "previous" ] ( ) ) && this . setEndAt ( h , b ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _AFTER _END ) ) ;
return ! ( ! c && ! v ) } } , 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 ,
function ( a ) { return ! ( a . type == CKEDITOR . NODE _ELEMENT && a . isBlockBoundary ( ) ) } ; e = c . next ( ) ; ) { if ( e . type != CKEDITOR . NODE _TEXT ) return ! 1 ; M = e != a ? e . getText ( ) : e . substring ( b ) ; if ( d . test ( M ) ) return ! 1 } return ! 0 } ; if ( this . collapsed ) break ; var n = this . getCommonAncestor ( ) , g = this . root , k , u , l , m , C , K = ! 1 , A , M ; A = this . startContainer ; var r = this . startOffset ; A . type == CKEDITOR . NODE _TEXT ? ( r && ( A = ! CKEDITOR . tools . trim ( A . substring ( 0 , r ) ) . length && A , K = ! ! A ) , A && ( ( m = A . getPrevious ( ) ) || ( l = A . getParent ( ) ) ) ) : ( r && ( m = A . getChild ( r - 1 ) || A . getLast ( ) ) , m || ( l = A ) ) ;
for ( l = c ( l ) ; l || m ; ) { if ( l && ! m ) { ! C && l . equals ( n ) && ( C = ! 0 ) ; if ( f ? l . isBlockBoundary ( ) : ! g . contains ( l ) ) break ; K && "inline" == l . getComputedStyle ( "display" ) || ( K = ! 1 , C ? k = l : this . setStartBefore ( l ) ) ; m = l . getPrevious ( ) } for ( ; m ; ) if ( A = ! 1 , m . type == CKEDITOR . NODE _COMMENT ) m = m . getPrevious ( ) ; else { if ( m . type == CKEDITOR . NODE _TEXT ) M = m . getText ( ) , d . test ( M ) && ( m = null ) , A = /[\s\ufeff]$/ . test ( M ) ; else if ( ( m . $ . offsetWidth > ( CKEDITOR . env . webkit ? 1 : 0 ) || b && m . is ( "br" ) ) && ! m . data ( "cke-bookmark" ) ) if ( K && CKEDITOR . dtd . $removeEmpty [ m . getName ( ) ] ) { M = m . getText ( ) ;
if ( d . test ( M ) ) m = null ; else for ( var r = m . $ . getElementsByTagName ( "*" ) , D = 0 , B ; B = r [ D ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ B . nodeName . toLowerCase ( ) ] ) { m = null ; break } m && ( A = ! ! M . length ) } else m = null ; A && ( K ? C ? k = l : l && this . setStartBefore ( l ) : K = ! 0 ) ; if ( m ) { A = m . getPrevious ( ) ; if ( ! l && ! A ) { l = m ; m = null ; break } m = A } else l = null } l && ( l = c ( l . getParent ( ) ) ) } A = this . endContainer ; r = this . endOffset ; l = m = null ; C = K = ! 1 ; A . type == CKEDITOR . NODE _TEXT ? CKEDITOR . tools . trim ( A . substring ( r ) ) . length ? K = ! 0 : ( K = ! A . getLength ( ) , r == A . getLength ( ) ? ( m = A . getNext ( ) ) || ( l = A . getParent ( ) ) :
h ( A , r ) && ( l = A . getParent ( ) ) ) : ( m = A . getChild ( r ) ) || ( l = A ) ; for ( ; l || m ; ) { if ( l && ! m ) { ! C && l . equals ( n ) && ( C = ! 0 ) ; if ( f ? l . isBlockBoundary ( ) : ! g . contains ( l ) ) break ; K && "inline" == l . getComputedStyle ( "display" ) || ( K = ! 1 , C ? u = l : l && this . setEndAfter ( l ) ) ; m = l . getNext ( ) } for ( ; m ; ) { A = ! 1 ; if ( m . type == CKEDITOR . NODE _TEXT ) M = m . getText ( ) , h ( m , 0 ) || ( m = null ) , A = /^[\s\ufeff]/ . test ( M ) ; else if ( m . type == CKEDITOR . NODE _ELEMENT ) { if ( ( 0 < m . $ . offsetWidth || b && m . is ( "br" ) ) && ! m . data ( "cke-bookmark" ) ) if ( K && CKEDITOR . dtd . $removeEmpty [ m . getName ( ) ] ) { M = m . getText ( ) ; if ( d . test ( M ) ) m =
null ; else for ( r = m . $ . getElementsByTagName ( "*" ) , D = 0 ; B = r [ D ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ B . nodeName . toLowerCase ( ) ] ) { m = null ; break } m && ( A = ! ! M . length ) } else m = null } else A = 1 ; A && K && ( C ? u = l : this . setEndAfter ( l ) ) ; if ( m ) { A = m . getNext ( ) ; if ( ! l && ! A ) { l = m ; m = null ; break } m = A } else l = null } l && ( l = c ( l . getParent ( ) ) ) } k && u && ( n = k . contains ( u ) ? u : k , this . setStartBefore ( n ) , this . setEndAfter ( n ) ) ; break ; case CKEDITOR . ENLARGE _BLOCK _CONTENTS : case CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : l = new CKEDITOR . dom . range ( this . root ) ; g = this . root ; l . setStartAt ( g ,
CKEDITOR . POSITION _AFTER _START ) ; l . setEnd ( this . startContainer , this . startOffset ) ; l = new CKEDITOR . dom . walker ( l ) ; var v , T , S = CKEDITOR . dom . walker . blockBoundary ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? { br : 1 } : null ) , p = null , N = function ( a ) { if ( a . type == CKEDITOR . NODE _ELEMENT && "false" == a . getAttribute ( "contenteditable" ) ) if ( p ) { if ( p . equals ( a ) ) { p = null ; return } } else p = a ; else if ( p ) return ; var b = S ( a ) ; b || ( v = a ) ; return b } , f = function ( a ) { var b = N ( a ) ; ! b && a . is && a . is ( "br" ) && ( T = a ) ; return b } ; l . guard = N ; l = l . lastBackward ( ) ; v = v || g ; this . setStartAt ( v ,
! v . is ( "br" ) && ( ! l && this . checkStartOfBlock ( ) || l && v . contains ( l ) ) ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _AFTER _END ) ; if ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ) { l = this . clone ( ) ; l = new CKEDITOR . dom . walker ( l ) ; var O = CKEDITOR . dom . walker . whitespaces ( ) , q = CKEDITOR . dom . walker . bookmark ( ) ; l . evaluator = function ( a ) { return ! O ( a ) && ! q ( a ) } ; if ( ( l = l . previous ( ) ) && l . type == CKEDITOR . NODE _ELEMENT && l . is ( "br" ) ) break } l = this . clone ( ) ; l . collapse ( ) ; l . setEndAt ( g , CKEDITOR . POSITION _BEFORE _END ) ; l = new CKEDITOR . dom . walker ( l ) ; l . guard =
a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? f : N ; v = p = T = null ; l = l . lastForward ( ) ; v = v || g ; this . setEndAt ( v , ! l && this . checkEndOfBlock ( ) || l && v . contains ( l ) ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _BEFORE _START ) ; T && this . setEndAfter ( T ) } } , shrink : function ( a , b , c ) { var d = "boolean" === typeof c ? c : c && "boolean" === typeof c . shrinkOnBlockBoundary ? c . shrinkOnBlockBoundary : ! 0 , f = c && c . skipBogus ; if ( ! this . collapsed ) { a = a || CKEDITOR . SHRINK _TEXT ; var h = this . clone ( ) , n = this . startContainer , g = this . endContainer , k = this . startOffset , l = this . endOffset ,
u = c = 1 ; n && n . type == CKEDITOR . NODE _TEXT && ( k ? k >= n . getLength ( ) ? h . setStartAfter ( n ) : ( h . setStartBefore ( n ) , c = 0 ) : h . setStartBefore ( n ) ) ; g && g . type == CKEDITOR . NODE _TEXT && ( l ? l >= g . getLength ( ) ? h . setEndAfter ( g ) : ( h . setEndAfter ( g ) , u = 0 ) : h . setEndBefore ( g ) ) ; var h = new CKEDITOR . dom . walker ( h ) , m = CKEDITOR . dom . walker . bookmark ( ) , C = CKEDITOR . dom . walker . bogus ( ) ; h . evaluator = function ( b ) { return b . type == ( a == CKEDITOR . SHRINK _ELEMENT ? CKEDITOR . NODE _ELEMENT : CKEDITOR . NODE _TEXT ) } ; var K ; h . guard = function ( b , c ) { if ( f && C ( b ) || m ( b ) ) return ! 0 ; if ( a == CKEDITOR . SHRINK _ELEMENT &&
b . type == CKEDITOR . NODE _TEXT || c && b . equals ( K ) || ! 1 === d && b . type == CKEDITOR . NODE _ELEMENT && b . isBlockBoundary ( ) || b . type == CKEDITOR . NODE _ELEMENT && b . hasAttribute ( "contenteditable" ) ) return ! 1 ; c || b . type != CKEDITOR . NODE _ELEMENT || ( K = b ) ; return ! 0 } ; c && ( n = h [ a == CKEDITOR . SHRINK _ELEMENT ? "lastForward" : "next" ] ( ) ) && this . setStartAt ( n , b ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _BEFORE _START ) ; u && ( h . reset ( ) , ( h = h [ a == CKEDITOR . SHRINK _ELEMENT ? "lastBackward" : "previous" ] ( ) ) && this . setEndAt ( h , b ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _AFTER _END ) ) ;
return ! ( ! c && ! u ) } } , 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 ,
@@ -191,7 +191,7 @@ this.root);c=this.clone();c.collapse(!0);c.setStartAt(a.block||a.blockLimit,CKED
a = new CKEDITOR . dom . walker ( c ) ; a . evaluator = b ( ) ; return a . checkForward ( ) } , getPreviousNode : function ( a , b , c ) { var d = this . clone ( ) ; d . collapse ( 1 ) ; d . setStartAt ( c || this . root , CKEDITOR . POSITION _AFTER _START ) ; c = new CKEDITOR . dom . walker ( d ) ; c . evaluator = a ; c . guard = b ; return c . previous ( ) } , getNextNode : function ( a , b , c ) { var d = this . clone ( ) ; d . collapse ( ) ; d . setEndAt ( c || this . root , CKEDITOR . POSITION _BEFORE _END ) ; c = new CKEDITOR . dom . walker ( d ) ; c . evaluator = a ; c . guard = b ; return c . next ( ) } , checkReadOnly : function ( ) { function a ( b , c ) { for ( ; b ; ) { if ( b . type ==
CKEDITOR . NODE _ELEMENT ) { if ( "false" == b . getAttribute ( "contentEditable" ) && ! b . data ( "cke-editable" ) ) return 0 ; if ( b . is ( "html" ) || "true" == b . getAttribute ( "contentEditable" ) && ( b . contains ( c ) || b . equals ( c ) ) ) break } b = b . getParent ( ) } return 1 } return function ( ) { var b = this . startContainer , c = this . endContainer ; return ! ( a ( b , c ) && a ( c , b ) ) } } ( ) , moveToElementEditablePosition : function ( a , b ) { if ( a . type == CKEDITOR . NODE _ELEMENT && ! a . isEditable ( ! 1 ) ) return this . moveToPosition ( a , b ? CKEDITOR . POSITION _AFTER _END : CKEDITOR . POSITION _BEFORE _START ) ,
! 0 ; for ( var c = 0 ; a ; ) { if ( a . type == CKEDITOR . NODE _TEXT ) { b && this . endContainer && this . checkEndOfBlock ( ) && g . test ( a . getText ( ) ) ? this . moveToPosition ( a , CKEDITOR . POSITION _BEFORE _START ) : this . moveToPosition ( a , b ? CKEDITOR . POSITION _AFTER _END : CKEDITOR . POSITION _BEFORE _START ) ; c = 1 ; break } if ( a . type == CKEDITOR . NODE _ELEMENT ) if ( a . isEditable ( ) ) this . moveToPosition ( a , b ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _AFTER _START ) , c = 1 ; else if ( b && a . is ( "br" ) && this . endContainer && this . checkEndOfBlock ( ) ) this . moveToPosition ( a , CKEDITOR . POSITION _BEFORE _START ) ;
else if ( "false" == a . getAttribute ( "contenteditable" ) && a . is ( CKEDITOR . dtd . $block ) ) return this . setStartBefore ( a ) , this . setEndAfter ( a ) , ! 0 ; var d = a , f = c , h = void 0 ; d . type == CKEDITOR . NODE _ELEMENT && d . isEditable ( ! 1 ) && ( h = d [ b ? "getLast" : "getFirst" ] ( v ) ) ; f || h || ( h = d [ b ? "getPrevious" : "getNext" ] ( v ) ) ; a = h } return ! ! c } , moveToClosestEditablePosition : function ( a , b ) { var c , d = 0 , f , h , n = [ CKEDITOR . POSITION _AFTER _END , CKEDITOR . POSITION _BEFORE _START ] ; a ? ( c = new CKEDITOR . dom . range ( this . root ) , c . moveToPosition ( a , n [ b ? 0 : 1 ] ) ) : c = this . clone ( ) ; if ( a &&
else if ( "false" == a . getAttribute ( "contenteditable" ) && a . is ( CKEDITOR . dtd . $block ) ) return this . setStartBefore ( a ) , this . setEndAfter ( a ) , ! 0 ; var d = a , f = c , h = void 0 ; d . type == CKEDITOR . NODE _ELEMENT && d . isEditable ( ! 1 ) && ( h = d [ b ? "getLast" : "getFirst" ] ( u ) ) ; f || h || ( h = d [ b ? "getPrevious" : "getNext" ] ( u ) ) ; a = h } return ! ! c } , moveToClosestEditablePosition : function ( a , b ) { var c , d = 0 , f , h , n = [ CKEDITOR . POSITION _AFTER _END , CKEDITOR . POSITION _BEFORE _START ] ; a ? ( c = new CKEDITOR . dom . range ( this . root ) , c . moveToPosition ( a , n [ b ? 0 : 1 ] ) ) : c = this . clone ( ) ; if ( a &&
! a . is ( CKEDITOR . dtd . $block ) ) d = 1 ; else if ( f = c [ b ? "getNextEditableNode" : "getPreviousEditableNode" ] ( ) ) d = 1 , ( h = f . type == CKEDITOR . NODE _ELEMENT ) && f . is ( CKEDITOR . dtd . $block ) && "false" == f . getAttribute ( "contenteditable" ) ? ( c . setStartAt ( f , CKEDITOR . POSITION _BEFORE _START ) , c . setEndAt ( f , CKEDITOR . POSITION _AFTER _END ) ) : ! CKEDITOR . env . needsBrFiller && h && f . is ( CKEDITOR . dom . walker . validEmptyBlockContainers ) ? ( c . setEnd ( f , 0 ) , c . collapse ( ) ) : c . moveToPosition ( f , n [ b ? 1 : 0 ] ) ; d && this . moveToRange ( c ) ; return ! ! d } , moveToElementEditStart : function ( a ) { return this . moveToElementEditablePosition ( a ) } ,
moveToElementEditEnd : function ( a ) { return this . moveToElementEditablePosition ( a , ! 0 ) } , getEnclosedNode : function ( ) { var a = this . clone ( ) ; a . optimize ( ) ; if ( a . startContainer . type != CKEDITOR . NODE _ELEMENT || a . endContainer . type != CKEDITOR . NODE _ELEMENT ) return null ; var a = new CKEDITOR . dom . walker ( a ) , b = CKEDITOR . dom . walker . bookmark ( ! 1 , ! 0 ) , c = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ; a . evaluator = function ( a ) { return c ( a ) && b ( a ) } ; var d = a . next ( ) ; a . reset ( ) ; return d && d . equals ( a . previous ( ) ) ? d : null } , getTouchedStartNode : function ( ) { var a = this . startContainer ;
return this . collapsed || a . type != CKEDITOR . NODE _ELEMENT ? a : a . getChild ( this . startOffset ) || a } , getTouchedEndNode : function ( ) { var a = this . endContainer ; return this . collapsed || a . type != CKEDITOR . NODE _ELEMENT ? a : a . getChild ( this . endOffset - 1 ) || a } , getNextEditableNode : f ( ) , getPreviousEditableNode : f ( 1 ) , _getTableElement : function ( a ) { a = a || { td : 1 , th : 1 , tr : 1 , tbody : 1 , thead : 1 , tfoot : 1 , table : 1 } ; var b = this . getTouchedStartNode ( ) , c = this . getTouchedEndNode ( ) , d = b . getAscendant ( "table" , ! 0 ) , c = c . getAscendant ( "table" , ! 0 ) ; return d && ! this . root . contains ( d ) ?
@@ -207,53 +207,53 @@ d.endNode.equals(c),g&&k&&f.push(c);return f}};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 , f , h ) { a : { null == h && ( h = d ( f ) ) ; for ( var g ; g = h . shift ( ) ; ) if ( g . getDtd ( ) . p ) { h = { element : g , remaining : h } ; break a } h = null } if ( ! h ) return 0 ; if ( ( g = CKEDITOR . filter . instances [ h . element . data ( "cke-filter" ) ] ) && ! g . check ( c ) ) return b ( a ,
c , f , h . remaining ) ; c = new CKEDITOR . dom . range ( h . element ) ; c . selectNodeContents ( h . element ) ; c = c . createIterator ( ) ; c . enlargeBr = a . enlargeBr ; c . enforceRealBlocks = a . enforceRealBlocks ; c . activeFilter = c . filter = g ; a . _ . nestedEditable = { element : h . element , container : f , remaining : h . 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 ]+$/ , h = CKEDITOR . dom . walker . bookmark ( ! 1 , ! 0 ) , k = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ,
g = function ( a ) { return h ( a ) && k ( a ) } , l = { dd : 1 , dt : 1 , li : 1 } ; a . prototype = { getNextParagraph : function ( a ) { var d , k , t , z , G ; 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 u = this . range . clone ( ) ; k = u . startPath ( ) ; var n = u . endPath ( ) , L = ! u . collapsed && c ( u , k . block ) , y = ! u . collapsed && c ( u , n . block , 1 ) ; u . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 ) ; L && u . setStartAt ( k . block , CKEDITOR . POSITION _BEFORE _END ) ; y && u . setEndAt ( n . block , CKEDITOR . POSITION _AFTER _START ) ; k = u . endContainer . hasAscendant ( "pre" , ! 0 ) || u . startContainer . hasAscendant ( "pre" , ! 0 ) ; u . enlarge ( this . forceBrBreak && ! k || ! this . enlargeBr ? CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : CKEDITOR . ENLARGE _BLOCK _CONTENTS ) ;
u . collapsed || ( k = new CKEDITOR . dom . walker ( u . clone ( ) ) , n = CKEDITOR . dom . walker . bookmark ( ! 0 , ! 0 ) , k . evaluator = n , this . _ . nextNode = k . next ( ) , k = new CKEDITOR . dom . walker ( u . clone ( ) ) , k . evaluator = n , k = k . previous ( ) , this . _ . lastNode = k . getNextSourceNode ( ! 0 , null , u . root ) , this . _ . lastNode && this . _ . lastNode . type == CKEDITOR . NODE _TEXT && ! CKEDITOR . tools . trim ( this . _ . lastNode . getText ( ) ) && this . _ . lastNode . getParent ( ) . isBlockBoundary ( ) && ( n = this . range . clone ( ) , n . moveToPosition ( this . _ . lastNode , CKEDITOR . POSITION _AFTER _END ) , n . checkEndOfBlock ( ) &&
( n = new CKEDITOR . dom . elementPath ( n . endContainer , n . root ) , this . _ . lastNode = ( n . block || n . blockLimit ) . getNextSourceNode ( ! 0 ) ) ) , this . _ . lastNode && u . root . contains ( this . _ . lastNode ) || ( this . _ . lastNode = this . _ . docEndMarker = u . document . createText ( "" ) , this . _ . lastNode . insertAfter ( k ) ) , u = null ) ; this . _ . started = 1 ; k = u } n = this . _ . nextNode ; u = this . _ . lastNode ; for ( this . _ . nextNode = null ; n ; ) { var L = 0 , y = n . hasAscendant ( "pre" ) , H = n . type != CKEDITOR . NODE _ELEMENT , I = 0 ; if ( H ) n . type == CKEDITOR . NODE _TEXT && f . test ( n . getText ( ) ) && ( H = 0 ) ; else { var m = n . getName ( ) ;
if ( CKEDITOR . dtd . $block [ m ] && "false" == n . getAttribute ( "contenteditable" ) ) { d = n ; b ( this , a , d ) ; break } else if ( n . isBlockBoundary ( this . forceBrBreak && ! y && { br : 1 } ) ) { if ( "br" == m ) H = 1 ; else if ( ! k && ! n . getChildCount ( ) && "hr" != m ) { d = n ; t = n . equals ( u ) ; break } k && ( k . setEndAt ( n , CKEDITOR . POSITION _BEFORE _START ) , "br" != m && ( this . _ . nextNode = n ) ) ; L = 1 } else { if ( n . getFirst ( ) ) { k || ( k = this . range . clone ( ) , k . setStartAt ( n , CKEDITOR . POSITION _BEFORE _START ) ) ; n = n . getFirst ( ) ; continue } H = 1 } } H && ! k && ( k = this . range . clone ( ) , k . setStartAt ( n , CKEDITOR . POSITION _BEFORE _START ) ) ;
t = ( ! L || H ) && n . equals ( u ) ; if ( k && ! L ) for ( ; ! n . getNext ( g ) && ! t ; ) { m = n . getParent ( ) ; if ( m . isBlockBoundary ( this . forceBrBreak && ! y && { br : 1 } ) ) { L = 1 ; H = 0 ; t || m . equals ( u ) ; k . setEndAt ( m , CKEDITOR . POSITION _BEFORE _END ) ; break } n = m ; H = 1 ; t = n . equals ( u ) ; I = 1 } H && k . setEndAt ( n , CKEDITOR . POSITION _AFTER _END ) ; n = this . _getNextSourceNode ( n , I , u ) ; if ( ( t = ! n ) || 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 ) ; n = d . blockLimit ; L = { div : 1 , th : 1 , td : 1 } ;
d = d . block ; ! d && n && ! this . enforceRealBlocks && L [ n . getName ( ) ] && k . checkStartOfBlock ( ) && k . checkEndOfBlock ( ) && ! n . equals ( k . root ) ? d = n : ! d || this . enforceRealBlocks && d . is ( l ) ? ( d = this . range . document . createElement ( a ) , k . extractContents ( ) . appendTo ( d ) , d . trim ( ) , k . insertNode ( d ) , z = G = ! 0 ) : "li" != d . getName ( ) ? k . checkStartOfBlock ( ) && k . checkEndOfBlock ( ) || ( d = d . clone ( ! 1 ) , k . extractContents ( ) . appendTo ( d ) , d . trim ( ) , G = k . splitBlock ( ) , z = ! G . wasStartOfBlock , G = ! G . wasEndOfBlock , k . insertNode ( d ) ) : t || ( this . _ . nextNode = d . equals ( u ) ? null : this . _getNextSourceNode ( k . getBoundaryNodes ( ) . endNode ,
1 , u ) ) } z && ( z = d . getPrevious ( ) ) && z . type == CKEDITOR . NODE _ELEMENT && ( "br" == z . getName ( ) ? z . remove ( ) : z . getLast ( ) && "br" == z . getLast ( ) . $ . nodeName . toLowerCase ( ) && z . getLast ( ) . remove ( ) ) ; G && ( z = d . getLast ( ) ) && z . type == CKEDITOR . NODE _ELEMENT && "br" == z . getName ( ) && ( ! CKEDITOR . env . needsBrFiller || z . getPrevious ( h ) || z . getNext ( h ) ) && z . remove ( ) ; this . _ . nextNode || ( this . _ . nextNode = t || d . equals ( u ) || ! u ? null : this . _getNextSourceNode ( d , 1 , u ) ) ; return d } , _getNextSourceNode : function ( a , b , c ) { function d ( a ) { return ! ( a . equals ( c ) || a . equals ( f ) ) } var f =
g = function ( a ) { return h ( a ) && k ( a ) } , l = { dd : 1 , dt : 1 , li : 1 } ; a . prototype = { getNextParagraph : function ( a ) { var d , k , w , z , G ; a = a || "p" ; if ( this . _ . nestedEditable ) { if ( d = this . _ . nestedEditable . iterator . getNextParagraph ( a ) ) return this . activeFilter = this . _ . nestedEditable . iterator . activeFilter , d ; this . activeFilter = this . filter ; if ( b ( this , a , this . _ . nestedEditable . container , this . _ . nestedEditable . remaining ) ) return this . activeFilter = this . _ . nestedEditable . iterator . activeFilter , this . _ . nestedEditable . iterator . getNextParagraph ( a ) ; this . _ . nestedEditable =
null } if ( ! this . range . root . getDtd ( ) [ a ] ) return null ; if ( ! this . _ . started ) { var t = this . range . clone ( ) ; k = t . startPath ( ) ; var n = t . endPath ( ) , L = ! t . collapsed && c ( t , k . block ) , y = ! t . collapsed && c ( t , n . block , 1 ) ; t . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 ) ; L && t . setStartAt ( k . block , CKEDITOR . POSITION _BEFORE _END ) ; y && t . setEndAt ( n . block , CKEDITOR . POSITION _AFTER _START ) ; k = t . endContainer . hasAscendant ( "pre" , ! 0 ) || t . startContainer . hasAscendant ( "pre" , ! 0 ) ; t . enlarge ( this . forceBrBreak && ! k || ! this . enlargeBr ? CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : CKEDITOR . ENLARGE _BLOCK _CONTENTS ) ;
t . collapsed || ( k = new CKEDITOR . dom . walker ( t . clone ( ) ) , n = CKEDITOR . dom . walker . bookmark ( ! 0 , ! 0 ) , k . evaluator = n , this . _ . nextNode = k . next ( ) , k = new CKEDITOR . dom . walker ( t . clone ( ) ) , k . evaluator = n , k = k . previous ( ) , this . _ . lastNode = k . getNextSourceNode ( ! 0 , null , t . root ) , this . _ . lastNode && this . _ . lastNode . type == CKEDITOR . NODE _TEXT && ! CKEDITOR . tools . trim ( this . _ . lastNode . getText ( ) ) && this . _ . lastNode . getParent ( ) . isBlockBoundary ( ) && ( n = this . range . clone ( ) , n . moveToPosition ( this . _ . lastNode , CKEDITOR . POSITION _AFTER _END ) , n . checkEndOfBlock ( ) &&
( n = new CKEDITOR . dom . elementPath ( n . endContainer , n . root ) , this . _ . lastNode = ( n . block || n . blockLimit ) . getNextSourceNode ( ! 0 ) ) ) , this . _ . lastNode && t . root . contains ( this . _ . lastNode ) || ( this . _ . lastNode = this . _ . docEndMarker = t . document . createText ( "" ) , this . _ . lastNode . insertAfter ( k ) ) , t = null ) ; this . _ . started = 1 ; k = t } n = this . _ . nextNode ; t = this . _ . lastNode ; for ( this . _ . nextNode = null ; n ; ) { var L = 0 , y = n . hasAscendant ( "pre" ) , H = n . type != CKEDITOR . NODE _ELEMENT , I = 0 ; if ( H ) n . type == CKEDITOR . NODE _TEXT && f . test ( n . getText ( ) ) && ( H = 0 ) ; else { var m = n . getName ( ) ;
if ( CKEDITOR . dtd . $block [ m ] && "false" == n . getAttribute ( "contenteditable" ) ) { d = n ; b ( this , a , d ) ; break } else if ( n . isBlockBoundary ( this . forceBrBreak && ! y && { br : 1 } ) ) { if ( "br" == m ) H = 1 ; else if ( ! k && ! n . getChildCount ( ) && "hr" != m ) { d = n ; w = n . equals ( t ) ; break } k && ( k . setEndAt ( n , CKEDITOR . POSITION _BEFORE _START ) , "br" != m && ( this . _ . nextNode = n ) ) ; L = 1 } else { if ( n . getFirst ( ) ) { k || ( k = this . range . clone ( ) , k . setStartAt ( n , CKEDITOR . POSITION _BEFORE _START ) ) ; n = n . getFirst ( ) ; continue } H = 1 } } H && ! k && ( k = this . range . clone ( ) , k . setStartAt ( n , CKEDITOR . POSITION _BEFORE _START ) ) ;
w = ( ! L || H ) && n . equals ( t ) ; if ( k && ! L ) for ( ; ! n . getNext ( g ) && ! w ; ) { m = n . getParent ( ) ; if ( m . isBlockBoundary ( this . forceBrBreak && ! y && { br : 1 } ) ) { L = 1 ; H = 0 ; w || m . equals ( t ) ; k . setEndAt ( m , CKEDITOR . POSITION _BEFORE _END ) ; break } n = m ; H = 1 ; w = n . equals ( t ) ; I = 1 } H && k . setEndAt ( n , CKEDITOR . POSITION _AFTER _END ) ; n = this . _getNextSourceNode ( n , I , t ) ; if ( ( w = ! n ) || 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 ) ; n = d . blockLimit ; L = { div : 1 , th : 1 , td : 1 } ;
d = d . block ; ! d && n && ! this . enforceRealBlocks && L [ n . getName ( ) ] && k . checkStartOfBlock ( ) && k . checkEndOfBlock ( ) && ! n . equals ( k . root ) ? d = n : ! d || this . enforceRealBlocks && d . is ( l ) ? ( d = this . range . document . createElement ( a ) , k . extractContents ( ) . appendTo ( d ) , d . trim ( ) , k . insertNode ( d ) , z = G = ! 0 ) : "li" != d . getName ( ) ? k . checkStartOfBlock ( ) && k . checkEndOfBlock ( ) || ( d = d . clone ( ! 1 ) , k . extractContents ( ) . appendTo ( d ) , d . trim ( ) , G = k . splitBlock ( ) , z = ! G . wasStartOfBlock , G = ! G . wasEndOfBlock , k . insertNode ( d ) ) : w || ( this . _ . nextNode = d . equals ( t ) ? null : this . _getNextSourceNode ( k . getBoundaryNodes ( ) . endNode ,
1 , t ) ) } z && ( z = d . getPrevious ( ) ) && z . type == CKEDITOR . NODE _ELEMENT && ( "br" == z . getName ( ) ? z . remove ( ) : z . getLast ( ) && "br" == z . getLast ( ) . $ . nodeName . toLowerCase ( ) && z . getLast ( ) . remove ( ) ) ; G && ( z = d . getLast ( ) ) && z . type == CKEDITOR . NODE _ELEMENT && "br" == z . getName ( ) && ( ! CKEDITOR . env . needsBrFiller || z . getPrevious ( h ) || z . getNext ( h ) ) && z . remove ( ) ; this . _ . nextNode || ( this . _ . nextNode = w || d . equals ( t ) || ! t ? null : this . _getNextSourceNode ( d , 1 , t ) ) ; return d } , _getNextSourceNode : function ( a , b , c ) { function d ( a ) { return ! ( a . equals ( c ) || a . equals ( f ) ) } var f =
this . range . root ; for ( a = a . getNextSourceNode ( b , null , d ) ; ! h ( a ) ; ) a = a . getNextSourceNode ( b , null , d ) ; return a } } ; CKEDITOR . dom . range . prototype . createIterator = function ( ) { return new a ( this ) } } ) ( ) ;
CKEDITOR . command = function ( a , d ) { this . uiItems = [ ] ; this . exec = function ( b ) { if ( this . state == CKEDITOR . TRISTATE _DISABLED || ! this . checkAllowed ( ) ) return ! 1 ; this . editorFocus && a . focus ( ) ; return ! 1 === this . fire ( "exec" ) ? ! 0 : ! 1 !== d . exec . call ( this , a , b ) } ; this . refresh = function ( a , b ) { if ( ! this . readOnly && a . readOnly ) return ! 0 ; if ( this . context && ! b . isContextFor ( this . context ) || ! this . checkAllowed ( ! 0 ) ) return this . disable ( ) , ! 0 ; this . startDisabled || this . enable ( ) ; this . modes && ! this . modes [ a . mode ] && this . disable ( ) ; return ! 1 === this . fire ( "refresh" ,
{ editor : a , path : b } ) ? ! 0 : d . refresh && ! 1 !== d . refresh . apply ( this , arguments ) } ; var b ; this . checkAllowed = function ( c ) { return c || "boolean" != typeof b ? b = a . activeFilter . checkFeature ( this ) : b } ; CKEDITOR . tools . extend ( this , d , { modes : { wysiwyg : 1 } , editorFocus : 1 , contextSensitive : ! ! d . context , state : CKEDITOR . TRISTATE _DISABLED } ) ; CKEDITOR . event . call ( this ) } ;
CKEDITOR . command . prototype = { enable : function ( ) { this . state == CKEDITOR . TRISTATE _DISABLED && this . checkAllowed ( ) && this . setState ( this . preserveState && "undefined" != typeof this . previousState ? this . previousState : CKEDITOR . TRISTATE _OFF ) } , disable : function ( ) { this . setState ( CKEDITOR . TRISTATE _DISABLED ) } , setState : function ( a ) { if ( this . state == a || a != CKEDITOR . TRISTATE _DISABLED && ! this . checkAllowed ( ) ) return ! 1 ; this . previousState = this . state ; this . state = a ; this . fire ( "state" ) ; return ! 0 } , toggleState : function ( ) { this . state == CKEDITOR . TRISTATE _OFF ?
this . setState ( CKEDITOR . TRISTATE _ON ) : this . state == CKEDITOR . TRISTATE _ON && this . setState ( CKEDITOR . TRISTATE _OFF ) } } ; CKEDITOR . event . implementOn ( CKEDITOR . command . prototype ) ; CKEDITOR . ENTER _P = 1 ; CKEDITOR . ENTER _BR = 2 ; CKEDITOR . ENTER _DIV = 3 ;
CKEDITOR . config = { customConfig : "config.js" , autoUpdateElement : ! 0 , language : "" , defaultLanguage : "en" , contentsLangDirection : "" , enterMode : CKEDITOR . ENTER _P , forceEnterMode : ! 1 , shiftEnterMode : CKEDITOR . ENTER _BR , docType : "\x3c!DOCTYPE html\x3e" , bodyId : "" , bodyClass : "" , fullPage : ! 1 , height : 200 , contentsCss : CKEDITOR . getUrl ( "contents.css" ) , extraPlugins : "" , removePlugins : "" , protectedSource : [ ] , tabIndex : 0 , width : "" , baseFloatZIndex : 1E4 , blockedKeystrokes : [ CKEDITOR . CTRL + 66 , CKEDITOR . CTRL + 73 , CKEDITOR . CTRL + 85 ] } ;
( function ( ) { function a ( a , b , c , d , e ) { var f , m ; a = [ ] ; for ( f in b ) { m = b [ f ] ; m = "boolean" == typeof m ? { } : "function" == typeof m ? { match : m } : C ( m ) ; "$" != f . charAt ( 0 ) && ( m . elements = f ) ; c && ( m . featureName = c . toLowerCase ( ) ) ; var q = m ; q . elements = k ( q . elements , /\s+/ ) || null ; q . propertiesOnly = q . propertiesOnly || ! 0 === q . elements ; var F = /\s*,\s*/ , r = void 0 ; for ( r in T ) { q [ r ] = k ( q [ r ] , F ) || null ; var h = q , p = S [ r ] , n = k ( q [ S [ r ] ] , F ) , g = q [ r ] , w = [ ] , E = ! 0 , N = void 0 ; n ? E = ! 1 : n = { } ; for ( N in g ) "!" == N . charAt ( 0 ) && ( N = N . slice ( 1 ) , w . push ( N ) , n [ N ] = ! 0 , E = ! 1 ) ; for ( ; N = w . pop ( ) ; ) g [ N ] =
g [ "!" + N ] , delete g [ "!" + N ] ; h [ p ] = ( E ? ! 1 : n ) || null } q . match = q . match || null ; d . push ( m ) ; a . push ( m ) } b = e . elements ; e = e . generic ; var B ; c = 0 ; for ( d = a . length ; c < d ; ++ c ) { f = C ( a [ c ] ) ; m = ! 0 === f . classes || ! 0 === f . styles || ! 0 === f . attributes ; q = f ; r = p = F = void 0 ; for ( F in T ) q [ F ] = L ( q [ F ] ) ; h = ! 0 ; for ( r in S ) { F = S [ r ] ; p = q [ F ] ; n = [ ] ; g = void 0 ; for ( g in p ) - 1 < g . indexOf ( "*" ) ? n . push ( new RegExp ( "^" + g . replace ( /\*/g , ".*" ) + "$" ) ) : n . push ( g ) ; p = n ; p . length && ( q [ F ] = p , h = ! 1 ) } q . nothingRequired = h ; q . noProperties = ! ( q . attributes || q . classes || q . styles ) ; if ( ! 0 === f . elements ||
null === f . elements ) e [ m ? "unshift" : "push" ] ( f ) ; else for ( B in q = f . elements , delete f . elements , q ) if ( b [ B ] ) b [ B ] [ m ? "unshift" : "push" ] ( f ) ; else b [ B ] = [ f ] } } function d ( a , c , d , e ) { if ( ! a . match || a . match ( c ) ) if ( e || g ( 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 , m = c . length , q ; f < m ; ++ f ) q = c [ f ] , e [ q ] ||
( function ( ) { function a ( a , b , c , d , e ) { var f , m ; a = [ ] ; for ( f in b ) { m = b [ f ] ; m = "boolean" == typeof m ? { } : "function" == typeof m ? { match : m } : D ( m ) ; "$" != f . charAt ( 0 ) && ( m . elements = f ) ; c && ( m . featureName = c . toLowerCase ( ) ) ; var q = m ; q . elements = k ( q . elements , /\s+/ ) || null ; q . propertiesOnly = q . propertiesOnly || ! 0 === q . elements ; var r = /\s*,\s*/ , B = void 0 ; for ( B in T ) { q [ B ] = k ( q [ B ] , r ) || null ; var h = q , p = S [ B ] , n = k ( q [ S [ B ] ] , r ) , g = q [ B ] , v = [ ] , F = ! 0 , N = void 0 ; n ? F = ! 1 : n = { } ; for ( N in g ) "!" == N . charAt ( 0 ) && ( N = N . slice ( 1 ) , v . push ( N ) , n [ N ] = ! 0 , F = ! 1 ) ; for ( ; N = v . pop ( ) ; ) g [ N ] =
g [ "!" + N ] , delete g [ "!" + N ] ; h [ p ] = ( F ? ! 1 : n ) || null } q . match = q . match || null ; d . push ( m ) ; a . push ( m ) } b = e . elements ; e = e . generic ; var C ; c = 0 ; for ( d = a . length ; c < d ; ++ c ) { f = D ( a [ c ] ) ; m = ! 0 === f . classes || ! 0 === f . styles || ! 0 === f . attributes ; q = f ; B = p = r = void 0 ; for ( r in T ) q [ r ] = L ( q [ r ] ) ; h = ! 0 ; for ( B in S ) { r = S [ B ] ; p = q [ r ] ; n = [ ] ; g = void 0 ; for ( g in p ) - 1 < g . indexOf ( "*" ) ? n . push ( new RegExp ( "^" + g . replace ( /\*/g , ".*" ) + "$" ) ) : n . push ( g ) ; p = n ; p . length && ( q [ r ] = p , h = ! 1 ) } q . nothingRequired = h ; q . noProperties = ! ( q . attributes || q . classes || q . styles ) ; if ( ! 0 === f . elements ||
null === f . elements ) e [ m ? "unshift" : "push" ] ( f ) ; else for ( C in q = f . elements , delete f . elements , q ) if ( b [ C ] ) b [ C ] [ m ? "unshift" : "push" ] ( f ) ; else b [ C ] = [ f ] } } function d ( a , c , d , e ) { if ( ! a . match || a . match ( c ) ) if ( e || g ( 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 , m = c . length , q ; f < m ; ++ f ) q = c [ f ] , e [ q ] ||
( e [ q ] = a ( q ) ) ; 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 , m = b . length ; m -- ; ) if ( e || a ( b [ m ] ) ) b . splice ( m , 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 h ( 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 = F ( 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 g ( a , b ) { if ( a . nothingRequired ) return ! 0 ;
var c , d , e , f ; if ( e = a . requiredClasses ) for ( f = b . classes , c = 0 ; c < e . length ; ++ c ) if ( d = e [ c ] , "string" == typeof d ) { if ( - 1 == CKEDITOR . tools . indexOf ( f , d ) ) return ! 1 } else if ( ! CKEDITOR . tools . checkIfAnyArrayItemMatches ( f , d ) ) return ! 1 ; return l ( b . styles , a . requiredStyles ) && l ( b . attributes , a . requiredAttributes ) } function l ( a , b ) { if ( ! b ) return ! 0 ; for ( var c = 0 , d ; c < b . length ; ++ c ) if ( d = b [ c ] , "string" == typeof d ) { if ( ! ( d in a ) ) return ! 1 } else if ( ! CKEDITOR . tools . checkIfAnyObjectPropertyMatches ( a , d ) ) return ! 1 ; return ! 0 } function v ( a ) { if ( ! a ) return { } ;
a = a . split ( /\s*,\s*/ ) . sort ( ) ; for ( var b = { } ; a . length ; ) b [ a . shift ( ) ] = "cke-test" ; return b } function e ( a ) { var b , c , d , e , f = { } , m = 1 ; for ( a = F ( a ) ; b = a . match ( p ) ; ) ( c = b [ 2 ] ) ? ( d = x ( c , "styles" ) , e = x ( c , "attrs" ) , c = x ( c , "classes" ) ) : d = e = c = null , f [ "$" + m ++ ] = { 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 ( N [ b ] ) ; return c ? F ( c [ 1 ] ) : null } function t ( a ) { var b = a . styleBackup = a . attributes . style , c = a . classBackup = a . attributes [ "class" ] ; a . styles || ( a . styles = CKEDITOR . tools . parseCssText ( b ||
"" , 1 ) ) ; a . classes || ( a . classes = c ? c . split ( /\s+/ ) : [ ] ) } function z ( a , b , e , f ) { var F = 0 , r ; f . toHtml && ( b . name = b . name . replace ( O , "$1" ) ) ; if ( f . doCallbacks && a . elementCallbacks ) { a : { r = a . elementCallbacks ; for ( var p = 0 , h = r . length , g ; p < h ; ++ p ) if ( g = r [ p ] ( b ) ) { r = g ; break a } r = void 0 } if ( r ) return r } if ( f . doTransform && ( r = a . _ . transformations [ b . name ] ) ) { t ( b ) ; for ( p = 0 ; p < r . length ; ++ p ) m ( a , b , r [ p ] ) ; u ( b ) } if ( f . doFilter ) { a : { p = b . name ; h = a . _ ; a = h . allowedRules . elements [ p ] ; r = h . allowedRules . generic ; p = h . disallowedRules . elements [ p ] ; h = h . disallowedRules . generic ;
g = f . skipRequired ; var k = { valid : ! 1 , validAttributes : { } , validClasses : { } , validStyles : { } , allAttributes : ! 1 , allClasses : ! 1 , allStyles : ! 1 , hadInvalidAttribute : ! 1 , hadInvalidClass : ! 1 , hadInvalidStyle : ! 1 } , w , C ; if ( a || r ) { t ( b ) ; if ( p ) for ( w = 0 , C = p . length ; w < C ; ++ w ) if ( ! 1 === c ( p [ w ] , b , k ) ) { a = null ; break a } if ( h ) for ( w = 0 , C = h . length ; w < C ; ++ w ) c ( h [ w ] , b , k ) ; if ( a ) for ( w = 0 , C = a . length ; w < C ; ++ w ) d ( a [ w ] , b , k , g ) ; if ( r ) for ( w = 0 , C = r . length ; w < C ; ++ w ) d ( r [ w ] , b , k , g ) ; a = k } else a = null } if ( ! a || ! a . valid ) return e . push ( b ) , 1 ; C = a . validAttributes ; var N = a . validStyles ;
r = a . validClasses ; var p = b . attributes , E = b . styles , h = b . classes ; g = b . classBackup ; var B = b . styleBackup , A , K , l = [ ] , k = [ ] , M = /^data-cke-/ ; w = ! 1 ; delete p . style ; delete p [ "class" ] ; delete b . classBackup ; delete b . styleBackup ; if ( ! a . allAttributes ) for ( A in p ) C [ A ] || ( M . test ( A ) ? A == ( K = A . replace ( /^data-cke-saved-/ , "" ) ) || C [ K ] || ( delete p [ A ] , w = ! 0 ) : ( delete p [ A ] , w = ! 0 ) ) ; if ( ! a . allStyles || a . hadInvalidStyle ) { for ( A in E ) a . allStyles || N [ A ] ? l . push ( A + ":" + E [ A ] ) : w = ! 0 ; l . length && ( p . style = l . sort ( ) . join ( "; " ) ) } else B && ( p . style = B ) ; if ( ! a . allClasses ||
a . hadInvalidClass ) { for ( A = 0 ; A < h . length ; ++ A ) ( a . allClasses || r [ h [ A ] ] ) && k . push ( h [ A ] ) ; k . length && ( p [ "class" ] = k . sort ( ) . join ( " " ) ) ; g && k . length < g . split ( /\s+/ ) . length && ( w = ! 0 ) } else g && ( p [ "class" ] = g ) ; w && ( F = 1 ) ; if ( ! f . skipFinalValidation && ! n ( b ) ) return e . push ( b ) , 1 } f . toHtml && ( b . name = b . name . replace ( q , "cke:$1" ) ) ; return F } function G ( 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 u ( a ) { var b = a . attributes , c ; delete b . style ; delete b [ "class" ] ;
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 h ( a , b , c ) { if ( a . disabled || a . customConfig && ! c || ! b ) return ! 1 ; a . _ . cachedChecks = { } ; return ! 0 } function k ( a , b ) { if ( ! a ) return ! 1 ; if ( ! 0 === a ) return a ; if ( "string" == typeof a ) return a = B ( a ) , "*" == a ? ! 0 : CKEDITOR . tools . convertArrayToObject ( a . split ( b ) ) ; if ( CKEDITOR . tools . isArray ( a ) ) return a . length ? CKEDITOR . tools . convertArrayToObject ( a ) : ! 1 ; var c = { } , d = 0 , e ; for ( e in a ) c [ e ] = a [ e ] , d ++ ; return d ? c : ! 1 } function g ( a , b ) { if ( a . nothingRequired ) return ! 0 ;
var c , d , e , f ; if ( e = a . requiredClasses ) for ( f = b . classes , c = 0 ; c < e . length ; ++ c ) if ( d = e [ c ] , "string" == typeof d ) { if ( - 1 == CKEDITOR . tools . indexOf ( f , d ) ) return ! 1 } else if ( ! CKEDITOR . tools . checkIfAnyArrayItemMatches ( f , d ) ) return ! 1 ; return l ( b . styles , a . requiredStyles ) && l ( b . attributes , a . requiredAttributes ) } function l ( a , b ) { if ( ! b ) return ! 0 ; for ( var c = 0 , d ; c < b . length ; ++ c ) if ( d = b [ c ] , "string" == typeof d ) { if ( ! ( d in a ) ) return ! 1 } else if ( ! CKEDITOR . tools . checkIfAnyObjectPropertyMatches ( a , d ) ) return ! 1 ; return ! 0 } function u ( a ) { if ( ! a ) return { } ;
a = a . split ( /\s*,\s*/ ) . sort ( ) ; for ( var b = { } ; a . length ; ) b [ a . shift ( ) ] = "cke-test" ; return b } function e ( a ) { var b , c , d , e , f = { } , m = 1 ; for ( a = B ( a ) ; b = a . match ( p ) ; ) ( c = b [ 2 ] ) ? ( d = x ( c , "styles" ) , e = x ( c , "attrs" ) , c = x ( c , "classes" ) ) : d = e = c = null , f [ "$" + m ++ ] = { 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 ( N [ b ] ) ; return c ? B ( c [ 1 ] ) : null } function w ( a ) { var b = a . styleBackup = a . attributes . style , c = a . classBackup = a . attributes [ "class" ] ; a . styles || ( a . styles = CKEDITOR . tools . parseCssText ( b ||
"" , 1 ) ) ; a . classes || ( a . classes = c ? c . split ( /\s+/ ) : [ ] ) } function z ( a , b , e , f ) { var r = 0 , B ; f . toHtml && ( b . name = b . name . replace ( O , "$1" ) ) ; if ( f . doCallbacks && a . elementCallbacks ) { a : { B = a . elementCallbacks ; for ( var p = 0 , h = B . length , g ; p < h ; ++ p ) if ( g = B [ p ] ( b ) ) { B = g ; break a } B = void 0 } if ( B ) return B } if ( f . doTransform && ( B = a . _ . transformations [ b . name ] ) ) { w ( b ) ; for ( p = 0 ; p < B . length ; ++ p ) m ( a , b , B [ p ] ) ; t ( b ) } if ( f . doFilter ) { a : { p = b . name ; h = a . _ ; a = h . allowedRules . elements [ p ] ; B = h . allowedRules . generic ; p = h . disallowedRules . elements [ p ] ; h = h . disallowedRules . generic ;
g = f . skipRequired ; var k = { valid : ! 1 , validAttributes : { } , validClasses : { } , validStyles : { } , allAttributes : ! 1 , allClasses : ! 1 , allStyles : ! 1 , hadInvalidAttribute : ! 1 , hadInvalidClass : ! 1 , hadInvalidStyle : ! 1 } , v , D ; if ( a || B ) { w ( b ) ; if ( p ) for ( v = 0 , D = p . length ; v < D ; ++ v ) if ( ! 1 === c ( p [ v ] , b , k ) ) { a = null ; break a } if ( h ) for ( v = 0 , D = h . length ; v < D ; ++ v ) c ( h [ v ] , b , k ) ; if ( a ) for ( v = 0 , D = a . length ; v < D ; ++ v ) d ( a [ v ] , b , k , g ) ; if ( B ) for ( v = 0 , D = B . length ; v < D ; ++ v ) d ( B [ v ] , b , k , g ) ; a = k } else a = null } if ( ! a || ! a . valid ) return e . push ( b ) , 1 ; D = a . validAttributes ; var N = a . validStyles ;
B = a . validClasses ; var p = b . attributes , F = b . styles , h = b . classes ; g = b . classBackup ; var C = b . styleBackup , A , K , l = [ ] , k = [ ] , M = /^data-cke-/ ; v = ! 1 ; delete p . style ; delete p [ "class" ] ; delete b . classBackup ; delete b . styleBackup ; if ( ! a . allAttributes ) for ( A in p ) D [ A ] || ( M . test ( A ) ? A == ( K = A . replace ( /^data-cke-saved-/ , "" ) ) || D [ K ] || ( delete p [ A ] , v = ! 0 ) : ( delete p [ A ] , v = ! 0 ) ) ; if ( ! a . allStyles || a . hadInvalidStyle ) { for ( A in F ) a . allStyles || N [ A ] ? l . push ( A + ":" + F [ A ] ) : v = ! 0 ; l . length && ( p . style = l . sort ( ) . join ( "; " ) ) } else C && ( p . style = C ) ; if ( ! a . allClasses ||
a . hadInvalidClass ) { for ( A = 0 ; A < h . length ; ++ A ) ( a . allClasses || B [ h [ A ] ] ) && k . push ( h [ A ] ) ; k . length && ( p [ "class" ] = k . sort ( ) . join ( " " ) ) ; g && k . length < g . split ( /\s+/ ) . length && ( v = ! 0 ) } else g && ( p [ "class" ] = g ) ; v && ( r = 1 ) ; if ( ! f . skipFinalValidation && ! n ( b ) ) return e . push ( b ) , 1 } f . toHtml && ( b . name = b . name . replace ( q , "cke:$1" ) ) ; return r } function G ( a ) { var b = [ ] , c ; for ( c in a ) - 1 < c . indexOf ( "*" ) && b . push ( c . replace ( /\*/g , ".*" ) ) ; return b . length ? new RegExp ( "^(?:" + b . join ( "|" ) + ")$" ) : null } function t ( a ) { var b = a . attributes , c ; delete b . style ; delete b [ "class" ] ;
if ( c = CKEDITOR . tools . writeCssText ( a . styles , ! 0 ) ) b . style = c ; a . classes . length && ( b [ "class" ] = a . classes . sort ( ) . join ( " " ) ) } function n ( a ) { switch ( a . name ) { case "a" : if ( ! ( a . children . length || a . attributes . name || a . attributes . id ) ) return ! 1 ; break ; case "img" : if ( ! a . attributes . src ) return ! 1 } return ! 0 } function L ( a ) { if ( ! a ) return ! 1 ; if ( ! 0 === a ) return ! 0 ; var b = G ( a ) ; return function ( c ) { return c in a || b && c . match ( b ) } } function y ( ) { return new CKEDITOR . htmlParser . element ( "br" ) } function H ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && ( "br" ==
a . name || r . $block [ a . name ] ) } function I ( a , b , c ) { var d = a . name ; if ( r . $empty [ d ] || ! a . children . length ) "hr" == d && "br" == b ? a . replaceWith ( y ( ) ) : ( a . parent && c . push ( { check : "it" , el : a . parent } ) , a . remove ( ) ) ; else if ( r . $block [ d ] || "tr" == d ) if ( "br" == b ) a . previous && ! H ( a . previous ) && ( b = y ( ) , b . insertBefore ( a ) ) , a . next && ! H ( a . next ) && ( b = y ( ) , b . insertAfter ( a ) ) , a . replaceWithChildren ( ) ; else { var d = a . children , e ; b : { e = r [ b ] ; for ( var f = 0 , m = d . length , q ; f < m ; ++ f ) if ( q = d [ f ] , q . type == CKEDITOR . NODE _ELEMENT && ! e [ q . name ] ) { e = ! 1 ; break b } e = ! 0 } if ( e ) a . name = b , a . attributes =
{ } , c . push ( { check : "parent-down" , el : a } ) ; else { e = a . parent ; for ( var f = e . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || "body" == e . name , p , h , m = d . length ; 0 < m ; ) q = d [ -- m ] , f && ( q . type == CKEDITOR . NODE _TEXT || q . type == CKEDITOR . NODE _ELEMENT && r . $inline [ q . name ] ) ? ( p || ( p = new CKEDITOR . htmlParser . element ( b ) , p . insertAfter ( a ) , c . push ( { check : "parent-down" , el : p } ) ) , p . add ( q , 0 ) ) : ( p = null , h = r [ e . name ] || r . span , q . insertAfter ( a ) , e . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || q . type != CKEDITOR . NODE _ELEMENT || h [ q . name ] || c . push ( { check : "el-up" , el : q } ) ) ; a . remove ( ) } } else d in
{ style : 1 , script : 1 } ? a . remove ( ) : ( a . parent && c . push ( { check : "it" , el : a . parent } ) , a . replaceWithChildren ( ) ) } function m ( a , b , c ) { var d , e ; for ( d = 0 ; d < c . length ; ++ d ) if ( e = c [ d ] , ! ( e . check && ! a . check ( e . check , ! 1 ) || e . left && ! e . left ( b ) ) ) { e . right ( b , E ) ; break } } function B ( a , b ) { var c = b . getDefinition ( ) , d = c . attributes , e = c . styles , f , m , q , p ; if ( a . name != c . element ) return ! 1 ; for ( f in d ) if ( "class" == f ) for ( c = d [ f ] . split ( /\s+/ ) , q = a . classes . join ( "|" ) ; p = c . pop ( ) ; ) { if ( - 1 == q . indexOf ( p ) ) return ! 1 } else if ( a . attributes [ f ] != d [ f ] ) return ! 1 ; for ( m in e ) if ( a . styles [ m ] !=
e [ m ] ) return ! 1 ; return ! 0 } function K ( a , b ) { var c , d ; "string" == typeof a ? c = a : a instanceof CKEDITOR . style ? d = a : ( c = a [ 0 ] , d = a [ 1 ] ) ; return [ { element : c , left : d , right : function ( a , c ) { c . transform ( a , b ) } } ] } function A ( a ) { return function ( b ) { return B ( b , a ) } } function M ( a ) { return function ( b , c ) { c [ a ] ( b ) } } var r = CKEDITOR . dtd , C = CKEDITOR . tools . copy , F = CKEDITOR . tools . trim , w = [ "" , "p" , "br" , "div" ] ; CKEDITOR . FILTER _SKIP _TREE = 2 ; CKEDITOR . filter = function ( a , b ) { this . allowedContent = [ ] ; this . disallowedContent = [ ] ; this . elementCallbacks = null ; this . disabled =
! 1 ; this . editor = null ; this . id = CKEDITOR . tools . getNextNumber ( ) ; this . _ = { allowedRules : { elements : { } , generic : [ ] } , disallowedRules : { elements : { } , generic : [ ] } , transformations : { } , cachedTests : { } , cachedChecks : { } } ; CKEDITOR . filter . instances [ this . id ] = this ; var c = this . editor = a instanceof CKEDITOR . editor ? a : null ; if ( c && ! b ) { this . customConfig = ! 0 ; var d = c . config . allowedContent ; ! 0 === d ? this . disabled = ! 0 : ( d || ( this . customConfig = ! 1 ) , this . allow ( d , "config" , 1 ) , this . allow ( c . config . extraAllowedContent , "extra" , 1 ) , this . allow ( w [ c . enterMode ] +
" " + w [ c . shiftEnterMode ] , "default" , 1 ) , this . disallow ( c . config . disallowedContent ) ) } else this . customConfig = ! 1 , this . allow ( b || a , "default" , 1 ) } ; CKEDITOR . filter . instances = { } ; CKEDITOR . filter . prototype = { allow : function ( b , c , d ) { if ( ! h ( this , b , d ) ) return ! 1 ; var f , m ; if ( "string" == typeof b ) b = e ( b ) ; else if ( b instanceof CKEDITOR . style ) { if ( b . toAllowedContentRules ) return this . allow ( b . toAllowedContentRules ( this . editor ) , c , d ) ; f = b . getDefinition ( ) ; b = { } ; d = f . attributes ; b [ f . element ] = f = { styles : f . styles , requiredStyles : f . styles && CKEDITOR . tools . object . keys ( f . styles ) } ;
d && ( d = C ( d ) , f . classes = d [ "class" ] ? d [ "class" ] . split ( /\s+/ ) : null , f . requiredClasses = f . classes , delete d [ "class" ] , f . attributes = d , f . requiredAttributes = d && CKEDITOR . tools . object . keys ( d ) ) } else if ( CKEDITOR . tools . isArray ( b ) ) { for ( f = 0 ; f < b . length ; ++ f ) m = this . allow ( b [ f ] , c , d ) ; return m } a ( this , b , c , this . allowedContent , this . _ . allowedRules ) ; return ! 0 } , applyTo : function ( a , b , c , d ) { if ( this . disabled ) return ! 1 ; var e = this , f = [ ] , m = this . editor && this . editor . config . protectedSource , q , p = ! 1 , h = { doFilter : ! c , doTransform : ! 0 , doCallbacks : ! 0 , toHtml : b } ;
a . forEach ( function ( a ) { if ( a . type == CKEDITOR . NODE _ELEMENT ) { if ( "off" == a . attributes [ "data-cke-filter" ] ) return ! 1 ; if ( ! b || "span" != a . name || ! ~ CKEDITOR . tools . object . keys ( a . attributes ) . join ( "|" ) . indexOf ( "data-cke-" ) ) if ( q = z ( e , a , f , h ) , q & 1 ) p = ! 0 ; else if ( q & 2 ) return ! 1 } else if ( a . type == CKEDITOR . NODE _COMMENT && a . value . match ( /^\{cke_protected\}(?!\{C\})/ ) ) { var c ; a : { var d = decodeURIComponent ( a . value . replace ( /^\{cke_protected\}/ , "" ) ) ; c = [ ] ; var r , F , n ; if ( m ) for ( F = 0 ; F < m . length ; ++ F ) if ( ( n = d . match ( m [ F ] ) ) && n [ 0 ] . length == d . length ) { c =
! 0 ; break a } d = CKEDITOR . htmlParser . fragment . fromHtml ( d ) ; 1 == d . children . length && ( r = d . children [ 0 ] ) . type == CKEDITOR . NODE _ELEMENT && z ( e , r , c , h ) ; c = ! c . length } c || f . push ( a ) } } , null , ! 0 ) ; f . length && ( p = ! 0 ) ; var F ; a = [ ] ; d = w [ d || ( this . editor ? this . editor . enterMode : CKEDITOR . ENTER _P ) ] ; for ( var g ; c = f . pop ( ) ; ) c . type == CKEDITOR . NODE _ELEMENT ? I ( c , d , a ) : c . remove ( ) ; for ( ; F = a . pop ( ) ; ) if ( c = F . el , c . parent ) switch ( g = r [ c . parent . name ] || r . span , F . check ) { case "it" : r . $removeEmpty [ c . name ] && ! c . children . length ? I ( c , d , a ) : n ( c ) || I ( c , d , a ) ; break ; case "el-up" : c . parent . type ==
{ } , c . push ( { check : "parent-down" , el : a } ) ; else { e = a . parent ; for ( var f = e . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || "body" == e . name , p , B , m = d . length ; 0 < m ; ) q = d [ -- m ] , f && ( q . type == CKEDITOR . NODE _TEXT || q . type == CKEDITOR . NODE _ELEMENT && r . $inline [ q . name ] ) ? ( p || ( p = new CKEDITOR . htmlParser . element ( b ) , p . insertAfter ( a ) , c . push ( { check : "parent-down" , el : p } ) ) , p . add ( q , 0 ) ) : ( p = null , B = r [ e . name ] || r . span , q . insertAfter ( a ) , e . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || q . type != CKEDITOR . NODE _ELEMENT || B [ q . name ] || c . push ( { check : "el-up" , el : q } ) ) ; a . remove ( ) } } else d in
{ style : 1 , script : 1 } ? a . remove ( ) : ( a . parent && c . push ( { check : "it" , el : a . parent } ) , a . replaceWithChildren ( ) ) } function m ( a , b , c ) { var d , e ; for ( d = 0 ; d < c . length ; ++ d ) if ( e = c [ d ] , ! ( e . check && ! a . check ( e . check , ! 1 ) || e . left && ! e . left ( b ) ) ) { e . right ( b , F ) ; break } } function C ( a , b ) { var c = b . getDefinition ( ) , d = c . attributes , e = c . styles , f , m , q , p ; if ( a . name != c . element ) return ! 1 ; for ( f in d ) if ( "class" == f ) for ( c = d [ f ] . split ( /\s+/ ) , q = a . classes . join ( "|" ) ; p = c . pop ( ) ; ) { if ( - 1 == q . indexOf ( p ) ) return ! 1 } else if ( a . attributes [ f ] != d [ f ] ) return ! 1 ; for ( m in e ) if ( a . styles [ m ] !=
e [ m ] ) return ! 1 ; return ! 0 } function K ( a , b ) { var c , d ; "string" == typeof a ? c = a : a instanceof CKEDITOR . style ? d = a : ( c = a [ 0 ] , d = a [ 1 ] ) ; return [ { element : c , left : d , right : function ( a , c ) { c . transform ( a , b ) } } ] } function A ( a ) { return function ( b ) { return C ( b , a ) } } function M ( a ) { return function ( b , c ) { c [ a ] ( b ) } } var r = CKEDITOR . dtd , D = CKEDITOR . tools . copy , B = CKEDITOR . tools . trim , v = [ "" , "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 ( v [ c . enterMode ] +
" " + v [ 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 ( ! h ( this , b , d ) ) return ! 1 ; var f , m ; if ( "string" == typeof b ) b = e ( b ) ; else if ( b instanceof CKEDITOR . style ) { if ( b . toAllowedContentRules ) return this . allow ( b . toAllowedContentRules ( this . editor ) , c , d ) ; f = b . getDefinition ( ) ; b = { } ; d = f . attributes ; b [ f . element ] = f = { styles : f . styles , requiredStyles : f . styles && CKEDITOR . tools . object . keys ( f . styles ) } ;
d && ( d = D ( d ) , f . classes = d [ "class" ] ? d [ "class" ] . split ( /\s+/ ) : null , f . requiredClasses = f . classes , delete d [ "class" ] , f . attributes = d , f . requiredAttributes = d && CKEDITOR . tools . object . keys ( d ) ) } else if ( CKEDITOR . tools . isArray ( b ) ) { for ( f = 0 ; f < b . length ; ++ f ) m = this . allow ( b [ f ] , c , d ) ; return m } a ( this , b , c , this . allowedContent , this . _ . allowedRules ) ; return ! 0 } , applyTo : function ( a , b , c , d ) { if ( this . disabled ) return ! 1 ; var e = this , f = [ ] , m = this . editor && this . editor . config . protectedSource , q , p = ! 1 , B = { doFilter : ! c , doTransform : ! 0 , doCallbacks : ! 0 , toHtml : b } ;
a . forEach ( function ( a ) { if ( a . type == CKEDITOR . NODE _ELEMENT ) { if ( "off" == a . attributes [ "data-cke-filter" ] ) return ! 1 ; if ( ! b || "span" != a . name || ! ~ CKEDITOR . tools . object . keys ( a . attributes ) . join ( "|" ) . indexOf ( "data-cke-" ) ) if ( q = z ( e , a , f , B ) , q & 1 ) p = ! 0 ; else if ( q & 2 ) return ! 1 } else if ( a . type == CKEDITOR . NODE _COMMENT && a . value . match ( /^\{cke_protected\}(?!\{C\})/ ) ) { var c ; a : { var d = decodeURIComponent ( a . value . replace ( /^\{cke_protected\}/ , "" ) ) ; c = [ ] ; var h , r , n ; if ( m ) for ( r = 0 ; r < m . length ; ++ r ) if ( ( n = d . match ( m [ r ] ) ) && n [ 0 ] . length == d . length ) { c =
! 0 ; break a } d = CKEDITOR . htmlParser . fragment . fromHtml ( d ) ; 1 == d . children . length && ( h = d . children [ 0 ] ) . type == CKEDITOR . NODE _ELEMENT && z ( e , h , c , B ) ; c = ! c . length } c || f . push ( a ) } } , null , ! 0 ) ; f . length && ( p = ! 0 ) ; var h ; a = [ ] ; d = v [ d || ( this . editor ? this . editor . enterMode : CKEDITOR . ENTER _P ) ] ; for ( var g ; c = f . pop ( ) ; ) c . type == CKEDITOR . NODE _ELEMENT ? I ( c , d , a ) : c . remove ( ) ; for ( ; h = a . pop ( ) ; ) if ( c = h . el , c . parent ) switch ( g = r [ c . parent . name ] || r . span , h . check ) { case "it" : r . $removeEmpty [ c . name ] && ! c . children . length ? I ( c , d , a ) : n ( c ) || I ( c , d , a ) ; break ; case "el-up" : c . parent . type ==
CKEDITOR . NODE _DOCUMENT _FRAGMENT || g [ c . name ] || I ( c , d , a ) ; break ; case "parent-down" : c . parent . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || g [ c . name ] || I ( c . parent , d , a ) } return p } , checkFeature : function ( a ) { if ( this . disabled || ! a ) return ! 0 ; a . toFeature && ( a = a . toFeature ( this . editor ) ) ; return ! a . requiredContent || this . check ( a . requiredContent ) } , disable : function ( ) { this . disabled = ! 0 } , disallow : function ( b ) { if ( ! h ( this , b , ! 0 ) ) return ! 1 ; "string" == typeof b && ( b = e ( b ) ) ; a ( this , b , null , this . disallowedContent , this . _ . disallowedRules ) ; return ! 0 } ,
addContentForms : function ( a ) { if ( ! this . disabled && a ) { var b , c , d = [ ] , e ; for ( b = 0 ; b < a . length && ! e ; ++ b ) c = a [ b ] , ( "string" == typeof c || c instanceof CKEDITOR . style ) && this . check ( c ) && ( e = c ) ; if ( e ) { for ( b = 0 ; b < a . length ; ++ b ) d . push ( K ( a [ b ] , e ) ) ; this . addTransformations ( d ) } } } , addElementCallback : function ( a ) { this . elementCallbacks || ( this . elementCallbacks = [ ] ) ; this . elementCallbacks . push ( a ) } , addFeature : function ( a ) { if ( this . disabled || ! a ) return ! 0 ; a . toFeature && ( a = a . toFeature ( this . editor ) ) ; this . allow ( a . allowedContent , a . name ) ; this . addTransformations ( a . contentTransformations ) ;
this . addContentForms ( a . contentForms ) ; return a . requiredContent && ( this . customConfig || this . disallowedContent . length ) ? this . check ( a . requiredContent ) : ! 0 } , addTransformations : function ( a ) { var b , c ; if ( ! this . disabled && a ) { var d = this . _ . transformations , e ; for ( e = 0 ; e < a . length ; ++ e ) { b = a [ e ] ; var f = void 0 , m = void 0 , q = void 0 , p = void 0 , r = void 0 , h = void 0 ; c = [ ] ; for ( m = 0 ; m < b . length ; ++ m ) q = b [ m ] , "string" == typeof q ? ( q = q . split ( /\s*:\s*/ ) , p = q [ 0 ] , r = null , h = q [ 1 ] ) : ( p = q . check , r = q . left , h = q . right ) , f || ( f = q , f = f . element ? f . element : p ? p . match ( /^([a-z0-9]+)/i ) [ 0 ] :
f . left . getDefinition ( ) . element ) , r instanceof CKEDITOR . style && ( r = A ( r ) ) , c . push ( { check : p == f ? null : p , left : r , right : "string" == typeof h ? M ( h ) : h } ) ; 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 f , q ; if ( "string" == typeof a ) { q = a + "\x3c" + ( ! 1 === b ? "0" : "1" ) + ( c ? "1" : "0" ) + "\x3e" ; if ( q in this . _ . cachedChecks ) return this . _ . cachedChecks [ q ] ; f = e ( a ) . $1 ; var p = f . styles , d = f . classes ; f . name = f . elements ;
f . classes = d = d ? d . split ( /\s*,\s*/ ) : [ ] ; f . styles = v ( p ) ; f . attributes = v ( f . attributes ) ; f . children = [ ] ; d . length && ( f . attributes [ "class" ] = d . join ( " " ) ) ; p && ( f . attributes . style = CKEDITOR . tools . writeCssText ( f . styles ) ) } else f = a . getDefinition ( ) , p = f . styles , d = f . attributes || { } , p && ! CKEDITOR . tools . isEmpty ( p ) ? ( p = C ( p ) , d . style = CKEDITOR . tools . writeCssText ( p , ! 0 ) ) : p = { } , f = { name : f . element , attributes : d , classes : d [ "class" ] ? d [ "class" ] . split ( /\s+/ ) : [ ] , styles : p , children : [ ] } ; var p = CKEDITOR . tools . clone ( f ) , r = [ ] , h ; if ( ! 1 !== b && ( h = this . _ . transformations [ f . name ] ) ) { for ( d =
0 ; d < h . length ; ++ d ) m ( this , f , h [ d ] ) ; u ( f ) } z ( this , p , r , { doFilter : ! 0 , doTransform : ! 1 !== b , skipRequired : ! c , skipFinalValidation : ! c } ) ; 0 < r . length ? c = ! 1 : ( ( b = f . attributes [ "class" ] ) && ( f . attributes [ "class" ] = f . attributes [ "class" ] . split ( " " ) . sort ( ) . join ( " " ) ) , c = CKEDITOR . tools . objectCompare ( f . attributes , p . attributes , ! 0 ) , b && ( f . attributes [ "class" ] = b ) ) ; "string" == typeof a && ( this . _ . cachedChecks [ q ] = 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 f = a . slice ( ) , e ; if ( this . check ( w [ c ] ) ) return c ; for ( d || ( f = f . reverse ( ) ) ; e = f . pop ( ) ; ) if ( this . check ( e ) ) return b [ e ] ; return CKEDITOR . ENTER _BR } } ( ) , clone : function ( ) { var a = new CKEDITOR . filter , b = CKEDITOR . tools . clone ; a . allowedContent = b ( this . allowedContent ) ; a . _ . allowedRules = b ( this . _ . allowedRules ) ; a . disallowedContent = b ( this . disallowedContent ) ; a . _ . disallowedRules = b ( this . _ . disallowedRules ) ; a . _ . transformations = b ( this . _ . transformations ) ; a . disabled = this . disabled ; a . editor = this . editor ; return a } , destroy : function ( ) { delete CKEDITOR . filter . instances [ this . id ] ;
delete this . _ ; delete this . allowedContent ; delete this . disallowedContent } } ; var T = { styles : 1 , attributes : 1 , classes : 1 } , S = { styles : "requiredStyles" , attributes : "requiredAttributes" , classes : "requiredClasses" } , p = /^([a-z0-9\-*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i , N = { styles : /{([^}]+)}/ , attrs : /\[([^\]]+)\]/ , classes : /\(([^\)]+)\)/ } , O = /^cke:(object|embed|param)$/ , q = /^(object|embed|param)$/ , E ; E = CKEDITOR . filter . transformationsTools = { sizeToStyle : function ( a ) { this . lengthToStyle ( a ,
this . addContentForms ( a . contentForms ) ; return a . requiredContent && ( this . customConfig || this . disallowedContent . length ) ? this . check ( a . requiredContent ) : ! 0 } , addTransformations : function ( a ) { var b , c ; if ( ! this . disabled && a ) { var d = this . _ . transformations , e ; for ( e = 0 ; e < a . length ; ++ e ) { b = a [ e ] ; var f = void 0 , m = void 0 , q = void 0 , p = void 0 , B = void 0 , h = void 0 ; c = [ ] ; for ( m = 0 ; m < b . length ; ++ m ) q = b [ m ] , "string" == typeof q ? ( q = q . split ( /\s*:\s*/ ) , p = q [ 0 ] , B = null , h = q [ 1 ] ) : ( p = q . check , B = q . left , h = q . right ) , f || ( f = q , f = f . element ? f . element : p ? p . match ( /^([a-z0-9]+)/i ) [ 0 ] :
f . left . getDefinition ( ) . element ) , B instanceof CKEDITOR . style && ( B = A ( B ) ) , c . push ( { check : p == f ? null : p , left : B , right : "string" == typeof h ? M ( h ) : h } ) ; 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 f , q ; if ( "string" == typeof a ) { q = a + "\x3c" + ( ! 1 === b ? "0" : "1" ) + ( c ? "1" : "0" ) + "\x3e" ; if ( q in this . _ . cachedChecks ) return this . _ . cachedChecks [ q ] ; f = e ( a ) . $1 ; var p = f . styles , d = f . classes ; f . name = f . elements ;
f . classes = d = d ? d . split ( /\s*,\s*/ ) : [ ] ; f . styles = u ( p ) ; f . attributes = u ( f . attributes ) ; f . children = [ ] ; d . length && ( f . attributes [ "class" ] = d . join ( " " ) ) ; p && ( f . attributes . style = CKEDITOR . tools . writeCssText ( f . styles ) ) } else f = a . getDefinition ( ) , p = f . styles , d = f . attributes || { } , p && ! CKEDITOR . tools . isEmpty ( p ) ? ( p = D ( p ) , d . style = CKEDITOR . tools . writeCssText ( p , ! 0 ) ) : p = { } , f = { name : f . element , attributes : d , classes : d [ "class" ] ? d [ "class" ] . split ( /\s+/ ) : [ ] , styles : p , children : [ ] } ; var p = CKEDITOR . tools . clone ( f ) , B = [ ] , h ; if ( ! 1 !== b && ( h = this . _ . transformations [ f . name ] ) ) { for ( d =
0 ; d < h . length ; ++ d ) m ( this , f , h [ d ] ) ; t ( f ) } z ( this , p , B , { doFilter : ! 0 , doTransform : ! 1 !== b , skipRequired : ! c , skipFinalValidation : ! c } ) ; 0 < B . length ? c = ! 1 : ( ( b = f . attributes [ "class" ] ) && ( f . attributes [ "class" ] = f . attributes [ "class" ] . split ( " " ) . sort ( ) . join ( " " ) ) , c = CKEDITOR . tools . objectCompare ( f . attributes , p . attributes , ! 0 ) , b && ( f . attributes [ "class" ] = b ) ) ; "string" == typeof a && ( this . _ . cachedChecks [ q ] = 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 f = a . slice ( ) , e ; if ( this . check ( v [ c ] ) ) return c ; for ( d || ( f = f . reverse ( ) ) ; e = f . pop ( ) ; ) if ( this . check ( e ) ) return b [ e ] ; return CKEDITOR . ENTER _BR } } ( ) , clone : function ( ) { var a = new CKEDITOR . filter , b = CKEDITOR . tools . clone ; a . allowedContent = b ( this . allowedContent ) ; a . _ . allowedRules = b ( this . _ . allowedRules ) ; a . disallowedContent = b ( this . disallowedContent ) ; a . _ . disallowedRules = b ( this . _ . disallowedRules ) ; a . _ . transformations = b ( this . _ . transformations ) ; a . disabled = this . disabled ; a . editor = this . editor ; return a } , destroy : function ( ) { delete CKEDITOR . filter . instances [ this . id ] ;
delete this . _ ; delete this . allowedContent ; delete this . disallowedContent } } ; var T = { styles : 1 , attributes : 1 , classes : 1 } , S = { styles : "requiredStyles" , attributes : "requiredAttributes" , classes : "requiredClasses" } , p = /^([a-z0-9\-*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i , N = { styles : /{([^}]+)}/ , attrs : /\[([^\]]+)\]/ , classes : /\(([^\)]+)\)/ } , O = /^cke:(object|embed|param)$/ , q = /^(object|embed|param)$/ , F ; F = 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 ] , f = d && d . match ( /^(\d+)(?:\.\d*)?px$/ ) ; f ? a . attributes [ c ] = f [ 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 ( /(\-?[\.\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 : B , transform : function ( a , b ) { if ( "string" == typeof b ) a . name = b ; else { var c = b . getDefinition ( ) , d = c . styles , f = c . attributes , e , m , q , p ; a . name = c . element ; for ( e in f ) if ( "class" == e ) for ( c =
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 ( /(\-?[\.\d]+\w+)/g ) || [ "0px" ] ; switch ( c . length ) { case 1 : b ( [ 0 , 0 , 0 , 0 ] ) ; break ; case 2 : b ( [ 0 , 1 , 0 , 1 ] ) ; break ; case 3 : b ( [ 0 , 1 , 2 , 1 ] ) ; break ; case 4 : b ( [ 0 , 1 , 2 , 3 ] ) } delete a . styles . margin } } , matchesStyle : C , transform : function ( a , b ) { if ( "string" == typeof b ) a . name = b ; else { var c = b . getDefinition ( ) , d = c . styles , f = c . attributes , e , m , q , p ; a . name = c . element ; for ( e in f ) if ( "class" == e ) for ( c =
a . classes . join ( "|" ) , q = f [ e ] . split ( /\s+/ ) ; p = q . pop ( ) ; ) - 1 == c . indexOf ( p ) && a . classes . push ( p ) ; else a . attributes [ e ] = f [ e ] ; for ( m in d ) a . styles [ m ] = d [ m ] } } } } ) ( ) ;
( function ( ) { CKEDITOR . focusManager = function ( a ) { if ( a . focusManager ) return a . focusManager ; this . hasFocus = ! 1 ; this . currentActive = null ; this . _ = { editor : a } ; return this } ; CKEDITOR . focusManager . _ = { blurDelay : 200 } ; CKEDITOR . focusManager . prototype = { focus : function ( a ) { this . _ . timer && clearTimeout ( this . _ . timer ) ; a && ( this . currentActive = a ) ; this . hasFocus || this . _ . locked || ( ( a = CKEDITOR . currentInstance ) && a . focusManager . blur ( 1 ) , this . hasFocus = ! 0 , ( a = this . _ . editor . container ) && a . addClass ( "cke_focus" ) , this . _ . editor . fire ( "focus" ) ) } , lock : function ( ) { this . _ . locked =
1 } , unlock : function ( ) { delete this . _ . locked } , blur : function ( a ) { function d ( ) { if ( this . hasFocus ) { this . hasFocus = ! 1 ; var a = this . _ . editor . container ; a && a . removeClass ( "cke_focus" ) ; this . _ . editor . fire ( "blur" ) } } if ( ! this . _ . locked ) { this . _ . timer && clearTimeout ( this . _ . timer ) ; var b = CKEDITOR . focusManager . _ . blurDelay ; a || ! b ? d . call ( this ) : this . _ . timer = CKEDITOR . tools . setTimeout ( function ( ) { delete this . _ . timer ; d . call ( this ) } , b , this ) } } , add : function ( a , d ) { var b = a . getCustomData ( "focusmanager" ) ; if ( ! b || b != this ) { b && b . remove ( a ) ; var b =
@@ -262,14 +262,14 @@ d.focus)}}})();CKEDITOR.keystrokeHandler=function(a){if(a.keystrokeHandler)retur
( function ( ) { var a , d = function ( b ) { b = b . data ; var d = b . getKeystroke ( ) , h = this . keystrokes [ d ] , k = this . _ . editor ; a = ! 1 === k . fire ( "key" , { keyCode : d , domEvent : b } ) ; a || ( h && ( a = ! 1 !== k . execCommand ( h , { 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 , h ) { var k = "string" == typeof b ; k && ( b = [ b ] ) ; f || ( f = CKEDITOR ) ; var g = b . length , l = [ ] , v = [ ] , e = function ( a ) { c && ( k ? c . call ( f , a ) : c . call ( f , l , v ) ) } ; if ( 0 === g ) e ( ! 0 ) ; else { var x = function ( a , b ) { ( b ? l : v ) . push ( a ) ; 0 >= -- g && ( h && CKEDITOR . document . getDocumentElement ( ) . removeStyle ( "cursor" ) , e ( b ) ) } , t = function ( b , c ) { a [ b ] = 1 ; var f = d [ b ] ; delete d [ b ] ; for ( var e = 0 ; e < f . length ; e ++ ) f [ e ] ( b , c ) } , z = function ( b ) { if ( a [ b ] ) x ( b , ! 0 ) ; else { var f = d [ b ] || ( d [ b ] = [ ] ) ; f . push ( x ) ; if ( ! ( 1 < f . length ) ) { var e =
new CKEDITOR . dom . element ( "script" ) ; e . setAttributes ( { type : "text/javascript" , src : b } ) ; c && ( CKEDITOR . env . ie && ( 8 >= CKEDITOR . env . version || CKEDITOR . env . ie9Compat ) ? e . $ . onreadystatechange = function ( ) { if ( "loaded" == e . $ . readyState || "complete" == e . $ . readyState ) e . $ . onreadystatechange = null , t ( b , ! 0 ) } : ( e . $ . onload = function ( ) { setTimeout ( function ( ) { e . $ . onload = null ; e . $ . onerror = null ; t ( b , ! 0 ) } , 0 ) } , e . $ . onerror = function ( ) { e . $ . onload = null ; e . $ . onerror = null ; t ( b , ! 1 ) } ) ) ; e . appendTo ( CKEDITOR . document . getHead ( ) ) } } } ; h && CKEDITOR . document . getDocumentElement ( ) . setStyle ( "cursor" ,
CKEDITOR . scriptLoader = function ( ) { var a = { } , d = { } ; return { load : function ( b , c , f , h ) { var k = "string" == typeof b ; k && ( b = [ b ] ) ; f || ( f = CKEDITOR ) ; var g = b . length , l = [ ] , u = [ ] , e = function ( a ) { c && ( k ? c . call ( f , a ) : c . call ( f , l , u ) ) } ; if ( 0 === g ) e ( ! 0 ) ; else { var x = function ( a , b ) { ( b ? l : u ) . push ( a ) ; 0 >= -- g && ( h && CKEDITOR . document . getDocumentElement ( ) . removeStyle ( "cursor" ) , e ( b ) ) } , w = function ( b , c ) { a [ b ] = 1 ; var f = d [ b ] ; delete d [ b ] ; for ( var e = 0 ; e < f . length ; e ++ ) f [ e ] ( b , c ) } , z = function ( b ) { if ( a [ b ] ) x ( b , ! 0 ) ; else { var f = d [ b ] || ( d [ b ] = [ ] ) ; f . push ( x ) ; if ( ! ( 1 < f . length ) ) { var e =
new CKEDITOR . dom . element ( "script" ) ; e . setAttributes ( { type : "text/javascript" , src : b } ) ; c && ( CKEDITOR . env . ie && ( 8 >= CKEDITOR . env . version || CKEDITOR . env . ie9Compat ) ? e . $ . onreadystatechange = function ( ) { if ( "loaded" == e . $ . readyState || "complete" == e . $ . readyState ) e . $ . onreadystatechange = null , w ( b , ! 0 ) } : ( e . $ . onload = function ( ) { setTimeout ( function ( ) { e . $ . onload = null ; e . $ . onerror = null ; w ( b , ! 0 ) } , 0 ) } , e . $ . onerror = function ( ) { e . $ . onload = null ; e . $ . onerror = null ; w ( b , ! 1 ) } ) ) ; e . appendTo ( CKEDITOR . document . getHead ( ) ) } } } ; h && CKEDITOR . document . getDocumentElement ( ) . setStyle ( "cursor" ,
"wait" ) ; for ( var G = 0 ; G < g ; G ++ ) z ( b [ G ] ) } } , queue : function ( ) { function a ( ) { var b ; ( b = c [ 0 ] ) && this . load ( b . scriptUrl , b . callback , CKEDITOR , 0 ) } var c = [ ] ; return function ( d , h ) { var k = this ; c . push ( { scriptUrl : d , callback : function ( ) { h && h . 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 , h = [ ] , k = { } , g = { } , l = 0 ; l < a . length ; l ++ ) { var v = a [ l ] ; if ( v ) if ( c [ v ] || f [ v ] ) g [ v ] = this . get ( v ) ; else { var e = this . getFilePath ( v ) ; h . push ( e ) ; e in k || ( k [ e ] = [ ] ) ; k [ e ] . push ( v ) } } CKEDITOR . scriptLoader . load ( h ,
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 , h = [ ] , k = { } , g = { } , l = 0 ; l < a . length ; l ++ ) { var u = a [ l ] ; if ( u ) if ( c [ u ] || f [ u ] ) g [ u ] = this . get ( u ) ; else { var e = this . getFilePath ( u ) ; h . push ( e ) ; e in k || ( k [ e ] = [ ] ) ; k [ e ] . push ( u ) } } CKEDITOR . scriptLoader . load ( h ,
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 h = k [ a [ f ] ] , l = 0 ; l < h . length ; l ++ ) { var n = h [ l ] ; g [ n ] = this . get ( n ) ; c [ n ] = 1 } d . call ( b , g ) } , 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 h = { } , k = function ( b ) { a . call ( this , b , function ( a ) { CKEDITOR . tools . extend ( h , a ) ; var b = [ ] , e ; for ( e in a ) { var g = a [ e ] , t = g && g . requires ; if ( ! d [ e ] ) { if ( g . icons ) for ( var z = g . icons . split ( "," ) , G = z . length ; G -- ; ) CKEDITOR . skin . addIcon ( z [ G ] , g . path + "icons/" + ( CKEDITOR . env . hidpi && g . hidpi ? "hidpi/" : "" ) + z [ G ] + ".png" ) ; g . isSupportedEnvironment = g . isSupportedEnvironment || function ( ) { return ! 0 } ; d [ e ] = 1 } if ( t ) for ( t . split && ( t =
t . split ( "," ) ) , g = 0 ; g < t . length ; g ++ ) h [ t [ g ] ] || b . push ( t [ g ] ) } if ( b . length ) k . call ( this , b ) ; else { for ( e in h ) g = h [ e ] , g . onLoad && ! g . onLoad . _called && ( ! 1 === g . onLoad ( ) && delete h [ e ] , g . onLoad . _called = 1 ) ; c && c . call ( f || window , h ) } } , this ) } ; k . call ( this , b ) } } ) ; CKEDITOR . plugins . setLang = function ( a , d , b ) { var c = this . get ( a ) ; a = c . langEntries || ( c . langEntries = { } ) ; c = c . lang || ( c . lang = [ ] ) ; c . split && ( c = c . split ( "," ) ) ; - 1 == CKEDITOR . tools . indexOf ( c , d ) && c . push ( d ) ; a [ d ] = b } ;
CKEDITOR . plugins . load = CKEDITOR . tools . override ( CKEDITOR . plugins . load , function ( a ) { var d = { } ; return function ( b , c , f ) { var h = { } , k = function ( b ) { a . call ( this , b , function ( a ) { CKEDITOR . tools . extend ( h , a ) ; var b = [ ] , e ; for ( e in a ) { var g = a [ e ] , w = g && g . requires ; if ( ! d [ e ] ) { if ( g . icons ) for ( var z = g . icons . split ( "," ) , G = z . length ; G -- ; ) CKEDITOR . skin . addIcon ( z [ G ] , g . path + "icons/" + ( CKEDITOR . env . hidpi && g . hidpi ? "hidpi/" : "" ) + z [ G ] + ".png" ) ; g . isSupportedEnvironment = g . isSupportedEnvironment || function ( ) { return ! 0 } ; d [ e ] = 1 } if ( w ) for ( w . split && ( w =
w . split ( "," ) ) , g = 0 ; g < w . length ; g ++ ) h [ w [ g ] ] || b . push ( w [ g ] ) } if ( b . length ) k . call ( this , b ) ; else { for ( e in h ) g = h [ e ] , g . onLoad && ! g . onLoad . _called && ( ! 1 === g . onLoad ( ) && delete h [ e ] , g . onLoad . _called = 1 ) ; c && c . call ( f || window , h ) } } , this ) } ; k . call ( this , b ) } } ) ; CKEDITOR . plugins . setLang = function ( a , d , b ) { var c = this . get ( a ) ; a = c . langEntries || ( c . langEntries = { } ) ; c = c . lang || ( c . lang = [ ] ) ; c . split && ( c = c . split ( "," ) ) ; - 1 == CKEDITOR . tools . indexOf ( c , d ) && c . push ( d ) ; a [ d ] = b } ;
CKEDITOR . ui = function ( a ) { if ( a . ui ) return a . ui ; this . items = { } ; this . instances = { } ; this . editor = a ; this . _ = { handlers : { } } ; return this } ;
CKEDITOR . ui . prototype = { add : function ( a , d , b ) { b . name = a . toLowerCase ( ) ; var c = this . items [ a ] = { type : d , command : b . command || null , args : Array . prototype . slice . call ( arguments , 2 ) } ; CKEDITOR . tools . extend ( c , b ) } , get : function ( a ) { return this . instances [ a ] } , create : function ( a ) { var d = this . items [ a ] , b = d && this . _ . handlers [ d . type ] , c = d && d . command && this . editor . getCommand ( d . command ) , b = b && b . create . apply ( this , d . args ) ; this . instances [ a ] = b ; c && c . uiItems . push ( b ) ; b && ! b . type && ( b . type = d . type ) ; return b } , addHandler : function ( a , d ) { this . _ . handlers [ a ] =
d } , space : function ( a ) { return CKEDITOR . document . getById ( this . spaceId ( a ) ) } , spaceId : function ( a ) { return this . editor . id + "_" + a } } ; CKEDITOR . event . implementOn ( CKEDITOR . ui ) ;
@@ -277,29 +277,29 @@ d},space:function(a){return CKEDITOR.document.getById(this.spaceId(a))},spaceId:
this . element = e ; this . elementMode = f ; this . name = this . elementMode != CKEDITOR . ELEMENT _MODE _APPENDTO && ( e . getId ( ) || e . getNameAtt ( ) ) } else this . elementMode = CKEDITOR . ELEMENT _MODE _NONE ; this . _ = { } ; this . commands = { } ; this . templates = { } ; this . name = this . name || d ( ) ; this . id = CKEDITOR . tools . getNextId ( ) ; this . status = "unloaded" ; this . config = CKEDITOR . tools . prototypedCopy ( CKEDITOR . config ) ; this . ui = new CKEDITOR . ui ( this ) ; this . focusManager = new CKEDITOR . focusManager ( this ) ; this . keystrokeHandler = new CKEDITOR . keystrokeHandler ( this ) ; this . on ( "readOnly" ,
c ) ; this . on ( "selectionChange" , function ( a ) { h ( this , a . data . path ) } ) ; this . on ( "activeFilterChange" , function ( ) { h ( this , this . elementPath ( ) , ! 0 ) } ) ; this . on ( "mode" , c ) ; CKEDITOR . dom . selection . setupEditorOptimization ( this ) ; this . on ( "instanceReady" , function ( ) { if ( this . config . startupFocus ) { if ( "end" === this . config . startupFocus ) { var a = this . createRange ( ) ; a . selectNodeContents ( this . editable ( ) ) ; a . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 ) ; a . collapse ( ) ; this . getSelection ( ) . selectRanges ( [ a ] ) } this . focus ( ) } } ) ; CKEDITOR . fire ( "instanceCreated" ,
null , this ) ; CKEDITOR . add ( this ) ; CKEDITOR . tools . setTimeout ( function ( ) { this . isDestroyed ( ) || this . isDetached ( ) || g ( this , a ) } , 0 , this ) } function d ( ) { do var a = "editor" + ++ G ; 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 h ( 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 = u [ b ] || ( u [ 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 = CKEDITOR . editorConfig ? CKEDITOR . editorConfig : function ( ) { } ; k ( a ) } ) ; return ! 0 } function g ( a , b ) { a . on ( "customConfigLoaded" ,
b . modes [ a . mode ] ? "enable" : "disable" ] ( ) } function h ( a , b , c ) { if ( b ) { var d , e , f = a . commands ; for ( e in f ) d = f [ e ] , ( c || d . contextSensitive ) && d . refresh ( a , b ) } } function k ( a ) { var b = a . config . customConfig ; if ( ! b ) return ! 1 ; var b = CKEDITOR . getUrl ( b ) , c = t [ b ] || ( t [ b ] = { } ) ; c . fn ? ( c . fn . call ( a , a . config ) , CKEDITOR . getUrl ( a . config . customConfig ) != b && k ( a ) || a . fireOnce ( "customConfigLoaded" ) ) : CKEDITOR . scriptLoader . queue ( b , function ( ) { c . fn = CKEDITOR . editorConfig ? CKEDITOR . editorConfig : function ( ) { } ; k ( a ) } ) ; return ! 0 } function g ( a , b ) { a . on ( "customConfigLoaded" ,
function ( ) { if ( b ) { if ( b . on ) for ( var c in b . on ) a . on ( c , b . on [ c ] ) ; CKEDITOR . tools . extend ( a . config , b , ! 0 ) ; delete a . config . on } c = a . config ; a . readOnly = c . readOnly ? ! 0 : a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? a . element . is ( "textarea" ) ? a . element . hasAttribute ( "disabled" ) || a . element . hasAttribute ( "readonly" ) : a . element . isReadOnly ( ) : a . elementMode == CKEDITOR . ELEMENT _MODE _REPLACE ? a . element . hasAttribute ( "disabled" ) || a . element . hasAttribute ( "readonly" ) : ! 1 ; a . blockless = a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? ! ( a . element . is ( "textarea" ) ||
CKEDITOR . dtd [ a . element . getName ( ) ] . p ) : ! 1 ; a . tabIndex = c . tabIndex || a . element && a . element . getAttribute ( "tabindex" ) || 0 ; a . activeEnterMode = a . enterMode = a . blockless ? CKEDITOR . ENTER _BR : c . enterMode ; a . activeShiftEnterMode = a . shiftEnterMode = a . blockless ? CKEDITOR . ENTER _BR : c . shiftEnterMode ; c . skin && ( CKEDITOR . skinName = c . skin ) ; a . fireOnce ( "configLoaded" ) ; a . dataProcessor = new CKEDITOR . htmlDataProcessor ( a ) ; a . filter = a . activeFilter = new CKEDITOR . filter ( a ) ; l ( a ) } ) ; b && null != b . customConfig && ( a . config . customConfig = b . customConfig ) ;
k ( a ) || a . fireOnce ( "customConfigLoaded" ) } function l ( a ) { CKEDITOR . skin . loadPart ( "editor" , function ( ) { v ( a ) } ) } function v ( a ) { CKEDITOR . lang . load ( a . config . language , a . config . defaultLanguage , function ( b , c ) { var d = a . config . title ; a . langCode = b ; a . lang = CKEDITOR . tools . prototypedCopy ( c ) ; a . title = "string" == typeof d || ! 1 === d ? d : [ a . lang . editor , a . name ] . join ( ", " ) ; a . config . contentsLangDirection || ( a . config . contentsLangDirection = a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? a . element . getDirection ( 1 ) : a . lang . dir ) ; a . fire ( "langLoaded" ) ;
k ( a ) || a . fireOnce ( "customConfigLoaded" ) } function l ( a ) { CKEDITOR . skin . loadPart ( "editor" , function ( ) { u ( a ) } ) } function u ( a ) { CKEDITOR . lang . load ( a . config . language , a . config . defaultLanguage , function ( b , c ) { var d = a . config . title ; a . langCode = b ; a . lang = CKEDITOR . tools . prototypedCopy ( c ) ; a . title = "string" == typeof d || ! 1 === d ? d : [ a . lang . editor , a . name ] . join ( ", " ) ; a . config . contentsLangDirection || ( a . config . contentsLangDirection = a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? a . element . getDirection ( 1 ) : a . lang . dir ) ; a . fire ( "langLoaded" ) ;
e ( a ) } ) } function e ( 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 h = new RegExp ( "(?:^|,)(?:" + e . replace ( /,/g , "|" ) + ")(?\x3d,|$)" , "g" ) , d = d . replace ( h , "" ) , d = d + ( "," + e ) ; if ( f ) var g = new RegExp ( "(?:^|,)(?:" + f . replace ( /,/g , "|" ) + ")(?\x3d,|$)" , "g" ) , d = d . replace ( g ,
"" ) ; CKEDITOR . env . air && ( d += ",adobeair" ) ; CKEDITOR . plugins . load ( d . split ( "," ) , function ( b ) { var d = [ ] , e = [ ] , f = [ ] ; a . plugins = CKEDITOR . tools . extend ( { } , a . plugins , b ) ; for ( var m in b ) { var h = b [ m ] , k = h . lang , B = null , p = h . requires , N ; CKEDITOR . tools . isArray ( p ) && ( p = p . join ( "," ) ) ; if ( p && ( N = p . match ( g ) ) ) for ( ; p = N . pop ( ) ; ) CKEDITOR . error ( "editor-plugin-required" , { plugin : p . replace ( "," , "" ) , requiredBy : m } ) ; k && ! a . lang [ m ] && ( k . split && ( k = k . split ( "," ) ) , 0 <= CKEDITOR . tools . indexOf ( k , a . langCode ) ? B = a . langCode : ( B = a . langCode . replace ( /-.*/ , "" ) , B =
B != a . langCode && 0 <= CKEDITOR . tools . indexOf ( k , B ) ? B : 0 <= CKEDITOR . tools . indexOf ( k , "en" ) ? "en" : k [ 0 ] ) , h . langEntries && h . langEntries [ B ] ? ( a . lang [ m ] = h . langEntries [ B ] , B = null ) : f . push ( CKEDITOR . getUrl ( h . path + "lang/" + B + ".js" ) ) ) ; e . push ( B ) ; d . push ( h ) } CKEDITOR . scriptLoader . load ( f , function ( ) { if ( ! a . isDestroyed ( ) && ! a . isDetached ( ) ) { for ( var b = [ "beforeInit" , "init" , "afterInit" ] , f = 0 ; f < b . length ; f ++ ) for ( var m = 0 ; m < d . length ; m ++ ) { var p = d [ m ] ; 0 === f && e [ m ] && p . lang && p . langEntries && ( a . lang [ p . name ] = p . langEntries [ e [ m ] ] ) ; if ( p [ b [ f ] ] ) p [ b [ f ] ] ( a ) } a . fireOnce ( "pluginsLoaded" ) ;
c . keystrokes && a . setKeystroke ( a . config . keystrokes ) ; for ( m = 0 ; m < a . config . blockedKeystrokes . length ; m ++ ) a . keystrokeHandler . blockedKeystrokes [ a . config . blockedKeystrokes [ m ] ] = 1 ; a . status = "loaded" ; a . fireOnce ( "loaded" ) ; CKEDITOR . fire ( "instanceLoaded" , null , a ) } } ) } ) } function t ( ) { var a = this . element ; if ( a && this . elementMode != CKEDITOR . ELEMENT _MODE _APPENDTO ) { var b = this . getData ( ) ; this . config . htmlEncodeOutput && ( b = CKEDITOR . tools . htmlEncode ( b ) ) ; a . is ( "textarea" ) ? a . setValue ( b ) : a . setHtml ( b ) ; return ! 0 } return ! 1 } function z ( a , b ) { function c ( a ) { var b =
"" ) ; CKEDITOR . env . air && ( d += ",adobeair" ) ; CKEDITOR . plugins . load ( d . split ( "," ) , function ( b ) { var d = [ ] , e = [ ] , f = [ ] ; a . plugins = CKEDITOR . tools . extend ( { } , a . plugins , b ) ; for ( var m in b ) { var h = b [ m ] , k = h . lang , C = null , p = h . requires , N ; CKEDITOR . tools . isArray ( p ) && ( p = p . join ( "," ) ) ; if ( p && ( N = p . match ( g ) ) ) for ( ; p = N . pop ( ) ; ) CKEDITOR . error ( "editor-plugin-required" , { plugin : p . replace ( "," , "" ) , requiredBy : m } ) ; k && ! a . lang [ m ] && ( k . split && ( k = k . split ( "," ) ) , 0 <= CKEDITOR . tools . indexOf ( k , a . langCode ) ? C = a . langCode : ( C = a . langCode . replace ( /-.*/ , "" ) , C =
C != a . langCode && 0 <= CKEDITOR . tools . indexOf ( k , C ) ? C : 0 <= CKEDITOR . tools . indexOf ( k , "en" ) ? "en" : k [ 0 ] ) , h . langEntries && h . langEntries [ C ] ? ( a . lang [ m ] = h . langEntries [ C ] , C = null ) : f . push ( CKEDITOR . getUrl ( h . path + "lang/" + C + ".js" ) ) ) ; e . push ( C ) ; d . push ( h ) } CKEDITOR . scriptLoader . load ( f , function ( ) { if ( ! a . isDestroyed ( ) && ! a . isDetached ( ) ) { for ( var b = [ "beforeInit" , "init" , "afterInit" ] , f = 0 ; f < b . length ; f ++ ) for ( var m = 0 ; m < d . length ; m ++ ) { var p = d [ m ] ; 0 === f && e [ m ] && p . lang && p . langEntries && ( a . lang [ p . name ] = p . langEntries [ e [ m ] ] ) ; if ( p [ b [ f ] ] ) p [ b [ f ] ] ( a ) } a . fireOnce ( "pluginsLoaded" ) ;
c . keystrokes && a . setKeystroke ( a . config . keystrokes ) ; for ( m = 0 ; m < a . config . blockedKeystrokes . length ; m ++ ) a . keystrokeHandler . blockedKeystrokes [ a . config . blockedKeystrokes [ m ] ] = 1 ; a . status = "loaded" ; a . fireOnce ( "loaded" ) ; CKEDITOR . fire ( "instanceLoaded" , null , a ) } } ) } ) } function w ( ) { var a = this . element ; if ( a && this . elementMode != CKEDITOR . ELEMENT _MODE _APPENDTO ) { var b = this . getData ( ) ; this . config . htmlEncodeOutput && ( b = CKEDITOR . tools . htmlEncode ( b ) ) ; a . is ( "textarea" ) ? a . setValue ( b ) : a . setHtml ( b ) ; return ! 0 } return ! 1 } function z ( a , b ) { function c ( a ) { var b =
a . startContainer , d = a . endContainer ; return b . is && ( b . is ( "tr" ) || b . is ( "td" ) && b . equals ( d ) && a . endOffset === b . getChildCount ( ) ) ? ! 0 : ! 1 } function d ( a ) { var b = a . startContainer ; return b . is ( "tr" ) ? a . cloneContents ( ) : b . clone ( ! 0 ) } for ( var e = new CKEDITOR . dom . documentFragment , f , h , g , k = 0 ; k < a . length ; k ++ ) { var l = a [ k ] , r = l . startContainer . getAscendant ( "tr" , ! 0 ) ; c ( l ) ? ( f || ( f = r . getAscendant ( "table" ) . clone ( ) , f . append ( r . getAscendant ( { thead : 1 , tbody : 1 , tfoot : 1 } ) . clone ( ) ) , e . append ( f ) , f = f . findOne ( "thead, tbody, tfoot" ) ) , h && h . equals ( r ) || ( h =
r , g = r . clone ( ) , f . append ( g ) ) , g . append ( d ( l ) ) ) : e . append ( l . cloneContents ( ) ) } return f ? e : b . getHtmlFromRange ( a [ 0 ] ) } a . prototype = CKEDITOR . editor . prototype ; CKEDITOR . editor = a ; var G = 0 , u = { } ; CKEDITOR . tools . extend ( CKEDITOR . editor . prototype , { plugins : { detectConflict : function ( a , b ) { for ( var c = 0 ; c < b . length ; c ++ ) { var d = b [ c ] ; if ( this [ d ] ) return CKEDITOR . warn ( "editor-plugin-conflict" , { plugin : a , replacedWith : d } ) , ! 0 } return ! 1 } } , addCommand : function ( a , b ) { b . name = a . toLowerCase ( ) ; var c = b instanceof CKEDITOR . command ? b : new CKEDITOR . command ( this ,
b ) ; this . mode && f ( this , c ) ; return this . commands [ a ] = c } , _attachToForm : function ( ) { function a ( b ) { c . updateElement ( ) ; c . _ . required && ! d . getValue ( ) && ! 1 === c . fire ( "required" ) && b . data . preventDefault ( ) } function b ( a ) { return ! ! ( a && a . call && a . apply ) } var c = this , d = c . element , e = new CKEDITOR . dom . element ( d . $ . form ) ; d . is ( "textarea" ) && e && ( e . on ( "submit" , a ) , b ( e . $ . submit ) && ( e . $ . submit = CKEDITOR . tools . override ( e . $ . submit , function ( b ) { return function ( ) { a ( ) ; b . apply ? b . apply ( this ) : b ( ) } } ) ) , c . on ( "destroy" , function ( ) { e . removeListener ( "submit" ,
a ) } ) ) } , destroy : function ( a ) { var b = CKEDITOR . filter . instances , c = this ; this . fire ( "beforeDestroy" ) ; ! a && t . call ( this ) ; this . editable ( null ) ; this . filter && delete this . filter ; CKEDITOR . tools . array . forEach ( CKEDITOR . tools . object . keys ( b ) , function ( a ) { a = b [ a ] ; c === a . editor && a . destroy ( ) } ) ; delete this . activeFilter ; this . status = "destroyed" ; this . fire ( "destroy" ) ; this . removeAllListeners ( ) ; CKEDITOR . remove ( this ) ; CKEDITOR . fire ( "instanceDestroyed" , null , this ) } , elementPath : function ( a ) { if ( ! a ) { a = this . getSelection ( ) ; if ( ! a ) return null ;
r , g = r . clone ( ) , f . append ( g ) ) , g . append ( d ( l ) ) ) : e . append ( l . cloneContents ( ) ) } return f ? e : b . getHtmlFromRange ( a [ 0 ] ) } a . prototype = CKEDITOR . editor . prototype ; CKEDITOR . editor = a ; var G = 0 , t = { } ; CKEDITOR . tools . extend ( CKEDITOR . editor . prototype , { plugins : { detectConflict : function ( a , b ) { for ( var c = 0 ; c < b . length ; c ++ ) { var d = b [ c ] ; if ( this [ d ] ) return CKEDITOR . warn ( "editor-plugin-conflict" , { plugin : a , replacedWith : d } ) , ! 0 } return ! 1 } } , addCommand : function ( a , b ) { b . name = a . toLowerCase ( ) ; var c = b instanceof CKEDITOR . command ? b : new CKEDITOR . command ( this ,
b ) ; this . mode && f ( this , c ) ; return this . commands [ a ] = c } , _attachToForm : function ( ) { function a ( b ) { c . updateElement ( ) ; c . _ . required && ! d . getValue ( ) && ! 1 === c . fire ( "required" ) && b . data . preventDefault ( ) } function b ( a ) { return ! ! ( a && a . call && a . apply ) } var c = this , d = c . element , f = new CKEDITOR . dom . element ( d . $ . form ) ; d . is ( "textarea" ) && f && ( f . on ( "submit" , a ) , b ( f . $ . submit ) && ( f . $ . submit = CKEDITOR . tools . override ( f . $ . submit , function ( b ) { return function ( ) { a ( ) ; b . apply ? b . apply ( this ) : b ( ) } } ) ) , c . on ( "destroy" , function ( ) { f . removeListener ( "submit" ,
a ) } ) ) } , destroy : function ( a ) { var b = CKEDITOR . filter . instances , c = this ; this . fire ( "beforeDestroy" ) ; ! a && w . call ( this ) ; this . editable ( null ) ; this . filter && delete this . filter ; CKEDITOR . tools . array . forEach ( CKEDITOR . tools . object . keys ( b ) , function ( a ) { a = b [ a ] ; c === a . editor && a . destroy ( ) } ) ; delete this . activeFilter ; this . status = "destroyed" ; this . fire ( "destroy" ) ; this . removeAllListeners ( ) ; CKEDITOR . remove ( this ) ; CKEDITOR . fire ( "instanceDestroyed" , null , this ) } , elementPath : function ( a ) { if ( ! a ) { a = this . getSelection ( ) ; if ( ! a ) return null ;
a = a . getStartElement ( ) } return a ? new CKEDITOR . dom . elementPath ( a , this . editable ( ) ) : null } , createRange : function ( ) { var a = this . editable ( ) ; return a ? new CKEDITOR . dom . range ( a ) : null } , execCommand : function ( a , b ) { var c = this . getCommand ( a ) , d = { name : a , commandData : b || { } , command : c } ; return c && c . state != CKEDITOR . TRISTATE _DISABLED && ! 1 !== this . fire ( "beforeCommandExec" , d ) && ( d . returnValue = c . exec ( d . commandData ) , ! c . async && ! 1 !== this . fire ( "afterCommandExec" , d ) ) ? d . returnValue : ! 1 } , getCommand : function ( a ) { return this . commands [ a ] } , getData : function ( a ) { ! a &&
this . fire ( "beforeGetData" ) ; var b = this . _ . data ; "string" != typeof b && ( b = ( b = this . element ) && this . elementMode == CKEDITOR . ELEMENT _MODE _REPLACE ? b . is ( "textarea" ) ? b . getValue ( ) : b . getHtml ( ) : "" ) ; b = { dataValue : b } ; ! a && this . fire ( "getData" , b ) ; return b . dataValue } , getSnapshot : function ( ) { var a = this . fire ( "getSnapshot" ) ; "string" != typeof a && ( a = ( a = this . element ) && this . elementMode == CKEDITOR . ELEMENT _MODE _REPLACE ? a . is ( "textarea" ) ? a . getValue ( ) : a . getHtml ( ) : "" ) ; return a } , loadSnapshot : function ( a ) { this . fire ( "loadSnapshot" , a ) } , setData : function ( a ,
b , c ) { var d = ! 0 , e = b ; b && "object" == typeof b && ( c = b . internal , e = b . callback , d = ! b . noSnapshot ) ; ! c && d && this . fire ( "saveSnapshot" ) ; if ( e || ! c ) this . once ( "dataReady" , function ( a ) { ! c && d && this . fire ( "saveSnapshot" ) ; e && e . call ( a . editor ) } ) ; a = { dataValue : a } ; ! c && this . fire ( "setData" , a ) ; this . _ . data = a . dataValue ; ! c && this . fire ( "afterSetData" , a ) } , setReadOnly : function ( a ) { a = null == a || a ; this . readOnly != a && ( this . readOnly = a , this . keystrokeHandler . blockedKeystrokes [ 8 ] = + a , this . editable ( ) . setReadOnly ( a ) , this . fire ( "readOnly" ) ) } , insertHtml : function ( a ,
b , c ) { this . fire ( "insertHtml" , { dataValue : a , mode : b , range : c } ) } , insertText : function ( a ) { this . fire ( "insertText" , a ) } , insertElement : function ( a ) { this . fire ( "insertElement" , a ) } , getSelectedHtml : function ( a ) { var b = this . editable ( ) , c = this . getSelection ( ) , c = c && c . getRanges ( ) ; if ( ! b || ! c || 0 === c . length ) return null ; b = z ( c , b ) ; return a ? b . getHtml ( ) : b } , extractSelectedHtml : function ( a , b ) { var c = this . editable ( ) , d = this . getSelection ( ) . getRanges ( ) , e = new CKEDITOR . dom . documentFragment , f ; if ( ! c || 0 === d . length ) return null ; for ( f = 0 ; f < d . length ; f ++ ) e . append ( c . extractHtmlFromRange ( d [ f ] ,
b ) ) ; b || this . getSelection ( ) . selectRanges ( [ d [ 0 ] ] ) ; return a ? e . getHtml ( ) : e } , focus : function ( ) { this . fire ( "beforeFocus" ) } , checkDirty : function ( ) { return "ready" == this . status && this . _ . previousValue !== this . getSnapshot ( ) } , resetDirty : function ( ) { this . _ . previousValue = this . getSnapshot ( ) } , updateElement : function ( ) { return t . call ( this ) } , setKeystroke : function ( ) { for ( var a = this . keystrokeHandler . keystrokes , b = CKEDITOR . tools . isArray ( arguments [ 0 ] ) ? arguments [ 0 ] : [ [ ] . slice . call ( arguments , 0 ) ] , c , d , e = b . length ; e -- ; ) c = b [ e ] , d = 0 , CKEDITOR . tools . isArray ( c ) &&
( d = c [ 1 ] , c = c [ 0 ] ) , d ? a [ c ] = d : delete a [ c ] } , getCommandKeystroke : function ( a , b ) { var c = "string" === typeof a ? this . getCommand ( a ) : a , d = [ ] ; if ( c ) { var e = CKEDITOR . tools . object . findKey ( this . commands , c ) , f = this . keystrokeHandler . keystrokes ; if ( c . fakeKeystroke ) d . push ( c . fakeKeystroke ) ; else for ( var h in f ) f [ h ] === e && d . push ( h ) } return b ? d : d [ 0 ] || null } , addFeature : function ( a ) { return this . filter . addFeature ( a ) } , setActiveFilter : function ( a ) { a || ( a = this . filter ) ; this . activeFilter !== a && ( this . activeFilter = a , this . fire ( "activeFilterChange" ) ,
b , c ) { var d = ! 0 , f = b ; b && "object" == typeof b && ( c = b . internal , f = b . callback , d = ! b . noSnapshot ) ; ! c && d && this . fire ( "saveSnapshot" ) ; if ( f || ! c ) this . once ( "dataReady" , function ( a ) { ! c && d && this . fire ( "saveSnapshot" ) ; f && f . call ( a . editor ) } ) ; a = { dataValue : a } ; ! c && this . fire ( "setData" , a ) ; this . _ . data = a . dataValue ; ! c && this . fire ( "afterSetData" , a ) } , setReadOnly : function ( a ) { a = null == a || a ; this . readOnly != a && ( this . readOnly = a , this . keystrokeHandler . blockedKeystrokes [ 8 ] = + a , this . editable ( ) . setReadOnly ( a ) , this . fire ( "readOnly" ) ) } , insertHtml : function ( a ,
b , c ) { this . fire ( "insertHtml" , { dataValue : a , mode : b , range : c } ) } , insertText : function ( a ) { this . fire ( "insertText" , a ) } , insertElement : function ( a ) { this . fire ( "insertElement" , a ) } , getSelectedHtml : function ( a ) { var b = this . editable ( ) , c = this . getSelection ( ) , c = c && c . getRanges ( ) ; if ( ! b || ! c || 0 === c . length ) return null ; b = z ( c , b ) ; return a ? b . getHtml ( ) : b } , extractSelectedHtml : function ( a , b ) { var c = this . editable ( ) , d = this . getSelection ( ) . getRanges ( ) , f = new CKEDITOR . dom . documentFragment , e ; if ( ! c || 0 === d . length ) return null ; for ( e = 0 ; e < d . length ; e ++ ) f . append ( c . extractHtmlFromRange ( d [ e ] ,
b ) ) ; b || this . getSelection ( ) . selectRanges ( [ d [ 0 ] ] ) ; return a ? f . getHtml ( ) : f } , focus : function ( ) { this . fire ( "beforeFocus" ) } , checkDirty : function ( ) { return "ready" == this . status && this . _ . previousValue !== this . getSnapshot ( ) } , resetDirty : function ( ) { this . _ . previousValue = this . getSnapshot ( ) } , updateElement : function ( ) { return w . call ( this ) } , setKeystroke : function ( ) { for ( var a = this . keystrokeHandler . keystrokes , b = CKEDITOR . tools . isArray ( arguments [ 0 ] ) ? arguments [ 0 ] : [ [ ] . slice . call ( arguments , 0 ) ] , c , d , f = b . length ; f -- ; ) c = b [ f ] , d = 0 , CKEDITOR . tools . isArray ( c ) &&
( d = c [ 1 ] , c = c [ 0 ] ) , d ? a [ c ] = d : delete a [ c ] } , getCommandKeystroke : function ( a , b ) { var c = "string" === typeof a ? this . getCommand ( a ) : a , d = [ ] ; if ( c ) { var f = CKEDITOR . tools . object . findKey ( this . commands , c ) , e = this . keystrokeHandler . keystrokes ; if ( c . fakeKeystroke ) d . push ( c . fakeKeystroke ) ; else for ( var h in e ) e [ h ] === f && d . push ( h ) } return b ? d : d [ 0 ] || null } , addFeature : function ( a ) { return this . filter . addFeature ( a ) } , setActiveFilter : function ( a ) { a || ( a = this . filter ) ; this . activeFilter !== a && ( this . activeFilter = a , this . fire ( "activeFilterChange" ) ,
a === this . filter ? this . setActiveEnterMode ( null , null ) : this . setActiveEnterMode ( a . getAllowedEnterMode ( this . enterMode ) , a . getAllowedEnterMode ( this . shiftEnterMode , ! 0 ) ) ) } , setActiveEnterMode : function ( a , b ) { a = a ? this . blockless ? CKEDITOR . ENTER _BR : a : this . enterMode ; b = b ? this . blockless ? CKEDITOR . ENTER _BR : b : this . shiftEnterMode ; if ( this . activeEnterMode != a || this . activeShiftEnterMode != b ) this . activeEnterMode = a , this . activeShiftEnterMode = b , this . fire ( "activeEnterModeChange" ) } , showNotification : function ( a ) { alert ( a ) } , isDetached : function ( ) { return ! ! this . container &&
this . container . isDetached ( ) } , isDestroyed : function ( ) { return "destroyed" === this . status } } ) ; CKEDITOR . editor . _getEditorElement = function ( a ) { if ( ! CKEDITOR . env . isCompatible ) return null ; var b = CKEDITOR . dom . element . get ( a ) ; return b ? b . getEditor ( ) ? ( CKEDITOR . error ( "editor-element-conflict" , { editorName : b . getEditor ( ) . name } ) , null ) : b : ( CKEDITOR . error ( "editor-incorrect-element" , { element : a } ) , null ) } } ) ( ) ; CKEDITOR . ELEMENT _MODE _NONE = 0 ; CKEDITOR . ELEMENT _MODE _REPLACE = 1 ; CKEDITOR . ELEMENT _MODE _APPENDTO = 2 ;
CKEDITOR . ELEMENT _MODE _INLINE = 3 ; CKEDITOR . htmlParser = function ( ) { this . _ = { htmlPartsRegex : /<(?:(?:\/([^>]+)>)|(?:!--([\S|\s]*?)--\x3e)|(?:([^\/\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 , h = 0 , k ; c = this . _ . htmlPartsRegex . exec ( b ) ; ) { f = c . index ; if ( f > h ) if ( h = b . substring ( h , f ) , k ) k . push ( h ) ; else this . onText ( h ) ;
h = 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 g = { } , l , v = c [ 4 ] ; c = ! ! c [ 5 ] ; if ( v ) for ( ; l = a . exec ( v ) ; ) { var e = l [ 1 ] . toLowerCase ( ) ; l = l [ 2 ] || l [ 3 ] || l [ 4 ] || "" ; g [ e ] = ! l && d [ e ] ? e : CKEDITOR . tools . htmlDecodeAttr ( l ) } this . onTagOpen ( f , g , c ) ; ! k && CKEDITOR . dtd . $cdata [ f ] && ( k = [ ] ) } } else if ( f = c [ 2 ] ) this . onComment ( f ) } if ( b . length > h ) this . onText ( b . substring ( h ,
h = 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 g = { } , l , u = c [ 4 ] ; c = ! ! c [ 5 ] ; if ( u ) for ( ; l = a . exec ( u ) ; ) { var e = l [ 1 ] . toLowerCase ( ) ; l = l [ 2 ] || l [ 3 ] || l [ 4 ] || "" ; g [ e ] = ! l && d [ e ] ? e : CKEDITOR . tools . htmlDecodeAttr ( l ) } this . onTagOpen ( f , g , c ) ; ! k && CKEDITOR . dtd . $cdata [ f ] && ( k = [ ] ) } } else if ( f = c [ 2 ] ) this . onComment ( f ) } if ( b . length > h ) this . onText ( b . substring ( h ,
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 . text = function ( a ) { this . value = a ; this . _ = { isBlockLike : ! 1 } } ; CKEDITOR . htmlParser . text . prototype = CKEDITOR . tools . extend ( new CKEDITOR . htmlParser . node , { type : CKEDITOR . NODE _TEXT , filter : function ( a , d ) { if ( ! ( this . value = a . onText ( d , this . value , this ) ) ) return this . remove ( ) , ! 1 } , writeHtml : function ( a , d ) { d && this . filter ( d ) ; a . text ( this . value ) } } ) } ) ( ) ; "use strict" ;
( function ( ) { CKEDITOR . htmlParser . cdata = function ( a ) { this . value = a } ; CKEDITOR . htmlParser . cdata . prototype = CKEDITOR . tools . extend ( new CKEDITOR . htmlParser . node , { type : CKEDITOR . NODE _TEXT , filter : function ( ) { } , writeHtml : function ( a ) { a . write ( this . value ) } } ) } ) ( ) ; "use strict" ; CKEDITOR . htmlParser . fragment = function ( ) { this . children = [ ] ; this . parent = null ; this . _ = { isBlockLike : ! 0 , hasInlineStarted : ! 1 } } ;
( function ( ) { function a ( a ) { return a . attributes [ "data-cke-survive" ] ? ! 1 : "a" == a . name && a . attributes . href || CKEDITOR . dtd . $removeEmpty [ a . name ] } var d = CKEDITOR . tools . extend ( { table : 1 , ul : 1 , ol : 1 , dl : 1 } , CKEDITOR . dtd . table , CKEDITOR . dtd . ul , CKEDITOR . dtd . ol , CKEDITOR . dtd . dl ) , b = { ol : 1 , ul : 1 } , c = CKEDITOR . tools . extend ( { } , { html : 1 } , CKEDITOR . dtd . html , CKEDITOR . dtd . body , CKEDITOR . dtd . head , { style : 1 , script : 1 } ) , f = { ul : "li" , ol : "li" , dl : "dd" , table : "tbody" , tbody : "tr" , thead : "tr" , tfoot : "tr" , tr : "td" } ; CKEDITOR . htmlParser . fragment . fromHtml =
function ( h , k , g ) { function l ( a ) { var b ; if ( 0 < n . length ) for ( var c = 0 ; c < n . length ; c ++ ) { var d = n [ c ] , e = d . name , f = CKEDITOR . dtd [ e ] , h = y . name && CKEDITOR . dtd [ y . name ] ; h && ! h [ e ] || a && f && ! f [ a ] && CKEDITOR . dtd [ a ] ? e == y . name && ( x ( y , y . parent , 1 ) , c -- ) : ( b || ( v ( ) , b = 1 ) , d = d . clone ( ) , d . parent = y , y = d , n . splice ( c , 1 ) , c -- ) } } function v ( ) { for ( ; L . length ; ) x ( L . shift ( ) , y ) } function e ( 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 || y || u ; var f = y ; void 0 === b . previous && ( t ( c , b ) && ( y = c , G . onTagOpen ( g , { } ) , b . returnPoint = c = y ) , e ( b ) , a ( b ) && ! b . children . length || c . add ( b ) , "pre" == b . name && ( I = ! 1 ) , "textarea" == b . name && ( H = ! 1 ) ) ; b . returnPoint ? ( y = b . returnPoint , delete b . returnPoint ) : y = d ? c : f } function t ( a , b ) { if ( ( a == u || "body" == a . name ) && g && ( ! a . name || CKEDITOR . dtd [ a . name ] [ g ] ) ) { var c , d ; return ( c = b . attributes && ( d = b . attributes [ "data-cke-real-element-type" ] ) ? d : b . name ) && c in CKEDITOR . dtd . $inline && ! ( c in CKEDITOR . dtd . head ) &&
! b . isOrphan || b . type == CKEDITOR . NODE _TEXT } } function z ( a , b ) { return a in CKEDITOR . dtd . $listItem || a in CKEDITOR . dtd . $tableContent ? a == b || "dt" == a && "dd" == b || "dd" == a && "dt" == b : ! 1 } var G = new CKEDITOR . htmlParser , u = k instanceof CKEDITOR . htmlParser . element ? k : "string" == typeof k ? new CKEDITOR . htmlParser . element ( k ) : new CKEDITOR . htmlParser . fragment , n = [ ] , L = [ ] , y = u , H = "textarea" == u . name , I = "pre" == u . name ; G . onTagOpen = function ( e , f , h , g ) { f = new CKEDITOR . htmlParser . element ( e , f ) ; f . isUnknown && h && ( f . isEmpty = ! 0 ) ; f . isOptionalClose = g ;
if ( a ( f ) ) n . push ( f ) ; else { if ( "pre" == e ) I = ! 0 ; else { if ( "br" == e && I ) { y . add ( new CKEDITOR . htmlParser . text ( "\n" ) ) ; return } "textarea" == e && ( H = ! 0 ) } if ( "br" == e ) L . push ( f ) ; else { for ( ; ! ( g = ( h = y . name ) ? CKEDITOR . dtd [ h ] || ( y . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : c , f . isUnknown || y . isUnknown || g [ e ] ) ; ) if ( y . isOptionalClose ) G . onTagClose ( h ) ; else if ( e in b && h in b ) h = y . children , ( h = h [ h . length - 1 ] ) && "li" == h . name || x ( h = new CKEDITOR . htmlParser . element ( "li" ) , y ) , ! f . returnPoint && ( f . returnPoint = y ) , y = h ; else if ( e in CKEDITOR . dtd . $listItem &&
! z ( e , h ) ) G . onTagOpen ( "li" == e ? "ul" : "dl" , { } , 0 , 1 ) ; else if ( h in d && ! z ( e , h ) ) ! f . returnPoint && ( f . returnPoint = y ) , y = y . parent ; else if ( h in CKEDITOR . dtd . $inline && n . unshift ( y ) , y . parent ) x ( y , y . parent , 1 ) ; else { f . isOrphan = 1 ; break } l ( e ) ; v ( ) ; f . parent = y ; f . isEmpty ? x ( f ) : y = f } } } ; G . onTagClose = function ( a ) { for ( var b = n . length - 1 ; 0 <= b ; b -- ) if ( a == n [ b ] . name ) { n . splice ( b , 1 ) ; return } for ( var c = [ ] , d = [ ] , e = y ; e != u && e . name != a ; ) e . _ . isBlockLike || d . unshift ( e ) , c . push ( e ) , e = e . returnPoint || e . parent ; if ( e != u ) { for ( b = 0 ; b < c . length ; b ++ ) { var f = c [ b ] ; x ( f , f . parent ) } y =
e ; e . _ . isBlockLike && v ( ) ; x ( e , e . parent ) ; e == y && ( y = y . parent ) ; n = n . concat ( d ) } "body" == a && ( g = ! 1 ) } ; G . onText = function ( a ) { if ( ! ( y . _ . hasInlineStarted && ! L . length || I || H ) && ( a = CKEDITOR . tools . ltrim ( a ) , 0 === a . length ) ) return ; var b = y . name , e = b ? CKEDITOR . dtd [ b ] || ( y . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : c ; if ( ! H && ! e [ "#" ] && b in d ) G . onTagOpen ( f [ b ] || "" ) , G . onText ( a ) ; else { v ( ) ; l ( ) ; I || H || ( a = a . replace ( /[\t\r\n ]{2,}|[\t\r\n]/g , " " ) ) ; a = new CKEDITOR . htmlParser . text ( a ) ; if ( t ( y , a ) ) this . onTagOpen ( g , { } , 0 , 1 ) ; y . add ( a ) } } ; G . onCDATA =
function ( a ) { y . add ( new CKEDITOR . htmlParser . cdata ( a ) ) } ; G . onComment = function ( a ) { v ( ) ; l ( ) ; y . add ( new CKEDITOR . htmlParser . comment ( a ) ) } ; G . parse ( h ) ; for ( v ( ) ; y != u ; ) x ( y , y . parent , 1 ) ; e ( u ) ; return u } ; CKEDITOR . htmlParser . fragment . prototype = { type : CKEDITOR . NODE _DOCUMENT _FRAGMENT , add : function ( a , b ) { isNaN ( b ) && ( b = this . children . length ) ; var c = 0 < b ? this . children [ b - 1 ] : null ; if ( c ) { if ( a . _ . isBlockLike && c . type == CKEDITOR . NODE _TEXT && ( c . value = CKEDITOR . tools . rtrim ( c . value ) , 0 === c . value . length ) ) { this . children . pop ( ) ; this . add ( a ) ; return } c . next =
function ( h , k , g ) { function l ( a ) { var b ; if ( 0 < n . length ) for ( var c = 0 ; c < n . length ; c ++ ) { var d = n [ c ] , f = d . name , e = CKEDITOR . dtd [ f ] , h = y . name && CKEDITOR . dtd [ y . name ] ; h && ! h [ f ] || a && e && ! e [ a ] && CKEDITOR . dtd [ a ] ? f == y . name && ( x ( y , y . parent , 1 ) , c -- ) : ( b || ( u ( ) , b = 1 ) , d = d . clone ( ) , d . parent = y , y = d , n . splice ( c , 1 ) , c -- ) } } function u ( ) { for ( ; L . length ; ) x ( L . shift ( ) , y ) } function e ( 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 || y || t ; var f = y ; void 0 === b . previous && ( w ( c , b ) && ( y = c , G . onTagOpen ( g , { } ) , b . returnPoint = c = y ) , e ( b ) , a ( b ) && ! b . children . length || c . add ( b ) , "pre" == b . name && ( I = ! 1 ) , "textarea" == b . name && ( H = ! 1 ) ) ; b . returnPoint ? ( y = b . returnPoint , delete b . returnPoint ) : y = d ? c : f } function w ( a , b ) { if ( ( a == t || "body" == a . name ) && g && ( ! a . name || CKEDITOR . dtd [ a . name ] [ g ] ) ) { var c , d ; return ( c = b . attributes && ( d = b . attributes [ "data-cke-real-element-type" ] ) ? d : b . name ) && c in CKEDITOR . dtd . $inline && ! ( c in CKEDITOR . dtd . head ) &&
! b . isOrphan || b . type == CKEDITOR . NODE _TEXT } } function z ( a , b ) { return a in CKEDITOR . dtd . $listItem || a in CKEDITOR . dtd . $tableContent ? a == b || "dt" == a && "dd" == b || "dd" == a && "dt" == b : ! 1 } var G = new CKEDITOR . htmlParser , t = k instanceof CKEDITOR . htmlParser . element ? k : "string" == typeof k ? new CKEDITOR . htmlParser . element ( k ) : new CKEDITOR . htmlParser . fragment , n = [ ] , L = [ ] , y = t , H = "textarea" == t . name , I = "pre" == t . name ; G . onTagOpen = function ( f , e , h , g ) { e = new CKEDITOR . htmlParser . element ( f , e ) ; e . isUnknown && h && ( e . isEmpty = ! 0 ) ; e . isOptionalClose = g ;
if ( a ( e ) ) n . push ( e ) ; else { if ( "pre" == f ) I = ! 0 ; else { if ( "br" == f && I ) { y . add ( new CKEDITOR . htmlParser . text ( "\n" ) ) ; return } "textarea" == f && ( H = ! 0 ) } if ( "br" == f ) L . push ( e ) ; else { for ( ; ! ( g = ( h = y . name ) ? CKEDITOR . dtd [ h ] || ( y . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : c , e . isUnknown || y . isUnknown || g [ f ] ) ; ) if ( y . isOptionalClose ) G . onTagClose ( h ) ; else if ( f in b && h in b ) h = y . children , ( h = h [ h . length - 1 ] ) && "li" == h . name || x ( h = new CKEDITOR . htmlParser . element ( "li" ) , y ) , ! e . returnPoint && ( e . returnPoint = y ) , y = h ; else if ( f in CKEDITOR . dtd . $listItem &&
! z ( f , h ) ) G . onTagOpen ( "li" == f ? "ul" : "dl" , { } , 0 , 1 ) ; else if ( h in d && ! z ( f , h ) ) ! e . returnPoint && ( e . returnPoint = y ) , y = y . parent ; else if ( h in CKEDITOR . dtd . $inline && n . unshift ( y ) , y . parent ) x ( y , y . parent , 1 ) ; else { e . isOrphan = 1 ; break } l ( f ) ; u ( ) ; e . parent = y ; e . isEmpty ? x ( e ) : y = e } } } ; G . onTagClose = function ( a ) { for ( var b = n . length - 1 ; 0 <= b ; b -- ) if ( a == n [ b ] . name ) { n . splice ( b , 1 ) ; return } for ( var c = [ ] , d = [ ] , f = y ; f != t && f . name != a ; ) f . _ . isBlockLike || d . unshift ( f ) , c . push ( f ) , f = f . returnPoint || f . parent ; if ( f != t ) { for ( b = 0 ; b < c . length ; b ++ ) { var e = c [ b ] ; x ( e , e . parent ) } y =
f ; f . _ . isBlockLike && u ( ) ; x ( f , f . parent ) ; f == y && ( y = y . parent ) ; n = n . concat ( d ) } "body" == a && ( g = ! 1 ) } ; G . onText = function ( a ) { if ( ! ( y . _ . hasInlineStarted && ! L . length || I || H ) && ( a = CKEDITOR . tools . ltrim ( a ) , 0 === a . length ) ) return ; var b = y . name , e = b ? CKEDITOR . dtd [ b ] || ( y . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : c ; if ( ! H && ! e [ "#" ] && b in d ) G . onTagOpen ( f [ b ] || "" ) , G . onText ( a ) ; else { u ( ) ; l ( ) ; I || H || ( a = a . replace ( /[\t\r\n ]{2,}|[\t\r\n]/g , " " ) ) ; a = new CKEDITOR . htmlParser . text ( a ) ; if ( w ( y , a ) ) this . onTagOpen ( g , { } , 0 , 1 ) ; y . add ( a ) } } ; G . onCDATA =
function ( a ) { y . add ( new CKEDITOR . htmlParser . cdata ( a ) ) } ; G . onComment = function ( a ) { u ( ) ; l ( ) ; y . add ( new CKEDITOR . htmlParser . comment ( a ) ) } ; G . parse ( h ) ; for ( u ( ) ; y != t ; ) x ( y , y . parent , 1 ) ; e ( t ) ; return t } ; CKEDITOR . htmlParser . fragment . prototype = { type : CKEDITOR . NODE _DOCUMENT _FRAGMENT , add : function ( a , b ) { isNaN ( b ) && ( b = this . children . length ) ; var c = 0 < b ? this . children [ b - 1 ] : null ; if ( c ) { if ( a . _ . isBlockLike && c . type == CKEDITOR . NODE _TEXT && ( c . value = CKEDITOR . tools . rtrim ( c . value ) , 0 === c . value . length ) ) { this . children . pop ( ) ; this . add ( a ) ; return } c . next =
a } a . previous = c ; a . parent = this ; this . children . splice ( b , 0 , a ) ; this . _ . hasInlineStarted || ( this . _ . hasInlineStarted = a . type == CKEDITOR . NODE _TEXT || a . type == CKEDITOR . NODE _ELEMENT && ! a . _ . isBlockLike ) } , filter : function ( a , b ) { b = this . getFilterContext ( b ) ; a . onRoot ( b , this ) ; this . filterChildren ( a , ! 1 , b ) } , filterChildren : function ( a , b , c ) { if ( this . childrenFilteredBy != a . id ) { c = this . getFilterContext ( c ) ; if ( b && ! this . parent ) a . onRoot ( c , this ) ; this . childrenFilteredBy = a . id ; for ( b = 0 ; b < this . children . length ; b ++ ) ! 1 === this . children [ b ] . filter ( a ,
c ) && b -- } } , writeHtml : function ( a , b ) { b && this . filter ( b ) ; this . writeChildrenHtml ( a ) } , writeChildrenHtml : function ( a , b , c ) { var d = this . getFilterContext ( ) ; if ( c && ! this . parent && b ) b . onRoot ( d , this ) ; b && this . filterChildren ( b , ! 1 , d ) ; b = 0 ; c = this . children ; for ( d = c . length ; b < d ; b ++ ) c [ b ] . writeHtml ( a ) } , forEach : function ( a , b , c ) { if ( ! ( c || b && this . type != b ) ) var d = a ( this ) ; if ( ! 1 !== d ) { c = this . children ; for ( var f = 0 ; f < c . length ; f ++ ) d = c [ f ] , d . type == CKEDITOR . NODE _ELEMENT ? d . forEach ( a , b ) : b && d . type != b || a ( d ) } } , getFilterContext : function ( a ) { return a ||
{ } } } } ) ( ) ; "use strict" ;
@@ -324,36 +324,36 @@ c)&&b--}},writeHtml:function(a,b){b&&this.filter(b);this.writeChildrenHtml(a)},w
c . priority ) ; "number" != typeof f && ( f = 10 ) ; "object" != typeof c && ( c = { } ) ; a . elementNames && this . elementNameRules . addMany ( a . elementNames , f , c ) ; a . attributeNames && this . attributeNameRules . addMany ( a . attributeNames , f , c ) ; a . elements && d ( this . elementsRules , a . elements , f , c ) ; a . attributes && d ( this . attributesRules , a . attributes , f , c ) ; a . text && this . textRules . add ( a . text , f , c ) ; a . comment && this . commentRules . add ( a . comment , f , c ) ; a . root && this . rootRules . add ( a . root , f , c ) } , applyTo : function ( a ) { a . filter ( this ) } , onElementName : function ( a , c ) { return this . elementNameRules . execOnName ( a ,
c ) } , onAttributeName : function ( a , c ) { return this . attributeNameRules . execOnName ( a , c ) } , onText : function ( a , c , d ) { return this . textRules . exec ( a , c , d ) } , onComment : function ( a , c , d ) { return this . commentRules . exec ( a , c , d ) } , onRoot : function ( a , c ) { return this . rootRules . exec ( a , c ) } , onElement : function ( a , c ) { for ( var d = [ this . elementsRules [ "^" ] , this . elementsRules [ c . name ] , this . elementsRules . $ ] , h , k = 0 ; 3 > k ; k ++ ) if ( h = d [ k ] ) { h = h . exec ( a , c , this ) ; if ( ! 1 === h ) return null ; if ( h && h != c ) return this . onNode ( a , h ) ; 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 , h ) { return ( d = this . attributesRules [ d ] ) ? d . exec ( a , h , c , this ) : h } } } ) ; 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 h = [ this . findIndex ( c ) , 0 ] , k = 0 , g = a . length ; k < g ; k ++ ) h . push ( { value : a [ k ] , priority : c , options : d } ) ; this . rules . splice . apply ( this . rules , h ) } , 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 , h = Array . prototype . slice . call ( arguments , 1 ) , k = this . rules , g = k . length , l , v , e , x ; for ( x = 0 ; x < g ; x ++ ) if ( d && ( l = c . type , v = c . name ) , e = k [ x ] , ! ( a . nonEditable && ! e . options . applyToAll ||
a . nestedEditable && e . options . excludeNestedEditable ) ) { e = e . value . apply ( null , h ) ; if ( ! 1 === e || d && e && ( e . name != v || e . type != l ) ) return e ; null != e && ( h [ 0 ] = c = e ) } return c } , execOnName : function ( a , c ) { for ( var d = 0 , h = this . rules , k = h . length , g ; c && d < k ; d ++ ) g = h [ d ] , a . nonEditable && ! g . options . applyToAll || a . nestedEditable && g . options . excludeNestedEditable || ( c = c . replace ( g . value [ 0 ] , g . value [ 1 ] ) ) ; return c } } } ) ( ) ;
( function ( ) { function a ( a , d ) { function e ( a ) { return a || CKEDITOR . env . needsNbspFiller ? new CKEDITOR . htmlParser . text ( " " ) : new CKEDITOR . htmlParser . element ( "br" , { "data-cke-bogus" : 1 } ) } function p ( a , d ) { return function ( f ) { if ( f . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ) { var q = [ ] , p = b ( f ) , m , F ; if ( p ) for ( r ( p , 1 ) && q . push ( p ) ; p ; ) h ( p ) && ( m = c ( p ) ) && r ( m ) && ( ( F = c ( m ) ) && ! h ( F ) ? q . push ( m ) : ( e ( g ) . insertAfter ( m ) , m . remove ( ) ) ) , p = p . previous ; for ( p = 0 ; p < q . length ; p ++ ) q [ p ] . remove ( ) ; if ( q = ! a || ! 1 !== ( "function" == typeof d ? d ( f ) : d ) ) g || CKEDITOR . env . needsBrFiller ||
f . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ? g || CKEDITOR . env . needsBrFiller || ! ( 7 < document . documentMode || f . name in CKEDITOR . dtd . tr || f . name in CKEDITOR . dtd . $listItem ) ? ( q = b ( f ) , q = ! q || "form" == f . name && "input" == q . name ) : q = ! 1 : q = ! 1 ; q && f . add ( e ( a ) ) } } } function r ( a , b ) { if ( ( ! g || 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 && g && ( ! b || a . parent . name in w ) || ! g && ( ( c = a . previous ) && "br" == c . name || ! c || h ( c ) ) ) ? ! 0 : ! 1 } var F = { elements : { } } , g = "html" == d , w = CKEDITOR . tools . extend ( { } , m ) , C ; for ( C in w ) "#" in H [ C ] || delete w [ C ] ; for ( C in w ) F . elements [ C ] = p ( g , a . config . fillEmptyBlocks ) ; F . root = p ( g , ! 1 ) ; F . 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 q = c ( b ) ; ! d && h ( b . parent ) ? k ( b . parent , e ( a ) ) : h ( d ) && q && ! h ( q ) && e ( a ) . insertBefore ( d ) } } } } ( g ) ; return F } 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 h ( a ) { return a &&
( a . type == CKEDITOR . NODE _ELEMENT && a . name in m || a . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT ) } function k ( a , b ) { var c = a . children [ a . children . length - 1 ] ; a . children . push ( b ) ; b . parent = a ; c && ( c . next = b , b . previous = c ) } function g ( a ) { a = a . attributes ; "false" != a . contenteditable && ( a [ "data-cke-editable" ] = a . contenteditable ? "true" : 1 ) ; a . contenteditable = "false" } function l ( a ) { a = a . attributes ; switch ( a [ "data-cke-editable" ] ) { case "true" : a . contenteditable = "true" ; break ; case "1" : delete a . contenteditable } } function v ( a ) { return a . replace ( r ,
function ( a , b , c ) { return "\x3c" + b + c . replace ( C , function ( a , b ) { return F . test ( b ) && - 1 == c . indexOf ( "data-cke-saved-" + b ) ? " data-cke-saved-" + a + " data-cke-" + CKEDITOR . rnd + "-" + a : a } ) + "\x3e" } ) } function e ( a , b ) { return a . replace ( b , function ( a , b , c ) { 0 === a . indexOf ( "\x3ctextarea" ) && ( a = b + z ( c ) . replace ( /</g , "\x26lt;" ) . replace ( />/g , "\x26gt;" ) + "\x3c/textarea\x3e" ) ; return "\x3ccke:encoded\x3e" + encodeURIComponent ( a ) + "\x3c/cke:encoded\x3e" } ) } function x ( a ) { return a . replace ( S , function ( a , b ) { return decodeURIComponent ( b ) } ) } function t ( a ) { return a . replace ( /\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g ,
function ( a ) { return "\x3c!--" + y + "{C}" + encodeURIComponent ( a ) . replace ( /--/g , "%2D%2D" ) + "--\x3e" } ) } function z ( a ) { return a . replace ( /\x3c!--\{cke_protected\}\{C\}([\s\S]+?)--\x3e/g , function ( a , b ) { return decodeURIComponent ( b ) } ) } function G ( 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 u ( a , b ) { var c = [ ] , d = b . config . protectedSource , e = b . _ . dataStore || ( b . _ . dataStore =
c , d ) { for ( var h = [ this . findIndex ( c ) , 0 ] , k = 0 , g = a . length ; k < g ; k ++ ) h . push ( { value : a [ k ] , priority : c , options : d } ) ; this . rules . splice . apply ( this . rules , h ) } , 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 , h = Array . prototype . slice . call ( arguments , 1 ) , k = this . rules , g = k . length , l , u , e , x ; for ( x = 0 ; x < g ; x ++ ) if ( d && ( l = c . type , u = c . name ) , e = k [ x ] , ! ( a . nonEditable && ! e . options . applyToAll ||
a . nestedEditable && e . options . excludeNestedEditable ) ) { e = e . value . apply ( null , h ) ; if ( ! 1 === e || d && e && ( e . name != u || e . type != l ) ) return e ; null != e && ( h [ 0 ] = c = e ) } return c } , execOnName : function ( a , c ) { for ( var d = 0 , h = this . rules , k = h . length , g ; c && d < k ; d ++ ) g = h [ d ] , a . nonEditable && ! g . options . applyToAll || a . nestedEditable && g . options . excludeNestedEditable || ( c = c . replace ( g . value [ 0 ] , g . value [ 1 ] ) ) ; return c } } } ) ( ) ;
( function ( ) { function a ( a , d ) { function e ( a ) { return a || CKEDITOR . env . needsNbspFiller ? new CKEDITOR . htmlParser . text ( " " ) : new CKEDITOR . htmlParser . element ( "br" , { "data-cke-bogus" : 1 } ) } function p ( a , d ) { return function ( f ) { if ( f . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ) { var q = [ ] , p = b ( f ) , m , r ; if ( p ) for ( B ( p , 1 ) && q . push ( p ) ; p ; ) h ( p ) && ( m = c ( p ) ) && B ( m ) && ( ( r = c ( m ) ) && ! h ( r ) ? q . push ( m ) : ( e ( g ) . insertAfter ( m ) , m . remove ( ) ) ) , p = p . previous ; for ( p = 0 ; p < q . length ; p ++ ) q [ p ] . remove ( ) ; if ( q = ! a || ! 1 !== ( "function" == typeof d ? d ( f ) : d ) ) g || CKEDITOR . env . needsBrFiller ||
f . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ? g || CKEDITOR . env . needsBrFiller || ! ( 7 < document . documentMode || f . name in CKEDITOR . dtd . tr || f . name in CKEDITOR . dtd . $listItem ) ? ( q = b ( f ) , q = ! q || "form" == f . name && "input" == q . name ) : q = ! 1 : q = ! 1 ; q && f . add ( e ( a ) ) } } } function B ( a , b ) { if ( ( ! g || 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 && g && ( ! b || a . parent . name in v ) || ! g && ( ( c = a . previous ) && "br" == c . name || ! c || h ( c ) ) ) ? ! 0 : ! 1 } var r = { elements : { } } , g = "html" == d , v = CKEDITOR . tools . extend ( { } , m ) , D ; for ( D in v ) "#" in H [ D ] || delete v [ D ] ; for ( D in v ) r . elements [ D ] = p ( g , a . config . fillEmptyBlocks ) ; r . root = p ( g , ! 1 ) ; r . 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 q = c ( b ) ; ! d && h ( b . parent ) ? k ( b . parent , e ( a ) ) : h ( d ) && q && ! h ( q ) && e ( a ) . insertBefore ( d ) } } } } ( g ) ; return r } 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 h ( a ) { return a &&
( a . type == CKEDITOR . NODE _ELEMENT && a . name in m || a . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT ) } function k ( a , b ) { var c = a . children [ a . children . length - 1 ] ; a . children . push ( b ) ; b . parent = a ; c && ( c . next = b , b . previous = c ) } function g ( a ) { a = a . attributes ; "false" != a . contenteditable && ( a [ "data-cke-editable" ] = a . contenteditable ? "true" : 1 ) ; a . contenteditable = "false" } function l ( a ) { a = a . attributes ; switch ( a [ "data-cke-editable" ] ) { case "true" : a . contenteditable = "true" ; break ; case "1" : delete a . contenteditable } } function u ( a ) { return a . replace ( r ,
function ( a , b , c ) { return "\x3c" + b + c . replace ( D , function ( a , b ) { return B . test ( b ) && - 1 == c . indexOf ( "data-cke-saved-" + b ) ? " data-cke-saved-" + a + " data-cke-" + CKEDITOR . rnd + "-" + a : a } ) + "\x3e" } ) } function e ( a , b ) { return a . replace ( b , function ( a , b , c ) { 0 === a . indexOf ( "\x3ctextarea" ) && ( a = b + z ( c ) . replace ( /</g , "\x26lt;" ) . replace ( />/g , "\x26gt;" ) + "\x3c/textarea\x3e" ) ; return "\x3ccke:encoded\x3e" + encodeURIComponent ( a ) + "\x3c/cke:encoded\x3e" } ) } function x ( a ) { return a . replace ( S , function ( a , b ) { return decodeURIComponent ( b ) } ) } function w ( a ) { return a . replace ( /\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g ,
function ( a ) { return "\x3c!--" + y + "{C}" + encodeURIComponent ( a ) . replace ( /--/g , "%2D%2D" ) + "--\x3e" } ) } function z ( a ) { return a . replace ( /\x3c!--\{cke_protected\}\{C\}([\s\S]+?)--\x3e/g , function ( a , b ) { return decodeURIComponent ( b ) } ) } function G ( a , b ) { var c = b . _ . dataStore ; return a . replace ( /\x3c!--\{cke_protected\}([\s\S]+?)--\x3e/g , function ( a , b ) { return decodeURIComponent ( b ) } ) . replace ( /\{cke_protected_(\d+)\}/g , function ( a , b ) { return c && c [ b ] || "" } ) } function t ( a , b ) { var c = [ ] , d = b . config . protectedSource , e = b . _ . dataStore || ( b . _ . dataStore =
{ id : 1 } ) , f = /<\!--\{cke_temp(comment)?\}(\d*?)--\x3e/g , d = [ /<script[\s\S]*?(<\/script>|$)/gi , /<noscript[\s\S]*?<\/noscript>/gi , /<meta[\s\S]*?\/?>/gi ] . concat ( d ) ; a = a . replace ( /\x3c!--[\s\S]*?--\x3e/g , function ( a ) { return "\x3c!--{cke_tempcomment}" + ( c . push ( a ) - 1 ) + "--\x3e" } ) ; for ( var p = 0 ; p < d . length ; p ++ ) a = a . replace ( d [ p ] , function ( a ) { a = a . replace ( f , function ( a , b , d ) { return c [ d ] } ) ; return /cke_temp(comment)?/ . test ( a ) ? a : "\x3c!--{cke_temp}" + ( c . push ( a ) - 1 ) + "--\x3e" } ) ; a = a . replace ( f , function ( a , b , d ) { return "\x3c!--" + y + ( b ? "{C}" :
"" ) + encodeURIComponent ( c [ d ] ) . replace ( /--/g , "%2D%2D" ) + "--\x3e" } ) ; a = a . replace ( /<\w+(?:\s+(?:(?:[^\s=>]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=\/>]+))+\s*\/?>/g , function ( a ) { return a . replace ( /\x3c!--\{cke_protected\}([^>]*)--\x3e/g , function ( a , b ) { e [ e . id ] = decodeURIComponent ( b ) ; return "{cke_protected_" + e . id ++ + "}" } ) } ) ; return a = a . replace ( /<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g , function ( a , c , d , e ) { return "\x3c" + c + d + "\x3e" + G ( z ( e ) , b ) + "\x3c/" + c + "\x3e" } ) } var n ; CKEDITOR . htmlDataProcessor = function ( b ) { var c ,
f , m = this ; this . editor = b ; this . dataFilter = c = new CKEDITOR . htmlParser . filter ; this . htmlFilter = f = new CKEDITOR . htmlParser . filter ; this . writer = new CKEDITOR . htmlParser . basicWriter ; c . addRules ( B ) ; c . addRules ( K , { applyToAll : ! 0 } ) ; c . addRules ( a ( b , "data" ) , { applyToAll : ! 0 } ) ; f . addRules ( A ) ; f . addRules ( M , { applyToAll : ! 0 } ) ; f . addRules ( a ( b , "html" ) , { applyToAll : ! 0 } ) ; b . on ( "toHtml" , function ( a ) { a = a . data ; var c = a . dataValue , f , c = n ( c ) , c = u ( c , b ) , c = e ( c , T ) , c = v ( c ) , c = e ( c , w ) , c = c . replace ( p , "$1cke:$2" ) , c = c . replace ( O , "\x3ccke:$1$2\x3e\x3c/cke:$1\x3e" ) ,
f , m = this ; this . editor = b ; this . dataFilter = c = new CKEDITOR . htmlParser . filter ; this . htmlFilter = f = new CKEDITOR . htmlParser . filter ; this . writer = new CKEDITOR . htmlParser . basicWriter ; c . addRules ( C ) ; c . addRules ( K , { applyToAll : ! 0 } ) ; c . addRules ( a ( b , "data" ) , { applyToAll : ! 0 } ) ; f . addRules ( A ) ; f . addRules ( M , { applyToAll : ! 0 } ) ; f . addRules ( a ( b , "html" ) , { applyToAll : ! 0 } ) ; b . on ( "toHtml" , function ( a ) { a = a . data ; var c = a . dataValue , f , c = n ( c ) , c = t ( c , b ) , c = e ( c , T ) , c = u ( c ) , c = e ( c , v ) , c = c . replace ( p , "$1cke:$2" ) , c = c . replace ( O , "\x3ccke:$1$2\x3e\x3c/cke:$1\x3e" ) ,
c = c . replace ( /(<pre\b[^>]*>)(\r\n|\n)/g , "$1$2$2" ) , c = c . replace ( /([^a-z0-9<\-])(on\w{3,})(?!>)/gi , "$1data-cke-" + CKEDITOR . rnd + "-$2" ) ; f = a . context || b . editable ( ) . getName ( ) ; var m ; CKEDITOR . env . ie && 9 > CKEDITOR . env . version && "pre" == f && ( f = "div" , c = "\x3cpre\x3e" + c + "\x3c/pre\x3e" , m = 1 ) ; f = b . document . createElement ( f ) ; f . setHtml ( "a" + c ) ; c = f . getHtml ( ) . substr ( 1 ) ; c = c . replace ( new RegExp ( "data-cke-" + CKEDITOR . rnd + "-" , "ig" ) , "" ) ; m && ( c = c . replace ( /^<pre>|<\/pre>$/gi , "" ) ) ; c = c . replace ( N , "$1$2" ) ; c = x ( c ) ; c = z ( c ) ; f = ! 1 === a . fixForBody ? ! 1 :
d ( a . enterMode , b . config . autoParagraph ) ; c = CKEDITOR . htmlParser . fragment . fromHtml ( c , a . context , f ) ; f && ( m = c , ! m . children . length && CKEDITOR . dtd [ m . name ] [ f ] && ( f = new CKEDITOR . htmlParser . element ( f ) , m . add ( f ) ) ) ; a . dataValue = c } , null , null , 5 ) ; b . on ( "toHtml" , function ( a ) { a . data . filter . applyTo ( a . data . dataValue , ! 0 , a . data . dontFilter , a . data . enterMode ) && b . fire ( "dataFiltered" ) } , null , null , 6 ) ; b . on ( "toHtml" , function ( a ) { a . data . dataValue . filterChildren ( m . 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 = t ( b ) } , null , null , 15 ) ; b . on ( "toDataFormat" , function ( a ) { var c = a . data . dataValue ; a . data . enterMode != CKEDITOR . ENTER _BR && ( c = c . replace ( /^<br *\/?>/i , "" ) ) ; a . data . dataValue = CKEDITOR . htmlParser . fragment . fromHtml ( c , a . data . context , d ( a . data . enterMode , b . config . autoParagraph ) ) } , null , null , 5 ) ; b . on ( "toDataFormat" , function ( a ) { a . data . dataValue . filterChildren ( m . 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 = m . writer ; d . reset ( ) ; c . writeChildrenHtml ( d ) ; c = d . getHtml ( ! 0 ) ; c = z ( c ) ; c = G ( c , b ) ; a . data . dataValue = c } , null , null , 15 ) } ; CKEDITOR . htmlDataProcessor . prototype = { toHtml : function ( a , b , c , d ) { var e = this . editor , f , p , m , h ; b && "object" == typeof b ? ( f = b . context , c = b . fixForBody , d = b . dontFilter , p = b . filter , m = b . enterMode , h = b . protectedWhitespaces ) : f = b ; f || null === f || ( f = e . editable ( ) . getName ( ) ) ; return e . fire ( "toHtml" , { dataValue : a , context : f , fixForBody : c , dontFilter : d ,
filter : p || e . filter , enterMode : m || e . enterMode , protectedWhitespaces : h } ) . 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 } } ; var L = /(?: |\xa0)$/ , y = "{cke_protected}" , H = CKEDITOR . dtd , I = "caption colgroup col thead tfoot tbody" . split ( " " ) , m = CKEDITOR . tools . extend ( { } , H . $blockLimit ,
H . $block ) , B = { elements : { input : g , textarea : g } } , K = { attributeNames : [ [ /^on/ , "data-cke-pa-on" ] , [ /^srcdoc/ , "data-cke-pa-srcdoc" ] , [ /^data-cke-expando$/ , "" ] ] , elements : { iframe : function ( a ) { if ( a . attributes && a . attributes . src ) { var b = a . attributes . src . toLowerCase ( ) . replace ( /[^a-z]/gi , "" ) ; if ( 0 === b . indexOf ( "javascript" ) || 0 === b . indexOf ( "data" ) ) a . attributes [ "data-cke-pa-src" ] = a . attributes . src , delete a . attributes . src } } } } , A = { elements : { embed : function ( a ) { var b = a . parent ; if ( b && "object" == b . name ) { var c = b . attributes . width , b = b . attributes . height ;
c && ( a . attributes . width = c ) ; b && ( a . attributes . height = b ) } } , a : function ( a ) { var b = a . attributes ; if ( ! ( a . children . length || b . name || b . id || a . attributes [ "data-cke-saved-name" ] ) ) return ! 1 } } } , M = { elementNames : [ [ /^cke:/ , "" ] , [ /^\?xml:namespace$/ , "" ] ] , attributeNames : [ [ /^data-cke-(saved|pa)-/ , "" ] , [ /^data-cke-.*/ , "" ] , [ "hidefocus" , "" ] ] , elements : { $ : function ( a ) { var b = a . attributes ; if ( b ) { if ( b [ "data-cke-temp" ] ) return ! 1 ; for ( var c = [ "name" , "href" , "src" ] , d , e = 0 ; e < c . length ; e ++ ) d = "data-cke-saved-" + c [ e ] , d in b && delete b [ c [ e ] ] } return a } ,
c = new CKEDITOR . htmlParser . basicWriter ; b . writeChildrenHtml ( c ) ; b = c . getHtml ( ! 0 ) ; a . dataValue = w ( 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 ( m . 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 = m . writer ; d . reset ( ) ; c . writeChildrenHtml ( d ) ; c = d . getHtml ( ! 0 ) ; c = z ( c ) ; c = G ( c , b ) ; a . data . dataValue = c } , null , null , 15 ) } ; CKEDITOR . htmlDataProcessor . prototype = { toHtml : function ( a , b , c , d ) { var f = this . editor , e , p , m , h ; b && "object" == typeof b ? ( e = b . context , c = b . fixForBody , d = b . dontFilter , p = b . filter , m = b . enterMode , h = b . protectedWhitespaces ) : e = b ; e || null === e || ( e = f . editable ( ) . getName ( ) ) ; return f . fire ( "toHtml" , { dataValue : a , context : e , fixForBody : c , dontFilter : d ,
filter : p || f . filter , enterMode : m || f . enterMode , protectedWhitespaces : h } ) . dataValue } , toDataFormat : function ( a , b ) { var c , d , f ; b && ( c = b . context , d = b . filter , f = 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 : f || this . editor . enterMode } ) . dataValue } } ; var L = /(?: |\xa0)$/ , y = "{cke_protected}" , H = CKEDITOR . dtd , I = "caption colgroup col thead tfoot tbody" . split ( " " ) , m = CKEDITOR . tools . extend ( { } , H . $blockLimit ,
H . $block ) , C = { elements : { input : g , textarea : g } } , K = { attributeNames : [ [ /^on/ , "data-cke-pa-on" ] , [ /^srcdoc/ , "data-cke-pa-srcdoc" ] , [ /^data-cke-expando$/ , "" ] ] , elements : { iframe : function ( a ) { if ( a . attributes && a . attributes . src ) { var b = a . attributes . src . toLowerCase ( ) . replace ( /[^a-z]/gi , "" ) ; if ( 0 === b . indexOf ( "javascript" ) || 0 === b . indexOf ( "data" ) ) a . attributes [ "data-cke-pa-src" ] = a . attributes . src , delete a . attributes . src } } } } , A = { elements : { embed : function ( a ) { var b = a . parent ; if ( b && "object" == b . name ) { var c = b . attributes . width , b = b . attributes . height ;
c && ( a . attributes . width = c ) ; b && ( a . attributes . height = b ) } } , a : function ( a ) { var b = a . attributes ; if ( ! ( a . children . length || b . name || b . id || a . attributes [ "data-cke-saved-name" ] ) ) return ! 1 } } } , M = { elementNames : [ [ /^cke:/ , "" ] , [ /^\?xml:namespace$/ , "" ] ] , attributeNames : [ [ /^data-cke-(saved|pa)-/ , "" ] , [ /^data-cke-.*/ , "" ] , [ "hidefocus" , "" ] ] , elements : { $ : function ( a ) { var b = a . attributes ; if ( b ) { if ( b [ "data-cke-temp" ] ) return ! 1 ; for ( var c = [ "name" , "href" , "src" ] , d , f = 0 ; f < c . length ; f ++ ) d = "data-cke-saved-" + c [ f ] , d in b && delete b [ c [ f ] ] } return a } ,
table : function ( a ) { a . children . slice ( 0 ) . sort ( function ( a , b ) { var c , d ; a . type == CKEDITOR . NODE _ELEMENT && b . type == a . type && ( c = CKEDITOR . tools . indexOf ( I , a . name ) , d = CKEDITOR . tools . indexOf ( I , b . name ) ) ; - 1 < c && - 1 < d && c != d || ( c = a . parent ? a . getIndex ( ) : - 1 , d = b . parent ? b . getIndex ( ) : - 1 ) ; return c > d ? 1 : - 1 } ) } , param : function ( a ) { a . children = [ ] ; a . isEmpty = ! 0 ; return a } , span : function ( a ) { "Apple-style-span" == a . attributes [ "class" ] && delete a . name } , html : function ( a ) { delete a . attributes . contenteditable ; delete a . attributes [ "class" ] } , body : function ( a ) { delete a . attributes . spellcheck ;
delete a . attributes . contenteditable } , style : function ( a ) { var b = a . children [ 0 ] ; b && b . value && ( b . value = CKEDITOR . tools . trim ( b . value ) ) ; a . attributes . type || ( a . attributes . type = "text/css" ) } , title : function ( a ) { var b = a . children [ 0 ] ; ! b && k ( a , b = new CKEDITOR . htmlParser . text ) ; b . value = a . attributes [ "data-cke-title" ] || "" } , input : l , textarea : l } , attributes : { "class" : function ( a ) { return CKEDITOR . tools . ltrim ( a . replace ( /(?:^|\s+)cke_[^\s]*/g , "" ) ) || ! 1 } } } ; CKEDITOR . env . ie && ( M . attributes . style = function ( a ) { return a . replace ( /(^|;)([^\:]+)/g ,
function ( a ) { return a . toLowerCase ( ) } ) } ) ; var r = /<(a|area|img|input|source)\b([^>]*)>/gi , C = /([\w-:]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi , F = /^(href|src|name)$/i , w = /(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi , T = /(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi , S = /<cke:encoded>([^<]*)<\/cke:encoded>/gi , p = /(<\/?)((?:object|embed|param|html|body|head|title)([\s][^>]*)?>)/gi , N = /(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi , O = /<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi ;
n = function ( ) { function a ( c ) { return CKEDITOR . tools . array . reduce ( c . split ( "" ) , function ( a , c ) { var d = c . toLowerCase ( ) , e = c . toUpperCase ( ) , f = b ( d ) ; d !== e && ( f += "|" + b ( e ) ) ; return a + ( "(" + f + ")" ) } , "" ) } function b ( a ) { var c ; c = a . charCodeAt ( 0 ) ; var d = c . toString ( 16 ) ; c = { htmlCode : "\x26#" + c + ";?" , hex : "\x26#x0*" + d + ";?" , entity : { "\x3c" : "\x26lt;" , "\x3e" : "\x26gt;" , ":" : "\x26colon;" } [ a ] } ; for ( var e in c ) c [ e ] && ( a += "|" + c [ e ] ) ; return a } var c = new RegExp ( "(" + a ( "\x3ccke:encoded\x3e" ) + "(.*?)" + a ( "\x3c/cke:encoded\x3e" ) + ")|(" + a ( "\x3c" ) + a ( "/" ) +
function ( a ) { return a . toLowerCase ( ) } ) } ) ; var r = /<(a|area|img|input|source)\b([^>]*)>/gi , D = /([\w-:]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi , B = /^(href|src|name)$/i , v = /(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi , T = /(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi , S = /<cke:encoded>([^<]*)<\/cke:encoded>/gi , p = /(<\/?)((?:object|embed|param|html|body|head|title)([\s][^>]*)?>)/gi , N = /(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi , O = /<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi ;
n = function ( ) { function a ( c ) { return CKEDITOR . tools . array . reduce ( c . split ( "" ) , function ( a , c ) { var d = c . toLowerCase ( ) , f = c . toUpperCase ( ) , e = b ( d ) ; d !== f && ( e += "|" + b ( f ) ) ; return a + ( "(" + e + ")" ) } , "" ) } function b ( a ) { var c ; c = a . charCodeAt ( 0 ) ; var d = c . toString ( 16 ) ; c = { htmlCode : "\x26#" + c + ";?" , hex : "\x26#x0*" + d + ";?" , entity : { "\x3c" : "\x26lt;" , "\x3e" : "\x26gt;" , ":" : "\x26colon;" } [ a ] } ; for ( var f in c ) c [ f ] && ( a += "|" + c [ f ] ) ; return a } var c = new RegExp ( "(" + a ( "\x3ccke:encoded\x3e" ) + "(.*?)" + a ( "\x3c/cke:encoded\x3e" ) + ")|(" + a ( "\x3c" ) + a ( "/" ) +
"?" + a ( "cke:encoded\x3e" ) + ")" , "gi" ) , d = new RegExp ( "((" + a ( "{cke_protected" ) + ")(_[0-9]*)?" + a ( "}" ) + ")" , "gi" ) ; return function ( a ) { return a . replace ( c , "" ) . replace ( d , "" ) } } ( ) } ) ( ) ; "use strict" ;
CKEDITOR . htmlParser . element = function ( a , d ) { this . name = a ; this . attributes = d || { } ; this . children = [ ] ; var b = a || "" , c = b . match ( /^cke:(.*)/ ) ; c && ( b = c [ 1 ] ) ; b = ! ! ( CKEDITOR . dtd . $nonBodyContent [ b ] || CKEDITOR . dtd . $block [ b ] || CKEDITOR . dtd . $listItem [ b ] || CKEDITOR . dtd . $tableContent [ b ] || CKEDITOR . dtd . $nonEditable [ b ] || "br" == b ) ; this . isEmpty = ! ! CKEDITOR . dtd . $empty [ a ] ; this . isUnknown = ! CKEDITOR . dtd [ a ] ; this . _ = { isBlockLike : b , hasInlineStarted : this . isEmpty || ! b } } ;
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 , g ; b = d . getFilterContext ( b ) ; if ( ! d . parent ) a . onRoot ( b ,
d ) ; for ( ; ; ) { k = d . name ; if ( ! ( g = a . onElementName ( b , k ) ) ) return this . remove ( ) , ! 1 ; d . name = g ; 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 l , v ; for ( l in k ) { for ( g = k [ l ] ; ; ) if ( v = a . onAttributeName ( b , l ) ) if ( v != l ) delete k [ l ] , l = v ; else break ; else { delete k [ l ] ; break } v && ( ! 1 === ( g = a . onAttribute ( b , d , v , g ) ) ? delete k [ v ] : k [ v ] = g ) } d . isEmpty ||
this . filterChildren ( a , ! 1 , b ) ; return ! 0 } , filterChildren : b . filterChildren , writeHtml : function ( a , b ) { b && this . filter ( b ) ; var h = this . name , k = [ ] , g = this . attributes , l , v ; a . openTag ( h , g ) ; for ( l in g ) k . push ( [ l , g [ l ] ] ) ; a . sortAttributes && k . sort ( d ) ; l = 0 ; for ( v = k . length ; l < v ; l ++ ) g = k [ l ] , a . attribute ( g [ 0 ] , g [ 1 ] ) ; a . openTagClose ( h , this . isEmpty ) ; this . writeChildrenHtml ( a ) ; this . isEmpty || a . closeTag ( h ) } , writeChildrenHtml : b . writeChildrenHtml , replaceWithChildren : function ( ) { for ( var a = this . children , b = a . length ; b ; ) a [ -- b ] . insertAfter ( this ) ;
d ) ; for ( ; ; ) { k = d . name ; if ( ! ( g = a . onElementName ( b , k ) ) ) return this . remove ( ) , ! 1 ; d . name = g ; 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 l , u ; for ( l in k ) { for ( g = k [ l ] ; ; ) if ( u = a . onAttributeName ( b , l ) ) if ( u != l ) delete k [ l ] , l = u ; else break ; else { delete k [ l ] ; break } u && ( ! 1 === ( g = a . onAttribute ( b , d , u , g ) ) ? delete k [ u ] : k [ u ] = g ) } d . isEmpty ||
this . filterChildren ( a , ! 1 , b ) ; return ! 0 } , filterChildren : b . filterChildren , writeHtml : function ( a , b ) { b && this . filter ( b ) ; var h = this . name , k = [ ] , g = this . attributes , l , u ; a . openTag ( h , g ) ; for ( l in g ) k . push ( [ l , g [ l ] ] ) ; a . sortAttributes && k . sort ( d ) ; l = 0 ; for ( u = k . length ; l < u ; l ++ ) g = k [ l ] , a . attribute ( g [ 0 ] , g [ 1 ] ) ; a . openTagClose ( h , this . isEmpty ) ; this . writeChildrenHtml ( a ) ; this . isEmpty || a . closeTag ( h ) } , 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 , h = this . children . length ; d < h ; ++ 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 g = this . children [ k ] ; "function" == typeof a && a ( g ) ? d . push ( g ) : "string" == typeof a && g . name === a && d . push ( g ) ;
b && g . find && ( d = d . concat ( g . find ( a , b ) ) ) } return d } , findOne : function ( a , b ) { var d = null , k = CKEDITOR . tools . array . find ( this . children , function ( g ) { var k = "function" === typeof a ? a ( g ) : g . name === a ; if ( k || ! b ) return k ; g . children && g . findOne && ( d = g . 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+|^)" +
@@ -362,68 +362,69 @@ for(var d=0;d<b.length;d+=2)a[b[d]]=b[d+1]}return a}},!0)})();(function(){var a=
CKEDITOR . add = function ( a ) { function d ( ) { CKEDITOR . currentInstance == a && ( CKEDITOR . currentInstance = null , CKEDITOR . fire ( "currentInstance" ) ) } CKEDITOR . instances [ a . name ] = a ; a . on ( "focus" , function ( ) { CKEDITOR . currentInstance != a && ( CKEDITOR . currentInstance = a , CKEDITOR . fire ( "currentInstance" ) ) } ) ; a . on ( "blur" , d ) ; a . on ( "destroy" , d ) ; CKEDITOR . fire ( "instance" , null , a ) } ; CKEDITOR . remove = function ( a ) { delete CKEDITOR . instances [ a . name ] } ;
( function ( ) { var a = { } ; CKEDITOR . addTemplate = function ( d , b ) { var c = a [ d ] ; if ( c ) return c ; c = { name : d , source : b } ; CKEDITOR . fire ( "template" , c ) ; return a [ d ] = new CKEDITOR . template ( c . source ) } ; CKEDITOR . getTemplate = function ( d ) { return a [ d ] } } ) ( ) ; ( function ( ) { var a = [ ] ; CKEDITOR . addCss = function ( d ) { a . push ( d ) } ; CKEDITOR . getCss = function ( ) { return a . join ( "\n" ) } } ) ( ) ; CKEDITOR . on ( "instanceDestroyed" , function ( ) { CKEDITOR . tools . isEmpty ( this . instances ) && CKEDITOR . fire ( "reset" ) } ) ; CKEDITOR . TRISTATE _ON = 1 ; CKEDITOR . TRISTATE _OFF = 2 ;
CKEDITOR . TRISTATE _DISABLED = 0 ;
( function ( ) { CKEDITOR . inline = function ( a , d ) { a = CKEDITOR . editor . _getEditorElement ( a ) ; if ( ! a ) return null ; var b = new CKEDITOR . editor ( d , a , CKEDITOR . ELEMENT _MODE _INLINE ) , c = a . is ( "textarea" ) ? a : null ; c ? ( b . setData ( c . getValue ( ) , null , ! 0 ) , a = CKEDITOR . dom . element . createFromHtml ( '\x3cdiv contenteditable\x3d"' + ! ! b . readOnly + '" class\x3d"cke_textarea_inline"\x3e' + c . getValue ( ) + "\x3c/div\x3e" , CKEDITOR . document ) , a . insertAfter ( c ) , c . hide ( ) , c . $ . form && b . _attachToForm ( ) ) : b . setData ( a . getHtml ( ) , null , ! 0 ) ; b . on ( "loaded" , function ( ) { b . fire ( "uiReady" ) ;
b . editable ( a ) ; b . container = a ; b . ui . contentsElement = a ; b . setData ( b . getData ( 1 ) ) ; b . resetDirty ( ) ; b . fire ( "contentDom" ) ; b . mode = "wysiwyg" ; b . fire ( "mode" ) ; b . status = "ready" ; b . fireOnce ( "instanceReady" ) ; CKEDITOR . fire ( "instanceReady" , null , b ) } , null , null , 1E4 ) ; b . on ( "destroy" , function ( ) { var a = b . container ; c && a && ( a . clearCustomData ( ) , a . remove ( ) ) ; c && c . show ( ) ; b . element . clearCustomData ( ) ; delete b . element } ) ; return b } ; CKEDITOR . inlineAll = function ( ) { var a , d , b ; for ( b in CKEDITOR . dtd . $editable ) for ( var c = CKEDITOR . document . getElementsByTag ( b ) ,
f = 0 , h = c . count ( ) ; f < h ; f ++ ) a = c . getItem ( f ) , "true" == a . getAttribute ( "contenteditable" ) && ( d = { element : a , config : { } } , ! 1 !== CKEDITOR . fire ( "inline" , d ) && CKEDITOR . inline ( a , d . config ) ) } ; CKEDITOR . domReady ( function ( ) { ! CKEDITOR . disableAutoInline && CKEDITOR . inlineAll ( ) } ) } ) ( ) ; CKEDITOR . replaceClass = "ckeditor" ;
( function ( ) { CKEDITOR . inline = function ( a , d ) { a = CKEDITOR . editor . _getEditorElement ( a ) ; if ( ! a ) return null ; var b = new CKEDITOR . editor ( d , a , CKEDITOR . ELEMENT _MODE _INLINE ) , c = a . is ( "textarea" ) ? a : null ; c ? ( b . setData ( c . getValue ( ) , null , ! 0 ) , a = CKEDITOR . dom . element . createFromHtml ( '\x3cdiv contenteditable\x3d"' + ! ! b . readOnly + '" class\x3d"cke_textarea_inline"\x3e' + c . getValue ( ) + "\x3c/div\x3e" , CKEDITOR . document ) , a . insertAfter ( c ) , c . hide ( ) , c . $ . form && b . _attachToForm ( ) ) : ( d && "undefined" !== typeof d . readOnly && ! d . readOnly && a . setAttribute ( "contenteditable" ,
"true" ) , b . setData ( a . getHtml ( ) , null , ! 0 ) ) ; b . on ( "loaded" , function ( ) { b . fire ( "uiReady" ) ; b . editable ( a ) ; b . container = a ; b . ui . contentsElement = a ; b . setData ( b . getData ( 1 ) ) ; b . resetDirty ( ) ; b . fire ( "contentDom" ) ; b . mode = "wysiwyg" ; b . fire ( "mode" ) ; b . status = "ready" ; b . fireOnce ( "instanceReady" ) ; CKEDITOR . fire ( "instanceReady" , null , b ) } , null , null , 1E4 ) ; b . on ( "destroy" , function ( ) { var a = b . container ; c && a && ( a . clearCustomData ( ) , a . remove ( ) ) ; c && c . show ( ) ; b . element . clearCustomData ( ) ; delete b . element } ) ; return b } ; CKEDITOR . inlineAll = function ( ) { var a ,
d , b ; for ( b in CKEDITOR . dtd . $editable ) for ( var c = CKEDITOR . document . getElementsByTag ( b ) , f = 0 , h = c . count ( ) ; f < h ; f ++ ) a = c . getItem ( f ) , "true" == a . getAttribute ( "contenteditable" ) && ( d = { element : a , config : { } } , ! 1 !== CKEDITOR . fire ( "inline" , d ) && CKEDITOR . inline ( a , d . config ) ) } ; CKEDITOR . domReady ( function ( ) { ! CKEDITOR . disableAutoInline && CKEDITOR . inlineAll ( ) } ) } ) ( ) ; CKEDITOR . replaceClass = "ckeditor" ;
( function ( ) { function a ( a , f , h , k ) { a = CKEDITOR . editor . _getEditorElement ( a ) ; if ( ! a ) return null ; var g = new CKEDITOR . editor ( f , a , k ) ; k == CKEDITOR . ELEMENT _MODE _REPLACE && ( a . setStyle ( "visibility" , "hidden" ) , g . _ . required = a . hasAttribute ( "required" ) , a . removeAttribute ( "required" ) ) ; h && g . setData ( h , null , ! 0 ) ; g . on ( "loaded" , function ( ) { g . isDestroyed ( ) || g . isDetached ( ) || ( b ( g ) , k == CKEDITOR . ELEMENT _MODE _REPLACE && g . config . autoUpdateElement && a . $ . form && g . _attachToForm ( ) , g . setMode ( g . config . startupMode , function ( ) { g . resetDirty ( ) ; g . status =
"ready" ; g . fireOnce ( "instanceReady" ) ; CKEDITOR . fire ( "instanceReady" , null , g ) } ) ) } ) ; g . on ( "destroy" , d ) ; return g } 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 , g = a . fire ( "uiSpace" , { space : "top" , html : "" } ) . html , l = a . fire ( "uiSpace" , { space : "bottom" , html : "" } ) . html ,
v = 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 . title ? ' aria-labelledby\x3d"cke_{name}_arialbl"' : "" ) + "\x3e" + ( a . title ? '\x3cspan id\x3d"cke_{name}_arialbl" class\x3d"cke_voice_label"\x3e{voiceLabel}\x3c/span\x3e' : "" ) + '\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 ( v . output ( { id : a . id , name : b , langDir : a . lang . dir , langCode : a . langCode , voiceLabel : a . title , topHtml : g ? '\x3cspan id\x3d"' + a . ui . spaceId ( "top" ) + '" class\x3d"cke_top cke_reset_all" role\x3d"presentation" style\x3d"height:auto"\x3e' + g + "\x3c/span\x3e" : "" , contentId : a . ui . spaceId ( "contents" ) , bottomHtml : l ? '\x3cspan id\x3d"' + a . ui . spaceId ( "bottom" ) + '" class\x3d"cke_bottom cke_reset_all" role\x3d"presentation"\x3e' + l + "\x3c/span\x3e" : "" , outerEl : CKEDITOR . env . ie ? "span" : "div" } ) ) ; k == CKEDITOR . ELEMENT _MODE _REPLACE ?
u = 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 . title ? ' aria-labelledby\x3d"cke_{name}_arialbl"' : "" ) + "\x3e" + ( a . title ? '\x3cspan id\x3d"cke_{name}_arialbl" class\x3d"cke_voice_label"\x3e{voiceLabel}\x3c/span\x3e' : "" ) + '\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 ( u . output ( { id : a . id , name : b , langDir : a . lang . dir , langCode : a . langCode , voiceLabel : a . title , topHtml : g ? '\x3cspan id\x3d"' + a . ui . spaceId ( "top" ) + '" class\x3d"cke_top cke_reset_all" role\x3d"presentation" style\x3d"height:auto"\x3e' + g + "\x3c/span\x3e" : "" , contentId : a . ui . spaceId ( "contents" ) , bottomHtml : l ? '\x3cspan id\x3d"' + a . ui . spaceId ( "bottom" ) + '" class\x3d"cke_bottom cke_reset_all" role\x3d"presentation"\x3e' + l + "\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" ) ; g && a . ui . space ( "top" ) . unselectable ( ) ; l && 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 , h ) { return a ( b , d , h , 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 g = d . checkDirty ( ) , k = d . _ . previousModeData , l , v = 0 ; d . fire ( "beforeModeUnload" ) ; d . editable ( 0 ) ; d . _ . previousMode = d . mode ; d . _ . previousModeData = l = d . getData ( 1 ) ; "source" == d . mode && k == l && ( d . fire ( "lockSnapshot" , { forceUpdate : ! 0 } ) , v = 1 ) ; d . ui . space ( "contents" ) . setHtml ( "" ) ; d . mode = "" } else d . _ . previousModeData = d . getData ( 1 ) ; this . _ . modes [ a ] ( function ( ) { d . mode = a ; void 0 !== g && ! g &&
d . resetDirty ( ) ; v ? 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 g = this . container , l = this . ui . space ( "contents" ) , v = 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" ) } ) : g ; k . setSize ( "width" , a , ! 0 ) ; v && ( v . style . width = "1%" ) ;
var e = ( k . $ . offsetHeight || 0 ) - ( l . $ . clientHeight || 0 ) , g = Math . max ( b - ( d ? 0 : e ) , 0 ) ; b = d ? b + e : b ; l . setStyle ( "height" , g + "px" ) ; v && ( v . style . width = "100%" ) ; this . fire ( "resize" , { outerHeight : b , contentsHeight : g , 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" ;
{ } ) ) [ 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 g = d . checkDirty ( ) , k = d . _ . previousModeData , l , u = 0 ; d . fire ( "beforeModeUnload" ) ; d . editable ( 0 ) ; d . _ . previousMode = d . mode ; d . _ . previousModeData = l = d . getData ( 1 ) ; "source" == d . mode && k == l && ( d . fire ( "lockSnapshot" , { forceUpdate : ! 0 } ) , u = 1 ) ; d . ui . space ( "contents" ) . setHtml ( "" ) ; d . mode = "" } else d . _ . previousModeData = d . getData ( 1 ) ; this . _ . modes [ a ] ( function ( ) { d . mode = a ; void 0 !== g && ! g &&
d . resetDirty ( ) ; u ? 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 g = this . container , l = this . ui . space ( "contents" ) , u = 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" ) } ) : g ; a = CKEDITOR . tools . convertToPx ( CKEDITOR . tools . cssLength ( a ) ) ;
k . setSize ( "width" , a , ! 0 ) ; u && ( u . style . width = "1%" ) ; b = CKEDITOR . tools . convertToPx ( CKEDITOR . tools . cssLength ( b ) ) ; var e = ( k . $ . offsetHeight || 0 ) - ( l . $ . clientHeight || 0 ) , g = Math . max ( b - ( d ? 0 : e ) , 0 ) ; b = d ? b + e : b ; l . setStyle ( "height" , CKEDITOR . tools . cssLength ( g ) ) ; u && ( u . style . width = "100%" ) ; this . fire ( "resize" , { outerHeight : b , contentsHeight : g , 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 , f = e . blockLimit , g = a . data . selection , r = g . getRanges ( ) [ 0 ] , h ; if ( CKEDITOR . env . gecko || CKEDITOR . env . ie && CKEDITOR . env . needsBrFiller ) if ( g = d ( g , e ) ) g . appendBogus ( ) , h = CKEDITOR . env . ie && ! CKEDITOR . env . edge || CKEDITOR . env . edge && b . _ . previousActive ; k ( b , e . block , f ) && r . collapsed && ! r . getCommonAncestor ( ) . isReadOnly ( ) && ( e = r . clone ( ) , e . enlarge ( CKEDITOR . ENLARGE _BLOCK _CONTENTS ) , f = new CKEDITOR . dom . walker ( e ) , f . guard = function ( a ) { return ! c ( a ) || a . type == CKEDITOR . NODE _COMMENT || a . isReadOnly ( ) } ,
! f . checkForward ( ) || e . checkStartOfBlock ( ) && e . checkEndOfBlock ( ) ) && ( b = r . fixBlock ( ! 0 , b . activeEnterMode == CKEDITOR . ENTER _DIV ? "div" : "p" ) , CKEDITOR . env . needsBrFiller || ( b = b . getFirst ( c ) ) && b . type == CKEDITOR . NODE _TEXT && CKEDITOR . tools . trim ( b . getText ( ) ) . match ( /^(?: |\xa0)$/ ) && b . remove ( ) , h = 1 , a . cancel ( ) ) ; h && r . select ( ) } function d ( a , b ) { if ( a . isFake ) return 0 ; var d = b . block || b . blockLimit , e = d && d . getLast ( c ) ; if ( ! ( ! d || ! d . isBlockBoundary ( ) || e && e . type == CKEDITOR . NODE _ELEMENT && e . isBlockBoundary ( ) || d . is ( "pre" ) || d . getBogus ( ) ) ) return d }
function b ( a ) { var b = a . data . getTarget ( ) ; b . is ( "input" ) && ( b = b . getAttribute ( "type" ) , "submit" != b && "reset" != b || a . data . preventDefault ( ) ) } function c ( a ) { return x ( a ) && t ( 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 h ( a ) { function b ( a ) { return function ( b , e ) { e && b . type == CKEDITOR . NODE _ELEMENT && b . is ( f ) && ( d = b ) ; if ( ! ( e || ! c ( b ) ||
function b ( a ) { var b = a . data . getTarget ( ) ; b . is ( "input" ) && ( b = b . getAttribute ( "type" ) , "submit" != b && "reset" != b || a . data . preventDefault ( ) ) } function c ( a ) { return x ( a ) && w ( 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 h ( a ) { function b ( a ) { return function ( b , e ) { e && b . type == CKEDITOR . NODE _ELEMENT && b . is ( f ) && ( d = b ) ; if ( ! ( e || ! c ( b ) ||
a && G ( b ) ) ) return ! 1 } } var d , e = a . getRanges ( ) [ 0 ] ; a = a . root ; var f = { table : 1 , ul : 1 , ol : 1 , dl : 1 } ; if ( e . startPath ( ) . contains ( f ) ) { var r = e . clone ( ) ; r . collapse ( 1 ) ; r . setStartAt ( a , CKEDITOR . POSITION _AFTER _START ) ; a = new CKEDITOR . dom . walker ( r ) ; a . guard = b ( ) ; a . checkBackward ( ) ; if ( d ) return r = e . clone ( ) , r . collapse ( ) , r . setEndAt ( d , CKEDITOR . POSITION _AFTER _END ) , a = new CKEDITOR . dom . walker ( r ) , a . guard = b ( ! 0 ) , d = ! 1 , a . checkForward ( ) , d } return null } function k ( a , b , c ) { return ! 1 !== a . config . autoParagraph && a . activeEnterMode != CKEDITOR . ENTER _BR && ( a . editable ( ) . equals ( c ) &&
! b || b && "true" == b . getAttribute ( "contenteditable" ) ) } function g ( a ) { return a . activeEnterMode != CKEDITOR . ENTER _BR && ! 1 !== a . config . autoParagraph ? a . activeEnterMode == CKEDITOR . ENTER _DIV ? "div" : "p" : ! 1 } function l ( a ) { a && a . isEmptyInlineRemoveable ( ) && a . remove ( ) } function v ( a ) { var b = a . editor ; b . getSelection ( ) . scrollIntoView ( ) ; setTimeout ( function ( ) { b . fire ( "saveSnapshot" ) } , 0 ) } function e ( a , b , c ) { var d = a . getCommonAncestor ( b ) ; for ( b = a = c ? b : a ; ( a = a . getParent ( ) ) && ! d . equals ( a ) && 1 == a . getChildCount ( ) ; ) b = a ; b . remove ( ) } var x , t , z , G , u ,
! b || b && "true" == b . getAttribute ( "contenteditable" ) ) } function g ( a ) { return a . activeEnterMode != CKEDITOR . ENTER _BR && ! 1 !== a . config . autoParagraph ? a . activeEnterMode == CKEDITOR . ENTER _DIV ? "div" : "p" : ! 1 } function l ( a ) { a && a . isEmptyInlineRemoveable ( ) && a . remove ( ) } function u ( a ) { var b = a . editor ; b . getSelection ( ) . scrollIntoView ( ) ; setTimeout ( function ( ) { b . fire ( "saveSnapshot" ) } , 0 ) } function e ( a , b , c ) { var d = a . getCommonAncestor ( b ) ; for ( b = a = c ? b : a ; ( a = a . getParent ( ) ) && ! d . equals ( a ) && 1 == a . getChildCount ( ) ; ) b = a ; b . remove ( ) } var x , w , z , G , t ,
n , L , y , H , I ; CKEDITOR . editable = CKEDITOR . tools . createClass ( { base : CKEDITOR . dom . element , $ : function ( a , b ) { this . base ( b . $ || b ) ; this . editor = a ; this . status = "unloaded" ; this . hasFocus = ! 1 ; this . setup ( ) } , proto : { focus : function ( ) { var a ; if ( CKEDITOR . env . webkit && ! this . hasFocus && ( a = this . editor . _ . previousActive || this . getDocument ( ) . getActive ( ) , this . contains ( a ) ) ) { a . focus ( ) ; return } CKEDITOR . env . edge && 14 < CKEDITOR . env . version && ! this . hasFocus && this . getDocument ( ) . equals ( CKEDITOR . document ) && ( this . editor . _ . previousScrollTop = this . $ . scrollTop ) ;
try { if ( ! CKEDITOR . env . ie || CKEDITOR . env . edge && 14 < CKEDITOR . env . version || ! this . getDocument ( ) . equals ( CKEDITOR . document ) ) if ( CKEDITOR . env . chrome ) { var b = this . $ . scrollTop ; this . $ . focus ( ) ; this . $ . scrollTop = b } else this . $ . focus ( ) ; else this . $ . setActive ( ) } catch ( c ) { if ( ! CKEDITOR . env . ie ) throw c ; } CKEDITOR . env . safari && ! this . isInline ( ) && ( a = CKEDITOR . document . getActive ( ) , a . equals ( this . getWindow ( ) . getFrame ( ) ) || this . getWindow ( ) . focus ( ) ) } , on : function ( a , b ) { var c = Array . prototype . slice . call ( arguments , 0 ) ; CKEDITOR . env . ie && /^focus|blur$/ . exec ( a ) &&
( a = "focus" == a ? "focusin" : "focusout" , b = f ( b , this ) , c [ 0 ] = a , c [ 1 ] = b ) ; return CKEDITOR . dom . element . prototype . on . apply ( this , c ) } , attachListener : function ( a ) { ! this . _ . listeners && ( this . _ . listeners = [ ] ) ; var b = Array . prototype . slice . call ( arguments , 1 ) , b = a . on . apply ( a , b ) ; this . _ . listeners . push ( b ) ; return b } , clearListeners : function ( ) { var a = this . _ . listeners ; try { for ( ; a . length ; ) a . pop ( ) . removeListener ( ) } catch ( b ) { } } , restoreAttrs : function ( ) { var a = this . _ . attrChanges , b , c ; for ( c in a ) a . hasOwnProperty ( c ) && ( b = a [ c ] , null !== b ? this . setAttribute ( c ,
b ) : this . removeAttribute ( c ) ) } , attachClass : function ( a ) { var b = this . getCustomData ( "classes" ) ; this . hasClass ( a ) || ( ! b && ( b = [ ] ) , b . push ( a ) , this . setCustomData ( "classes" , b ) , this . addClass ( a ) ) } , changeAttr : function ( a , b ) { var c = this . getAttribute ( a ) ; b !== c && ( ! this . _ . attrChanges && ( this . _ . attrChanges = { } ) , a in this . _ . attrChanges || ( this . _ . attrChanges [ a ] = c ) , this . setAttribute ( a , b ) ) } , insertText : function ( a ) { this . editor . focus ( ) ; this . insertHtml ( this . transformPlainTextToHtml ( a ) , "text" ) } , transformPlainTextToHtml : function ( a ) { var b =
this . editor . getSelection ( ) . getStartElement ( ) . hasAscendant ( "pre" , ! 0 ) ? CKEDITOR . ENTER _BR : this . editor . activeEnterMode ; return CKEDITOR . tools . transformPlainTextToHtml ( a , b ) } , insertHtml : function ( a , b , c ) { var d = this . editor ; d . focus ( ) ; d . fire ( "saveSnapshot" ) ; c || ( c = d . getSelection ( ) . getRanges ( ) [ 0 ] ) ; n ( this , b || "html" , a , c ) ; c . select ( ) ; v ( this ) ; this . editor . fire ( "afterInsertHtml" , { } ) } , insertHtmlIntoRange : function ( a , b , c ) { n ( this , c || "html" , a , b ) ; this . editor . fire ( "afterInsertHtml" , { intoRange : b } ) } , insertElement : function ( a , b ) { var d =
this . editor . getSelection ( ) . getStartElement ( ) . hasAscendant ( "pre" , ! 0 ) ? CKEDITOR . ENTER _BR : this . editor . activeEnterMode ; return CKEDITOR . tools . transformPlainTextToHtml ( a , b ) } , insertHtml : function ( a , b , c ) { var d = this . editor ; d . focus ( ) ; d . fire ( "saveSnapshot" ) ; c || ( c = d . getSelection ( ) . getRanges ( ) [ 0 ] ) ; n ( this , b || "html" , a , c ) ; c . select ( ) ; u ( this ) ; this . editor . fire ( "afterInsertHtml" , { } ) } , insertHtmlIntoRange : function ( a , b , c ) { n ( this , c || "html" , a , b ) ; this . editor . fire ( "afterInsertHtml" , { intoRange : b } ) } , insertElement : function ( a , b ) { var d =
this . editor ; d . focus ( ) ; d . fire ( "saveSnapshot" ) ; var e = d . activeEnterMode , d = d . getSelection ( ) , f = a . getName ( ) , f = CKEDITOR . dtd . $block [ f ] ; b || ( b = d . getRanges ( ) [ 0 ] ) ; this . insertElementIntoRange ( a , b ) && ( b . moveToPosition ( a , CKEDITOR . POSITION _AFTER _END ) , f && ( ( f = a . getNext ( function ( a ) { return c ( a ) && ! G ( a ) } ) ) && f . type == CKEDITOR . NODE _ELEMENT && f . is ( CKEDITOR . dtd . $block ) ? f . getDtd ( ) [ "#" ] ? b . moveToElementEditStart ( f ) : b . moveToElementEditEnd ( a ) : f || e == CKEDITOR . ENTER _BR || ( f = b . fixBlock ( ! 0 , e == CKEDITOR . ENTER _DIV ? "div" : "p" ) , b . moveToElementEditStart ( f ) ) ) ) ;
d . selectRanges ( [ b ] ) ; v ( this ) } , insertElementIntoSelection : function ( a ) { this . insertElement ( a ) } , insertElementIntoRange : function ( a , b ) { var c = this . editor , d = c . config . enterMode , e = a . getName ( ) , f = CKEDITOR . dtd . $block [ e ] ; if ( b . checkReadOnly ( ) ) return ! 1 ; b . deleteContents ( 1 ) ; b . startContainer . type == CKEDITOR . NODE _ELEMENT && ( b . startContainer . is ( { tr : 1 , table : 1 , tbody : 1 , thead : 1 , tfoot : 1 } ) ? L ( b ) : b . startContainer . is ( CKEDITOR . dtd . $list ) && y ( b ) ) ; var g , F ; if ( f ) for ( ; ( g = b . getCommonAncestor ( 0 , 1 ) ) && ( F = CKEDITOR . dtd [ g . getName ( ) ] ) && ( ! F || ! F [ e ] ) ; ) if ( g . getName ( ) in
d . selectRanges ( [ b ] ) ; u ( this ) } , insertElementIntoSelection : function ( a ) { this . insertElement ( a ) } , insertElementIntoRange : function ( a , b ) { var c = this . editor , d = c . config . enterMode , e = a . getName ( ) , f = CKEDITOR . dtd . $block [ e ] ; if ( b . checkReadOnly ( ) ) return ! 1 ; b . deleteContents ( 1 ) ; b . startContainer . type == CKEDITOR . NODE _ELEMENT && ( b . startContainer . is ( { tr : 1 , table : 1 , tbody : 1 , thead : 1 , tfoot : 1 } ) ? L ( b ) : b . startContainer . is ( CKEDITOR . dtd . $list ) && y ( b ) ) ; var g , B ; if ( f ) for ( ; ( g = b . getCommonAncestor ( 0 , 1 ) ) && ( B = CKEDITOR . dtd [ g . getName ( ) ] ) && ( ! B || ! B [ e ] ) ; ) if ( g . getName ( ) in
CKEDITOR . dtd . span ) { var f = b . splitElement ( g ) , h = b . createBookmark ( ) ; l ( g ) ; l ( f ) ; b . moveToBookmark ( h ) } else b . checkStartOfBlock ( ) && b . checkEndOfBlock ( ) ? ( b . setStartBefore ( g ) , b . collapse ( ! 0 ) , g . remove ( ) ) : b . splitBlock ( d == CKEDITOR . ENTER _DIV ? "div" : "p" , c . editable ( ) ) ; b . insertNode ( a ) ; return ! 0 } , setData : function ( a , b ) { b || ( a = this . editor . dataProcessor . toHtml ( a ) ) ; this . setHtml ( a ) ; this . fixInitialSelection ( ) ; "unloaded" == this . status && ( this . status = "ready" ) ; this . editor . fire ( "dataReady" ) } , getData : function ( a ) { var b = this . getHtml ( ) ;
a || ( b = this . editor . dataProcessor . toDataFormat ( b ) ) ; return b } , setReadOnly : function ( a ) { this . setAttribute ( "contenteditable" , ! a ) } , detach : function ( ) { this . status = "detached" ; this . editor . setData ( this . editor . getData ( ) , { internal : ! 0 } ) ; this . clearListeners ( ) ; try { this . _ . cleanCustomData ( ) } catch ( a ) { if ( ! CKEDITOR . env . ie || - 2146828218 !== a . number ) throw a ; } this . editor . fire ( "contentDomUnload" ) ; delete this . editor . document ; delete this . editor . window ; delete this . editor } , isInline : function ( ) { return this . getDocument ( ) . equals ( CKEDITOR . document ) } ,
fixInitialSelection : function ( ) { function a ( ) { var b = c . getDocument ( ) . $ , d = b . getSelection ( ) , e ; a : if ( d . anchorNode && d . anchorNode == c . $ ) e = ! 0 ; else { if ( CKEDITOR . env . webkit && ( e = c . getDocument ( ) . getActive ( ) ) && e . equals ( c ) && ! d . anchorNode ) { e = ! 0 ; break a } e = void 0 } e && ( e = new CKEDITOR . dom . range ( c ) , e . moveToElementEditStart ( c ) , b = b . createRange ( ) , b . setStart ( e . startContainer . $ , e . startOffset ) , b . collapse ( ! 0 ) , d . removeAllRanges ( ) , d . addRange ( b ) ) } function b ( ) { var a = c . getDocument ( ) . $ , d = a . selection , e = c . getDocument ( ) . getActive ( ) ; "None" ==
d . type && e . equals ( c ) && ( d = new CKEDITOR . dom . range ( c ) , a = a . body . createTextRange ( ) , d . moveToElementEditStart ( c ) , d = d . startContainer , d . type != CKEDITOR . NODE _ELEMENT && ( d = d . getParent ( ) ) , a . moveToElementText ( d . $ ) , a . collapse ( ! 0 ) , a . select ( ) ) } var c = this ; if ( CKEDITOR . env . ie && ( 9 > CKEDITOR . env . version || CKEDITOR . env . quirks ) ) this . hasFocus && ( this . focus ( ) , b ( ) ) ; else if ( this . hasFocus ) this . focus ( ) , a ( ) ; else this . once ( "focus" , function ( ) { a ( ) } , null , null , - 999 ) } , getHtmlFromRange : function ( a ) { if ( a . collapsed ) return new CKEDITOR . dom . documentFragment ( a . document ) ;
a = { doc : this . getDocument ( ) , range : a . clone ( ) } ; H . eol . detect ( a , this ) ; H . bogus . exclude ( a ) ; H . cell . shrink ( a ) ; a . fragment = a . range . cloneContents ( ) ; H . tree . rebuild ( a , this ) ; H . eol . fix ( a , this ) ; return new CKEDITOR . dom . documentFragment ( a . fragment . $ ) } , extractHtmlFromRange : function ( a , b ) { var c = I , d = { range : a , doc : a . document } , e = this . getHtmlFromRange ( a ) ; if ( a . collapsed ) return a . optimize ( ) , e ; a . enlarge ( CKEDITOR . ENLARGE _INLINE , 1 ) ; c . table . detectPurge ( d ) ; d . bookmark = a . createBookmark ( ) ; delete d . range ; var f = this . editor . createRange ( ) ;
f . moveToPosition ( d . bookmark . startNode , CKEDITOR . POSITION _BEFORE _START ) ; d . targetBookmark = f . createBookmark ( ) ; c . list . detectMerge ( d , this ) ; c . table . detectRanges ( d , this ) ; c . block . detectMerge ( d , this ) ; d . tableContentsRanges ? ( c . table . deleteRanges ( d ) , a . moveToBookmark ( d . bookmark ) , d . range = a ) : ( a . moveToBookmark ( d . bookmark ) , d . range = a , a . extractContents ( c . detectExtractMerge ( d ) ) ) ; a . moveToBookmark ( d . targetBookmark ) ; a . optimize ( ) ; c . fixUneditableRangePosition ( a ) ; c . list . merge ( d , this ) ; c . table . purge ( d , this ) ; c . block . merge ( d , this ) ;
if ( b ) { c = a . startPath ( ) ; if ( d = a . checkStartOfBlock ( ) && a . checkEndOfBlock ( ) && c . block && ! a . root . equals ( c . block ) ) { a : { var d = c . block . getElementsByTag ( "span" ) , f = 0 , g ; if ( d ) for ( ; g = d . getItem ( f ++ ) ; ) if ( ! t ( g ) ) { d = ! 0 ; break a } d = ! 1 } d = ! d } d && ( a . moveToPosition ( c . block , CKEDITOR . POSITION _BEFORE _START ) , c . block . remove ( ) ) } else c . autoParagraph ( this . editor , a ) , z ( a . startContainer ) && a . startContainer . appendBogus ( ) ; a . startContainer . mergeSiblings ( ) ; return e } , setup : function ( ) { var a = this . editor ; this . attachListener ( a , "beforeGetData" , function ( ) { var b =
this . getData ( ) ; this . is ( "textarea" ) || ! 1 !== a . config . ignoreEmptyParagraph && ( b = b . replace ( u , function ( a , b ) { return b } ) ) ; a . setData ( b , null , 1 ) } , this ) ; this . attachListener ( a , "getSnapshot" , function ( a ) { a . data = this . getData ( 1 ) } , this ) ; this . attachListener ( a , "afterSetData" , function ( ) { this . setData ( a . getData ( 1 ) ) } , this ) ; this . attachListener ( a , "loadSnapshot" , function ( a ) { this . setData ( a . data , 1 ) } , this ) ; this . attachListener ( a , "beforeFocus" , function ( ) { var b = a . getSelection ( ) ; ( b = b && b . getNative ( ) ) && "Control" == b . type || this . focus ( ) } ,
if ( b ) { c = a . startPath ( ) ; if ( d = a . checkStartOfBlock ( ) && a . checkEndOfBlock ( ) && c . block && ! a . root . equals ( c . block ) ) { a : { var d = c . block . getElementsByTag ( "span" ) , f = 0 , g ; if ( d ) for ( ; g = d . getItem ( f ++ ) ; ) if ( ! w ( g ) ) { d = ! 0 ; break a } d = ! 1 } d = ! d } d && ( a . moveToPosition ( c . block , CKEDITOR . POSITION _BEFORE _START ) , c . block . remove ( ) ) } else c . autoParagraph ( this . editor , a ) , z ( a . startContainer ) && a . startContainer . appendBogus ( ) ; a . startContainer . mergeSiblings ( ) ; return e } , setup : function ( ) { var a = this . editor ; this . attachListener ( a , "beforeGetData" , function ( ) { var b =
this . getData ( ) ; this . is ( "textarea" ) || ! 1 !== a . config . ignoreEmptyParagraph && ( b = b . replace ( t , function ( a , b ) { return b } ) ) ; a . setData ( b , null , 1 ) } , this ) ; this . attachListener ( a , "getSnapshot" , function ( a ) { a . data = this . getData ( 1 ) } , this ) ; this . attachListener ( a , "afterSetData" , function ( ) { this . setData ( a . getData ( 1 ) ) } , this ) ; this . attachListener ( a , "loadSnapshot" , function ( a ) { this . setData ( a . data , 1 ) } , this ) ; this . attachListener ( a , "beforeFocus" , function ( ) { var b = a . getSelection ( ) ; ( b = b && b . getNative ( ) ) && "Control" == b . type || this . focus ( ) } ,
this ) ; this . attachListener ( a , "insertHtml" , function ( a ) { this . insertHtml ( a . data . dataValue , a . data . mode , a . data . range ) } , this ) ; this . attachListener ( a , "insertElement" , function ( a ) { this . insertElement ( a . data ) } , this ) ; this . attachListener ( a , "insertText" , function ( a ) { this . insertText ( a . data ) } , this ) ; this . setReadOnly ( a . readOnly ) ; this . attachClass ( "cke_editable" ) ; a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? this . attachClass ( "cke_editable_inline" ) : a . elementMode != CKEDITOR . ELEMENT _MODE _REPLACE && a . elementMode != CKEDITOR . ELEMENT _MODE _APPENDTO ||
this . attachClass ( "cke_editable_themed" ) ; this . attachClass ( "cke_contents_" + a . config . contentsLangDirection ) ; a . keystrokeHandler . blockedKeystrokes [ 8 ] = + a . readOnly ; a . keystrokeHandler . attach ( this ) ; this . on ( "blur" , function ( ) { this . hasFocus = ! 1 } , null , null , - 1 ) ; this . on ( "focus" , function ( ) { this . hasFocus = ! 0 } , null , null , - 1 ) ; if ( CKEDITOR . env . webkit ) this . on ( "scroll" , function ( ) { a . _ . previousScrollTop = a . editable ( ) . $ . scrollTop } , null , null , - 1 ) ; if ( CKEDITOR . env . edge && 14 < CKEDITOR . env . version ) { var d = function ( ) { var b = a . editable ( ) ;
null != a . _ . previousScrollTop && b . getDocument ( ) . equals ( CKEDITOR . document ) && ( b . $ . scrollTop = a . _ . previousScrollTop , a . _ . previousScrollTop = null , this . removeListener ( "scroll" , d ) ) } ; this . on ( "scroll" , d ) } a . focusManager . add ( this ) ; this . equals ( CKEDITOR . document . getActive ( ) ) && ( this . hasFocus = ! 0 , a . once ( "contentDom" , function ( ) { a . focusManager . focus ( this ) } , this ) ) ; this . isInline ( ) && this . changeAttr ( "tabindex" , a . tabIndex ) ; if ( ! this . is ( "textarea" ) ) { a . document = this . getDocument ( ) ; a . window = this . getWindow ( ) ; var f = a . document ; this . changeAttr ( "spellcheck" ,
! a . config . disableNativeSpellChecker ) ; var g = a . config . contentsLangDirection ; this . getDirection ( 1 ) != g && this . changeAttr ( "dir" , g ) ; var k = CKEDITOR . getCss ( ) ; if ( k ) { var g = f . getHead ( ) , r = g . getCustomData ( "stylesheet" ) ; r ? k != r . getText ( ) && ( CKEDITOR . env . ie && 9 > CKEDITOR . env . version ? r . $ . styleSheet . cssText = k : r . setText ( k ) ) : ( k = f . appendStyleText ( k ) , k = new CKEDITOR . dom . element ( k . ownerNode || k . owningElement ) , g . setCustomData ( "stylesheet" , k ) , k . data ( "cke-temp" , 1 ) ) } g = f . getCustomData ( "stylesheet_ref" ) || 0 ; f . setCustomData ( "stylesheet_ref" ,
g + 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 C = { 8 : 1 , 46 : 1 } ; this . attachListener ( a , "key" , function ( b ) { if ( a . readOnly ) return ! 0 ; var c = b . data . domEvent . getKey ( ) , d ; b = a . getSelection ( ) ; if ( 0 !== b . getRanges ( ) . length ) { if ( c in C ) { var e , f = b . getRanges ( ) [ 0 ] , r = f . startPath ( ) , g , q , k , c = 8 == c ; CKEDITOR . env . ie &&
g + 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 D = { 8 : 1 , 46 : 1 } ; this . attachListener ( a , "key" , function ( b ) { if ( a . readOnly ) return ! 0 ; var c = b . data . domEvent . getKey ( ) , d ; b = a . getSelection ( ) ; if ( 0 !== b . getRanges ( ) . length ) { if ( c in D ) { var e , f = b . getRanges ( ) [ 0 ] , r = f . startPath ( ) , g , q , k , c = 8 == c ; CKEDITOR . env . ie &&
11 > CKEDITOR . env . version && ( e = b . getSelectedElement ( ) ) || ( e = h ( b ) ) ? ( a . fire ( "saveSnapshot" ) , f . moveToPosition ( e , CKEDITOR . POSITION _BEFORE _START ) , e . remove ( ) , f . select ( ) , a . fire ( "saveSnapshot" ) , d = 1 ) : f . collapsed && ( ( g = r . block ) && ( k = g [ c ? "getPrevious" : "getNext" ] ( x ) ) && k . type == CKEDITOR . NODE _ELEMENT && k . is ( "table" ) && f [ c ? "checkStartOfBlock" : "checkEndOfBlock" ] ( ) ? ( a . fire ( "saveSnapshot" ) , f [ c ? "checkEndOfBlock" : "checkStartOfBlock" ] ( ) && g . remove ( ) , f [ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( k ) , f . select ( ) , a . fire ( "saveSnapshot" ) ,
d = 1 ) : r . blockLimit && r . blockLimit . is ( "td" ) && ( q = r . blockLimit . getAscendant ( "table" ) ) && f . checkBoundaryOfElement ( q , c ? CKEDITOR . START : CKEDITOR . END ) && ( k = q [ c ? "getPrevious" : "getNext" ] ( x ) ) ? ( a . fire ( "saveSnapshot" ) , f [ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( k ) , f . checkStartOfBlock ( ) && f . checkEndOfBlock ( ) ? k . remove ( ) : f . select ( ) , a . fire ( "saveSnapshot" ) , d = 1 ) : ( q = r . contains ( [ "td" , "th" , "caption" ] ) ) && f . checkBoundaryOfElement ( q , 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 C && ! 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 ( u , "" ) ) ) { 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 C && ( b = a . getSelection ( ) , 0 !== b . getRanges ( ) . length ) ) { var c = 8 == c , d = b . getRanges ( ) [ 0 ] ; b = d . startPath ( ) ; if ( d . collapsed ) a : { var f =
this . attachListener ( this , "keyup" , function ( b ) { b . data . getKeystroke ( ) in D && ! 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 ( t , "" ) ) ) { 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 D && ( b = a . getSelection ( ) , 0 !== b . getRanges ( ) . length ) ) { var c = 8 == c , d = b . getRanges ( ) [ 0 ] ; b = d . startPath ( ) ; if ( d . collapsed ) a : { var f =
b . block ; if ( f && d [ c ? "checkStartOfBlock" : "checkEndOfBlock" ] ( ) && d . moveToClosestEditablePosition ( f , ! c ) && d . collapsed ) { if ( d . startContainer . type == CKEDITOR . NODE _ELEMENT ) { var p = d . startContainer . getChild ( d . startOffset - ( c ? 1 : 0 ) ) ; if ( p && p . type == CKEDITOR . NODE _ELEMENT && p . is ( "hr" ) ) { a . fire ( "saveSnapshot" ) ; p . remove ( ) ; b = ! 0 ; break a } } d = d . startPath ( ) . block ; if ( ! d || d && d . contains ( f ) ) b = void 0 ; else { a . fire ( "saveSnapshot" ) ; var r ; ( r = ( c ? d : f ) . getBogus ( ) ) && r . remove ( ) ; r = a . getSelection ( ) ; p = r . createBookmarks ( ) ; ( c ? f : d ) . moveChildren ( c ?
d : f , ! 1 ) ; b . lastElement . mergeSiblings ( ) ; e ( f , d , ! c ) ; r . selectBookmarks ( p ) ; b = ! 0 } } else b = ! 1 } else c = d , r = b . block , d = c . endPath ( ) . block , r && d && ! r . equals ( d ) ? ( a . fire ( "saveSnapshot" ) , ( f = r . getBogus ( ) ) && f . remove ( ) , c . enlarge ( CKEDITOR . ENLARGE _INLINE ) , c . deleteContents ( ) , d . getParent ( ) && ( d . moveChildren ( r , ! 1 ) , b . lastElement . mergeSiblings ( ) , e ( r , d , ! 0 ) ) , c = a . getSelection ( ) . getRanges ( ) [ 0 ] , c . collapse ( 1 ) , c . optimize ( ) , "" === c . startContainer . getHtml ( ) && c . startContainer . appendBogus ( ) , c . select ( ) , b = ! 0 ) : b = ! 1 ; if ( ! b ) return ; a . getSelection ( ) . scrollIntoView ( ) ;
a . fire ( "saveSnapshot" ) ; return ! 1 } } , this , null , 100 ) } } , getUniqueId : function ( ) { var a ; try { this . _ . expandoNumber = a = CKEDITOR . dom . domObject . prototype . getUniqueId . call ( this ) } catch ( b ) { a = this . _ && this . _ . expandoNumber } return a } } , _ : { cleanCustomData : function ( ) { this . removeClass ( "cke_editable" ) ; this . restoreAttrs ( ) ; for ( var a = this . removeCustomData ( "classes" ) ; a && a . length ; ) this . removeClass ( a . pop ( ) ) ; if ( ! this . is ( "textarea" ) ) { var a = this . getDocument ( ) , b = a . getHead ( ) ; if ( b . getCustomData ( "stylesheet" ) ) { var c = a . getCustomData ( "stylesheet_ref" ) ;
-- c ? a . setCustomData ( "stylesheet_ref" , c ) : ( a . removeCustomData ( "stylesheet_ref" ) , b . removeCustomData ( "stylesheet" ) . remove ( ) ) } } } } } ) ; CKEDITOR . editor . prototype . editable = function ( a ) { var b = this . _ . editable ; if ( b && a ) return 0 ; if ( ! arguments . length ) return b ; a ? b = a instanceof CKEDITOR . editable ? a : new CKEDITOR . editable ( this , a ) : ( b && b . detach ( ) , b = null ) ; return this . _ . editable = b } ; CKEDITOR . on ( "instanceLoaded" , function ( b ) { var c = b . editor ; c . on ( "insertElement" , function ( a ) { a = a . data ; a . type == CKEDITOR . NODE _ELEMENT && ( a . is ( "input" ) ||
a . is ( "textarea" ) ) && ( "false" != a . getAttribute ( "contentEditable" ) && a . data ( "cke-editable" , a . hasAttribute ( "contenteditable" ) ? "true" : "1" ) , a . setAttribute ( "contentEditable" , ! 1 ) ) } ) ; c . on ( "selectionChange" , function ( b ) { if ( ! c . readOnly ) { var d = c . getSelection ( ) ; d && ! d . isLocked && ( d = c . checkDirty ( ) , c . fire ( "lockSnapshot" ) , a ( b ) , c . fire ( "unlockSnapshot" ) , ! d && c . resetDirty ( ) ) } } ) } ) ; CKEDITOR . on ( "instanceCreated" , function ( a ) { var b = a . editor ; b . on ( "mode" , function ( ) { var a = b . editable ( ) ; if ( a && a . isInline ( ) ) { var c = b . title ; a . changeAttr ( "role" ,
"textbox" ) ; a . changeAttr ( "aria-multiline" , "true" ) ; a . changeAttr ( "aria-label" , c ) ; c && a . changeAttr ( "title" , c ) ; var d = b . fire ( "ariaEditorHelpLabel" , { } ) . label ; if ( d && ( c = this . ui . space ( this . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? "top" : "contents" ) ) ) { var e = CKEDITOR . tools . getNextId ( ) , d = CKEDITOR . dom . element . createFromHtml ( '\x3cspan id\x3d"' + e + '" class\x3d"cke_voice_label"\x3e' + d + "\x3c/span\x3e" ) ; c . append ( d ) ; a . changeAttr ( "aria-describedby" , e ) } } } ) } ) ; CKEDITOR . addCss ( ".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}" ) ;
x = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ; t = CKEDITOR . dom . walker . bookmark ( ! 1 , ! 0 ) ; z = CKEDITOR . dom . walker . empty ( ) ; G = CKEDITOR . dom . walker . bogus ( ) ; u = /(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi ; n = function ( ) { function a ( b ) { return b . type == CKEDITOR . NODE _ELEMENT } function b ( c , d ) { var e , f , r , g , h = [ ] , k = d . range . startContainer ; e = d . range . startPath ( ) ; for ( var k = F [ k . getName ( ) ] , C = 0 , w = c . getChildren ( ) , l = w . count ( ) , n = - 1 , A = - 1 , v = 0 , T = e . contains ( F . $list ) ; C <
l ; ++ C ) e = w . getItem ( C ) , a ( e ) ? ( r = e . getName ( ) , T && r in CKEDITOR . dtd . $list ? h = h . concat ( b ( e , d ) ) : ( g = ! ! k [ r ] , "br" != r || ! e . data ( "cke-eol" ) || C && C != l - 1 || ( v = ( f = C ? h [ C - 1 ] . node : w . getItem ( C + 1 ) ) && ( ! a ( f ) || ! f . is ( "br" ) ) , f = f && a ( f ) && F . $block [ f . getName ( ) ] ) , - 1 != n || g || ( n = C ) , g || ( A = C ) , h . push ( { isElement : 1 , isLineBreak : v , isBlock : e . isBlockBoundary ( ) , hasBlockSibling : f , node : e , name : r , allowed : g } ) , f = v = 0 ) ) : h . push ( { isElement : 0 , node : e , allowed : 1 } ) ; - 1 < n && ( h [ n ] . firstNotAllowed = 1 ) ; - 1 < A && ( h [ A ] . lastNotAllowed = 1 ) ; return h } function d ( b , c ) { var e = [ ] ,
f = b . getChildren ( ) , r = f . count ( ) , g , h = 0 , k = F [ c ] , C = ! b . is ( F . $inline ) || b . is ( "br" ) ; for ( C && e . push ( " " ) ; h < r ; h ++ ) g = f . getItem ( h ) , a ( g ) && ! g . is ( k ) ? e = e . concat ( d ( g , c ) ) : e . push ( g ) ; C && 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 ( F . $removeEmpty ) || b . is ( "a" ) && ! b . isBlockBoundary ( ) ) } function r ( b , c , d , e ) { var f = b . clone ( ) , g , h ; f . setEndAt ( c , CKEDITOR . POSITION _BEFORE _END ) ; ( g = ( new CKEDITOR . dom . walker ( f ) ) . next ( ) ) && a ( g ) && w [ g . getName ( ) ] &&
( h = g . getPrevious ( ) ) && a ( h ) && ! h . getParent ( ) . equals ( b . startContainer ) && d . contains ( h ) && e . contains ( g ) && g . isIdentical ( h ) && ( g . moveChildren ( h ) , g . remove ( ) , r ( b , c , d , e ) ) } function h ( b , c ) { function d ( b , c ) { if ( c . isBlock && c . isElement && ! c . node . is ( "br" ) && a ( b ) && b . is ( "br" ) ) return b . remove ( ) , 1 } var e = c . endContainer . getChild ( c . endOffset ) , f = c . endContainer . getChild ( c . endOffset - 1 ) ; e && d ( e , b [ b . length - 1 ] ) ; f && d ( f , b [ 0 ] ) && ( c . setEnd ( c . endContainer , c . endOffset - 1 ) , c . collapse ( ) ) } var F = CKEDITOR . dtd , w = { p : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 ,
h6 : 1 , ul : 1 , ol : 1 , li : 1 , pre : 1 , dl : 1 , blockquote : 1 } , n = { p : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 } , v = CKEDITOR . tools . extend ( { } , F . $inline ) ; delete v . br ; return function ( p , w , O , q ) { var E = p . editor , D = ! 1 ; "unfiltered_html" == w && ( w = "html" , D = ! 0 ) ; if ( ! q . checkReadOnly ( ) ) { var t = ( new CKEDITOR . dom . elementPath ( q . startContainer , q . root ) ) . blockLimit || q . root ; w = { type : w , dontFilter : D , editable : p , editor : E , range : q , blockLimit : t , mergeCandidates : [ ] , zombies : [ ] } ; var D = w . range , t = w . mergeCandidates , J = "html" === w . type , x , u , z , y , G , V ; "text" == w . type &&
D . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 , ! 1 ) && ( u = CKEDITOR . dom . element . createFromHtml ( "\x3cspan\x3e\x26nbsp;\x3c/span\x3e" , D . document ) , D . insertNode ( u ) , D . setStartAfter ( u ) ) ; z = new CKEDITOR . dom . elementPath ( D . startContainer ) ; w . endPath = y = new CKEDITOR . dom . elementPath ( D . endContainer ) ; if ( ! D . collapsed ) { x = y . block || y . blockLimit ; var aa = D . getCommonAncestor ( ) ; x && ! x . equals ( aa ) && ! x . contains ( aa ) && D . checkEndOfBlock ( ) && w . zombies . push ( x ) ; D . deleteContents ( ) } for ( ; ( G = e ( D ) ) && a ( G ) && G . isBlockBoundary ( ) && z . contains ( G ) ; ) D . moveToPosition ( G ,
CKEDITOR . POSITION _BEFORE _END ) ; r ( D , w . blockLimit , z , y ) ; u && ( D . setEndBefore ( u ) , D . collapse ( ) , u . remove ( ) ) ; u = D . startPath ( ) ; if ( x = u . contains ( f , ! 1 , 1 ) ) V = D . splitElement ( x ) , w . inlineStylesRoot = x , w . inlineStylesPeak = u . lastElement ; u = D . createBookmark ( ) ; J && ( l ( x ) , l ( V ) ) ; ( x = u . startNode . getPrevious ( c ) ) && a ( x ) && f ( x ) && t . push ( x ) ; ( x = u . startNode . getNext ( c ) ) && a ( x ) && f ( x ) && t . push ( x ) ; for ( x = u . startNode ; ( x = x . getParent ( ) ) && f ( x ) ; ) t . push ( x ) ; D . moveToBookmark ( u ) ; E . enterMode === CKEDITOR . ENTER _DIV && "" === E . getData ( ! 0 ) && ( ( E = p . getFirst ( ) ) && E . remove ( ) ,
q . setStartAt ( p , CKEDITOR . POSITION _AFTER _START ) , q . collapse ( ! 0 ) ) ; if ( p = O ) { p = w . range ; if ( "text" == w . type && w . inlineStylesRoot ) { q = w . inlineStylesPeak ; E = q . getDocument ( ) . createText ( "{cke-peak}" ) ; for ( V = w . inlineStylesRoot . getParent ( ) ; ! q . equals ( V ) ; ) E = E . appendTo ( q . clone ( ) ) , q = q . getParent ( ) ; O = E . getOuterHtml ( ) . split ( "{cke-peak}" ) . join ( O ) } q = w . blockLimit . getName ( ) ; if ( /^\s+|\s+$/ . test ( O ) && "span" in CKEDITOR . dtd [ q ] ) { var H = '\x3cspan data-cke-marker\x3d"1"\x3e\x26nbsp;\x3c/span\x3e' ; O = H + O + H } O = w . editor . dataProcessor . toHtml ( O ,
{ context : null , fixForBody : ! 1 , protectedWhitespaces : ! ! H , dontFilter : w . dontFilter , filter : w . editor . activeFilter , enterMode : w . editor . activeEnterMode } ) ; q = p . document . createElement ( "body" ) ; q . setHtml ( O ) ; H && ( q . getFirst ( ) . remove ( ) , q . getLast ( ) . remove ( ) ) ; if ( ( H = p . startPath ( ) . block ) && ( 1 != H . getChildCount ( ) || ! H . getBogus ( ) ) ) a : { var P ; if ( 1 == q . getChildCount ( ) && a ( P = q . getFirst ( ) ) && P . is ( n ) && ! P . hasAttribute ( "contenteditable" ) ) { H = P . getElementsByTag ( "*" ) ; p = 0 ; for ( V = H . count ( ) ; p < V ; p ++ ) if ( E = H . getItem ( p ) , ! E . is ( v ) ) break a ; P . moveChildren ( P . getParent ( 1 ) ) ;
P . remove ( ) } } w . dataWrapper = q ; p = O } if ( p ) { P = w . range ; p = P . document ; q = w . blockLimit ; V = 0 ; var R , H = [ ] , Q , I ; O = u = 0 ; var L , E = P . startContainer ; G = w . endPath . elements [ 0 ] ; var Z , D = G . getPosition ( E ) , t = ! ! G . getCommonAncestor ( E ) && D != CKEDITOR . POSITION _IDENTICAL && ! ( D & CKEDITOR . POSITION _CONTAINS + CKEDITOR . POSITION _IS _CONTAINED ) , E = b ( w . dataWrapper , w ) ; for ( h ( E , P ) ; V < E . length ; V ++ ) { D = E [ V ] ; if ( J = D . isLineBreak ) J = P , x = q , y = z = void 0 , D . hasBlockSibling ? J = 1 : ( z = J . startContainer . getAscendant ( F . $block , 1 ) ) && z . is ( { div : 1 , p : 1 } ) ? ( y = z . getPosition ( x ) , y ==
CKEDITOR . POSITION _IDENTICAL || y == CKEDITOR . POSITION _CONTAINS ? J = 0 : ( x = J . splitElement ( z ) , J . moveToPosition ( x , CKEDITOR . POSITION _AFTER _START ) , J = 1 ) ) : J = 0 ; if ( J ) O = 0 < V ; else { J = P . startPath ( ) ; ! D . isBlock && k ( w . editor , J . block , J . blockLimit ) && ( I = g ( w . editor ) ) && ( I = p . createElement ( I ) , I . appendBogus ( ) , P . insertNode ( I ) , CKEDITOR . env . needsBrFiller && ( R = I . getBogus ( ) ) && R . remove ( ) , P . moveToPosition ( I , CKEDITOR . POSITION _BEFORE _END ) ) ; if ( ( J = P . startPath ( ) . block ) && ! J . equals ( Q ) ) { if ( R = J . getBogus ( ) ) R . remove ( ) , H . push ( J ) ; Q = J } D . firstNotAllowed &&
( u = 1 ) ; if ( u && D . isElement ) { J = P . startContainer ; for ( x = null ; J && ! F [ J . getName ( ) ] [ D . name ] ; ) { if ( J . equals ( q ) ) { J = null ; break } x = J ; J = J . getParent ( ) } if ( J ) x && ( L = P . splitElement ( x ) , w . zombies . push ( L ) , w . zombies . push ( x ) ) ; else { x = q . getName ( ) ; Z = ! V ; J = V == E . length - 1 ; x = d ( D . node , x ) ; z = [ ] ; y = x . length ; for ( var aa = 0 , ca = void 0 , X = 0 , W = - 1 ; aa < y ; aa ++ ) ca = x [ aa ] , " " == ca ? ( X || Z && ! aa || ( z . push ( new CKEDITOR . dom . text ( " " ) ) , W = z . length ) , X = 1 ) : ( z . push ( ca ) , X = 0 ) ; J && W == z . length && z . pop ( ) ; Z = z } } if ( Z ) { for ( ; J = Z . pop ( ) ; ) P . insertNode ( J ) ; Z = 0 } else P . insertNode ( D . node ) ;
D . lastNotAllowed && V < E . length - 1 && ( ( L = t ? G : L ) && P . setEndAt ( L , CKEDITOR . POSITION _AFTER _START ) , u = 0 ) ; P . collapse ( ) } } 1 != E . length ? R = ! 1 : ( R = E [ 0 ] , R = R . isElement && "false" == R . node . getAttribute ( "contenteditable" ) ) ; R && ( O = ! 0 , J = E [ 0 ] . node , P . setStartAt ( J , CKEDITOR . POSITION _BEFORE _START ) , P . setEndAt ( J , CKEDITOR . POSITION _AFTER _END ) ) ; w . dontMoveCaret = O ; w . bogusNeededBlocks = H } R = w . range ; var Y ; L = w . bogusNeededBlocks ; for ( Z = R . createBookmark ( ) ; Q = w . zombies . pop ( ) ; ) Q . getParent ( ) && ( I = R . clone ( ) , I . moveToElementEditStart ( Q ) , I . removeEmptyBlocksAtEnd ( ) ) ;
if ( L ) for ( ; Q = L . pop ( ) ; ) CKEDITOR . env . needsBrFiller ? Q . appendBogus ( ) : Q . append ( R . document . createText ( " " ) ) ; for ( ; Q = w . mergeCandidates . pop ( ) ; ) Q . mergeSiblings ( ) ; R . moveToBookmark ( Z ) ; if ( ! w . dontMoveCaret ) { for ( Q = e ( R ) ; Q && a ( Q ) && ! Q . is ( F . $empty ) ; ) { if ( Q . isBlockBoundary ( ) ) R . moveToPosition ( Q , CKEDITOR . POSITION _BEFORE _END ) ; else { if ( f ( Q ) && Q . getHtml ( ) . match ( /(\s| )$/g ) ) { Y = null ; break } Y = R . clone ( ) ; Y . moveToPosition ( Q , CKEDITOR . POSITION _BEFORE _END ) } Q = Q . getLast ( c ) } Y && R . moveToRange ( Y ) } } } } ( ) ; L = function ( ) { function a ( b ) { b = new CKEDITOR . dom . walker ( b ) ;
x = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ; w = CKEDITOR . dom . walker . bookmark ( ! 1 , ! 0 ) ; z = CKEDITOR . dom . walker . empty ( ) ; G = CKEDITOR . dom . walker . bogus ( ) ; t = /(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi ; n = function ( ) { function a ( b ) { return b . type == CKEDITOR . NODE _ELEMENT } function b ( c , d ) { var e , f , r , g , h = [ ] , k = d . range . startContainer ; e = d . range . startPath ( ) ; for ( var k = B [ k . getName ( ) ] , D = 0 , v = c . getChildren ( ) , l = v . count ( ) , n = - 1 , A = - 1 , u = 0 , T = e . contains ( B . $list ) ; D <
l ; ++ D ) e = v . getItem ( D ) , a ( e ) ? ( r = e . getName ( ) , T && r in CKEDITOR . dtd . $list ? h = h . concat ( b ( e , d ) ) : ( g = ! ! k [ r ] , "br" != r || ! e . data ( "cke-eol" ) || D && D != l - 1 || ( u = ( f = D ? h [ D - 1 ] . node : v . getItem ( D + 1 ) ) && ( ! a ( f ) || ! f . is ( "br" ) ) , f = f && a ( f ) && B . $block [ f . getName ( ) ] ) , - 1 != n || g || ( n = D ) , g || ( A = D ) , h . push ( { isElement : 1 , isLineBreak : u , isBlock : e . isBlockBoundary ( ) , hasBlockSibling : f , node : e , name : r , allowed : g } ) , f = u = 0 ) ) : h . push ( { isElement : 0 , node : e , allowed : 1 } ) ; - 1 < n && ( h [ n ] . firstNotAllowed = 1 ) ; - 1 < A && ( h [ A ] . lastNotAllowed = 1 ) ; return h } function d ( b , c ) { var e = [ ] ,
f = b . getChildren ( ) , r = f . count ( ) , g , h = 0 , k = B [ c ] , D = ! b . is ( B . $inline ) || b . is ( "br" ) ; for ( D && e . push ( " " ) ; h < r ; h ++ ) g = f . getItem ( h ) , a ( g ) && ! g . is ( k ) ? e = e . concat ( d ( g , c ) ) : e . push ( g ) ; D && 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 ( B . $removeEmpty ) || b . is ( "a" ) && ! b . isBlockBoundary ( ) ) } function r ( b , c , d , e ) { var f = b . clone ( ) , g , h ; f . setEndAt ( c , CKEDITOR . POSITION _BEFORE _END ) ; ( g = ( new CKEDITOR . dom . walker ( f ) ) . next ( ) ) && a ( g ) && v [ g . getName ( ) ] &&
( h = g . getPrevious ( ) ) && a ( h ) && ! h . getParent ( ) . equals ( b . startContainer ) && d . contains ( h ) && e . contains ( g ) && g . isIdentical ( h ) && ( g . moveChildren ( h ) , g . remove ( ) , r ( b , c , d , e ) ) } function h ( b , c ) { function d ( b , c ) { if ( c . isBlock && c . isElement && ! c . node . is ( "br" ) && a ( b ) && b . is ( "br" ) ) return b . remove ( ) , 1 } var e = c . endContainer . getChild ( c . endOffset ) , f = c . endContainer . getChild ( c . endOffset - 1 ) ; e && d ( e , b [ b . length - 1 ] ) ; f && d ( f , b [ 0 ] ) && ( c . setEnd ( c . endContainer , c . endOffset - 1 ) , c . collapse ( ) ) } var B = CKEDITOR . dtd , v = { 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 } , n = { p : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 } , u = CKEDITOR . tools . extend ( { } , B . $inline ) ; delete u . br ; return function ( p , v , O , q ) { var F = p . editor , E = ! 1 ; "unfiltered_html" == v && ( v = "html" , E = ! 0 ) ; if ( ! q . checkReadOnly ( ) ) { var w = ( new CKEDITOR . dom . elementPath ( q . startContainer , q . root ) ) . blockLimit || q . root ; v = { type : v , dontFilter : E , editable : p , editor : F , range : q , blockLimit : w , mergeCandidates : [ ] , zombies : [ ] } ; var E = v . range , w = v . mergeCandidates , J = "html" === v . type , x , t , z , y , G , V ; "text" == v . type &&
E . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 , ! 1 ) && ( t = CKEDITOR . dom . element . createFromHtml ( "\x3cspan\x3e\x26nbsp;\x3c/span\x3e" , E . document ) , E . insertNode ( t ) , E . setStartAfter ( t ) ) ; z = new CKEDITOR . dom . elementPath ( E . startContainer ) ; v . endPath = y = new CKEDITOR . dom . elementPath ( E . endContainer ) ; if ( ! E . collapsed ) { x = y . block || y . blockLimit ; var aa = E . getCommonAncestor ( ) ; x && ! x . equals ( aa ) && ! x . contains ( aa ) && E . checkEndOfBlock ( ) && v . zombies . push ( x ) ; E . deleteContents ( ) } for ( ; ( G = e ( E ) ) && a ( G ) && G . isBlockBoundary ( ) && z . contains ( G ) ; ) E . moveToPosition ( G ,
CKEDITOR . POSITION _BEFORE _END ) ; r ( E , v . blockLimit , z , y ) ; t && ( E . setEndBefore ( t ) , E . collapse ( ) , t . remove ( ) ) ; t = E . startPath ( ) ; if ( x = t . contains ( f , ! 1 , 1 ) ) V = E . splitElement ( x ) , v . inlineStylesRoot = x , v . inlineStylesPeak = t . lastElement ; t = E . createBookmark ( ) ; J && ( l ( x ) , l ( V ) ) ; ( x = t . startNode . getPrevious ( c ) ) && a ( x ) && f ( x ) && w . push ( x ) ; ( x = t . startNode . getNext ( c ) ) && a ( x ) && f ( x ) && w . push ( x ) ; for ( x = t . startNode ; ( x = x . getParent ( ) ) && f ( x ) ; ) w . push ( x ) ; E . moveToBookmark ( t ) ; F . enterMode === CKEDITOR . ENTER _DIV && "" === F . getData ( ! 0 ) && ( ( F = p . getFirst ( ) ) && F . remove ( ) ,
q . setStartAt ( p , CKEDITOR . POSITION _AFTER _START ) , q . collapse ( ! 0 ) ) ; if ( p = O ) { p = v . range ; if ( "text" == v . type && v . inlineStylesRoot ) { q = v . inlineStylesPeak ; F = q . getDocument ( ) . createText ( "{cke-peak}" ) ; for ( V = v . inlineStylesRoot . getParent ( ) ; ! q . equals ( V ) ; ) F = F . appendTo ( q . clone ( ) ) , q = q . getParent ( ) ; O = F . getOuterHtml ( ) . split ( "{cke-peak}" ) . join ( O ) } q = v . blockLimit . getName ( ) ; if ( /^\s+|\s+$/ . test ( O ) && "span" in CKEDITOR . dtd [ q ] ) { var H = '\x3cspan data-cke-marker\x3d"1"\x3e\x26nbsp;\x3c/span\x3e' ; O = H + O + H } O = v . editor . dataProcessor . toHtml ( O ,
{ context : null , fixForBody : ! 1 , protectedWhitespaces : ! ! H , dontFilter : v . dontFilter , filter : v . editor . activeFilter , enterMode : v . editor . activeEnterMode } ) ; q = p . document . createElement ( "body" ) ; q . setHtml ( O ) ; H && ( q . getFirst ( ) . remove ( ) , q . getLast ( ) . remove ( ) ) ; if ( ( H = p . startPath ( ) . block ) && ( 1 != H . getChildCount ( ) || ! H . getBogus ( ) ) ) a : { var P ; if ( 1 == q . getChildCount ( ) && a ( P = q . getFirst ( ) ) && P . is ( n ) && ! P . hasAttribute ( "contenteditable" ) ) { H = P . getElementsByTag ( "*" ) ; p = 0 ; for ( V = H . count ( ) ; p < V ; p ++ ) if ( F = H . getItem ( p ) , ! F . is ( u ) ) break a ; P . moveChildren ( P . getParent ( 1 ) ) ;
P . remove ( ) } } v . dataWrapper = q ; p = O } if ( p ) { P = v . range ; p = P . document ; q = v . blockLimit ; V = 0 ; var R , H = [ ] , Q , I ; O = t = 0 ; var L , F = P . startContainer ; G = v . endPath . elements [ 0 ] ; var Z , E = G . getPosition ( F ) , w = ! ! G . getCommonAncestor ( F ) && E != CKEDITOR . POSITION _IDENTICAL && ! ( E & CKEDITOR . POSITION _CONTAINS + CKEDITOR . POSITION _IS _CONTAINED ) , F = b ( v . dataWrapper , v ) ; for ( h ( F , P ) ; V < F . length ; V ++ ) { E = F [ V ] ; if ( J = E . isLineBreak ) J = P , x = q , y = z = void 0 , E . hasBlockSibling ? J = 1 : ( z = J . startContainer . getAscendant ( B . $block , 1 ) ) && z . is ( { div : 1 , p : 1 } ) ? ( y = z . getPosition ( x ) , y ==
CKEDITOR . POSITION _IDENTICAL || y == CKEDITOR . POSITION _CONTAINS ? J = 0 : ( x = J . splitElement ( z ) , J . moveToPosition ( x , CKEDITOR . POSITION _AFTER _START ) , J = 1 ) ) : J = 0 ; if ( J ) O = 0 < V ; else { J = P . startPath ( ) ; ! E . isBlock && k ( v . editor , J . block , J . blockLimit ) && ( I = g ( v . editor ) ) && ( I = p . createElement ( I ) , I . appendBogus ( ) , P . insertNode ( I ) , CKEDITOR . env . needsBrFiller && ( R = I . getBogus ( ) ) && R . remove ( ) , P . moveToPosition ( I , CKEDITOR . POSITION _BEFORE _END ) ) ; if ( ( J = P . startPath ( ) . block ) && ! J . equals ( Q ) ) { if ( R = J . getBogus ( ) ) R . remove ( ) , H . push ( J ) ; Q = J } E . firstNotAllowed &&
( t = 1 ) ; if ( t && E . isElement ) { J = P . startContainer ; for ( x = null ; J && ! B [ J . getName ( ) ] [ E . name ] ; ) { if ( J . equals ( q ) ) { J = null ; break } x = J ; J = J . getParent ( ) } if ( J ) x && ( L = P . splitElement ( x ) , v . zombies . push ( L ) , v . zombies . push ( x ) ) ; else { x = q . getName ( ) ; Z = ! V ; J = V == F . length - 1 ; x = d ( E . node , x ) ; z = [ ] ; y = x . length ; for ( var aa = 0 , ca = void 0 , X = 0 , W = - 1 ; aa < y ; aa ++ ) ca = x [ aa ] , " " == ca ? ( X || Z && ! aa || ( z . push ( new CKEDITOR . dom . text ( " " ) ) , W = z . length ) , X = 1 ) : ( z . push ( ca ) , X = 0 ) ; J && W == z . length && z . pop ( ) ; Z = z } } if ( Z ) { for ( ; J = Z . pop ( ) ; ) P . insertNode ( J ) ; Z = 0 } else P . insertNode ( E . node ) ;
E . lastNotAllowed && V < F . length - 1 && ( ( L = w ? G : L ) && P . setEndAt ( L , CKEDITOR . POSITION _AFTER _START ) , t = 0 ) ; P . collapse ( ) } } 1 != F . length ? R = ! 1 : ( R = F [ 0 ] , R = R . isElement && "false" == R . node . getAttribute ( "contenteditable" ) ) ; R && ( O = ! 0 , J = F [ 0 ] . node , P . setStartAt ( J , CKEDITOR . POSITION _BEFORE _START ) , P . setEndAt ( J , CKEDITOR . POSITION _AFTER _END ) ) ; v . dontMoveCaret = O ; v . bogusNeededBlocks = H } R = v . range ; var Y ; L = v . bogusNeededBlocks ; for ( Z = R . createBookmark ( ) ; Q = v . zombies . pop ( ) ; ) Q . getParent ( ) && ( I = R . clone ( ) , I . moveToElementEditStart ( Q ) , I . removeEmptyBlocksAtEnd ( ) ) ;
if ( L ) for ( ; Q = L . pop ( ) ; ) CKEDITOR . env . needsBrFiller ? Q . appendBogus ( ) : Q . append ( R . document . createText ( " " ) ) ; for ( ; Q = v . mergeCandidates . pop ( ) ; ) Q . mergeSiblings ( ) ; R . moveToBookmark ( Z ) ; if ( ! v . dontMoveCaret ) { for ( Q = e ( R ) ; Q && a ( Q ) && ! Q . is ( B . $empty ) ; ) { if ( Q . isBlockBoundary ( ) ) R . moveToPosition ( Q , CKEDITOR . POSITION _BEFORE _END ) ; else { if ( f ( Q ) && Q . getHtml ( ) . match ( /(\s| )$/g ) ) { Y = null ; break } Y = R . clone ( ) ; Y . moveToPosition ( Q , CKEDITOR . POSITION _BEFORE _END ) } Q = Q . getLast ( c ) } Y && R . moveToRange ( Y ) } } } } ( ) ; L = function ( ) { function a ( b ) { b = new CKEDITOR . dom . walker ( b ) ;
b . guard = function ( a , b ) { if ( b ) return ! 1 ; if ( a . type == CKEDITOR . NODE _ELEMENT ) return a . is ( CKEDITOR . dtd . $tableContent ) } ; b . evaluator = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT } ; return b } function b ( a , c , d ) { c = a . getDocument ( ) . createElement ( c ) ; a . append ( c , d ) ; return c } function c ( a ) { var b = a . count ( ) , d ; for ( b ; 0 < b -- ; ) d = a . getItem ( b ) , CKEDITOR . tools . trim ( d . getHtml ( ) ) || ( d . appendBogus ( ) , CKEDITOR . env . ie && 9 > CKEDITOR . env . version && d . getChildCount ( ) && d . getFirst ( ) . remove ( ) ) } return function ( d ) { var e = d . startContainer , f = e . getAscendant ( "table" ,
1 ) , g = ! 1 ; c ( f . getElementsByTag ( "td" ) ) ; c ( f . getElementsByTag ( "th" ) ) ; f = d . clone ( ) ; f . setStart ( e , 0 ) ; f = a ( f ) . lastBackward ( ) ; f || ( f = d . clone ( ) , f . setEndAt ( e , CKEDITOR . POSITION _BEFORE _END ) , f = a ( f ) . lastForward ( ) , g = ! 0 ) ; f || ( f = e ) ; f . is ( "table" ) ? ( d . setStartAt ( f , CKEDITOR . POSITION _BEFORE _START ) , d . collapse ( ! 0 ) , f . remove ( ) ) : ( f . is ( { tbody : 1 , thead : 1 , tfoot : 1 } ) && ( f = b ( f , "tr" , g ) ) , f . is ( "tr" ) && ( f = b ( f , f . getParent ( ) . is ( "thead" ) ? "th" : "td" , g ) ) , ( e = f . getBogus ( ) ) && e . remove ( ) , d . moveToPosition ( f , g ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _BEFORE _END ) ) } } ( ) ;
y = 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 ) ?
@@ -446,78 +447,78 @@ for(e=0;e<b.length;e++)if(d=b[e]._getTableElement(),!d)return!1;return!0}functio
return c += d . join ( "\t" ) } function f ( a ) { var b = this . root . editor , d = b . getSelection ( 1 ) ; this . reset ( ) ; I = ! 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 ; I = ! 1 ; this . root . fire ( "selectionchange" ) } function h ( ) { var b = this . _ . fakeSelection , c ; if ( b ) { c = this . getSelection ( 1 ) ;
var e ; if ( ! ( e = ! c ) && ( e = ! c . isHidden ( ) ) ) { e = b ; var f = c . getRanges ( ) , g = e . getRanges ( ) , h = f . length && f [ 0 ] . _getTableElement ( ) && f [ 0 ] . _getTableElement ( ) . getAscendant ( "table" , ! 0 ) , p = g . length && g [ 0 ] . _getTableElement ( ) && g [ 0 ] . _getTableElement ( ) . getAscendant ( "table" , ! 0 ) , k = 1 === f . length && f [ 0 ] . _getTableElement ( ) && f [ 0 ] . _getTableElement ( ) . is ( "table" ) , l = 1 === g . length && g [ 0 ] . _getTableElement ( ) && g [ 0 ] . _getTableElement ( ) . is ( "table" ) ; if ( a ( e . getSelectedElement ( ) ) ) e = ! 1 ; else { var q = 1 === f . length && f [ 0 ] . collapsed , g = d ( f , ! ! CKEDITOR . env . webkit ) &&
d ( g ) ; h = h && p ? h . equals ( p ) || p . contains ( h ) : ! 1 ; h && ( q || g ) ? ( k && ! l && e . selectRanges ( f ) , e = ! 0 ) : e = ! 1 } e = ! e } e && ( b . reset ( ) , b = 0 ) } if ( ! b && ( b = c || this . getSelection ( 1 ) , ! b || b . getType ( ) == CKEDITOR . SELECTION _NONE ) ) return ; this . fire ( "selectionCheck" , b ) ; c = this . elementPath ( ) ; c . compare ( this . _ . selectionPreviousPath ) || ( e = this . _ . selectionPreviousPath && this . _ . selectionPreviousPath . blockLimit . equals ( c . blockLimit ) , ! CKEDITOR . env . webkit && ! CKEDITOR . env . gecko || e || ( this . _ . previousActive = this . document . getActive ( ) ) , this . _ . selectionPreviousPath =
c , this . fire ( "selectionChange" , { selection : b , path : c } ) ) } function k ( ) { B = ! 0 ; m || ( g . call ( this ) , m = CKEDITOR . tools . setTimeout ( g , 200 , this ) ) } function g ( ) { m = null ; B && ( CKEDITOR . tools . setTimeout ( h , 0 , this ) , B = ! 1 ) } function l ( a ) { return K ( a ) || a . type == CKEDITOR . NODE _ELEMENT && ! a . is ( CKEDITOR . dtd . $empty ) ? ! 0 : ! 1 } function v ( a ) { function b ( c , d ) { return c && c . type != CKEDITOR . NODE _TEXT ? a . clone ( ) [ "moveToElementEdit" + ( d ? "End" : "Start" ) ] ( c ) : ! 1 } if ( ! ( a . root instanceof CKEDITOR . editable ) ) return ! 1 ; var c = a . startContainer , d = a . getPreviousNode ( l ,
c , this . fire ( "selectionChange" , { selection : b , path : c } ) ) } function k ( ) { C = ! 0 ; m || ( g . call ( this ) , m = CKEDITOR . tools . setTimeout ( g , 200 , this ) ) } function g ( ) { m = null ; C && ( CKEDITOR . tools . setTimeout ( h , 0 , this ) , C = ! 1 ) } function l ( a ) { return K ( a ) || a . type == CKEDITOR . NODE _ELEMENT && ! a . is ( CKEDITOR . dtd . $empty ) ? ! 0 : ! 1 } function u ( a ) { function b ( c , d ) { return c && c . type != CKEDITOR . NODE _TEXT ? a . clone ( ) [ "moveToElementEdit" + ( d ? "End" : "Start" ) ] ( c ) : ! 1 } if ( ! ( a . root instanceof CKEDITOR . editable ) ) return ! 1 ; var c = a . startContainer , d = a . getPreviousNode ( l ,
null , c ) , e = a . getNextNode ( l , null , c ) ; return b ( d ) || b ( e , 1 ) || ! ( d || e || c . type == CKEDITOR . NODE _ELEMENT && c . isBlockBoundary ( ) && c . getBogus ( ) ) ? ! 0 : ! 1 } function e ( a ) { x ( a , ! 1 ) ; var b = a . getDocument ( ) . createText ( y ) ; a . setCustomData ( "cke-fillingChar" , b ) ; return b } function x ( a , b ) { var c = a && a . removeCustomData ( "cke-fillingChar" ) ; if ( c ) { if ( ! 1 !== b ) { var d = a . getDocument ( ) . getSelection ( ) . getNative ( ) , e = d && "None" != d . type && d . getRangeAt ( 0 ) , f = y . length ; if ( c . getLength ( ) > f && e && e . intersectsNode ( c . $ ) ) { var g = [ { node : d . anchorNode , offset : d . anchorOffset } ,
{ node : d . focusNode , offset : d . focusOffset } ] ; d . anchorNode == c . $ && d . anchorOffset > f && ( g [ 0 ] . offset -= f ) ; d . focusNode == c . $ && d . focusOffset > f && ( g [ 1 ] . offset -= f ) } } c . setText ( t ( c . getText ( ) , 1 ) ) ; g && ( c = a . getDocument ( ) . $ , d = c . getSelection ( ) , c = c . createRange ( ) , c . setStart ( g [ 0 ] . node , g [ 0 ] . offset ) , c . collapse ( ! 0 ) , d . removeAllRanges ( ) , d . addRange ( c ) , d . extend ( g [ 1 ] . node , g [ 1 ] . offset ) ) } } function t ( a , b ) { return b ? a . replace ( H , function ( a , b ) { return b ? " " : "" } ) : a . replace ( y , "" ) } function z ( a , b ) { var c = b && CKEDITOR . tools . htmlEncode ( b ) || "\x26nbsp;" ,
{ node : d . focusNode , offset : d . focusOffset } ] ; d . anchorNode == c . $ && d . anchorOffset > f && ( g [ 0 ] . offset -= f ) ; d . focusNode == c . $ && d . focusOffset > f && ( g [ 1 ] . offset -= f ) } } c . setText ( w ( c . getText ( ) , 1 ) ) ; g && ( c = a . getDocument ( ) . $ , d = c . getSelection ( ) , c = c . createRange ( ) , c . setStart ( g [ 0 ] . node , g [ 0 ] . offset ) , c . collapse ( ! 0 ) , d . removeAllRanges ( ) , d . addRange ( c ) , d . extend ( g [ 1 ] . node , g [ 1 ] . offset ) ) } } function w ( a , b ) { return b ? a . replace ( H , function ( a , b ) { return b ? " " : "" } ) : a . replace ( y , "" ) } function z ( a , b ) { var c = b && CKEDITOR . tools . htmlEncode ( b ) || "\x26nbsp;" ,
c = CKEDITOR . dom . element . createFromHtml ( '\x3cdiv data-cke-hidden-sel\x3d"1" data-cke-temp\x3d"1" style\x3d"' + ( CKEDITOR . env . ie && 14 > CKEDITOR . env . version ? "display:none" : "position:fixed;top:0;left:-1000px;width:0;height:0;overflow:hidden;" ) + '"\x3e' + c + "\x3c/div\x3e" , a . document ) ; a . fire ( "lockSnapshot" ) ; a . editable ( ) . append ( c ) ; var d = a . getSelection ( 1 ) , e = a . createRange ( ) , f = d . root . on ( "selectionchange" , function ( a ) { a . cancel ( ) } , null , null , 0 ) ; e . setStartAt ( c , CKEDITOR . POSITION _AFTER _START ) ; e . setEndAt ( c , CKEDITOR . POSITION _BEFORE _END ) ;
d . selectRanges ( [ e ] ) ; f . removeListener ( ) ; a . fire ( "unlockSnapshot" ) ; a . _ . hiddenSelectionContainer = c } function G ( a ) { var b = { 37 : 1 , 39 : 1 , 8 : 1 , 46 : 1 } ; return function ( c ) { var d = c . data . getKeystroke ( ) ; if ( b [ d ] ) { var e = a . getSelection ( ) . getRanges ( ) , f = e [ 0 ] ; 1 == e . length && f . collapsed && ( d = f [ 38 > d ? "getPreviousEditableNode" : "getNextEditableNode" ] ( ) ) && d . type == CKEDITOR . NODE _ELEMENT && "false" == d . getAttribute ( "contenteditable" ) && ( a . getSelection ( ) . fake ( d ) , c . data . preventDefault ( ) , c . cancel ( ) ) } } } function u ( a ) { for ( var b = 0 ; b < a . length ; b ++ ) { var c =
d . selectRanges ( [ e ] ) ; f . removeListener ( ) ; a . fire ( "unlockSnapshot" ) ; a . _ . hiddenSelectionContainer = c } function G ( a ) { var b = { 37 : 1 , 39 : 1 , 8 : 1 , 46 : 1 } ; return function ( c ) { var d = c . data . getKeystroke ( ) ; if ( b [ d ] ) { var e = a . getSelection ( ) . getRanges ( ) , f = e [ 0 ] ; 1 == e . length && f . collapsed && ( d = f [ 38 > d ? "getPreviousEditableNode" : "getNextEditableNode" ] ( ) ) && d . type == CKEDITOR . NODE _ELEMENT && "false" == d . getAttribute ( "contenteditable" ) && ( a . getSelection ( ) . fake ( d ) , c . data . preventDefault ( ) , c . cancel ( ) ) } } } function t ( a ) { for ( var b = 0 ; b < a . length ; b ++ ) { var c =
a [ b ] ; c . getCommonAncestor ( ) . isReadOnly ( ) && a . splice ( b , 1 ) ; if ( ! c . collapsed ) { if ( c . startContainer . isReadOnly ( ) ) for ( var d = c . startContainer , e ; d && ! ( ( e = d . type == CKEDITOR . NODE _ELEMENT ) && d . is ( "body" ) || ! d . isReadOnly ( ) ) ; ) e && "false" == d . getAttribute ( "contentEditable" ) && c . setStartAfter ( d ) , d = d . getParent ( ) ; d = c . startContainer ; e = c . endContainer ; var f = c . startOffset , g = c . endOffset , h = c . clone ( ) ; d && d . type == CKEDITOR . NODE _TEXT && ( f >= d . getLength ( ) ? h . setStartAfter ( d ) : h . setStartBefore ( d ) ) ; e && e . type == CKEDITOR . NODE _TEXT && ( g ? h . setEndAfter ( e ) :
h . setEndBefore ( e ) ) ; d = new CKEDITOR . dom . walker ( h ) ; d . evaluator = function ( d ) { if ( d . type == CKEDITOR . NODE _ELEMENT && d . isReadOnly ( ) ) { var e = c . clone ( ) ; c . setEndBefore ( d ) ; c . collapsed && a . splice ( b -- , 1 ) ; d . getPosition ( h . endContainer ) & CKEDITOR . POSITION _CONTAINS || ( e . setStartAfter ( d ) , e . collapsed || a . splice ( b + 1 , 0 , e ) ) ; return ! 0 } return ! 1 } ; d . next ( ) } } return a } var n = "function" != typeof window . getSelection , L = 1 , y = CKEDITOR . tools . repeat ( " " , 7 ) , H = new RegExp ( y + "( )?" , "g" ) , I , m , B , K = CKEDITOR . dom . walker . invisible ( 1 ) , A = function ( ) { function a ( b ) { return function ( a ) { var c =
h . setEndBefore ( e ) ) ; d = new CKEDITOR . dom . walker ( h ) ; d . evaluator = function ( d ) { if ( d . type == CKEDITOR . NODE _ELEMENT && d . isReadOnly ( ) ) { var e = c . clone ( ) ; c . setEndBefore ( d ) ; c . collapsed && a . splice ( b -- , 1 ) ; d . getPosition ( h . endContainer ) & CKEDITOR . POSITION _CONTAINS || ( e . setStartAfter ( d ) , e . collapsed || a . splice ( b + 1 , 0 , e ) ) ; return ! 0 } return ! 1 } ; d . next ( ) } } return a } var n = "function" != typeof window . getSelection , L = 1 , y = CKEDITOR . tools . repeat ( " " , 7 ) , H = new RegExp ( y + "( )?" , "g" ) , I , m , C , K = CKEDITOR . dom . walker . invisible ( 1 ) , A = function ( ) { function a ( b ) { return function ( a ) { var c =
a . editor . createRange ( ) ; c . moveToClosestEditablePosition ( a . selected , b ) && a . editor . getSelection ( ) . selectRanges ( [ c ] ) ; return ! 1 } } function b ( a ) { return function ( b ) { var c = b . editor , d = c . createRange ( ) , e ; if ( ! c . readOnly ) return ( e = d . moveToClosestEditablePosition ( b . selected , a ) ) || ( e = d . moveToClosestEditablePosition ( b . selected , ! a ) ) , e && c . getSelection ( ) . selectRanges ( [ d ] ) , c . fire ( "saveSnapshot" ) , b . selected . remove ( ) , e || ( d . moveToElementEditablePosition ( c . editable ( ) ) , c . getSelection ( ) . selectRanges ( [ d ] ) ) , c . fire ( "saveSnapshot" ) ,
! 1 } } var c = a ( ) , d = a ( 1 ) ; return { 37 : c , 38 : c , 39 : d , 40 : d , 8 : b ( ) , 46 : b ( 1 ) } } ( ) ; CKEDITOR . on ( "instanceCreated" , function ( a ) { function b ( ) { var a = c . getSelection ( ) ; a && a . removeAllRanges ( ) } var c = a . editor ; c . on ( "contentDom" , function ( ) { function a ( ) { v = new CKEDITOR . dom . selection ( c . getSelection ( ) ) ; v . lock ( ) } function b ( ) { g . removeListener ( "mouseup" , b ) ; l . 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 = e ( b ) ) && ! c . equals ( q ) && ( b . selectElement ( c ) , a . data . preventDefault ( ) ) ) } function e ( 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 , g = CKEDITOR . document , q = c . editable ( ) , r = f . getBody ( ) , l = f . getDocumentElement ( ) , C = q . isInline ( ) ,
m , v ; CKEDITOR . env . gecko && q . attachListener ( q , "focus" , function ( a ) { a . removeListener ( ) ; 0 !== m && ( a = c . getSelection ( ) . getNative ( ) ) && a . isCollapsed && a . anchorNode == q . $ && ( a = c . createRange ( ) , a . moveToElementEditStart ( q ) , a . select ( ) ) } , null , null , - 2 ) ; q . attachListener ( q , CKEDITOR . env . webkit || CKEDITOR . env . gecko ? "focusin" : "focus" , function ( ) { if ( m && ( CKEDITOR . env . webkit || CKEDITOR . env . gecko ) ) { m = c . _ . previousActive && c . _ . previousActive . equals ( f . getActive ( ) ) ; var a = null != c . _ . previousScrollTop && c . _ . previousScrollTop != q . $ . scrollTop ;
CKEDITOR . env . webkit && m && a && ( q . $ . scrollTop = c . _ . previousScrollTop ) } c . unlockSelection ( m ) ; m = 0 } , null , null , - 1 ) ; q . attachListener ( q , "mousedown" , function ( ) { m = 0 } ) ; if ( CKEDITOR . env . ie || CKEDITOR . env . gecko || C ) n ? q . attachListener ( q , "beforedeactivate" , a , null , null , - 1 ) : q . attachListener ( c , "selectionCheck" , a , null , null , - 1 ) , q . attachListener ( q , CKEDITOR . env . webkit || CKEDITOR . env . gecko ? "focusout" : "blur" , function ( ) { var a = v && ( v . isFake || 2 > v . getRanges ( ) . length ) ; CKEDITOR . env . gecko && ! C && a || ( c . lockSelection ( v ) , m = 1 ) } , null , null , - 1 ) ,
q . attachListener ( q , "mousedown" , function ( ) { m = 0 } ) ; if ( CKEDITOR . env . ie && ! C ) { var t ; q . attachListener ( q , "mousedown" , function ( a ) { 2 == a . data . $ . button && ( ( a = c . document . getSelection ( ) ) && a . getType ( ) != CKEDITOR . SELECTION _NONE || ( t = c . window . getScrollPosition ( ) ) ) } ) ; q . attachListener ( q , "mouseup" , function ( a ) { 2 == a . data . $ . button && t && ( c . document . $ . documentElement . scrollLeft = t . x , c . document . $ . documentElement . scrollTop = t . y ) ; t = null } ) ; if ( "BackCompat" != f . $ . compatMode ) { if ( CKEDITOR . env . ie7Compat || CKEDITOR . env . ie6Compat ) { var u , z ;
l . on ( "mousedown" , function ( a ) { function b ( a ) { a = a . data . $ ; if ( u ) { var c = r . $ . createTextRange ( ) ; try { c . moveToPoint ( a . clientX , a . clientY ) } catch ( d ) { } u . setEndPoint ( 0 > z . compareEndPoints ( "StartToStart" , c ) ? "EndToEnd" : "StartToStart" , c ) ; u . select ( ) } } function c ( ) { l . removeListener ( "mousemove" , b ) ; g . removeListener ( "mouseup" , c ) ; l . removeListener ( "mouseup" , c ) ; u . select ( ) } a = a . data ; if ( a . getTarget ( ) . is ( "html" ) && a . $ . y < l . $ . clientHeight && a . $ . x < l . $ . clientWidth ) { u = r . $ . createTextRange ( ) ; try { u . moveToPoint ( a . $ . clientX , a . $ . clientY ) } catch ( d ) { } z =
u . duplicate ( ) ; l . on ( "mousemove" , b ) ; g . on ( "mouseup" , c ) ; l . on ( "mouseup" , c ) } } ) } if ( 7 < CKEDITOR . env . version && 11 > CKEDITOR . env . version ) l . on ( "mousedown" , function ( a ) { a . data . getTarget ( ) . is ( "html" ) && ( g . on ( "mouseup" , b ) , l . on ( "mouseup" , b ) ) } ) } } q . attachListener ( q , "selectionchange" , h , c ) ; q . attachListener ( q , "keyup" , k , c ) ; q . attachListener ( q , "touchstart" , k , c ) ; q . attachListener ( q , "touchend" , k , c ) ; CKEDITOR . env . ie && q . attachListener ( q , "keydown" , d , c ) ; q . attachListener ( q , CKEDITOR . env . webkit || CKEDITOR . env . gecko ? "focusin" : "focus" , function ( ) { c . forceNextSelectionCheck ( ) ;
c . selectionChange ( 1 ) } ) ; if ( C && ( CKEDITOR . env . webkit || CKEDITOR . env . gecko ) ) { var y ; q . attachListener ( q , "mousedown" , function ( ) { y = 1 } ) ; q . attachListener ( f . getDocumentElement ( ) , "mouseup" , function ( ) { y && k . call ( c ) ; y = 0 } ) } else q . attachListener ( CKEDITOR . env . ie ? q : f . getDocumentElement ( ) , "mouseup" , k , c ) ; CKEDITOR . env . webkit && q . 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 : q . hasFocus && x ( q ) } } , null , null , - 1 ) ; q . attachListener ( q ,
! 1 } } var c = a ( ) , d = a ( 1 ) ; return { 37 : c , 38 : c , 39 : d , 40 : d , 8 : b ( ) , 46 : b ( 1 ) } } ( ) ; CKEDITOR . on ( "instanceCreated" , function ( a ) { function b ( ) { var a = c . getSelection ( ) ; a && a . removeAllRanges ( ) } var c = a . editor ; c . on ( "contentDom" , function ( ) { function a ( ) { u = new CKEDITOR . dom . selection ( c . getSelection ( ) ) ; u . lock ( ) } function b ( ) { g . removeListener ( "mouseup" , b ) ; r . removeListener ( "mouseup" , b ) ; var a = CKEDITOR . document . $ . selection , c = a . createRange ( ) ; "None" != a . type && c . parentElement ( ) && c . parentElement ( ) . ownerDocument == f . $ && c . select ( ) } function d ( a ) { var b ,
c ; b = ( b = this . document . getActive ( ) ) ? "input" === b . getName ( ) || "textarea" === b . getName ( ) : ! 1 ; b || ( b = this . getSelection ( 1 ) , ( c = e ( b ) ) && ! c . equals ( q ) && ( b . selectElement ( c ) , a . data . preventDefault ( ) ) ) } function e ( 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 , g = CKEDITOR . document , q = c . editable ( ) , l = f . getBody ( ) , r = f . getDocumentElement ( ) , D = q . isInline ( ) ,
m , u ; CKEDITOR . env . gecko && q . attachListener ( q , "focus" , function ( a ) { a . removeListener ( ) ; 0 !== m && ( a = c . getSelection ( ) . getNative ( ) ) && a . isCollapsed && a . anchorNode == q . $ && ( a = c . createRange ( ) , a . moveToElementEditStart ( q ) , a . select ( ) ) } , null , null , - 2 ) ; q . attachListener ( q , CKEDITOR . env . webkit || CKEDITOR . env . gecko ? "focusin" : "focus" , function ( ) { if ( m && ( CKEDITOR . env . webkit || CKEDITOR . env . gecko ) ) { m = c . _ . previousActive && c . _ . previousActive . equals ( f . getActive ( ) ) ; var a = null != c . _ . previousScrollTop && c . _ . previousScrollTop != q . $ . scrollTop ;
CKEDITOR . env . webkit && m && a && ( q . $ . scrollTop = c . _ . previousScrollTop ) } c . unlockSelection ( m ) ; m = 0 } , null , null , - 1 ) ; q . attachListener ( q , "mousedown" , function ( ) { m = 0 } ) ; if ( CKEDITOR . env . ie || CKEDITOR . env . gecko || D ) n ? q . attachListener ( q , "beforedeactivate" , a , null , null , - 1 ) : q . attachListener ( c , "selectionCheck" , a , null , null , - 1 ) , q . attachListener ( q , CKEDITOR . env . webkit || CKEDITOR . env . gecko ? "focusout" : "blur" , function ( ) { var a = u && ( u . isFake || 2 > u . getRanges ( ) . length ) ; CKEDITOR . env . gecko && ! D && a || ( c . lockSelection ( u ) , m = 1 ) } , null , null , - 1 ) ,
q . attachListener ( q , "mousedown" , function ( ) { m = 0 } ) ; if ( CKEDITOR . env . ie && ! D ) { var w ; q . attachListener ( q , "mousedown" , function ( a ) { 2 == a . data . $ . button && ( ( a = c . document . getSelection ( ) ) && a . getType ( ) != CKEDITOR . SELECTION _NONE || ( w = c . window . getScrollPosition ( ) ) ) } ) ; q . attachListener ( q , "mouseup" , function ( a ) { 2 == a . data . $ . button && w && ( c . document . $ . documentElement . scrollLeft = w . x , c . document . $ . documentElement . scrollTop = w . y ) ; w = null } ) ; if ( "BackCompat" != f . $ . compatMode ) { if ( CKEDITOR . env . ie7Compat || CKEDITOR . env . ie6Compat ) { var t , z ;
r . on ( "mousedown" , function ( a ) { function b ( a ) { a = a . data . $ ; if ( t ) { var c = l . $ . createTextRange ( ) ; try { c . moveToPoint ( a . clientX , a . clientY ) } catch ( d ) { } t . setEndPoint ( 0 > z . compareEndPoints ( "StartToStart" , c ) ? "EndToEnd" : "StartToStart" , c ) ; t . select ( ) } } function c ( ) { r . removeListener ( "mousemove" , b ) ; g . removeListener ( "mouseup" , c ) ; r . removeListener ( "mouseup" , c ) ; t . select ( ) } a = a . data ; if ( a . getTarget ( ) . is ( "html" ) && a . $ . y < r . $ . clientHeight && a . $ . x < r . $ . clientWidth ) { t = l . $ . createTextRange ( ) ; try { t . moveToPoint ( a . $ . clientX , a . $ . clientY ) } catch ( d ) { } z =
t . duplicate ( ) ; r . on ( "mousemove" , b ) ; g . on ( "mouseup" , c ) ; r . on ( "mouseup" , c ) } } ) } if ( 7 < CKEDITOR . env . version && 11 > CKEDITOR . env . version ) r . on ( "mousedown" , function ( a ) { a . data . getTarget ( ) . is ( "html" ) && ( g . on ( "mouseup" , b ) , r . on ( "mouseup" , b ) ) } ) } } q . attachListener ( q , "selectionchange" , h , c ) ; q . attachListener ( q , "keyup" , k , c ) ; q . attachListener ( q , "touchstart" , k , c ) ; q . attachListener ( q , "touchend" , k , c ) ; CKEDITOR . env . ie && q . attachListener ( q , "keydown" , d , c ) ; q . attachListener ( q , CKEDITOR . env . webkit || CKEDITOR . env . gecko ? "focusin" : "focus" , function ( ) { c . forceNextSelectionCheck ( ) ;
c . selectionChange ( 1 ) } ) ; if ( D && ( CKEDITOR . env . webkit || CKEDITOR . env . gecko ) ) { var y ; q . attachListener ( q , "mousedown" , function ( ) { y = 1 } ) ; q . attachListener ( f . getDocumentElement ( ) , "mouseup" , function ( ) { y && k . call ( c ) ; y = 0 } ) } else q . attachListener ( CKEDITOR . env . ie ? q : f . getDocumentElement ( ) , "mouseup" , k , c ) ; CKEDITOR . env . webkit && q . 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 : q . hasFocus && x ( q ) } } , null , null , - 1 ) ; q . attachListener ( q ,
"keydown" , G ( c ) , null , null , - 1 ) } ) ; c . on ( "setData" , function ( ) { c . unlockSelection ( ) ; CKEDITOR . env . webkit && b ( ) } ) ; c . on ( "contentDomUnload" , function ( ) { c . unlockSelection ( ) } ) ; if ( CKEDITOR . env . ie9Compat ) c . on ( "beforeDestroy" , b , null , null , 9 ) ; c . on ( "dataReady" , function ( ) { delete c . _ . fakeSelection ; delete c . _ . hiddenSelectionContainer ; c . selectionChange ( 1 ) } ) ; c . on ( "loadSnapshot" , function ( ) { var a = CKEDITOR . dom . walker . nodeType ( CKEDITOR . NODE _ELEMENT ) , b = c . editable ( ) . getLast ( a ) ; b && b . hasAttribute ( "data-cke-hidden-sel" ) && ( b . remove ( ) ,
CKEDITOR . env . gecko && ( a = c . editable ( ) . getFirst ( a ) ) && a . is ( "br" ) && a . getAttribute ( "_moz_editor_bogus_node" ) && a . remove ( ) ) } , null , null , 100 ) ; c . on ( "key" , function ( a ) { if ( "wysiwyg" == c . mode ) { var b = c . getSelection ( ) ; if ( b . isFake ) { var d = A [ a . data . keyCode ] ; if ( d ) return d ( { editor : c , selected : b . getSelectedElement ( ) , selection : b , keyEvent : a } ) } } } ) } ) ; if ( CKEDITOR . env . webkit ) CKEDITOR . on ( "instanceReady" , function ( a ) { var b = a . editor ; b . on ( "selectionChange" , function ( ) { var a = b . editable ( ) , c = a . getCustomData ( "cke-fillingChar" ) ; c && ( c . getCustomData ( "ready" ) ?
( x ( a ) , a . editor . fire ( "selectionCheck" ) ) : c . setCustomData ( "ready" , 1 ) ) } , null , null , - 1 ) ; b . on ( "beforeSetMode" , function ( ) { x ( b . editable ( ) ) } , null , null , - 1 ) ; b . on ( "getSnapshot" , function ( a ) { a . data && ( a . data = t ( a . data ) ) } , b , null , 20 ) ; b . on ( "toDataFormat" , function ( a ) { a . data . dataValue = t ( a . data . dataValue ) } , null , null , 0 ) } ) ; CKEDITOR . editor . prototype . selectionChange = function ( a ) { ( a ? h : k ) . call ( this ) } ; CKEDITOR . editor . prototype . getSelection = function ( a ) { return ! this . _ . savedSelection && ! this . _ . fakeSelection || a ? ( a = this . editable ( ) ) &&
( x ( a ) , a . editor . fire ( "selectionCheck" ) ) : c . setCustomData ( "ready" , 1 ) ) } , null , null , - 1 ) ; b . on ( "beforeSetMode" , function ( ) { x ( b . editable ( ) ) } , null , null , - 1 ) ; b . on ( "getSnapshot" , function ( a ) { a . data && ( a . data = w ( a . data ) ) } , b , null , 20 ) ; b . on ( "toDataFormat" , function ( a ) { a . data . dataValue = w ( a . data . dataValue ) } , null , null , 0 ) } ) ; CKEDITOR . editor . prototype . selectionChange = function ( a ) { ( a ? h : k ) . call ( this ) } ; CKEDITOR . editor . prototype . getSelection = function ( a ) { return ! this . _ . savedSelection && ! this . _ . fakeSelection || a ? ( a = this . editable ( ) ) &&
"wysiwyg" == this . mode ? new CKEDITOR . dom . selection ( a ) : null : this . _ . savedSelection || this . _ . fakeSelection } ; CKEDITOR . editor . prototype . getSelectedRanges = function ( a ) { var b = this . getSelection ( ) ; return b && b . getRanges ( a ) || [ ] } ; CKEDITOR . editor . prototype . lockSelection = function ( a ) { a = a || this . getSelection ( 1 ) ; return a . getType ( ) != CKEDITOR . SELECTION _NONE ? ( ! a . isLocked && a . lock ( ) , this . _ . savedSelection = a , ! 0 ) : ! 1 } ; CKEDITOR . editor . prototype . unlockSelection = function ( a ) { var b = this . _ . savedSelection ; return b ? ( b . unlock ( a ) , delete this . _ . savedSelection ,
! 0 ) : ! 1 } ; CKEDITOR . editor . prototype . forceNextSelectionCheck = function ( ) { delete this . _ . selectionPreviousPath } ; CKEDITOR . dom . document . prototype . getSelection = function ( ) { return new CKEDITOR . dom . selection ( this ) } ; CKEDITOR . dom . range . prototype . select = function ( ) { var a = this . root instanceof CKEDITOR . editable ? this . root . editor . getSelection ( ) : new CKEDITOR . dom . selection ( this . root ) ; a . selectRanges ( [ this ] ) ; return a } ; CKEDITOR . SELECTION _NONE = 1 ; CKEDITOR . SELECTION _TEXT = 2 ; CKEDITOR . SELECTION _ELEMENT = 3 ; CKEDITOR . dom . selection =
function ( a ) { if ( a instanceof CKEDITOR . dom . selection ) { var b = a ; a = a . root } var c = a instanceof CKEDITOR . dom . element ; this . rev = b ? b . rev : L ++ ; this . document = a instanceof CKEDITOR . dom . document ? a : a . getDocument ( ) ; this . root = c ? a : this . document . getBody ( ) ; this . isLocked = 0 ; this . _ = { cache : { } } ; if ( b ) return CKEDITOR . tools . extend ( this . _ . cache , b . _ . cache ) , this . isFake = b . isFake , this . isLocked = b . isLocked , this ; a = this . getNative ( ) ; var d , e ; if ( a ) if ( a . getRangeAt ) d = ( e = a . rangeCount && a . getRangeAt ( 0 ) ) && new CKEDITOR . dom . node ( e . commonAncestorContainer ) ;
else { try { e = a . createRange ( ) } catch ( f ) { } d = e && CKEDITOR . dom . element . get ( e . item && e . item ( 0 ) || e . parentElement ( ) ) } if ( ! d || d . type != CKEDITOR . NODE _ELEMENT && d . type != CKEDITOR . NODE _TEXT || ! this . root . equals ( d ) && ! this . root . contains ( d ) ) this . _ . cache . type = CKEDITOR . SELECTION _NONE , this . _ . cache . startElement = null , this . _ . cache . selectedElement = null , this . _ . cache . selectedText = "" , this . _ . cache . ranges = new CKEDITOR . dom . rangeList ; return this } ; var M = { img : 1 , hr : 1 , li : 1 , table : 1 , tr : 1 , td : 1 , th : 1 , embed : 1 , object : 1 , ol : 1 , ul : 1 , a : 1 , input : 1 , form : 1 ,
select : 1 , textarea : 1 , button : 1 , fieldset : 1 , thead : 1 , tfoot : 1 } ; CKEDITOR . tools . extend ( CKEDITOR . dom . selection , { _removeFillingCharSequenceString : t , _createFillingCharSequenceNode : e , FILLING _CHAR _SEQUENCE : y } ) ; CKEDITOR . dom . selection . prototype = { getNative : function ( ) { return void 0 !== this . _ . cache . nativeSel ? this . _ . cache . nativeSel : this . _ . cache . nativeSel = n ? this . document . $ . selection : this . document . getWindow ( ) . $ . getSelection ( ) } , getType : n ? function ( ) { var a = this . _ . cache ; if ( a . type ) return a . type ; var b = CKEDITOR . SELECTION _NONE ;
select : 1 , textarea : 1 , button : 1 , fieldset : 1 , thead : 1 , tfoot : 1 } ; CKEDITOR . tools . extend ( CKEDITOR . dom . selection , { _removeFillingCharSequenceString : w , _createFillingCharSequenceNode : e , FILLING _CHAR _SEQUENCE : y } ) ; CKEDITOR . dom . selection . prototype = { getNative : function ( ) { return void 0 !== this . _ . cache . nativeSel ? this . _ . cache . nativeSel : this . _ . cache . nativeSel = n ? this . document . $ . selection : this . document . getWindow ( ) . $ . getSelection ( ) } , getType : n ? function ( ) { var a = this . _ . cache ; if ( a . type ) return a . type ; var b = CKEDITOR . SELECTION _NONE ;
try { var c = this . getNative ( ) , d = c . type ; "Text" == d && ( b = CKEDITOR . SELECTION _TEXT ) ; "Control" == d && ( b = CKEDITOR . SELECTION _ELEMENT ) ; c . createRange ( ) . parentElement ( ) && ( b = CKEDITOR . SELECTION _TEXT ) } catch ( e ) { } return a . type = b } : function ( ) { var a = this . _ . cache ; if ( a . type ) return a . type ; var b = CKEDITOR . SELECTION _TEXT , c = this . getNative ( ) ; if ( ! c || ! c . rangeCount ) b = CKEDITOR . SELECTION _NONE ; else if ( 1 == c . rangeCount ) { var c = c . getRangeAt ( 0 ) , d = c . startContainer ; d == c . endContainer && 1 == d . nodeType && 1 == c . endOffset - c . startOffset && M [ d . childNodes [ c . startOffset ] . nodeName . toLowerCase ( ) ] &&
( b = CKEDITOR . SELECTION _ELEMENT ) } return a . type = b } , getRanges : function ( ) { var a = n ? function ( ) { function a ( b ) { return ( new CKEDITOR . dom . node ( b ) ) . getIndex ( ) } var b = function ( b , c ) { b = b . duplicate ( ) ; b . collapse ( c ) ; var d = b . parentElement ( ) ; if ( ! d . hasChildNodes ( ) ) return { container : d , offset : 0 } ; for ( var e = d . children , f , g , h = b . duplicate ( ) , k = 0 , l = e . length - 1 , r = - 1 , n , m ; k <= l ; ) if ( r = Math . floor ( ( k + l ) / 2 ) , f = e [ r ] , h . moveToElementText ( f ) , n = h . compareEndPoints ( "StartToStart" , b ) , 0 < n ) l = r - 1 ; else if ( 0 > n ) k = r + 1 ; else return { container : d , offset : a ( f ) } ;
if ( - 1 == r || r == e . length - 1 && 0 > n ) { h . moveToElementText ( d ) ; h . setEndPoint ( "StartToStart" , b ) ; h = h . text . replace ( /(\r\n|\r)/g , "\n" ) . length ; e = d . childNodes ; if ( ! h ) return f = e [ e . length - 1 ] , f . nodeType != CKEDITOR . NODE _TEXT ? { container : d , offset : e . length } : { container : f , offset : f . nodeValue . length } ; for ( d = e . length ; 0 < h && 0 < d ; ) g = e [ -- d ] , g . nodeType == CKEDITOR . NODE _TEXT && ( m = g , h -= g . nodeValue . length ) ; return { container : m , offset : - h } } h . collapse ( 0 < n ? ! 0 : ! 1 ) ; h . setEndPoint ( 0 < n ? "StartToStart" : "EndToStart" , b ) ; h = h . text . replace ( /(\r\n|\r)/g , "\n" ) . length ;
if ( ! h ) return { container : d , offset : a ( f ) + ( 0 < n ? 0 : 1 ) } ; for ( ; 0 < h ; ) try { g = f [ 0 < n ? "previousSibling" : "nextSibling" ] , g . nodeType == CKEDITOR . NODE _TEXT && ( h -= g . nodeValue . length , m = g ) , f = g } catch ( v ) { return { container : d , offset : a ( f ) } } return { container : m , offset : 0 < n ? - h : m . nodeValue . length + h } } ; return function ( ) { var a = this . getNative ( ) , c = a && a . createRange ( ) , d = this . getType ( ) ; if ( ! a ) return [ ] ; if ( d == CKEDITOR . SELECTION _TEXT ) return a = new CKEDITOR . dom . range ( this . root ) , d = b ( c , ! 0 ) , a . setStart ( new CKEDITOR . dom . node ( d . container ) , d . offset ) , d = b ( c ) ,
if ( ! h ) return { container : d , offset : a ( f ) + ( 0 < n ? 0 : 1 ) } ; for ( ; 0 < h ; ) try { g = f [ 0 < n ? "previousSibling" : "nextSibling" ] , g . nodeType == CKEDITOR . NODE _TEXT && ( h -= g . nodeValue . length , m = g ) , f = g } catch ( u ) { return { container : d , offset : a ( f ) } } return { container : m , offset : 0 < n ? - h : m . nodeValue . length + h } } ; return function ( ) { var a = this . getNative ( ) , c = a && a . createRange ( ) , d = this . getType ( ) ; if ( ! a ) return [ ] ; if ( d == CKEDITOR . SELECTION _TEXT ) return a = new CKEDITOR . dom . range ( this . root ) , d = b ( c , ! 0 ) , a . setStart ( new CKEDITOR . dom . node ( d . container ) , d . offset ) , d = b ( c ) ,
a . setEnd ( new CKEDITOR . dom . node ( d . container ) , d . offset ) , a . endContainer . getPosition ( a . startContainer ) & CKEDITOR . POSITION _PRECEDING && a . endOffset <= a . startContainer . getIndex ( ) && a . collapse ( ) , [ a ] ; if ( d == CKEDITOR . SELECTION _ELEMENT ) { for ( var d = [ ] , e = 0 ; e < c . length ; e ++ ) { for ( var f = c . item ( e ) , g = f . parentNode , h = 0 , a = new CKEDITOR . dom . range ( this . root ) ; h < g . childNodes . length && g . childNodes [ h ] != f ; h ++ ) ; a . setStart ( new CKEDITOR . dom . node ( g ) , h ) ; a . setEnd ( new CKEDITOR . dom . node ( g ) , h + 1 ) ; d . push ( a ) } return d } return [ ] } } ( ) : function ( ) { var a =
[ ] , b , c = this . getNative ( ) ; if ( ! c ) return a ; for ( var d = 0 ; d < c . rangeCount ; d ++ ) { var e = c . getRangeAt ( d ) ; b = new CKEDITOR . dom . range ( this . root ) ; b . setStart ( new CKEDITOR . dom . node ( e . startContainer ) , e . startOffset ) ; b . setEnd ( new CKEDITOR . dom . node ( e . endContainer ) , e . endOffset ) ; a . push ( b ) } return a } ; return function ( b ) { var c = this . _ . cache , d = c . ranges ; d || ( c . ranges = d = new CKEDITOR . dom . rangeList ( a . call ( this ) ) ) ; return b ? u ( new CKEDITOR . dom . rangeList ( d . slice ( ) ) ) : d } } ( ) , getStartElement : function ( ) { var a = this . _ . cache ; if ( void 0 !== a . startElement ) return a . startElement ;
[ ] , b , c = this . getNative ( ) ; if ( ! c ) return a ; for ( var d = 0 ; d < c . rangeCount ; d ++ ) { var e = c . getRangeAt ( d ) ; b = new CKEDITOR . dom . range ( this . root ) ; b . setStart ( new CKEDITOR . dom . node ( e . startContainer ) , e . startOffset ) ; b . setEnd ( new CKEDITOR . dom . node ( e . endContainer ) , e . endOffset ) ; a . push ( b ) } return a } ; return function ( b ) { var c = this . _ . cache , d = c . ranges ; d || ( c . ranges = d = new CKEDITOR . dom . rangeList ( a . call ( this ) ) ) ; return b ? t ( new CKEDITOR . dom . rangeList ( d . slice ( ) ) ) : d } } ( ) , getStartElement : function ( ) { var a = this . _ . cache ; if ( void 0 !== a . startElement ) return a . startElement ;
var b ; switch ( this . getType ( ) ) { case CKEDITOR . SELECTION _ELEMENT : return this . getSelectedElement ( ) ; case CKEDITOR . SELECTION _TEXT : var c = this . getRanges ( ) [ 0 ] ; if ( c ) { if ( c . collapsed ) b = c . startContainer , b . type != CKEDITOR . NODE _ELEMENT && ( b = b . getParent ( ) ) ; else { for ( c . optimize ( ) ; b = c . startContainer , c . startOffset == ( b . getChildCount ? b . getChildCount ( ) : b . getLength ( ) ) && ! b . isBlockBoundary ( ) ; ) c . setStartAfter ( b ) ; b = c . startContainer ; if ( b . type != CKEDITOR . NODE _ELEMENT ) return b . getParent ( ) ; if ( ( b = b . getChild ( c . startOffset ) ) && b . type ==
CKEDITOR . NODE _ELEMENT ) for ( c = b . getFirst ( ) ; c && c . type == CKEDITOR . NODE _ELEMENT ; ) b = c , c = c . getFirst ( ) ; else b = c . startContainer } b = b . $ } } return a . startElement = b ? new CKEDITOR . dom . element ( b ) : null } , getSelectedElement : function ( ) { var a = this . _ . cache ; if ( void 0 !== a . selectedElement ) return a . selectedElement ; var b = this , c = CKEDITOR . tools . tryThese ( function ( ) { return b . getNative ( ) . createRange ( ) . item ( 0 ) } , function ( ) { for ( var a = b . getRanges ( ) [ 0 ] . clone ( ) , c , d , e = 2 ; e && ! ( ( c = a . getEnclosedNode ( ) ) && c . type == CKEDITOR . NODE _ELEMENT && M [ c . getName ( ) ] &&
( d = c ) ) ; e -- ) a . shrink ( CKEDITOR . SHRINK _ELEMENT ) ; return d && d . $ } ) ; return a . selectedElement = c ? new CKEDITOR . dom . element ( c ) : null } , getSelectedText : function ( ) { var a = this . _ . cache ; if ( void 0 !== a . selectedText ) return a . selectedText ; var b = this . getNative ( ) , b = n ? "Control" == b . type ? "" : b . createRange ( ) . text : b . toString ( ) ; return a . selectedText = b } , lock : function ( ) { this . getRanges ( ) ; this . getStartElement ( ) ; this . getSelectedElement ( ) ; this . getSelectedText ( ) ; this . _ . cache . nativeSel = null ; this . isLocked = 1 } , unlock : function ( a ) { if ( this . isLocked ) { if ( a ) var b =
this . getSelectedElement ( ) , c = this . getRanges ( ) , e = this . isFake ; this . isLocked = 0 ; this . reset ( ) ; a && ( a = b || c [ 0 ] && c [ 0 ] . getCommonAncestor ( ) ) && a . getAscendant ( "body" , 1 ) && ( this . root . editor . plugins . tableselection && 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 , g , h = 0 ; h < a . length ; ++ h ) g = a [ h ] , g . endContainer . equals ( c ) && ( g . endOffset = Math . min ( g . endOffset ,
c . getChildCount ( ) ) ) ; if ( a . length ) if ( this . isLocked ) { var k = CKEDITOR . document . getActive ( ) ; this . unlock ( ) ; this . selectRanges ( a ) ; this . lock ( ) ; k && ! k . equals ( this . root ) && k . focus ( ) } else { var p ; a : { var l , m ; if ( 1 == a . length && ! ( m = a [ 0 ] ) . collapsed && ( p = m . getEnclosedNode ( ) ) && p . type == CKEDITOR . NODE _ELEMENT && ( m = m . clone ( ) , m . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 ) , ( l = m . getEnclosedNode ( ) ) && l . type == CKEDITOR . NODE _ELEMENT && ( p = l ) , "false" == p . getAttribute ( "contenteditable" ) ) ) break a ; p = void 0 } if ( p ) this . fake ( p ) ; else if ( b && b . plugins . tableselection &&
b . plugins . tableselection . isSupportedEnvironment ( ) && d ( a ) && ! I && ! a [ 0 ] . _getTableElement ( { table : 1 } ) . hasAttribute ( "data-cke-tableselection-ignored" ) ) f . call ( this , a ) ; else { if ( n ) { l = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ; p = /\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 q , E , D ; if ( ( c = b . getEnclosedNode ( ) ) && c . type == CKEDITOR . NODE _ELEMENT && c . getName ( ) in M && ( ! c . is ( "a" ) || ! c . getText ( ) ) ) try { D = c . $ . createControlRange ( ) ; D . addElement ( c . $ ) ;
D . select ( ) ; return } catch ( t ) { } 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 ; D = b . createBookmark ( ) ; m = D . startNode ; a || ( k = D . endNode ) ; D = b . document . $ . body . createTextRange ( ) ; D . moveToElementText ( m . $ ) ; D . moveStart ( "character" , 1 ) ; k ? ( p = b . document . $ . body . createTextRange ( ) , p . moveToElementText ( k . $ ) , D . setEndPoint ( "EndToEnd" , p ) , D . moveEnd ( "character" , - 1 ) ) : ( q = m . getNext ( l ) ,
E = m . hasAscendant ( "pre" ) , q = ! ( q && q . getText && q . getText ( ) . match ( p ) ) && ( E || ! m . hasPrevious ( ) || m . getPrevious ( ) . is && m . getPrevious ( ) . is ( "br" ) ) , E = b . document . createElement ( "span" ) , E . setHtml ( "\x26#65279;" ) , E . insertBefore ( m ) , q && b . document . createText ( " " ) . insertBefore ( m ) ) ; b . setStartBefore ( m ) ; m . remove ( ) ; a ? ( q ? ( D . moveStart ( "character" , - 1 ) , D . select ( ) , b . document . $ . selection . clear ( ) ) : D . select ( ) , b . moveToPosition ( E , CKEDITOR . POSITION _BEFORE _START ) , E . remove ( ) ) : ( b . setEndBefore ( k ) , k . remove ( ) , D . select ( ) ) } else { k = this . getNative ( ) ;
if ( ! k ) return ; this . removeAllRanges ( ) ; for ( D = 0 ; D < a . length ; D ++ ) { if ( D < a . length - 1 && ( q = a [ D ] , E = a [ D + 1 ] , p = q . clone ( ) , p . setStart ( q . endContainer , q . endOffset ) , p . setEnd ( E . startContainer , E . startOffset ) , ! p . collapsed && ( p . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) , b = p . getCommonAncestor ( ) , p = p . getEnclosedNode ( ) , b . isReadOnly ( ) || p && p . isReadOnly ( ) ) ) ) { E . setStart ( q . startContainer , q . startOffset ) ; a . splice ( D -- , 1 ) ; continue } b = a [ D ] ; E = this . document . $ . createRange ( ) ; b . collapsed && CKEDITOR . env . webkit && v ( b ) && ( p = e ( this . root ) , b . insertNode ( p ) , ( q =
p . getNext ( ) ) && ! p . getPrevious ( ) && q . type == CKEDITOR . NODE _ELEMENT && "br" == q . getName ( ) ? ( x ( this . root ) , b . moveToPosition ( q , CKEDITOR . POSITION _BEFORE _START ) ) : b . moveToPosition ( p , CKEDITOR . POSITION _AFTER _END ) ) ; E . setStart ( b . startContainer . $ , b . startOffset ) ; try { E . setEnd ( b . endContainer . $ , b . endOffset ) } catch ( u ) { if ( 0 <= u . toString ( ) . indexOf ( "NS_ERROR_ILLEGAL_VALUE" ) ) b . collapse ( 1 ) , E . setEnd ( b . endContainer . $ , b . endOffset ) ; else throw u ; } k . addRange ( E ) } } this . reset ( ) ; this . root . fire ( "selectionchange" ) } } } , fake : function ( a , b ) { var c =
this . root . editor ; void 0 === b && a . hasAttribute ( "aria-label" ) && ( b = a . getAttribute ( "aria-label" ) ) ; this . reset ( ) ; z ( c , b ) ; var d = this . _ . cache , e = new CKEDITOR . dom . range ( this . root ) ; e . setStartBefore ( a ) ; e . setEndAfter ( a ) ; d . ranges = new CKEDITOR . dom . rangeList ( e ) ; d . selectedElement = d . startElement = a ; d . type = CKEDITOR . SELECTION _ELEMENT ; d . selectedText = d . nativeSel = null ; this . isFake = 1 ; this . rev = 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 f = new CKEDITOR . dom . range ( this . root ) ;
f . moveToBookmark ( a [ e ] ) ; b . push ( f ) } a . isFake && ( c = d ( b ) ? b [ 0 ] . _getTableElement ( ) : b [ 0 ] . getEnclosedNode ( ) , c && c . type == CKEDITOR . NODE _ELEMENT || ( CKEDITOR . warn ( "selection-not-fake" ) , a . isFake = 0 ) ) ; a . isFake && ! d ( b ) ? this . fake ( c ) : this . selectRanges ( b ) ; return this } , getCommonAncestor : function ( ) { var a = this . getRanges ( ) ; return a . length ? a [ 0 ] . startContainer . getCommonAncestor ( a [ a . length - 1 ] . endContainer ) : null } , scrollIntoView : function ( ) { this . type != CKEDITOR . SELECTION _NONE && this . getRanges ( ) [ 0 ] . scrollIntoView ( ) } , removeAllRanges : function ( ) { if ( this . getType ( ) !=
CKEDITOR . SELECTION _NONE ) { var a = this . getNative ( ) ; try { a && a [ n ? "empty" : "removeAllRanges" ] ( ) } catch ( b ) { } this . reset ( ) } } } } ) ( ) ; "use strict" ; CKEDITOR . STYLE _BLOCK = 1 ; CKEDITOR . STYLE _INLINE = 2 ; CKEDITOR . STYLE _OBJECT = 3 ;
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 , g , h = 0 ; h < a . length ; ++ h ) g =
a [ h ] , g . endContainer . equals ( c ) && ( g . endOffset = Math . min ( g . endOffset , c . getChildCount ( ) ) ) ; if ( a . length ) if ( this . isLocked ) { var k = CKEDITOR . document . getActive ( ) ; this . unlock ( ) ; this . selectRanges ( a ) ; this . lock ( ) ; k && ! k . equals ( this . root ) && k . focus ( ) } else { var p ; a : { var l , m ; if ( 1 == a . length && ! ( m = a [ 0 ] ) . collapsed && ( p = m . getEnclosedNode ( ) ) && p . type == CKEDITOR . NODE _ELEMENT && ( m = m . clone ( ) , m . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 ) , ( l = m . getEnclosedNode ( ) ) && l . type == CKEDITOR . NODE _ELEMENT && ( p = l ) , "false" == p . getAttribute ( "contenteditable" ) ) ) break a ;
p = void 0 } if ( p ) this . fake ( p ) ; else if ( b && b . plugins . tableselection && b . plugins . tableselection . isSupportedEnvironment ( b ) && d ( a ) && ! I && ! a [ 0 ] . _getTableElement ( { table : 1 } ) . hasAttribute ( "data-cke-tableselection-ignored" ) ) f . call ( this , a ) ; else { if ( n ) { l = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ; p = /\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 q , F , E ; if ( ( c = b . getEnclosedNode ( ) ) && c . type == CKEDITOR . NODE _ELEMENT && c . getName ( ) in M && ( ! c . is ( "a" ) ||
! c . getText ( ) ) ) try { E = c . $ . createControlRange ( ) ; E . addElement ( c . $ ) ; E . select ( ) ; return } catch ( w ) { } 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 ; E = b . createBookmark ( ) ; m = E . startNode ; a || ( k = E . endNode ) ; E = b . document . $ . body . createTextRange ( ) ; E . moveToElementText ( m . $ ) ; E . moveStart ( "character" , 1 ) ; k ? ( p = b . document . $ . body . createTextRange ( ) , p . moveToElementText ( k . $ ) ,
E . setEndPoint ( "EndToEnd" , p ) , E . moveEnd ( "character" , - 1 ) ) : ( q = m . getNext ( l ) , F = m . hasAscendant ( "pre" ) , q = ! ( q && q . getText && q . getText ( ) . match ( p ) ) && ( F || ! m . hasPrevious ( ) || m . getPrevious ( ) . is && m . getPrevious ( ) . is ( "br" ) ) , F = b . document . createElement ( "span" ) , F . setHtml ( "\x26#65279;" ) , F . insertBefore ( m ) , q && b . document . createText ( " " ) . insertBefore ( m ) ) ; b . setStartBefore ( m ) ; m . remove ( ) ; a ? ( q ? ( E . moveStart ( "character" , - 1 ) , E . select ( ) , b . document . $ . selection . clear ( ) ) : E . select ( ) , b . moveToPosition ( F , CKEDITOR . POSITION _BEFORE _START ) , F . remove ( ) ) :
( b . setEndBefore ( k ) , k . remove ( ) , E . select ( ) ) } else { k = this . getNative ( ) ; if ( ! k ) return ; this . removeAllRanges ( ) ; for ( E = 0 ; E < a . length ; E ++ ) { if ( E < a . length - 1 && ( q = a [ E ] , F = a [ E + 1 ] , p = q . clone ( ) , p . setStart ( q . endContainer , q . endOffset ) , p . setEnd ( F . startContainer , F . startOffset ) , ! p . collapsed && ( p . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) , b = p . getCommonAncestor ( ) , p = p . getEnclosedNode ( ) , b . isReadOnly ( ) || p && p . isReadOnly ( ) ) ) ) { F . setStart ( q . startContainer , q . startOffset ) ; a . splice ( E -- , 1 ) ; continue } b = a [ E ] ; F = this . document . $ . createRange ( ) ; b . collapsed &&
CKEDITOR . env . webkit && u ( b ) && ( p = e ( this . root ) , b . insertNode ( p ) , ( q = p . getNext ( ) ) && ! p . getPrevious ( ) && q . type == CKEDITOR . NODE _ELEMENT && "br" == q . getName ( ) ? ( x ( this . root ) , b . moveToPosition ( q , CKEDITOR . POSITION _BEFORE _START ) ) : b . moveToPosition ( p , CKEDITOR . POSITION _AFTER _END ) ) ; F . setStart ( b . startContainer . $ , b . startOffset ) ; try { F . setEnd ( b . endContainer . $ , b . endOffset ) } catch ( t ) { if ( 0 <= t . toString ( ) . indexOf ( "NS_ERROR_ILLEGAL_VALUE" ) ) b . collapse ( 1 ) , F . setEnd ( b . endContainer . $ , b . endOffset ) ; else throw t ; } k . addRange ( F ) } } this . reset ( ) ;
this . root . fire ( "selectionchange" ) } } } , fake : function ( a , b ) { var c = this . root . editor ; void 0 === b && a . hasAttribute ( "aria-label" ) && ( b = a . getAttribute ( "aria-label" ) ) ; this . reset ( ) ; z ( c , b ) ; var d = this . _ . cache , e = new CKEDITOR . dom . range ( this . root ) ; e . setStartBefore ( a ) ; e . setEndAfter ( a ) ; d . ranges = new CKEDITOR . dom . rangeList ( e ) ; d . selectedElement = d . startElement = a ; d . type = CKEDITOR . SELECTION _ELEMENT ; d . selectedText = d . nativeSel = null ; this . isFake = 1 ; this . rev = 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 f = new CKEDITOR . dom . range ( this . root ) ; f . moveToBookmark ( a [ e ] ) ; b . push ( f ) } a . isFake && ( c = d ( b ) ? b [ 0 ] . _getTableElement ( ) : b [ 0 ] . getEnclosedNode ( ) , c && c . type == CKEDITOR . NODE _ELEMENT || ( CKEDITOR . warn ( "selection-not-fake" ) , a . isFake = 0 ) ) ; a . isFake && ! d ( b ) ? this . fake ( c ) : this . selectRanges ( b ) ; return this } , getCommonAncestor : function ( ) { var a = this . getRanges ( ) ; return a . length ? a [ 0 ] . startContainer . getCommonAncestor ( a [ a . length - 1 ] . endContainer ) : null } , scrollIntoView : function ( ) { this . type != CKEDITOR . SELECTION _NONE &&
this . getRanges ( ) [ 0 ] . scrollIntoView ( ) } , removeAllRanges : function ( ) { if ( this . getType ( ) != CKEDITOR . SELECTION _NONE ) { var a = this . getNative ( ) ; try { a && a [ n ? "empty" : "removeAllRanges" ] ( ) } catch ( b ) { } this . reset ( ) } } } } ) ( ) ; "use strict" ; CKEDITOR . STYLE _BLOCK = 1 ; CKEDITOR . STYLE _INLINE = 2 ; CKEDITOR . STYLE _OBJECT = 3 ;
( function ( ) { function a ( a , b ) { for ( var c , d ; ( a = a . getParent ( ) ) && ! a . equals ( b ) ; ) if ( a . getAttribute ( "data-nostyle" ) ) c = a ; else if ( ! d ) { var e = a . getAttribute ( "contentEditable" ) ; "false" == e ? c = a : "true" == e && ( d = 1 ) } return c } function d ( a , b , c , d ) { return ( a . getPosition ( b ) | d ) == d && ( ! c . childRule || c . childRule ( a ) ) } function b ( c ) { var e = c . document ; if ( c . collapsed ) e = L ( this , e ) , c . insertNode ( e ) , c . moveToPosition ( e , CKEDITOR . POSITION _BEFORE _END ) ; else { var g = this . element , h = this . _ . definition , k , l = h . ignoreReadonly , m = l || h . includeReadonly ; null ==
m && ( m = c . root . getCustomData ( "cke_includeReadonly" ) ) ; var n = CKEDITOR . dtd [ g ] ; n || ( k = ! 0 , n = CKEDITOR . dtd . span ) ; c . enlarge ( CKEDITOR . ENLARGE _INLINE , 1 ) ; c . trim ( ) ; var v = c . createBookmark ( ) , r = v . startNode , x = v . endNode , t = r , u ; if ( ! l ) { var w = c . getCommonAncestor ( ) , l = a ( r , w ) , w = a ( x , w ) ; l && ( t = l . getNextSourceNode ( ! 0 ) ) ; w && ( x = w ) } for ( t . getPosition ( x ) == CKEDITOR . POSITION _FOLLOWING && ( t = 0 ) ; t ; ) { l = ! 1 ; if ( t . equals ( x ) ) t = null , l = ! 0 ; else { var z = t . type == CKEDITOR . NODE _ELEMENT ? t . getName ( ) : null , w = z && "false" == t . getAttribute ( "contentEditable" ) , y = z &&
t . getAttribute ( "data-nostyle" ) ; if ( z && t . data ( "cke-bookmark" ) || t . type === CKEDITOR . NODE _COMMENT ) { t = t . getNextSourceNode ( ! 0 ) ; continue } if ( w && m && CKEDITOR . dtd . $block [ z ] ) for ( var A = t , B = f ( A ) , C = void 0 , H = B . length , I = 0 , A = H && new CKEDITOR . dom . range ( A . getDocument ( ) ) ; I < H ; ++ I ) { var C = B [ I ] , K = CKEDITOR . filter . instances [ C . data ( "cke-filter" ) ] ; if ( K ? K . check ( this ) : 1 ) A . selectNodeContents ( C ) , b . call ( this , A ) } B = z ? ! n [ z ] || y ? 0 : w && ! m ? 0 : d ( t , x , h , T ) : 1 ; if ( B ) if ( C = t . getParent ( ) , B = h , H = g , I = k , ! C || ! ( C . getDtd ( ) || CKEDITOR . dtd . span ) [ H ] && ! I || B . parentRule &&
! B . parentRule ( C ) ) l = ! 0 ; else { if ( u || z && CKEDITOR . dtd . $removeEmpty [ z ] && ( t . getPosition ( x ) | T ) != T || ( u = c . clone ( ) , u . setStartBefore ( t ) ) , z = t . type , z == CKEDITOR . NODE _TEXT || w || z == CKEDITOR . NODE _ELEMENT && ! t . getChildCount ( ) ) { for ( var z = t , M ; ( l = ! z . getNext ( F ) ) && ( M = z . getParent ( ) , n [ M . getName ( ) ] ) && d ( M , r , h , S ) ; ) z = M ; u . setEndAfter ( z ) } } else l = ! 0 ; t = t . getNextSourceNode ( y || w ) } if ( l && u && ! u . collapsed ) { for ( var l = L ( this , e ) , w = l . hasAttributes ( ) , y = u . getCommonAncestor ( ) , z = { } , B = { } , C = { } , H = { } , X , W , Y ; l && y ; ) { if ( y . getName ( ) == g ) { for ( X in h . attributes ) ! H [ X ] &&
( Y = y . getAttribute ( W ) ) && ( l . getAttribute ( X ) == Y ? B [ X ] = 1 : H [ X ] = 1 ) ; for ( W in h . styles ) ! C [ W ] && ( Y = y . getStyle ( W ) ) && ( l . getStyle ( W ) == Y ? z [ W ] = 1 : C [ W ] = 1 ) } y = y . getParent ( ) } for ( X in B ) l . removeAttribute ( X ) ; for ( W in z ) l . removeStyle ( W ) ; w && ! l . hasAttributes ( ) && ( l = null ) ; l ? ( u . extractContents ( ) . appendTo ( l ) , u . insertNode ( l ) , G . call ( this , l ) , l . mergeSiblings ( ) , CKEDITOR . env . ie || l . $ . normalize ( ) ) : ( l = new CKEDITOR . dom . element ( "span" ) , u . extractContents ( ) . appendTo ( l ) , u . insertNode ( l ) , G . call ( this , l ) , l . remove ( ! 0 ) ) ; u = null } } c . moveToBookmark ( v ) ;
m && ( m = c . root . getCustomData ( "cke_includeReadonly" ) ) ; var n = CKEDITOR . dtd [ g ] ; n || ( k = ! 0 , n = CKEDITOR . dtd . span ) ; c . enlarge ( CKEDITOR . ENLARGE _INLINE , 1 ) ; c . trim ( ) ; var u = c . createBookmark ( ) , x = u . startNode , w = u . endNode , r = x , t ; if ( ! l ) { var v = c . getCommonAncestor ( ) , l = a ( x , v ) , v = a ( w , v ) ; l && ( r = l . getNextSourceNode ( ! 0 ) ) ; v && ( w = v ) } for ( r . getPosition ( w ) == CKEDITOR . POSITION _FOLLOWING && ( r = 0 ) ; r ; ) { l = ! 1 ; if ( r . equals ( w ) ) r = null , l = ! 0 ; else { var z = r . type == CKEDITOR . NODE _ELEMENT ? r . getName ( ) : null , v = z && "false" == r . getAttribute ( "contentEditable" ) , y = z &&
r . getAttribute ( "data-nostyle" ) ; if ( z && r . data ( "cke-bookmark" ) || r . type === CKEDITOR . NODE _COMMENT ) { r = r . getNextSourceNode ( ! 0 ) ; continue } if ( v && m && CKEDITOR . dtd . $block [ z ] ) for ( var A = r , C = f ( A ) , D = void 0 , H = C . length , I = 0 , A = H && new CKEDITOR . dom . range ( A . getDocument ( ) ) ; I < H ; ++ I ) { var D = C [ I ] , K = CKEDITOR . filter . instances [ D . data ( "cke-filter" ) ] ; if ( K ? K . check ( this ) : 1 ) A . selectNodeContents ( D ) , b . call ( this , A ) } C = z ? ! n [ z ] || y ? 0 : v && ! m ? 0 : d ( r , w , h , T ) : 1 ; if ( C ) if ( D = r . getParent ( ) , C = h , H = g , I = k , ! D || ! ( D . getDtd ( ) || CKEDITOR . dtd . span ) [ H ] && ! I || C . parentRule &&
! C . parentRule ( D ) ) l = ! 0 ; else { if ( t || z && CKEDITOR . dtd . $removeEmpty [ z ] && ( r . getPosition ( w ) | T ) != T || ( t = c . clone ( ) , t . setStartBefore ( r ) ) , z = r . type , z == CKEDITOR . NODE _TEXT || v || z == CKEDITOR . NODE _ELEMENT && ! r . getChildCount ( ) ) { for ( var z = r , M ; ( l = ! z . getNext ( B ) ) && ( M = z . getParent ( ) , n [ M . getName ( ) ] ) && d ( M , x , h , S ) ; ) z = M ; t . setEndAfter ( z ) } } else l = ! 0 ; r = r . getNextSourceNode ( y || v ) } if ( l && t && ! t . collapsed ) { for ( var l = L ( this , e ) , v = l . hasAttributes ( ) , y = t . getCommonAncestor ( ) , z = { } , C = { } , D = { } , H = { } , X , W , Y ; l && y ; ) { if ( y . getName ( ) == g ) { for ( X in h . attributes ) ! H [ X ] &&
( Y = y . getAttribute ( W ) ) && ( l . getAttribute ( X ) == Y ? C [ X ] = 1 : H [ X ] = 1 ) ; for ( W in h . styles ) ! D [ W ] && ( Y = y . getStyle ( W ) ) && ( l . getStyle ( W ) == Y ? z [ W ] = 1 : D [ W ] = 1 ) } y = y . getParent ( ) } for ( X in C ) l . removeAttribute ( X ) ; for ( W in z ) l . removeStyle ( W ) ; v && ! l . hasAttributes ( ) && ( l = null ) ; l ? ( t . extractContents ( ) . appendTo ( l ) , t . insertNode ( l ) , G . call ( this , l ) , l . mergeSiblings ( ) , CKEDITOR . env . ie || l . $ . normalize ( ) ) : ( l = new CKEDITOR . dom . element ( "span" ) , t . extractContents ( ) . appendTo ( l ) , t . insertNode ( l ) , G . call ( this , l ) , l . remove ( ! 0 ) ) ; t = null } } c . moveToBookmark ( u ) ;
c . shrink ( CKEDITOR . SHRINK _TEXT ) ; c . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) } } function c ( a ) { function b ( ) { for ( var a = new CKEDITOR . dom . elementPath ( d . getParent ( ) ) , c = new CKEDITOR . dom . elementPath ( m . getParent ( ) ) , e = null , f = null , g = 0 ; g < a . elements . length ; g ++ ) { var h = a . elements [ g ] ; if ( h == a . block || h == a . blockLimit ) break ; n . checkElementRemovable ( h , ! 0 ) && ( e = h ) } for ( g = 0 ; g < c . elements . length ; g ++ ) { h = c . elements [ g ] ; if ( h == c . block || h == c . blockLimit ) break ; n . checkElementRemovable ( h , ! 0 ) && ( f = h ) } f && m . breakParent ( f ) ; e && d . breakParent ( e ) } a . enlarge ( CKEDITOR . ENLARGE _INLINE ,
1 ) ; var c = a . createBookmark ( ) , d = c . startNode , e = this . _ . definition . alwaysRemoveElement ; if ( a . collapsed ) { for ( var f = new CKEDITOR . dom . elementPath ( d . getParent ( ) , a . root ) , g , h = 0 , k ; h < f . elements . length && ( k = f . elements [ h ] ) && k != f . block && k != f . blockLimit ; h ++ ) if ( this . checkElementRemovable ( k ) ) { var l ; ! e && a . collapsed && ( a . checkBoundaryOfElement ( k , CKEDITOR . END ) || ( l = a . checkBoundaryOfElement ( k , CKEDITOR . START ) ) ) ? ( g = k , g . match = l ? "start" : "end" ) : ( k . mergeSiblings ( ) , k . is ( this . element ) ? z . call ( this , k ) : u ( k , I ( this ) [ k . getName ( ) ] ) ) } if ( g ) { e =
d ; for ( h = 0 ; ; h ++ ) { k = f . elements [ h ] ; if ( k . equals ( g ) ) break ; else if ( k . match ) continue ; else k = k . clone ( ) ; k . append ( e ) ; e = k } e [ "start" == g . match ? "insertBefore" : "insertAfter" ] ( g ) } } else { var m = c . endNode , n = this ; b ( ) ; for ( f = d ; ! f . equals ( m ) ; ) g = f . getNextSourceNode ( ) , f . type == CKEDITOR . NODE _ELEMENT && this . checkElementRemovable ( f ) && ( f . getName ( ) == this . element ? z . call ( this , f ) : u ( f , I ( this ) [ f . getName ( ) ] ) , g . type == CKEDITOR . NODE _ELEMENT && g . contains ( d ) && ( b ( ) , g = d . getNext ( ) ) ) , f = g } a . moveToBookmark ( c ) ; a . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) } function f ( a ) { var b =
1 ) ; var c = a . createBookmark ( ) , d = c . startNode , e = this . _ . definition . alwaysRemoveElement ; if ( a . collapsed ) { for ( var f = new CKEDITOR . dom . elementPath ( d . getParent ( ) , a . root ) , g , h = 0 , k ; h < f . elements . length && ( k = f . elements [ h ] ) && k != f . block && k != f . blockLimit ; h ++ ) if ( this . checkElementRemovable ( k ) ) { var l ; ! e && a . collapsed && ( a . checkBoundaryOfElement ( k , CKEDITOR . END ) || ( l = a . checkBoundaryOfElement ( k , CKEDITOR . START ) ) ) ? ( g = k , g . match = l ? "start" : "end" ) : ( k . mergeSiblings ( ) , k . is ( this . element ) ? z . call ( this , k ) : t ( k , I ( this ) [ k . getName ( ) ] ) ) } if ( g ) { e =
d ; for ( h = 0 ; ; h ++ ) { k = f . elements [ h ] ; if ( k . equals ( g ) ) break ; else if ( k . match ) continue ; else k = k . clone ( ) ; k . append ( e ) ; e = k } e [ "start" == g . match ? "insertBefore" : "insertAfter" ] ( g ) } } else { var m = c . endNode , n = this ; b ( ) ; for ( f = d ; ! f . equals ( m ) ; ) g = f . getNextSourceNode ( ) , f . type == CKEDITOR . NODE _ELEMENT && this . checkElementRemovable ( f ) && ( f . getName ( ) == this . element ? z . call ( this , f ) : t ( f , I ( this ) [ f . getName ( ) ] ) , g . type == CKEDITOR . NODE _ELEMENT && g . contains ( d ) && ( b ( ) , g = d . getNext ( ) ) ) , f = g } a . moveToBookmark ( c ) ; a . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) } function 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 h ( a ) { var b = a . getEnclosedNode ( ) || a . getCommonAncestor ( ! 1 , ! 0 ) ; ( a = ( new CKEDITOR . dom . elementPath ( b , a . root ) ) . contains ( this . element , 1 ) ) && ! a . isReadOnly ( ) && y ( 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 g ( a ) { var b = a . createBookmark ( ! 0 ) , c = a . createIterator ( ) ; c . enforceRealBlocks = ! 0 ; this . _ . enterMode && ( c . enlargeBr = this . _ . enterMode != CKEDITOR . ENTER _BR ) ; for ( var d , e = a . document , f ; d = c . getNextParagraph ( ) ; ) ! d . isReadOnly ( ) && ( c . activeFilter ? c . activeFilter . check ( this ) : 1 ) && ( f = L ( this , e , d ) , v ( d , f ) ) ; a . moveToBookmark ( b ) } function l ( a ) { var b = a . createBookmark ( 1 ) , c = a . createIterator ( ) ; c . enforceRealBlocks = ! 0 ; c . enlargeBr = this . _ . enterMode != CKEDITOR . ENTER _BR ; for ( var d , e ; d = c . getNextParagraph ( ) ; ) this . checkElementRemovable ( d ) &&
( d . is ( "pre" ) ? ( ( e = this . _ . enterMode == CKEDITOR . ENTER _BR ? null : a . document . createElement ( this . _ . enterMode == CKEDITOR . ENTER _P ? "p" : "div" ) ) && d . copyAttributes ( e ) , v ( d , e ) ) : z . call ( this , d ) ) ; a . moveToBookmark ( b ) } function v ( a , b ) { var c = ! b ; c && ( b = a . getDocument ( ) . createElement ( "div" ) , a . copyAttributes ( b ) ) ; var d = b && b . is ( "pre" ) , f = a . is ( "pre" ) , g = ! d && f ; if ( d && ! f ) { f = b ; ( g = a . getBogus ( ) ) && g . remove ( ) ; g = a . getHtml ( ) ; g = x ( g , /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g , "" ) ; g = g . replace ( /[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi , "$1" ) ; g = g . replace ( /([ \t\n\r]+| )/g ,
" " ) ; g = g . replace ( /<br\b[^>]*>/gi , "\n" ) ; if ( CKEDITOR . env . ie ) { var h = a . getDocument ( ) . createElement ( "div" ) ; h . append ( f ) ; f . $ . outerHTML = "\x3cpre\x3e" + g + "\x3c/pre\x3e" ; f . copyAttributes ( h . getFirst ( ) ) ; f = h . getFirst ( ) . remove ( ) } else f . setHtml ( g ) ; b = f } else g ? b = t ( c ? [ a . getHtml ( ) ] : e ( a ) , b ) : a . moveChildren ( b ) ; b . replace ( a ) ; if ( d ) { var c = b , k ; ( k = c . getPrevious ( w ) ) && k . type == CKEDITOR . NODE _ELEMENT && k . is ( "pre" ) && ( d = x ( k . getHtml ( ) , /\n$/ , "" ) + "\n\n" + x ( c . getHtml ( ) , /^\n/ , "" ) , CKEDITOR . env . ie ? c . $ . outerHTML = "\x3cpre\x3e" + d + "\x3c/pre\x3e" :
c . setHtml ( d ) , k . remove ( ) ) } else c && n ( b ) } function e ( 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 t ( a , b ) { var c ;
a . removeStyle ( e ) } } function g ( a ) { var b = a . createBookmark ( ! 0 ) , c = a . createIterator ( ) ; c . enforceRealBlocks = ! 0 ; this . _ . enterMode && ( c . enlargeBr = this . _ . enterMode != CKEDITOR . ENTER _BR ) ; for ( var d , e = a . document , f ; d = c . getNextParagraph ( ) ; ) ! d . isReadOnly ( ) && ( c . activeFilter ? c . activeFilter . check ( this ) : 1 ) && ( f = L ( this , e , d ) , u ( d , f ) ) ; a . moveToBookmark ( b ) } function l ( a ) { var b = a . createBookmark ( 1 ) , c = a . createIterator ( ) ; c . enforceRealBlocks = ! 0 ; c . enlargeBr = this . _ . enterMode != CKEDITOR . ENTER _BR ; for ( var d , e ; d = c . getNextParagraph ( ) ; ) this . checkElementRemovable ( d ) &&
( d . is ( "pre" ) ? ( ( e = this . _ . enterMode == CKEDITOR . ENTER _BR ? null : a . document . createElement ( this . _ . enterMode == CKEDITOR . ENTER _P ? "p" : "div" ) ) && d . copyAttributes ( e ) , u ( d , e ) ) : z . call ( this , d ) ) ; a . moveToBookmark ( b ) } function u ( a , b ) { var c = ! b ; c && ( b = a . getDocument ( ) . createElement ( "div" ) , a . copyAttributes ( b ) ) ; var d = b && b . is ( "pre" ) , f = a . is ( "pre" ) , g = ! d && f ; if ( d && ! f ) { f = b ; ( g = a . getBogus ( ) ) && g . remove ( ) ; g = a . getHtml ( ) ; g = x ( g , /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g , "" ) ; g = g . replace ( /[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi , "$1" ) ; g = g . replace ( /([ \t\n\r]+| )/g ,
" " ) ; g = g . replace ( /<br\b[^>]*>/gi , "\n" ) ; if ( CKEDITOR . env . ie ) { var h = a . getDocument ( ) . createElement ( "div" ) ; h . append ( f ) ; f . $ . outerHTML = "\x3cpre\x3e" + g + "\x3c/pre\x3e" ; f . copyAttributes ( h . getFirst ( ) ) ; f = h . getFirst ( ) . remove ( ) } else f . setHtml ( g ) ; b = f } else g ? b = w ( c ? [ a . getHtml ( ) ] : e ( a ) , b ) : a . moveChildren ( b ) ; b . replace ( a ) ; if ( d ) { var c = b , k ; ( k = c . getPrevious ( v ) ) && k . type == CKEDITOR . NODE _ELEMENT && k . is ( "pre" ) && ( d = x ( k . getHtml ( ) , /\n$/ , "" ) + "\n\n" + x ( c . getHtml ( ) , /^\n/ , "" ) , CKEDITOR . env . ie ? c . $ . outerHTML = "\x3cpre\x3e" + d + "\x3c/pre\x3e" :
c . setHtml ( d ) , k . remove ( ) ) } else c && n ( b ) } function e ( 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 w ( a , b ) { var c ;
1 < a . length && ( c = new CKEDITOR . dom . documentFragment ( b . getDocument ( ) ) ) ; for ( var d = 0 ; d < a . length ; d ++ ) { var e = a [ d ] , e = e . replace ( /(\r\n|\r)/g , "\n" ) , e = x ( e , /^[ \t]*\n/ , "" ) , e = x ( e , /\n$/ , "" ) , e = x ( e , /^[ \t]+|[ \t]+$/g , function ( a , b ) { return 1 == a . length ? "\x26nbsp;" : b ? " " + CKEDITOR . tools . repeat ( "\x26nbsp;" , a . length - 1 ) : CKEDITOR . tools . repeat ( "\x26nbsp;" , a . length - 1 ) + " " } ) , e = e . replace ( /\n/g , "\x3cbr\x3e" ) , e = e . replace ( /[ \t]{2,}/g , function ( a ) { return CKEDITOR . tools . repeat ( "\x26nbsp;" , a . length - 1 ) + " " } ) ; if ( c ) { var f = b . clone ( ) ; f . setHtml ( e ) ;
c . append ( f ) } else b . setHtml ( e ) } return c || b } function z ( a , b ) { var c = this . _ . definition , d = c . attributes , c = c . styles , e = I ( this ) [ a . getName ( ) ] , f = CKEDITOR . tools . isEmpty ( d ) && CKEDITOR . tools . isEmpty ( c ) , g ; for ( g in d ) if ( "class" != g && ! this . _ . definition . fullMatch || a . getAttribute ( g ) == m ( g , d [ g ] ) ) b && "data-" == g . slice ( 0 , 5 ) || ( f = a . hasAttribute ( g ) , a . removeAttribute ( g ) ) ; for ( var h in c ) this . _ . definition . fullMatch && a . getStyle ( h ) != m ( h , c [ h ] , ! 0 ) || ( f = f || ! ! a . getStyle ( h ) , a . removeStyle ( h ) ) ; u ( a , e , A [ a . getName ( ) ] ) ; f && ( this . _ . definition . alwaysRemoveElement ?
n ( a , 1 ) : ! CKEDITOR . dtd . $block [ a . getName ( ) ] || this . _ . enterMode == CKEDITOR . ENTER _BR && ! a . hasAttributes ( ) ? n ( a ) : a . renameNode ( this . _ . enterMode == CKEDITOR . ENTER _P ? "p" : "div" ) ) } function G ( a ) { for ( var b = I ( this ) , c = a . getElementsByTag ( this . element ) , d , e = c . count ( ) ; 0 <= -- e ; ) d = c . getItem ( e ) , d . isReadOnly ( ) || z . call ( this , d , ! 0 ) ; for ( var f in b ) if ( f != this . element ) for ( c = a . getElementsByTag ( f ) , e = c . count ( ) - 1 ; 0 <= e ; e -- ) d = c . getItem ( e ) , d . isReadOnly ( ) || u ( d , b [ f ] ) } function u ( a , b , c ) { if ( b = b && b . attributes ) for ( var d = 0 ; d < b . length ; d ++ ) { var e = b [ d ] [ 0 ] ,
f ; if ( f = a . getAttribute ( e ) ) { var g = b [ d ] [ 1 ] ; ( null === g || g . test && g . test ( f ) || "string" == typeof g && f == g ) && a . removeAttribute ( e ) } } c || n ( a ) } function n ( a , b ) { if ( ! a . hasAttributes ( ) || b ) if ( CKEDITOR . dtd . $block [ a . getName ( ) ] ) { var c = a . getPrevious ( w ) , d = a . getNext ( w ) ; ! c || c . type != CKEDITOR . NODE _TEXT && c . isBlockBoundary ( { br : 1 } ) || a . append ( "br" , 1 ) ; ! d || d . type != CKEDITOR . NODE _TEXT && d . isBlockBoundary ( { br : 1 } ) || a . append ( "br" ) ; a . remove ( ! 0 ) } else c = a . getFirst ( ) , d = a . getLast ( ) , a . remove ( ! 0 ) , c && ( c . type == CKEDITOR . NODE _ELEMENT && c . mergeSiblings ( ) ,
c . append ( f ) } else b . setHtml ( e ) } return c || b } function z ( a , b ) { var c = this . _ . definition , d = c . attributes , c = c . styles , e = I ( this ) [ a . getName ( ) ] , f = CKEDITOR . tools . isEmpty ( d ) && CKEDITOR . tools . isEmpty ( c ) , g ; for ( g in d ) if ( "class" != g && ! this . _ . definition . fullMatch || a . getAttribute ( g ) == m ( g , d [ g ] ) ) b && "data-" == g . slice ( 0 , 5 ) || ( f = a . hasAttribute ( g ) , a . removeAttribute ( g ) ) ; for ( var h in c ) this . _ . definition . fullMatch && a . getStyle ( h ) != m ( h , c [ h ] , ! 0 ) || ( f = f || ! ! a . getStyle ( h ) , a . removeStyle ( h ) ) ; t ( a , e , A [ a . getName ( ) ] ) ; f && ( this . _ . definition . alwaysRemoveElement ?
n ( a , 1 ) : ! CKEDITOR . dtd . $block [ a . getName ( ) ] || this . _ . enterMode == CKEDITOR . ENTER _BR && ! a . hasAttributes ( ) ? n ( a ) : a . renameNode ( this . _ . enterMode == CKEDITOR . ENTER _P ? "p" : "div" ) ) } function G ( a ) { for ( var b = I ( this ) , c = a . getElementsByTag ( this . element ) , d , e = c . count ( ) ; 0 <= -- e ; ) d = c . getItem ( e ) , d . isReadOnly ( ) || z . call ( this , d , ! 0 ) ; for ( var f in b ) if ( f != this . element ) for ( c = a . getElementsByTag ( f ) , e = c . count ( ) - 1 ; 0 <= e ; e -- ) d = c . getItem ( e ) , d . isReadOnly ( ) || t ( d , b [ f ] ) } function t ( a , b , c ) { if ( b = b && b . attributes ) for ( var d = 0 ; d < b . length ; d ++ ) { var e = b [ d ] [ 0 ] ,
f ; if ( f = a . getAttribute ( e ) ) { var g = b [ d ] [ 1 ] ; ( null === g || g . test && g . test ( f ) || "string" == typeof g && f == g ) && a . removeAttribute ( e ) } } c || n ( a ) } function n ( a , b ) { if ( ! a . hasAttributes ( ) || b ) if ( CKEDITOR . dtd . $block [ a . getName ( ) ] ) { var c = a . getPrevious ( v ) , d = a . getNext ( v ) ; ! 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 = y ( d , a ) ; b . getCustomData ( "doc_processing_style" ) && d . hasAttribute ( "id" ) ? d . removeAttribute ( "id" ) : b . setCustomData ( "doc_processing_style" , 1 ) ; return d } function y ( 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 H ( a , b ) { for ( var c in a ) a [ c ] = a [ c ] . replace ( C , function ( a , c ) { return b [ c ] } ) } function I ( a ) { if ( a . _ . overrides ) return a . _ . overrides ; var b = a . _ . overrides = { } , c = a . _ . definition . overrides ; if ( c ) { CKEDITOR . tools . isArray ( c ) || ( c = [ c ] ) ; for ( var d = 0 ; d < c . length ; d ++ ) { var e = c [ d ] , f , g ; "string" == typeof e ? f = e . toLowerCase ( ) : ( f = e . element ? e . element . toLowerCase ( ) : a . element , g = e . attributes ) ; e = b [ f ] || ( b [ f ] = { } ) ; if ( g ) { var e = e . attributes = e . attributes || [ ] , h ; for ( h in g ) e . push ( [ h . toLowerCase ( ) , g [ h ] ] ) } } } return b } function m ( a ,
b , c ) { var d = new CKEDITOR . dom . element ( "span" ) ; d [ c ? "setStyle" : "setAttribute" ] ( a , b ) ; return d [ c ? "getStyle" : "getAttribute" ] ( a ) } function B ( 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 , f = d . createIterator ( ) ; e = f . getNextRange ( ) ; ) b . call ( this , e , c ) ; a . selectRanges ( d ) } var A = { address : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , p : 1 , pre : 1 , section : 1 , header : 1 , footer : 1 , nav : 1 , article : 1 , aside : 1 , figure : 1 , dialog : 1 , hgroup : 1 , time : 1 , meter : 1 , menu : 1 , command : 1 , keygen : 1 , output : 1 , progress : 1 , details : 1 , datagrid : 1 , datalist : 1 } , M = { a : 1 , blockquote : 1 , embed : 1 , hr : 1 , img : 1 , li : 1 , object : 1 , ol : 1 , table : 1 , td : 1 , tr : 1 , th : 1 , ul : 1 , dl : 1 , dt : 1 , dd : 1 , form : 1 , audio : 1 , video : 1 } , r = /\s*(?:;\s*|$)/ , C = /#\((.+?)\)/g , F = CKEDITOR . dom . walker . bookmark ( 0 ,
1 ) , w = CKEDITOR . dom . walker . whitespaces ( 1 ) ; CKEDITOR . style = function ( a , b ) { if ( "string" == typeof a . type ) return new CKEDITOR . style . customHandlers [ a . type ] ( a ) ; var c = a . attributes ; c && c . style && ( a . styles = CKEDITOR . tools . extend ( { } , a . styles , CKEDITOR . tools . parseCssText ( c . style ) ) , delete c . style ) ; b && ( a = CKEDITOR . tools . clone ( a ) , H ( a . attributes , b ) , H ( a . styles , b ) ) ; c = this . element = a . element ? "string" == typeof a . element ? a . element . toLowerCase ( ) : a . element : "*" ; this . type = a . type || ( A [ c ] ? CKEDITOR . STYLE _BLOCK : M [ c ] ? CKEDITOR . STYLE _OBJECT :
return a } function H ( a , b ) { for ( var c in a ) a [ c ] = a [ c ] . replace ( D , function ( a , c ) { return b [ c ] } ) } function I ( a ) { if ( a . _ . overrides ) return a . _ . overrides ; var b = a . _ . overrides = { } , c = a . _ . definition . overrides ; if ( c ) { CKEDITOR . tools . isArray ( c ) || ( c = [ c ] ) ; for ( var d = 0 ; d < c . length ; d ++ ) { var e = c [ d ] , f , g ; "string" == typeof e ? f = e . toLowerCase ( ) : ( f = e . element ? e . element . toLowerCase ( ) : a . element , g = e . attributes ) ; e = b [ f ] || ( b [ f ] = { } ) ; if ( g ) { var e = e . attributes = e . attributes || [ ] , h ; for ( h in g ) e . push ( [ h . toLowerCase ( ) , g [ h ] ] ) } } } return b } function m ( a ,
b , c ) { var d = new CKEDITOR . dom . element ( "span" ) ; d [ c ? "setStyle" : "setAttribute" ] ( a , b ) ; return d [ c ? "getStyle" : "getAttribute" ] ( a ) } function C ( a , b ) { function c ( a , b ) { return "font-family" == b . toLowerCase ( ) ? a . replace ( /["']/g , "" ) : a } "string" == typeof a && ( a = CKEDITOR . tools . parseCssText ( a ) ) ; "string" == typeof b && ( b = CKEDITOR . tools . parseCssText ( b , ! 0 ) ) ; for ( var d in a ) if ( ! ( d in b ) || c ( b [ d ] , d ) != c ( a [ d ] , d ) && "inherit" != a [ d ] && "inherit" != b [ d ] ) return ! 1 ; return ! 0 } function K ( a , b , c ) { var d = a . getRanges ( ) ; b = b ? this . removeFromRange : this . applyToRange ;
for ( var e , f = d . createIterator ( ) ; e = f . getNextRange ( ) ; ) b . call ( this , e , c ) ; a . selectRanges ( d ) } var A = { address : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , p : 1 , pre : 1 , section : 1 , header : 1 , footer : 1 , nav : 1 , article : 1 , aside : 1 , figure : 1 , dialog : 1 , hgroup : 1 , time : 1 , meter : 1 , menu : 1 , command : 1 , keygen : 1 , output : 1 , progress : 1 , details : 1 , datagrid : 1 , datalist : 1 } , M = { a : 1 , blockquote : 1 , embed : 1 , hr : 1 , img : 1 , li : 1 , object : 1 , ol : 1 , table : 1 , td : 1 , tr : 1 , th : 1 , ul : 1 , dl : 1 , dt : 1 , dd : 1 , form : 1 , audio : 1 , video : 1 } , r = /\s*(?:;\s*|$)/ , D = /#\((.+?)\)/g , B = CKEDITOR . dom . walker . bookmark ( 0 ,
1 ) , v = 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 ) , H ( a . attributes , b ) , H ( a . styles , b ) ) ; c = this . element = a . element ? "string" == typeof a . element ? a . element . toLowerCase ( ) : a . element : "*" ; this . type = a . type || ( A [ c ] ? CKEDITOR . STYLE _BLOCK : M [ c ] ? CKEDITOR . STYLE _OBJECT :
CKEDITOR . STYLE _INLINE ) ; "object" == typeof this . element && ( this . type = CKEDITOR . STYLE _OBJECT ) ; this . _ = { definition : a } } ; CKEDITOR . style . prototype = { apply : function ( a ) { if ( a instanceof CKEDITOR . dom . document ) return 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 ? g : this . type == CKEDITOR . STYLE _OBJECT ? h : null ; return this . applyToRange ( a ) } , removeFromRange : function ( a ) { this . removeFromRange = this . type == CKEDITOR . STYLE _INLINE ? c : this . type == CKEDITOR . STYLE _BLOCK ? l : this . type == CKEDITOR . STYLE _OBJECT ? k : null ; return this . removeFromRange ( a ) } , applyToObject : function ( a ) { y ( a ,
this ) } , checkActive : function ( a , b ) { switch ( this . type ) { case CKEDITOR . STYLE _BLOCK : return this . checkElementRemovable ( a . block || a . blockLimit , ! 0 , b ) ; case CKEDITOR . STYLE _OBJECT : case CKEDITOR . STYLE _INLINE : for ( var c = a . elements , d = 0 , e ; d < c . length ; d ++ ) if ( e = c [ d ] , this . type != CKEDITOR . STYLE _INLINE || e != a . block && e != a . blockLimit ) { if ( this . type == CKEDITOR . STYLE _OBJECT ) { var f = e . getName ( ) ; if ( ! ( "string" == typeof this . element ? f == this . element : f 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 , f = c . attributes ;
if ( f ) for ( var g in f ) e ++ , d [ g ] = f [ g ] ; if ( g = CKEDITOR . style . getStyleText ( c ) ) d . style || e ++ , d . style = g ; d . _length = e ; c = c . _AC = d } if ( c . _length ) { for ( var h in c ) if ( "_length" != h ) if ( d = a . getAttribute ( h ) || "" , "style" == h ? B ( 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 = I ( 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 ( f ) for ( var g in f ) e ++ , d [ g ] = f [ g ] ; if ( g = CKEDITOR . style . getStyleText ( c ) ) d . style || e ++ , d . style = g ; d . _length = e ; c = c . _AC = d } if ( c . _length ) { for ( var h in c ) if ( "_length" != h ) if ( d = a . getAttribute ( h ) || "" , "style" == h ? C ( c [ h ] , d ) : c [ h ] == d ) { if ( ! b ) return ! 0 } else if ( b ) return ! 1 ; if ( b ) return ! 0 } else return ! 0 } return ! 1 } , checkElementRemovable : function ( a , b , c ) { if ( this . checkElementMatch ( a , b , c ) ) return ! 0 ; if ( b = I ( 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 f in e ) c . push ( " " , f , '\x3d"' , e [ f ] , '"' ) ; ( e = CKEDITOR . style . getStyleText ( b ) ) && c . push ( ' style\x3d"' , e , '"' ) ; c . push ( "\x3e" , a || b . name , "\x3c/" , d , "\x3e" ) ; return c . join ( "" ) } , getDefinition : function ( ) { return this . _ . definition } } ; CKEDITOR . style . getStyleText = function ( a ) { var b = a . _ST ; if ( b ) return b ;
var b = a . styles , c = a . attributes && a . attributes . style || "" , d = "" ; c . length && ( c = c . replace ( r , ";" ) ) ; for ( var e in b ) { var f = b [ e ] , g = ( e + ":" + f ) . replace ( r , ";" ) ; "inherit" == f ? d += g : c += g } c . length && ( c = CKEDITOR . tools . normalizeCssText ( c , ! 0 ) ) ; return a . _ST = c + d } ; CKEDITOR . style . customHandlers = { } ; CKEDITOR . style . addCustomHandler = function ( a ) { var b = function ( a ) { this . _ = { definition : a } ; this . setup && this . setup ( a ) } ; b . prototype = CKEDITOR . tools . extend ( CKEDITOR . tools . prototypedCopy ( CKEDITOR . style . prototype ) , { assignedTo : CKEDITOR . STYLE _OBJECT } ,
a , ! 0 ) ; return this . customHandlers [ a . type ] = b } ; var T = CKEDITOR . POSITION _PRECEDING | CKEDITOR . POSITION _IDENTICAL | CKEDITOR . POSITION _IS _CONTAINED , S = CKEDITOR . POSITION _FOLLOWING | CKEDITOR . POSITION _IDENTICAL | CKEDITOR . POSITION _IS _CONTAINED } ) ( ) ; CKEDITOR . styleCommand = function ( a , d ) { this . requiredContent = this . allowedContent = this . style = a ; CKEDITOR . tools . extend ( this , d , ! 0 ) } ;
@@ -528,16 +529,16 @@ else{var d=this,b=d.config.stylesCombo_stylesSet||d.config.stylesSet;if(!1===b)a
( function ( ) { function a ( a , f , h ) { a . once ( "selectionCheck" , function ( a ) { if ( ! d ) { var c = a . data . getRanges ( ) [ 0 ] ; h . equals ( c ) ? a . cancel ( ) : f . equals ( c ) && ( b = ! 0 ) } } , null , null , - 1 ) } var d = ! 0 , b = ! 1 ; CKEDITOR . dom . selection . setupEditorOptimization = function ( a ) { a . on ( "selectionCheck" , function ( a ) { a . data && ! b && a . data . optimizeInElementEnds ( ) ; b = ! 1 } ) ; a . on ( "contentDom" , function ( ) { var b = a . editable ( ) ; b && ( b . attachListener ( b , "keydown" , function ( a ) { this . _ . shiftPressed = a . data . $ . shiftKey } , this ) , b . attachListener ( b , "keyup" , function ( a ) { this . _ . shiftPressed =
a . data . $ . shiftKey } , this ) ) } ) } ; CKEDITOR . dom . selection . prototype . optimizeInElementEnds = function ( ) { var b = this . getRanges ( ) [ 0 ] , f = this . root . editor , h ; if ( this . root . editor . _ . shiftPressed || this . isFake || b . isCollapsed || b . startContainer . equals ( b . endContainer ) ) h = ! 1 ; else if ( 0 === b . endOffset ) h = ! 0 ; else { h = b . startContainer . type === CKEDITOR . NODE _TEXT ; var k = b . endContainer . type === CKEDITOR . NODE _TEXT , g = h ? b . startContainer . getLength ( ) : b . startContainer . getChildCount ( ) ; h = b . startOffset === g || h ^ k } h && ( h = b . clone ( ) , b . shrink ( CKEDITOR . SHRINK _TEXT ,
! 1 , { skipBogus : ! CKEDITOR . env . webkit } ) , d = ! 1 , a ( f , b , h ) , b . select ( ) , d = ! 0 ) } } ) ( ) ; 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 h = null , k = null , g = [ ] , l = b , v ; f = f || b . getDocument ( ) . getBody ( ) ; l || ( l = f ) ; do if ( l . type == CKEDITOR . NODE _ELEMENT ) { g . push ( l ) ; if ( ! this . lastElement && ( this . lastElement = l , l . is ( CKEDITOR . dtd . $object ) || "false" == l . getAttribute ( "contenteditable" ) ) ) continue ; if ( l . equals ( f ) ) break ; if ( ! k && ( v = l . getName ( ) ,
"true" == l . getAttribute ( "contenteditable" ) ? k = l : ! h && d [ v ] && ( h = l ) , a [ v ] ) ) { if ( v = ! h && "div" == v ) { a : { v = l . getChildren ( ) ; for ( var e = 0 , x = v . count ( ) ; e < x ; e ++ ) { var t = v . getItem ( e ) ; if ( t . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $block [ t . getName ( ) ] ) { v = ! 0 ; break a } } v = ! 1 } v = ! v } v ? h = l : k = l } } while ( l = l . getParent ( ) ) ; k || ( k = f ) ; this . block = h ; this . blockLimit = k ; this . root = f ; this . elements = g } } ) ( ) ;
( 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 h = null , k = null , g = [ ] , l = b , u ; f = f || b . getDocument ( ) . getBody ( ) ; l || ( l = f ) ; do if ( l . type == CKEDITOR . NODE _ELEMENT ) { g . push ( l ) ; if ( ! this . lastElement && ( this . lastElement = l , l . is ( CKEDITOR . dtd . $object ) || "false" == l . getAttribute ( "contenteditable" ) ) ) continue ; if ( l . equals ( f ) ) break ; if ( ! k && ( u = l . getName ( ) ,
"true" == l . getAttribute ( "contenteditable" ) ? k = l : ! h && d [ u ] && ( h = l ) , a [ u ] ) ) { if ( u = ! h && "div" == u ) { a : { u = l . getChildren ( ) ; for ( var e = 0 , x = u . count ( ) ; e < x ; e ++ ) { var w = u . getItem ( e ) ; if ( w . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $block [ w . getName ( ) ] ) { u = ! 0 ; break a } } u = ! 1 } u = ! u } u ? h = l : k = l } } while ( l = l . getParent ( ) ) ; k || ( k = f ) ; this . block = h ; this . blockLimit = k ; this . root = f ; this . elements = g } } ) ( ) ;
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 h = this . elements , k = h . length ; d && ( b ? c += 1 : -- k ) ; b && ( h = Array . prototype . slice . call ( h , 0 ) , h . reverse ( ) ) ; for ( ; c < k ; c ++ ) if ( f ( h [ c ] ) ) return h [ 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 ( ) , h = new CKEDITOR . dom . text ( this . $ . splitText ( a ) , f ) ; d . childNodes . length ==
b && ( a >= c ? ( h = f . createText ( "" ) , h . insertAfter ( this ) ) : ( a = f . createText ( "" ) , a . insertAfter ( h ) , a . remove ( ) ) ) ; return h } , substring : function ( a , d ) { return "number" != typeof d ? this . $ . nodeValue . substr ( a ) : this . $ . nodeValue . substring ( a , d ) } } ) ;
( function ( ) { function a ( a , c , d ) { var h = a . serializable , k = c [ d ? "endContainer" : "startContainer" ] , g = d ? "endOffset" : "startOffset" , l = h ? c . document . getById ( a . startNode ) : a . startNode ; a = h ? c . document . getById ( a . endNode ) : a . endNode ; k . equals ( l . 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 ( l . getParent ( ) ) && c [ g ] ++ ; k . equals ( a . getParent ( ) ) && c [ g ] ++ ; 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 = [ ] , h ; return { getNextRange : function ( k ) { h = void 0 === h ? 0 : h + 1 ; var g = a [ h ] ; if ( g && 1 < a . length ) { if ( ! h ) for ( var l = a . length - 1 ; 0 <= l ; l -- ) d . unshift ( a [ l ] . createBookmark ( ! 0 ) ) ; if ( k ) for ( var v = 0 ; a [ h + v + 1 ] ; ) { var e = g . document ; k = 0 ; l = e . getById ( d [ v ] . endNode ) ; for ( e = e . getById ( d [ v + 1 ] . startNode ) ; ; ) { l =
l . getNextSourceNode ( ! 1 ) ; if ( e . equals ( l ) ) k = 1 ; else if ( c ( l ) || l . type == CKEDITOR . NODE _ELEMENT && l . isBlockBoundary ( ) ) continue ; break } if ( ! k ) break ; v ++ } for ( g . moveToBookmark ( d . shift ( ) ) ; v -- ; ) l = a [ ++ h ] , l . moveToBookmark ( d . shift ( ) ) , g . setEnd ( l . endContainer , l . endOffset ) } return g } } } , createBookmarks : function ( b ) { for ( var c = [ ] , d , h = 0 ; h < this . length ; h ++ ) { c . push ( d = this [ h ] . createBookmark ( b , ! 0 ) ) ; for ( var k = h + 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 <
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 = [ ] , h ; return { getNextRange : function ( k ) { h = void 0 === h ? 0 : h + 1 ; var g = a [ h ] ; if ( g && 1 < a . length ) { if ( ! h ) for ( var l = a . length - 1 ; 0 <= l ; l -- ) d . unshift ( a [ l ] . createBookmark ( ! 0 ) ) ; if ( k ) for ( var u = 0 ; a [ h + u + 1 ] ; ) { var e = g . document ; k = 0 ; l = e . getById ( d [ u ] . endNode ) ; for ( e = e . getById ( d [ u + 1 ] . startNode ) ; ; ) { l =
l . getNextSourceNode ( ! 1 ) ; if ( e . equals ( l ) ) k = 1 ; else if ( c ( l ) || l . type == CKEDITOR . NODE _ELEMENT && l . isBlockBoundary ( ) ) continue ; break } if ( ! k ) break ; u ++ } for ( g . moveToBookmark ( d . shift ( ) ) ; u -- ; ) l = a [ ++ h ] , l . moveToBookmark ( d . shift ( ) ) , g . setEnd ( l . endContainer , l . endOffset ) } return g } } } , createBookmarks : function ( b ) { for ( var c = [ ] , d , h = 0 ; h < this . length ; h ++ ) { c . push ( d = this [ h ] . createBookmark ( b , ! 0 ) ) ; for ( var k = h + 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 } ) , f = 0 , g ; f < c . length ; f ++ ) if ( g = c [ f ] , d . ie && ( g . replace ( /^ie/ , "" ) == d . version || d . quirks && "iequirks" == g ) && ( g = "ie" ) , d [ g ] ) { b += "_" + c [ f ] ; break } return CKEDITOR . getUrl ( a ( ) + b + ".css" ) } function b ( a , b ) { h [ a ] || ( CKEDITOR . document . appendStyleSheet ( d ( a ) ) , h [ 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 , f , g ; if ( CKEDITOR . env . webkit ) for ( b = b . split ( "}" ) . slice ( 0 , - 1 ) , f = 0 ; f < b . length ; f ++ ) b [ f ] = b [ f ] . split ( "{" ) ; for ( var h = 0 ; h < a . length ; h ++ ) if ( CKEDITOR . env . webkit ) for ( f = 0 ; f < b . length ; f ++ ) { g = b [ f ] [ 1 ] ; for ( d = 0 ; d < c . length ; d ++ ) g = g . replace ( c [ d ] [ 0 ] , c [ d ] [ 1 ] ) ; a [ h ] . $ . sheet . addRule ( b [ f ] [ 0 ] , g ) } else { g = b ; for ( d = 0 ; d < c . length ; d ++ ) g = g . replace ( c [ d ] [ 0 ] , c [ d ] [ 1 ] ) ; CKEDITOR . env . ie && 11 > CKEDITOR . env . version ?
@@ -546,16 +547,7 @@ g||(g=this.icons[a]));a=c||g&&g.path||"";d=d||g&&g.offset;f=f||g&&g.bgsize||"16p
c ( this , "panel" ) ) ; a = [ [ l , a ] ] ; f ( [ b ] , d , a ) ; f ( g , h , a ) } ) . call ( this , a ) } } ) ; var k = "cke_ui_color" , g = [ ] , l = /\$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 ) ; g . push ( d ) ; b . on ( "destroy" , function ( ) { g = CKEDITOR . tools . array . filter ( g , function ( a ) { return d !== a } ) } ) ; ( a = b . getUiColor ( ) ) && f ( [ d ] , CKEDITOR . skin . chameleon ( b , "panel" ) ,
[ [ l , a ] ] ) } } ; b . on ( "panelShow" , a ) ; b . on ( "menuShow" , a ) ; b . config . uiColor && b . setUiColor ( b . config . uiColor ) } } ) } ) ( ) ;
( function ( ) { if ( CKEDITOR . env . webkit ) CKEDITOR . env . hc = ! 1 ; else { var a = CKEDITOR . dom . element . createFromHtml ( '\x3cdiv style\x3d"width:0;height:0;position:absolute;left:-10000px;border:1px solid;border-color:red blue"\x3e\x3c/div\x3e' , CKEDITOR . document ) ; a . appendTo ( CKEDITOR . document . getHead ( ) ) ; try { var d = a . getComputedStyle ( "border-top-color" ) , b = a . getComputedStyle ( "border-right-color" ) ; CKEDITOR . env . hc = ! ( ! d || d != b ) } catch ( c ) { CKEDITOR . env . hc = ! 1 } a . remove ( ) } CKEDITOR . env . hc && ( CKEDITOR . env . cssClass += " cke_hc" ) ; CKEDITOR . document . appendStyleText ( ".cke{visibility:hidden;}" ) ;
CKEDITOR . status = "loaded" ; CKEDITOR . fireOnce ( "loaded" ) ; if ( a = CKEDITOR . _ . pending ) for ( delete CKEDITOR . _ . pending , d = 0 ; d < a . length ; d ++ ) CKEDITOR . editor . prototype . constructor . apply ( a [ d ] [ 0 ] , a [ d ] [ 1 ] ) , CKEDITOR . add ( a [ d ] [ 0 ] ) } ) ( ) ; / *
Copyright ( c ) 2003 - 2015 , CKSource - Frederico Knabben . All rights reserved .
For licensing , see LICENSE . md or http : //ckeditor.com/license
* /
CKEDITOR . skin . name = "minimalist" ; CKEDITOR . skin . ua _editor = "ie,iequirks,ie7,ie8,gecko" ; CKEDITOR . skin . ua _dialog = "ie,iequirks,ie7,ie8" ;
CKEDITOR . skin . chameleon = function ( ) { var b = function ( ) { return function ( b , e ) { for ( var a = b . match ( /[^#]./g ) , c = 0 ; 3 > c ; c ++ ) { var f = a , h = c , d ; d = parseInt ( a [ c ] , 16 ) ; d = ( "0" + ( 0 > e ? 0 | d * ( 1 + e ) : 0 | d + ( 255 - d ) * e ) . toString ( 16 ) ) . slice ( - 2 ) ; f [ h ] = d } return "#" + a . join ( "" ) } } ( ) , c = function ( ) { var b = new CKEDITOR . template ( "background:#{to};background-image:-webkit-gradient(linear,lefttop,leftbottom,from({from}),to({to}));background-image:-moz-linear-gradient(top,{from},{to});background-image:-webkit-linear-gradient(top,{from},{to});background-image:-o-linear-gradient(top,{from},{to});background-image:-ms-linear-gradient(top,{from},{to});background-image:linear-gradient(top,{from},{to});filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='{from}',endColorstr='{to}');" ) ; return function ( c ,
a ) { return b . output ( { from : c , to : a } ) } } ( ) , f = { editor : new CKEDITOR . template ( "{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ {defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_bottom [{defaultGradient}border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [{defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [{defaultGradient}outline-color:{defaultBorder};border-top-color:{defaultBorder};] {id} .cke_dialog_tab [{lightGradient}border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [{mediumGradient}] {id} .cke_dialog_contents [border-top-color:{defaultBorder};] {id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [background:{dialogTabSelected};border-bottom-color:{dialogTabSelectedBorder};] {id} .cke_dialog_body [background:{dialogBody};border-color:{defaultBorder};] {id} .cke_toolgroup [{lightGradient}border-color:{defaultBorder};] {id} a.cke_button_off:hover, {id} a.cke_button_off:focus, {id} a.cke_button_off:active [{mediumGradient}] {id} .cke_button_on [{ckeButtonOn}] {id} .cke_toolbar_separator [background-color: {ckeToolbarSeparator};] {id} .cke_combo_button [border-color:{defaultBorder};{lightGradient}] {id} a.cke_combo_button:hover, {id} a.cke_combo_button:focus, {id} .cke_combo_on a.cke_combo_button [border-color:{defaultBorder};{mediumGradient}] {id} .cke_path_item [color:{elementsPathColor};] {id} a.cke_path_item:hover, {id} a.cke_path_item:focus, {id} a.cke_path_item:active [background-color:{elementsPathBg};] {id}.cke_panel [border-color:{defaultBorder};] " ) ,
panel : new CKEDITOR . template ( ".cke_panel_grouptitle [{lightGradient}border-color:{defaultBorder};] .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [background-color:{menubuttonIconHover};] .cke_menuseparator [background-color:{menubuttonIcon};] a:hover.cke_colorbox, a:focus.cke_colorbox, a:active.cke_colorbox [border-color:{defaultBorder};] a:hover.cke_colorauto, a:hover.cke_colormore, a:focus.cke_colorauto, a:focus.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [background-color:{ckeColorauto};border-color:{defaultBorder};] " ) } ;
return function ( g , e ) { var a = g . uiColor , a = { id : "." + g . id , defaultBorder : b ( a , - 0.1 ) , defaultGradient : c ( b ( a , 0.9 ) , a ) , lightGradient : c ( b ( a , 1 ) , b ( a , 0.7 ) ) , mediumGradient : c ( b ( a , 0.8 ) , b ( a , 0.5 ) ) , ckeButtonOn : c ( b ( a , 0.6 ) , b ( a , 0.7 ) ) , ckeResizer : b ( a , - 0.4 ) , ckeToolbarSeparator : b ( a , 0.5 ) , ckeColorauto : b ( a , 0.8 ) , dialogBody : b ( a , 0.7 ) , dialogTabSelected : c ( "#FFFFFF" , "#FFFFFF" ) , dialogTabSelectedBorder : "#FFF" , elementsPathColor : b ( a , - 0.6 ) , elementsPathBg : a , menubuttonIcon : b ( a , 0.5 ) , menubuttonIconHover : b ( a , 0.3 ) } ; return f [ e ] . output ( a ) . replace ( /\[/g ,
"{" ) . replace ( /\]/g , "}" ) } } ( ) ; 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 ( ) !=
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 ( ) } ) } ,
this ) } , this ) , this . _ . domOnChangeRegistered = ! 0 ) ; this . on ( "change" , a ) } } , ! 0 ) , x = /^on([A-Z]\w+)/ , t = function ( b ) { for ( var a in b ) ( x . test ( a ) || "title" == a || "type" == a ) && delete b [ a ] ; return b } , w = function ( b ) { b = b . data . getKeystroke ( ) ; b == CKEDITOR . SHIFT + CKEDITOR . ALT + 36 ? this . setDirectionMarker ( "ltr" ) : b == CKEDITOR . SHIFT + CKEDITOR . ALT + 35 && this . setDirectionMarker ( "rtl" ) } ; CKEDITOR . tools . extend ( CKEDITOR . ui . dialog , { labeledElement : function ( b , a , d , f ) { if ( ! ( 4 > arguments . length ) ) { var c = h . call ( this , a ) ; c . labelId = CKEDITOR . tools . getNextId ( ) +
"_label" ; this . _ . children = [ ] ; var e = { role : a . role || "presentation" } ; a . includeLabel && ( e [ "aria-labelledby" ] = c . labelId ) ; CKEDITOR . ui . dialog . uiElement . call ( this , b , a , d , "div" , null , e , function ( ) { var e = [ ] , g = a . required ? " cke_required" : "" ; "horizontal" != a . labelLayout ? e . push ( '\x3clabel class\x3d"cke_dialog_ui_labeled_label' + g + '" ' , ' id\x3d"' + c . labelId + '"' , c . inputId ? ' for\x3d"' + c . inputId + '"' : "" , ( a . labelStyle ? ' style\x3d"' + a . labelStyle + '"' : "" ) + "\x3e" , a . label , "\x3c/label\x3e" , '\x3cdiv class\x3d"cke_dialog_ui_labeled_content"' ,
@@ -697,8 +689,8 @@ if("number"==typeof this.duration)a=this.duration;else if("info"==this.type||"su
b ) ; 0 > a || ( this . notifications . splice ( a , 1 ) , b . element . remove ( ) , this . element . getChildCount ( ) || ( this . _removeListeners ( ) , this . element . remove ( ) ) ) } , _createElement : function ( ) { var b = this . editor , a = b . config , c = new CKEDITOR . dom . element ( "div" ) ; c . addClass ( "cke_notifications_area" ) ; c . setAttribute ( "id" , "cke_notifications_area_" + b . name ) ; c . setStyle ( "z-index" , a . baseFloatZIndex - 2 ) ; return c } , _attachListeners : function ( ) { var b = CKEDITOR . document . getWindow ( ) , a = this . editor ; b . on ( "scroll" , this . _uiBuffer . input ) ; b . on ( "resize" , this . _uiBuffer . input ) ;
a . on ( "change" , this . _changeBuffer . input ) ; a . on ( "floatingSpaceLayout" , this . _layout , this , null , 20 ) ; a . on ( "blur" , this . _layout , this , null , 20 ) } , _removeListeners : function ( ) { var b = CKEDITOR . document . getWindow ( ) , a = this . editor ; b . removeListener ( "scroll" , this . _uiBuffer . input ) ; b . removeListener ( "resize" , this . _uiBuffer . input ) ; a . removeListener ( "change" , this . _changeBuffer . input ) ; a . removeListener ( "floatingSpaceLayout" , this . _layout ) ; a . removeListener ( "blur" , this . _layout ) } , _layout : function ( ) { function b ( ) { a . setStyle ( "left" ,
k ( n + d . width - g - h ) ) } var a = this . element , c = this . editor , d = c . ui . contentsElement . getClientRect ( ) , e = c . ui . contentsElement . getDocumentPosition ( ) , f , l , u = a . getClientRect ( ) , m , g = this . _notificationWidth , h = this . _notificationMargin ; m = CKEDITOR . document . getWindow ( ) ; var p = m . getScrollPosition ( ) , t = m . getViewPaneSize ( ) , q = CKEDITOR . document . getBody ( ) , r = q . getDocumentPosition ( ) , k = CKEDITOR . tools . cssLength ; g && h || ( m = this . element . getChild ( 0 ) , g = this . _notificationWidth = m . getClientRect ( ) . width , h = this . _notificationMargin = parseInt ( m . getComputedStyle ( "margin-left" ) ,
10 ) + parseInt ( m . getComputedStyle ( "margin-right" ) , 10 ) ) ; c . toolbar && ( f = c . ui . space ( "top" ) , l = f . getClientRect ( ) ) ; f && f . isVisible ( ) && l . bottom > d . top && l . bottom < d . bottom - u . height ? a . setStyles ( { position : "fixed" , top : k ( l . bottom ) } ) : 0 < d . top ? a . setStyles ( { position : "absolute" , top : k ( e . y ) } ) : e . y + d . height - u . height > p . y ? a . setStyles ( { position : "fixed" , top : 0 } ) : a . setStyles ( { position : "absolute" , top : k ( e . y + d . height - u . height ) } ) ; var n = "fixed" == a . getStyle ( "position" ) ? d . left : "static" != q . getComputedStyle ( "position" ) ? e . x - r . x : e . x ; d . width <
g + h ? e . x + g + h > p . x + t . width ? b ( ) : a . setStyle ( "left" , k ( n ) ) : e . x + g + h > p . x + t . width ? a . setStyle ( "left" , k ( n ) ) : e . x + d . width / 2 + g / 2 + h > p . x + t . width ? a . setStyle ( "left" , k ( n - e . x + p . x + t . width - g - h ) ) : 0 > d . left + d . width - g - h ? b ( ) : 0 > d . left + d . width / 2 - g / 2 ? a . setStyle ( "left" , k ( n - e . x + p . x ) ) : a . setStyle ( "left" , k ( n + d . width / 2 - g / 2 - h / 2 ) ) } } ; CKEDITOR . plugins . notification = q } ) ( ) ; ( function ( ) { function D ( a ) { function d ( ) { for ( var b = f ( ) , e = CKEDITOR . tools . clone ( a . config . toolbarGroups ) || v ( a ) , n = 0 ; n < e . length ; n ++ ) { var g = e [ n ] ; if ( "/" != g ) { "string" == typeof g && ( g = e [ n ] = { name : g } ) ; var l , d = g . groups ; if ( d ) for ( var h = 0 ; h < d . length ; h ++ ) l = d [ h ] , ( l = b [ l ] ) && c ( g , l ) ; ( l = b [ g . name ] ) && c ( g , l ) } } return e } function f ( ) { var b = { } , c , e , g ; for ( c in a . ui . items ) e = a . ui . items [ c ] , g = e . toolbar || "others" , g = g . split ( "," ) , e = g [ 0 ] , g = parseInt ( g [ 1 ] || - 1 , 10 ) , b [ e ] || ( b [ e ] = [ ] ) , b [ e ] . push ( { name : c , order : g } ) ; for ( e in b ) b [ e ] = b [ e ] . sort ( function ( b ,
10 ) + parseInt ( m . getComputedStyle ( "margin-right" ) , 10 ) ) ; c . toolbar && ( f = c . ui . space ( c . config . toolbarLocation ) , l = f . getClientRect ( ) ) ; f && f . isVisible ( ) && l . bottom > d . top && l . bottom < d . bottom - u . height ? a . setStyles ( { position : "fixed" , top : k ( l . bottom ) } ) : 0 < d . top ? a . setStyles ( { position : "absolute" , top : k ( e . y ) } ) : e . y + d . height - u . height > p . y ? a . setStyles ( { position : "fixed" , top : 0 } ) : a . setStyles ( { position : "absolute" , top : k ( e . y + d . height - u . height ) } ) ; var n = "fixed" == a . getStyle ( "position" ) ? d . left : "static" != q . getComputedStyle ( "position" ) ?
e . x - r . x : e . x ; d . width < g + h ? e . x + g + h > p . x + t . width ? b ( ) : a . setStyle ( "left" , k ( n ) ) : e . x + g + h > p . x + t . width ? a . setStyle ( "left" , k ( n ) ) : e . x + d . width / 2 + g / 2 + h > p . x + t . width ? a . setStyle ( "left" , k ( n - e . x + p . x + t . width - g - h ) ) : 0 > d . left + d . width - g - h ? b ( ) : 0 > d . left + d . width / 2 - g / 2 ? a . setStyle ( "left" , k ( n - e . x + p . x ) ) : a . setStyle ( "left" , k ( n + d . width / 2 - g / 2 - h / 2 ) ) } } ; CKEDITOR . plugins . notification = q } ) ( ) ; ( function ( ) { function D ( a ) { function d ( ) { for ( var b = f ( ) , e = CKEDITOR . tools . clone ( a . config . toolbarGroups ) || v ( a ) , n = 0 ; n < e . length ; n ++ ) { var g = e [ n ] ; if ( "/" != g ) { "string" == typeof g && ( g = e [ n ] = { name : g } ) ; var l , d = g . groups ; if ( d ) for ( var h = 0 ; h < d . length ; h ++ ) l = d [ h ] , ( l = b [ l ] ) && c ( g , l ) ; ( l = b [ g . name ] ) && c ( g , l ) } } return e } function f ( ) { var b = { } , c , e , g ; for ( c in a . ui . items ) e = a . ui . items [ c ] , g = e . toolbar || "others" , g = g . split ( "," ) , e = g [ 0 ] , g = parseInt ( g [ 1 ] || - 1 , 10 ) , b [ e ] || ( b [ e ] = [ ] ) , b [ e ] . push ( { name : c , order : g } ) ; for ( e in b ) b [ e ] = b [ e ] . sort ( function ( b ,
a ) { return b . order == a . order ? 0 : 0 > a . order ? - 1 : 0 > b . order ? 1 : b . order < a . order ? - 1 : 1 } ) ; return b } function c ( c , e ) { if ( e . length ) { c . items ? c . items . push ( a . ui . create ( "-" ) ) : c . items = [ ] ; for ( var d ; d = e . shift ( ) ; ) d = "string" == typeof d ? d : d . name , b && - 1 != CKEDITOR . tools . indexOf ( b , d ) || ( d = a . ui . create ( d ) ) && a . addFeature ( d ) && c . items . push ( d ) } } function h ( b ) { var a = [ ] , e , d , h ; for ( e = 0 ; e < b . length ; ++ e ) d = b [ e ] , h = { } , "/" == d ? a . push ( d ) : CKEDITOR . tools . isArray ( d ) ? ( c ( h , CKEDITOR . tools . clone ( d ) ) , a . push ( h ) ) : d . items && ( c ( h , CKEDITOR . tools . clone ( d . items ) ) ,
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 = [ ] ; this . focusCommandExecuted = ! 1 } ; 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 && ( a . toolbox . focusCommandExecuted = ! 0 , CKEDITOR . env . ie || CKEDITOR . env . air ? setTimeout ( function ( ) { a . toolbox . focus ( ) } ,
@@ -964,51 +956,50 @@ null)},this),c.length===d.length))))for(b=0;b<c.length;b++)0===c[b].indexOf("fil
"undefined" !== typeof b . notification ? b . notification : ! 0 } ) } } ) ; CKEDITOR . plugins . clipboard . addPasteButton ( a , "PasteFromWord" , { label : a . lang . pastefromword . toolbar , command : "pastefromword" , toolbar : "clipboard,50" } ) ; a . pasteTools . register ( { filters : a . config . pasteFromWordCleanupFile ? [ a . config . pasteFromWordCleanupFile ] : f , canHandle : function ( a ) { a = CKEDITOR . plugins . pastetools . getClipboardData ( a . data , "text/html" ) ; var b = CKEDITOR . plugins . pastetools . getContentGeneratorName ( a ) , c = /(class="?Mso|style=["'][^"]*?\bmso\-|w:WordDocument|<o:\w+>|<\/font>)/ ,
b = b ? "microsoft" === b : c . test ( a ) ; return a && ( e || b ) } , handle : function ( f , b ) { var c = f . data , d = CKEDITOR . plugins . pastetools . getClipboardData ( c , "text/html" ) , g = CKEDITOR . plugins . pastetools . getClipboardData ( c , "text/rtf" ) , d = { dataValue : d , dataTransfer : { "text/rtf" : g } } ; if ( ! 1 !== a . fire ( "pasteFromWord" , d ) || e ) { c . dontFilter = ! 0 ; if ( e || ! a . config . pasteFromWordPromptCleanup || confirm ( a . lang . pastefromword . confirmCleanup ) ) d . dataValue = CKEDITOR . cleanWord ( d . dataValue , a ) , a . fire ( "afterPasteFromWord" , d ) , c . dataValue = d . dataValue , ! 0 === a . config . forcePasteAsPlainText ?
c . type = "text" : CKEDITOR . plugins . clipboard . isCustomCopyCutSupported || "allow-word" !== a . config . forcePasteAsPlainText || ( c . type = "html" ) ; e = 0 ; b ( ) } } } ) ; if ( CKEDITOR . plugins . clipboard . isCustomDataTypesSupported && k ) a . on ( "afterPasteFromWord" , g ) } } ) } ) ( ) ; ( function ( ) { var f = { canUndo : ! 1 , async : ! 0 , exec : function ( a , b ) { var c = a . lang , e = CKEDITOR . tools . keystrokeToString ( c . common . keyboard , a . getCommandKeystroke ( CKEDITOR . env . ie ? a . commands . paste : this ) ) , d = b && "undefined" !== typeof b . notification ? b . notification : ! b || ! b . from || "keystrokeHandler" === b . from && CKEDITOR . env . ie , c = d && "string" === typeof d ? d : c . pastetext . pasteNotification . replace ( /%1/ , '\x3ckbd aria-label\x3d"' + e . aria + '"\x3e' + e . display + "\x3c/kbd\x3e" ) ; a . execCommand ( "paste" , { type : "text" , notification : d ? c : ! 1 } ) } } ; CKEDITOR . plugins . add ( "pastetext" ,
{ requires : "clipboard" , init : function ( a ) { var b = CKEDITOR . env . safari ? CKEDITOR . CTRL + CKEDITOR . ALT + CKEDITOR . SHIFT + 86 : CKEDITOR . CTRL + CKEDITOR . SHIFT + 86 ; a . addCommand ( "pastetext" , f ) ; a . setKeystroke ( b , "pastetext" ) ; CKEDITOR . plugins . clipboard . addPasteButton ( a , "PasteText" , { label : a . lang . pastetext . button , command : "pastetext" , toolbar : "clipboard,40" } ) ; if ( a . config . forcePasteAsPlainText ) a . on ( "beforePaste" , function ( a ) { "html" != a . data . type && ( a . data . type = "text" ) } ) ; a . on ( "pasteState" , function ( b ) { a . getCommand ( "pastetext" ) . setState ( b . data ) } ) } } ) } ) ( ) ; CKEDITOR . plugins . add ( "scayt" , { requires : "menubutton,dialog" , tabToOpen : null , dialogName : "scaytDialog" , onLoad : function ( a ) { "moono-lisa" == ( CKEDITOR . skinName || a . config . skin ) && CKEDITOR . document . appendStyleSheet ( CKEDITOR . getUrl ( this . path + "skins/" + CKEDITOR . skin . name + "/scayt.css" ) ) ; CKEDITOR . document . appendStyleSheet ( CKEDITOR . getUrl ( this . path + "dialogs/dialog.css" ) ) } , init : function ( a ) { var c = this , d = CKEDITOR . plugins . scayt ; this . bindEvents ( a ) ; this . parseConfig ( a ) ; this . addRule ( a ) ; CKEDITOR . dialog . add ( this . dialogName ,
CKEDITOR . getUrl ( this . path + "dialogs/options.js" ) ) ; this . addMenuItems ( a ) ; var b = a . lang . scayt , e = CKEDITOR . env ; a . ui . add ( "Scayt" , CKEDITOR . UI _MENUBUTTON , { label : b . text _title , title : a . plugins . wsc ? a . lang . wsc . title : b . text _title , modes : { wysiwyg : ! ( e . ie && ( 8 > e . version || e . quirks ) ) } , toolbar : "spellchecker,20" , refresh : function ( ) { var b = a . ui . instances . Scayt . getState ( ) ; a . scayt && ( b = d . state . scayt [ a . name ] ? CKEDITOR . TRISTATE _ON : CKEDITOR . TRISTATE _OFF ) ; a . fire ( "scaytButtonState" , b ) } , onRender : function ( ) { var b = this ; a . on ( "scaytButtonState" ,
function ( a ) { void 0 !== typeof a . data && b . setState ( a . data ) } ) } , onMenu : function ( ) { var b = a . scayt ; a . getMenuItem ( "scaytToggle" ) . label = a . lang . scayt [ b && d . state . scayt [ a . name ] ? "btn_disable" : "btn_enable" ] ; var c = { scaytToggle : CKEDITOR . TRISTATE _OFF , scaytOptions : b ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED , scaytLangs : b ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED , scaytDict : b ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED , scaytAbout : b ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED , WSC : a . plugins . wsc ? CKEDITOR . TRISTATE _OFF :
CKEDITOR . TRISTATE _DISABLED } ; a . config . scayt _uiTabs [ 0 ] || delete c . scaytOptions ; a . config . scayt _uiTabs [ 1 ] || delete c . scaytLangs ; a . config . scayt _uiTabs [ 2 ] || delete c . scaytDict ; b && ! CKEDITOR . plugins . scayt . isNewUdSupported ( b ) && ( delete c . scaytDict , a . config . scayt _uiTabs [ 2 ] = 0 , CKEDITOR . plugins . scayt . alarmCompatibilityMessage ( ) ) ; return c } } ) ; a . contextMenu && a . addMenuItems && ( a . contextMenu . addListener ( function ( b , d ) { var e = a . scayt , l , m ; e && ( m = e . getSelectionNode ( ) ) && ( l = c . menuGenerator ( a , m ) , e . showBanner ( "." + a . contextMenu . _ . definition . panel . className . split ( " " ) . join ( " ." ) ) ) ;
return l } ) , a . contextMenu . _ . onHide = CKEDITOR . tools . override ( a . contextMenu . _ . onHide , function ( b ) { return function ( ) { var d = a . scayt ; d && d . hideBanner ( ) ; return b . apply ( this ) } } ) ) } , addMenuItems : function ( a ) { var c = this , d = CKEDITOR . plugins . scayt ; a . addMenuGroup ( "scaytButton" ) ; for ( var b = a . config . scayt _contextMenuItemsOrder . split ( "|" ) , e = 0 ; e < b . length ; e ++ ) b [ e ] = "scayt_" + b [ e ] ; if ( ( b = [ "grayt_description" , "grayt_suggest" , "grayt_control" ] . concat ( b ) ) && b . length ) for ( e = 0 ; e < b . length ; e ++ ) a . addMenuGroup ( b [ e ] , e - 10 ) ; a . addCommand ( "scaytToggle" ,
{ exec : function ( a ) { var b = a . scayt ; d . state . scayt [ a . name ] = ! d . state . scayt [ a . name ] ; ! 0 === d . state . scayt [ a . name ] ? b || d . createScayt ( a ) : b && d . destroy ( a ) } } ) ; a . addCommand ( "scaytAbout " , { exec : function ( a ) { a . scayt . tabToOpen = "about" ; d . openDialog ( c . dialogName , a ) } } ) ; a . addCommand ( "scaytOptions" , { exec : function ( a ) { a . scayt . tabToOpen = "o ptions "; d . openDialog ( c . dialogName , a ) } } ) ; a . addCommand ( "scaytLangs" , { exec : function ( a ) { a . scayt . tabToOpen = "langs" ; d . openDialog ( c . dialogName , a ) } } ) ; a . addCommand ( "scaytDict " , { exec : function ( a ) { a . scayt . tabToOpen =
"dictionaries" ; d . openDialog ( c . dialogName , a ) } } ) ; b = { scaytToggle : { label : a . lang . scayt . btn _enable , group : "scaytButton" , command : "scaytToggle" } , scaytAbout : { label : a . lang . scayt . btn _about , group : "scaytButton" , command : "scaytAbout" } , scaytOptions : { label : a . lang . scayt . btn _options , group : "scaytButton" , command : "scaytOptions" } , scaytLangs : { label : a . lang . scayt . btn _langs , group : "scaytButton" , command : "scaytLangs" } , scaytDict : { label : a . lang . scayt . btn _dictionaries , group : "scaytButton" , command : "scaytDict" } } ; a . plugins . wsc && ( b . WSC =
{ label : a . lang . wsc . toolbar , group : "scaytButton" , onClick : function ( ) { var b = CKEDITOR . plugins . scayt , d = a . scayt , c = a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? a . container . getText ( ) : a . document . getBody ( ) . getText ( ) ; ( c = c . replace ( /\s/g , " ") ) ? ( d && b . state . scayt [ a . name ] && d . setMarkupPaused && d . setMarkupPaused ( ! 0 ) , a . lockSelection ( ) , a . execCommand ( "checkspell" ) ) : alert ( "Nothing to check!" ) } } ) ; a . addMenuItems ( b ) } , bindEvents : function ( a ) { var c = CKEDITOR . plugins . scayt , d = a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE , b = function ( ) { c . destroy ( a ) } ,
e = function ( ) { ! c . state . scayt [ a . name ] || a . readOnly || a . scayt || c . createScayt ( a ) } , f = function ( ) { var b = a . editable ( ) ; b . attachListener ( b , "focus" , function ( b ) { CKEDITOR . plugins . scayt && ! a . scayt && setTimeout ( e , 0 ) ; b = CKEDITOR . plugins . scayt && CKEDITOR . plugins . scayt . state . scayt [ a . name ] && a . scayt ; var c , k ; if ( ( d || b ) && a . _ . savedSelection ) { b = a . _ . savedSelection . getSelectedElement ( ) ; b = ! b && a . _ . savedSelection . getRanges ( ) ; for ( var h = 0 ; h < b . length ; h ++ ) k = b [ h ] , "string" === typeof k . startContainer . $ . nodeValue && ( c = k . startContainer . getText ( ) . length ,
( c < k . startOffset || c < k . endOffset ) && a . unlockSelection ( ! 1 ) ) } } , this , null , - 10 ) } , g = function ( ) { d ? a . config . scayt _inlineModeImmediateMarkup ? e ( ) : ( a . on ( "blur" , function ( ) { setTimeout ( b , 0 ) } ) , a . on ( "focus" , e ) , a . focusManager . hasFocus && e ( ) ) : e ( ) ; f ( ) ; var c = a . editable ( ) ; c . attachListener ( c , "mousedown" , function ( b ) { b = b . data . getTarget ( ) ; var d = a . widgets && a . widgets . getByElement ( b ) ; d && ( d . wrapper = b . getAscendant ( function ( a ) { return a . hasAttribute ( "data-cke-widget-wrapper" ) } , ! 0 ) ) } , this , null , - 10 ) } ; a . on ( "contentDom" , g ) ; a . on ( "beforeCommandExec" ,
function ( b ) { var d = a . scayt , e = ! 1 , f = ! 1 , h = ! 0 ; b . data . name in c . options . disablingCommandExec && "wysiwyg" == a . mode ? d && ( c . destroy ( a ) , a . fire ( "scaytButtonState" , CKEDITOR . TRISTATE _DISABLED ) ) : "bold" !== b . data . name && "italic" !== b . data . name && "underline" !== b . data . name && "strike" !== b . data . name && "subscript" !== b . data . name && "superscript" !== b . data . name && "enter" !== b . data . name && "cut" !== b . data . name && "language" !== b . data . name || ! d || ( "cut" === b . data . name && ( h = ! 1 , f = ! 0 ) , "language" === b . data . name && ( f = e = ! 0 ) , a . fire ( "reloadMarkupScayt" ,
{ removeOptions : { removeInside : h , forceBookmark : f , language : e } , timeout : 0 } ) ) } ) ; a . on ( "beforeSetMode" , function ( b ) { if ( "source" == b . data ) { if ( b = a . scayt ) c . destroy ( a ) , a . fire ( "scaytButtonState" , CKEDITOR . TRISTATE _DISABLED ) ; a . document && a . document . getBody ( ) . removeAttribute ( "_jquid" ) } } ) ; a . on ( "afterCommandExec" , function ( b ) { "wysiwyg" != a . mode || "undo "!= b . data . name && "redo " != b . data . name || setTimeout ( function ( ) { c . reloadMarkup ( a . scayt ) } , 250 ) } ) ; a . on ( "readOnly" , function ( b ) { var d ; b && ( d = a . scayt , ! 0 === b . editor . readOnly ? d && d . fire ( "removeMarkupInDocument ",
{ } ) : d ? c . reloadMarkup ( d ) : "wysiwyg" == b . editor . mode && ! 0 === c . state . scayt [ b . editor . name ] && ( c . createScayt ( a ) , b . editor . fire ( "scaytButtonState" , CKEDITOR . TRISTATE _ON ) ) ) } ) ; a . on ( "beforeDestroy" , b ) ; a . on ( "setData" , function ( ) { b ( ) ; ( a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE || a . plugins . divarea ) && g ( ) } , this , null , 50 ) ; a . on ( "reloadMarkupScayt" , function ( b ) { var d = b . data && b . data . removeOptions , e = b . data && b . data . timeout , f = b . data && b . data . language , h = a . scayt ; h && setTimeout ( function ( ) { f && ( d . selectionNode = a . plugins . language . getCurrentLangElement ( a ) ,
d . selectionNode = d . selectionNode && d . selectionNode . $ || null ) ; h . removeMarkupInSelectionNode ( d ) ; c . reloadMarkup ( h ) } , e || 0 ) } ) ; a . on ( "insertElement " , function ( ) { a . fire ( "reloadMarkupScayt" , { removeOptions : { forceBookmark : ! 0 } } ) } , this , null , 50 ) ; a . on ( "insertHtml" , function ( ) { a . scayt && a . scayt . setFocused && a . scayt . setFocused ( ! 0 ) ; a . fire ( "reloadMarkupScayt" ) } , this , null , 50 ) ; a . on ( "insertTex t" , function ( ) { a . scayt && a . scayt . setFocused && a . scayt . setFocused ( ! 0 ) ; a . fire ( "reloadMarkupScayt" ) } , this , null , 50 ) ; a . on ( "scaytDialogShown" , function ( b ) { b . data . selectPage ( a . scayt . tabToOpen ) } ) } ,
parseConfig : function ( a ) { var c = CKEDITOR . plugins . scayt ; c . replaceOldOptionsNames ( a . config ) ; "boolean" !== typeof a . config . scayt _autoStartup && ( a . config . scayt _autoStartup = ! 1 ) ; c . state . scayt [ a . name ] = a . config . scayt _autoStartup ; "boolean" !== typeof a . config . grayt _autoStartup && ( a . config . grayt _autoStartup = ! 1 ) ; "boolean" !== typeof a . config . scayt _inlineModeImmediateMarkup && ( a . config . scayt _inlineModeImmediateMarkup = ! 1 ) ; c . state . grayt [ a . name ] = a . config . grayt _autoStartup ; a . config . scayt _contextCommands || ( a . config . scayt _contextCommands =
"ignoreall|add" ) ; a . config . scayt _contextMenuItemsOrder || ( a . config . scayt _contextMenuItemsOrder = "suggest|moresuggest|control" ) ; a . config . scayt _sLang || ( a . config . scayt _sLang = "en_US" ) ; if ( void 0 === a . config . scayt _maxSuggestions || "number "!= typeof a . config . scayt _maxSuggestions || 0 > a . config . scayt _maxSuggestions ) a . config . scayt _maxSuggestions = 3 ; if ( void 0 === a . config . scayt _minWordLength || "number "!= typeof a . config . scayt _minWordLength || 1 > a . config . scayt _minWordLength ) a . config . scayt _minWordLength = 3 ; if ( void 0 = ==a . config . scayt _customDictionaryIds ||
"string" !== typeof a . config . scayt _customDictionaryIds ) a . config . scayt _customDictionaryIds = "" ; if ( void 0 === a . config . scayt _userDictionaryName || "string" !== typeof a . config . scayt _userDictionaryName ) a . config . scayt _userDictionaryName = null ; if ( "string" === typeof a . config . scayt _uiTabs && 3 === a . config . scayt _uiTabs . split ( "," ) . length ) { var d = [ ] , b = [ ] ; a . config . scayt _uiTabs = a . config . scayt _uiTabs . split ( "," ) ; CKEDITOR . tools . search ( a . config . scayt _uiTabs , function ( a ) { 1 === Number ( a ) || 0 === Number ( a ) ? ( b . push ( ! 0 ) , d . push ( Number ( a ) ) ) :
b . push ( ! 1 ) } ) ; null === CKEDITOR . tools . search ( b , ! 1 ) ? a . config . scayt _uiTabs = d : a . config . scayt _uiTabs = [ 1 , 1 , 1 ] } else a . config . scayt _uiTabs = [ 1 , 1 , 1 ] ; "string" != typeof a . config . scayt _serviceProtocol && ( a . config . scayt _serviceProtocol = null ) ; "string" != typeof a . config . scayt _serviceHost && ( a . config . scayt _serviceHost = null ) ; "string" != typeof a . config . scayt _servicePort && ( a . config . scayt _servicePort = null ) ; "string" ! =typeof a . config . scayt _servicePath && ( a . config . scayt _servicePath = null ) ; a . config . scayt _moreSuggestions || ( a . config . scayt _moreSuggestions =
"on" ) ; "string" !== typeof a . config . scayt _customerId && ( a . config . scayt _customerId = "1:WvF0D4-UtPqN1-43nkD4-NKvUm2-daQqk3-LmNiI-z7Ysb4-mwry24-T8YrS3-Q2tpq2" ) ; "string" !== typeof a . config . scayt _customPunctuation && ( a . config . scayt _customPunctuation = "-" ) ; "string" !== typeof a . config . scayt _srcUrl && ( c = document . location . protocol , c = - 1 != c . search ( /https?:/ ) ? c : "http:" , a . config . scayt _srcUrl = c + "//svc.webspellchecker.net/spellcheck31/wscbundle/wscbundle.js" ) ; "boolean " !== typeof CKEDITOR . config . scayt _handleCheckDirty && ( CKEDITOR . config . scayt _handleCheckDirty =
! 0 ) ; "boolean " !== typeof CKEDITOR . config . scayt _handleUndoRedo && ( CKEDITOR . config . scayt _handleUndoRedo = ! 0 ) ; CKEDITOR . config . scayt _handleUndoRedo = CKEDITOR . plugins . undo ? CKEDITOR . config . scayt _handleUndoRedo : ! 1 ; "boolean "!== typeof a . config . scayt _multiLanguageMode && ( a . config . scayt _multiLanguageMode = ! 1 ) ; "object " !== typeof a . config . scayt _multiLanguageStyles && ( a . config . scayt _multiLanguageStyles = { } ) ; a . config . scayt _ignoreAllCapsWords && "boolean "!== typeof a . config . scayt _ignoreAllCapsWords && ( a . config . scayt _ignoreAllCapsWords =
{ requires : "clipboard" , init : function ( a ) { var b = CKEDITOR . env . safari ? CKEDITOR . CTRL + CKEDITOR . ALT + CKEDITOR . SHIFT + 86 : CKEDITOR . CTRL + CKEDITOR . SHIFT + 86 ; a . addCommand ( "pastetext" , f ) ; a . setKeystroke ( b , "pastetext" ) ; CKEDITOR . plugins . clipboard . addPasteButton ( a , "PasteText" , { label : a . lang . pastetext . button , command : "pastetext" , toolbar : "clipboard,40" } ) ; if ( a . config . forcePasteAsPlainText ) a . on ( "beforePaste" , function ( a ) { "html" != a . data . type && ( a . data . type = "text" ) } ) ; a . on ( "pasteState" , function ( b ) { a . getCommand ( "pastetext" ) . setState ( b . data ) } ) } } ) } ) ( ) ; CKEDITOR . plugins . add ( "scayt" , { requires : "menubutton,dialog" , tabToOpen : null , dialogName : "scaytDialog" , onLoad : function ( a ) { "moono-lisa" == ( CKEDITOR . skinName || a . config . skin ) && CKEDITOR . document . appendStyleSheet ( CKEDITOR . getUrl ( this . path + "skins/" + CKEDITOR . skin . name + "/scayt.css" ) ) ; CKEDITOR . document . appendStyleSheet ( CKEDITOR . getUrl ( this . path + "dialogs/dialog.css" ) ) ; var c = ! 1 ; CKEDITOR . on ( "instanceLoaded" , function ( a ) { if ( ! c && CKEDITOR . plugins . autocomplete ) { c = ! 0 ; var b = CKEDITOR . plugins . autocomplete . prototype . getModel ;
CKEDITOR . plugins . autocomplete . prototype . getModel = function ( a ) { var d = this . editor ; a = b . bind ( this ) ( a ) ; a . on ( "change-isActive" , function ( a ) { a . data ? d . fire ( "autocompletePanelShow" ) : d . fire ( "autocompletePanelHide" ) } ) ; return a } } } ) } , init : function ( a ) { var c = this , d = CKEDITOR . plugins . scayt ; this . bindEvents ( a ) ; this . parseConfig ( a ) ; this . addRule ( a ) ; CKEDITOR . dialog . add ( this . dialogName , CKEDITOR . getUrl ( this . path + "dialogs/options.js" ) ) ; this . addMenuItems ( a ) ; var b = a . lang . scayt , e = CKEDITOR . env ; a . ui . add ( "Scayt" , CKEDITOR . UI _MENUBUTTON ,
{ label : b . text _title , title : a . plugins . wsc ? a . lang . wsc . title : b . text _title , modes : { wysiwyg : ! ( e . ie && ( 8 > e . version || e . quirks ) ) } , toolbar : "spellchecker,20" , refresh : function ( ) { var b = a . ui . instances . Scayt . getState ( ) ; a . scayt && ( b = d . state . scayt [ a . name ] ? CKEDITOR . TRISTATE _ON : CKEDITOR . TRISTATE _OFF ) ; a . fire ( "scaytButtonState" , b ) } , onRender : function ( ) { var b = this ; a . on ( "scaytButtonState" , function ( a ) { void 0 !== typeof a . data && b . setState ( a . data ) } ) } , onMenu : function ( ) { var b = a . scayt ; a . getMenuItem ( "scaytToggle" ) . label = a . lang . scayt [ b &&
d . state . scayt [ a . name ] ? "btn_disable" : "btn_enable" ] ; var c = { scaytToggle : CKEDITOR . TRISTATE _OFF , scaytOptions : b ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED , scaytLangs : b ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED , scaytDict : b ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED , scaytAbout : b ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED , WSC : a . plugins . wsc ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED } ; a . config . scayt _uiTabs [ 0 ] || delete c . scaytOptions ; a . config . scayt _uiTabs [ 1 ] || delete c . scaytLangs ;
a . config . scayt _uiTabs [ 2 ] || delete c . scaytDict ; b && ! CKEDITOR . plugins . scayt . isNewUdSupported ( b ) && ( delete c . scaytDict , a . config . scayt _uiTabs [ 2 ] = 0 , CKEDITOR . plugins . scayt . alarmCompatibilityMessage ( ) ) ; return c } } ) ; a . contextMenu && a . addMenuItems && ( a . contextMenu . addListener ( function ( b , d ) { var e = a . scayt , l , m ; e && ( m = e . getSelectionNode ( ) ) && ( l = c . menuGenerator ( a , m ) , e . showBanner ( "." + a . contextMenu . _ . definition . panel . className . split ( " " ) . join ( " ." ) ) ) ; return l } ) , a . contextMenu . _ . onHide = CKEDITOR . tools . override ( a . contextMenu . _ . onHide ,
function ( b ) { return function ( ) { var d = a . scayt ; d && d . hideBanner ( ) ; return b . apply ( this ) } } ) ) } , addMenuItems : function ( a ) { var c = this , d = CKEDITOR . plugins . scayt ; a . addMenuGroup ( "scaytButton " ) ; for ( var b = a . config . scayt _contextMenuItemsOrder . split ( "|" ) , e = 0 ; e < b . length ; e ++ ) b [ e ] = "scayt_" + b [ e ] ; if ( ( b = [ "grayt_descri ption", "grayt_suggest" , "grayt_control" ] . concat ( b ) ) && b . length ) for ( e = 0 ; e < b . length ; e ++ ) a . addMenuGroup ( b [ e ] , e - 10 ) ; a . addCommand ( "scaytToggle " , { exec : function ( a ) { var b = a . scayt ; d . state . scayt [ a . name ] = ! d . state . scayt [ a . name ] ;
! 0 === d . state . scayt [ a . name ] ? b || d . createScayt ( a ) : b && d . destroy ( a ) } } ) ; a . addCommand ( "scaytAbout" , { exec : function ( a ) { a . scayt . tabToOpen = "about" ; d . openDialog ( c . dialogName , a ) } } ) ; a . addCommand ( "scaytOptions" , { exec : function ( a ) { a . scayt . tabToOpen = "options" ; d . openDialog ( c . dialogName , a ) } } ) ; a . addCommand ( "scaytLangs" , { exec : function ( a ) { a . scayt . tabToOpen = "langs" ; d . openDialog ( c . dialogName , a ) } } ) ; a . addCommand ( "scaytDict" , { exec : function ( a ) { a . scayt . tabToOpen = "dictionaries" ; d . openDialog ( c . dialogName , a ) } } ) ; b = { scaytToggle : { label : a . lang . scayt . btn _enable ,
group : "scaytButton" , command : "scaytToggle" } , scaytAbout : { label : a . lang . scayt . btn _about , group : "scaytButton" , command : "scaytAbout" } , scaytOptions : { label : a . lang . scayt . btn _options , group : "scaytButton" , command : "scaytOptions "} , scaytLangs : { label : a . lang . scayt . btn _langs , group : "scaytButton" , command : "scaytLangs" } , scaytDict : { label : a . lang . scayt . btn _dictionaries , group : "scaytButton" , command : "scaytDict" } } ; a . plugins . wsc && ( b . WSC = { label : a . lang . wsc . toolbar , group : "scaytButton" , onClick : function ( ) { var b = CKEDITOR . plugins . scayt ,
d = a . scayt , c = a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? a . container . getText ( ) : a . document . getBody ( ) . getText ( ) ; ( c = c . replace ( /\s/g , "" ) ) ? ( d && b . state . scayt [ a . name ] && d . setMarkupPaused && d . setMarkupPaused ( ! 0 ) , a . lockSelection ( ) , a . execCommand ( "checkspell" ) ) : alert ( "Nothing to check!" ) } } ) ; a . addMenuItems ( b ) } , bindEvents : function ( a ) { var c = CKEDITOR . plugins . scayt , d = a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE , b = function ( ) { c . destroy ( a ) } , e = function ( ) { ! c . state . scayt [ a . name ] || a . readOnly || a . scayt || c . createScayt ( a ) } , f = function ( ) { var b =
a . editable ( ) ; b . attachListener ( b , "focus" , function ( b ) { CKEDITOR . plugins . scayt && ! a . scayt && setTimeout ( e , 0 ) ; b = CKEDITOR . plugins . scayt && CKEDITOR . plugins . scayt . state . scayt [ a . name ] && a . scayt ; var c , k ; if ( ( d || b ) && a . _ . savedSelection ) { b = a . _ . savedSelection . getSelectedElement ( ) ; b = ! b && a . _ . savedSelection . getRanges ( ) ; for ( var f = 0 ; f < b . length ; f ++ ) k = b [ f ] , "string" === typeof k . startContainer . $ . nodeValue && ( c = k . startContainer . getText ( ) . length , ( c < k . startOffset || c < k . endOffset ) && a . unlockSelection ( ! 1 ) ) } } , this , null , - 10 ) } , g = function ( ) { d ?
a . config . scayt _inlineModeImmediateMarkup ? e ( ) : ( a . on ( "blur" , function ( ) { setTimeout ( b , 0 ) } ) , a . on ( "focus" , e ) , a . focusManager . hasFocus && e ( ) ) : e ( ) ; f ( ) ; var c = a . editable ( ) ; c . attachListener ( c , "mousedown" , function ( b ) { b = b . data . getTarget ( ) ; var d = a . widgets && a . widgets . getByElement ( b ) ; d && ( d . wrapper = b . getAscendant ( function ( a ) { return a . hasAttribute ( "data-cke-widget-wrapper" ) } , ! 0 ) ) } , this , null , - 10 ) } ; a . on ( "contentDom" , g ) ; a . on ( "beforeCommandExec" , function ( b ) { var d = a . scayt , e = ! 1 , f = ! 1 , h = ! 0 ; b . data . name in c . options . disablingCommandExec &&
"wysiwyg" == a . mode ? d && ( c . destroy ( a ) , a . fire ( "scaytButtonState" , CKEDITOR . TRISTATE _DISABLED ) ) : "bold" !== b . data . name && "italic" !== b . data . name && "underline" !== b . data . name && "strike" !== b . data . name && "subscript" !== b . data . name && "superscript "!== b . data . name && "enter" !== b . data . name && "cut" !== b . data . name && "language "!== b . data . name || ! d || ( "cut" === b . data . name && ( h = ! 1 , f = ! 0 ) , "language" === b . data . name && ( f = e = ! 0 ) , a . fire ( "reloadMarkupScayt" , { removeOptions : { removeInside : h , forceBookmark : f , language : e } , timeout : 0 } ) ) } ) ; a . on ( "beforeSetMode ",
function ( b ) { if ( "source" == b . data ) { if ( b = a . scayt ) c . destroy ( a ) , a . fire ( "scaytButtonState" , CKEDITOR . TRISTATE _DISABLED ) ; a . document && a . document . getBody ( ) . removeAttribute ( "_jquid" ) } } ) ; a . on ( "afterCommandExec" , function ( b ) { "wysiwyg" != a . mode || "undo" != b . data . name && "redo" != b . data . name || setTimeout ( function ( ) { c . reloadMarkup ( a . scayt ) } , 250 ) } ) ; a . on ( "readOnly" , function ( b ) { var d ; b && ( d = a . scayt , ! 0 === b . editor . readOnly ? d && d . fire ( "removeMarkupInDocument" , { } ) : d ? c . reloadMarkup ( d ) : "wysiwyg" == b . editor . mode && ! 0 === c . state . scayt [ b . editor . name ] &&
( c . createScayt ( a ) , b . editor . fire ( "scaytButtonState" , CKEDITOR . TRISTATE _ON ) ) ) } ) ; a . on ( "beforeDestroy " , b ) ; a . on ( "setData" , function ( ) { b ( ) ; ( a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE || a . plugins . divarea ) && g ( ) } , this , null , 50 ) ; a . on ( "reloadMarkupScay t" , function ( b ) { var d = b . data && b . data . removeOptions , e = b . data && b . data . timeout , f = b . data && b . data . language , h = a . scayt ; h && setTimeout ( function ( ) { f && ( d . selectionNode = a . plugins . language . getCurrentLangElement ( a ) , d . selectionNode = d . selectionNode && d . selectionNode . $ || null ) ; h . removeMarkupInSelectionNode ( d ) ;
c . reloadMarkup ( h ) } , e || 0 ) } ) ; a . on ( "insertElement" , function ( ) { a . fire ( "reloadMarkupScayt" , { removeOptions : { forceBookmark : ! 0 } } ) } , this , null , 50 ) ; a . on ( "insertHtml" , function ( ) { a . scayt && a . scayt . setFocused && a . scayt . setFocused ( ! 0 ) ; a . fire ( "reloadMarkupScayt" ) } , this , null , 50 ) ; a . on ( "insertText" , function ( ) { a . scayt && a . scayt . setFocused && a . scayt . setFocused ( ! 0 ) ; a . fire ( "reloadMarkupScayt" ) } , this , null , 50 ) ; a . on ( "scaytDialogShown" , function ( b ) { b . data . selectPage ( a . scayt . tabToOpen ) } ) ; a . on ( "autocompletePanelShow" , function ( b ) { ( b =
a . scayt ) && b . setMarkupPaused && b . setMarkupPaused ( ! 0 ) } ) ; a . on ( "autocompletePanelHide" , function ( b ) { ( b = a . scayt ) && b . setMarkupPaused && b . setMarkupPaused ( ! 1 ) } ) } , parseConfig : function ( a ) { var c = CKEDITOR . plugins . scayt ; c . replaceOldOptionsNames ( a . config ) ; "boolean "!== typeof a . config . scayt _autoStartup && ( a . config . scayt _autoStartup = ! 1 ) ; c . state . scayt [ a . name ] = a . config . scayt _autoStartup ; "boolean "!== typeof a . config . grayt _autoStartup && ( a . config . grayt _autoStartup = ! 1 ) ; "boolean" ! ==typeof a . config . scayt _inlineModeImmediateMarkup &&
( a . config . scayt _inlineModeImmediateMarkup = ! 1 ) ; c . state . grayt [ a . name ] = a . config . grayt _autoStartup ; a . config . scayt _contextCommands || ( a . config . scayt _contextCommands = "ignoreall|add" ) ; a . config . scayt _contextMenuItemsOrder || ( a . config . scayt _contextMenuItemsOrder = "suggest|moresuggest|control" ) ; a . config . scayt _sLang || ( a . config . scayt _sLang = "en_US" ) ; if ( void 0 === a . config . scayt _maxSuggestions || "number" != typeof a . config . scayt _maxSuggestions || 0 > a . config . scayt _maxSuggestions ) a . config . scayt _maxSuggestions = 3 ; if ( void 0 ===
a . config . scayt _minWordLength || "number" != typeof a . config . scayt _minWordLength || 1 > a . config . scayt _minWordLength ) a . config . scayt _minWordLength = 3 ; if ( void 0 === a . config . scayt _customDictionaryIds || "string" !== typeof a . config . scayt _customDictionaryIds ) a . config . scayt _customDictionaryIds = "" ; if ( void 0 === a . config . scayt _userDictionaryName || "string" !== typeof a . config . scayt _userDictionaryName ) a . config . scayt _userDictionaryName = null ; if ( "string" == =typeof a . config . scayt _uiTabs && 3 === a . config . scayt _uiTabs . split ( "," ) . length ) { var d =
[ ] , b = [ ] ; a . config . scayt _uiTabs = a . config . scayt _uiTabs . split ( "," ) ; CKEDITOR . tools . search ( a . config . scayt _uiTabs , function ( a ) { 1 === Number ( a ) || 0 === Number ( a ) ? ( b . push ( ! 0 ) , d . push ( Number ( a ) ) ) : b . push ( ! 1 ) } ) ; null === CKEDITOR . tools . search ( b , ! 1 ) ? a . config . scayt _uiTabs = d : a . config . scayt _uiTabs = [ 1 , 1 , 1 ] } else a . config . scayt _uiTabs = [ 1 , 1 , 1 ] ; "string" != typeof a . config . scayt _serviceProtocol && ( a . config . scayt _serviceProtocol = null ) ; "string" != typeof a . config . scayt _serviceHost && ( a . config . scayt _serviceHost = null ) ; "string " != typeof a . config . scayt _servicePort &&
( a . config . scayt _servicePort = null ) ; "string " != typeof a . config . scayt _servicePath && ( a . config . scayt _servicePath = null ) ; a . config . scayt _moreSuggestions || ( a . config . scayt _moreSuggestions = "on" ) ; "string "!== typeof a . config . scayt _customerId && ( a . config . scayt _customerId = "1:WvF0D4-UtPqN1-43nkD4-NKvUm2-daQqk3-LmNiI-z7Ysb4-mwry24-T8YrS3-Q2tpq2" ) ; "string " !== typeof a . config . scayt _customPunctuation && ( a . config . scayt _customPunctuation = "-" ) ; "string "!== typeof a . config . scayt _srcUrl && ( c = document . location . protocol , c = - 1 != c . search ( /https?:/ ) ?
c : "http:" , a . config . scayt _srcUrl = c + "//svc.webspellchecker.net/spellcheck31/wscbundle/wscbundle.js" ) ; "boolean" !== typeof CKEDITOR . config . scayt _handleCheckDirty && ( CKEDITOR . config . scayt _handleCheckDirty = ! 0 ) ; "boolean" !== typeof CKEDITOR . config . scayt _handleUndoRedo && ( CKEDITOR . config . scayt _handleUndoRedo = ! 0 ) ; CKEDITOR . config . scayt _handleUndoRedo = CKEDITOR . plugins . undo ? CKEDITOR . config . scayt _handleUndoRedo : ! 1 ; a . config . scayt _ignoreAllCapsWords && "boolean" !== typeof a . config . scayt _ignoreAllCapsWords && ( a . config . scayt _ignoreAllCapsWords =
! 1 ) ; a . config . scayt _ignoreDomainNames && "boolean" !== typeof a . config . scayt _ignoreDomainNames && ( a . config . scayt _ignoreDomainNames = ! 1 ) ; a . config . scayt _ignoreWordsWithMixedCases && "boolean" !== typeof a . config . scayt _ignoreWordsWithMixedCases && ( a . config . scayt _ignoreWordsWithMixedCases = ! 1 ) ; a . config . scayt _ignoreWordsWithNumbers && "boolean" !== typeof a . config . scayt _ignoreWordsWithNumbers && ( a . config . scayt _ignoreWordsWithNumbers = ! 1 ) ; if ( a . config . scayt _disableOptionsStorage ) { var c = CKEDITOR . tools . isArray ( a . config . scayt _disableOptionsStorage ) ?
a . config . scayt _disableOptionsStorage : "string" === typeof a . config . scayt _disableOptionsStorage ? [ a . config . scayt _disableOptionsStorage ] : void 0 , e = "all options lang ignore-all-caps-words ignore-domain-names ignore-words-with-mixed-cases ignore-words-with-numbers" . split ( " " ) , f = [ "lang" , "ignore-all-caps-words" , "ignore-domain-names" , "ignore-words-with-mixed-cases" , "ignore-words-with-numbers" ] , g = CKEDITOR . tools . search , k = CKEDITOR . tools . indexOf ; a . config . scayt _disableOptionsStorage = function ( a ) { for ( var b = [ ] , d = 0 ; d <
a . length ; d ++ ) { var c = a [ d ] , p = ! ! g ( a , "options" ) ; if ( ! g ( e , c ) || p && g ( f , function ( a ) { if ( "lang" === a ) return ! 1 } ) ) return ; g ( f , c ) && f . splice ( k ( f , c ) , 1 ) ; if ( "all" === c || p && g ( a , "lang" ) ) return [ ] ; "options" === c && ( f = [ "lang" ] ) } return b = b . concat ( f ) } ( c ) } a . config . scayt _disableCache && "boolean" !== typeof a . config . scayt _disableCache && ( a . config . scayt _disableCache = ! 1 ) ; if ( void 0 === a . config . scayt _cacheSize || "number" != typeof a . config . scayt _cacheSize || 1 > a . config . scayt _cacheSize ) a . config . scayt _cacheSize = 4E3 } , addRule : function ( a ) { var c = CKEDITOR . plugins . scayt ,
d = a . dataProcessor , b = d && d . htmlFilter , e = a . _ . elementsPath && a . _ . elementsPath . filters , d = d && d . dataFilter , f = a . addRemoveFormatFilter , g = function ( b ) { if ( a . scayt && ( b . hasAttribute ( c . options . data _attribute _name ) || b . hasAttribute ( c . options . problem _grammar _data _attribute ) ) ) return ! 1 } , k = function ( b ) { var d = ! 0 ; a . scayt && ( b . hasAttribute ( c . options . data _attribute _name ) || b . hasAttribute ( c . options . problem _grammar _data _attribute ) ) && ( d = ! 1 ) ; return d } ; e && e . push ( g ) ; d && d . addRules ( { elements : { span : function ( a ) { var b = a . hasClass ( c . options . misspelled _word _class ) &&
a . attributes [ c . options . data _attribute _name ] , d = a . hasClass ( c . options . problem _grammar _class ) && a . attributes [ c . options . problem _grammar _data _attribute ] ; c && ( b || d ) && delete a . name ; return a } } } ) ; b && b . addRules ( { elements : { span : function ( a ) { var b = a . hasClass ( c . options . misspelled _word _class ) && a . attributes [ c . options . data _attribute _name ] , d = a . hasClass ( c . options . problem _grammar _class ) && a . attributes [ c . options . problem _grammar _data _attribute ] ; c && ( b || d ) && delete a . name ; return a } } } ) ; f && f . call ( a , k ) } , scaytMenuDefinition : function ( a ) { var c =
this , d = CKEDITOR . plugins . scayt ; a = a . scayt ; return { scayt : { scayt _ignore : { label : a . getLocal ( "btn_ignore" ) , group : "scayt_control" , order : 1 , exec : function ( a ) { a . scayt . ignoreWord ( ) } } , scayt _ignoreall : { label : a . getLocal ( "btn_ignoreAll" ) , group : "scayt_control" , order : 2 , exec : function ( a ) { a . scayt . ignoreAllWords ( ) } } , scayt _add : { label : a . getLocal ( "btn_addWord" ) , group : "scayt_control" , order : 3 , exec : function ( a ) { var d = a . scayt ; setTimeout ( function ( ) { d . addWordToUserDictionary ( ) } , 10 ) } } , scayt _option : { label : a . getLocal ( "btn_options" ) ,
group : "scayt_control" , order : 4 , exec : function ( a ) { a . scayt . tabToOpen = "options" ; d . openDialog ( c . dialogName , a ) } , verification : function ( a ) { return 1 == a . config . scayt _uiTabs [ 0 ] ? ! 0 : ! 1 } } , scayt _language : { label : a . getLocal ( "btn_langs" ) , group : "scayt_control" , order : 5 , exec : function ( a ) { a . scayt . tabToOpen = "langs" ; d . openDialog ( c . dialogName , a ) } , verification : function ( a ) { return 1 == a . config . scayt _uiTabs [ 1 ] ? ! 0 : ! 1 } } , scayt _dictionary : { label : a . getLocal ( "btn_dictionaries" ) , group : "scayt_control" , order : 6 , exec : function ( a ) { a . scayt . tabToOpen =
"dictionaries" ; d . openDialog ( c . dialogName , a ) } , verification : function ( a ) { return 1 == a . config . scayt _uiTabs [ 2 ] ? ! 0 : ! 1 } } , scayt _about : { label : a . getLocal ( "btn_about" ) , group : "scayt_control" , order : 7 , exec : function ( a ) { a . scayt . tabToOpen = "about" ; d . openDialog ( c . dialogName , a ) } } } , grayt : { grayt _problemdescription : { label : "Grammar problem description" , group : "grayt_description" , order : 1 , state : CKEDITOR . TRISTATE _DISABLED , exec : function ( a ) { } } , grayt _ignore : { label : a . getLocal ( "btn_ignore" ) , group : "grayt_control" , order : 2 , exec : function ( a ) { a . scayt . ignorePhrase ( ) } } ,
grayt _ignoreall : { label : a . getLocal ( "btn_ignoreAll" ) , group : "grayt_control" , order : 3 , exec : function ( a ) { a . scayt . ignoreAllPhrases ( ) } } } } } , buildSuggestionMenuItems : function ( a , c , d ) { var b = { } , e = { } , f = d ? "word" : "phrase" , g = d ? "startGrammarCheck" : "startSpellCheck" , k = a . scayt ; if ( 0 < c . length && "no_any_suggestions" !== c [ 0 ] ) if ( d ) for ( d = 0 ; d < c . length ; d ++ ) { var l = "scayt_suggest_" + CKEDITOR . plugins . scayt . suggestions [ d ] . replace ( " " , "_" ) ; a . addCommand ( l , this . createCommand ( CKEDITOR . plugins . scayt . suggestions [ d ] , f , g ) ) ; d < a . config . scayt _maxSuggestions ?
( a . addMenuItem ( l , { label : c [ d ] , command : l , group : "scayt_suggest" , order : d + 1 } ) , b [ l ] = CKEDITOR . TRISTATE _OFF ) : ( a . addMenuItem ( l , { label : c [ d ] , command : l , group : "scayt_moresuggest" , order : d + 1 } ) , e [ l ] = CKEDITOR . TRISTATE _OFF , "on" === a . config . scayt _moreSuggestions && ( a . addMenuItem ( "scayt_moresuggest" , { label : k . getLocal ( "btn_moreSuggestions" ) , group : "scayt_moresuggest" , order : 10 , getItems : function ( ) { return e } } ) , b . scayt _moresuggest = CKEDITOR . TRISTATE _OFF ) ) } else for ( d = 0 ; d < c . length ; d ++ ) l = "grayt_suggest_" + CKEDITOR . plugins . scayt . suggestions [ d ] . replace ( " " ,
"_" ) , a . addCommand ( l , this . createCommand ( CKEDITOR . plugins . scayt . suggestions [ d ] , f , g ) ) , a . addMenuItem ( l , { label : c [ d ] , command : l , group : "grayt_suggest" , order : d + 1 } ) , b [ l ] = CKEDITOR . TRISTATE _OFF ; else b . no _scayt _suggest = CKEDITOR . TRISTATE _DISABLED , a . addCommand ( "no_scayt_suggest" , { exec : function ( ) { } } ) , a . addMenuItem ( "no_scayt_suggest" , { label : k . getLocal ( "btn_noSuggestions" ) || "no_scayt_suggest" , command : "no_scayt_suggest" , group : "scayt_suggest" , order : 0 } ) ; return b } , menuGenerator : function ( a , c ) { var d = a . scayt , b = this . scaytMenuDefinition ( a ) ,
e = { } , f = a . config . scayt _contextCommands . split ( "|" ) , g = c . getAttribute ( d . getLangAttribute ( ) ) || d . getLang ( ) , k , l , m , n ; l = d . isScaytNode ( c ) ; m = d . isGraytNode ( c ) ; l ? ( b = b . scayt , k = c . getAttribute ( d . getScaytNodeAttributeName ( ) ) , d . fire ( "getSuggestionsList" , { lang : g , word : k } ) , e = this . buildSuggestionMenuItems ( a , CKEDITOR . plugins . scayt . suggestions , l ) ) : m && ( b = b . grayt , e = c . getAttribute ( d . getGraytNodeAttributeName ( ) ) , d . getGraytNodeRuleAttributeName ? ( k = c . getAttribute ( d . getGraytNodeRuleAttributeName ( ) ) , d . getProblemDescriptionText ( e ,
k , g ) ) : d . getProblemDescriptionText ( e , g ) , n = d . getProblemDescriptionText ( e , k , g ) , b . grayt _problemdescription && n && ( n = n . replace ( /([.!?])\s/g , "$1\x3cbr\x3e" ) , b . grayt _problemdescription . label = n ) , d . fire ( "getGrammarSuggestionsList" , { lang : g , phrase : e , rule : k } ) , e = this . buildSuggestionMenuItems ( a , CKEDITOR . plugins . scayt . suggestions , l ) ) ; if ( l && "off" == a . config . scayt _contextCommands ) return e ; for ( var h in b ) l && - 1 == CKEDITOR . tools . indexOf ( f , h . replace ( "scayt_" , "" ) ) && "all" != a . config . scayt _contextCommands || m && "grayt_problemdescription" !==
h && - 1 == CKEDITOR . tools . indexOf ( f , h . replace ( "grayt_" , "" ) ) && "all" != a . config . scayt _contextCommands || ( e [ h ] = "undefined" != typeof b [ h ] . state ? b [ h ] . state : CKEDITOR . TRISTATE _OFF , "function" !== typeof b [ h ] . verification || b [ h ] . verification ( a ) || delete e [ h ] , a . addCommand ( h , { exec : b [ h ] . exec } ) , a . addMenuItem ( h , { label : a . lang . scayt [ b [ h ] . label ] || b [ h ] . label , command : h , group : b [ h ] . group , order : b [ h ] . order } ) ) ; return e } , createCommand : function ( a , c , d ) { return { exec : function ( b ) { b = b . scayt ; var e = { } ; e [ c ] = a ; b . replaceSelectionNode ( e ) ; "startGrammarCheck" ===
d && b . removeMarkupInSelectionNode ( { grammarOnly : ! 0 } ) ; b . fire ( d ) } } } } ) ;
CKEDITOR . plugins . scayt = { charsToObserve : [ { charName : "cke-fillingChar" , charCode : function ( ) { var a = CKEDITOR . version . match ( /^\d(\.\d*)*/ ) , a = a && a [ 0 ] , c ; if ( a ) { c = "4.5.7" ; var d , a = a . replace ( /\./g , " ") ; c = c . replace ( /\./g , "" ) ; d = a . length - c . length ; d = 0 <= d ? d : 0 ; c = parseInt ( a ) >= parseInt ( c ) * Math . pow ( 10 , d ) } return c ? Array ( 7 ) . join ( String . fromCharCode ( 8203 ) ) : String . fromCharCode ( 8203 ) } ( ) } ] , state : { scayt : { } , grayt : { } } , warningCounter : 0 , suggestions : [ ] , options : { disablingCommandExec : { source : ! 0 , newpage : ! 0 , templates : ! 0 } , data _attribute _name : "data-scayt-word" ,
misspelled _word _class : "scayt-misspell-word" , problem _grammar _data _attribute : "data-grayt-phrase" , problem _grammar _class : "gramm-problem" } , backCompatibilityMap : { scayt _service _protocol : "scayt_serviceProtocol" , scayt _service _host : "scayt_serviceHost" , scayt _service _port : "scayt_servicePort" , scayt _service _path : "scayt_servicePath" , scayt _customerid : "scayt_customerId" } , openDialog : function ( a , c ) { var d = c . scayt ; d . isAllModulesReady && ! 1 === d . isAllModulesReady ( ) || ( c . lockSelection ( ) , c . openDialog ( a ) ) } , alarmCompatibilityMessage : function ( ) { 5 >
this . warningCounter && ( console . warn ( "You are using the latest version of SCAYT plugin for CKEditor with the old application version. In order to have access to the newest features, it is recommended to upgrade the application version to latest one as well. Contact us for more details at support@webspellchecker.net." ) , this . warningCounter += 1 ) } , isNewUdSupported : function ( a ) { return a . getUserDictionary ? ! 0 : ! 1 } , reloadMarkup : function ( a ) { var c ; a && ( c = a . getScaytLangList ( ) , a . reloadMarkup ? a . reloadMarkup ( ) : ( this . alarmCompatibilityMessage ( ) ,
c && c . ltr && c . rtl && a . fire ( "startSpellCheck, startGrammarCheck" ) ) ) } , replaceOldOptionsNames : function ( a ) { for ( var c in a ) c in this . backCompatibilityMap && ( a [ this . backCompatibilityMap [ c ] ] = a [ c ] , delete a [ c ] ) } , createScayt : function ( a ) { var c = this , d = CKEDITOR . plugins . scayt ; this . loadScaytLibrary ( a , function ( a ) { function e ( a ) { return new SCAYT . CKSCAYT ( a , function ( ) { } , function ( ) { } ) } var f ; a . window && ( f = "BODY" == a . editable ( ) . $ . nodeName ? a . window . getFrame ( ) : a . editable ( ) ) ; if ( f ) { f = { lang : a . config . scayt _sLang , container : f . $ , customDictionary : a . config . scayt _customDictionaryIds ,
userDictionaryName : a . config . scayt _userDictionaryName , localization : a . langCode , customer _id : a . config . scayt _customerId , customPunctuation : a . config . scayt _customPunctuation , debug : a . config . scayt _debug , data _attribute _name : c . options . data _attribute _name , misspelled _word _class : c . options . misspelled _word _class , problem _grammar _data _attribute : c . options . problem _grammar _data _attribute , problem _grammar _class : c . options . problem _grammar _class , "options-to-restore" : a . config . scayt _disableOptionsStorage , focused : a . editable ( ) . hasFocus ,
ignoreElementsRegex : a . config . scayt _elementsToIgnore , ignoreGraytElementsRegex : a . config . grayt _elementsToIgnore , minWordLength : a . config . scayt _minWordLength , multiLanguageMode : a . config . scayt _multiLanguageMode , multiLanguageStyles : a . config . scayt _multiLanguageStyles , graytAutoStartup : a . config . grayt _autoStartup , disableCache : a . config . scayt _disableCache , cacheSize : a . config . scayt _cacheSize , charsToObserve : d . charsToObserve } ; a . config . scayt _serviceProtocol && ( f . service _protocol = a . config . scayt _serviceProtocol ) ; a . config . scayt _serviceHost &&
( f . service _host = a . config . scayt _serviceHost ) ; a . config . scayt _servicePort && ( f . service _port = a . config . scayt _servicePort ) ; a . config . scayt _servicePath && ( f . service _path = a . config . scayt _servicePath ) ; "boolean" === typeof a . config . scayt _ignoreAllCapsWords && ( f [ "ignore-all-caps-words" ] = a . config . scayt _ignoreAllCapsWords ) ; "boolean" === typeof a . config . scayt _ignoreDomainNames && ( f [ "ignore-domain-names" ] = a . config . scayt _ignoreDomainNames ) ; "boolean" === typeof a . config . scayt _ignoreWordsWithMixedCases && ( f [ "ignore-words-with-mixed-cases" ] =
a . config . scayt _ignoreWordsWithMixedCases ) ; "boolean" === typeof a . config . scayt _ignoreWordsWithNumbers && ( f [ "ignore-words-with-numbers" ] = a . config . scayt _ignoreWordsWithNumbers ) ; var g ; try { g = e ( f ) } catch ( k ) { c . alarmCompatibilityMessage ( ) , delete f . charsToObserve , g = e ( f ) } g . subscribe ( "suggestionListSend" , function ( a ) { for ( var b = { } , d = [ ] , c = 0 ; c < a . suggestionList . length ; c ++ ) b [ "word_" + a . suggestionList [ c ] ] || ( b [ "word_" + a . suggestionList [ c ] ] = a . suggestionList [ c ] , d . push ( a . suggestionList [ c ] ) ) ; CKEDITOR . plugins . scayt . suggestions =
d } ) ; g . subscribe ( "selectionIsChanged" , function ( d ) { a . getSelection ( ) . isLocked && "restoreSelection" !== d . action && a . lockSelection ( ) ; "restoreSelection" === d . action && a . selectionChange ( ! 0 ) } ) ; g . subscribe ( "graytStateChanged" , function ( c ) { d . state . grayt [ a . name ] = c . state } ) ; g . addMarkupHandler && g . addMarkupHandler ( function ( d ) { var c = a . editable ( ) , e = c . getCustomData ( d . charName ) ; e && ( e . $ = d . node , c . setCustomData ( d . charName , e ) ) } ) ; a . scayt = g ; a . fire ( "scaytButtonState" , a . readOnly ? CKEDITOR . TRISTATE _DISABLED : CKEDITOR . TRISTATE _ON ) } else d . state . scayt [ a . name ] =
! 1 } ) } , destroy : function ( a ) { a . scayt && a . scayt . destroy ( ) ; delete a . scayt ; a . fire ( "scaytButtonState" , CKEDITOR . TRISTATE _OFF ) } , loadScaytLibrary : function ( a , c ) { var d , b = function ( ) { CKEDITOR . fireOnce ( "scaytReady" ) ; a . scayt || "function" === typeof c && c ( a ) } ; "undefined" === typeof window . SCAYT || "function" !== typeof window . SCAYT . CKSCAYT ? ( d = a . config . scayt _srcUrl , CKEDITOR . scriptLoader . load ( d , function ( a ) { a && b ( ) } ) ) : window . SCAYT && "function" === typeof window . SCAYT . CKSCAYT && b ( ) } } ;
a . length ; d ++ ) { var c = a [ d ] , p = ! ! g ( a , "options" ) ; if ( ! g ( e , c ) || p && g ( f , function ( a ) { if ( "lang" === a ) return ! 1 } ) ) return ; g ( f , c ) && f . splice ( k ( f , c ) , 1 ) ; if ( "all" === c || p && g ( a , "lang" ) ) return [ ] ; "options" === c && ( f = [ "lang" ] ) } return b = b . concat ( f ) } ( c ) } } , addRule : function ( a ) { var c = CKEDITOR . plugins . scayt , d = a . dataProcessor , b = d && d . htmlFilter , e = a . _ . elementsPath && a . _ . elementsPath . filters , d = d && d . dataFilter , f = a . addRemoveFormatFilter , g = function ( b ) { if ( a . scayt && ( b . hasAttribute ( c . options . data _attribute _name ) || b . hasAttribute ( c . options . problem _grammar _data _attribute ) ) ) return ! 1 } ,
k = function ( b ) { var d = ! 0 ; a . scayt && ( b . hasAttribute ( c . options . data _attribute _name ) || b . hasAttribute ( c . options . problem _grammar _data _attribute ) ) && ( d = ! 1 ) ; return d } ; e && e . push ( g ) ; d && d . addRules ( { elements : { span : function ( a ) { var b = a . hasClass ( c . options . misspelled _word _class ) && a . attributes [ c . options . data _attribute _name ] , d = a . hasClass ( c . options . problem _grammar _class ) && a . attributes [ c . options . problem _grammar _data _attribute ] ; c && ( b || d ) && delete a . name ; return a } } } ) ; b && b . addRules ( { elements : { span : function ( a ) { var b = a . hasClass ( c . options . misspelled _word _class ) &&
a . attributes [ c . options . data _attribute _name ] , d = a . hasClass ( c . options . problem _grammar _class ) && a . attributes [ c . options . problem _grammar _data _attribute ] ; c && ( b || d ) && delete a . name ; return a } } } ) ; f && f . call ( a , k ) } , scaytMenuDefinition : function ( a ) { var c = this , d = CKEDITOR . plugins . scayt ; a = a . scayt ; return { scayt : { scayt _ignore : { label : a . getLocal ( "btn_ignore" ) , group : "scayt_control" , order : 1 , exec : function ( a ) { a . scayt . ignoreWord ( ) } } , scayt _ignoreall : { label : a . getLocal ( "btn_ignoreAll" ) , group : "scayt_control" , order : 2 , exec : function ( a ) { a . scayt . ignoreAllWords ( ) } } ,
scayt _add : { label : a . getLocal ( "btn_addWord" ) , group : "scayt_control" , order : 3 , exec : function ( a ) { var d = a . scayt ; setTimeout ( function ( ) { d . addWordToUserDictionary ( ) } , 10 ) } } , scayt _option : { label : a . getLocal ( "btn_options" ) , group : "scayt_control" , order : 4 , exec : function ( a ) { a . scayt . tabToOpen = "options" ; d . openDialog ( c . dialogName , a ) } , verification : function ( a ) { return 1 == a . config . scayt _uiTabs [ 0 ] ? ! 0 : ! 1 } } , scayt _language : { label : a . getLocal ( "btn_langs" ) , group : "scayt_control" , order : 5 , exec : function ( a ) { a . scayt . tabToOpen = "langs" ; d . openDialog ( c . dialogName ,
a ) } , verification : function ( a ) { return 1 == a . config . scayt _uiTabs [ 1 ] ? ! 0 : ! 1 } } , scayt _dictionary : { label : a . getLocal ( "btn_dictionaries" ) , group : "scayt_control" , order : 6 , exec : function ( a ) { a . scayt . tabToOpen = "dictionaries" ; d . openDialog ( c . dialogName , a ) } , verification : function ( a ) { return 1 == a . config . scayt _uiTabs [ 2 ] ? ! 0 : ! 1 } } , scayt _about : { label : a . getLocal ( "btn_about" ) , group : "scayt_control" , order : 7 , exec : function ( a ) { a . scayt . tabToOpen = "about" ; d . openDialog ( c . dialogName , a ) } } } , grayt : { grayt _problemdescription : { label : "Grammar problem description" ,
group : "grayt_description" , order : 1 , state : CKEDITOR . TRISTATE _DISABLED , exec : function ( a ) { } } , grayt _ignore : { label : a . getLocal ( "btn_ignore" ) , group : "grayt_control" , order : 2 , exec : function ( a ) { a . scayt . ignorePhrase ( ) } } , grayt _ignoreall : { label : a . getLocal ( "btn_ignoreAll" ) , group : "grayt_control" , order : 3 , exec : function ( a ) { a . scayt . ignoreAllPhrases ( ) } } } } } , buildSuggestionMenuItems : function ( a , c , d ) { var b = { } , e = { } , f = d ? "word" : "phrase" , g = d ? "startGrammarCheck" : "startSpellCheck" , k = a . scayt ; if ( 0 < c . length && "no_any_suggestions" !== c [ 0 ] ) if ( d ) for ( d =
0 ; d < c . length ; d ++ ) { var l = "scayt_suggest_" + CKEDITOR . plugins . scayt . suggestions [ d ] . replace ( " " , "_" ) ; a . addCommand ( l , this . createCommand ( CKEDITOR . plugins . scayt . suggestions [ d ] , f , g ) ) ; d < a . config . scayt _maxSuggestions ? ( a . addMenuItem ( l , { label : c [ d ] , command : l , group : "scayt_suggest" , order : d + 1 } ) , b [ l ] = CKEDITOR . TRISTATE _OFF ) : ( a . addMenuItem ( l , { label : c [ d ] , command : l , group : "scayt_moresuggest" , order : d + 1 } ) , e [ l ] = CKEDITOR . TRISTATE _OFF , "on" === a . config . scayt _moreSuggestions && ( a . addMenuItem ( "scayt_moresuggest" , { label : k . getLocal ( "btn_moreSuggestions" ) ,
group : "scayt_moresuggest" , order : 10 , getItems : function ( ) { return e } } ) , b . scayt _moresuggest = CKEDITOR . TRISTATE _OFF ) ) } else for ( d = 0 ; d < c . length ; d ++ ) l = "grayt_suggest_" + CKEDITOR . plugins . scayt . suggestions [ d ] . replace ( " " , "_" ) , a . addCommand ( l , this . createCommand ( CKEDITOR . plugins . scayt . suggestions [ d ] , f , g ) ) , a . addMenuItem ( l , { label : c [ d ] , command : l , group : "grayt_suggest" , order : d + 1 } ) , b [ l ] = CKEDITOR . TRISTATE _OFF ; else b . no _scayt _suggest = CKEDITOR . TRISTATE _DISABLED , a . addCommand ( "no_scayt_suggest" , { exec : function ( ) { } } ) , a . addMenuItem ( "no_scayt_suggest ",
{ label : k . getLocal ( "btn_noSuggestions" ) || "no_scayt_suggest" , command : "no_scayt_suggest" , group : "scayt_suggest" , order : 0 } ) ; return b } , menuGenerator : function ( a , c ) { var d = a . scayt , b = this . scaytMenuDefinition ( a ) , e = { } , f = a . config . scayt _contextCommands . split ( "|" ) , g = c . getAttribute ( d . getLangAttribute ( ) ) || d . getLang ( ) , k , l , m , n ; l = d . isScaytNode ( c ) ; m = d . isGraytNode ( c ) ; l ? ( b = b . scayt , k = c . getAttribute ( d . getScaytNodeAttributeName ( ) ) , d . fire ( "getSuggestionsList" , { lang : g , word : k } ) , e = this . buildSuggestionMenuItems ( a , CKEDITOR . plugins . scayt . suggestions ,
l ) ) : m && ( b = b . grayt , e = c . getAttribute ( d . getGraytNodeAttributeName ( ) ) , d . getGraytNodeRuleAttributeName ? ( k = c . getAttribute ( d . getGraytNodeRuleAttributeName ( ) ) , d . getProblemDescriptionText ( e , k , g ) ) : d . getProblemDescriptionText ( e , g ) , n = d . getProblemDescriptionText ( e , k , g ) , b . grayt _problemdescription && n && ( n = n . replace ( /([.!?])\s/g , "$1\x3cbr\x3e" ) , b . grayt _problemdescription . label = n ) , d . fire ( "getGrammarSuggestionsList" , { lang : g , phrase : e , rule : k } ) , e = this . buildSuggestionMenuItems ( a , CKEDITOR . plugins . scayt . suggestions , l ) ) ; if ( l &&
"off" == a . config . scayt _contextCommands ) return e ; for ( var h in b ) l && - 1 == CKEDITOR . tools . indexOf ( f , h . replace ( "scayt_" , "" ) ) && "all" != a . config . scayt _contextCommands || m && "grayt_problemdescription" !== h && - 1 == CKEDITOR . tools . indexOf ( f , h . replace ( "grayt_" , "" ) ) && "all" != a . config . scayt _contextCommands || ( e [ h ] = "undefined" != typeof b [ h ] . state ? b [ h ] . state : CKEDITOR . TRISTATE _OFF , "function" !== typeof b [ h ] . verification || b [ h ] . verification ( a ) || delete e [ h ] , a . addCommand ( h , { exec : b [ h ] . exec } ) , a . addMenuItem ( h , { label : a . lang . scayt [ b [ h ] . label ] ||
b [ h ] . label , command : h , group : b [ h ] . group , order : b [ h ] . order } ) ) ; return e } , createCommand : function ( a , c , d ) { return { exec : function ( b ) { b = b . scayt ; var e = { } ; e [ c ] = a ; b . replaceSelectionNode ( e ) ; "startGrammarCheck" === d && b . removeMarkupInSelectionNode ( { grammarOnly : ! 0 } ) ; b . fire ( d ) } } } } ) ;
CKEDITOR . plugins . scayt = { charsToObserve : [ { charName : "cke-fillingChar" , charCode : function ( ) { var a = CKEDITOR . version , c = [ 4 , 5 , 6 ] , d = String . fromCharCode ( 8203 ) , b = Array ( 8 ) . join ( d ) , e , f ; if ( ! a ) return d ; for ( var a = a . split ( "." ) , g = 0 ; g < c . length ; g ++ ) { e = c [ g ] ; f = Number ( a [ g ] ) ; if ( f > e ) return b ; if ( f < e ) break } return d } ( ) } ] , state : { scayt : { } , grayt : { } } , warningCounter : 0 , suggestions : [ ] , options : { disablingCommandExec : { source : ! 0 , newpage : ! 0 , templates : ! 0 } , data _attribute _name : "data-scayt-word" , misspelled _word _class : "scayt-misspell-word" ,
problem _grammar _data _attribute : "data-grayt-phrase" , problem _grammar _class : "gramm-problem" } , backCompatibilityMap : { scayt _service _protocol : "scayt_serviceProtocol" , scayt _service _host : "scayt_serviceHost" , scayt _service _port : "scayt_servicePort" , scayt _service _path : "scayt_servicePath" , scayt _customerid : "scayt_customerId "} , openDialog : function ( a , c ) { var d = c . scayt ; d . isAllModulesReady && ! 1 === d . isAllModulesReady ( ) || ( c . lockSelection ( ) , c . openDialog ( a ) ) } , alarmCompatibilityMessage : function ( ) { 5 > this . warningCounter && ( console . warn ( "You are using the latest version of SCAYT plugin for CKEditor with the old application version. In order to have access to the newest features, it is recommended to upgrade the application version to latest one as well. Contact us for more details at support@webspellchecker.net." ) ,
this . warningCounter += 1 ) } , isNewUdSupported : function ( a ) { return a . getUserDictionary ? ! 0 : ! 1 } , reloadMarkup : function ( a ) { var c ; a && ( c = a . getScaytLangList ( ) , a . reloadMarkup ? a . reloadMarkup ( ) : ( this . alarmCompatibilityMessage ( ) , c && c . ltr && c . rtl && a . fire ( "startSpellCheck, startGrammarCheck" ) ) ) } , replaceOldOptionsNames : function ( a ) { for ( var c in a ) c in this . backCompatibilityMap && ( a [ this . backCompatibilityMap [ c ] ] = a [ c ] , delete a [ c ] ) } , createScayt : function ( a ) { var c = this , d = CKEDITOR . plugins . scayt ; this . loadScaytLibrary ( a , function ( a ) { function e ( a ) { return new SCAYT . CKSCAYT ( a ,
function ( ) { } , function ( ) { } ) } var f ; a . window && ( f = "BODY" == a . editable ( ) . $ . nodeName ? a . window . getFrame ( ) : a . editable ( ) ) ; if ( f ) { f = { lang : a . config . scayt _sLang , container : f . $ , customDictionary : a . config . scayt _customDictionaryIds , userDictionaryName : a . config . scayt _userDictionaryName , localization : a . langCode , customer _id : a . config . scayt _customerId , customPunctuation : a . config . scayt _customPunctuation , debug : a . config . scayt _debug , data _attribute _name : c . options . data _attribute _name , misspelled _word _class : c . options . misspelled _word _class ,
problem _grammar _data _attribute : c . options . problem _grammar _data _attribute , problem _grammar _class : c . options . problem _grammar _class , "options-to-restore" : a . config . scayt _disableOptionsStorage , focused : a . editable ( ) . hasFocus , ignoreElementsRegex : a . config . scayt _elementsToIgnore , ignoreGraytElementsRegex : a . config . grayt _elementsToIgnore , minWordLength : a . config . scayt _minWordLength , graytAutoStartup : a . config . grayt _autoStartup , charsToObserve : d . charsToObserve } ; a . config . scayt _serviceProtocol && ( f . service _protocol = a . config . scayt _serviceProtocol ) ;
a . config . scayt _serviceHost && ( f . service _host = a . config . scayt _serviceHost ) ; a . config . scayt _servicePort && ( f . service _port = a . config . scayt _servicePort ) ; a . config . scayt _servicePath && ( f . service _path = a . config . scayt _servicePath ) ; "boolean" === typeof a . config . scayt _ignoreAllCapsWords && ( f [ "ignore-all-caps-words" ] = a . config . scayt _ignoreAllCapsWords ) ; "boolean" === typeof a . config . scayt _ignoreDomainNames && ( f [ "ignore-domain-names" ] = a . config . scayt _ignoreDomainNames ) ; "boolean" === typeof a . config . scayt _ignoreWordsWithMixedCases &&
( f [ "ignore-words-with-mixed-cases" ] = a . config . scayt _ignoreWordsWithMixedCases ) ; "boolean" === typeof a . config . scayt _ignoreWordsWithNumbers && ( f [ "ignore-words-with-numbers" ] = a . config . scayt _ignoreWordsWithNumbers ) ; var g ; try { g = e ( f ) } catch ( k ) { c . alarmCompatibilityMessage ( ) , delete f . charsToObserve , g = e ( f ) } g . subscribe ( "suggestionListSend" , function ( a ) { for ( var b = { } , d = [ ] , c = 0 ; c < a . suggestionList . length ; c ++ ) b [ "word_" + a . suggestionList [ c ] ] || ( b [ "word_" + a . suggestionList [ c ] ] = a . suggestionList [ c ] , d . push ( a . suggestionList [ c ] ) ) ;
CKEDITOR . plugins . scayt . suggestions = d } ) ; g . subscribe ( "selectionIsChanged" , function ( d ) { a . getSelection ( ) . isLocked && "restoreSelection" !== d . action && a . lockSelection ( ) ; "restoreSelection" === d . action && a . selectionChange ( ! 0 ) } ) ; g . subscribe ( "graytStateChanged" , function ( c ) { d . state . grayt [ a . name ] = c . state } ) ; g . addMarkupHandler && g . addMarkupHandler ( function ( d ) { var c = a . editable ( ) , e = c . getCustomData ( d . charName ) ; e && ( e . $ = d . node , c . setCustomData ( d . charName , e ) ) } ) ; a . scayt = g ; a . fire ( "scaytButtonState" , a . readOnly ? CKEDITOR . TRISTATE _DISABLED :
CKEDITOR . TRISTATE _ON ) } else d . state . scayt [ a . name ] = ! 1 } ) } , destroy : function ( a ) { a . scayt && a . scayt . destroy ( ) ; delete a . scayt ; a . fire ( "scaytButtonState" , CKEDITOR . TRISTATE _OFF ) } , loadScaytLibrary : function ( a , c ) { var d , b = function ( ) { CKEDITOR . fireOnce ( "scaytReady" ) ; a . scayt || "function" === typeof c && c ( a ) } ; "undefined" === typeof window . SCAYT || "function" !== typeof window . SCAYT . CKSCAYT ? ( d = a . config . scayt _srcUrl , CKEDITOR . scriptLoader . load ( d , function ( a ) { a && b ( ) } ) ) : window . SCAYT && "function" === typeof window . SCAYT . CKSCAYT && b ( ) } } ;
CKEDITOR . on ( "dialogDefinition" , function ( a ) { var c = a . data . name ; a = a . data . definition . dialog ; "scaytDialog" !== c && "checkspell" !== c && ( a . on ( "show" , function ( a ) { a = a . sender && a . sender . getParentEditor ( ) ; var b = CKEDITOR . plugins . scayt , c = a . scayt ; c && b . state . scayt [ a . name ] && c . setMarkupPaused && c . setMarkupPaused ( ! 0 ) } ) , a . on ( "hide" , function ( a ) { a = a . sender && a . sender . getParentEditor ( ) ; var b = CKEDITOR . plugins . scayt , c = a . scayt ; c && b . state . scayt [ a . name ] && c . setMarkupPaused && c . setMarkupPaused ( ! 1 ) } ) ) ; if ( "scaytDialog" === c ) a . on ( "cancel" ,
function ( a ) { return ! 1 } , this , null , - 1 ) ; if ( "checkspell" === c ) a . on ( "cancel" , function ( a ) { a = a . sender && a . sender . getParentEditor ( ) ; var b = CKEDITOR . plugins . scayt , c = a . scayt ; c && b . state . scayt [ a . name ] && c . setMarkupPaused && c . setMarkupPaused ( ! 1 ) ; a . unlockSelection ( ) } , this , null , - 2 ) ; if ( "link" === c ) a . on ( "ok" , function ( a ) { var b = a . sender && a . sender . getParentEditor ( ) ; b && setTimeout ( function ( ) { b . fire ( "reloadMarkupScayt" , { removeOptions : { removeInside : ! 0 , forceBookmark : ! 0 } , timeout : 0 } ) } , 0 ) } ) ; if ( "replace" === c ) a . on ( "hide" , function ( a ) { a =
a . sender && a . sender . getParentEditor ( ) ; var b = CKEDITOR . plugins . scayt , c = a . scayt ; a && setTimeout ( function ( ) { c && ( c . fire ( "removeMarkupInDocument" , { } ) , b . reloadMarkup ( c ) ) } , 0 ) } ) } ) ;
@@ -1057,15 +1048,15 @@ order:18},tablecell_split_horizontal:{label:c.cell.splitHorizontal,group:"tablec
tablerow _delete : CKEDITOR . TRISTATE _OFF } } } , tablerow _insertBefore : { label : c . row . insertBefore , group : "tablerow" , command : "rowInsertBefore" , order : 5 } , tablerow _insertAfter : { label : c . row . insertAfter , group : "tablerow" , command : "rowInsertAfter" , order : 10 } , tablerow _delete : { label : c . row . deleteRow , group : "tablerow" , command : "rowDelete" , order : 15 } , tablecolumn : { label : c . column . menu , group : "tablecolumn" , order : 1 , getItems : function ( ) { return { tablecolumn _insertBefore : CKEDITOR . TRISTATE _OFF , tablecolumn _insertAfter : CKEDITOR . TRISTATE _OFF ,
tablecolumn _delete : CKEDITOR . TRISTATE _OFF } } } , tablecolumn _insertBefore : { label : c . column . insertBefore , group : "tablecolumn" , command : "columnInsertBefore" , order : 5 } , tablecolumn _insertAfter : { label : c . column . insertAfter , group : "tablecolumn" , command : "columnInsertAfter" , order : 10 } , tablecolumn _delete : { label : c . column . deleteColumn , group : "tablecolumn" , command : "columnDelete" , order : 15 } } ) ; d . contextMenu && d . contextMenu . addListener ( function ( a , b , c ) { return ( a = c . contains ( { td : 1 , th : 1 } , 1 ) ) && ! a . isReadOnly ( ) ? { tablecell : CKEDITOR . TRISTATE _OFF ,
tablerow : CKEDITOR . TRISTATE _OFF , tablecolumn : CKEDITOR . TRISTATE _OFF } : null } ) } , getCellColIndex : v , insertRow : r , insertColumn : u , getSelectedCells : q } ; CKEDITOR . plugins . add ( "tabletools" , CKEDITOR . plugins . tabletools ) } ) ( ) ;
CKEDITOR . tools . buildTableMap = function ( q , r , B , v , w ) { q = q . $ . rows ; B = B || 0 ; v = "number" === typeof v ? v : q . length - 1 ; w = "number" === typeof w ? w : - 1 ; var u = - 1 , y = [ ] ; for ( r = r || 0 ; r <= v ; r ++ ) { u ++ ; ! y [ u ] && ( y [ u ] = [ ] ) ; for ( var t = - 1 , z = B ; z <= ( - 1 === w ? q [ r ] . cells . length - 1 : w ) ; z ++ ) { var p = q [ r ] . cells [ z ] ; if ( ! p ) break ; for ( t ++ ; y [ u ] [ t ] ; ) t ++ ; for ( var A = isNaN ( p . colSpan ) ? 1 : p . colSpan , p = isNaN ( p . rowSpan ) ? 1 : p . rowSpan , x = 0 ; x < p && ! ( r + x > v ) ; x ++ ) { y [ u + x ] || ( y [ u + x ] = [ ] ) ; for ( var C = 0 ; C < A ; C ++ ) y [ u + x ] [ t + C ] = q [ r ] . cells [ z ] } t += A - 1 ; if ( - 1 !== w && t >= w ) break } } return y } ; ( function ( ) { function x ( b ) { return CKEDITOR . env . ie ? b . $ . clientWidth : parseInt ( b . getComputedStyle ( "width" ) , 10 ) } function r ( b , d ) { var a = b . getComputedStyle ( "border-" + d + "-width" ) , l = { thin : "0px" , medium : "1px" , thick : "2px" } ; 0 > a . indexOf ( "px" ) && ( a = a in l && "none" != b . getComputedStyle ( "border-style" ) ? l [ a ] : 0 ) ; return parseInt ( a , 10 ) } function A ( b ) { var d = [ ] , a = { } , l = "rtl" == b . getComputedStyle ( "direction" ) ; CKEDITOR . tools . array . forEach ( b . $ . rows , function ( f , B ) { var e = - 1 , g = 0 , c = null ; f ? ( g = new CKEDITOR . dom . element ( f ) , c = { height : g . $ . offsetHeight ,
position : g . getDocumentPosition ( ) } ) : c = void 0 ; for ( var g = c . height , c = c . position , m = 0 , k = f . cells . length ; m < k ; m ++ ) { var h = new CKEDITOR . dom . element ( f . cells [ m ] ) , p = f . cells [ m + 1 ] && new CKEDITOR . dom . element ( f . cells [ m + 1 ] ) , e = e + ( h . $ . colSpan || 1 ) , t , u , n = h . getDocumentPosition ( ) . x ; l ? u = n + r ( h , "left" ) : t = n + h . $ . offsetWidth - r ( h , "right" ) ; p ? ( n = p . getDocumentPosition ( ) . x , l ? t = n + p . $ . offsetWidth - r ( p , "right" ) : u = n + r ( p , "left" ) ) : ( n = b . getDocumentPosition ( ) . x , l ? t = n : u = n + b . $ . offsetWidth ) ; h = Math . max ( u - t , 3 ) ; h = { table : b , index : e , x : t , y : c . y , width : h ,
height : g , rtl : l } ; a [ e ] = a [ e ] || [ ] ; a [ e ] . push ( h ) ; h . alignedPillars = a [ e ] ; d . push ( h ) } } ) ; return d } function z ( b ) { ( b . data || b ) . preventDefault ( ) } function E ( b ) { function d ( ) { m = 0 ; c . setOpacity ( 0 ) ; h && a ( ) ; var b = e . table ; setTimeout ( function ( ) { b . removeCustomData ( "_cke_table_pillars" ) } , 0 ) ; g . removeListener ( "dragstart" , z ) } function a ( ) { for ( var c = e . rtl , l = c ? u . length : t . length , a = 0 , f = 0 ; f < l ; f ++ ) { var g = t [ f ] , d = u [ f ] , m = e . table ; CKEDITOR . tools . setTimeout ( function ( e , f , g , d , h , n ) { e && e . setStyle ( "width" , k ( Math . max ( f + n , 1 ) ) ) ; g && g . setStyle ( "width" ,
k ( Math . max ( d - n , 1 ) ) ) ; h && m . setStyle ( "width" , k ( h + n * ( c ? - 1 : 1 ) ) ) ; ++ a == l && b . fire ( "saveSnapshot" ) } , 0 , this , [ g , g && x ( g ) , d , d && x ( d ) , ( ! g || ! d ) && x ( m ) + r ( m , "left" ) + r ( m , "right" ) , h ] ) } } function l ( l ) { z ( l ) ; b . fire ( "saveSnapshot" ) ; l = e . index ; for ( var a = CKEDITOR . tools . buildTableMap ( e . table ) , d = [ ] , k = [ ] , p = Number . MAX _VALUE , r = p , w = e . rtl , C = 0 , A = a . length ; C < A ; C ++ ) { var q = a [ C ] , v = q [ l + ( w ? 1 : 0 ) ] , q = q [ l + ( w ? 0 : 1 ) ] , v = v && new CKEDITOR . dom . element ( v ) , q = q && new CKEDITOR . dom . element ( q ) ; v && q && v . equals ( q ) || ( v && ( p = Math . min ( p , x ( v ) ) ) , q && ( r = Math . min ( r , x ( q ) ) ) ,
d . push ( v ) , k . push ( q ) ) } t = d ; u = k ; n = e . x - p ; D = e . x + r ; c . setOpacity ( . 5 ) ; y = parseInt ( c . getStyle ( "left" ) , 10 ) ; h = 0 ; m = 1 ; c . on ( "mousemove" , B ) ; g . on ( "dragstart" , z ) ; g . on ( "mouseup" , f , this ) } function f ( c ) { c . removeListener ( ) ; d ( ) } function B ( c ) { p ( c . data . getPageOffset ( ) . x ) } var e , g , c , m , y , h , p , t , u , n , D ; g = b . document ; c = CKEDITOR . dom . element . createFromHtml ( '\x3cdiv data-cke-temp\x3d1 contenteditable\x3dfalse unselectable\x3don style\x3d"position:absolute;cursor:col-resize;filter:alpha(opacity\x3d0);opacity:0;padding:0;background-color:#004;background-image:none;border:0px none;z-index:10"\x3e\x3c/div\x3e' ,
g ) ; b . on ( "destroy" , function ( ) { c . remove ( ) } ) ; w || g . getDocumentElement ( ) . append ( c ) ; this . attachTo = function ( b ) { var a , f , d ; m || ( w && ( g . getBody ( ) . append ( c ) , h = 0 ) , e = b , a = e . alignedPillars [ 0 ] , f = e . alignedPillars [ e . alignedPillars . length - 1 ] , d = a . y , a = f . height + f . y - a . y , c . setStyles ( { width : k ( b . width ) , height : k ( a ) , left : k ( b . x ) , top : k ( d ) } ) , w && c . setOpacity ( . 25 ) , c . on ( "mousedown" , l , this ) , g . getBody ( ) . setStyle ( "cursor" , "col-resize" ) , c . show ( ) ) } ; p = this . move = function ( b , a ) { if ( ! e ) return 0 ; if ( ! ( m || b >= e . x && b <= e . x + e . width && a >= e . y && a <= e . y + e . height ) ) return e =
null , m = h = 0 , g . removeListener ( "mouseup" , f ) , c . removeListener ( "mousedown" , l ) , c . removeListener ( "mousemove" , B ) , g . getBody ( ) . setStyle ( "cursor" , "auto" ) , w ? c . remove ( ) : c . hide ( ) , 0 ; var d = b - Math . round ( c . $ . offsetWidth / 2 ) ; if ( m ) { if ( d == n || d == D ) return 1 ; d = Math . max ( d , n ) ; d = Math . min ( d , D ) ; h = d - y } c . setStyle ( "left" , k ( d ) ) ; return 1 } } function y ( b ) { var d = b . data . getTarget ( ) ; if ( "mouseout" == b . name ) { if ( ! d . is ( "table" ) ) return ; for ( var a = new CKEDITOR . dom . element ( b . data . $ . relatedTarget || b . data . $ . toElement ) ; a && a . $ && ! a . equals ( d ) && ! a . is ( "body" ) ; ) a =
a . getParent ( ) ; if ( ! a || a . equals ( d ) ) return } d . getAscendant ( "table" , 1 ) . removeCustomData ( "_cke_table_pillars" ) ; b . removeListener ( ) } var k = CKEDITOR . tools . cssLength , w = CKEDITOR . env . ie && ( CKEDITOR . env . ie7Compat || CKEDITOR . env . quirks ) ; CKEDITOR . plugins . add ( "tableresize" , { requires : "tabletools" , init : function ( b ) { b . on ( "contentDom" , function ( ) { var d , a = b . editable ( ) ; a . attachListener ( a . isInline ( ) ? a : b . document , "mousemove" , function ( a ) { a = a . data ; var f = a . getTarget ( ) ; if ( f . type == CKEDITOR . NODE _ELEMENT ) { var k = a . getPageOffset ( ) . x ,
e = a . getPageOffset ( ) . y ; if ( d && d . move ( k , e ) ) z ( a ) ; else if ( f . is ( "table" ) || f . getAscendant ( { thead : 1 , tbody : 1 , tfoot : 1 } , 1 ) ) if ( a = f . getAscendant ( "table" , 1 ) , b . editable ( ) . contains ( a ) ) { ( f = a . getCustomData ( "_cke_table_pillars" ) ) || ( a . setCustomData ( "_cke_table_pillars" , f = A ( a ) ) , a . on ( "mouseout" , y ) , a . on ( "mousedown" , y ) ) ; a : { a = f ; for ( var f = 0 , g = a . length ; f < g ; f ++ ) { var c = a [ f ] ; if ( k >= c . x && k <= c . x + c . width && e >= c . y && e <= c . y + c . height ) { k = c ; break a } } k = null } k && ( ! d && ( d = new E ( b ) ) , d . attachTo ( k ) ) } } } ) } ) } } ) } ) ( ) ; ( function ( ) { function n ( a , b ) { return CKEDITOR . tools . array . reduce ( b , function ( a , b ) { return b ( a ) } , a ) } var g = [ CKEDITOR . CTRL + 90 , CKEDITOR . CTRL + 89 , CKEDITOR . CTRL + CKEDITOR . SHIFT + 90 ] , p = { 8 : 1 , 46 : 1 } ; CKEDITOR . plugins . add ( "undo" , { init : function ( a ) { function b ( a ) { d . enabled && ! 1 !== a . data . command . canUndo && d . save ( ) } function c ( ) { d . enabled = a . readOnly ? ! 1 : "wysiwyg" == a . mode ; d . onChange ( ) } var d = a . undoManager = new e ( a ) , l = d . editingHandler = new k ( d ) , f = a . addCommand ( "undo" , { exec : function ( ) { d . undo ( ) && ( a . selectionChange ( ) , this . fire ( "afterUndo" ) ) } ,
CKEDITOR . tools . buildTableMap = function ( q , r , B , v , w ) { q = q . $ . rows ; B = B || 0 ; v = "number" === typeof v ? v : q . length - 1 ; w = "number" === typeof w ? w : - 1 ; var u = - 1 , y = [ ] ; for ( r = r || 0 ; r <= v ; r ++ ) { u ++ ; ! y [ u ] && ( y [ u ] = [ ] ) ; for ( var t = - 1 , z = B ; z <= ( - 1 === w ? q [ r ] . cells . length - 1 : w ) ; z ++ ) { var p = q [ r ] . cells [ z ] ; if ( ! p ) break ; for ( t ++ ; y [ u ] [ t ] ; ) t ++ ; for ( var A = isNaN ( p . colSpan ) ? 1 : p . colSpan , p = isNaN ( p . rowSpan ) ? 1 : p . rowSpan , x = 0 ; x < p && ! ( r + x > v ) ; x ++ ) { y [ u + x ] || ( y [ u + x ] = [ ] ) ; for ( var C = 0 ; C < A ; C ++ ) y [ u + x ] [ t + C ] = q [ r ] . cells [ z ] } t += A - 1 ; if ( - 1 !== w && t >= w ) break } } return y } ; ( function ( ) { function x ( b ) { return CKEDITOR . env . ie ? b . $ . clientWidth : parseInt ( b . getComputedStyle ( "width" ) , 10 ) } function p ( b , d ) { var a = b . getComputedStyle ( "border-" + d + "-width" ) , l = { thin : "0px" , medium : "1px" , thick : "2px" } ; 0 > a . indexOf ( "px" ) && ( a = a in l && "none" != b . getComputedStyle ( "border-style" ) ? l [ a ] : 0 ) ; return parseFloat ( a ) } function C ( b ) { var d = [ ] , a = { } , l = "rtl" == b . getComputedStyle ( "direction" ) ; CKEDITOR . tools . array . forEach ( b . $ . rows , function ( f , D ) { var e = - 1 , g = 0 , c = null ; f ? ( g = new CKEDITOR . dom . element ( f ) , c = { height : g . $ . offsetHeight ,
position : g . getDocumentPosition ( ) } ) : c = void 0 ; for ( var h = CKEDITOR . env . ie && ! CKEDITOR . env . edge , x = "collapse" === b . getComputedStyle ( "border-collapse" ) , g = c . height , c = c . position , n = 0 , z = f . cells . length ; n < z ; n ++ ) { var k = new CKEDITOR . dom . element ( f . cells [ n ] ) , r = f . cells [ n + 1 ] && new CKEDITOR . dom . element ( f . cells [ n + 1 ] ) , e = e + ( k . $ . colSpan || 1 ) , m , t , u = k . getDocumentPosition ( ) . x ; l ? t = u + p ( k , "left" ) : m = u + k . $ . offsetWidth - p ( k , "right" ) ; r ? ( u = r . getDocumentPosition ( ) . x , l ? m = u + r . $ . offsetWidth - p ( r , "right" ) : t = u + p ( r , "left" ) ) : ( u = b . getDocumentPosition ( ) . x ,
l ? m = u : t = u + b . $ . offsetWidth ) ; k = Math . max ( t - m , 3 ) ; h && x && ( m -= k , k = Math . max ( t - m , 3 ) ) ; k = { table : b , index : e , x : m , y : c . y , width : k , height : g , rtl : l } ; a [ e ] = a [ e ] || [ ] ; a [ e ] . push ( k ) ; k . alignedPillars = a [ e ] ; d . push ( k ) } } ) ; return d } function z ( b ) { ( b . data || b ) . preventDefault ( ) } function F ( b ) { function d ( ) { y = 0 ; c . setOpacity ( 0 ) ; n && a ( ) ; var b = e . table ; setTimeout ( function ( ) { b . removeCustomData ( "_cke_table_pillars" ) } , 0 ) ; g . removeListener ( "dragstart" , z ) } function a ( ) { for ( var c = e . rtl , l = c ? r . length : k . length , a = 0 , f = 0 ; f < l ; f ++ ) { var g = k [ f ] , d = r [ f ] , m = e . table ;
CKEDITOR . tools . setTimeout ( function ( e , f , g , d , k , n ) { e && e . setStyle ( "width" , h ( Math . max ( f + n , 1 ) ) ) ; g && g . setStyle ( "width" , h ( Math . max ( d - n , 1 ) ) ) ; k && m . setStyle ( "width" , h ( k + n * ( c ? - 1 : 1 ) ) ) ; ++ a == l && b . fire ( "saveSnapshot" ) } , 0 , this , [ g , g && x ( g ) , d , d && x ( d ) , ( ! g || ! d ) && x ( m ) + p ( m , "left" ) + p ( m , "right" ) , n ] ) } } function l ( l ) { z ( l ) ; b . fire ( "saveSnapshot" ) ; l = e . index ; for ( var a = CKEDITOR . tools . buildTableMap ( e . table ) , d = [ ] , h = [ ] , p = Number . MAX _VALUE , w = p , A = e . rtl , E = 0 , C = a . length ; E < C ; E ++ ) { var q = a [ E ] , v = q [ l + ( A ? 1 : 0 ) ] , q = q [ l + ( A ? 0 : 1 ) ] , v = v && new CKEDITOR . dom . element ( v ) ,
q = q && new CKEDITOR . dom . element ( q ) ; v && q && v . equals ( q ) || ( v && ( p = Math . min ( p , x ( v ) ) ) , q && ( w = Math . min ( w , x ( q ) ) ) , d . push ( v ) , h . push ( q ) ) } k = d ; r = h ; m = e . x - p ; t = e . x + w ; c . setOpacity ( . 5 ) ; B = parseInt ( c . getStyle ( "left" ) , 10 ) ; n = 0 ; y = 1 ; c . on ( "mousemove" , D ) ; g . on ( "dragstart" , z ) ; g . on ( "mouseup" , f , this ) } function f ( c ) { c . removeListener ( ) ; d ( ) } function D ( c ) { A ( c . data . getPageOffset ( ) . x ) } var e , g , c , y , B , n , A , k , r , m , t ; g = b . document ; c = CKEDITOR . dom . element . createFromHtml ( '\x3cdiv data-cke-temp\x3d1 contenteditable\x3dfalse unselectable\x3don style\x3d"position:absolute;cursor:col-resize;filter:alpha(opacity\x3d0);opacity:0;padding:0;background-color:#004;background-image:none;border:0px none;z-index:10000 "\x3e\x3c/div\x3e' ,
g ) ; b . on ( "destroy" , function ( ) { c . remove ( ) } ) ; w || g . getDocumentElement ( ) . append ( c ) ; this . attachTo = function ( b ) { var a , f , d ; y || ( w && ( g . getBody ( ) . append ( c ) , n = 0 ) , e = b , a = e . alignedPillars [ 0 ] , f = e . alignedPillars [ e . alignedPillars . length - 1 ] , d = a . y , a = f . height + f . y - a . y , c . setStyles ( { width : h ( b . width ) , height : h ( a ) , left : h ( b . x ) , top : h ( d ) } ) , w && c . setOpacity ( . 25 ) , c . on ( "mousedown" , l , this ) , g . getBody ( ) . setStyle ( "cursor" , "col-resize" ) , c . show ( ) ) } ; A = this . move = function ( b , a ) { if ( ! e ) return 0 ; if ( ! ( y || b >= e . x && b <= e . x + e . width && a >= e . y && a <= e . y + e . height ) ) return e =
null , y = n = 0 , g . removeListener ( "mouseup" , f ) , c . removeListener ( "mousedown" , l ) , c . removeListener ( "mousemove" , D ) , g . getBody ( ) . setStyle ( "cursor" , "auto" ) , w ? c . remove ( ) : c . hide ( ) , 0 ; var d = b - Math . round ( c . $ . offsetWidth / 2 ) ; if ( y ) { if ( d == m || d == t ) return 1 ; d = Math . max ( d , m ) ; d = Math . min ( d , t ) ; n = d - B } c . setStyle ( "left" , h ( d ) ) ; return 1 } } function B ( b ) { var d = b . data . getTarget ( ) ; if ( "mouseout" == b . name ) { if ( ! d . is ( "table" ) ) return ; for ( var a = new CKEDITOR . dom . element ( b . data . $ . relatedTarget || b . data . $ . toElement ) ; a && a . $ && ! a . equals ( d ) && ! a . is ( "body" ) ; ) a =
a . getParent ( ) ; if ( ! a || a . equals ( d ) ) return } d . getAscendant ( "table" , 1 ) . removeCustomData ( "_cke_table_pillars" ) ; b . removeListener ( ) } var h = CKEDITOR . tools . cssLength , w = CKEDITOR . env . ie && ( CKEDITOR . env . ie7Compat || CKEDITOR . env . quirks ) ; CKEDITOR . plugins . add ( "tableresize" , { requires : "tabletools" , init : function ( b ) { b . on ( "contentDom" , function ( ) { var d , a = b . editable ( ) ; a . attachListener ( a . isInline ( ) ? a : b . document , "mousemove" , function ( a ) { a = a . data ; var f = a . getTarget ( ) ; if ( f . type == CKEDITOR . NODE _ELEMENT ) { var h = a . getPageOffset ( ) . x ,
e = a . getPageOffset ( ) . y ; if ( d && d . move ( h , e ) ) z ( a ) ; else if ( f . is ( "table" ) || f . getAscendant ( { thead : 1 , tbody : 1 , tfoot : 1 } , 1 ) ) if ( a = f . getAscendant ( "table" , 1 ) , b . editable ( ) . contains ( a ) ) { ( f = a . getCustomData ( "_cke_table_pillars" ) ) || ( a . setCustomData ( "_cke_table_pillars" , f = C ( a ) ) , a . on ( "mouseout" , B ) , a . on ( "mousedown" , B ) ) ; a : { a = f ; for ( var f = 0 , g = a . length ; f < g ; f ++ ) { var c = a [ f ] ; if ( h >= c . x && h <= c . x + c . width && e >= c . y && e <= c . y + c . height ) { h = c ; break a } } h = null } h && ( ! d && ( d = new F ( b ) ) , d . attachTo ( h ) ) } } } ) } ) } } ) } ) ( ) ; ( function ( ) { function n ( a , b ) { return CKEDITOR . tools . array . reduce ( b , function ( a , b ) { return b ( a ) } , a ) } var g = [ CKEDITOR . CTRL + 90 , CKEDITOR . CTRL + 89 , CKEDITOR . CTRL + CKEDITOR . SHIFT + 90 ] , p = { 8 : 1 , 46 : 1 } ; CKEDITOR . plugins . add ( "undo" , { init : function ( a ) { function b ( a ) { d . enabled && ! 1 !== a . data . command . canUndo && d . save ( ) } function c ( ) { d . enabled = a . readOnly ? ! 1 : "wysiwyg" == a . mode ; d . onChange ( ) } var d = a . undoManager = new e ( a ) , l = d . editingHandler = new k ( d ) , f = a . addCommand ( "undo" , { exec : function ( ) { d . undo ( ) && ( a . selectionChange ( ) , this . fire ( "afterUndo" ) ) } ,
startDisabled : ! 0 , canUndo : ! 1 } ) , h = a . addCommand ( "redo" , { exec : function ( ) { d . redo ( ) && ( a . selectionChange ( ) , this . fire ( "afterRedo" ) ) } , startDisabled : ! 0 , canUndo : ! 1 } ) ; a . setKeystroke ( [ [ g [ 0 ] , "undo" ] , [ g [ 1 ] , "redo" ] , [ g [ 2 ] , "redo" ] ] ) ; d . onChange = function ( ) { f . setState ( d . undoable ( ) ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED ) ; h . setState ( d . redoable ( ) ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED ) } ; a . on ( "beforeCommandExec" , b ) ; a . on ( "afterCommandExec" , b ) ; a . on ( "saveSnapshot" , function ( a ) { d . save ( a . data && a . data . contentOnly ) } ) ;
a . on ( "contentDom" , l . attachListeners , l ) ; a . on ( "instanceReady" , function ( ) { a . fire ( "saveSnapshot" ) } ) ; a . on ( "beforeModeUnload" , function ( ) { "wysiwyg" == a . mode && d . save ( ! 0 ) } ) ; a . on ( "mode" , c ) ; a . on ( "readOnly" , c ) ; a . ui . addButton && ( a . ui . addButton ( "Undo" , { label : a . lang . undo . undo , command : "undo" , toolbar : "undo,10" } ) , a . ui . addButton ( "Redo" , { label : a . lang . undo . redo , command : "redo" , toolbar : "undo,20" } ) ) ; a . resetUndo = function ( ) { d . reset ( ) ; a . fire ( "saveSnapshot" ) } ; a . on ( "updateSnapshot" , function ( ) { d . currentImage && d . update ( ) } ) ; a . on ( "lockSnapshot" ,
function ( a ) { a = a . data ; d . lock ( a && a . dontUpdate , a && a . forceUpdate ) } ) ; a . on ( "unlockSnapshot" , d . unlock , d ) } } ) ; CKEDITOR . plugins . undo = { } ; var e = CKEDITOR . plugins . undo . UndoManager = function ( a ) { this . strokesRecorded = [ 0 , 0 ] ; this . locked = null ; this . previousKeyGroup = - 1 ; this . limit = a . config . undoStackSize || 20 ; this . strokesLimit = 25 ; this . _filterRules = [ ] ; this . editor = a ; this . reset ( ) ; CKEDITOR . env . ie && this . addFilterRule ( function ( a ) { return a . replace ( /\s+data-cke-expando=".*?"/g , "" ) } ) } ; e . prototype = { type : function ( a , b ) { var c = e . getKeyGroup ( a ) ,
@@ -1119,12 +1110,12 @@ a.attributes)return(a=a.getFirst(g.isParserWidgetElement))&&b.push([a]),!1;if("d
contenteditable : "false" , "data-cke-widget-wrapper" : 1 , "data-cke-filter" : "off" , "class" : "cke_widget_wrapper cke_widget_new cke_widget_" + ( a ? "inline" : "block" ) + ( b ? " cke_widget_" + b : "" ) } } function D ( a , b , c ) { if ( a . type == CKEDITOR . NODE _ELEMENT ) { var d = CKEDITOR . dtd [ a . name ] ; if ( d && ! d [ c . name ] ) { var d = a . split ( b ) , e = a . parent ; b = d . getIndex ( ) ; a . children . length || ( -- b , a . remove ( ) ) ; d . children . length || d . remove ( ) ; return D ( e , b , c ) } } a . add ( c , b ) } function E ( a , b ) { return "boolean" == typeof a . inline ? a . inline : ! ! CKEDITOR . dtd . $inline [ b ] } function ba ( a ) { return a . hasAttribute ( "data-cke-temp" ) }
function p ( a , b , c , d ) { var e = a . editor ; e . fire ( "lockSnapshot" ) ; c ? ( d = c . data ( "cke-widget-editable" ) , d = b . editables [ d ] , a . widgetHoldingFocusedEditable = b , b . focusedEditable = d , c . addClass ( "cke_widget_editable_focused" ) , d . filter && e . setActiveFilter ( d . filter ) , e . setActiveEnterMode ( d . enterMode , d . shiftEnterMode ) ) : ( d || b . focusedEditable . removeClass ( "cke_widget_editable_focused" ) , b . focusedEditable = null , a . widgetHoldingFocusedEditable = null , e . setActiveFilter ( null ) , e . setActiveEnterMode ( null , null ) ) ; e . fire ( "unlockSnapshot" ) }
function da ( a ) { a . contextMenu && a . contextMenu . addListener ( function ( b ) { if ( b = a . widgets . getByElement ( b , ! 0 ) ) return b . fire ( "contextMenu" , { } ) } ) } function ea ( a , b ) { return CKEDITOR . tools . trim ( b ) } function W ( a ) { var b = a . editor , c = CKEDITOR . plugins . lineutils ; b . on ( "dragstart" , function ( c ) { var e = c . data . target ; g . isDomDragHandler ( e ) && ( e = a . getByElement ( e ) , c . data . dataTransfer . setData ( "cke/widget-id" , e . id ) , b . focus ( ) , e . focus ( ) ) } ) ; b . on ( "drop" , function ( c ) { var e = c . data . dataTransfer , f = e . getData ( "cke/widget-id" ) , h = e . getTransferType ( b ) ,
e = b . createRange ( ) ; if ( "" !== f && h === CKEDITOR . DATA _TRANSFER _CROSS _EDITORS ) c . cancel ( ) ; else if ( h == CKEDITOR . DATA _TRANSFER _INTERNAL ) if ( ! f && 0 < b . widgets . selected . length ) c . data . dataTransfer . setData ( "text/html" , F ( b ) ) ; else if ( f = a . instances [ f ] ) e . setStartBefore ( f . wrapper ) , e . setEndAfter ( f . wrapper ) , c . data . dragRange = e , delete CKEDITOR . plugins . clipboard . dragStartContainerChildCount , delete CKEDITOR . plugins . clipboard . dragEndContainerChildCount , c . data . dataTransfer . setData ( "text/html" , f . getClipboardHtml ( ) ) , b . widgets . destroy ( f ,
e = b . createRange ( ) ; if ( "" !== f && h === CKEDITOR . DATA _TRANSFER _CROSS _EDITORS ) c . cancel ( ) ; else if ( h == CKEDITOR . DATA _TRANSFER _INTERNAL ) if ( "" === f && 0 < b . widgets . selected . length ) c . data . dataTransfer . setData ( "text/html" , F ( b ) ) ; else if ( f = a . instances [ f ] ) e . setStartBefore ( f . wrapper ) , e . setEndAfter ( f . wrapper ) , c . data . dragRange = e , delete CKEDITOR . plugins . clipboard . dragStartContainerChildCount , delete CKEDITOR . plugins . clipboard . dragEndContainerChildCount , c . data . dataTransfer . setData ( "text/html" , f . getClipboardHtml ( ) ) , b . widgets . destroy ( f ,
! 0 ) } ) ; b . on ( "contentDom" , function ( ) { var d = b . editable ( ) ; CKEDITOR . tools . extend ( a , { finder : new c . finder ( b , { lookups : { "default" : function ( b ) { if ( ! b . is ( CKEDITOR . dtd . $listItem ) && b . is ( CKEDITOR . dtd . $block ) && ! g . isDomNestedEditable ( b ) && ! a . _ . draggedWidget . wrapper . contains ( b ) ) { var c = g . getNestedEditable ( d , b ) ; if ( c ) { b = a . _ . draggedWidget ; if ( a . getByElement ( c ) == b ) return ; c = CKEDITOR . filter . instances [ c . data ( "cke-filter" ) ] ; b = b . requiredContent ; if ( c && b && ! c . check ( b ) ) return } return CKEDITOR . LINEUTILS _BEFORE | CKEDITOR . LINEUTILS _AFTER } } } } ) ,
locator : new c . locator ( b ) , liner : new c . liner ( b , { lineStyle : { cursor : "move !important" , "border-top-color" : "#666" } , tipLeftStyle : { "border-left-color" : "#666" } , tipRightStyle : { "border-right-color" : "#666" } } ) } , ! 0 ) } ) } function U ( a ) { var b = a . editor ; b . on ( "contentDom" , function ( ) { var c = b . editable ( ) , d = c . isInline ( ) ? c : b . document , e , f ; c . attachListener ( d , "mousedown" , function ( c ) { var d = c . data . getTarget ( ) ; e = d instanceof CKEDITOR . dom . element ? a . getByElement ( d ) : null ; f = 0 ; e && ( e . inline && d . type == CKEDITOR . NODE _ELEMENT && d . hasAttribute ( "data-cke-widget-drag-handler" ) ?
( f = 1 , a . focused != e && b . getSelection ( ) . removeAllRanges ( ) ) : g . getNestedEditable ( e . wrapper , d ) ? e = null : ( c . data . preventDefault ( ) , CKEDITOR . env . ie || e . focus ( ) ) ) } ) ; c . attachListener ( d , "mouseup" , function ( ) { f && e && e . wrapper && ( f = 0 , e . focus ( ) ) } ) ; CKEDITOR . env . ie && c . attachListener ( d , "mouseup" , function ( ) { setTimeout ( function ( ) { e && e . wrapper && c . contains ( e . wrapper ) && ( e . focus ( ) , e = null ) } ) } ) } ) ; b . on ( "doubleclick" , function ( b ) { var d = a . getByElement ( b . data . element ) ; if ( d && ! g . getNestedEditable ( d . wrapper , b . data . element ) ) return d . fire ( "doubleclick" ,
{ element : b . data . element } ) } , null , null , 1 ) } function V ( a ) { a . editor . on ( "key" , function ( b ) { var c = a . focused , d = a . widgetHoldingFocusedEditable , e ; c ? e = c . fire ( "key" , { keyCode : b . data . keyCode } ) : d && ( c = b . data . keyCode , b = d . focusedEditable , c == CKEDITOR . CTRL + 65 ? ( c = b . getBogus ( ) , d = d . editor . createRange ( ) , d . selectNodeContents ( b ) , c && d . setEndAt ( c , CKEDITOR . POSITION _BEFORE _START ) , d . select ( ) , e = ! 1 ) : 8 == c || 46 == c ? ( e = d . editor . getSelection ( ) . getRanges ( ) , d = e [ 0 ] , e = ! ( 1 == e . length && d . collapsed && d . checkBoundaryOfElement ( b , CKEDITOR [ 8 == c ? "START" :
"END" ] ) ) ) : e = void 0 ) ; return e } , null , null , 1 ) } function X ( a ) { function b ( b ) { 1 > a . selected . length || G ( c , "cut" === b . name ) } var c = a . editor ; c . on ( "contentDom" , function ( ) { var a = c . editable ( ) ; a . attachListener ( a , "copy" , b ) ; a . attachListener ( a , "cut" , b ) } ) } function T ( a ) { function b ( ) { var a = e . getSelection ( ) ; if ( ( a = ( a && a . getRanges ( ) ) [ 0 ] ) && ! a . collapsed ) { var b = c ( a . startContainer ) , d = c ( a . endContainer ) ; ! b && d ? ( a . setEndBefore ( d . wrapper ) , a . select ( ) ) : b && ! d && ( a . setStartAfter ( b . wrapper ) , a . select ( ) ) } } function c ( a ) { return a ? a . type == CKEDITOR . NODE _TEXT ?
"END" ] ) ) ) : e = void 0 ) ; return e } , null , null , 1 ) } function X ( a ) { function b ( b ) { 1 > a . selected . length || G ( c , "cut" === b . name ) } var c = a . editor ; c . on ( "contentDom" , function ( ) { var a = c . editable ( ) ; a . attachListener ( a , "copy" , b ) ; a . attachListener ( a , "cut" , b ) } ) } function T ( a ) { function b ( ) { var a = e . getSelection ( ) ; if ( a && ( a = a . getRanges ( ) [ 0 ] ) && ! a . collapsed ) { var b = c ( a . startContainer ) , d = c ( a . endContainer ) ; ! b && d ? ( a . setEndBefore ( d . wrapper ) , a . select ( ) ) : b && ! d && ( a . setStartAfter ( b . wrapper ) , a . select ( ) ) } } function c ( a ) { return a ? a . type == CKEDITOR . NODE _TEXT ?
c ( a . getParent ( ) ) : e . widgets . getByElement ( a ) : null } function d ( ) { a . fire ( "checkSelection" ) } var e = a . editor ; e . on ( "selectionCheck" , d ) ; e . on ( "contentDom" , function ( ) { e . editable ( ) . attachListener ( e , "key" , function ( ) { setTimeout ( d , 10 ) } ) } ) ; if ( ! CKEDITOR . env . ie ) a . on ( "checkSelection" , b ) ; a . on ( "checkSelection" , a . checkSelection , a ) ; e . on ( "selectionChange" , function ( b ) { var c = ( b = g . getNestedEditable ( e . editable ( ) , b . data . selection . getStartElement ( ) ) ) && a . getByElement ( b ) , d = a . widgetHoldingFocusedEditable ; d ? d === c && d . focusedEditable . equals ( b ) ||
( p ( a , d , null ) , c && b && p ( a , c , b ) ) : c && b && p ( a , c , b ) } ) ; e . on ( "dataReady" , function ( ) { H ( a ) . commit ( ) } ) ; e . on ( "blur" , function ( ) { var b ; ( b = a . focused ) && x ( a , b ) ; ( b = a . widgetHoldingFocusedEditable ) && p ( a , b , null ) } ) } function R ( a ) { var b = a . editor , c = { } ; b . on ( "toDataFormat" , function ( b ) { var e = CKEDITOR . tools . getNextNumber ( ) , f = [ ] ; b . data . downcastingSessionId = e ; c [ e ] = f ; b . data . dataValue . forEach ( function ( b ) { var c = b . attributes , e ; if ( "data-cke-widget-white-space" in c ) { e = z ( b ) ; var d = A ( b ) ; e . parent . attributes [ "data-cke-white-space-first" ] &&
( e . value = e . value . replace ( /^ /g , " " ) ) ; d . parent . attributes [ "data-cke-white-space-last" ] && ( d . value = d . value . replace ( / $/g , " " ) ) } if ( "data-cke-widget-id" in c ) { if ( c = a . instances [ c [ "data-cke-widget-id" ] ] ) e = b . getFirst ( g . isParserWidgetElement ) , f . push ( { wrapper : b , element : e , widget : c , editables : { } } ) , "1" != e . attributes [ "data-cke-widget-keep-attr" ] && delete e . attributes [ "data-widget" ] } else if ( "data-cke-widget-editable" in c ) return 0 < f . length && ( f [ f . length - 1 ] . editables [ c [ "data-cke-widget-editable" ] ] = b ) , ! 1 } , CKEDITOR . NODE _ELEMENT ,
@@ -1154,25 +1145,25 @@ var b,c={};if(!a)return null;if(a.styleableElements){b=this.getClassesArray();if
onLoad : function ( ) { void 0 !== CKEDITOR . document . $ . querySelectorAll && ( CKEDITOR . addCss ( '.cke_widget_wrapper{position:relative;outline:none}.cke_widget_inline{display:inline-block}.cke_widget_wrapper:hover\x3e.cke_widget_element{outline:2px solid #ffd25c;cursor:default}.cke_widget_wrapper:hover .cke_widget_editable{outline:2px solid #ffd25c}.cke_widget_wrapper.cke_widget_focused\x3e.cke_widget_element,.cke_widget_wrapper .cke_widget_editable.cke_widget_editable_focused{outline:2px solid #47a4f5}.cke_widget_editable{cursor:text}.cke_widget_drag_handler_container{position:absolute;width:15px;height:0;display:block;opacity:0.75;transition:height 0s 0.2s;line-height:0}.cke_widget_wrapper:hover\x3e.cke_widget_drag_handler_container{height:15px;transition:none}.cke_widget_drag_handler_container:hover{opacity:1}.cke_editable[contenteditable\x3d"false"] .cke_widget_drag_handler_container{display:none;}img.cke_widget_drag_handler{cursor:move;width:15px;height:15px;display:inline-block}.cke_widget_mask{position:absolute;top:0;left:0;width:100%;height:100%;display:block}.cke_widget_partial_mask{position:absolute;display:block}.cke_editable.cke_widget_dragging, .cke_editable.cke_widget_dragging *{cursor:move !important}' ) ,
pa ( ) ) } , beforeInit : function ( a ) { void 0 !== CKEDITOR . document . $ . querySelectorAll && ( a . widgets = new q ( a ) ) } , afterInit : function ( a ) { if ( void 0 !== CKEDITOR . document . $ . querySelectorAll ) { var b = a . widgets . registered , c , d , e ; for ( d in b ) c = b [ d ] , ( e = c . button ) && a . ui . addButton && a . ui . addButton ( CKEDITOR . tools . capitalize ( c . name , ! 0 ) , { label : e , command : c . name , toolbar : "insert,10" } ) ; da ( a ) ; ga ( a . undoManager ) } } } ) ; q . prototype = { MIN _SELECTION _CHECK _INTERVAL : 500 , add : function ( a , b ) { var c = this . editor ; b = CKEDITOR . tools . prototypedCopy ( b ) ; b . name =
a ; b . _ = b . _ || { } ; c . fire ( "widgetDefinition" , b ) ; b . template && ( b . template = new CKEDITOR . template ( b . template ) ) ; Z ( c , b ) ; aa ( this , b ) ; this . registered [ a ] = b ; if ( b . dialog && c . plugins . dialog ) var d = CKEDITOR . on ( "dialogDefinition" , function ( a ) { a = a . data . definition ; var f = a . dialog ; a . getMode || f . getName ( ) !== b . dialog || ( a . getMode = function ( ) { var a = f . getModel ( c ) ; return a && a instanceof CKEDITOR . plugins . widget && a . ready ? CKEDITOR . dialog . EDITING _MODE : CKEDITOR . dialog . CREATION _MODE } ) ; d . removeListener ( ) } ) ; return b } , addUpcastCallback : function ( a ) { this . _ . upcastCallbacks . push ( a ) } ,
checkSelection : function ( ) { var a = this . editor . getSelection ( ) , b = a . getSelectedElement ( ) , c = H ( this ) , d ; if ( b && ( d = this . getByElement ( b , ! 0 ) ) ) return c . focus ( d ) . select ( d ) . commit ( ) ; a = a . getRanges ( ) [ 0 ] ; if ( ! a || a . collapsed ) return c . commit ( ) ; a = new CKEDITOR . dom . walker ( a ) ; for ( a . evaluator = g . isDomWidgetWrapper ; b = a . next ( ) ; ) c . select ( this . getByElement ( b ) ) ; c . commit ( ) } , checkWidgets : function ( a ) { this . fire ( "checkWidgets" , CKEDITOR . tools . copy ( a || { } ) ) } , del : function ( a ) { if ( this . focused === a ) { var b = a . editor , c = b . createRange ( ) , d ; ( d = c . moveToClosestEditablePosition ( a . wrapper ,
! 0 ) ) || ( d = c . moveToClosestEditablePosition ( a . wrapper , ! 1 ) ) ; d && b . getSelection ( ) . selectRanges ( [ c ] ) } a . wrapper . remove ( ) ; this . destroy ( a , ! 0 ) } , destroy : function ( a , b ) { this . widgetHoldingFocusedEditable === a && p ( this , a , null , b ) ; a . destroy ( b ) ; delete this . instances [ a . id ] ; this . fire ( "instanceDestroyed" , a ) } , destroyAll : function ( a , b ) { var c , d , e = this . instances ; if ( b && ! a ) { d = b . find ( ".cke_widget_wrapper" ) ; for ( var e = d . count ( ) , f = 0 ; f < e ; ++ f ) ( c = this . getByElement ( d . getItem ( f ) , ! 0 ) ) && this . destroy ( c ) } else for ( d in e ) c = e [ d ] , this . destroy ( c ,
a ) } , finalizeCreation : function ( a ) { ( a = a . getFirst ( ) ) && g . isDomWidgetWrapper ( a ) && ( this . editor . insertElement ( a ) , a = this . getByElement ( a ) , a . ready = ! 0 , a . fire ( "ready" ) , a . focus ( ) ) } , getByElement : function ( ) { function a ( a ) { return a . is ( b ) && a . data ( "cke-widget-id" ) } var b = { div : 1 , span : 1 } ; return function ( b , d ) { if ( ! b ) return null ; var e = a ( b ) ; if ( ! d && ! e ) { var f = this . editor . editable ( ) ; do b = b . getParent ( ) ; while ( b && ! b . equals ( f ) && ! ( e = a ( b ) ) ) } return this . instances [ e ] || null } } ( ) , initOn : function ( a , b , c ) { b ? "string" == typeof b && ( b = this . registered [ b ] ) :
b = this . registered [ a . data ( "widget" ) ] ; if ( ! b ) return null ; var d = this . wrapElement ( a , b . name ) ; return d ? d . hasClass ( "cke_widget_new" ) ? ( a = new g ( this , this . _ . nextId ++ , a , b , c ) , a . isInited ( ) ? this . instances [ a . id ] = a : null ) : this . getByElement ( a ) : null } , initOnAll : function ( a ) { a = ( a || this . editor . editable ( ) ) . find ( ".cke_widget_new" ) ; for ( var b = [ ] , c , d = a . count ( ) ; d -- ; ) ( c = this . initOn ( a . getItem ( d ) . getFirst ( g . isDomWidgetElement ) ) ) && b . push ( c ) ; return b } , onWidget : function ( a ) { var b = Array . prototype . slice . call ( arguments ) ; b . shift ( ) ; for ( var c in this . instances ) { var d =
this . instances [ c ] ; d . name == a && d . on . apply ( d , b ) } this . on ( "instanceCreated" , function ( c ) { c = c . data ; c . name == a && c . on . apply ( c , b ) } ) } , parseElementClasses : function ( a ) { if ( ! a ) return null ; a = CKEDITOR . tools . trim ( a ) . split ( /\s+/ ) ; for ( var b , c = { } , d = 0 ; b = a . pop ( ) ; ) - 1 == b . indexOf ( "cke_" ) && ( c [ b ] = d = 1 ) ; return d ? c : null } , wrapElement : function ( a , b ) { var c = null , d , e ; if ( a instanceof CKEDITOR . dom . element ) { b = b || a . data ( "widget" ) ; d = this . registered [ b ] ; if ( ! d ) return null ; if ( ( c = a . getParent ( ) ) && c . type == CKEDITOR . NODE _ELEMENT && c . data ( "cke-widget-wrapper" ) ) return c ;
a . hasAttribute ( "data-cke-widget-keep-attr" ) || a . data ( "cke-widget-keep-attr" , a . data ( "widget" ) ? 1 : 0 ) ; a . data ( "widget" , b ) ; ( e = E ( d , a . getName ( ) ) ) && y ( a ) ; c = new CKEDITOR . dom . element ( e ? "span" : "div" , a . getDocument ( ) ) ; c . setAttributes ( C ( e , b ) ) ; c . data ( "cke-display-name" , d . pathName ? d . pathName : a . getName ( ) ) ; a . getParent ( ! 0 ) && c . replace ( a ) ; a . appendTo ( c ) } else if ( a instanceof CKEDITOR . htmlParser . element ) { b = b || a . attributes [ "data-widget" ] ; d = this . registered [ b ] ; if ( ! d ) return null ; if ( ( c = a . parent ) && c . type == CKEDITOR . NODE _ELEMENT &&
c . attributes [ "data-cke-widget-wrapper" ] ) return c ; "data-cke-widget-keep-attr" in a . attributes || ( a . attributes [ "data-cke-widget-keep-attr" ] = a . attributes [ "data-widget" ] ? 1 : 0 ) ; b && ( a . attributes [ "data-widget" ] = b ) ; ( e = E ( d , a . name ) ) && y ( a ) ; c = new CKEDITOR . htmlParser . element ( e ? "span" : "div" , C ( e , b ) ) ; c . attributes [ "data-cke-display-name" ] = d . pathName ? d . pathName : a . name ; d = a . parent ; var f ; d && ( f = a . getIndex ( ) , a . remove ( ) ) ; c . add ( a ) ; d && D ( d , f , c ) } return c } , _tests _createEditableFilter : B } ; CKEDITOR . event . implementOn ( q . prototype ) ; g . prototype =
{ addClass : function ( a ) { this . element . addClass ( a ) ; this . wrapper . addClass ( g . WRAPPER _CLASS _PREFIX + a ) } , applyStyle : function ( a ) { I ( this , a , 1 ) } , checkStyleActive : function ( a ) { a = J ( a ) ; var b ; if ( ! a ) return ! 1 ; for ( ; b = a . pop ( ) ; ) if ( ! this . hasClass ( b ) ) return ! 1 ; return ! 0 } , destroy : function ( a ) { this . fire ( "destroy" ) ; if ( this . editables ) for ( var b in this . editables ) this . destroyEditable ( b , a ) ; a || ( "0" == this . element . data ( "cke-widget-keep-attr" ) && this . element . removeAttribute ( "data-widget" ) , this . element . removeAttributes ( [ "data-cke-widget-data" ,
"data-cke-widget-keep-attr" ] ) , this . element . removeClass ( "cke_widget_element" ) , this . element . replace ( this . wrapper ) ) ; this . wrapper = null } , destroyEditable : function ( a , b ) { var c = this . editables [ a ] , d = ! 0 ; c . removeListener ( "focus" , M ) ; c . removeListener ( "blur" , L ) ; this . editor . focusManager . remove ( c ) ; if ( c . filter ) { for ( var e in this . repository . instances ) { var f = this . repository . instances [ e ] ; f . editables && ( f = f . editables [ a ] ) && f !== c && c . filter === f . filter && ( d = ! 1 ) } d && ( c . filter . destroy ( ) , ( d = this . repository . _ . filters [ this . name ] ) &&
delete d [ a ] ) } b || ( this . repository . destroyAll ( ! 1 , c ) , c . removeClass ( "cke_widget_editable" ) , c . removeClass ( "cke_widget_editable_focused" ) , c . removeAttributes ( [ "contenteditable" , "data-cke-widget-editable" , "data-cke-enter-mode" ] ) ) ; delete this . editables [ a ] } , edit : function ( ) { var a = { dialog : this . dialog } , b = this ; if ( ! 1 === this . fire ( "edit" , a ) || ! a . dialog ) return ! 1 ; this . editor . openDialog ( a . dialog , function ( a ) { var d , e ; ! 1 !== b . fire ( "dialog" , a ) && ( d = a . on ( "show" , function ( ) { a . setupContent ( b ) } ) , e = a . on ( "ok" , function ( ) { var d , e = b . on ( "data" ,
function ( a ) { d = 1 ; a . cancel ( ) } , null , null , 0 ) ; b . editor . fire ( "saveSnapshot" ) ; a . commitContent ( b ) ; e . removeListener ( ) ; d && ( b . fire ( "data" , b . data ) , b . editor . fire ( "saveSnapshot" ) ) } ) , a . once ( "hide" , function ( ) { d . removeListener ( ) ; e . removeListener ( ) } ) ) } , b ) ; return ! 0 } , getClasses : function ( ) { return this . repository . parseElementClasses ( this . element . getAttribute ( "class" ) ) } , getClipboardHtml : function ( ) { var a = this . editor . createRange ( ) ; a . setStartBefore ( this . wrapper ) ; a . setEndAfter ( this . wrapper ) ; return this . editor . editable ( ) . getHtmlFromRange ( a ) . getHtml ( ) } ,
hasClass : function ( a ) { return this . element . hasClass ( a ) } , initEditable : function ( a , b ) { var c = this . _findOneNotNested ( b . selector ) ; return c && c . is ( CKEDITOR . dtd . $editable ) ? ( c = new t ( this . editor , c , { filter : B . call ( this . repository , this . name , a , b ) } ) , this . editables [ a ] = c , c . setAttributes ( { contenteditable : "true" , "data-cke-widget-editable" : a , "data-cke-enter-mode" : c . enterMode } ) , c . filter && c . data ( "cke-filter" , c . filter . id ) , c . addClass ( "cke_widget_editable" ) , c . removeClass ( "cke_widget_editable_focused" ) , b . pathName && c . data ( "cke-display-name" ,
b . pathName ) , this . editor . focusManager . add ( c ) , c . on ( "focus" , M , this ) , CKEDITOR . env . ie && c . on ( "blur" , L , this ) , c . _ . initialSetData = ! 0 , c . setData ( c . getHtml ( ) ) , ! 0 ) : ! 1 } , _findOneNotNested : function ( a ) { a = this . wrapper . find ( a ) ; for ( var b , c , d = 0 ; d < a . count ( ) ; d ++ ) if ( b = a . getItem ( d ) , c = b . getAscendant ( g . isDomWidgetWrapper ) , this . wrapper . equals ( c ) ) return b ; return null } , isInited : function ( ) { return ! ( ! this . wrapper || ! this . inited ) } , isReady : function ( ) { return this . isInited ( ) && this . ready } , focus : function ( ) { var a = this . editor . getSelection ( ) ;
if ( a ) { var b = this . editor . checkDirty ( ) ; a . fake ( this . wrapper ) ; ! b && this . editor . resetDirty ( ) } this . editor . focus ( ) } , refreshMask : function ( ) { O ( this ) } , refreshParts : function ( a ) { N ( this , "undefined" !== typeof a ? a : ! 0 ) } , removeClass : function ( a ) { this . element . removeClass ( a ) ; this . wrapper . removeClass ( g . WRAPPER _CLASS _PREFIX + a ) } , removeStyle : function ( a ) { I ( this , a , 0 ) } , setData : function ( a , b ) { var c = this . data , d = 0 ; if ( "string" == typeof a ) c [ a ] !== b && ( c [ a ] = b , d = 1 ) ; else { var e = a ; for ( a in e ) c [ a ] !== e [ a ] && ( d = 1 , c [ a ] = e [ a ] ) } d && this . dataReady &&
( v ( this ) , this . fire ( "data" , c ) ) ; return this } , setFocused : function ( a ) { this . wrapper [ a ? "addClass" : "removeClass" ] ( "cke_widget_focused" ) ; this . fire ( a ? "focus" : "blur" ) ; return this } , setSelected : function ( a ) { this . wrapper [ a ? "addClass" : "removeClass" ] ( "cke_widget_selected" ) ; this . fire ( a ? "select" : "deselect" ) ; return this } , updateDragHandlerPosition : function ( ) { var a = this . editor , b = this . element . $ , c = this . _ . dragHandlerOffset , b = { x : b . offsetLeft , y : b . offsetTop - 15 } ; c && b . x == c . x && b . y == c . y || ( c = a . checkDirty ( ) , a . fire ( "lockSnapshot" ) ,
this . dragHandlerContainer . setStyles ( { top : b . y + "px" , left : b . x + "px" } ) , this . dragHandlerContainer . removeStyle ( "display" ) , a . fire ( "unlockSnapshot" ) , ! c && a . resetDirty ( ) , this . _ . dragHandlerOffset = b ) } } ; CKEDITOR . event . implementOn ( g . prototype ) ; g . getNestedEditable = function ( a , b ) { return ! b || b . equals ( a ) ? null : g . isDomNestedEditable ( b ) ? b : g . getNestedEditable ( a , b . getParent ( ) ) } ; g . isDomDragHandler = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "data-cke-widget-drag-handler" ) } ; g . isDomDragHandlerContainer = function ( a ) { return a . type ==
CKEDITOR . NODE _ELEMENT && a . hasClass ( "cke_widget_drag_handler_container" ) } ; g . isDomNestedEditable = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "data-cke-widget-editable" ) } ; g . isDomWidgetElement = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "data-widget" ) } ; g . isDomWidgetWrapper = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "data-cke-widget-wrapper" ) } ; g . isDomWidget = function ( a ) { return a ? this . isDomWidgetWrapper ( a ) || this . isDomWidgetElement ( a ) : ! 1 } ; g . isParserWidgetElement =
function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && ! ! a . attributes [ "data-widget" ] } ; g . isParserWidgetWrapper = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && ! ! a . attributes [ "data-cke-widget-wrapper" ] } ; g . WRAPPER _CLASS _PREFIX = "cke_widget_wrapper_" ; t . prototype = CKEDITOR . tools . extend ( CKEDITOR . tools . prototypedCopy ( CKEDITOR . dom . element . prototype ) , { setData : function ( a ) { this . _ . initialSetData || this . editor . widgets . destroyAll ( ! 1 , this ) ; this . _ . initialSetData = ! 1 ; a = this . editor . dataProcessor . toHtml ( a , { context : this . getName ( ) ,
filter : this . filter , enterMode : this . enterMode } ) ; this . setHtml ( a ) ; this . editor . widgets . initOnAll ( this ) } , getData : function ( ) { return this . editor . dataProcessor . toDataFormat ( this . getHtml ( ) , { context : this . getName ( ) , filter : this . filter , enterMode : this . enterMode } ) } } ) ; var fa = /^(?:<(?:div|span)(?: data-cke-temp="1")?(?: id="cke_copybin")?(?: data-cke-temp="1")?>)?(?:<(?:div|span)(?: style="[^"]+")?>)?<span [^>]*data-cke-copybin-start="1"[^>]*>.?<\/span>([\s\S]+)<span [^>]*data-cke-copybin-end="1"[^>]*>.?<\/span>(?:<\/(?:div|span)>)?(?:<\/(?:div|span)>)?$/i ,
checkSelection : function ( ) { if ( this . editor . getSelection ( ) ) { var a = this . editor . getSelection ( ) , b = a . getSelectedElement ( ) , c = H ( this ) , d ; if ( b && ( d = this . getByElement ( b , ! 0 ) ) ) return c . focus ( d ) . select ( d ) . commit ( ) ; a = a . getRanges ( ) [ 0 ] ; if ( ! a || a . collapsed ) return c . commit ( ) ; a = new CKEDITOR . dom . walker ( a ) ; for ( a . evaluator = g . isDomWidgetWrapper ; b = a . next ( ) ; ) c . select ( this . getByElement ( b ) ) ; c . commit ( ) } } , checkWidgets : function ( a ) { this . fire ( "checkWidgets" , CKEDITOR . tools . copy ( a || { } ) ) } , del : function ( a ) { if ( this . focused === a ) { var b = a . editor ,
c = b . createRange ( ) , d ; ( d = c . moveToClosestEditablePosition ( a . wrapper , ! 0 ) ) || ( d = c . moveToClosestEditablePosition ( a . wrapper , ! 1 ) ) ; d && b . getSelection ( ) . selectRanges ( [ c ] ) } a . wrapper . remove ( ) ; this . destroy ( a , ! 0 ) } , destroy : function ( a , b ) { this . widgetHoldingFocusedEditable === a && p ( this , a , null , b ) ; a . destroy ( b ) ; delete this . instances [ a . id ] ; this . fire ( "instanceDestroyed" , a ) } , destroyAll : function ( a , b ) { var c , d , e = this . instances ; if ( b && ! a ) { d = b . find ( ".cke_widget_wrapper" ) ; for ( var e = d . count ( ) , f = 0 ; f < e ; ++ f ) ( c = this . getByElement ( d . getItem ( f ) ,
! 0 ) ) && this . destroy ( c ) } else for ( d in e ) c = e [ d ] , this . destroy ( c , a ) } , finalizeCreation : function ( a ) { ( a = a . getFirst ( ) ) && g . isDomWidgetWrapper ( a ) && ( this . editor . insertElement ( a ) , a = this . getByElement ( a ) , a . ready = ! 0 , a . fire ( "ready" ) , a . focus ( ) ) } , getByElement : function ( ) { function a ( a ) { return a . is ( b ) && a . data ( "cke-widget-id" ) } var b = { div : 1 , span : 1 } ; return function ( b , d ) { if ( ! b ) return null ; var e = a ( b ) ; if ( ! d && ! e ) { var f = this . editor . editable ( ) ; do b = b . getParent ( ) ; while ( b && ! b . equals ( f ) && ! ( e = a ( b ) ) ) } return this . instances [ e ] || null } } ( ) ,
initOn : function ( a , b , c ) { b ? "string" == typeof b && ( b = this . registered [ b ] ) : b = this . registered [ a . data ( "widget" ) ] ; if ( ! b ) return null ; var d = this . wrapElement ( a , b . name ) ; return d ? d . hasClass ( "cke_widget_new" ) ? ( a = new g ( this , this . _ . nextId ++ , a , b , c ) , a . isInited ( ) ? this . instances [ a . id ] = a : null ) : this . getByElement ( a ) : null } , initOnAll : function ( a ) { a = ( a || this . editor . editable ( ) ) . find ( ".cke_widget_new" ) ; for ( var b = [ ] , c , d = a . count ( ) ; d -- ; ) ( c = this . initOn ( a . getItem ( d ) . getFirst ( g . isDomWidgetElement ) ) ) && b . push ( c ) ; return b } , onWidget : function ( a ) { var b =
Array . prototype . slice . call ( arguments ) ; b . shift ( ) ; for ( var c in this . instances ) { var d = this . instances [ c ] ; d . name == a && d . on . apply ( d , b ) } this . on ( "instanceCreated" , function ( c ) { c = c . data ; c . name == a && c . on . apply ( c , b ) } ) } , parseElementClasses : function ( a ) { if ( ! a ) return null ; a = CKEDITOR . tools . trim ( a ) . split ( /\s+/ ) ; for ( var b , c = { } , d = 0 ; b = a . pop ( ) ; ) - 1 == b . indexOf ( "cke_" ) && ( c [ b ] = d = 1 ) ; return d ? c : null } , wrapElement : function ( a , b ) { var c = null , d , e ; if ( a instanceof CKEDITOR . dom . element ) { b = b || a . data ( "widget" ) ; d = this . registered [ b ] ; if ( ! d ) return null ;
if ( ( c = a . getParent ( ) ) && c . type == CKEDITOR . NODE _ELEMENT && c . data ( "cke-widget-wrapper" ) ) return c ; a . hasAttribute ( "data-cke-widget-keep-attr" ) || a . data ( "cke-widget-keep-attr" , a . data ( "widget" ) ? 1 : 0 ) ; a . data ( "widget" , b ) ; ( e = E ( d , a . getName ( ) ) ) && y ( a ) ; c = new CKEDITOR . dom . element ( e ? "span" : "div" , a . getDocument ( ) ) ; c . setAttributes ( C ( e , b ) ) ; c . data ( "cke-display-name" , d . pathName ? d . pathName : a . getName ( ) ) ; a . getParent ( ! 0 ) && c . replace ( a ) ; a . appendTo ( c ) } else if ( a instanceof CKEDITOR . htmlParser . element ) { b = b || a . attributes [ "data-widget" ] ;
d = this . registered [ b ] ; if ( ! d ) return null ; if ( ( c = a . parent ) && c . type == CKEDITOR . NODE _ELEMENT && c . attributes [ "data-cke-widget-wrapper" ] ) return c ; "data-cke-widget-keep-attr" in a . attributes || ( a . attributes [ "data-cke-widget-keep-attr" ] = a . attributes [ "data-widget" ] ? 1 : 0 ) ; b && ( a . attributes [ "data-widget" ] = b ) ; ( e = E ( d , a . name ) ) && y ( a ) ; c = new CKEDITOR . htmlParser . element ( e ? "span" : "div" , C ( e , b ) ) ; c . attributes [ "data-cke-display-name" ] = d . pathName ? d . pathName : a . name ; d = a . parent ; var f ; d && ( f = a . getIndex ( ) , a . remove ( ) ) ; c . add ( a ) ; d && D ( d ,
f , c ) } return c } , _tests _createEditableFilter : B } ; CKEDITOR . event . implementOn ( q . prototype ) ; g . prototype = { addClass : function ( a ) { this . element . addClass ( a ) ; this . wrapper . addClass ( g . WRAPPER _CLASS _PREFIX + a ) } , applyStyle : function ( a ) { I ( this , a , 1 ) } , checkStyleActive : function ( a ) { a = J ( a ) ; var b ; if ( ! a ) return ! 1 ; for ( ; b = a . pop ( ) ; ) if ( ! this . hasClass ( b ) ) return ! 1 ; return ! 0 } , destroy : function ( a ) { this . fire ( "destroy" ) ; if ( this . editables ) for ( var b in this . editables ) this . destroyEditable ( b , a ) ; a || ( "0" == this . element . data ( "cke-widget-keep-attr" ) &&
this . element . removeAttribute ( "data-widget" ) , this . element . removeAttributes ( [ "data-cke-widget-data" , "data-cke-widget-keep-attr" ] ) , this . element . removeClass ( "cke_widget_element" ) , this . element . replace ( this . wrapper ) ) ; this . wrapper = null } , destroyEditable : function ( a , b ) { var c = this . editables [ a ] , d = ! 0 ; c . removeListener ( "focus" , M ) ; c . removeListener ( "blur" , L ) ; this . editor . focusManager . remove ( c ) ; if ( c . filter ) { for ( var e in this . repository . instances ) { var f = this . repository . instances [ e ] ; f . editables && ( f = f . editables [ a ] ) && f !==
c && c . filter === f . filter && ( d = ! 1 ) } d && ( c . filter . destroy ( ) , ( d = this . repository . _ . filters [ this . name ] ) && delete d [ a ] ) } b || ( this . repository . destroyAll ( ! 1 , c ) , c . removeClass ( "cke_widget_editable" ) , c . removeClass ( "cke_widget_editable_focused" ) , c . removeAttributes ( [ "contenteditable" , "data-cke-widget-editable" , "data-cke-enter-mode" ] ) ) ; delete this . editables [ a ] } , edit : function ( ) { var a = { dialog : this . dialog } , b = this ; if ( ! 1 === this . fire ( "edit" , a ) || ! a . dialog ) return ! 1 ; this . editor . openDialog ( a . dialog , function ( a ) { var d , e ; ! 1 !== b . fire ( "dialog" ,
a ) && ( d = a . on ( "show" , function ( ) { a . setupContent ( b ) } ) , e = a . on ( "ok" , function ( ) { var d , e = b . on ( "data" , function ( a ) { d = 1 ; a . cancel ( ) } , null , null , 0 ) ; b . editor . fire ( "saveSnapshot" ) ; a . commitContent ( b ) ; e . removeListener ( ) ; d && ( b . fire ( "data" , b . data ) , b . editor . fire ( "saveSnapshot" ) ) } ) , a . once ( "hide" , function ( ) { d . removeListener ( ) ; e . removeListener ( ) } ) ) } , b ) ; return ! 0 } , getClasses : function ( ) { return this . repository . parseElementClasses ( this . element . getAttribute ( "class" ) ) } , getClipboardHtml : function ( ) { var a = this . editor . createRange ( ) ;
a . setStartBefore ( this . wrapper ) ; a . setEndAfter ( this . wrapper ) ; return this . editor . editable ( ) . getHtmlFromRange ( a ) . getHtml ( ) } , hasClass : function ( a ) { return this . element . hasClass ( a ) } , initEditable : function ( a , b ) { var c = this . _findOneNotNested ( b . selector ) ; return c && c . is ( CKEDITOR . dtd . $editable ) ? ( c = new t ( this . editor , c , { filter : B . call ( this . repository , this . name , a , b ) } ) , this . editables [ a ] = c , c . setAttributes ( { contenteditable : "true" , "data-cke-widget-editable" : a , "data-cke-enter-mode" : c . enterMode } ) , c . filter && c . data ( "cke-filter" ,
c . filter . id ) , c . addClass ( "cke_widget_editable" ) , c . removeClass ( "cke_widget_editable_focused" ) , b . pathName && c . data ( "cke-display-name" , b . pathName ) , this . editor . focusManager . add ( c ) , c . on ( "focus" , M , this ) , CKEDITOR . env . ie && c . on ( "blur" , L , this ) , c . _ . initialSetData = ! 0 , c . setData ( c . getHtml ( ) ) , ! 0 ) : ! 1 } , _findOneNotNested : function ( a ) { a = this . wrapper . find ( a ) ; for ( var b , c , d = 0 ; d < a . count ( ) ; d ++ ) if ( b = a . getItem ( d ) , c = b . getAscendant ( g . isDomWidgetWrapper ) , this . wrapper . equals ( c ) ) return b ; return null } , isInited : function ( ) { return ! ( ! this . wrapper ||
! this . inited ) } , isReady : function ( ) { return this . isInited ( ) && this . ready } , focus : function ( ) { var a = this . editor . getSelection ( ) ; if ( a ) { var b = this . editor . checkDirty ( ) ; a . fake ( this . wrapper ) ; ! b && this . editor . resetDirty ( ) } this . editor . focus ( ) } , refreshMask : function ( ) { O ( this ) } , refreshParts : function ( a ) { N ( this , "undefined" !== typeof a ? a : ! 0 ) } , removeClass : function ( a ) { this . element . removeClass ( a ) ; this . wrapper . removeClass ( g . WRAPPER _CLASS _PREFIX + a ) } , removeStyle : function ( a ) { I ( this , a , 0 ) } , setData : function ( a , b ) { var c = this . data ,
d = 0 ; if ( "string" == typeof a ) c [ a ] !== b && ( c [ a ] = b , d = 1 ) ; else { var e = a ; for ( a in e ) c [ a ] !== e [ a ] && ( d = 1 , c [ a ] = e [ a ] ) } d && this . dataReady && ( v ( this ) , this . fire ( "data" , c ) ) ; return this } , setFocused : function ( a ) { this . wrapper [ a ? "addClass" : "removeClass" ] ( "cke_widget_focused" ) ; this . fire ( a ? "focus" : "blur" ) ; return this } , setSelected : function ( a ) { this . wrapper [ a ? "addClass" : "removeClass" ] ( "cke_widget_selected" ) ; this . fire ( a ? "select" : "deselect" ) ; return this } , updateDragHandlerPosition : function ( ) { var a = this . editor , b = this . element . $ , c = this . _ . dragHandlerOffset ,
b = { x : b . offsetLeft , y : b . offsetTop - 15 } ; c && b . x == c . x && b . y == c . y || ( c = a . checkDirty ( ) , a . fire ( "lockSnapshot" ) , this . dragHandlerContainer . setStyles ( { top : b . y + "px" , left : b . x + "px" } ) , this . dragHandlerContainer . removeStyle ( "display" ) , a . fire ( "unlockSnapshot" ) , ! c && a . resetDirty ( ) , this . _ . dragHandlerOffset = b ) } } ; CKEDITOR . event . implementOn ( g . prototype ) ; g . getNestedEditable = function ( a , b ) { return ! b || b . equals ( a ) ? null : g . isDomNestedEditable ( b ) ? b : g . getNestedEditable ( a , b . getParent ( ) ) } ; g . isDomDragHandler = function ( a ) { return a . type ==
CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "data-cke-widget-drag-handler" ) } ; g . isDomDragHandlerContainer = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasClass ( "cke_widget_drag_handler_container" ) } ; g . isDomNestedEditable = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "data-cke-widget-editable" ) } ; g . isDomWidgetElement = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "data-widget" ) } ; g . isDomWidgetWrapper = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "data-cke-widget-wrapper" ) } ;
g . isDomWidget = function ( a ) { return a ? this . isDomWidgetWrapper ( a ) || this . isDomWidgetElement ( a ) : ! 1 } ; g . isParserWidgetElement = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && ! ! a . attributes [ "data-widget" ] } ; g . isParserWidgetWrapper = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && ! ! a . attributes [ "data-cke-widget-wrapper" ] } ; g . WRAPPER _CLASS _PREFIX = "cke_widget_wrapper_" ; t . prototype = CKEDITOR . tools . extend ( CKEDITOR . tools . prototypedCopy ( CKEDITOR . dom . element . prototype ) , { setData : function ( a ) { this . _ . initialSetData ||
this . editor . widgets . destroyAll ( ! 1 , this ) ; this . _ . initialSetData = ! 1 ; a = this . editor . dataProcessor . toHtml ( a , { context : this . getName ( ) , filter : this . filter , enterMode : this . enterMode } ) ; this . setHtml ( a ) ; this . editor . widgets . initOnAll ( this ) } , getData : function ( ) { return this . editor . dataProcessor . toDataFormat ( this . getHtml ( ) , { context : this . getName ( ) , filter : this . filter , enterMode : this . enterMode } ) } } ) ; var fa = /^(?:<(?:div|span)(?: data-cke-temp="1")?(?: id="cke_copybin")?(?: data-cke-temp="1")?>)?(?:<(?:div|span)(?: style="[^"]+")?>)?<span [^>]*data-cke-copybin-start="1"[^>]*>.?<\/span>([\s\S]+)<span [^>]*data-cke-copybin-end="1"[^>]*>.?<\/span>(?:<\/(?:div|span)>)?(?:<\/(?:div|span)>)?$/i ,
P = { 37 : 1 , 38 : 1 , 39 : 1 , 40 : 1 , 8 : 1 , 46 : 1 } ; P [ CKEDITOR . SHIFT + 121 ] = 1 ; var u = CKEDITOR . tools . createClass ( { $ : function ( a , b ) { this . _ . createCopyBin ( a , b ) ; this . _ . createListeners ( b ) } , _ : { createCopyBin : function ( a ) { var b = a . document , c = CKEDITOR . env . edge && 16 <= CKEDITOR . env . version , d = ! a . blockless && ! CKEDITOR . env . ie || c ? "div" : "span" , c = b . createElement ( d ) , b = b . createElement ( d ) ; b . setAttributes ( { id : "cke_copybin" , "data-cke-temp" : "1" } ) ; c . setStyles ( { position : "absolute" , width : "1px" , height : "1px" , overflow : "hidden" } ) ; c . setStyle ( "ltr" == a . config . contentsLangDirection ?
"left" : "right" , "-5000px" ) ; this . editor = a ; this . copyBin = c ; this . container = b } , createListeners : function ( a ) { a && ( a . beforeDestroy && ( this . beforeDestroy = a . beforeDestroy ) , a . afterDestroy && ( this . afterDestroy = a . afterDestroy ) ) } } , proto : { handle : function ( a ) { var b = this . copyBin , c = this . editor , d = this . container , e = CKEDITOR . env . ie && 9 > CKEDITOR . env . version , f = c . document . getDocumentElement ( ) . $ , h = c . createRange ( ) , g = this , k = CKEDITOR . env . mac && CKEDITOR . env . webkit , n = k ? 100 : 0 , m = window . requestAnimationFrame && ! k ? requestAnimationFrame : setTimeout ,
p , r , q ; b . setHtml ( '\x3cspan data-cke-copybin-start\x3d"1"\x3e \x3c/span\x3e' + a + '\x3cspan data-cke-copybin-end\x3d"1"\x3e \x3c/span\x3e' ) ; c . fire ( "lockSnapshot" ) ; d . append ( b ) ; c . editable ( ) . append ( d ) ; p = c . on ( "selectionChange" , K , null , null , 0 ) ; r = c . widgets . on ( "checkSelection" , K , null , null , 0 ) ; e && ( q = f . scrollTop ) ; h . selectNodeContents ( b ) ; h . select ( ) ; e && ( f . scrollTop = q ) ; return new CKEDITOR . tools . promise ( function ( a ) { m ( function ( ) { g . beforeDestroy && g . beforeDestroy ( ) ; d . remove ( ) ; p . removeListener ( ) ; r . removeListener ( ) ; c . fire ( "unlockSnapshot" ) ;
@@ -1217,4 +1208,4 @@ h&&(a=a.replace(/<head[^>]*?>/,"$\x26"+h)),a=a.replace(/<\/head\s*>/,g+"$\x26"),
( a = a . replace ( /<body[^>]*>/ , "$\x26\x3c!-- cke-content-start --\x3e" ) ) ) ; c = '\x3cscript id\x3d"cke_actscrpt" type\x3d"text/javascript"' + ( CKEDITOR . env . ie ? ' defer\x3d"defer" ' : "" ) + "\x3evar wasLoaded\x3d0;function onload(){if(!wasLoaded)window.parent.CKEDITOR.tools.callFunction(" + this . _ . frameLoadedHandler + ",window);wasLoaded\x3d1;}" + ( CKEDITOR . env . ie ? "onload();" : 'document.addEventListener("DOMContentLoaded", onload, false );' ) + "\x3c/script\x3e" ; CKEDITOR . env . ie && 9 > CKEDITOR . env . version && ( c += '\x3cscript id\x3d"cke_shimscrpt"\x3ewindow.parent.CKEDITOR.tools.enableHtml5Elements(document)\x3c/script\x3e' ) ;
h && CKEDITOR . env . ie && 10 > CKEDITOR . env . version && ( c += '\x3cscript id\x3d"cke_basetagscrpt"\x3evar baseTag \x3d document.querySelector( "base" );baseTag.href \x3d baseTag.href;\x3c/script\x3e' ) ; a = a . replace ( /(?=\s*<\/(:?head)>)/ , c ) ; this . clearCustomData ( ) ; this . clearListeners ( ) ; b . fire ( "contentDomUnload" ) ; var k = this . getDocument ( ) ; try { k . write ( a ) } catch ( l ) { setTimeout ( function ( ) { k . write ( a ) } , 0 ) } } } , getData : function ( a ) { if ( a ) return this . getHtml ( ) ; a = this . editor ; var e = a . config , b = e . fullPage , c = b && a . docType , d = b && a . xmlDeclaration ,
f = this . getDocument ( ) , b = b ? f . getDocumentElement ( ) . getOuterHtml ( ) : f . getBody ( ) . getHtml ( ) ; CKEDITOR . env . gecko && e . enterMode != CKEDITOR . ENTER _BR && ( b = b . replace ( /<br>(?=\s*(:?$|<\/body>))/ , "" ) ) ; b = a . dataProcessor . toDataFormat ( b ) ; d && ( b = d + "\n" + b ) ; c && ( b = c + "\n" + b ) ; return b } , focus : function ( ) { this . _ . isLoadingData ? this . _ . isPendingFocus = ! 0 : l . baseProto . focus . call ( this ) } , detach : function ( ) { var a = this . editor , e = a . document , a = a . container . findOne ( "iframe.cke_wysiwyg_frame" ) ; l . baseProto . detach . call ( this ) ; this . clearCustomData ( this . _ . expandoNumber ) ;
e . getDocumentElement ( ) . clearCustomData ( ) ; CKEDITOR . tools . removeFunction ( this . _ . frameLoadedHandler ) ; a && ( a . clearCustomData ( ) , ( e = a . removeCustomData ( "onResize" ) ) && e . removeListener ( ) , a . isDetached ( ) || a . remove ( ) ) } } } ) } ) ( ) ; CKEDITOR . config . disableObjectResizing = ! 1 ; CKEDITOR . config . disableNativeTableHandles = ! 0 ; CKEDITOR . config . disableNativeSpellChecker = ! 0 ; CKEDITOR . config . plugins = 'dialogui,dialog,about,autogrow,base64image,basicstyles,blockquote,button,notification,toolbar,clipboard,panelbutton,panel,floatpanel,colorbutton,colordialog,menu,contextmenu,div,enterkey,entities,fakeobjects,floatingspace,listblock,richcombo,font,format,image,indent,indentlist,justify,link,list,menubutton,onchange,pastefromexcel,pastetools,pastefromword,pastetext,scayt,sourcearea,tab,table,tabletools,tableresize,undo,lineutils,widgetselection,widget,filetools,notificationaggregator,uploadwidget,uploadimage,wsc,wysiwygarea' ; CKEDITOR . config . skin = 'minimalist ' ; ( function ( ) { var setIcons = function ( icons , strip ) { var path = CKEDITOR . getUrl ( 'plugins/' + strip ) ; icons = icons . split ( ',' ) ; for ( var i = 0 ; i < icons . length ; i ++ ) CKEDITOR . skin . icons [ icons [ i ] ] = { path : path , offset : - icons [ ++ i ] , bgsize : icons [ ++ i ] } ; } ; if ( CKEDITOR . env . hidpi ) setIcons ( 'about,0,,base64image,24,,bold,48,,italic,72,,strike,96,,subscript,120,,superscript,144,,underline,168,,blockquote,192,,copy-rtl,216,,copy,240,,cut-rtl,264,,cut,288,,paste-rtl,312,,paste,336,,bgcolor,360,,textcolor,384,,creatediv,408,,image,432,,indent-rtl,456,,indent,480,,outdent-rtl,504,,outdent,528,,justifyblock,552,,justifycenter,576,,justifyleft,600,,justifyright,624,,anchor-rtl,648,,anchor,672,,link,696,,unlink,720,,bulletedlist-rtl,744,,bulletedlist,768,,numberedlist-rtl,792,,numberedlist,816,,pastefromword-rtl,840,,pastefromword,864,,pastetext-rtl,888,,pastetext,912,,scayt,936,,source-rtl,960,,source,984,,table,1008,,redo-rtl,1032,,redo,1056,,undo-rtl,1080,,undo,1104,,spellchecker,1128,' , 'icons_hidpi.png' ) ; else setIcons ( 'about,0,auto,base64image,24,auto,bold,48,auto,italic,72,auto,strike,96,auto,subscript,120,auto,superscript,144,auto,underline,168,auto,blockquote,192,auto,copy-rtl,216,auto,copy,240,auto,cut-rtl,264,auto,cut,288,auto,paste-rtl,312,auto,paste,336,auto,bgcolor,360,auto,textcolor,384,auto,creatediv,408,auto,image,432,auto,indent-rtl,456,auto,indent,480,auto,outdent-rtl,504,auto,outdent,528,auto,justifyblock,552,auto,justifycenter,576,auto,justifyleft,600,auto,justifyright,624,auto,anchor-rtl,648,auto,anchor,672,auto,link,696,auto,unlink,720,auto,bulletedlist-rtl,744,auto,bulletedlist,768,auto,numberedlist-rtl,792,auto,numberedlist,816,auto,pastefromword-rtl,840,auto,pastefromword,864,auto,pastetext-rtl,888,auto,pastetext,912,auto,scayt,936,auto,source-rtl,960,auto,source,984,auto,table,1008,auto,redo-rtl,1032,auto,redo,1056,auto,undo-rtl,1080,auto,undo,1104,auto,spellchecker,1128,auto' , 'icons.png' ) ; } ) ( ) ; CKEDITOR . lang . languages = { "ar" : 1 , "ca" : 1 , "cs" : 1 , "cy" : 1 , "da" : 1 , "de" : 1 , "en" : 1 , "es" : 1 , "eu" : 1 , "fi" : 1 , "fr" : 1 , "he" : 1 , "hr" : 1 , "hu" : 1 , "is" : 1 , "it" : 1 , "ja" : 1 , "lt" : 1 , "lv" : 1 , "mk" : 1 , "nb" : 1 , "nl" : 1 , "no" : 1 , "pl" : 1 , "pt" : 1 , "pt-br" : 1 , "ro" : 1 , "ru" : 1 , "sk" : 1 , "sl" : 1 , "sr" : 1 , "sv" : 1 , "tr" : 1 , "uk" : 1 , "zh" : 1 , "zh-cn" : 1 } ; } ( ) ) ;
e . getDocumentElement ( ) . clearCustomData ( ) ; CKEDITOR . tools . removeFunction ( this . _ . frameLoadedHandler ) ; a && ( a . clearCustomData ( ) , ( e = a . removeCustomData ( "onResize" ) ) && e . removeListener ( ) , a . isDetached ( ) || a . remove ( ) ) } } } ) } ) ( ) ; CKEDITOR . config . disableObjectResizing = ! 1 ; CKEDITOR . config . disableNativeTableHandles = ! 0 ; CKEDITOR . config . disableNativeSpellChecker = ! 0 ; CKEDITOR . config . plugins = 'dialogui,dialog,about,autogrow,base64image,basicstyles,blockquote,button,notification,toolbar,clipboard,panelbutton,panel,floatpanel,colorbutton,colordialog,menu,contextmenu,div,enterkey,entities,fakeobjects,floatingspace,listblock,richcombo,font,format,image,indent,indentlist,justify,link,list,menubutton,onchange,pastefromexcel,pastetools,pastefromword,pastetext,scayt,sourcearea,tab,table,tabletools,tableresize,undo,lineutils,widgetselection,widget,filetools,notificationaggregator,uploadwidget,uploadimage,wsc,wysiwygarea' ; CKEDITOR . config . skin = 'n1theme ' ; ( function ( ) { var setIcons = function ( icons , strip ) { var path = CKEDITOR . getUrl ( 'plugins/' + strip ) ; icons = icons . split ( ',' ) ; for ( var i = 0 ; i < icons . length ; i ++ ) CKEDITOR . skin . icons [ icons [ i ] ] = { path : path , offset : - icons [ ++ i ] , bgsize : icons [ ++ i ] } ; } ; if ( CKEDITOR . env . hidpi ) setIcons ( 'about,0,,base64image,24,,bold,48,,italic,72,,strike,96,,subscript,120,,superscript,144,,underline,168,,blockquote,192,,copy-rtl,216,,copy,240,,cut-rtl,264,,cut,288,,paste-rtl,312,,paste,336,,bgcolor,360,,textcolor,384,,creatediv,408,,image,432,,indent-rtl,456,,indent,480,,outdent-rtl,504,,outdent,528,,justifyblock,552,,justifycenter,576,,justifyleft,600,,justifyright,624,,anchor-rtl,648,,anchor,672,,link,696,,unlink,720,,bulletedlist-rtl,744,,bulletedlist,768,,numberedlist-rtl,792,,numberedlist,816,,pastefromword-rtl,840,,pastefromword,864,,pastetext-rtl,888,,pastetext,912,,scayt,936,,source-rtl,960,,source,984,,table,1008,,redo-rtl,1032,,redo,1056,,undo-rtl,1080,,undo,1104,,spellchecker,1128,' , 'icons_hidpi.png' ) ; else setIcons ( 'about,0,auto,base64image,24,auto,bold,48,auto,italic,72,auto,strike,96,auto,subscript,120,auto,superscript,144,auto,underline,168,auto,blockquote,192,auto,copy-rtl,216,auto,copy,240,auto,cut-rtl,264,auto,cut,288,auto,paste-rtl,312,auto,paste,336,auto,bgcolor,360,auto,textcolor,384,auto,creatediv,408,auto,image,432,auto,indent-rtl,456,auto,indent,480,auto,outdent-rtl,504,auto,outdent,528,auto,justifyblock,552,auto,justifycenter,576,auto,justifyleft,600,auto,justifyright,624,auto,anchor-rtl,648,auto,anchor,672,auto,link,696,auto,unlink,720,auto,bulletedlist-rtl,744,auto,bulletedlist,768,auto,numberedlist-rtl,792,auto,numberedlist,816,auto,pastefromword-rtl,840,auto,pastefromword,864,auto,pastetext-rtl,888,auto,pastetext,912,auto,scayt,936,auto,source-rtl,960,auto,source,984,auto,table,1008,auto,redo-rtl,1032,auto,redo,1056,auto,undo-rtl,1080,auto,undo,1104,auto,spellchecker,1128,auto' , 'icons.png' ) ; } ) ( ) ; CKEDITOR . lang . languages = { "ar" : 1 , "ca" : 1 , "cs" : 1 , "cy" : 1 , "da" : 1 , "de" : 1 , "en" : 1 , "es" : 1 , "eu" : 1 , "fi" : 1 , "fr" : 1 , "he" : 1 , "hr" : 1 , "hu" : 1 , "is" : 1 , "it" : 1 , "ja" : 1 , "lt" : 1 , "lv" : 1 , "mk" : 1 , "nb" : 1 , "nl" : 1 , "no" : 1 , "pl" : 1 , "pt" : 1 , "pt-br" : 1 , "ro" : 1 , "ru" : 1 , "sk" : 1 , "sl" : 1 , "sr" : 1 , "sv" : 1 , "tr" : 1 , "uk" : 1 , "zh" : 1 , "zh-cn" : 1 } ; } ( ) ) ;