@@ -2,14 +2,14 @@
Copyright ( c ) 2003 - 2018 , 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 : "I63C " , version : "4.10.0 " , revision : "de1371d " , 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 : "I8BG " , version : "4.10.1 " , revision : "59246e9 " , 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 n ( ) { try { document . documentElement . doScroll ( "left" ) } catch ( e ) { setTimeout ( n , 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 ( r ) { } document . documentElement . doScroll && b && n ( ) } } } ( ) } , 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 n ( e , a , y , v ) { e = { name : b , sender : this , editor : e , data : a , listenerData : k , stop : y , cancel : v , removeListener : r } ; return ! 1 === d . call ( h , e ) ? ! 1 : e . data } function r ( ) { y . 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 y = this ; n . fn = d ; n . priority = g ; for ( var v = e . length - 1 ; 0 <= v ; v -- ) if ( e [ v ] . priority <= g ) return e . splice ( v + 1 , 0 , n ) , { removeListener : r } ; e . unshift ( n ) } return { removeListener : r } } ,
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 , n , r ) { var e = d ( this ) [ g ] ; g = a ; var y = h ; a = h = 0 ; if ( e ) { var v = e . listeners ; if ( v . length ) for ( var v = v . slice ( 0 ) , A , D = 0 ; D < v . length ; D ++ ) { if ( e . errorProof ) try { A =
v [ D ] . call ( this , r , n , b , k ) } catch ( x ) { } else A = v [ D ] . call ( this , r , n , b , k ) ; ! 1 === A ? h = 1 : "undefined" != typeof A && ( n = A ) ; if ( a || h ) break } } n = h ? ! 1 : "undefined" == typeof n ? ! 0 : n ; a = g ; h = y ; return n } } ( ) , 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 } } } ( ) ) ;
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 , n , r ) { var e = d ( this ) [ g ] ; g = a ; var y = h ; a = h = 0 ; if ( e ) { var v = e . listeners ; if ( v . length ) for ( var v = v . slice ( 0 ) , B , D = 0 ; D < v . length ; D ++ ) { if ( e . errorProof ) try { B =
v [ D ] . call ( this , r , n , b , k ) } catch ( x ) { } else B = v [ D ] . call ( this , r , n , b , k ) ; ! 1 === B ? h = 1 : "undefined" != typeof B && ( n = B ) ; if ( a || h ) break } } n = h ? ! 1 : "undefined" == typeof n ? ! 0 : n ; a = g ; h = y ; return n } } ( ) , 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 ] ) ) ;
@@ -18,7 +18,7 @@ b.iOS&&(b.cssClass+=" cke_browser_ios");b.hidpi&&(b.cssClass+=" cke_hidpi");retu
"unloaded" == CKEDITOR . status && function ( ) { CKEDITOR . event . implementOn ( CKEDITOR ) ; CKEDITOR . loadFullCore = function ( ) { if ( "basic_ready" != CKEDITOR . status ) CKEDITOR . loadFullCore . _load = 1 ; else { delete CKEDITOR . loadFullCore ; var a = document . createElement ( "script" ) ; a . type = "text/javascript" ; a . src = CKEDITOR . basePath + "ckeditor.js" ; document . getElementsByTagName ( "head" ) [ 0 ] . appendChild ( a ) } } ; CKEDITOR . loadFullCoreTimeout = 0 ; CKEDITOR . add = function ( a ) { ( this . _ . pending || ( this . _ . pending = [ ] ) ) . push ( a ) } ; ( function ( ) { CKEDITOR . domReady ( function ( ) { var a =
CKEDITOR . loadFullCore , d = CKEDITOR . loadFullCoreTimeout ; a && ( CKEDITOR . status = "basic_ready" , a && a . _load ? a ( ) : d && setTimeout ( function ( ) { CKEDITOR . loadFullCore && CKEDITOR . loadFullCore ( ) } , 1E3 * d ) ) } ) } ) ( ) ; CKEDITOR . status = "basic_loaded" } ( ) ; "use strict" ; CKEDITOR . VERBOSITY _WARN = 1 ; CKEDITOR . VERBOSITY _ERROR = 2 ; CKEDITOR . verbosity = CKEDITOR . VERBOSITY _WARN | CKEDITOR . VERBOSITY _ERROR ; CKEDITOR . warn = function ( a , d ) { CKEDITOR . verbosity & CKEDITOR . VERBOSITY _WARN && CKEDITOR . fire ( "log" , { type : "warn" , errorCode : a , additionalData : d } ) } ;
CKEDITOR . error = function ( a , d ) { CKEDITOR . verbosity & CKEDITOR . VERBOSITY _ERROR && CKEDITOR . fire ( "log" , { type : "error" , errorCode : a , additionalData : d } ) } ;
CKEDITOR . on ( "log" , function ( a ) { if ( window . console && window . console . log ) { var d = console [ a . data . type ] ? a . data . type : "log" , b = a . data . errorCode ; if ( a = a . data . additionalData ) console [ d ] ( "[CKEDITOR] Error code: " + b + "." , a ) ; else console [ d ] ( "[CKEDITOR] Error code: " + b + "." ) ; console [ d ] ( "[CKEDITOR] For more information about this error go to https://docs. ckeditor.com/ckeditor4/docs/#! /guide/dev_errors-section- " + b ) } } , null , null , 999 ) ; CKEDITOR . dom = { } ;
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 ( ) { var a = [ ] , d = CKEDITOR . env . gecko ? "-moz-" : CKEDITOR . env . webkit ? "-webkit-" : CKEDITOR . env . ie ? "-ms-" : "" , b = /&/g , c = />/g , f = /</g , h = /"/g , k = /&(lt|gt|amp|quot|nbsp|shy|#\d{1,5});/g , g = { lt : "\x3c" , gt : "\x3e" , amp : "\x26" , quot : '"' , nbsp : " " , shy : " " } , n = function ( a , e ) { return "#" == e [ 0 ] ? String . fromCharCode ( parseInt ( e . slice ( 1 ) , 10 ) ) : g [ e ] } ; CKEDITOR . on ( "reset" , function ( ) { a = [ ] } ) ; CKEDITOR . tools = { arrayCompare : function ( a , e ) { if ( ! a && ! e ) return ! 0 ; if ( ! a || ! e || a . length != e . length ) return ! 1 ; for ( var b = 0 ; b < a . length ; b ++ ) if ( a [ b ] != e [ b ] ) return ! 1 ;
return ! 0 } , getIndex : function ( a , e ) { for ( var b = 0 ; b < a . length ; ++ b ) if ( e ( a [ b ] ) ) return b ; return - 1 } , clone : function ( a ) { var e ; if ( a && a instanceof Array ) { e = [ ] ; for ( var b = 0 ; b < a . length ; b ++ ) e [ b ] = CKEDITOR . tools . clone ( a [ b ] ) ; return e } 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 ; e = new a . constructor ; for ( b in a ) e [ b ] = CKEDITOR . tools . clone ( a [ b ] ) ; return e } , capitalize : function ( a , e ) { return a . charAt ( 0 ) . toUpperCase ( ) +
( e ? a . slice ( 1 ) : a . slice ( 1 ) . toLowerCase ( ) ) } , extend : function ( a ) { var e = arguments . length , b , v ; "boolean" == typeof ( b = arguments [ e - 1 ] ) ? e -- : "boolean" == typeof ( b = arguments [ e - 2 ] ) && ( v = arguments [ e - 1 ] , e -= 2 ) ; for ( var c = 1 ; c < e ; c ++ ) { var g = arguments [ c ] , d ; for ( d in g ) if ( ! 0 === b || null == a [ d ] ) if ( ! v || d in v ) a [ d ] = g [ d ] } return a } , prototypedCopy : function ( a ) { var e = function ( ) { } ; e . prototype = a ; return new e } , copy : function ( a ) { var e = { } , b ; for ( b in a ) e [ b ] = a [ b ] ; return e } , isArray : function ( a ) { return "[object Array]" == Object . prototype . toString . call ( a ) } ,
@@ -144,10 +144,10 @@ function(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.env.webkit?1:0;re
function ( a ) { return function ( b ) { b = h ( b ) || k ( b ) || g ( b ) ; return ! ! ( a ^ b ) } } ; var r = CKEDITOR . dom . walker . ignored ( ) ; CKEDITOR . dom . walker . empty = function ( a ) { return function ( b ) { for ( var c = 0 , e = b . getChildCount ( ) ; c < e ; ++ c ) if ( ! r ( b . getChild ( c ) ) ) return ! ! a ; return ! a } } ; var e = CKEDITOR . dom . walker . empty ( ) , y = CKEDITOR . dom . walker . validEmptyBlockContainers = CKEDITOR . tools . extend ( function ( a ) { var b = { } , c ; for ( c in a ) CKEDITOR . dtd [ c ] [ "#" ] && ( b [ c ] = 1 ) ; return b } ( CKEDITOR . dtd . $block ) , { caption : 1 , td : 1 , th : 1 } ) ; CKEDITOR . dom . walker . editable = function ( a ) { return function ( b ) { b =
r ( b ) ? ! 1 : b . type == CKEDITOR . NODE _TEXT || b . type == CKEDITOR . NODE _ELEMENT && ( b . is ( CKEDITOR . dtd . $inline ) || b . is ( "hr" ) || "false" == b . getAttribute ( "contenteditable" ) || ! CKEDITOR . env . needsBrFiller && b . is ( y ) && e ( b ) ) ? ! 0 : ! 1 ; return ! ! ( a ^ b ) } } ; CKEDITOR . dom . element . prototype . getBogus = function ( ) { var a = this ; do a = a . getPreviousSourceNode ( ) ; while ( n ( 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 ( ) , r && b . append ( a , c ) ) ; return d } function m ( ) { var a , b , c , e = Math . min ( O . length , p . length ) ; for ( a = 0 ; a < e ; a ++ ) if ( b = O [ a ] , c = p [ a ] , ! b . equals ( c ) ) return a ; return a - 1 } function g ( ) { var b = N - 1 , c = E && z && ! t . equals ( F ) ; b < w - 1 || b < B - 1 || c ? ( c ? a . moveToPosition ( F ,
CKEDITOR . POSITION _BEFORE _START ) : B == b + 1 && q ? a . moveToPosition ( p [ b ] , CKEDITOR . POSITION _BEFORE _END ) : a . moveToPosition ( p [ b + 1 ] , CKEDITOR . POSITION _BEFORE _START ) , d && ( b = O [ b + 1 ] ) && b . type == CKEDITOR . NODE _ELEMENT && ( c = CKEDITOR . dom . element . createFromHtml ( '\x3cspan data-cke-bookmark\x3d"1" style\x3d"display:none"\x3e\x26nbsp;\x3c/span\x3e' , a . document ) , c . insertAfter ( b ) , b . mergeSiblings ( ! 1 ) , a . moveToBookmark ( { startNode : c } ) ) ) : a . collapse ( ! 0 ) } a . optimizeBookmark ( ) ; var k = 0 === b , r = 1 == b , l = 2 == b ; b = l || r ; var t = a . startContainer , F = a . endContainer ,
( 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 ( ) , r && b . append ( a , c ) ) ; return d } function m ( ) { var a , b , c , e = Math . min ( O . length , p . length ) ; for ( a = 0 ; a < e ; a ++ ) if ( b = O [ a ] , c = p [ a ] , ! b . equals ( c ) ) return a ; return a - 1 } function g ( ) { var b = N - 1 , c = E && z && ! t . equals ( F ) ; b < w - 1 || b < A - 1 || c ? ( c ? a . moveToPosition ( F ,
CKEDITOR . POSITION _BEFORE _START ) : A == b + 1 && q ? a . moveToPosition ( p [ b ] , CKEDITOR . POSITION _BEFORE _END ) : a . moveToPosition ( p [ b + 1 ] , CKEDITOR . POSITION _BEFORE _START ) , d && ( b = O [ b + 1 ] ) && b . type == CKEDITOR . NODE _ELEMENT && ( c = CKEDITOR . dom . element . createFromHtml ( '\x3cspan data-cke-bookmark\x3d"1" style\x3d"display:none"\x3e\x26nbsp;\x3c/span\x3e' , a . document ) , c . insertAfter ( b ) , b . mergeSiblings ( ! 1 ) , a . moveToBookmark ( { startNode : c } ) ) ) : a . collapse ( ! 0 ) } a . optimizeBookmark ( ) ; var k = 0 === b , r = 1 == b , l = 2 == b ; b = l || r ; var t = a . startContainer , F = a . endContainer ,
L = a . startOffset , C = a . endOffset , M , q , E , z , H , P ; if ( l && F . type == CKEDITOR . NODE _TEXT && ( t . equals ( F ) || t . type === CKEDITOR . NODE _ELEMENT && t . getFirst ( ) . equals ( F ) ) ) c . append ( a . document . createText ( F . substring ( L , C ) ) ) ; else { F . type == CKEDITOR . NODE _TEXT ? l ? P = ! 0 : F = F . split ( C ) : 0 < F . getChildCount ( ) ? C >= F . getChildCount ( ) ? ( F = F . getChild ( C - 1 ) , q = ! 0 ) : F = F . getChild ( C ) : z = q = ! 0 ; t . type == CKEDITOR . NODE _TEXT ? l ? H = ! 0 : t . split ( L ) : 0 < t . getChildCount ( ) ? 0 === L ? ( t = t . getChild ( L ) , M = ! 0 ) : t = t . getChild ( L - 1 ) : E = M = ! 0 ; for ( var O = t . getParents ( ) , p = F . getParents ( ) , N = m ( ) ,
w = O . length - 1 , B = p . length - 1 , G = c , I , X , V , da = - 1 , Q = N ; Q <= w ; Q ++ ) { X = O [ Q ] ; V = X . getNext ( ) ; for ( Q != w || X . equals ( p [ Q ] ) && w < B ? b && ( I = G . append ( X . clone ( 0 , f ) ) ) : M ? h ( X , G , ! 1 , E ) : H && G . append ( a . document . createText ( X . substring ( L ) ) ) ; V ; ) { if ( V . equals ( p [ Q ] ) ) { da = Q ; break } V = h ( V , G ) } G = I } G = c ; for ( Q = N ; Q <= B ; Q ++ ) if ( c = p [ Q ] , V = c . getPrevious ( ) , c . equals ( O [ Q ] ) ) b && ( G = G . getChild ( 0 ) ) ; else { Q != B || c . equals ( O [ Q ] ) && B < w ? b && ( I = G . append ( c . clone ( 0 , f ) ) ) : q ? h ( c , G , ! 1 , z ) : P && G . append ( a . document . createText ( c . substring ( 0 , C ) ) ) ; if ( Q > da ) for ( ; V ; ) V = h ( V , G , ! 0 ) ; G = I } l || g ( ) } }
w = O . length - 1 , A = p . length - 1 , G = c , I , X , V , da = - 1 , Q = N ; Q <= w ; Q ++ ) { X = O [ Q ] ; V = X . getNext ( ) ; for ( Q != w || X . equals ( p [ Q ] ) && w < A ? b && ( I = G . append ( X . clone ( 0 , f ) ) ) : M ? h ( X , G , ! 1 , E ) : H && G . append ( a . document . createText ( X . substring ( L ) ) ) ; V ; ) { if ( V . equals ( p [ Q ] ) ) { da = Q ; break } V = h ( V , G ) } G = I } G = c ; for ( Q = N ; Q <= A ; Q ++ ) if ( c = p [ Q ] , V = c . getPrevious ( ) , c . equals ( O [ Q ] ) ) b && ( G = G . getChild ( 0 ) ) ; else { Q != A || c . equals ( O [ Q ] ) && A < w ? b && ( I = G . append ( c . clone ( 0 , f ) ) ) : q ? h ( c , G , ! 1 , z ) : P && G . append ( a . document . createText ( c . substring ( 0 , C ) ) ) ; if ( Q > da ) for ( ; V ; ) V = h ( V , G , ! 0 ) ; G = I } 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 && r ( a ) && ( b = a ) ; return n ( 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)$/ , n = CKEDITOR . dom . walker . editable ( ) , r = 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 ||
@@ -167,7 +167,7 @@ t.getText();if(d.test(M))t=null;else for(var q=t.$.getElementsByTagName("*"),E=0
( l = C . getParent ( ) ) : h ( C , q ) && ( l = C . getParent ( ) ) ) : ( t = C . getChild ( q ) ) || ( l = C ) ; for ( ; l || t ; ) { if ( l && ! t ) { ! F && l . equals ( m ) && ( F = ! 0 ) ; if ( f ? l . isBlockBoundary ( ) : ! g . contains ( l ) ) break ; L && "inline" == l . getComputedStyle ( "display" ) || ( L = ! 1 , F ? r = l : l && this . setEndAfter ( l ) ) ; t = l . getNext ( ) } for ( ; t ; ) { C = ! 1 ; if ( t . type == CKEDITOR . NODE _TEXT ) M = t . getText ( ) , h ( t , 0 ) || ( t = null ) , C = /^[\s\ufeff]/ . test ( M ) ; else if ( t . type == CKEDITOR . NODE _ELEMENT ) { if ( ( 0 < t . $ . offsetWidth || b && t . is ( "br" ) ) && ! t . data ( "cke-bookmark" ) ) if ( L && CKEDITOR . dtd . $removeEmpty [ t . getName ( ) ] ) { M =
t . getText ( ) ; if ( d . test ( M ) ) t = null ; else for ( q = t . $ . getElementsByTagName ( "*" ) , E = 0 ; z = q [ E ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ z . nodeName . toLowerCase ( ) ] ) { t = null ; break } t && ( C = ! ! M . length ) } else t = null } else C = 1 ; C && L && ( F ? r = l : this . setEndAfter ( l ) ) ; if ( t ) { C = t . getNext ( ) ; if ( ! l && ! C ) { l = t ; t = null ; break } t = C } else l = null } l && ( l = c ( l . getParent ( ) ) ) } k && r && ( m = k . contains ( r ) ? r : k , this . setStartBefore ( m ) , this . setEndAfter ( m ) ) ; break ; case CKEDITOR . ENLARGE _BLOCK _CONTENTS : case CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : l = new CKEDITOR . dom . range ( this . root ) ;
g = this . root ; l . setStartAt ( g , CKEDITOR . POSITION _AFTER _START ) ; l . setEnd ( this . startContainer , this . startOffset ) ; l = new CKEDITOR . dom . walker ( l ) ; var H , P , O = 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 = O ( a ) ; b || ( H = a ) ; return b } , f = function ( a ) { var b = N ( a ) ; ! b && a . is && a . is ( "br" ) && ( P = a ) ; return b } ; l . guard = N ; l = l . lastBackward ( ) ;
H = H || g ; this . setStartAt ( H , ! H . is ( "br" ) && ( ! l && this . checkStartOfBlock ( ) || l && H . 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 w = CKEDITOR . dom . walker . whitespaces ( ) , B = CKEDITOR . dom . walker . bookmark ( ) ; l . evaluator = function ( a ) { return ! w ( a ) && ! B ( 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 ) ;
H = H || g ; this . setStartAt ( H , ! H . is ( "br" ) && ( ! l && this . checkStartOfBlock ( ) || l && H . 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 w = CKEDITOR . dom . walker . whitespaces ( ) , A = CKEDITOR . dom . walker . bookmark ( ) ; l . evaluator = function ( a ) { return ! w ( a ) && ! A ( 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 ; H = p = P = null ; l = l . lastForward ( ) ; H = H || g ; this . setEndAt ( H , ! l && this . checkEndOfBlock ( ) || l && H . contains ( l ) ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _BEFORE _START ) ; P && this . setEndAfter ( P ) } } , 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 ( ) , m = this . startContainer , g = this . endContainer , k = this . startOffset ,
r = this . endOffset , l = c = 1 ; m && m . type == CKEDITOR . NODE _TEXT && ( k ? k >= m . getLength ( ) ? h . setStartAfter ( m ) : ( h . setStartBefore ( m ) , c = 0 ) : h . setStartBefore ( m ) ) ; g && g . type == CKEDITOR . NODE _TEXT && ( r ? r >= g . getLength ( ) ? h . setEndAfter ( g ) : ( h . setEndAfter ( g ) , l = 0 ) : h . setEndBefore ( g ) ) ; var h = new CKEDITOR . dom . walker ( h ) , t = CKEDITOR . dom . walker . bookmark ( ) , F = CKEDITOR . dom . walker . bogus ( ) ; h . evaluator = function ( b ) { return b . type == ( a == CKEDITOR . SHRINK _ELEMENT ? CKEDITOR . NODE _ELEMENT : CKEDITOR . NODE _TEXT ) } ; var L ; h . guard = function ( b , c ) { if ( f && F ( b ) || t ( b ) ) return ! 0 ;
if ( a == CKEDITOR . SHRINK _ELEMENT && b . type == CKEDITOR . NODE _TEXT || c && b . equals ( L ) || ! 1 === d && b . type == CKEDITOR . NODE _ELEMENT && b . isBlockBoundary ( ) || b . type == CKEDITOR . NODE _ELEMENT && b . hasAttribute ( "contenteditable" ) ) return ! 1 ; c || b . type != CKEDITOR . NODE _ELEMENT || ( L = b ) ; return ! 0 } ; c && ( m = h [ a == CKEDITOR . SHRINK _ELEMENT ? "lastForward" : "next" ] ( ) ) && this . setStartAt ( m , b ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _BEFORE _START ) ; l && ( h . reset ( ) , ( h = h [ a == CKEDITOR . SHRINK _ELEMENT ? "lastBackward" : "previous" ] ( ) ) && this . setEndAt ( h , b ? CKEDITOR . POSITION _BEFORE _END :
@@ -200,31 +200,31 @@ d.startNode.equals(c),k=c.getPosition(d.endNode)&CKEDITOR.POSITION_PRECEDING+CKE
for ( e = d . next ( ) ; f ( e ) || b . endContainer . equals ( e ) ; ) e = d . next ( ) ; d = ! e } d ? c . setEnd ( b . endContainer , b . endOffset ) : a . push ( b ) ; return a } , [ ] ) } } ) ( ) ; CKEDITOR . POSITION _AFTER _START = 1 ; CKEDITOR . POSITION _BEFORE _END = 2 ; CKEDITOR . POSITION _BEFORE _START = 3 ; CKEDITOR . POSITION _AFTER _END = 4 ; CKEDITOR . ENLARGE _ELEMENT = 1 ; CKEDITOR . ENLARGE _BLOCK _CONTENTS = 2 ; CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS = 3 ; CKEDITOR . ENLARGE _INLINE = 4 ; CKEDITOR . START = 1 ; CKEDITOR . END = 2 ; CKEDITOR . SHRINK _ELEMENT = 1 ; CKEDITOR . SHRINK _TEXT = 2 ; "use strict" ;
( function ( ) { function a ( a ) { 1 > arguments . length || ( this . range = a , this . forceBrBreak = 0 , this . enlargeBr = 1 , this . enforceRealBlocks = 0 , this . _ || ( this . _ = { } ) ) } function d ( a ) { var b = [ ] ; a . forEach ( function ( a ) { if ( "true" == a . getAttribute ( "contenteditable" ) ) return b . push ( a ) , ! 1 } , CKEDITOR . NODE _ELEMENT , ! 0 ) ; return b } function b ( a , c , 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 ) } , n = { dd : 1 , dt : 1 , li : 1 } ; a . prototype = { getNextParagraph : function ( a ) { var d , k , v , A , D ; 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 =
g = function ( a ) { return h ( a ) && k ( a ) } , n = { dd : 1 , dt : 1 , li : 1 } ; a . prototype = { getNextParagraph : function ( a ) { var d , k , v , B , D ; 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 x = this . range . clone ( ) ; k = x . startPath ( ) ; var m = x . endPath ( ) , J = ! x . collapsed && c ( x , k . block ) , u = ! x . collapsed && c ( x , m . block , 1 ) ; x . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 ) ; J && x . setStartAt ( k . block , CKEDITOR . POSITION _BEFORE _END ) ; u && x . setEndAt ( m . block , CKEDITOR . POSITION _AFTER _START ) ; k = x . endContainer . hasAscendant ( "pre" , ! 0 ) || x . startContainer . hasAscendant ( "pre" , ! 0 ) ; x . enlarge ( this . forceBrBreak && ! k || ! this . enlargeBr ? CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : CKEDITOR . ENLARGE _BLOCK _CONTENTS ) ;
x . collapsed || ( k = new CKEDITOR . dom . walker ( x . clone ( ) ) , m = CKEDITOR . dom . walker . bookmark ( ! 0 , ! 0 ) , k . evaluator = m , this . _ . nextNode = k . next ( ) , k = new CKEDITOR . dom . walker ( x . clone ( ) ) , k . evaluator = m , k = k . previous ( ) , this . _ . lastNode = k . getNextSourceNode ( ! 0 , null , x . root ) , this . _ . lastNode && this . _ . lastNode . type == CKEDITOR . NODE _TEXT && ! CKEDITOR . tools . trim ( this . _ . lastNode . getText ( ) ) && this . _ . lastNode . getParent ( ) . isBlockBoundary ( ) && ( m = this . range . clone ( ) , m . moveToPosition ( this . _ . lastNode , CKEDITOR . POSITION _AFTER _END ) , m . checkEndOfBlock ( ) &&
( m = new CKEDITOR . dom . elementPath ( m . endContainer , m . root ) , this . _ . lastNode = ( m . block || m . blockLimit ) . getNextSourceNode ( ! 0 ) ) ) , this . _ . lastNode && x . root . contains ( this . _ . lastNode ) || ( this . _ . lastNode = this . _ . docEndMarker = x . document . createText ( "" ) , this . _ . lastNode . insertAfter ( k ) ) , x = null ) ; this . _ . started = 1 ; k = x } m = this . _ . nextNode ; x = this . _ . lastNode ; for ( this . _ . nextNode = null ; m ; ) { var J = 0 , u = m . hasAscendant ( "pre" ) , K = m . type != CKEDITOR . NODE _ELEMENT , l = 0 ; if ( K ) m . type == CKEDITOR . NODE _TEXT && f . test ( m . getText ( ) ) && ( K = 0 ) ; else { var t = m . getName ( ) ;
if ( CKEDITOR . dtd . $block [ t ] && "false" == m . getAttribute ( "contenteditable" ) ) { d = m ; b ( this , a , d ) ; break } else if ( m . isBlockBoundary ( this . forceBrBreak && ! u && { br : 1 } ) ) { if ( "br" == t ) K = 1 ; else if ( ! k && ! m . getChildCount ( ) && "hr" != t ) { d = m ; v = m . equals ( x ) ; break } k && ( k . setEndAt ( m , CKEDITOR . POSITION _BEFORE _START ) , "br" != t && ( this . _ . nextNode = m ) ) ; J = 1 } else { if ( m . getFirst ( ) ) { k || ( k = this . range . clone ( ) , k . setStartAt ( m , CKEDITOR . POSITION _BEFORE _START ) ) ; m = m . getFirst ( ) ; continue } K = 1 } } K && ! k && ( k = this . range . clone ( ) , k . setStartAt ( m , CKEDITOR . POSITION _BEFORE _START ) ) ;
v = ( ! J || K ) && m . equals ( x ) ; if ( k && ! J ) for ( ; ! m . getNext ( g ) && ! v ; ) { t = m . getParent ( ) ; if ( t . isBlockBoundary ( this . forceBrBreak && ! u && { br : 1 } ) ) { J = 1 ; K = 0 ; v || t . equals ( x ) ; k . setEndAt ( t , CKEDITOR . POSITION _BEFORE _END ) ; break } m = t ; K = 1 ; v = m . equals ( x ) ; l = 1 } K && k . setEndAt ( m , CKEDITOR . POSITION _AFTER _END ) ; m = this . _getNextSourceNode ( m , l , x ) ; if ( ( v = ! m ) || J && k ) break } if ( ! d ) { if ( ! k ) return this . _ . docEndMarker && this . _ . docEndMarker . remove ( ) , this . _ . nextNode = null ; d = new CKEDITOR . dom . elementPath ( k . startContainer , k . root ) ; m = d . blockLimit ; J = { div : 1 , th : 1 , td : 1 } ;
d = d . block ; ! d && m && ! this . enforceRealBlocks && J [ m . getName ( ) ] && k . checkStartOfBlock ( ) && k . checkEndOfBlock ( ) && ! m . equals ( k . root ) ? d = m : ! d || this . enforceRealBlocks && d . is ( n ) ? ( d = this . range . document . createElement ( a ) , k . extractContents ( ) . appendTo ( d ) , d . trim ( ) , k . insertNode ( d ) , A = D = ! 0 ) : "li" != d . getName ( ) ? k . checkStartOfBlock ( ) && k . checkEndOfBlock ( ) || ( d = d . clone ( ! 1 ) , k . extractContents ( ) . appendTo ( d ) , d . trim ( ) , D = k . splitBlock ( ) , A = ! D . wasStartOfBlock , D = ! D . wasEndOfBlock , k . insertNode ( d ) ) : v || ( this . _ . nextNode = d . equals ( x ) ? null : this . _getNextSourceNode ( k . getBoundaryNodes ( ) . endNode ,
1 , x ) ) } A && ( A = d . getPrevious ( ) ) && A . type == CKEDITOR . NODE _ELEMENT && ( "br" == A . getName ( ) ? A . remove ( ) : A . getLast ( ) && "br" == A . getLast ( ) . $ . nodeName . toLowerCase ( ) && A . getLast ( ) . remove ( ) ) ; D && ( A = d . getLast ( ) ) && A . type == CKEDITOR . NODE _ELEMENT && "br" == A . getName ( ) && ( ! CKEDITOR . env . needsBrFiller || A . getPrevious ( h ) || A . getNext ( h ) ) && A . remove ( ) ; this . _ . nextNode || ( this . _ . nextNode = v || d . equals ( x ) || ! x ? null : this . _getNextSourceNode ( d , 1 , x ) ) ; return d } , _getNextSourceNode : function ( a , b , c ) { function d ( a ) { return ! ( a . equals ( c ) || a . equals ( f ) ) } var f =
d = d . block ; ! d && m && ! this . enforceRealBlocks && J [ m . getName ( ) ] && k . checkStartOfBlock ( ) && k . checkEndOfBlock ( ) && ! m . equals ( k . root ) ? d = m : ! d || this . enforceRealBlocks && d . is ( n ) ? ( d = this . range . document . createElement ( a ) , k . extractContents ( ) . appendTo ( d ) , d . trim ( ) , k . insertNode ( d ) , B = D = ! 0 ) : "li" != d . getName ( ) ? k . checkStartOfBlock ( ) && k . checkEndOfBlock ( ) || ( d = d . clone ( ! 1 ) , k . extractContents ( ) . appendTo ( d ) , d . trim ( ) , D = k . splitBlock ( ) , B = ! D . wasStartOfBlock , D = ! D . wasEndOfBlock , k . insertNode ( d ) ) : v || ( this . _ . nextNode = d . equals ( x ) ? null : this . _getNextSourceNode ( k . getBoundaryNodes ( ) . endNode ,
1 , x ) ) } B && ( B = d . getPrevious ( ) ) && B . type == CKEDITOR . NODE _ELEMENT && ( "br" == B . getName ( ) ? B . remove ( ) : B . getLast ( ) && "br" == B . getLast ( ) . $ . nodeName . toLowerCase ( ) && B . getLast ( ) . remove ( ) ) ; D && ( B = d . getLast ( ) ) && B . type == CKEDITOR . NODE _ELEMENT && "br" == B . getName ( ) && ( ! CKEDITOR . env . needsBrFiller || B . getPrevious ( h ) || B . getNext ( h ) ) && B . remove ( ) ; this . _ . nextNode || ( this . _ . nextNode = v || d . equals ( x ) || ! x ? null : this . _getNextSourceNode ( d , 1 , x ) ) ; 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 , f ) { var e , w ; a = [ ] ; for ( e in b ) { w = b [ e ] ; w = "boolean" == typeof w ? { } : "function" == typeof w ? { match : w } : E ( w ) ; "$" != e . charAt ( 0 ) && ( w . elements = e ) ; c && ( w . featureName = c . toLowerCase ( ) ) ; var l = w ; l . elements = k ( l . elements , /\s+/ ) || null ; l . propertiesOnly = l . propertiesOnly || ! 0 === l . elements ; var p = /\s*,\s*/ , m = void 0 ; for ( m in P ) { l [ m ] = k ( l [ m ] , p ) || null ; var h = l , t = O [ m ] , q = k ( l [ O [ m ] ] , p ) , z = l [ m ] , B = [ ] , g = ! 0 , H = void 0 ; q ? g = ! 1 : q = { } ; for ( H in z ) "!" == H . charAt ( 0 ) && ( H = H . slice ( 1 ) , B . push ( H ) , q [ H ] = ! 0 , g = ! 1 ) ; for ( ; H = B . pop ( ) ; ) z [ H ] =
z [ "!" + H ] , delete z [ "!" + H ] ; h [ t ] = ( g ? ! 1 : q ) || null } l . match = l . match || null ; d . push ( w ) ; a . push ( w ) } b = f . elements ; f = f . generic ; var F ; c = 0 ; for ( d = a . length ; c < d ; ++ c ) { e = E ( a [ c ] ) ; w = ! 0 === e . classes || ! 0 === e . styles || ! 0 === e . attributes ; l = e ; m = t = p = void 0 ; for ( p in P ) l [ p ] = J ( l [ p ] ) ; h = ! 0 ; for ( m in O ) { p = O [ m ] ; t = l [ p ] ; q = [ ] ; z = void 0 ; for ( z in t ) - 1 < z . indexOf ( "*" ) ? q . push ( new RegExp ( "^" + z . replace ( /\*/g , ".*" ) + "$" ) ) : q . push ( z ) ; t = q ; t . length && ( l [ p ] = t , h = ! 1 ) } l . nothingRequired = h ; l . noProperties = ! ( l . attributes || l . classes || l . styles ) ; if ( ! 0 === e . elements ||
( function ( ) { function a ( a , b , c , d , f ) { var e , w ; a = [ ] ; for ( e in b ) { w = b [ e ] ; w = "boolean" == typeof w ? { } : "function" == typeof w ? { match : w } : E ( w ) ; "$" != e . charAt ( 0 ) && ( w . elements = e ) ; c && ( w . featureName = c . toLowerCase ( ) ) ; var l = w ; l . elements = k ( l . elements , /\s+/ ) || null ; l . propertiesOnly = l . propertiesOnly || ! 0 === l . elements ; var p = /\s*,\s*/ , m = void 0 ; for ( m in P ) { l [ m ] = k ( l [ m ] , p ) || null ; var h = l , t = O [ m ] , q = k ( l [ O [ m ] ] , p ) , A = l [ m ] , z = [ ] , g = ! 0 , H = void 0 ; q ? g = ! 1 : q = { } ; for ( H in A ) "!" == H . charAt ( 0 ) && ( H = H . slice ( 1 ) , z . push ( H ) , q [ H ] = ! 0 , g = ! 1 ) ; for ( ; H = z . pop ( ) ; ) A [ H ] =
A [ "!" + H ] , delete A [ "!" + H ] ; h [ t ] = ( g ? ! 1 : q ) || null } l . match = l . match || null ; d . push ( w ) ; a . push ( w ) } b = f . elements ; f = f . generic ; var F ; c = 0 ; for ( d = a . length ; c < d ; ++ c ) { e = E ( a [ c ] ) ; w = ! 0 === e . classes || ! 0 === e . styles || ! 0 === e . attributes ; l = e ; m = t = p = void 0 ; for ( p in P ) l [ p ] = J ( l [ p ] ) ; h = ! 0 ; for ( m in O ) { p = O [ m ] ; t = l [ p ] ; q = [ ] ; A = void 0 ; for ( A in t ) - 1 < A . indexOf ( "*" ) ? q . push ( new RegExp ( "^" + A . replace ( /\*/g , ".*" ) + "$" ) ) : q . push ( A ) ; t = q ; t . length && ( l [ p ] = t , h = ! 1 ) } l . nothingRequired = h ; l . noProperties = ! ( l . attributes || l . classes || l . styles ) ; if ( ! 0 === e . elements ||
null === e . elements ) f [ w ? "unshift" : "push" ] ( e ) ; else for ( F in l = e . elements , delete e . elements , l ) if ( b [ F ] ) b [ F ] [ w ? "unshift" : "push" ] ( e ) ; else b [ F ] = [ e ] } } function d ( a , c , d , f ) { if ( ! a . match || a . match ( c ) ) if ( f || 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 ; f = d . validClasses ; if ( a ) if ( ! 0 === a ) a = ! 0 ; else { for ( var e = 0 , w = c . length , l ; e < w ; ++ e ) l = c [ e ] , f [ l ] ||
( f [ l ] = a ( l ) ) ; 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 , l = b . length ; l -- ; ) if ( e || a ( b [ l ] ) ) b . splice ( l , 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 , f ; for ( f in b ) if ( d || a ( f ) ) delete b [ f ] , 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 = z ( a ) , "*" == a ? ! 0 : CKEDITOR . tools . convertArrayToObject ( a . split ( b ) ) ; if ( CKEDITOR . tools . isArray ( a ) ) return a . length ? CKEDITOR . tools . convertArrayToObject ( a ) : ! 1 ; var c = { } , d = 0 , f ; for ( f in a ) c [ f ] = a [ f ] , d ++ ; return d ? c : ! 1 } function g ( a , b ) { if ( a . nothingRequired ) return ! 0 ;
var c , d , f , e ; if ( f = a . requiredClasses ) for ( e = b . classes , c = 0 ; c < f . length ; ++ c ) if ( d = f [ c ] , "string" == typeof d ) { if ( - 1 == CKEDITOR . tools . indexOf ( e , d ) ) return ! 1 } else if ( ! CKEDITOR . tools . checkIfAnyArrayItemMatches ( e , d ) ) return ! 1 ; return n ( b . styles , a . requiredStyles ) && n ( b . attributes , a . requiredAttributes ) } function n ( 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 r ( 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 , f , e = { } , l = 1 ; for ( a = z ( a ) ; b = a . match ( p ) ; ) ( c = b [ 2 ] ) ? ( d = y ( c , "styles" ) , f = y ( c , "attrs" ) , c = y ( c , "classes" ) ) : d = f = c = null , e [ "$" + l ++ ] = { elements : b [ 1 ] , classes : c , styles : d , attributes : f } , a = a . slice ( b [ 0 ] . length ) ; return e } function y ( a , b ) { var c = a . match ( N [ b ] ) ; return c ? z ( c [ 1 ] ) : null } function v ( a ) { var b = a . styleBackup = a . attributes . style , c = a . classBackup = a . attributes [ "class" ] ; a . styles || ( a . styles = CKEDITOR . tools . parseCssText ( b ||
"" , 1 ) ) ; a . classes || ( a . classes = c ? c . split ( /\s+/ ) : [ ] ) } function A ( a , b , f , e ) { var l = 0 , p ; e . toHtml && ( b . name = b . name . replace ( w , "$1" ) ) ; if ( e . doCallbacks && a . elementCallbacks ) { a : { p = a . elementCallbacks ; for ( var h = 0 , q = p . length , E ; h < q ; ++ h ) if ( E = p [ h ] ( b ) ) { p = E ; break a } p = void 0 } if ( p ) return p } if ( e . doTransform && ( p = a . _ . transformations [ b . name ] ) ) { v ( b ) ; for ( h = 0 ; h < p . length ; ++ h ) t ( a , b , p [ h ] ) ; x ( b ) } if ( e . doFilter ) { a : { h = b . name ; q = a . _ ; a = q . allowedRules . elements [ h ] ; p = q . allowedRules . generic ; h = q . disallowedRules . elements [ h ] ; q = q . disallowedRules . generic ;
"" , 1 ) ) ; a . classes || ( a . classes = c ? c . split ( /\s+/ ) : [ ] ) } function B ( a , b , f , e ) { var l = 0 , p ; e . toHtml && ( b . name = b . name . replace ( w , "$1" ) ) ; if ( e . doCallbacks && a . elementCallbacks ) { a : { p = a . elementCallbacks ; for ( var h = 0 , q = p . length , E ; h < q ; ++ h ) if ( E = p [ h ] ( b ) ) { p = E ; break a } p = void 0 } if ( p ) return p } if ( e . doTransform && ( p = a . _ . transformations [ b . name ] ) ) { v ( b ) ; for ( h = 0 ; h < p . length ; ++ h ) t ( a , b , p [ h ] ) ; x ( b ) } if ( e . doFilter ) { a : { h = b . name ; q = a . _ ; a = q . allowedRules . elements [ h ] ; p = q . allowedRules . generic ; h = q . disallowedRules . elements [ h ] ; q = q . disallowedRules . generic ;
E = e . skipRequired ; var z = { valid : ! 1 , validAttributes : { } , validClasses : { } , validStyles : { } , allAttributes : ! 1 , allClasses : ! 1 , allStyles : ! 1 , hadInvalidAttribute : ! 1 , hadInvalidClass : ! 1 , hadInvalidStyle : ! 1 } , g , k ; if ( a || p ) { v ( b ) ; if ( h ) for ( g = 0 , k = h . length ; g < k ; ++ g ) if ( ! 1 === c ( h [ g ] , b , z ) ) { a = null ; break a } if ( q ) for ( g = 0 , k = q . length ; g < k ; ++ g ) c ( q [ g ] , b , z ) ; if ( a ) for ( g = 0 , k = a . length ; g < k ; ++ g ) d ( a [ g ] , b , z , E ) ; if ( p ) for ( g = 0 , k = p . length ; g < k ; ++ g ) d ( p [ g ] , b , z , E ) ; a = z } else a = null } if ( ! a || ! a . valid ) return f . push ( b ) , 1 ; k = a . validAttributes ; var H = a . validStyles ;
p = a . validClasses ; var h = b . attributes , F = b . styles , q = b . classes ; E = b . classBackup ; var L = b . styleBackup , G , N , C = [ ] , z = [ ] , O = /^data-cke-/ ; g = ! 1 ; delete h . style ; delete h [ "class" ] ; delete b . classBackup ; delete b . styleBackup ; if ( ! a . allAttributes ) for ( G in h ) k [ G ] || ( O . test ( G ) ? G == ( N = G . replace ( /^data-cke-saved-/ , "" ) ) || k [ N ] || ( delete h [ G ] , g = ! 0 ) : ( delete h [ G ] , g = ! 0 ) ) ; if ( ! a . allStyles || a . hadInvalidStyle ) { for ( G in F ) a . allStyles || H [ G ] ? C . push ( G + ":" + F [ G ] ) : g = ! 0 ; C . length && ( h . style = C . sort ( ) . join ( "; " ) ) } else L && ( h . style = L ) ; if ( ! a . allClasses ||
a . hadInvalidClass ) { for ( G = 0 ; G < q . length ; ++ G ) ( a . allClasses || p [ q [ G ] ] ) && z . push ( q [ G ] ) ; z . length && ( h [ "class" ] = z . sort ( ) . join ( " " ) ) ; E && z . length < E . split ( /\s+/ ) . length && ( g = ! 0 ) } else E && ( h [ "class" ] = E ) ; g && ( l = 1 ) ; if ( ! e . skipFinalValidation && ! m ( b ) ) return f . push ( b ) , 1 } e . toHtml && ( b . name = b . name . replace ( B , "cke:$1" ) ) ; return l } function D ( 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 x ( a ) { var b = a . attributes , c ; delete b . style ; delete b [ "class" ] ;
a . hadInvalidClass ) { for ( G = 0 ; G < q . length ; ++ G ) ( a . allClasses || p [ q [ G ] ] ) && z . push ( q [ G ] ) ; z . length && ( h [ "class" ] = z . sort ( ) . join ( " " ) ) ; E && z . length < E . split ( /\s+/ ) . length && ( g = ! 0 ) } else E && ( h [ "class" ] = E ) ; g && ( l = 1 ) ; if ( ! e . skipFinalValidation && ! m ( b ) ) return f . push ( b ) , 1 } e . toHtml && ( b . name = b . name . replace ( A , "cke:$1" ) ) ; return l } function D ( 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 x ( a ) { var b = a . attributes , c ; delete b . style ; delete b [ "class" ] ;
if ( c = CKEDITOR . tools . writeCssText ( a . styles , ! 0 ) ) b . style = c ; a . classes . length && ( b [ "class" ] = a . classes . sort ( ) . join ( " " ) ) } function m ( a ) { switch ( a . name ) { case "a" : if ( ! ( a . children . length || a . attributes . name || a . attributes . id ) ) return ! 1 ; break ; case "img" : if ( ! a . attributes . src ) return ! 1 } return ! 0 } function J ( a ) { if ( ! a ) return ! 1 ; if ( ! 0 === a ) return ! 0 ; var b = D ( a ) ; return function ( c ) { return c in a || b && c . match ( b ) } } function u ( ) { return new CKEDITOR . htmlParser . element ( "br" ) } function K ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && ( "br" ==
a . name || q . $block [ a . name ] ) } function l ( a , b , c ) { var d = a . name ; if ( q . $empty [ d ] || ! a . children . length ) "hr" == d && "br" == b ? a . replaceWith ( u ( ) ) : ( a . parent && c . push ( { check : "it" , el : a . parent } ) , a . remove ( ) ) ; else if ( q . $block [ d ] || "tr" == d ) if ( "br" == b ) a . previous && ! K ( a . previous ) && ( b = u ( ) , b . insertBefore ( a ) ) , a . next && ! K ( a . next ) && ( b = u ( ) , b . insertAfter ( a ) ) , a . replaceWithChildren ( ) ; else { var d = a . children , f ; b : { f = q [ b ] ; for ( var e = 0 , l = d . length , w ; e < l ; ++ e ) if ( w = d [ e ] , w . type == CKEDITOR . NODE _ELEMENT && ! f [ w . name ] ) { f = ! 1 ; break b } f = ! 0 } if ( f ) a . name = b , a . attributes =
{ } , c . push ( { check : "parent-down" , el : a } ) ; else { f = a . parent ; for ( var e = f . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || "body" == f . name , p , h , l = d . length ; 0 < l ; ) w = d [ -- l ] , e && ( w . type == CKEDITOR . NODE _TEXT || w . type == CKEDITOR . NODE _ELEMENT && q . $inline [ w . name ] ) ? ( p || ( p = new CKEDITOR . htmlParser . element ( b ) , p . insertAfter ( a ) , c . push ( { check : "parent-down" , el : p } ) ) , p . add ( w , 0 ) ) : ( p = null , h = q [ f . name ] || q . span , w . insertAfter ( a ) , f . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || w . type != CKEDITOR . NODE _ELEMENT || h [ w . name ] || c . push ( { check : "el-up" , el : w } ) ) ; a . remove ( ) } } else d in
@@ -233,21 +233,21 @@ f[l])return!1;return!0}function L(a,b){var c,d;"string"==typeof a?c=a:a instance
! 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 ; if ( a instanceof CKEDITOR . editor ) { a = this . editor = a ; this . customConfig = ! 0 ; var b = a . config . allowedContent ; ! 0 === b ? this . disabled = ! 0 : ( b || ( this . customConfig = ! 1 ) , this . allow ( b , "config" , 1 ) , this . allow ( a . config . extraAllowedContent , "extra" , 1 ) , this . allow ( H [ a . enterMode ] + " " + H [ a . shiftEnterMode ] ,
"default" , 1 ) , this . disallow ( a . config . disallowedContent ) ) } else this . customConfig = ! 1 , this . allow ( a , "default" , 1 ) } ; CKEDITOR . filter . instances = { } ; CKEDITOR . filter . prototype = { allow : function ( b , c , d ) { if ( ! h ( this , b , d ) ) return ! 1 ; var f , l ; 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 . objectKeys ( f . styles ) } ;
d && ( d = E ( 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 . objectKeys ( d ) ) } else if ( CKEDITOR . tools . isArray ( b ) ) { for ( f = 0 ; f < b . length ; ++ f ) l = this . allow ( b [ f ] , c , d ) ; return l } a ( this , b , c , this . allowedContent , this . _ . allowedRules ) ; return ! 0 } , applyTo : function ( a , b , c , d ) { if ( this . disabled ) return ! 1 ; var f = this , e = [ ] , w = this . editor && this . editor . config . protectedSource , p , h = ! 1 , t = { doFilter : ! c , doTransform : ! 0 , doCallbacks : ! 0 , toHtml : b } ;
a . forEach ( function ( a ) { if ( a . type == CKEDITOR . NODE _ELEMENT ) { if ( "off" == a . attributes [ "data-cke-filter" ] ) return ! 1 ; if ( ! b || "span" != a . name || ! ~ CKEDITOR . tools . objectKeys ( a . attributes ) . join ( "|" ) . indexOf ( "data-cke-" ) ) if ( p = A ( f , a , e , t ) , p & 1 ) h = ! 0 ; else if ( p & 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 l , m , q ; if ( w ) for ( m = 0 ; m < w . length ; ++ m ) if ( ( q = d . match ( w [ m ] ) ) && q [ 0 ] . length == d . length ) { c = ! 0 ;
break a } d = CKEDITOR . htmlParser . fragment . fromHtml ( d ) ; 1 == d . children . length && ( l = d . children [ 0 ] ) . type == CKEDITOR . NODE _ELEMENT && A ( f , l , c , t ) ; c = ! c . length } c || e . push ( a ) } } , null , ! 0 ) ; e . length && ( h = ! 0 ) ; var E ; a = [ ] ; d = H [ d || ( this . editor ? this . editor . enterMode : CKEDITOR . ENTER _P ) ] ; for ( var z ; c = e . pop ( ) ; ) c . type == CKEDITOR . NODE _ELEMENT ? l ( c , d , a ) : c . remove ( ) ; for ( ; E = a . pop ( ) ; ) if ( c = E . el , c . parent ) switch ( z = q [ c . parent . name ] || q . span , E . check ) { case "it" : q . $removeEmpty [ c . name ] && ! c . children . length ? l ( c , d , a ) : m ( c ) || l ( c , d , a ) ; break ; case "el-up" : c . parent . type ==
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 . objectKeys ( a . attributes ) . join ( "|" ) . indexOf ( "data-cke-" ) ) if ( p = B ( f , a , e , t ) , p & 1 ) h = ! 0 ; else if ( p & 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 l , m , q ; if ( w ) for ( m = 0 ; m < w . length ; ++ m ) if ( ( q = d . match ( w [ m ] ) ) && q [ 0 ] . length == d . length ) { c = ! 0 ;
break a } d = CKEDITOR . htmlParser . fragment . fromHtml ( d ) ; 1 == d . children . length && ( l = d . children [ 0 ] ) . type == CKEDITOR . NODE _ELEMENT && B ( f , l , c , t ) ; c = ! c . length } c || e . push ( a ) } } , null , ! 0 ) ; e . length && ( h = ! 0 ) ; var E ; a = [ ] ; d = H [ d || ( this . editor ? this . editor . enterMode : CKEDITOR . ENTER _P ) ] ; for ( var z ; c = e . pop ( ) ; ) c . type == CKEDITOR . NODE _ELEMENT ? l ( c , d , a ) : c . remove ( ) ; for ( ; E = a . pop ( ) ; ) if ( c = E . el , c . parent ) switch ( z = q [ c . parent . name ] || q . span , E . check ) { case "it" : q . $removeEmpty [ c . name ] && ! c . children . length ? l ( c , d , a ) : m ( c ) || l ( c , d , a ) ; break ; case "el-up" : c . parent . type ==
CKEDITOR . NODE _DOCUMENT _FRAGMENT || z [ c . name ] || l ( c , d , a ) ; break ; case "parent-down" : c . parent . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || z [ c . name ] || l ( c . parent , d , a ) } return h } , 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 = [ ] , f ; for ( b = 0 ; b < a . length && ! f ; ++ b ) c = a [ b ] , ( "string" == typeof c || c instanceof CKEDITOR . style ) && this . check ( c ) && ( f = c ) ; if ( f ) { for ( b = 0 ; b < a . length ; ++ b ) d . push ( L ( a [ b ] , f ) ) ; 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 , f ; for ( f = 0 ; f < a . length ; ++ f ) { b = a [ f ] ; var e = void 0 , l = void 0 , w = void 0 , p = void 0 , h = void 0 , m = void 0 ; c = [ ] ; for ( l = 0 ; l < b . length ; ++ l ) w = b [ l ] , "string" == typeof w ? ( w = w . split ( /\s*:\s*/ ) , p = w [ 0 ] , h = null , m = w [ 1 ] ) : ( p = w . check , h = w . left , m = w . right ) , e || ( e = w , e = e . element ? e . element : p ? p . match ( /^([a-z0-9]+)/i ) [ 0 ] :
e . left . getDefinition ( ) . element ) , h instanceof CKEDITOR . style && ( h = C ( h ) ) , c . push ( { check : p == e ? null : p , left : h , right : "string" == typeof m ? M ( m ) : m } ) ; b = e ; 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 , w ; if ( "string" == typeof a ) { w = a + "\x3c" + ( ! 1 === b ? "0" : "1" ) + ( c ? "1" : "0" ) + "\x3e" ; if ( w in this . _ . cachedChecks ) return this . _ . cachedChecks [ w ] ; d = e ( a ) . $1 ; f = d . styles ; var l = d . classes ; d . name = d . elements ;
d . classes = l = l ? l . split ( /\s*,\s*/ ) : [ ] ; d . styles = r ( f ) ; d . attributes = r ( d . attributes ) ; d . children = [ ] ; l . length && ( d . attributes [ "class" ] = l . join ( " " ) ) ; f && ( d . attributes . style = CKEDITOR . tools . writeCssText ( d . styles ) ) ; f = d } else d = a . getDefinition ( ) , f = d . styles , l = d . attributes || { } , f && ! CKEDITOR . tools . isEmpty ( f ) ? ( f = E ( f ) , l . style = CKEDITOR . tools . writeCssText ( f , ! 0 ) ) : f = { } , f = { name : d . element , attributes : l , classes : l [ "class" ] ? l [ "class" ] . split ( /\s+/ ) : [ ] , styles : f , children : [ ] } ; var l = CKEDITOR . tools . clone ( f ) , p = [ ] , h ; if ( ! 1 !== b && ( h = this . _ . transformations [ f . name ] ) ) { for ( d =
0 ; d < h . length ; ++ d ) t ( this , f , h [ d ] ) ; x ( f ) } A ( this , l , p , { doFilter : ! 0 , doTransform : ! 1 !== b , skipRequired : ! c , skipFinalValidation : ! c } ) ; b = 0 < p . length ? ! 1 : CKEDITOR . tools . objectCompare ( f . attributes , l . attributes , ! 0 ) ? ! 0 : ! 1 ; "string" == typeof a && ( this . _ . cachedChecks [ w ] = b ) ; return b } , getAllowedEnterMode : function ( ) { var a = [ "p" , "div" , "br" ] , b = { p : CKEDITOR . ENTER _P , div : CKEDITOR . ENTER _DIV , br : CKEDITOR . ENTER _BR } ; return function ( c , d ) { var f = a . slice ( ) , e ; if ( this . check ( H [ c ] ) ) return c ; for ( d || ( f = f . reverse ( ) ) ; e = f . pop ( ) ; ) if ( this . check ( e ) ) return b [ e ] ;
return CKEDITOR . ENTER _BR } } ( ) , 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 P = { styles : 1 , attributes : 1 , classes : 1 } , O = { styles : "requiredStyles" , attributes : "requiredAttributes" , classes : "requiredClasses" } , p = /^([a-z0-9\-*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i , N = { styles : /{([^}]+)}/ , attrs : /\[([^\]]+)\]/ , classes : /\(([^\)]+)\)/ } , w = /^cke:(object|embed|param)$/ , B = /^(object|embed|param)$/ , G ; G = 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 : F , transform : function ( a , b ) { if ( "string" == typeof b ) a . name = b ; else { var c = b . getDefinition ( ) , d = c . styles , f = c . attributes , e , l , w , p ; a . name = c . element ; for ( e in f ) if ( "class" == e ) for ( c = a . classes . join ( "|" ) , w = f [ e ] . split ( /\s+/ ) ; p = w . pop ( ) ; ) - 1 == c . indexOf ( p ) && a . classes . push ( p ) ; else a . attributes [ e ] = f [ e ] ; for ( l in d ) a . styles [ l ] =
d [ l ] } } } } ) ( ) ;
e . left . getDefinition ( ) . element ) , h instanceof CKEDITOR . style && ( h = C ( h ) ) , c . push ( { check : p == e ? null : p , left : h , right : "string" == typeof m ? M ( m ) : m } ) ; b = e ; 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 , w ; if ( "string" == typeof a ) { w = a + "\x3c" + ( ! 1 === b ? "0" : "1" ) + ( c ? "1" : "0" ) + "\x3e" ; if ( w in this . _ . cachedChecks ) return this . _ . cachedChecks [ w ] ; f = e ( a ) . $1 ; var l = f . styles , d = f . classes ; f . name = f . elements ;
f . classes = d = d ? d . split ( /\s*,\s*/ ) : [ ] ; f . styles = r ( l ) ; f . attributes = r ( f . attributes ) ; f . children = [ ] ; d . length && ( f . attributes [ "class" ] = d . join ( " " ) ) ; l && ( f . attributes . style = CKEDITOR . tools . writeCssText ( f . styles ) ) } else f = a . getDefinition ( ) , l = f . styles , d = f . attributes || { } , l && ! CKEDITOR . tools . isEmpty ( l ) ? ( l = E ( l ) , d . style = CKEDITOR . tools . writeCssText ( l , ! 0 ) ) : l = { } , f = { name : f . element , attributes : d , classes : d [ "class" ] ? d [ "class" ] . split ( /\s+/ ) : [ ] , styles : l , children : [ ] } ; var l = CKEDITOR . tools . clone ( f ) , p = [ ] , h ; if ( ! 1 !== b && ( h = this . _ . transformations [ f . name ] ) ) { for ( d =
0 ; d < h . length ; ++ d ) t ( this , f , h [ d ] ) ; x ( f ) } B ( this , l , p , { doFilter : ! 0 , doTransform : ! 1 !== b , skipRequired : ! c , skipFinalValidation : ! c } ) ; 0 < p . length ? c = ! 1 : ( ( b = f . attributes [ "class" ] ) && ( f . attributes [ "class" ] = f . attributes [ "class" ] . split ( " " ) . sort ( ) . join ( " " ) ) , c = CKEDITOR . tools . objectCompare ( f . attributes , l . attributes , ! 0 ) , b && ( f . attributes [ "class" ] = b ) ) ; "string" == typeof a && ( this . _ . cachedChecks [ w ] = 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 ( H [ 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 P = { styles : 1 , attributes : 1 , classes : 1 } , O = { styles : "requiredStyles" , attributes : "requiredAttributes" , classes : "requiredClasses" } , p = /^([a-z0-9\-*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i , N = { styles : /{([^}]+)}/ , attrs : /\[([^\]]+)\]/ , classes : /\(([^\)]+)\)/ } , w = /^cke:(object|embed|param)$/ , A = /^(object|embed|param)$/ , G ; G = 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 : F , transform : function ( a , b ) { if ( "string" == typeof b ) a . name = b ; else { var c = b . getDefinition ( ) , d = c . styles , f = c . attributes , e , l , w , p ; a . name = c . element ; for ( e in f ) if ( "class" == e ) for ( c =
a . classes . join ( "|" ) , w = f [ e ] . split ( /\s+/ ) ; p = w . pop ( ) ; ) - 1 == c . indexOf ( p ) && a . classes . push ( p ) ; else a . attributes [ e ] = f [ e ] ; for ( l in d ) a . styles [ l ] = d [ l ] } } } } ) ( ) ;
( function ( ) { CKEDITOR . focusManager = function ( a ) { if ( a . focusManager ) return a . focusManager ; this . hasFocus = ! 1 ; this . currentActive = null ; this . _ = { editor : a } ; return this } ; CKEDITOR . focusManager . _ = { blurDelay : 200 } ; CKEDITOR . focusManager . prototype = { focus : function ( a ) { this . _ . timer && clearTimeout ( this . _ . timer ) ; a && ( this . currentActive = a ) ; this . hasFocus || this . _ . locked || ( ( a = CKEDITOR . currentInstance ) && a . focusManager . blur ( 1 ) , this . hasFocus = ! 0 , ( a = this . _ . editor . container ) && a . addClass ( "cke_focus" ) , this . _ . editor . fire ( "focus" ) ) } , lock : function ( ) { this . _ . locked =
1 } , unlock : function ( ) { delete this . _ . locked } , blur : function ( a ) { function d ( ) { if ( this . hasFocus ) { this . hasFocus = ! 1 ; var a = this . _ . editor . container ; a && a . removeClass ( "cke_focus" ) ; this . _ . editor . fire ( "blur" ) } } if ( ! this . _ . locked ) { this . _ . timer && clearTimeout ( this . _ . timer ) ; var b = CKEDITOR . focusManager . _ . blurDelay ; a || ! b ? d . call ( this ) : this . _ . timer = CKEDITOR . tools . setTimeout ( function ( ) { delete this . _ . timer ; d . call ( this ) } , b , this ) } } , add : function ( a , d ) { var b = a . getCustomData ( "focusmanager" ) ; if ( ! b || b != this ) { b && b . remove ( a ) ; var b =
"focus" , c = "blur" ; d && ( CKEDITOR . env . ie ? ( b = "focusin" , c = "focusout" ) : CKEDITOR . event . useCapture = 1 ) ; var f = { blur : function ( ) { a . equals ( this . currentActive ) && this . blur ( ) } , focus : function ( ) { this . focus ( a ) } } ; a . on ( b , f . focus , this ) ; a . on ( c , f . blur , this ) ; d && ( CKEDITOR . event . useCapture = 0 ) ; a . setCustomData ( "focusmanager" , this ) ; a . setCustomData ( "focusmanager_handlers" , f ) } } , remove : function ( a ) { a . removeCustomData ( "focusmanager" ) ; var d = a . removeCustomData ( "focusmanager_handlers" ) ; a . removeListener ( "blur" , d . blur ) ; a . removeListener ( "focus" ,
@@ -255,13 +255,13 @@ 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 , n = [ ] , r = [ ] , e = function ( a ) { c && ( k ? c . call ( f , a ) : c . call ( f , n , r ) ) } ; if ( 0 === g ) e ( ! 0 ) ; else { var y = function ( a , b ) { ( b ? n : r ) . push ( a ) ; 0 >= -- g && ( h && CKEDITOR . document . getDocumentElement ( ) . removeStyle ( "cursor" ) , e ( b ) ) } , v = 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 ) } , A = function ( b ) { if ( a [ b ] ) y ( b , ! 0 ) ; else { var f = d [ b ] || ( d [ b ] = [ ] ) ; f . push ( y ) ; 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 , v ( b , ! 0 ) } : ( e . $ . onload = function ( ) { setTimeout ( function ( ) { v ( b , ! 0 ) } , 0 ) } , e . $ . onerror = function ( ) { v ( b , ! 1 ) } ) ) ; e . appendTo ( CKEDITOR . document . getHead ( ) ) } } } ; h && CKEDITOR . document . getDocumentElement ( ) . setStyle ( "cursor" , "wait" ) ; for ( var D = 0 ; D < g ; D ++ ) A ( b [ D ] ) } } ,
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 , n = [ ] , r = [ ] , e = function ( a ) { c && ( k ? c . call ( f , a ) : c . call ( f , n , r ) ) } ; if ( 0 === g ) e ( ! 0 ) ; else { var y = function ( a , b ) { ( b ? n : r ) . push ( a ) ; 0 >= -- g && ( h && CKEDITOR . document . getDocumentElement ( ) . removeStyle ( "cursor" ) , e ( b ) ) } , v = 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 ) } , B = function ( b ) { if ( a [ b ] ) y ( b , ! 0 ) ; else { var f = d [ b ] || ( d [ b ] = [ ] ) ; f . push ( y ) ; 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 , v ( b , ! 0 ) } : ( e . $ . onload = function ( ) { setTimeout ( function ( ) { v ( b , ! 0 ) } , 0 ) } , e . $ . onerror = function ( ) { v ( b , ! 1 ) } ) ) ; e . appendTo ( CKEDITOR . document . getHead ( ) ) } } } ; h && CKEDITOR . document . getDocumentElement ( ) . setStyle ( "cursor" , "wait" ) ; for ( var D = 0 ; D < g ; D ++ ) B ( b [ D ] ) } } ,
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 ) { a = a . split ( "," ) ; for ( var c = 0 ; c < a . length ; c ++ ) { var f = a [ c ] ; b || ( d = d . replace ( /[^\/]+$/ , function ( a ) { b = a ; return "" } ) ) ; this . externals [ f ] = { dir : d , file : b || this . fileName + ".js" } } } , load : function ( a , d , b ) { CKEDITOR . tools . isArray ( a ) || ( a = a ? [ a ] : [ ] ) ; for ( var c = this . loaded , f = this . registered , h = [ ] , k = { } , g = { } , n = 0 ; n < a . length ; n ++ ) { var r = a [ n ] ; if ( r ) if ( c [ r ] || f [ r ] ) g [ r ] = this . get ( r ) ; else { var e = this . getFilePath ( r ) ; h . push ( e ) ; e in k || ( k [ e ] =
[ ] ) ; k [ e ] . push ( r ) } } CKEDITOR . scriptLoader . load ( h , function ( a , f ) { if ( f . length ) throw Error ( '[CKEDITOR.resourceManager.load] Resource name "' + k [ f [ 0 ] ] . join ( "," ) + '" was not found at "' + f [ 0 ] + '".' ) ; for ( var e = 0 ; e < a . length ; e ++ ) for ( var h = k [ a [ e ] ] , n = 0 ; n < h . length ; n ++ ) { var m = h [ n ] ; g [ m ] = this . get ( m ) ; c [ m ] = 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 ] , v = g && g . requires ; if ( ! d [ e ] ) { if ( g . icons ) for ( var A = g . icons . split ( "," ) , D = A . length ; D -- ; ) CKEDITOR . skin . addIcon ( A [ D ] , g . path + "icons/" + ( CKEDITOR . env . hidpi && g . hidpi ? "hidpi/" : "" ) + A [ D ] + ".png" ) ; d [ e ] = 1 } if ( v ) for ( v . split && ( v = v . split ( "," ) ) , g = 0 ; g < v . length ; g ++ ) h [ v [ g ] ] || b . push ( v [ g ] ) } if ( b . length ) k . call ( this ,
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 ] , v = g && g . requires ; if ( ! d [ e ] ) { if ( g . icons ) for ( var B = g . icons . split ( "," ) , D = B . length ; D -- ; ) CKEDITOR . skin . addIcon ( B [ D ] , g . path + "icons/" + ( CKEDITOR . env . hidpi && g . hidpi ? "hidpi/" : "" ) + B [ D ] + ".png" ) ; d [ e ] = 1 } if ( v ) for ( v . split && ( v = v . split ( "," ) ) , g = 0 ; g < v . length ; g ++ ) h [ v [ g ] ] || b . push ( v [ 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 ) ;
@@ -274,20 +274,20 @@ b.on[c]);CKEDITOR.tools.extend(a.config,b,!0);delete a.config.on}c=a.config;a.re
! 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 ) ; n ( a ) } ) ; b && null != b . customConfig && ( a . config . customConfig = b . customConfig ) ; k ( a ) || a . fireOnce ( "customConfigLoaded" ) }
function n ( a ) { CKEDITOR . skin . loadPart ( "editor" , function ( ) { r ( a ) } ) } function r ( 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 ) ; y ( a ) } ) } function y ( a ) { function b ( a ) { if ( ! a ) return "" ; CKEDITOR . tools . isArray ( a ) && ( a = a . join ( "," ) ) ; return a . replace ( /\s/g , "" ) } var c = a . config , d = b ( c . plugins ) , f = b ( c . extraPlugins ) , e = b ( c . removePlugins ) ; if ( f ) var h = new RegExp ( "(?:^|,)(?:" + f . replace ( /,/g , "|" ) + ")(?\x3d,|$)" , "g" ) , d = d . replace ( h , "" ) , d = d + ( "," + f ) ; if ( e ) var g = new RegExp ( "(?:^|,)(?:" + e . replace ( /,/g , "|" ) + ")(?\x3d,|$)" , "g" ) , d = d . replace ( g , "" ) ; CKEDITOR . env . air && ( d += ",adobeair" ) ; CKEDITOR . plugins . load ( d . split ( "," ) ,
function ( b ) { var d = [ ] , f = [ ] , e = [ ] ; a . plugins = b ; for ( var l in b ) { var h = b [ l ] , t = h . lang , k = null , p = h . requires , F ; CKEDITOR . tools . isArray ( p ) && ( p = p . join ( "," ) ) ; if ( p && ( F = p . match ( g ) ) ) for ( ; p = F . pop ( ) ; ) CKEDITOR . error ( "editor-plugin-required" , { plugin : p . replace ( "," , "" ) , requiredBy : l } ) ; t && ! a . lang [ l ] && ( t . split && ( t = t . split ( "," ) ) , 0 <= CKEDITOR . tools . indexOf ( t , a . langCode ) ? k = a . langCode : ( k = a . langCode . replace ( /-.*/ , "" ) , k = k != a . langCode && 0 <= CKEDITOR . tools . indexOf ( t , k ) ? k : 0 <= CKEDITOR . tools . indexOf ( t , "en" ) ? "en" : t [ 0 ] ) , h . langEntries && h . langEntries [ k ] ?
( a . lang [ l ] = h . langEntries [ k ] , k = null ) : e . push ( CKEDITOR . getUrl ( h . path + "lang/" + k + ".js" ) ) ) ; f . push ( k ) ; d . push ( h ) } CKEDITOR . scriptLoader . load ( e , function ( ) { for ( var b = [ "beforeInit" , "init" , "afterInit" ] , e = 0 ; e < b . length ; e ++ ) for ( var l = 0 ; l < d . length ; l ++ ) { var p = d [ l ] ; 0 === e && f [ l ] && p . lang && p . langEntries && ( a . lang [ p . name ] = p . langEntries [ f [ l ] ] ) ; if ( p [ b [ e ] ] ) p [ b [ e ] ] ( a ) } a . fireOnce ( "pluginsLoaded" ) ; c . keystrokes && a . setKeystroke ( a . config . keystrokes ) ; for ( l = 0 ; l < a . config . blockedKeystrokes . length ; l ++ ) a . keystrokeHandler . blockedKeystrokes [ a . config . blockedKeystrokes [ l ] ] =
1 ; a . status = "loaded" ; a . fireOnce ( "loaded" ) ; CKEDITOR . fire ( "instanceLoaded" , null , a ) } ) } ) } function v ( ) { var a = this . element ; if ( a && this . elementMode != CKEDITOR . ELEMENT _MODE _APPENDTO ) { var b = this . getData ( ) ; this . config . htmlEncodeOutput && ( b = CKEDITOR . tools . htmlEncode ( b ) ) ; a . is ( "textarea" ) ? a . setValue ( b ) : a . setHtml ( b ) ; return ! 0 } return ! 1 } function A ( a , b ) { function c ( a ) { var b = a . startContainer , d = a . endContainer ; 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 ;
function ( b ) { var d = [ ] , f = [ ] , e = [ ] ; a . plugins = CKEDITOR . tools . extend ( { } , a . plugins , b ) ; for ( var l in b ) { var h = b [ l ] , t = h . lang , k = null , p = h . requires , F ; CKEDITOR . tools . isArray ( p ) && ( p = p . join ( "," ) ) ; if ( p && ( F = p . match ( g ) ) ) for ( ; p = F . pop ( ) ; ) CKEDITOR . error ( "editor-plugin-required" , { plugin : p . replace ( "," , "" ) , requiredBy : l } ) ; t && ! a . lang [ l ] && ( t . split && ( t = t . split ( "," ) ) , 0 <= CKEDITOR . tools . indexOf ( t , a . langCode ) ? k = a . langCode : ( k = a . langCode . replace ( /-.*/ , "" ) , k = k != a . langCode && 0 <= CKEDITOR . tools . indexOf ( t , k ) ? k : 0 <= CKEDITOR . tools . indexOf ( t ,
"en" ) ? "en" : t [ 0 ] ) , h . langEntries && h . langEntries [ k ] ? ( a . lang [ l ] = h . langEntries [ k ] , k = null ) : e . push ( CKEDITOR . getUrl ( h . path + "lang/" + k + ".js" ) ) ) ; f . push ( k ) ; d . push ( h ) } CKEDITOR . scriptLoader . load ( e , function ( ) { for ( var b = [ "beforeInit" , "init" , "afterInit" ] , e = 0 ; e < b . length ; e ++ ) for ( var l = 0 ; l < d . length ; l ++ ) { var p = d [ l ] ; 0 === e && f [ l ] && p . lang && p . langEntries && ( a . lang [ p . name ] = p . langEntries [ f [ l ] ] ) ; if ( p [ b [ e ] ] ) p [ b [ e ] ] ( a ) } a . fireOnce ( "pluginsLoaded" ) ; c . keystrokes && a . setKeystroke ( a . config . keystrokes ) ; for ( l = 0 ; l < a . config . blockedKeystrokes . length ; l ++ ) a . keystrokeHandler . blockedKeystrokes [ a . config . blockedKeystrokes [ l ] ] =
1 ; a . status = "loaded" ; a . fireOnce ( "loaded" ) ; CKEDITOR . fire ( "instanceLoaded" , null , a ) } ) } ) } function v ( ) { 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 B ( 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 f = new CKEDITOR . dom . documentFragment , e , h , g , k = 0 ; k < a . length ; k ++ ) { var M = a [ k ] , q = M . startContainer . getAscendant ( "tr" , ! 0 ) ; c ( M ) ? ( e || ( e = q . getAscendant ( "table" ) . clone ( ) , e . append ( q . getAscendant ( { thead : 1 , tbody : 1 , tfoot : 1 } ) . clone ( ) ) , f . append ( e ) , e = e . findOne ( "thead, tbody, tfoot" ) ) , h && h . equals ( q ) || ( h = q , g = q . clone ( ) , e . append ( g ) ) , g . append ( d ( M ) ) ) : f . append ( M . cloneContents ( ) ) } return e ? f : b . getHtmlFromRange ( a [ 0 ] ) } a . prototype = CKEDITOR . editor . prototype ; CKEDITOR . editor =
a ; var D = 0 , x = { } ; CKEDITOR . tools . extend ( CKEDITOR . editor . prototype , { 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 ) { this . fire ( "beforeDestroy" ) ; ! a && v . call ( this ) ; this . editable ( null ) ; this . filter && ( this . filter . destroy ( ) , delete this . filter ) ; delete this . activeFilter ; this . status = "destroyed" ; this . fire ( "destroy" ) ; this . removeAllListeners ( ) ; CKEDITOR . remove ( this ) ; CKEDITOR . fire ( "instanceDestroyed" , null , this ) } , elementPath : function ( a ) { if ( ! a ) { a =
this . getSelection ( ) ; if ( ! a ) return null ; a = a . getStartElement ( ) } return a ? new CKEDITOR . dom . elementPath ( a , this . editable ( ) ) : null } , createRange : function ( ) { var a = this . editable ( ) ; return a ? new CKEDITOR . dom . range ( a ) : null } , execCommand : function ( a , b ) { var c = this . getCommand ( a ) , d = { name : a , commandData : b || { } , command : c } ; 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 , 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 = A ( 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 v . 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 ) { if ( a = "string" === typeof a ? this . getCommand ( a ) : a ) { var b = CKEDITOR . tools . object . findKey ( this . commands , a ) , c = this . keystrokeHandler . keystrokes , d ; if ( a . fakeKeystroke ) return a . fakeKeystroke ; for ( d in c ) if ( c . hasOwnProperty ( d ) && c [ d ] == b ) return d } return 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 ) } } ) } ) ( ) ; 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 } } ;
a ; var D = 0 , x = { } ; 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 ) { this . fire ( "beforeDestroy" ) ; ! a && v . call ( this ) ; this . editable ( null ) ; this . filter && ( this . filter . destroy ( ) , delete this . filter ) ; delete this . activeFilter ;
this . status = "destroyed" ; this . fire ( "destroy" ) ; this . removeAllListeners ( ) ; CKEDITOR . remove ( this ) ; CKEDITOR . fire ( "instanceDestroyed" , null , this ) } , elementPath : function ( a ) { if ( ! a ) { a = this . getSelection ( ) ; if ( ! a ) return null ; a = a . getStartElement ( ) } return a ? new CKEDITOR . dom . elementPath ( a , this . editable ( ) ) : null } , createRange : function ( ) { var a = this . editable ( ) ; return a ? new CKEDITOR . dom . range ( a ) : null } , execCommand : function ( a , b ) { var c = this . getCommand ( a ) , d = { name : a , commandData : b || { } , command : c } ; 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 , 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 = B ( 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 v . 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 ) { if ( a = "string" === typeof a ? this . getCommand ( a ) : a ) { var b = CKEDITOR . tools . object . findKey ( this . commands , a ) , c = this . keystrokeHandler . keystrokes , d ; if ( a . fakeKeystroke ) return a . fakeKeystroke ;
for ( d in c ) if ( c . hasOwnProperty ( d ) && c [ d ] == b ) return d } return 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 ) } } ) } ) ( ) ; 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 = { } , n , r = c [ 4 ] ; c = ! ! c [ 5 ] ; if ( r ) for ( ; n = a . exec ( r ) ; ) { var e = n [ 1 ] . toLowerCase ( ) ; n = n [ 2 ] || n [ 3 ] || n [ 4 ] || "" ; g [ e ] = ! n && d [ e ] ? e : CKEDITOR . tools . htmlDecodeAttr ( n ) } 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 ) ) } } } ) ( ) ;
@@ -302,9 +302,9 @@ CKEDITOR.htmlParser.comment.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlPar
( 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 n ( a ) { var b ; if ( 0 < m . length ) for ( var c = 0 ; c < m . length ; c ++ ) { var d = m [ c ] , f = d . name , e = CKEDITOR . dtd [ f ] , l = u . name && CKEDITOR . dtd [ u . name ] ; l && ! l [ f ] || a && e && ! e [ a ] && CKEDITOR . dtd [ a ] ? f == u . name && ( y ( u , u . parent , 1 ) , c -- ) : ( b || ( r ( ) , b = 1 ) , d = d . clone ( ) , d . parent = u , u = d , m . splice ( c , 1 ) , c -- ) } } function r ( ) { for ( ; J . length ; ) y ( J . shift ( ) , u ) } 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 y ( b , c , d ) { c = c || u || x ; var f = u ; void 0 === b . previous && ( v ( c , b ) && ( u = c , D . onTagOpen ( g , { } ) , b . returnPoint = c = u ) , e ( b ) , a ( b ) && ! b . children . length || c . add ( b ) , "pre" == b . name && ( l = ! 1 ) , "textarea" == b . name && ( K = ! 1 ) ) ; b . returnPoint ? ( u = b . returnPoint , delete b . returnPoint ) : u = d ? c : f } function v ( a , b ) { if ( ( a == x || "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 A ( a , b ) { return a in CKEDITOR . dtd . $listItem || a in CKEDITOR . dtd . $tableContent ? a == b || "dt" == a && "dd" == b || "dd" == a && "dt" == b : ! 1 } var D = new CKEDITOR . htmlParser , x = k instanceof CKEDITOR . htmlParser . element ? k : "string" == typeof k ? new CKEDITOR . htmlParser . element ( k ) : new CKEDITOR . htmlParser . fragment , m = [ ] , J = [ ] , u = x , K = "textarea" == x . name , l = "pre" == x . name ; D . onTagOpen = function ( f , e , h , g ) { e = new CKEDITOR . htmlParser . element ( f , e ) ; e . isUnknown && h && ( e . isEmpty = ! 0 ) ; e . isOptionalClose = g ;
! b . isOrphan || b . type == CKEDITOR . NODE _TEXT } } function B ( 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 D = new CKEDITOR . htmlParser , x = k instanceof CKEDITOR . htmlParser . element ? k : "string" == typeof k ? new CKEDITOR . htmlParser . element ( k ) : new CKEDITOR . htmlParser . fragment , m = [ ] , J = [ ] , u = x , K = "textarea" == x . name , l = "pre" == x . name ; D . 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 ) ) m . push ( e ) ; else { if ( "pre" == f ) l = ! 0 ; else { if ( "br" == f && l ) { u . add ( new CKEDITOR . htmlParser . text ( "\n" ) ) ; return } "textarea" == f && ( K = ! 0 ) } if ( "br" == f ) J . push ( e ) ; else { for ( ; ! ( g = ( h = u . name ) ? CKEDITOR . dtd [ h ] || ( u . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : c , e . isUnknown || u . isUnknown || g [ f ] ) ; ) if ( u . isOptionalClose ) D . onTagClose ( h ) ; else if ( f in b && h in b ) h = u . children , ( h = h [ h . length - 1 ] ) && "li" == h . name || y ( h = new CKEDITOR . htmlParser . element ( "li" ) , u ) , ! e . returnPoint && ( e . returnPoint = u ) , u = h ; else if ( f in CKEDITOR . dtd . $listItem &&
! A ( f , h ) ) D . onTagOpen ( "li" == f ? "ul" : "dl" , { } , 0 , 1 ) ; else if ( h in d && ! A ( f , h ) ) ! e . returnPoint && ( e . returnPoint = u ) , u = u . parent ; else if ( h in CKEDITOR . dtd . $inline && m . unshift ( u ) , u . parent ) y ( u , u . parent , 1 ) ; else { e . isOrphan = 1 ; break } n ( f ) ; r ( ) ; e . parent = u ; e . isEmpty ? y ( e ) : u = e } } } ; D . onTagClose = function ( a ) { for ( var b = m . length - 1 ; 0 <= b ; b -- ) if ( a == m [ b ] . name ) { m . splice ( b , 1 ) ; return } for ( var c = [ ] , d = [ ] , f = u ; f != x && f . name != a ; ) f . _ . isBlockLike || d . unshift ( f ) , c . push ( f ) , f = f . returnPoint || f . parent ; if ( f != x ) { for ( b = 0 ; b < c . length ; b ++ ) { var e = c [ b ] ; y ( e , e . parent ) } u =
! B ( f , h ) ) D . onTagOpen ( "li" == f ? "ul" : "dl" , { } , 0 , 1 ) ; else if ( h in d && ! B ( f , h ) ) ! e . returnPoint && ( e . returnPoint = u ) , u = u . parent ; else if ( h in CKEDITOR . dtd . $inline && m . unshift ( u ) , u . parent ) y ( u , u . parent , 1 ) ; else { e . isOrphan = 1 ; break } n ( f ) ; r ( ) ; e . parent = u ; e . isEmpty ? y ( e ) : u = e } } } ; D . onTagClose = function ( a ) { for ( var b = m . length - 1 ; 0 <= b ; b -- ) if ( a == m [ b ] . name ) { m . splice ( b , 1 ) ; return } for ( var c = [ ] , d = [ ] , f = u ; f != x && f . name != a ; ) f . _ . isBlockLike || d . unshift ( f ) , c . push ( f ) , f = f . returnPoint || f . parent ; if ( f != x ) { for ( b = 0 ; b < c . length ; b ++ ) { var e = c [ b ] ; y ( e , e . parent ) } u =
f ; f . _ . isBlockLike && r ( ) ; y ( f , f . parent ) ; f == u && ( u = u . parent ) ; m = m . concat ( d ) } "body" == a && ( g = ! 1 ) } ; D . onText = function ( a ) { if ( ! ( u . _ . hasInlineStarted && ! J . length || l || K ) && ( a = CKEDITOR . tools . ltrim ( a ) , 0 === a . length ) ) return ; var b = u . name , e = b ? CKEDITOR . dtd [ b ] || ( u . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : c ; if ( ! K && ! e [ "#" ] && b in d ) D . onTagOpen ( f [ b ] || "" ) , D . onText ( a ) ; else { r ( ) ; n ( ) ; l || K || ( a = a . replace ( /[\t\r\n ]{2,}|[\t\r\n]/g , " " ) ) ; a = new CKEDITOR . htmlParser . text ( a ) ; if ( v ( u , a ) ) this . onTagOpen ( g , { } , 0 , 1 ) ; u . add ( a ) } } ; D . onCDATA =
function ( a ) { u . add ( new CKEDITOR . htmlParser . cdata ( a ) ) } ; D . onComment = function ( a ) { r ( ) ; n ( ) ; u . add ( new CKEDITOR . htmlParser . comment ( a ) ) } ; D . parse ( h ) ; for ( r ( ) ; u != x ; ) y ( u , u . parent , 1 ) ; e ( x ) ; return x } ; 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 ,
@@ -321,21 +321,21 @@ f.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT?z||CKEDITOR.env.needsBrFiller||!(7<docum
a . value = c [ 0 ] ) , ! CKEDITOR . env . needsBrFiller && z && ( ! b || a . parent . name in g ) || ! z && ( ( c = a . previous ) && "br" == c . name || ! c || h ( c ) ) ) ? ! 0 : ! 1 } var E = { elements : { } } , z = "html" == d , g = CKEDITOR . tools . extend ( { } , l ) , t ; for ( t in g ) "#" in u [ t ] || delete g [ t ] ; for ( t in g ) E . elements [ t ] = p ( z , a . config . fillEmptyBlocks ) ; E . root = p ( z , ! 1 ) ; E . elements . br = function ( a ) { return function ( b ) { if ( b . parent . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ) { var d = b . attributes ; if ( "data-cke-bogus" in d || "data-cke-eol" in d ) delete d [ "data-cke-bogus" ] ; else { for ( d = b . next ; d && f ( d ) ; ) d =
d . next ; var l = c ( b ) ; ! d && h ( b . parent ) ? k ( b . parent , e ( a ) ) : h ( d ) && l && ! h ( l ) && e ( a ) . insertBefore ( d ) } } } } ( z ) ; return E } function d ( a , b ) { return a != CKEDITOR . ENTER _BR && ! 1 !== b ? a == CKEDITOR . ENTER _DIV ? "div" : "p" : ! 1 } function b ( a ) { for ( a = a . children [ a . children . length - 1 ] ; a && 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 l || 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 n ( a ) { a = a . attributes ; switch ( a [ "data-cke-editable" ] ) { case "true" : a . contenteditable = "true" ; break ; case "1" : delete a . contenteditable } } function r ( a ) { return a . replace ( M ,
function ( a , b , c ) { return "\x3c" + b + c . replace ( q , function ( a , b ) { return E . test ( b ) && - 1 == c . indexOf ( "data-cke-saved-" + b ) ? " data-cke-saved-" + a + " data-cke-" + CKEDITOR . rnd + "-" + a : a } ) + "\x3e" } ) } function e ( a , b ) { return a . replace ( b , function ( a , b , c ) { 0 === a . indexOf ( "\x3ctextarea" ) && ( a = b + A ( c ) . replace ( /</g , "\x26lt;" ) . replace ( />/g , "\x26gt;" ) + "\x3c/textarea\x3e" ) ; return "\x3ccke:encoded\x3e" + encodeURIComponent ( a ) + "\x3c/cke:encoded\x3e" } ) } function y ( a ) { return a . replace ( P , function ( a , b ) { return decodeURIComponent ( b ) } ) } function v ( a ) { return a . replace ( /\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g ,
function ( a ) { return "\x3c!--" + J + "{C}" + encodeURIComponent ( a ) . replace ( /--/g , "%2D%2D" ) + "--\x3e" } ) } function A ( a ) { return a . replace ( /\x3c!--\{cke_protected\}\{C\}([\s\S]+?)--\x3e/g , function ( a , b ) { return decodeURIComponent ( b ) } ) } function D ( 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 x ( a , b ) { var c = [ ] , d = b . config . protectedSource , f = b . _ . dataStore || ( b . _ . dataStore =
function ( a , b , c ) { return "\x3c" + b + c . replace ( q , function ( a , b ) { return E . test ( b ) && - 1 == c . indexOf ( "data-cke-saved-" + b ) ? " data-cke-saved-" + a + " data-cke-" + CKEDITOR . rnd + "-" + a : a } ) + "\x3e" } ) } function e ( a , b ) { return a . replace ( b , function ( a , b , c ) { 0 === a . indexOf ( "\x3ctextarea" ) && ( a = b + B ( c ) . replace ( /</g , "\x26lt;" ) . replace ( />/g , "\x26gt;" ) + "\x3c/textarea\x3e" ) ; return "\x3ccke:encoded\x3e" + encodeURIComponent ( a ) + "\x3c/cke:encoded\x3e" } ) } function y ( a ) { return a . replace ( P , function ( a , b ) { return decodeURIComponent ( b ) } ) } function v ( a ) { return a . replace ( /\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g ,
function ( a ) { return "\x3c!--" + J + "{C}" + encodeURIComponent ( a ) . replace ( /--/g , "%2D%2D" ) + "--\x3e" } ) } function B ( a ) { return a . replace ( /\x3c!--\{cke_protected\}\{C\}([\s\S]+?)--\x3e/g , function ( a , b ) { return decodeURIComponent ( b ) } ) } function D ( 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 x ( a , b ) { var c = [ ] , d = b . config . protectedSource , f = b . _ . dataStore || ( b . _ . dataStore =
{ id : 1 } ) , e = /<\!--\{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 l = 0 ; l < d . length ; l ++ ) a = a . replace ( d [ l ] , function ( a ) { a = a . replace ( e , 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 ( e , function ( a , b , d ) { return "\x3c!--" + J + ( 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 ) { f [ f . id ] = decodeURIComponent ( b ) ; return "{cke_protected_" + f . id ++ + "}" } ) } ) ; return a = a . replace ( /<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g , function ( a , c , d , f ) { return "\x3c" + c + d + "\x3e" + D ( A ( f ) , b ) + "\x3c/" + c + "\x3e" } ) } CKEDITOR . htmlDataProcessor = function ( b ) { var 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 ) { f [ f . id ] = decodeURIComponent ( b ) ; return "{cke_protected_" + f . id ++ + "}" } ) } ) ; return a = a . replace ( /<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g , function ( a , c , d , f ) { return "\x3c" + c + d + "\x3e" + D ( B ( f ) , b ) + "\x3c/" + c + "\x3e" } ) } CKEDITOR . htmlDataProcessor = function ( b ) { var c ,
f , l = 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 ( t ) ; c . addRules ( F , { applyToAll : ! 0 } ) ; c . addRules ( a ( b , "data" ) , { applyToAll : ! 0 } ) ; f . addRules ( L ) ; f . addRules ( C , { applyToAll : ! 0 } ) ; f . addRules ( a ( b , "html" ) , { applyToAll : ! 0 } ) ; b . on ( "toHtml" , function ( a ) { a = a . data ; var c = a . dataValue , f , c = x ( c , b ) , c = e ( c , H ) , c = r ( c ) , c = e ( c , z ) , c = c . replace ( O , "$1cke:$2" ) , c = c . replace ( N , "\x3ccke:$1$2\x3e\x3c/cke:$1\x3e" ) ,
c = c . replace ( /(<pre\b[^>]*>)(\r\n|\n)/g , "$1$2$2" ) , c = c . replace ( /([^a-z0-9<\-])(on\w{3,})(?!>)/gi , "$1data-cke-" + CKEDITOR . rnd + "-$2" ) ; f = a . context || b . editable ( ) . getName ( ) ; var l ; CKEDITOR . env . ie && 9 > CKEDITOR . env . version && "pre" == f && ( f = "div" , c = "\x3cpre\x3e" + c + "\x3c/pre\x3e" , l = 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" ) , "" ) ; l && ( c = c . replace ( /^<pre>|<\/pre>$/gi , "" ) ) ; c = c . replace ( p , "$1$2" ) ; c = y ( c ) ; c = A ( c ) ; f = ! 1 === a . fixForBody ? ! 1 :
c = c . replace ( /(<pre\b[^>]*>)(\r\n|\n)/g , "$1$2$2" ) , c = c . replace ( /([^a-z0-9<\-])(on\w{3,})(?!>)/gi , "$1data-cke-" + CKEDITOR . rnd + "-$2" ) ; f = a . context || b . editable ( ) . getName ( ) ; var l ; CKEDITOR . env . ie && 9 > CKEDITOR . env . version && "pre" == f && ( f = "div" , c = "\x3cpre\x3e" + c + "\x3c/pre\x3e" , l = 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" ) , "" ) ; l && ( c = c . replace ( /^<pre>|<\/pre>$/gi , "" ) ) ; c = c . replace ( p , "$1$2" ) ; c = y ( c ) ; c = B ( c ) ; f = ! 1 === a . fixForBody ? ! 1 :
d ( a . enterMode , b . config . autoParagraph ) ; c = CKEDITOR . htmlParser . fragment . fromHtml ( c , a . context , f ) ; f && ( l = c , ! l . children . length && CKEDITOR . dtd [ l . name ] [ f ] && ( f = new CKEDITOR . htmlParser . element ( f ) , l . 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 ( l . 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 = v ( 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 ( l . 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 = l . writer ; d . reset ( ) ; c . writeChildrenHtml ( d ) ; c = d . getHtml ( ! 0 ) ; c = A ( c ) ; c = D ( c , b ) ; a . data . dataValue = c } , null , null , 15 ) } ; CKEDITOR . htmlDataProcessor . prototype = { toHtml : function ( a , b , c , d ) { var f = this . editor , e , l , p , h ; b && "object" == typeof b ? ( e = b . context , c = b . fixForBody , d = b . dontFilter , l = b . filter , p = 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 ,
! 1 , ! 0 ) } , null , null , 11 ) ; b . on ( "toDataFormat" , function ( a ) { var c = a . data . dataValue , d = l . writer ; d . reset ( ) ; c . writeChildrenHtml ( d ) ; c = d . getHtml ( ! 0 ) ; c = B ( c ) ; c = D ( c , b ) ; a . data . dataValue = c } , null , null , 15 ) } ; CKEDITOR . htmlDataProcessor . prototype = { toHtml : function ( a , b , c , d ) { var f = this . editor , e , l , p , h ; b && "object" == typeof b ? ( e = b . context , c = b . fixForBody , d = b . dontFilter , l = b . filter , p = 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 : l || f . filter , enterMode : p || 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 m = /(?: |\xa0)$/ , J = "{cke_protected}" , u = CKEDITOR . dtd , K = "caption colgroup col thead tfoot tbody" . split ( " " ) , l = CKEDITOR . tools . extend ( { } , u . $blockLimit ,
u . $block ) , t = { elements : { input : g , textarea : g } } , F = { 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 } } } } , L = { elements : { embed : function ( a ) { var b = a . parent ; if ( b && "object" == b . name ) { var c = b . attributes . width , b = b . attributes . height ;
c && ( a . attributes . width = c ) ; b && ( a . attributes . height = b ) } } , a : function ( a ) { var b = a . attributes ; if ( ! ( a . children . length || b . name || b . id || a . attributes [ "data-cke-saved-name" ] ) ) return ! 1 } } } , C = { elementNames : [ [ /^cke:/ , "" ] , [ /^\?xml:namespace$/ , "" ] ] , attributeNames : [ [ /^data-cke-(saved|pa)-/ , "" ] , [ /^data-cke-.*/ , "" ] , [ "hidefocus" , "" ] ] , elements : { $ : function ( a ) { var b = a . attributes ; if ( b ) { if ( b [ "data-cke-temp" ] ) return ! 1 ; for ( var c = [ "name" , "href" , "src" ] , d , 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 ( K , a . name ) , d = CKEDITOR . tools . indexOf ( K , b . name ) ) ; - 1 < c && - 1 < d && c != d || ( c = a . parent ? a . getIndex ( ) : - 1 , d = b . parent ? b . getIndex ( ) : - 1 ) ; return c > d ? 1 : - 1 } ) } , param : function ( a ) { a . children = [ ] ; a . isEmpty = ! 0 ; return a } , span : function ( a ) { "Apple-style-span" == a . attributes [ "class" ] && delete a . name } , html : function ( a ) { delete a . attributes . contenteditable ; delete a . attributes [ "class" ] } , body : function ( a ) { delete a . attributes . spellcheck ;
delete a . attributes . contenteditable } , style : function ( a ) { var b = a . children [ 0 ] ; b && b . value && ( b . value = CKEDITOR . tools . trim ( b . value ) ) ; a . attributes . type || ( a . attributes . type = "text/css" ) } , title : function ( a ) { var b = a . children [ 0 ] ; ! b && k ( a , b = new CKEDITOR . htmlParser . text ) ; b . value = a . attributes [ "data-cke-title" ] || "" } , input : n , textarea : n } , attributes : { "class" : function ( a ) { return CKEDITOR . tools . ltrim ( a . replace ( /(?:^|\s+)cke_[^\s]*/g , "" ) ) || ! 1 } } } ; CKEDITOR . env . ie && ( C . attributes . style = function ( a ) { return a . replace ( /(^|;)([^\:]+)/g ,
function ( a ) { return a . toLowerCase ( ) } ) } ) ; var M = /<(a|area|img|input|source)\b([^>]*)>/gi , q = /([\w-:]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi , E = /^(href|src|name)$/i , z = /(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi , H = /(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi , P = /<cke:encoded>([^<]*)<\/cke:encoded>/gi , O = /(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi , p = /(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi , N = /<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi } ) ( ) ;
function ( a ) { return a . toLowerCase ( ) } ) } ) ; var M = /<(a|area|img|input|source)\b([^>]*)>/gi , q = /([\w-:]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi , E = /^(href|src|name)$/i , z = /(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi , H = /(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi , P = /<cke:encoded>([^<]*)<\/cke:encoded>/gi , O = /(<\/?)((?:object|embed|param|html|body|head|title)([\s] [^>]*)? >)/gi , p = /(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi , N = /<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi } ) ( ) ;
"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 ( "" ) } } } ;
@@ -364,15 +364,15 @@ d.resetDirty();r?d.fire("unlockSnapshot"):"wysiwyg"==a&&d.fire("saveSnapshot");s
0 ) , g = Math . max ( b - ( d ? 0 : e ) , 0 ) ; b = d ? b + e : b ; n . setStyle ( "height" , g + "px" ) ; r && ( r . 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 , h = g . getRanges ( ) [ 0 ] , q ; if ( CKEDITOR . env . gecko || CKEDITOR . env . ie && CKEDITOR . env . needsBrFiller ) if ( g = d ( g , e ) ) g . appendBogus ( ) , q = CKEDITOR . env . ie ; k ( b , e . block , f ) && h . collapsed && ! h . getCommonAncestor ( ) . isReadOnly ( ) && ( e = h . 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 = h . fixBlock ( ! 0 , b . activeEnterMode == CKEDITOR . ENTER _DIV ? "div" : "p" ) , CKEDITOR . env . needsBrFiller || ( b = b . getFirst ( c ) ) && b . type == CKEDITOR . NODE _TEXT && CKEDITOR . tools . trim ( b . getText ( ) ) . match ( /^(?: |\xa0)$/ ) && b . remove ( ) , q = 1 , a . cancel ( ) ) ; q && h . select ( ) } function d ( a , b ) { if ( a . isFake ) return 0 ; var d = b . block || b . blockLimit , e = d && d . getLast ( c ) ; if ( ! ( ! d || ! d . isBlockBoundary ( ) || e && e . type == CKEDITOR . NODE _ELEMENT && e . isBlockBoundary ( ) || d . is ( "pre" ) || d . getBogus ( ) ) ) return d } function b ( a ) { var b = a . data . getTarget ( ) ; b . is ( "input" ) &&
( b = b . getAttribute ( "type" ) , "submit" != b && "reset" != b || a . data . preventDefault ( ) ) } function c ( a ) { return e ( a ) && y ( 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 && A ( b ) ) ) return ! 1 } } var d , e = a . getRanges ( ) [ 0 ] ; a = a . root ;
( b = b . getAttribute ( "type" ) , "submit" != b && "reset" != b || a . data . preventDefault ( ) ) } function c ( a ) { return e ( a ) && y ( 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 && B ( b ) ) ) return ! 1 } } var d , e = a . getRanges ( ) [ 0 ] ; a = a . root ;
var f = { table : 1 , ul : 1 , ol : 1 , dl : 1 } ; if ( e . startPath ( ) . contains ( f ) ) { var g = e . clone ( ) ; g . collapse ( 1 ) ; g . setStartAt ( a , CKEDITOR . POSITION _AFTER _START ) ; a = new CKEDITOR . dom . walker ( g ) ; a . guard = b ( ) ; a . checkBackward ( ) ; if ( d ) return g = e . clone ( ) , g . collapse ( ) , g . setEndAt ( d , CKEDITOR . POSITION _AFTER _END ) , a = new CKEDITOR . dom . walker ( g ) , a . guard = b ( ! 0 ) , d = ! 1 , a . checkForward ( ) , d } return null } function 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 n ( a ) { var b = a . editor ; b . getSelection ( ) . scrollIntoView ( ) ; setTimeout ( function ( ) { b . fire ( "saveSnapshot" ) } , 0 ) } function r ( 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 e , y , v , A , D , x , m , J , u , K ; CKEDITOR . editable = CKEDITOR . tools . createClass ( { base : CKEDITOR . dom . element , $ : function ( a , b ) { this . base ( b . $ ||
function g ( a ) { return a . activeEnterMode != CKEDITOR . ENTER _BR && ! 1 !== a . config . autoParagraph ? a . activeEnterMode == CKEDITOR . ENTER _DIV ? "div" : "p" : ! 1 } function n ( a ) { var b = a . editor ; b . getSelection ( ) . scrollIntoView ( ) ; setTimeout ( function ( ) { b . fire ( "saveSnapshot" ) } , 0 ) } function r ( 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 e , y , v , B , D , x , m , J , u , K ; CKEDITOR . editable = CKEDITOR . tools . createClass ( { base : CKEDITOR . dom . element , $ : function ( a , b ) { this . base ( b . $ ||
b ) ; this . editor = a ; this . status = "unloaded" ; this . hasFocus = ! 1 ; this . setup ( ) } , proto : { focus : function ( ) { var a ; if ( CKEDITOR . env . webkit && ! this . hasFocus && ( a = this . editor . _ . previousActive || this . getDocument ( ) . getActive ( ) , this . contains ( a ) ) ) { a . focus ( ) ; return } CKEDITOR . env . edge && 14 < CKEDITOR . env . version && ! this . hasFocus && this . getDocument ( ) . equals ( CKEDITOR . document ) && ( this . editor . _ . previousScrollTop = this . $ . scrollTop ) ; try { if ( ! CKEDITOR . env . ie || CKEDITOR . env . edge && 14 < CKEDITOR . env . version || ! this . getDocument ( ) . equals ( CKEDITOR . document ) ) if ( CKEDITOR . env . chrome ) { var b =
this . $ . scrollTop ; this . $ . focus ( ) ; this . $ . scrollTop = b } else this . $ . focus ( ) ; else this . $ . setActive ( ) } catch ( c ) { if ( ! CKEDITOR . env . ie ) throw c ; } CKEDITOR . env . safari && ! this . isInline ( ) && ( a = CKEDITOR . document . getActive ( ) , a . equals ( this . getWindow ( ) . getFrame ( ) ) || this . getWindow ( ) . focus ( ) ) } , on : function ( a , b ) { var c = Array . prototype . slice . call ( arguments , 0 ) ; CKEDITOR . env . ie && /^focus|blur$/ . exec ( a ) && ( a = "focus" == a ? "focusin" : "focusout" , b = 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 ] ) ; x ( this , b || "html" , a , c ) ; c . select ( ) ; n ( this ) ; this . editor . fire ( "afterInsertHtml" , { } ) } , insertHtmlIntoRange : function ( a , b , c ) { x ( 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 ) && ! A ( 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 ] ) ; n ( this ) } , insertElementIntoSelection : function ( a ) { this . insertElement ( a ) } , insertElementIntoRange : function ( a , b ) { var c = this . editor , d = c . config . enterMode ,
b ) && ( b . moveToPosition ( a , CKEDITOR . POSITION _AFTER _END ) , f && ( ( f = a . getNext ( function ( a ) { return c ( a ) && ! B ( 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 ] ) ; n ( 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 } ) ? m ( b ) : b . startContainer . is ( CKEDITOR . dtd . $list ) && J ( b ) ) ; var q , g ; if ( f ) for ( ; ( q = b . getCommonAncestor ( 0 , 1 ) ) && ( g = CKEDITOR . dtd [ q . getName ( ) ] ) && ( ! g || ! g [ e ] ) ; ) q . getName ( ) in CKEDITOR . dtd . span ? b . splitElement ( q ) : b . checkStartOfBlock ( ) && b . checkEndOfBlock ( ) ? ( b . setStartBefore ( q ) , b . collapse ( ! 0 ) , q . 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 . removeClass ( "cke_editable" ) ; this . status = "detached" ; var a = this . editor ; this . _ . detach ( ) ;
delete a . document ; delete a . window } , isInline : function ( ) { return this . getDocument ( ) . equals ( CKEDITOR . document ) } , fixInitialSelection : function ( ) { function a ( ) { var b = c . getDocument ( ) . $ , d = b . getSelection ( ) , e ; 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 ( ) ,
@@ -386,43 +386,43 @@ a.elementMode!=CKEDITOR.ELEMENT_MODE_REPLACE&&a.elementMode!=CKEDITOR.ELEMENT_MO
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 ( ) , m = g . getCustomData ( "stylesheet" ) ; m ? k != m . getText ( ) && ( CKEDITOR . env . ie && 9 > CKEDITOR . env . version ? m . $ . styleSheet . cssText = k : m . 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 q = { 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
q ) { var f , g = b . getRanges ( ) [ 0 ] , p = g . startPath ( ) , k , w , B , c = 8 == c ; CKEDITOR . env . ie && 11 > CKEDITOR . env . version && ( f = b . getSelectedElement ( ) ) || ( f = h ( b ) ) ? ( a . fire ( "saveSnapshot" ) , g . moveToPosition ( f , CKEDITOR . POSITION _BEFORE _START ) , f . remove ( ) , g . select ( ) , a . fire ( "saveSnapshot" ) , d = 1 ) : g . collapsed && ( ( k = p . block ) && ( B = k [ c ? "getPrevious" : "getNext" ] ( e ) ) && B . type == CKEDITOR . NODE _ELEMENT && B . is ( "table" ) && g [ c ? "checkStartOfBlock" : "checkEndOfBlock" ] ( ) ? ( a . fire ( "saveSnapshot" ) , g [ c ? "checkEndOfBlock" : "checkStartOfBlock" ] ( ) && k . remove ( ) , g [ "moveToElementEdit" +
( c ? "End" : "Start" ) ] ( B ) , g . select ( ) , a . fire ( "saveSnapshot" ) , d = 1 ) : p . blockLimit && p . blockLimit . is ( "td" ) && ( w = p . blockLimit . getAscendant ( "table" ) ) && g . checkBoundaryOfElement ( w , c ? CKEDITOR . START : CKEDITOR . END ) && ( B = w [ c ? "getPrevious" : "getNext" ] ( e ) ) ? ( a . fire ( "saveSnapshot" ) , g [ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( B ) , g . checkStartOfBlock ( ) && g . checkEndOfBlock ( ) ? B . remove ( ) : g . select ( ) , a . fire ( "saveSnapshot" ) , d = 1 ) : ( w = p . contains ( [ "td" , "th" , "caption" ] ) ) && g . checkBoundaryOfElement ( w , c ? CKEDITOR . START : CKEDITOR . END ) && ( d = 1 ) ) } return ! d } } ) ;
q ) { var f , g = b . getRanges ( ) [ 0 ] , p = g . startPath ( ) , k , w , A , c = 8 == c ; CKEDITOR . env . ie && 11 > CKEDITOR . env . version && ( f = b . getSelectedElement ( ) ) || ( f = h ( b ) ) ? ( a . fire ( "saveSnapshot" ) , g . moveToPosition ( f , CKEDITOR . POSITION _BEFORE _START ) , f . remove ( ) , g . select ( ) , a . fire ( "saveSnapshot" ) , d = 1 ) : g . collapsed && ( ( k = p . block ) && ( A = k [ c ? "getPrevious" : "getNext" ] ( e ) ) && A . type == CKEDITOR . NODE _ELEMENT && A . is ( "table" ) && g [ c ? "checkStartOfBlock" : "checkEndOfBlock" ] ( ) ? ( a . fire ( "saveSnapshot" ) , g [ c ? "checkEndOfBlock" : "checkStartOfBlock" ] ( ) && k . remove ( ) , g [ "moveToElementEdit" +
( c ? "End" : "Start" ) ] ( A ) , g . select ( ) , a . fire ( "saveSnapshot" ) , d = 1 ) : p . blockLimit && p . blockLimit . is ( "td" ) && ( w = p . blockLimit . getAscendant ( "table" ) ) && g . checkBoundaryOfElement ( w , c ? CKEDITOR . START : CKEDITOR . END ) && ( A = w [ c ? "getPrevious" : "getNext" ] ( e ) ) ? ( a . fire ( "saveSnapshot" ) , g [ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( A ) , g . checkStartOfBlock ( ) && g . checkEndOfBlock ( ) ? A . remove ( ) : g . select ( ) , a . fire ( "saveSnapshot" ) , d = 1 ) : ( w = p . contains ( [ "td" , "th" , "caption" ] ) ) && g . checkBoundaryOfElement ( w , 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 q && ! 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 . getOuterHtml ( ) . replace ( D , "" ) ) ) { 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 q && ( b = a . getSelection ( ) , 0 !== b . getRanges ( ) . length ) ) { var c = 8 == c , d = b . getRanges ( ) [ 0 ] ;
b = d . startPath ( ) ; if ( d . collapsed ) a : { var e = b . block ; if ( e && d [ c ? "checkStartOfBlock" : "checkEndOfBlock" ] ( ) && d . moveToClosestEditablePosition ( e , ! c ) && d . collapsed ) { if ( d . startContainer . type == CKEDITOR . NODE _ELEMENT ) { var f = d . startContainer . getChild ( d . startOffset - ( c ? 1 : 0 ) ) ; if ( f && f . type == CKEDITOR . NODE _ELEMENT && f . is ( "hr" ) ) { a . fire ( "saveSnapshot" ) ; f . remove ( ) ; b = ! 0 ; break a } } d = d . startPath ( ) . block ; if ( ! d || d && d . contains ( e ) ) b = void 0 ; else { a . fire ( "saveSnapshot" ) ; var p ; ( p = ( c ? d : e ) . getBogus ( ) ) && p . remove ( ) ; p = a . getSelection ( ) ; f = p . createBookmarks ( ) ;
( c ? e : d ) . moveChildren ( c ? d : e , ! 1 ) ; b . lastElement . mergeSiblings ( ) ; r ( e , d , ! c ) ; p . selectBookmarks ( f ) ; b = ! 0 } } else b = ! 1 } else c = d , p = b . block , d = c . endPath ( ) . block , p && d && ! p . equals ( d ) ? ( a . fire ( "saveSnapshot" ) , ( e = p . getBogus ( ) ) && e . remove ( ) , c . enlarge ( CKEDITOR . ENLARGE _INLINE ) , c . deleteContents ( ) , d . getParent ( ) && ( d . moveChildren ( p , ! 1 ) , b . lastElement . mergeSiblings ( ) , r ( p , 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 ) } } } , _ : { detach : function ( ) { this . editor . setData ( this . editor . getData ( ) , 0 , 1 ) ; this . clearListeners ( ) ; this . restoreAttrs ( ) ; var a ; if ( a = this . removeCustomData ( "classes" ) ) for ( ; a . length ; ) this . removeClass ( a . pop ( ) ) ; if ( ! this . is ( "textarea" ) ) { a = this . getDocument ( ) ; var b = a . getHead ( ) ; if ( b . getCustomData ( "stylesheet" ) ) { var c = a . getCustomData ( "stylesheet_ref" ) ; -- c ? a . setCustomData ( "stylesheet_ref" , c ) : ( a . removeCustomData ( "stylesheet_ref" ) , b . removeCustomData ( "stylesheet" ) . remove ( ) ) } } this . editor . fire ( "contentDomUnload" ) ;
delete this . editor } } } ) ; CKEDITOR . editor . prototype . editable = function ( a ) { var b = this . _ . editable ; if ( b && a ) return 0 ; arguments . length && ( b = this . _ . editable = a ? a instanceof CKEDITOR . editable ? a : new CKEDITOR . editable ( this , a ) : ( b && b . detach ( ) , null ) ) ; return 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}" ) ; e = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ; y = CKEDITOR . dom . walker . bookmark ( ! 1 ,
! 0 ) ; v = CKEDITOR . dom . walker . empty ( ) ; A = CKEDITOR . dom . walker . bogus ( ) ; D = /(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi ; x = function ( ) { function a ( b ) { return b . type == CKEDITOR . NODE _ELEMENT } function b ( c , d ) { var e , f , g , q , h = [ ] , z = d . range . startContainer ; e = d . range . startPath ( ) ; for ( var z = E [ z . getName ( ) ] , k = 0 , H = c . getChildren ( ) , m = H . count ( ) , n = - 1 , r = - 1 , C = 0 , P = e . contains ( E . $list ) ; k < m ; ++ k ) e = H . getItem ( k ) , a ( e ) ? ( g = e . getName ( ) , P && g in CKEDITOR . dtd . $list ?
h = h . concat ( b ( e , d ) ) : ( q = ! ! z [ g ] , "br" != g || ! e . data ( "cke-eol" ) || k && k != m - 1 || ( C = ( f = k ? h [ k - 1 ] . node : H . getItem ( k + 1 ) ) && ( ! a ( f ) || ! f . is ( "br" ) ) , f = f && a ( f ) && E . $block [ f . getName ( ) ] ) , - 1 != n || q || ( n = k ) , q || ( r = k ) , h . push ( { isElement : 1 , isLineBreak : C , isBlock : e . isBlockBoundary ( ) , hasBlockSibling : f , node : e , name : g , allowed : q } ) , f = C = 0 ) ) : h . push ( { isElement : 0 , node : e , allowed : 1 } ) ; - 1 < n && ( h [ n ] . firstNotAllowed = 1 ) ; - 1 < r && ( h [ r ] . lastNotAllowed = 1 ) ; return h } function d ( b , c ) { var e = [ ] , f = b . getChildren ( ) , g = f . count ( ) , q , h = 0 , z = E [ c ] , k = ! b . is ( E . $inline ) || b . is ( "br" ) ;
for ( k && e . push ( " " ) ; h < g ; h ++ ) q = f . getItem ( h ) , a ( q ) && ! q . is ( z ) ? e = e . concat ( d ( q , c ) ) : e . push ( q ) ; k && e . push ( " " ) ; return e } function e ( b ) { return a ( b . startContainer ) && b . startContainer . getChild ( b . startOffset - 1 ) } function f ( b ) { return b && a ( b ) && ( b . is ( E . $removeEmpty ) || b . is ( "a" ) && ! b . isBlockBoundary ( ) ) } function h ( b , c , d , e ) { var f = b . clone ( ) , g , q ; f . setEndAt ( c , CKEDITOR . POSITION _BEFORE _END ) ; ( g = ( new CKEDITOR . dom . walker ( f ) ) . next ( ) ) && a ( g ) && z [ g . getName ( ) ] && ( q = g . getPrevious ( ) ) && a ( q ) && ! q . getParent ( ) . equals ( b . startContainer ) && d . contains ( q ) &&
e . contains ( g ) && g . isIdentical ( q ) && ( g . moveChildren ( q ) , g . remove ( ) , h ( b , c , d , e ) ) } function q ( b , c ) { function d ( b , c ) { if ( c . isBlock && c . isElement && ! c . node . is ( "br" ) && a ( b ) && b . is ( "br" ) ) return b . remove ( ) , 1 } var e = c . endContainer . getChild ( c . endOffset ) , f = c . endContainer . getChild ( c . endOffset - 1 ) ; e && d ( e , b [ b . length - 1 ] ) ; f && d ( f , b [ 0 ] ) && ( c . setEnd ( c . endContainer , c . endOffset - 1 ) , c . collapse ( ) ) } var E = CKEDITOR . dtd , z = { 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 } , H = { p : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 ,
h6 : 1 } , m = CKEDITOR . tools . extend ( { } , E . $inline ) ; delete m . br ; return function ( z , p , N , w ) { var B = z . editor , G = ! 1 ; "unfiltered_html" == p && ( p = "html" , G = ! 0 ) ; if ( ! w . checkReadOnly ( ) ) { var I = ( new CKEDITOR . dom . elementPath ( w . startContainer , w . root ) ) . blockLimit || w . root ; z = { type : p , dontFilter : G , editable : z , editor : B , range : w , blockLimit : I , mergeCandidates : [ ] , zombies : [ ] } ; p = z . range ; w = z . mergeCandidates ; var n , r ; "text" == z . type && p . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 , ! 1 ) && ( n = CKEDITOR . dom . element . createFromHtml ( "\x3cspan\x3e\x26nbsp;\x3c/span\x3e" ,
p . document ) , p . insertNode ( n ) , p . setStartAfter ( n ) ) ; G = new CKEDITOR . dom . elementPath ( p . startContainer ) ; z . endPath = I = new CKEDITOR . dom . elementPath ( p . endContainer ) ; if ( ! p . collapsed ) { var B = I . block || I . blockLimit , v = p . getCommonAncestor ( ) ; B && ! B . equals ( v ) && ! B . contains ( v ) && p . checkEndOfBlock ( ) && z . zombies . push ( B ) ; p . deleteContents ( ) } for ( ; ( r = e ( p ) ) && a ( r ) && r . isBlockBoundary ( ) && G . contains ( r ) ; ) p . moveToPosition ( r , CKEDITOR . POSITION _BEFORE _END ) ; h ( p , z . blockLimit , G , I ) ; n && ( p . setEndBefore ( n ) , p . collapse ( ) , n . remove ( ) ) ; n = p . startPath ( ) ;
if ( B = n . contains ( f , ! 1 , 1 ) ) p . splitElement ( B ) , z . inlineStylesRoot = B , z . inlineStylesPeak = n . lastElement ; n = p . createBookmark ( ) ; ( B = n . startNode . getPrevious ( c ) ) && a ( B ) && f ( B ) && w . push ( B ) ; ( B = n . startNode . getNext ( c ) ) && a ( B ) && f ( B ) && w . push ( B ) ; for ( B = n . startNode ; ( B = B . getParent ( ) ) && f ( B ) ; ) w . push ( B ) ; p . moveToBookmark ( n ) ; if ( n = N ) { n = z . range ; if ( "text" == z . type && z . inlineStylesRoot ) { r = z . inlineStylesPeak ; p = r . getDocument ( ) . createText ( "{cke-peak}" ) ; for ( w = z . inlineStylesRoot . getParent ( ) ; ! r . equals ( w ) ; ) p = p . appendTo ( r . clone ( ) ) , r = r . getParent ( ) ;
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 ( D ,
"" ) ) ) { 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 q && ( b = a . getSelection ( ) , 0 !== b . getRanges ( ) . length ) ) { var c =
8 == c , d = b . getRanges ( ) [ 0 ] ; b = d . startPath ( ) ; if ( d . collapsed ) a : { var e = b . block ; if ( e && d [ c ? "checkStartOfBlock" : "checkEndOfBlock" ] ( ) && d . moveToClosestEditablePosition ( e , ! c ) && d . collapsed ) { if ( d . startContainer . type == CKEDITOR . NODE _ELEMENT ) { var f = d . startContainer . getChild ( d . startOffset - ( c ? 1 : 0 ) ) ; if ( f && f . type == CKEDITOR . NODE _ELEMENT && f . is ( "hr" ) ) { a . fire ( "saveSnapshot" ) ; f . remove ( ) ; b = ! 0 ; break a } } d = d . startPath ( ) . block ; if ( ! d || d && d . contains ( e ) ) b = void 0 ; else { a . fire ( "saveSnapshot" ) ; var p ; ( p = ( c ? d : e ) . getBogus ( ) ) && p . remove ( ) ;
p = a . getSelection ( ) ; f = p . createBookmarks ( ) ; ( c ? e : d ) . moveChildren ( c ? d : e , ! 1 ) ; b . lastElement . mergeSiblings ( ) ; r ( e , d , ! c ) ; p . selectBookmarks ( f ) ; b = ! 0 } } else b = ! 1 } else c = d , p = b . block , d = c . endPath ( ) . block , p && d && ! p . equals ( d ) ? ( a . fire ( "saveSnapshot" ) , ( e = p . getBogus ( ) ) && e . remove ( ) , c . enlarge ( CKEDITOR . ENLARGE _INLINE ) , c . deleteContents ( ) , d . getParent ( ) && ( d . moveChildren ( p , ! 1 ) , b . lastElement . mergeSiblings ( ) , r ( p , 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 ) } } } , _ : { detach : function ( ) { this . editor . setData ( this . editor . getData ( ) , 0 , 1 ) ; this . clearListeners ( ) ; this . restoreAttrs ( ) ; var a ; if ( a = this . removeCustomData ( "classes" ) ) for ( ; a . length ; ) this . removeClass ( a . pop ( ) ) ; if ( ! this . is ( "textarea" ) ) { a = this . getDocument ( ) ; var b = a . getHead ( ) ; if ( b . getCustomData ( "stylesheet" ) ) { var c = a . getCustomData ( "stylesheet_ref" ) ; -- c ? a . setCustomData ( "stylesheet_ref" , c ) : ( a . removeCustomData ( "stylesheet_ref" ) ,
b . removeCustomData ( "stylesheet" ) . remove ( ) ) } } this . editor . fire ( "contentDomUnload" ) ; delete this . editor } } } ) ; CKEDITOR . editor . prototype . editable = function ( a ) { var b = this . _ . editable ; if ( b && a ) return 0 ; arguments . length && ( b = this . _ . editable = a ? a instanceof CKEDITOR . editable ? a : new CKEDITOR . editable ( this , a ) : ( b && b . detach ( ) , null ) ) ; return 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}" ) ; e = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ;
y = CKEDITOR . dom . walker . bookmark ( ! 1 , ! 0 ) ; v = CKEDITOR . dom . walker . empty ( ) ; B = CKEDITOR . dom . walker . bogus ( ) ; D = /(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi ; x = function ( ) { function a ( b ) { return b . type == CKEDITOR . NODE _ELEMENT } function b ( c , d ) { var e , f , g , q , h = [ ] , z = d . range . startContainer ; e = d . range . startPath ( ) ; for ( var z = E [ z . getName ( ) ] , k = 0 , H = c . getChildren ( ) , m = H . count ( ) , n = - 1 , r = - 1 , C = 0 , P = e . contains ( E . $list ) ; k < m ; ++ k ) e = H . getItem ( k ) , a ( e ) ? ( g =
e . getName ( ) , P && g in CKEDITOR . dtd . $list ? h = h . concat ( b ( e , d ) ) : ( q = ! ! z [ g ] , "br" != g || ! e . data ( "cke-eol" ) || k && k != m - 1 || ( C = ( f = k ? h [ k - 1 ] . node : H . getItem ( k + 1 ) ) && ( ! a ( f ) || ! f . is ( "br" ) ) , f = f && a ( f ) && E . $block [ f . getName ( ) ] ) , - 1 != n || q || ( n = k ) , q || ( r = k ) , h . push ( { isElement : 1 , isLineBreak : C , isBlock : e . isBlockBoundary ( ) , hasBlockSibling : f , node : e , name : g , allowed : q } ) , f = C = 0 ) ) : h . push ( { isElement : 0 , node : e , allowed : 1 } ) ; - 1 < n && ( h [ n ] . firstNotAllowed = 1 ) ; - 1 < r && ( h [ r ] . lastNotAllowed = 1 ) ; return h } function d ( b , c ) { var e = [ ] , f = b . getChildren ( ) , g = f . count ( ) ,
q , h = 0 , z = E [ c ] , k = ! b . is ( E . $inline ) || b . is ( "br" ) ; for ( k && e . push ( " " ) ; h < g ; h ++ ) q = f . getItem ( h ) , a ( q ) && ! q . is ( z ) ? e = e . concat ( d ( q , c ) ) : e . push ( q ) ; k && e . push ( " " ) ; return e } function e ( b ) { return a ( b . startContainer ) && b . startContainer . getChild ( b . startOffset - 1 ) } function f ( b ) { return b && a ( b ) && ( b . is ( E . $removeEmpty ) || b . is ( "a" ) && ! b . isBlockBoundary ( ) ) } function h ( b , c , d , e ) { var f = b . clone ( ) , g , q ; f . setEndAt ( c , CKEDITOR . POSITION _BEFORE _END ) ; ( g = ( new CKEDITOR . dom . walker ( f ) ) . next ( ) ) && a ( g ) && z [ g . getName ( ) ] && ( q = g . getPrevious ( ) ) && a ( q ) && ! q . getParent ( ) . equals ( b . startContainer ) &&
d . contains ( q ) && e . contains ( g ) && g . isIdentical ( q ) && ( g . moveChildren ( q ) , g . remove ( ) , h ( b , c , d , e ) ) } function q ( b , c ) { function d ( b , c ) { if ( c . isBlock && c . isElement && ! c . node . is ( "br" ) && a ( b ) && b . is ( "br" ) ) return b . remove ( ) , 1 } var e = c . endContainer . getChild ( c . endOffset ) , f = c . endContainer . getChild ( c . endOffset - 1 ) ; e && d ( e , b [ b . length - 1 ] ) ; f && d ( f , b [ 0 ] ) && ( c . setEnd ( c . endContainer , c . endOffset - 1 ) , c . collapse ( ) ) } var E = CKEDITOR . dtd , z = { 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 } , H = { p : 1 , div : 1 , h1 : 1 , h2 : 1 ,
h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 } , m = CKEDITOR . tools . extend ( { } , E . $inline ) ; delete m . br ; return function ( z , p , N , w ) { var A = z . editor , G = ! 1 ; "unfiltered_html" == p && ( p = "html" , G = ! 0 ) ; if ( ! w . checkReadOnly ( ) ) { var I = ( new CKEDITOR . dom . elementPath ( w . startContainer , w . root ) ) . blockLimit || w . root ; z = { type : p , dontFilter : G , editable : z , editor : A , range : w , blockLimit : I , mergeCandidates : [ ] , zombies : [ ] } ; p = z . range ; w = z . mergeCandidates ; var n , r ; "text" == z . type && p . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 , ! 1 ) && ( n = CKEDITOR . dom . element . createFromHtml ( "\x3cspan\x3e\x26nbsp;\x3c/span\x3e" ,
p . document ) , p . insertNode ( n ) , p . setStartAfter ( n ) ) ; G = new CKEDITOR . dom . elementPath ( p . startContainer ) ; z . endPath = I = new CKEDITOR . dom . elementPath ( p . endContainer ) ; if ( ! p . collapsed ) { var A = I . block || I . blockLimit , v = p . getCommonAncestor ( ) ; A && ! A . equals ( v ) && ! A . contains ( v ) && p . checkEndOfBlock ( ) && z . zombies . push ( A ) ; p . deleteContents ( ) } for ( ; ( r = e ( p ) ) && a ( r ) && r . isBlockBoundary ( ) && G . contains ( r ) ; ) p . moveToPosition ( r , CKEDITOR . POSITION _BEFORE _END ) ; h ( p , z . blockLimit , G , I ) ; n && ( p . setEndBefore ( n ) , p . collapse ( ) , n . remove ( ) ) ; n = p . startPath ( ) ;
if ( A = n . contains ( f , ! 1 , 1 ) ) p . splitElement ( A ) , z . inlineStylesRoot = A , z . inlineStylesPeak = n . lastElement ; n = p . createBookmark ( ) ; ( A = n . startNode . getPrevious ( c ) ) && a ( A ) && f ( A ) && w . push ( A ) ; ( A = n . startNode . getNext ( c ) ) && a ( A ) && f ( A ) && w . push ( A ) ; for ( A = n . startNode ; ( A = A . getParent ( ) ) && f ( A ) ; ) w . push ( A ) ; p . moveToBookmark ( n ) ; if ( n = N ) { n = z . range ; if ( "text" == z . type && z . inlineStylesRoot ) { r = z . inlineStylesPeak ; p = r . getDocument ( ) . createText ( "{cke-peak}" ) ; for ( w = z . inlineStylesRoot . getParent ( ) ; ! r . equals ( w ) ; ) p = p . appendTo ( r . clone ( ) ) , r = r . getParent ( ) ;
N = p . getOuterHtml ( ) . split ( "{cke-peak}" ) . join ( N ) } r = z . blockLimit . getName ( ) ; if ( /^\s+|\s+$/ . test ( N ) && "span" in CKEDITOR . dtd [ r ] ) { var x = '\x3cspan data-cke-marker\x3d"1"\x3e\x26nbsp;\x3c/span\x3e' ; N = x + N + x } N = z . editor . dataProcessor . toHtml ( N , { context : null , fixForBody : ! 1 , protectedWhitespaces : ! ! x , dontFilter : z . dontFilter , filter : z . editor . activeFilter , enterMode : z . editor . activeEnterMode } ) ; r = n . document . createElement ( "body" ) ; r . setHtml ( N ) ; x && ( r . getFirst ( ) . remove ( ) , r . getLast ( ) . remove ( ) ) ; if ( ( x = n . startPath ( ) . block ) && ( 1 !=
x . getChildCount ( ) || ! x . getBogus ( ) ) ) a : { var y ; if ( 1 == r . getChildCount ( ) && a ( y = r . getFirst ( ) ) && y . is ( H ) && ! y . hasAttribute ( "contenteditable" ) ) { x = y . getElementsByTag ( "*" ) ; n = 0 ; for ( w = x . count ( ) ; n < w ; n ++ ) if ( p = x . getItem ( n ) , ! p . is ( m ) ) break a ; y . moveChildren ( y . getParent ( 1 ) ) ; y . remove ( ) } } z . dataWrapper = r ; n = N } if ( n ) { y = z . range ; n = y . document ; var u ; r = z . blockLimit ; w = 0 ; var A , x = [ ] , D , T ; N = B = 0 ; var J , K ; p = y . startContainer ; var G = z . endPath . elements [ 0 ] , W , I = G . getPosition ( p ) , v = ! ! G . getCommonAncestor ( p ) && I != CKEDITOR . POSITION _IDENTICAL && ! ( I & CKEDITOR . POSITION _CONTAINS +
x . getChildCount ( ) || ! x . getBogus ( ) ) ) a : { var y ; if ( 1 == r . getChildCount ( ) && a ( y = r . getFirst ( ) ) && y . is ( H ) && ! y . hasAttribute ( "contenteditable" ) ) { x = y . getElementsByTag ( "*" ) ; n = 0 ; for ( w = x . count ( ) ; n < w ; n ++ ) if ( p = x . getItem ( n ) , ! p . is ( m ) ) break a ; y . moveChildren ( y . getParent ( 1 ) ) ; y . remove ( ) } } z . dataWrapper = r ; n = N } if ( n ) { y = z . range ; n = y . document ; var u ; r = z . blockLimit ; w = 0 ; var B , x = [ ] , D , T ; N = A = 0 ; var J , K ; p = y . startContainer ; var G = z . endPath . elements [ 0 ] , W , I = G . getPosition ( p ) , v = ! ! G . getCommonAncestor ( p ) && I != CKEDITOR . POSITION _IDENTICAL && ! ( I & CKEDITOR . POSITION _CONTAINS +
CKEDITOR . POSITION _IS _CONTAINED ) ; p = b ( z . dataWrapper , z ) ; for ( q ( p , y ) ; w < p . length ; w ++ ) { I = p [ w ] ; if ( u = I . isLineBreak ) { u = y ; J = r ; var S = void 0 , Y = void 0 ; I . hasBlockSibling ? u = 1 : ( S = u . startContainer . getAscendant ( E . $block , 1 ) ) && S . is ( { div : 1 , p : 1 } ) ? ( Y = S . getPosition ( J ) , Y == CKEDITOR . POSITION _IDENTICAL || Y == CKEDITOR . POSITION _CONTAINS ? u = 0 : ( J = u . splitElement ( S ) , u . moveToPosition ( J , CKEDITOR . POSITION _AFTER _START ) , u = 1 ) ) : u = 0 } if ( u ) N = 0 < w ; else { u = y . startPath ( ) ; ! I . isBlock && k ( z . editor , u . block , u . blockLimit ) && ( T = g ( z . editor ) ) && ( T = n . createElement ( T ) ,
T . appendBogus ( ) , y . insertNode ( T ) , CKEDITOR . env . needsBrFiller && ( A = T . getBogus ( ) ) && A . remove ( ) , y . moveToPosition ( T , CKEDITOR . POSITION _BEFORE _END ) ) ; if ( ( u = y . startPath ( ) . block ) && ! u . equals ( D ) ) { if ( A = u . getBogus ( ) ) A . remove ( ) , x . push ( u ) ; D = u } I . firstNotAllowed && ( B = 1 ) ; if ( B && I . isElement ) { u = y . startContainer ; for ( J = null ; u && ! E [ u . getName ( ) ] [ I . name ] ; ) { if ( u . equals ( r ) ) { u = null ; break } J = u ; u = u . getParent ( ) } if ( u ) J && ( K = y . splitElement ( J ) , z . zombies . push ( K ) , z . zombies . push ( J ) ) ; else { J = r . getName ( ) ; W = ! w ; u = w == p . length - 1 ; J = d ( I . node , J ) ; for ( var S =
[ ] , Y = J . length , Z = 0 , ba = void 0 , ca = 0 , U = - 1 ; Z < Y ; Z ++ ) ba = J [ Z ] , " " == ba ? ( ca || W && ! Z || ( S . push ( new CKEDITOR . dom . text ( " " ) ) , U = S . length ) , ca = 1 ) : ( S . push ( ba ) , ca = 0 ) ; u && U == S . length && S . pop ( ) ; W = S } } if ( W ) { for ( ; u = W . pop ( ) ; ) y . insertNode ( u ) ; W = 0 } else y . insertNode ( I . node ) ; I . lastNotAllowed && w < p . length - 1 && ( ( K = v ? G : K ) && y . setEndAt ( K , CKEDITOR . POSITION _AFTER _START ) , B = 0 ) ; y . collapse ( ) } } 1 != p . length ? A = ! 1 : ( A = p [ 0 ] , A = A . isElement && "false" == A . node . getAttribute ( "contenteditable" ) ) ; A && ( N = ! 0 , u = p [ 0 ] . node , y . setStartAt ( u , CKEDITOR . POSITION _BEFORE _START ) ,
y . setEndAt ( u , CKEDITOR . POSITION _AFTER _END ) ) ; z . dontMoveCaret = N ; z . bogusNeededBlocks = x } A = z . range ; var R ; K = z . bogusNeededBlocks ; for ( W = A . createBookmark ( ) ; D = z . zombies . pop ( ) ; ) D . getParent ( ) && ( T = A . clone ( ) , T . moveToElementEditStart ( D ) , T . removeEmptyBlocksAtEnd ( ) ) ; if ( K ) for ( ; D = K . pop ( ) ; ) CKEDITOR . env . needsBrFiller ? D . appendBogus ( ) : D . append ( A . document . createText ( " " ) ) ; for ( ; D = z . mergeCandidates . pop ( ) ; ) D . mergeSiblings ( ) ; A . moveToBookmark ( W ) ; if ( ! z . dontMoveCaret ) { for ( D = e ( A ) ; D && a ( D ) && ! D . is ( E . $empty ) ; ) { if ( D . isBlockBoundary ( ) ) A . moveToPosition ( D ,
CKEDITOR . POSITION _BEFORE _END ) ; else { if ( f ( D ) && D . getHtml ( ) . match ( /(\s| )$/g ) ) { R = null ; break } R = A . clone ( ) ; R . moveToPosition ( D , CKEDITOR . POSITION _BEFORE _END ) } D = D . getLast ( c ) } R && A . moveToRange ( R ) } } } } ( ) ; m = 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 }
T . appendBogus ( ) , y . insertNode ( T ) , CKEDITOR . env . needsBrFiller && ( B = T . getBogus ( ) ) && B . remove ( ) , y . moveToPosition ( T , CKEDITOR . POSITION _BEFORE _END ) ) ; if ( ( u = y . startPath ( ) . block ) && ! u . equals ( D ) ) { if ( B = u . getBogus ( ) ) B . remove ( ) , x . push ( u ) ; D = u } I . firstNotAllowed && ( A = 1 ) ; if ( A && I . isElement ) { u = y . startContainer ; for ( J = null ; u && ! E [ u . getName ( ) ] [ I . name ] ; ) { if ( u . equals ( r ) ) { u = null ; break } J = u ; u = u . getParent ( ) } if ( u ) J && ( K = y . splitElement ( J ) , z . zombies . push ( K ) , z . zombies . push ( J ) ) ; else { J = r . getName ( ) ; W = ! w ; u = w == p . length - 1 ; J = d ( I . node , J ) ; for ( var S =
[ ] , Y = J . length , Z = 0 , ba = void 0 , ca = 0 , U = - 1 ; Z < Y ; Z ++ ) ba = J [ Z ] , " " == ba ? ( ca || W && ! Z || ( S . push ( new CKEDITOR . dom . text ( " " ) ) , U = S . length ) , ca = 1 ) : ( S . push ( ba ) , ca = 0 ) ; u && U == S . length && S . pop ( ) ; W = S } } if ( W ) { for ( ; u = W . pop ( ) ; ) y . insertNode ( u ) ; W = 0 } else y . insertNode ( I . node ) ; I . lastNotAllowed && w < p . length - 1 && ( ( K = v ? G : K ) && y . setEndAt ( K , CKEDITOR . POSITION _AFTER _START ) , A = 0 ) ; y . collapse ( ) } } 1 != p . length ? B = ! 1 : ( B = p [ 0 ] , B = B . isElement && "false" == B . node . getAttribute ( "contenteditable" ) ) ; B && ( N = ! 0 , u = p [ 0 ] . node , y . setStartAt ( u , CKEDITOR . POSITION _BEFORE _START ) ,
y . setEndAt ( u , CKEDITOR . POSITION _AFTER _END ) ) ; z . dontMoveCaret = N ; z . bogusNeededBlocks = x } B = z . range ; var R ; K = z . bogusNeededBlocks ; for ( W = B . createBookmark ( ) ; D = z . zombies . pop ( ) ; ) D . getParent ( ) && ( T = B . clone ( ) , T . moveToElementEditStart ( D ) , T . removeEmptyBlocksAtEnd ( ) ) ; if ( K ) for ( ; D = K . pop ( ) ; ) CKEDITOR . env . needsBrFiller ? D . appendBogus ( ) : D . append ( B . document . createText ( " " ) ) ; for ( ; D = z . mergeCandidates . pop ( ) ; ) D . mergeSiblings ( ) ; B . moveToBookmark ( W ) ; if ( ! z . dontMoveCaret ) { for ( D = e ( B ) ; D && a ( D ) && ! D . is ( E . $empty ) ; ) { if ( D . isBlockBoundary ( ) ) B . moveToPosition ( D ,
CKEDITOR . POSITION _BEFORE _END ) ; else { if ( f ( D ) && D . getHtml ( ) . match ( /(\s| )$/g ) ) { R = null ; break } R = B . clone ( ) ; R . moveToPosition ( D , CKEDITOR . POSITION _BEFORE _END ) } D = D . getLast ( c ) } R && B . moveToRange ( R ) } } } } ( ) ; m = 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 ) ) } } ( ) ; J = function ( ) { function a ( b ) { b = new CKEDITOR . dom . walker ( b ) ; b . guard = function ( a , b ) { if ( b ) return ! 1 ; if ( a . type == CKEDITOR . NODE _ELEMENT ) return a . is ( CKEDITOR . dtd . $list ) || a . is ( CKEDITOR . dtd . $listItem ) } ; b . evaluator = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT &&
a . is ( CKEDITOR . dtd . $listItem ) } ; return b } return function ( b ) { var c = b . startContainer , d = ! 1 , e ; e = b . clone ( ) ; e . setStart ( c , 0 ) ; e = a ( e ) . lastBackward ( ) ; e || ( e = b . clone ( ) , e . setEndAt ( c , CKEDITOR . POSITION _BEFORE _END ) , e = a ( e ) . lastForward ( ) , d = ! 0 ) ; e || ( e = c ) ; e . is ( CKEDITOR . dtd . $list ) ? ( b . setStartAt ( e , CKEDITOR . POSITION _BEFORE _START ) , b . collapse ( ! 0 ) , e . remove ( ) ) : ( ( c = e . getBogus ( ) ) && c . remove ( ) , b . moveToPosition ( e , d ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _BEFORE _END ) , b . select ( ) ) } } ( ) ; u = { eol : { detect : function ( a , b ) { var c = a . range ,
d = c . clone ( ) , e = c . clone ( ) , f = new CKEDITOR . dom . elementPath ( c . startContainer , b ) , g = new CKEDITOR . dom . elementPath ( c . endContainer , b ) ; d . collapse ( 1 ) ; e . collapse ( ) ; f . block && d . checkBoundaryOfElement ( f . block , CKEDITOR . END ) && ( c . setStartAfter ( f . block ) , a . prependEolBr = 1 ) ; g . block && e . checkBoundaryOfElement ( g . block , CKEDITOR . START ) && ( c . setEndBefore ( g . block ) , a . appendEolBr = 1 ) } , fix : function ( a , b ) { var c = b . getDocument ( ) , d ; a . appendEolBr && ( d = this . createEolBr ( c ) , a . fragment . append ( d ) ) ; ! a . prependEolBr || d && ! d . getPrevious ( ) || a . fragment . append ( this . createEolBr ( c ) ,
1 ) } , createEolBr : function ( a ) { return a . createElement ( "br" , { attributes : { "data-cke-eol" : 1 } } ) } } , bogus : { exclude : function ( a ) { var b = a . range . getBoundaryNodes ( ) , c = b . startNode , b = b . endNode ; ! b || ! A ( b ) || c && c . equals ( b ) || a . range . setEndBefore ( b ) } } , tree : { rebuild : function ( a , b ) { var c = a . range , d = c . getCommonAncestor ( ) , e = new CKEDITOR . dom . elementPath ( d , b ) , f = new CKEDITOR . dom . elementPath ( c . startContainer , b ) , c = new CKEDITOR . dom . elementPath ( c . endContainer , b ) , g ; d . type == CKEDITOR . NODE _TEXT && ( d = d . getParent ( ) ) ; if ( e . blockLimit . is ( { tr : 1 ,
1 ) } , createEolBr : function ( a ) { return a . createElement ( "br" , { attributes : { "data-cke-eol" : 1 } } ) } } , bogus : { exclude : function ( a ) { var b = a . range . getBoundaryNodes ( ) , c = b . startNode , b = b . endNode ; ! b || ! B ( b ) || c && c . equals ( b ) || a . range . setEndBefore ( b ) } } , tree : { rebuild : function ( a , b ) { var c = a . range , d = c . getCommonAncestor ( ) , e = new CKEDITOR . dom . elementPath ( d , b ) , f = new CKEDITOR . dom . elementPath ( c . startContainer , b ) , c = new CKEDITOR . dom . elementPath ( c . endContainer , b ) , g ; d . type == CKEDITOR . NODE _TEXT && ( d = d . getParent ( ) ) ; if ( e . blockLimit . is ( { tr : 1 ,
table : 1 } ) ) { var h = e . contains ( "table" ) . getParent ( ) ; g = function ( a ) { return ! a . equals ( h ) } } else if ( e . block && e . block . is ( CKEDITOR . dtd . $listItem ) && ( f = f . contains ( CKEDITOR . dtd . $list ) , c = c . contains ( CKEDITOR . dtd . $list ) , ! f . equals ( c ) ) ) { var z = e . contains ( CKEDITOR . dtd . $list ) . getParent ( ) ; g = function ( a ) { return ! a . equals ( z ) } } g || ( g = function ( a ) { return ! a . equals ( e . block ) && ! a . equals ( e . blockLimit ) } ) ; this . rebuildFragment ( a , b , d , g ) } , rebuildFragment : function ( a , b , c , d ) { for ( var e ; c && ! c . equals ( b ) && d ( c ) ; ) e = c . clone ( 0 , 1 ) , a . fragment . appendTo ( e ) ,
a . fragment = e , c = c . getParent ( ) } } , cell : { shrink : function ( a ) { a = a . range ; var b = a . startContainer , c = a . endContainer , d = a . startOffset , e = a . endOffset ; b . type == CKEDITOR . NODE _ELEMENT && b . equals ( c ) && b . is ( "tr" ) && ++ d == e && a . shrink ( CKEDITOR . SHRINK _TEXT ) } } } ; K = function ( ) { function a ( b , c ) { var d = b . getParent ( ) ; if ( d . is ( CKEDITOR . dtd . $inline ) ) b [ c ? "insertBefore" : "insertAfter" ] ( d ) } function b ( c , d , e ) { a ( d ) ; a ( e , 1 ) ; for ( var f ; f = e . getNext ( ) ; ) f . insertAfter ( d ) , d = f ; v ( c ) && c . remove ( ) } function c ( a , b ) { var d = new CKEDITOR . dom . range ( a ) ; d . setStartAfter ( b . startNode ) ;
d . setEndBefore ( b . endNode ) ; return d } return { list : { detectMerge : function ( a , b ) { var d = c ( b , a . bookmark ) , e = d . startPath ( ) , f = d . endPath ( ) , g = e . contains ( CKEDITOR . dtd . $list ) , h = f . contains ( CKEDITOR . dtd . $list ) ; a . mergeList = g && h && g . getParent ( ) . equals ( h . getParent ( ) ) && ! g . equals ( h ) ; a . mergeListItems = e . block && f . block && e . block . is ( CKEDITOR . dtd . $listItem ) && f . block . is ( CKEDITOR . dtd . $listItem ) ; if ( a . mergeList || a . mergeListItems ) d = d . clone ( ) , d . setStartBefore ( a . bookmark . startNode ) , d . setEndAfter ( a . bookmark . endNode ) , a . mergeListBookmark =
d . createBookmark ( ) } , merge : function ( a , c ) { if ( a . mergeListBookmark ) { var d = a . mergeListBookmark . startNode , e = a . mergeListBookmark . endNode , f = new CKEDITOR . dom . elementPath ( d , c ) , g = new CKEDITOR . dom . elementPath ( e , c ) ; if ( a . mergeList ) { var h = f . contains ( CKEDITOR . dtd . $list ) , k = g . contains ( CKEDITOR . dtd . $list ) ; h . equals ( k ) || ( k . moveChildren ( h ) , k . remove ( ) ) } a . mergeListItems && ( f = f . contains ( CKEDITOR . dtd . $listItem ) , g = g . contains ( CKEDITOR . dtd . $listItem ) , f . equals ( g ) || b ( g , d , e ) ) ; d . remove ( ) ; e . remove ( ) } } } , block : { detectMerge : function ( a ,
b ) { if ( ! a . tableContentsRanges && ! a . mergeListBookmark ) { var c = new CKEDITOR . dom . range ( b ) ; c . setStartBefore ( a . bookmark . startNode ) ; c . setEndAfter ( a . bookmark . endNode ) ; a . mergeBlockBookmark = c . createBookmark ( ) } } , merge : function ( a , c ) { if ( a . mergeBlockBookmark && ! a . purgeTableBookmark ) { var d = a . mergeBlockBookmark . startNode , e = a . mergeBlockBookmark . endNode , f = new CKEDITOR . dom . elementPath ( d , c ) , g = new CKEDITOR . dom . elementPath ( e , c ) , f = f . block , g = g . block ; f && g && ! f . equals ( g ) && b ( g , d , e ) ; d . remove ( ) ; e . remove ( ) } } } , table : function ( ) { function a ( c ) { var e =
[ ] , f , g = new CKEDITOR . dom . walker ( c ) , h = c . startPath ( ) . contains ( d ) , k = c . endPath ( ) . contains ( d ) , p = { } ; g . guard = function ( a , g ) { if ( a . type == CKEDITOR . NODE _ELEMENT ) { var B = "visited_" + ( g ? "out" : "in" ) ; if ( a . getCustomData ( B ) ) return ; CKEDITOR . dom . element . setMarker ( p , a , B , 1 ) } if ( g && h && a . equals ( h ) ) f = c . clone ( ) , f . setEndAt ( h , CKEDITOR . POSITION _BEFORE _END ) , e . push ( f ) ; else if ( ! g && k && a . equals ( k ) ) f = c . clone ( ) , f . setStartAt ( k , CKEDITOR . POSITION _AFTER _START ) , e . push ( f ) ; else { if ( B = ! g ) B = a . type == CKEDITOR . NODE _ELEMENT && a . is ( d ) && ( ! h || b ( a , h ) ) && ( ! k ||
b ( a , k ) ) ; if ( ! B && ( B = g ) ) if ( a . is ( d ) ) var B = h && h . getAscendant ( "table" , ! 0 ) , l = k && k . getAscendant ( "table" , ! 0 ) , H = a . getAscendant ( "table" , ! 0 ) , B = B && B . contains ( H ) || l && l . contains ( H ) ; else B = void 0 ; B && ( f = c . clone ( ) , f . selectNodeContents ( a ) , e . push ( f ) ) } } ; g . lastForward ( ) ; CKEDITOR . dom . element . clearAllMarkers ( p ) ; return e } function b ( a , c ) { var d = CKEDITOR . POSITION _CONTAINS + CKEDITOR . POSITION _IS _CONTAINED , e = a . getPosition ( c ) ; return e === CKEDITOR . POSITION _IDENTICAL ? ! 1 : 0 === ( e & d ) } var d = { td : 1 , th : 1 , caption : 1 } ; return { detectPurge : function ( a ) { var b =
[ ] , f , g = new CKEDITOR . dom . walker ( c ) , h = c . startPath ( ) . contains ( d ) , k = c . endPath ( ) . contains ( d ) , p = { } ; g . guard = function ( a , g ) { if ( a . type == CKEDITOR . NODE _ELEMENT ) { var A = "visited_" + ( g ? "out" : "in" ) ; if ( a . getCustomData ( A ) ) return ; CKEDITOR . dom . element . setMarker ( p , a , A , 1 ) } if ( g && h && a . equals ( h ) ) f = c . clone ( ) , f . setEndAt ( h , CKEDITOR . POSITION _BEFORE _END ) , e . push ( f ) ; else if ( ! g && k && a . equals ( k ) ) f = c . clone ( ) , f . setStartAt ( k , CKEDITOR . POSITION _AFTER _START ) , e . push ( f ) ; else { if ( A = ! g ) A = a . type == CKEDITOR . NODE _ELEMENT && a . is ( d ) && ( ! h || b ( a , h ) ) && ( ! k ||
b ( a , k ) ) ; if ( ! A && ( A = g ) ) if ( a . is ( d ) ) var A = h && h . getAscendant ( "table" , ! 0 ) , l = k && k . getAscendant ( "table" , ! 0 ) , H = a . getAscendant ( "table" , ! 0 ) , A = A && A . contains ( H ) || l && l . contains ( H ) ; else A = void 0 ; A && ( f = c . clone ( ) , f . selectNodeContents ( a ) , e . push ( f ) ) } } ; g . lastForward ( ) ; CKEDITOR . dom . element . clearAllMarkers ( p ) ; return e } function b ( a , c ) { var d = CKEDITOR . POSITION _CONTAINS + CKEDITOR . POSITION _IS _CONTAINED , e = a . getPosition ( c ) ; return e === CKEDITOR . POSITION _IDENTICAL ? ! 1 : 0 === ( e & d ) } var d = { td : 1 , th : 1 , caption : 1 } ; return { detectPurge : function ( a ) { var b =
a . range , c = b . clone ( ) ; c . enlarge ( CKEDITOR . ENLARGE _ELEMENT ) ; var c = new CKEDITOR . dom . walker ( c ) , e = 0 ; c . evaluator = function ( a ) { a . type == CKEDITOR . NODE _ELEMENT && a . is ( d ) && ++ e } ; c . checkForward ( ) ; if ( 1 < e ) { var c = b . startPath ( ) . contains ( "table" ) , f = b . endPath ( ) . contains ( "table" ) ; c && f && b . checkBoundaryOfElement ( c , CKEDITOR . START ) && b . checkBoundaryOfElement ( f , CKEDITOR . END ) && ( b = a . range . clone ( ) , b . setStartBefore ( c ) , b . setEndAfter ( f ) , a . purgeTableBookmark = b . createBookmark ( ) ) } } , detectRanges : function ( e , f ) { var g = c ( f , e . bookmark ) , h = g . clone ( ) ,
k , l , p = g . getCommonAncestor ( ) ; p . is ( CKEDITOR . dtd . $tableContent ) && ! p . is ( d ) && ( p = p . getAscendant ( "table" , ! 0 ) ) ; l = p ; p = new CKEDITOR . dom . elementPath ( g . startContainer , l ) ; l = new CKEDITOR . dom . elementPath ( g . endContainer , l ) ; p = p . contains ( "table" ) ; l = l . contains ( "table" ) ; if ( p || l ) p && l && b ( p , l ) ? ( e . tableSurroundingRange = h , h . setStartAt ( p , CKEDITOR . POSITION _AFTER _END ) , h . setEndAt ( l , CKEDITOR . POSITION _BEFORE _START ) , h = g . clone ( ) , h . setEndAt ( p , CKEDITOR . POSITION _AFTER _END ) , k = g . clone ( ) , k . setStartAt ( l , CKEDITOR . POSITION _BEFORE _START ) ,
k = a ( h ) . concat ( a ( k ) ) ) : p ? l || ( e . tableSurroundingRange = h , h . setStartAt ( p , CKEDITOR . POSITION _AFTER _END ) , g . setEndAt ( p , CKEDITOR . POSITION _AFTER _END ) ) : ( e . tableSurroundingRange = h , h . setEndAt ( l , CKEDITOR . POSITION _BEFORE _START ) , g . setStartAt ( l , CKEDITOR . POSITION _AFTER _START ) ) , e . tableContentsRanges = k ? k : a ( g ) } , deleteRanges : function ( a ) { for ( var b ; b = a . tableContentsRanges . pop ( ) ; ) b . extractContents ( ) , v ( b . startContainer ) && b . startContainer . appendBogus ( ) ; a . tableSurroundingRange && a . tableSurroundingRange . extractContents ( ) } , purge : function ( a ) { if ( a . purgeTableBookmark ) { var b =
@@ -435,23 +435,23 @@ var e;if(!(e=!c)&&(e=!c.isHidden())){e=b;var f=c.getRanges(),g=e.getRanges(),h=f
d ( g ) ; h = h && p ? h . equals ( p ) || p . contains ( h ) : ! 1 ; h && ( l || g ) ? ( k && ! w && 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 && ! e && ( this . _ . previousActive = this . document . getActive ( ) ) , this . _ . selectionPreviousPath = c , this . fire ( "selectionChange" ,
{ selection : b , path : c } ) ) } function k ( ) { F = ! 0 ; t || ( g . call ( this ) , t = CKEDITOR . tools . setTimeout ( g , 200 , this ) ) } function g ( ) { t = null ; F && ( CKEDITOR . tools . setTimeout ( h , 0 , this ) , F = ! 1 ) } function n ( a ) { return L ( a ) || a . type == CKEDITOR . NODE _ELEMENT && ! a . is ( CKEDITOR . dtd . $empty ) ? ! 0 : ! 1 } function r ( 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 ( n , null , c ) , e = a . getNextNode ( n , null ,
c ) ; return b ( d ) || b ( e , 1 ) || ! ( d || e || c . type == CKEDITOR . NODE _ELEMENT && c . isBlockBoundary ( ) && c . getBogus ( ) ) ? ! 0 : ! 1 } function e ( a ) { y ( a , ! 1 ) ; var b = a . getDocument ( ) . createText ( u ) ; a . setCustomData ( "cke-fillingChar" , b ) ; return b } function y ( a , b ) { var c = a && a . removeCustomData ( "cke-fillingChar" ) ; if ( c ) { if ( ! 1 !== b ) { var d = a . getDocument ( ) . getSelection ( ) . getNative ( ) , e = d && "None" != d . type && d . getRangeAt ( 0 ) , f = u . 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 ( v ( 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 v ( a , b ) { return b ? a . replace ( K , function ( a , b ) { return b ? " " : "" } ) : a . replace ( u , "" ) } function A ( a , b ) { var c = b && CKEDITOR . tools . htmlEncode ( b ) || "\x26nbsp;" , c = CKEDITOR . dom . element . createFromHtml ( '\x3cdiv data-cke-hidden-sel\x3d"1" data-cke-temp\x3d"1" style\x3d"' +
d . anchorNode == c . $ && d . anchorOffset > f && ( g [ 0 ] . offset -= f ) ; d . focusNode == c . $ && d . focusOffset > f && ( g [ 1 ] . offset -= f ) } } c . setText ( v ( 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 v ( a , b ) { return b ? a . replace ( K , function ( a , b ) { return b ? " " : "" } ) : a . replace ( u , "" ) } function B ( 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" ) + '"\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 D ( 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 x ( 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 m = "function" != typeof window . getSelection , J = 1 , u = CKEDITOR . tools . repeat ( " " , 7 ) , K = new RegExp ( u + "( )?" , "g" ) , l , t , F , L = CKEDITOR . dom . walker . invisible ( 1 ) , C = 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 ( ) { r = new CKEDITOR . dom . selection ( c . getSelection ( ) ) ; r . lock ( ) } function b ( ) { f . removeListener ( "mouseup" , b ) ; q . removeListener ( "mouseup" , b ) ; var a = CKEDITOR . document . $ . selection , c = a . createRange ( ) ; "None" != a . type && c . parentElement ( ) && c . parentElement ( ) . ownerDocument == e . $ && c . select ( ) } function d ( a ) { if ( CKEDITOR . env . ie ) { var b = ( a = a . getRanges ( ) [ 0 ] ) ? a . startContainer . getAscendant ( function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT &&
( "false" == a . getAttribute ( "contenteditable" ) || "true" == a . getAttribute ( "contenteditable" ) ) } , ! 0 ) : null ; return a && "false" == b . getAttribute ( "contenteditable" ) && b } } var e = c . document , f = CKEDITOR . document , g = c . editable ( ) , l = e . getBody ( ) , q = e . getDocumentElement ( ) , E = g . isInline ( ) , n , r ; CKEDITOR . env . gecko && g . attachListener ( g , "focus" , function ( a ) { a . removeListener ( ) ; 0 !== n && ( a = c . getSelection ( ) . getNative ( ) ) && a . isCollapsed && a . anchorNode == g . $ && ( a = c . createRange ( ) , a . moveToElementEditStart ( g ) , a . select ( ) ) } , null , null , - 2 ) ; g . attachListener ( g ,
CKEDITOR . env . webkit ? "DOMFocusIn" : "focus" , function ( ) { n && CKEDITOR . env . webkit && ( n = c . _ . previousActive && c . _ . previousActive . equals ( e . getActive ( ) ) ) && null != c . _ . previousScrollTop && c . _ . previousScrollTop != g . $ . scrollTop && ( g . $ . scrollTop = c . _ . previousScrollTop ) ; c . unlockSelection ( n ) ; n = 0 } , null , null , - 1 ) ; g . attachListener ( g , "mousedown" , function ( ) { n = 0 } ) ; if ( CKEDITOR . env . ie || E ) m ? g . attachListener ( g , "beforedeactivate" , a , null , null , - 1 ) : g . attachListener ( c , "selectionCheck" , a , null , null , - 1 ) , g . attachListener ( g , CKEDITOR . env . webkit ?
"DOMFocusOut" : "blur" , function ( ) { c . lockSelection ( r ) ; n = 1 } , null , null , - 1 ) , g . attachListener ( g , "mousedown" , function ( ) { n = 0 } ) ; if ( CKEDITOR . env . ie && ! E ) { var v ; g . attachListener ( g , "mousedown" , function ( a ) { 2 == a . data . $ . button && ( ( a = c . document . getSelection ( ) ) && a . getType ( ) != CKEDITOR . SELECTION _NONE || ( v = c . window . getScrollPosition ( ) ) ) } ) ; g . attachListener ( g , "mouseup" , function ( a ) { 2 == a . data . $ . button && v && ( c . document . $ . documentElement . scrollLeft = v . x , c . document . $ . documentElement . scrollTop = v . y ) ; v = null } ) ; if ( "BackCompat" != e . $ . compatMode ) { if ( CKEDITOR . env . ie7Compat ||
CKEDITOR . env . ie6Compat ) { var t , u ; q . 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 > u . compareEndPoints ( "StartToStart" , c ) ? "EndToEnd" : "StartToStart" , c ) ; t . select ( ) } } function c ( ) { q . removeListener ( "mousemove" , b ) ; f . removeListener ( "mouseup" , c ) ; q . removeListener ( "mouseup" , c ) ; t . select ( ) } a = a . data ; if ( a . getTarget ( ) . is ( "html" ) && a . $ . y < q . $ . clientHeight && a . $ . x < q . $ . clientWidth ) { t = l . $ . createTextRange ( ) ; try { t . moveToPoint ( a . $ . clientX ,
a . $ . clientY ) } catch ( d ) { } u = t . duplicate ( ) ; q . on ( "mousemove" , b ) ; f . on ( "mouseup" , c ) ; q . on ( "mouseup" , c ) } } ) } if ( 7 < CKEDITOR . env . version && 11 > CKEDITOR . env . version ) q . on ( "mousedown" , function ( a ) { a . data . getTarget ( ) . is ( "html" ) && ( f . on ( "mouseup" , b ) , q . on ( "mouseup" , b ) ) } ) } } g . attachListener ( g , "selectionchange" , h , c ) ; g . attachListener ( g , "keyup" , k , c ) ; g . attachListener ( g , "keydown" , function ( a ) { var b = this . getSelection ( 1 ) ; d ( b ) && ( b . selectElement ( d ( b ) ) , a . data . preventDefault ( ) ) } , c ) ; g . attachListener ( g , CKEDITOR . env . webkit ? "DOMFocusIn" :
"focus" , function ( ) { c . forceNextSelectionCheck ( ) ; c . selectionChange ( 1 ) } ) ; if ( E && ( CKEDITOR . env . webkit || CKEDITOR . env . gecko ) ) { var x ; g . attachListener ( g , "mousedown" , function ( ) { x = 1 } ) ; g . attachListener ( e . getDocumentElement ( ) , "mouseup" , function ( ) { x && k . call ( c ) ; x = 0 } ) } else g . attachListener ( CKEDITOR . env . ie ? g : e . getDocumentElement ( ) , "mouseup" , k , c ) ; CKEDITOR . env . webkit && g . attachListener ( e , "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 : g . hasFocus &&
y ( g ) } } , null , null , - 1 ) ; g . attachListener ( g , "keydown" , D ( 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 = C [ a . data . keyCode ] ; if ( d ) return d ( { editor : c , selected : b . getSelectedElement ( ) , selection : b , keyEvent : a } ) } } } ) } ) ; if ( CKEDITOR . env . webkit ) CKEDITOR . on ( "instanceReady" , function ( a ) { var b = a . editor ; b . on ( "selectionChange" , function ( ) { var a = b . editable ( ) , c = a . getCustomData ( "cke-fillingChar" ) ;
c && ( c . getCustomData ( "ready" ) ? ( y ( a ) , a . editor . fire ( "selectionCheck" ) ) : c . setCustomData ( "ready" , 1 ) ) } , null , null , - 1 ) ; b . on ( "beforeSetMode" , function ( ) { y ( b . editable ( ) ) } , null , null , - 1 ) ; b . on ( "getSnapshot" , function ( a ) { a . data && ( a . data = v ( a . data ) ) } , b , null , 20 ) ; b . on ( "toDataFormat" , function ( a ) { a . data . dataValue = v ( 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 . 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 } ;
c . getSelection ( ) ; a && a . removeAllRanges ( ) } var c = a . editor ; c . on ( "contentDom" , function ( ) { function a ( ) { r = new CKEDITOR . dom . selection ( c . getSelection ( ) ) ; r . lock ( ) } function b ( ) { f . removeListener ( "mouseup" , b ) ; q . removeListener ( "mouseup" , b ) ; var a = CKEDITOR . document . $ . selection , c = a . createRange ( ) ; "None" != a . type && c . parentElement ( ) && c . parentElement ( ) . ownerDocument == e . $ && c . select ( ) } function d ( 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 e = c . document , f = CKEDITOR . document , g = c . editable ( ) , l = e . getBody ( ) , q = e . getDocumentElement ( ) , E = g . isInline ( ) , n , r ; CKEDITOR . env . gecko && g . attachListener ( g , "focus" , function ( a ) { a . removeListener ( ) ; 0 !== n && ( a = c . getSelection ( ) . getNative ( ) ) && a . isCollapsed && a . anchorNode == g . $ && ( a = c . createRange ( ) , a . moveToElementEditStart ( g ) , a . select ( ) ) } , null , null , - 2 ) ; g . attachListener ( g , CKEDITOR . env . webkit ? "DOMFocusIn" : "focus" , function ( ) { n && CKEDITOR . env . webkit && ( n = c . _ . previousActive &&
c . _ . previousActive . equals ( e . getActive ( ) ) ) && null != c . _ . previousScrollTop && c . _ . previousScrollTop != g . $ . scrollTop && ( g . $ . scrollTop = c . _ . previousScrollTop ) ; c . unlockSelection ( n ) ; n = 0 } , null , null , - 1 ) ; g . attachListener ( g , "mousedown" , function ( ) { n = 0 } ) ; if ( CKEDITOR . env . ie || E ) m ? g . attachListener ( g , "beforedeactivate" , a , null , null , - 1 ) : g . attachListener ( c , "selectionCheck" , a , null , null , - 1 ) , g . attachListener ( g , CKEDITOR . env . webkit ? "DOMFocusOut" : "blur" , function ( ) { c . lockSelection ( r ) ; n = 1 } , null , null , - 1 ) , g . attachListener ( g , "mousedown" ,
function ( ) { n = 0 } ) ; if ( CKEDITOR . env . ie && ! E ) { var v ; g . attachListener ( g , "mousedown" , function ( a ) { 2 == a . data . $ . button && ( ( a = c . document . getSelection ( ) ) && a . getType ( ) != CKEDITOR . SELECTION _NONE || ( v = c . window . getScrollPosition ( ) ) ) } ) ; g . attachListener ( g , "mouseup" , function ( a ) { 2 == a . data . $ . button && v && ( c . document . $ . documentElement . scrollLeft = v . x , c . document . $ . documentElement . scrollTop = v . y ) ; v = null } ) ; if ( "BackCompat" != e . $ . compatMode ) { if ( CKEDITOR . env . ie7Compat || CKEDITOR . env . ie6Compat ) { var t , u ; q . 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 > u . compareEndPoints ( "StartToStart" , c ) ? "EndToEnd" : "StartToStart" , c ) ; t . select ( ) } } function c ( ) { q . removeListener ( "mousemove" , b ) ; f . removeListener ( "mouseup" , c ) ; q . removeListener ( "mouseup" , c ) ; t . select ( ) } a = a . data ; if ( a . getTarget ( ) . is ( "html" ) && a . $ . y < q . $ . clientHeight && a . $ . x < q . $ . clientWidth ) { t = l . $ . createTextRange ( ) ; try { t . moveToPoint ( a . $ . clientX , a . $ . clientY ) } catch ( d ) { } u = t . duplicate ( ) ; q . on ( "mousemove" , b ) ; f . on ( "mouseup" ,
c ) ; q . on ( "mouseup" , c ) } } ) } if ( 7 < CKEDITOR . env . version && 11 > CKEDITOR . env . version ) q . on ( "mousedown" , function ( a ) { a . data . getTarget ( ) . is ( "html" ) && ( f . on ( "mouseup" , b ) , q . on ( "mouseup" , b ) ) } ) } } g . attachListener ( g , "selectionchange" , h , c ) ; g . attachListener ( g , "keyup" , k , c ) ; CKEDITOR . env . ie && g . attachListener ( g , "keydown" , function ( a ) { var b = this . getSelection ( 1 ) , c = d ( b ) ; c && ! c . equals ( g ) && ( b . selectElement ( c ) , a . data . preventDefault ( ) ) } , c ) ; g . attachListener ( g , CKEDITOR . env . webkit ? "DOMFocusIn" : "focus" , function ( ) { c . forceNextSelectionCheck ( ) ;
c . selectionChange ( 1 ) } ) ; if ( E && ( CKEDITOR . env . webkit || CKEDITOR . env . gecko ) ) { var x ; g . attachListener ( g , "mousedown" , function ( ) { x = 1 } ) ; g . attachListener ( e . getDocumentElement ( ) , "mouseup" , function ( ) { x && k . call ( c ) ; x = 0 } ) } else g . attachListener ( CKEDITOR . env . ie ? g : e . getDocumentElement ( ) , "mouseup" , k , c ) ; CKEDITOR . env . webkit && g . attachListener ( e , "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 : g . hasFocus && y ( g ) } } , null , null , - 1 ) ; g . attachListener ( g ,
"keydown" , D ( 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 = C [ a . data . keyCode ] ; if ( d ) return d ( { editor : c , selected : b . getSelectedElement ( ) , selection : b , keyEvent : a } ) } } } ) } ) ; if ( CKEDITOR . env . webkit ) CKEDITOR . on ( "instanceReady" , function ( a ) { var b = a . editor ; b . on ( "selectionChange" , function ( ) { var a = b . editable ( ) , c = a . getCustomData ( "cke-fillingChar" ) ; c && ( c . getCustomData ( "ready" ) ?
( y ( a ) , a . editor . fire ( "selectionCheck" ) ) : c . setCustomData ( "ready" , 1 ) ) } , null , null , - 1 ) ; b . on ( "beforeSetMode" , function ( ) { y ( b . editable ( ) ) } , null , null , - 1 ) ; b . on ( "getSnapshot" , function ( a ) { a . data && ( a . data = v ( a . data ) ) } , b , null , 20 ) ; b . on ( "toDataFormat" , function ( a ) { a . data . dataValue = v ( 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 . 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 : J ++ ; 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 : v ,
@@ -468,35 +468,35 @@ this._.cache;if(void 0!==a.selectedText)return a.selectedText;var b=this.getNati
1 ) && ( d ( c ) ? f . call ( this , c ) : e ? this . fake ( b ) : b ? this . selectElement ( b ) : this . selectRanges ( c ) ) } } , reset : function ( ) { this . _ . cache = { } ; this . isFake = 0 ; var a = this . root . editor ; if ( a && a . _ . fakeSelection ) 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 = J ++ } , 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 n , w ; if ( 1 == a . length &&
! ( w = a [ 0 ] ) . collapsed && ( p = w . getEnclosedNode ( ) ) && p . type == CKEDITOR . NODE _ELEMENT && ( w = w . clone ( ) , w . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 ) , ( n = w . getEnclosedNode ( ) ) && n . type == CKEDITOR . NODE _ELEMENT && ( p = n ) , "false" == p . getAttribute ( "contenteditable" ) ) ) break a ; p = void 0 } if ( p ) this . fake ( p ) ; else if ( b && b . plugins . tableselection && CKEDITOR . plugins . tableselection . isSupportedEnvironment && d ( a ) && ! l ) f . call ( this , a ) ; else { if ( m ) { n = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ; p = /\ufeff|\u00a0/ ; w = { 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 B , G , I ; if ( ( c = b . getEnclosedNode ( ) ) && c . type == CKEDITOR . NODE _ELEMENT && c . getName ( ) in M && ( ! c . is ( "a" ) || ! c . getText ( ) ) ) try { I = c . $ . createControlRange ( ) ; I . addElement ( c . $ ) ; I . select ( ) ; return } catch ( v ) { } if ( b . startContainer . type == CKEDITOR . NODE _ELEMENT && b . startContainer . getName ( ) in w || b . endContainer . type == CKEDITOR . NODE _ELEMENT && b . endContainer . getName ( ) in w ) b . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) , a = b . collapsed ; I = b . createBookmark ( ) ; w = I . startNode ; a || ( k = I . endNode ) ;
I = b . document . $ . body . createTextRange ( ) ; I . moveToElementText ( w . $ ) ; I . moveStart ( "character" , 1 ) ; k ? ( p = b . document . $ . body . createTextRange ( ) , p . moveToElementText ( k . $ ) , I . setEndPoint ( "EndToEnd" , p ) , I . moveEnd ( "character" , - 1 ) ) : ( B = w . getNext ( n ) , G = w . hasAscendant ( "pre" ) , B = ! ( B && B . getText && B . getText ( ) . match ( p ) ) && ( G || ! w . hasPrevious ( ) || w . getPrevious ( ) . is && w . getPrevious ( ) . is ( "br" ) ) , G = b . document . createElement ( "span" ) , G . setHtml ( "\x26#65279;" ) , G . insertBefore ( w ) , B && b . document . createText ( " " ) . insertBefore ( w ) ) ; b . setStartBefore ( w ) ;
w . remove ( ) ; a ? ( B ? ( I . moveStart ( "character" , - 1 ) , I . select ( ) , b . document . $ . selection . clear ( ) ) : I . select ( ) , b . moveToPosition ( G , CKEDITOR . POSITION _BEFORE _START ) , G . remove ( ) ) : ( b . setEndBefore ( k ) , k . remove ( ) , I . select ( ) ) } else { k = this . getNative ( ) ; if ( ! k ) return ; this . removeAllRanges ( ) ; for ( I = 0 ; I < a . length ; I ++ ) { if ( I < a . length - 1 && ( B = a [ I ] , G = a [ I + 1 ] , p = B . clone ( ) , p . setStart ( B . endContainer , B . endOffset ) , p . setEnd ( G . startContainer , G . startOffset ) , ! p . collapsed && ( p . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) , b = p . getCommonAncestor ( ) , p = p . getEnclosedNode ( ) ,
b . isReadOnly ( ) || p && p . isReadOnly ( ) ) ) ) { G . setStart ( B . startContainer , B . startOffset ) ; a . splice ( I -- , 1 ) ; continue } b = a [ I ] ; G = this . document . $ . createRange ( ) ; b . collapsed && CKEDITOR . env . webkit && r ( b ) && ( p = e ( this . root ) , b . insertNode ( p ) , ( B = p . getNext ( ) ) && ! p . getPrevious ( ) && B . type == CKEDITOR . NODE _ELEMENT && "br" == B . getName ( ) ? ( y ( this . root ) , b . moveToPosition ( B , CKEDITOR . POSITION _BEFORE _START ) ) : b . moveToPosition ( p , CKEDITOR . POSITION _AFTER _END ) ) ; G . setStart ( b . startContainer . $ , b . startOffset ) ; try { G . setEnd ( b . endContainer . $ , b . endOffset ) } catch ( t ) { if ( 0 <=
t . toString ( ) . indexOf ( "NS_ERROR_ILLEGAL_VALUE" ) ) b . collapse ( 1 ) , G . setEnd ( b . endContainer . $ , b . endOffset ) ; else throw t ; } k . addRange ( G ) } } this . reset ( ) ; this . root . fire ( "selectionchange" ) } } } , fake : function ( a , b ) { var c = this . root . editor ; void 0 === b && a . hasAttribute ( "aria-label" ) && ( b = a . getAttribute ( "aria-label" ) ) ; this . reset ( ) ; A ( c , b ) ; var d = this . _ . cache , e = new CKEDITOR . dom . range ( this . root ) ; e . setStartBefore ( a ) ; e . setEndAfter ( a ) ; d . ranges = new CKEDITOR . dom . rangeList ( e ) ; d . selectedElement = d . startElement = a ; d . type = CKEDITOR . SELECTION _ELEMENT ;
1 ] , a [ 0 ] . setEnd ( b . endContainer , b . endOffset ) ) ; b = a [ 0 ] ; a = b . collapsed ; var A , G , I ; if ( ( c = b . getEnclosedNode ( ) ) && c . type == CKEDITOR . NODE _ELEMENT && c . getName ( ) in M && ( ! c . is ( "a" ) || ! c . getText ( ) ) ) try { I = c . $ . createControlRange ( ) ; I . addElement ( c . $ ) ; I . select ( ) ; return } catch ( v ) { } if ( b . startContainer . type == CKEDITOR . NODE _ELEMENT && b . startContainer . getName ( ) in w || b . endContainer . type == CKEDITOR . NODE _ELEMENT && b . endContainer . getName ( ) in w ) b . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) , a = b . collapsed ; I = b . createBookmark ( ) ; w = I . startNode ; a || ( k = I . endNode ) ;
I = b . document . $ . body . createTextRange ( ) ; I . moveToElementText ( w . $ ) ; I . moveStart ( "character" , 1 ) ; k ? ( p = b . document . $ . body . createTextRange ( ) , p . moveToElementText ( k . $ ) , I . setEndPoint ( "EndToEnd" , p ) , I . moveEnd ( "character" , - 1 ) ) : ( A = w . getNext ( n ) , G = w . hasAscendant ( "pre" ) , A = ! ( A && A . getText && A . getText ( ) . match ( p ) ) && ( G || ! w . hasPrevious ( ) || w . getPrevious ( ) . is && w . getPrevious ( ) . is ( "br" ) ) , G = b . document . createElement ( "span" ) , G . setHtml ( "\x26#65279;" ) , G . insertBefore ( w ) , A && b . document . createText ( " " ) . insertBefore ( w ) ) ; b . setStartBefore ( w ) ;
w . remove ( ) ; a ? ( A ? ( I . moveStart ( "character" , - 1 ) , I . select ( ) , b . document . $ . selection . clear ( ) ) : I . select ( ) , b . moveToPosition ( G , CKEDITOR . POSITION _BEFORE _START ) , G . remove ( ) ) : ( b . setEndBefore ( k ) , k . remove ( ) , I . select ( ) ) } else { k = this . getNative ( ) ; if ( ! k ) return ; this . removeAllRanges ( ) ; for ( I = 0 ; I < a . length ; I ++ ) { if ( I < a . length - 1 && ( A = a [ I ] , G = a [ I + 1 ] , p = A . clone ( ) , p . setStart ( A . endContainer , A . endOffset ) , p . setEnd ( G . startContainer , G . startOffset ) , ! p . collapsed && ( p . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) , b = p . getCommonAncestor ( ) , p = p . getEnclosedNode ( ) ,
b . isReadOnly ( ) || p && p . isReadOnly ( ) ) ) ) { G . setStart ( A . startContainer , A . startOffset ) ; a . splice ( I -- , 1 ) ; continue } b = a [ I ] ; G = this . document . $ . createRange ( ) ; b . collapsed && CKEDITOR . env . webkit && r ( b ) && ( p = e ( this . root ) , b . insertNode ( p ) , ( A = p . getNext ( ) ) && ! p . getPrevious ( ) && A . type == CKEDITOR . NODE _ELEMENT && "br" == A . getName ( ) ? ( y ( this . root ) , b . moveToPosition ( A , CKEDITOR . POSITION _BEFORE _START ) ) : b . moveToPosition ( p , CKEDITOR . POSITION _AFTER _END ) ) ; G . setStart ( b . startContainer . $ , b . startOffset ) ; try { G . setEnd ( b . endContainer . $ , b . endOffset ) } catch ( t ) { if ( 0 <=
t . toString ( ) . indexOf ( "NS_ERROR_ILLEGAL_VALUE" ) ) b . collapse ( 1 ) , G . setEnd ( b . endContainer . $ , b . endOffset ) ; else throw t ; } k . addRange ( G ) } } this . reset ( ) ; this . root . fire ( "selectionchange" ) } } } , fake : function ( a , b ) { var c = this . root . editor ; void 0 === b && a . hasAttribute ( "aria-label" ) && ( b = a . getAttribute ( "aria-label" ) ) ; this . reset ( ) ; B ( 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 = J ++ ; 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 [ m ? "empty" : "removeAllRanges" ] ( ) } catch ( b ) { } this . reset ( ) } } } } ) ( ) ; "use strict" ; CKEDITOR . STYLE _BLOCK = 1 ; CKEDITOR . STYLE _INLINE = 2 ; CKEDITOR . STYLE _OBJECT = 3 ;
( function ( ) { function a ( a , b ) { for ( var c , d ; ( a = a . getParent ( ) ) && ! a . equals ( b ) ; ) if ( a . getAttribute ( "data-nostyle" ) ) c = a ; else if ( ! d ) { var e = a . getAttribute ( "contentEditable" ) ; "false" == e ? c = a : "true" == e && ( d = 1 ) } return c } function d ( a , b , c , d ) { return ( a . getPosition ( b ) | d ) == d && ( ! c . childRule || c . childRule ( a ) ) } function b ( c ) { var e = c . document ; if ( c . collapsed ) e = J ( 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 r = c . createBookmark ( ) , v = r . startNode , t = r . endNode , q = v , u ; if ( ! l ) { var x = c . getCommonAncestor ( ) , l = a ( v , x ) , x = a ( t , x ) ; l && ( q = l . getNextSourceNode ( ! 0 ) ) ; x && ( t = x ) } for ( q . getPosition ( t ) == CKEDITOR . POSITION _FOLLOWING && ( q = 0 ) ; q ; ) { l = ! 1 ; if ( q . equals ( t ) ) q = null , l = ! 0 ; else { var y = q . type == CKEDITOR . NODE _ELEMENT ? q . getName ( ) : null , x = y && "false" == q . getAttribute ( "contentEditable" ) , A = y &&
q . getAttribute ( "data-nostyle" ) ; if ( y && q . data ( "cke-bookmark" ) ) { q = q . getNextSourceNode ( ! 0 ) ; continue } if ( x && m && CKEDITOR . dtd . $block [ y ] ) for ( var C = q , E = f ( C ) , F = void 0 , H = E . length , K = 0 , C = H && new CKEDITOR . dom . range ( C . getDocument ( ) ) ; K < H ; ++ K ) { var F = E [ K ] , L = CKEDITOR . filter . instances [ F . data ( "cke-filter" ) ] ; if ( L ? L . check ( this ) : 1 ) C . selectNodeContents ( F ) , b . call ( this , C ) } E = y ? ! n [ y ] || A ? 0 : x && ! m ? 0 : d ( q , t , h , P ) : 1 ; if ( E ) if ( F = q . getParent ( ) , E = h , H = g , K = k , ! F || ! ( F . getDtd ( ) || CKEDITOR . dtd . span ) [ H ] && ! K || E . parentRule && ! E . parentRule ( F ) ) l = ! 0 ; else { if ( u ||
y && CKEDITOR . dtd . $removeEmpty [ y ] && ( q . getPosition ( t ) | P ) != P || ( u = c . clone ( ) , u . setStartBefore ( q ) ) , y = q . type , y == CKEDITOR . NODE _TEXT || x || y == CKEDITOR . NODE _ELEMENT && ! q . getChildCount ( ) ) { for ( var y = q , M ; ( l = ! y . getNext ( z ) ) && ( M = y . getParent ( ) , n [ M . getName ( ) ] ) && d ( M , v , h , O ) ; ) y = M ; u . setEndAfter ( y ) } } else l = ! 0 ; q = q . getNextSourceNode ( A || x ) } if ( l && u && ! u . collapsed ) { for ( var l = J ( this , e ) , x = l . hasAttributes ( ) , A = u . getCommonAncestor ( ) , y = { } , E = { } , F = { } , H = { } , U , R , aa ; l && A ; ) { if ( A . getName ( ) == g ) { for ( U in h . attributes ) ! H [ U ] && ( aa = A . getAttribute ( R ) ) &&
( l . getAttribute ( U ) == aa ? E [ U ] = 1 : H [ U ] = 1 ) ; for ( R in h . styles ) ! F [ R ] && ( aa = A . getStyle ( R ) ) && ( l . getStyle ( R ) == aa ? y [ R ] = 1 : F [ R ] = 1 ) } A = A . getParent ( ) } for ( U in E ) l . removeAttribute ( U ) ; for ( R in y ) l . removeStyle ( R ) ; x && ! l . hasAttributes ( ) && ( l = null ) ; l ? ( u . extractContents ( ) . appendTo ( l ) , u . insertNode ( l ) , D . call ( this , l ) , l . mergeSiblings ( ) , CKEDITOR . env . ie || l . $ . normalize ( ) ) : ( l = new CKEDITOR . dom . element ( "span" ) , u . extractContents ( ) . appendTo ( l ) , u . insertNode ( l ) , D . call ( this , l ) , l . remove ( ! 0 ) ) ; u = null } } c . moveToBookmark ( r ) ; c . shrink ( CKEDITOR . SHRINK _TEXT ) ;
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 r = c . createBookmark ( ) , v = r . startNode , t = r . endNode , q = v , u ; if ( ! l ) { var x = c . getCommonAncestor ( ) , l = a ( v , x ) , x = a ( t , x ) ; l && ( q = l . getNextSourceNode ( ! 0 ) ) ; x && ( t = x ) } for ( q . getPosition ( t ) == CKEDITOR . POSITION _FOLLOWING && ( q = 0 ) ; q ; ) { l = ! 1 ; if ( q . equals ( t ) ) q = null , l = ! 0 ; else { var y = q . type == CKEDITOR . NODE _ELEMENT ? q . getName ( ) : null , x = y && "false" == q . getAttribute ( "contentEditable" ) , B = y &&
q . getAttribute ( "data-nostyle" ) ; if ( y && q . data ( "cke-bookmark" ) ) { q = q . getNextSourceNode ( ! 0 ) ; continue } if ( x && m && CKEDITOR . dtd . $block [ y ] ) for ( var C = q , E = f ( C ) , F = void 0 , H = E . length , K = 0 , C = H && new CKEDITOR . dom . range ( C . getDocument ( ) ) ; K < H ; ++ K ) { var F = E [ K ] , L = CKEDITOR . filter . instances [ F . data ( "cke-filter" ) ] ; if ( L ? L . check ( this ) : 1 ) C . selectNodeContents ( F ) , b . call ( this , C ) } E = y ? ! n [ y ] || B ? 0 : x && ! m ? 0 : d ( q , t , h , P ) : 1 ; if ( E ) if ( F = q . getParent ( ) , E = h , H = g , K = k , ! F || ! ( F . getDtd ( ) || CKEDITOR . dtd . span ) [ H ] && ! K || E . parentRule && ! E . parentRule ( F ) ) l = ! 0 ; else { if ( u ||
y && CKEDITOR . dtd . $removeEmpty [ y ] && ( q . getPosition ( t ) | P ) != P || ( u = c . clone ( ) , u . setStartBefore ( q ) ) , y = q . type , y == CKEDITOR . NODE _TEXT || x || y == CKEDITOR . NODE _ELEMENT && ! q . getChildCount ( ) ) { for ( var y = q , M ; ( l = ! y . getNext ( z ) ) && ( M = y . getParent ( ) , n [ M . getName ( ) ] ) && d ( M , v , h , O ) ; ) y = M ; u . setEndAfter ( y ) } } else l = ! 0 ; q = q . getNextSourceNode ( B || x ) } if ( l && u && ! u . collapsed ) { for ( var l = J ( this , e ) , x = l . hasAttributes ( ) , B = u . getCommonAncestor ( ) , y = { } , E = { } , F = { } , H = { } , U , R , aa ; l && B ; ) { if ( B . getName ( ) == g ) { for ( U in h . attributes ) ! H [ U ] && ( aa = B . getAttribute ( R ) ) &&
( l . getAttribute ( U ) == aa ? E [ U ] = 1 : H [ U ] = 1 ) ; for ( R in h . styles ) ! F [ R ] && ( aa = B . getStyle ( R ) ) && ( l . getStyle ( R ) == aa ? y [ R ] = 1 : F [ R ] = 1 ) } B = B . getParent ( ) } for ( U in E ) l . removeAttribute ( U ) ; for ( R in y ) l . removeStyle ( R ) ; x && ! l . hasAttributes ( ) && ( l = null ) ; l ? ( u . extractContents ( ) . appendTo ( l ) , u . insertNode ( l ) , D . call ( this , l ) , l . mergeSiblings ( ) , CKEDITOR . env . ie || l . $ . normalize ( ) ) : ( l = new CKEDITOR . dom . element ( "span" ) , u . extractContents ( ) . appendTo ( l ) , u . insertNode ( l ) , D . call ( this , l ) , l . remove ( ! 0 ) ) ; u = null } } c . moveToBookmark ( r ) ; c . shrink ( CKEDITOR . SHRINK _TEXT ) ;
c . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) } } function c ( a ) { function b ( ) { for ( var a = new CKEDITOR . dom . elementPath ( d . getParent ( ) ) , c = new CKEDITOR . dom . elementPath ( n . 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 ; r . 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 ; r . checkElementRemovable ( h , ! 0 ) && ( f = h ) } f && n . 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 m ; ! e && a . collapsed && ( a . checkBoundaryOfElement ( k , CKEDITOR . END ) || ( m = a . checkBoundaryOfElement ( k , CKEDITOR . START ) ) ) ? ( g = k , g . match = m ? "start" : "end" ) : ( k . mergeSiblings ( ) , k . is ( this . element ) ? A . call ( this , k ) : x ( k , l ( 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 n = c . endNode , r = this ; b ( ) ; for ( f = d ; ! f . equals ( n ) ; ) g = f . getNextSourceNode ( ) , f . type == CKEDITOR . NODE _ELEMENT && this . checkElementRemovable ( f ) && ( f . getName ( ) == this . element ? A . call ( this , f ) : x ( f , l ( 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 . 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 m ; ! e && a . collapsed && ( a . checkBoundaryOfElement ( k , CKEDITOR . END ) || ( m = a . checkBoundaryOfElement ( k , CKEDITOR . START ) ) ) ? ( g = k , g . match = m ? "start" : "end" ) : ( k . mergeSiblings ( ) , k . is ( this . element ) ? B . call ( this , k ) : x ( k , l ( 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 n = c . endNode , r = this ; b ( ) ; for ( f = d ; ! f . equals ( n ) ; ) g = f . getNextSourceNode ( ) , f . type == CKEDITOR . NODE _ELEMENT && this . checkElementRemovable ( f ) && ( f . getName ( ) == this . element ? B . call ( this , f ) : x ( f , l ( 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 ( ) && u ( a , this ) } function k ( a ) { var b = a . getCommonAncestor ( ! 0 , ! 0 ) ; if ( a = ( new CKEDITOR . dom . elementPath ( b , a . root ) ) . contains ( this . element , 1 ) ) { var b = this . _ . definition , c = b . attributes ; if ( c ) for ( var d in c ) a . removeAttribute ( d , c [ d ] ) ; if ( b . styles ) for ( var e in b . styles ) b . styles . hasOwnProperty ( e ) &&
a . removeStyle ( e ) } } function 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 = J ( this , e , d ) , r ( d , f ) ) ; a . moveToBookmark ( b ) } function n ( 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 ) , r ( d , e ) ) : A . call ( this , d ) ) ; a . moveToBookmark ( b ) } function r ( 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 = y ( g , /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g , "" ) ; g = g . replace ( /[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi , "$1" ) ; g = g . replace ( /([ \t\n\r]+| )/g ,
( d . is ( "pre" ) ? ( ( e = this . _ . enterMode == CKEDITOR . ENTER _BR ? null : a . document . createElement ( this . _ . enterMode == CKEDITOR . ENTER _P ? "p" : "div" ) ) && d . copyAttributes ( e ) , r ( d , e ) ) : B . call ( this , d ) ) ; a . moveToBookmark ( b ) } function r ( 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 = y ( g , /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g , "" ) ; g = g . replace ( /[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi , "$1" ) ; g = g . replace ( /([ \t\n\r]+| )/g ,
" " ) ; g = g . replace ( /<br\b[^>]*>/gi , "\n" ) ; if ( CKEDITOR . env . ie ) { var h = a . getDocument ( ) . createElement ( "div" ) ; h . append ( 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 = v ( c ? [ a . getHtml ( ) ] : e ( a ) , b ) : a . moveChildren ( b ) ; b . replace ( a ) ; if ( d ) { var c = b , k ; ( k = c . getPrevious ( H ) ) && k . type == CKEDITOR . NODE _ELEMENT && k . is ( "pre" ) && ( d = y ( k . getHtml ( ) , /\n$/ , "" ) + "\n\n" + y ( c . getHtml ( ) , /^\n/ , "" ) , CKEDITOR . env . ie ? c . $ . outerHTML = "\x3cpre\x3e" + d + "\x3c/pre\x3e" :
c . setHtml ( d ) , k . remove ( ) ) } else c && m ( b ) } function e ( a ) { var b = [ ] ; y ( a . getOuterHtml ( ) , /(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi , function ( a , b , c ) { return b + "\x3c/pre\x3e" + c + "\x3cpre\x3e" } ) . replace ( /<pre\b.*?>([\s\S]*?)<\/pre>/gi , function ( a , c ) { b . push ( c ) } ) ; return b } function y ( a , b , c ) { var d = "" , e = "" ; a = a . replace ( /(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi , function ( a , b , c ) { b && ( d = b ) ; c && ( e = c ) ; return "" } ) ; return d + a . replace ( b , c ) + e } function v ( a , b ) { var c ;
1 < a . length && ( c = new CKEDITOR . dom . documentFragment ( b . getDocument ( ) ) ) ; for ( var d = 0 ; d < a . length ; d ++ ) { var e = a [ d ] , e = e . replace ( /(\r\n|\r)/g , "\n" ) , e = y ( e , /^[ \t]*\n/ , "" ) , e = y ( e , /\n$/ , "" ) , e = y ( e , /^[ \t]+|[ \t]+$/g , function ( a , b ) { return 1 == a . length ? "\x26nbsp;" : b ? " " + CKEDITOR . tools . repeat ( "\x26nbsp;" , a . length - 1 ) : CKEDITOR . tools . repeat ( "\x26nbsp;" , a . length - 1 ) + " " } ) , e = e . replace ( /\n/g , "\x3cbr\x3e" ) , e = e . replace ( /[ \t]{2,}/g , function ( a ) { return CKEDITOR . tools . repeat ( "\x26nbsp;" , a . length - 1 ) + " " } ) ; if ( c ) { var f = b . clone ( ) ; f . setHtml ( e ) ;
c . append ( f ) } else b . setHtml ( e ) } return c || b } function A ( a , b ) { var c = this . _ . definition , d = c . attributes , c = c . styles , e = l ( 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 ) == t ( 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 ) != t ( h , c [ h ] , ! 0 ) || ( f = f || ! ! a . getStyle ( h ) , a . removeStyle ( h ) ) ; x ( a , e , C [ a . getName ( ) ] ) ; f && ( this . _ . definition . alwaysRemoveElement ?
m ( a , 1 ) : ! CKEDITOR . dtd . $block [ a . getName ( ) ] || this . _ . enterMode == CKEDITOR . ENTER _BR && ! a . hasAttributes ( ) ? m ( a ) : a . renameNode ( this . _ . enterMode == CKEDITOR . ENTER _P ? "p" : "div" ) ) } function D ( a ) { for ( var b = l ( this ) , c = a . getElementsByTag ( this . element ) , d , e = c . count ( ) ; 0 <= -- e ; ) d = c . getItem ( e ) , d . isReadOnly ( ) || A . call ( this , d , ! 0 ) ; for ( var 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 ( ) || x ( d , b [ f ] ) } function x ( a , b , c ) { if ( b = b && b . attributes ) for ( var d = 0 ; d < b . length ; d ++ ) { var e = b [ d ] [ 0 ] ,
c . append ( f ) } else b . setHtml ( e ) } return c || b } function B ( a , b ) { var c = this . _ . definition , d = c . attributes , c = c . styles , e = l ( 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 ) == t ( 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 ) != t ( h , c [ h ] , ! 0 ) || ( f = f || ! ! a . getStyle ( h ) , a . removeStyle ( h ) ) ; x ( a , e , C [ a . getName ( ) ] ) ; f && ( this . _ . definition . alwaysRemoveElement ?
m ( a , 1 ) : ! CKEDITOR . dtd . $block [ a . getName ( ) ] || this . _ . enterMode == CKEDITOR . ENTER _BR && ! a . hasAttributes ( ) ? m ( a ) : a . renameNode ( this . _ . enterMode == CKEDITOR . ENTER _P ? "p" : "div" ) ) } function D ( a ) { for ( var b = l ( this ) , c = a . getElementsByTag ( this . element ) , d , e = c . count ( ) ; 0 <= -- e ; ) d = c . getItem ( e ) , d . isReadOnly ( ) || B . 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 ( ) || x ( d , b [ f ] ) } function x ( 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 || m ( a ) } function m ( a , b ) { if ( ! a . hasAttributes ( ) || b ) if ( CKEDITOR . dtd . $block [ a . getName ( ) ] ) { var c = a . getPrevious ( H ) , d = a . getNext ( H ) ; ! c || c . type != CKEDITOR . NODE _TEXT && c . isBlockBoundary ( { br : 1 } ) || a . append ( "br" , 1 ) ; ! d || d . type != CKEDITOR . NODE _TEXT && d . isBlockBoundary ( { br : 1 } ) || a . append ( "br" ) ; a . remove ( ! 0 ) } else c = a . getFirst ( ) , d = a . getLast ( ) , a . remove ( ! 0 ) , c && ( c . type == CKEDITOR . NODE _ELEMENT && c . mergeSiblings ( ) ,
d && ! c . equals ( d ) && d . type == CKEDITOR . NODE _ELEMENT && d . mergeSiblings ( ) ) } function J ( a , b , c ) { var d ; d = a . element ; "*" == d && ( d = "span" ) ; d = new CKEDITOR . dom . element ( d , b ) ; c && c . copyAttributes ( d ) ; d = u ( d , a ) ; b . getCustomData ( "doc_processing_style" ) && d . hasAttribute ( "id" ) ? d . removeAttribute ( "id" ) : b . setCustomData ( "doc_processing_style" , 1 ) ; return d } function u ( a , b ) { var c = b . _ . definition , d = c . attributes , c = CKEDITOR . style . getStyleText ( c ) ; if ( d ) for ( var e in d ) a . setAttribute ( e , d [ e ] ) ; c && a . setAttribute ( "style" , c ) ; return a } function K ( a ,
b ) { for ( var c in a ) a [ c ] = a [ c ] . replace ( E , function ( a , c ) { return b [ c ] } ) } function l ( 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 t ( a , b , c ) { var d = new CKEDITOR . dom . element ( "span" ) ;
d [ c ? "setStyle" : "setAttribute" ] ( a , b ) ; return d [ c ? "getStyle" : "getAttribute" ] ( a ) } function F ( a , b ) { function c ( a , b ) { return "font-family" == b . toLowerCase ( ) ? a . replace ( /["']/g , "" ) : a } "string" == typeof a && ( a = CKEDITOR . tools . parseCssText ( a ) ) ; "string" == typeof b && ( b = CKEDITOR . tools . parseCssText ( b , ! 0 ) ) ; for ( var d in a ) if ( ! ( d in b ) || c ( b [ d ] , d ) != c ( a [ d ] , d ) && "inherit" != a [ d ] && "inherit" != b [ d ] ) return ! 1 ; return ! 0 } function L ( a , b , c ) { var d = a . document , e = a . getRanges ( ) ; b = b ? this . removeFromRange : this . applyToRange ; var f , g ; if ( a . isFake && a . isInTable ( ) ) for ( f =
[ ] , g = 0 ; g < e . length ; g ++ ) f . push ( e [ g ] . clone ( ) ) ; for ( var h = e . createIterator ( ) ; g = h . getNextRange ( ) ; ) b . call ( this , g , c ) ; a . selectRanges ( f || e ) ; d . removeCustomData ( "doc_processing_style" ) } var C = { 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 ,
d && ! c . equals ( d ) && d . type == CKEDITOR . NODE _ELEMENT && d . mergeSiblings ( ) ) } function J ( a , b , c ) { var d ; d = a . element ; "*" == d && ( d = "span" ) ; d = new CKEDITOR . dom . element ( d , b ) ; c && c . copyAttributes ( d ) ; d = u ( d , a ) ; b . getCustomData ( "doc_processing_style" ) && d . hasAttribute ( "id" ) ? d . removeAttribute ( "id" ) : b . setCustomData ( "doc_processing_style" , 1 ) ; return d } function u ( a , b ) { var c = b . _ . definition , d = c . attributes , c = CKEDITOR . style . getStyleText ( c ) ; if ( d ) for ( var e in d ) a . setAttribute ( e , d [ e ] ) ; c && a . setAttribute ( "style" , c ) ; a . getDocument ( ) . removeCustomData ( "doc_processing_style" ) ;
return a } function K ( a , b ) { for ( var c in a ) a [ c ] = a [ c ] . replace ( E , function ( a , c ) { return b [ c ] } ) } function l ( 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 t ( a ,
b , c ) { var d = new CKEDITOR . dom . element ( "span" ) ; d [ c ? "setStyle" : "setAttribute" ] ( a , b ) ; return d [ c ? "getStyle" : "getAttribute" ] ( a ) } function F ( a , b ) { function c ( a , b ) { return "font-family" == b . toLowerCase ( ) ? a . replace ( /["']/g , "" ) : a } "string" == typeof a && ( a = CKEDITOR . tools . parseCssText ( a ) ) ; "string" == typeof b && ( b = CKEDITOR . tools . parseCssText ( b , ! 0 ) ) ; for ( var d in a ) if ( ! ( d in b ) || c ( b [ d ] , d ) != c ( a [ d ] , d ) && "inherit" != a [ d ] && "inherit" != b [ d ] ) return ! 1 ; return ! 0 } function L ( a , b , c ) { var d = a . getRanges ( ) ; b = b ? this . removeFromRange : this . applyToRange ;
var e , f ; if ( a . isFake && a . isInTable ( ) ) for ( e = [ ] , f = 0 ; f < d . length ; f ++ ) e . push ( d [ f ] . clone ( ) ) ; for ( var g = d . createIterator ( ) ; f = g . getNextRange ( ) ; ) b . call ( this , f , c ) ; a . selectRanges ( e || d ) } var C = { 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 } , q = /\s*(?:;\s*|$)/ , E = /#\((.+?)\)/g , z = CKEDITOR . dom . walker . bookmark ( 0 , 1 ) , H = CKEDITOR . dom . walker . whitespaces ( 1 ) ; CKEDITOR . style = function ( a , b ) { if ( "string" == typeof a . type ) return new CKEDITOR . style . customHandlers [ a . type ] ( a ) ; var c = a . attributes ; c && c . style && ( a . styles = CKEDITOR . tools . extend ( { } , a . styles , CKEDITOR . tools . parseCssText ( c . style ) ) , delete c . style ) ; b && ( a = CKEDITOR . tools . clone ( a ) , K ( a . attributes , b ) , K ( a . styles , b ) ) ; c = this . element = a . element ? "string" == typeof a . element ? a . element . toLowerCase ( ) :
a . element : "*" ; this . type = a . type || ( C [ c ] ? CKEDITOR . STYLE _BLOCK : M [ c ] ? CKEDITOR . STYLE _OBJECT : CKEDITOR . STYLE _INLINE ) ; "object" == typeof this . element && ( this . type = CKEDITOR . STYLE _OBJECT ) ; this . _ = { definition : a } } ; CKEDITOR . style . prototype = { apply : function ( a ) { if ( a instanceof CKEDITOR . dom . document ) return L . call ( this , a . getSelection ( ) ) ; if ( this . checkApplicable ( a . elementPath ( ) , a ) ) { var b = this . _ . enterMode ; b || ( this . _ . enterMode = a . activeEnterMode ) ; L . call ( this , a . getSelection ( ) , 0 , a ) ; this . _ . enterMode = b } } , remove : function ( a ) { if ( a instanceof
CKEDITOR . dom . document ) return L . call ( this , a . getSelection ( ) , 1 ) ; if ( this . checkApplicable ( a . elementPath ( ) , a ) ) { var b = this . _ . enterMode ; b || ( this . _ . enterMode = a . activeEnterMode ) ; L . call ( this , a . getSelection ( ) , 1 , a ) ; this . _ . enterMode = b } } , applyToRange : function ( a ) { this . applyToRange = this . type == CKEDITOR . STYLE _INLINE ? b : this . type == CKEDITOR . STYLE _BLOCK ? 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 ?
@@ -705,7 +705,7 @@ k.remove();var b;CKEDITOR.env.webkit&&(b=k.getFirst())&&b.is&&b.hasClass("Apple-
a . editable ( ) ; g ( ) ; "paste" == p . mainPasteEvent && b . fire ( "beforepaste" ) ; break ; case CKEDITOR . CTRL + 88 : case CKEDITOR . SHIFT + 46 : a . fire ( "saveSnapshot" ) , setTimeout ( function ( ) { a . fire ( "saveSnapshot" ) } , 50 ) } } function k ( b ) { var c = { type : "auto" , method : "paste" , dataTransfer : p . initPasteDataTransfer ( b ) } ; c . dataTransfer . cacheData ( ) ; var d = ! 1 !== a . fire ( "beforePaste" , c ) ; d && p . canClipboardApiBeTrusted ( c . dataTransfer , a ) ? ( b . data . preventDefault ( ) , setTimeout ( function ( ) { r ( a , c ) } , 0 ) ) : l ( b , function ( b ) { c . dataValue = b . replace ( /<span[^>]+data-cke-bookmark[^<]*?<\/span>/ig ,
"" ) ; d && r ( a , c ) } ) } function t ( ) { if ( "wysiwyg" == a . mode ) { var b = q ( "paste" ) ; a . getCommand ( "cut" ) . setState ( q ( "cut" ) ) ; a . getCommand ( "copy" ) . setState ( q ( "copy" ) ) ; a . getCommand ( "paste" ) . setState ( b ) ; a . fire ( "pasteState" , b ) } } function q ( b ) { if ( v && b in { paste : 1 , cut : 1 } ) return CKEDITOR . TRISTATE _DISABLED ; if ( "paste" == b ) return CKEDITOR . TRISTATE _OFF ; b = a . getSelection ( ) ; var c = b . getRanges ( ) ; return b . getType ( ) == CKEDITOR . SELECTION _NONE || 1 == c . length && c [ 0 ] . collapsed ? CKEDITOR . TRISTATE _DISABLED : CKEDITOR . TRISTATE _OFF } var p = CKEDITOR . plugins . clipboard ,
m = 0 , u = 0 , v = 0 ; ( function ( ) { a . on ( "key" , n ) ; a . on ( "contentDom" , b ) ; a . on ( "selectionChange" , function ( a ) { v = a . data . selection . getRanges ( ) [ 0 ] . checkReadOnly ( ) ; t ( ) } ) ; if ( a . contextMenu ) { a . contextMenu . addListener ( function ( a , b ) { v = b . getRanges ( ) [ 0 ] . checkReadOnly ( ) ; return { cut : q ( "cut" ) , copy : q ( "copy" ) , paste : q ( "paste" ) } } ) ; var c = null ; a . on ( "menuShow" , function ( ) { c && ( c . removeListener ( ) , c = null ) ; var b = a . contextMenu . findItemByCommandName ( "paste" ) ; b && b . element && ( c = b . element . on ( "touchend" , function ( ) { a . _ . forcePasteDialog = ! 0 } ) ) } ) } if ( a . ui . addButton ) a . once ( "instanceReady" ,
function ( ) { a . _ . pasteButtons && CKEDITOR . tools . array . forEach ( a . _ . pasteButtons , function ( b ) { if ( b = a . ui . get ( b ) ) CKEDITOR . document . getById ( b . _ . id ) . on ( "touchend" , function ( ) { a . _ . forcePasteDialog = ! 0 } ) } ) } ) } ) ( ) ; ( function ( ) { function b ( c , d , e , h , f ) { var n = a . lang . clipboard [ d ] ; a . addCommand ( d , e ) ; a . ui . addButton && a . ui . addButton ( c , { label : n , command : d , toolbar : "clipboard," + h } ) ; a . addMenuItems && a . addMenuItem ( d , { label : n , command : d , group : "clipboard" , order : f } ) } b ( "Cut" , "cut" , c ( "cut" ) , 10 , 1 ) ; b ( "Copy" , "copy" , c ( "copy" ) , 20 , 4 ) ; b ( "Paste" ,
function ( ) { a . _ . pasteButtons && CKEDITOR . tools . array . forEach ( a . _ . pasteButtons , function ( b ) { if ( b = a . ui . get ( b ) ) if ( b = CKEDITOR . document . getById ( b . _ . id ) ) b . on ( "touchend" , function ( ) { a . _ . forcePasteDialog = ! 0 } ) } ) } ) } ) ( ) ; ( function ( ) { function b ( c , d , e , h , f ) { var n = a . lang . clipboard [ d ] ; a . addCommand ( d , e ) ; a . ui . addButton && a . ui . addButton ( c , { label : n , command : d , toolbar : "clipboard," + h } ) ; a . addMenuItems && a . addMenuItem ( d , { label : n , command : d , group : "clipboard" , order : f } ) } b ( "Cut" , "cut" , c ( "cut" ) , 10 , 1 ) ; b ( "Copy" , "copy" , c ( "copy" ) , 20 , 4 ) ; b ( "Paste" ,
"paste" , d ( ) , 30 , 8 ) ; a . _ . pasteButtons || ( a . _ . pasteButtons = [ ] ) ; a . _ . pasteButtons . push ( "Paste" ) } ) ( ) ; a . getClipboardData = function ( b , c ) { function d ( a ) { a . removeListener ( ) ; a . cancel ( ) ; c ( a . data ) } function e ( a ) { a . removeListener ( ) ; a . cancel ( ) ; c ( { type : f , dataValue : a . data . dataValue , dataTransfer : a . data . dataTransfer , method : "paste" } ) } var h = ! 1 , f = "auto" ; c || ( c = b , b = null ) ; a . on ( "beforePaste" , function ( a ) { a . removeListener ( ) ; h = ! 0 ; f = a . data . type } , null , null , 1E3 ) ; a . on ( "paste" , d , null , null , 0 ) ; ! 1 === y ( ) && ( a . removeListener ( "paste" , d ) , a . _ . forcePasteDialog &&
h && a . fire ( "pasteDialog" ) ? ( a . on ( "pasteDialogCommit" , e ) , a . on ( "dialogHide" , function ( a ) { a . removeListener ( ) ; a . data . removeListener ( "pasteDialogCommit" , e ) ; a . data . _ . committed || c ( null ) } ) ) : c ( null ) ) } } function z ( a ) { if ( CKEDITOR . env . webkit ) { if ( ! a . match ( /^[^<]*$/g ) && ! a . match ( /^(<div><br( ?\/)?><\/div>|<div>[^<]*<\/div>)*$/gi ) ) return "html" } else if ( CKEDITOR . env . ie ) { if ( ! a . match ( /^([^<]|<br( ?\/)?>)*$/gi ) && ! a . match ( /^(<p>([^<]|<br( ?\/)?>)*<\/p>|(\r\n))*$/gi ) ) return "html" } else if ( CKEDITOR . env . gecko ) { if ( ! a . match ( /^([^<]|<br( ?\/)?>)*$/gi ) ) return "html" } else return "html" ;
return "htmlifiedtext" } function A ( a , b ) { function c ( a ) { return CKEDITOR . tools . repeat ( "\x3c/p\x3e\x3cp\x3e" , ~ ~ ( a / 2 ) ) + ( 1 == a % 2 ? "\x3cbr\x3e" : "" ) } b = b . replace ( /(?!\u3000)\s+/g , " " ) . replace ( /> +</g , "\x3e\x3c" ) . replace ( /<br ?\/>/gi , "\x3cbr\x3e" ) ; b = b . replace ( /<\/?[A-Z]+>/g , function ( a ) { return a . toLowerCase ( ) } ) ; if ( b . match ( /^[^<]$/ ) ) return b ; CKEDITOR . env . webkit && - 1 < b . indexOf ( "\x3cdiv\x3e" ) && ( b = b . replace ( /^(<div>(<br>|)<\/div>)(?!$|(<div>(<br>|)<\/div>))/g , "\x3cbr\x3e" ) . replace ( /^(<div>(<br>|)<\/div>){2}(?!$)/g , "\x3cdiv\x3e\x3c/div\x3e" ) ,
@@ -740,9 +740,9 @@ a?CKEDITOR.DATA_TRANSFER_INTERNAL:CKEDITOR.DATA_TRANSFER_CROSS_EDITORS:CKEDITOR.
d ) { this . _ . files = [ ] ; if ( this . $ . files && this . $ . files . length ) for ( c = 0 ; c < this . $ . files . length ; c ++ ) this . _ . files . push ( this . $ . files [ c ] ) ; 0 === this . _ . files . length && d && this . _ . files . push ( d ) } } } , getFilesCount : function ( ) { return this . _ . files . length ? this . _ . files . length : this . $ && this . $ . files && this . $ . files . length ? this . $ . files . length : this . _getImageFromClipboard ( ) ? 1 : 0 } , getFile : function ( a ) { return this . _ . files . length ? this . _ . files [ a ] : this . $ && this . $ . files && this . $ . files . length ? this . $ . files [ a ] : 0 === a ? this . _getImageFromClipboard ( ) :
void 0 } , isEmpty : function ( ) { var a = { } , b ; if ( this . getFilesCount ( ) ) return ! 1 ; CKEDITOR . tools . array . forEach ( CKEDITOR . tools . objectKeys ( this . _ . data ) , function ( b ) { a [ b ] = 1 } ) ; if ( this . $ ) if ( CKEDITOR . plugins . clipboard . isCustomDataTypesSupported ) { if ( this . $ . types ) for ( var c = 0 ; c < this . $ . types . length ; c ++ ) a [ this . $ . types [ c ] ] = 1 } else a . Text = 1 , a . URL = 1 ; "Text" != m && ( a [ m ] = 0 ) ; for ( b in a ) if ( a [ b ] && "" !== this . getData ( b ) ) return ! 1 ; return ! 0 } , _getImageFromClipboard : function ( ) { var a ; if ( this . $ && this . $ . items && this . $ . items [ 0 ] ) try { if ( ( a = this . $ . items [ 0 ] . getAsFile ( ) ) &&
a . type ) return a } catch ( b ) { } } , _stripHtml : function ( a ) { if ( a && a . length ) { a = a . replace ( this . _ . metaRegExp , "" ) ; var b = this . _ . bodyRegExp . exec ( a ) ; b && b . length && ( a = b [ 1 ] , a = a . replace ( this . _ . fragmentRegExp , "" ) ) } return a } } ; CKEDITOR . plugins . clipboard . fallbackDataTransfer = function ( a ) { this . _dataTransfer = a ; this . _customDataFallbackType = "text/html" } ; CKEDITOR . plugins . clipboard . fallbackDataTransfer . _isCustomMimeTypeSupported = null ; CKEDITOR . plugins . clipboard . fallbackDataTransfer . _customTypes = [ ] ; CKEDITOR . plugins . clipboard . fallbackDataTransfer . prototype =
{ isRequired : function ( ) { var a = CKEDITOR . plugins . clipboard . fallbackDataTransfer , b = this . _dataTransfer . $ ; if ( null === a . _isCustomMimeTypeSupported ) if ( b ) { a . _isCustomMimeTypeSupported = ! 1 ; try { b . setData ( "cke/mimetypetest" , "cke test value" ) , a . _isCustomMimeTypeSupported = "cke test value" === b . getData ( "cke/mimetypetest" ) , b . clearData ( "cke/mimetypetest" ) } catch ( c ) { } } else return ! 1 ; return ! a . _isCustomMimeTypeSupported } , getData : function ( a , b ) { var c = this . _getData ( this . _customDataFallbackType , ! 0 ) ; if ( b ) return c ; var c = this . _extractDataComment ( c ) ,
d = null , d = a === this . _customDataFallbackType ? c . content : c . data && c . data [ a ] ? c . data [ a ] : this . _getData ( a , ! 0 ) ; return null !== d ? d : "" } , setData : function ( a , b ) { var c = a === this . _customDataFallbackType ; c && ( b = this . _applyDataComment ( b , this . _getFallbackTypeData ( ) ) ) ; var d = b , g = this . _dataTransfer . $ ; try { g . setData ( a , d ) , c && ( this . _dataTransfer . _ . nativeHtmlCache = d ) } catch ( h ) { if ( this . _isUnsupportedMimeTypeError ( h ) ) { c = CKEDITOR . plugins . clipboard . fallbackDataTransfer ; - 1 === CKEDITOR . tools . indexOf ( c . _customTypes , a ) && c . _customTypes . push ( a ) ;
var c = this . _getFallbackTypeContent ( ) , e = this . _getFallbackTypeData ( ) ; e [ a ] = d ; try { d = this . _applyDataComment ( c , e ) , g . setData ( this . _customDataFallbackType , d ) , this . _dataTransfer . _ . nativeHtmlCache = d } catch ( f ) { d = "" } } } return d } , _getData : function ( a , b ) { var c = this . _dataTransfer . _ . data ; if ( ! b && c [ a ] ) return c [ a ] ; try { return this . _dataTransfer . $ . getData ( a ) } catch ( d ) { return null } } , _getFallbackTypeContent : function ( ) { var a = this . _dataTransfer . _ . data [ this . _customDataFallbackType ] ; a || ( a = this . _extractDataComment ( this . _getData ( this . _customDataFallbackType ,
{ isRequired : function ( ) { var a = CKEDITOR . plugins . clipboard . fallbackDataTransfer , b = this . _dataTransfer . $ ; if ( null === a . _isCustomMimeTypeSupported ) if ( b ) { a . _isCustomMimeTypeSupported = ! 1 ; if ( CKEDITOR . env . edge && 17 <= CKEDITOR . env . version ) return ! 0 ; try { b . setData ( "cke/mimetypetest" , "cke test value" ) , a . _isCustomMimeTypeSupported = "cke test value" === b . getData ( "cke/mimetypetest" ) , b . clearData ( "cke/mimetypetest" ) } catch ( c ) { } } else return ! 1 ; return ! a . _isCustomMimeTypeSupported } , getData : function ( a , b ) { var c = this . _getData ( this . _customDataFallbackType ,
! 0 ) ; if ( b ) return c ; var c = this . _extractDataComment ( c ) , d = null , d = a === this . _customDataFallbackType ? c . content : c . data && c . data [ a ] ? c . data [ a ] : this . _getData ( a , ! 0 ) ; return null !== d ? d : "" } , setData : function ( a , b ) { var c = a === this . _customDataFallbackType ; c && ( b = this . _applyDataComment ( b , this . _getFallbackTypeData ( ) ) ) ; var d = b , g = this . _dataTransfer . $ ; try { g . setData ( a , d ) , c && ( this . _dataTransfer . _ . nativeHtmlCache = d ) } catch ( h ) { if ( this . _isUnsupportedMimeTypeError ( h ) ) { c = CKEDITOR . plugins . clipboard . fallbackDataTransfer ; - 1 === CKEDITOR . tools . indexOf ( c . _customTypes ,
a ) && c . _customTypes . push ( a ) ; var c = this . _getFallbackTypeContent ( ) , e = this . _getFallbackTypeData ( ) ; e [ a ] = d ; try { d = this . _applyDataComment ( c , e ) , g . setData ( this . _customDataFallbackType , d ) , this . _dataTransfer . _ . nativeHtmlCache = d } catch ( f ) { d = "" } } } return d } , _getData : function ( a , b ) { var c = this . _dataTransfer . _ . data ; if ( ! b && c [ a ] ) return c [ a ] ; try { return this . _dataTransfer . $ . getData ( a ) } catch ( d ) { return null } } , _getFallbackTypeContent : function ( ) { var a = this . _dataTransfer . _ . data [ this . _customDataFallbackType ] ; a || ( a = this . _extractDataComment ( this . _getData ( this . _customDataFallbackType ,
! 0 ) ) . content ) ; return a } , _getFallbackTypeData : function ( ) { var a = CKEDITOR . plugins . clipboard . fallbackDataTransfer . _customTypes , b = this . _extractDataComment ( this . _getData ( this . _customDataFallbackType , ! 0 ) ) . data || { } , c = this . _dataTransfer . _ . data ; CKEDITOR . tools . array . forEach ( a , function ( a ) { void 0 !== c [ a ] ? b [ a ] = c [ a ] : void 0 !== b [ a ] && ( b [ a ] = b [ a ] ) } , this ) ; return b } , _isUnsupportedMimeTypeError : function ( a ) { return a . message && - 1 !== a . message . search ( /element not found/gi ) } , _extractDataComment : function ( a ) { var b = { data : null , content : a ||
"" } ; if ( a && 16 < a . length ) { var c ; ( c = /\x3c!--cke-data:(.*?)--\x3e/g . exec ( a ) ) && c [ 1 ] && ( b . data = JSON . parse ( decodeURIComponent ( c [ 1 ] ) ) , b . content = a . replace ( c [ 0 ] , "" ) ) } return b } , _applyDataComment : function ( a , b ) { var c = "" ; b && CKEDITOR . tools . objectKeys ( b ) . length && ( c = "\x3c!--cke-data:" + encodeURIComponent ( JSON . stringify ( b ) ) + "--\x3e" ) ; return c + ( a && a . length ? a : "" ) } } } ) ( ) ; CKEDITOR . config . clipboard _notificationDuration = 1E4 ; CKEDITOR . plugins . add ( "panelbutton" , { requires : "button" , onLoad : function ( ) { function e ( c ) { var a = this . _ ; a . state != CKEDITOR . TRISTATE _DISABLED && ( this . createPanel ( c ) , a . on ? a . panel . hide ( ) : a . panel . showBlock ( this . _ . id , this . document . getById ( this . _ . id ) , 4 ) ) } CKEDITOR . ui . panelButton = CKEDITOR . tools . createClass ( { base : CKEDITOR . ui . button , $ : function ( c ) { var a = c . panel || { } ; delete c . panel ; this . base ( c ) ; this . document = a . parent && a . parent . getDocument ( ) || CKEDITOR . document ; a . block = { attributes : a . attributes } ; this . hasArrow = a . toolbarRelated =
! 0 ; this . click = e ; this . _ = { panelDefinition : a } } , statics : { handler : { create : function ( c ) { return new CKEDITOR . ui . panelButton ( c ) } } } , proto : { createPanel : function ( c ) { var a = this . _ ; if ( ! a . panel ) { var f = this . _ . panelDefinition , e = this . _ . panelDefinition . block , g = f . parent || CKEDITOR . document . getBody ( ) , d = this . _ . panel = new CKEDITOR . ui . floatPanel ( c , g , f ) , f = d . addBlock ( a . id , e ) , b = this ; d . onShow = function ( ) { b . className && this . element . addClass ( b . className + "_panel" ) ; b . setState ( CKEDITOR . TRISTATE _ON ) ; a . on = 1 ; b . editorFocus && c . focus ( ) ; if ( b . onOpen ) b . onOpen ( ) } ;
@@ -769,16 +769,16 @@ this);l.setStyles({top:p+"px",left:d+"px"});l.setOpacity(1);g&&g()},this);n.isLo
k . _ . markFirstDisplayed ( ) ; this . _ . editor . fire ( "panelShow" , this ) } , 0 , this ) } , CKEDITOR . env . air ? 200 : 0 , this ) ; this . visible = 1 ; this . onShow && this . onShow . call ( this ) } , reposition : function ( ) { var a = this . _ . showBlockParams ; this . visible && this . _ . showBlockParams && ( this . hide ( ) , this . showBlock . apply ( this , a ) ) } , focus : function ( ) { if ( CKEDITOR . env . webkit ) { var a = CKEDITOR . document . getActive ( ) ; a && ! a . equals ( this . _ . iframe ) && a . $ . blur ( ) } ( this . _ . lastFocused || this . _ . iframe . getFrameDocument ( ) . getWindow ( ) ) . focus ( ) } , blur : function ( ) { var a =
this . _ . iframe . getFrameDocument ( ) . getActive ( ) ; a && a . is ( "a" ) && ( this . _ . lastFocused = a ) } , hide : function ( a ) { if ( this . visible && ( ! this . onHide || ! 0 !== this . onHide . call ( this ) ) ) { this . hideChild ( ) ; CKEDITOR . env . gecko && this . _ . iframe . getFrameDocument ( ) . $ . activeElement . blur ( ) ; this . element . setStyle ( "display" , "none" ) ; this . visible = 0 ; this . element . getFirst ( ) . removeCustomData ( "activePanel" ) ; if ( a = a && this . _ . returnFocus ) CKEDITOR . env . webkit && a . type && a . getWindow ( ) . $ . focus ( ) , a . focus ( ) ; delete this . _ . lastFocused ; this . _ . showBlockParams =
null ; this . _ . editor . fire ( "panelHide" , this ) } } , allowBlur : function ( a ) { var b = this . _ . panel ; void 0 !== a && ( b . allowBlur = a ) ; return b . allowBlur } , showAsChild : function ( a , b , c , f , h , g ) { if ( this . _ . activeChild != a || a . _ . panel . _ . offsetParentId != c . getId ( ) ) this . hideChild ( ) , a . onHide = CKEDITOR . tools . bind ( function ( ) { CKEDITOR . tools . setTimeout ( function ( ) { this . _ . focused || this . hide ( ) } , 0 , this ) } , this ) , this . _ . activeChild = a , this . _ . focused = ! 1 , a . showBlock ( b , c , f , h , g ) , this . blur ( ) , ( CKEDITOR . env . ie7Compat || CKEDITOR . env . ie6Compat ) && setTimeout ( function ( ) { a . element . getChild ( 0 ) . $ . style . cssText +=
"" } , 100 ) } , hideChild : function ( a ) { var b = this . _ . activeChild ; b && ( delete b . onHide , delete this . _ . activeChild , b . hide ( ) , a && this . focus ( ) ) } } } ) ; CKEDITOR . on ( "instanceDestroyed" , function ( ) { var a = CKEDITOR . tools . isEmpty ( CKEDITOR . instances ) , b ; for ( b in f ) { var c = f [ b ] ; a ? c . destroy ( ) : c . element . hide ( ) } a && ( f = { } ) } ) } ) ( ) ; CKEDITOR . plugins . add ( "colorbutton" , { requires : "panelbutton,floatpanel" , init : function ( d ) { function t ( a , e , g , r , l ) { var n = new CKEDITOR . style ( k [ "colorButton_" + e + "Style" ] ) , m = CKEDITOR . tools . getNextId ( ) + "_colorBox" , p ; l = l || { } ; d . ui . add ( a , CKEDITOR . UI _PANELBUTTON , { label : g , title : g , modes : { wysiwyg : 1 } , editorFocus : 0 , toolbar : "colors," + r , allowedContent : n , requiredContent : n , contentTransformations : l . contentTransformations , panel : { css : CKEDITOR . skin . getPath ( "editor" ) , attributes : { role : "listbox" , "aria-label" : h . panelTitle } } , onBlock : function ( a ,
b ) { p = b ; b . autoSize = ! 0 ; b . element . addClass ( "cke_colorblock" ) ; b . element . setHtml ( y ( a , e , m ) ) ; b . element . getDocument ( ) . getBody ( ) . setStyle ( "overflow" , "hidden" ) ; CKEDITOR . ui . fire ( "ready" , this ) ; var c = b . keys , f = "rtl" == d . lang . dir ; c [ f ? 37 : 39 ] = "next" ; c [ 40 ] = "next" ; c [ 9 ] = "next" ; c [ f ? 39 : 37 ] = "prev" ; c [ 38 ] = "prev" ; c [ CKEDITOR . SHIFT + 9 ] = "prev" ; c [ 32 ] = "click" } , refresh : function ( ) { d . activeFilter . check ( n ) || this . setState ( CKEDITOR . TRISTATE _DISABLED ) } , onOpen : function ( ) { var a = d . getSelection ( ) , b = a && a . getStartElement ( ) , c = d . elementPath ( b ) ;
if ( c ) { b = c . block || c . blockLimit || d . document . getBody ( ) ; do c = b && b . getComputedStyle ( "back" == e ? "background-color" : "color" ) || "transparent" ; while ( "back" == e && "transparent" == c && b && ( b = b . getParent ( ) ) ) ; c && "transparent" != c || ( c = "#ffffff" ) ; ! 1 !== k . colorButton _enableAutomatic && this . _ . panel . _ . iframe . getFrameDocument ( ) . getById ( m ) . setStyle ( "background-color" , c ) ; if ( b = a && a . getRanges ( ) [ 0 ] ) { for ( var a = new CKEDITOR . dom . walker ( b ) , f = b . collapsed ? b . startContainer : a . next ( ) , b = "" ; f ; ) { f . type = ==CKEDITOR . NODE _TEXT && ( f = f . getParent ( ) ) ;
f = u ( f . getComputedStyle ( "back" == e ? "background-color" : "color" ) ) ; b = b || f ; if ( b !== f ) { b = "" ; break } f = a . next ( ) } a = b ; b = p . _ . getItems ( ) ; for ( f = 0 ; f < b . count ( ) ; f ++ ) { var g = b . getItem ( f ) ; g . removeAttribute ( "aria-selected" ) ; a && a == u ( g . getAttribute ( "data-value" ) ) && g . setAttribute ( "aria-selected" , ! 0 ) } } return c } } } ) } function y ( a , e , g ) { a = [ ] ; var r = k . colorButton _colors . split ( "," ) , l = k . colorButton _colorsPerRow || 6 , n = d . plugins . colordialog && ! 1 !== k . colorButton _enableMore , m = r . length + ( n ? 2 : 1 ) , p = CKEDITOR . tools . addFunction ( function ( a , b ) { function c ( a ) { d . removeStyle ( new CKEDITOR . style ( k [ "colorButton_" +
b + "Style" ] , { color : "inherit" } ) ) ; var e = k [ "colorButton_" + b + "Style" ] ; e . childRule = "back" == b ? function ( a ) { return v ( a ) } : function ( a ) { return ! ( a . is ( "a" ) || a . getElementsByTag ( "a" ) . count ( ) ) || v ( a ) } ; d . focus ( ) ; d . applyStyle ( new CKEDITOR . style ( e , { color : a } ) ) ; d . fire ( "saveSnapshot" ) } d . focus ( ) ; d . fire ( "saveSnapshot" ) ; if ( "?" == a ) d . getColorFromDialog ( function ( a ) { if ( a ) return c ( a ) } ) ; else return c ( a ) } ) ; ! 1 !== k . colorButton _enableAutomatic && a . push ( '\x3ca class\x3d"cke_colorauto" _cke_focus\x3d1 hidefocus\x3dtrue title\x3d"' , h . auto ,
'" onclick\x3d"CKEDITOR.tools.callFunction(' , p , ",null,'" , e , "');return false;\" href\x3d\"javascript:void('" , h . auto , '\')" role\x3d"option" aria-posinset\x3d"1" aria-setsize\x3d"' , m , '"\x3e\x3ctable role\x3d"presentation" cellspacing\x3d0 cellpadding\x3d0 width\x3d"100%"\x3e\x3ctr\x3e\x3ctd colspan\x3d"' + l + '" align\x3d"center"\x3e\x3cspan class\x3d"cke_colorbox" id\x3d"' , g , '"\x3e\x3c/span\x3e' , h . auto , "\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e\x3c/a\x3e" ) ; a . push ( '\x3ctable role\x3d"presentation" cellspacing\x3d0 cellpadding\x3d0 width\x3d"100%"\x3e' ) ;
for ( g = 0 ; g < r . length ; g ++ ) { 0 === g % l && a . push ( "\x3c/tr\x3e\x3ctr\x3e" ) ; var q = r [ g ] . split ( "/" ) , b = q [ 0 ] , c = q [ 1 ] || b ; q [ 1 ] || ( b = "#" + b . replace ( /^(.)(.)(.)$/ , "$1$1$2$2$3$3" ) ) ; q = d . lang . colorbutton . colors [ c ] || c ; a . push ( '\x3ctd\x3e\x3ca class\x3d"cke_colorbox" _cke_focus\x3d1 hidefocus\x3dtrue title\x3d"' , q , '" onclick\x3d"CKEDITOR.tools.callFunction(' , p , ",'" , b , "','" , e , "'); return false;\" href\x3d\"javascript:void('" , q , '\')" data-value\x3d"' + c + '" role\x3d"option" aria-posinset\x3d"' , g + 2 , '" aria-setsize\x3d"' , m , '"\x3e\x3cspan class\x3d"cke_colorbox" style\x3d"background-color:#' ,
c , '"\x3e\x3c/span\x3e\x3c/a\x3e\x3c/td\x3e' ) } n && a . push ( '\x3c/tr\x3e\x3ctr\x3e\x3ctd colspan\x3d"' + l + '" align\x3d"center"\x3e\x3ca class\x3d"cke_colormore" _cke_focus\x3d1 hidefocus\x3dtrue title\x3d"' , h . more , '" onclick\x3d"CKEDITOR.tools.callFunction(' , p , ",'?','" , e , "');return false;\" href\x3d\"javascript:void('" , h . more , "')\"" , ' role\x3d"option" aria-posinset\x3d"' , m , '" aria-setsize\x3d"' , m , '"\x3e' , h . more , "\x3c/a\x3e\x3c/td\x3e" ) ; a . push ( "\x3c/tr\x3e\x3c/table\x3e" ) ; return a . join ( "" ) } function v ( a ) { return "false" ==
a . getAttribute ( "contentEditable" ) || a . getAttribute ( "data-nostyle" ) } function u ( a ) { return CKEDITOR . tools . normalizeHex ( "#" + CKEDITOR . tools . convertRgbToHex ( a || "" ) ) . replace ( /#/g , "" ) } var k = d . config , h = d . lang . colorbutton ; if ( ! CKEDITOR . env . hc ) { t ( "TextColor" , "fore" , h . textColorTitle , 10 , { contentTransformations : [ [ { element : "font" , check : "span{color}" , left : function ( a ) { return ! ! a . attributes . color } , right : function ( a ) { a . name = "span" ; a . attributes . color && ( a . styles . color = a . attributes . color ) ; delete a . attributes . color } } ] ] } ) ; var w =
{ } , x = d . config . colorButton _normalizeBackground ; if ( void 0 === x || x ) w . contentTransformations = [ [ { element : "span" , left : function ( a ) { var d = CKEDITOR . tools ; if ( "span" != a . name || ! a . styles || ! a . styles . background ) return ! 1 ; a = d . style . parse . background ( a . styles . background ) ; return a . color && 1 === d . objectKeys ( a ) . length } , right : function ( a ) { var e = ( new CKEDITOR . style ( d . config . colorButton _backStyle , { color : a . styles . background } ) ) . getDefinition ( ) ; a . name = e . element ; a . styles = e . styles ; a . attributes = e . attributes || { } ; return a } } ] ] ; t ( "BGColor" ,
"" } , 100 ) } , hideChild : function ( a ) { var b = this . _ . activeChild ; b && ( delete b . onHide , delete this . _ . activeChild , b . hide ( ) , a && this . focus ( ) ) } } } ) ; CKEDITOR . on ( "instanceDestroyed" , function ( ) { var a = CKEDITOR . tools . isEmpty ( CKEDITOR . instances ) , b ; for ( b in f ) { var c = f [ b ] ; a ? c . destroy ( ) : c . element . hide ( ) } a && ( f = { } ) } ) } ) ( ) ; CKEDITOR . plugins . add ( "colorbutton" , { requires : "panelbutton,floatpanel" , init : function ( e ) { function t ( a , d , g , r , k ) { var p = new CKEDITOR . style ( l [ "colorButton_" + d + "Style" ] ) , m = CKEDITOR . tools . getNextId ( ) + "_colorBox" , q ; k = k || { } ; e . ui . add ( a , CKEDITOR . UI _PANELBUTTON , { label : g , title : g , modes : { wysiwyg : 1 } , editorFocus : 0 , toolbar : "colors," + r , allowedContent : p , requiredContent : p , contentTransformations : k . contentTransformations , panel : { css : CKEDITOR . skin . getPath ( "editor" ) , attributes : { role : "listbox" , "aria-label" : h . panelTitle } } , onBlock : function ( a ,
b ) { q = b ; b . autoSize = ! 0 ; b . element . addClass ( "cke_colorblock" ) ; b . element . setHtml ( y ( a , d , m ) ) ; b . element . getDocument ( ) . getBody ( ) . setStyle ( "overflow" , "hidden" ) ; CKEDITOR . ui . fire ( "ready" , this ) ; var c = b . keys , f = "rtl" == e . lang . dir ; c [ f ? 37 : 39 ] = "next" ; c [ 40 ] = "next" ; c [ 9 ] = "next" ; c [ f ? 39 : 37 ] = "prev" ; c [ 38 ] = "prev" ; c [ CKEDITOR . SHIFT + 9 ] = "prev" ; c [ 32 ] = "click" } , refresh : function ( ) { e . activeFilter . check ( p ) || this . setState ( CKEDITOR . TRISTATE _DISABLED ) } , onOpen : function ( ) { var a = e . getSelection ( ) , b = a && a . getStartElement ( ) , c = e . elementPath ( b ) ;
if ( c ) { b = c . block || c . blockLimit || e . document . getBody ( ) ; do c = b && b . getComputedStyle ( "back" == d ? "background-color" : "color" ) || "transparent" ; while ( "back" == d && "transparent" == c && b && ( b = b . getParent ( ) ) ) ; c && "transparent" != c || ( c = "#ffffff" ) ; ! 1 !== l . colorButton _enableAutomatic && this . _ . panel . _ . iframe . getFrameDocument ( ) . getById ( m ) . setStyle ( "background-color" , c ) ; if ( b = a && a . getRanges ( ) [ 0 ] ) { for ( var a = new CKEDITOR . dom . walker ( b ) , f = b . collapsed ? b . startContainer : a . next ( ) , b = "" ; f ; ) { f . type ! ==CKEDITOR . NODE _ELEMENT && ( f = f . getParent ( ) ) ;
f = u ( f . getComputedStyle ( "back" == d ? "background-color" : "color" ) ) ; b = b || f ; if ( b !== f ) { b = "" ; break } f = a . next ( ) } a = b ; b = q . _ . getItems ( ) ; for ( f = 0 ; f < b . count ( ) ; f ++ ) { var g = b . getItem ( f ) ; g . removeAttribute ( "aria-selected" ) ; a && a == u ( g . getAttribute ( "data-value" ) ) && g . setAttribute ( "aria-selected" , ! 0 ) } } return c } } } ) } function y ( a , d , g ) { a = [ ] ; var r = l . colorButton _colors . split ( "," ) , k = l . colorButton _colorsPerRow || 6 , p = e . plugins . colordialog && ! 1 !== l . colorButton _enableMore , m = r . length + ( p ? 2 : 1 ) , q = CKEDITOR . tools . addFunction ( function ( a , b ) { function c ( a ) { var d =
l [ "colorButton_" + b + "Style" ] ; e . removeStyle ( new CKEDITOR . style ( d , { color : "inherit" } ) ) ; d . childRule = "back" == b ? function ( a ) { return v ( a ) } : function ( a ) { return ! ( a . is ( "a" ) || a . getElementsByTag ( "a" ) . count ( ) ) || v ( a ) } ; e . focus ( ) ; a && e . applyStyle ( new CKEDITOR . style ( d , { color : a } ) ) ; e . fire ( "saveSnapshot" ) } e . focus ( ) ; e . fire ( "saveSnapshot" ) ; if ( "?" == a ) e . getColorFromDialog ( function ( a ) { if ( a ) return c ( a ) } ) ; else return c ( a ) } ) ; ! 1 !== l . colorButton _enableAutomatic && a . push ( '\x3ca class\x3d"cke_colorauto" _cke_focus\x3d1 hidefocus\x3dtrue title\x3d"' ,
h . auto , '" onclick\x3d"CKEDITOR.tools.callFunction(' , q , ",null,'" , d , "');return false;\" href\x3d\"javascript:void('" , h . auto , '\')" role\x3d"option" aria-posinset\x3d"1" aria-setsize\x3d"' , m , '"\x3e\x3ctable role\x3d"presentation" cellspacing\x3d0 cellpadding\x3d0 width\x3d"100%"\x3e\x3ctr\x3e\x3ctd colspan\x3d"' + k + '" align\x3d"center"\x3e\x3cspan class\x3d"cke_colorbox" id\x3d"' , g , '"\x3e\x3c/span\x3e' , h . auto , "\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e\x3c/a\x3e" ) ; a . push ( '\x3ctable role\x3d"presentation" cellspacing\x3d0 cellpadding\x3d0 width\x3d"100%"\x3e' ) ;
for ( g = 0 ; g < r . length ; g ++ ) { 0 === g % k && a . push ( "\x3c/tr\x3e\x3ctr\x3e" ) ; var n = r [ g ] . split ( "/" ) , b = n [ 0 ] , c = n [ 1 ] || b ; n [ 1 ] ? n = b : ( b = "#" + b . replace ( /^(.)(.)(.)$/ , "$1$1$2$2$3$3" ) , n = e . lang . colorbutton . colors [ c ] || c ) ; a . push ( '\x3ctd\x3e\x3ca class\x3d"cke_colorbox" _cke_focus\x3d1 hidefocus\x3dtrue title\x3d"' , n , '" onclick\x3d"CKEDITOR.tools.callFunction(' , q , ",'" , b , "','" , d , "'); return false;\" href\x3d\"javascript:void('" , n , '\')" data-value\x3d"' + c + '" role\x3d"option" aria-posinset\x3d"' , g + 2 , '" aria-setsize\x3d"' , m , '"\x3e\x3cspan class\x3d"cke_colorbox" style\x3d"background-color:#' ,
c , '"\x3e\x3c/span\x3e\x3c/a\x3e\x3c/td\x3e' ) } p && a . push ( '\x3c/tr\x3e\x3ctr\x3e\x3ctd colspan\x3d"' + k + '" align\x3d"center"\x3e\x3ca class\x3d"cke_colormore" _cke_focus\x3d1 hidefocus\x3dtrue title\x3d"' , h . more , '" onclick\x3d"CKEDITOR.tools.callFunction(' , q , ",'?','" , d , "');return false;\" href\x3d\"javascript:void('" , h . more , "')\"" , ' role\x3d"option" aria-posinset\x3d"' , m , '" aria-setsize\x3d"' , m , '"\x3e' , h . more , "\x3c/a\x3e\x3c/td\x3e" ) ; a . push ( "\x3c/tr\x3e\x3c/table\x3e" ) ; return a . join ( "" ) } function v ( a ) { return "false" ==
a . getAttribute ( "contentEditable" ) || a . getAttribute ( "data-nostyle" ) } function u ( a ) { return CKEDITOR . tools . normalizeHex ( "#" + CKEDITOR . tools . convertRgbToHex ( a || "" ) ) . replace ( /#/g , "" ) } var l = e . config , h = e . lang . colorbutton ; if ( ! CKEDITOR . env . hc ) { t ( "TextColor" , "fore" , h . textColorTitle , 10 , { contentTransformations : [ [ { element : "font" , check : "span{color}" , left : function ( a ) { return ! ! a . attributes . color } , right : function ( a ) { a . name = "span" ; a . attributes . color && ( a . styles . color = a . attributes . color ) ; delete a . attributes . color } } ] ] } ) ; var w =
{ } , x = e . config . colorButton _normalizeBackground ; if ( void 0 === x || x ) w . contentTransformations = [ [ { element : "span" , left : function ( a ) { var d = CKEDITOR . tools ; if ( "span" != a . name || ! a . styles || ! a . styles . background ) return ! 1 ; a = d . style . parse . background ( a . styles . background ) ; return a . color && 1 === d . objectKeys ( a ) . length } , right : function ( a ) { var d = ( new CKEDITOR . style ( e . config . colorButton _backStyle , { color : a . styles . background } ) ) . getDefinition ( ) ; a . name = d . element ; a . styles = d . styles ; a . attributes = d . attributes || { } ; return a } } ] ] ; t ( "BGColor" ,
"back" , h . bgColorTitle , 20 , w ) } } } ) ; CKEDITOR . config . colorButton _colors = "1ABC9C,2ECC71,3498DB,9B59B6,4E5F70,F1C40F,16A085,27AE60,2980B9,8E44AD,2C3E50,F39C12,E67E22,E74C3C,ECF0F1,95A5A6,DDD,FFF,D35400,C0392B,BDC3C7,7F8C8D,999,000" ; CKEDITOR . config . colorButton _foreStyle = { element : "span" , styles : { color : "#(color)" } , overrides : [ { element : "font" , attributes : { color : null } } ] } ; CKEDITOR . config . colorButton _backStyle = { element : "span" , styles : { "background-color" : "#(color)" } } ; CKEDITOR . plugins . colordialog = { requires : "dialog" , init : function ( b ) { var d = new CKEDITOR . dialogCommand ( "colordialog" ) ; d . editorFocus = ! 1 ; b . addCommand ( "colordialog" , d ) ; CKEDITOR . dialog . add ( "colordialog" , this . path + "dialogs/colordialog.js" ) ; b . getColorFromDialog = function ( d , g ) { var c , f , e ; c = function ( a ) { f ( this ) ; a = "ok" == a . name ? this . getValueOf ( "picker" , "selectedColor" ) : null ; /^[0-9a-f]{3}([0-9a-f]{3})?$/i . test ( a ) && ( a = "#" + a ) ; d . call ( g , a ) } ; f = function ( a ) { a . removeListener ( "ok" , c ) ; a . removeListener ( "cancel" , c ) } ; e = function ( a ) { a . on ( "ok" ,
c ) ; a . on ( "cancel" , c ) } ; b . execCommand ( "colordialog" ) ; if ( b . _ . storedDialogs && b . _ . storedDialogs . colordialog ) e ( b . _ . storedDialogs . colordialog ) ; else CKEDITOR . on ( "dialogDefinition" , function ( a ) { if ( "colordialog" == a . data . name ) { var b = a . data . definition ; a . removeListener ( ) ; b . onLoad = CKEDITOR . tools . override ( b . onLoad , function ( a ) { return function ( ) { e ( this ) ; b . onLoad = a ; "function" == typeof a && a . call ( this ) } } ) } } ) } } } ; CKEDITOR . plugins . add ( "colordialog" , CKEDITOR . plugins . colordialog ) ; CKEDITOR . plugins . add ( "menu" , { requires : "floatpanel" , beforeInit : function ( l ) { for ( var h = l . config . menu _groups . split ( "," ) , r = l . _ . menuGroups = { } , t = l . _ . menuItems = { } , n = 0 ; n < h . length ; n ++ ) r [ h [ n ] ] = n + 1 ; l . addMenuGroup = function ( a , b ) { r [ a ] = b || 100 } ; l . addMenuItem = function ( a , b ) { r [ b . group ] && ( t [ a ] = new CKEDITOR . menuItem ( this , a , b ) ) } ; l . addMenuItems = function ( a ) { for ( var b in a ) this . addMenuItem ( b , a [ b ] ) } ; l . getMenuItem = function ( a ) { return t [ a ] } ; l . removeMenuItem = function ( a ) { delete t [ a ] } } } ) ;
( function ( ) { function l ( a ) { a . sort ( function ( a , d ) { return a . group < d . group ? - 1 : a . group > d . group ? 1 : a . order < d . order ? - 1 : a . order > d . order ? 1 : 0 } ) } var h = '\x3cspan class\x3d"cke_menuitem"\x3e\x3ca id\x3d"{id}" class\x3d"cke_menubutton cke_menubutton__{name} cke_menubutton_{state} {cls}" href\x3d"{href}" title\x3d"{title}" tabindex\x3d"-1" _cke_focus\x3d1 hidefocus\x3d"true" role\x3d"{role}" aria-label\x3d"{label}" aria-describedby\x3d"{id}_description" aria-haspopup\x3d"{hasPopup}" aria-disabled\x3d"{disabled}" {ariaChecked} draggable\x3d"false"' ;
@@ -801,16 +801,16 @@ b=(new CKEDITOR.dom.elementPath(a.getTarget(),c.editable())).contains(function(a
! 1 !== a . config . browserContextMenuOnCtrl ) } ) ; a . addCommand ( "contextMenu" , { exec : function ( ) { a . contextMenu . open ( a . document . getBody ( ) ) } } ) ; a . setKeystroke ( CKEDITOR . SHIFT + 121 , "contextMenu" ) ; a . setKeystroke ( CKEDITOR . CTRL + CKEDITOR . SHIFT + 121 , "contextMenu" ) } } ) ; ( function ( ) { CKEDITOR . plugins . add ( "div" , { requires : "dialog" , init : function ( a ) { if ( ! a . blockless ) { var c = a . lang . div , b = "div(*)" ; CKEDITOR . dialog . isTabEnabled ( a , "editdiv" , "advanced" ) && ( b += ";div[dir,id,lang,title]{*}" ) ; a . addCommand ( "creatediv" , new CKEDITOR . dialogCommand ( "creatediv" , { allowedContent : b , requiredContent : "div" , contextSensitive : ! 0 , contentTransformations : [ [ "div: alignmentToStyle" ] ] , refresh : function ( a , c ) { this . setState ( "div" in ( a . config . div _wrapTable ? c . root : c . blockLimit ) . getDtd ( ) ? CKEDITOR . TRISTATE _OFF :
CKEDITOR . TRISTATE _DISABLED ) } } ) ) ; a . addCommand ( "editdiv" , new CKEDITOR . dialogCommand ( "editdiv" , { requiredContent : "div" } ) ) ; a . addCommand ( "removediv" , { requiredContent : "div" , exec : function ( a ) { function c ( b ) { ( b = CKEDITOR . plugins . div . getSurroundDiv ( a , b ) ) && ! b . data ( "cke-div-added" ) && ( f . push ( b ) , b . data ( "cke-div-added" ) ) } for ( var b = a . getSelection ( ) , g = b && b . getRanges ( ) , e , h = b . createBookmarks ( ) , f = [ ] , d = 0 ; d < g . length ; d ++ ) e = g [ d ] , e . collapsed ? c ( b . getStartElement ( ) ) : ( e = new CKEDITOR . dom . walker ( e ) , e . evaluator = c , e . lastForward ( ) ) ;
for ( d = 0 ; d < f . length ; d ++ ) f [ d ] . remove ( ! 0 ) ; b . selectBookmarks ( h ) } } ) ; a . ui . addButton && a . ui . addButton ( "CreateDiv" , { label : c . toolbar , command : "creatediv" , toolbar : "blocks,50" } ) ; a . addMenuItems && ( a . addMenuItems ( { editdiv : { label : c . edit , command : "editdiv" , group : "div" , order : 1 } , removediv : { label : c . remove , command : "removediv" , group : "div" , order : 5 } } ) , a . contextMenu && a . contextMenu . addListener ( function ( b ) { return ! b || b . isReadOnly ( ) ? null : CKEDITOR . plugins . div . getSurroundDiv ( a ) ? { editdiv : CKEDITOR . TRISTATE _OFF , removediv : CKEDITOR . TRISTATE _OFF } :
null } ) ) ; CKEDITOR . dialog . add ( "creatediv" , this . path + "dialogs/div.js" ) ; CKEDITOR . dialog . add ( "editdiv" , this . path + "dialogs/div.js" ) } } } ) ; CKEDITOR . plugins . div = { getSurroundDiv : function ( a , c ) { var b = a . elementPath ( c ) ; return a . elementPath ( b . blockLimit ) . contains ( function ( a ) { return a . is ( "div" ) && ! a . isReadOnly ( ) } , 1 ) } } } ) ( ) ; ( function ( ) { function q ( b , d , a ) { a = b . config . forceEnterMode || a ; if ( "wysiwyg" == b . mode ) { d || ( d = b . activeEnterMode ) ; var h = b . elementPath ( ) ; h && ! h . isContextFor ( "p" ) && ( d = CKEDITOR . ENTER _BR , a = 1 ) ; b . fire ( "saveSnapshot" ) ; d == CKEDITOR . ENTER _BR ? t ( b , d , null , a ) : u ( b , d , null , a ) ; b . fire ( "saveSnapshot" ) } } function v ( b ) { b = b . getSelection ( ) . getRanges ( ! 0 ) ; for ( var d = b . length - 1 ; 0 < d ; d -- ) b [ d ] . deleteContents ( ) ; return b [ 0 ] } function y ( b ) { var d = b . startContainer . getAscendant ( function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && "true" == a . getAttribute ( "contenteditable" ) } ,
! 0 ) ; if ( b . root . equals ( d ) ) return b ; d = new CKEDITOR . dom . range ( d ) ; d . moveToRange ( b ) ; return d } CKEDITOR . plugins . add ( "enterkey" , { init : function ( b ) { b . addCommand ( "enter" , { modes : { wysiwyg : 1 } , editorFocus : ! 1 , exec : function ( b ) { q ( b ) } } ) ; b . addCommand ( "shiftEnter" , { modes : { wysiwyg : 1 } , editorFocus : ! 1 , exec : function ( b ) { q ( b , b . activeShiftEnterMode , 1 ) } } ) ; b . setKeystroke ( [ [ 13 , "enter" ] , [ CKEDITOR . SHIFT + 13 , "shiftEnter" ] ] ) } } ) ; var z = CKEDITOR . dom . walker . whitespaces ( ) , A = CKEDITOR . dom . walker . bookmark ( ) ; CKEDITOR . plugins . enterkey = { enterBlock : function ( b ,
d , a , h ) { if ( a = a || v ( b ) ) { a = y ( a ) ; var f = a . document , k = a . checkStartOfBlock ( ) , m = a . checkEndOfBlock ( ) , l = b . elementPath ( a . startContainer ) , c = l . block , n = d == CKEDITOR . ENTER _DIV ? "div" : "p" , e ; if ( k && m ) { if ( c && ( c . is ( "li" ) || c . getParent ( ) . is ( "li" ) ) ) { c . is ( "li" ) || ( c = c . getParent ( ) ) ; a = c . getParent ( ) ; e = a . getParent ( ) ; h = ! c . hasPrevious ( ) ; var p = ! c . hasNext ( ) , n = b . getSelection ( ) , g = n . createBookmarks ( ) , k = c . getDirection ( 1 ) , m = c . getAttribute ( "class" ) , r = c . getAttribute ( "style" ) , q = e . getDirection ( 1 ) != k ; b = b . enterMode != CKEDITOR . ENTER _BR || q || r || m ;
if ( e . is ( "li" ) ) h || p ? ( h && p && a . remove ( ) , c [ p ? "insertAfter" : "insertBefore" ] ( e ) ) : c . breakParent ( e ) ; else { if ( b ) if ( l . block . is ( "li" ) ? ( e = f . createElement ( d == CKEDITOR . ENTER _P ? "p" : "div" ) , q && e . setAttribute ( "dir" , k ) , r && e . setAttribute ( "style" , r ) , m && e . setAttribute ( "class" , m ) , c . moveChildren ( e ) ) : e = l . block , h || p ) e [ h ? "insertBefore " : "insertAfter " ] ( a ) ; else c . breakParent ( a ) , e . insertAfter ( a ) ; else if ( c . appendBogus ( ! 0 ) , h || p ) for ( ; f = c [ h ? "getFirst" : "getLast" ] ( ) ; ) f [ h ? "insertBefore" : "insertAfter" ] ( a ) ; else for ( c . breakParent ( a ) ; f = c . getLast ( ) ; ) f . insertAfter ( a ) ;
c . remove ( ) } n . selectBookmarks ( g ) ; return } if ( c && c . getParent ( ) . is ( "blockquo te") ) { c . breakParent ( c . getParent ( ) ) ; c . getPrevious ( ) . getFirst ( CKEDITOR . dom . walker . invisible ( 1 ) ) || c . getPrevious ( ) . remove ( ) ; c . getNext ( ) . getFirst ( CKEDITOR . dom . walker . invisible ( 1 ) ) || c . getNext ( ) . remove ( ) ; a . moveToElementEditStart ( c ) ; a . select ( ) ; return } } else if ( c && c . is ( "pre" ) && ! m ) { t ( b , d , a , h ) ; return } if ( k = a . splitBlock ( n ) ) { d = k . previousBlock ; c = k . nextBlock ; l = k . wasStartOfBlock ; b = k . wasEndOfBlock ; c ? ( g = c . getParent ( ) , g . is ( "li" ) && ( c . breakParent ( g ) ,
c . move ( c . getNext ( ) , 1 ) ) ) : d && ( g = d . getParent ( ) ) && g . is ( "li " ) && ( d . breakParent ( g ) , g = d . getNext ( ) , a . moveToElementEditStart ( g ) , d . move ( d . getPrevious ( ) ) ) ; if ( l || b ) { if ( d ) { if ( d . is ( "li" ) || ! w . test ( d . getName ( ) ) && ! d . is ( "pre" ) ) e = d . clone ( ) } else c && ( e = c . clone ( ) ) ; e ? h && ! e . is ( "li" ) && e . renameNode ( n ) : g && g . is ( "li" ) ? e = g : ( e = f . createElement ( n ) , d && ( p = d . getDirection ( ) ) && e . setAttribute ( "dir" , p ) ) ; if ( f = k . elementPath ) for ( h = 0 , n = f . elements . length ; h < n ; h ++ ) { g = f . elements [ h ] ; if ( g . equals ( f . block ) || g . equals ( f . blockLimit ) ) break ; CKEDITOR . dtd . $removeEmpty [ g . getName ( ) ] &&
( g = g . clone ( ) , e . moveChildren ( g ) , e . append ( g ) ) } e . appendBogus ( ) ; e . getParent ( ) || a . insertNode ( e ) ; e . is ( "li" ) && e . removeAttribute ( "value" ) ; ! CKEDITOR . env . ie || ! l || b && d . getChildCount ( ) || ( a . moveToElementEditStart ( b ? d : e ) , a . select ( ) ) ; a . moveToElementEditStart ( l && ! b ? c : e ) } else c . is ( "li" ) && ( e = a . clone ( ) , e . selectNodeContents ( c ) , e = new CKEDITOR . dom . walker ( e ) , e . evaluator = function ( a ) { return ! ( A ( a ) || z ( a ) || a . type == CKEDITOR . NODE _ELEMENT && a . getName ( ) in CKEDITOR . dtd . $inline && ! ( a . getName ( ) in CKEDITOR . dtd . $empty ) ) } , ( g = e . next ( ) ) &&
g . type == CKEDITOR . NODE _ELEMENT && g . is ( "ul" , "ol" ) && ( CKEDITOR . env . needsBrFiller ? f . createElement ( "br" ) : f . createText ( " " ) ) . insertBefore ( g ) ) , c && a . moveToElementEditStart ( c ) ; a . select ( ) ; a . scrollIntoView ( ) } } } , enterBr : function ( b , d , a , h ) { if ( a = a || v ( b ) ) { var f = a . document , k = a . checkEndOfBlock ( ) , m = new CKEDITOR . dom . elementPath ( b . getSelection ( ) . getStartElement ( ) ) , l = m . block , c = l && m . block . getName ( ) ; h || "li" != c ? ( ! h && k && w . test ( c ) ? ( k = l . getDirection ( ) ) ? ( f = f . createElement ( "div " ) , f . setAttribute ( "dir" , k ) , f . insertAfter ( l ) , a . setStart ( f ,
0 ) ) : ( f . createElement ( "br" ) . insertAfter ( l ) , CKEDITOR . env . gecko && f . createText ( "" ) . insertAfter ( l ) , a . setStartAt ( l . getNext ( ) , CKEDITOR . env . ie ? CKEDITOR . POSITION _BEFORE _START : CKEDITOR . POSITION _AFTER _START ) ) : ( b = "pre "= =c && CKEDITOR . env . ie && 8 > CKEDITOR . env . version ? f . createText ( "\r " ) : f . createElement ( "b r" ) , a . deleteContents ( ) , a . insertNode ( b ) , CKEDITOR . env . needsBrFiller ? ( f . createText ( " " ) . insertAfter ( b ) , k && ( l || m . blockLimit ) . appendBogus ( ) , b . getNext ( ) . $ . nodeValue = "" , a . setStartAt ( b . getNext ( ) , CKEDITOR . POSITION _AFTER _START ) ) :
a . setStartAt ( b , CKEDITOR . POSITION _AFTER _END ) ) , a . collapse ( ! 0 ) , a . select ( ) , a . scrollIntoView ( ) ) : u ( b , d , a , h ) } } } ; var x = CKEDITOR . plugins . enterkey , t = x . enterBr , u = x . enterBlock , w = /^h[1-6]$/ } ) ( ) ; ( function ( ) { function k ( b , f ) { var g = { } , c = [ ] , e = { nbsp : " " , shy : " " , gt : "\x3e" , lt : "\x3c" , amp : "\x26" , apos : "'" , quot : '"' } ; b = b . replace ( /\b(nbsp|shy|gt|lt|amp|apos|quot)(?:,|$)/g , function ( b , a ) { var d = f ? "\x26" + a + ";" : e [ a ] ; g [ d ] = f ? e [ a ] : "\x26" + a + ";" ; c . push ( d ) ; return "" } ) ; if ( ! f && b ) { b = b . split ( "," ) ; var a = document . createElement ( "div" ) , d ; a . innerHTML = "\x26" + b . join ( ";\x26" ) + ";" ; d = a . innerHTML ; a = null ; for ( a = 0 ; a < d . length ; a ++ ) { var h = d . charAt ( a ) ; g [ h ] = "\x26" + b [ a ] + ";" ; c . push ( h ) } } g . regex = c . join ( f ? "|" : "" ) ; return g } CKEDITOR . plugins . add ( "entities" ,
null } ) ) ; CKEDITOR . dialog . add ( "creatediv" , this . path + "dialogs/div.js" ) ; CKEDITOR . dialog . add ( "editdiv" , this . path + "dialogs/div.js" ) } } } ) ; CKEDITOR . plugins . div = { getSurroundDiv : function ( a , c ) { var b = a . elementPath ( c ) ; return a . elementPath ( b . blockLimit ) . contains ( function ( a ) { return a . is ( "div" ) && ! a . isReadOnly ( ) } , 1 ) } } } ) ( ) ; ( function ( ) { function x ( a , e , b ) { b = a . config . forceEnterMode || b ; if ( "wysiwyg" == a . mode ) { e || ( e = a . activeEnterMode ) ; var g = a . elementPath ( ) ; g && ! g . isContextFor ( "p" ) && ( e = CKEDITOR . ENTER _BR , b = 1 ) ; a . fire ( "saveSnapshot" ) ; e == CKEDITOR . ENTER _BR ? u ( a , e , null , b ) : r ( a , e , null , b ) ; a . fire ( "saveSnapshot" ) } } function y ( a ) { a = a . getSelection ( ) . getRanges ( ! 0 ) ; for ( var e = a . length - 1 ; 0 < e ; e -- ) a [ e ] . deleteContents ( ) ; return a [ 0 ] } function z ( a ) { var e = a . startContainer . getAscendant ( function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && "true" == a . getAttribute ( "contenteditable" ) } ,
! 0 ) ; if ( a . root . equals ( e ) ) return a ; e = new CKEDITOR . dom . range ( e ) ; e . moveToRange ( a ) ; return e } CKEDITOR . plugins . add ( "enterkey" , { init : function ( a ) { a . addCommand ( "enter" , { modes : { wysiwyg : 1 } , editorFocus : ! 1 , exec : function ( a ) { x ( a ) } } ) ; a . addCommand ( "shiftEnter" , { modes : { wysiwyg : 1 } , editorFocus : ! 1 , exec : function ( a ) { x ( a , a . activeShiftEnterMode , 1 ) } } ) ; a . setKeystroke ( [ [ 13 , "enter" ] , [ CKEDITOR . SHIFT + 13 , "shiftEnter" ] ] ) } } ) ; var A = CKEDITOR . dom . walker . whitespaces ( ) , B = CKEDITOR . dom . walker . bookmark ( ) , v , u , r , w ; CKEDITOR . plugins . enterkey =
{ enterBlock : function ( a , e , b , g ) { function m ( a ) { var b ; if ( a === CKEDITOR . ENTER _BR || - 1 === CKEDITOR . tools . indexOf ( [ "td" , "th" ] , p . lastElement . getName ( ) ) || 1 !== p . lastElement . getChildCount ( ) ) return ! 1 ; a = p . lastElement . getChild ( 0 ) . clone ( ! 0 ) ; ( b = a . getBogus ( ) ) && b . remove ( ) ; return a . getText ( ) . length ? ! 1 : ! 0 } if ( b = b || y ( a ) ) { b = z ( b ) ; var h = b . document , n = b . checkStartOfBlock ( ) , f = b . checkEndOfBlock ( ) , p = a . elementPath ( b . startContainer ) , c = p . block , l = e == CKEDITOR . ENTER _DIV ? "div" : "p" , d ; if ( n && f ) { if ( c && ( c . is ( "li" ) || c . getParent ( ) . is ( "li" ) ) ) { c . is ( "li" ) ||
( c = c . getParent ( ) ) ; b = c . getParent ( ) ; d = b . getParent ( ) ; g = ! c . hasPrevious ( ) ; var f = ! c . hasNext ( ) , l = a . getSelection ( ) , n = l . createBookmarks ( ) , k = c . getDirection ( 1 ) , t = c . getAttribute ( "class" ) , q = c . getAttribute ( "style" ) , r = d . getDirection ( 1 ) != k ; a = a . enterMode != CKEDITOR . ENTER _BR || r || q || t ; if ( d . is ( "li" ) ) g || f ? ( g && f && b . remove ( ) , c [ f ? "insertAfter " : "insertBefore " ] ( d ) ) : c . breakParent ( d ) ; else { if ( a ) if ( p . block . is ( "li" ) ? ( d = h . createElement ( e == CKEDITOR . ENTER _P ? "p" : "div" ) , r && d . setAttribute ( "dir" , k ) , q && d . setAttribute ( "style" , q ) , t && d . setAttribute ( "class" ,
t ) , c . moveChildren ( d ) ) : d = p . block , g || f ) d [ g ? "insertBefore" : "insertAf ter "] ( b ) ; else c . breakParent ( b ) , d . insertAfter ( b ) ; else if ( c . appendBogus ( ! 0 ) , g || f ) for ( ; h = c [ g ? "getFirst" : "getLast" ] ( ) ; ) h [ g ? "insertBefore" : "insertAfter" ] ( b ) ; else for ( c . breakParent ( b ) ; h = c . getLast ( ) ; ) h . insertAfter ( b ) ; c . remove ( ) } l . selectBookmarks ( n ) ; return } if ( c && c . getParent ( ) . is ( "blockquote" ) ) { c . breakParent ( c . getParent ( ) ) ; c . getPrevious ( ) . getFirst ( CKEDITOR . dom . walker . invisible ( 1 ) ) || c . getPrevious ( ) . remove ( ) ; c . getNext ( ) . getFirst ( CKEDITOR . dom . walker . invisible ( 1 ) ) ||
c . getNext ( ) . remove ( ) ; b . moveToElementEditStart ( c ) ; b . select ( ) ; return } } else if ( c && c . is ( "pre " ) && ! f ) { u ( a , e , b , g ) ; return } if ( q = b . splitBlock ( l ) ) { a = q . previousBlock ; c = q . nextBlock ; n = q . wasStartOfBlock ; f = q . wasEndOfBlock ; c ? ( k = c . getParent ( ) , k . is ( "li" ) && ( c . breakParent ( k ) , c . move ( c . getNext ( ) , 1 ) ) ) : a && ( k = a . getParent ( ) ) && k . is ( "li" ) && ( a . breakParent ( k ) , k = a . getNext ( ) , b . moveToElementEditStart ( k ) , a . move ( a . getPrevious ( ) ) ) ; if ( n || f ) if ( m ( e ) ) b . moveToElementEditStart ( b . getTouchedStartNode ( ) ) ; else { if ( a ) { if ( a . is ( "li" ) || ! w . test ( a . getName ( ) ) &&
! a . is ( "pre" ) ) d = a . clone ( ) } else c && ( d = c . clone ( ) ) ; d ? g && ! d . is ( "li" ) && d . renameNode ( l ) : k && k . is ( "li" ) ? d = k : ( d = h . createElement ( l ) , a && ( t = a . getDirection ( ) ) && d . setAttribute ( "dir" , t ) ) ; if ( h = q . elementPath ) for ( e = 0 , g = h . elements . length ; e < g ; e ++ ) { l = h . elements [ e ] ; if ( l . equals ( h . block ) || l . equals ( h . blockLimit ) ) break ; CKEDITOR . dtd . $removeEmpty [ l . getName ( ) ] && ( l = l . clone ( ) , d . moveChildren ( l ) , d . append ( l ) ) } d . appendBogus ( ) ; d . getParent ( ) || b . insertNode ( d ) ; d . is ( "li" ) && d . removeAttribute ( "value" ) ; ! CKEDITOR . env . ie || ! n || f && a . getChildCount ( ) ||
( b . moveToElementEditStart ( f ? a : d ) , b . select ( ) ) ; b . moveToElementEditStart ( n && ! f ? c : d ) } else c . is ( "li" ) && ( d = b . clone ( ) , d . selectNodeContents ( c ) , d = new CKEDITOR . dom . walker ( d ) , d . evaluator = function ( a ) { return ! ( B ( a ) || A ( a ) || a . type == CKEDITOR . NODE _ELEMENT && a . getName ( ) in CKEDITOR . dtd . $inline && ! ( a . getName ( ) in CKEDITOR . dtd . $empty ) ) } , ( k = d . next ( ) ) && k . type == CKEDITOR . NODE _ELEMENT && k . is ( "ul" , "ol" ) && ( CKEDITOR . env . needsBrFiller ? h . createElement ( "br" ) : h . createText ( " " ) ) . insertBefore ( k ) ) , c && b . moveToElementEditStart ( c ) ; b . select ( ) ;
b . scrollIntoView ( ) } } } , enterBr : function ( a , e , b , g ) { if ( b = b || y ( a ) ) { var m = b . document , h = b . checkEndOfBlock ( ) , n = new CKEDITOR . dom . elementPath ( a . getSelection ( ) . getStartElement ( ) ) , f = n . block , p = f && n . block . getName ( ) ; g || "li "! =p ? ( ! g && h && w . test ( p ) ? ( h = f . getDirection ( ) ) ? ( m = m . createElement ( "div " ) , m . setAttribute ( "di r" , h ) , m . insertAfter ( f ) , b . setStart ( m , 0 ) ) : ( m . createElement ( "br " ) . insertAfter ( f ) , CKEDITOR . env . gecko && m . createText ( "" ) . insertAfter ( f ) , b . setStartAt ( f . getNext ( ) , CKEDITOR . env . ie ? CKEDITOR . POSITION _BEFORE _START : CKEDITOR . POSITION _AFTER _START ) ) :
( a = "pre" == p && CKEDITOR . env . ie && 8 > CKEDITOR . env . version ? m . createText ( "\r" ) : m . createElement ( "br" ) , b . deleteContents ( ) , b . insertNode ( a ) , CKEDITOR . env . needsBrFiller ? ( m . createText ( " " ) . insertAfter ( a ) , h && ( f || n . blockLimit ) . appendBogus ( ) , a . getNext ( ) . $ . nodeValue = "" , b . setStartAt ( a . getNext ( ) , CKEDITOR . POSITION _AFTER _START ) ) : b . setStartAt ( a , CKEDITOR . POSITION _AFTER _END ) ) , b . collapse ( ! 0 ) , b . select ( ) , b . scrollIntoView ( ) ) : r ( a , e , b , g ) } } } ; v = CKEDITOR . plugins . enterkey ; u = v . enterBr ; r = v . enterBlock ; w = /^h[1-6]$/ } ) ( ) ; ( function ( ) { function k ( b , f ) { var g = { } , c = [ ] , e = { nbsp : " " , shy : " " , gt : "\x3e" , lt : "\x3c" , amp : "\x26" , apos : "'" , quot : '"' } ; b = b . replace ( /\b(nbsp|shy|gt|lt|amp|apos|quot)(?:,|$)/g , function ( b , a ) { var d = f ? "\x26" + a + ";" : e [ a ] ; g [ d ] = f ? e [ a ] : "\x26" + a + ";" ; c . push ( d ) ; return "" } ) ; if ( ! f && b ) { b = b . split ( "," ) ; var a = document . createElement ( "div" ) , d ; a . innerHTML = "\x26" + b . join ( ";\x26" ) + ";" ; d = a . innerHTML ; a = null ; for ( a = 0 ; a < d . length ; a ++ ) { var h = d . charAt ( a ) ; g [ h ] = "\x26" + b [ a ] + ";" ; c . push ( h ) } } g . regex = c . join ( f ? "|" : "" ) ; return g } CKEDITOR . plugins . add ( "entities" ,
{ afterInit : function ( b ) { function f ( a ) { return h [ a ] } function g ( b ) { return "force" != c . entities _processNumerical && a [ b ] ? a [ b ] : "\x26#" + b . charCodeAt ( 0 ) + ";" } var c = b . config ; if ( b = ( b = b . dataProcessor ) && b . htmlFilter ) { var e = [ ] ; ! 1 !== c . basicEntities && e . push ( "nbsp,gt,lt,amp" ) ; c . entities && ( e . length && e . push ( "quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,euro" ) ,
c . entities _latin && e . push ( "Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,OElig,oelig,Scaron,scaron,Yuml" ) , c . entities _greek && e . push ( "Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,upsih,piv" ) ,
c . entities _additional && e . push ( c . entities _additional ) ) ; var a = k ( e . join ( "," ) ) , d = a . regex ? "[" + a . regex + "]" : "a^" ; delete a . regex ; c . entities && c . entities _processNumerical && ( d = "[^ -~]|" + d ) ; var d = new RegExp ( d , "g" ) , h = k ( "nbsp,gt,lt,amp,shy" , ! 0 ) , l = new RegExp ( h . regex , "g" ) ; b . addRules ( { text : function ( a ) { return a . replace ( l , f ) . replace ( d , g ) } } , { applyToAll : ! 0 , excludeNestedEditable : ! 0 } ) } } } ) } ) ( ) ; CKEDITOR . config . basicEntities = ! 0 ; CKEDITOR . config . entities = ! 0 ; CKEDITOR . config . entities _latin = ! 0 ; CKEDITOR . config . entities _greek = ! 0 ;
@@ -842,16 +842,16 @@ f,this);a.on("selectionChange",f,this);!this.readOnly&&a.on("readOnly",f,this);v
e . onHide = function ( b ) { this . element . removeClass ( h ) ; d . setState ( d . modes && d . modes [ a . mode ] ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED ) ; d . _ . on = 0 ; if ( ! b && d . onClose ) d . onClose ( ) } ; e . onEscape = function ( ) { e . hide ( 1 ) } ; b . onClick = function ( a , b ) { d . onClick && d . onClick . call ( d , a , b ) ; e . hide ( ) } ; this . _ . panel = e ; this . _ . list = b ; e . getBlock ( this . id ) . onHide = function ( ) { d . _ . on = 0 ; d . setState ( CKEDITOR . TRISTATE _OFF ) } ; this . init && this . init ( ) } } , setValue : function ( a , b ) { this . _ . value = a ; var c = this . document . getById ( "cke_" + this . id + "_text" ) ; c &&
( a || b ? c . removeClass ( "cke_combo_inlinelabel" ) : ( b = this . label , c . addClass ( "cke_combo_inlinelabel" ) ) , c . setText ( "undefined" != typeof b ? b : a ) ) } , getValue : function ( ) { return this . _ . value || "" } , unmarkAll : function ( ) { this . _ . list . unmarkAll ( ) } , mark : function ( a ) { this . _ . list . mark ( a ) } , hideItem : function ( a ) { this . _ . list . hideItem ( a ) } , hideGroup : function ( a ) { this . _ . list . hideGroup ( a ) } , showAll : function ( ) { this . _ . list . showAll ( ) } , add : function ( a , b , c ) { this . _ . items [ a ] = c || a ; this . _ . list . add ( a , b , c ) } , startGroup : function ( a ) { this . _ . list . startGroup ( a ) } ,
commit : function ( ) { this . _ . committed || ( this . _ . list . commit ( ) , this . _ . committed = 1 , CKEDITOR . ui . fire ( "ready" , this ) ) ; this . _ . committed = 1 } , setState : function ( a ) { if ( this . _ . state != a ) { var b = this . document . getById ( "cke_" + this . id ) ; b . setState ( a , "cke_combo" ) ; a == CKEDITOR . TRISTATE _DISABLED ? b . setAttribute ( "aria-disabled" , ! 0 ) : b . removeAttribute ( "aria-disabled" ) ; this . _ . state = a } } , getState : function ( ) { return this . _ . state } , enable : function ( ) { this . _ . state == CKEDITOR . TRISTATE _DISABLED && this . setState ( this . _ . lastState ) } , disable : function ( ) { this . _ . state !=
CKEDITOR . TRISTATE _DISABLED && ( this . _ . lastState = this . _ . state , this . setState ( CKEDITOR . TRISTATE _DISABLED ) ) } } , statics : { handler : { create : function ( a ) { return new CKEDITOR . ui . richCombo ( a ) } } } } ) ; CKEDITOR . ui . prototype . addRichCombo = function ( a , b ) { this . add ( a , CKEDITOR . UI _RICHCOMBO , b ) } } ) ( ) ; ( function ( ) { function p ( b , f , e , d , r , p , v , x ) { var y = b . config , t = new CKEDITOR . style ( v ) , g = r . split ( ";" ) ; r = [ ] ; for ( var k = { } , l = 0 ; l < g . length ; l ++ ) { var m = g [ l ] ; if ( m ) { var m = m . split ( "/" ) , w = { } , q = g [ l ] = m [ 0 ] ; w [ e ] = r [ l ] = m [ 1 ] || q ; k [ q ] = new CKEDITOR . style ( v , w ) ; k [ q ] . _ . definition . name = q } else g . splice ( l -- , 1 ) } b . ui . addRichCombo ( f , { label : d . label , title : d . panelTitle , toolbar : "styles," + x , defaultValue : "cke-default" , allowedContent : t , requiredContent : t , contentTransformations : [ [ { element : "font" , check : "span" , left : function ( a ) { return ! ! a . attributes . size ||
! ! a . attributes . align || ! ! a . attributes . face } , right : function ( a ) { var b = " x-small small medium large x-large xx-large 48px" . split ( " " ) ; a . name = "span" ; a . attributes . size && ( a . styles [ "font-size" ] = b [ a . attributes . size ] , delete a . attributes . size ) ; a . attributes . align && ( a . styles [ "text-align" ] = a . attributes . align , delete a . attributes . align ) ; a . attributes . face && ( a . styles [ "font-family" ] = a . attributes . face , delete a . attributes . face ) } } ] ] , panel : { css : [ CKEDITOR . skin . getPath ( "editor" ) ] . concat ( y . contentsCss ) , multiSelect : ! 1 , attributes : { "aria-label" : d . panelTitle } } ,
init : function ( ) { var a ; a = "(" + b . lang . common . optionDefault + ")" ; this . startGroup ( d . panelTitle ) ; this . add ( this . defaultValue , a , a ) ; for ( var c = 0 ; c < g . length ; c ++ ) a = g [ c ] , this . add ( a , k [ a ] . buildPreview ( ) , a ) } , onClick : function ( a ) { b . focus ( ) ; b . fire ( "saveSnapshot" ) ; var c = this . getValue ( ) , f = k [ a ] , e , n , h , d , g ; if ( c && a != c ) if ( e = k [ c ] , c = b . getSelection ( ) . getRanges ( ) [ 0 ] , c . collapsed ) { if ( n = b . elementPath ( ) , h = n . contains ( function ( a ) { return e . checkElementRemovable ( a ) } ) ) { d = c . checkBoundaryOfElement ( h , CKEDITOR . START ) ; g = c . checkBoundaryOfElement ( h ,
CKEDITOR . END ) ; if ( d && g ) { for ( d = c . createBookmark ( ) ; n = h . getFirst ( ) ; ) n . insertBefore ( h ) ; h . remove ( ) ; c . moveToBookmark ( d ) } else d || g ? c . moveToPosition ( h , d ? CKEDITOR . POSITION _BEFORE _START : CKEDITOR . POSITION _AFTER _END ) : ( c . splitElement ( h ) , c . moveToPosition ( h , CKEDITOR . POSITION _AFTER _END ) ) , u ( c , n . elements . slice ( ) , h ) ; b . getSelection ( ) . selectRanges ( [ c ] ) } } else b . removeStyle ( e ) ; a === this . defaultValue ? e && b . removeStyle ( e ) : b . applyStyle ( f ) ; b . fire ( "saveSnapshot" ) } , onRender : function ( ) { b . on ( "selectionChange" , function ( a ) { var c = this . getValue ( ) ;
a = a . data . path . elements ; for ( var d = 0 , f ; d < a . length ; d ++ ) { f = a [ d ] ; for ( var e in k ) if ( k [ e ] . checkElementMatch ( f , ! 0 , b ) ) { e != c && this . setValue ( e ) ; return } } this . setValue ( "" , p ) } , this ) } , refresh : function ( ) { b . activeFilter . check ( t ) || this . setState ( CKEDITOR . TRISTATE _DISABLED ) } } ) } function u ( b , f , e ) { var d = f . pop ( ) ; if ( d ) { if ( e ) return u ( b , f , d . equals ( e ) ? null : e ) ; e = d . clone ( ) ; b . insertNode ( e ) ; b . moveToPosition ( e , CKEDITOR . POSITION _AFTER _START ) ; u ( b , f ) } } CKEDITOR . plugins . add ( "font" , { requires : "richcombo" , init : function ( b ) { var f = b . config ;
p ( b , "Font" , "family" , b . lang . font , f . font _names , f . font _defaultLabel , f . font _style , 30 ) ; p ( b , "FontSize" , "size" , b . lang . font . fontSize , f . fontSize _sizes , f . fontSize _defaultLabel , f . fontSize _style , 40 ) } } ) } ) ( ) ; CKEDITOR . config . font _names = "Arial/Arial, Helvetica, sans-serif;Comic Sans MS/Comic Sans MS, cursive;Courier New/Courier New, Courier, monospace;Georgia/Georgia, serif;Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;Tahoma/Tahoma, Geneva, sans-serif;Times New Roman/Times New Roman, Times, serif;Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;Verdana/Verdana, Geneva, sans-serif" ;
CKEDITOR . TRISTATE _DISABLED && ( this . _ . lastState = this . _ . state , this . setState ( CKEDITOR . TRISTATE _DISABLED ) ) } } , statics : { handler : { create : function ( a ) { return new CKEDITOR . ui . richCombo ( a ) } } } } ) ; CKEDITOR . ui . prototype . addRichCombo = function ( a , b ) { this . add ( a , CKEDITOR . UI _RICHCOMBO , b ) } } ) ( ) ; ( function ( ) { function p ( b , f , e , d , r , p , t , x ) { var y = b . config , u = new CKEDITOR . style ( t ) , g = r . split ( ";" ) ; r = [ ] ; for ( var k = { } , l = 0 ; l < g . length ; l ++ ) { var m = g [ l ] ; if ( m ) { var m = m . split ( "/" ) , w = { } , q = g [ l ] = m [ 0 ] ; w [ e ] = r [ l ] = m [ 1 ] || q ; k [ q ] = new CKEDITOR . style ( t , w ) ; k [ q ] . _ . definition . name = q } else g . splice ( l -- , 1 ) } b . ui . addRichCombo ( f , { label : d . label , title : d . panelTitle , toolbar : "styles," + x , defaultValue : "cke-default" , allowedContent : u , requiredContent : u , contentTransformations : "span" === t . element ? [ [ { element : "font" , check : "span" , left : function ( a ) { return ! ! a . attributes . size ||
! ! a . attributes . align || ! ! a . attributes . face } , right : function ( a ) { var b = " x-small small medium large x-large xx-large 48px" . split ( " " ) ; a . name = "span" ; a . attributes . size && ( a . styles [ "font-size" ] = b [ a . attributes . size ] , delete a . attributes . size ) ; a . attributes . align && ( a . styles [ "text-align" ] = a . attributes . align , delete a . attributes . align ) ; a . attributes . face && ( a . styles [ "font-family" ] = a . attributes . face , delete a . attributes . face ) } } ] ] : null , panel : { css : [ CKEDITOR . skin . getPath ( "editor" ) ] . concat ( y . contentsCss ) , multiSelect : ! 1 ,
attributes : { "aria-label" : d . panelTitle } } , init : function ( ) { var a ; a = "(" + b . lang . common . optionDefault + ")" ; this . startGroup ( d . panelTitle ) ; this . add ( this . defaultValue , a , a ) ; for ( var c = 0 ; c < g . length ; c ++ ) a = g [ c ] , this . add ( a , k [ a ] . buildPreview ( ) , a ) } , onClick : function ( a ) { b . focus ( ) ; b . fire ( "saveSnapshot" ) ; var c = this . getValue ( ) , f = k [ a ] , e , n , h , d , g ; if ( c && a != c ) if ( e = k [ c ] , c = b . getSelection ( ) . getRanges ( ) [ 0 ] , c . collapsed ) { if ( n = b . elementPath ( ) , h = n . contains ( function ( a ) { return e . checkElementRemovable ( a ) } ) ) { d = c . checkBoundaryOfElement ( h ,
CKEDITOR . START ) ; g = c . checkBoundaryOfElement ( h , CKEDITOR . END ) ; if ( d && g ) { for ( d = c . createBookmark ( ) ; n = h . getFirst ( ) ; ) n . insertBefore ( h ) ; h . remove ( ) ; c . moveToBookmark ( d ) } else d || g ? c . moveToPosition ( h , d ? CKEDITOR . POSITION _BEFORE _START : CKEDITOR . POSITION _AFTER _END ) : ( c . splitElement ( h ) , c . moveToPosition ( h , CKEDITOR . POSITION _AFTER _END ) ) , v ( c , n . elements . slice ( ) , h ) ; b . getSelection ( ) . selectRanges ( [ c ] ) } } else b . removeStyle ( e ) ; a === this . defaultValue ? e && b . removeStyle ( e ) : b . applyStyle ( f ) ; b . fire ( "saveSnapshot" ) } , onRender : function ( ) { b . on ( "selectionChange" ,
function ( a ) { var c = this . getValue ( ) ; a = a . data . path . elements ; for ( var d = 0 , f ; d < a . length ; d ++ ) { f = a [ d ] ; for ( var e in k ) if ( k [ e ] . checkElementMatch ( f , ! 0 , b ) ) { e != c && this . setValue ( e ) ; return } } this . setValue ( "" , p ) } , this ) } , refresh : function ( ) { b . activeFilter . check ( u ) || this . setState ( CKEDITOR . TRISTATE _DISABLED ) } } ) } function v ( b , f , e ) { var d = f . pop ( ) ; if ( d ) { if ( e ) return v ( b , f , d . equals ( e ) ? null : e ) ; e = d . clone ( ) ; b . insertNode ( e ) ; b . moveToPosition ( e , CKEDITOR . POSITION _AFTER _START ) ; v ( b , f ) } } CKEDITOR . plugins . add ( "font" , { requires : "richcombo" ,
init : function ( b ) { var f = b . config ; p ( b , "Font" , "family" , b . lang . font , f . font _names , f . font _defaultLabel , f . font _style , 30 ) ; p ( b , "FontSize" , "size" , b . lang . font . fontSize , f . fontSize _sizes , f . fontSize _defaultLabel , f . fontSize _style , 40 ) } } ) } ) ( ) ; CKEDITOR . config . font _names = "Arial/Arial, Helvetica, sans-serif;Comic Sans MS/Comic Sans MS, cursive;Courier New/Courier New, Courier, monospace;Georgia/Georgia, serif;Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;Tahoma/Tahoma, Geneva, sans-serif;Times New Roman/Times New Roman, Times, serif;Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;Verdana/Verdana, Geneva, sans-serif" ;
CKEDITOR . config . font _defaultLabel = "" ; CKEDITOR . config . font _style = { element : "span" , styles : { "font-family" : "#(family)" } , overrides : [ { element : "font" , attributes : { face : null } } ] } ; CKEDITOR . config . fontSize _sizes = "8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px" ; CKEDITOR . config . fontSize _defaultLabel = "" ; CKEDITOR . config . fontSize _style = { element : "span" , styles : { "font-size" : "#(size)" } , overrides : [ { element : "font" , attributes : { size : null } } ] } ; CKEDITOR . plugins . add ( "format" , { requires : "richcombo" , init : function ( a ) { if ( ! a . blockless ) { for ( var f = a . config , c = a . lang . format , l = f . format _tags . split ( ";" ) , d = { } , m = 0 , n = [ ] , g = 0 ; g < l . length ; g ++ ) { var h = l [ g ] , k = new CKEDITOR . style ( f [ "format_" + h ] ) ; if ( ! a . filter . customConfig || a . filter . check ( k ) ) m ++ , d [ h ] = k , d [ h ] . _ . enterMode = a . config . enterMode , n . push ( k ) } 0 !== m && a . ui . addRichCombo ( "Format" , { label : c . label , title : c . panelTitle , toolbar : "styles,20" , allowedContent : n , panel : { css : [ CKEDITOR . skin . getPath ( "editor" ) ] . concat ( f . contentsCss ) ,
multiSelect : ! 1 , attributes : { "aria-label" : c . panelTitle } } , init : function ( ) { this . startGroup ( c . panelTitle ) ; for ( var a in d ) { var e = c [ "tag_" + a ] ; this . add ( a , d [ a ] . buildPreview ( e ) , e ) } } , onClick : function ( b ) { a . focus ( ) ; a . fire ( "saveSnapshot" ) ; b = d [ b ] ; var e = a . elementPath ( ) ; b . checkActive ( e , a ) || a . applyStyle ( b ) ; setTimeout ( function ( ) { a . fire ( "saveSnapshot" ) } , 0 ) } , onRender : function ( ) { a . on ( "selectionChange" , function ( b ) { var e = this . getValue ( ) ; b = b . data . path ; this . refresh ( ) ; for ( var c in d ) if ( d [ c ] . checkActive ( b , a ) ) { c != e && this . setValue ( c ,
a . lang . format [ "tag_" + c ] ) ; return } this . setValue ( "" ) } , this ) } , onOpen : function ( ) { this . showAll ( ) ; for ( var b in d ) a . activeFilter . check ( d [ b ] ) || this . hideItem ( b ) } , refresh : function ( ) { var b = a . elementPath ( ) ; if ( b ) { if ( b . isContextFor ( "p" ) ) for ( var c in d ) if ( a . activeFilter . check ( d [ c ] ) ) return ; this . setState ( CKEDITOR . TRISTATE _DISABLED ) } } } ) } } } ) ; CKEDITOR . config . format _tags = "p;h1;h2;h3;h4;h5;h6;pre;address;div" ; CKEDITOR . config . format _p = { element : "p" } ; CKEDITOR . config . format _div = { element : "div" } ; CKEDITOR . config . format _pre = { element : "pre" } ;
CKEDITOR . config . format _address = { element : "address" } ; CKEDITOR . config . format _h1 = { element : "h1" } ; CKEDITOR . config . format _h2 = { element : "h2" } ; CKEDITOR . config . format _h3 = { element : "h3" } ; CKEDITOR . config . format _h4 = { element : "h4" } ; CKEDITOR . config . format _h5 = { element : "h5" } ; CKEDITOR . config . format _h6 = { element : "h6" } ; ( function ( ) { function e ( b , a ) { a || ( a = b . getSelection ( ) . getSelectedElement ( ) ) ; if ( a && a . is ( "img" ) && ! a . data ( "cke-realelement" ) && ! a . isReadOnly ( ) ) return a } function f ( b ) { var a = b . getStyle ( "float" ) ; if ( "inherit" == a || "none" == a ) a = 0 ; a || ( a = b . getAttribute ( "align" ) ) ; return a } CKEDITOR . plugins . add ( "image" , { requires : "dialog" , init : function ( b ) { if ( ! b . plugins . image2 ) { CKEDITOR . dialog . add ( "image" , this . path + "dialogs/image.js" ) ; var a = "img[alt,!src]{border-style,border-width,float,height,margin,margin-bottom,margin-left,margin-right,margin-top,width}" ;
CKEDITOR . config . format _address = { element : "address" } ; CKEDITOR . config . format _h1 = { element : "h1" } ; CKEDITOR . config . format _h2 = { element : "h2" } ; CKEDITOR . config . format _h3 = { element : "h3" } ; CKEDITOR . config . format _h4 = { element : "h4" } ; CKEDITOR . config . format _h5 = { element : "h5" } ; CKEDITOR . config . format _h6 = { element : "h6" } ; ( function ( ) { function e ( b , a ) { a || ( a = b . getSelection ( ) . getSelectedElement ( ) ) ; if ( a && a . is ( "img" ) && ! a . data ( "cke-realelement" ) && ! a . isReadOnly ( ) ) return a } function f ( b ) { var a = b . getStyle ( "float" ) ; if ( "inherit" == a || "none" == a ) a = 0 ; a || ( a = b . getAttribute ( "align" ) ) ; return a } CKEDITOR . plugins . add ( "image" , { requires : "dialog" , init : function ( b ) { if ( ! b . plugins . detectConflict ( "image" , [ "easyimage" , "image2" ] ) ) { CKEDITOR . dialog . add ( "image" , this . path + "dialogs/image.js" ) ; var a = "img[alt,!src]{border-style,border-width,float,height,margin,margin-bottom,margin-left,margin-right,margin-top,width}" ;
CKEDITOR . dialog . isTabEnabled ( b , "image" , "advanced" ) && ( a = "img[alt,dir,id,lang,longdesc,!src,title]{*}(*)" ) ; b . addCommand ( "image" , new CKEDITOR . dialogCommand ( "image" , { allowedContent : a , requiredContent : "img[alt,src]" , contentTransformations : [ [ "img{width}: sizeToStyle" , "img[width]: sizeToAttribute" ] , [ "img{float}: alignmentToStyle" , "img[align]: alignmentToAttribute" ] ] } ) ) ; b . ui . addButton && b . ui . addButton ( "Image" , { label : b . lang . common . image , command : "image" , toolbar : "insert,10" } ) ; b . on ( "doubleclick" , function ( b ) { var a =
b . data . element ; ! a . is ( "img" ) || a . data ( "cke-realelement" ) || a . isReadOnly ( ) || ( b . data . dialog = "image" ) } ) ; b . addMenuItems && b . addMenuItems ( { image : { label : b . lang . image . menu , command : "image" , group : "image" } } ) ; b . contextMenu && b . contextMenu . addListener ( function ( a ) { if ( e ( b , a ) ) return { image : CKEDITOR . TRISTATE _OFF } } ) } } , afterInit : function ( b ) { function a ( a ) { var d = b . getCommand ( "justify" + a ) ; if ( d ) { if ( "left" == a || "right" == a ) d . on ( "exec" , function ( d ) { var c = e ( b ) , g ; c && ( g = f ( c ) , g == a ? ( c . removeStyle ( "float" ) , a == f ( c ) && c . removeAttribute ( "align" ) ) :
c . setStyle ( "float" , a ) , d . cancel ( ) ) } ) ; d . on ( "refresh" , function ( d ) { var c = e ( b ) ; c && ( c = f ( c ) , this . setState ( c == a ? CKEDITOR . TRISTATE _ON : "right" == a || "left" == a ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED ) , d . cancel ( ) ) } ) } } b . plugins . image2 || ( a ( "left" ) , a ( "right" ) , a ( "center" ) , a ( "block" ) ) } } ) } ) ( ) ; CKEDITOR . config . image _removeLinkByEmptyURL = ! 0 ; ( function ( ) { function m ( a , b ) { var e , f ; b . on ( "refresh" , function ( a ) { var b = [ k ] , c ; for ( c in a . data . states ) b . push ( a . data . states [ c ] ) ; this . setState ( CKEDITOR . tools . search ( b , p ) ? p : k ) } , b , null , 100 ) ; b . on ( "exec" , function ( b ) { e = a . getSelection ( ) ; f = e . createBookmarks ( 1 ) ; b . data || ( b . data = { } ) ; b . data . done = ! 1 } , b , null , 0 ) ; b . on ( "exec" , function ( ) { a . forceNextSelectionCheck ( ) ; e . selectBookmarks ( f ) } , b , null , 100 ) } var k = CKEDITOR . TRISTATE _DISABLED , p = CKEDITOR . TRISTATE _OFF ; CKEDITOR . plugins . add ( "indent" , { init : function ( a ) { var b = CKEDITOR . plugins . indent . genericDefinition ;
@@ -926,7 +926,7 @@ a==13||a==32||a>=46&&a<=90||a>=96&&a<=111||a>=186&&a<=222||a==229)&&b()}});a.doc
0 !== b . length && ( CKEDITOR . tools . array . forEach ( b , function ( a ) { d . push ( a . type ? "data:" + a . type + ";base64," + CKEDITOR . tools . convertBytesToBase64 ( CKEDITOR . tools . convertHexStringToBytes ( a . hex ) ) : null ) } , this ) , c . length === d . length ) ) ) ) for ( b = 0 ; b < c . length ; b ++ ) 0 === c [ b ] . indexOf ( "file://" ) && d [ b ] && ( a . data . dataValue = a . data . dataValue . replace ( c [ b ] , d [ b ] ) ) } var e = 0 , h = this . path , m = void 0 === a . config . pasteFromWord _inlineImages ? ! 0 : a . config . pasteFromWord _inlineImages ; a . addCommand ( "pastefromword" , { canUndo : ! 1 , async : ! 0 , exec : function ( a ,
b ) { e = 1 ; a . execCommand ( "paste" , { type : "html" , notification : b && "undefined" !== typeof b . notification ? b . notification : ! 0 } ) } } ) ; CKEDITOR . plugins . clipboard . addPasteButton ( a , "PasteFromWord" , { label : a . lang . pastefromword . toolbar , command : "pastefromword" , toolbar : "clipboard,50" } ) ; a . on ( "paste" , function ( f ) { var b = f . data , c = CKEDITOR . plugins . clipboard . isCustomDataTypesSupported ? b . dataTransfer . getData ( "text/html" , ! 0 ) : null , d = CKEDITOR . plugins . clipboard . isCustomDataTypesSupported ? b . dataTransfer . getData ( "text/rtf" ) : null , c = c ||
b . dataValue , g = { dataValue : c , dataTransfer : { "text/rtf" : d } } , d = /(class=\"?Mso|style=(?:\"|\')[^\"]*?\bmso\-|w:WordDocument|<o:\w+>|<\/font>)/ , d = /<meta\s*name=(?:\"|\')?generator(?:\"|\')?\s*content=(?:\"|\')?microsoft/gi . test ( c ) || d . test ( c ) ; if ( c && ( e || d ) && ( ! 1 !== a . fire ( "pasteFromWord" , g ) || e ) ) { b . dontFilter = ! 0 ; var k = l ( a , h , function ( ) { if ( k ) a . fire ( "paste" , b ) ; else if ( ! a . config . pasteFromWordPromptCleanup || e || confirm ( a . lang . pastefromword . confirmCleanup ) ) g . dataValue = CKEDITOR . cleanWord ( g . dataValue , a ) , a . fire ( "afterPasteFromWord" ,
g ) , b . dataValue = g . dataValue , ! 0 === a . config . forcePasteAsPlainText ? b . type = "text" : CKEDITOR . env . ie && "allow-word" = ==a . config . forcePasteAsPlainText && ( b . type = "html" ) ; e = 0 } ) ; k && f . cancel ( ) } } , null , null , 3 ) ; if ( CKEDITOR . plugins . clipboard . isCustomDataTypesSupported && m ) a . on ( "afterPasteFromWord" , f ) } } ) } ) ( ) ; ( 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" ,
g ) , b . dataValue = g . dataValue , ! 0 === a . config . forcePasteAsPlainText ? b . type = "text" : CKEDITOR . plugins . clipboard . isCustomCopyCutSupported || "allow-word" ! ==a . config . forcePasteAsPlainText || ( b . type = "html" ) ; e = 0 } ) ; k && f . cancel ( ) } } , null , null , 3 ) ; if ( CKEDITOR . plugins . clipboard . isCustomDataTypesSupported && m ) a . on ( "afterPasteFromWord" , f ) } } ) } ) ( ) ; ( 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 ) { CKEDITOR . plugins . scayt . onLoadTimestamp = ( new Date ) . getTime ( ) ; "moono-lisa" == ( CKEDITOR . skinName || a . config . skin ) && CKEDITOR . document . appendStyleSheet ( this . path + "skins/" + CKEDITOR . skin . name + "/scayt.css" ) ; CKEDITOR . document . appendStyleSheet ( 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 :
@@ -1062,13 +1062,13 @@ a.hide();this.hidden[d]=a;delete this.visible[d]},showLine:function(a){var d=a.g
break } c || this . showLine ( c = this . addLine ( ) ) ; c . setCustomData ( "hash" , this . hash ) ; this . visible [ c . getUniqueId ( ) ] = c ; c . setStyles ( b ) ; d && d ( c ) } } , getStyle : function ( a , d ) { var b = this . relations [ a ] , c = this . locations [ a ] [ d ] , e = { } ; e . width = b . siblingRect ? Math . max ( b . siblingRect . width , b . elementRect . width ) : b . elementRect . width ; e . top = this . inline ? c + this . winTopScroll . y - this . rect . relativeY : this . rect . top + this . winTopScroll . y + c ; if ( e . top - this . winTopScroll . y < this . rect . top || e . top - this . winTopScroll . y > this . rect . bottom ) return ! 1 ; this . inline ?
e . left = b . elementRect . left - this . rect . relativeX : ( 0 < b . elementRect . left ? e . left = this . rect . left + b . elementRect . left : ( e . width += b . elementRect . left , e . left = this . rect . left ) , 0 < ( b = e . left + e . width - ( this . rect . left + this . winPane . width ) ) && ( e . width -= b ) ) ; e . left += this . winTopScroll . x ; for ( var g in e ) e [ g ] = CKEDITOR . tools . cssLength ( e [ g ] ) ; return e } , addLine : function ( ) { var a = CKEDITOR . dom . element . createFromHtml ( this . lineTpl ) ; a . appendTo ( this . container ) ; return a } , prepare : function ( a , d ) { this . relations = a ; this . locations = d ; this . hash = Math . random ( ) } ,
cleanup : function ( ) { var a , d ; for ( d in this . visible ) a = this . visible [ d ] , a . getCustomData ( "hash" ) !== this . hash && this . hideLine ( a ) } , queryViewport : function ( ) { this . winPane = this . win . getViewPaneSize ( ) ; this . winTopScroll = this . winTop . getScrollPosition ( ) ; this . winTopPane = this . winTop . getViewPaneSize ( ) ; this . rect = this . getClientRect ( this . inline ? this . editable : this . frame ) } , getClientRect : function ( a ) { a = a . getClientRect ( ) ; var d = this . container . getDocumentPosition ( ) , b = this . container . getComputedStyle ( "position" ) ; a . relativeX = a . relativeY =
0 ; "static" != b && ( a . relativeY = d . y , a . relativeX = d . x , a . top -= a . relativeY , a . bottom -= a . relativeY , a . left -= a . relativeX , a . right -= a . relativeX ) ; return a } } ; var r = { left : 1 , right : 1 , center : 1 } , u = { absolute : 1 , fixed : 1 } ; CKEDITOR . plugins . lineutils = { finder : m , locator : n , liner : p } } ) ( ) ; ( function ( ) { function f ( a ) { return a . getName && ! a . hasAttribute ( "data-cke-temp" ) } CKEDITOR . plugins . add ( "widgetselection" , { init : function ( a ) { if ( CKEDITOR . env . webkit ) { var b = CKEDITOR . plugins . widgetselection ; a . on ( "contentDom" , function ( a ) { a = a . editor ; var d = a . document , e = a . editable ( ) ; e . attachListener ( d , "keydown" , function ( a ) { a . data . getKeystroke ( ) == CKEDITOR . CTRL + 65 && CKEDITOR . tools . setTimeout ( function ( ) { b . addFillers ( e ) || b . removeFillers ( e ) } , 0 ) } , null , null , - 1 ) ; a . on ( "selectionCheck" , function ( a ) { b . removeFillers ( a . editor . editable ( ) ) } ) ;
a . on ( "paste" , function ( a ) { a . data . dataValue = b . cleanPasteData ( a . data . dataValue ) } ) ; "selectall" in a . plugins && b . addSelectAllIntegration ( a ) } ) } } } ) ; CKEDITOR . plugins . widgetselection = { startFiller : null , endFiller : null , fillerAttribute : "data-cke-filler-webkit" , fillerContent : "\x26nbsp;" , fillerTagName : "div" , addFillers : function ( a ) { var b = a . editor ; if ( ! this . isWholeContentSelected ( a ) && 0 < a . getChildCount ( ) ) { var c = a . getFirst ( f ) , d = a . getLast ( f ) ; c && c . type == CKEDITOR . NODE _ELEMENT && ! c . isEditable ( ) && ( this . startFiller = this . createFiller ( ) ,
a . append ( this . startFiller , 1 ) ) ; d && d . type == CKEDITOR . NODE _ELEMENT && ! d . isEditable ( ) && ( this . endFiller = this . createFiller ( ! 0 ) , a . append ( this . endFiller , 0 ) ) ; if ( this . hasFiller ( a ) ) return b = b . createRange ( ) , b . selectNodeContents ( a ) , b . select ( ) , ! 0 } return ! 1 } , removeFillers : function ( a ) { if ( this . hasFiller ( a ) && ! this . isWholeContentSelected ( a ) ) { var b = a . findOne ( this . fillerTagName + "[" + this . fillerAttribute + "\x3dstart]" ) , c = a . findOne ( this . fillerTagName + "[" + this . fillerAttribute + "\x3dend]" ) ; this . startFiller && b && this . startFiller . equals ( b ) ?
this . removeFiller ( this . startFiller , a ) : this . startFiller = b ; this . endFiller && c && this . endFiller . equals ( c ) ? this . removeFiller ( this . endFiller , a ) : this . endFiller = c } } , cleanPasteData : function ( a ) { a && a . length && ( a = a . replace ( this . createFillerRegex ( ) , "" ) . replace ( this . createFillerRegex ( ! 0 ) , "" ) ) ; return a } , isWholeContentSelected : function ( a ) { var b = a . editor . getSelection ( ) . getRanges ( ) [ 0 ] ; return ! b || b && b . collapsed ? ! 1 : ( b = b . clone ( ) , b . enlarge ( CKEDITOR . ENLARGE _ELEMENT ) , ! ! ( b && a && b . startContainer && b . endContainer && 0 === b . startOffset &&
0 ; "static" != b && ( a . relativeY = d . y , a . relativeX = d . x , a . top -= a . relativeY , a . bottom -= a . relativeY , a . left -= a . relativeX , a . right -= a . relativeX ) ; return a } } ; var r = { left : 1 , right : 1 , center : 1 } , u = { absolute : 1 , fixed : 1 } ; CKEDITOR . plugins . lineutils = { finder : m , locator : n , liner : p } } ) ( ) ; ( function ( ) { function e ( a ) { return a . getName && ! a . hasAttribute ( "data-cke-temp" ) } CKEDITOR . plugins . add ( "widgetselection" , { init : function ( a ) { if ( CKEDITOR . env . webkit ) { var b = CKEDITOR . plugins . widgetselection ; a . on ( "contentDom" , function ( a ) { a = a . editor ; var c = a . editable ( ) ; c . attachListener ( c , "keydown" , function ( a ) { a . data . getKeystroke ( ) == CKEDITOR . CTRL + 65 && CKEDITOR . tools . setTimeout ( function ( ) { b . addFillers ( c ) || b . removeFillers ( c ) } , 0 ) } , null , null , - 1 ) ; a . on ( "selectionCheck" , function ( a ) { b . removeFillers ( a . editor . editable ( ) ) } ) ;
a . on ( "paste" , function ( a ) { a . data . dataValue = b . cleanPasteData ( a . data . dataValue ) } ) ; "selectall" in a . plugins && b . addSelectAllIntegration ( a ) } ) } } } ) ; CKEDITOR . plugins . widgetselection = { startFiller : null , endFiller : null , fillerAttribute : "data-cke-filler-webkit" , fillerContent : "\x26nbsp;" , fillerTagName : "div" , addFillers : function ( a ) { var b = a . editor ; if ( ! this . isWholeContentSelected ( a ) && 0 < a . getChildCount ( ) ) { var d = a . getFirst ( e ) , c = a . getLast ( e ) ; d && d . type == CKEDITOR . NODE _ELEMENT && ! d . isEditable ( ) && ( this . startFiller = this . createFiller ( ) ,
a . append ( this . startFiller , 1 ) ) ; c && c . type == CKEDITOR . NODE _ELEMENT && ! c . isEditable ( ) && ( this . endFiller = this . createFiller ( ! 0 ) , a . append ( this . endFiller , 0 ) ) ; if ( this . hasFiller ( a ) ) return b = b . createRange ( ) , b . selectNodeContents ( a ) , b . select ( ) , ! 0 } return ! 1 } , removeFillers : function ( a ) { if ( this . hasFiller ( a ) && ! this . isWholeContentSelected ( a ) ) { var b = a . findOne ( this . fillerTagName + "[" + this . fillerAttribute + "\x3dstart]" ) , d = a . findOne ( this . fillerTagName + "[" + this . fillerAttribute + "\x3dend]" ) ; this . startFiller && b && this . startFiller . equals ( b ) ?
this . removeFiller ( this . startFiller , a ) : this . startFiller = b ; this . endFiller && d && this . endFiller . equals ( d ) ? this . removeFiller ( this . endFiller , a ) : this . endFiller = d } } , cleanPasteData : function ( a ) { a && a . length && ( a = a . replace ( this . createFillerRegex ( ) , "" ) . replace ( this . createFillerRegex ( ! 0 ) , "" ) ) ; return a } , isWholeContentSelected : function ( a ) { var b = a . editor . getSelection ( ) . getRanges ( ) [ 0 ] ; return ! b || b && b . collapsed ? ! 1 : ( b = b . clone ( ) , b . enlarge ( CKEDITOR . ENLARGE _ELEMENT ) , ! ! ( b && a && b . startContainer && b . endContainer && 0 === b . startOffset &&
b . endOffset === a . getChildCount ( ) && b . startContainer . equals ( a ) && b . endContainer . equals ( a ) ) ) } , hasFiller : function ( a ) { return 0 < a . find ( this . fillerTagName + "[" + this . fillerAttribute + "]" ) . count ( ) } , createFiller : function ( a ) { var b = new CKEDITOR . dom . element ( this . fillerTagName ) ; b . setHtml ( this . fillerContent ) ; b . setAttribute ( this . fillerAttribute , a ? "end" : "start" ) ; b . setAttribute ( "data-cke-temp" , 1 ) ; b . setStyles ( { display : "block" , width : 0 , height : 0 , padding : 0 , border : 0 , margin : 0 , position : "absolute" , top : 0 , left : "-9999px" , opacity : 0 ,
overflow : "hidden" } ) ; return b } , removeFiller : function ( a , b ) { if ( a ) { var c = b . editor , d = b . editor . getSelection ( ) . getRanges ( ) [ 0 ] . startPath ( ) , e = c . createRange ( ) , g , f ; d . contains ( a ) && ( g = a . getHtml ( ) , f = ! 0 ) ; d = "start" == a . getAttribute ( this . fillerAttribute ) ; a . remove ( ) ; g && 0 < g . length && g != this . fillerContent ? ( b . insertHtmlIntoRange ( g , c . getSelection ( ) . getRanges ( ) [ 0 ] ) , e . setStartAt ( b . getChild ( b . getChildCount ( ) - 1 ) , CKEDITOR . POSITION _BEFORE _END ) , c . getSelection ( ) . selectRanges ( [ e ] ) ) : f && ( d ? e . setStartAt ( b . getFirst ( ) . getNext ( ) , CKEDITOR . POSITION _AFTER _START ) :
e . setEndAt ( b . getLast ( ) . getPrevious ( ) , CKEDITOR . POSITION _BEFORE _END ) , b . editor . getSelection ( ) . selectRanges ( [ e ] ) ) } } , createFillerRegex : function ( a ) { var b = this . createFiller ( a ) . getOuterHtml ( ) . replace ( /style="[^"]*"/gi , 'style\x3d"[^"]*"' ) . replace ( />[^<]*</gi , "\x3e[^\x3c]*\x3c" ) ; return new RegExp ( ( a ? "" : "^" ) + b + ( a ? "$" : "" ) ) } , addSelectAllIntegration : function ( a ) { var b = this ; a . editable ( ) . attachListener ( a , "beforeCommandExec" , function ( c ) { var d = a . editable ( ) ; "selectAll" == c . data . name && d && b . addFillers ( d ) } , null , null , 9999 ) } } } ) ( ) ; ( function ( ) { function p ( a ) { this . editor = a ; this . registered = { } ; this . instances = { } ; this . selected = [ ] ; this . widgetHoldingFocusedEditable = this . focused = null ; this . _ = { nextId : 0 , upcasts : [ ] , upcastCallbacks : [ ] , filters : { } } ; I ( this ) ; J ( this ) ; this . on ( "checkWidgets" , K ) ; this . editor . on ( "contentDomInvalidated" , this . checkWidgets , this ) ; L ( this ) ; M ( this ) ; N ( this ) ; O ( this ) ; P ( this ) } function g ( a , b , c , d , e ) { var f = a . editor ; CKEDITOR . tools . extend ( this , d , { editor : f , id : b , inline : "span" == c . getParent ( ) . getName ( ) , element : c , data : CKEDITOR . tools . extend ( { } ,
overflow : "hidden" } ) ; return b } , removeFiller : function ( a , b ) { if ( a ) { var d = b . editor , c = b . editor . getSelection ( ) . getRanges ( ) [ 0 ] . startPath ( ) , f = d . createRange ( ) , g , e ; c . contains ( a ) && ( g = a . getHtml ( ) , e = ! 0 ) ; c = "start" == a . getAttribute ( this . fillerAttribute ) ; a . remove ( ) ; g && 0 < g . length && g != this . fillerContent ? ( b . insertHtmlIntoRange ( g , d . getSelection ( ) . getRanges ( ) [ 0 ] ) , f . setStartAt ( b . getChild ( b . getChildCount ( ) - 1 ) , CKEDITOR . POSITION _BEFORE _END ) , d . getSelection ( ) . selectRanges ( [ f ] ) ) : e && ( c ? f . setStartAt ( b . getFirst ( ) . getNext ( ) , CKEDITOR . POSITION _AFTER _START ) :
f . setEndAt ( b . getLast ( ) . getPrevious ( ) , CKEDITOR . POSITION _BEFORE _END ) , b . editor . getSelection ( ) . selectRanges ( [ f ] ) ) } } , createFillerRegex : function ( a ) { var b = this . createFiller ( a ) . getOuterHtml ( ) . replace ( /style="[^"]*"/gi , 'style\x3d"[^"]*"' ) . replace ( />[^<]*</gi , "\x3e[^\x3c]*\x3c" ) ; return new RegExp ( ( a ? "" : "^" ) + b + ( a ? "$" : "" ) ) } , addSelectAllIntegration : function ( a ) { var b = this ; a . editable ( ) . attachListener ( a , "beforeCommandExec" , function ( d ) { var c = a . editable ( ) ; "selectAll" == d . data . name && c && b . addFillers ( c ) } , null , null , 9999 ) } } } ) ( ) ; ( function ( ) { function p ( a ) { this . editor = a ; this . registered = { } ; this . instances = { } ; this . selected = [ ] ; this . widgetHoldingFocusedEditable = this . focused = null ; this . _ = { nextId : 0 , upcasts : [ ] , upcastCallbacks : [ ] , filters : { } } ; I ( this ) ; J ( this ) ; this . on ( "checkWidgets" , K ) ; this . editor . on ( "contentDomInvalidated" , this . checkWidgets , this ) ; L ( this ) ; M ( this ) ; N ( this ) ; O ( this ) ; P ( this ) } function g ( a , b , c , d , e ) { var f = a . editor ; CKEDITOR . tools . extend ( this , d , { editor : f , id : b , inline : "span" == c . getParent ( ) . getName ( ) , element : c , data : CKEDITOR . tools . extend ( { } ,
"function" == typeof d . defaults ? d . defaults ( ) : d . defaults ) , dataReady : ! 1 , inited : ! 1 , ready : ! 1 , edit : g . prototype . edit , focusedEditable : null , definition : d , repository : a , draggable : ! 1 !== d . draggable , _ : { downcastFn : d . downcast && "string" == typeof d . downcast ? d . downcasts [ d . downcast ] : d . downcast } } , ! 0 ) ; a . fire ( "instanceCreated" , this ) ; Q ( this , d ) ; this . init && this . init ( ) ; this . inited = ! 0 ; ( a = this . element . data ( "cke-widget-data" ) ) && this . setData ( JSON . parse ( decodeURIComponent ( a ) ) ) ; e && this . setData ( e ) ; this . data . classes || this . setData ( "classes" ,
this . getClasses ( ) ) ; this . dataReady = ! 0 ; r ( this ) ; this . fire ( "data" , this . data ) ; this . isInited ( ) && f . editable ( ) . contains ( this . wrapper ) && ( this . ready = ! 0 , this . fire ( "ready" ) ) } function q ( a , b , c ) { CKEDITOR . dom . element . call ( this , b . $ ) ; this . editor = a ; this . _ = { } ; b = this . filter = c . filter ; CKEDITOR . dtd [ this . getName ( ) ] . p ? ( this . enterMode = b ? b . getAllowedEnterMode ( a . enterMode ) : a . enterMode , this . shiftEnterMode = b ? b . getAllowedEnterMode ( a . shiftEnterMode , ! 0 ) : a . shiftEnterMode ) : this . enterMode = this . shiftEnterMode = CKEDITOR . ENTER _BR } function R ( a ,
b ) { a . addCommand ( b . name , { exec : function ( a , d ) { function e ( ) { a . widgets . finalizeCreation ( k ) } var f = a . widgets . focused ; if ( f && f . name == b . name ) f . edit ( ) ; else if ( b . insert ) b . insert ( ) ; else if ( b . template ) { var f = "function" == typeof b . defaults ? b . defaults ( ) : b . defaults , f = CKEDITOR . dom . element . createFromHtml ( b . template . output ( f ) ) , h , l = a . widgets . wrapElement ( f , b . name ) , k = new CKEDITOR . dom . documentFragment ( l . getDocument ( ) ) ; k . append ( l ) ; ( h = a . widgets . initOn ( f , b , d && d . startupData ) ) ? ( f = h . once ( "edit" , function ( b ) { if ( b . data . dialog ) h . once ( "dialog" ,
@@ -1143,11 +1143,11 @@ _updateNotification:function(){this.notification.update({message:this._getNotifi
this . _tasks . push ( a ) ; this . _totalWeights += a . _weight ; return a } , _removeTask : function ( a ) { var b = CKEDITOR . tools . indexOf ( this . _tasks , a ) ; - 1 !== b && ( a . _doneWeight && ( this . _doneWeights -= a . _doneWeight ) , this . _totalWeights -= a . _weight , this . _tasks . splice ( b , 1 ) , this . update ( ) ) } , _onTaskUpdate : function ( a ) { this . _doneWeights += a . data ; this . update ( ) } , _onTaskDone : function ( ) { this . _doneTasks += 1 ; this . update ( ) } } ; CKEDITOR . event . implementOn ( e . prototype ) ; d . prototype = { done : function ( ) { this . update ( this . _weight ) } , update : function ( a ) { if ( ! this . isDone ( ) &&
! this . isCanceled ( ) ) { a = Math . min ( this . _weight , a ) ; var b = a - this . _doneWeight ; this . _doneWeight = a ; this . fire ( "updated" , b ) ; this . isDone ( ) && this . fire ( "done" ) } } , cancel : function ( ) { this . isDone ( ) || this . isCanceled ( ) || ( this . _isCanceled = ! 0 , this . fire ( "canceled" ) ) } , isDone : function ( ) { return this . _weight === this . _doneWeight } , isCanceled : function ( ) { return this . _isCanceled } } ; CKEDITOR . event . implementOn ( d . prototype ) ; CKEDITOR . plugins . notificationAggregator = e ; CKEDITOR . plugins . notificationAggregator . task = d } ) ( ) ; ( function ( ) { CKEDITOR . plugins . add ( "uploadwidget" , { requires : "widget,clipboard,filetools,notificationaggregator" , init : function ( a ) { a . filter . allow ( "*[!data-widget,!data-cke-upload-id]" ) } } ) ; CKEDITOR . fileTools || ( CKEDITOR . fileTools = { } ) ; CKEDITOR . tools . extend ( CKEDITOR . fileTools , { addUploadWidget : function ( a , c , f ) { var h = CKEDITOR . fileTools , b = a . uploadRepository , m = f . supportedTypes ? 10 : 20 ; if ( f . fileToElement ) a . on ( "paste" , function ( d ) { d = d . data ; var l = a . widgets . registered [ c ] , k = d . dataTransfer , f = k . getFilesCount ( ) , g = l . loadMethod ||
"loadAndUpload" , e , n ; if ( ! d . dataValue && f ) for ( n = 0 ; n < f ; n ++ ) if ( e = k . getFile ( n ) , ! l . supportedTypes || h . isTypeSupported ( e , l . supportedTypes ) ) { var m = l . fileToElement ( e ) ; e = b . create ( e , void 0 , l . loaderType ) ; m && ( e [ g ] ( l . uploadUrl , l . additionalRequestParameters ) , CKEDITOR . fileTools . markElement ( m , c , e . id ) , "loadAndUpload" != g && "upload" != g || l . skipNotifications || CKEDITOR . fileTools . bindNotifications ( a , e ) , d . dataValue += m . getOuterHtml ( ) ) } } , null , null , m ) ; CKEDITOR . tools . extend ( f , { downcast : function ( ) { return new CKEDITOR . htmlParser . text ( "" ) } ,
init : function ( ) { var d = this , c = this . wrapper . findOne ( "[data-cke-upload-id]" ) . data ( "cke-upload-id" ) , k = b . loaders [ c ] , f = CKEDITOR . tools . capitalize , g , e ; k . on ( "update" , function ( b ) { if ( d . wrapper && d . wrapper . getParent ( ) ) { a . fire ( "lockSnapshot" ) ; b = "on" + f ( k . status ) ; if ( "function" !== typeof d [ b ] || ! 1 !== d [ b ] ( k ) ) e = "cke_upload_" + k . status , d . wrapper && e != g && ( g && d . wrapper . removeClass ( g ) , d . wrapper . addClass ( e ) , g = e ) , "error" != k . status && "abort" != k . status || a . widgets . del ( d ) ; a . fire ( "unlockSnapshot" ) } else a . editable ( ) . find ( '[data-cke-upload-id\x3d"' +
c + '"]' ) . count ( ) || k . abort ( ) , b . removeListener ( ) } ) ; k . update ( ) } , replaceWith : function ( d , c ) { if ( "" === d . trim ( ) ) a . widgets . del ( this ) ; else { var b = this == a . widgets . focused , f = a . editable ( ) , g = a . createRange ( ) , e , h ; b || ( h = a . getSelection ( ) . createBookmarks ( ) ) ; g . setStartBefore ( this . wrapper ) ; g . setEndAfter ( this . wrapper ) ; b && ( e = g . createBookmark ( ) ) ; f . insertHtmlIntoRange ( d , g , c ) ; a . widgets . checkWidgets ( { initOnlyNew : ! 0 } ) ; a . widgets . destroy ( this , ! 0 ) ; b ? ( g . moveToBookmark ( e ) , g . select ( ) ) : a . getSelection ( ) . selectBookmarks ( h ) } } , _getLoader : function ( ) { var a =
this . wrapper . findOne ( "[data-cke-upload-id]" ) ; return a ? this . editor . uploadRepository . loaders [ a . data ( "cke-upload-id" ) ] : null } } ) ; a . widgets . add ( c , f ) } , markElement : function ( a , c , f ) { a . setAttributes ( { "data-cke-upload-id" : f , "data-widget" : c } ) } , bindNotifications : function ( a , c ) { function f ( ) { h = a . _ . uploadWidgetNotificaionAggregator ; if ( ! h || h . isFinished ( ) ) h = a . _ . uploadWidgetNotificaionAggregator = new CKEDITOR . plugins . notificationAggregator ( a , a . lang . uploadwidget . uploadMany , a . lang . uploadwidget . uploadOne ) , h . once ( "finished" ,
function ( ) { var b = h . getTaskCount ( ) ; 0 === b ? h . notification . hide ( ) : h . notification . update ( { message : 1 == b ? a . lang . uploadwidget . doneOne : a . lang . uploadwidget . doneMany . replace ( "%1" , b ) , type : "success" , important : 1 } ) } ) } var h , b = null ; c . on ( "update" , function ( ) { ! b && c . uploadTotal && ( f ( ) , b = h . createTask ( { weight : c . uploadTotal } ) ) ; b && "uploading" == c . status && b . update ( c . uploaded ) } ) ; c . on ( "uploaded" , function ( ) { b && b . done ( ) } ) ; c . on ( "error" , function ( ) { b && b . cancel ( ) ; a . showNotification ( c . message , "warning" ) } ) ; c . on ( "abort" , function ( ) { b &&
b . cancel ( ) ; a . showNotification ( a . lang . uploadwidget . abort , "info" ) } ) } } ) } ) ( ) ; ( function ( ) { function l ( c ) { 9 >= c && ( c = "0" + c ) ; return String ( c ) } function n ( c ) { var a = new Date , a = [ a . getFullYear ( ) , a . getMonth ( ) + 1 , a . getDate ( ) , a . getHours ( ) , a . getMinutes ( ) , a . getSeconds ( ) ] ; e += 1 ; return "image-" + CKEDITOR . tools . array . map ( a , l ) . join ( "" ) + "-" + e + "." + c } var e = 0 ; CKEDITOR . plugins . add ( "uploadimage" , { requires : "uploadwidget" , onLoad : function ( ) { CKEDITOR . addCss ( ".cke_upload_uploading img{opacity: 0.3}" ) } , init : function ( c ) { if ( CKEDITOR . plugins . clipboard . isFileApiSupported ) { var a = CKEDITOR . fileTools , e = a . getUploadUrl ( c . config ,
init : function ( ) { var d = this , c = this . wrapper . findOne ( "[data-cke-upload-id]" ) . data ( "cke-upload-id" ) , k = b . loaders [ c ] , f = CKEDITOR . tools . capitalize , g , e ; k . on ( "update" , function ( b ) { if ( d . wrapper && d . wrapper . getParent ( ) ) { a . fire ( "lockSnapshot" ) ; b = "on" + f ( k . status ) ; if ( "function" !== typeof d [ b ] || ! 1 !== d [ b ] ( k ) ) e = "cke_upload_" + k . status , d . wrapper && e != g && ( g && d . wrapper . removeClass ( g ) , d . wrapper . addClass ( e ) , g = e ) , "error" != k . status && "abort" != k . status || a . widgets . del ( d ) ; a . fire ( "unlockSnapshot" ) } else CKEDITOR . instances [ a . name ] &&
a . editable ( ) . find ( '[data-cke-upload-id\x3d"' + c + '"]' ) . count ( ) || k . abort ( ) , b . removeListener ( ) } ) ; k . update ( ) } , replaceWith : function ( d , c ) { if ( "" === d . trim ( ) ) a . widgets . del ( this ) ; else { var b = this == a . widgets . focused , f = a . editable ( ) , g = a . createRange ( ) , e , h ; b || ( h = a . getSelection ( ) . createBookmarks ( ) ) ; g . setStartBefore ( this . wrapper ) ; g . setEndAfter ( this . wrapper ) ; b && ( e = g . createBookmark ( ) ) ; f . insertHtmlIntoRange ( d , g , c ) ; a . widgets . checkWidgets ( { initOnlyNew : ! 0 } ) ; a . widgets . destroy ( this , ! 0 ) ; b ? ( g . moveToBookmark ( e ) , g . select ( ) ) : a . getSelection ( ) . selectBookmarks ( h ) } } ,
_getLoader : function ( ) { var a = this . wrapper . findOne ( "[data-cke-upload-id]" ) ; return a ? this . editor . uploadRepository . loaders [ a . data ( "cke-upload-id" ) ] : null } } ) ; a . widgets . add ( c , f ) } , markElement : function ( a , c , f ) { a . setAttributes ( { "data-cke-upload-id" : f , "data-widget" : c } ) } , bindNotifications : function ( a , c ) { function f ( ) { h = a . _ . uploadWidgetNotificaionAggregator ; if ( ! h || h . isFinished ( ) ) h = a . _ . uploadWidgetNotificaionAggregator = new CKEDITOR . plugins . notificationAggregator ( a , a . lang . uploadwidget . uploadMany , a . lang . uploadwidget . uploadOne ) ,
h . once ( "finished" , function ( ) { var b = h . getTaskCount ( ) ; 0 === b ? h . notification . hide ( ) : h . notification . update ( { message : 1 == b ? a . lang . uploadwidget . doneOne : a . lang . uploadwidget . doneMany . replace ( "%1" , b ) , type : "success" , important : 1 } ) } ) } var h , b = null ; c . on ( "update" , function ( ) { ! b && c . uploadTotal && ( f ( ) , b = h . createTask ( { weight : c . uploadTotal } ) ) ; b && "uploading" == c . status && b . update ( c . uploaded ) } ) ; c . on ( "uploaded" , function ( ) { b && b . done ( ) } ) ; c . on ( "error" , function ( ) { b && b . cancel ( ) ; a . showNotification ( c . message , "warning" ) } ) ; c . on ( "abort" ,
function ( ) { b && b . cancel ( ) ; CKEDITOR . instances [ a . name ] && a . showNotification ( a . lang . uploadwidget . abort , "info" ) } ) } } ) } ) ( ) ; ( function ( ) { function l ( c ) { 9 >= c && ( c = "0" + c ) ; return String ( c ) } function n ( c ) { var a = new Date , a = [ a . getFullYear ( ) , a . getMonth ( ) + 1 , a . getDate ( ) , a . getHours ( ) , a . getMinutes ( ) , a . getSeconds ( ) ] ; e += 1 ; return "image-" + CKEDITOR . tools . array . map ( a , l ) . join ( "" ) + "-" + e + "." + c } var e = 0 ; CKEDITOR . plugins . add ( "uploadimage" , { requires : "uploadwidget" , onLoad : function ( ) { CKEDITOR . addCss ( ".cke_upload_uploading img{opacity: 0.3}" ) } , init : function ( c ) { if ( CKEDITOR . plugins . clipboard . isFileApiSupported ) { var a = CKEDITOR . fileTools , e = a . getUploadUrl ( c . config ,
"image" ) ; e && ( a . addUploadWidget ( c , "uploadimage" , { supportedTypes : /image\/(jpeg|png|gif|bmp)/ , uploadUrl : e , fileToElement : function ( ) { var b = new CKEDITOR . dom . element ( "img" ) ; b . setAttribute ( "src" , "data:image/gif;base64,R0lGODlhDgAOAIAAAAAAAP///yH5BAAAAAAALAAAAAAOAA4AAAIMhI+py+0Po5y02qsKADs\x3d" ) ; return b } , parts : { img : "img" } , onUploading : function ( b ) { this . parts . img . setAttribute ( "src" , b . data ) } , onUploaded : function ( b ) { var a = this . parts . img . $ ; this . replaceWith ( '\x3cimg src\x3d"' + b . url + '" width\x3d"' + ( b . responseData . width ||
a . naturalWidth ) + '" height\x3d"' + ( b . responseData . height || a . naturalHeight ) + '"\x3e' ) } } ) , c . on ( "paste" , function ( b ) { if ( b . data . dataValue . match ( /<img[\s\S]+data:/i ) ) { b = b . data ; var f = document . implementation . createHTMLDocument ( "" ) , f = new CKEDITOR . dom . element ( f . body ) , m , g , k ; f . data ( "cke-editable" , 1 ) ; f . appendHtml ( b . dataValue ) ; m = f . find ( "img" ) ; for ( k = 0 ; k < m . count ( ) ; k ++ ) { g = m . getItem ( k ) ; var d = g . getAttribute ( "src" ) , h = d && "data:" == d . substring ( 0 , 5 ) , l = null === g . data ( "cke-realelement" ) ; h && l && ! g . data ( "cke-upload-id" ) && ! g . isReadOnly ( 1 ) &&
( h = ( h = d . match ( /image\/([a-z]+?);/i ) ) && h [ 1 ] || "jpg" , d = c . uploadRepository . create ( d , n ( h ) ) , d . upload ( e ) , a . markElement ( g , "uploadimage" , d . id ) , a . bindNotifications ( c , d ) ) } b . dataValue = f . getHtml ( ) } } ) ) } } } ) } ) ( ) ; CKEDITOR . plugins . add ( "wsc" , { requires : "dialog" , parseApi : function ( a ) { a . config . wsc _onFinish = "function" === typeof a . config . wsc _onFinish ? a . config . wsc _onFinish : function ( ) { } ; a . config . wsc _onClose = "function" === typeof a . config . wsc _onClose ? a . config . wsc _onClose : function ( ) { } } , parseConfig : function ( a ) { a . config . wsc _customerId = a . config . wsc _customerId || CKEDITOR . config . wsc _customerId || "1:ua3xw1-2XyGJ3-GWruD3-6OFNT1-oXcuB1-nR6Bp4-hgQHc-EcYng3-sdRXG3-NOfFk" ; a . config . wsc _customDictionaryIds = a . config . wsc _customDictionaryIds ||
@@ -1169,4 +1169,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 f = a . config , b = f . fullPage , c = b && a . docType , d = b && a . xmlDeclaration ,
e = this . getDocument ( ) , b = b ? e . getDocumentElement ( ) . getOuterHtml ( ) : e . getBody ( ) . getHtml ( ) ; CKEDITOR . env . gecko && f . 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 , f = a . document , b ; try { b = a . window . getFrame ( ) } catch ( c ) { } l . baseProto . detach . call ( this ) ; this . clearCustomData ( ) ; f . getDocumentElement ( ) . clearCustomData ( ) ;
CKEDITOR . tools . removeFunction ( this . _ . frameLoadedHandler ) ; b && b . getParent ( ) ? ( b . clearCustomData ( ) , ( a = b . removeCustomData ( "onResize" ) ) && a . removeListener ( ) , b . remove ( ) ) : CKEDITOR . warn ( "editor-destroy-iframe" ) } } } ) } ) ( ) ; 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,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 , "ja " : 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 , "lt" : 1 , "lv" : 1 , "mk" : 1 , "nb" : 1 , "nl" : 1 , "no" : 1 , "pl" : 1 , "pt" : 1 , "pt-br" : 1 , "ru" : 1 , "sk" : 1 , "sl" : 1 , "sr" : 1 , "sv" : 1 , "tr" : 1 , "uk" : 1 , "zh" : 1 , "zh-cn" : 1 } ; } ( ) ) ;
CKEDITOR . tools . removeFunction ( this . _ . frameLoadedHandler ) ; b && b . getParent ( ) ? ( b . clearCustomData ( ) , ( a = b . removeCustomData ( "onResize" ) ) && a . removeListener ( ) , b . remove ( ) ) : CKEDITOR . warn ( "editor-destroy-iframe" ) } } } ) } ) ( ) ; 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,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 , "ro " : 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 , "ru" : 1 , "sk" : 1 , "sl" : 1 , "sr" : 1 , "sv" : 1 , "tr" : 1 , "uk" : 1 , "zh" : 1 , "zh-cn" : 1 } ; } ( ) ) ;