@@ -2,14 +2,14 @@
Copyright ( c ) 2003 - 2016 , CKSource - Frederico Knabben . All rights reserved .
For licensing , see LICENSE . md or http : //ckeditor.com/license
* /
( function ( ) { if ( window . CKEDITOR && window . CKEDITOR . dom ) return ; window . CKEDITOR || ( window . CKEDITOR = function ( ) { var a = /(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i , d = { timestamp : "G4CD " , version : "4.5.9 " , revision : "a35abfe " , 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 k = c [ d ] . src . match ( a ) ; if ( k ) { b = k [ 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 : "G6DE " , version : "4.5.10 " , revision : "b47abaf " , 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 l = c [ d ] . src . match ( a ) ; if ( l ) { b = l [ 1 ] ; break } } - 1 == b . indexOf ( ":/" ) && "//" != b . slice ( 0 , 2 ) && ( b = 0 === b . indexOf ( "/" ) ? location . href . match ( /^.*?:\/\/[^\/]*/ ) [ 0 ] +
b : location . href . match ( /^[^\?]*\/(?:)/ ) [ 0 ] + b ) ; if ( ! b ) throw 'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.' ; return b } ( ) , getUrl : function ( a ) { - 1 == a . indexOf ( ":/" ) && 0 !== a . indexOf ( "/" ) && ( a = this . basePath + a ) ; this . timestamp && "/" != a . charAt ( a . length - 1 ) && ! /[&?]t=/ . test ( a ) && ( a += ( 0 <= a . indexOf ( "?" ) ? "\x26" : "?" ) + "t\x3d" + this . timestamp ) ; return a } , domReady : function ( ) { function a ( ) { try { document . addEventListener ? ( document . removeEventListener ( "DOMContentLoaded" ,
a , ! 1 ) , b ( ) ) : document . attachEvent && "complete" === document . readyState && ( document . detachEvent ( "onreadystatechange" , a ) , b ( ) ) } catch ( c ) { } } function b ( ) { for ( var a ; a = c . shift ( ) ; ) a ( ) } var c = [ ] ; return function ( b ) { function d ( ) { try { document . documentElement . doScroll ( "left" ) } catch ( f ) { setTimeout ( d , 1 ) ; return } a ( ) } c . push ( b ) ; "complete" === document . readyState && setTimeout ( a , 1 ) ; if ( 1 == c . length ) if ( document . addEventListener ) document . addEventListener ( "DOMContentLoaded" , a , ! 1 ) , window . addEventListener ( "load" , a , ! 1 ) ; else if ( document . attachEvent ) { document . attachEvent ( "onreadystatechange" ,
a ) ; window . attachEvent ( "onload" , a ) ; b = ! 1 ; try { b = ! window . frameElement } catch ( w ) { } document . documentElement . doScroll && b && d ( ) } } } ( ) } , b = window . CKEDITOR _GETURL ; if ( b ) { var c = d . getUrl ; d . getUrl = function ( a ) { return b . call ( d , a ) || c . call ( d , a ) } } return d } ( ) ) ;
a ) ; window . attachEvent ( "onload" , a ) ; b = ! 1 ; try { b = ! window . frameElement } catch ( v ) { } document . documentElement . doScroll && b && d ( ) } } } ( ) } , b = window . CKEDITOR _GETURL ; if ( b ) { var c = d . getUrl ; d . getUrl = function ( a ) { return b . call ( d , a ) || c . call ( d , a ) } } return d } ( ) ) ;
CKEDITOR . event || ( CKEDITOR . event = function ( ) { } , CKEDITOR . event . implementOn = function ( a ) { var d = CKEDITOR . event . prototype , b ; for ( b in d ) null == a [ b ] && ( a [ b ] = d [ b ] ) } , CKEDITOR . event . prototype = function ( ) { function a ( a ) { var e = d ( this ) ; return e [ a ] || ( e [ 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 g = a . call ( this , b ) ; CKEDITOR . tools . extend ( g , d , ! 0 ) } , on : function ( b , d , g , l , k ) { function q ( a , f , y , k ) { a = { name : b , sender : this , editor : a , data : f , listenerData : l , stop : y , cancel : k , removeListener : w } ; return ! 1 === d . call ( g , a ) ? ! 1 : a . data } function w ( ) { y . removeListener ( b , d ) } var f = a . call ( this , b ) ; if ( 0 > f . getListenerIndex ( d ) ) { f = f . listeners ; g || ( g = this ) ; isNaN ( k ) && ( k = 10 ) ; var y = this ; q . fn = d ; q . priority = k ; for ( var A = f . length - 1 ; 0 <= A ; A -- ) if ( f [ A ] . priority <= k ) return f . splice ( A + 1 , 0 , q ) , { removeListener : w } ; f . unshift ( q ) } return { removeListener : w } } ,
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 } , g = 0 , l = function ( ) { g = 1 } ; return function ( k , q , w ) { var f = d ( this ) [ k ] ; k = a ; var y = g ; a = g = 0 ; if ( f ) { var A = f . listeners ; if ( A . length ) for ( var A = A . slice ( 0 ) , t , D = 0 ; D < A . length ; D ++ ) { if ( f . errorProof ) try { t =
A [ D ] . call ( this , w , q , b , l ) } catch ( p ) { } else t = A [ D ] . call ( this , w , q , b , l ) ; ! 1 === t ? g = 1 : "undefined" != typeof t && ( q = t ) ; if ( a || g ) break } } q = g ? ! 1 : "undefined" == typeof q ? ! 0 : q ; a = k ; g = y ; return q } } ( ) , fireOnce : function ( a , b , g ) { b = this . fire ( a , b , g ) ; delete d ( this ) [ a ] ; return b } , removeListener : function ( a , b ) { var g = d ( this ) [ a ] ; if ( g ) { var l = g . getListenerIndex ( b ) ; 0 <= l && g . listeners . splice ( l , 1 ) } } , removeAllListeners : function ( ) { var a = d ( this ) , b ; for ( b in a ) delete a [ b ] } , hasListeners : function ( a ) { return ( a = d ( this ) [ a ] ) && 0 < a . listeners . length } } } ( ) ) ;
return { define : function ( b , d ) { var g = a . call ( this , b ) ; CKEDITOR . tools . extend ( g , d , ! 0 ) } , on : function ( b , d , g , k , l ) { function q ( a , f , y , l ) { a = { name : b , sender : this , editor : a , data : f , listenerData : k , stop : y , cancel : l , removeListener : v } ; return ! 1 === d . call ( g , a ) ? ! 1 : a . data } function v ( ) { y . removeListener ( b , d ) } var f = a . call ( this , b ) ; if ( 0 > f . getListenerIndex ( d ) ) { f = f . listeners ; g || ( g = this ) ; isNaN ( l ) && ( l = 10 ) ; var y = this ; q . fn = d ; q . priority = l ; for ( var A = f . length - 1 ; 0 <= A ; A -- ) if ( f [ A ] . priority <= l ) return f . splice ( A + 1 , 0 , q ) , { removeListener : v } ; f . unshift ( q ) } return { removeListener : v } } ,
once : function ( ) { var a = Array . prototype . slice . call ( arguments ) , b = a [ 1 ] ; a [ 1 ] = function ( a ) { a . removeListener ( ) ; return b . apply ( this , arguments ) } ; return this . on . apply ( this , a ) } , capture : function ( ) { CKEDITOR . event . useCapture = 1 ; var a = this . on . apply ( this , arguments ) ; CKEDITOR . event . useCapture = 0 ; return a } , fire : function ( ) { var a = 0 , b = function ( ) { a = 1 } , g = 0 , k = function ( ) { g = 1 } ; return function ( l , q , v ) { var f = d ( this ) [ l ] ; l = a ; var y = g ; a = g = 0 ; if ( f ) { var A = f . listeners ; if ( A . length ) for ( var A = A . slice ( 0 ) , r , D = 0 ; D < A . length ; D ++ ) { if ( f . errorProof ) try { r =
A [ D ] . call ( this , v , q , b , k ) } catch ( n ) { } else r = A [ D ] . call ( this , v , q , b , k ) ; ! 1 === r ? g = 1 : "undefined" != typeof r && ( q = r ) ; if ( a || g ) break } } q = g ? ! 1 : "undefined" == typeof q ? ! 0 : q ; a = l ; g = y ; return q } } ( ) , fireOnce : function ( a , b , g ) { b = this . fire ( a , b , g ) ; delete d ( this ) [ a ] ; return b } , removeListener : function ( a , b ) { var g = d ( this ) [ a ] ; if ( g ) { var k = g . getListenerIndex ( b ) ; 0 <= k && g . 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 ] ) ) ;
@@ -19,29 +19,29 @@ b.iOS&&(b.cssClass+=" cke_browser_ios");b.hidpi&&(b.cssClass+=" cke_hidpi");retu
CKEDITOR . loadFullCore , d = CKEDITOR . loadFullCoreTimeout ; a && ( CKEDITOR . status = "basic_ready" , a && a . _load ? a ( ) : d && setTimeout ( function ( ) { CKEDITOR . loadFullCore && CKEDITOR . loadFullCore ( ) } , 1E3 * d ) ) } ) } ) ( ) ; CKEDITOR . status = "basic_loaded" } ( ) ; "use strict" ; CKEDITOR . VERBOSITY _WARN = 1 ; CKEDITOR . VERBOSITY _ERROR = 2 ; CKEDITOR . verbosity = CKEDITOR . VERBOSITY _WARN | CKEDITOR . VERBOSITY _ERROR ; CKEDITOR . warn = function ( a , d ) { CKEDITOR . verbosity & CKEDITOR . VERBOSITY _WARN && CKEDITOR . fire ( "log" , { type : "warn" , errorCode : a , additionalData : d } ) } ;
CKEDITOR . error = function ( a , d ) { CKEDITOR . verbosity & CKEDITOR . VERBOSITY _ERROR && CKEDITOR . fire ( "log" , { type : "error" , errorCode : a , additionalData : d } ) } ;
CKEDITOR . on ( "log" , function ( a ) { if ( window . console && window . console . log ) { var d = console [ a . data . type ] ? a . data . type : "log" , b = a . data . errorCode ; if ( a = a . data . additionalData ) console [ d ] ( "[CKEDITOR] Error code: " + b + "." , a ) ; else console [ d ] ( "[CKEDITOR] Error code: " + b + "." ) ; console [ d ] ( "[CKEDITOR] For more information about this error go to http://docs.ckeditor.com/#!/guide/dev_errors-section-" + 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 , e = /</g , g = /"/g , l = /&(lt|gt|amp|quot|nbsp|shy|#\d{1,5});/g , k = { lt : "\x3c" , gt : "\x3e" , amp : "\x26" , quot : '"' , nbsp : " " , shy : " " } , q = function ( a , f ) { return "#" == f [ 0 ] ? String . fromCharCode ( parseInt ( f . slice ( 1 ) , 10 ) ) : k [ f ] } ; CKEDITOR . on ( "reset" , function ( ) { a = [ ] } ) ; CKEDITOR . tools = { arrayCompare : function ( a , f ) { if ( ! a && ! f ) return ! 0 ; if ( ! a || ! f || a . length != f . length ) return ! 1 ; for ( var b = 0 ; b < a . length ; b ++ ) if ( a [ b ] != f [ b ] ) return ! 1 ;
( function ( ) { var a = [ ] , d = CKEDITOR . env . gecko ? "-moz-" : CKEDITOR . env . webkit ? "-webkit-" : CKEDITOR . env . ie ? "-ms-" : "" , b = /&/g , c = />/g , e = /</g , g = /"/g , k = /&(lt|gt|amp|quot|nbsp|shy|#\d{1,5});/g , l = { lt : "\x3c" , gt : "\x3e" , amp : "\x26" , quot : '"' , nbsp : " " , shy : " " } , q = function ( a , f ) { return "#" == f [ 0 ] ? String . fromCharCode ( parseInt ( f . slice ( 1 ) , 10 ) ) : l [ f ] } ; CKEDITOR . on ( "reset" , function ( ) { a = [ ] } ) ; CKEDITOR . tools = { arrayCompare : function ( a , f ) { if ( ! a && ! f ) return ! 0 ; if ( ! a || ! f || a . length != f . length ) return ! 1 ; for ( var b = 0 ; b < a . length ; b ++ ) if ( a [ b ] != f [ b ] ) return ! 1 ;
return ! 0 } , getIndex : function ( a , f ) { for ( var b = 0 ; b < a . length ; ++ b ) if ( f ( a [ b ] ) ) return b ; return - 1 } , clone : function ( a ) { var f ; if ( a && a instanceof Array ) { f = [ ] ; for ( var b = 0 ; b < a . length ; b ++ ) f [ b ] = CKEDITOR . tools . clone ( a [ b ] ) ; return f } 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 ; f = new a . constructor ; for ( b in a ) f [ b ] = CKEDITOR . tools . clone ( a [ b ] ) ; return f } , capitalize : function ( a , f ) { return a . charAt ( 0 ) . toUpperCase ( ) +
( f ? a . slice ( 1 ) : a . slice ( 1 ) . toLowerCase ( ) ) } , extend : function ( a ) { var f = arguments . length , b , c ; "boolean" == typeof ( b = arguments [ f - 1 ] ) ? f -- : "boolean" == typeof ( b = arguments [ f - 2 ] ) && ( c = arguments [ f - 1 ] , f -= 2 ) ; for ( var k = 1 ; k < f ; k ++ ) { var d = arguments [ k ] , p ; for ( p in d ) if ( ! 0 === b || null == a [ p ] ) if ( ! c || p in c ) a [ p ] = d [ p ] } return a } , prototypedCopy : function ( a ) { var f = function ( ) { } ; f . prototype = a ; return new f } , copy : function ( a ) { var f = { } , b ; for ( b in a ) f [ b ] = a [ b ] ; return f } , isArray : function ( a ) { return "[object Array]" == Object . prototype . toString . call ( a ) } ,
( f ? a . slice ( 1 ) : a . slice ( 1 ) . toLowerCase ( ) ) } , extend : function ( a ) { var f = arguments . length , b , c ; "boolean" == typeof ( b = arguments [ f - 1 ] ) ? f -- : "boolean" == typeof ( b = arguments [ f - 2 ] ) && ( c = arguments [ f - 1 ] , f -= 2 ) ; for ( var l = 1 ; l < f ; l ++ ) { var d = arguments [ l ] , n ; for ( n in d ) if ( ! 0 === b || null == a [ n ] ) if ( ! c || n in c ) a [ n ] = d [ n ] } return a } , prototypedCopy : function ( a ) { var f = function ( ) { } ; f . prototype = a ; return new f } , copy : function ( a ) { var f = { } , b ; for ( b in a ) f [ b ] = a [ b ] ; return f } , isArray : function ( a ) { return "[object Array]" == Object . prototype . toString . call ( a ) } ,
isEmpty : function ( a ) { for ( var f in a ) if ( a . hasOwnProperty ( f ) ) return ! 1 ; return ! 0 } , cssVendorPrefix : function ( a , f , b ) { if ( b ) return d + a + ":" + f + ";" + a + ":" + f ; b = { } ; b [ a ] = f ; b [ d + a ] = f ; return b } , cssStyleToDomStyle : function ( ) { var a = document . createElement ( "div" ) . style , f = "undefined" != typeof a . cssFloat ? "cssFloat" : "undefined" != typeof a . styleFloat ? "styleFloat" : "float" ; return function ( a ) { return "float" == a ? f : a . replace ( /-./g , function ( a ) { return a . substr ( 1 ) . toUpperCase ( ) } ) } } ( ) , buildStyleHtml : function ( a ) { a = [ ] . concat ( a ) ; for ( var f ,
b = [ ] , c = 0 ; c < a . length ; c ++ ) if ( f = a [ c ] ) / @ import | [ { } ] / . test ( f ) ? b . push ( "\x3cstyle\x3e" + f + "\x3c/style\x3e" ) : b . push ( '\x3clink type\x3d"text/css" rel\x3dstylesheet href\x3d"' + f + '"\x3e' ) ; return b . join ( "" ) } , htmlEncode : function ( a ) { return void 0 === a || null === a ? "" : String ( a ) . replace ( b , "\x26amp;" ) . replace ( c , "\x26gt;" ) . replace ( e , "\x26lt;" ) } , htmlDecode : function ( a ) { return a . replace ( l , q ) } , htmlEncodeAttr : function ( a ) { return CKEDITOR . tools . htmlEncode ( a ) . replace ( g , "\x26quot;" ) } , htmlDecodeAttr : function ( a ) { return CKEDITOR . tools . htmlDecode ( a ) } ,
transformPlainTextToHtml : function ( a , f ) { var b = f == CKEDITOR . ENTER _BR , c = this . htmlEncode ( a . replace ( /\r\n/g , "\n" ) ) , c = c . replace ( /\t/g , "\x26nbsp;\x26nbsp; \x26nbsp;" ) , k = f == CKEDITOR . ENTER _P ? "p" : "div" ; if ( ! b ) { var d = /\n{2}/g ; if ( d . test ( c ) ) var p = "\x3c" + k + "\x3e" , q = "\x3c/" + k + "\x3e" , c = p + c . replace ( d , function ( ) { return q + p } ) + q } c = c . replace ( /\n/g , "\x3cbr\x3e" ) ; b || ( c = c . replace ( new RegExp ( "\x3cbr\x3e(?\x3d\x3c/" + k + "\x3e)" ) , function ( a ) { return CKEDITOR . tools . repeat ( a , 2 ) } ) ) ; c = c . replace ( /^ | $/g , "\x26nbsp;" ) ; return c = c . replace ( /(>|\s) /g ,
function ( a , f ) { return f + "\x26nbsp;" } ) . replace ( / (?=<)/g , "\x26nbsp;" ) } , getNextNumber : function ( ) { var a = 0 ; return function ( ) { return ++ a } } ( ) , getNextId : function ( ) { return "cke_" + this . getNextNumber ( ) } , getUniqueId : function ( ) { for ( var a = "e" , f = 0 ; 8 > f ; f ++ ) a += Math . floor ( 65536 * ( 1 + Math . random ( ) ) ) . toString ( 16 ) . substring ( 1 ) ; return a } , override : function ( a , f ) { var b = f ( a ) ; b . prototype = a . prototype ; return b } , setTimeout : function ( a , f , b , c , k ) { k || ( k = window ) ; b || ( b = k ) ; return k . setTimeout ( function ( ) { c ? a . apply ( b , [ ] . concat ( c ) ) : a . apply ( b ) } ,
b = [ ] , c = 0 ; c < a . length ; c ++ ) if ( f = a [ c ] ) / @ import | [ { } ] / . test ( f ) ? b . push ( "\x3cstyle\x3e" + f + "\x3c/style\x3e" ) : b . push ( '\x3clink type\x3d"text/css" rel\x3dstylesheet href\x3d"' + f + '"\x3e' ) ; return b . join ( "" ) } , htmlEncode : function ( a ) { return void 0 === a || null === a ? "" : String ( a ) . replace ( b , "\x26amp;" ) . replace ( c , "\x26gt;" ) . replace ( e , "\x26lt;" ) } , htmlDecode : function ( a ) { return a . replace ( k , q ) } , htmlEncodeAttr : function ( a ) { return CKEDITOR . tools . htmlEncode ( a ) . replace ( g , "\x26quot;" ) } , htmlDecodeAttr : function ( a ) { return CKEDITOR . tools . htmlDecode ( a ) } ,
transformPlainTextToHtml : function ( a , f ) { var b = f == CKEDITOR . ENTER _BR , c = this . htmlEncode ( a . replace ( /\r\n/g , "\n" ) ) , c = c . replace ( /\t/g , "\x26nbsp;\x26nbsp; \x26nbsp;" ) , l = f == CKEDITOR . ENTER _P ? "p" : "div" ; if ( ! b ) { var d = /\n{2}/g ; if ( d . test ( c ) ) var n = "\x3c" + l + "\x3e" , q = "\x3c/" + l + "\x3e" , c = n + c . replace ( d , function ( ) { return q + n } ) + q } c = c . replace ( /\n/g , "\x3cbr\x3e" ) ; b || ( c = c . replace ( new RegExp ( "\x3cbr\x3e(?\x3d\x3c/" + l + "\x3e)" ) , function ( a ) { return CKEDITOR . tools . repeat ( a , 2 ) } ) ) ; c = c . replace ( /^ | $/g , "\x26nbsp;" ) ; return c = c . replace ( /(>|\s) /g ,
function ( a , f ) { return f + "\x26nbsp;" } ) . replace ( / (?=<)/g , "\x26nbsp;" ) } , getNextNumber : function ( ) { var a = 0 ; return function ( ) { return ++ a } } ( ) , getNextId : function ( ) { return "cke_" + this . getNextNumber ( ) } , getUniqueId : function ( ) { for ( var a = "e" , f = 0 ; 8 > f ; f ++ ) a += Math . floor ( 65536 * ( 1 + Math . random ( ) ) ) . toString ( 16 ) . substring ( 1 ) ; return a } , override : function ( a , f ) { var b = f ( a ) ; b . prototype = a . prototype ; return b } , setTimeout : function ( a , f , b , c , l ) { l || ( l = window ) ; b || ( b = l ) ; return l . setTimeout ( function ( ) { c ? a . apply ( b , [ ] . concat ( c ) ) : a . apply ( b ) } ,
f || 0 ) } , trim : function ( ) { var a = /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g ; return function ( f ) { return f . replace ( a , "" ) } } ( ) , ltrim : function ( ) { var a = /^[ \t\n\r]+/g ; return function ( f ) { return f . replace ( a , "" ) } } ( ) , rtrim : function ( ) { var a = /[ \t\n\r]+$/g ; return function ( f ) { return f . replace ( a , "" ) } } ( ) , indexOf : function ( a , f ) { if ( "function" == typeof f ) for ( var b = 0 , c = a . length ; b < c ; b ++ ) { if ( f ( a [ b ] ) ) return b } else { if ( a . indexOf ) return a . indexOf ( f ) ; b = 0 ; for ( c = a . length ; b < c ; b ++ ) if ( a [ b ] === f ) return b } return - 1 } , search : function ( a , f ) { var b = CKEDITOR . tools . indexOf ( a ,
f ) ; return 0 <= b ? a [ b ] : null } , bind : function ( a , f ) { return function ( ) { return a . apply ( f , arguments ) } } , createClass : function ( a ) { var f = a . $ , b = a . base , c = a . privates || a . _ , k = a . proto ; a = a . statics ; ! f && ( f = function ( ) { b && this . base . apply ( this , arguments ) } ) ; if ( c ) var d = f , f = function ( ) { var a = this . _ || ( this . _ = { } ) , b ; for ( b in c ) { var f = c [ b ] ; a [ b ] = "function" == typeof f ? CKEDITOR . tools . bind ( f , this ) : f } d . apply ( this , arguments ) } ; b && ( f . prototype = this . prototypedCopy ( b . prototype ) , f . prototype . constructor = f , f . base = b , f . baseProto = b . prototype , f . prototype . base =
function ( ) { this . base = b . prototype . base ; b . apply ( this , arguments ) ; this . base = arguments . callee } ) ; k && this . extend ( f . prototype , k , ! 0 ) ; a && this . extend ( f , a , ! 0 ) ; return f } , addFunction : function ( b , f ) { return a . push ( function ( ) { return b . apply ( f || this , arguments ) } ) - 1 } , removeFunction : function ( b ) { a [ b ] = null } , callFunction : function ( b ) { var f = a [ b ] ; return f && f . apply ( window , Array . prototype . slice . call ( arguments , 1 ) ) } , cssLength : function ( ) { var a = /^-?\d+\.?\d*px$/ , b ; return function ( c ) { b = CKEDITOR . tools . trim ( c + "" ) + "px" ; return a . test ( b ) ?
b : c || "" } } ( ) , convertToPx : function ( ) { var a ; return function ( b ) { a || ( a = CKEDITOR . dom . element . createFromHtml ( '\x3cdiv style\x3d"position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"\x3e\x3c/div\x3e' , CKEDITOR . document ) , CKEDITOR . document . getBody ( ) . append ( a ) ) ; return /%$/ . test ( b ) ? b : ( a . setStyle ( "width" , b ) , a . $ . clientWidth ) } } ( ) , repeat : function ( a , b ) { return Array ( b + 1 ) . join ( a ) } , tryThese : function ( ) { for ( var a , b = 0 , c = arguments . length ; b < c ; b ++ ) { var k = arguments [ b ] ; try { a = k ( ) ; break } catch ( d ) { } } return a } ,
genKey : function ( ) { return Array . prototype . slice . call ( arguments ) . join ( "-" ) } , defer : function ( a ) { return function ( ) { var b = arguments , c = this ; window . setTimeout ( function ( ) { a . apply ( c , b ) } , 0 ) } } , normalizeCssText : function ( a , b ) { var c = [ ] , k , d = CKEDITOR . tools . parseCssText ( a , ! 0 , b ) ; for ( k in d ) c . push ( k + ":" + d [ k ] ) ; c . sort ( ) ; return c . length ? c . join ( ";" ) + ";" : "" } , convertRgbToHex : function ( a ) { return a . replace ( /(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi , function ( a , b , c , k ) { a = [ b , c , k ] ; for ( b = 0 ; 3 > b ; b ++ ) a [ b ] = ( "0" + parseInt ( a [ b ] , 10 ) . toString ( 16 ) ) . slice ( - 2 ) ;
return "#" + a . join ( "" ) } ) } , parseCssText : function ( a , b , c ) { var k = { } ; c && ( c = new CKEDITOR . dom . element ( "span" ) , c . setAttribute ( "style" , a ) , a = CKEDITOR . tools . convertRgbToHex ( c . getAttribute ( "style" ) || "" ) ) ; if ( ! a || ";" == a ) return k ; a . replace ( /"/g , '"' ) . replace ( /\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g , function ( a , c , d ) { b && ( c = c . toLowerCase ( ) , "font-family" == c && ( d = d . toLowerCase ( ) . replace ( /["']/g , "" ) . replace ( /\s*,\s*/g , "," ) ) , d = CKEDITOR . tools . trim ( d ) ) ; k [ c ] = d } ) ; return k } , writeCssText : function ( a , b ) { var c , k = [ ] ; for ( c in a ) k . push ( c +
":" + a [ c ] ) ; b && k . sort ( ) ; return k . join ( "; " ) } , objectCompare : function ( a , b , c ) { var k ; if ( ! a && ! b ) return ! 0 ; if ( ! a || ! b ) return ! 1 ; for ( k in a ) if ( a [ k ] != b [ k ] ) return ! 1 ; if ( ! c ) for ( k in b ) if ( a [ k ] != b [ k ] ) return ! 1 ; return ! 0 } , objectKeys : function ( a ) { var b = [ ] , c ; for ( c in a ) b . push ( c ) ; return b } , convertArrayToObject : function ( a , b ) { var c = { } ; 1 == arguments . length && ( b = ! 0 ) ; for ( var k = 0 , d = a . length ; k < d ; ++ k ) c [ a [ k ] ] = b ; return c } , fixDomain : function ( ) { for ( var a ; ; ) try { a = window . parent . document . domain ; break } catch ( b ) { a = a ? a . replace ( /.+?(?:\.|$)/ ,
"" ) : document . domain ; if ( ! a ) break ; document . domain = a } return ! ! a } , eventsBuffer : function ( a , b , c ) { function k ( ) { q = ( new Date ) . getTime ( ) ; d = ! 1 ; c ? b . call ( c ) : b ( ) } var d , q = 0 ; return { input : function ( ) { if ( ! d ) { var b = ( new Date ) . getTime ( ) - q ; b < a ? d = setTimeout ( k , a - b ) : k ( ) } } , reset : function ( ) { d && clearTimeout ( d ) ; d = q = 0 } } } , enableHtml5Elements : function ( a , b ) { for ( var c = "abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup main mark meter nav output progress section summary time video" . split ( " " ) ,
k = c . length , d ; k -- ; ) d = a . createElement ( c [ k ] ) , b && a . appendChild ( d ) } , checkIfAnyArrayItemMatches : function ( a , b ) { for ( var c = 0 , k = a . length ; c < k ; ++ c ) if ( a [ c ] . match ( b ) ) return ! 0 ; return ! 1 } , checkIfAnyObjectPropertyMatches : function ( a , b ) { for ( var c in a ) if ( c . match ( b ) ) return ! 0 ; return ! 1 } , transparentImageData : "data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw\x3d\x3d" , getCookie : function ( a ) { a = a . toLowerCase ( ) ; for ( var b = document . cookie . split ( ";" ) , c , k , d = 0 ; d < b . length ; d ++ ) if ( c = b [ d ] . split ( "\x3d" ) ,
k = decodeURIComponent ( CKEDITOR . tools . trim ( c [ 0 ] ) . toLowerCase ( ) ) , k === a ) return decodeURIComponent ( 1 < c . length ? c [ 1 ] : "" ) ; return null } , setCookie : function ( a , b ) { document . cookie = encodeURIComponent ( a ) + "\x3d" + encodeURIComponent ( b ) + ";path\x3d/" } , getCsrfToken : function ( ) { var a = CKEDITOR . tools . getCookie ( "ckCsrfToken" ) ; if ( ! a || 40 != a . length ) { var a = [ ] , b = "" ; if ( window . crypto && window . crypto . getRandomValues ) a = new Uint8Array ( 40 ) , window . crypto . getRandomValues ( a ) ; else for ( var c = 0 ; 40 > c ; c ++ ) a . push ( Math . floor ( 256 * Math . random ( ) ) ) ;
for ( c = 0 ; c < a . length ; c ++ ) var k = "abcdefghijklmnopqrstuvwxyz0123456789" . charAt ( a [ c ] % 36 ) , b = b + ( . 5 < Math . random ( ) ? k . toUpperCase ( ) : k ) ; a = b ; CKEDITOR . tools . setCookie ( "ckCsrfToken" , a ) } return a } } } ) ( ) ;
CKEDITOR . dtd = function ( ) { var a = CKEDITOR . tools . extend , d = function ( a , b ) { for ( var c = CKEDITOR . tools . clone ( a ) , k = 1 ; k < arguments . length ; k ++ ) { b = arguments [ k ] ; for ( var d in b ) delete c [ d ] } return c } , b = { } , c = { } , e = { address : 1 , article : 1 , aside : 1 , blockquote : 1 , details : 1 , div : 1 , dl : 1 , fieldset : 1 , figure : 1 , footer : 1 , form : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , header : 1 , hgroup : 1 , hr : 1 , main : 1 , menu : 1 , nav : 1 , ol : 1 , p : 1 , pre : 1 , section : 1 , table : 1 , ul : 1 } , g = { command : 1 , link : 1 , meta : 1 , noscript : 1 , script : 1 , style : 1 } , l = { } , k = { "#" : 1 } , q = { center : 1 , dir : 1 , noframes : 1 } ;
a ( b , { a : 1 , abbr : 1 , area : 1 , audio : 1 , b : 1 , bdi : 1 , bdo : 1 , br : 1 , button : 1 , canvas : 1 , cite : 1 , code : 1 , command : 1 , datalist : 1 , del : 1 , dfn : 1 , em : 1 , embed : 1 , i : 1 , iframe : 1 , img : 1 , input : 1 , ins : 1 , kbd : 1 , keygen : 1 , label : 1 , map : 1 , mark : 1 , meter : 1 , noscript : 1 , object : 1 , output : 1 , progress : 1 , q : 1 , ruby : 1 , s : 1 , samp : 1 , script : 1 , select : 1 , small : 1 , span : 1 , strong : 1 , sub : 1 , sup : 1 , textarea : 1 , time : 1 , u : 1 , "var" : 1 , video : 1 , wbr : 1 } , k , { acronym : 1 , applet : 1 , basefont : 1 , big : 1 , font : 1 , isindex : 1 , strike : 1 , style : 1 , tt : 1 } ) ; a ( c , e , b , q ) ; d = { a : d ( b , { a : 1 , button : 1 } ) , abbr : b , address : c ,
area : l , article : c , aside : c , audio : a ( { source : 1 , track : 1 } , c ) , b : b , base : l , bdi : b , bdo : b , blockquote : c , body : c , br : l , button : d ( b , { a : 1 , button : 1 } ) , canvas : b , caption : c , cite : b , code : b , col : l , colgroup : { col : 1 } , command : l , datalist : a ( { option : 1 } , b ) , dd : c , del : b , details : a ( { summary : 1 } , c ) , dfn : b , div : c , dl : { dt : 1 , dd : 1 } , dt : c , em : b , embed : l , fieldset : a ( { legend : 1 } , c ) , figcaption : c , figure : a ( { figcaption : 1 } , c ) , footer : c , form : c , h1 : b , h2 : b , h3 : b , h4 : b , h5 : b , h6 : b , head : a ( { title : 1 , base : 1 } , g ) , header : c , hgroup : { h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 } , hr : l , html : a ( { head : 1 ,
body : 1 } , c , g ) , i : b , iframe : k , img : l , input : l , ins : b , kbd : b , keygen : l , label : b , legend : b , li : c , link : l , main : c , map : c , mark : b , menu : a ( { li : 1 } , c ) , meta : l , meter : d ( b , { meter : 1 } ) , nav : c , noscript : a ( { link : 1 , meta : 1 , style : 1 } , b ) , object : a ( { param : 1 } , b ) , ol : { li : 1 } , optgroup : { option : 1 } , option : k , output : b , p : b , param : l , pre : b , progress : d ( b , { progress : 1 } ) , q : b , rp : b , rt : b , ruby : a ( { rp : 1 , rt : 1 } , b ) , s : b , samp : b , script : k , section : c , select : { optgroup : 1 , option : 1 } , small : b , source : l , span : b , strong : b , style : k , sub : b , summary : a ( { h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 } , b ) ,
sup : b , table : { caption : 1 , colgroup : 1 , thead : 1 , tfoot : 1 , tbody : 1 , tr : 1 } , tbody : { tr : 1 } , td : c , textarea : k , tfoot : { tr : 1 } , th : c , thead : { tr : 1 } , time : d ( b , { time : 1 } ) , title : k , tr : { th : 1 , td : 1 } , track : l , u : b , ul : { li : 1 } , "var" : b , video : a ( { source : 1 , track : 1 } , c ) , wbr : l , acronym : b , applet : a ( { param : 1 } , c ) , basefont : l , big : b , center : c , dialog : l , dir : { li : 1 } , font : b , isindex : l , noframes : c , strike : b , tt : b } ; a ( d , { $block : a ( { audio : 1 , dd : 1 , dt : 1 , figcaption : 1 , li : 1 , video : 1 } , e , q ) , $blockLimit : { article : 1 , aside : 1 , audio : 1 , body : 1 , caption : 1 , details : 1 , dir : 1 , div : 1 , dl : 1 ,
f ) ; return 0 <= b ? a [ b ] : null } , bind : function ( a , f ) { return function ( ) { return a . apply ( f , arguments ) } } , createClass : function ( a ) { var f = a . $ , b = a . base , c = a . privates || a . _ , l = a . proto ; a = a . statics ; ! f && ( f = function ( ) { b && this . base . apply ( this , arguments ) } ) ; if ( c ) var d = f , f = function ( ) { var a = this . _ || ( this . _ = { } ) , f ; for ( f in c ) { var b = c [ f ] ; a [ f ] = "function" == typeof b ? CKEDITOR . tools . bind ( b , this ) : b } d . apply ( this , arguments ) } ; b && ( f . prototype = this . prototypedCopy ( b . prototype ) , f . prototype . constructor = f , f . base = b , f . baseProto = b . prototype , f . prototype . base =
function ( ) { this . base = b . prototype . base ; b . apply ( this , arguments ) ; this . base = arguments . callee } ) ; l && this . extend ( f . prototype , l , ! 0 ) ; a && this . extend ( f , a , ! 0 ) ; return f } , addFunction : function ( b , f ) { return a . push ( function ( ) { return b . apply ( f || this , arguments ) } ) - 1 } , removeFunction : function ( b ) { a [ b ] = null } , callFunction : function ( b ) { var f = a [ b ] ; return f && f . apply ( window , Array . prototype . slice . call ( arguments , 1 ) ) } , cssLength : function ( ) { var a = /^-?\d+\.?\d*px$/ , f ; return function ( b ) { f = CKEDITOR . tools . trim ( b + "" ) + "px" ; return a . test ( f ) ?
f : b || "" } } ( ) , convertToPx : function ( ) { var a ; return function ( f ) { a || ( a = CKEDITOR . dom . element . createFromHtml ( '\x3cdiv style\x3d"position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"\x3e\x3c/div\x3e' , CKEDITOR . document ) , CKEDITOR . document . getBody ( ) . append ( a ) ) ; return /%$/ . test ( f ) ? f : ( a . setStyle ( "width" , f ) , a . $ . clientWidth ) } } ( ) , repeat : function ( a , f ) { return Array ( f + 1 ) . join ( a ) } , tryThese : function ( ) { for ( var a , f = 0 , b = arguments . length ; f < b ; f ++ ) { var c = arguments [ f ] ; try { a = c ( ) ; break } catch ( l ) { } } return a } ,
genKey : function ( ) { return Array . prototype . slice . call ( arguments ) . join ( "-" ) } , defer : function ( a ) { return function ( ) { var b = arguments , c = this ; window . setTimeout ( function ( ) { a . apply ( c , b ) } , 0 ) } } , normalizeCssText : function ( a , b ) { var c = [ ] , l , d = CKEDITOR . tools . parseCssText ( a , ! 0 , b ) ; for ( l in d ) c . push ( l + ":" + d [ l ] ) ; c . sort ( ) ; return c . length ? c . join ( ";" ) + ";" : "" } , convertRgbToHex : function ( a ) { return a . replace ( /(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi , function ( a , b , c , l ) { a = [ b , c , l ] ; for ( b = 0 ; 3 > b ; b ++ ) a [ b ] = ( "0" + parseInt ( a [ b ] , 10 ) . toString ( 16 ) ) . slice ( - 2 ) ;
return "#" + a . join ( "" ) } ) } , normalizeHex : function ( a ) { return a . replace ( /#(([0-9a-f]{3}){1,2})($|;|\s+)/gi , function ( a , b , c , l ) { a = b . toLowerCase ( ) ; 3 == a . length && ( a = a . split ( "" ) , a = [ a [ 0 ] , a [ 0 ] , a [ 1 ] , a [ 1 ] , a [ 2 ] , a [ 2 ] ] . join ( "" ) ) ; return "#" + a + l } ) } , parseCssText : function ( a , b , c ) { var l = { } ; c && ( a = ( new CKEDITOR . dom . element ( "span" ) ) . setAttribute ( "style" , a ) . getAttribute ( "style" ) || "" ) ; a && ( a = CKEDITOR . tools . normalizeHex ( CKEDITOR . tools . convertRgbToHex ( a ) ) ) ; if ( ! a || ";" == a ) return l ; a . replace ( /"/g , '"' ) . replace ( /\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g ,
function ( a , c , d ) { b && ( c = c . toLowerCase ( ) , "font-family" == c && ( d = d . replace ( /\s*,\s*/g , "," ) ) , d = CKEDITOR . tools . trim ( d ) ) ; l [ c ] = d } ) ; return l } , writeCssText : function ( a , b ) { var c , l = [ ] ; for ( c in a ) l . push ( c + ":" + a [ c ] ) ; b && l . sort ( ) ; return l . join ( "; " ) } , objectCompare : function ( a , b , c ) { var l ; if ( ! a && ! b ) return ! 0 ; if ( ! a || ! b ) return ! 1 ; for ( l in a ) if ( a [ l ] != b [ l ] ) return ! 1 ; if ( ! c ) for ( l in b ) if ( a [ l ] != b [ l ] ) return ! 1 ; return ! 0 } , objectKeys : function ( a ) { var b = [ ] , c ; for ( c in a ) b . push ( c ) ; return b } , convertArrayToObject : function ( a , b ) { var c = { } ; 1 ==
arguments . length && ( b = ! 0 ) ; for ( var l = 0 , d = a . length ; l < d ; ++ l ) c [ a [ l ] ] = b ; return c } , fixDomain : function ( ) { for ( var a ; ; ) try { a = window . parent . document . domain ; break } catch ( b ) { a = a ? a . replace ( /.+?(?:\.|$)/ , "" ) : document . domain ; if ( ! a ) break ; document . domain = a } return ! ! a } , eventsBuffer : function ( a , b , c ) { function l ( ) { q = ( new Date ) . getTime ( ) ; d = ! 1 ; c ? b . call ( c ) : b ( ) } var d , q = 0 ; return { input : function ( ) { if ( ! d ) { var b = ( new Date ) . getTime ( ) - q ; b < a ? d = setTimeout ( l , a - b ) : l ( ) } } , reset : function ( ) { d && clearTimeout ( d ) ; d = q = 0 } } } , enableHtml5Elements : function ( a ,
b ) { for ( var c = "abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup main mark meter nav output progress section summary time video" . split ( " " ) , l = c . length , d ; l -- ; ) d = a . createElement ( c [ l ] ) , b && a . appendChild ( d ) } , checkIfAnyArrayItemMatches : function ( a , b ) { for ( var c = 0 , l = a . length ; c < l ; ++ c ) if ( a [ c ] . match ( b ) ) return ! 0 ; return ! 1 } , checkIfAnyObjectPropertyMatches : function ( a , b ) { for ( var c in a ) if ( c . match ( b ) ) return ! 0 ; return ! 1 } , transparentImageData : "data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw\x3d\x3d" ,
getCookie : function ( a ) { a = a . toLowerCase ( ) ; for ( var b = document . cookie . split ( ";" ) , c , l , d = 0 ; d < b . length ; d ++ ) if ( c = b [ d ] . split ( "\x3d" ) , l = decodeURIComponent ( CKEDITOR . tools . trim ( c [ 0 ] ) . toLowerCase ( ) ) , l === a ) return decodeURIComponent ( 1 < c . length ? c [ 1 ] : "" ) ; return null } , setCookie : function ( a , b ) { document . cookie = encodeURIComponent ( a ) + "\x3d" + encodeURIComponent ( b ) + ";path\x3d/" } , getCsrfToken : function ( ) { var a = CKEDITOR . tools . getCookie ( "ckCsrfToken" ) ; if ( ! a || 40 != a . length ) { var a = [ ] , b = "" ; if ( window . crypto && window . crypto . getRandomValues ) a =
new Uint8Array ( 40 ) , window . crypto . getRandomValues ( a ) ; else for ( var c = 0 ; 40 > c ; c ++ ) a . push ( Math . floor ( 256 * Math . random ( ) ) ) ; for ( c = 0 ; c < a . length ; c ++ ) var l = "abcdefghijklmnopqrstuvwxyz0123456789" . charAt ( a [ c ] % 36 ) , b = b + ( . 5 < Math . random ( ) ? l . toUpperCase ( ) : l ) ; a = b ; CKEDITOR . tools . setCookie ( "ckCsrfToken" , a ) } return a } , escapeCss : function ( a ) { return a ? window . CSS && CSS . escape ? CSS . escape ( a ) : isNaN ( parseInt ( a . charAt ( 0 ) , 10 ) ) ? a : "\\3" + a . charAt ( 0 ) + " " + a . substring ( 1 , a . length ) : "" } } } ) ( ) ;
CKEDITOR . dtd = function ( ) { var a = CKEDITOR . tools . extend , d = function ( a , b ) { for ( var c = CKEDITOR . tools . clone ( a ) , l = 1 ; l < arguments . length ; l ++ ) { b = arguments [ l ] ; for ( var d in b ) delete c [ d ] } return c } , b = { } , c = { } , e = { address : 1 , article : 1 , aside : 1 , blockquote : 1 , details : 1 , div : 1 , dl : 1 , fieldset : 1 , figure : 1 , footer : 1 , form : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , header : 1 , hgroup : 1 , hr : 1 , main : 1 , menu : 1 , nav : 1 , ol : 1 , p : 1 , pre : 1 , section : 1 , table : 1 , ul : 1 } , g = { command : 1 , link : 1 , meta : 1 , noscript : 1 , script : 1 , style : 1 } , k = { } , l = { "#" : 1 } , q = { center : 1 , dir : 1 , noframes : 1 } ;
a ( b , { a : 1 , abbr : 1 , area : 1 , audio : 1 , b : 1 , bdi : 1 , bdo : 1 , br : 1 , button : 1 , canvas : 1 , cite : 1 , code : 1 , command : 1 , datalist : 1 , del : 1 , dfn : 1 , em : 1 , embed : 1 , i : 1 , iframe : 1 , img : 1 , input : 1 , ins : 1 , kbd : 1 , keygen : 1 , label : 1 , map : 1 , mark : 1 , meter : 1 , noscript : 1 , object : 1 , output : 1 , progress : 1 , q : 1 , ruby : 1 , s : 1 , samp : 1 , script : 1 , select : 1 , small : 1 , span : 1 , strong : 1 , sub : 1 , sup : 1 , textarea : 1 , time : 1 , u : 1 , "var" : 1 , video : 1 , wbr : 1 } , l , { acronym : 1 , applet : 1 , basefont : 1 , big : 1 , font : 1 , isindex : 1 , strike : 1 , style : 1 , tt : 1 } ) ; a ( c , e , b , q ) ; d = { a : d ( b , { a : 1 , button : 1 } ) , abbr : b , address : c ,
area : k , article : c , aside : c , audio : a ( { source : 1 , track : 1 } , c ) , b : b , base : k , bdi : b , bdo : b , blockquote : c , body : c , br : k , button : d ( b , { a : 1 , button : 1 } ) , canvas : b , caption : c , cite : b , code : b , col : k , colgroup : { col : 1 } , command : k , datalist : a ( { option : 1 } , b ) , dd : c , del : b , details : a ( { summary : 1 } , c ) , dfn : b , div : c , dl : { dt : 1 , dd : 1 } , dt : c , em : b , embed : k , fieldset : a ( { legend : 1 } , c ) , figcaption : c , figure : a ( { figcaption : 1 } , c ) , footer : c , form : c , h1 : b , h2 : b , h3 : b , h4 : b , h5 : b , h6 : b , head : a ( { title : 1 , base : 1 } , g ) , header : c , hgroup : { h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 } , hr : k , html : a ( { head : 1 ,
body : 1 } , c , g ) , i : b , iframe : l , img : k , input : k , ins : b , kbd : b , keygen : k , label : b , legend : b , li : c , link : k , main : c , map : c , mark : b , menu : a ( { li : 1 } , c ) , meta : k , meter : d ( b , { meter : 1 } ) , nav : c , noscript : a ( { link : 1 , meta : 1 , style : 1 } , b ) , object : a ( { param : 1 } , b ) , ol : { li : 1 } , optgroup : { option : 1 } , option : l , output : b , p : b , param : k , pre : b , progress : d ( b , { progress : 1 } ) , q : b , rp : b , rt : b , ruby : a ( { rp : 1 , rt : 1 } , b ) , s : b , samp : b , script : l , section : c , select : { optgroup : 1 , option : 1 } , small : b , source : k , span : b , strong : b , style : l , sub : b , summary : a ( { h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 } , b ) ,
sup : b , table : { caption : 1 , colgroup : 1 , thead : 1 , tfoot : 1 , tbody : 1 , tr : 1 } , tbody : { tr : 1 } , td : c , textarea : l , tfoot : { tr : 1 } , th : c , thead : { tr : 1 } , time : d ( b , { time : 1 } ) , title : l , tr : { th : 1 , td : 1 } , track : k , u : b , ul : { li : 1 } , "var" : b , video : a ( { source : 1 , track : 1 } , c ) , wbr : k , acronym : b , applet : a ( { param : 1 } , c ) , basefont : k , big : b , center : c , dialog : k , dir : { li : 1 } , font : b , isindex : k , noframes : c , strike : b , tt : b } ; a ( d , { $block : a ( { audio : 1 , dd : 1 , dt : 1 , figcaption : 1 , li : 1 , video : 1 } , e , q ) , $blockLimit : { article : 1 , aside : 1 , audio : 1 , body : 1 , caption : 1 , details : 1 , dir : 1 , div : 1 , dl : 1 ,
fieldset : 1 , figcaption : 1 , figure : 1 , footer : 1 , form : 1 , header : 1 , hgroup : 1 , main : 1 , menu : 1 , nav : 1 , ol : 1 , section : 1 , table : 1 , td : 1 , th : 1 , tr : 1 , ul : 1 , video : 1 } , $cdata : { script : 1 , style : 1 } , $editable : { address : 1 , article : 1 , aside : 1 , blockquote : 1 , body : 1 , details : 1 , div : 1 , fieldset : 1 , figcaption : 1 , footer : 1 , form : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , header : 1 , hgroup : 1 , main : 1 , nav : 1 , p : 1 , pre : 1 , section : 1 } , $empty : { area : 1 , base : 1 , basefont : 1 , br : 1 , col : 1 , command : 1 , dialog : 1 , embed : 1 , hr : 1 , img : 1 , input : 1 , isindex : 1 , keygen : 1 , link : 1 , meta : 1 , param : 1 , source : 1 ,
track : 1 , wbr : 1 } , $inline : b , $list : { dl : 1 , ol : 1 , ul : 1 } , $listItem : { dd : 1 , dt : 1 , li : 1 } , $nonBodyContent : a ( { body : 1 , head : 1 , html : 1 } , d . head ) , $nonEditable : { applet : 1 , audio : 1 , button : 1 , embed : 1 , iframe : 1 , map : 1 , object : 1 , option : 1 , param : 1 , script : 1 , textarea : 1 , video : 1 } , $object : { applet : 1 , audio : 1 , button : 1 , hr : 1 , iframe : 1 , img : 1 , input : 1 , object : 1 , select : 1 , table : 1 , textarea : 1 , video : 1 } , $removeEmpty : { abbr : 1 , acronym : 1 , b : 1 , bdi : 1 , bdo : 1 , big : 1 , cite : 1 , code : 1 , del : 1 , dfn : 1 , em : 1 , font : 1 , i : 1 , ins : 1 , label : 1 , kbd : 1 , mark : 1 , meter : 1 , output : 1 , q : 1 , ruby : 1 ,
s : 1 , samp : 1 , small : 1 , span : 1 , strike : 1 , strong : 1 , sub : 1 , sup : 1 , time : 1 , tt : 1 , u : 1 , "var" : 1 } , $tabIndex : { a : 1 , area : 1 , button : 1 , input : 1 , object : 1 , select : 1 , textarea : 1 } , $tableContent : { caption : 1 , col : 1 , colgroup : 1 , tbody : 1 , td : 1 , tfoot : 1 , th : 1 , thead : 1 , tr : 1 } , $transparent : { a : 1 , audio : 1 , canvas : 1 , del : 1 , ins : 1 , map : 1 , noscript : 1 , object : 1 , video : 1 } , $intermediate : { caption : 1 , colgroup : 1 , dd : 1 , dt : 1 , figcaption : 1 , legend : 1 , li : 1 , optgroup : 1 , option : 1 , rp : 1 , rt : 1 , summary : 1 , tbody : 1 , td : 1 , tfoot : 1 , th : 1 , thead : 1 , tr : 1 } } ) ; return d } ( ) ;
@@ -73,192 +73,193 @@ CKEDITOR.tools.extend(CKEDITOR.dom.window.prototype,{focus:function(){this.$.foc
a . body . scrollTop || 0 } } , getFrame : function ( ) { var a = this . $ . frameElement ; return a ? new CKEDITOR . dom . element . get ( a ) : null } } ) ; CKEDITOR . dom . document = function ( a ) { CKEDITOR . dom . domObject . call ( this , a ) } ; CKEDITOR . dom . document . prototype = new CKEDITOR . dom . domObject ;
CKEDITOR . tools . extend ( CKEDITOR . dom . document . prototype , { type : CKEDITOR . NODE _DOCUMENT , appendStyleSheet : function ( a ) { if ( this . $ . createStyleSheet ) this . $ . createStyleSheet ( a ) ; else { var d = new CKEDITOR . dom . element ( "link" ) ; d . setAttributes ( { rel : "stylesheet" , type : "text/css" , href : a } ) ; this . getHead ( ) . append ( d ) } } , appendStyleText : function ( a ) { if ( this . $ . createStyleSheet ) { var d = this . $ . createStyleSheet ( "" ) ; d . cssText = a } else { var b = new CKEDITOR . dom . element ( "style" , this ) ; b . append ( new CKEDITOR . dom . text ( a , this ) ) ; this . getHead ( ) . append ( b ) } return d ||
b . $ . sheet } , createElement : function ( a , d ) { var b = new CKEDITOR . dom . element ( a , this ) ; d && ( d . attributes && b . setAttributes ( d . attributes ) , d . styles && b . setStyles ( d . styles ) ) ; return b } , createText : function ( a ) { return new CKEDITOR . dom . text ( a , this ) } , focus : function ( ) { this . getWindow ( ) . focus ( ) } , getActive : function ( ) { var a ; try { a = this . $ . activeElement } catch ( d ) { return null } return new CKEDITOR . dom . element ( a ) } , getById : function ( a ) { return ( a = this . $ . getElementById ( a ) ) ? new CKEDITOR . dom . element ( a ) : null } , getByAddress : function ( a , d ) { for ( var b =
this . $ . documentElement , c = 0 ; b && c < a . length ; c ++ ) { var e = a [ c ] ; if ( d ) for ( var g = - 1 , l = 0 ; l < b . childNodes . length ; l ++ ) { var k = b . childNodes [ l ] ; if ( ! 0 !== d || 3 != k . nodeType || ! k . previousSibling || 3 != k . previousSibling . nodeType ) if ( g ++ , g == e ) { b = k ; break } } else b = b . childNodes [ e ] } return b ? new CKEDITOR . dom . node ( b ) : null } , getElementsByTag : function ( a , d ) { CKEDITOR . env . ie && 8 >= document . documentMode || ! d || ( a = d + ":" + a ) ; return new CKEDITOR . dom . nodeList ( this . $ . getElementsByTagName ( a ) ) } , getHead : function ( ) { var a = this . $ . getElementsByTagName ( "head" ) [ 0 ] ;
this . $ . documentElement , c = 0 ; b && c < a . length ; c ++ ) { var e = a [ c ] ; if ( d ) for ( var g = - 1 , k = 0 ; k < b . childNodes . length ; k ++ ) { var l = b . childNodes [ k ] ; if ( ! 0 !== d || 3 != l . nodeType || ! l . previousSibling || 3 != l . previousSibling . nodeType ) if ( g ++ , g == e ) { b = l ; break } } else b = b . childNodes [ e ] } return b ? new CKEDITOR . dom . node ( b ) : null } , getElementsByTag : function ( a , d ) { CKEDITOR . env . ie && 8 >= document . documentMode || ! d || ( a = d + ":" + a ) ; return new CKEDITOR . dom . nodeList ( this . $ . getElementsByTagName ( a ) ) } , getHead : function ( ) { var a = this . $ . getElementsByTagName ( "head" ) [ 0 ] ;
return a = a ? new CKEDITOR . dom . element ( a ) : this . getDocumentElement ( ) . append ( new CKEDITOR . dom . element ( "head" ) , ! 0 ) } , getBody : function ( ) { return new CKEDITOR . dom . element ( this . $ . body ) } , getDocumentElement : function ( ) { return new CKEDITOR . dom . element ( this . $ . documentElement ) } , getWindow : function ( ) { return new CKEDITOR . dom . window ( this . $ . parentWindow || this . $ . defaultView ) } , write : function ( a ) { this . $ . open ( "text/html" , "replace" ) ; CKEDITOR . env . ie && ( a = a . replace ( /(?:^\s*<!DOCTYPE[^>]*?>)|^/i , '$\x26\n\x3cscript data-cke-temp\x3d"1"\x3e(' +
CKEDITOR . tools . fixDomain + ")();\x3c/script\x3e" ) ) ; this . $ . write ( a ) ; this . $ . close ( ) } , find : function ( a ) { return new CKEDITOR . dom . nodeList ( this . $ . querySelectorAll ( a ) ) } , findOne : function ( a ) { return ( a = this . $ . querySelector ( a ) ) ? new CKEDITOR . dom . element ( a ) : null } , _getHtml5ShivFrag : function ( ) { var a = this . getCustomData ( "html5ShivFrag" ) ; a || ( a = this . $ . createDocumentFragment ( ) , CKEDITOR . tools . enableHtml5Elements ( a , ! 0 ) , this . setCustomData ( "html5ShivFrag" , a ) ) ; return a } } ) ; CKEDITOR . dom . nodeList = function ( a ) { this . $ = a } ;
CKEDITOR . dom . nodeList . prototype = { count : function ( ) { return this . $ . length } , getItem : function ( a ) { return 0 > a || a >= this . $ . length ? null : ( a = this . $ [ a ] ) ? new CKEDITOR . dom . node ( a ) : null } } ; CKEDITOR . dom . element = function ( a , d ) { "string" == typeof a && ( a = ( d ? d . $ : document ) . createElement ( a ) ) ; CKEDITOR . dom . domObject . call ( this , a ) } ; CKEDITOR . dom . element . get = function ( a ) { return ( a = "string" == typeof a ? document . getElementById ( a ) || document . getElementsByName ( a ) [ 0 ] : a ) && ( a . $ ? a : new CKEDITOR . dom . element ( a ) ) } ; CKEDITOR . dom . element . prototype = new CKEDITOR . dom . node ;
CKEDITOR . dom . element . createFromHtml = function ( a , d ) { var b = new CKEDITOR . dom . element ( "div" , d ) ; b . setHtml ( a ) ; return b . getFirst ( ) . remove ( ) } ; CKEDITOR . dom . element . setMarker = function ( a , d , b , c ) { var e = d . getCustomData ( "list_marker_id" ) || d . setCustomData ( "list_marker_id" , CKEDITOR . tools . getNextNumber ( ) ) . getCustomData ( "list_marker_id" ) , g = d . getCustomData ( "list_marker_names" ) || d . setCustomData ( "list_marker_names" , { } ) . getCustomData ( "list_marker_names" ) ; a [ e ] = d ; g [ b ] = 1 ; return d . setCustomData ( b , c ) } ;
CKEDITOR . dom . element . clearAllMarkers = function ( a ) { for ( var d in a ) CKEDITOR . dom . element . clearMarkers ( a , a [ d ] , 1 ) } ; CKEDITOR . dom . element . clearMarkers = function ( a , d , b ) { var c = d . getCustomData ( "list_marker_names" ) , e = d . getCustomData ( "list_marker_id" ) , g ; for ( g in c ) d . removeCustomData ( g ) ; d . removeCustomData ( "list_marker_names" ) ; b && ( d . removeCustomData ( "list_marker_id" ) , delete a [ e ] ) } ;
( function ( ) { function a ( a , b ) { return - 1 < ( " " + a + " " ) . replace ( g , " " ) . indexOf ( " " + b + " " ) } function d ( a ) { var b = ! 0 ; a . $ . id || ( a . $ . id = "cke_tmp_" + CKEDITOR . tools . getNextNumber ( ) , b = ! 1 ) ; return function ( ) { b || a . removeAttribute ( "id" ) } } function b ( a , b ) { return "#" + a . $ . id + " " + b . split ( /,\s*/ ) . join ( ", #" + a . $ . id + " " ) } function c ( a ) { for ( var b = 0 , c = 0 , f = l [ a ] . length ; c < f ; c ++ ) b += parseInt ( this . getComputedStyle ( l [ a ] [ c ] ) || 0 , 10 ) || 0 ; return b } var e = document . createElement ( "_" ) . classList , e = "undefined" !== typeof e && null !== String ( e . add ) . match ( /\[Native code\]/gi ) ,
g = /[\n\t\r]/g ; CKEDITOR . tools . extend ( CKEDITOR . dom . element . prototype , { type : CKEDITOR . NODE _ELEMENT , addClass : e ? function ( a ) { this . $ . classList . add ( a ) ; return this } : function ( b ) { var c = this . $ . className ; c && ( a ( c , b ) || ( c += " " + b ) ) ; this . $ . className = c || b ; return this } , removeClass : e ? function ( a ) { var b = this . $ ; b . classList . remove ( a ) ; b . className || b . removeAttribute ( "class" ) ; return this } : function ( b ) { var c = this . getAttribute ( "class" ) ; c && a ( c , b ) && ( ( c = c . replace ( new RegExp ( "(?:^|\\s+)" + b + "(?\x3d\\s|$)" ) , "" ) . replace ( /^\s+/ , "" ) ) ? this . setAttribute ( "class" ,
c ) : this . removeAttribute ( "class" ) ) ; return this } , hasClass : function ( b ) { return a ( this . $ . className , b ) } , append : function ( a , b ) { "string" == typeof a && ( a = this . getDocument ( ) . createElement ( a ) ) ; b ? this . $ . insertBefore ( a . $ , this . $ . firstChild ) : this . $ . appendChild ( a . $ ) ; return a } , appendHtml : function ( a ) { if ( this . $ . childNodes . length ) { var b = new CKEDITOR . dom . element ( "div" , this . getDocument ( ) ) ; b . setHtml ( a ) ; b . moveChildren ( this ) } else this . setHtml ( a ) } , appendText : function ( a ) { null != this . $ . text && CKEDITOR . env . ie && 9 > CKEDITOR . env . version ?
this . $ . text += a : this . append ( new CKEDITOR . dom . text ( a ) ) } , appendBogus : function ( a ) { if ( a || CKEDITOR . env . needsBrFiller ) { for ( a = this . getLast ( ) ; a && a . type == CKEDITOR . NODE _TEXT && ! CKEDITOR . tools . rtrim ( a . getText ( ) ) ; ) a = a . getPrevious ( ) ; a && a . is && a . is ( "br" ) || ( a = this . getDocument ( ) . createElement ( "br" ) , CKEDITOR . env . gecko && a . setAttribute ( "type" , "_moz" ) , this . append ( a ) ) } } , breakParent : function ( a , b ) { var c = new CKEDITOR . dom . range ( this . getDocument ( ) ) ; c . setStartAfter ( this ) ; c . setEndAfter ( a ) ; var f = c . extractContents ( ! 1 , b || ! 1 ) ; c . insertNode ( this . remove ( ) ) ;
f . insertAfterNode ( this ) } , contains : document . compareDocumentPosition ? function ( a ) { return ! ! ( this . $ . compareDocumentPosition ( a . $ ) & 16 ) } : function ( a ) { var b = this . $ ; return a . type != CKEDITOR . NODE _ELEMENT ? b . contains ( a . getParent ( ) . $ ) : b != a . $ && b . contains ( a . $ ) } , focus : function ( ) { function a ( ) { try { this . $ . focus ( ) } catch ( b ) { } } return function ( b ) { b ? CKEDITOR . tools . setTimeout ( a , 100 , this ) : a . call ( this ) } } ( ) , getHtml : function ( ) { var a = this . $ . innerHTML ; return CKEDITOR . env . ie ? a . replace ( /<\?[^>]*>/g , "" ) : a } , getOuterHtml : function ( ) { if ( this . $ . outerHTML ) return this . $ . outerHTML . replace ( /<\?[^>]*>/ ,
"" ) ; var a = this . $ . ownerDocument . createElement ( "div" ) ; a . appendChild ( this . $ . cloneNode ( ! 0 ) ) ; return a . innerHTML } , getClientRect : function ( ) { var a = CKEDITOR . tools . extend ( { } , this . $ . getBoundingClientRect ( ) ) ; ! a . width && ( a . width = a . right - a . left ) ; ! a . height && ( a . height = a . bottom - a . top ) ; return a } , setHtml : CKEDITOR . env . ie && 9 > CKEDITOR . env . version ? function ( a ) { try { var b = this . $ ; if ( this . getParent ( ) ) return b . innerHTML = a ; var c = this . getDocument ( ) . _getHtml5ShivFrag ( ) ; c . appendChild ( b ) ; b . innerHTML = a ; c . removeChild ( b ) ; return a } catch ( f ) { this . $ . innerHTML =
"" ; b = new CKEDITOR . dom . element ( "body" , this . getDocument ( ) ) ; b . $ . innerHTML = a ; for ( b = b . getChildren ( ) ; b . count ( ) ; ) this . append ( b . getItem ( 0 ) ) ; return a } } : function ( a ) { return this . $ . innerHTML = a } , setText : function ( ) { var a = document . createElement ( "p" ) ; a . innerHTML = "x" ; a = a . textContent ; return function ( b ) { this . $ [ a ? "textContent" : "innerText" ] = b } } ( ) , getAttribute : function ( ) { var a = function ( a ) { return this . $ . getAttribute ( a , 2 ) } ; return CKEDITOR . env . ie && ( CKEDITOR . env . ie7Compat || CKEDITOR . env . quirks ) ? function ( a ) { switch ( a ) { case "class" : a =
"className" ; break ; case "http-equiv" : a = "httpEquiv" ; break ; case "name" : return this . $ . name ; case "tabindex" : return a = this . $ . getAttribute ( a , 2 ) , 0 !== a && 0 === this . $ . tabIndex && ( a = null ) , a ; case "checked" : return a = this . $ . attributes . getNamedItem ( a ) , ( a . specified ? a . nodeValue : this . $ . checked ) ? "checked" : null ; case "hspace" : case "value" : return this . $ [ a ] ; case "style" : return this . $ . style . cssText ; case "contenteditable" : case "contentEditable" : return this . $ . attributes . getNamedItem ( "contentEditable" ) . specified ? this . $ . getAttribute ( "contentEditable" ) :
null } return this . $ . getAttribute ( a , 2 ) } : a } ( ) , getAttributes : function ( a ) { var b = { } , c = this . $ . attributes , f ; a = CKEDITOR . tools . isArray ( a ) ? a : [ ] ; for ( f = 0 ; f < c . length ; f ++ ) - 1 === CKEDITOR . tools . indexOf ( a , c [ f ] . name ) && ( b [ c [ f ] . name ] = c [ f ] . value ) ; return b } , getChildren : function ( ) { return new CKEDITOR . dom . nodeList ( this . $ . childNodes ) } , getComputedStyle : document . defaultView && document . defaultView . getComputedStyle ? function ( a ) { var b = this . getWindow ( ) . $ . getComputedStyle ( this . $ , null ) ; return b ? b . getPropertyValue ( a ) : "" } : function ( a ) { return this . $ . currentStyle [ CKEDITOR . tools . cssStyleToDomStyle ( a ) ] } ,
getDtd : function ( ) { var a = CKEDITOR . dtd [ this . getName ( ) ] ; this . getDtd = function ( ) { return a } ; return a } , getElementsByTag : CKEDITOR . dom . document . prototype . getElementsByTag , getTabIndex : function ( ) { var a = this . $ . tabIndex ; return 0 !== a || CKEDITOR . dtd . $tabIndex [ this . getName ( ) ] || 0 === parseInt ( this . getAttribute ( "tabindex" ) , 10 ) ? a : - 1 } , getText : function ( ) { return this . $ . textContent || this . $ . innerText || "" } , getWindow : function ( ) { return this . getDocument ( ) . getWindow ( ) } , getId : function ( ) { return this . $ . id || null } , getNameAtt : function ( ) { return this . $ . name ||
null } , getName : function ( ) { var a = this . $ . nodeName . toLowerCase ( ) ; if ( CKEDITOR . env . ie && 8 >= document . documentMode ) { var b = this . $ . scopeName ; "HTML" != b && ( a = b . toLowerCase ( ) + ":" + a ) } this . getName = function ( ) { return a } ; return this . getName ( ) } , getValue : function ( ) { return this . $ . value } , getFirst : function ( a ) { var b = this . $ . firstChild ; ( b = b && new CKEDITOR . dom . node ( b ) ) && a && ! a ( b ) && ( b = b . getNext ( a ) ) ; return b } , getLast : function ( a ) { var b = this . $ . lastChild ; ( b = b && new CKEDITOR . dom . node ( b ) ) && a && ! a ( b ) && ( b = b . getPrevious ( a ) ) ; return b } , getStyle : function ( a ) { return this . $ . style [ CKEDITOR . tools . cssStyleToDomStyle ( a ) ] } ,
( function ( ) { function a ( a , b ) { return - 1 < ( " " + a + " " ) . replace ( g , " " ) . indexOf ( " " + b + " " ) } function d ( a ) { var b = ! 0 ; a . $ . id || ( a . $ . id = "cke_tmp_" + CKEDITOR . tools . getNextNumber ( ) , b = ! 1 ) ; return function ( ) { b || a . removeAttribute ( "id" ) } } function b ( a , b ) { var c = CKEDITOR . tools . escapeCss ( a . $ . id ) ; return "#" + c + " " + b . split ( /,\s*/ ) . join ( ", #" + c + " " ) } function c ( a ) { for ( var b = 0 , c = 0 , f = k [ a ] . length ; c < f ; c ++ ) b += parseInt ( this . getComputedStyle ( k [ a ] [ c ] ) || 0 , 10 ) || 0 ; return b } var e = document . createElement ( "_" ) . classList , e = "undefined" !== typeof e &&
null !== String ( e . add ) . match ( /\[Native code\]/gi ) , g = /[\n\t\r]/g ; CKEDITOR . tools . extend ( CKEDITOR . dom . element . prototype , { type : CKEDITOR . NODE _ELEMENT , addClass : e ? function ( a ) { this . $ . classList . add ( a ) ; return this } : function ( b ) { var c = this . $ . className ; c && ( a ( c , b ) || ( c += " " + b ) ) ; this . $ . className = c || b ; return this } , removeClass : e ? function ( a ) { var b = this . $ ; b . classList . remove ( a ) ; b . className || b . removeAttribute ( "class" ) ; return this } : function ( b ) { var c = this . getAttribute ( "class" ) ; c && a ( c , b ) && ( ( c = c . replace ( new RegExp ( "(?:^|\\s+)" +
b + "(?\x3d\\s|$)" ) , "" ) . replace ( /^\s+/ , "" ) ) ? this . setAttribute ( "class" , c ) : this . removeAttribute ( "class" ) ) ; return this } , hasClass : function ( b ) { return a ( this . $ . className , b ) } , append : function ( a , b ) { "string" == typeof a && ( a = this . getDocument ( ) . createElement ( a ) ) ; b ? this . $ . insertBefore ( a . $ , this . $ . firstChild ) : this . $ . appendChild ( a . $ ) ; return a } , appendHtml : function ( a ) { if ( this . $ . childNodes . length ) { var b = new CKEDITOR . dom . element ( "div" , this . getDocument ( ) ) ; b . setHtml ( a ) ; b . moveChildren ( this ) } else this . setHtml ( a ) } , appendText : function ( a ) { null !=
this . $ . text && CKEDITOR . env . ie && 9 > CKEDITOR . env . version ? this . $ . text += a : this . append ( new CKEDITOR . dom . text ( a ) ) } , appendBogus : function ( a ) { if ( a || CKEDITOR . env . needsBrFiller ) { for ( a = this . getLast ( ) ; a && a . type == CKEDITOR . NODE _TEXT && ! CKEDITOR . tools . rtrim ( a . getText ( ) ) ; ) a = a . getPrevious ( ) ; a && a . is && a . is ( "br" ) || ( a = this . getDocument ( ) . createElement ( "br" ) , CKEDITOR . env . gecko && a . setAttribute ( "type" , "_moz" ) , this . append ( a ) ) } } , breakParent : function ( a , b ) { var c = new CKEDITOR . dom . range ( this . getDocument ( ) ) ; c . setStartAfter ( this ) ; c . setEndAfter ( a ) ;
var f = c . extractContents ( ! 1 , b || ! 1 ) , d ; c . insertNode ( this . remove ( ) ) ; if ( CKEDITOR . env . ie && ! CKEDITOR . env . edge ) { for ( c = new CKEDITOR . dom . element ( "div" ) ; d = f . getFirst ( ) ; ) d . $ . style . backgroundColor && ( d . $ . style . backgroundColor = d . $ . style . backgroundColor ) , c . append ( d ) ; c . insertAfter ( this ) ; c . remove ( ! 0 ) } else f . insertAfterNode ( this ) } , contains : document . compareDocumentPosition ? function ( a ) { return ! ! ( this . $ . compareDocumentPosition ( a . $ ) & 16 ) } : function ( a ) { var b = this . $ ; return a . type != CKEDITOR . NODE _ELEMENT ? b . contains ( a . getParent ( ) . $ ) :
b != a . $ && b . contains ( a . $ ) } , focus : function ( ) { function a ( ) { try { this . $ . focus ( ) } catch ( b ) { } } return function ( b ) { b ? CKEDITOR . tools . setTimeout ( a , 100 , this ) : a . call ( this ) } } ( ) , getHtml : function ( ) { var a = this . $ . innerHTML ; return CKEDITOR . env . ie ? a . replace ( /<\?[^>]*>/g , "" ) : a } , getOuterHtml : function ( ) { if ( this . $ . outerHTML ) return this . $ . outerHTML . replace ( /<\?[^>]*>/ , "" ) ; var a = this . $ . ownerDocument . createElement ( "div" ) ; a . appendChild ( this . $ . cloneNode ( ! 0 ) ) ; return a . innerHTML } , getClientRect : function ( ) { var a = CKEDITOR . tools . extend ( { } ,
this . $ . getBoundingClientRect ( ) ) ; ! a . width && ( a . width = a . right - a . left ) ; ! a . height && ( a . height = a . bottom - a . top ) ; return a } , setHtml : CKEDITOR . env . ie && 9 > CKEDITOR . env . version ? function ( a ) { try { var b = this . $ ; if ( this . getParent ( ) ) return b . innerHTML = a ; var c = this . getDocument ( ) . _getHtml5ShivFrag ( ) ; c . appendChild ( b ) ; b . innerHTML = a ; c . removeChild ( b ) ; return a } catch ( f ) { this . $ . innerHTML = "" ; b = new CKEDITOR . dom . element ( "body" , this . getDocument ( ) ) ; b . $ . innerHTML = a ; for ( b = b . getChildren ( ) ; b . count ( ) ; ) this . append ( b . getItem ( 0 ) ) ; return a } } :
function ( a ) { return this . $ . innerHTML = a } , setText : function ( ) { var a = document . createElement ( "p" ) ; a . innerHTML = "x" ; a = a . textContent ; return function ( b ) { this . $ [ a ? "textContent" : "innerText" ] = b } } ( ) , getAttribute : function ( ) { var a = function ( a ) { return this . $ . getAttribute ( a , 2 ) } ; return CKEDITOR . env . ie && ( CKEDITOR . env . ie7Compat || CKEDITOR . env . quirks ) ? function ( a ) { switch ( a ) { case "class" : a = "className" ; break ; case "http-equiv" : a = "httpEquiv" ; break ; case "name" : return this . $ . name ; case "tabindex" : return a = this . $ . getAttribute ( a ,
2 ) , 0 !== a && 0 === this . $ . tabIndex && ( a = null ) , a ; case "checked" : return a = this . $ . attributes . getNamedItem ( a ) , ( a . specified ? a . nodeValue : this . $ . checked ) ? "checked" : null ; case "hspace" : case "value" : return this . $ [ a ] ; case "style" : return this . $ . style . cssText ; case "contenteditable" : case "contentEditable" : return this . $ . attributes . getNamedItem ( "contentEditable" ) . specified ? this . $ . getAttribute ( "contentEditable" ) : null } return this . $ . getAttribute ( a , 2 ) } : a } ( ) , getAttributes : function ( a ) { var b = { } , c = this . $ . attributes , f ; a = CKEDITOR . tools . isArray ( a ) ?
a : [ ] ; for ( f = 0 ; f < c . length ; f ++ ) - 1 === CKEDITOR . tools . indexOf ( a , c [ f ] . name ) && ( b [ c [ f ] . name ] = c [ f ] . value ) ; return b } , getChildren : function ( ) { return new CKEDITOR . dom . nodeList ( this . $ . childNodes ) } , getComputedStyle : document . defaultView && document . defaultView . getComputedStyle ? function ( a ) { var b = this . getWindow ( ) . $ . getComputedStyle ( this . $ , null ) ; return b ? b . getPropertyValue ( a ) : "" } : function ( a ) { return this . $ . currentStyle [ CKEDITOR . tools . cssStyleToDomStyle ( a ) ] } , getDtd : function ( ) { var a = CKEDITOR . dtd [ this . getName ( ) ] ; this . getDtd =
function ( ) { return a } ; return a } , getElementsByTag : CKEDITOR . dom . document . prototype . getElementsByTag , getTabIndex : function ( ) { var a = this . $ . tabIndex ; return 0 !== a || CKEDITOR . dtd . $tabIndex [ this . getName ( ) ] || 0 === parseInt ( this . getAttribute ( "tabindex" ) , 10 ) ? a : - 1 } , getText : function ( ) { return this . $ . textContent || this . $ . innerText || "" } , getWindow : function ( ) { return this . getDocument ( ) . getWindow ( ) } , getId : function ( ) { return this . $ . id || null } , getNameAtt : function ( ) { return this . $ . name || null } , getName : function ( ) { var a = this . $ . nodeName . toLowerCase ( ) ;
if ( CKEDITOR . env . ie && 8 >= document . documentMode ) { var b = this . $ . scopeName ; "HTML" != b && ( a = b . toLowerCase ( ) + ":" + a ) } this . getName = function ( ) { return a } ; return this . getName ( ) } , getValue : function ( ) { return this . $ . value } , getFirst : function ( a ) { var b = this . $ . firstChild ; ( b = b && new CKEDITOR . dom . node ( b ) ) && a && ! a ( b ) && ( b = b . getNext ( a ) ) ; return b } , getLast : function ( a ) { var b = this . $ . lastChild ; ( b = b && new CKEDITOR . dom . node ( b ) ) && a && ! a ( b ) && ( b = b . getPrevious ( a ) ) ; return b } , getStyle : function ( a ) { return this . $ . style [ CKEDITOR . tools . cssStyleToDomStyle ( a ) ] } ,
is : function ( ) { var a = this . getName ( ) ; if ( "object" == typeof arguments [ 0 ] ) return ! ! arguments [ 0 ] [ a ] ; for ( var b = 0 ; b < arguments . length ; b ++ ) if ( arguments [ b ] == a ) return ! 0 ; return ! 1 } , isEditable : function ( a ) { var b = this . getName ( ) ; return this . isReadOnly ( ) || "none" == this . getComputedStyle ( "display" ) || "hidden" == this . getComputedStyle ( "visibility" ) || CKEDITOR . dtd . $nonEditable [ b ] || CKEDITOR . dtd . $empty [ b ] || this . is ( "a" ) && ( this . data ( "cke-saved-name" ) || this . hasAttribute ( "name" ) ) && ! this . getChildCount ( ) ? ! 1 : ! 1 !== a ? ( a = CKEDITOR . dtd [ b ] ||
CKEDITOR . dtd . span , ! ( ! a || ! a [ "#" ] ) ) : ! 0 } , isIdentical : function ( a ) { var b = this . clone ( 0 , 1 ) ; a = a . clone ( 0 , 1 ) ; b . removeAttributes ( [ "_moz_dirty" , "data-cke-expando" , "data-cke-saved-href" , "data-cke-saved-name" ] ) ; a . removeAttributes ( [ "_moz_dirty" , "data-cke-expando" , "data-cke-saved-href" , "data-cke-saved-name" ] ) ; if ( b . $ . isEqualNode ) return b . $ . style . cssText = CKEDITOR . tools . normalizeCssText ( b . $ . style . cssText ) , a . $ . style . cssText = CKEDITOR . tools . normalizeCssText ( a . $ . style . cssText ) , b . $ . isEqualNode ( a . $ ) ; b = b . getOuterHtml ( ) ; a =
a . getOuterHtml ( ) ; if ( CKEDITOR . env . ie && 9 > CKEDITOR . env . version && this . is ( "a" ) ) { var c = this . getParent ( ) ; c . type == CKEDITOR . NODE _ELEMENT && ( c = c . clone ( ) , c . setHtml ( b ) , b = c . getHtml ( ) , c . setHtml ( a ) , a = c . getHtml ( ) ) } return b == a } , isVisible : function ( ) { var a = ( this . $ . offsetHeight || this . $ . offsetWidth ) && "hidden" != this . getComputedStyle ( "visibility" ) , b , c ; a && CKEDITOR . env . webkit && ( b = this . getWindow ( ) , ! b . equals ( CKEDITOR . document . getWindow ( ) ) && ( c = b . $ . frameElement ) && ( a = ( new CKEDITOR . dom . element ( c ) ) . isVisible ( ) ) ) ; return ! ! a } , isEmptyInlineRemoveable : function ( ) { if ( ! CKEDITOR . dtd . $removeEmpty [ this . getName ( ) ] ) return ! 1 ;
for ( var a = this . getChildren ( ) , b = 0 , c = a . count ( ) ; b < c ; b ++ ) { var f = a . getItem ( b ) ; if ( f . type != CKEDITOR . NODE _ELEMENT || ! f . data ( "cke-bookmark" ) ) if ( f . type == CKEDITOR . NODE _ELEMENT && ! f . isEmptyInlineRemoveable ( ) || f . type == CKEDITOR . NODE _TEXT && CKEDITOR . tools . trim ( f . getText ( ) ) ) return ! 1 } return ! 0 } , hasAttributes : CKEDITOR . env . ie && ( CKEDITOR . env . ie7Compat || CKEDITOR . env . quirks ) ? function ( ) { for ( var a = this . $ . attributes , b = 0 ; b < a . length ; b ++ ) { var c = a [ b ] ; switch ( c . nodeName ) { case "class" : if ( this . getAttribute ( "class" ) ) return ! 0 ; case "data-cke-expando" : continue ;
default : if ( c . specified ) return ! 0 } } return ! 1 } : function ( ) { var a = this . $ . attributes , b = a . length , c = { "data-cke-expando" : 1 , _moz _dirty : 1 } ; return 0 < b && ( 2 < b || ! c [ a [ 0 ] . nodeName ] || 2 == b && ! c [ a [ 1 ] . nodeName ] ) } , hasAttribute : function ( ) { function a ( b ) { var c = this . $ . attributes . getNamedItem ( b ) ; if ( "input" == this . getName ( ) ) switch ( b ) { case "class" : return 0 < this . $ . className . length ; case "checked" : return ! ! this . $ . checked ; case "value" : return b = this . getAttribute ( "type" ) , "checkbox" == b || "radio" == b ? "on" != this . $ . value : ! ! this . $ . value } return c ?
c . specified : ! 1 } return CKEDITOR . env . ie ? 8 > CKEDITOR . env . version ? function ( b ) { return "name" == b ? ! ! this . $ . name : a . call ( this , b ) } : a : function ( a ) { return ! ! this . $ . attributes . getNamedItem ( a ) } } ( ) , hide : function ( ) { this . setStyle ( "display" , "none" ) } , moveChildren : function ( a , b ) { var c = this . $ ; a = a . $ ; if ( c != a ) { var f ; if ( b ) for ( ; f = c . lastChild ; ) a . insertBefore ( c . removeChild ( f ) , a . firstChild ) ; else for ( ; f = c . firstChild ; ) a . appendChild ( c . removeChild ( f ) ) } } , mergeSiblings : function ( ) { function a ( b , c , f ) { if ( c && c . type == CKEDITOR . NODE _ELEMENT ) { for ( var d =
[ ] ; c . data ( "cke-bookmark" ) || c . isEmptyInlineRemoveable ( ) ; ) if ( d . push ( c ) , c = f ? c . getNext ( ) : c . getPrevious ( ) , ! c || c . type != CKEDITOR . NODE _ELEMENT ) return ; if ( b . isIdentical ( c ) ) { for ( var k = f ? b . getLast ( ) : b . getFirst ( ) ; d . length ; ) d . shift ( ) . move ( b , ! f ) ; c . moveChildren ( b , ! f ) ; c . remove ( ) ; k && k . type == CKEDITOR . NODE _ELEMENT && k . mergeSiblings ( ) } } } return function ( b ) { if ( ! 1 === b || CKEDITOR . dtd . $removeEmpty [ this . getName ( ) ] || this . is ( "a" ) ) a ( this , this . getNext ( ) , ! 0 ) , a ( this , this . getPrevious ( ) ) } } ( ) , show : function ( ) { this . setStyles ( { display : "" ,
[ ] ; c . data ( "cke-bookmark" ) || c . isEmptyInlineRemoveable ( ) ; ) if ( d . push ( c ) , c = f ? c . getNext ( ) : c . getPrevious ( ) , ! c || c . type != CKEDITOR . NODE _ELEMENT ) return ; if ( b . isIdentical ( c ) ) { for ( var l = f ? b . getLast ( ) : b . getFirst ( ) ; d . length ; ) d . shift ( ) . move ( b , ! f ) ; c . moveChildren ( b , ! f ) ; c . remove ( ) ; l && l . type == CKEDITOR . NODE _ELEMENT && l . mergeSiblings ( ) } } } return function ( b ) { if ( ! 1 === b || CKEDITOR . dtd . $removeEmpty [ this . getName ( ) ] || this . is ( "a" ) ) a ( this , this . getNext ( ) , ! 0 ) , a ( this , this . getPrevious ( ) ) } } ( ) , show : function ( ) { this . setStyles ( { display : "" ,
visibility : "" } ) } , setAttribute : function ( ) { var a = function ( a , b ) { this . $ . setAttribute ( a , b ) ; return this } ; return CKEDITOR . env . ie && ( CKEDITOR . env . ie7Compat || CKEDITOR . env . quirks ) ? function ( b , c ) { "class" == b ? this . $ . className = c : "style" == b ? this . $ . style . cssText = c : "tabindex" == b ? this . $ . tabIndex = c : "checked" == b ? this . $ . checked = c : "contenteditable" == b ? a . call ( this , "contentEditable" , c ) : a . apply ( this , arguments ) ; return this } : CKEDITOR . env . ie8Compat && CKEDITOR . env . secure ? function ( b , c ) { if ( "src" == b && c . match ( /^http:\/\// ) ) try { a . apply ( this ,
arguments ) } catch ( f ) { } else a . apply ( this , arguments ) ; return this } : a } ( ) , setAttributes : function ( a ) { for ( var b in a ) this . setAttribute ( b , a [ b ] ) ; return this } , setValue : function ( a ) { this . $ . value = a ; return this } , removeAttribute : function ( ) { var a = function ( a ) { this . $ . removeAttribute ( a ) } ; return CKEDITOR . env . ie && ( CKEDITOR . env . ie7Compat || CKEDITOR . env . quirks ) ? function ( a ) { "class" == a ? a = "className" : "tabindex" == a ? a = "tabIndex" : "contenteditable" == a && ( a = "contentEditable" ) ; this . $ . removeAttribute ( a ) } : a } ( ) , removeAttributes : function ( a ) { if ( CKEDITOR . tools . isArray ( a ) ) for ( var b =
0 ; b < a . length ; b ++ ) this . removeAttribute ( a [ b ] ) ; else for ( b in a = a || this . getAttributes ( ) , a ) a . hasOwnProperty ( b ) && this . removeAttribute ( b ) } , removeStyle : function ( a ) { var b = this . $ . style ; if ( b . removeProperty || "border" != a && "margin" != a && "padding" != a ) b . removeProperty ? b . removeProperty ( a ) : b . removeAttribute ( CKEDITOR . tools . cssStyleToDomStyle ( a ) ) , this . $ . style . cssText || this . removeAttribute ( "style" ) ; else { var c = [ "top" , "left" , "right" , "bottom" ] , f ; "border" == a && ( f = [ "color" , "style" , "width" ] ) ; for ( var b = [ ] , d = 0 ; d < c . length ; d ++ ) if ( f ) for ( var e =
0 ; e < f . length ; e ++ ) b . push ( [ a , c [ d ] , f [ e ] ] . join ( "-" ) ) ; else b . push ( [ a , c [ d ] ] . join ( "-" ) ) ; for ( a = 0 ; a < b . length ; a ++ ) this . removeStyle ( b [ a ] ) } } , setStyle : function ( a , b ) { this . $ . style [ CKEDITOR . tools . cssStyleToDomStyle ( a ) ] = b ; return this } , setStyles : function ( a ) { for ( var b in a ) this . setStyle ( b , a [ b ] ) ; return this } , setOpacity : function ( a ) { CKEDITOR . env . ie && 9 > CKEDITOR . env . version ? ( a = Math . round ( 100 * a ) , this . setStyle ( "filter" , 100 <= a ? "" : "progid:DXImageTransform.Microsoft.Alpha(opacity\x3d" + a + ")" ) ) : this . setStyle ( "opacity" , a ) } , unselectable : function ( ) { this . setStyles ( CKEDITOR . tools . cssVendorPrefix ( "user-select" ,
"none" ) ) ; if ( CKEDITOR . env . ie ) { this . setAttribute ( "unselectable" , "on" ) ; for ( var a , b = this . getElementsByTag ( "*" ) , c = 0 , f = b . count ( ) ; c < f ; c ++ ) a = b . getItem ( c ) , a . setAttribute ( "unselectable" , "on" ) } } , getPositionedAncestor : function ( ) { for ( var a = this ; "html" != a . getName ( ) ; ) { if ( "static" != a . getComputedStyle ( "position" ) ) return a ; a = a . getParent ( ) } return null } , getDocumentPosition : function ( a ) { var b = 0 , c = 0 , f = this . getDocument ( ) , d = f . getBody ( ) , e = "BackCompat" == f . $ . compatMode ; if ( document . documentElement . getBoundingClientRect ) { var t =
this . $ . getBoundingClientRect ( ) , g = f . $ . documentElement , p = g . clientTop || d . $ . clientTop || 0 , x = g . clientLeft || d . $ . clientLeft || 0 , l = ! 0 ; CKEDITOR . env . ie && ( l = f . getDocumentElement ( ) . contains ( this ) , f = f . getBody ( ) . contains ( this ) , l = e && f || ! e && l ) ; l && ( CKEDITOR . env . webkit || CKEDITOR . env . ie && 12 <= CKEDITOR . env . version ? ( b = d . $ . scrollLeft || g . scrollLeft , c = d . $ . scrollTop || g . scrollTop ) : ( c = e ? d . $ : g , b = c . scrollLeft , c = c . scrollTop ) , b = t . left + b - x , c = t . top + c - p ) } else for ( p = this , x = null ; p && "body" != p . getName ( ) && "html" != p . getName ( ) ; ) { b += p . $ . offsetLeft -
p . $ . scrollLeft ; c += p . $ . offsetTop - p . $ . scrollTop ; p . equals ( this ) || ( b += p . $ . clientLeft || 0 , c += p . $ . clientTop || 0 ) ; for ( ; x && ! x . equals ( p ) ; ) b -= x . $ . scrollLeft , c -= x . $ . scrollTop , x = x . getParent ( ) ; x = p ; p = ( t = p . $ . offsetParent ) ? new CKEDITOR . dom . element ( t ) : null } a && ( t = this . getWindow ( ) , p = a . getWindow ( ) , ! t . equals ( p ) && t . $ . frameElement && ( a = ( new CKEDITOR . dom . element ( t . $ . frameElement ) ) . getDocumentPosition ( a ) , b += a . x , c += a . y ) ) ; document . documentElement . getBoundingClientRect || ! CKEDITOR . env . gecko || e || ( b += this . $ . clientLeft ? 1 : 0 , c += this . $ . clientTop ?
1 : 0 ) ; return { x : b , y : c } } , scrollIntoView : function ( a ) { var b = this . getParent ( ) ; if ( b ) { do if ( ( b . $ . clientWidth && b . $ . clientWidth < b . $ . scrollWidth || b . $ . clientHeight && b . $ . clientHeight < b . $ . scrollHeight ) && ! b . is ( "body" ) && this . scrollIntoParent ( b , a , 1 ) , b . is ( "html" ) ) { var c = b . getWindow ( ) ; try { var f = c . $ . frameElement ; f && ( b = new CKEDITOR . dom . element ( f ) ) } catch ( d ) { } } while ( b = b . getParent ( ) ) } } , scrollIntoParent : function ( a , b , c ) { var f , d , e , t ; function g ( b , c ) { /body|html/ . test ( a . getName ( ) ) ? a . getWindow ( ) . $ . scrollBy ( b , c ) : ( a . $ . scrollLeft +=
b , a . $ . scrollTop += c ) } function p ( a , b ) { var c = { x : 0 , y : 0 } ; if ( ! a . is ( l ? "body" : "html" ) ) { var f = a . $ . getBoundingClientRect ( ) ; c . x = f . left ; c . y = f . top } f = a . getWindow ( ) ; f . equals ( b ) || ( f = p ( CKEDITOR . dom . element . get ( f . $ . frameElement ) , b ) , c . x += f . x , c . y += f . y ) ; return c } function x ( a , b ) { return parseInt ( a . getComputedStyle ( "margin-" + b ) || 0 , 10 ) || 0 } ! a && ( a = this . getWindow ( ) ) ; e = a . getDocument ( ) ; var l = "BackCompat" == e . $ . compatMode ; a instanceof CKEDITOR . dom . window && ( a = l ? e . getBody ( ) : e . getDocumentElement ( ) ) ; e = a . getWindow ( ) ; d = p ( this , e ) ; var u =
p ( a , e ) , r = this . $ . offsetHeight ; f = this . $ . offsetWidth ; var h = a . $ . clientHeight , n = a . $ . clientWidth ; e = d . x - x ( this , "left" ) - u . x || 0 ; t = d . y - x ( this , "top" ) - u . y || 0 ; f = d . x + f + x ( this , "right" ) - ( u . x + n ) || 0 ; d = d . y + r + x ( this , "bottom" ) - ( u . y + h ) || 0 ; ( 0 > t || 0 < d ) && g ( 0 , ! 0 === b ? t : ! 1 === b ? d : 0 > t ? t : d ) ; c && ( 0 > e || 0 < f ) && g ( 0 > e ? e : f , 0 ) } , setState : function ( a , b , c ) { b = b || "cke" ; switch ( a ) { case CKEDITOR . TRISTATE _ON : this . addClass ( b + "_on" ) ; this . removeClass ( b + "_off" ) ; this . removeClass ( b + "_disabled" ) ; c && this . setAttribute ( "aria-pressed" , ! 0 ) ; c && this . removeAttribute ( "aria-disabled" ) ;
break ; case CKEDITOR . TRISTATE _DISABLED : this . addClass ( b + "_disabled" ) ; this . removeClass ( b + "_off" ) ; this . removeClass ( b + "_on" ) ; c && this . setAttribute ( "aria-disabled" , ! 0 ) ; c && this . removeAttribute ( "aria-pressed" ) ; break ; default : this . addClass ( b + "_off" ) , this . removeClass ( b + "_on" ) , this . removeClass ( b + "_disabled" ) , c && this . removeAttribute ( "aria-pressed" ) , c && this . removeAttribute ( "aria-disabled" ) } } , getFrameDocument : function ( ) { var a = this . $ ; try { a . contentWindow . document } catch ( b ) { a . src = a . src } return a && new CKEDITOR . dom . document ( a . contentWindow . document ) } ,
copyAttributes : function ( a , b ) { var c = this . $ . attributes ; b = b || { } ; for ( var f = 0 ; f < c . length ; f ++ ) { var d = c [ f ] , e = d . nodeName . toLowerCase ( ) , t ; if ( ! ( e in b ) ) if ( "checked" == e && ( t = this . getAttribute ( e ) ) ) a . setAttribute ( e , t ) ; else if ( ! CKEDITOR . env . ie || this . hasAttribute ( e ) ) t = this . getAttribute ( e ) , null === t && ( t = d . nodeValue ) , a . setAttribute ( e , t ) } "" !== this . $ . style . cssText && ( a . $ . style . cssText = this . $ . style . cssText ) } , renameNode : function ( a ) { if ( this . getName ( ) != a ) { var b = this . getDocument ( ) ; a = new CKEDITOR . dom . element ( a , b ) ; this . copyAttributes ( a ) ;
this . moveChildren ( a ) ; this . getParent ( ! 0 ) && this . $ . parentNode . replaceChild ( a . $ , this . $ ) ; a . $ [ "data-cke-expando" ] = this . $ [ "data-cke-expando" ] ; this . $ = a . $ ; delete this . getName } } , getChild : function ( ) { function a ( b , c ) { var f = b . childNodes ; if ( 0 <= c && c < f . length ) return f [ c ] } return function ( b ) { var c = this . $ ; if ( b . slice ) for ( b = b . slice ( ) ; 0 < b . length && c ; ) c = a ( c , b . shift ( ) ) ; else c = a ( c , b ) ; return c ? new CKEDITOR . dom . node ( c ) : null } } ( ) , getChildCount : function ( ) { return this . $ . childNodes . length } , disableContextMenu : function ( ) { function a ( b ) { return b . type ==
CKEDITOR . NODE _ELEMENT && b . hasClass ( "cke_enable_context_menu" ) } this . on ( "contextmenu" , function ( b ) { b . data . getTarget ( ) . getAscendant ( a , ! 0 ) || b . data . preventDefault ( ) } ) } , getDirection : function ( a ) { return a ? this . getComputedStyle ( "direction" ) || this . getDirection ( ) || this . getParent ( ) && this . getParent ( ) . getDirection ( 1 ) || this . getDocument ( ) . $ . dir || "ltr" : this . getStyle ( "direction" ) || this . getAttribute ( "dir" ) } , data : function ( a , b ) { a = "data-" + a ; if ( void 0 === b ) return this . getAttribute ( a ) ; ! 1 === b ? this . removeAttribute ( a ) : this . setAttribute ( a ,
b ) ; return null } , getEditor : function ( ) { var a = CKEDITOR . instances , b , c ; for ( b in a ) if ( c = a [ b ] , c . element . equals ( this ) && c . elementMode != CKEDITOR . ELEMENT _MODE _APPENDTO ) return c ; return null } , find : function ( a ) { var c = d ( this ) ; a = new CKEDITOR . dom . nodeList ( this . $ . querySelectorAll ( b ( this , a ) ) ) ; c ( ) ; return a } , findOne : function ( a ) { var c = d ( this ) ; a = this . $ . querySelector ( b ( this , a ) ) ; c ( ) ; return a ? new CKEDITOR . dom . element ( a ) : null } , forEach : function ( a , b , c ) { if ( ! ( c || b && this . type != b ) ) var f = a ( this ) ; if ( ! 1 !== f ) { c = this . getChildren ( ) ; for ( var d =
0 ; d < c . count ( ) ; d ++ ) f = c . getItem ( d ) , f . type == CKEDITOR . NODE _ELEMENT ? f . forEach ( a , b ) : b && f . type != b || a ( f ) } } } ) ; var l = { width : [ "border-left-width" , "border-right-width" , "padding-left" , "padding-right" ] , height : [ "border-top-width" , "border-bottom-width" , "padding-top" , "padding-bottom" ] } ; CKEDITOR . dom . element . prototype . setSize = function ( a , b , d ) { "number" == typeof b && ( ! d || CKEDITOR . env . ie && CKEDITOR . env . quirks || ( b -= c . call ( this , a ) ) , this . setStyle ( a , b + "px" ) ) } ; CKEDITOR . dom . element . prototype . getSize = function ( a , b ) { var d = Math . max ( this . $ [ "offset" +
CKEDITOR . tools . capitalize ( a ) ] , this . $ [ "client" + CKEDITOR . tools . capitalize ( a ) ] ) || 0 ; b && ( d -= c . call ( this , a ) ) ; return d } } ) ( ) ; CKEDITOR . dom . documentFragment = function ( a ) { a = a || CKEDITOR . document ; this . $ = a . type == CKEDITOR . NODE _DOCUMENT ? a . $ . createDocumentFragment ( ) : a } ;
"none" ) ) ; if ( CKEDITOR . env . ie ) { this . setAttribute ( "unselectable" , "on" ) ; for ( var a , b = this . getElementsByTag ( "*" ) , c = 0 , f = b . count ( ) ; c < f ; c ++ ) a = b . getItem ( c ) , a . setAttribute ( "unselectable" , "on" ) } } , getPositionedAncestor : function ( ) { for ( var a = this ; "html" != a . getName ( ) ; ) { if ( "static" != a . getComputedStyle ( "position" ) ) return a ; a = a . getParent ( ) } return null } , getDocumentPosition : function ( a ) { var b = 0 , c = 0 , f = this . getDocument ( ) , d = f . getBody ( ) , e = "BackCompat" == f . $ . compatMode ; if ( document . documentElement . getBoundingClientRect && ( CKEDITOR . env . ie ?
8 !== CKEDITOR . env . version : 1 ) ) { var r = this . $ . getBoundingClientRect ( ) , g = f . $ . documentElement , n = g . clientTop || d . $ . clientTop || 0 , w = g . clientLeft || d . $ . clientLeft || 0 , k = ! 0 ; CKEDITOR . env . ie && ( k = f . getDocumentElement ( ) . contains ( this ) , f = f . getBody ( ) . contains ( this ) , k = e && f || ! e && k ) ; k && ( CKEDITOR . env . webkit || CKEDITOR . env . ie && 12 <= CKEDITOR . env . version ? ( b = d . $ . scrollLeft || g . scrollLeft , c = d . $ . scrollTop || g . scrollTop ) : ( c = e ? d . $ : g , b = c . scrollLeft , c = c . scrollTop ) , b = r . left + b - w , c = r . top + c - n ) } else for ( n = this , w = null ; n && "body" != n . getName ( ) &&
"html" != n . getName ( ) ; ) { b += n . $ . offsetLeft - n . $ . scrollLeft ; c += n . $ . offsetTop - n . $ . scrollTop ; n . equals ( this ) || ( b += n . $ . clientLeft || 0 , c += n . $ . clientTop || 0 ) ; for ( ; w && ! w . equals ( n ) ; ) b -= w . $ . scrollLeft , c -= w . $ . scrollTop , w = w . getParent ( ) ; w = n ; n = ( r = n . $ . offsetParent ) ? new CKEDITOR . dom . element ( r ) : null } a && ( r = this . getWindow ( ) , n = a . getWindow ( ) , ! r . equals ( n ) && r . $ . frameElement && ( a = ( new CKEDITOR . dom . element ( r . $ . frameElement ) ) . getDocumentPosition ( a ) , b += a . x , c += a . y ) ) ; document . documentElement . getBoundingClientRect || ! CKEDITOR . env . gecko ||
e || ( b += this . $ . clientLeft ? 1 : 0 , c += this . $ . clientTop ? 1 : 0 ) ; return { x : b , y : c } } , scrollIntoView : function ( a ) { var b = this . getParent ( ) ; if ( b ) { do if ( ( b . $ . clientWidth && b . $ . clientWidth < b . $ . scrollWidth || b . $ . clientHeight && b . $ . clientHeight < b . $ . scrollHeight ) && ! b . is ( "body" ) && this . scrollIntoParent ( b , a , 1 ) , b . is ( "html" ) ) { var c = b . getWindow ( ) ; try { var f = c . $ . frameElement ; f && ( b = new CKEDITOR . dom . element ( f ) ) } catch ( d ) { } } while ( b = b . getParent ( ) ) } } , scrollIntoParent : function ( a , b , c ) { var f , d , e , r ; function g ( b , c ) { /body|html/ . test ( a . getName ( ) ) ?
a . getWindow ( ) . $ . scrollBy ( b , c ) : ( a . $ . scrollLeft += b , a . $ . scrollTop += c ) } function n ( a , b ) { var c = { x : 0 , y : 0 } ; if ( ! a . is ( k ? "body" : "html" ) ) { var f = a . $ . getBoundingClientRect ( ) ; c . x = f . left ; c . y = f . top } f = a . getWindow ( ) ; f . equals ( b ) || ( f = n ( CKEDITOR . dom . element . get ( f . $ . frameElement ) , b ) , c . x += f . x , c . y += f . y ) ; return c } function w ( a , b ) { return parseInt ( a . getComputedStyle ( "margin-" + b ) || 0 , 10 ) || 0 } ! a && ( a = this . getWindow ( ) ) ; e = a . getDocument ( ) ; var k = "BackCompat" == e . $ . compatMode ; a instanceof CKEDITOR . dom . window && ( a = k ? e . getBody ( ) : e . getDocumentElement ( ) ) ;
e = a . getWindow ( ) ; d = n ( this , e ) ; var u = n ( a , e ) , t = this . $ . offsetHeight ; f = this . $ . offsetWidth ; var h = a . $ . clientHeight , p = a . $ . clientWidth ; e = d . x - w ( this , "left" ) - u . x || 0 ; r = d . y - w ( this , "top" ) - u . y || 0 ; f = d . x + f + w ( this , "right" ) - ( u . x + p ) || 0 ; d = d . y + t + w ( this , "bottom" ) - ( u . y + h ) || 0 ; ( 0 > r || 0 < d ) && g ( 0 , ! 0 === b ? r : ! 1 === b ? d : 0 > r ? r : d ) ; c && ( 0 > e || 0 < f ) && g ( 0 > e ? e : f , 0 ) } , setState : function ( a , b , c ) { b = b || "cke" ; switch ( a ) { case CKEDITOR . TRISTATE _ON : this . addClass ( b + "_on" ) ; this . removeClass ( b + "_off" ) ; this . removeClass ( b + "_disabled" ) ; c && this . setAttribute ( "aria-pressed" ,
! 0 ) ; c && this . removeAttribute ( "aria-disabled" ) ; break ; case CKEDITOR . TRISTATE _DISABLED : this . addClass ( b + "_disabled" ) ; this . removeClass ( b + "_off" ) ; this . removeClass ( b + "_on" ) ; c && this . setAttribute ( "aria-disabled" , ! 0 ) ; c && this . removeAttribute ( "aria-pressed" ) ; break ; default : this . addClass ( b + "_off" ) , this . removeClass ( b + "_on" ) , this . removeClass ( b + "_disabled" ) , c && this . removeAttribute ( "aria-pressed" ) , c && this . removeAttribute ( "aria-disabled" ) } } , getFrameDocument : function ( ) { var a = this . $ ; try { a . contentWindow . document } catch ( b ) { a . src =
a . src } return a && new CKEDITOR . dom . document ( a . contentWindow . document ) } , copyAttributes : function ( a , b ) { var c = this . $ . attributes ; b = b || { } ; for ( var f = 0 ; f < c . length ; f ++ ) { var d = c [ f ] , e = d . nodeName . toLowerCase ( ) , r ; if ( ! ( e in b ) ) if ( "checked" == e && ( r = this . getAttribute ( e ) ) ) a . setAttribute ( e , r ) ; else if ( ! CKEDITOR . env . ie || this . hasAttribute ( e ) ) r = this . getAttribute ( e ) , null === r && ( r = d . nodeValue ) , a . setAttribute ( e , r ) } "" !== this . $ . style . cssText && ( a . $ . style . cssText = this . $ . style . cssText ) } , renameNode : function ( a ) { if ( this . getName ( ) != a ) { var b =
this . getDocument ( ) ; a = new CKEDITOR . dom . element ( a , b ) ; this . copyAttributes ( a ) ; this . moveChildren ( a ) ; this . getParent ( ! 0 ) && this . $ . parentNode . replaceChild ( a . $ , this . $ ) ; a . $ [ "data-cke-expando" ] = this . $ [ "data-cke-expando" ] ; this . $ = a . $ ; delete this . getName } } , getChild : function ( ) { function a ( b , c ) { var f = b . childNodes ; if ( 0 <= c && c < f . length ) return f [ c ] } return function ( b ) { var c = this . $ ; if ( b . slice ) for ( b = b . slice ( ) ; 0 < b . length && c ; ) c = a ( c , b . shift ( ) ) ; else c = a ( c , b ) ; return c ? new CKEDITOR . dom . node ( c ) : null } } ( ) , getChildCount : function ( ) { return this . $ . childNodes . length } ,
disableContextMenu : function ( ) { function a ( b ) { return b . type == CKEDITOR . NODE _ELEMENT && b . hasClass ( "cke_enable_context_menu" ) } this . on ( "contextmenu" , function ( b ) { b . data . getTarget ( ) . getAscendant ( a , ! 0 ) || b . data . preventDefault ( ) } ) } , getDirection : function ( a ) { return a ? this . getComputedStyle ( "direction" ) || this . getDirection ( ) || this . getParent ( ) && this . getParent ( ) . getDirection ( 1 ) || this . getDocument ( ) . $ . dir || "ltr" : this . getStyle ( "direction" ) || this . getAttribute ( "dir" ) } , data : function ( a , b ) { a = "data-" + a ; if ( void 0 === b ) return this . getAttribute ( a ) ;
! 1 === b ? this . removeAttribute ( a ) : this . setAttribute ( a , b ) ; return null } , getEditor : function ( ) { var a = CKEDITOR . instances , b , c ; for ( b in a ) if ( c = a [ b ] , c . element . equals ( this ) && c . elementMode != CKEDITOR . ELEMENT _MODE _APPENDTO ) return c ; return null } , find : function ( a ) { var c = d ( this ) ; a = new CKEDITOR . dom . nodeList ( this . $ . querySelectorAll ( b ( this , a ) ) ) ; c ( ) ; return a } , findOne : function ( a ) { var c = d ( this ) ; a = this . $ . querySelector ( b ( this , a ) ) ; c ( ) ; return a ? new CKEDITOR . dom . element ( a ) : null } , forEach : function ( a , b , c ) { if ( ! ( c || b && this . type != b ) ) var f =
a ( this ) ; if ( ! 1 !== f ) { c = this . getChildren ( ) ; for ( var d = 0 ; d < c . count ( ) ; d ++ ) f = c . getItem ( d ) , f . type == CKEDITOR . NODE _ELEMENT ? f . forEach ( a , b ) : b && f . type != b || a ( f ) } } } ) ; var k = { width : [ "border-left-width" , "border-right-width" , "padding-left" , "padding-right" ] , height : [ "border-top-width" , "border-bottom-width" , "padding-top" , "padding-bottom" ] } ; CKEDITOR . dom . element . prototype . setSize = function ( a , b , d ) { "number" == typeof b && ( ! d || CKEDITOR . env . ie && CKEDITOR . env . quirks || ( b -= c . call ( this , a ) ) , this . setStyle ( a , b + "px" ) ) } ; CKEDITOR . dom . element . prototype . getSize =
function ( a , b ) { var d = Math . max ( this . $ [ "offset" + CKEDITOR . tools . capitalize ( a ) ] , this . $ [ "client" + CKEDITOR . tools . capitalize ( a ) ] ) || 0 ; b && ( d -= c . call ( this , a ) ) ; return d } } ) ( ) ; CKEDITOR . dom . documentFragment = function ( a ) { a = a || CKEDITOR . document ; this . $ = a . type == CKEDITOR . NODE _DOCUMENT ? a . $ . createDocumentFragment ( ) : a } ;
CKEDITOR . tools . extend ( CKEDITOR . dom . documentFragment . prototype , CKEDITOR . dom . element . prototype , { type : CKEDITOR . NODE _DOCUMENT _FRAGMENT , insertAfterNode : function ( a ) { a = a . $ ; a . parentNode . insertBefore ( this . $ , a . nextSibling ) } , getHtml : function ( ) { var a = new CKEDITOR . dom . element ( "div" ) ; this . clone ( 1 , 1 ) . appendTo ( a ) ; return a . getHtml ( ) . replace ( /\s*data-cke-expando=".*?"/g , "" ) } } , ! 0 , { append : 1 , appendBogus : 1 , clone : 1 , getFirst : 1 , getHtml : 1 , getLast : 1 , getParent : 1 , getNext : 1 , getPrevious : 1 , appendTo : 1 , moveChildren : 1 , insertBefore : 1 ,
insertAfterNode : 1 , replace : 1 , trim : 1 , type : 1 , ltrim : 1 , rtrim : 1 , getDocument : 1 , getChildCount : 1 , getChild : 1 , getChildren : 1 } ) ;
( function ( ) { function a ( a , b ) { var c = this . range ; if ( this . _ . end ) return null ; if ( ! this . _ . start ) { this . _ . start = 1 ; if ( c . collapsed ) return this . end ( ) , null ; c . optimize ( ) } var f , d = c . startContainer ; f = c . endContainer ; var e = c . startOffset , y = c . endOffset , r , h = this . guard , n = this . type , m = a ? "getPreviousSourceNode" : "getNextSourceNode" ; if ( ! a && ! this . _ . guardLTR ) { var z = f . type == CKEDITOR . NODE _ELEMENT ? f : f . getParent ( ) , B = f . type == CKEDITOR . NODE _ELEMENT ? f . getChild ( y ) : f . getNext ( ) ; this . _ . guardLTR = function ( a , b ) { return ( ! b || ! z . equals ( a ) ) && ( ! B ||
! a . equals ( B ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } if ( a && ! this . _ . guardRTL ) { var E = d . type == CKEDITOR . NODE _ELEMENT ? d : d . getParent ( ) , g = d . type == CKEDITOR . NODE _ELEMENT ? e ? d . getChild ( e - 1 ) : null : d . getPrevious ( ) ; this . _ . guardRTL = function ( a , b ) { return ( ! b || ! E . equals ( a ) ) && ( ! g || ! a . equals ( g ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } var l = a ? this . _ . guardRTL : this . _ . guardLTR ; r = h ? function ( a , b ) { return ! 1 === l ( a , b ) ? ! 1 : h ( a , b ) } : l ; this . current ? f = this . current [ m ] ( ! 1 , n , r ) : ( a ? f . type == CKEDITOR . NODE _ELEMENT &&
( f = 0 < y ? f . getChild ( y - 1 ) : ! 1 === r ( f , ! 0 ) ? null : f . getPreviousSourceNode ( ! 0 , n , r ) ) : ( f = d , f . type == CKEDITOR . NODE _ELEMENT && ( ( f = f . getChild ( e ) ) || ( f = ! 1 === r ( d , ! 0 ) ? null : d . getNextSourceNode ( ! 0 , n , r ) ) ) ) , f && ! 1 === r ( f ) && ( f = null ) ) ; for ( ; f && ! this . _ . end ; ) { this . current = f ; if ( ! this . evaluator || ! 1 !== this . evaluator ( f ) ) { if ( ! b ) return f } else if ( b && this . evaluator ) return ! 1 ; f = f [ m ] ( ! 1 , n , r ) } this . end ( ) ; return this . current = null } function d ( b ) { for ( var c , f = null ; c = a . call ( this , b ) ; ) f = c ; return f } CKEDITOR . dom . walker = CKEDITOR . tools . createClass ( { $ : function ( a ) { this . range =
( function ( ) { function a ( a , b ) { var c = this . range ; if ( this . _ . end ) return null ; if ( ! this . _ . start ) { this . _ . start = 1 ; if ( c . collapsed ) return this . end ( ) , null ; c . optimize ( ) } var f , d = c . startContainer ; f = c . endContainer ; var e = c . startOffset , y = c . endOffset , t , h = this . guard , p = this . type , m = a ? "getPreviousSourceNode" : "getNextSourceNode" ; if ( ! a && ! this . _ . guardLTR ) { var x = f . type == CKEDITOR . NODE _ELEMENT ? f : f . getParent ( ) , z = f . type == CKEDITOR . NODE _ELEMENT ? f . getChild ( y ) : f . getNext ( ) ; this . _ . guardLTR = function ( a , b ) { return ( ! b || ! x . equals ( a ) ) && ( ! z ||
! a . equals ( z ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } if ( a && ! this . _ . guardRTL ) { var F = d . type == CKEDITOR . NODE _ELEMENT ? d : d . getParent ( ) , g = d . type == CKEDITOR . NODE _ELEMENT ? e ? d . getChild ( e - 1 ) : null : d . getPrevious ( ) ; this . _ . guardRTL = function ( a , b ) { return ( ! b || ! F . equals ( a ) ) && ( ! g || ! a . equals ( g ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } var k = a ? this . _ . guardRTL : this . _ . guardLTR ; t = h ? function ( a , b ) { return ! 1 === k ( a , b ) ? ! 1 : h ( a , b ) } : k ; this . current ? f = this . current [ m ] ( ! 1 , p , t ) : ( a ? f . type == CKEDITOR . NODE _ELEMENT &&
( f = 0 < y ? f . getChild ( y - 1 ) : ! 1 === t ( f , ! 0 ) ? null : f . getPreviousSourceNode ( ! 0 , p , t ) ) : ( f = d , f . type == CKEDITOR . NODE _ELEMENT && ( ( f = f . getChild ( e ) ) || ( f = ! 1 === t ( d , ! 0 ) ? null : d . getNextSourceNode ( ! 0 , p , t ) ) ) ) , f && ! 1 === t ( f ) && ( f = null ) ) ; for ( ; f && ! this . _ . end ; ) { this . current = f ; if ( ! this . evaluator || ! 1 !== this . evaluator ( f ) ) { if ( ! b ) return f } else if ( b && this . evaluator ) return ! 1 ; f = f [ m ] ( ! 1 , p , t ) } this . end ( ) ; return this . current = null } function d ( b ) { for ( var c , f = null ; c = a . call ( this , b ) ; ) f = c ; return f } CKEDITOR . dom . walker = CKEDITOR . tools . createClass ( { $ : function ( a ) { this . range =
a ; this . _ = { } } , proto : { end : function ( ) { this . _ . end = 1 } , next : function ( ) { return a . call ( this ) } , previous : function ( ) { return a . call ( this , 1 ) } , checkForward : function ( ) { return ! 1 !== a . call ( this , 0 , 1 ) } , checkBackward : function ( ) { return ! 1 !== a . call ( this , 1 , 1 ) } , lastForward : function ( ) { return d . call ( this ) } , lastBackward : function ( ) { return d . call ( this , 1 ) } , reset : function ( ) { delete this . current ; this . _ = { } } } } ) ; var b = { block : 1 , "list-item" : 1 , table : 1 , "table-row-group" : 1 , "table-header-group" : 1 , "table-footer-group" : 1 , "table-row" : 1 , "table-column-group" : 1 ,
"table-column" : 1 , "table-cell" : 1 , "table-caption" : 1 } , c = { absolute : 1 , fixed : 1 } ; CKEDITOR . dom . element . prototype . isBlockBoundary = function ( a ) { return "none" != this . getComputedStyle ( "float" ) || this . getComputedStyle ( "position" ) in c || ! b [ this . getComputedStyle ( "display" ) ] ? ! ! ( this . is ( CKEDITOR . dtd . $block ) || a && this . is ( a ) ) : ! 0 } ; CKEDITOR . dom . walker . blockBoundary = function ( a ) { return function ( b ) { return ! ( b . type == CKEDITOR . NODE _ELEMENT && b . isBlockBoundary ( a ) ) } } ; CKEDITOR . dom . walker . listItemBoundary = function ( ) { return this . blockBoundary ( { br : 1 } ) } ;
CKEDITOR . dom . walker . bookmark = function ( a , b ) { function c ( a ) { return a && a . getName && "span" == a . getName ( ) && a . data ( "cke-bookmark" ) } return function ( f ) { var d , e ; d = f && f . type != CKEDITOR . NODE _ELEMENT && ( e = f . getParent ( ) ) && c ( e ) ; d = a ? d : d || c ( f ) ; return ! ! ( b ^ d ) } } ; CKEDITOR . dom . walker . whitespaces = function ( a ) { return function ( b ) { var c ; b && b . type == CKEDITOR . NODE _TEXT && ( c = ! CKEDITOR . tools . trim ( b . getText ( ) ) || CKEDITOR . env . webkit && b . getText ( ) == CKEDITOR . dom . selection . FILLING _CHAR _SEQUENCE ) ; return ! ! ( a ^ c ) } } ; CKEDITOR . dom . walker . invisible =
function ( a ) { var b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . env . webkit ? 1 : 0 ; return function ( f ) { b ( f ) ? f = 1 : ( f . type == CKEDITOR . NODE _TEXT && ( f = f . getParent ( ) ) , f = f . $ . offsetWidth <= c ) ; return ! ! ( a ^ f ) } } ; CKEDITOR . dom . walker . nodeType = function ( a , b ) { return function ( c ) { return ! ! ( b ^ c . type == a ) } } ; CKEDITOR . dom . walker . bogus = function ( a ) { function b ( a ) { return ! g ( a ) && ! l ( a ) } return function ( c ) { var f = CKEDITOR . env . needsBrFiller ? c . is && c . is ( "br" ) : c . getText && e . test ( c . getText ( ) ) ; f && ( f = c . getParent ( ) , c = c . getNext ( b ) , f = f . isBlockBoundary ( ) &&
( ! c || c . type == CKEDITOR . NODE _ELEMENT && c . isBlockBoundary ( ) ) ) ; return ! ! ( a ^ f ) } } ; CKEDITOR . dom . walker . temp = function ( a ) { return function ( b ) { b . type != CKEDITOR . NODE _ELEMENT && ( b = b . getParent ( ) ) ; b = b && b . hasAttribute ( "data-cke-temp" ) ; return ! ! ( a ^ b ) } } ; var e = /^[\t\r\n ]*(?: |\xa0)$/ , g = CKEDITOR . dom . walker . whitespaces ( ) , l = CKEDITOR . dom . walker . bookmark ( ) , k = CKEDITOR . dom . walker . temp ( ) , q = function ( a ) { return l ( a ) || g ( a ) || a . type == CKEDITOR . NODE _ELEMENT && a . is ( CKEDITOR . dtd . $inline ) && ! a . is ( CKEDITOR . dtd . $empty ) } ; CKEDITOR . dom . walker . ignored =
function ( a ) { return function ( b ) { b = g ( b ) || l ( b ) || k ( b ) ; return ! ! ( a ^ b ) } } ; var w = CKEDITOR . dom . walker . ignored ( ) ; CKEDITOR . dom . walker . empty = function ( a ) { return function ( b ) { for ( var c = 0 , f = b . getChildCount ( ) ; c < f ; ++ c ) if ( ! w ( b . getChild ( c ) ) ) return ! ! a ; return ! a } } ; var f = CKEDITOR . dom . walker . empty ( ) , y = CKEDITOR . dom . walker . validEmptyBlockContainers = CKEDITOR . tools . extend ( function ( a ) { var b = { } , c ; for ( c in a ) CKEDITOR . dtd [ c ] [ "#" ] && ( b [ c ] = 1 ) ; return b } ( CKEDITOR . dtd . $block ) , { caption : 1 , td : 1 , th : 1 } ) ; CKEDITOR . dom . walker . editable = function ( a ) { return function ( b ) { b =
w ( b ) ? ! 1 : b . type == CKEDITOR . NODE _TEXT || b . type == CKEDITOR . NODE _ELEMENT && ( b . is ( CKEDITOR . dtd . $inline ) || b . is ( "hr" ) || "false" == b . getAttribute ( "contenteditable" ) || ! CKEDITOR . env . needsBrFiller && b . is ( y ) && f ( b ) ) ? ! 0 : ! 1 ; return ! ! ( a ^ b ) } } ; CKEDITOR . dom . element . prototype . getBogus = function ( ) { var a = this ; do a = a . getPreviousSourceNode ( ) ; while ( q ( a ) ) ; return a && ( CKEDITOR . env . needsBrFiller ? a . is && a . is ( "br" ) : a . getText && e . test ( a . getText ( ) ) ) ? a : ! 1 } } ) ( ) ;
function ( a ) { var b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . env . webkit ? 1 : 0 ; return function ( f ) { b ( f ) ? f = 1 : ( f . type == CKEDITOR . NODE _TEXT && ( f = f . getParent ( ) ) , f = f . $ . offsetWidth <= c ) ; return ! ! ( a ^ f ) } } ; CKEDITOR . dom . walker . nodeType = function ( a , b ) { return function ( c ) { return ! ! ( b ^ c . type == a ) } } ; CKEDITOR . dom . walker . bogus = function ( a ) { function b ( a ) { return ! g ( a ) && ! k ( a ) } return function ( c ) { var f = CKEDITOR . env . needsBrFiller ? c . is && c . is ( "br" ) : c . getText && e . test ( c . getText ( ) ) ; f && ( f = c . getParent ( ) , c = c . getNext ( b ) , f = f . isBlockBoundary ( ) &&
( ! c || c . type == CKEDITOR . NODE _ELEMENT && c . isBlockBoundary ( ) ) ) ; return ! ! ( a ^ f ) } } ; CKEDITOR . dom . walker . temp = function ( a ) { return function ( b ) { b . type != CKEDITOR . NODE _ELEMENT && ( b = b . getParent ( ) ) ; b = b && b . hasAttribute ( "data-cke-temp" ) ; return ! ! ( a ^ b ) } } ; var e = /^[\t\r\n ]*(?: |\xa0)$/ , g = CKEDITOR . dom . walker . whitespaces ( ) , k = CKEDITOR . dom . walker . bookmark ( ) , l = CKEDITOR . dom . walker . temp ( ) , q = function ( a ) { return k ( a ) || g ( a ) || a . type == CKEDITOR . NODE _ELEMENT && a . is ( CKEDITOR . dtd . $inline ) && ! a . is ( CKEDITOR . dtd . $empty ) } ; CKEDITOR . dom . walker . ignored =
function ( a ) { return function ( b ) { b = g ( b ) || k ( b ) || l ( b ) ; return ! ! ( a ^ b ) } } ; var v = CKEDITOR . dom . walker . ignored ( ) ; CKEDITOR . dom . walker . empty = function ( a ) { return function ( b ) { for ( var c = 0 , f = b . getChildCount ( ) ; c < f ; ++ c ) if ( ! v ( b . getChild ( c ) ) ) return ! ! a ; return ! a } } ; var f = CKEDITOR . dom . walker . empty ( ) , y = CKEDITOR . dom . walker . validEmptyBlockContainers = CKEDITOR . tools . extend ( function ( a ) { var b = { } , c ; for ( c in a ) CKEDITOR . dtd [ c ] [ "#" ] && ( b [ c ] = 1 ) ; return b } ( CKEDITOR . dtd . $block ) , { caption : 1 , td : 1 , th : 1 } ) ; CKEDITOR . dom . walker . editable = function ( a ) { return function ( b ) { b =
v ( b ) ? ! 1 : b . type == CKEDITOR . NODE _TEXT || b . type == CKEDITOR . NODE _ELEMENT && ( b . is ( CKEDITOR . dtd . $inline ) || b . is ( "hr" ) || "false" == b . getAttribute ( "contenteditable" ) || ! CKEDITOR . env . needsBrFiller && b . is ( y ) && f ( b ) ) ? ! 0 : ! 1 ; return ! ! ( a ^ b ) } } ; CKEDITOR . dom . element . prototype . getBogus = function ( ) { var a = this ; do a = a . getPreviousSourceNode ( ) ; while ( q ( a ) ) ; return a && ( CKEDITOR . env . needsBrFiller ? a . is && a . is ( "br" ) : a . getText && e . test ( a . getText ( ) ) ) ? a : ! 1 } } ) ( ) ;
CKEDITOR . dom . range = function ( a ) { this . endOffset = this . endContainer = this . startOffset = this . startContainer = null ; this . collapsed = ! 0 ; var d = a instanceof CKEDITOR . dom . document ; this . document = d ? a : a . getDocument ( ) ; this . root = d ? a . getBody ( ) : a } ;
( function ( ) { function a ( a ) { a . collapsed = a . startContainer && a . endContainer && a . startContainer . equals ( a . endContainer ) && a . startOffset == a . endOffset } function d ( a , b , c , d , e ) { function p ( a , b , c , f ) { var d = c ? a . getPrevious ( ) : a . getNext ( ) ; if ( f && k ) return d ; h || f ? b . append ( a . clone ( ! 0 , e ) , c ) : ( a . remove ( ) , r && b . append ( a ) ) ; return d } function g ( ) { var a , b , c , f = Math . min ( v . length , I . length ) ; for ( a = 0 ; a < f ; a ++ ) if ( b = v [ a ] , c = I [ a ] , ! b . equals ( c ) ) return a ; return a - 1 } function l ( ) { var b = J - 1 , c = H && w && ! n . equals ( m ) ; b < F - 1 || b < L - 1 || c ? ( c ? a . moveToPosition ( m ,
CKEDITOR . POSITION _BEFORE _START ) : L == b + 1 && C ? a . moveToPosition ( I [ b ] , CKEDITOR . POSITION _BEFORE _END ) : a . moveToPosition ( I [ b + 1 ] , CKEDITOR . POSITION _BEFORE _START ) , d && ( b = v [ 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 , h = 2 == b ; b = h || r ; var n = a . startContainer , m = a . endContainer ,
z = a . startOffset , B = a . endOffset , E , C , H , w , q , Q ; if ( h && m . type == CKEDITOR . NODE _TEXT && n . equals ( m ) ) n = a . document . createText ( n . substring ( z , B ) ) , c . append ( n ) ; else { m . type == CKEDITOR . NODE _TEXT ? h ? Q = ! 0 : m = m . split ( B ) : 0 < m . getChildCount ( ) ? B >= m . getChildCount ( ) ? ( m = m . getChild ( B - 1 ) , C = ! 0 ) : m = m . getChild ( B ) : w = C = ! 0 ; n . type == CKEDITOR . NODE _TEXT ? h ? q = ! 0 : n . split ( z ) : 0 < n . getChildCount ( ) ? 0 === z ? ( n = n . getChild ( z ) , E = ! 0 ) : n = n . getChild ( z - 1 ) : H = E = ! 0 ; for ( var v = n . getParents ( ) , I = m . getParents ( ) , J = g ( ) , F = v . length - 1 , L = I . length - 1 , K = c , ba , Z , V , fa = - 1 , N = J ; N <= F ; N ++ ) { Z =
v [ N ] ; V = Z . getNext ( ) ; for ( N != F || Z . equals ( I [ N ] ) && F < L ? b && ( ba = K . append ( Z . clone ( 0 , e ) ) ) : E ? p ( Z , K , ! 1 , H ) : q && K . append ( a . document . createText ( Z . substring ( z ) ) ) ; V ; ) { if ( V . equals ( I [ N ] ) ) { fa = N ; break } V = p ( V , K ) } K = ba } K = c ; for ( N = J ; N <= L ; N ++ ) if ( c = I [ N ] , V = c . getPrevious ( ) , c . equals ( v [ N ] ) ) b && ( K = K . getChild ( 0 ) ) ; else { N != L || c . equals ( v [ N ] ) && L < F ? b && ( ba = K . append ( c . clone ( 0 , e ) ) ) : C ? p ( c , K , ! 1 , w ) : Q && K . append ( a . document . createText ( c . substring ( 0 , B ) ) ) ; if ( N > fa ) for ( ; V ; ) V = p ( V , K , ! 0 ) ; K = ba } h || l ( ) } } function b ( ) { var a = ! 1 , b = CKEDITOR . dom . walker . whitespaces ( ) ,
c = CKEDITOR . dom . walker . bookmark ( ! 0 ) , d = CKEDITOR . dom . walker . bogus ( ) ; return function ( e ) { return c ( e ) || b ( e ) ? ! 0 : d ( e ) && ! a ? a = ! 0 : e . type == CKEDITOR . NODE _TEXT && ( e . hasAscendant ( "pre" ) || CKEDITOR . tools . trim ( e . getText ( ) ) . length ) || e . type == CKEDITOR . NODE _ELEMENT && ! e . is ( g ) ? ! 1 : ! 0 } } function c ( a ) { var b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . dom . walker . bookmark ( 1 ) ; return function ( d ) { return c ( d ) || b ( d ) ? ! 0 : ! a && l ( d ) || d . type == CKEDITOR . NODE _ELEMENT && d . is ( CKEDITOR . dtd . $removeEmpty ) } } function e ( a ) { return function ( ) { var b ; return this [ a ?
"getPreviousNode" : "getNextNode" ] ( function ( a ) { ! b && w ( a ) && ( b = a ) ; return q ( a ) && ! ( l ( a ) && a . equals ( b ) ) } ) } } var g = { abbr : 1 , acronym : 1 , b : 1 , bdo : 1 , big : 1 , cite : 1 , code : 1 , del : 1 , dfn : 1 , em : 1 , font : 1 , i : 1 , ins : 1 , label : 1 , kbd : 1 , q : 1 , samp : 1 , small : 1 , span : 1 , strike : 1 , strong : 1 , sub : 1 , sup : 1 , tt : 1 , u : 1 , "var" : 1 } , l = CKEDITOR . dom . walker . bogus ( ) , k = /^[\t\r\n ]*(?: |\xa0)$/ , q = CKEDITOR . dom . walker . editable ( ) , w = CKEDITOR . dom . walker . ignored ( ! 0 ) ; CKEDITOR . dom . range . prototype = { clone : function ( ) { var a = new CKEDITOR . dom . range ( this . root ) ; a . _setStartContainer ( this . startContainer ) ;
( function ( ) { function a ( a ) { a . collapsed = a . startContainer && a . endContainer && a . startContainer . equals ( a . endContainer ) && a . startOffset == a . endOffset } function d ( a , b , c , d , e ) { function n ( a , b , c , f ) { var d = c ? a . getPrevious ( ) : a . getNext ( ) ; if ( f && l ) return d ; h || f ? b . append ( a . clone ( ! 0 , e ) , c ) : ( a . remove ( ) , t && b . append ( a ) ) ; return d } function g ( ) { var a , b , c , f = Math . min ( N . length , C . length ) ; for ( a = 0 ; a < f ; a ++ ) if ( b = N [ a ] , c = C [ a ] , ! b . equals ( c ) ) return a ; return a - 1 } function k ( ) { var b = I - 1 , c = E && v && ! p . equals ( m ) ; b < G - 1 || b < K - 1 || c ? ( c ? a . moveToPosition ( m ,
CKEDITOR . POSITION _BEFORE _START ) : K == b + 1 && B ? a . moveToPosition ( C [ b ] , CKEDITOR . POSITION _BEFORE _END ) : a . moveToPosition ( C [ b + 1 ] , CKEDITOR . POSITION _BEFORE _START ) , d && ( b = N [ b + 1 ] ) && b . type == CKEDITOR . NODE _ELEMENT && ( c = CKEDITOR . dom . element . createFromHtml ( '\x3cspan data-cke-bookmark\x3d"1" style\x3d"display:none"\x3e\x26nbsp;\x3c/span\x3e' , a . document ) , c . insertAfter ( b ) , b . mergeSiblings ( ! 1 ) , a . moveToBookmark ( { startNode : c } ) ) ) : a . collapse ( ! 0 ) } a . optimizeBookmark ( ) ; var l = 0 === b , t = 1 == b , h = 2 == b ; b = h || t ; var p = a . startContainer , m = a . endContainer ,
x = a . startOffset , z = a . endOffset , F , B , E , v , q , O ; if ( h && m . type == CKEDITOR . NODE _TEXT && p . equals ( m ) ) p = a . document . createText ( p . substring ( x , z ) ) , c . append ( p ) ; else { m . type == CKEDITOR . NODE _TEXT ? h ? O = ! 0 : m = m . split ( z ) : 0 < m . getChildCount ( ) ? z >= m . getChildCount ( ) ? ( m = m . getChild ( z - 1 ) , B = ! 0 ) : m = m . getChild ( z ) : v = B = ! 0 ; p . type == CKEDITOR . NODE _TEXT ? h ? q = ! 0 : p . split ( x ) : 0 < p . getChildCount ( ) ? 0 === x ? ( p = p . getChild ( x ) , F = ! 0 ) : p = p . getChild ( x - 1 ) : E = F = ! 0 ; for ( var N = p . getParents ( ) , C = m . getParents ( ) , I = g ( ) , G = N . length - 1 , K = C . length - 1 , J = c , L , Z , U , fa = - 1 , Q = I ; Q <= G ; Q ++ ) { Z =
N [ Q ] ; U = Z . getNext ( ) ; for ( Q != G || Z . equals ( C [ Q ] ) && G < K ? b && ( L = J . append ( Z . clone ( 0 , e ) ) ) : F ? n ( Z , J , ! 1 , E ) : q && J . append ( a . document . createText ( Z . substring ( x ) ) ) ; U ; ) { if ( U . equals ( C [ Q ] ) ) { fa = Q ; break } U = n ( U , J ) } J = L } J = c ; for ( Q = I ; Q <= K ; Q ++ ) if ( c = C [ Q ] , U = c . getPrevious ( ) , c . equals ( N [ Q ] ) ) b && ( J = J . getChild ( 0 ) ) ; else { Q != K || c . equals ( N [ Q ] ) && K < G ? b && ( L = J . append ( c . clone ( 0 , e ) ) ) : B ? n ( c , J , ! 1 , v ) : O && J . append ( a . document . createText ( c . substring ( 0 , z ) ) ) ; if ( Q > fa ) for ( ; U ; ) U = n ( U , J , ! 0 ) ; J = L } h || k ( ) } } function b ( ) { var a = ! 1 , b = CKEDITOR . dom . walker . whitespaces ( ) ,
c = CKEDITOR . dom . walker . bookmark ( ! 0 ) , d = CKEDITOR . dom . walker . bogus ( ) ; return function ( e ) { return c ( e ) || b ( e ) ? ! 0 : d ( e ) && ! a ? a = ! 0 : e . type == CKEDITOR . NODE _TEXT && ( e . hasAscendant ( "pre" ) || CKEDITOR . tools . trim ( e . getText ( ) ) . length ) || e . type == CKEDITOR . NODE _ELEMENT && ! e . is ( g ) ? ! 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 e ( a ) { return function ( ) { var b ; return this [ a ?
"getPreviousNode" : "getNextNode" ] ( function ( a ) { ! b && v ( a ) && ( b = a ) ; return q ( a ) && ! ( k ( a ) && a . equals ( b ) ) } ) } } var g = { 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 ( ) , l = /^[\t\r\n ]*(?: |\xa0)$/ , q = CKEDITOR . dom . walker . editable ( ) , v = CKEDITOR . dom . walker . ignored ( ! 0 ) ; CKEDITOR . dom . range . prototype = { clone : function ( ) { var a = new CKEDITOR . dom . range ( this . root ) ; a . _setStartContainer ( this . startContainer ) ;
a . startOffset = this . startOffset ; a . _setEndContainer ( this . endContainer ) ; a . endOffset = this . endOffset ; a . collapsed = this . collapsed ; return a } , collapse : function ( a ) { a ? ( this . _setEndContainer ( this . startContainer ) , this . endOffset = this . startOffset ) : ( this . _setStartContainer ( this . endContainer ) , this . startOffset = this . endOffset ) ; this . collapsed = ! 0 } , cloneContents : function ( a ) { var b = new CKEDITOR . dom . documentFragment ( this . document ) ; this . collapsed || d ( this , 2 , b , ! 1 , "undefined" == typeof a ? ! 0 : a ) ; return b } , deleteContents : function ( a ) { this . collapsed ||
d ( this , 0 , null , a ) } , extractContents : function ( a , b ) { var c = new CKEDITOR . dom . documentFragment ( this . document ) ; this . collapsed || d ( this , 1 , c , a , "undefined" == typeof b ? ! 0 : b ) ; return c } , createBookmark : function ( a ) { var b , c , d , e , p = this . collapsed ; b = this . document . createElement ( "span" ) ; b . data ( "cke-bookmark" , 1 ) ; b . setStyle ( "display" , "none" ) ; b . setHtml ( "\x26nbsp;" ) ; a && ( d = "cke_bm_" + CKEDITOR . tools . getNextNumber ( ) , b . setAttribute ( "id" , d + ( p ? "C" : "S" ) ) ) ; p || ( c = b . clone ( ) , c . setHtml ( "\x26nbsp;" ) , a && c . setAttribute ( "id" , d + "E" ) , e = this . clone ( ) ,
e . collapse ( ) , e . insertNode ( c ) ) ; e = this . clone ( ) ; e . collapse ( ! 0 ) ; e . insertNode ( b ) ; c ? ( this . setStartAfter ( b ) , this . setEndBefore ( c ) ) : this . moveToPosition ( b , CKEDITOR . POSITION _AFTER _END ) ; return { startNode : a ? d + ( p ? "C" : "S" ) : b , endNode : a ? d + "E" : c , serializable : a , collapsed : p } } , createBookmark2 : function ( ) { function a ( b ) { var f = b . container , d = b . offset , e ; e = f ; var g = d ; e = e . type != CKEDITOR . NODE _ELEMENT || 0 === g || g == e . getChildCount ( ) ? 0 : e . getChild ( g - 1 ) . type == CKEDITOR . NODE _TEXT && e . getChild ( g ) . type == CKEDITOR . NODE _TEXT ; e && ( f = f . getChild ( d -
d ( this , 0 , null , a ) } , extractContents : function ( a , b ) { var c = new CKEDITOR . dom . documentFragment ( this . document ) ; this . collapsed || d ( this , 1 , c , a , "undefined" == typeof b ? ! 0 : b ) ; return c } , createBookmark : function ( a ) { var b , c , d , e , n = this . collapsed ; b = this . document . createElement ( "span" ) ; b . data ( "cke-bookmark" , 1 ) ; b . setStyle ( "display" , "none" ) ; b . setHtml ( "\x26nbsp;" ) ; a && ( d = "cke_bm_" + CKEDITOR . tools . getNextNumber ( ) , b . setAttribute ( "id" , d + ( n ? "C" : "S" ) ) ) ; n || ( c = b . clone ( ) , c . setHtml ( "\x26nbsp;" ) , a && c . setAttribute ( "id" , d + "E" ) , e = this . clone ( ) ,
e . collapse ( ) , e . insertNode ( c ) ) ; e = this . clone ( ) ; e . collapse ( ! 0 ) ; e . insertNode ( b ) ; c ? ( this . setStartAfter ( b ) , this . setEndBefore ( c ) ) : this . moveToPosition ( b , CKEDITOR . POSITION _AFTER _END ) ; return { startNode : a ? d + ( n ? "C" : "S" ) : b , endNode : a ? d + "E" : c , serializable : a , collapsed : n } } , createBookmark2 : function ( ) { function a ( b ) { var f = b . container , d = b . offset , e ; e = f ; var g = d ; e = e . type != CKEDITOR . NODE _ELEMENT || 0 === g || g == e . getChildCount ( ) ? 0 : e . getChild ( g - 1 ) . type == CKEDITOR . NODE _TEXT && e . getChild ( g ) . type == CKEDITOR . NODE _TEXT ; e && ( f = f . getChild ( d -
1 ) , d = f . getLength ( ) ) ; if ( f . type == CKEDITOR . NODE _ELEMENT && 0 < d ) { a : { for ( e = f ; d -- ; ) if ( g = e . getChild ( d ) . getIndex ( ! 0 ) , 0 <= g ) { d = g ; break a } d = - 1 } d += 1 } if ( f . type == CKEDITOR . NODE _TEXT ) { e = f ; for ( g = 0 ; ( e = e . getPrevious ( ) ) && e . type == CKEDITOR . NODE _TEXT ; ) g += e . getText ( ) . replace ( CKEDITOR . dom . selection . FILLING _CHAR _SEQUENCE , "" ) . length ; e = g ; f . getText ( ) ? d += e : ( g = f . getPrevious ( c ) , e ? ( d = e , f = g ? g . getNext ( ) : f . getParent ( ) . getFirst ( ) ) : ( f = f . getParent ( ) , d = g ? g . getIndex ( ! 0 ) + 1 : 0 ) ) } b . container = f ; b . offset = d } function b ( a , c ) { var f = c . getCustomData ( "cke-fillingChar" ) ;
if ( f ) { var d = a . container ; f . equals ( d ) && ( a . offset -= CKEDITOR . dom . selection . FILLING _CHAR _SEQUENCE . length , 0 >= a . offset && ( a . offset = d . getIndex ( ) , a . container = d . getParent ( ) ) ) } } var c = CKEDITOR . dom . walker . nodeType ( CKEDITOR . NODE _TEXT , ! 0 ) ; return function ( c ) { var d = this . collapsed , e = { container : this . startContainer , offset : this . startOffset } , g = { container : this . endContainer , offset : this . endOffset } ; c && ( a ( e ) , b ( e , this . root ) , d || ( a ( g ) , b ( g , this . root ) ) ) ; return { start : e . container . getAddress ( c ) , end : d ? null : g . container . getAddress ( c ) ,
startOffset : e . offset , endOffset : g . offset , normalized : c , collapsed : d , is2 : ! 0 } } } ( ) , moveToBookmark : function ( a ) { if ( a . is2 ) { var b = this . document . getByAddress ( a . start , a . normalized ) , c = a . startOffset , d = a . end && this . document . getByAddress ( a . end , a . normalized ) ; a = a . endOffset ; this . setStart ( b , c ) ; d ? this . setEnd ( d , a ) : this . collapse ( ! 0 ) } else b = ( c = a . serializable ) ? this . document . getById ( a . startNode ) : a . startNode , a = c ? this . document . getById ( a . endNode ) : a . endNode , this . setStartBefore ( b ) , b . remove ( ) , a ? ( this . setEndBefore ( a ) , a . remove ( ) ) :
this . collapse ( ! 0 ) } , getBoundaryNodes : function ( ) { var a = this . startContainer , b = this . endContainer , c = this . startOffset , d = this . endOffset , e ; if ( a . type == CKEDITOR . NODE _ELEMENT ) if ( e = a . getChildCount ( ) , e > c ) a = a . getChild ( c ) ; else if ( 1 > e ) a = a . getPreviousSourceNode ( ) ; else { for ( a = a . $ ; a . lastChild ; ) a = a . lastChild ; a = new CKEDITOR . dom . node ( a ) ; a = a . getNextSourceNode ( ) || a } if ( b . type == CKEDITOR . NODE _ELEMENT ) if ( e = b . getChildCount ( ) , e > d ) b = b . getChild ( d ) . getPreviousSourceNode ( ! 0 ) ; else if ( 1 > e ) b = b . getPreviousSourceNode ( ) ; else { for ( b = b . $ ; b . lastChild ; ) b =
b . lastChild ; b = new CKEDITOR . dom . node ( b ) } a . getPosition ( b ) & CKEDITOR . POSITION _FOLLOWING && ( a = b ) ; return { startNode : a , endNode : b } } , getCommonAncestor : function ( a , b ) { var c = this . startContainer , d = this . endContainer , c = c . equals ( d ) ? a && c . type == CKEDITOR . NODE _ELEMENT && this . startOffset == this . endOffset - 1 ? c . getChild ( this . startOffset ) : c : c . getCommonAncestor ( d ) ; return b && ! c . is ? c . getParent ( ) : c } , optimize : function ( ) { var a = this . startContainer , b = this . startOffset ; a . type != CKEDITOR . NODE _ELEMENT && ( b ? b >= a . getLength ( ) && this . setStartAfter ( a ) :
this . setStartBefore ( a ) ) ; a = this . endContainer ; b = this . endOffset ; a . type != CKEDITOR . NODE _ELEMENT && ( b ? b >= a . getLength ( ) && this . setEndAfter ( a ) : this . setEndBefore ( a ) ) } , optimizeBookmark : function ( ) { var a = this . startContainer , b = this . endContainer ; a . is && a . is ( "span" ) && a . data ( "cke-bookmark" ) && this . setStartAt ( a , CKEDITOR . POSITION _BEFORE _START ) ; b && b . is && b . is ( "span" ) && b . data ( "cke-bookmark" ) && this . setEndAt ( b , CKEDITOR . POSITION _AFTER _END ) } , trim : function ( a , b ) { var c = this . startContainer , d = this . startOffset , e = this . collapsed ; if ( ( ! a ||
e ) && c && c . type == CKEDITOR . NODE _TEXT ) { if ( d ) if ( d >= c . getLength ( ) ) d = c . getIndex ( ) + 1 , c = c . getParent ( ) ; else { var p = c . split ( d ) , d = c . getIndex ( ) + 1 , c = c . getParent ( ) ; this . startContainer . equals ( this . endContainer ) ? this . setEnd ( p , this . endOffset - this . startOffset ) : c . equals ( this . endContainer ) && ( this . endOffset += 1 ) } else d = c . getIndex ( ) , c = c . getParent ( ) ; this . setStart ( c , d ) ; if ( e ) { this . collapse ( ! 0 ) ; return } } c = this . endContainer ; d = this . endOffset ; b || e || ! c || c . type != CKEDITOR . NODE _TEXT || ( d ? ( d >= c . getLength ( ) || c . split ( d ) , d = c . getIndex ( ) + 1 ) :
d = c . getIndex ( ) , c = c . getParent ( ) , this . setEnd ( c , d ) ) } , enlarge : function ( a , b ) { function c ( a ) { return a && a . type == CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "contenteditable" ) ? null : a } var d = new RegExp ( /[^\s\ufeff]/ ) ; switch ( a ) { case CKEDITOR . ENLARGE _INLINE : var e = 1 ; case CKEDITOR . ENLARGE _ELEMENT : var p = function ( a , b ) { var c = new CKEDITOR . dom . range ( l ) ; c . setStart ( a , b ) ; c . setEndAt ( l , CKEDITOR . POSITION _BEFORE _END ) ; var c = new CKEDITOR . dom . walker ( c ) , f ; for ( c . guard = function ( a ) { return ! ( a . type == CKEDITOR . NODE _ELEMENT && a . isBlockBoundary ( ) ) } ; f =
c . next ( ) ; ) { if ( f . type != CKEDITOR . NODE _TEXT ) return ! 1 ; E = f != a ? f . getText ( ) : f . substring ( b ) ; if ( d . test ( E ) ) return ! 1 } return ! 0 } ; if ( this . collapsed ) break ; var g = this . getCommonAncestor ( ) , l = this . root , k , r , h , n , m , z = ! 1 , B , E ; B = this . startContainer ; var C = this . startOffset ; B . type == CKEDITOR . NODE _TEXT ? ( C && ( B = ! CKEDITOR . tools . trim ( B . substring ( 0 , C ) ) . length && B , z = ! ! B ) , B && ( ( n = B . getPrevious ( ) ) || ( h = B . getParent ( ) ) ) ) : ( C && ( n = B . getChild ( C - 1 ) || B . getLast ( ) ) , n || ( h = B ) ) ; for ( h = c ( h ) ; h || n ; ) { if ( h && ! n ) { ! m && h . equals ( g ) && ( m = ! 0 ) ; if ( e ? h . isBlockBoundary ( ) :
! l . contains ( h ) ) break ; z && "inline" == h . getComputedStyle ( "display" ) || ( z = ! 1 , m ? k = h : this . setStartBefore ( h ) ) ; n = h . getPrevious ( ) } for ( ; n ; ) if ( B = ! 1 , n . type == CKEDITOR . NODE _COMMENT ) n = n . getPrevious ( ) ; else { if ( n . type == CKEDITOR . NODE _TEXT ) E = n . getText ( ) , d . test ( E ) && ( n = null ) , B = /[\s\ufeff]$/ . test ( E ) ; else if ( ( n . $ . offsetWidth > ( CKEDITOR . env . webkit ? 1 : 0 ) || b && n . is ( "br" ) ) && ! n . data ( "cke-bookmark" ) ) if ( z && CKEDITOR . dtd . $removeEmpty [ n . getName ( ) ] ) { E = n . getText ( ) ; if ( d . test ( E ) ) n = null ; else for ( var C = n . $ . getElementsByTagName ( "*" ) , H = 0 , w ; w =
C [ H ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ w . nodeName . toLowerCase ( ) ] ) { n = null ; break } n && ( B = ! ! E . length ) } else n = null ; B && ( z ? m ? k = h : h && this . setStartBefore ( h ) : z = ! 0 ) ; if ( n ) { B = n . getPrevious ( ) ; if ( ! h && ! B ) { h = n ; n = null ; break } n = B } else h = null } h && ( h = c ( h . getParent ( ) ) ) } B = this . endContainer ; C = this . endOffset ; h = n = null ; m = z = ! 1 ; B . type == CKEDITOR . NODE _TEXT ? CKEDITOR . tools . trim ( B . substring ( C ) ) . length ? z = ! 0 : ( z = ! B . getLength ( ) , C == B . getLength ( ) ? ( n = B . getNext ( ) ) || ( h = B . getParent ( ) ) : p ( B , C ) && ( h = B . getParent ( ) ) ) : ( n = B . getChild ( C ) ) || ( h = B ) ; for ( ; h ||
n ; ) { if ( h && ! n ) { ! m && h . equals ( g ) && ( m = ! 0 ) ; if ( e ? h . isBlockBoundary ( ) : ! l . contains ( h ) ) break ; z && "inline" == h . getComputedStyle ( "display" ) || ( z = ! 1 , m ? r = h : h && this . setEndAfter ( h ) ) ; n = h . getNext ( ) } for ( ; n ; ) { B = ! 1 ; if ( n . type == CKEDITOR . NODE _TEXT ) E = n . getText ( ) , p ( n , 0 ) || ( n = null ) , B = /^[\s\ufeff]/ . test ( E ) ; else if ( n . type == CKEDITOR . NODE _ELEMENT ) { if ( ( 0 < n . $ . offsetWidth || b && n . is ( "br" ) ) && ! n . data ( "cke-bookmark" ) ) if ( z && CKEDITOR . dtd . $removeEmpty [ n . getName ( ) ] ) { E = n . getText ( ) ; if ( d . test ( E ) ) n = null ; else for ( C = n . $ . getElementsByTagName ( "*" ) , H =
0 ; w = C [ H ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ w . nodeName . toLowerCase ( ) ] ) { n = null ; break } n && ( B = ! ! E . length ) } else n = null } else B = 1 ; B && z && ( m ? r = h : this . setEndAfter ( h ) ) ; if ( n ) { B = n . getNext ( ) ; if ( ! h && ! B ) { h = n ; n = null ; break } n = B } else h = null } h && ( h = c ( h . getParent ( ) ) ) } k && r && ( g = k . contains ( r ) ? r : k , this . setStartBefore ( g ) , this . setEndAfter ( g ) ) ; break ; case CKEDITOR . ENLARGE _BLOCK _CONTENTS : case CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : h = new CKEDITOR . dom . range ( this . root ) ; l = this . root ; h . setStartAt ( l , CKEDITOR . POSITION _AFTER _START ) ; h . setEnd ( this . startContainer ,
this . startOffset ) ; h = new CKEDITOR . dom . walker ( h ) ; var q , Q , v = CKEDITOR . dom . walker . blockBoundary ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? { br : 1 } : null ) , I = null , J = function ( a ) { if ( a . type == CKEDITOR . NODE _ELEMENT && "false" == a . getAttribute ( "contenteditable" ) ) if ( I ) { if ( I . equals ( a ) ) { I = null ; return } } else I = a ; else if ( I ) return ; var b = v ( a ) ; b || ( q = a ) ; return b } , e = function ( a ) { var b = J ( a ) ; ! b && a . is && a . is ( "br" ) && ( Q = a ) ; return b } ; h . guard = J ; h = h . lastBackward ( ) ; q = q || l ; this . setStartAt ( q , ! q . is ( "br" ) && ( ! h && this . checkStartOfBlock ( ) || h && q . contains ( h ) ) ?
CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _AFTER _END ) ; if ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ) { h = this . clone ( ) ; h = new CKEDITOR . dom . walker ( h ) ; var F = CKEDITOR . dom . walker . whitespaces ( ) , L = CKEDITOR . dom . walker . bookmark ( ) ; h . evaluator = function ( a ) { return ! F ( a ) && ! L ( a ) } ; if ( ( h = h . previous ( ) ) && h . type == CKEDITOR . NODE _ELEMENT && h . is ( "br" ) ) break } h = this . clone ( ) ; h . collapse ( ) ; h . setEndAt ( l , CKEDITOR . POSITION _BEFORE _END ) ; h = new CKEDITOR . dom . walker ( h ) ; h . guard = a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? e : J ; q = I = Q = null ; h = h . lastForward ( ) ;
q = q || l ; this . setEndAt ( q , ! h && this . checkEndOfBlock ( ) || h && q . contains ( h ) ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _BEFORE _START ) ; Q && this . setEndAfter ( Q ) } } , shrink : function ( a , b , c ) { if ( ! this . collapsed ) { a = a || CKEDITOR . SHRINK _TEXT ; var d = this . clone ( ) , e = this . startContainer , p = this . endContainer , g = this . startOffset , l = this . endOffset , k = 1 , r = 1 ; e && e . type == CKEDITOR . NODE _TEXT && ( g ? g >= e . getLength ( ) ? d . setStartAfter ( e ) : ( d . setStartBefore ( e ) , k = 0 ) : d . setStartBefore ( e ) ) ; p && p . type == CKEDITOR . NODE _TEXT && ( l ? l >= p . getLength ( ) ? d . setEndAfter ( p ) :
( d . setEndAfter ( p ) , r = 0 ) : d . setEndBefore ( p ) ) ; var d = new CKEDITOR . dom . walker ( d ) , h = CKEDITOR . dom . walker . bookmark ( ) ; d . evaluator = function ( b ) { return b . type == ( a == CKEDITOR . SHRINK _ELEMENT ? CKEDITOR . NODE _ELEMENT : CKEDITOR . NODE _TEXT ) } ; var n ; d . guard = function ( b , d ) { if ( h ( b ) ) return ! 0 ; if ( a == CKEDITOR . SHRINK _ELEMENT && b . type == CKEDITOR . NODE _TEXT || d && b . equals ( n ) || ! 1 === c && b . type == CKEDITOR . NODE _ELEMENT && b . isBlockBoundary ( ) || b . type == CKEDITOR . NODE _ELEMENT && b . hasAttribute ( "contenteditable" ) ) return ! 1 ; d || b . type != CKEDITOR . NODE _ELEMENT ||
( n = b ) ; return ! 0 } ; k && ( e = d [ a == CKEDITOR . SHRINK _ELEMENT ? "lastForward" : "next" ] ( ) ) && this . setStartAt ( e , b ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _BEFORE _START ) ; r && ( d . reset ( ) , ( d = d [ a == CKEDITOR . SHRINK _ELEMENT ? "lastBackward" : "previous" ] ( ) ) && this . setEndAt ( d , b ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _AFTER _END ) ) ; return ! ( ! k && ! r ) } } , insertNode : function ( a ) { this . optimizeBookmark ( ) ; this . trim ( ! 1 , ! 0 ) ; var b = this . startContainer , c = b . getChild ( this . startOffset ) ; c ? a . insertBefore ( c ) : b . append ( a ) ; a . getParent ( ) && a . getParent ( ) . equals ( this . endContainer ) &&
e ) && c && c . type == CKEDITOR . NODE _TEXT ) { if ( d ) if ( d >= c . getLength ( ) ) d = c . getIndex ( ) + 1 , c = c . getParent ( ) ; else { var n = c . split ( d ) , d = c . getIndex ( ) + 1 , c = c . getParent ( ) ; this . startContainer . equals ( this . endContainer ) ? this . setEnd ( n , this . endOffset - this . startOffset ) : c . equals ( this . endContainer ) && ( this . endOffset += 1 ) } else d = c . getIndex ( ) , c = c . getParent ( ) ; this . setStart ( c , d ) ; if ( e ) { this . collapse ( ! 0 ) ; return } } c = this . endContainer ; d = this . endOffset ; b || e || ! c || c . type != CKEDITOR . NODE _TEXT || ( d ? ( d >= c . getLength ( ) || c . split ( d ) , d = c . getIndex ( ) + 1 ) :
d = c . getIndex ( ) , c = c . getParent ( ) , this . setEnd ( c , d ) ) } , enlarge : function ( a , b ) { function c ( a ) { return a && a . type == CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "contenteditable" ) ? null : a } var d = new RegExp ( /[^\s\ufeff]/ ) ; switch ( a ) { case CKEDITOR . ENLARGE _INLINE : var e = 1 ; case CKEDITOR . ENLARGE _ELEMENT : var n = function ( a , b ) { var c = new CKEDITOR . dom . range ( k ) ; c . setStart ( a , b ) ; c . setEndAt ( k , CKEDITOR . POSITION _BEFORE _END ) ; var c = new CKEDITOR . dom . walker ( c ) , f ; for ( c . guard = function ( a ) { return ! ( a . type == CKEDITOR . NODE _ELEMENT && a . isBlockBoundary ( ) ) } ; f =
c . next ( ) ; ) { if ( f . type != CKEDITOR . NODE _TEXT ) return ! 1 ; F = f != a ? f . getText ( ) : f . substring ( b ) ; if ( d . test ( F ) ) return ! 1 } return ! 0 } ; if ( this . collapsed ) break ; var g = this . getCommonAncestor ( ) , k = this . root , l , t , h , p , m , x = ! 1 , z , F ; z = this . startContainer ; var B = this . startOffset ; z . type == CKEDITOR . NODE _TEXT ? ( B && ( z = ! CKEDITOR . tools . trim ( z . substring ( 0 , B ) ) . length && z , x = ! ! z ) , z && ( ( p = z . getPrevious ( ) ) || ( h = z . getParent ( ) ) ) ) : ( B && ( p = z . getChild ( B - 1 ) || z . getLast ( ) ) , p || ( h = z ) ) ; for ( h = c ( h ) ; h || p ; ) { if ( h && ! p ) { ! m && h . equals ( g ) && ( m = ! 0 ) ; if ( e ? h . isBlockBoundary ( ) :
! k . contains ( h ) ) break ; x && "inline" == h . getComputedStyle ( "display" ) || ( x = ! 1 , m ? l = h : this . setStartBefore ( h ) ) ; p = h . getPrevious ( ) } for ( ; p ; ) if ( z = ! 1 , p . type == CKEDITOR . NODE _COMMENT ) p = p . getPrevious ( ) ; else { if ( p . type == CKEDITOR . NODE _TEXT ) F = p . getText ( ) , d . test ( F ) && ( p = null ) , z = /[\s\ufeff]$/ . test ( F ) ; else if ( ( p . $ . offsetWidth > ( CKEDITOR . env . webkit ? 1 : 0 ) || b && p . is ( "br" ) ) && ! p . data ( "cke-bookmark" ) ) if ( x && CKEDITOR . dtd . $removeEmpty [ p . getName ( ) ] ) { F = p . getText ( ) ; if ( d . test ( F ) ) p = null ; else for ( var B = p . $ . getElementsByTagName ( "*" ) , E = 0 , v ; v =
B [ E ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ v . nodeName . toLowerCase ( ) ] ) { p = null ; break } p && ( z = ! ! F . length ) } else p = null ; z && ( x ? m ? l = h : h && this . setStartBefore ( h ) : x = ! 0 ) ; if ( p ) { z = p . getPrevious ( ) ; if ( ! h && ! z ) { h = p ; p = null ; break } p = z } else h = null } h && ( h = c ( h . getParent ( ) ) ) } z = this . endContainer ; B = this . endOffset ; h = p = null ; m = x = ! 1 ; z . type == CKEDITOR . NODE _TEXT ? CKEDITOR . tools . trim ( z . substring ( B ) ) . length ? x = ! 0 : ( x = ! z . getLength ( ) , B == z . getLength ( ) ? ( p = z . getNext ( ) ) || ( h = z . getParent ( ) ) : n ( z , B ) && ( h = z . getParent ( ) ) ) : ( p = z . getChild ( B ) ) || ( h = z ) ; for ( ; h ||
p ; ) { if ( h && ! p ) { ! m && h . equals ( g ) && ( m = ! 0 ) ; if ( e ? h . isBlockBoundary ( ) : ! k . contains ( h ) ) break ; x && "inline" == h . getComputedStyle ( "display" ) || ( x = ! 1 , m ? t = h : h && this . setEndAfter ( h ) ) ; p = h . getNext ( ) } for ( ; p ; ) { z = ! 1 ; if ( p . type == CKEDITOR . NODE _TEXT ) F = p . getText ( ) , n ( p , 0 ) || ( p = null ) , z = /^[\s\ufeff]/ . test ( F ) ; else if ( p . type == CKEDITOR . NODE _ELEMENT ) { if ( ( 0 < p . $ . offsetWidth || b && p . is ( "br" ) ) && ! p . data ( "cke-bookmark" ) ) if ( x && CKEDITOR . dtd . $removeEmpty [ p . getName ( ) ] ) { F = p . getText ( ) ; if ( d . test ( F ) ) p = null ; else for ( B = p . $ . getElementsByTagName ( "*" ) , E =
0 ; v = B [ E ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ v . nodeName . toLowerCase ( ) ] ) { p = null ; break } p && ( z = ! ! F . length ) } else p = null } else z = 1 ; z && x && ( m ? t = h : this . setEndAfter ( h ) ) ; if ( p ) { z = p . getNext ( ) ; if ( ! h && ! z ) { h = p ; p = null ; break } p = z } else h = null } h && ( h = c ( h . getParent ( ) ) ) } l && t && ( g = l . contains ( t ) ? t : l , this . setStartBefore ( g ) , this . setEndAfter ( g ) ) ; break ; case CKEDITOR . ENLARGE _BLOCK _CONTENTS : case CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : h = new CKEDITOR . dom . range ( this . root ) ; k = this . root ; h . setStartAt ( k , CKEDITOR . POSITION _AFTER _START ) ; h . setEnd ( this . startContainer ,
this . startOffset ) ; h = new CKEDITOR . dom . walker ( h ) ; var q , O , N = CKEDITOR . dom . walker . blockBoundary ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? { br : 1 } : null ) , C = null , I = function ( a ) { if ( a . type == CKEDITOR . NODE _ELEMENT && "false" == a . getAttribute ( "contenteditable" ) ) if ( C ) { if ( C . equals ( a ) ) { C = null ; return } } else C = a ; else if ( C ) return ; var b = N ( a ) ; b || ( q = a ) ; return b } , e = function ( a ) { var b = I ( a ) ; ! b && a . is && a . is ( "br" ) && ( O = a ) ; return b } ; h . guard = I ; h = h . lastBackward ( ) ; q = q || k ; this . setStartAt ( q , ! q . is ( "br" ) && ( ! h && this . checkStartOfBlock ( ) || h && q . contains ( h ) ) ?
CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _AFTER _END ) ; if ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ) { h = this . clone ( ) ; h = new CKEDITOR . dom . walker ( h ) ; var G = CKEDITOR . dom . walker . whitespaces ( ) , K = CKEDITOR . dom . walker . bookmark ( ) ; h . evaluator = function ( a ) { return ! G ( a ) && ! K ( a ) } ; if ( ( h = h . previous ( ) ) && h . type == CKEDITOR . NODE _ELEMENT && h . is ( "br" ) ) break } h = this . clone ( ) ; h . collapse ( ) ; h . setEndAt ( k , CKEDITOR . POSITION _BEFORE _END ) ; h = new CKEDITOR . dom . walker ( h ) ; h . guard = a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? e : I ; q = C = O = null ; h = h . lastForward ( ) ;
q = q || k ; this . setEndAt ( q , ! h && this . checkEndOfBlock ( ) || h && q . contains ( h ) ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _BEFORE _START ) ; O && this . setEndAfter ( O ) } } , shrink : function ( a , b , c ) { if ( ! this . collapsed ) { a = a || CKEDITOR . SHRINK _TEXT ; var d = this . clone ( ) , e = this . startContainer , n = this . endContainer , g = this . startOffset , k = this . endOffset , l = 1 , t = 1 ; e && e . type == CKEDITOR . NODE _TEXT && ( g ? g >= e . getLength ( ) ? d . setStartAfter ( e ) : ( d . setStartBefore ( e ) , l = 0 ) : d . setStartBefore ( e ) ) ; n && n . type == CKEDITOR . NODE _TEXT && ( k ? k >= n . getLength ( ) ? d . setEndAfter ( n ) :
( d . setEndAfter ( n ) , t = 0 ) : d . setEndBefore ( n ) ) ; var d = new CKEDITOR . dom . walker ( d ) , h = CKEDITOR . dom . walker . bookmark ( ) ; d . evaluator = function ( b ) { return b . type == ( a == CKEDITOR . SHRINK _ELEMENT ? CKEDITOR . NODE _ELEMENT : CKEDITOR . NODE _TEXT ) } ; var p ; d . guard = function ( b , d ) { if ( h ( b ) ) return ! 0 ; if ( a == CKEDITOR . SHRINK _ELEMENT && b . type == CKEDITOR . NODE _TEXT || d && b . equals ( p ) || ! 1 === c && b . type == CKEDITOR . NODE _ELEMENT && b . isBlockBoundary ( ) || b . type == CKEDITOR . NODE _ELEMENT && b . hasAttribute ( "contenteditable" ) ) return ! 1 ; d || b . type != CKEDITOR . NODE _ELEMENT ||
( p = b ) ; return ! 0 } ; l && ( e = d [ a == CKEDITOR . SHRINK _ELEMENT ? "lastForward" : "next" ] ( ) ) && this . setStartAt ( e , b ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _BEFORE _START ) ; t && ( d . reset ( ) , ( d = d [ a == CKEDITOR . SHRINK _ELEMENT ? "lastBackward" : "previous" ] ( ) ) && this . setEndAt ( d , b ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _AFTER _END ) ) ; return ! ( ! l && ! t ) } } , insertNode : function ( a ) { this . optimizeBookmark ( ) ; this . trim ( ! 1 , ! 0 ) ; var b = this . startContainer , c = b . getChild ( this . startOffset ) ; c ? a . insertBefore ( c ) : b . append ( a ) ; a . getParent ( ) && a . getParent ( ) . equals ( this . endContainer ) &&
this . endOffset ++ ; this . setStartBefore ( a ) } , moveToPosition : function ( a , b ) { this . setStartAt ( a , b ) ; this . collapse ( ! 0 ) } , moveToRange : function ( a ) { this . setStart ( a . startContainer , a . startOffset ) ; this . setEnd ( a . endContainer , a . endOffset ) } , selectNodeContents : function ( a ) { this . setStart ( a , 0 ) ; this . setEnd ( a , a . type == CKEDITOR . NODE _TEXT ? a . getLength ( ) : a . getChildCount ( ) ) } , setStart : function ( b , c ) { b . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $empty [ b . getName ( ) ] && ( c = b . getIndex ( ) , b = b . getParent ( ) ) ; this . _setStartContainer ( b ) ; this . startOffset =
c ; this . endContainer || ( this . _setEndContainer ( b ) , this . endOffset = c ) ; a ( this ) } , setEnd : function ( b , c ) { b . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $empty [ b . getName ( ) ] && ( c = b . getIndex ( ) + 1 , b = b . getParent ( ) ) ; this . _setEndContainer ( b ) ; this . endOffset = c ; this . startContainer || ( this . _setStartContainer ( b ) , this . startOffset = c ) ; a ( this ) } , setStartAfter : function ( a ) { this . setStart ( a . getParent ( ) , a . getIndex ( ) + 1 ) } , setStartBefore : function ( a ) { this . setStart ( a . getParent ( ) , a . getIndex ( ) ) } , setEndAfter : function ( a ) { this . setEnd ( a . getParent ( ) ,
a . getIndex ( ) + 1 ) } , setEndBefore : function ( a ) { this . setEnd ( a . getParent ( ) , a . getIndex ( ) ) } , setStartAt : function ( b , c ) { switch ( c ) { case CKEDITOR . POSITION _AFTER _START : this . setStart ( b , 0 ) ; break ; case CKEDITOR . POSITION _BEFORE _END : b . type == CKEDITOR . NODE _TEXT ? this . setStart ( b , b . getLength ( ) ) : this . setStart ( b , b . getChildCount ( ) ) ; break ; case CKEDITOR . POSITION _BEFORE _START : this . setStartBefore ( b ) ; break ; case CKEDITOR . POSITION _AFTER _END : this . setStartAfter ( b ) } a ( this ) } , setEndAt : function ( b , c ) { switch ( c ) { case CKEDITOR . POSITION _AFTER _START : this . setEnd ( b ,
0 ) ; break ; case CKEDITOR . POSITION _BEFORE _END : b . type == CKEDITOR . NODE _TEXT ? this . setEnd ( b , b . getLength ( ) ) : this . setEnd ( b , b . getChildCount ( ) ) ; break ; case CKEDITOR . POSITION _BEFORE _START : this . setEndBefore ( b ) ; break ; case CKEDITOR . POSITION _AFTER _END : this . setEndAfter ( b ) } a ( this ) } , fixBlock : function ( a , b ) { var c = this . createBookmark ( ) , d = this . document . createElement ( b ) ; this . collapse ( a ) ; this . enlarge ( CKEDITOR . ENLARGE _BLOCK _CONTENTS ) ; this . extractContents ( ) . appendTo ( d ) ; d . trim ( ) ; this . insertNode ( d ) ; var e = d . getBogus ( ) ; e && e . remove ( ) ;
d . appendBogus ( ) ; this . moveToBookmark ( c ) ; return d } , splitBlock : function ( a , b ) { var c = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) , d = new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) , e = c . block , p = d . block , g = null ; if ( ! c . blockLimit . equals ( d . blockLimit ) ) return null ; "br" != a && ( e || ( e = this . fixBlock ( ! 0 , a ) , p = ( new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) ) . block ) , p || ( p = this . fixBlock ( ! 1 , a ) ) ) ; c = e && this . checkStartOfBlock ( ) ; d = p && this . checkEndOfBlock ( ) ; this . deleteContents ( ) ; e && e . equals ( p ) &&
( d ? ( g = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) , this . moveToPosition ( p , CKEDITOR . POSITION _AFTER _END ) , p = null ) : c ? ( g = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) , this . moveToPosition ( e , CKEDITOR . POSITION _BEFORE _START ) , e = null ) : ( p = this . splitElement ( e , b || ! 1 ) , e . is ( "ul" , "ol" ) || e . appendBogus ( ) ) ) ; return { previousBlock : e , nextBlock : p , wasStartOfBlock : c , wasEndOfBlock : d , elementPath : g } } , splitElement : function ( a , b ) { if ( ! this . collapsed ) return null ; this . setEndAt ( a , CKEDITOR . POSITION _BEFORE _END ) ;
d . appendBogus ( ) ; this . moveToBookmark ( c ) ; return d } , splitBlock : function ( a , b ) { var c = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) , d = new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) , e = c . block , n = d . block , g = null ; if ( ! c . blockLimit . equals ( d . blockLimit ) ) return null ; "br" != a && ( e || ( e = this . fixBlock ( ! 0 , a ) , n = ( new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) ) . block ) , n || ( n = this . fixBlock ( ! 1 , a ) ) ) ; c = e && this . checkStartOfBlock ( ) ; d = n && this . checkEndOfBlock ( ) ; this . deleteContents ( ) ; e && e . equals ( n ) &&
( d ? ( g = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) , this . moveToPosition ( n , CKEDITOR . POSITION _AFTER _END ) , n = null ) : c ? ( g = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) , this . moveToPosition ( e , CKEDITOR . POSITION _BEFORE _START ) , e = null ) : ( n = this . splitElement ( e , b || ! 1 ) , e . is ( "ul" , "ol" ) || e . appendBogus ( ) ) ) ; return { previousBlock : e , nextBlock : n , wasStartOfBlock : c , wasEndOfBlock : d , elementPath : g } } , splitElement : function ( a , b ) { if ( ! this . collapsed ) return null ; this . setEndAt ( a , CKEDITOR . POSITION _BEFORE _END ) ;
var c = this . extractContents ( ! 1 , b || ! 1 ) , d = a . clone ( ! 1 , b || ! 1 ) ; c . appendTo ( d ) ; d . insertAfter ( a ) ; this . moveToPosition ( a , CKEDITOR . POSITION _AFTER _END ) ; return d } , removeEmptyBlocksAtEnd : function ( ) { function a ( d ) { return function ( a ) { return b ( a ) || c ( a ) || a . type == CKEDITOR . NODE _ELEMENT && a . isEmptyInlineRemoveable ( ) || d . is ( "table" ) && a . is ( "caption" ) ? ! 1 : ! 0 } } var b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . dom . walker . bookmark ( ! 1 ) ; return function ( b ) { for ( var c = this . createBookmark ( ) , d = this [ b ? "endPath" : "startPath" ] ( ) , e = d . block ||
d . blockLimit , g ; e && ! e . equals ( d . root ) && ! e . getFirst ( a ( e ) ) ; ) g = e . getParent ( ) , this [ b ? "setEndAt" : "setStartAt" ] ( e , CKEDITOR . POSITION _AFTER _END ) , e . remove ( 1 ) , e = g ; this . moveToBookmark ( c ) } } ( ) , startPath : function ( ) { return new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) } , endPath : function ( ) { return new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) } , checkBoundaryOfElement : function ( a , b ) { var d = b == CKEDITOR . START , e = this . clone ( ) ; e . collapse ( d ) ; e [ d ? "setStartAt" : "setEndAt" ] ( a , d ? CKEDITOR . POSITION _AFTER _START :
CKEDITOR . POSITION _BEFORE _END ) ; e = new CKEDITOR . dom . walker ( e ) ; e . evaluator = c ( d ) ; return e [ d ? "checkBackward" : "checkForward" ] ( ) } , checkStartOfBlock : function ( ) { var a = this . startContainer , c = this . startOffset ; CKEDITOR . env . ie && c && a . type == CKEDITOR . NODE _TEXT && ( a = CKEDITOR . tools . ltrim ( a . substring ( 0 , c ) ) , k . test ( a ) && this . trim ( 0 , 1 ) ) ; this . trim ( ) ; a = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) ; c = this . clone ( ) ; c . collapse ( ! 0 ) ; c . setStartAt ( a . block || a . blockLimit , CKEDITOR . POSITION _AFTER _START ) ; a = new CKEDITOR . dom . walker ( c ) ;
a . evaluator = b ( ) ; return a . checkBackward ( ) } , checkEndOfBlock : function ( ) { var a = this . endContainer , c = this . endOffset ; CKEDITOR . env . ie && a . type == CKEDITOR . NODE _TEXT && ( a = CKEDITOR . tools . rtrim ( a . substring ( c ) ) , k . test ( a ) && this . trim ( 1 , 0 ) ) ; this . trim ( ) ; a = new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) ; c = this . clone ( ) ; c . collapse ( ! 1 ) ; c . setEndAt ( a . block || a . blockLimit , CKEDITOR . POSITION _BEFORE _END ) ; a = new CKEDITOR . dom . walker ( c ) ; a . evaluator = b ( ) ; return a . checkForward ( ) } , getPreviousNode : function ( a , b , c ) { var d = this . clone ( ) ;
CKEDITOR . POSITION _BEFORE _END ) ; e = new CKEDITOR . dom . walker ( e ) ; e . evaluator = c ( d ) ; return e [ d ? "checkBackward" : "checkForward" ] ( ) } , checkStartOfBlock : function ( ) { var a = this . startContainer , c = this . startOffset ; CKEDITOR . env . ie && c && a . type == CKEDITOR . NODE _TEXT && ( a = CKEDITOR . tools . ltrim ( a . substring ( 0 , c ) ) , l . test ( a ) && this . trim ( 0 , 1 ) ) ; this . trim ( ) ; a = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) ; c = this . clone ( ) ; c . collapse ( ! 0 ) ; c . setStartAt ( a . block || a . blockLimit , CKEDITOR . POSITION _AFTER _START ) ; a = new CKEDITOR . dom . walker ( c ) ;
a . evaluator = b ( ) ; return a . checkBackward ( ) } , checkEndOfBlock : function ( ) { var a = this . endContainer , c = this . endOffset ; CKEDITOR . env . ie && a . type == CKEDITOR . NODE _TEXT && ( a = CKEDITOR . tools . rtrim ( a . substring ( c ) ) , l . test ( a ) && this . trim ( 1 , 0 ) ) ; this . trim ( ) ; a = new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) ; c = this . clone ( ) ; c . collapse ( ! 1 ) ; c . setEndAt ( a . block || a . blockLimit , CKEDITOR . POSITION _BEFORE _END ) ; a = new CKEDITOR . dom . walker ( c ) ; a . evaluator = b ( ) ; return a . checkForward ( ) } , getPreviousNode : function ( a , b , c ) { var d = this . clone ( ) ;
d . collapse ( 1 ) ; d . setStartAt ( c || this . root , CKEDITOR . POSITION _AFTER _START ) ; c = new CKEDITOR . dom . walker ( d ) ; c . evaluator = a ; c . guard = b ; return c . previous ( ) } , getNextNode : function ( a , b , c ) { var d = this . clone ( ) ; d . collapse ( ) ; d . setEndAt ( c || this . root , CKEDITOR . POSITION _BEFORE _END ) ; c = new CKEDITOR . dom . walker ( d ) ; c . evaluator = a ; c . guard = b ; return c . next ( ) } , checkReadOnly : function ( ) { function a ( b , c ) { for ( ; b ; ) { if ( b . type == CKEDITOR . NODE _ELEMENT ) { if ( "false" == b . getAttribute ( "contentEditable" ) && ! b . data ( "cke-editable" ) ) return 0 ; if ( b . is ( "html" ) ||
"true" == b . getAttribute ( "contentEditable" ) && ( b . contains ( c ) || b . equals ( c ) ) ) break } b = b . getParent ( ) } return 1 } return function ( ) { var b = this . startContainer , c = this . endContainer ; return ! ( a ( b , c ) && a ( c , b ) ) } } ( ) , moveToElementEditablePosition : function ( a , b ) { if ( a . type == CKEDITOR . NODE _ELEMENT && ! a . isEditable ( ! 1 ) ) return this . moveToPosition ( a , b ? CKEDITOR . POSITION _AFTER _END : CKEDITOR . POSITION _BEFORE _START ) , ! 0 ; for ( var c = 0 ; a ; ) { if ( a . type == CKEDITOR . NODE _TEXT ) { b && this . endContainer && this . checkEndOfBlock ( ) && k . test ( a . getText ( ) ) ? this . moveToPosition ( a ,
"true" == b . getAttribute ( "contentEditable" ) && ( b . contains ( c ) || b . equals ( c ) ) ) break } b = b . getParent ( ) } return 1 } return function ( ) { var b = this . startContainer , c = this . endContainer ; return ! ( a ( b , c ) && a ( c , b ) ) } } ( ) , moveToElementEditablePosition : function ( a , b ) { if ( a . type == CKEDITOR . NODE _ELEMENT && ! a . isEditable ( ! 1 ) ) return this . moveToPosition ( a , b ? CKEDITOR . POSITION _AFTER _END : CKEDITOR . POSITION _BEFORE _START ) , ! 0 ; for ( var c = 0 ; a ; ) { if ( a . type == CKEDITOR . NODE _TEXT ) { b && this . endContainer && this . checkEndOfBlock ( ) && l . test ( a . getText ( ) ) ? this . moveToPosition ( a ,
CKEDITOR . POSITION _BEFORE _START ) : this . moveToPosition ( a , b ? CKEDITOR . POSITION _AFTER _END : CKEDITOR . POSITION _BEFORE _START ) ; c = 1 ; break } if ( a . type == CKEDITOR . NODE _ELEMENT ) if ( a . isEditable ( ) ) this . moveToPosition ( a , b ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _AFTER _START ) , c = 1 ; else if ( b && a . is ( "br" ) && this . endContainer && this . checkEndOfBlock ( ) ) this . moveToPosition ( a , CKEDITOR . POSITION _BEFORE _START ) ; else if ( "false" == a . getAttribute ( "contenteditable" ) && a . is ( CKEDITOR . dtd . $block ) ) return this . setStartBefore ( a ) , this . setEndAfter ( a ) ,
! 0 ; var d = a , e = c , p = void 0 ; d . type == CKEDITOR . NODE _ELEMENT && d . isEditable ( ! 1 ) && ( p = d [ b ? "getLast" : "getFirst" ] ( w ) ) ; e || p || ( p = d [ b ? "getPrevious" : "getNext" ] ( w ) ) ; a = p } return ! ! c } , moveToClosestEditablePosition : function ( a , b ) { var c , d = 0 , e , p , g = [ CKEDITOR . POSITION _AFTER _END , CKEDITOR . POSITION _BEFORE _START ] ; a ? ( c = new CKEDITOR . dom . range ( this . root ) , c . moveToPosition ( a , g [ b ? 0 : 1 ] ) ) : c = this . clone ( ) ; if ( a && ! a . is ( CKEDITOR . dtd . $block ) ) d = 1 ; else if ( e = c [ b ? "getNextEditableNode" : "getPreviousEditableNode" ] ( ) ) d = 1 , ( p = e . type == CKEDITOR . NODE _ELEMENT ) &&
e . is ( CKEDITOR . dtd . $block ) && "false" == e . getAttribute ( "contenteditable" ) ? ( c . setStartAt ( e , CKEDITOR . POSITION _BEFORE _START ) , c . setEndAt ( e , CKEDITOR . POSITION _AFTER _END ) ) : ! CKEDITOR . env . needsBrFiller && p && e . is ( CKEDITOR . dom . walker . validEmptyBlockContainers ) ? ( c . setEnd ( e , 0 ) , c . collapse ( ) ) : c . moveToPosition ( e , g [ b ? 1 : 0 ] ) ; d && this . moveToRange ( c ) ; return ! ! d } , moveToElementEditStart : function ( a ) { return this . moveToElementEditablePosition ( a ) } , moveToElementEditEnd : function ( a ) { return this . moveToElementEditablePosition ( a , ! 0 ) } , getEnclosedNode : function ( ) { var a =
! 0 ; var d = a , e = c , n = void 0 ; d . type == CKEDITOR . NODE _ELEMENT && d . isEditable ( ! 1 ) && ( n = d [ b ? "getLast" : "getFirst" ] ( v ) ) ; e || n || ( n = d [ b ? "getPrevious" : "getNext" ] ( v ) ) ; a = n } return ! ! c } , moveToClosestEditablePosition : function ( a , b ) { var c , d = 0 , e , n , g = [ CKEDITOR . POSITION _AFTER _END , CKEDITOR . POSITION _BEFORE _START ] ; a ? ( c = new CKEDITOR . dom . range ( this . root ) , c . moveToPosition ( a , g [ b ? 0 : 1 ] ) ) : c = this . clone ( ) ; if ( a && ! a . is ( CKEDITOR . dtd . $block ) ) d = 1 ; else if ( e = c [ b ? "getNextEditableNode" : "getPreviousEditableNode" ] ( ) ) d = 1 , ( n = e . type == CKEDITOR . NODE _ELEMENT ) &&
e . is ( CKEDITOR . dtd . $block ) && "false" == e . getAttribute ( "contenteditable" ) ? ( c . setStartAt ( e , CKEDITOR . POSITION _BEFORE _START ) , c . setEndAt ( e , CKEDITOR . POSITION _AFTER _END ) ) : ! CKEDITOR . env . needsBrFiller && n && e . is ( CKEDITOR . dom . walker . validEmptyBlockContainers ) ? ( c . setEnd ( e , 0 ) , c . collapse ( ) ) : c . moveToPosition ( e , g [ b ? 1 : 0 ] ) ; d && this . moveToRange ( c ) ; return ! ! d } , moveToElementEditStart : function ( a ) { return this . moveToElementEditablePosition ( a ) } , moveToElementEditEnd : function ( a ) { return this . moveToElementEditablePosition ( a , ! 0 ) } , getEnclosedNode : function ( ) { var a =
this . clone ( ) ; a . optimize ( ) ; if ( a . startContainer . type != CKEDITOR . NODE _ELEMENT || a . endContainer . type != CKEDITOR . NODE _ELEMENT ) return null ; var a = new CKEDITOR . dom . walker ( a ) , b = CKEDITOR . dom . walker . bookmark ( ! 1 , ! 0 ) , c = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ; a . evaluator = function ( a ) { return c ( a ) && b ( a ) } ; var d = a . next ( ) ; a . reset ( ) ; return d && d . equals ( a . previous ( ) ) ? d : null } , getTouchedStartNode : function ( ) { var a = this . startContainer ; return this . collapsed || a . type != CKEDITOR . NODE _ELEMENT ? a : a . getChild ( this . startOffset ) || a } , getTouchedEndNode : function ( ) { var a =
this . endContainer ; return this . collapsed || a . type != CKEDITOR . NODE _ELEMENT ? a : a . getChild ( this . endOffset - 1 ) || a } , getNextEditableNode : e ( ) , getPreviousEditableNode : e ( 1 ) , scrollIntoView : function ( ) { var a = new CKEDITOR . dom . element . createFromHtml ( "\x3cspan\x3e\x26nbsp;\x3c/span\x3e" , this . document ) , b , c , d , e = this . clone ( ) ; e . optimize ( ) ; ( d = e . startContainer . type == CKEDITOR . NODE _TEXT ) ? ( c = e . startContainer . getText ( ) , b = e . startContainer . split ( e . startOffset ) , a . insertAfter ( e . startContainer ) ) : e . insertNode ( a ) ; a . scrollIntoView ( ) ;
d && ( e . startContainer . setText ( c ) , b . remove ( ) ) ; a . remove ( ) } , _setStartContainer : function ( a ) { this . startContainer = a } , _setEndContainer : function ( a ) { this . endContainer = a } } } ) ( ) ; CKEDITOR . POSITION _AFTER _START = 1 ; CKEDITOR . POSITION _BEFORE _END = 2 ; CKEDITOR . POSITION _BEFORE _START = 3 ; CKEDITOR . POSITION _AFTER _END = 4 ; CKEDITOR . ENLARGE _ELEMENT = 1 ; CKEDITOR . ENLARGE _BLOCK _CONTENTS = 2 ; CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS = 3 ; CKEDITOR . ENLARGE _INLINE = 4 ; CKEDITOR . START = 1 ; CKEDITOR . END = 2 ; CKEDITOR . SHRINK _ELEMENT = 1 ; CKEDITOR . SHRINK _TEXT = 2 ; "use strict" ;
( function ( ) { function a ( a ) { 1 > arguments . length || ( this . range = a , this . forceBrBreak = 0 , this . enlargeBr = 1 , this . enforceRealBlocks = 0 , this . _ || ( this . _ = { } ) ) } function d ( a ) { var b = [ ] ; a . forEach ( function ( a ) { if ( "true" == a . getAttribute ( "contenteditable" ) ) return b . push ( a ) , ! 1 } , CKEDITOR . NODE _ELEMENT , ! 0 ) ; return b } function b ( a , c , e , g ) { a : { null == g && ( g = d ( e ) ) ; for ( var l ; l = g . shift ( ) ; ) if ( l . getDtd ( ) . p ) { g = { element : l , remaining : g } ; break a } g = null } if ( ! g ) return 0 ; if ( ( l = CKEDITOR . filter . instances [ g . element . data ( "cke-filter" ) ] ) && ! l . check ( c ) ) return b ( a ,
c , e , g . remaining ) ; c = new CKEDITOR . dom . range ( g . element ) ; c . selectNodeContents ( g . element ) ; c = c . createIterator ( ) ; c . enlargeBr = a . enlargeBr ; c . enforceRealBlocks = a . enforceRealBlocks ; c . activeFilter = c . filter = l ; a . _ . nestedEditable = { element : g . element , container : e , remaining : g . remaining , iterator : c } ; return 1 } function c ( a , b , c ) { if ( ! b ) return ! 1 ; a = a . clone ( ) ; a . collapse ( ! c ) ; return a . checkBoundaryOfElement ( b , c ? CKEDITOR . START : CKEDITOR . END ) } var e = /^[\r\n\t ]+$/ , g = CKEDITOR . dom . walker . bookmark ( ! 1 , ! 0 ) , l = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ,
k = function ( a ) { return g ( a ) && l ( a ) } , q = { dd : 1 , dt : 1 , li : 1 } ; a . prototype = { getNextParagraph : function ( a ) { var d , l , A , t , 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 p = this . range . clone ( ) ; l = p . startPath ( ) ; var x = p . endPath ( ) , G = ! p . collapsed && c ( p , l . block ) , u = ! p . collapsed && c ( p , x . block , 1 ) ; p . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 ) ; G && p . setStartAt ( l . block , CKEDITOR . POSITION _BEFORE _END ) ; u && p . setEndAt ( x . block , CKEDITOR . POSITION _AFTER _START ) ; l = p . endContainer . hasAscendant ( "pre" , ! 0 ) || p . startContainer . hasAscendant ( "pre" , ! 0 ) ; p . enlarge ( this . forceBrBreak && ! l || ! this . enlargeBr ? CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : CKEDITOR . ENLARGE _BLOCK _CONTENTS ) ;
p . collapsed || ( l = new CKEDITOR . dom . walker ( p . clone ( ) ) , x = CKEDITOR . dom . walker . bookmark ( ! 0 , ! 0 ) , l . evaluator = x , this . _ . nextNode = l . next ( ) , l = new CKEDITOR . dom . walker ( p . clone ( ) ) , l . evaluator = x , l = l . previous ( ) , this . _ . lastNode = l . getNextSourceNode ( ! 0 , null , p . root ) , this . _ . lastNode && this . _ . lastNode . type == CKEDITOR . NODE _TEXT && ! CKEDITOR . tools . trim ( this . _ . lastNode . getText ( ) ) && this . _ . lastNode . getParent ( ) . isBlockBoundary ( ) && ( x = this . range . clone ( ) , x . moveToPosition ( this . _ . lastNode , CKEDITOR . POSITION _AFTER _END ) , x . checkEndOfBlock ( ) &&
( x = new CKEDITOR . dom . elementPath ( x . endContainer , x . root ) , this . _ . lastNode = ( x . block || x . blockLimit ) . getNextSourceNode ( ! 0 ) ) ) , this . _ . lastNode && p . root . contains ( this . _ . lastNode ) || ( this . _ . lastNode = this . _ . docEndMarker = p . document . createText ( "" ) , this . _ . lastNode . insertAfter ( l ) ) , p = null ) ; this . _ . started = 1 ; l = p } x = this . _ . nextNode ; p = this . _ . lastNode ; for ( this . _ . nextNode = null ; x ; ) { var G = 0 , u = x . hasAscendant ( "pre" ) , r = x . type != CKEDITOR . NODE _ELEMENT , h = 0 ; if ( r ) x . type == CKEDITOR . NODE _TEXT && e . test ( x . getText ( ) ) && ( r = 0 ) ; else { var n = x . getName ( ) ;
if ( CKEDITOR . dtd . $block [ n ] && "false" == x . getAttribute ( "contenteditable" ) ) { d = x ; b ( this , a , d ) ; break } else if ( x . isBlockBoundary ( this . forceBrBreak && ! u && { br : 1 } ) ) { if ( "br" == n ) r = 1 ; else if ( ! l && ! x . getChildCount ( ) && "hr" != n ) { d = x ; A = x . equals ( p ) ; break } l && ( l . setEndAt ( x , CKEDITOR . POSITION _BEFORE _START ) , "br" != n && ( this . _ . nextNode = x ) ) ; G = 1 } else { if ( x . getFirst ( ) ) { l || ( l = this . range . clone ( ) , l . setStartAt ( x , CKEDITOR . POSITION _BEFORE _START ) ) ; x = x . getFirst ( ) ; continue } r = 1 } } r && ! l && ( l = this . range . clone ( ) , l . setStartAt ( x , CKEDITOR . POSITION _BEFORE _START ) ) ;
A = ( ! G || r ) && x . equals ( p ) ; if ( l && ! G ) for ( ; ! x . getNext ( k ) && ! A ; ) { n = x . getParent ( ) ; if ( n . isBlockBoundary ( this . forceBrBreak && ! u && { br : 1 } ) ) { G = 1 ; r = 0 ; A || n . equals ( p ) ; l . setEndAt ( n , CKEDITOR . POSITION _BEFORE _END ) ; break } x = n ; r = 1 ; A = x . equals ( p ) ; h = 1 } r && l . setEndAt ( x , CKEDITOR . POSITION _AFTER _END ) ; x = this . _getNextSourceNode ( x , h , p ) ; if ( ( A = ! x ) || G && l ) break } if ( ! d ) { if ( ! l ) return this . _ . docEndMarker && this . _ . docEndMarker . remove ( ) , this . _ . nextNode = null ; d = new CKEDITOR . dom . elementPath ( l . startContainer , l . root ) ; x = d . blockLimit ; G = { div : 1 , th : 1 , td : 1 } ;
d = d . block ; ! d && x && ! this . enforceRealBlocks && G [ x . getName ( ) ] && l . checkStartOfBlock ( ) && l . checkEndOfBlock ( ) && ! x . equals ( l . root ) ? d = x : ! d || this . enforceRealBlocks && d . is ( q ) ? ( d = this . range . document . createElement ( a ) , l . extractContents ( ) . appendTo ( d ) , d . trim ( ) , l . insertNode ( d ) , t = D = ! 0 ) : "li" != d . getName ( ) ? l . checkStartOfBlock ( ) && l . checkEndOfBlock ( ) || ( d = d . clone ( ! 1 ) , l . extractContents ( ) . appendTo ( d ) , d . trim ( ) , D = l . splitBlock ( ) , t = ! D . wasStartOfBlock , D = ! D . wasEndOfBlock , l . insertNode ( d ) ) : A || ( this . _ . nextNode = d . equals ( p ) ? null : this . _getNextSourceNode ( l . getBoundaryNodes ( ) . endNode ,
1 , p ) ) } t && ( t = d . getPrevious ( ) ) && t . type == CKEDITOR . NODE _ELEMENT && ( "br" == t . getName ( ) ? t . remove ( ) : t . getLast ( ) && "br" == t . getLast ( ) . $ . nodeName . toLowerCase ( ) && t . getLast ( ) . remove ( ) ) ; D && ( t = d . getLast ( ) ) && t . type == CKEDITOR . NODE _ELEMENT && "br" == t . getName ( ) && ( ! CKEDITOR . env . needsBrFiller || t . getPrevious ( g ) || t . getNext ( g ) ) && t . remove ( ) ; this . _ . nextNode || ( this . _ . nextNode = A || d . equals ( p ) || ! p ? null : this . _getNextSourceNode ( d , 1 , p ) ) ; return d } , _getNextSourceNode : function ( a , b , c ) { function d ( a ) { return ! ( a . equals ( c ) || a . equals ( e ) ) } var e =
( function ( ) { function a ( a ) { 1 > arguments . length || ( this . range = a , this . forceBrBreak = 0 , this . enlargeBr = 1 , this . enforceRealBlocks = 0 , this . _ || ( this . _ = { } ) ) } function d ( a ) { var b = [ ] ; a . forEach ( function ( a ) { if ( "true" == a . getAttribute ( "contenteditable" ) ) return b . push ( a ) , ! 1 } , CKEDITOR . NODE _ELEMENT , ! 0 ) ; return b } function b ( a , c , e , g ) { a : { null == g && ( g = d ( e ) ) ; for ( var k ; k = g . shift ( ) ; ) if ( k . getDtd ( ) . p ) { g = { element : k , remaining : g } ; break a } g = null } if ( ! g ) return 0 ; if ( ( k = CKEDITOR . filter . instances [ g . element . data ( "cke-filter" ) ] ) && ! k . check ( c ) ) return b ( a ,
c , e , g . remaining ) ; c = new CKEDITOR . dom . range ( g . element ) ; c . selectNodeContents ( g . element ) ; c = c . createIterator ( ) ; c . enlargeBr = a . enlargeBr ; c . enforceRealBlocks = a . enforceRealBlocks ; c . activeFilter = c . filter = k ; a . _ . nestedEditable = { element : g . element , container : e , remaining : g . remaining , iterator : c } ; return 1 } function c ( a , b , c ) { if ( ! b ) return ! 1 ; a = a . clone ( ) ; a . collapse ( ! c ) ; return a . checkBoundaryOfElement ( b , c ? CKEDITOR . START : CKEDITOR . END ) } var e = /^[\r\n\t ]+$/ , g = CKEDITOR . dom . walker . bookmark ( ! 1 , ! 0 ) , k = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ,
l = function ( a ) { return g ( a ) && k ( a ) } , q = { dd : 1 , dt : 1 , li : 1 } ; a . prototype = { getNextParagraph : function ( a ) { var d , k , A , r , 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 n = this . range . clone ( ) ; k = n . startPath ( ) ; var w = n . endPath ( ) , H = ! n . collapsed && c ( n , k . block ) , u = ! n . collapsed && c ( n , w . block , 1 ) ; n . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 ) ; H && n . setStartAt ( k . block , CKEDITOR . POSITION _BEFORE _END ) ; u && n . setEndAt ( w . block , CKEDITOR . POSITION _AFTER _START ) ; k = n . endContainer . hasAscendant ( "pre" , ! 0 ) || n . startContainer . hasAscendant ( "pre" , ! 0 ) ; n . enlarge ( this . forceBrBreak && ! k || ! this . enlargeBr ? CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : CKEDITOR . ENLARGE _BLOCK _CONTENTS ) ;
n . collapsed || ( k = new CKEDITOR . dom . walker ( n . clone ( ) ) , w = CKEDITOR . dom . walker . bookmark ( ! 0 , ! 0 ) , k . evaluator = w , this . _ . nextNode = k . next ( ) , k = new CKEDITOR . dom . walker ( n . clone ( ) ) , k . evaluator = w , k = k . previous ( ) , this . _ . lastNode = k . getNextSourceNode ( ! 0 , null , n . root ) , this . _ . lastNode && this . _ . lastNode . type == CKEDITOR . NODE _TEXT && ! CKEDITOR . tools . trim ( this . _ . lastNode . getText ( ) ) && this . _ . lastNode . getParent ( ) . isBlockBoundary ( ) && ( w = this . range . clone ( ) , w . moveToPosition ( this . _ . lastNode , CKEDITOR . POSITION _AFTER _END ) , w . checkEndOfBlock ( ) &&
( w = new CKEDITOR . dom . elementPath ( w . endContainer , w . root ) , this . _ . lastNode = ( w . block || w . blockLimit ) . getNextSourceNode ( ! 0 ) ) ) , this . _ . lastNode && n . root . contains ( this . _ . lastNode ) || ( this . _ . lastNode = this . _ . docEndMarker = n . document . createText ( "" ) , this . _ . lastNode . insertAfter ( k ) ) , n = null ) ; this . _ . started = 1 ; k = n } w = this . _ . nextNode ; n = this . _ . lastNode ; for ( this . _ . nextNode = null ; w ; ) { var H = 0 , u = w . hasAscendant ( "pre" ) , t = w . type != CKEDITOR . NODE _ELEMENT , h = 0 ; if ( t ) w . type == CKEDITOR . NODE _TEXT && e . test ( w . getText ( ) ) && ( t = 0 ) ; else { var p = w . getName ( ) ;
if ( CKEDITOR . dtd . $block [ p ] && "false" == w . getAttribute ( "contenteditable" ) ) { d = w ; b ( this , a , d ) ; break } else if ( w . isBlockBoundary ( this . forceBrBreak && ! u && { br : 1 } ) ) { if ( "br" == p ) t = 1 ; else if ( ! k && ! w . getChildCount ( ) && "hr" != p ) { d = w ; A = w . equals ( n ) ; break } k && ( k . setEndAt ( w , CKEDITOR . POSITION _BEFORE _START ) , "br" != p && ( this . _ . nextNode = w ) ) ; H = 1 } else { if ( w . getFirst ( ) ) { k || ( k = this . range . clone ( ) , k . setStartAt ( w , CKEDITOR . POSITION _BEFORE _START ) ) ; w = w . getFirst ( ) ; continue } t = 1 } } t && ! k && ( k = this . range . clone ( ) , k . setStartAt ( w , CKEDITOR . POSITION _BEFORE _START ) ) ;
A = ( ! H || t ) && w . equals ( n ) ; if ( k && ! H ) for ( ; ! w . getNext ( l ) && ! A ; ) { p = w . getParent ( ) ; if ( p . isBlockBoundary ( this . forceBrBreak && ! u && { br : 1 } ) ) { H = 1 ; t = 0 ; A || p . equals ( n ) ; k . setEndAt ( p , CKEDITOR . POSITION _BEFORE _END ) ; break } w = p ; t = 1 ; A = w . equals ( n ) ; h = 1 } t && k . setEndAt ( w , CKEDITOR . POSITION _AFTER _END ) ; w = this . _getNextSourceNode ( w , h , n ) ; if ( ( A = ! w ) || H && k ) break } if ( ! d ) { if ( ! k ) return this . _ . docEndMarker && this . _ . docEndMarker . remove ( ) , this . _ . nextNode = null ; d = new CKEDITOR . dom . elementPath ( k . startContainer , k . root ) ; w = d . blockLimit ; H = { div : 1 , th : 1 , td : 1 } ;
d = d . block ; ! d && w && ! this . enforceRealBlocks && H [ w . getName ( ) ] && k . checkStartOfBlock ( ) && k . checkEndOfBlock ( ) && ! w . equals ( k . root ) ? d = w : ! d || this . enforceRealBlocks && d . is ( q ) ? ( d = this . range . document . createElement ( a ) , k . extractContents ( ) . appendTo ( d ) , d . trim ( ) , k . insertNode ( d ) , r = D = ! 0 ) : "li" != d . getName ( ) ? k . checkStartOfBlock ( ) && k . checkEndOfBlock ( ) || ( d = d . clone ( ! 1 ) , k . extractContents ( ) . appendTo ( d ) , d . trim ( ) , D = k . splitBlock ( ) , r = ! D . wasStartOfBlock , D = ! D . wasEndOfBlock , k . insertNode ( d ) ) : A || ( this . _ . nextNode = d . equals ( n ) ? null : this . _getNextSourceNode ( k . getBoundaryNodes ( ) . endNode ,
1 , n ) ) } r && ( r = d . getPrevious ( ) ) && r . type == CKEDITOR . NODE _ELEMENT && ( "br" == r . getName ( ) ? r . remove ( ) : r . getLast ( ) && "br" == r . getLast ( ) . $ . nodeName . toLowerCase ( ) && r . getLast ( ) . remove ( ) ) ; D && ( r = d . getLast ( ) ) && r . type == CKEDITOR . NODE _ELEMENT && "br" == r . getName ( ) && ( ! CKEDITOR . env . needsBrFiller || r . getPrevious ( g ) || r . getNext ( g ) ) && r . remove ( ) ; this . _ . nextNode || ( this . _ . nextNode = A || d . equals ( n ) || ! n ? null : this . _getNextSourceNode ( d , 1 , n ) ) ; return d } , _getNextSourceNode : function ( a , b , c ) { function d ( a ) { return ! ( a . equals ( c ) || a . equals ( e ) ) } var e =
this . range . root ; for ( a = a . getNextSourceNode ( b , null , d ) ; ! g ( a ) ; ) a = a . getNextSourceNode ( b , null , d ) ; return a } } ; CKEDITOR . dom . range . prototype . createIterator = function ( ) { return new a ( this ) } } ) ( ) ;
CKEDITOR . command = function ( a , d ) { this . uiItems = [ ] ; this . exec = function ( b ) { if ( this . state == CKEDITOR . TRISTATE _DISABLED || ! this . checkAllowed ( ) ) return ! 1 ; this . editorFocus && a . focus ( ) ; return ! 1 === this . fire ( "exec" ) ? ! 0 : ! 1 !== d . exec . call ( this , a , b ) } ; this . refresh = function ( a , b ) { if ( ! this . readOnly && a . readOnly ) return ! 0 ; if ( this . context && ! b . isContextFor ( this . context ) || ! this . checkAllowed ( ! 0 ) ) return this . disable ( ) , ! 0 ; this . startDisabled || this . enable ( ) ; this . modes && ! this . modes [ a . mode ] && this . disable ( ) ; return ! 1 === this . fire ( "refresh" ,
{ editor : a , path : b } ) ? ! 0 : d . refresh && ! 1 !== d . refresh . apply ( this , arguments ) } ; var b ; this . checkAllowed = function ( c ) { return c || "boolean" != typeof b ? b = a . activeFilter . checkFeature ( this ) : b } ; CKEDITOR . tools . extend ( this , d , { modes : { wysiwyg : 1 } , editorFocus : 1 , contextSensitive : ! ! d . context , state : CKEDITOR . TRISTATE _DISABLED } ) ; CKEDITOR . event . call ( this ) } ;
CKEDITOR . command . prototype = { enable : function ( ) { this . state == CKEDITOR . TRISTATE _DISABLED && this . checkAllowed ( ) && this . setState ( this . preserveState && "undefined" != typeof this . previousState ? this . previousState : CKEDITOR . TRISTATE _OFF ) } , disable : function ( ) { this . setState ( CKEDITOR . TRISTATE _DISABLED ) } , setState : function ( a ) { if ( this . state == a || a != CKEDITOR . TRISTATE _DISABLED && ! this . checkAllowed ( ) ) return ! 1 ; this . previousState = this . state ; this . state = a ; this . fire ( "state" ) ; return ! 0 } , toggleState : function ( ) { this . state == CKEDITOR . TRISTATE _OFF ?
this . setState ( CKEDITOR . TRISTATE _ON ) : this . state == CKEDITOR . TRISTATE _ON && this . setState ( CKEDITOR . TRISTATE _OFF ) } } ; CKEDITOR . event . implementOn ( CKEDITOR . command . prototype ) ; CKEDITOR . ENTER _P = 1 ; CKEDITOR . ENTER _BR = 2 ; CKEDITOR . ENTER _DIV = 3 ;
CKEDITOR . config = { customConfig : "config.js" , autoUpdateElement : ! 0 , language : "" , defaultLanguage : "en" , contentsLangDirection : "" , enterMode : CKEDITOR . ENTER _P , forceEnterMode : ! 1 , shiftEnterMode : CKEDITOR . ENTER _BR , docType : "\x3c!DOCTYPE html\x3e" , bodyId : "" , bodyClass : "" , fullPage : ! 1 , height : 200 , contentsCss : CKEDITOR . getUrl ( "contents.css" ) , extraPlugins : "" , removePlugins : "" , protectedSource : [ ] , tabIndex : 0 , width : "" , baseFloatZIndex : 1E4 , blockedKeystrokes : [ CKEDITOR . CTRL + 66 , CKEDITOR . CTRL + 73 , CKEDITOR . CTRL + 85 ] } ;
( function ( ) { function a ( a , b , c , d , e ) { var h , n ; a = [ ] ; for ( h in b ) { n = b [ h ] ; n = "boolean" == typeof n ? { } : "function" == typeof n ? { match : n } : H ( n ) ; "$" != h . charAt ( 0 ) && ( n . elements = h ) ; c && ( n . featureName = c . toLowerCase ( ) ) ; var m = n ; m . elements = l ( m . elements , /\s+/ ) || null ; m . propertiesOnly = m . propertiesOnly || ! 0 === m . elements ; var f = /\s*,\s*/ , p = void 0 ; for ( p in Q ) { m [ p ] = l ( m [ p ] , f ) || null ; var F = m , r = v [ p ] , g = l ( m [ v [ p ] ] , f ) , z = m [ p ] , E = [ ] , B = ! 0 , L = void 0 ; g ? B = ! 1 : g = { } ; for ( L in z ) "!" == L . charAt ( 0 ) && ( L = L . slice ( 1 ) , E . push ( L ) , g [ L ] = ! 0 , B = ! 1 ) ; for ( ; L = E . pop ( ) ; ) z [ L ] =
z [ "!" + L ] , delete z [ "!" + L ] ; F [ r ] = ( B ? ! 1 : g ) || null } m . match = m . match || null ; d . push ( n ) ; a . push ( n ) } b = e . elements ; e = e . generic ; var k ; c = 0 ; for ( d = a . length ; c < d ; ++ c ) { h = H ( a [ c ] ) ; n = ! 0 === h . classes || ! 0 === h . styles || ! 0 === h . attributes ; m = h ; p = r = f = void 0 ; for ( f in Q ) m [ f ] = G ( m [ f ] ) ; F = ! 0 ; for ( p in v ) { f = v [ p ] ; r = m [ f ] ; g = [ ] ; z = void 0 ; for ( z in r ) - 1 < z . indexOf ( "*" ) ? g . push ( new RegExp ( "^" + z . replace ( /\*/g , ".*" ) + "$" ) ) : g . push ( z ) ; r = g ; r . length && ( m [ f ] = r , F = ! 1 ) } m . nothingRequired = F ; m . noProperties = ! ( m . attributes || m . classes || m . styles ) ; if ( ! 0 === h . elements ||
null === h . elements ) e [ n ? "unshift" : "push" ] ( h ) ; else for ( k in m = h . elements , delete h . elements , m ) if ( b [ k ] ) b [ k ] [ n ? "unshift" : "push" ] ( h ) ; else b [ k ] = [ h ] } } function d ( a , c , d , h ) { if ( ! a . match || a . match ( c ) ) if ( h || k ( 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 ; h = d . validClasses ; if ( a ) if ( ! 0 === a ) a = ! 0 ; else { for ( var n = 0 , e = c . length , m ; n < e ; ++ n ) m = c [ n ] , h [ m ] ||
( h [ m ] = a ( m ) ) ; a = ! 1 } else a = ! 1 ; d . allClasses = a } } function b ( a , b , c ) { if ( ! a ) return ! 1 ; if ( ! 0 === a ) return ! 0 ; for ( var d in b ) c [ d ] || ( c [ d ] = a ( d ) ) ; return ! 1 } function c ( a , b , c ) { if ( ! a . match || a . match ( b ) ) { if ( a . noProperties ) return ! 1 ; c . hadInvalidAttribute = e ( a . attributes , b . attributes ) || c . hadInvalidAttribute ; c . hadInvalidStyle = e ( a . styles , b . styles ) || c . hadInvalidStyle ; a = a . classes ; b = b . classes ; if ( a ) { for ( var d = ! 1 , h = ! 0 === a , n = b . length ; n -- ; ) if ( h || a ( b [ n ] ) ) b . splice ( n , 1 ) , d = ! 0 ; a = d } else a = ! 1 ; c . hadInvalidClass = a || c . hadInvalidClass } } function e ( a ,
b ) { if ( ! a ) return ! 1 ; var c = ! 1 , d = ! 0 === a , h ; for ( h in b ) if ( d || a ( h ) ) delete b [ h ] , c = ! 0 ; return c } function g ( a , b , c ) { if ( a . disabled || a . customConfig && ! c || ! b ) return ! 1 ; a . _ . cachedChecks = { } ; return ! 0 } function l ( a , b ) { if ( ! a ) return ! 1 ; if ( ! 0 === a ) return a ; if ( "string" == typeof a ) return a = R ( 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 , h ; for ( h in a ) c [ h ] = a [ h ] , d ++ ; return d ? c : ! 1 } function k ( a , b ) { if ( a . nothingRequired ) return ! 0 ;
var c , d , h , n ; if ( h = a . requiredClasses ) for ( n = b . classes , c = 0 ; c < h . length ; ++ c ) if ( d = h [ c ] , "string" == typeof d ) { if ( - 1 == CKEDITOR . tools . indexOf ( n , d ) ) return ! 1 } else if ( ! CKEDITOR . tools . checkIfAnyArrayItemMatches ( n , d ) ) return ! 1 ; return q ( b . styles , a . requiredStyles ) && q ( b . attributes , a . requiredAttributes ) } function q ( a , b ) { if ( ! b ) return ! 0 ; for ( var c = 0 , d ; c < b . length ; ++ c ) if ( d = b [ c ] , "string" == typeof d ) { if ( ! ( d in a ) ) return ! 1 } else if ( ! CKEDITOR . tools . checkIfAnyObjectPropertyMatches ( a , d ) ) return ! 1 ; return ! 0 } function w ( a ) { if ( ! a ) return { } ;
a = a . split ( /\s*,\s*/ ) . sort ( ) ; for ( var b = { } ; a . length ; ) b [ a . shift ( ) ] = "cke-test" ; return b } function f ( a ) { var b , c , d , h , n = { } , e = 1 ; for ( a = R ( a ) ; b = a . match ( I ) ; ) ( c = b [ 2 ] ) ? ( d = y ( c , "styles" ) , h = y ( c , "attrs" ) , c = y ( c , "classes" ) ) : d = h = c = null , n [ "$" + e ++ ] = { elements : b [ 1 ] , classes : c , styles : d , attributes : h } , a = a . slice ( b [ 0 ] . length ) ; return n } function y ( a , b ) { var c = a . match ( J [ b ] ) ; return c ? R ( c [ 1 ] ) : null } function A ( 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 t ( a , b , h , e ) { var m = 0 , f ; e . toHtml && ( b . name = b . name . replace ( F , "$1" ) ) ; if ( e . doCallbacks && a . elementCallbacks ) { a : { f = a . elementCallbacks ; for ( var g = 0 , r = f . length , z ; g < r ; ++ g ) if ( z = f [ g ] ( b ) ) { f = z ; break a } f = void 0 } if ( f ) return f } if ( e . doTransform && ( f = a . _ . transformations [ b . name ] ) ) { A ( b ) ; for ( g = 0 ; g < f . length ; ++ g ) n ( a , b , f [ g ] ) ; p ( b ) } if ( e . doFilter ) { a : { g = b . name ; r = a . _ ; a = r . allowedRules . elements [ g ] ; f = r . allowedRules . generic ; g = r . disallowedRules . elements [ g ] ; r = r . disallowedRules . generic ;
z = e . skipRequired ; var E = { valid : ! 1 , validAttributes : { } , validClasses : { } , validStyles : { } , allAttributes : ! 1 , allClasses : ! 1 , allStyles : ! 1 , hadInvalidAttribute : ! 1 , hadInvalidClass : ! 1 , hadInvalidStyle : ! 1 } , v , l ; if ( a || f ) { A ( b ) ; if ( g ) for ( v = 0 , l = g . length ; v < l ; ++ v ) if ( ! 1 === c ( g [ v ] , b , E ) ) { a = null ; break a } if ( r ) for ( v = 0 , l = r . length ; v < l ; ++ v ) c ( r [ v ] , b , E ) ; if ( a ) for ( v = 0 , l = a . length ; v < l ; ++ v ) d ( a [ v ] , b , E , z ) ; if ( f ) for ( v = 0 , l = f . length ; v < l ; ++ v ) d ( f [ v ] , b , E , z ) ; a = E } else a = null } if ( ! a || ! a . valid ) return h . push ( b ) , 1 ; l = a . validAttributes ; var B = a . validStyles ;
f = a . validClasses ; var g = b . attributes , k = b . styles , r = b . classes ; z = b . classBackup ; var J = b . styleBackup , C , I , K = [ ] , E = [ ] , H = /^data-cke-/ ; v = ! 1 ; delete g . style ; delete g [ "class" ] ; delete b . classBackup ; delete b . styleBackup ; if ( ! a . allAttributes ) for ( C in g ) l [ C ] || ( H . test ( C ) ? C == ( I = C . replace ( /^data-cke-saved-/ , "" ) ) || l [ I ] || ( delete g [ C ] , v = ! 0 ) : ( delete g [ C ] , v = ! 0 ) ) ; if ( ! a . allStyles || a . hadInvalidStyle ) { for ( C in k ) a . allStyles || B [ C ] ? K . push ( C + ":" + k [ C ] ) : v = ! 0 ; K . length && ( g . style = K . sort ( ) . join ( "; " ) ) } else J && ( g . style = J ) ; if ( ! a . allClasses ||
a . hadInvalidClass ) { for ( C = 0 ; C < r . length ; ++ C ) ( a . allClasses || f [ r [ C ] ] ) && E . push ( r [ C ] ) ; E . length && ( g [ "class" ] = E . sort ( ) . join ( " " ) ) ; z && E . length < z . split ( /\s+/ ) . length && ( v = ! 0 ) } else z && ( g [ "class" ] = z ) ; v && ( m = 1 ) ; if ( ! e . skipFinalValidation && ! x ( b ) ) return h . push ( b ) , 1 } e . toHtml && ( b . name = b . name . replace ( L , "cke:$1" ) ) ; return m } 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 p ( 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 x ( 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 G ( 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 r ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && ( "br" ==
a . name || C . $block [ a . name ] ) } function h ( a , b , c ) { var d = a . name ; if ( C . $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 ( C . $block [ d ] || "tr" == d ) if ( "br" == b ) a . previous && ! r ( a . previous ) && ( b = u ( ) , b . insertBefore ( a ) ) , a . next && ! r ( a . next ) && ( b = u ( ) , b . insertAfter ( a ) ) , a . replaceWithChildren ( ) ; else { var d = a . children , h ; b : { h = C [ b ] ; for ( var n = 0 , e = d . length , m ; n < e ; ++ n ) if ( m = d [ n ] , m . type == CKEDITOR . NODE _ELEMENT && ! h [ m . name ] ) { h = ! 1 ; break b } h = ! 0 } if ( h ) a . name = b , a . attributes =
{ } , c . push ( { check : "parent-down" , el : a } ) ; else { h = a . parent ; for ( var n = h . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || "body" == h . name , f , g , e = d . length ; 0 < e ; ) m = d [ -- e ] , n && ( m . type == CKEDITOR . NODE _TEXT || m . type == CKEDITOR . NODE _ELEMENT && C . $inline [ m . name ] ) ? ( f || ( f = new CKEDITOR . htmlParser . element ( b ) , f . insertAfter ( a ) , c . push ( { check : "parent-down" , el : f } ) ) , f . add ( m , 0 ) ) : ( f = null , g = C [ h . name ] || C . span , m . insertAfter ( a ) , h . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || m . type != CKEDITOR . NODE _ELEMENT || g [ m . name ] || c . push ( { check : "el-up" , el : m } ) ) ; a . remove ( ) } } else d in
{ style : 1 , script : 1 } ? a . remove ( ) : ( a . parent && c . push ( { check : "it" , el : a . parent } ) , a . replaceWithChildren ( ) ) } function n ( a , b , c ) { var d , h ; for ( d = 0 ; d < c . length ; ++ d ) if ( h = c [ d ] , ! ( h . check && ! a . check ( h . check , ! 1 ) || h . left && ! h . left ( b ) ) ) { h . right ( b , K ) ; break } } function m ( a , b ) { var c = b . getDefinition ( ) , d = c . attributes , h = c . styles , n , e , m , f ; if ( a . name != c . element ) return ! 1 ; for ( n in d ) if ( "class" == n ) for ( c = d [ n ] . split ( /\s+/ ) , m = a . classes . join ( "|" ) ; f = c . pop ( ) ; ) { if ( - 1 == m . indexOf ( f ) ) return ! 1 } else if ( a . attributes [ n ] != d [ n ] ) return ! 1 ; for ( e in h ) if ( a . styles [ e ] !=
h [ e ] ) return ! 1 ; return ! 0 } function z ( a , b ) { var c , d ; "string" == typeof a ? c = a : a instanceof CKEDITOR . style ? d = a : ( c = a [ 0 ] , d = a [ 1 ] ) ; return [ { element : c , left : d , right : function ( a , c ) { c . transform ( a , b ) } } ] } function B ( a ) { return function ( b ) { return m ( b , a ) } } function E ( a ) { return function ( b , c ) { c [ a ] ( b ) } } var C = CKEDITOR . dtd , H = CKEDITOR . tools . copy , R = CKEDITOR . tools . trim , T = [ "" , "p" , "br" , "div" ] ; CKEDITOR . FILTER _SKIP _TREE = 2 ; CKEDITOR . filter = function ( a ) { this . allowedContent = [ ] ; this . disallowedContent = [ ] ; this . elementCallbacks = null ; this . disabled =
! 1 ; this . editor = null ; this . id = CKEDITOR . tools . getNextNumber ( ) ; this . _ = { allowedRules : { elements : { } , generic : [ ] } , disallowedRules : { elements : { } , generic : [ ] } , transformations : { } , cachedTests : { } } ; 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 ( T [ a . enterMode ] + " " + T [ 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 ( ! g ( this , b , d ) ) return ! 1 ; var h , n ; if ( "string" == typeof b ) b = f ( b ) ; else if ( b instanceof CKEDITOR . style ) { if ( b . toAllowedContentRules ) return this . allow ( b . toAllowedContentRules ( this . editor ) , c , d ) ; h = b . getDefinition ( ) ; b = { } ; d = h . attributes ; b [ h . element ] = h = { styles : h . styles , requiredStyles : h . styles && CKEDITOR . tools . objectKeys ( h . styles ) } ; d && ( d =
H ( d ) , h . classes = d [ "class" ] ? d [ "class" ] . split ( /\s+/ ) : null , h . requiredClasses = h . classes , delete d [ "class" ] , h . attributes = d , h . requiredAttributes = d && CKEDITOR . tools . objectKeys ( d ) ) } else if ( CKEDITOR . tools . isArray ( b ) ) { for ( h = 0 ; h < b . length ; ++ h ) n = this . allow ( b [ h ] , c , d ) ; return n } a ( this , b , c , this . allowedContent , this . _ . allowedRules ) ; return ! 0 } , applyTo : function ( a , b , c , d ) { if ( this . disabled ) return ! 1 ; var n = this , e = [ ] , m = this . editor && this . editor . config . protectedSource , f , g = ! 1 , p = { 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 ( f = t ( n , a , e , p ) , f & 1 ) g = ! 0 ; else if ( f & 2 ) return ! 1 } else if ( a . type == CKEDITOR . NODE _COMMENT && a . value . match ( /^\{cke_protected\}(?!\{C\})/ ) ) { var c ; a : { var d = decodeURIComponent ( a . value . replace ( /^\{cke_protected\}/ , "" ) ) ; c = [ ] ; var h , r , z ; if ( m ) for ( r = 0 ; r < m . length ; ++ r ) if ( ( z = d . match ( m [ r ] ) ) && z [ 0 ] . length == d . length ) { c = ! 0 ;
break a } d = CKEDITOR . htmlParser . fragment . fromHtml ( d ) ; 1 == d . children . length && ( h = d . children [ 0 ] ) . type == CKEDITOR . NODE _ELEMENT && t ( n , h , c , p ) ; c = ! c . length } c || e . push ( a ) } } , null , ! 0 ) ; e . length && ( g = ! 0 ) ; var r ; a = [ ] ; d = T [ d || ( this . editor ? this . editor . enterMode : CKEDITOR . ENTER _P ) ] ; for ( var z ; c = e . pop ( ) ; ) c . type == CKEDITOR . NODE _ELEMENT ? h ( c , d , a ) : c . remove ( ) ; for ( ; r = a . pop ( ) ; ) if ( c = r . el , c . parent ) switch ( z = C [ c . parent . name ] || C . span , r . check ) { case "it" : C . $removeEmpty [ c . name ] && ! c . children . length ? h ( c , d , a ) : x ( c ) || h ( c , d , a ) ; break ; case "el-up" : c . parent . type ==
CKEDITOR . NODE _DOCUMENT _FRAGMENT || z [ c . name ] || h ( c , d , a ) ; break ; case "parent-down" : c . parent . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || z [ c . name ] || h ( c . parent , d , a ) } return g } , 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 ( ! g ( this , b , ! 0 ) ) return ! 1 ; "string" == typeof b && ( b = f ( b ) ) ; a ( this , b , null , this . disallowedContent , this . _ . disallowedRules ) ; return ! 0 } ,
addContentForms : function ( a ) { if ( ! this . disabled && a ) { var b , c , d = [ ] , h ; for ( b = 0 ; b < a . length && ! h ; ++ b ) c = a [ b ] , ( "string" == typeof c || c instanceof CKEDITOR . style ) && this . check ( c ) && ( h = c ) ; if ( h ) { for ( b = 0 ; b < a . length ; ++ b ) d . push ( z ( a [ b ] , h ) ) ; 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 , h ; for ( h = 0 ; h < a . length ; ++ h ) { b = a [ h ] ; var n = void 0 , e = void 0 , m = void 0 , f = void 0 , g = void 0 , r = void 0 ; c = [ ] ; for ( e = 0 ; e < b . length ; ++ e ) m = b [ e ] , "string" == typeof m ? ( m = m . split ( /\s*:\s*/ ) , f = m [ 0 ] , g = null , r = m [ 1 ] ) : ( f = m . check , g = m . left , r = m . right ) , n || ( n = m , n = n . element ? n . element : f ? f . match ( /^([a-z0-9]+)/i ) [ 0 ] :
n . left . getDefinition ( ) . element ) , g instanceof CKEDITOR . style && ( g = B ( g ) ) , c . push ( { check : f == n ? null : f , left : g , right : "string" == typeof r ? E ( r ) : r } ) ; b = n ; 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 h , e ; if ( "string" == typeof a ) { e = a + "\x3c" + ( ! 1 === b ? "0" : "1" ) + ( c ? "1" : "0" ) + "\x3e" ; if ( e in this . _ . cachedChecks ) return this . _ . cachedChecks [ e ] ; d = f ( a ) . $1 ; h = d . styles ; var m = d . classes ; d . name = d . elements ;
d . classes = m = m ? m . split ( /\s*,\s*/ ) : [ ] ; d . styles = w ( h ) ; d . attributes = w ( d . attributes ) ; d . children = [ ] ; m . length && ( d . attributes [ "class" ] = m . join ( " " ) ) ; h && ( d . attributes . style = CKEDITOR . tools . writeCssText ( d . styles ) ) ; h = d } else d = a . getDefinition ( ) , h = d . styles , m = d . attributes || { } , h && ! CKEDITOR . tools . isEmpty ( h ) ? ( h = H ( h ) , m . style = CKEDITOR . tools . writeCssText ( h , ! 0 ) ) : h = { } , h = { name : d . element , attributes : m , classes : m [ "class" ] ? m [ "class" ] . split ( /\s+/ ) : [ ] , styles : h , children : [ ] } ; var m = CKEDITOR . tools . clone ( h ) , g = [ ] , r ; if ( ! 1 !== b && ( r = this . _ . transformations [ h . name ] ) ) { for ( d =
0 ; d < r . length ; ++ d ) n ( this , h , r [ d ] ) ; p ( h ) } t ( this , m , g , { doFilter : ! 0 , doTransform : ! 1 !== b , skipRequired : ! c , skipFinalValidation : ! c } ) ; b = 0 < g . length ? ! 1 : CKEDITOR . tools . objectCompare ( h . attributes , m . attributes , ! 0 ) ? ! 0 : ! 1 ; "string" == typeof a && ( this . _ . cachedChecks [ e ] = 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 h = a . slice ( ) , n ; if ( this . check ( T [ c ] ) ) return c ; for ( d || ( h = h . reverse ( ) ) ; n = h . pop ( ) ; ) if ( this . check ( n ) ) return b [ n ] ;
return CKEDITOR . ENTER _BR } } ( ) , destroy : function ( ) { delete CKEDITOR . filter . instances [ this . id ] ; delete this . _ ; delete this . allowedContent ; delete this . disallowedContent } } ; var Q = { styles : 1 , attributes : 1 , classes : 1 } , v = { styles : "requiredStyles" , attributes : "requiredAttributes" , classes : "requiredClasses" } , I = /^([a-z0-9\-*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i , J = { styles : /{([^}]+)}/ , attrs : /\[([^\]]+)\]/ , classes : /\(([^\)]+)\)/ } , F = /^cke:(object|embed|param)$/ ,
L = /^(object|embed|param)$/ , K ; K = 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 ] , h = d && d . match ( /^(\d+)(?:\.\d*)?px$/ ) ;
( function ( ) { function a ( a , b , c , d , e ) { var h , p ; a = [ ] ; for ( h in b ) { p = b [ h ] ; p = "boolean" == typeof p ? { } : "function" == typeof p ? { match : p } : E ( p ) ; "$" != h . charAt ( 0 ) && ( p . elements = h ) ; c && ( p . featureName = c . toLowerCase ( ) ) ; var m = p ; m . elements = k ( m . elements , /\s+/ ) || null ; m . propertiesOnly = m . propertiesOnly || ! 0 === m . elements ; var f = /\s*,\s*/ , n = void 0 ; for ( n in O ) { m [ n ] = k ( m [ n ] , f ) || null ; var G = m , t = N [ n ] , g = k ( m [ N [ n ] ] , f ) , x = m [ n ] , F = [ ] , C = ! 0 , K = void 0 ; g ? C = ! 1 : g = { } ; for ( K in x ) "!" == K . charAt ( 0 ) && ( K = K . slice ( 1 ) , F . push ( K ) , g [ K ] = ! 0 , C = ! 1 ) ; for ( ; K = F . pop ( ) ; ) x [ K ] =
x [ "!" + K ] , delete x [ "!" + K ] ; G [ t ] = ( C ? ! 1 : g ) || null } m . match = m . match || null ; d . push ( p ) ; a . push ( p ) } b = e . elements ; e = e . generic ; var z ; c = 0 ; for ( d = a . length ; c < d ; ++ c ) { h = E ( a [ c ] ) ; p = ! 0 === h . classes || ! 0 === h . styles || ! 0 === h . attributes ; m = h ; n = t = f = void 0 ; for ( f in O ) m [ f ] = H ( m [ f ] ) ; G = ! 0 ; for ( n in N ) { f = N [ n ] ; t = m [ f ] ; g = [ ] ; x = void 0 ; for ( x in t ) - 1 < x . indexOf ( "*" ) ? g . push ( new RegExp ( "^" + x . replace ( /\*/g , ".*" ) + "$" ) ) : g . push ( x ) ; t = g ; t . length && ( m [ f ] = t , G = ! 1 ) } m . nothingRequired = G ; m . noProperties = ! ( m . attributes || m . classes || m . styles ) ; if ( ! 0 === h . elements ||
null === h . elements ) e [ p ? "unshift" : "push" ] ( h ) ; else for ( z in m = h . elements , delete h . elements , m ) if ( b [ z ] ) b [ z ] [ p ? "unshift" : "push" ] ( h ) ; else b [ z ] = [ h ] } } function d ( a , c , d , h ) { if ( ! a . match || a . match ( c ) ) if ( h || l ( 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 ; h = d . validClasses ; if ( a ) if ( ! 0 === a ) a = ! 0 ; else { for ( var p = 0 , e = c . length , m ; p < e ; ++ p ) m = c [ p ] , h [ m ] ||
( h [ m ] = a ( m ) ) ; a = ! 1 } else a = ! 1 ; d . allClasses = a } } function b ( a , b , c ) { if ( ! a ) return ! 1 ; if ( ! 0 === a ) return ! 0 ; for ( var d in b ) c [ d ] || ( c [ d ] = a ( d ) ) ; return ! 1 } function c ( a , b , c ) { if ( ! a . match || a . match ( b ) ) { if ( a . noProperties ) return ! 1 ; c . hadInvalidAttribute = e ( a . attributes , b . attributes ) || c . hadInvalidAttribute ; c . hadInvalidStyle = e ( a . styles , b . styles ) || c . hadInvalidStyle ; a = a . classes ; b = b . classes ; if ( a ) { for ( var d = ! 1 , h = ! 0 === a , p = b . length ; p -- ; ) if ( h || a ( b [ p ] ) ) b . splice ( p , 1 ) , d = ! 0 ; a = d } else a = ! 1 ; c . hadInvalidClass = a || c . hadInvalidClass } } function e ( a ,
b ) { if ( ! a ) return ! 1 ; var c = ! 1 , d = ! 0 === a , h ; for ( h in b ) if ( d || a ( h ) ) delete b [ h ] , c = ! 0 ; return c } function g ( 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 = Y ( 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 , h ; for ( h in a ) c [ h ] = a [ h ] , d ++ ; return d ? c : ! 1 } function l ( a , b ) { if ( a . nothingRequired ) return ! 0 ;
var c , d , h , p ; if ( h = a . requiredClasses ) for ( p = b . classes , c = 0 ; c < h . length ; ++ c ) if ( d = h [ c ] , "string" == typeof d ) { if ( - 1 == CKEDITOR . tools . indexOf ( p , d ) ) return ! 1 } else if ( ! CKEDITOR . tools . checkIfAnyArrayItemMatches ( p , d ) ) return ! 1 ; return q ( b . styles , a . requiredStyles ) && q ( b . attributes , a . requiredAttributes ) } function q ( a , b ) { if ( ! b ) return ! 0 ; for ( var c = 0 , d ; c < b . length ; ++ c ) if ( d = b [ c ] , "string" == typeof d ) { if ( ! ( d in a ) ) return ! 1 } else if ( ! CKEDITOR . tools . checkIfAnyObjectPropertyMatches ( a , d ) ) return ! 1 ; return ! 0 } function v ( a ) { if ( ! a ) return { } ;
a = a . split ( /\s*,\s*/ ) . sort ( ) ; for ( var b = { } ; a . length ; ) b [ a . shift ( ) ] = "cke-test" ; return b } function f ( a ) { var b , c , d , h , p = { } , e = 1 ; for ( a = Y ( a ) ; b = a . match ( C ) ; ) ( c = b [ 2 ] ) ? ( d = y ( c , "styles" ) , h = y ( c , "attrs" ) , c = y ( c , "classes" ) ) : d = h = c = null , p [ "$" + e ++ ] = { elements : b [ 1 ] , classes : c , styles : d , attributes : h } , a = a . slice ( b [ 0 ] . length ) ; return p } function y ( a , b ) { var c = a . match ( I [ b ] ) ; return c ? Y ( c [ 1 ] ) : null } function A ( 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 r ( a , b , h , e ) { var m = 0 , f ; e . toHtml && ( b . name = b . name . replace ( G , "$1" ) ) ; if ( e . doCallbacks && a . elementCallbacks ) { a : { f = a . elementCallbacks ; for ( var g = 0 , t = f . length , x ; g < t ; ++ g ) if ( x = f [ g ] ( b ) ) { f = x ; break a } f = void 0 } if ( f ) return f } if ( e . doTransform && ( f = a . _ . transformations [ b . name ] ) ) { A ( b ) ; for ( g = 0 ; g < f . length ; ++ g ) p ( a , b , f [ g ] ) ; n ( b ) } if ( e . doFilter ) { a : { g = b . name ; t = a . _ ; a = t . allowedRules . elements [ g ] ; f = t . allowedRules . generic ; g = t . disallowedRules . elements [ g ] ; t = t . disallowedRules . generic ;
x = e . skipRequired ; var F = { valid : ! 1 , validAttributes : { } , validClasses : { } , validStyles : { } , allAttributes : ! 1 , allClasses : ! 1 , allStyles : ! 1 , hadInvalidAttribute : ! 1 , hadInvalidClass : ! 1 , hadInvalidStyle : ! 1 } , k , C ; if ( a || f ) { A ( b ) ; if ( g ) for ( k = 0 , C = g . length ; k < C ; ++ k ) if ( ! 1 === c ( g [ k ] , b , F ) ) { a = null ; break a } if ( t ) for ( k = 0 , C = t . length ; k < C ; ++ k ) c ( t [ k ] , b , F ) ; if ( a ) for ( k = 0 , C = a . length ; k < C ; ++ k ) d ( a [ k ] , b , F , x ) ; if ( f ) for ( k = 0 , C = f . length ; k < C ; ++ k ) d ( f [ k ] , b , F , x ) ; a = F } else a = null } if ( ! a || ! a . valid ) return h . push ( b ) , 1 ; C = a . validAttributes ; var z = a . validStyles ;
f = a . validClasses ; var g = b . attributes , l = b . styles , t = b . classes ; x = b . classBackup ; var J = b . styleBackup , B , I , E = [ ] , F = [ ] , q = /^data-cke-/ ; k = ! 1 ; delete g . style ; delete g [ "class" ] ; delete b . classBackup ; delete b . styleBackup ; if ( ! a . allAttributes ) for ( B in g ) C [ B ] || ( q . test ( B ) ? B == ( I = B . replace ( /^data-cke-saved-/ , "" ) ) || C [ I ] || ( delete g [ B ] , k = ! 0 ) : ( delete g [ B ] , k = ! 0 ) ) ; if ( ! a . allStyles || a . hadInvalidStyle ) { for ( B in l ) a . allStyles || z [ B ] ? E . push ( B + ":" + l [ B ] ) : k = ! 0 ; E . length && ( g . style = E . sort ( ) . join ( "; " ) ) } else J && ( g . style = J ) ; if ( ! a . allClasses ||
a . hadInvalidClass ) { for ( B = 0 ; B < t . length ; ++ B ) ( a . allClasses || f [ t [ B ] ] ) && F . push ( t [ B ] ) ; F . length && ( g [ "class" ] = F . sort ( ) . join ( " " ) ) ; x && F . length < x . split ( /\s+/ ) . length && ( k = ! 0 ) } else x && ( g [ "class" ] = x ) ; k && ( m = 1 ) ; if ( ! e . skipFinalValidation && ! w ( b ) ) return h . push ( b ) , 1 } e . toHtml && ( b . name = b . name . replace ( K , "cke:$1" ) ) ; return m } 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 n ( 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 w ( a ) { switch ( a . name ) { case "a" : if ( ! ( a . children . length || a . attributes . name || a . attributes . id ) ) return ! 1 ; break ; case "img" : if ( ! a . attributes . src ) return ! 1 } return ! 0 } function H ( a ) { if ( ! a ) return ! 1 ; if ( ! 0 === a ) return ! 0 ; var b = D ( a ) ; return function ( c ) { return c in a || b && c . match ( b ) } } function u ( ) { return new CKEDITOR . htmlParser . element ( "br" ) } function t ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && ( "br" ==
a . name || B . $block [ a . name ] ) } function h ( a , b , c ) { var d = a . name ; if ( B . $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 ( B . $block [ d ] || "tr" == d ) if ( "br" == b ) a . previous && ! t ( a . previous ) && ( b = u ( ) , b . insertBefore ( a ) ) , a . next && ! t ( a . next ) && ( b = u ( ) , b . insertAfter ( a ) ) , a . replaceWithChildren ( ) ; else { var d = a . children , h ; b : { h = B [ b ] ; for ( var p = 0 , e = d . length , m ; p < e ; ++ p ) if ( m = d [ p ] , m . type == CKEDITOR . NODE _ELEMENT && ! h [ m . name ] ) { h = ! 1 ; break b } h = ! 0 } if ( h ) a . name = b , a . attributes =
{ } , c . push ( { check : "parent-down" , el : a } ) ; else { h = a . parent ; for ( var p = h . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || "body" == h . name , f , g , e = d . length ; 0 < e ; ) m = d [ -- e ] , p && ( m . type == CKEDITOR . NODE _TEXT || m . type == CKEDITOR . NODE _ELEMENT && B . $inline [ m . name ] ) ? ( f || ( f = new CKEDITOR . htmlParser . element ( b ) , f . insertAfter ( a ) , c . push ( { check : "parent-down" , el : f } ) ) , f . add ( m , 0 ) ) : ( f = null , g = B [ h . name ] || B . span , m . insertAfter ( a ) , h . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || m . type != CKEDITOR . NODE _ELEMENT || g [ m . name ] || c . push ( { check : "el-up" , el : m } ) ) ; a . remove ( ) } } else d in
{ style : 1 , script : 1 } ? a . remove ( ) : ( a . parent && c . push ( { check : "it" , el : a . parent } ) , a . replaceWithChildren ( ) ) } function p ( a , b , c ) { var d , h ; for ( d = 0 ; d < c . length ; ++ d ) if ( h = c [ d ] , ! ( h . check && ! a . check ( h . check , ! 1 ) || h . left && ! h . left ( b ) ) ) { h . right ( b , J ) ; break } } function m ( a , b ) { var c = b . getDefinition ( ) , d = c . attributes , h = c . styles , p , e , m , f ; if ( a . name != c . element ) return ! 1 ; for ( p in d ) if ( "class" == p ) for ( c = d [ p ] . split ( /\s+/ ) , m = a . classes . join ( "|" ) ; f = c . pop ( ) ; ) { if ( - 1 == m . indexOf ( f ) ) return ! 1 } else if ( a . attributes [ p ] != d [ p ] ) return ! 1 ; for ( e in h ) if ( a . styles [ e ] !=
h [ e ] ) return ! 1 ; return ! 0 } function x ( a , b ) { var c , d ; "string" == typeof a ? c = a : a instanceof CKEDITOR . style ? d = a : ( c = a [ 0 ] , d = a [ 1 ] ) ; return [ { element : c , left : d , right : function ( a , c ) { c . transform ( a , b ) } } ] } function z ( a ) { return function ( b ) { return m ( b , a ) } } function F ( a ) { return function ( b , c ) { c [ a ] ( b ) } } var B = CKEDITOR . dtd , E = CKEDITOR . tools . copy , Y = CKEDITOR . tools . trim , P = [ "" , "p" , "br" , "div" ] ; CKEDITOR . FILTER _SKIP _TREE = 2 ; CKEDITOR . filter = function ( a ) { this . allowedContent = [ ] ; this . disallowedContent = [ ] ; this . elementCallbacks = null ; this . disabled =
! 1 ; this . editor = null ; this . id = CKEDITOR . tools . getNextNumber ( ) ; this . _ = { allowedRules : { elements : { } , generic : [ ] } , disallowedRules : { elements : { } , generic : [ ] } , transformations : { } , cachedTests : { } } ; 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 ( P [ a . enterMode ] + " " + P [ 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 ( ! g ( this , b , d ) ) return ! 1 ; var h , p ; if ( "string" == typeof b ) b = f ( b ) ; else if ( b instanceof CKEDITOR . style ) { if ( b . toAllowedContentRules ) return this . allow ( b . toAllowedContentRules ( this . editor ) , c , d ) ; h = b . getDefinition ( ) ; b = { } ; d = h . attributes ; b [ h . element ] = h = { styles : h . styles , requiredStyles : h . styles && CKEDITOR . tools . objectKeys ( h . styles ) } ; d && ( d =
E ( d ) , h . classes = d [ "class" ] ? d [ "class" ] . split ( /\s+/ ) : null , h . requiredClasses = h . classes , delete d [ "class" ] , h . attributes = d , h . requiredAttributes = d && CKEDITOR . tools . objectKeys ( d ) ) } else if ( CKEDITOR . tools . isArray ( b ) ) { for ( h = 0 ; h < b . length ; ++ h ) p = this . allow ( b [ h ] , c , d ) ; return p } a ( this , b , c , this . allowedContent , this . _ . allowedRules ) ; return ! 0 } , applyTo : function ( a , b , c , d ) { if ( this . disabled ) return ! 1 ; var p = this , e = [ ] , m = this . editor && this . editor . config . protectedSource , f , g = ! 1 , n = { 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 ( f = r ( p , a , e , n ) , f & 1 ) g = ! 0 ; else if ( f & 2 ) return ! 1 } else if ( a . type == CKEDITOR . NODE _COMMENT && a . value . match ( /^\{cke_protected\}(?!\{C\})/ ) ) { var c ; a : { var d = decodeURIComponent ( a . value . replace ( /^\{cke_protected\}/ , "" ) ) ; c = [ ] ; var h , t , x ; if ( m ) for ( t = 0 ; t < m . length ; ++ t ) if ( ( x = d . match ( m [ t ] ) ) && x [ 0 ] . length == d . length ) { c = ! 0 ;
break a } d = CKEDITOR . htmlParser . fragment . fromHtml ( d ) ; 1 == d . children . length && ( h = d . children [ 0 ] ) . type == CKEDITOR . NODE _ELEMENT && r ( p , h , c , n ) ; c = ! c . length } c || e . push ( a ) } } , null , ! 0 ) ; e . length && ( g = ! 0 ) ; var t ; a = [ ] ; d = P [ d || ( this . editor ? this . editor . enterMode : CKEDITOR . ENTER _P ) ] ; for ( var x ; c = e . pop ( ) ; ) c . type == CKEDITOR . NODE _ELEMENT ? h ( c , d , a ) : c . remove ( ) ; for ( ; t = a . pop ( ) ; ) if ( c = t . el , c . parent ) switch ( x = B [ c . parent . name ] || B . span , t . check ) { case "it" : B . $removeEmpty [ c . name ] && ! c . children . length ? h ( c , d , a ) : w ( c ) || h ( c , d , a ) ; break ; case "el-up" : c . parent . type ==
CKEDITOR . NODE _DOCUMENT _FRAGMENT || x [ c . name ] || h ( c , d , a ) ; break ; case "parent-down" : c . parent . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || x [ c . name ] || h ( c . parent , d , a ) } return g } , 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 ( ! g ( this , b , ! 0 ) ) return ! 1 ; "string" == typeof b && ( b = f ( b ) ) ; a ( this , b , null , this . disallowedContent , this . _ . disallowedRules ) ; return ! 0 } ,
addContentForms : function ( a ) { if ( ! this . disabled && a ) { var b , c , d = [ ] , h ; for ( b = 0 ; b < a . length && ! h ; ++ b ) c = a [ b ] , ( "string" == typeof c || c instanceof CKEDITOR . style ) && this . check ( c ) && ( h = c ) ; if ( h ) { for ( b = 0 ; b < a . length ; ++ b ) d . push ( x ( a [ b ] , h ) ) ; 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 , h ; for ( h = 0 ; h < a . length ; ++ h ) { b = a [ h ] ; var p = void 0 , e = void 0 , m = void 0 , f = void 0 , g = void 0 , t = void 0 ; c = [ ] ; for ( e = 0 ; e < b . length ; ++ e ) m = b [ e ] , "string" == typeof m ? ( m = m . split ( /\s*:\s*/ ) , f = m [ 0 ] , g = null , t = m [ 1 ] ) : ( f = m . check , g = m . left , t = m . right ) , p || ( p = m , p = p . element ? p . element : f ? f . match ( /^([a-z0-9]+)/i ) [ 0 ] :
p . left . getDefinition ( ) . element ) , g instanceof CKEDITOR . style && ( g = z ( g ) ) , c . push ( { check : f == p ? null : f , left : g , right : "string" == typeof t ? F ( t ) : t } ) ; b = p ; 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 h , e ; if ( "string" == typeof a ) { e = a + "\x3c" + ( ! 1 === b ? "0" : "1" ) + ( c ? "1" : "0" ) + "\x3e" ; if ( e in this . _ . cachedChecks ) return this . _ . cachedChecks [ e ] ; d = f ( a ) . $1 ; h = d . styles ; var m = d . classes ; d . name = d . elements ;
d . classes = m = m ? m . split ( /\s*,\s*/ ) : [ ] ; d . styles = v ( h ) ; d . attributes = v ( d . attributes ) ; d . children = [ ] ; m . length && ( d . attributes [ "class" ] = m . join ( " " ) ) ; h && ( d . attributes . style = CKEDITOR . tools . writeCssText ( d . styles ) ) ; h = d } else d = a . getDefinition ( ) , h = d . styles , m = d . attributes || { } , h && ! CKEDITOR . tools . isEmpty ( h ) ? ( h = E ( h ) , m . style = CKEDITOR . tools . writeCssText ( h , ! 0 ) ) : h = { } , h = { name : d . element , attributes : m , classes : m [ "class" ] ? m [ "class" ] . split ( /\s+/ ) : [ ] , styles : h , children : [ ] } ; var m = CKEDITOR . tools . clone ( h ) , g = [ ] , t ; if ( ! 1 !== b && ( t = this . _ . transformations [ h . name ] ) ) { for ( d =
0 ; d < t . length ; ++ d ) p ( this , h , t [ d ] ) ; n ( h ) } r ( this , m , g , { doFilter : ! 0 , doTransform : ! 1 !== b , skipRequired : ! c , skipFinalValidation : ! c } ) ; b = 0 < g . length ? ! 1 : CKEDITOR . tools . objectCompare ( h . attributes , m . attributes , ! 0 ) ? ! 0 : ! 1 ; "string" == typeof a && ( this . _ . cachedChecks [ e ] = 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 h = a . slice ( ) , p ; if ( this . check ( P [ c ] ) ) return c ; for ( d || ( h = h . reverse ( ) ) ; p = h . pop ( ) ; ) if ( this . check ( p ) ) return b [ p ] ;
return CKEDITOR . ENTER _BR } } ( ) , destroy : function ( ) { delete CKEDITOR . filter . instances [ this . id ] ; delete this . _ ; delete this . allowedContent ; delete this . disallowedContent } } ; var O = { styles : 1 , attributes : 1 , classes : 1 } , N = { styles : "requiredStyles" , attributes : "requiredAttributes" , classes : "requiredClasses" } , C = /^([a-z0-9\-*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i , I = { styles : /{([^}]+)}/ , attrs : /\[([^\]]+)\]/ , classes : /\(([^\)]+)\)/ } , G = /^cke:(object|embed|param)$/ ,
K = /^(object|embed|param)$/ , J ; J = 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 ] , h = d && d . match ( /^(\d+)(?:\.\d*)?px$/ ) ;
h ? a . attributes [ c ] = h [ 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" ] } , matchesStyle : m , transform : function ( a , b ) { if ( "string" == typeof b ) a . name = b ; else { var c = b . getDefinition ( ) , d = c . styles ,
h = c . attributes , n , m , e , f ; a . name = c . element ; for ( n in h ) if ( "class" == n ) for ( c = a . classes . join ( "|" ) , e = h [ n ] . split ( /\s+/ ) ; f = e . pop ( ) ; ) - 1 == c . indexOf ( f ) && a . classes . push ( f ) ; else a . attributes [ n ] = h [ n ] ; for ( m in d ) a . styles [ m ] = d [ m ] } } } } ) ( ) ;
h = c . attributes , p , e , m , f ; a . name = c . element ; for ( p in h ) if ( "class" == p ) for ( c = a . classes . join ( "|" ) , m = h [ p ] . split ( /\s+/ ) ; f = m . pop ( ) ; ) - 1 == c . indexOf ( f ) && a . classes . push ( f ) ; else a . attributes [ p ] = h [ p ] ; for ( e in d ) a . styles [ e ] = d [ e ] } } } } ) ( ) ;
( 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 e = { blur : function ( ) { a . equals ( this . currentActive ) && this . blur ( ) } , focus : function ( ) { this . focus ( a ) } } ; a . on ( b , e . focus , this ) ; a . on ( c , e . blur , this ) ; d && ( CKEDITOR . event . useCapture = 0 ) ; a . setCustomData ( "focusmanager" , this ) ; a . setCustomData ( "focusmanager_handlers" , e ) } } , remove : function ( a ) { a . removeCustomData ( "focusmanager" ) ; var d = a . removeCustomData ( "focusmanager_handlers" ) ; a . removeListener ( "blur" , d . blur ) ; a . removeListener ( "focus" ,
d . focus ) } } } ) ( ) ; CKEDITOR . keystrokeHandler = function ( a ) { if ( a . keystrokeHandler ) return a . keystrokeHandler ; this . keystrokes = { } ; this . blockedKeystrokes = { } ; this . _ = { editor : a } ; return this } ;
( function ( ) { var a , d = function ( b ) { b = b . data ; var d = b . getKeystroke ( ) , g = this . keystrokes [ d ] , l = this . _ . editor ; a = ! 1 === l . fire ( "key" , { keyCode : d , domEvent : b } ) ; a || ( g && ( a = ! 1 !== l . execCommand ( g , { 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 ( ) { var a , d = function ( b ) { b = b . data ; var d = b . getKeystroke ( ) , g = this . keystrokes [ d ] , k = this . _ . editor ; a = ! 1 === k . fire ( "key" , { keyCode : d , domEvent : b } ) ; a || ( g && ( a = ! 1 !== k . execCommand ( g , { 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 , 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 , 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 , 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]+))?/ ) , e = c [ 1 ] , c = c [ 2 ] ; b [ e + "-" + c ] ? e = e + "-" + c : b [ e ] || ( e = null ) ; CKEDITOR . lang . detect = e ? function ( ) { return e } : function ( a ) { return a } ; return e || a } } } ) ( ) ;
CKEDITOR . scriptLoader = function ( ) { var a = { } , d = { } ; return { load : function ( b , c , e , g ) { var l = "string" == typeof b ; l && ( b = [ b ] ) ; e || ( e = CKEDITOR ) ; var k = b . length , q = [ ] , w = [ ] , f = function ( a ) { c && ( l ? c . call ( e , a ) : c . call ( e , q , w ) ) } ; if ( 0 === k ) f ( ! 0 ) ; else { var y = function ( a , b ) { ( b ? q : w ) . push ( a ) ; 0 >= -- k && ( g && CKEDITOR . document . getDocumentElement ( ) . removeStyle ( "cursor" ) , f ( b ) ) } , A = function ( b , c ) { a [ b ] = 1 ; var e = d [ b ] ; delete d [ b ] ; for ( var f = 0 ; f < e . length ; f ++ ) e [ f ] ( b , c ) } , t = function ( b ) { if ( a [ b ] ) y ( b , ! 0 ) ; else { var e = d [ b ] || ( d [ b ] = [ ] ) ; e . push ( y ) ; if ( ! ( 1 < e . length ) ) { var f =
new CKEDITOR . dom . element ( "script" ) ; f . setAttributes ( { type : "text/javascript" , src : b } ) ; c && ( CKEDITOR . env . ie && 11 > CKEDITOR . env . version ? f . $ . onreadystatechange = function ( ) { if ( "loaded" == f . $ . readyState || "complete" == f . $ . readyState ) f . $ . onreadystatechange = null , A ( b , ! 0 ) } : ( f . $ . onload = function ( ) { setTimeout ( function ( ) { A ( b , ! 0 ) } , 0 ) } , f . $ . onerror = function ( ) { A ( b , ! 1 ) } ) ) ; f . appendTo ( CKEDITOR . document . getHead ( ) ) } } } ; g && CKEDITOR . document . getDocumentElement ( ) . setStyle ( "cursor" , "wait" ) ; for ( var D = 0 ; D < k ; D ++ ) t ( b [ D ] ) } } , queue : function ( ) { function a ( ) { var b ;
( b = c [ 0 ] ) && this . load ( b . scriptUrl , b . callback , CKEDITOR , 0 ) } var c = [ ] ; return function ( d , g ) { var l = this ; c . push ( { scriptUrl : d , callback : function ( ) { g && g . apply ( this , arguments ) ; c . shift ( ) ; a . call ( l ) } } ) ; 1 == c . length && a . call ( this ) } } ( ) } } ( ) ; CKEDITOR . resourceManager = function ( a , d ) { this . basePath = a ; this . fileName = d ; this . registered = { } ; this . loaded = { } ; this . externals = { } ; this . _ = { waitingList : { } } } ;
CKEDITOR . scriptLoader = function ( ) { var a = { } , d = { } ; return { load : function ( b , c , e , g ) { var k = "string" == typeof b ; k && ( b = [ b ] ) ; e || ( e = CKEDITOR ) ; var l = b . length , q = [ ] , v = [ ] , f = function ( a ) { c && ( k ? c . call ( e , a ) : c . call ( e , q , v ) ) } ; if ( 0 === l ) f ( ! 0 ) ; else { var y = function ( a , b ) { ( b ? q : v ) . push ( a ) ; 0 >= -- l && ( g && CKEDITOR . document . getDocumentElement ( ) . removeStyle ( "cursor" ) , f ( b ) ) } , A = function ( b , c ) { a [ b ] = 1 ; var e = d [ b ] ; delete d [ b ] ; for ( var f = 0 ; f < e . length ; f ++ ) e [ f ] ( b , c ) } , r = function ( b ) { if ( a [ b ] ) y ( b , ! 0 ) ; else { var e = d [ b ] || ( d [ b ] = [ ] ) ; e . push ( y ) ; if ( ! ( 1 < e . length ) ) { var f =
new CKEDITOR . dom . element ( "script" ) ; f . setAttributes ( { type : "text/javascript" , src : b } ) ; c && ( CKEDITOR . env . ie && 8 >= CKEDITOR . env . version ? f . $ . onreadystatechange = function ( ) { if ( "loaded" == f . $ . readyState || "complete" == f . $ . readyState ) f . $ . onreadystatechange = null , A ( b , ! 0 ) } : ( f . $ . onload = function ( ) { setTimeout ( function ( ) { A ( b , ! 0 ) } , 0 ) } , f . $ . onerror = function ( ) { A ( b , ! 1 ) } ) ) ; f . appendTo ( CKEDITOR . document . getHead ( ) ) } } } ; g && CKEDITOR . document . getDocumentElement ( ) . setStyle ( "cursor" , "wait" ) ; for ( var D = 0 ; D < l ; D ++ ) r ( b [ D ] ) } } , queue : function ( ) { function a ( ) { var b ;
( b = c [ 0 ] ) && this . load ( b . scriptUrl , b . callback , CKEDITOR , 0 ) } var c = [ ] ; return function ( d , g ) { var k = this ; c . push ( { scriptUrl : d , callback : function ( ) { g && g . 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 e = a [ c ] ; b || ( d = d . replace ( /[^\/]+$/ , function ( a ) { b = a ; return "" } ) ) ; this . externals [ e ] = { dir : d , file : b || this . fileName + ".js" } } } , load : function ( a , d , b ) { CKEDITOR . tools . isArray ( a ) || ( a = a ? [ a ] : [ ] ) ; for ( var c = this . loaded , e = this . registered , g = [ ] , l = { } , k = { } , q = 0 ; q < a . length ; q ++ ) { var w = a [ q ] ; if ( w ) if ( c [ w ] || e [ w ] ) k [ w ] = this . get ( w ) ; else { var f = this . getFilePath ( w ) ; g . push ( f ) ; f in l || ( l [ f ] =
[ ] ) ; l [ f ] . push ( w ) } } CKEDITOR . scriptLoader . load ( g , function ( a , e ) { if ( e . length ) throw Error ( '[CKEDITOR.resourceManager.load] Resource name "' + l [ e [ 0 ] ] . join ( "," ) + '" was not found at "' + e [ 0 ] + '".' ) ; for ( var f = 0 ; f < a . length ; f ++ ) for ( var g = l [ a [ f ] ] , p = 0 ; p < g . length ; p ++ ) { var x = g [ p ] ; k [ x ] = this . get ( x ) ; c [ x ] = 1 } d . call ( b , k ) } , 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 , e ) { var g = { } , l = function ( b ) { a . call ( this , b , function ( a ) { CKEDITOR . tools . extend ( g , a ) ; var b = [ ] , f ; for ( f in a ) { var k = a [ f ] , A = k && k . requires ; if ( ! d [ f ] ) { if ( k . icons ) for ( var t = k . icons . split ( "," ) , D = t . length ; D -- ; ) CKEDITOR . skin . addIcon ( t [ D ] , k . path + "icons/" + ( CKEDITOR . env . hidpi && k . hidpi ? "hidpi/" : "" ) + t [ D ] + ".png" ) ; d [ f ] = 1 } if ( A ) for ( A . split && ( A = A . split ( "," ) ) , k = 0 ; k < A . length ; k ++ ) g [ A [ k ] ] || b . push ( A [ k ] ) } if ( b . length ) l . call ( this ,
b ) ; else { for ( f in g ) k = g [ f ] , k . onLoad && ! k . onLoad . _called && ( ! 1 === k . onLoad ( ) && delete g [ f ] , k . onLoad . _called = 1 ) ; c && c . call ( e || window , g ) } } , this ) } ; l . call ( this , b ) } } ) ; CKEDITOR . plugins . setLang = function ( a , d , b ) { var c = this . get ( a ) ; a = c . langEntries || ( c . langEntries = { } ) ; c = c . lang || ( c . lang = [ ] ) ; c . split && ( c = c . split ( "," ) ) ; - 1 == CKEDITOR . tools . indexOf ( c , d ) && c . push ( d ) ; a [ d ] = b } ; CKEDITOR . ui = function ( a ) { if ( a . ui ) return a . ui ; this . items = { } ; this . instances = { } ; this . editor = a ; this . _ = { handlers : { } } ; return this } ;
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 e = a [ c ] ; b || ( d = d . replace ( /[^\/]+$/ , function ( a ) { b = a ; return "" } ) ) ; this . externals [ e ] = { dir : d , file : b || this . fileName + ".js" } } } , load : function ( a , d , b ) { CKEDITOR . tools . isArray ( a ) || ( a = a ? [ a ] : [ ] ) ; for ( var c = this . loaded , e = this . registered , g = [ ] , k = { } , l = { } , q = 0 ; q < a . length ; q ++ ) { var v = a [ q ] ; if ( v ) if ( c [ v ] || e [ v ] ) l [ v ] = this . get ( v ) ; else { var f = this . getFilePath ( v ) ; g . push ( f ) ; f in k || ( k [ f ] =
[ ] ) ; k [ f ] . push ( v ) } } CKEDITOR . scriptLoader . load ( g , function ( a , e ) { if ( e . length ) throw Error ( '[CKEDITOR.resourceManager.load] Resource name "' + k [ e [ 0 ] ] . join ( "," ) + '" was not found at "' + e [ 0 ] + '".' ) ; for ( var f = 0 ; f < a . length ; f ++ ) for ( var g = k [ a [ f ] ] , n = 0 ; n < g . length ; n ++ ) { var w = g [ n ] ; l [ w ] = this . get ( w ) ; c [ w ] = 1 } d . call ( b , l ) } , 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 , e ) { var g = { } , k = function ( b ) { a . call ( this , b , function ( a ) { CKEDITOR . tools . extend ( g , a ) ; var b = [ ] , f ; for ( f in a ) { var l = a [ f ] , A = l && l . requires ; if ( ! d [ f ] ) { if ( l . icons ) for ( var r = l . icons . split ( "," ) , D = r . length ; D -- ; ) CKEDITOR . skin . addIcon ( r [ D ] , l . path + "icons/" + ( CKEDITOR . env . hidpi && l . hidpi ? "hidpi/" : "" ) + r [ D ] + ".png" ) ; d [ f ] = 1 } if ( A ) for ( A . split && ( A = A . split ( "," ) ) , l = 0 ; l < A . length ; l ++ ) g [ A [ l ] ] || b . push ( A [ l ] ) } if ( b . length ) k . call ( this ,
b ) ; else { for ( f in g ) l = g [ f ] , l . onLoad && ! l . onLoad . _called && ( ! 1 === l . onLoad ( ) && delete g [ f ] , l . onLoad . _called = 1 ) ; c && c . call ( e || window , g ) } } , this ) } ; k . call ( this , b ) } } ) ; CKEDITOR . plugins . setLang = function ( a , d , b ) { var c = this . get ( a ) ; a = c . langEntries || ( c . langEntries = { } ) ; c = c . lang || ( c . lang = [ ] ) ; c . split && ( c = c . split ( "," ) ) ; - 1 == CKEDITOR . tools . indexOf ( c , d ) && c . push ( d ) ; a [ d ] = b } ; CKEDITOR . ui = function ( a ) { if ( a . ui ) return a . ui ; this . items = { } ; this . instances = { } ; this . editor = a ; this . _ = { handlers : { } } ; return this } ;
CKEDITOR . ui . prototype = { add : function ( a , d , b ) { b . name = a . toLowerCase ( ) ; var c = this . items [ a ] = { type : d , command : b . command || null , args : Array . prototype . slice . call ( arguments , 2 ) } ; CKEDITOR . tools . extend ( c , b ) } , get : function ( a ) { return this . instances [ a ] } , create : function ( a ) { var d = this . items [ a ] , b = d && this . _ . handlers [ d . type ] , c = d && d . command && this . editor . getCommand ( d . command ) , b = b && b . create . apply ( this , d . args ) ; this . instances [ a ] = b ; c && c . uiItems . push ( b ) ; b && ! b . type && ( b . type = d . type ) ; return b } , addHandler : function ( a , d ) { this . _ . handlers [ a ] =
d } , space : function ( a ) { return CKEDITOR . document . getById ( this . spaceId ( a ) ) } , spaceId : function ( a ) { return this . editor . id + "_" + a } } ; CKEDITOR . event . implementOn ( CKEDITOR . ui ) ;
( function ( ) { function a ( a , e , f ) { CKEDITOR . event . call ( this ) ; a = a && CKEDITOR . tools . clone ( a ) ; if ( void 0 !== e ) { if ( ! ( e instanceof CKEDITOR . dom . element ) ) throw Error ( "Expect element of type CKEDITOR.dom.element." ) ; if ( ! f ) throw Error ( "One of the element modes must be specified." ) ; if ( CKEDITOR . env . ie && CKEDITOR . env . quirks && f == CKEDITOR . ELEMENT _MODE _INLINE ) throw Error ( "Inline element mode is not supported on IE quirks." ) ; if ( ! b ( e , f ) ) throw Error ( 'The specified element mode is not supported on element: "' + e . getName ( ) + '".' ) ;
this . element = e ; this . elementMode = f ; this . name = this . elementMode != CKEDITOR . ELEMENT _MODE _APPENDTO && ( e . getId ( ) || e . getNameAtt ( ) ) } else this . elementMode = CKEDITOR . ELEMENT _MODE _NONE ; this . _ = { } ; this . commands = { } ; this . templates = { } ; this . name = this . name || d ( ) ; this . id = CKEDITOR . tools . getNextId ( ) ; this . status = "unloaded" ; this . config = CKEDITOR . tools . prototypedCopy ( CKEDITOR . config ) ; this . ui = new CKEDITOR . ui ( this ) ; this . focusManager = new CKEDITOR . focusManager ( this ) ; this . keystrokeHandler = new CKEDITOR . keystrokeHandler ( this ) ; this . on ( "readOnly" ,
c ) ; this . on ( "selectionChange" , function ( a ) { g ( this , a . data . path ) } ) ; this . on ( "activeFilterChange" , function ( ) { g ( this , this . elementPath ( ) , ! 0 ) } ) ; this . on ( "mode" , c ) ; this . on ( "instanceReady" , function ( ) { this . config . startupFocus && this . focus ( ) } ) ; CKEDITOR . fire ( "instanceCreated" , null , this ) ; CKEDITOR . add ( this ) ; CKEDITOR . tools . setTimeout ( function ( ) { "destroyed" !== this . status ? k ( this , a ) : CKEDITOR . warn ( "editor-incorrect-destroy" ) } , 0 , this ) } function d ( ) { do var a = "editor" + ++ t ; while ( CKEDITOR . instances [ a ] ) ; return a } function b ( a ,
b ) { return b == CKEDITOR . ELEMENT _MODE _INLINE ? a . is ( CKEDITOR . dtd . $editable ) || a . is ( "textarea" ) : b == CKEDITOR . ELEMENT _MODE _REPLACE ? ! a . is ( CKEDITOR . dtd . $nonBodyContent ) : 1 } function c ( ) { var a = this . commands , b ; for ( b in a ) e ( this , a [ b ] ) } function e ( a , b ) { b [ b . startDisabled ? "disable" : a . readOnly && ! b . readOnly ? "disable" : b . modes [ a . mode ] ? "enable" : "disable" ] ( ) } function g ( a , b , c ) { if ( b ) { var d , e , h = a . commands ; for ( e in h ) d = h [ e ] , ( c || d . contextSensitive ) && d . refresh ( a , b ) } } function l ( a ) { var b = a . config . customConfig ; if ( ! b ) return ! 1 ; var b =
CKEDITOR . getUrl ( b ) , c = D [ b ] || ( D [ b ] = { } ) ; c . fn ? ( c . fn . call ( a , a . config ) , CKEDITOR . getUrl ( a . config . customConfig ) != b && l ( a ) || a . fireOnce ( "customConfigLoaded" ) ) : CKEDITOR . scriptLoader . queue ( b , function ( ) { c . fn = CKEDITOR . editorConfig ? CKEDITOR . editorConfig : function ( ) { } ; l ( a ) } ) ; return ! 0 } function k ( a , b ) { a . on ( "customConfigLoaded" , function ( ) { if ( b ) { if ( b . on ) for ( var c in b . on ) a . on ( c , b . on [ c ] ) ; CKEDITOR . tools . extend ( a . config , b , ! 0 ) ; delete a . config . on } c = a . config ; a . readOnly = c . readOnly ? ! 0 : a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ?
c ) ; this . on ( "selectionChange" , function ( a ) { g ( this , a . data . path ) } ) ; this . on ( "activeFilterChange" , function ( ) { g ( this , this . elementPath ( ) , ! 0 ) } ) ; this . on ( "mode" , c ) ; this . on ( "instanceReady" , function ( ) { this . config . startupFocus && this . focus ( ) } ) ; CKEDITOR . fire ( "instanceCreated" , null , this ) ; CKEDITOR . add ( this ) ; CKEDITOR . tools . setTimeout ( function ( ) { "destroyed" !== this . status ? l ( this , a ) : CKEDITOR . warn ( "editor-incorrect-destroy" ) } , 0 , this ) } function d ( ) { do var a = "editor" + ++ r ; while ( CKEDITOR . instances [ a ] ) ; return a } function b ( a ,
b ) { return b == CKEDITOR . ELEMENT _MODE _INLINE ? a . is ( CKEDITOR . dtd . $editable ) || a . is ( "textarea" ) : b == CKEDITOR . ELEMENT _MODE _REPLACE ? ! a . is ( CKEDITOR . dtd . $nonBodyContent ) : 1 } function c ( ) { var a = this . commands , b ; for ( b in a ) e ( this , a [ b ] ) } function e ( a , b ) { b [ b . startDisabled ? "disable" : a . readOnly && ! b . readOnly ? "disable" : b . modes [ a . mode ] ? "enable" : "disable" ] ( ) } function g ( a , b , c ) { if ( b ) { var d , e , h = a . commands ; for ( e in h ) d = h [ e ] , ( c || d . contextSensitive ) && d . refresh ( a , b ) } } function k ( a ) { var b = a . config . customConfig ; if ( ! b ) return ! 1 ; var b =
CKEDITOR . getUrl ( b ) , c = D [ b ] || ( D [ b ] = { } ) ; c . fn ? ( c . fn . call ( a , a . config ) , CKEDITOR . getUrl ( a . config . customConfig ) != b && k ( a ) || a . fireOnce ( "customConfigLoaded" ) ) : CKEDITOR . scriptLoader . queue ( b , function ( ) { c . fn = CKEDITOR . editorConfig ? CKEDITOR . editorConfig : function ( ) { } ; k ( a ) } ) ; return ! 0 } function l ( a , b ) { a . on ( "customConfigLoaded" , function ( ) { if ( b ) { if ( b . on ) for ( var c in b . on ) a . on ( c , b . on [ c ] ) ; CKEDITOR . tools . extend ( a . config , b , ! 0 ) ; delete a . config . on } c = a . config ; a . readOnly = c . readOnly ? ! 0 : a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ?
a . element . is ( "textarea" ) ? a . element . hasAttribute ( "disabled" ) || a . element . hasAttribute ( "readonly" ) : a . element . isReadOnly ( ) : a . elementMode == CKEDITOR . ELEMENT _MODE _REPLACE ? a . element . hasAttribute ( "disabled" ) || a . element . hasAttribute ( "readonly" ) : ! 1 ; a . blockless = a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? ! ( a . element . is ( "textarea" ) || CKEDITOR . dtd [ a . element . getName ( ) ] . p ) : ! 1 ; a . tabIndex = c . tabIndex || a . element && a . element . getAttribute ( "tabindex" ) || 0 ; a . activeEnterMode = a . enterMode = a . blockless ? CKEDITOR . ENTER _BR : c . enterMode ;
a . activeShiftEnterMode = a . shiftEnterMode = a . blockless ? CKEDITOR . ENTER _BR : c . shiftEnterMode ; c . skin && ( CKEDITOR . skinName = c . skin ) ; a . fireOnce ( "configLoaded" ) ; a . dataProcessor = new CKEDITOR . htmlDataProcessor ( a ) ; a . filter = a . activeFilter = new CKEDITOR . filter ( a ) ; q ( a ) } ) ; b && null != b . customConfig && ( a . config . customConfig = b . customConfig ) ; l ( a ) || a . fireOnce ( "customConfigLoaded" ) } function q ( a ) { CKEDITOR . skin . loadPart ( "editor" , function ( ) { w ( a ) } ) } function w ( a ) { CKEDITOR . lang . load ( a . config . language , a . config . defaultLanguage , function ( b ,
a . activeShiftEnterMode = a . shiftEnterMode = a . blockless ? CKEDITOR . ENTER _BR : c . shiftEnterMode ; c . skin && ( CKEDITOR . skinName = c . skin ) ; a . fireOnce ( "configLoaded" ) ; a . dataProcessor = new CKEDITOR . htmlDataProcessor ( a ) ; a . filter = a . activeFilter = new CKEDITOR . filter ( a ) ; q ( a ) } ) ; b && null != b . customConfig && ( a . config . customConfig = b . customConfig ) ; k ( a ) || a . fireOnce ( "customConfigLoaded" ) } function q ( a ) { CKEDITOR . skin . loadPart ( "editor" , function ( ) { v ( a ) } ) } function v ( a ) { CKEDITOR . lang . load ( a . config . language , a . config . defaultLanguage , function ( b ,
c ) { var d = a . config . title ; a . langCode = b ; a . lang = CKEDITOR . tools . prototypedCopy ( c ) ; a . title = "string" == typeof d || ! 1 === d ? d : [ a . lang . editor , a . name ] . join ( ", " ) ; a . config . contentsLangDirection || ( a . config . contentsLangDirection = a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? a . element . getDirection ( 1 ) : a . lang . dir ) ; a . fire ( "langLoaded" ) ; f ( a ) } ) } function f ( a ) { a . getStylesSet ( function ( b ) { a . once ( "loaded" , function ( ) { a . fire ( "stylesSet" , { styles : b } ) } , null , null , 1 ) ; y ( a ) } ) } function y ( a ) { var b = a . config , c = b . plugins , d = b . extraPlugins , e =
b . removePlugins ; if ( d ) var h = new RegExp ( "(?:^|,)(?:" + d . replace ( /\s*,\s*/g , "|" ) + ")(?\x3d,|$)" , "g" ) , c = c . replace ( h , "" ) , c = c + ( "," + d ) ; if ( e ) var n = new RegExp ( "(?:^|,)(?:" + e . replace ( /\s*,\s*/g , "|" ) + ")(?\x3d,|$)" , "g" ) , c = c . replace ( n , "" ) ; CKEDITOR . env . air && ( c += ",adobeair" ) ; CKEDITOR . plugins . load ( c . split ( "," ) , function ( c ) { var d = [ ] , h = [ ] , e = [ ] ; a . plugins = c ; for ( var f in c ) { var g = c [ f ] , r = g . lang , l = null , k = g . requires , v ; CKEDITOR . tools . isArray ( k ) && ( k = k . join ( "," ) ) ; if ( k && ( v = k . match ( n ) ) ) for ( ; k = v . pop ( ) ; ) CKEDITOR . error ( "editor-plugin-required" ,
{ plugin : k . replace ( "," , "" ) , requiredBy : f } ) ; r && ! a . lang [ f ] && ( r . split && ( r = r . split ( "," ) ) , 0 <= CKEDITOR . tools . indexOf ( r , a . langCode ) ? l = a . langCode : ( l = a . langCode . replace ( /-.*/ , "" ) , l = l != a . langCode && 0 <= CKEDITOR . tools . indexOf ( r , l ) ? l : 0 <= CKEDITOR . tools . indexOf ( r , "en" ) ? "en" : r [ 0 ] ) , g . langEntries && g . langEntries [ l ] ? ( a . lang [ f ] = g . langEntries [ l ] , l = null ) : e . push ( CKEDITOR . getUrl ( g . path + "lang/" + l + ".js" ) ) ) ; h . push ( l ) ; d . push ( g ) } CKEDITOR . scriptLoader . load ( e , function ( ) { for ( var c = [ "beforeInit" , "init" , "afterInit" ] , e = 0 ; e < c . length ; e ++ ) for ( var n =
0 ; n < d . length ; n ++ ) { var m = d [ n ] ; 0 === e && h [ n ] && m . lang && m . langEntries && ( a . lang [ m . name ] = m . langEntries [ h [ n ] ] ) ; if ( m [ c [ e ] ] ) m [ c [ e ] ] ( a ) } a . fireOnce ( "pluginsLoaded" ) ; b . keystrokes && a . setKeystroke ( a . config . keystrokes ) ; for ( n = 0 ; n < a . config . blockedKeystrokes . length ; n ++ ) a . keystrokeHandler . blockedKeystrokes [ a . config . blockedKeystrokes [ n ] ] = 1 ; a . status = "loaded" ; a . fireOnce ( "loaded" ) ; CKEDITOR . fire ( "instanceLoaded" , null , a ) } ) } ) } function A ( ) { 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 } a . prototype = CKEDITOR . editor . prototype ; CKEDITOR . editor = a ; var t = 0 , D = { } ; CKEDITOR . tools . extend ( CKEDITOR . editor . prototype , { addCommand : function ( a , b ) { b . name = a . toLowerCase ( ) ; var c = new CKEDITOR . command ( this , b ) ; this . mode && e ( 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 ( ) }
b . removePlugins ; if ( d ) var h = new RegExp ( "(?:^|,)(?:" + d . replace ( /\s*,\s*/g , "|" ) + ")(?\x3d,|$)" , "g" ) , c = c . replace ( h , "" ) , c = c + ( "," + d ) ; if ( e ) var p = new RegExp ( "(?:^|,)(?:" + e . replace ( /\s*,\s*/g , "|" ) + ")(?\x3d,|$)" , "g" ) , c = c . replace ( p , "" ) ; CKEDITOR . env . air && ( c += ",adobeair" ) ; CKEDITOR . plugins . load ( c . split ( "," ) , function ( c ) { var d = [ ] , h = [ ] , e = [ ] ; a . plugins = c ; for ( var f in c ) { var g = c [ f ] , t = g . lang , k = null , l = g . requires , q ; CKEDITOR . tools . isArray ( l ) && ( l = l . join ( "," ) ) ; if ( l && ( q = l . match ( p ) ) ) for ( ; l = q . pop ( ) ; ) CKEDITOR . error ( "editor-plugin-required" ,
{ plugin : l . replace ( "," , "" ) , requiredBy : f } ) ; t && ! a . lang [ f ] && ( 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 ] ) , g . langEntries && g . langEntries [ k ] ? ( a . lang [ f ] = g . langEntries [ k ] , k = null ) : e . push ( CKEDITOR . getUrl ( g . path + "lang/" + k + ".js" ) ) ) ; h . push ( k ) ; d . push ( g ) } CKEDITOR . scriptLoader . load ( e , function ( ) { for ( var c = [ "beforeInit" , "init" , "afterInit" ] , e = 0 ; e < c . length ; e ++ ) for ( var p =
0 ; p < d . length ; p ++ ) { var m = d [ p ] ; 0 === e && h [ p ] && m . lang && m . langEntries && ( a . lang [ m . name ] = m . langEntries [ h [ p ] ] ) ; if ( m [ c [ e ] ] ) m [ c [ e ] ] ( a ) } a . fireOnce ( "pluginsLoaded" ) ; b . keystrokes && a . setKeystroke ( a . config . keystrokes ) ; for ( p = 0 ; p < a . config . blockedKeystrokes . length ; p ++ ) a . keystrokeHandler . blockedKeystrokes [ a . config . blockedKeystrokes [ p ] ] = 1 ; a . status = "loaded" ; a . fireOnce ( "loaded" ) ; CKEDITOR . fire ( "instanceLoaded" , null , a ) } ) } ) } function A ( ) { 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 } a . prototype = CKEDITOR . editor . prototype ; CKEDITOR . editor = a ; var r = 0 , D = { } ; CKEDITOR . tools . extend ( CKEDITOR . editor . prototype , { addCommand : function ( a , b ) { b . name = a . toLowerCase ( ) ; var c = new CKEDITOR . command ( this , b ) ; this . mode && e ( this , c ) ; return this . commands [ a ] = c } , _attachToForm : function ( ) { function a ( b ) { c . updateElement ( ) ; c . _ . required && ! d . getValue ( ) && ! 1 === c . fire ( "required" ) && b . data . preventDefault ( ) }
function b ( a ) { return ! ! ( a && a . call && a . apply ) } var c = this , d = c . element , e = new CKEDITOR . dom . element ( d . $ . form ) ; d . is ( "textarea" ) && e && ( e . on ( "submit" , a ) , b ( e . $ . submit ) && ( e . $ . submit = CKEDITOR . tools . override ( e . $ . submit , function ( b ) { return function ( ) { a ( ) ; b . apply ? b . apply ( this ) : b ( ) } } ) ) , c . on ( "destroy" , function ( ) { e . removeListener ( "submit" , a ) } ) ) } , destroy : function ( a ) { this . fire ( "beforeDestroy" ) ; ! a && A . 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 , e = b ; b && "object" == typeof b && ( c = b . internal , e = b . callback , d = ! b . noSnapshot ) ; ! c && d && this . fire ( "saveSnapshot" ) ; if ( e || ! c ) this . once ( "dataReady" , function ( a ) { ! c && d && this . fire ( "saveSnapshot" ) ; e && e . call ( a . editor ) } ) ; a = { dataValue : a } ; ! c && this . fire ( "setData" , a ) ; this . _ . data = a . dataValue ;
! c && this . fire ( "afterSetData" , a ) } , setReadOnly : function ( a ) { a = null == a || a ; this . readOnly != a && ( this . readOnly = a , this . keystrokeHandler . blockedKeystrokes [ 8 ] = + a , this . editable ( ) . setReadOnly ( a ) , this . fire ( "readOnly" ) ) } , insertHtml : function ( a , b , c ) { this . fire ( "insertHtml" , { dataValue : a , mode : b , range : c } ) } , insertText : function ( a ) { this . fire ( "insertText" , a ) } , insertElement : function ( a ) { this . fire ( "insertElement" , a ) } , getSelectedHtml : function ( a ) { var b = this . editable ( ) , c = this . getSelection ( ) , c = c && c . getRanges ( ) ; if ( ! b || ! c || 0 === c . length ) return null ;
for ( var d = new CKEDITOR . dom . documentFragment , e , h , n , m = 0 ; m < c . length ; m ++ ) { var f = c [ m ] , g = f . startContainer ; g . getName && "tr" == g . getName ( ) ? ( e || ( e = g . getAscendant ( "table" ) . clone ( ) , e . append ( g . getAscendant ( "tbody" ) . clone ( ) ) , d . append ( e ) , e = e . findOne ( "tbody" ) ) , h && h . equals ( g ) || ( h = g , n = g . clone ( ) , e . append ( n ) ) , n . append ( f . cloneContents ( ) ) ) : d . append ( f . cloneContents ( ) ) } b = e ? d : b . getHtmlFromRange ( c [ 0 ] ) ; return a ? b . getHtml ( ) : b } , extractSelectedHtml : function ( a , b ) { var c = this . editable ( ) , d = this . getSelection ( ) . getRanges ( ) ; if ( ! c || 0 ===
for ( var d = new CKEDITOR . dom . documentFragment , e , h , p , m = 0 ; m < c . length ; m ++ ) { var f = c [ m ] , g = f . startContainer ; g . getName && "tr" == g . getName ( ) ? ( e || ( e = g . getAscendant ( "table" ) . clone ( ) , e . append ( g . getAscendant ( "tbody" ) . clone ( ) ) , d . append ( e ) , e = e . findOne ( "tbody" ) ) , h && h . equals ( g ) || ( h = g , p = g . clone ( ) , e . append ( p ) ) , p . append ( f . cloneContents ( ) ) ) : d . append ( f . cloneContents ( ) ) } b = e ? d : b . getHtmlFromRange ( c [ 0 ] ) ; return a ? b . getHtml ( ) : b } , extractSelectedHtml : function ( a , b ) { var c = this . editable ( ) , d = this . getSelection ( ) . getRanges ( ) ; if ( ! c || 0 ===
d . length ) return null ; d = d [ 0 ] ; c = c . extractHtmlFromRange ( d , b ) ; b || this . getSelection ( ) . selectRanges ( [ d ] ) ; return a ? c . getHtml ( ) : c } , focus : function ( ) { this . fire ( "beforeFocus" ) } , checkDirty : function ( ) { return "ready" == this . status && this . _ . previousValue !== this . getSnapshot ( ) } , resetDirty : function ( ) { this . _ . previousValue = this . getSnapshot ( ) } , updateElement : function ( ) { return A . call ( this ) } , setKeystroke : function ( ) { for ( var a = this . keystrokeHandler . keystrokes , b = CKEDITOR . tools . isArray ( arguments [ 0 ] ) ? arguments [ 0 ] : [ [ ] . slice . call ( arguments ,
0 ) ] , c , d , e = b . length ; e -- ; ) c = b [ e ] , d = 0 , CKEDITOR . tools . isArray ( c ) && ( d = c [ 1 ] , c = c [ 0 ] ) , d ? a [ c ] = d : delete a [ c ] } , 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 , e , g = 0 , l ; c = this . _ . htmlPartsRegex . exec ( b ) ; ) { e = c . index ; if ( e > g ) if ( g = b . substring ( g , e ) , l ) l . push ( g ) ; else this . onText ( g ) ;
g = this . _ . htmlPartsRegex . lastIndex ; if ( e = c [ 1 ] ) if ( e = e . toLowerCase ( ) , l && CKEDITOR . dtd . $cdata [ e ] && ( this . onCDATA ( l . join ( "" ) ) , l = null ) , ! l ) { this . onTagClose ( e ) ; continue } if ( l ) l . push ( c [ 0 ] ) ; else if ( e = c [ 3 ] ) { if ( e = e . toLowerCase ( ) , ! /="/ . test ( e ) ) { var k = { } , q , w = c [ 4 ] ; c = ! ! c [ 5 ] ; if ( w ) for ( ; q = a . exec ( w ) ; ) { var f = q [ 1 ] . toLowerCase ( ) ; q = q [ 2 ] || q [ 3 ] || q [ 4 ] || "" ; k [ f ] = ! q && d [ f ] ? f : CKEDITOR . tools . htmlDecodeAttr ( q ) } this . onTagOpen ( e , k , c ) ; ! l && CKEDITOR . dtd . $cdata [ e ] && ( l = [ ] ) } } else if ( e = c [ 2 ] ) this . onComment ( e ) } if ( b . length > g ) this . onText ( b . substring ( 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 , e , g = 0 , k ; c = this . _ . htmlPartsRegex . exec ( b ) ; ) { e = c . index ; if ( e > g ) if ( g = b . substring ( g , e ) , k ) k . push ( g ) ; else this . onText ( g ) ;
g = this . _ . htmlPartsRegex . lastIndex ; if ( e = c [ 1 ] ) if ( e = e . toLowerCase ( ) , k && CKEDITOR . dtd . $cdata [ e ] && ( this . onCDATA ( k . join ( "" ) ) , k = null ) , ! k ) { this . onTagClose ( e ) ; continue } if ( k ) k . push ( c [ 0 ] ) ; else if ( e = c [ 3 ] ) { if ( e = e . toLowerCase ( ) , ! /="/ . test ( e ) ) { var l = { } , q , v = c [ 4 ] ; c = ! ! c [ 5 ] ; if ( v ) for ( ; q = a . exec ( v ) ; ) { var f = q [ 1 ] . toLowerCase ( ) ; q = q [ 2 ] || q [ 3 ] || q [ 4 ] || "" ; l [ f ] = ! q && d [ f ] ? f : CKEDITOR . tools . htmlDecodeAttr ( q ) } this . onTagOpen ( e , l , c ) ; ! k && CKEDITOR . dtd . $cdata [ e ] && ( k = [ ] ) } } else if ( e = c [ 2 ] ) this . onComment ( e ) } if ( b . length > g ) this . onText ( b . substring ( g ,
b . length ) ) } } } ) ( ) ;
CKEDITOR . htmlParser . basicWriter = CKEDITOR . tools . createClass ( { $ : function ( ) { this . _ = { output : [ ] } } , proto : { openTag : function ( a ) { this . _ . output . push ( "\x3c" , a ) } , openTagClose : function ( a , d ) { d ? this . _ . output . push ( " /\x3e" ) : this . _ . output . push ( "\x3e" ) } , attribute : function ( a , d ) { "string" == typeof d && ( d = CKEDITOR . tools . htmlEncodeAttr ( d ) ) ; this . _ . output . push ( " " , a , '\x3d"' , d , '"' ) } , closeTag : function ( a ) { this . _ . output . push ( "\x3c/" , a , "\x3e" ) } , text : function ( a ) { this . _ . output . push ( a ) } , comment : function ( a ) { this . _ . output . push ( "\x3c!--" , a ,
"--\x3e" ) } , write : function ( a ) { this . _ . output . push ( a ) } , reset : function ( ) { this . _ . output = [ ] ; this . _ . indent = ! 1 } , getHtml : function ( a ) { var d = this . _ . output . join ( "" ) ; a && this . reset ( ) ; return d } } } ) ; "use strict" ;
@@ -269,223 +270,224 @@ CKEDITOR.htmlParser.comment.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlPar
( function ( ) { CKEDITOR . htmlParser . text = function ( a ) { this . value = a ; this . _ = { isBlockLike : ! 1 } } ; CKEDITOR . htmlParser . text . prototype = CKEDITOR . tools . extend ( new CKEDITOR . htmlParser . node , { type : CKEDITOR . NODE _TEXT , filter : function ( a , d ) { if ( ! ( this . value = a . onText ( d , this . value , this ) ) ) return this . remove ( ) , ! 1 } , writeHtml : function ( a , d ) { d && this . filter ( d ) ; a . text ( this . value ) } } ) } ) ( ) ; "use strict" ;
( function ( ) { CKEDITOR . htmlParser . cdata = function ( a ) { this . value = a } ; CKEDITOR . htmlParser . cdata . prototype = CKEDITOR . tools . extend ( new CKEDITOR . htmlParser . node , { type : CKEDITOR . NODE _TEXT , filter : function ( ) { } , writeHtml : function ( a ) { a . write ( this . value ) } } ) } ) ( ) ; "use strict" ; CKEDITOR . htmlParser . fragment = function ( ) { this . children = [ ] ; this . parent = null ; this . _ = { isBlockLike : ! 0 , hasInlineStarted : ! 1 } } ;
( function ( ) { function a ( a ) { return a . attributes [ "data-cke-survive" ] ? ! 1 : "a" == a . name && a . attributes . href || CKEDITOR . dtd . $removeEmpty [ a . name ] } var d = CKEDITOR . tools . extend ( { table : 1 , ul : 1 , ol : 1 , dl : 1 } , CKEDITOR . dtd . table , CKEDITOR . dtd . ul , CKEDITOR . dtd . ol , CKEDITOR . dtd . dl ) , b = { ol : 1 , ul : 1 } , c = CKEDITOR . tools . extend ( { } , { html : 1 } , CKEDITOR . dtd . html , CKEDITOR . dtd . body , CKEDITOR . dtd . head , { style : 1 , script : 1 } ) , e = { ul : "li" , ol : "li" , dl : "dd" , table : "tbody" , tbody : "tr" , thead : "tr" , tfoot : "tr" , tr : "td" } ; CKEDITOR . htmlParser . fragment . fromHtml =
function ( g , l , k ) { function q ( a ) { var b ; if ( 0 < x . length ) for ( var c = 0 ; c < x . length ; c ++ ) { var d = x [ c ] , h = d . name , e = CKEDITOR . dtd [ h ] , f = u . name && CKEDITOR . dtd [ u . name ] ; f && ! f [ h ] || a && e && ! e [ a ] && CKEDITOR . dtd [ a ] ? h == u . name && ( y ( u , u . parent , 1 ) , c -- ) : ( b || ( w ( ) , b = 1 ) , d = d . clone ( ) , d . parent = u , u = d , x . splice ( c , 1 ) , c -- ) } } function w ( ) { for ( ; G . length ; ) y ( G . shift ( ) , u ) } function f ( a ) { if ( a . _ . isBlockLike && "pre" != a . name && "textarea" != a . name ) { var b = a . children . length , c = a . children [ b - 1 ] , d ; c && c . type == CKEDITOR . NODE _TEXT && ( ( d = CKEDITOR . tools . rtrim ( c . value ) ) ?
c . value = d : a . children . length = b - 1 ) } } function y ( b , c , d ) { c = c || u || p ; var e = u ; void 0 === b . previous && ( A ( c , b ) && ( u = c , D . onTagOpen ( k , { } ) , b . returnPoint = c = u ) , f ( b ) , a ( b ) && ! b . children . length || c . add ( b ) , "pre" == b . name && ( h = ! 1 ) , "textarea" == b . name && ( r = ! 1 ) ) ; b . returnPoint ? ( u = b . returnPoint , delete b . returnPoint ) : u = d ? c : e } function A ( a , b ) { if ( ( a == p || "body" == a . name ) && k && ( ! a . name || CKEDITOR . dtd [ a . name ] [ k ] ) ) { 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 t ( 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 , p = l instanceof CKEDITOR . htmlParser . element ? l : "string" == typeof l ? new CKEDITOR . htmlParser . element ( l ) : new CKEDITOR . htmlParser . fragment , x = [ ] , G = [ ] , u = p , r = "textarea" == p . name , h = "pre" == p . name ; D . onTagOpen = function ( e , m , f , g ) { m = new CKEDITOR . htmlParser . element ( e , m ) ; m . isUnknown && f && ( m . isEmpty = ! 0 ) ; m . isOptionalClose = g ;
if ( a ( m ) ) x . push ( m ) ; else { if ( "pre" == e ) h = ! 0 ; else { if ( "br" == e && h ) { u . add ( new CKEDITOR . htmlParser . text ( "\n" ) ) ; return } "textarea" == e && ( r = ! 0 ) } if ( "br" == e ) G . push ( m ) ; else { for ( ; ! ( g = ( f = u . name ) ? CKEDITOR . dtd [ f ] || ( u . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : c , m . isUnknown || u . isUnknown || g [ e ] ) ; ) if ( u . isOptionalClose ) D . onTagClose ( f ) ; else if ( e in b && f in b ) f = u . children , ( f = f [ f . length - 1 ] ) && "li" == f . name || y ( f = new CKEDITOR . htmlParser . element ( "li" ) , u ) , ! m . returnPoint && ( m . returnPoint = u ) , u = f ; else if ( e in CKEDITOR . dtd . $listItem &&
! t ( e , f ) ) D . onTagOpen ( "li" == e ? "ul" : "dl" , { } , 0 , 1 ) ; else if ( f in d && ! t ( e , f ) ) ! m . returnPoint && ( m . returnPoint = u ) , u = u . parent ; else if ( f in CKEDITOR . dtd . $inline && x . unshift ( u ) , u . parent ) y ( u , u . parent , 1 ) ; else { m . isOrphan = 1 ; break } q ( e ) ; w ( ) ; m . parent = u ; m . isEmpty ? y ( m ) : u = m } } } ; D . onTagClose = function ( a ) { for ( var b = x . length - 1 ; 0 <= b ; b -- ) if ( a == x [ b ] . name ) { x . splice ( b , 1 ) ; return } for ( var c = [ ] , d = [ ] , h = u ; h != p && h . name != a ; ) h . _ . isBlockLike || d . unshift ( h ) , c . push ( h ) , h = h . returnPoint || h . parent ; if ( h != p ) { for ( b = 0 ; b < c . length ; b ++ ) { var e = c [ b ] ; y ( e , e . parent ) } u =
h ; h . _ . isBlockLike && w ( ) ; y ( h , h . parent ) ; h == u && ( u = u . parent ) ; x = x . concat ( d ) } "body" == a && ( k = ! 1 ) } ; D . onText = function ( a ) { if ( ! ( u . _ . hasInlineStarted && ! G . length || h || r ) && ( a = CKEDITOR . tools . ltrim ( a ) , 0 === a . length ) ) return ; var b = u . name , f = b ? CKEDITOR . dtd [ b ] || ( u . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : c ; if ( ! r && ! f [ "#" ] && b in d ) D . onTagOpen ( e [ b ] || "" ) , D . onText ( a ) ; else { w ( ) ; q ( ) ; h || r || ( a = a . replace ( /[\t\r\n ]{2,}|[\t\r\n]/g , " " ) ) ; a = new CKEDITOR . htmlParser . text ( a ) ; if ( A ( u , a ) ) this . onTagOpen ( k , { } , 0 , 1 ) ; u . add ( a ) } } ; D . onCDATA =
function ( a ) { u . add ( new CKEDITOR . htmlParser . cdata ( a ) ) } ; D . onComment = function ( a ) { w ( ) ; q ( ) ; u . add ( new CKEDITOR . htmlParser . comment ( a ) ) } ; D . parse ( g ) ; for ( w ( ) ; u != p ; ) y ( u , u . parent , 1 ) ; f ( p ) ; return p } ; CKEDITOR . htmlParser . fragment . prototype = { type : CKEDITOR . NODE _DOCUMENT _FRAGMENT , add : function ( a , b ) { isNaN ( b ) && ( b = this . children . length ) ; var c = 0 < b ? this . children [ b - 1 ] : null ; if ( c ) { if ( a . _ . isBlockLike && c . type == CKEDITOR . NODE _TEXT && ( c . value = CKEDITOR . tools . rtrim ( c . value ) , 0 === c . value . length ) ) { this . children . pop ( ) ; this . add ( a ) ; return } c . next =
function ( g , k , l ) { function q ( a ) { var b ; if ( 0 < w . length ) for ( var c = 0 ; c < w . length ; c ++ ) { var d = w [ c ] , h = d . name , e = CKEDITOR . dtd [ h ] , f = u . name && CKEDITOR . dtd [ u . name ] ; f && ! f [ h ] || a && e && ! e [ a ] && CKEDITOR . dtd [ a ] ? h == u . name && ( y ( u , u . parent , 1 ) , c -- ) : ( b || ( v ( ) , b = 1 ) , d = d . clone ( ) , d . parent = u , u = d , w . splice ( c , 1 ) , c -- ) } } function v ( ) { for ( ; H . length ; ) y ( H . shift ( ) , u ) } function f ( a ) { if ( a . _ . isBlockLike && "pre" != a . name && "textarea" != a . name ) { var b = a . children . length , c = a . children [ b - 1 ] , d ; c && c . type == CKEDITOR . NODE _TEXT && ( ( d = CKEDITOR . tools . rtrim ( c . value ) ) ?
c . value = d : a . children . length = b - 1 ) } } function y ( b , c , d ) { c = c || u || n ; var e = u ; void 0 === b . previous && ( A ( c , b ) && ( u = c , D . onTagOpen ( l , { } ) , b . returnPoint = c = u ) , f ( b ) , a ( b ) && ! b . children . length || c . add ( b ) , "pre" == b . name && ( h = ! 1 ) , "textarea" == b . name && ( t = ! 1 ) ) ; b . returnPoint ? ( u = b . returnPoint , delete b . returnPoint ) : u = d ? c : e } function A ( a , b ) { if ( ( a == n || "body" == a . name ) && l && ( ! a . name || CKEDITOR . dtd [ a . name ] [ l ] ) ) { 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 r ( 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 , n = k instanceof CKEDITOR . htmlParser . element ? k : "string" == typeof k ? new CKEDITOR . htmlParser . element ( k ) : new CKEDITOR . htmlParser . fragment , w = [ ] , H = [ ] , u = n , t = "textarea" == n . name , h = "pre" == n . name ; D . onTagOpen = function ( e , m , f , g ) { m = new CKEDITOR . htmlParser . element ( e , m ) ; m . isUnknown && f && ( m . isEmpty = ! 0 ) ; m . isOptionalClose = g ;
if ( a ( m ) ) w . push ( m ) ; else { if ( "pre" == e ) h = ! 0 ; else { if ( "br" == e && h ) { u . add ( new CKEDITOR . htmlParser . text ( "\n" ) ) ; return } "textarea" == e && ( t = ! 0 ) } if ( "br" == e ) H . push ( m ) ; else { for ( ; ! ( g = ( f = u . name ) ? CKEDITOR . dtd [ f ] || ( u . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : c , m . isUnknown || u . isUnknown || g [ e ] ) ; ) if ( u . isOptionalClose ) D . onTagClose ( f ) ; else if ( e in b && f in b ) f = u . children , ( f = f [ f . length - 1 ] ) && "li" == f . name || y ( f = new CKEDITOR . htmlParser . element ( "li" ) , u ) , ! m . returnPoint && ( m . returnPoint = u ) , u = f ; else if ( e in CKEDITOR . dtd . $listItem &&
! r ( e , f ) ) D . onTagOpen ( "li" == e ? "ul" : "dl" , { } , 0 , 1 ) ; else if ( f in d && ! r ( e , f ) ) ! m . returnPoint && ( m . returnPoint = u ) , u = u . parent ; else if ( f in CKEDITOR . dtd . $inline && w . unshift ( u ) , u . parent ) y ( u , u . parent , 1 ) ; else { m . isOrphan = 1 ; break } q ( e ) ; v ( ) ; m . parent = u ; m . isEmpty ? y ( m ) : u = m } } } ; D . onTagClose = function ( a ) { for ( var b = w . length - 1 ; 0 <= b ; b -- ) if ( a == w [ b ] . name ) { w . splice ( b , 1 ) ; return } for ( var c = [ ] , d = [ ] , h = u ; h != n && h . name != a ; ) h . _ . isBlockLike || d . unshift ( h ) , c . push ( h ) , h = h . returnPoint || h . parent ; if ( h != n ) { for ( b = 0 ; b < c . length ; b ++ ) { var e = c [ b ] ; y ( e , e . parent ) } u =
h ; h . _ . isBlockLike && v ( ) ; y ( h , h . parent ) ; h == u && ( u = u . parent ) ; w = w . concat ( d ) } "body" == a && ( l = ! 1 ) } ; D . onText = function ( a ) { if ( ! ( u . _ . hasInlineStarted && ! H . length || h || t ) && ( a = CKEDITOR . tools . ltrim ( a ) , 0 === a . length ) ) return ; var b = u . name , f = b ? CKEDITOR . dtd [ b ] || ( u . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : c ; if ( ! t && ! f [ "#" ] && b in d ) D . onTagOpen ( e [ b ] || "" ) , D . onText ( a ) ; else { v ( ) ; q ( ) ; h || t || ( a = a . replace ( /[\t\r\n ]{2,}|[\t\r\n]/g , " " ) ) ; a = new CKEDITOR . htmlParser . text ( a ) ; if ( A ( u , a ) ) this . onTagOpen ( l , { } , 0 , 1 ) ; u . add ( a ) } } ; D . onCDATA =
function ( a ) { u . add ( new CKEDITOR . htmlParser . cdata ( a ) ) } ; D . onComment = function ( a ) { v ( ) ; q ( ) ; u . add ( new CKEDITOR . htmlParser . comment ( a ) ) } ; D . parse ( g ) ; for ( v ( ) ; u != n ; ) y ( u , u . parent , 1 ) ; f ( n ) ; return n } ; CKEDITOR . htmlParser . fragment . prototype = { type : CKEDITOR . NODE _DOCUMENT _FRAGMENT , add : function ( a , b ) { isNaN ( b ) && ( b = this . children . length ) ; var c = 0 < b ? this . children [ b - 1 ] : null ; if ( c ) { if ( a . _ . isBlockLike && c . type == CKEDITOR . NODE _TEXT && ( c . value = CKEDITOR . tools . rtrim ( c . value ) , 0 === c . value . length ) ) { this . children . pop ( ) ; this . add ( a ) ; return } c . next =
a } a . previous = c ; a . parent = this ; this . children . splice ( b , 0 , a ) ; this . _ . hasInlineStarted || ( this . _ . hasInlineStarted = a . type == CKEDITOR . NODE _TEXT || a . type == CKEDITOR . NODE _ELEMENT && ! a . _ . isBlockLike ) } , filter : function ( a , b ) { b = this . getFilterContext ( b ) ; a . onRoot ( b , this ) ; this . filterChildren ( a , ! 1 , b ) } , filterChildren : function ( a , b , c ) { if ( this . childrenFilteredBy != a . id ) { c = this . getFilterContext ( c ) ; if ( b && ! this . parent ) a . onRoot ( c , this ) ; this . childrenFilteredBy = a . id ; for ( b = 0 ; b < this . children . length ; b ++ ) ! 1 === this . children [ b ] . filter ( a ,
c ) && b -- } } , writeHtml : function ( a , b ) { b && this . filter ( b ) ; this . writeChildrenHtml ( a ) } , writeChildrenHtml : function ( a , b , c ) { var d = this . getFilterContext ( ) ; if ( c && ! this . parent && b ) b . onRoot ( d , this ) ; b && this . filterChildren ( b , ! 1 , d ) ; b = 0 ; c = this . children ; for ( d = c . length ; b < d ; b ++ ) c [ b ] . writeHtml ( a ) } , forEach : function ( a , b , c ) { if ( ! ( c || b && this . type != b ) ) var d = a ( this ) ; if ( ! 1 !== d ) { c = this . children ; for ( var e = 0 ; e < c . length ; e ++ ) d = c [ e ] , d . type == CKEDITOR . NODE _ELEMENT ? d . forEach ( a , b ) : b && d . type != b || a ( d ) } } , getFilterContext : function ( a ) { return a ||
{ } } } } ) ( ) ; "use strict" ;
( function ( ) { function a ( ) { this . rules = [ ] } function d ( b , c , d , g ) { var l , k ; for ( l in c ) ( k = b [ l ] ) || ( k = b [ l ] = new a ) , k . add ( c [ l ] , d , g ) } CKEDITOR . htmlParser . filter = CKEDITOR . tools . createClass ( { $ : function ( b ) { this . id = CKEDITOR . tools . getNextNumber ( ) ; this . elementNameRules = new a ; this . attributeNameRules = new a ; this . elementsRules = { } ; this . attributesRules = { } ; this . textRules = new a ; this . commentRules = new a ; this . rootRules = new a ; b && this . addRules ( b , 10 ) } , proto : { addRules : function ( a , c ) { var e ; "number" == typeof c ? e = c : c && "priority" in c && ( e =
( function ( ) { function a ( ) { this . rules = [ ] } function d ( b , c , d , g ) { var k , l ; for ( k in c ) ( l = b [ k ] ) || ( l = b [ k ] = new a ) , l . add ( c [ k ] , d , g ) } CKEDITOR . htmlParser . filter = CKEDITOR . tools . createClass ( { $ : function ( b ) { this . id = CKEDITOR . tools . getNextNumber ( ) ; this . elementNameRules = new a ; this . attributeNameRules = new a ; this . elementsRules = { } ; this . attributesRules = { } ; this . textRules = new a ; this . commentRules = new a ; this . rootRules = new a ; b && this . addRules ( b , 10 ) } , proto : { addRules : function ( a , c ) { var e ; "number" == typeof c ? e = c : c && "priority" in c && ( e =
c . priority ) ; "number" != typeof e && ( e = 10 ) ; "object" != typeof c && ( c = { } ) ; a . elementNames && this . elementNameRules . addMany ( a . elementNames , e , c ) ; a . attributeNames && this . attributeNameRules . addMany ( a . attributeNames , e , c ) ; a . elements && d ( this . elementsRules , a . elements , e , c ) ; a . attributes && d ( this . attributesRules , a . attributes , e , c ) ; a . text && this . textRules . add ( a . text , e , c ) ; a . comment && this . commentRules . add ( a . comment , e , c ) ; a . root && this . rootRules . add ( a . root , e , c ) } , applyTo : function ( a ) { a . filter ( this ) } , onElementName : function ( a , c ) { return this . elementNameRules . execOnName ( a ,
c ) } , onAttributeName : function ( a , c ) { return this . attributeNameRules . execOnName ( a , c ) } , onText : function ( a , c , d ) { return this . textRules . exec ( a , c , d ) } , onComment : function ( a , c , d ) { return this . commentRules . exec ( a , c , d ) } , onRoot : function ( a , c ) { return this . rootRules . exec ( a , c ) } , onElement : function ( a , c ) { for ( var d = [ this . elementsRules [ "^" ] , this . elementsRules [ c . name ] , this . elementsRules . $ ] , g , l = 0 ; 3 > l ; l ++ ) if ( g = d [ l ] ) { g = g . exec ( a , c , this ) ; if ( ! 1 === g ) return null ; if ( g && g != c ) return this . onNode ( a , g ) ; if ( c . parent && ! c . name ) break } return c } ,
c ) } , onAttributeName : function ( a , c ) { return this . attributeNameRules . execOnName ( a , c ) } , onText : function ( a , c , d ) { return this . textRules . exec ( a , c , d ) } , onComment : function ( a , c , d ) { return this . commentRules . exec ( a , c , d ) } , onRoot : function ( a , c ) { return this . rootRules . exec ( a , c ) } , onElement : function ( a , c ) { for ( var d = [ this . elementsRules [ "^" ] , this . elementsRules [ c . name ] , this . elementsRules . $ ] , g , k = 0 ; 3 > k ; k ++ ) if ( g = d [ k ] ) { g = g . exec ( a , c , this ) ; if ( ! 1 === g ) return null ; if ( g && g != c ) return this . onNode ( a , g ) ; if ( c . parent && ! c . name ) break } return c } ,
onNode : function ( a , c ) { var d = c . type ; return d == CKEDITOR . NODE _ELEMENT ? this . onElement ( a , c ) : d == CKEDITOR . NODE _TEXT ? new CKEDITOR . htmlParser . text ( this . onText ( a , c . value ) ) : d == CKEDITOR . NODE _COMMENT ? new CKEDITOR . htmlParser . comment ( this . onComment ( a , c . value ) ) : null } , onAttribute : function ( a , c , d , g ) { return ( d = this . attributesRules [ d ] ) ? d . exec ( a , g , c , this ) : g } } } ) ; CKEDITOR . htmlParser . filterRulesGroup = a ; a . prototype = { add : function ( a , c , d ) { this . rules . splice ( this . findIndex ( c ) , 0 , { value : a , priority : c , options : d } ) } , addMany : function ( a ,
c , d ) { for ( var g = [ this . findIndex ( c ) , 0 ] , l = 0 , k = a . length ; l < k ; l ++ ) g . push ( { value : a [ l ] , priority : c , options : d } ) ; this . rules . splice . apply ( this . rules , g ) } , findIndex : function ( a ) { for ( var c = this . rules , d = c . length - 1 ; 0 <= d && a < c [ d ] . priority ; ) d -- ; return d + 1 } , exec : function ( a , c ) { var d = c instanceof CKEDITOR . htmlParser . node || c instanceof CKEDITOR . htmlParser . fragment , g = Array . prototype . slice . call ( arguments , 1 ) , l = this . rules , k = l . length , q , w , f , y ; for ( y = 0 ; y < k ; y ++ ) if ( d && ( q = c . type , w = c . name ) , f = l [ y ] , ! ( a . nonEditable && ! f . options . applyToAll ||
a . nestedEditable && f . options . excludeNestedEditable ) ) { f = f . value . apply ( null , g ) ; if ( ! 1 === f || d && f && ( f . name != w || f . type != q ) ) return f ; null != f && ( g [ 0 ] = c = f ) } return c } , execOnName : function ( a , c ) { for ( var d = 0 , g = this . rules , l = g . length , k ; c && d < l ; d ++ ) k = g [ d ] , a . nonEditable && ! k . options . applyToAll || a . nestedEditable && k . options . excludeNestedEditable || ( c = c . replace ( k . value [ 0 ] , k . value [ 1 ] ) ) ; return c } } } ) ( ) ;
( function ( ) { function a ( a , d ) { function m ( a ) { return a || CKEDITOR . env . needsNbspFiller ? new CKEDITOR . htmlParser . text ( " " ) : new CKEDITOR . htmlParser . element ( "br" , { "data-cke-bogus" : 1 } ) } function n ( a , d ) { return function ( h ) { if ( h . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ) { var e = [ ] , n = b ( h ) , r , F ; if ( n ) for ( f ( n , 1 ) && e . push ( n ) ; n ; ) g ( n ) && ( r = c ( n ) ) && f ( r ) && ( ( F = c ( r ) ) && ! g ( F ) ? e . push ( r ) : ( m ( v ) . insertAfter ( r ) , r . remove ( ) ) ) , n = n . previous ; for ( n = 0 ; n < e . length ; n ++ ) e [ n ] . remove ( ) ; if ( e = ! a || ! 1 !== ( "function" == typeof d ? d ( h ) : d ) ) v || CKEDITOR . env . needsBrFiller ||
h . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ? v || CKEDITOR . env . needsBrFiller || ! ( 7 < document . documentMode || h . name in CKEDITOR . dtd . tr || h . name in CKEDITOR . dtd . $listItem ) ? ( e = b ( h ) , e = ! e || "form" == h . name && "input" == e . name ) : e = ! 1 : e = ! 1 ; e && h . add ( m ( a ) ) } } } function f ( a , b ) { if ( ( ! v || CKEDITOR . env . needsBrFiller ) && a . type == CKEDITOR . NODE _ELEMENT && "br" == a . name && ! a . attributes [ "data-cke-eol" ] ) return ! 0 ; var c ; return a . type == CKEDITOR . NODE _TEXT && ( c = a . value . match ( x ) ) && ( c . index && ( ( new CKEDITOR . htmlParser . text ( a . value . substring ( 0 , c . index ) ) ) . insertBefore ( a ) ,
a . value = c [ 0 ] ) , ! CKEDITOR . env . needsBrFiller && v && ( ! b || a . parent . name in z ) || ! v && ( ( c = a . previous ) && "br" == c . name || ! c || g ( c ) ) ) ? ! 0 : ! 1 } var r = { elements : { } } , v = "html" == d , z = CKEDITOR . tools . extend ( { } , h ) , E ; for ( E in z ) "#" in u [ E ] || delete z [ E ] ; for ( E in z ) r . elements [ E ] = n ( v , a . config . fillEmptyBlocks ) ; r . root = n ( v , ! 1 ) ; r . elements . br = function ( a ) { return function ( b ) { if ( b . parent . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ) { var d = b . attributes ; if ( "data-cke-bogus" in d || "data-cke-eol" in d ) delete d [ "data-cke-bogus" ] ; else { for ( d = b . next ; d && e ( d ) ; ) d =
d . next ; var h = c ( b ) ; ! d && g ( b . parent ) ? l ( b . parent , m ( a ) ) : g ( d ) && h && ! g ( h ) && m ( a ) . insertBefore ( d ) } } } } ( v ) ; return r } function d ( a , b ) { return a != CKEDITOR . ENTER _BR && ! 1 !== b ? a == CKEDITOR . ENTER _DIV ? "div" : "p" : ! 1 } function b ( a ) { for ( a = a . children [ a . children . length - 1 ] ; a && e ( a ) ; ) a = a . previous ; return a } function c ( a ) { for ( a = a . previous ; a && e ( a ) ; ) a = a . previous ; return a } function e ( a ) { return a . type == CKEDITOR . NODE _TEXT && ! CKEDITOR . tools . trim ( a . value ) || a . type == CKEDITOR . NODE _ELEMENT && a . attributes [ "data-cke-bookmark" ] } function g ( a ) { return a &&
( a . type == CKEDITOR . NODE _ELEMENT && a . name in h || a . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT ) } function l ( a , b ) { var c = a . children [ a . children . length - 1 ] ; a . children . push ( b ) ; b . parent = a ; c && ( c . next = b , b . previous = c ) } function k ( a ) { a = a . attributes ; "false" != a . contenteditable && ( a [ "data-cke-editable" ] = a . contenteditable ? "true" : 1 ) ; a . contenteditable = "false" } function q ( a ) { a = a . attributes ; switch ( a [ "data-cke-editable" ] ) { case "true" : a . contenteditable = "true" ; break ; case "1" : delete a . contenteditable } } function w ( a ) { return a . replace ( E ,
function ( a , b , c ) { return "\x3c" + b + c . replace ( C , function ( a , b ) { return H . test ( b ) && - 1 == c . indexOf ( "data-cke-saved-" + b ) ? " data-cke-saved-" + a + " data-cke-" + CKEDITOR . rnd + "-" + a : a } ) + "\x3e" } ) } function f ( a , b ) { return a . replace ( b , function ( a , b , c ) { 0 === a . indexOf ( "\x3ctextarea" ) && ( a = b + t ( 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 ( Q , function ( a , b ) { return decodeURIComponent ( b ) } ) } function A ( a ) { return a . replace ( /\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g ,
function ( a ) { return "\x3c!--" + G + "{C}" + encodeURIComponent ( a ) . replace ( /--/g , "%2D%2D" ) + "--\x3e" } ) } function t ( 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 p ( a , b ) { var c = [ ] , d = b . config . protectedSource , h = 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 m = 0 ; m < d . length ; m ++ ) a = a . replace ( d [ m ] , 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!--" + G + ( 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 ) { h [ h . id ] = decodeURIComponent ( b ) ; return "{cke_protected_" + h . id ++ + "}" } ) } ) ; return a = a . replace ( /<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g , function ( a , c , d , h ) { return "\x3c" + c + d + "\x3e" + D ( t ( h ) , b ) + "\x3c/" + c + "\x3e" } ) } CKEDITOR . htmlDataProcessor = function ( b ) { var c ,
h , e = this ; this . editor = b ; this . dataFilter = c = new CKEDITOR . htmlParser . filter ; this . htmlFilter = h = new CKEDITOR . htmlParser . filter ; this . writer = new CKEDITOR . htmlParser . basicWriter ; c . addRules ( n ) ; c . addRules ( m , { applyToAll : ! 0 } ) ; c . addRules ( a ( b , "data" ) , { applyToAll : ! 0 } ) ; h . addRules ( z ) ; h . addRules ( B , { applyToAll : ! 0 } ) ; h . addRules ( a ( b , "html" ) , { applyToAll : ! 0 } ) ; b . on ( "toHtml" , function ( a ) { a = a . data ; var c = a . dataValue , h , c = p ( c , b ) , c = f ( c , T ) , c = w ( c ) , c = f ( c , R ) , c = c . replace ( v , "$1cke:$2" ) , c = c . replace ( J , "\x3ccke:$1$2\x3e\x3c/cke:$1\x3e" ) ,
c = c . replace ( /(<pre\b[^>]*>)(\r\n|\n)/g , "$1$2$2" ) , c = c . replace ( /([^a-z0-9<\-])(on\w{3,})(?!>)/gi , "$1data-cke-" + CKEDITOR . rnd + "-$2" ) ; h = a . context || b . editable ( ) . getName ( ) ; var e ; CKEDITOR . env . ie && 9 > CKEDITOR . env . version && "pre" == h && ( h = "div" , c = "\x3cpre\x3e" + c + "\x3c/pre\x3e" , e = 1 ) ; h = b . document . createElement ( h ) ; h . setHtml ( "a" + c ) ; c = h . getHtml ( ) . substr ( 1 ) ; c = c . replace ( new RegExp ( "data-cke-" + CKEDITOR . rnd + "-" , "ig" ) , "" ) ; e && ( c = c . replace ( /^<pre>|<\/pre>$/gi , "" ) ) ; c = c . replace ( I , "$1$2" ) ; c = y ( c ) ; c = t ( c ) ; h = ! 1 === a . fixForBody ? ! 1 :
c , d ) { for ( var g = [ this . findIndex ( c ) , 0 ] , k = 0 , l = a . length ; k < l ; k ++ ) g . push ( { value : a [ k ] , priority : c , options : d } ) ; this . rules . splice . apply ( this . rules , g ) } , findIndex : function ( a ) { for ( var c = this . rules , d = c . length - 1 ; 0 <= d && a < c [ d ] . priority ; ) d -- ; return d + 1 } , exec : function ( a , c ) { var d = c instanceof CKEDITOR . htmlParser . node || c instanceof CKEDITOR . htmlParser . fragment , g = Array . prototype . slice . call ( arguments , 1 ) , k = this . rules , l = k . length , q , v , f , y ; for ( y = 0 ; y < l ; y ++ ) if ( d && ( q = c . type , v = c . name ) , f = k [ y ] , ! ( a . nonEditable && ! f . options . applyToAll ||
a . nestedEditable && f . options . excludeNestedEditable ) ) { f = f . value . apply ( null , g ) ; if ( ! 1 === f || d && f && ( f . name != v || f . type != q ) ) return f ; null != f && ( g [ 0 ] = c = f ) } return c } , execOnName : function ( a , c ) { for ( var d = 0 , g = this . rules , k = g . length , l ; c && d < k ; d ++ ) l = g [ d ] , a . nonEditable && ! l . options . applyToAll || a . nestedEditable && l . options . excludeNestedEditable || ( c = c . replace ( l . value [ 0 ] , l . value [ 1 ] ) ) ; return c } } } ) ( ) ;
( function ( ) { function a ( a , d ) { function f ( a ) { return a || CKEDITOR . env . needsNbspFiller ? new CKEDITOR . htmlParser . text ( " " ) : new CKEDITOR . htmlParser . element ( "br" , { "data-cke-bogus" : 1 } ) } function m ( a , d ) { return function ( h ) { if ( h . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ) { var e = [ ] , m = b ( h ) , t , G ; if ( m ) for ( p ( m , 1 ) && e . push ( m ) ; m ; ) g ( m ) && ( t = c ( m ) ) && p ( t ) && ( ( G = c ( t ) ) && ! g ( G ) ? e . push ( t ) : ( f ( x ) . insertAfter ( t ) , t . remove ( ) ) ) , m = m . previous ; for ( m = 0 ; m < e . length ; m ++ ) e [ m ] . remove ( ) ; if ( e = ! a || ! 1 !== ( "function" == typeof d ? d ( h ) : d ) ) x || CKEDITOR . env . needsBrFiller ||
h . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ? x || CKEDITOR . env . needsBrFiller || ! ( 7 < document . documentMode || h . name in CKEDITOR . dtd . tr || h . name in CKEDITOR . dtd . $listItem ) ? ( e = b ( h ) , e = ! e || "form" == h . name && "input" == e . name ) : e = ! 1 : e = ! 1 ; e && h . add ( f ( a ) ) } } } function p ( a , b ) { if ( ( ! x || CKEDITOR . env . needsBrFiller ) && a . type == CKEDITOR . NODE _ELEMENT && "br" == a . name && ! a . attributes [ "data-cke-eol" ] ) return ! 0 ; var c ; return a . type == CKEDITOR . NODE _TEXT && ( c = a . value . match ( w ) ) && ( c . index && ( ( new CKEDITOR . htmlParser . text ( a . value . substring ( 0 , c . index ) ) ) . insertBefore ( a ) ,
a . value = c [ 0 ] ) , ! CKEDITOR . env . needsBrFiller && x && ( ! b || a . parent . name in F ) || ! x && ( ( c = a . previous ) && "br" == c . name || ! c || g ( c ) ) ) ? ! 0 : ! 1 } var t = { elements : { } } , x = "html" == d , F = CKEDITOR . tools . extend ( { } , h ) , C ; for ( C in F ) "#" in u [ C ] || delete F [ C ] ; for ( C in F ) t . elements [ C ] = m ( x , a . config . fillEmptyBlocks ) ; t . root = m ( x , ! 1 ) ; t . 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 && e ( d ) ; ) d =
d . next ; var h = c ( b ) ; ! d && g ( b . parent ) ? k ( b . parent , f ( a ) ) : g ( d ) && h && ! g ( h ) && f ( a ) . insertBefore ( d ) } } } } ( x ) ; return t } 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 && e ( a ) ; ) a = a . previous ; return a } function c ( a ) { for ( a = a . previous ; a && e ( a ) ; ) a = a . previous ; return a } function e ( a ) { return a . type == CKEDITOR . NODE _TEXT && ! CKEDITOR . tools . trim ( a . value ) || a . type == CKEDITOR . NODE _ELEMENT && a . attributes [ "data-cke-bookmark" ] } function g ( a ) { return a &&
( a . type == CKEDITOR . NODE _ELEMENT && a . name in h || 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 l ( a ) { a = a . attributes ; "false" != a . contenteditable && ( a [ "data-cke-editable" ] = a . contenteditable ? "true" : 1 ) ; a . contenteditable = "false" } function q ( a ) { a = a . attributes ; switch ( a [ "data-cke-editable" ] ) { case "true" : a . contenteditable = "true" ; break ; case "1" : delete a . contenteditable } } function v ( a ) { return a . replace ( F ,
function ( a , b , c ) { return "\x3c" + b + c . replace ( B , function ( a , b ) { return E . test ( b ) && - 1 == c . indexOf ( "data-cke-saved-" + b ) ? " data-cke-saved-" + a + " data-cke-" + CKEDITOR . rnd + "-" + a : a } ) + "\x3e" } ) } function f ( a , b ) { return a . replace ( b , function ( a , b , c ) { 0 === a . indexOf ( "\x3ctextarea" ) && ( a = b + r ( 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 ( O , function ( a , b ) { return decodeURIComponent ( b ) } ) } function A ( a ) { return a . replace ( /\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g ,
function ( a ) { return "\x3c!--" + H + "{C}" + encodeURIComponent ( a ) . replace ( /--/g , "%2D%2D" ) + "--\x3e" } ) } function r ( 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 n ( a , b ) { var c = [ ] , d = b . config . protectedSource , h = 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 m = 0 ; m < d . length ; m ++ ) a = a . replace ( d [ m ] , 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!--" + H + ( 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 ) { h [ h . id ] = decodeURIComponent ( b ) ; return "{cke_protected_" + h . id ++ + "}" } ) } ) ; return a = a . replace ( /<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g , function ( a , c , d , h ) { return "\x3c" + c + d + "\x3e" + D ( r ( h ) , b ) + "\x3c/" + c + "\x3e" } ) } CKEDITOR . htmlDataProcessor = function ( b ) { var c ,
h , e = this ; this . editor = b ; this . dataFilter = c = new CKEDITOR . htmlParser . filter ; this . htmlFilter = h = new CKEDITOR . htmlParser . filter ; this . writer = new CKEDITOR . htmlParser . basicWriter ; c . addRules ( p ) ; c . addRules ( m , { applyToAll : ! 0 } ) ; c . addRules ( a ( b , "data" ) , { applyToAll : ! 0 } ) ; h . addRules ( x ) ; h . addRules ( z , { applyToAll : ! 0 } ) ; h . addRules ( a ( b , "html" ) , { applyToAll : ! 0 } ) ; b . on ( "toHtml" , function ( a ) { a = a . data ; var c = a . dataValue , h , c = n ( c , b ) , c = f ( c , P ) , c = v ( c ) , c = f ( c , Y ) , c = c . replace ( N , "$1cke:$2" ) , c = c . replace ( I , "\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" ) ; h = a . context || b . editable ( ) . getName ( ) ; var e ; CKEDITOR . env . ie && 9 > CKEDITOR . env . version && "pre" == h && ( h = "div" , c = "\x3cpre\x3e" + c + "\x3c/pre\x3e" , e = 1 ) ; h = b . document . createElement ( h ) ; h . setHtml ( "a" + c ) ; c = h . getHtml ( ) . substr ( 1 ) ; c = c . replace ( new RegExp ( "data-cke-" + CKEDITOR . rnd + "-" , "ig" ) , "" ) ; e && ( c = c . replace ( /^<pre>|<\/pre>$/gi , "" ) ) ; c = c . replace ( C , "$1$2" ) ; c = y ( c ) ; c = r ( c ) ; h = ! 1 === a . fixForBody ? ! 1 :
d ( a . enterMode , b . config . autoParagraph ) ; c = CKEDITOR . htmlParser . fragment . fromHtml ( c , a . context , h ) ; h && ( e = c , ! e . children . length && CKEDITOR . dtd [ e . name ] [ h ] && ( h = new CKEDITOR . htmlParser . element ( h ) , e . add ( h ) ) ) ; 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 ( e . 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 = A ( 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 ( e . 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 = e . writer ; d . reset ( ) ; c . writeChildrenHtml ( d ) ; c = d . getHtml ( ! 0 ) ; c = t ( c ) ; c = D ( c , b ) ; a . data . dataValue = c } , null , null , 15 ) } ; CKEDITOR . htmlDataProcessor . prototype = { toHtml : function ( a , b , c , d ) { var h = this . editor , e , m , n , f ; b && "object" == typeof b ? ( e = b . context , c = b . fixForBody , d = b . dontFilter , m = b . filter , n = b . enterMode , f = b . protectedWhitespaces ) : e = b ; e || null === e || ( e = h . editable ( ) . getName ( ) ) ; return h . fire ( "toHtml" , { dataValue : a , context : e , fixForBody : c , dontFilter : d ,
filter : m || h . filter , enterMode : n || h . enterMode , protectedWhitespaces : f } ) . dataValue } , toDataFormat : function ( a , b ) { var c , d , h ; b && ( c = b . context , d = b . filter , h = 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 : h || this . editor . enterMode } ) . dataValue } } ; var x = /(?: |\xa0)$/ , G = "{cke_protected}" , u = CKEDITOR . dtd , r = "caption colgroup col thead tfoot tbody" . split ( " " ) , h = CKEDITOR . tools . extend ( { } , u . $blockLimit ,
u . $block ) , n = { elements : { input : k , textarea : k } } , m = { attributeNames : [ [ /^on/ , "data-cke-pa-on" ] , [ /^data-cke-expando$/ , "" ] ] } , z = { 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 } } } , B = { 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 , h = 0 ; h < c . length ; h ++ ) d = "data-cke-saved-" + c [ h ] , d in b && delete b [ c [ h ] ] } 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 ( r , a . name ) , d = CKEDITOR . tools . indexOf ( r , b . name ) ) ; - 1 < c && - 1 < d && c != d || ( c = a . parent ? a . getIndex ( ) : - 1 , d = b . parent ? b . getIndex ( ) : - 1 ) ; return c > d ?
1 : - 1 } ) } , param : function ( a ) { a . children = [ ] ; a . isEmpty = ! 0 ; return a } , span : function ( a ) { "Apple-style-span" == a . attributes [ "class" ] && delete a . name } , html : function ( a ) { delete a . attributes . contenteditable ; delete a . attributes [ "class" ] } , body : function ( a ) { delete a . attributes . spellcheck ; delete a . attributes . contenteditable } , style : function ( a ) { var b = a . children [ 0 ] ; b && b . value && ( b . value = CKEDITOR . tools . trim ( b . value ) ) ; a . attributes . type || ( a . attributes . type = "text/css" ) } , title : function ( a ) { var b = a . children [ 0 ] ; ! b && l ( a , b = new CKEDITOR . htmlParser . text ) ;
b . value = a . attributes [ "data-cke-title" ] || "" } , input : q , textarea : q } , attributes : { "class" : function ( a ) { return CKEDITOR . tools . ltrim ( a . replace ( /(?:^|\s+)cke_[^\s]*/g , "" ) ) || ! 1 } } } ; CKEDITOR . env . ie && ( B . attributes . style = function ( a ) { return a . replace ( /(^|;)([^\:]+)/g , function ( a ) { return a . toLowerCase ( ) } ) } ) ; var E = /<(a|area|img|input|source)\b([^>]*)>/gi , C = /([\w-:]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi , H = /^(href|src|name)$/i , R = /(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi ,
T = /(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi , Q = /<cke:encoded>([^<]*)<\/cke:encoded>/gi , v = /(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi , I = /(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi , J = /<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi } ) ( ) ; "use strict" ;
! 1 , ! 0 ) } , null , null , 11 ) ; b . on ( "toDataFormat" , function ( a ) { var c = a . data . dataValue , d = e . writer ; d . reset ( ) ; c . writeChildrenHtml ( d ) ; c = d . getHtml ( ! 0 ) ; c = r ( c ) ; c = D ( c , b ) ; a . data . dataValue = c } , null , null , 15 ) } ; CKEDITOR . htmlDataProcessor . prototype = { toHtml : function ( a , b , c , d ) { var h = this . editor , e , m , f , p ; b && "object" == typeof b ? ( e = b . context , c = b . fixForBody , d = b . dontFilter , m = b . filter , f = b . enterMode , p = b . protectedWhitespaces ) : e = b ; e || null === e || ( e = h . editable ( ) . getName ( ) ) ; return h . fire ( "toHtml" , { dataValue : a , context : e , fixForBody : c , dontFilter : d ,
filter : m || h . filter , enterMode : f || h . enterMode , protectedWhitespaces : p } ) . dataValue } , toDataFormat : function ( a , b ) { var c , d , h ; b && ( c = b . context , d = b . filter , h = 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 : h || this . editor . enterMode } ) . dataValue } } ; var w = /(?: |\xa0)$/ , H = "{cke_protected}" , u = CKEDITOR . dtd , t = "caption colgroup col thead tfoot tbody" . split ( " " ) , h = CKEDITOR . tools . extend ( { } , u . $blockLimit ,
u . $block ) , p = { elements : { input : l , textarea : l } } , m = { attributeNames : [ [ /^on/ , "data-cke-pa-on" ] , [ /^data-cke-expando$/ , "" ] ] } , x = { 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 } } } , z = { 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 , h = 0 ; h < c . length ; h ++ ) d = "data-cke-saved-" + c [ h ] , d in b && delete b [ c [ h ] ] } 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 ( t , a . name ) , d = CKEDITOR . tools . indexOf ( t , b . name ) ) ; - 1 < c && - 1 < d && c != d || ( c = a . parent ? a . getIndex ( ) : - 1 , d = b . parent ? b . getIndex ( ) : - 1 ) ; return c > d ?
1 : - 1 } ) } , param : function ( a ) { a . children = [ ] ; a . isEmpty = ! 0 ; return a } , span : function ( a ) { "Apple-style-span" == a . attributes [ "class" ] && delete a . name } , html : function ( a ) { delete a . attributes . contenteditable ; delete a . attributes [ "class" ] } , body : function ( a ) { delete a . attributes . spellcheck ; delete a . attributes . contenteditable } , style : function ( a ) { var b = a . children [ 0 ] ; b && b . value && ( b . value = CKEDITOR . tools . trim ( b . value ) ) ; a . attributes . type || ( a . attributes . type = "text/css" ) } , title : function ( a ) { var b = a . children [ 0 ] ; ! b && k ( a , b = new CKEDITOR . htmlParser . text ) ;
b . value = a . attributes [ "data-cke-title" ] || "" } , input : q , textarea : q } , attributes : { "class" : function ( a ) { return CKEDITOR . tools . ltrim ( a . replace ( /(?:^|\s+)cke_[^\s]*/g , "" ) ) || ! 1 } } } ; CKEDITOR . env . ie && ( z . attributes . style = function ( a ) { return a . replace ( /(^|;)([^\:]+)/g , function ( a ) { return a . toLowerCase ( ) } ) } ) ; var F = /<(a|area|img|input|source)\b([^>]*)>/gi , B = /([\w-:]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi , E = /^(href|src|name)$/i , Y = /(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi ,
P = /(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi , O = /<cke:encoded>([^<]*)<\/cke:encoded>/gi , N = /(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi , C = /(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi , I = /<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 , e ) { "font-family" == c && ( e = e . replace ( /["']/g , "" ) ) ; d [ c . toLowerCase ( ) ] = e } ) ; return { rules : d , populate : function ( a ) { var c = this . toString ( ) ; c && ( a instanceof CKEDITOR . dom . element ? a . setAttribute ( "style" , c ) : a instanceof CKEDITOR . htmlParser . element ? a . attributes . style = c : a . style = c ) } , toString : function ( ) { var a = [ ] , c ;
for ( c in d ) d [ c ] && a . push ( c , ":" , d [ c ] , ";" ) ; return a . join ( "" ) } } } ;
( function ( ) { function a ( a ) { return function ( b ) { return b . type == CKEDITOR . NODE _ELEMENT && ( "string" == typeof a ? b . name == a : b . name in a ) } } var d = function ( a , b ) { a = a [ 0 ] ; b = b [ 0 ] ; return a < b ? - 1 : a > b ? 1 : 0 } , b = CKEDITOR . htmlParser . fragment . prototype ; CKEDITOR . htmlParser . element . prototype = CKEDITOR . tools . extend ( new CKEDITOR . htmlParser . node , { type : CKEDITOR . NODE _ELEMENT , add : b . add , clone : function ( ) { return new CKEDITOR . htmlParser . element ( this . name , this . attributes ) } , filter : function ( a , b ) { var d = this , l , k ; b = d . getFilterContext ( b ) ; if ( b . off ) return ! 0 ;
if ( ! d . parent ) a . onRoot ( b , d ) ; for ( ; ; ) { l = d . name ; if ( ! ( k = a . onElementName ( b , l ) ) ) return this . remove ( ) , ! 1 ; d . name = k ; if ( ! ( d = a . onElement ( b , d ) ) ) return this . remove ( ) , ! 1 ; if ( d !== this ) return this . replaceWith ( d ) , ! 1 ; if ( d . name == l ) break ; if ( d . type != CKEDITOR . NODE _ELEMENT ) return this . replaceWith ( d ) , ! 1 ; if ( ! d . name ) return this . replaceWithChildren ( ) , ! 1 } l = d . attributes ; var q , w ; for ( q in l ) { for ( k = l [ q ] ; ; ) if ( w = a . onAttributeName ( b , q ) ) if ( w != q ) delete l [ q ] , q = w ; else break ; else { delete l [ q ] ; break } w && ( ! 1 === ( k = a . onAttribute ( b , d , w , k ) ) ? delete l [ w ] :
l [ w ] = k ) } d . isEmpty || this . filterChildren ( a , ! 1 , b ) ; return ! 0 } , filterChildren : b . filterChildren , writeHtml : function ( a , b ) { b && this . filter ( b ) ; var g = this . name , l = [ ] , k = this . attributes , q , w ; a . openTag ( g , k ) ; for ( q in k ) l . push ( [ q , k [ q ] ] ) ; a . sortAttributes && l . sort ( d ) ; q = 0 ; for ( w = l . length ; q < w ; q ++ ) k = l [ q ] , a . attribute ( k [ 0 ] , k [ 1 ] ) ; a . openTagClose ( g , this . isEmpty ) ; this . writeChildrenHtml ( a ) ; this . isEmpty || a . closeTag ( g ) } , writeChildrenHtml : b . writeChildrenHtml , replaceWithChildren : function ( ) { for ( var a = this . children , b = a . length ; b ; ) a [ -- b ] . insertAfter ( this ) ;
( function ( ) { function a ( a ) { return function ( b ) { return b . type == CKEDITOR . NODE _ELEMENT && ( "string" == typeof a ? b . name == a : b . name in a ) } } var d = function ( a , b ) { a = a [ 0 ] ; b = b [ 0 ] ; return a < b ? - 1 : a > b ? 1 : 0 } , b = CKEDITOR . htmlParser . fragment . prototype ; CKEDITOR . htmlParser . element . prototype = CKEDITOR . tools . extend ( new CKEDITOR . htmlParser . node , { type : CKEDITOR . NODE _ELEMENT , add : b . add , clone : function ( ) { return new CKEDITOR . htmlParser . element ( this . name , this . attributes ) } , filter : function ( a , b ) { var d = this , k , l ; b = d . getFilterContext ( b ) ; if ( b . off ) return ! 0 ;
if ( ! d . parent ) a . onRoot ( b , d ) ; for ( ; ; ) { k = d . name ; if ( ! ( l = a . onElementName ( b , k ) ) ) return this . remove ( ) , ! 1 ; d . name = l ; if ( ! ( d = a . onElement ( b , d ) ) ) return this . remove ( ) , ! 1 ; if ( d !== this ) return this . replaceWith ( d ) , ! 1 ; if ( d . name == k ) break ; if ( d . type != CKEDITOR . NODE _ELEMENT ) return this . replaceWith ( d ) , ! 1 ; if ( ! d . name ) return this . replaceWithChildren ( ) , ! 1 } k = d . attributes ; var q , v ; for ( q in k ) { for ( l = k [ q ] ; ; ) if ( v = a . onAttributeName ( b , q ) ) if ( v != q ) delete k [ q ] , q = v ; else break ; else { delete k [ q ] ; break } v && ( ! 1 === ( l = a . onAttribute ( b , d , v , l ) ) ? delete k [ v ] :
k [ v ] = l ) } d . isEmpty || this . filterChildren ( a , ! 1 , b ) ; return ! 0 } , filterChildren : b . filterChildren , writeHtml : function ( a , b ) { b && this . filter ( b ) ; var g = this . name , k = [ ] , l = this . attributes , q , v ; a . openTag ( g , l ) ; for ( q in l ) k . push ( [ q , l [ q ] ] ) ; a . sortAttributes && k . sort ( d ) ; q = 0 ; for ( v = k . length ; q < v ; q ++ ) l = k [ q ] , a . attribute ( l [ 0 ] , l [ 1 ] ) ; a . openTagClose ( g , this . isEmpty ) ; this . writeChildrenHtml ( a ) ; this . isEmpty || a . closeTag ( g ) } , writeChildrenHtml : b . writeChildrenHtml , replaceWithChildren : function ( ) { for ( var a = this . children , b = a . length ; b ; ) a [ -- b ] . insertAfter ( this ) ;
this . remove ( ) } , forEach : b . forEach , getFirst : function ( b ) { if ( ! b ) return this . children . length ? this . children [ 0 ] : null ; "function" != typeof b && ( b = a ( b ) ) ; for ( var d = 0 , g = this . children . length ; d < g ; ++ d ) if ( b ( this . children [ d ] ) ) return this . children [ d ] ; return null } , getHtml : function ( ) { var a = new CKEDITOR . htmlParser . basicWriter ; this . writeChildrenHtml ( a ) ; return a . getHtml ( ) } , setHtml : function ( a ) { a = this . children = CKEDITOR . htmlParser . fragment . fromHtml ( a ) . children ; for ( var b = 0 , d = a . length ; b < d ; ++ b ) a [ b ] . parent = this } , getOuterHtml : function ( ) { var a =
new CKEDITOR . htmlParser . basicWriter ; this . writeHtml ( a ) ; return a . getHtml ( ) } , split : function ( a ) { for ( var b = this . children . splice ( a , this . children . length - a ) , d = this . clone ( ) , l = 0 ; l < b . length ; ++ l ) b [ l ] . parent = d ; d . children = b ; b [ 0 ] && ( b [ 0 ] . previous = null ) ; 0 < a && ( this . children [ a - 1 ] . next = null ) ; this . parent . add ( d , this . getIndex ( ) + 1 ) ; return d } , addClass : function ( a ) { if ( ! this . hasClass ( a ) ) { var b = this . attributes [ "class" ] || "" ; this . attributes [ "class" ] = b + ( b ? " " : "" ) + a } } , removeClass : function ( a ) { var b = this . attributes [ "class" ] ; b && ( ( b =
new CKEDITOR . htmlParser . basicWriter ; this . writeHtml ( a ) ; return a . getHtml ( ) } , split : function ( a ) { for ( var b = this . children . splice ( a , this . children . length - a ) , d = this . clone ( ) , k = 0 ; k < b . length ; ++ k ) b [ k ] . parent = d ; d . children = b ; b [ 0 ] && ( b [ 0 ] . previous = null ) ; 0 < a && ( this . children [ a - 1 ] . next = null ) ; this . parent . add ( d , this . getIndex ( ) + 1 ) ; return d } , addClass : function ( a ) { if ( ! this . hasClass ( a ) ) { var b = this . attributes [ "class" ] || "" ; this . attributes [ "class" ] = b + ( b ? " " : "" ) + a } } , removeClass : function ( a ) { var b = this . attributes [ "class" ] ; b && ( ( b =
CKEDITOR . tools . trim ( b . replace ( new RegExp ( "(?:\\s+|^)" + a + "(?:\\s+|$)" ) , " " ) ) ) ? this . attributes [ "class" ] = b : delete this . attributes [ "class" ] ) } , hasClass : function ( a ) { var b = this . attributes [ "class" ] ; return b ? ( new RegExp ( "(?:^|\\s)" + a + "(?\x3d\\s|$)" ) ) . test ( b ) : ! 1 } , getFilterContext : function ( a ) { var b = [ ] ; a || ( a = { off : ! 1 , nonEditable : ! 1 , nestedEditable : ! 1 } ) ; a . off || "off" != this . attributes [ "data-cke-processor" ] || b . push ( "off" , ! 0 ) ; a . nonEditable || "false" != this . attributes . contenteditable ? a . nonEditable && ! a . nestedEditable &&
"true" == this . attributes . contenteditable && b . push ( "nestedEditable" , ! 0 ) : b . push ( "nonEditable" , ! 0 ) ; if ( b . length ) { a = CKEDITOR . tools . copy ( a ) ; for ( var d = 0 ; d < b . length ; d += 2 ) a [ b [ d ] ] = b [ d + 1 ] } return a } } , ! 0 ) } ) ( ) ;
( function ( ) { var a = { } , d = /{([^}]+)}/g , b = /([\\'])/g , c = /\n/g , e = /\r/g ; CKEDITOR . template = function ( g ) { if ( a [ g ] ) this . output = a [ g ] ; else { var l = g . replace ( b , "\\$1" ) . replace ( c , "\\n" ) . replace ( e , "\\r" ) . replace ( d , function ( a , b ) { return "',data['" + b + "']\x3d\x3dundefined?'{" + b + "}':data['" + b + "'],'" } ) ; this . output = a [ g ] = Function ( "data" , "buffer" , "return buffer?buffer.push('" + l + "'):['" + l + "'].join('');" ) } } } ) ( ) ; delete CKEDITOR . loadFullCore ; CKEDITOR . instances = { } ; CKEDITOR . document = new CKEDITOR . dom . document ( document ) ;
( function ( ) { var a = { } , d = /{([^}]+)}/g , b = /([\\'])/g , c = /\n/g , e = /\r/g ; CKEDITOR . template = function ( g ) { if ( a [ g ] ) this . output = a [ g ] ; else { var k = g . replace ( b , "\\$1" ) . replace ( c , "\\n" ) . replace ( e , "\\r" ) . replace ( d , function ( a , b ) { return "',data['" + b + "']\x3d\x3dundefined?'{" + b + "}':data['" + b + "'],'" } ) ; this . output = a [ g ] = Function ( "data" , "buffer" , "return buffer?buffer.push('" + k + "'):['" + k + "'].join('');" ) } } } ) ( ) ; delete CKEDITOR . loadFullCore ; CKEDITOR . instances = { } ; CKEDITOR . document = new CKEDITOR . dom . document ( document ) ;
CKEDITOR . add = function ( a ) { CKEDITOR . instances [ a . name ] = a ; a . on ( "focus" , function ( ) { CKEDITOR . currentInstance != a && ( CKEDITOR . currentInstance = a , CKEDITOR . fire ( "currentInstance" ) ) } ) ; a . on ( "blur" , function ( ) { CKEDITOR . currentInstance == a && ( CKEDITOR . currentInstance = null , CKEDITOR . fire ( "currentInstance" ) ) } ) ; CKEDITOR . fire ( "instance" , null , a ) } ; CKEDITOR . remove = function ( a ) { delete CKEDITOR . instances [ a . name ] } ;
( function ( ) { var a = { } ; CKEDITOR . addTemplate = function ( d , b ) { var c = a [ d ] ; if ( c ) return c ; c = { name : d , source : b } ; CKEDITOR . fire ( "template" , c ) ; return a [ d ] = new CKEDITOR . template ( c . source ) } ; CKEDITOR . getTemplate = function ( d ) { return a [ d ] } } ) ( ) ; ( function ( ) { var a = [ ] ; CKEDITOR . addCss = function ( d ) { a . push ( d ) } ; CKEDITOR . getCss = function ( ) { return a . join ( "\n" ) } } ) ( ) ; CKEDITOR . on ( "instanceDestroyed" , function ( ) { CKEDITOR . tools . isEmpty ( this . instances ) && CKEDITOR . fire ( "reset" ) } ) ; CKEDITOR . TRISTATE _ON = 1 ; CKEDITOR . TRISTATE _OFF = 2 ;
CKEDITOR . TRISTATE _DISABLED = 0 ;
( function ( ) { CKEDITOR . inline = function ( a , d ) { if ( ! CKEDITOR . env . isCompatible ) return null ; a = CKEDITOR . dom . element . get ( a ) ; if ( a . getEditor ( ) ) throw 'The editor instance "' + a . getEditor ( ) . name + '" is already attached to the provided element.' ; var b = new CKEDITOR . editor ( d , a , CKEDITOR . ELEMENT _MODE _INLINE ) , c = a . is ( "textarea" ) ? a : null ; c ? ( b . setData ( c . getValue ( ) , null , ! 0 ) , a = CKEDITOR . dom . element . createFromHtml ( '\x3cdiv contenteditable\x3d"' + ! ! b . readOnly + '" class\x3d"cke_textarea_inline"\x3e' + c . getValue ( ) + "\x3c/div\x3e" , CKEDITOR . document ) ,
a . insertAfter ( c ) , c . hide ( ) , c . $ . form && b . _attachToForm ( ) ) : b . setData ( a . getHtml ( ) , null , ! 0 ) ; b . on ( "loaded" , function ( ) { b . fire ( "uiReady" ) ; b . editable ( a ) ; b . container = a ; b . ui . contentsElement = a ; b . setData ( b . getData ( 1 ) ) ; b . resetDirty ( ) ; b . fire ( "contentDom" ) ; b . mode = "wysiwyg" ; b . fire ( "mode" ) ; b . status = "ready" ; b . fireOnce ( "instanceReady" ) ; CKEDITOR . fire ( "instanceReady" , null , b ) } , null , null , 1E4 ) ; b . on ( "destroy" , function ( ) { c && ( b . container . clearCustomData ( ) , b . container . remove ( ) , c . show ( ) ) ; b . element . clearCustomData ( ) ; delete b . element } ) ;
return b } ; CKEDITOR . inlineAll = function ( ) { var a , d , b ; for ( b in CKEDITOR . dtd . $editable ) for ( var c = CKEDITOR . document . getElementsByTag ( b ) , e = 0 , g = c . count ( ) ; e < g ; e ++ ) a = c . getItem ( e ) , "true" == a . getAttribute ( "contenteditable" ) && ( d = { element : a , config : { } } , ! 1 !== CKEDITOR . fire ( "inline" , d ) && CKEDITOR . inline ( a , d . config ) ) } ; CKEDITOR . domReady ( function ( ) { ! CKEDITOR . disableAutoInline && CKEDITOR . inlineAll ( ) } ) } ) ( ) ; CKEDITOR . replaceClass = "ckeditor" ;
( function ( ) { function a ( a , e , g , l ) { if ( ! CKEDITOR . env . isCompatible ) return null ; a = CKEDITOR . dom . element . get ( a ) ; if ( a . getEditor ( ) ) throw 'The editor instance "' + a . getEditor ( ) . name + '" is already attached to the provided element.' ; var k = new CKEDITOR . editor ( e , a , l ) ; l == CKEDITOR . ELEMENT _MODE _REPLACE && ( a . setStyle ( "visibility" , "hidden" ) , k . _ . required = a . hasAttribute ( "required" ) , a . removeAttribute ( "required" ) ) ; g && k . setData ( g , null , ! 0 ) ; k . on ( "loaded" , function ( ) { b ( k ) ; l == CKEDITOR . ELEMENT _MODE _REPLACE && k . config . autoUpdateElement &&
a . $ . form && k . _attachToForm ( ) ; k . setMode ( k . config . startupMode , function ( ) { k . resetDirty ( ) ; k . status = "ready" ; k . fireOnce ( "instanceReady" ) ; CKEDITOR . fire ( "instanceReady" , null , k ) } ) } ) ; k . on ( "destroy" , d ) ; return k } function d ( ) { var a = this . container , b = this . element ; a && ( a . clearCustomData ( ) , a . remove ( ) ) ; b && ( b . clearCustomData ( ) , this . elementMode == CKEDITOR . ELEMENT _MODE _REPLACE && ( b . show ( ) , this . _ . required && b . setAttribute ( "required" , "required" ) ) , delete this . element ) } function b ( a ) { var b = a . name , d = a . element , l = a . elementMode , k =
a . fire ( "uiSpace" , { space : "top" , html : "" } ) . html , q = a . fire ( "uiSpace" , { space : "bottom" , html : "" } ) . html , w = new CKEDITOR . template ( '\x3c{outerEl} id\x3d"cke_{name}" class\x3d"{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} ' + CKEDITOR . env . cssClass + '" dir\x3d"{langDir}" lang\x3d"{langCode}" role\x3d"application"' + ( a . title ? ' aria-labelledby\x3d"cke_{name}_arialbl"' : "" ) + "\x3e" + ( a . title ? '\x3cspan id\x3d"cke_{name}_arialbl" class\x3d"cke_voice_label"\x3e{voiceLabel}\x3c/span\x3e' : "" ) + '\x3c{outerEl} class\x3d"cke_inner cke_reset" role\x3d"presentation"\x3e{topHtml}\x3c{outerEl} id\x3d"{contentId}" class\x3d"cke_contents cke_reset" role\x3d"presentation"\x3e\x3c/{outerEl}\x3e{bottomHtml}\x3c/{outerEl}\x3e\x3c/{outerEl}\x3e' ) ,
b = CKEDITOR . dom . element . createFromHtml ( w . output ( { id : a . id , name : b , langDir : a . lang . dir , langCode : a . langCode , voiceLabel : a . title , topHtml : k ? '\x3cspan id\x3d"' + a . ui . spaceId ( "top" ) + '" class\x3d"cke_top cke_reset_all" role\x3d"presentation" style\x3d"height:auto"\x3e' + k + "\x3c/span\x3e" : "" , contentId : a . ui . spaceId ( "contents" ) , bottomHtml : q ? '\x3cspan id\x3d"' + a . ui . spaceId ( "bottom" ) + '" class\x3d"cke_bottom cke_reset_all" role\x3d"presentation"\x3e' + q + "\x3c/span\x3e" : "" , outerEl : CKEDITOR . env . ie ? "span" : "div" } ) ) ; l == CKEDITOR . ELEMENT _MODE _REPLACE ?
( d . hide ( ) , b . insertAfter ( d ) ) : d . append ( b ) ; a . container = b ; a . ui . contentsElement = a . ui . space ( "contents" ) ; k && a . ui . space ( "top" ) . unselectable ( ) ; q && a . ui . space ( "bottom" ) . unselectable ( ) ; d = a . config . width ; l = a . config . height ; d && b . setStyle ( "width" , CKEDITOR . tools . cssLength ( d ) ) ; l && a . ui . space ( "contents" ) . setStyle ( "height" , CKEDITOR . tools . cssLength ( l ) ) ; b . disableContextMenu ( ) ; CKEDITOR . env . webkit && b . on ( "focus" , function ( ) { a . focus ( ) } ) ; a . fireOnce ( "uiReady" ) } CKEDITOR . replace = function ( b , d ) { return a ( b , d , null , CKEDITOR . ELEMENT _MODE _REPLACE ) } ;
CKEDITOR . appendTo = function ( b , d , g ) { return a ( b , d , g , CKEDITOR . ELEMENT _MODE _APPENDTO ) } ; CKEDITOR . replaceAll = function ( ) { for ( var a = document . getElementsByTagName ( "textarea" ) , b = 0 ; b < a . length ; b ++ ) { var d = null , l = a [ b ] ; if ( l . name || l . id ) { if ( "string" == typeof arguments [ 0 ] ) { if ( ! ( new RegExp ( "(?:^|\\s)" + arguments [ 0 ] + "(?:$|\\s)" ) ) . test ( l . className ) ) continue } else if ( "function" == typeof arguments [ 0 ] && ( d = { } , ! 1 === arguments [ 0 ] ( l , d ) ) ) continue ; this . replace ( l , d ) } } } ; CKEDITOR . editor . prototype . addMode = function ( a , b ) { ( this . _ . modes || ( this . _ . modes =
{ } ) ) [ a ] = b } ; CKEDITOR . editor . prototype . setMode = function ( a , b ) { var d = this , l = this . _ . modes ; if ( a != d . mode && l && l [ a ] ) { d . fire ( "beforeSetMode" , a ) ; if ( d . mode ) { var k = d . checkDirty ( ) , l = d . _ . previousModeData , q , w = 0 ; d . fire ( "beforeModeUnload" ) ; d . editable ( 0 ) ; d . _ . previousMode = d . mode ; d . _ . previousModeData = q = d . getData ( 1 ) ; "source" == d . mode && l == q && ( d . fire ( "lockSnapshot" , { forceUpdate : ! 0 } ) , w = 1 ) ; d . ui . space ( "contents" ) . setHtml ( "" ) ; d . mode = "" } else d . _ . previousModeData = d . getData ( 1 ) ; this . _ . modes [ a ] ( function ( ) { d . mode = a ; void 0 !== k && ! k &&
d . resetDirty ( ) ; w ? d . fire ( "unlockSnapshot" ) : "wysiwyg" == a && d . fire ( "saveSnapshot" ) ; setTimeout ( function ( ) { d . fire ( "mode" ) ; b && b . call ( d ) } , 0 ) } ) } } ; CKEDITOR . editor . prototype . resize = function ( a , b , d , l ) { var k = this . container , q = this . ui . space ( "contents" ) , w = CKEDITOR . env . webkit && this . document && this . document . getWindow ( ) . $ . frameElement ; l = l ? this . container . getFirst ( function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasClass ( "cke_inner" ) } ) : k ; l . setSize ( "width" , a , ! 0 ) ; w && ( w . style . width = "1%" ) ; var f = ( l . $ . offsetHeight || 0 ) - ( q . $ . clientHeight ||
0 ) , k = Math . max ( b - ( d ? 0 : f ) , 0 ) ; b = d ? b + f : b ; q . setStyle ( "height" , k + "px" ) ; w && ( w . style . width = "100%" ) ; this . fire ( "resize" , { outerHeight : b , contentsHeight : k , outerWidth : a || l . 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 , m = e . blockLimit , f = a . data . selection , g = f . getRanges ( ) [ 0 ] , E ; if ( CKEDITOR . env . gecko || CKEDITOR . env . ie && CKEDITOR . env . needsBrFiller ) if ( f = d ( f , e ) ) f . appendBogus ( ) , E = CKEDITOR . env . ie ; l ( b , e . block , m ) && g . collapsed && ! g . getCommonAncestor ( ) . isReadOnly ( ) && ( e = g . clone ( ) , e . enlarge ( CKEDITOR . ENLARGE _BLOCK _CONTENTS ) , m = new CKEDITOR . dom . walker ( e ) , m . guard = function ( a ) { return ! c ( a ) || a . type == CKEDITOR . NODE _COMMENT || a . isReadOnly ( ) } , ! m . checkForward ( ) || e . checkStartOfBlock ( ) && e . checkEndOfBlock ( ) ) &&
( b = g . 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 ( ) , E = 1 , a . cancel ( ) ) ; E && g . 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 f ( a ) && y ( a ) } function e ( 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 g ( a ) { function b ( a ) { return function ( b , h ) { h && b . type == CKEDITOR . NODE _ELEMENT && b . is ( f ) && ( d = b ) ; if ( ! ( h || ! c ( b ) || a && t ( b ) ) ) return ! 1 } } var d , e = a . getRanges ( ) [ 0 ] ; a = a . root ;
var f = { table : 1 , ul : 1 , ol : 1 , dl : 1 } ; if ( e . startPath ( ) . contains ( f ) ) { var g = e . clone ( ) ; g . collapse ( 1 ) ; g . setStartAt ( a , CKEDITOR . POSITION _AFTER _START ) ; a = new CKEDITOR . dom . walker ( g ) ; a . guard = b ( ) ; a . checkBackward ( ) ; if ( d ) return g = e . clone ( ) , g . collapse ( ) , g . setEndAt ( d , CKEDITOR . POSITION _AFTER _END ) , a = new CKEDITOR . dom . walker ( g ) , a . guard = b ( ! 0 ) , d = ! 1 , a . checkForward ( ) , d } return null } function l ( a , b , c ) { return ! 1 !== a . config . autoParagraph && a . activeEnterMode != CKEDITOR . ENTER _BR && ( a . editable ( ) . equals ( c ) && ! b || b && "true" == b . getAttribute ( "contenteditable" ) ) }
function k ( a ) { return a . activeEnterMode != CKEDITOR . ENTER _BR && ! 1 !== a . config . autoParagraph ? a . activeEnterMode == CKEDITOR . ENTER _DIV ? "div" : "p" : ! 1 } function q ( a ) { var b = a . editor ; b . getSelection ( ) . scrollIntoView ( ) ; setTimeout ( function ( ) { b . fire ( "saveSnapshot" ) } , 0 ) } function w ( 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 f , y , A , t , D , p , x , G , u ; CKEDITOR . editable = CKEDITOR . tools . createClass ( { base : CKEDITOR . dom . element , $ : function ( a , b ) { this . base ( b . $ ||
( function ( ) { function a ( a , e , g , k ) { if ( ! CKEDITOR . env . isCompatible ) return null ; a = CKEDITOR . dom . element . get ( a ) ; if ( a . getEditor ( ) ) throw 'The editor instance "' + a . getEditor ( ) . name + '" is already attached to the provided element.' ; var l = new CKEDITOR . editor ( e , a , k ) ; k == CKEDITOR . ELEMENT _MODE _REPLACE && ( a . setStyle ( "visibility" , "hidden" ) , l . _ . required = a . hasAttribute ( "required" ) , a . removeAttribute ( "required" ) ) ; g && l . setData ( g , null , ! 0 ) ; l . on ( "loaded" , function ( ) { b ( l ) ; k == CKEDITOR . ELEMENT _MODE _REPLACE && l . config . autoUpdateElement &&
a . $ . form && l . _attachToForm ( ) ; l . setMode ( l . config . startupMode , function ( ) { l . resetDirty ( ) ; l . status = "ready" ; l . fireOnce ( "instanceReady" ) ; CKEDITOR . fire ( "instanceReady" , null , l ) } ) } ) ; l . on ( "destroy" , d ) ; return l } function d ( ) { var a = this . container , b = this . element ; a && ( a . clearCustomData ( ) , a . remove ( ) ) ; b && ( b . clearCustomData ( ) , this . elementMode == CKEDITOR . ELEMENT _MODE _REPLACE && ( b . show ( ) , this . _ . required && b . setAttribute ( "required" , "required" ) ) , delete this . element ) } function b ( a ) { var b = a . name , d = a . element , k = a . elementMode , l =
a . fire ( "uiSpace" , { space : "top" , html : "" } ) . html , q = a . fire ( "uiSpace" , { space : "bottom" , html : "" } ) . html , v = new CKEDITOR . template ( '\x3c{outerEl} id\x3d"cke_{name}" class\x3d"{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} ' + CKEDITOR . env . cssClass + '" dir\x3d"{langDir}" lang\x3d"{langCode}" role\x3d"application"' + ( a . title ? ' aria-labelledby\x3d"cke_{name}_arialbl"' : "" ) + "\x3e" + ( a . title ? '\x3cspan id\x3d"cke_{name}_arialbl" class\x3d"cke_voice_label"\x3e{voiceLabel}\x3c/span\x3e' : "" ) + '\x3c{outerEl} class\x3d"cke_inner cke_reset" role\x3d"presentation"\x3e{topHtml}\x3c{outerEl} id\x3d"{contentId}" class\x3d"cke_contents cke_reset" role\x3d"presentation"\x3e\x3c/{outerEl}\x3e{bottomHtml}\x3c/{outerEl}\x3e\x3c/{outerEl}\x3e' ) ,
b = CKEDITOR . dom . element . createFromHtml ( v . output ( { id : a . id , name : b , langDir : a . lang . dir , langCode : a . langCode , voiceLabel : a . title , topHtml : l ? '\x3cspan id\x3d"' + a . ui . spaceId ( "top" ) + '" class\x3d"cke_top cke_reset_all" role\x3d"presentation" style\x3d"height:auto"\x3e' + l + "\x3c/span\x3e" : "" , contentId : a . ui . spaceId ( "contents" ) , bottomHtml : q ? '\x3cspan id\x3d"' + a . ui . spaceId ( "bottom" ) + '" class\x3d"cke_bottom cke_reset_all" role\x3d"presentation"\x3e' + q + "\x3c/span\x3e" : "" , outerEl : CKEDITOR . env . ie ? "span" : "div" } ) ) ; k == CKEDITOR . ELEMENT _MODE _REPLACE ?
( d . hide ( ) , b . insertAfter ( d ) ) : d . append ( b ) ; a . container = b ; a . ui . contentsElement = a . ui . space ( "contents" ) ; l && a . ui . space ( "top" ) . unselectable ( ) ; q && a . ui . space ( "bottom" ) . unselectable ( ) ; d = a . config . width ; k = a . config . height ; d && b . setStyle ( "width" , CKEDITOR . tools . cssLength ( d ) ) ; k && a . ui . space ( "contents" ) . setStyle ( "height" , CKEDITOR . tools . cssLength ( k ) ) ; b . disableContextMenu ( ) ; CKEDITOR . env . webkit && b . on ( "focus" , function ( ) { a . focus ( ) } ) ; a . fireOnce ( "uiReady" ) } CKEDITOR . replace = function ( b , d ) { return a ( b , d , null , CKEDITOR . ELEMENT _MODE _REPLACE ) } ;
CKEDITOR . appendTo = function ( b , d , g ) { return a ( b , d , g , CKEDITOR . ELEMENT _MODE _APPENDTO ) } ; CKEDITOR . replaceAll = function ( ) { for ( var a = document . getElementsByTagName ( "textarea" ) , b = 0 ; b < a . length ; b ++ ) { var d = null , k = a [ b ] ; if ( k . name || k . id ) { if ( "string" == typeof arguments [ 0 ] ) { if ( ! ( new RegExp ( "(?:^|\\s)" + arguments [ 0 ] + "(?:$|\\s)" ) ) . test ( k . className ) ) continue } else if ( "function" == typeof arguments [ 0 ] && ( d = { } , ! 1 === arguments [ 0 ] ( k , d ) ) ) continue ; this . replace ( k , d ) } } } ; CKEDITOR . editor . prototype . addMode = function ( a , b ) { ( this . _ . modes || ( this . _ . modes =
{ } ) ) [ a ] = b } ; CKEDITOR . editor . prototype . setMode = function ( a , b ) { var d = this , k = this . _ . modes ; if ( a != d . mode && k && k [ a ] ) { d . fire ( "beforeSetMode" , a ) ; if ( d . mode ) { var l = d . checkDirty ( ) , k = d . _ . previousModeData , q , v = 0 ; d . fire ( "beforeModeUnload" ) ; d . editable ( 0 ) ; d . _ . previousMode = d . mode ; d . _ . previousModeData = q = d . getData ( 1 ) ; "source" == d . mode && k == q && ( d . fire ( "lockSnapshot" , { forceUpdate : ! 0 } ) , v = 1 ) ; d . ui . space ( "contents" ) . setHtml ( "" ) ; d . mode = "" } else d . _ . previousModeData = d . getData ( 1 ) ; this . _ . modes [ a ] ( function ( ) { d . mode = a ; void 0 !== l && ! l &&
d . resetDirty ( ) ; v ? d . fire ( "unlockSnapshot" ) : "wysiwyg" == a && d . fire ( "saveSnapshot" ) ; setTimeout ( function ( ) { d . fire ( "mode" ) ; b && b . call ( d ) } , 0 ) } ) } } ; CKEDITOR . editor . prototype . resize = function ( a , b , d , k ) { var l = this . container , q = this . ui . space ( "contents" ) , v = CKEDITOR . env . webkit && this . document && this . document . getWindow ( ) . $ . frameElement ; k = k ? this . container . getFirst ( function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasClass ( "cke_inner" ) } ) : l ; k . setSize ( "width" , a , ! 0 ) ; v && ( v . style . width = "1%" ) ; var f = ( k . $ . offsetHeight || 0 ) - ( q . $ . clientHeight ||
0 ) , l = Math . max ( b - ( d ? 0 : f ) , 0 ) ; b = d ? b + f : b ; q . setStyle ( "height" , l + "px" ) ; v && ( v . style . width = "100%" ) ; this . fire ( "resize" , { outerHeight : b , contentsHeight : l , 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 , m = e . blockLimit , f = a . data . selection , g = f . getRanges ( ) [ 0 ] , F ; if ( CKEDITOR . env . gecko || CKEDITOR . env . ie && CKEDITOR . env . needsBrFiller ) if ( f = d ( f , e ) ) f . appendBogus ( ) , F = CKEDITOR . env . ie ; k ( b , e . block , m ) && g . collapsed && ! g . getCommonAncestor ( ) . isReadOnly ( ) && ( e = g . clone ( ) , e . enlarge ( CKEDITOR . ENLARGE _BLOCK _CONTENTS ) , m = new CKEDITOR . dom . walker ( e ) , m . guard = function ( a ) { return ! c ( a ) || a . type == CKEDITOR . NODE _COMMENT || a . isReadOnly ( ) } , ! m . checkForward ( ) || e . checkStartOfBlock ( ) && e . checkEndOfBlock ( ) ) &&
( b = g . 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 ( ) , F = 1 , a . cancel ( ) ) ; F && g . 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 f ( a ) && y ( a ) } function e ( 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 g ( a ) { function b ( a ) { return function ( b , h ) { h && b . type == CKEDITOR . NODE _ELEMENT && b . is ( f ) && ( d = b ) ; if ( ! ( h || ! c ( b ) || a && r ( 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 l ( a ) { return a . activeEnterMode != CKEDITOR . ENTER _BR && ! 1 !== a . config . autoParagraph ? a . activeEnterMode == CKEDITOR . ENTER _DIV ? "div" : "p" : ! 1 } function q ( a ) { var b = a . editor ; b . getSelection ( ) . scrollIntoView ( ) ; setTimeout ( function ( ) { b . fire ( "saveSnapshot" ) } , 0 ) } function v ( 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 f , y , A , r , D , n , w , H , u ; 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 } try { this . $ [ CKEDITOR . env . ie && this . getDocument ( ) . equals ( CKEDITOR . document ) ? "setActive" : "focus" ] ( ) } catch ( b ) { if ( ! CKEDITOR . env . ie ) throw b ; } 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 = e ( 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 ] ) ; p ( this , b || "html" , a , c ) ; c . select ( ) ; q ( this ) ; this . editor . fire ( "afterInsertHtml" , { } ) } , insertHtmlIntoRange : function ( a , b , c ) { p ( 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 ) && ! t ( 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 ] ) ; q ( 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 } ) && x ( b ) ; var g , l ; if ( f ) for ( ; ( g = b . getCommonAncestor ( 0 , 1 ) ) && ( l = CKEDITOR . dtd [ g . getName ( ) ] ) &&
( ! l || ! l [ e ] ) ; ) g . getName ( ) in CKEDITOR . dtd . span ? b . splitElement ( g ) : b . checkStartOfBlock ( ) && b . checkEndOfBlock ( ) ? ( b . setStartBefore ( g ) , b . collapse ( ! 0 ) , g . remove ( ) ) : b . splitBlock ( d == CKEDITOR . ENTER _DIV ? "div" : "p" , c . editable ( ) ) ; b . insertNode ( a ) ; return ! 0 } , setData : function ( a , b ) { b || ( a = this . editor . dataProcessor . toHtml ( a ) ) ; this . setHtml ( a ) ; this . fixInitialSelection ( ) ; "unloaded" == this . status && ( this . status = "ready" ) ; this . editor . fire ( "dataReady" ) } , getData : function ( a ) { var b = this . getHtml ( ) ; a || ( b = this . editor . dataProcessor . toDataFormat ( b ) ) ;
"text" ) } , transformPlainTextToHtml : function ( a ) { var b = this . editor . getSelection ( ) . getStartElement ( ) . hasAscendant ( "pre" , ! 0 ) ? CKEDITOR . ENTER _BR : this . editor . activeEnterMode ; return CKEDITOR . tools . transformPlainTextToHtml ( a , b ) } , insertHtml : function ( a , b , c ) { var d = this . editor ; d . focus ( ) ; d . fire ( "saveSnapshot" ) ; c || ( c = d . getSelection ( ) . getRanges ( ) [ 0 ] ) ; n ( this , b || "html" , a , c ) ; c . select ( ) ; q ( this ) ; this . editor . fire ( "afterInsertHtml" , { } ) } , insertHtmlIntoRange : function ( a , b , c ) { n ( this , c || "html" , a , b ) ; this . editor . fire ( "afterInsertHtml" ,
{ intoRange : b } ) } , insertElement : function ( a , b ) { var d = this . editor ; d . focus ( ) ; d . fire ( "saveSnapshot" ) ; var e = d . activeEnterMode , d = d . getSelection ( ) , 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 ) && ! r ( 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 ] ) ; q ( 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 } ) && w ( b ) ; var g , k ; if ( f ) for ( ; ( g = b . getCommonAncestor ( 0 , 1 ) ) && ( k = CKEDITOR . dtd [ g . getName ( ) ] ) &&
( ! k || ! k [ e ] ) ; ) g . getName ( ) in CKEDITOR . dtd . span ? b . splitElement ( g ) : b . checkStartOfBlock ( ) && b . checkEndOfBlock ( ) ? ( b . setStartBefore ( g ) , b . collapse ( ! 0 ) , g . remove ( ) ) : b . splitBlock ( d == CKEDITOR . ENTER _DIV ? "div" : "p" , c . editable ( ) ) ; b . insertNode ( a ) ; return ! 0 } , setData : function ( a , b ) { b || ( a = this . editor . dataProcessor . toHtml ( a ) ) ; this . setHtml ( a ) ; this . fixInitialSelection ( ) ; "unloaded" == this . status && ( this . status = "ready" ) ; this . editor . fire ( "dataReady" ) } , getData : function ( a ) { var b = this . getHtml ( ) ; a || ( b = this . editor . dataProcessor . toDataFormat ( b ) ) ;
return b } , setReadOnly : function ( a ) { this . setAttribute ( "contenteditable" , ! a ) } , detach : function ( ) { this . 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 ( ) , h ; a : if ( d . anchorNode && d . anchorNode == c . $ ) h = ! 0 ; else { if ( CKEDITOR . env . webkit && ( h = c . getDocument ( ) . getActive ( ) ) && h . equals ( c ) && ! d . anchorNode ) { h =
! 0 ; break a } h = void 0 } h && ( h = new CKEDITOR . dom . range ( c ) , h . moveToElementEditStart ( c ) , b = b . createRange ( ) , b . setStart ( h . startContainer . $ , h . startOffset ) , b . collapse ( ! 0 ) , d . removeAllRanges ( ) , d . addRange ( b ) ) } function b ( ) { var a = c . getDocument ( ) . $ , d = a . selection , h = c . getDocument ( ) . getActive ( ) ; "None" == d . type && h . equals ( c ) && ( d = new CKEDITOR . dom . range ( c ) , a = a . body . createTextRange ( ) , d . moveToElementEditStart ( c ) , d = d . startContainer , d . type != CKEDITOR . NODE _ELEMENT && ( d = d . getParent ( ) ) , a . moveToElementText ( d . $ ) , a . collapse ( ! 0 ) , a . select ( ) ) }
var c = this ; if ( CKEDITOR . env . ie && ( 9 > CKEDITOR . env . version || CKEDITOR . env . quirks ) ) this . hasFocus && ( this . focus ( ) , b ( ) ) ; else if ( this . hasFocus ) this . focus ( ) , a ( ) ; else this . once ( "focus" , function ( ) { a ( ) } , null , null , - 999 ) } , getHtmlFromRange : function ( a ) { if ( a . collapsed ) return new CKEDITOR . dom . documentFragment ( a . document ) ; a = { doc : this . getDocument ( ) , range : a . clone ( ) } ; G . eol . detect ( a , this ) ; G . bogus . exclude ( a ) ; G . cell . shrink ( a ) ; a . fragment = a . range . cloneContents ( ) ; G . tree . rebuild ( a , this ) ; G . eol . fix ( a , this ) ; return new CKEDITOR . dom . documentFragment ( a . fragment . $ ) } ,
var c = this ; if ( CKEDITOR . env . ie && ( 9 > CKEDITOR . env . version || CKEDITOR . env . quirks ) ) this . hasFocus && ( this . focus ( ) , b ( ) ) ; else if ( this . hasFocus ) this . focus ( ) , a ( ) ; else this . once ( "focus" , function ( ) { a ( ) } , null , null , - 999 ) } , getHtmlFromRange : function ( a ) { if ( a . collapsed ) return new CKEDITOR . dom . documentFragment ( a . document ) ; a = { doc : this . getDocument ( ) , range : a . clone ( ) } ; H . eol . detect ( a , this ) ; H . bogus . exclude ( a ) ; H . cell . shrink ( a ) ; a . fragment = a . range . cloneContents ( ) ; H . tree . rebuild ( a , this ) ; H . eol . fix ( a , this ) ; return new CKEDITOR . dom . documentFragment ( a . fragment . $ ) } ,
extractHtmlFromRange : function ( a , b ) { var c = u , d = { range : a , doc : a . document } , e = this . getHtmlFromRange ( a ) ; if ( a . collapsed ) return a . optimize ( ) , e ; a . enlarge ( CKEDITOR . ENLARGE _INLINE , 1 ) ; c . table . detectPurge ( d ) ; d . bookmark = a . createBookmark ( ) ; delete d . range ; var f = this . editor . createRange ( ) ; f . moveToPosition ( d . bookmark . startNode , CKEDITOR . POSITION _BEFORE _START ) ; d . targetBookmark = f . createBookmark ( ) ; c . list . detectMerge ( d , this ) ; c . table . detectRanges ( d , this ) ; c . block . detectMerge ( d , this ) ; d . tableContentsRanges ? ( c . table . deleteRanges ( d ) ,
a . moveToBookmark ( d . bookmark ) , d . range = a ) : ( a . moveToBookmark ( d . bookmark ) , d . range = a , a . extractContents ( c . detectExtractMerge ( d ) ) ) ; a . moveToBookmark ( d . targetBookmark ) ; a . optimize ( ) ; c . fixUneditableRangePosition ( a ) ; c . list . merge ( d , this ) ; c . table . purge ( d , this ) ; c . block . merge ( d , this ) ; if ( b ) { c = a . startPath ( ) ; if ( d = a . checkStartOfBlock ( ) && a . checkEndOfBlock ( ) && c . block && ! a . root . equals ( c . block ) ) { a : { var d = c . block . getElementsByTag ( "span" ) , f = 0 , g ; if ( d ) for ( ; g = d . getItem ( f ++ ) ; ) if ( ! y ( g ) ) { d = ! 0 ; break a } d = ! 1 } d = ! d } d && ( a . moveToPosition ( c . block ,
CKEDITOR . POSITION _BEFORE _START ) , c . block . remove ( ) ) } else c . autoParagraph ( this . editor , a ) , A ( a . startContainer ) && a . startContainer . appendBogus ( ) ; a . startContainer . mergeSiblings ( ) ; return e } , setup : function ( ) { var a = this . editor ; this . attachListener ( a , "beforeGetData" , function ( ) { var b = this . getData ( ) ; this . is ( "textarea" ) || ! 1 !== a . config . ignoreEmptyParagraph && ( b = b . replace ( D , function ( a , b ) { return b } ) ) ; a . setData ( b , null , 1 ) } , this ) ; this . attachListener ( a , "getSnapshot" , function ( a ) { a . data = this . getData ( 1 ) } , this ) ; this . attachListener ( a ,
"afterSetData" , function ( ) { this . setData ( a . getData ( 1 ) ) } , this ) ; this . attachListener ( a , "loadSnapshot" , function ( a ) { this . setData ( a . data , 1 ) } , this ) ; this . attachListener ( a , "beforeFocus" , function ( ) { var b = a . getSelection ( ) ; ( b = b && b . getNative ( ) ) && "Control" == b . type || this . focus ( ) } , this ) ; this . attachListener ( a , "insertHtml" , function ( a ) { this . insertHtml ( a . data . dataValue , a . data . mode , a . data . range ) } , this ) ; this . attachListener ( a , "insertElement" , function ( a ) { this . insertElement ( a . data ) } , this ) ; this . attachListener ( a , "insertText" ,
function ( a ) { this . insertText ( a . data ) } , this ) ; this . setReadOnly ( a . readOnly ) ; this . attachClass ( "cke_editable" ) ; a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? this . attachClass ( "cke_editable_inline" ) : a . elementMode != CKEDITOR . ELEMENT _MODE _REPLACE && a . elementMode != CKEDITOR . ELEMENT _MODE _APPENDTO || this . attachClass ( "cke_editable_themed" ) ; this . attachClass ( "cke_contents_" + a . config . contentsLangDirection ) ; a . keystrokeHandler . blockedKeystrokes [ 8 ] = + a . readOnly ; a . keystrokeHandler . attach ( this ) ; this . on ( "blur" , function ( ) { this . hasFocus =
! 1 } , null , null , - 1 ) ; this . on ( "focus" , function ( ) { this . hasFocus = ! 0 } , null , null , - 1 ) ; 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 d = a . document ; this . changeAttr ( "spellcheck" , ! a . config . disableNativeSpellChecker ) ; var e = a . config . contentsLangDirection ; this . getDirection ( 1 ) !=
e && this . changeAttr ( "dir" , e ) ; var m = CKEDITOR . getCss ( ) ; if ( m ) { var e = d . getHead ( ) , l = e . getCustomData ( "stylesheet" ) ; l ? m != l . getText ( ) && ( CKEDITOR . env . ie && 9 > CKEDITOR . env . version ? l . $ . styleSheet . cssText = m : l . setText ( m ) ) : ( m = d . appendStyleText ( m ) , m = new CKEDITOR . dom . element ( m . ownerNode || m . owningElement ) , e . setCustomData ( "stylesheet" , m ) , m . data ( "cke-temp" , 1 ) ) } e = d . getCustomData ( "stylesheet_ref" ) || 0 ; d . setCustomData ( "stylesheet_ref" , e + 1 ) ; this . setCustomData ( "cke_includeReadonly" , ! a . config . disableReadonlyStyling ) ; this . attachListener ( this ,
"click" , function ( a ) { a = a . data ; var b = ( new CKEDITOR . dom . elementPath ( a . getTarget ( ) , this ) ) . contains ( "a" ) ; b && 2 != a . $ . button && b . isReadOnly ( ) && a . preventDefault ( ) } ) ; var k = { 8 : 1 , 46 : 1 } ; this . attachListener ( a , "key" , function ( b ) { if ( a . readOnly ) return ! 0 ; var c = b . data . domEvent . getKey ( ) , d ; if ( c in k ) { b = a . getSelection ( ) ; var h , e = b . getRanges ( ) [ 0 ] , m = e . startPath ( ) , n , l , z , c = 8 == c ; CKEDITOR . env . ie && 11 > CKEDITOR . env . version && ( h = b . getSelectedElement ( ) ) || ( h = g ( b ) ) ? ( a . fire ( "saveSnapshot" ) , e . moveToPosition ( h , CKEDITOR . POSITION _BEFORE _START ) ,
h . remove ( ) , e . select ( ) , a . fire ( "saveSnapshot" ) , d = 1 ) : e . collapsed && ( ( n = m . block ) && ( z = n [ c ? "getPrevious" : "getNext" ] ( f ) ) && z . type == CKEDITOR . NODE _ELEMENT && z . is ( "table" ) && e [ c ? "checkStartOfBlock" : "checkEndOfBlock" ] ( ) ? ( a . fire ( "saveSnapshot" ) , e [ c ? "checkEndOfBlock" : "checkStartOfBlock" ] ( ) && n . remove ( ) , e [ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( z ) , e . select ( ) , a . fire ( "saveSnapshot" ) , d = 1 ) : m . blockLimit && m . blockLimit . is ( "td" ) && ( l = m . blockLimit . getAscendant ( "table" ) ) && e . checkBoundaryOfElement ( l , c ? CKEDITOR . START : CKEDITOR . END ) &&
( z = l [ c ? "getPrevious" : "getNext" ] ( f ) ) ? ( a . fire ( "saveSnapshot" ) , e [ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( z ) , e . checkStartOfBlock ( ) && e . checkEndOfBlock ( ) ? z . remove ( ) : e . select ( ) , a . fire ( "saveSnapshot" ) , d = 1 ) : ( l = m . contains ( [ "td" , "th" , "caption" ] ) ) && e . checkBoundaryOfElement ( l , c ? CKEDITOR . START : CKEDITOR . END ) && ( d = 1 ) ) } return ! d } ) ; a . blockless && CKEDITOR . env . ie && CKEDITOR . env . needsBrFiller && this . attachListener ( this , "keyup" , function ( b ) { b . data . getKeystroke ( ) in k && ! this . getFirst ( c ) && ( this . appendBogus ( ) , b = a . createRange ( ) , b . moveToPosition ( this ,
e && this . changeAttr ( "dir" , e ) ; var m = CKEDITOR . getCss ( ) ; if ( m ) { var e = d . getHead ( ) , k = e . getCustomData ( "stylesheet" ) ; k ? m != k . getText ( ) && ( CKEDITOR . env . ie && 9 > CKEDITOR . env . version ? k . $ . styleSheet . cssText = m : k . setText ( m ) ) : ( m = d . appendStyleText ( m ) , m = new CKEDITOR . dom . element ( m . ownerNode || m . owningElement ) , e . setCustomData ( "stylesheet" , m ) , m . data ( "cke-temp" , 1 ) ) } e = d . getCustomData ( "stylesheet_ref" ) || 0 ; d . setCustomData ( "stylesheet_ref" , e + 1 ) ; this . setCustomData ( "cke_includeReadonly" , ! a . config . disableReadonlyStyling ) ; this . attachListener ( this ,
"click" , function ( a ) { a = a . data ; var b = ( new CKEDITOR . dom . elementPath ( a . getTarget ( ) , this ) ) . contains ( "a" ) ; b && 2 != a . $ . button && b . isReadOnly ( ) && a . preventDefault ( ) } ) ; var l = { 8 : 1 , 46 : 1 } ; this . attachListener ( a , "key" , function ( b ) { if ( a . readOnly ) return ! 0 ; var c = b . data . domEvent . getKey ( ) , d ; if ( c in l ) { b = a . getSelection ( ) ; var h , e = b . getRanges ( ) [ 0 ] , m = e . startPath ( ) , p , k , x , c = 8 == c ; CKEDITOR . env . ie && 11 > CKEDITOR . env . version && ( h = b . getSelectedElement ( ) ) || ( h = g ( b ) ) ? ( a . fire ( "saveSnapshot" ) , e . moveToPosition ( h , CKEDITOR . POSITION _BEFORE _START ) ,
h . remove ( ) , e . select ( ) , a . fire ( "saveSnapshot" ) , d = 1 ) : e . collapsed && ( ( p = m . block ) && ( x = p [ c ? "getPrevious" : "getNext" ] ( f ) ) && x . type == CKEDITOR . NODE _ELEMENT && x . is ( "table" ) && e [ c ? "checkStartOfBlock" : "checkEndOfBlock" ] ( ) ? ( a . fire ( "saveSnapshot" ) , e [ c ? "checkEndOfBlock" : "checkStartOfBlock" ] ( ) && p . remove ( ) , e [ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( x ) , e . select ( ) , a . fire ( "saveSnapshot" ) , d = 1 ) : m . blockLimit && m . blockLimit . is ( "td" ) && ( k = m . blockLimit . getAscendant ( "table" ) ) && e . checkBoundaryOfElement ( k , c ? CKEDITOR . START : CKEDITOR . END ) &&
( x = k [ c ? "getPrevious" : "getNext" ] ( f ) ) ? ( a . fire ( "saveSnapshot" ) , e [ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( x ) , e . checkStartOfBlock ( ) && e . checkEndOfBlock ( ) ? x . remove ( ) : e . select ( ) , a . fire ( "saveSnapshot" ) , d = 1 ) : ( k = m . contains ( [ "td" , "th" , "caption" ] ) ) && e . checkBoundaryOfElement ( k , c ? CKEDITOR . START : CKEDITOR . END ) && ( d = 1 ) ) } return ! d } ) ; a . blockless && CKEDITOR . env . ie && CKEDITOR . env . needsBrFiller && this . attachListener ( this , "keyup" , function ( b ) { b . data . getKeystroke ( ) in l && ! this . getFirst ( c ) && ( this . appendBogus ( ) , b = a . createRange ( ) , b . moveToPosition ( this ,
CKEDITOR . POSITION _AFTER _START ) , b . select ( ) ) } ) ; this . attachListener ( this , "dblclick" , function ( b ) { if ( a . readOnly ) return ! 1 ; b = { element : b . data . getTarget ( ) } ; a . fire ( "doubleclick" , b ) } ) ; CKEDITOR . env . ie && this . attachListener ( this , "click" , b ) ; CKEDITOR . env . ie && ! CKEDITOR . env . edge || this . attachListener ( this , "mousedown" , function ( b ) { var c = b . data . getTarget ( ) ; c . is ( "img" , "hr" , "input" , "textarea" , "select" ) && ! c . isReadOnly ( ) && ( a . getSelection ( ) . selectElement ( c ) , c . is ( "input" , "textarea" , "select" ) && b . data . preventDefault ( ) ) } ) ; CKEDITOR . env . edge &&
this . attachListener ( this , "mouseup" , function ( b ) { ( b = b . data . getTarget ( ) ) && b . is ( "img" ) && 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 ; b = b . data . domEvent . getKey ( ) ; if ( b in k ) { var c = 8 == b , d = a . getSelection ( ) . getRanges ( ) [ 0 ] ; b = d . startPath ( ) ; if ( d . collapsed ) a : { var h = b . block ; if ( h && d [ c ? "checkStartOfBlock" : "checkEndOfBlock" ] ( ) && d . moveToClosestEditablePosition ( h , ! c ) && d . collapsed ) { if ( d . startContainer . type == CKEDITOR . NODE _ELEMENT ) { var e = d . startContainer . getChild ( d . startOffset - ( c ? 1 :
0 ) ) ; if ( e && e . type == CKEDITOR . NODE _ELEMENT && e . is ( "hr" ) ) { a . fire ( "saveSnapshot" ) ; e . remove ( ) ; b = ! 0 ; break a } } d = d . startPath ( ) . block ; if ( ! d || d && d . contains ( h ) ) b = void 0 ; else { a . fire ( "saveSnapshot" ) ; var f ; ( f = ( c ? d : h ) . getBogus ( ) ) && f . remove ( ) ; f = a . getSelection ( ) ; e = f . createBookmarks ( ) ; ( c ? h : d ) . moveChildren ( c ? d : h , ! 1 ) ; b . lastElement . mergeSiblings ( ) ; w ( h , d , ! c ) ; f . selectBookmarks ( e ) ; b = ! 0 } } else b = ! 1 } else c = d , f = b . block , d = c . endPath ( ) . block , f && d && ! f . equals ( d ) ? ( a . fire ( "saveSnapshot" ) , ( h = f . getBogus ( ) ) && h . remove ( ) , c . enlarge ( CKEDITOR . ENLARGE _INLINE ) ,
c . deleteContents ( ) , d . getParent ( ) && ( d . moveChildren ( f , ! 1 ) , b . lastElement . mergeSiblings ( ) , w ( f , d , ! 0 ) ) , c = a . getSelection ( ) . getRanges ( ) [ 0 ] , c . collapse ( 1 ) , c . optimize ( ) , "" === c . startContainer . getHtml ( ) && c . startContainer . appendBogus ( ) , c . select ( ) , b = ! 0 ) : b = ! 1 ; if ( ! b ) return ; a . getSelection ( ) . scrollIntoView ( ) ; a . fire ( "saveSnapshot" ) ; return ! 1 } } , this , null , 100 ) } } } , _ : { 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 ( ) ) ;
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 ; b = b . data . domEvent . getKey ( ) ; if ( b in l ) { var c = 8 == b , d = a . getSelection ( ) . getRanges ( ) [ 0 ] ; b = d . startPath ( ) ; if ( d . collapsed ) a : { var h = b . block ; if ( h && d [ c ? "checkStartOfBlock" : "checkEndOfBlock" ] ( ) && d . moveToClosestEditablePosition ( h , ! c ) && d . collapsed ) { if ( d . startContainer . type == CKEDITOR . NODE _ELEMENT ) { var e = d . startContainer . getChild ( d . startOffset - ( c ? 1 :
0 ) ) ; if ( e && e . type == CKEDITOR . NODE _ELEMENT && e . is ( "hr" ) ) { a . fire ( "saveSnapshot" ) ; e . remove ( ) ; b = ! 0 ; break a } } d = d . startPath ( ) . block ; if ( ! d || d && d . contains ( h ) ) b = void 0 ; else { a . fire ( "saveSnapshot" ) ; var f ; ( f = ( c ? d : h ) . getBogus ( ) ) && f . remove ( ) ; f = a . getSelection ( ) ; e = f . createBookmarks ( ) ; ( c ? h : d ) . moveChildren ( c ? d : h , ! 1 ) ; b . lastElement . mergeSiblings ( ) ; v ( h , d , ! c ) ; f . selectBookmarks ( e ) ; b = ! 0 } } else b = ! 1 } else c = d , f = b . block , d = c . endPath ( ) . block , f && d && ! f . equals ( d ) ? ( a . fire ( "saveSnapshot" ) , ( h = f . getBogus ( ) ) && h . remove ( ) , c . enlarge ( CKEDITOR . ENLARGE _INLINE ) ,
c . deleteContents ( ) , d . getParent ( ) && ( d . moveChildren ( f , ! 1 ) , b . lastElement . mergeSiblings ( ) , v ( f , d , ! 0 ) ) , c = a . getSelection ( ) . getRanges ( ) [ 0 ] , c . collapse ( 1 ) , c . optimize ( ) , "" === c . startContainer . getHtml ( ) && c . startContainer . appendBogus ( ) , c . select ( ) , b = ! 0 ) : b = ! 1 ; if ( ! b ) return ; a . getSelection ( ) . scrollIntoView ( ) ; a . fire ( "saveSnapshot" ) ; return ! 1 } } , this , null , 100 ) } } } , _ : { 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-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}" ) ; f = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ; y = CKEDITOR . dom . walker . bookmark ( ! 1 , ! 0 ) ; A = CKEDITOR . dom . walker . empty ( ) ; t = CKEDITOR . dom . walker . bogus ( ) ; D = /(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi ; p = function ( ) { function a ( b ) { return b . type ==
CKEDITOR . NODE _ELEMENT } function b ( c , d ) { var e , f , m , n , g = [ ] , l = d . range . startContainer ; e = d . range . startPath ( ) ; for ( var l = C [ l . getName ( ) ] , z = 0 , k = c . getChildren ( ) , E = k . count ( ) , B = - 1 , p = - 1 , q = 0 , w = e . contains ( C . $list ) ; z < E ; ++ z ) e = k . getItem ( z ) , a ( e ) ? ( m = e . getName ( ) , w && m in CKEDITOR . dtd . $list ? g = g . concat ( b ( e , d ) ) : ( n = ! ! l [ m ] , "br" != m || ! e . data ( "cke-eol" ) || z && z != E - 1 || ( q = ( f = z ? g [ z - 1 ] . node : k . getItem ( z + 1 ) ) && ( ! a ( f ) || ! f . is ( "br" ) ) , f = f && a ( f ) && C . $block [ f . getName ( ) ] ) , - 1 != B || n || ( B = z ) , n || ( p = z ) , g . push ( { isElement : 1 , isLineBreak : q , isBlock : e . isBlockBoundary ( ) ,
hasBlockSibling : f , node : e , name : m , allowed : n } ) , f = q = 0 ) ) : g . push ( { isElement : 0 , node : e , allowed : 1 } ) ; - 1 < B && ( g [ B ] . firstNotAllowed = 1 ) ; - 1 < p && ( g [ p ] . lastNotAllowed = 1 ) ; return g } function d ( b , c ) { var e = [ ] , h = b . getChildren ( ) , f = h . count ( ) , m , g = 0 , l = C [ c ] , z = ! b . is ( C . $inline ) || b . is ( "br" ) ; for ( z && e . push ( " " ) ; g < f ; g ++ ) m = h . getItem ( g ) , a ( m ) && ! m . is ( l ) ? e = e . concat ( d ( m , c ) ) : e . push ( m ) ; z && e . push ( " " ) ; return e } function e ( b ) { return a ( b . startContainer ) && b . startContainer . getChild ( b . startOffset - 1 ) } function f ( b ) { return b && a ( b ) && ( b . is ( C . $removeEmpty ) ||
b . is ( "a" ) && ! b . isBlockBoundary ( ) ) } function g ( b , c , d , e ) { var h = b . clone ( ) , f , m ; h . setEndAt ( c , CKEDITOR . POSITION _BEFORE _END ) ; ( f = ( new CKEDITOR . dom . walker ( h ) ) . next ( ) ) && a ( f ) && p [ f . getName ( ) ] && ( m = f . getPrevious ( ) ) && a ( m ) && ! m . getParent ( ) . equals ( b . startContainer ) && d . contains ( m ) && e . contains ( f ) && f . isIdentical ( m ) && ( f . moveChildren ( m ) , f . remove ( ) , g ( b , c , d , e ) ) } function E ( 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 ) , h = c . endContainer . getChild ( c . endOffset -
1 ) ; e && d ( e , b [ b . length - 1 ] ) ; h && d ( h , b [ 0 ] ) && ( c . setEnd ( c . endContainer , c . endOffset - 1 ) , c . collapse ( ) ) } var C = CKEDITOR . dtd , p = { p : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , ul : 1 , ol : 1 , li : 1 , pre : 1 , dl : 1 , blockquote : 1 } , q = { p : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 } , w = CKEDITOR . tools . extend ( { } , C . $inline ) ; delete w . br ; return function ( p , v , I , J ) { var F = p . editor , L = ! 1 ; "unfiltered_html" == v && ( v = "html" , L = ! 0 ) ; if ( ! J . checkReadOnly ( ) ) { var K = ( new CKEDITOR . dom . elementPath ( J . startContainer , J . root ) ) . blockLimit || J . root ; p = { type : v , dontFilter : L , editable : p ,
editor : F , range : J , blockLimit : K , mergeCandidates : [ ] , zombies : [ ] } ; v = p . range ; J = p . mergeCandidates ; var H , t ; "text" == p . type && v . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 , ! 1 ) && ( H = CKEDITOR . dom . element . createFromHtml ( "\x3cspan\x3e\x26nbsp;\x3c/span\x3e" , v . document ) , v . insertNode ( H ) , v . setStartAfter ( H ) ) ; L = new CKEDITOR . dom . elementPath ( v . startContainer ) ; p . endPath = K = new CKEDITOR . dom . elementPath ( v . endContainer ) ; if ( ! v . collapsed ) { var F = K . block || K . blockLimit , x = v . getCommonAncestor ( ) ; F && ! F . equals ( x ) && ! F . contains ( x ) && v . checkEndOfBlock ( ) &&
p . zombies . push ( F ) ; v . deleteContents ( ) } for ( ; ( t = e ( v ) ) && a ( t ) && t . isBlockBoundary ( ) && L . contains ( t ) ; ) v . moveToPosition ( t , CKEDITOR . POSITION _BEFORE _END ) ; g ( v , p . blockLimit , L , K ) ; H && ( v . setEndBefore ( H ) , v . collapse ( ) , H . remove ( ) ) ; H = v . startPath ( ) ; if ( F = H . contains ( f , ! 1 , 1 ) ) v . splitElement ( F ) , p . inlineStylesRoot = F , p . inlineStylesPeak = H . lastElement ; H = v . createBookmark ( ) ; ( F = H . startNode . getPrevious ( c ) ) && a ( F ) && f ( F ) && J . push ( F ) ; ( F = H . startNode . getNext ( c ) ) && a ( F ) && f ( F ) && J . push ( F ) ; for ( F = H . startNode ; ( F = F . getParent ( ) ) && f ( F ) ; ) J . push ( F ) ;
v . moveToBookmark ( H ) ; if ( H = I ) { H = p . range ; if ( "text" == p . type && p . inlineStylesRoot ) { t = p . inlineStylesPeak ; v = t . getDocument ( ) . createText ( "{cke-peak}" ) ; for ( J = p . inlineStylesRoot . getParent ( ) ; ! t . equals ( J ) ; ) v = v . appendTo ( t . clone ( ) ) , t = t . getParent ( ) ; I = v . getOuterHtml ( ) . split ( "{cke-peak}" ) . join ( I ) } t = p . blockLimit . getName ( ) ; if ( /^\s+|\s+$/ . test ( I ) && "span" in CKEDITOR . dtd [ t ] ) { var A = '\x3cspan data-cke-marker\x3d"1"\x3e\x26nbsp;\x3c/span\x3e' ; I = A + I + A } I = p . editor . dataProcessor . toHtml ( I , { context : null , fixForBody : ! 1 , protectedWhitespaces : ! ! A ,
dontFilter : p . dontFilter , filter : p . editor . activeFilter , enterMode : p . editor . activeEnterMode } ) ; t = H . document . createElement ( "body" ) ; t . setHtml ( I ) ; A && ( t . getFirst ( ) . remove ( ) , t . getLast ( ) . remove ( ) ) ; if ( ( A = H . startPath ( ) . block ) && ( 1 != A . getChildCount ( ) || ! A . getBogus ( ) ) ) a : { var y ; if ( 1 == t . getChildCount ( ) && a ( y = t . getFirst ( ) ) && y . is ( q ) && ! y . hasAttribute ( "contenteditable" ) ) { A = y . getElementsByTag ( "*" ) ; H = 0 ; for ( J = A . count ( ) ; H < J ; H ++ ) if ( v = A . getItem ( H ) , ! v . is ( w ) ) break a ; y . moveChildren ( y . getParent ( 1 ) ) ; y . remove ( ) } } p . dataWrapper = t ; H = I } if ( H ) { y =
p . range ; H = y . document ; var u ; t = p . blockLimit ; J = 0 ; var D , A = [ ] , M , G ; I = F = 0 ; var P , W ; v = y . startContainer ; var L = p . endPath . elements [ 0 ] , X , K = L . getPosition ( v ) , x = ! ! L . getCommonAncestor ( v ) && K != CKEDITOR . POSITION _IDENTICAL && ! ( K & CKEDITOR . POSITION _CONTAINS + CKEDITOR . POSITION _IS _CONTAINED ) ; v = b ( p . dataWrapper , p ) ; for ( E ( v , y ) ; J < v . length ; J ++ ) { K = v [ J ] ; if ( u = K . isLineBreak ) { u = y ; P = t ; var S = void 0 , aa = void 0 ; K . hasBlockSibling ? u = 1 : ( S = u . startContainer . getAscendant ( C . $block , 1 ) ) && S . is ( { div : 1 , p : 1 } ) ? ( aa = S . getPosition ( P ) , aa == CKEDITOR . POSITION _IDENTICAL ||
aa == CKEDITOR . POSITION _CONTAINS ? u = 0 : ( P = u . splitElement ( S ) , u . moveToPosition ( P , CKEDITOR . POSITION _AFTER _START ) , u = 1 ) ) : u = 0 } if ( u ) I = 0 < J ; else { u = y . startPath ( ) ; ! K . isBlock && l ( p . editor , u . block , u . blockLimit ) && ( G = k ( p . editor ) ) && ( G = H . createElement ( G ) , G . appendBogus ( ) , y . insertNode ( G ) , CKEDITOR . env . needsBrFiller && ( D = G . getBogus ( ) ) && D . remove ( ) , y . moveToPosition ( G , CKEDITOR . POSITION _BEFORE _END ) ) ; if ( ( u = y . startPath ( ) . block ) && ! u . equals ( M ) ) { if ( D = u . getBogus ( ) ) D . remove ( ) , A . push ( u ) ; M = u } K . firstNotAllowed && ( F = 1 ) ; if ( F && K . isElement ) { u =
y . startContainer ; for ( P = null ; u && ! C [ u . getName ( ) ] [ K . name ] ; ) { if ( u . equals ( t ) ) { u = null ; break } P = u ; u = u . getParent ( ) } if ( u ) P && ( W = y . splitElement ( P ) , p . zombies . push ( W ) , p . zombies . push ( P ) ) ; else { P = t . getName ( ) ; X = ! J ; u = J == v . length - 1 ; P = d ( K . node , P ) ; for ( var S = [ ] , aa = P . length , ca = 0 , ea = void 0 , Y = 0 , U = - 1 ; ca < aa ; ca ++ ) ea = P [ ca ] , " " == ea ? ( Y || X && ! ca || ( S . push ( new CKEDITOR . dom . text ( " " ) ) , U = S . length ) , Y = 1 ) : ( S . push ( ea ) , Y = 0 ) ; u && U == S . length && S . pop ( ) ; X = S } } if ( X ) { for ( ; u = X . pop ( ) ; ) y . insertNode ( u ) ; X = 0 } else y . insertNode ( K . node ) ; K . lastNotAllowed && J <
v . length - 1 && ( ( W = x ? L : W ) && y . setEndAt ( W , CKEDITOR . POSITION _AFTER _START ) , F = 0 ) ; y . collapse ( ) } } 1 != v . length ? D = ! 1 : ( D = v [ 0 ] , D = D . isElement && "false" == D . node . getAttribute ( "contenteditable" ) ) ; D && ( I = ! 0 , u = v [ 0 ] . node , y . setStartAt ( u , CKEDITOR . POSITION _BEFORE _START ) , y . setEndAt ( u , CKEDITOR . POSITION _AFTER _END ) ) ; p . dontMoveCaret = I ; p . bogusNeededBlocks = A } D = p . range ; var O ; W = p . bogusNeededBlocks ; for ( X = D . createBookmark ( ) ; M = p . zombies . pop ( ) ; ) M . getParent ( ) && ( G = D . clone ( ) , G . moveToElementEditStart ( M ) , G . removeEmptyBlocksAtEnd ( ) ) ; if ( W ) for ( ; M =
W . pop ( ) ; ) CKEDITOR . env . needsBrFiller ? M . appendBogus ( ) : M . append ( D . document . createText ( " " ) ) ; for ( ; M = p . mergeCandidates . pop ( ) ; ) M . mergeSiblings ( ) ; D . moveToBookmark ( X ) ; if ( ! p . dontMoveCaret ) { for ( M = e ( D ) ; M && a ( M ) && ! M . is ( C . $empty ) ; ) { if ( M . isBlockBoundary ( ) ) D . moveToPosition ( M , CKEDITOR . POSITION _BEFORE _END ) ; else { if ( f ( M ) && M . getHtml ( ) . match ( /(\s| )$/g ) ) { O = null ; break } O = D . clone ( ) ; O . moveToPosition ( M , CKEDITOR . POSITION _BEFORE _END ) } M = M . getLast ( c ) } O && D . moveToRange ( O ) } } } } ( ) ; x = function ( ) { function a ( b ) { b = new CKEDITOR . dom . walker ( b ) ;
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}" ) ; f = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ; y = CKEDITOR . dom . walker . bookmark ( ! 1 , ! 0 ) ; A = CKEDITOR . dom . walker . empty ( ) ; r = CKEDITOR . dom . walker . bogus ( ) ; D = /(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi ; n = function ( ) { function a ( b ) { return b . type ==
CKEDITOR . NODE _ELEMENT } function b ( c , d ) { var e , f , m , p , g = [ ] , k = d . range . startContainer ; e = d . range . startPath ( ) ; for ( var k = B [ k . getName ( ) ] , x = 0 , l = c . getChildren ( ) , F = l . count ( ) , z = - 1 , n = - 1 , q = 0 , v = e . contains ( B . $list ) ; x < F ; ++ x ) e = l . getItem ( x ) , a ( e ) ? ( m = e . getName ( ) , v && m in CKEDITOR . dtd . $list ? g = g . concat ( b ( e , d ) ) : ( p = ! ! k [ m ] , "br" != m || ! e . data ( "cke-eol" ) || x && x != F - 1 || ( q = ( f = x ? g [ x - 1 ] . node : l . getItem ( x + 1 ) ) && ( ! a ( f ) || ! f . is ( "br" ) ) , f = f && a ( f ) && B . $block [ f . getName ( ) ] ) , - 1 != z || p || ( z = x ) , p || ( n = x ) , g . push ( { isElement : 1 , isLineBreak : q , isBlock : e . isBlockBoundary ( ) ,
hasBlockSibling : f , node : e , name : m , allowed : p } ) , f = q = 0 ) ) : g . push ( { isElement : 0 , node : e , allowed : 1 } ) ; - 1 < z && ( g [ z ] . firstNotAllowed = 1 ) ; - 1 < n && ( g [ n ] . lastNotAllowed = 1 ) ; return g } function d ( b , c ) { var e = [ ] , h = b . getChildren ( ) , f = h . count ( ) , m , g = 0 , k = B [ c ] , x = ! b . is ( B . $inline ) || b . is ( "br" ) ; for ( x && e . push ( " " ) ; g < f ; g ++ ) m = h . getItem ( g ) , a ( m ) && ! m . is ( k ) ? e = e . concat ( d ( m , c ) ) : e . push ( m ) ; x && e . push ( " " ) ; return e } function e ( b ) { return a ( b . startContainer ) && b . startContainer . getChild ( b . startOffset - 1 ) } function f ( b ) { return b && a ( b ) && ( b . is ( B . $removeEmpty ) ||
b . is ( "a" ) && ! b . isBlockBoundary ( ) ) } function g ( b , c , d , e ) { var h = b . clone ( ) , f , m ; h . setEndAt ( c , CKEDITOR . POSITION _BEFORE _END ) ; ( f = ( new CKEDITOR . dom . walker ( h ) ) . next ( ) ) && a ( f ) && n [ f . getName ( ) ] && ( m = f . getPrevious ( ) ) && a ( m ) && ! m . getParent ( ) . equals ( b . startContainer ) && d . contains ( m ) && e . contains ( f ) && f . isIdentical ( m ) && ( f . moveChildren ( m ) , f . remove ( ) , g ( b , c , d , e ) ) } function F ( b , c ) { function d ( b , c ) { if ( c . isBlock && c . isElement && ! c . node . is ( "br" ) && a ( b ) && b . is ( "br" ) ) return b . remove ( ) , 1 } var e = c . endContainer . getChild ( c . endOffset ) , h = c . endContainer . getChild ( c . endOffset -
1 ) ; e && d ( e , b [ b . length - 1 ] ) ; h && d ( h , b [ 0 ] ) && ( c . setEnd ( c . endContainer , c . endOffset - 1 ) , c . collapse ( ) ) } var B = CKEDITOR . dtd , n = { p : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , ul : 1 , ol : 1 , li : 1 , pre : 1 , dl : 1 , blockquote : 1 } , q = { p : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 } , v = CKEDITOR . tools . extend ( { } , B . $inline ) ; delete v . br ; return function ( n , E , C , I ) { var G = n . editor , K = ! 1 ; "unfiltered_html" == E && ( E = "html" , K = ! 0 ) ; if ( ! I . checkReadOnly ( ) ) { var J = ( new CKEDITOR . dom . elementPath ( I . startContainer , I . root ) ) . blockLimit || I . root ; n = { type : E , dontFilter : K , editable : n ,
editor : G , range : I , blockLimit : J , mergeCandidates : [ ] , zombies : [ ] } ; E = n . range ; I = n . mergeCandidates ; var L , r ; "text" == n . type && E . shrink ( CKEDITOR . SHRINK _ELEMENT , ! 0 , ! 1 ) && ( L = CKEDITOR . dom . element . createFromHtml ( "\x3cspan\x3e\x26nbsp;\x3c/span\x3e" , E . document ) , E . insertNode ( L ) , E . setStartAfter ( L ) ) ; K = new CKEDITOR . dom . elementPath ( E . startContainer ) ; n . endPath = J = new CKEDITOR . dom . elementPath ( E . endContainer ) ; if ( ! E . collapsed ) { var G = J . block || J . blockLimit , w = E . getCommonAncestor ( ) ; G && ! G . equals ( w ) && ! G . contains ( w ) && E . checkEndOfBlock ( ) &&
n . zombies . push ( G ) ; E . deleteContents ( ) } for ( ; ( r = e ( E ) ) && a ( r ) && r . isBlockBoundary ( ) && K . contains ( r ) ; ) E . moveToPosition ( r , CKEDITOR . POSITION _BEFORE _END ) ; g ( E , n . blockLimit , K , J ) ; L && ( E . setEndBefore ( L ) , E . collapse ( ) , L . remove ( ) ) ; L = E . startPath ( ) ; if ( G = L . contains ( f , ! 1 , 1 ) ) E . splitElement ( G ) , n . inlineStylesRoot = G , n . inlineStylesPeak = L . lastElement ; L = E . createBookmark ( ) ; ( G = L . startNode . getPrevious ( c ) ) && a ( G ) && f ( G ) && I . push ( G ) ; ( G = L . startNode . getNext ( c ) ) && a ( G ) && f ( G ) && I . push ( G ) ; for ( G = L . startNode ; ( G = G . getParent ( ) ) && f ( G ) ; ) I . push ( G ) ;
E . moveToBookmark ( L ) ; if ( L = C ) { L = n . range ; if ( "text" == n . type && n . inlineStylesRoot ) { r = n . inlineStylesPeak ; E = r . getDocument ( ) . createText ( "{cke-peak}" ) ; for ( I = n . inlineStylesRoot . getParent ( ) ; ! r . equals ( I ) ; ) E = E . appendTo ( r . clone ( ) ) , r = r . getParent ( ) ; C = E . getOuterHtml ( ) . split ( "{cke-peak}" ) . join ( C ) } r = n . blockLimit . getName ( ) ; if ( /^\s+|\s+$/ . test ( C ) && "span" in CKEDITOR . dtd [ r ] ) { var A = '\x3cspan data-cke-marker\x3d"1"\x3e\x26nbsp;\x3c/span\x3e' ; C = A + C + A } C = n . editor . dataProcessor . toHtml ( C , { context : null , fixForBody : ! 1 , protectedWhitespaces : ! ! A ,
dontFilter : n . dontFilter , filter : n . editor . activeFilter , enterMode : n . editor . activeEnterMode } ) ; r = L . document . createElement ( "body" ) ; r . setHtml ( C ) ; A && ( r . getFirst ( ) . remove ( ) , r . getLast ( ) . remove ( ) ) ; if ( ( A = L . startPath ( ) . block ) && ( 1 != A . getChildCount ( ) || ! A . getBogus ( ) ) ) a : { var y ; if ( 1 == r . getChildCount ( ) && a ( y = r . getFirst ( ) ) && y . is ( q ) && ! y . hasAttribute ( "contenteditable" ) ) { A = y . getElementsByTag ( "*" ) ; L = 0 ; for ( I = A . count ( ) ; L < I ; L ++ ) if ( E = A . getItem ( L ) , ! E . is ( v ) ) break a ; y . moveChildren ( y . getParent ( 1 ) ) ; y . remove ( ) } } n . dataWrapper = r ; L = C } if ( L ) { y =
n . range ; L = y . document ; var u ; r = n . blockLimit ; I = 0 ; var D , A = [ ] , M , H ; C = G = 0 ; var R , W ; E = y . startContainer ; var K = n . endPath . elements [ 0 ] , X , J = K . getPosition ( E ) , w = ! ! K . getCommonAncestor ( E ) && J != CKEDITOR . POSITION _IDENTICAL && ! ( J & CKEDITOR . POSITION _CONTAINS + CKEDITOR . POSITION _IS _CONTAINED ) ; E = b ( n . dataWrapper , n ) ; for ( F ( E , y ) ; I < E . length ; I ++ ) { J = E [ I ] ; if ( u = J . isLineBreak ) { u = y ; R = r ; var T = void 0 , aa = void 0 ; J . hasBlockSibling ? u = 1 : ( T = u . startContainer . getAscendant ( B . $block , 1 ) ) && T . is ( { div : 1 , p : 1 } ) ? ( aa = T . getPosition ( R ) , aa == CKEDITOR . POSITION _IDENTICAL ||
aa == CKEDITOR . POSITION _CONTAINS ? u = 0 : ( R = u . splitElement ( T ) , u . moveToPosition ( R , CKEDITOR . POSITION _AFTER _START ) , u = 1 ) ) : u = 0 } if ( u ) C = 0 < I ; else { u = y . startPath ( ) ; ! J . isBlock && k ( n . editor , u . block , u . blockLimit ) && ( H = l ( n . editor ) ) && ( H = L . createElement ( H ) , H . appendBogus ( ) , y . insertNode ( H ) , CKEDITOR . env . needsBrFiller && ( D = H . getBogus ( ) ) && D . remove ( ) , y . moveToPosition ( H , CKEDITOR . POSITION _BEFORE _END ) ) ; if ( ( u = y . startPath ( ) . block ) && ! u . equals ( M ) ) { if ( D = u . getBogus ( ) ) D . remove ( ) , A . push ( u ) ; M = u } J . firstNotAllowed && ( G = 1 ) ; if ( G && J . isElement ) { u =
y . startContainer ; for ( R = null ; u && ! B [ u . getName ( ) ] [ J . name ] ; ) { if ( u . equals ( r ) ) { u = null ; break } R = u ; u = u . getParent ( ) } if ( u ) R && ( W = y . splitElement ( R ) , n . zombies . push ( W ) , n . zombies . push ( R ) ) ; else { R = r . getName ( ) ; X = ! I ; u = I == E . length - 1 ; R = d ( J . node , R ) ; for ( var T = [ ] , aa = R . length , ba = 0 , da = void 0 , ea = 0 , ga = - 1 ; ba < aa ; ba ++ ) da = R [ ba ] , " " == da ? ( ea || X && ! ba || ( T . push ( new CKEDITOR . dom . text ( " " ) ) , ga = T . length ) , ea = 1 ) : ( T . push ( da ) , ea = 0 ) ; u && ga == T . length && T . pop ( ) ; X = T } } if ( X ) { for ( ; u = X . pop ( ) ; ) y . insertNode ( u ) ; X = 0 } else y . insertNode ( J . node ) ; J . lastNotAllowed &&
I < E . length - 1 && ( ( W = w ? K : W ) && y . setEndAt ( W , CKEDITOR . POSITION _AFTER _START ) , G = 0 ) ; y . collapse ( ) } } 1 != E . length ? D = ! 1 : ( D = E [ 0 ] , D = D . isElement && "false" == D . node . getAttribute ( "contenteditable" ) ) ; D && ( C = ! 0 , u = E [ 0 ] . node , y . setStartAt ( u , CKEDITOR . POSITION _BEFORE _START ) , y . setEndAt ( u , CKEDITOR . POSITION _AFTER _END ) ) ; n . dontMoveCaret = C ; n . bogusNeededBlocks = A } D = n . range ; var S ; W = n . bogusNeededBlocks ; for ( X = D . createBookmark ( ) ; M = n . zombies . pop ( ) ; ) M . getParent ( ) && ( H = D . clone ( ) , H . moveToElementEditStart ( M ) , H . removeEmptyBlocksAtEnd ( ) ) ; if ( W ) for ( ; M =
W . pop ( ) ; ) CKEDITOR . env . needsBrFiller ? M . appendBogus ( ) : M . append ( D . document . createText ( " " ) ) ; for ( ; M = n . mergeCandidates . pop ( ) ; ) M . mergeSiblings ( ) ; D . moveToBookmark ( X ) ; if ( ! n . dontMoveCaret ) { for ( M = e ( D ) ; M && a ( M ) && ! M . is ( B . $empty ) ; ) { if ( M . isBlockBoundary ( ) ) D . moveToPosition ( M , CKEDITOR . POSITION _BEFORE _END ) ; else { if ( f ( M ) && M . getHtml ( ) . match ( /(\s| )$/g ) ) { S = null ; break } S = D . clone ( ) ; S . moveToPosition ( M , CKEDITOR . POSITION _BEFORE _END ) } M = M . getLast ( c ) } S && D . moveToRange ( S ) } } } } ( ) ; w = 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 ) ) } } ( ) ;
G = { 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 || ! t ( 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 l = e . contains ( "table" ) . getParent ( ) ; g = function ( a ) { return ! a . equals ( l ) } } 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 k = e . contains ( CKEDITOR . dtd . $list ) . getParent ( ) ; g = function ( a ) { return ! a . equals ( k ) } } 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 &&
H = { 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 || ! r ( 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 k = e . contains ( "table" ) . getParent ( ) ; g = function ( a ) { return ! a . equals ( k ) } } else if ( e . block && e . block . is ( CKEDITOR . dtd . $listItem ) && ( f = f . contains ( CKEDITOR . dtd . $list ) , c = c . contains ( CKEDITOR . dtd . $list ) , ! f . equals ( c ) ) ) { var l = e . contains ( CKEDITOR . dtd . $list ) . getParent ( ) ; g = function ( a ) { return ! a . equals ( l ) } } g || ( g = function ( a ) { return ! a . equals ( e . block ) && ! a . equals ( e . blockLimit ) } ) ; this . rebuildFragment ( a , b , d , g ) } , rebuildFragment : function ( a , b , c , d ) { for ( var e ; c &&
! c . equals ( b ) && d ( c ) ; ) e = c . clone ( 0 , 1 ) , a . fragment . appendTo ( e ) , a . fragment = e , c = c . getParent ( ) } } , cell : { shrink : function ( a ) { a = a . range ; var b = a . startContainer , c = a . endContainer , d = a . startOffset , e = a . endOffset ; b . type == CKEDITOR . NODE _ELEMENT && b . equals ( c ) && b . is ( "tr" ) && ++ d == e && a . shrink ( CKEDITOR . SHRINK _TEXT ) } } } ; u = function ( ) { function a ( b , c ) { var d = b . getParent ( ) ; if ( d . is ( CKEDITOR . dtd . $inline ) ) b [ c ? "insertBefore" : "insertAfter" ] ( d ) } function b ( c , d , e ) { a ( d ) ; a ( e , 1 ) ; for ( var f ; f = e . getNext ( ) ; ) f . insertAfter ( d ) , d = f ; A ( 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 ( ) , h = e . contains ( CKEDITOR . dtd . $list ) , g = f . contains ( CKEDITOR . dtd . $list ) ; a . mergeList = h && g && h . getParent ( ) . equals ( g . getParent ( ) ) && ! h . equals ( g ) ; 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 n = f . contains ( CKEDITOR . dtd . $list ) , l = g . contains ( CKEDITOR . dtd . $list ) ; n . equals ( l ) || ( l . moveChildren ( n ) , l . remove ( ) ) } a . mergeListItems && ( f = f . contains ( CKEDITOR . dtd . $listItem ) , g = g . contains ( CKEDITOR . dtd . $listItem ) , f . equals ( g ) || b ( g , d , e ) ) ;
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 p = f . contains ( CKEDITOR . dtd . $list ) , k = g . contains ( CKEDITOR . dtd . $list ) ; p . equals ( k ) || ( k . moveChildren ( p ) , 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 , h = new CKEDITOR . dom . walker ( c ) , g = c . startPath ( ) . contains ( d ) , m = c . endPath ( ) . contains ( d ) , n = { } ; h . guard = function ( a , h ) { if ( a . type == CKEDITOR . NODE _ELEMENT ) { var l = "visited_" + ( h ? "out" : "in" ) ; if ( a . getCustomData ( l ) ) return ; CKEDITOR . dom . element . setMarker ( n , a , l , 1 ) } if ( h && g && a . equals ( g ) ) f = c . clone ( ) , f . setEndAt ( g , CKEDITOR . POSITION _BEFORE _END ) , e . push ( f ) ; else if ( ! h && m && a . equals ( m ) ) f = c . clone ( ) , f . setStartAt ( m , CKEDITOR . POSITION _AFTER _START ) , e . push ( f ) ;
else { if ( l = ! h ) l = a . type == CKEDITOR . NODE _ELEMENT && a . is ( d ) && ( ! g || b ( a , g ) ) && ( ! m || b ( a , m ) ) ; l && ( f = c . clone ( ) , f . selectNodeContents ( a ) , e . push ( f ) ) } } ; h . lastForward ( ) ; CKEDITOR . dom . element . clearAllMarkers ( n ) ; 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 h = c ( f , e . bookmark ) , g = h . clone ( ) , l , k , v = h . getCommonAncestor ( ) ; v . is ( CKEDITOR . dtd . $tableContent ) && ! v . is ( d ) && ( v = v . getAscendant ( "table" ,
! 0 ) ) ; k = v ; v = new CKEDITOR . dom . elementPath ( h . startContainer , k ) ; k = new CKEDITOR . dom . elementPath ( h . endContainer , k ) ; v = v . contains ( "table" ) ; k = k . contains ( "table" ) ; if ( v || k ) v && k && b ( v , k ) ? ( e . tableSurroundingRange = g , g . setStartAt ( v , CKEDITOR . POSITION _AFTER _END ) , g . setEndAt ( k , CKEDITOR . POSITION _BEFORE _START ) , g = h . clone ( ) , g . setEndAt ( v , CKEDITOR . POSITION _AFTER _END ) , l = h . clone ( ) , l . setStartAt ( k , CKEDITOR . POSITION _BEFORE _START ) , l = a ( g ) . concat ( a ( l ) ) ) : v ? k || ( e . tableSurroundingRange = g , g . setStartAt ( v , CKEDITOR . POSITION _AFTER _END ) , h . setEndAt ( v ,
CKEDITOR . POSITION _AFTER _END ) ) : ( e . tableSurroundingRange = g , g . setEndAt ( k , CKEDITOR . POSITION _BEFORE _START ) , h . setStartAt ( k , CKEDITOR . POSITION _AFTER _START ) ) , e . tableContentsRanges = l ? l : a ( h ) } , deleteRanges : function ( a ) { for ( var b ; b = a . tableContentsRanges . pop ( ) ; ) b . extractContents ( ) , A ( b . startContainer ) && b . startContainer . appendBogus ( ) ; a . tableSurroundingRange && a . tableSurroundingRange . extractContents ( ) } , purge : function ( a ) { if ( a . purgeTableBookmark ) { var b = a . doc , c = a . range . clone ( ) , b = b . createElement ( "p" ) ; b . insertBefore ( a . purgeTableBookmark . startNode ) ;
c . moveToBookmark ( a . purgeTableBookmark ) ; c . deleteContents ( ) ; a . range . moveToPosition ( b , CKEDITOR . POSITION _AFTER _START ) } } } } ( ) , detectExtractMerge : function ( a ) { return ! ( a . range . startPath ( ) . contains ( CKEDITOR . dtd . $listItem ) && a . range . endPath ( ) . contains ( CKEDITOR . dtd . $listItem ) ) } , fixUneditableRangePosition : function ( a ) { a . startContainer . getDtd ( ) [ "#" ] || a . moveToClosestEditablePosition ( null , ! 0 ) } , autoParagraph : function ( a , b ) { var c = b . startPath ( ) , d ; l ( a , c . block , c . blockLimit ) && ( d = k ( a ) ) && ( d = b . document . createElement ( d ) , d . appendBogus ( ) ,
b ( g , d , e ) ; d . remove ( ) ; e . remove ( ) } } } , table : function ( ) { function a ( c ) { var e = [ ] , f , h = new CKEDITOR . dom . walker ( c ) , g = c . startPath ( ) . contains ( d ) , m = c . endPath ( ) . contains ( d ) , p = { } ; h . guard = function ( a , h ) { if ( a . type == CKEDITOR . NODE _ELEMENT ) { var k = "visited_" + ( h ? "out" : "in" ) ; if ( a . getCustomData ( k ) ) return ; CKEDITOR . dom . element . setMarker ( p , a , k , 1 ) } if ( h && g && a . equals ( g ) ) f = c . clone ( ) , f . setEndAt ( g , CKEDITOR . POSITION _BEFORE _END ) , e . push ( f ) ; else if ( ! h && m && a . equals ( m ) ) f = c . clone ( ) , f . setStartAt ( m , CKEDITOR . POSITION _AFTER _START ) , e . push ( f ) ;
else { if ( k = ! h ) k = a . type == CKEDITOR . NODE _ELEMENT && a . is ( d ) && ( ! g || b ( a , g ) ) && ( ! m || b ( a , m ) ) ; k && ( f = c . clone ( ) , f . selectNodeContents ( a ) , e . push ( f ) ) } } ; h . 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 h = c ( f , e . bookmark ) , g = h . clone ( ) , k , l , n = h . getCommonAncestor ( ) ; n . is ( CKEDITOR . dtd . $tableContent ) && ! n . is ( d ) && ( n = n . getAscendant ( "table" ,
! 0 ) ) ; l = n ; n = new CKEDITOR . dom . elementPath ( h . startContainer , l ) ; l = new CKEDITOR . dom . elementPath ( h . endContainer , l ) ; n = n . contains ( "table" ) ; l = l . contains ( "table" ) ; if ( n || l ) n && l && b ( n , l ) ? ( e . tableSurroundingRange = g , g . setStartAt ( n , CKEDITOR . POSITION _AFTER _END ) , g . setEndAt ( l , CKEDITOR . POSITION _BEFORE _START ) , g = h . clone ( ) , g . setEndAt ( n , CKEDITOR . POSITION _AFTER _END ) , k = h . clone ( ) , k . setStartAt ( l , CKEDITOR . POSITION _BEFORE _START ) , k = a ( g ) . concat ( a ( k ) ) ) : n ? l || ( e . tableSurroundingRange = g , g . setStartAt ( n , CKEDITOR . POSITION _AFTER _END ) , h . setEndAt ( n ,
CKEDITOR . POSITION _AFTER _END ) ) : ( e . tableSurroundingRange = g , g . setEndAt ( l , CKEDITOR . POSITION _BEFORE _START ) , h . setStartAt ( l , CKEDITOR . POSITION _AFTER _START ) ) , e . tableContentsRanges = k ? k : a ( h ) } , deleteRanges : function ( a ) { for ( var b ; b = a . tableContentsRanges . pop ( ) ; ) b . extractContents ( ) , A ( b . startContainer ) && b . startContainer . appendBogus ( ) ; a . tableSurroundingRange && a . tableSurroundingRange . extractContents ( ) } , purge : function ( a ) { if ( a . purgeTableBookmark ) { var b = a . doc , c = a . range . clone ( ) , b = b . createElement ( "p" ) ; b . insertBefore ( a . purgeTableBookmark . startNode ) ;
c . moveToBookmark ( a . purgeTableBookmark ) ; c . deleteContents ( ) ; a . range . moveToPosition ( b , CKEDITOR . POSITION _AFTER _START ) } } } } ( ) , detectExtractMerge : function ( a ) { return ! ( a . range . startPath ( ) . contains ( CKEDITOR . dtd . $listItem ) && a . range . endPath ( ) . contains ( CKEDITOR . dtd . $listItem ) ) } , fixUneditableRangePosition : function ( a ) { a . startContainer . getDtd ( ) [ "#" ] || a . moveToClosestEditablePosition ( null , ! 0 ) } , autoParagraph : function ( a , b ) { var c = b . startPath ( ) , d ; k ( a , c . block , c . blockLimit ) && ( d = l ( a ) ) && ( d = b . document . createElement ( d ) , d . appendBogus ( ) ,
b . insertNode ( d ) , b . moveToPosition ( d , CKEDITOR . POSITION _AFTER _START ) ) } } } ( ) } ) ( ) ;
( function ( ) { function a ( ) { var a = this . _ . fakeSelection , b ; a && ( b = this . getSelection ( 1 ) , b && b . isHidden ( ) || ( a . reset ( ) , a = 0 ) ) ; if ( ! a && ( a = b || this . getSelection ( 1 ) , ! a || a . getType ( ) == CKEDITOR . SELECTION _NONE ) ) return ; this . fire ( "selectionCheck" , a ) ; b = this . elementPath ( ) ; b . compare ( this . _ . selectionPreviousPath ) || ( CKEDITOR . env . webkit && ( this . _ . previousActive = this . document . getActive ( ) ) , this . _ . selectionPreviousPath = b , this . fire ( "selectionChange" , { selection : a , path : b } ) ) } function d ( ) { A = ! 0 ; y || ( b . call ( this ) , y = CKEDITOR . tools . setTimeout ( b ,
200 , this ) ) } function b ( ) { y = null ; A && ( CKEDITOR . tools . setTimeout ( a , 0 , this ) , A = ! 1 ) } function c ( a ) { return t ( a ) || a . type == CKEDITOR . NODE _ELEMENT && ! a . is ( CKEDITOR . dtd . $empty ) ? ! 0 : ! 1 } function e ( 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 d = a . startContainer , e = a . getPreviousNode ( c , null , d ) , f = a . getNextNode ( c , null , d ) ; return b ( e ) || b ( f , 1 ) || ! ( e || f || d . type == CKEDITOR . NODE _ELEMENT && d . isBlockBoundary ( ) &&
d . getBogus ( ) ) ? ! 0 : ! 1 } function g ( a ) { l ( a , ! 1 ) ; var b = a . getDocument ( ) . createText ( u ) ; a . setCustomData ( "cke-fillingChar" , b ) ; return b } function l ( 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 ( k ( 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 k ( a , b ) { return b ? a . replace ( r , function ( a , b ) { return b ? " " : "" } ) : a . replace ( u , "" ) } function q ( a ) { var b = CKEDITOR . dom . element . createFromHtml ( '\x3cdiv data-cke-hidden-sel\x3d"1" data-cke-temp\x3d"1" style\x3d"' + ( CKEDITOR . env . ie ? "display:none" : "position:fixed;top:0;left:-1000px" ) +
'"\x3e\x26nbsp; \x3c/div\x3e' , a . document ) ; a . fire ( "lockSnapshot" ) ; a . editable ( ) . append ( b ) ; var c = a . getSelection ( 1 ) , d = a . createRange ( ) , e = c . root . on ( "selectionchange" , function ( a ) { a . cancel ( ) } , null , null , 0 ) ; d . setStartAt ( b , CKEDITOR . POSITION _AFTER _START ) ; d . setEndAt ( b , CKEDITOR . POSITION _BEFORE _END ) ; c . selectRanges ( [ d ] ) ; e . removeListener ( ) ; a . fire ( "unlockSnapshot" ) ; a . _ . hiddenSelectionContainer = b } function w ( 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 ( ) ,
200 , this ) ) } function b ( ) { y = null ; A && ( CKEDITOR . tools . setTimeout ( a , 0 , this ) , A = ! 1 ) } function c ( a ) { return r ( a ) || a . type == CKEDITOR . NODE _ELEMENT && ! a . is ( CKEDITOR . dtd . $empty ) ? ! 0 : ! 1 } function e ( 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 d = a . startContainer , e = a . getPreviousNode ( c , null , d ) , f = a . getNextNode ( c , null , d ) ; return b ( e ) || b ( f , 1 ) || ! ( e || f || d . type == CKEDITOR . NODE _ELEMENT && d . isBlockBoundary ( ) &&
d . getBogus ( ) ) ? ! 0 : ! 1 } function g ( a ) { k ( a , ! 1 ) ; var b = a . getDocument ( ) . createText ( u ) ; a . setCustomData ( "cke-fillingChar" , b ) ; return b } function k ( 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 ( l ( 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 l ( a , b ) { return b ? a . replace ( t , function ( a , b ) { return b ? " " : "" } ) : a . replace ( u , "" ) } function q ( a , b ) { var c = CKEDITOR . dom . element . createFromHtml ( '\x3cdiv data-cke-hidden-sel\x3d"1" data-cke-temp\x3d"1" style\x3d"' + ( CKEDITOR . env . ie ? "display:none" : "position:fixed;top:0;left:-1000px" ) +
'"\x3e' + ( b || "\x26nbsp;" ) + " \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 v ( 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 f ( 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 , l = c . clone ( ) ; d && d . type == CKEDITOR . NODE _TEXT && ( f >= d . getLength ( ) ? l . setStartAfter ( d ) : l . setStartBefore ( d ) ) ; e && e . type == CKEDITOR . NODE _TEXT && ( g ? l . setEndAfter ( e ) : l . setEndBefore ( e ) ) ; d = new CKEDITOR . dom . walker ( l ) ; 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 ( l . endContainer ) &
CKEDITOR . POSITION _CONTAINS || ( e . setStartAfter ( d ) , e . collapsed || a . splice ( b + 1 , 0 , e ) ) ; return ! 0 } return ! 1 } ; d . next ( ) } } return a } var y , A , t = CKEDITOR . dom . walker . invisible ( 1 ) , D = 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 ; ( 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" ) ; return ! 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 ( b ) { function c ( ) { var a = e . getSelection ( ) ; a && a . removeAllRanges ( ) } var e = b . editor ; e . on ( "contentDom" , function ( ) { function b ( ) { I = new CKEDITOR . dom . selection ( e . getSelection ( ) ) ; I . lock ( ) } function c ( ) { h . removeListener ( "mouseup" ,
c ) ; k . removeListener ( "mouseup" , c ) ; var a = CKEDITOR . document . $ . selection , b = a . createRange ( ) ; "None" != a . type && b . parentElement ( ) . ownerDocument == f . $ && b . select ( ) } var f = e . document , h = CKEDITOR . document , g = e . editable ( ) , n = f . getBody ( ) , k = f . getDocumentElement ( ) , q = g . isInline ( ) , v , I ; CKEDITOR . env . gecko && g . attachListener ( g , "focus" , function ( a ) { a . removeListener ( ) ; 0 !== v && ( a = e . getSelection ( ) . getNative ( ) ) && a . isCollapsed && a . anchorNode == g . $ && ( a = e . createRange ( ) , a . moveToElementEditStart ( g ) , a . select ( ) ) } , null , null , - 2 ) ; g . attachListener ( g ,
CKEDITOR . env . webkit ? "DOMFocusIn" : "focus" , function ( ) { v && CKEDITOR . env . webkit && ( v = e . _ . previousActive && e . _ . previousActive . equals ( f . getActive ( ) ) ) ; e . unlockSelection ( v ) ; v = 0 } , null , null , - 1 ) ; g . attachListener ( g , "mousedown" , function ( ) { v = 0 } ) ; if ( CKEDITOR . env . ie || q ) p ? g . attachListener ( g , "beforedeactivate" , b , null , null , - 1 ) : g . attachListener ( e , "selectionCheck" , b , null , null , - 1 ) , g . attachListener ( g , CKEDITOR . env . webkit ? "DOMFocusOut" : "blur" , function ( ) { e . lockSelection ( I ) ; v = 1 } , null , null , - 1 ) , g . attachListener ( g , "mousedown" , function ( ) { v =
0 } ) ; if ( CKEDITOR . env . ie && ! q ) { var J ; g . attachListener ( g , "mousedown" , function ( a ) { 2 == a . data . $ . button && ( ( a = e . document . getSelection ( ) ) && a . getType ( ) != CKEDITOR . SELECTION _NONE || ( J = e . window . getScrollPosition ( ) ) ) } ) ; g . attachListener ( g , "mouseup" , function ( a ) { 2 == a . data . $ . button && J && ( e . document . $ . documentElement . scrollLeft = J . x , e . document . $ . documentElement . scrollTop = J . y ) ; J = null } ) ; if ( "BackCompat" != f . $ . compatMode ) { if ( CKEDITOR . env . ie7Compat || CKEDITOR . env . ie6Compat ) k . on ( "mousedown" , function ( a ) { function b ( a ) { a = a . data . $ ;
if ( d ) { var c = n . $ . createTextRange ( ) ; try { c . moveToPoint ( a . clientX , a . clientY ) } catch ( e ) { } d . setEndPoint ( 0 > f . compareEndPoints ( "StartToStart" , c ) ? "EndToEnd" : "StartToStart" , c ) ; d . select ( ) } } function c ( ) { k . removeListener ( "mousemove" , b ) ; h . removeListener ( "mouseup" , c ) ; k . removeListener ( "mouseup" , c ) ; d . select ( ) } a = a . data ; if ( a . getTarget ( ) . is ( "html" ) && a . $ . y < k . $ . clientHeight && a . $ . x < k . $ . clientWidth ) { var d = n . $ . createTextRange ( ) ; try { d . moveToPoint ( a . $ . clientX , a . $ . clientY ) } catch ( e ) { } var f = d . duplicate ( ) ; k . on ( "mousemove" , b ) ; h . on ( "mouseup" ,
c ) ; k . on ( "mouseup" , c ) } } ) ; if ( 7 < CKEDITOR . env . version && 11 > CKEDITOR . env . version ) k . on ( "mousedown" , function ( a ) { a . data . getTarget ( ) . is ( "html" ) && ( h . on ( "mouseup" , c ) , k . on ( "mouseup" , c ) ) } ) } } g . attachListener ( g , "selectionchange" , a , e ) ; g . attachListener ( g , "keyup" , d , e ) ; g . attachListener ( g , CKEDITOR . env . webkit ? "DOMFocusIn" : "focus" , function ( ) { e . forceNextSelectionCheck ( ) ; e . selectionChange ( 1 ) } ) ; if ( q && ( CKEDITOR . env . webkit || CKEDITOR . env . gecko ) ) { var F ; g . attachListener ( g , "mousedown" , function ( ) { F = 1 } ) ; g . attachListener ( f . getDocumentElement ( ) ,
"mouseup" , function ( ) { F && d . call ( e ) ; F = 0 } ) } else g . attachListener ( CKEDITOR . env . ie ? g : f . getDocumentElement ( ) , "mouseup" , d , e ) ; CKEDITOR . env . webkit && g . attachListener ( f , "keydown" , function ( a ) { switch ( a . data . getKey ( ) ) { case 13 : case 33 : case 34 : case 35 : case 36 : case 37 : case 39 : case 8 : case 45 : case 46 : l ( g ) } } , null , null , - 1 ) ; g . attachListener ( g , "keydown" , w ( e ) , null , null , - 1 ) } ) ; e . on ( "setData" , function ( ) { e . unlockSelection ( ) ; CKEDITOR . env . webkit && c ( ) } ) ; e . on ( "contentDomUnload" , function ( ) { e . unlockSelection ( ) } ) ; if ( CKEDITOR . env . ie9Compat ) e . on ( "beforeDestroy" ,
d . getAttribute ( "contentEditable" ) && c . setStartAfter ( d ) , d = d . getParent ( ) ; d = c . startContainer ; e = c . endContainer ; var f = c . startOffset , g = c . endOffset , k = c . clone ( ) ; d && d . type == CKEDITOR . NODE _TEXT && ( f >= d . getLength ( ) ? k . setStartAfter ( d ) : k . setStartBefore ( d ) ) ; e && e . type == CKEDITOR . NODE _TEXT && ( g ? k . setEndAfter ( e ) : k . setEndBefore ( e ) ) ; d = new CKEDITOR . dom . walker ( k ) ; 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 ( k . endContainer ) &
CKEDITOR . POSITION _CONTAINS || ( e . setStartAfter ( d ) , e . collapsed || a . splice ( b + 1 , 0 , e ) ) ; return ! 0 } return ! 1 } ; d . next ( ) } } return a } var y , A , r = CKEDITOR . dom . walker . invisible ( 1 ) , D = 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 ; ( 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" ) ; return ! 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 ( b ) { function c ( ) { var a = e . getSelection ( ) ; a && a . removeAllRanges ( ) } var e = b . editor ; e . on ( "contentDom" , function ( ) { function b ( ) { C = new CKEDITOR . dom . selection ( e . getSelection ( ) ) ; C . lock ( ) } function c ( ) { h . removeListener ( "mouseup" ,
c ) ; l . removeListener ( "mouseup" , c ) ; var a = CKEDITOR . document . $ . selection , b = a . createRange ( ) ; "None" != a . type && b . parentElement ( ) . ownerDocument == f . $ && b . select ( ) } var f = e . document , h = CKEDITOR . document , g = e . editable ( ) , p = f . getBody ( ) , l = f . getDocumentElement ( ) , q = g . isInline ( ) , r , C ; CKEDITOR . env . gecko && g . attachListener ( g , "focus" , function ( a ) { a . removeListener ( ) ; 0 !== r && ( a = e . getSelection ( ) . getNative ( ) ) && a . isCollapsed && a . anchorNode == g . $ && ( a = e . createRange ( ) , a . moveToElementEditStart ( g ) , a . select ( ) ) } , null , null , - 2 ) ; g . attachListener ( g ,
CKEDITOR . env . webkit ? "DOMFocusIn" : "focus" , function ( ) { r && CKEDITOR . env . webkit && ( r = e . _ . previousActive && e . _ . previousActive . equals ( f . getActive ( ) ) ) ; e . unlockSelection ( r ) ; r = 0 } , null , null , - 1 ) ; g . attachListener ( g , "mousedown" , function ( ) { r = 0 } ) ; if ( CKEDITOR . env . ie || q ) n ? g . attachListener ( g , "beforedeactivate" , b , null , null , - 1 ) : g . attachListener ( e , "selectionCheck" , b , null , null , - 1 ) , g . attachListener ( g , CKEDITOR . env . webkit ? "DOMFocusOut" : "blur" , function ( ) { e . lockSelection ( C ) ; r = 1 } , null , null , - 1 ) , g . attachListener ( g , "mousedown" , function ( ) { r =
0 } ) ; if ( CKEDITOR . env . ie && ! q ) { var I ; g . attachListener ( g , "mousedown" , function ( a ) { 2 == a . data . $ . button && ( ( a = e . document . getSelection ( ) ) && a . getType ( ) != CKEDITOR . SELECTION _NONE || ( I = e . window . getScrollPosition ( ) ) ) } ) ; g . attachListener ( g , "mouseup" , function ( a ) { 2 == a . data . $ . button && I && ( e . document . $ . documentElement . scrollLeft = I . x , e . document . $ . documentElement . scrollTop = I . y ) ; I = null } ) ; if ( "BackCompat" != f . $ . compatMode ) { if ( CKEDITOR . env . ie7Compat || CKEDITOR . env . ie6Compat ) l . on ( "mousedown" , function ( a ) { function b ( a ) { a = a . data . $ ;
if ( d ) { var c = p . $ . createTextRange ( ) ; try { c . moveToPoint ( a . clientX , a . clientY ) } catch ( e ) { } d . setEndPoint ( 0 > f . compareEndPoints ( "StartToStart" , c ) ? "EndToEnd" : "StartToStart" , c ) ; d . select ( ) } } function c ( ) { l . removeListener ( "mousemove" , b ) ; h . removeListener ( "mouseup" , c ) ; l . removeListener ( "mouseup" , c ) ; d . select ( ) } a = a . data ; if ( a . getTarget ( ) . is ( "html" ) && a . $ . y < l . $ . clientHeight && a . $ . x < l . $ . clientWidth ) { var d = p . $ . createTextRange ( ) ; try { d . moveToPoint ( a . $ . clientX , a . $ . clientY ) } catch ( e ) { } var f = d . duplicate ( ) ; l . on ( "mousemove" , b ) ; h . on ( "mouseup" ,
c ) ; l . on ( "mouseup" , c ) } } ) ; if ( 7 < CKEDITOR . env . version && 11 > CKEDITOR . env . version ) l . on ( "mousedown" , function ( a ) { a . data . getTarget ( ) . is ( "html" ) && ( h . on ( "mouseup" , c ) , l . on ( "mouseup" , c ) ) } ) } } g . attachListener ( g , "selectionchange" , a , e ) ; g . attachListener ( g , "keyup" , d , e ) ; g . attachListener ( g , CKEDITOR . env . webkit ? "DOMFocusIn" : "focus" , function ( ) { e . forceNextSelectionCheck ( ) ; e . selectionChange ( 1 ) } ) ; if ( q && ( CKEDITOR . env . webkit || CKEDITOR . env . gecko ) ) { var G ; g . attachListener ( g , "mousedown" , function ( ) { G = 1 } ) ; g . attachListener ( f . getDocumentElement ( ) ,
"mouseup" , function ( ) { G && d . call ( e ) ; G = 0 } ) } else g . attachListener ( CKEDITOR . env . ie ? g : f . getDocumentElement ( ) , "mouseup" , d , e ) ; CKEDITOR . env . webkit && g . attachListener ( f , "keydown" , function ( a ) { switch ( a . data . getKey ( ) ) { case 13 : case 33 : case 34 : case 35 : case 36 : case 37 : case 39 : case 8 : case 45 : case 46 : k ( g ) } } , null , null , - 1 ) ; g . attachListener ( g , "keydown" , v ( e ) , null , null , - 1 ) } ) ; e . on ( "setData" , function ( ) { e . unlockSelection ( ) ; CKEDITOR . env . webkit && c ( ) } ) ; e . on ( "contentDomUnload" , function ( ) { e . unlockSelection ( ) } ) ; if ( CKEDITOR . env . ie9Compat ) e . on ( "beforeDestroy" ,
c , null , null , 9 ) ; e . on ( "dataReady" , function ( ) { delete e . _ . fakeSelection ; delete e . _ . hiddenSelectionContainer ; e . selectionChange ( 1 ) } ) ; e . on ( "loadSnapshot" , function ( ) { var a = CKEDITOR . dom . walker . nodeType ( CKEDITOR . NODE _ELEMENT ) , b = e . editable ( ) . getLast ( a ) ; b && b . hasAttribute ( "data-cke-hidden-sel" ) && ( b . remove ( ) , CKEDITOR . env . gecko && ( a = e . editable ( ) . getFirst ( a ) ) && a . is ( "br" ) && a . getAttribute ( "_moz_editor_bogus_node" ) && a . remove ( ) ) } , null , null , 100 ) ; e . on ( "key" , function ( a ) { if ( "wysiwyg" == e . mode ) { var b = e . getSelection ( ) ; if ( b . isFake ) { var c =
D [ a . data . keyCode ] ; if ( c ) return c ( { editor : e , 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" ) ? l ( a ) : c . setCustomData ( "ready" , 1 ) ) } , null , null , - 1 ) ; b . on ( "beforeSetMode" , function ( ) { l ( b . editable ( ) ) } , null , null , - 1 ) ; b . on ( "getSnapshot" , function ( a ) { a . data && ( a . data = k ( a . data ) ) } , b , null , 20 ) ; b . on ( "toDataFormat" ,
function ( a ) { a . data . dataValue = k ( a . data . dataValue ) } , null , null , 0 ) } ) ; CKEDITOR . editor . prototype . selectionChange = function ( b ) { ( b ? a : d ) . 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 &&
D [ a . data . keyCode ] ; if ( c ) return c ( { editor : e , 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" ) ? k ( a ) : c . setCustomData ( "ready" , 1 ) ) } , null , null , - 1 ) ; b . on ( "beforeSetMode" , function ( ) { k ( b . editable ( ) ) } , null , null , - 1 ) ; b . on ( "getSnapshot" , function ( a ) { a . data && ( a . data = l ( a . data ) ) } , b , null , 20 ) ; b . on ( "toDataFormat" ,
function ( a ) { a . data . dataValue = l ( a . data . dataValue ) } , null , null , 0 ) } ) ; CKEDITOR . editor . prototype . selectionChange = function ( b ) { ( b ? a : d ) . 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 ; var p = "function" != typeof window . getSelection , x = 1 ; 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 : x ++ ; 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 ,
new CKEDITOR . dom . selection ( this . root ) ; a . selectRanges ( [ this ] ) ; return a } ; CKEDITOR . SELECTION _NONE = 1 ; CKEDITOR . SELECTION _TEXT = 2 ; CKEDITOR . SELECTION _ELEMENT = 3 ; var n = "function" != typeof window . getSelection , w = 1 ; 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 : w ++ ; 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 G = { 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 } , u = CKEDITOR . tools . repeat ( " " , 7 ) , r = new RegExp ( u + "( )?" , "g" ) ; CKEDITOR . tools . extend ( CKEDITOR . dom . selection , { _removeFillingCharSequenceString : k , _createFillingCharSequenceNode : g , FILLING _CHAR _SEQUENCE : u } ) ; CKEDITOR . dom . selection . prototype = { getNative : function ( ) { return void 0 !==
this . _ . cache . nativeSel ? this . _ . cache . nativeSel : this . _ . cache . nativeSel = p ? this . document . $ . selection : this . document . getWindow ( ) . $ . getSelection ( ) } , getType : p ? function ( ) { var a = this . _ . cache ; if ( a . type ) return a . type ; var b = CKEDITOR . SELECTION _NONE ; try { var c = this . getNative ( ) , d = c . type ; "Text" == d && ( b = CKEDITOR . SELECTION _TEXT ) ; "Control" == d && ( b = CKEDITOR . SELECTION _ELEMENT ) ; c . createRange ( ) . parentElement ( ) && ( b = CKEDITOR . SELECTION _TEXT ) } catch ( e ) { } return a . type = b } : function ( ) { var a = this . _ . cache ; if ( a . type ) return a . type ; var b =
CKEDITOR . SELECTION _TEXT , c = this . getNative ( ) ; if ( ! c || ! c . rangeCount ) b = CKEDITOR . SELECTION _NONE ; else if ( 1 == c . rangeCount ) { var c = c . getRangeAt ( 0 ) , d = c . startContainer ; d == c . endContainer && 1 == d . nodeType && 1 == c . endOffset - c . startOffset && G [ d . childNodes [ c . startOffset ] . nodeName . toLowerCase ( ) ] && ( b = CKEDITOR . SELECTION _ELEMENT ) } return a . type = b } , getRanges : function ( ) { var a = p ? function ( ) { function a ( b ) { return ( new CKEDITOR . dom . node ( b ) ) . getIndex ( ) } var b = function ( b , c ) { b = b . duplicate ( ) ; b . collapse ( c ) ; var d = b . parentElement ( ) ; if ( ! d . hasChildNodes ( ) ) return { container : d ,
offset : 0 } ; for ( var e = d . children , f , h , g = b . duplicate ( ) , l = 0 , v = e . length - 1 , k = - 1 , m , p ; l <= v ; ) if ( k = Math . floor ( ( l + v ) / 2 ) , f = e [ k ] , g . moveToElementText ( f ) , m = g . compareEndPoints ( "StartToStart" , b ) , 0 < m ) v = k - 1 ; else if ( 0 > m ) l = k + 1 ; else return { container : d , offset : a ( f ) } ; if ( - 1 == k || k == e . length - 1 && 0 > m ) { g . moveToElementText ( d ) ; g . setEndPoint ( "StartToStart" , b ) ; g = g . text . replace ( /(\r\n|\r)/g , "\n" ) . length ; e = d . childNodes ; if ( ! g ) return f = e [ e . length - 1 ] , f . nodeType != CKEDITOR . NODE _TEXT ? { container : d , offset : e . length } : { container : f , offset : f . nodeValue . length } ;
for ( d = e . length ; 0 < g && 0 < d ; ) h = e [ -- d ] , h . nodeType == CKEDITOR . NODE _TEXT && ( p = h , g -= h . nodeValue . length ) ; return { container : p , offset : - g } } g . collapse ( 0 < m ? ! 0 : ! 1 ) ; g . setEndPoint ( 0 < m ? "StartToStart" : "EndToStart" , b ) ; g = g . text . replace ( /(\r\n|\r)/g , "\n" ) . length ; if ( ! g ) return { container : d , offset : a ( f ) + ( 0 < m ? 0 : 1 ) } ; for ( ; 0 < g ; ) try { h = f [ 0 < m ? "previousSibling" : "nextSibling" ] , h . nodeType == CKEDITOR . NODE _TEXT && ( g -= h . nodeValue . length , p = h ) , f = h } catch ( q ) { return { container : d , offset : a ( f ) } } return { container : p , offset : 0 < m ? - g : p . nodeValue . length + g } } ;
null , this . _ . cache . selectedText = "" , this . _ . cache . ranges = new CKEDITOR . dom . rangeList ; return this } ; var H = { 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 } , u = CKEDITOR . tools . repeat ( " " , 7 ) , t = new RegExp ( u + "( )?" , "g" ) ; CKEDITOR . tools . extend ( CKEDITOR . dom . selection , { _removeFillingCharSequenceString : l , _createFillingCharSequenceNode : g , FILLING _CHAR _SEQUENCE : u } ) ; CKEDITOR . dom . selection . prototype = { getNative : function ( ) { return void 0 !==
this . _ . cache . nativeSel ? this . _ . cache . nativeSel : this . _ . cache . nativeSel = n ? this . document . $ . selection : this . document . getWindow ( ) . $ . getSelection ( ) } , getType : n ? function ( ) { var a = this . _ . cache ; if ( a . type ) return a . type ; var b = CKEDITOR . SELECTION _NONE ; try { var c = this . getNative ( ) , d = c . type ; "Text" == d && ( b = CKEDITOR . SELECTION _TEXT ) ; "Control" == d && ( b = CKEDITOR . SELECTION _ELEMENT ) ; c . createRange ( ) . parentElement ( ) && ( b = CKEDITOR . SELECTION _TEXT ) } catch ( e ) { } return a . type = b } : function ( ) { var a = this . _ . cache ; if ( a . type ) return a . type ; var b =
CKEDITOR . SELECTION _TEXT , c = this . getNative ( ) ; if ( ! c || ! c . rangeCount ) b = CKEDITOR . SELECTION _NONE ; else if ( 1 == c . rangeCount ) { var c = c . getRangeAt ( 0 ) , d = c . startContainer ; d == c . endContainer && 1 == d . nodeType && 1 == c . endOffset - c . startOffset && H [ d . childNodes [ c . startOffset ] . nodeName . toLowerCase ( ) ] && ( b = CKEDITOR . SELECTION _ELEMENT ) } return a . type = b } , getRanges : function ( ) { var a = n ? function ( ) { function a ( b ) { return ( new CKEDITOR . dom . node ( b ) ) . getIndex ( ) } var b = function ( b , c ) { b = b . duplicate ( ) ; b . collapse ( c ) ; var d = b . parentElement ( ) ; if ( ! d . hasChildNodes ( ) ) return { container : d ,
offset : 0 } ; for ( var e = d . children , f , h , g = b . duplicate ( ) , k = 0 , l = e . length - 1 , C = - 1 , m , n ; k <= l ; ) if ( C = Math . floor ( ( k + l ) / 2 ) , f = e [ C ] , g . moveToElementText ( f ) , m = g . compareEndPoints ( "StartToStart" , b ) , 0 < m ) l = C - 1 ; else if ( 0 > m ) k = C + 1 ; else return { container : d , offset : a ( f ) } ; if ( - 1 == C || C == e . length - 1 && 0 > m ) { g . moveToElementText ( d ) ; g . setEndPoint ( "StartToStart" , b ) ; g = g . text . replace ( /(\r\n|\r)/g , "\n" ) . length ; e = d . childNodes ; if ( ! g ) return f = e [ e . length - 1 ] , f . nodeType != CKEDITOR . NODE _TEXT ? { container : d , offset : e . length } : { container : f , offset : f . nodeValue . length } ;
for ( d = e . length ; 0 < g && 0 < d ; ) h = e [ -- d ] , h . nodeType == CKEDITOR . NODE _TEXT && ( n = h , g -= h . nodeValue . length ) ; return { container : n , offset : - g } } g . collapse ( 0 < m ? ! 0 : ! 1 ) ; g . setEndPoint ( 0 < m ? "StartToStart" : "EndToStart" , b ) ; g = g . text . replace ( /(\r\n|\r)/g , "\n" ) . length ; if ( ! g ) return { container : d , offset : a ( f ) + ( 0 < m ? 0 : 1 ) } ; for ( ; 0 < g ; ) try { h = f [ 0 < m ? "previousSibling" : "nextSibling" ] , h . nodeType == CKEDITOR . NODE _TEXT && ( g -= h . nodeValue . length , n = h ) , f = h } catch ( K ) { return { container : d , offset : a ( f ) } } return { container : n , offset : 0 < m ? - g : n . nodeValue . length + g } } ;
return function ( ) { var a = this . getNative ( ) , c = a && a . createRange ( ) , d = this . getType ( ) ; if ( ! a ) return [ ] ; if ( d == CKEDITOR . SELECTION _TEXT ) return a = new CKEDITOR . dom . range ( this . root ) , d = b ( c , ! 0 ) , a . setStart ( new CKEDITOR . dom . node ( d . container ) , d . offset ) , d = b ( c ) , a . setEnd ( new CKEDITOR . dom . node ( d . container ) , d . offset ) , a . endContainer . getPosition ( a . startContainer ) & CKEDITOR . POSITION _PRECEDING && a . endOffset <= a . startContainer . getIndex ( ) && a . collapse ( ) , [ a ] ; if ( d == CKEDITOR . SELECTION _ELEMENT ) { for ( var d = [ ] , e = 0 ; e < c . length ; e ++ ) { for ( var f =
c . item ( e ) , h = f . parentNode , g = 0 , a = new CKEDITOR . dom . range ( this . root ) ; g < h . childNodes . length && h . childNodes [ g ] != f ; g ++ ) ; a . setStart ( new CKEDITOR . dom . node ( h ) , g ) ; a . setEnd ( new CKEDITOR . dom . node ( h ) , g + 1 ) ; d . push ( a ) } return d } return [ ] } } ( ) : function ( ) { var a = [ ] , b , c = this . getNative ( ) ; if ( ! c ) return a ; for ( var d = 0 ; d < c . rangeCount ; d ++ ) { var e = c . getRangeAt ( d ) ; b = new CKEDITOR . dom . range ( this . root ) ; b . setStart ( new CKEDITOR . dom . node ( e . startContainer ) , e . startOffset ) ; b . setEnd ( new CKEDITOR . dom . node ( e . endContainer ) , e . endOffset ) ; a . push ( b ) } return a } ;
return function ( b ) { var c = this . _ . cache , d = c . ranges ; d || ( c . ranges = d = new CKEDITOR . dom . rangeList ( a . call ( this ) ) ) ; return b ? f ( new CKEDITOR . dom . rangeList ( d . slice ( ) ) ) : d } } ( ) , getStartElement : function ( ) { var a = this . _ . cache ; if ( void 0 !== a . startElement ) return a . startElement ; var b ; switch ( this . getType ( ) ) { case CKEDITOR . SELECTION _ELEMENT : return this . getSelectedElement ( ) ; case CKEDITOR . SELECTION _TEXT : var c = this . getRanges ( ) [ 0 ] ; if ( c ) { if ( c . collapsed ) b = c . startContainer , b . type != CKEDITOR . NODE _ELEMENT && ( b = b . getParent ( ) ) ; else { for ( c . optimize ( ) ; b =
c . startContainer , c . startOffset == ( b . getChildCount ? b . getChildCount ( ) : b . getLength ( ) ) && ! b . isBlockBoundary ( ) ; ) c . setStartAfter ( b ) ; b = c . startContainer ; if ( b . type != CKEDITOR . NODE _ELEMENT ) return b . getParent ( ) ; if ( ( b = b . getChild ( c . startOffset ) ) && b . type == CKEDITOR . NODE _ELEMENT ) for ( c = b . getFirst ( ) ; c && c . type == CKEDITOR . NODE _ELEMENT ; ) b = c , c = c . getFirst ( ) ; else b = c . startContainer } b = b . $ } } return a . startElement = b ? new CKEDITOR . dom . element ( b ) : null } , getSelectedElement : function ( ) { var a = this . _ . cache ; if ( void 0 !== a . selectedElement ) return a . selectedElement ;
var b = this , c = CKEDITOR . tools . tryThese ( function ( ) { return b . getNative ( ) . createRange ( ) . item ( 0 ) } , function ( ) { for ( var a = b . getRanges ( ) [ 0 ] . clone ( ) , c , d , e = 2 ; e && ! ( ( c = a . getEnclosedNode ( ) ) && c . type == CKEDITOR . NODE _ELEMENT && G [ c . getName ( ) ] && ( d = c ) ) ; e -- ) a . shrink ( CKEDITOR . SHRINK _ELEMENT ) ; return d && d . $ } ) ; return a . selectedElement = c ? new CKEDITOR . dom . element ( c ) : null } , getSelectedText : function ( ) { var a = this . _ . cache ; if ( void 0 !== a . selectedText ) return a . selectedText ; var b = this . getNative ( ) , b = p ? "Control" == b . type ? "" : b . createRange ( ) . text :
var b = this , c = CKEDITOR . tools . tryThese ( function ( ) { return b . getNative ( ) . createRange ( ) . item ( 0 ) } , function ( ) { for ( var a = b . getRanges ( ) [ 0 ] . clone ( ) , c , d , e = 2 ; e && ! ( ( c = a . getEnclosedNode ( ) ) && c . type == CKEDITOR . NODE _ELEMENT && H [ c . getName ( ) ] && ( d = c ) ) ; e -- ) a . shrink ( CKEDITOR . SHRINK _ELEMENT ) ; return d && d . $ } ) ; return a . selectedElement = c ? new CKEDITOR . dom . element ( c ) : null } , getSelectedText : function ( ) { var a = this . _ . cache ; if ( void 0 !== a . selectedText ) return a . selectedText ; var b = this . getNative ( ) , b = n ? "Control" == b . type ? "" : b . createRange ( ) . text :
b . toString ( ) ; return a . selectedText = b } , lock : function ( ) { this . getRanges ( ) ; this . getStartElement ( ) ; this . getSelectedElement ( ) ; this . getSelectedText ( ) ; this . _ . cache . nativeSel = null ; this . isLocked = 1 } , unlock : function ( a ) { if ( this . isLocked ) { if ( a ) var b = this . getSelectedElement ( ) , c = ! b && this . getRanges ( ) , d = this . isFake ; this . isLocked = 0 ; this . reset ( ) ; a && ( a = b || c [ 0 ] && c [ 0 ] . getCommonAncestor ( ) ) && a . getAscendant ( "body" , 1 ) && ( d ? 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 = x ++ } , 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 , b = b && b . _ . hiddenSelectionContainer ; this . reset ( ) ; if ( b ) for ( var b = this . root , c , d = 0 ; d < a . length ; ++ d ) c = a [ d ] , c . endContainer . equals ( b ) && ( c . endOffset = Math . min ( c . endOffset , b . getChildCount ( ) ) ) ; if ( a . length ) if ( this . isLocked ) { var f = CKEDITOR . document . getActive ( ) ; this . unlock ( ) ; this . selectRanges ( a ) ; this . lock ( ) ; f && ! f . equals ( this . root ) && f . focus ( ) } else { var k ; a : { var q , w ; if ( 1 == a . length && ! ( w = a [ 0 ] ) . collapsed && ( k = w . getEnclosedNode ( ) ) && k . type == CKEDITOR . NODE _ELEMENT && ( w = w . clone ( ) , w . shrink ( CKEDITOR . SHRINK _ELEMENT ,
! 0 ) , ( q = w . getEnclosedNode ( ) ) && q . type == CKEDITOR . NODE _ELEMENT && ( k = q ) , "false" == k . getAttribute ( "contenteditable" ) ) ) break a ; k = void 0 } if ( k ) this . fake ( k ) ; else { if ( p ) { w = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ; q = /\ufeff|\u00a0/ ; b = { table : 1 , tbody : 1 , tr : 1 } ; 1 < a . length && ( k = a [ a . length - 1 ] , a [ 0 ] . setEnd ( k . endContainer , k . endOffset ) ) ; k = a [ 0 ] ; a = k . collapsed ; var t , u , r ; if ( ( c = k . getEnclosedNode ( ) ) && c . type == CKEDITOR . NODE _ELEMENT && c . getName ( ) in G && ( ! c . is ( "a" ) || ! c . getText ( ) ) ) try { r = c . $ . createControlRange ( ) ; r . addElement ( c . $ ) ; r . select ( ) ;
return } catch ( v ) { } if ( k . startContainer . type == CKEDITOR . NODE _ELEMENT && k . startContainer . getName ( ) in b || k . endContainer . type == CKEDITOR . NODE _ELEMENT && k . endContainer . getName ( ) in b ) k . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) , a = k . collapsed ; r = k . createBookmark ( ) ; b = r . startNode ; a || ( f = r . endNode ) ; r = k . document . $ . body . createTextRange ( ) ; r . moveToElementText ( b . $ ) ; r . moveStart ( "character" , 1 ) ; f ? ( q = k . document . $ . body . createTextRange ( ) , q . moveToElementText ( f . $ ) , r . setEndPoint ( "EndToEnd" , q ) , r . moveEnd ( "character" , - 1 ) ) : ( t = b . getNext ( w ) , u =
b . hasAscendant ( "pre" ) , t = ! ( t && t . getText && t . getText ( ) . match ( q ) ) && ( u || ! b . hasPrevious ( ) || b . getPrevious ( ) . is && b . getPrevious ( ) . is ( "br" ) ) , u = k . document . createElement ( "span" ) , u . setHtml ( "\x26#65279;" ) , u . insertBefore ( b ) , t && k . document . createText ( " " ) . insertBefore ( b ) ) ; k . setStartBefore ( b ) ; b . remove ( ) ; a ? ( t ? ( r . moveStart ( "character" , - 1 ) , r . select ( ) , k . document . $ . selection . clear ( ) ) : r . select ( ) , k . moveToPosition ( u , CKEDITOR . POSITION _BEFORE _START ) , u . remove ( ) ) : ( k . setEndBefore ( f ) , f . remove ( ) , r . select ( ) ) } else { f = this . getNative ( ) ;
if ( ! f ) return ; this . removeAllRanges ( ) ; for ( r = 0 ; r < a . length ; r ++ ) { if ( r < a . length - 1 && ( t = a [ r ] , u = a [ r + 1 ] , q = t . clone ( ) , q . setStart ( t . endContainer , t . endOffset ) , q . setEnd ( u . startContainer , u . startOffset ) , ! q . collapsed && ( q . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) , k = q . getCommonAncestor ( ) , q = q . getEnclosedNode ( ) , k . isReadOnly ( ) || q && q . isReadOnly ( ) ) ) ) { u . setStart ( t . startContainer , t . startOffset ) ; a . splice ( r -- , 1 ) ; continue } k = a [ r ] ; u = this . document . $ . createRange ( ) ; k . collapsed && CKEDITOR . env . webkit && e ( k ) && ( q = g ( this . root ) , k . insertNode ( q ) , ( t =
q . getNext ( ) ) && ! q . getPrevious ( ) && t . type == CKEDITOR . NODE _ELEMENT && "br" == t . getName ( ) ? ( l ( this . root ) , k . moveToPosition ( t , CKEDITOR . POSITION _BEFORE _START ) ) : k . moveToPosition ( q , CKEDITOR . POSITION _AFTER _END ) ) ; u . setStart ( k . startContainer . $ , k . startOffset ) ; try { u . setEnd ( k . endContainer . $ , k . endOffset ) } catch ( I ) { if ( 0 <= I . toString ( ) . indexOf ( "NS_ERROR_ILLEGAL_VALUE" ) ) k . collapse ( 1 ) , u . setEnd ( k . endContainer . $ , k . endOffset ) ; else throw I ; } f . addRange ( u ) } } this . reset ( ) ; this . root . fire ( "selectionchange" ) } } } , fake : function ( a ) { var b =
this . root . editor ; this . reset ( ) ; q ( b ) ; var c = this . _ . cache , d = new CKEDITOR . dom . range ( this . root ) ; d . setStartBefore ( a ) ; d . setEndAfter ( a ) ; c . ranges = new CKEDITOR . dom . rangeList ( d ) ; c . selectedElement = c . startElement = a ; c . type = CKEDITOR . SELECTION _ELEMENT ; c . selectedText = c . nativeSel = null ; this . isFake = 1 ; this . rev = x ++ ; b . _ . 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" ) ) } , 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 , d = 0 ; d < a . length ; d ++ ) { var e = new CKEDITOR . dom . range ( this . root ) ; e . moveToBookmark ( a [ d ] ) ; b . push ( e ) } a . isFake && ( c = b [ 0 ] . getEnclosedNode ( ) , c && c . type == CKEDITOR . NODE _ELEMENT || ( CKEDITOR . warn ( "selection-not-fake" ) , a . isFake = 0 ) ) ; a . isFake ? 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 [ p ? "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 f = c . document ; if ( c . collapsed ) f = G ( this , f ) , c . insertNode ( f ) , c . moveToPosition ( f , CKEDITOR . POSITION _BEFORE _END ) ; else { var g = this . element , h = this . _ . definition , l , k = h . ignoreReadonly , m = k || h . includeReadonly ; null ==
m && ( m = c . root . getCustomData ( "cke_includeReadonly" ) ) ; var n = CKEDITOR . dtd [ g ] ; n || ( l = ! 0 , n = CKEDITOR . dtd . span ) ; c . enlarge ( CKEDITOR . ENLARGE _INLINE , 1 ) ; c . trim ( ) ; var p = c . createBookmark ( ) , q = p . startNode , w = p . endNode , t = q , r ; if ( ! k ) { var u = c . getCommonAncestor ( ) , k = a ( q , u ) , u = a ( w , u ) ; k && ( t = k . getNextSourceNode ( ! 0 ) ) ; u && ( w = u ) } for ( t . getPosition ( w ) == CKEDITOR . POSITION _FOLLOWING && ( t = 0 ) ; t ; ) { k = ! 1 ; if ( t . equals ( w ) ) t = null , k = ! 0 ; else { var y = t . type == CKEDITOR . NODE _ELEMENT ? t . getName ( ) : null , u = y && "false" == t . getAttribute ( "contentEditable" ) , x = y &&
t . getAttribute ( "data-nostyle" ) ; if ( y && t . data ( "cke-bookmark" ) ) { t = t . getNextSourceNode ( ! 0 ) ; continue } if ( u && m && CKEDITOR . dtd . $block [ y ] ) for ( var A = t , z = e ( A ) , B = void 0 , C = z . length , E = 0 , A = C && new CKEDITOR . dom . range ( A . getDocument ( ) ) ; E < C ; ++ E ) { var B = z [ E ] , R = CKEDITOR . filter . instances [ B . data ( "cke-filter" ) ] ; if ( R ? R . check ( this ) : 1 ) A . selectNodeContents ( B ) , b . call ( this , A ) } z = y ? ! n [ y ] || x ? 0 : u && ! m ? 0 : d ( t , w , h , T ) : 1 ; if ( z ) if ( B = t . getParent ( ) , z = h , C = g , E = l , ! B || ! ( B . getDtd ( ) || CKEDITOR . dtd . span ) [ C ] && ! E || z . parentRule && ! z . parentRule ( B ) ) k = ! 0 ; else { if ( r ||
y && CKEDITOR . dtd . $removeEmpty [ y ] && ( t . getPosition ( w ) | T ) != T || ( r = c . clone ( ) , r . setStartBefore ( t ) ) , y = t . type , y == CKEDITOR . NODE _TEXT || u || y == CKEDITOR . NODE _ELEMENT && ! t . getChildCount ( ) ) { for ( var y = t , Y ; ( k = ! y . getNext ( H ) ) && ( Y = y . getParent ( ) , n [ Y . getName ( ) ] ) && d ( Y , q , h , Q ) ; ) y = Y ; r . setEndAfter ( y ) } } else k = ! 0 ; t = t . getNextSourceNode ( x || u ) } if ( k && r && ! r . collapsed ) { for ( var k = G ( this , f ) , u = k . hasAttributes ( ) , x = r . getCommonAncestor ( ) , y = { } , z = { } , B = { } , C = { } , U , O , da ; k && x ; ) { if ( x . getName ( ) == g ) { for ( U in h . attributes ) ! C [ U ] && ( da = x . getAttribute ( O ) ) &&
( k . getAttribute ( U ) == da ? z [ U ] = 1 : C [ U ] = 1 ) ; for ( O in h . styles ) ! B [ O ] && ( da = x . getStyle ( O ) ) && ( k . getStyle ( O ) == da ? y [ O ] = 1 : B [ O ] = 1 ) } x = x . getParent ( ) } for ( U in z ) k . removeAttribute ( U ) ; for ( O in y ) k . removeStyle ( O ) ; u && ! k . hasAttributes ( ) && ( k = null ) ; k ? ( r . extractContents ( ) . appendTo ( k ) , r . insertNode ( k ) , D . call ( this , k ) , k . mergeSiblings ( ) , CKEDITOR . env . ie || k . $ . normalize ( ) ) : ( k = new CKEDITOR . dom . element ( "span" ) , r . extractContents ( ) . appendTo ( k ) , r . insertNode ( k ) , D . call ( this , k ) , k . remove ( ! 0 ) ) ; r = null } } c . moveToBookmark ( p ) ; c . shrink ( CKEDITOR . SHRINK _TEXT ) ;
c . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) } } function c ( a ) { function b ( ) { for ( var a = new CKEDITOR . dom . elementPath ( d . getParent ( ) ) , c = new CKEDITOR . dom . elementPath ( m . getParent ( ) ) , e = null , f = null , g = 0 ; g < a . elements . length ; g ++ ) { var h = a . elements [ g ] ; if ( h == a . block || h == a . blockLimit ) break ; n . checkElementRemovable ( h , ! 0 ) && ( e = h ) } for ( g = 0 ; g < c . elements . length ; g ++ ) { h = c . elements [ g ] ; if ( h == c . block || h == c . blockLimit ) break ; n . checkElementRemovable ( h , ! 0 ) && ( f = h ) } f && m . breakParent ( f ) ; e && d . breakParent ( e ) } a . enlarge ( CKEDITOR . ENLARGE _INLINE , 1 ) ; var c =
a . createBookmark ( ) , d = c . startNode ; if ( a . collapsed ) { for ( var e = new CKEDITOR . dom . elementPath ( d . getParent ( ) , a . root ) , f , g = 0 , k ; g < e . elements . length && ( k = e . elements [ g ] ) && k ! =e . block && k ! =e . blockLimit ; g ++ ) if ( this . checkElementRemovable ( k ) ) { var l ; a . collapsed && ( a . checkBoundaryOfElement ( k , CKEDITOR . END ) || ( l = a . checkBoundaryOfElement ( k , CKEDITOR . START ) ) ) ? ( f = k , f . match = l ? "start" : "end" ) : ( k . mergeSiblings ( ) , k . is ( this . element ) ? t . call ( this , k ) : p ( k , h ( this ) [ k . getName ( ) ] ) ) } if ( f ) { k = d ; for ( g = 0 ; ; g ++ ) { l = e . elements [ g ] ; if ( l . equals ( f ) ) break ;
else if ( l . match ) continue ; else l = l . clone ( ) ; l . append ( k ) ; k = l } k [ "start" == f . match ? "insertBefore" : "insertAfter" ] ( f ) } } else { var m = c . endNode , n = this ; b ( ) ; for ( e = d ; ! e . equals ( m ) ; ) f = e . getNextSourceNode ( ) , e . type == CKEDITOR . NODE _ELEMENT && this . checkElementRemovable ( e ) && ( e . getName ( ) == this . element ? t . call ( this , e ) : p ( e , h ( this ) [ e . getName ( ) ] ) , f . type == CKEDITOR . NODE _ELEMENT && f . contains ( d ) && ( b ( ) , f = d . getNext ( ) ) ) , e = f } a . moveToBookmark ( c ) ; a . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) } function e ( a ) { var b = [ ] ; a . forEach ( function ( a ) { if ( "true" ==
a . getAttribute ( "contenteditable" ) ) return b . push ( a ) , ! 1 } , CKEDITOR . NODE _ELEMENT , ! 0 ) ; return b } function g ( 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 l ( a ) { var b = a . getCommonAncestor ( ! 0 , ! 0 ) ; if ( a = ( new CKEDITOR . dom . elementPath ( b , a . root ) ) . contains ( this . element , 1 ) ) { var b = this . _ . definition , c = b . attributes ; if ( c ) for ( var d in c ) a . removeAttribute ( d , c [ d ] ) ; if ( b . styles ) for ( var e in b . styles ) b . styles . hasOwnProperty ( e ) &&
a . removeStyle ( e ) } } function k ( 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 = G ( this , e , d ) , w ( d , f ) ) ; a . moveToBookmark ( b ) } function q ( 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 ) , w ( d , e ) ) : t . call ( this , d ) ) ; a . moveToBookmark ( b ) } function w ( a , b ) { var c = ! b ; c && ( b = a . getDocument ( ) . createElement ( "div" ) , a . copyAttributes ( b ) ) ; var d = b && b . is ( "pre" ) , e = a . is ( "pre" ) , g = ! d && e ; if ( d && ! e ) { e = b ; ( g = a . getBogus ( ) ) && g . remove ( ) ; g = a . getHtml ( ) ; g = y ( g , /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g , "" ) ; g = g . replace ( /[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi , "$1" ) ; g = g . replace ( /([ \t\n\r]+| )/g ,
" " ) ; g = g . replace ( /<br\b[^>]*>/gi , "\n" ) ; if ( CKEDITOR . env . ie ) { var h = a . getDocument ( ) . createElement ( "div" ) ; h . append ( e ) ; e . $ . outerHTML = "\x3cpre\x3e" + g + "\x3c/pre\x3e" ; e . copyAttributes ( h . getFirst ( ) ) ; e = h . getFirst ( ) . remove ( ) } else e . setHtml ( g ) ; b = e } else g ? b = A ( c ? [ a . getHtml ( ) ] : f ( a ) , b ) : a . moveChildren ( b ) ; b . replace ( a ) ; if ( d ) { var c = b , k ; ( k = c . getPrevious ( R ) ) && 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 && x ( b ) } function f ( a ) { var b = [ ] ; y ( a . getOuterHtml ( ) , /(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi , function ( a , b , c ) { return b + "\x3c/ pre\x3e" + c + "\x3cpre\x3e" } ) . replace ( /<pre\b.*?>([\s\S]*?)<\/pre>/gi , function ( a , c ) { b . push ( c ) } ) ; return b } function y ( a , b , c ) { var d = "" , e = "" ; a = a . replace ( /(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi , function ( a , b , c ) { b && ( d = b ) ; c && ( e = c ) ; return "" } ) ; return d + a . replace ( b , c ) + e } function A ( a , b ) { var c ;
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 = w ++ } , 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 , b = b && b . _ . hiddenSelectionContainer ; this . reset ( ) ; if ( b ) for ( var b = this . root , c , d = 0 ; d < a . length ; ++ d ) c = a [ d ] , c . endContainer . equals ( b ) && ( c . endOffset = Math . min ( c . endOffset , b . getChildCount ( ) ) ) ; if ( a . length ) if ( this . isLocked ) { var f = CKEDITOR . document . getActive ( ) ; this . unlock ( ) ; this . selectRanges ( a ) ; this . lock ( ) ; f && ! f . equals ( this . root ) && f . focus ( ) } else { var l ; a : { var q , v ; if ( 1 == a . length && ! ( v = a [ 0 ] ) . collapsed && ( l = v . getEnclosedNode ( ) ) && l . type == CKEDITOR . NODE _ELEMENT && ( v = v . clone ( ) , v . shrink ( CKEDITOR . SHRINK _ELEMENT ,
! 0 ) , ( q = v . getEnclosedNode ( ) ) && q . type == CKEDITOR . NODE _ELEMENT && ( l = q ) , "false" == l . getAttribute ( "contenteditable" ) ) ) break a ; l = void 0 } if ( l ) this . fake ( l ) ; else { if ( n ) { v = CKEDITOR . dom . walker . whitespaces ( ! 0 ) ; q = /\ufeff|\u00a0/ ; b = { table : 1 , tbody : 1 , tr : 1 } ; 1 < a . length && ( l = a [ a . length - 1 ] , a [ 0 ] . setEnd ( l . endContainer , l . endOffset ) ) ; l = a [ 0 ] ; a = l . collapsed ; var r , u , t ; if ( ( c = l . getEnclosedNode ( ) ) && c . type == CKEDITOR . NODE _ELEMENT && c . getName ( ) in H && ( ! c . is ( "a" ) || ! c . getText ( ) ) ) try { t = c . $ . createControlRange ( ) ; t . addElement ( c . $ ) ; t . select ( ) ;
return } catch ( y ) { } if ( l . startContainer . type == CKEDITOR . NODE _ELEMENT && l . startContainer . getName ( ) in b || l . endContainer . type == CKEDITOR . NODE _ELEMENT && l . endContainer . getName ( ) in b ) l . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) , a = l . collapsed ; t = l . createBookmark ( ) ; b = t . startNode ; a || ( f = t . endNode ) ; t = l . document . $ . body . createTextRange ( ) ; t . moveToElementText ( b . $ ) ; t . moveStart ( "character" , 1 ) ; f ? ( q = l . document . $ . body . createTextRange ( ) , q . moveToElementText ( f . $ ) , t . setEndPoint ( "EndToEnd" , q ) , t . moveEnd ( "character" , - 1 ) ) : ( r = b . getNext ( v ) , u =
b . hasAscendant ( "pre" ) , r = ! ( r && r . getText && r . getText ( ) . match ( q ) ) && ( u || ! b . hasPrevious ( ) || b . getPrevious ( ) . is && b . getPrevious ( ) . is ( "br" ) ) , u = l . document . createElement ( "span" ) , u . setHtml ( "\x26#65279;" ) , u . insertBefore ( b ) , r && l . document . createText ( " " ) . insertBefore ( b ) ) ; l . setStartBefore ( b ) ; b . remove ( ) ; a ? ( r ? ( t . moveStart ( "character" , - 1 ) , t . select ( ) , l . document . $ . selection . clear ( ) ) : t . select ( ) , l . moveToPosition ( u , CKEDITOR . POSITION _BEFORE _START ) , u . remove ( ) ) : ( l . setEndBefore ( f ) , f . remove ( ) , t . select ( ) ) } else { f = this . getNative ( ) ;
if ( ! f ) return ; this . removeAllRanges ( ) ; for ( t = 0 ; t < a . length ; t ++ ) { if ( t < a . length - 1 && ( r = a [ t ] , u = a [ t + 1 ] , q = r . clone ( ) , q . setStart ( r . endContainer , r . endOffset ) , q . setEnd ( u . startContainer , u . startOffset ) , ! q . collapsed && ( q . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) , l = q . getCommonAncestor ( ) , q = q . getEnclosedNode ( ) , l . isReadOnly ( ) || q && q . isReadOnly ( ) ) ) ) { u . setStart ( r . startContainer , r . startOffset ) ; a . splice ( t -- , 1 ) ; continue } l = a [ t ] ; u = this . document . $ . createRange ( ) ; l . collapsed && CKEDITOR . env . webkit && e ( l ) && ( q = g ( this . root ) , l . insertNode ( q ) , ( r =
q . getNext ( ) ) && ! q . getPrevious ( ) && r . type == CKEDITOR . NODE _ELEMENT && "br" == r . getName ( ) ? ( k ( this . root ) , l . moveToPosition ( r , CKEDITOR . POSITION _BEFORE _START ) ) : l . moveToPosition ( q , CKEDITOR . POSITION _AFTER _END ) ) ; u . setStart ( l . startContainer . $ , l . startOffset ) ; try { u . setEnd ( l . endContainer . $ , l . endOffset ) } catch ( C ) { if ( 0 <= C . toString ( ) . indexOf ( "NS_ERROR_ILLEGAL_VALUE" ) ) l . collapse ( 1 ) , u . setEnd ( l . endContainer . $ , l . endOffset ) ; else throw C ; } f . addRange ( u ) } } 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 ( ) ; q ( 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 = w ++ ; 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" ) ) } , 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 , d = 0 ; d < a . length ; d ++ ) { var e = new CKEDITOR . dom . range ( this . root ) ; e . moveToBookmark ( a [ d ] ) ; b . push ( e ) } a . isFake && ( c = b [ 0 ] . getEnclosedNode ( ) , c && c . type == CKEDITOR . NODE _ELEMENT || ( CKEDITOR . warn ( "selection-not-fake" ) ,
a . isFake = 0 ) ) ; a . isFake ? this . fake ( c ) : this . selectRanges ( b ) ; return this } , getCommonAncestor : function ( ) { var a = this . getRanges ( ) ; return a . length ? a [ 0 ] . startContainer . getCommonAncestor ( a [ a . length - 1 ] . endContainer ) : null } , scrollIntoView : function ( ) { this . type != CKEDITOR . SELECTION _NONE && this . getRanges ( ) [ 0 ] . scrollIntoView ( ) } , removeAllRanges : function ( ) { if ( this . getType ( ) != CKEDITOR . SELECTION _NONE ) { var a = this . getNative ( ) ; try { a && a [ n ? "empty" : "removeAllRanges" ] ( ) } catch ( b ) { } this . reset ( ) } } } } ) ( ) ; "use strict" ;
CKEDITOR . STYLE _BLOCK = 1 ; CKEDITOR . STYLE _INLINE = 2 ; CKEDITOR . STYLE _OBJECT = 3 ;
( function ( ) { function a ( a , b ) { for ( var c , d ; ( a = a . getParent ( ) ) && ! a . equals ( b ) ; ) if ( a . getAttribute ( "data-nostyle" ) ) c = a ; else if ( ! d ) { var e = a . getAttribute ( "contentEditable" ) ; "false" == e ? c = a : "true" == e && ( d = 1 ) } return c } function d ( a , b , c , d ) { return ( a . getPosition ( b ) | d ) == d && ( ! c . childRule || c . childRule ( a ) ) } function b ( c ) { var f = c . document ; if ( c . collapsed ) f = H ( this , f ) , c . insertNode ( f ) , c . moveToPosition ( f , CKEDITOR . POSITION _BEFORE _END ) ; else { var g = this . element , h = this . _ . definition , k , l = h . ignoreReadonly , n = l || h . includeReadonly ; null ==
n && ( n = c . root . getCustomData ( "cke_includeReadonly" ) ) ; var m = CKEDITOR . dtd [ g ] ; m || ( k = ! 0 , m = CKEDITOR . dtd . span ) ; c . enlarge ( CKEDITOR . ENLARGE _INLINE , 1 ) ; c . trim ( ) ; var p = c . createBookmark ( ) , q = p . startNode , v = p . endNode , r = q , t ; if ( ! l ) { var u = c . getCommonAncestor ( ) , l = a ( q , u ) , u = a ( v , u ) ; l && ( r = l . getNextSourceNode ( ! 0 ) ) ; u && ( v = u ) } for ( r . getPosition ( v ) == CKEDITOR . POSITION _FOLLOWING && ( r = 0 ) ; r ; ) { l = ! 1 ; if ( r . equals ( v ) ) r = null , l = ! 0 ; else { var y = r . type == CKEDITOR . NODE _ELEMENT ? r . getName ( ) : null , u = y && "false" == r . getAttribute ( "contentEditable" ) , w = y &&
r . getAttribute ( "data-nostyle" ) ; if ( y && r . data ( "cke-bookmark" ) ) { r = r . getNextSourceNode ( ! 0 ) ; continue } if ( u && n && CKEDITOR . dtd . $block [ y ] ) for ( var A = r , x = e ( A ) , z = void 0 , B = x . length , E = 0 , A = B && new CKEDITOR . dom . range ( A . getDocument ( ) ) ; E < B ; ++ E ) { var z = x [ E ] , F = CKEDITOR . filter . instances [ z . data ( "cke-filter" ) ] ; if ( F ? F . check ( this ) : 1 ) A . selectNodeContents ( z ) , b . call ( this , A ) } x = y ? ! m [ y ] || w ? 0 : u && ! n ? 0 : d ( r , v , h , O ) : 1 ; if ( x ) if ( z = r . getParent ( ) , x = h , B = g , E = k , ! z || ! ( z . getDtd ( ) || CKEDITOR . dtd . span ) [ B ] && ! E || x . parentRule && ! x . parentRule ( z ) ) l = ! 0 ; else { if ( t ||
y && CKEDITOR . dtd . $removeEmpty [ y ] && ( r . getPosition ( v ) | O ) ! =O || ( t = c . clone ( ) , t . setStartBefore ( r ) ) , y = r . type , y == CKEDITOR . NODE _TEXT || u || y == CKEDITOR . NODE _ELEMENT && ! r . getChildCount ( ) ) { for ( var y = r , P ; ( l = ! y . getNext ( Y ) ) && ( P = y . getParent ( ) , m [ P . getName ( ) ] ) && d ( P , q , h , N ) ; ) y = P ; t . setEndAfter ( y ) } } else l = ! 0 ; r = r . getNextSourceNode ( w || u ) } if ( l && t && ! t . collapsed ) { for ( var l = H ( this , f ) , u = l . hasAttributes ( ) , w = t . getCommonAncestor ( ) , y = { } , x = { } , z = { } , B = { } , S , V , ca ; l && w ; ) { if ( w . getName ( ) == g ) { for ( S in h . attributes ) ! B [ S ] && ( ca = w . getAttribute ( V ) ) &&
( l . getAttribute ( S ) == ca ? x [ S ] = 1 : B [ S ] = 1 ) ; for ( V in h . styles ) ! z [ V ] && ( ca = w . getStyle ( V ) ) && ( l . getStyle ( V ) == ca ? y [ V ] = 1 : z [ V ] = 1 ) } w = w . getParent ( ) } for ( S in x ) l . removeAttribute ( S ) ; for ( V in y ) l . removeStyle ( V ) ; u && ! l . hasAttributes ( ) && ( l = null ) ; l ? ( t . extractContents ( ) . appendTo ( l ) , t . insertNode ( l ) , D . call ( this , l ) , l . mergeSiblings ( ) , CKEDITOR . env . ie || l . $ . normalize ( ) ) : ( l = new CKEDITOR . dom . element ( "span" ) , t . extractContents ( ) . appendTo ( l ) , t . insertNode ( l ) , D . call ( this , l ) , l . remove ( ! 0 ) ) ; t = null } } c . moveToBookmark ( p ) ; c . shrink ( CKEDITOR . SHRINK _TEXT ) ;
c . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) } } function c ( a ) { function b ( ) { for ( var a = new CKEDITOR . dom . elementPath ( d . getParent ( ) ) , c = new CKEDITOR . dom . elementPath ( m . getParent ( ) ) , e = null , f = null , g = 0 ; g < a . elements . length ; g ++ ) { var h = a . elements [ g ] ; if ( h = =a . block || h = =a . blockLimit ) break ; p . checkElementRemovable ( h , ! 0 ) && ( e = h ) } for ( g = 0 ; g < c . elements . length ; g ++ ) { h = c . elements [ g ] ; if ( h == c . block || h == c . blockLimit ) break ; p . checkElementRemovable ( h , ! 0 ) && ( f = h ) } f && m . breakParent ( f ) ; e && d . breakParent ( e ) } a . enlarge ( CKEDITOR . ENLARGE _INLINE , 1 ) ; var c =
a . createBookmark ( ) , d = c . startNode ; if ( a . collapsed ) { for ( var e = new CKEDITOR . dom . elementPath ( d . getParent ( ) , a . root ) , f , g = 0 , k ; g < e . elements . length && ( k = e . elements [ g ] ) && k != e . block && k != e . blockLimit ; g ++ ) if ( this . checkElementRemovable ( k ) ) { var l ; a . collapsed && ( a . checkBoundaryOfElement ( k , CKEDITOR . END ) || ( l = a . checkBoundaryOfElement ( k , CKEDITOR . START ) ) ) ? ( f = k , f . match = l ? "start" : "end" ) : ( k . mergeSiblings ( ) , k . is ( this . element ) ? r . call ( this , k ) : n ( k , h ( this ) [ k . getName ( ) ] ) ) } if ( f ) { k = d ; for ( g = 0 ; ; g ++ ) { l = e . elements [ g ] ; if ( l . equals ( f ) ) break ;
else if ( l . match ) continue ; else l = l . clone ( ) ; l . append ( k ) ; k = l } k [ "start" == f . match ? "insertBefore" : "insertAfter" ] ( f ) } } else { var m = c . endNode , p = this ; b ( ) ; for ( e = d ; ! e . equals ( m ) ; ) f = e . getNextSourceNode ( ) , e . type == CKEDITOR . NODE _ELEMENT && this . checkElementRemovable ( e ) && ( e . getName ( ) == this . element ? r . call ( this , e ) : n ( e , h ( this ) [ e . getName ( ) ] ) , f . type == CKEDITOR . NODE _ELEMENT && f . contains ( d ) && ( b ( ) , f = d . getNext ( ) ) ) , e = f } a . moveToBookmark ( c ) ; a . shrink ( CKEDITOR . NODE _ELEMENT , ! 0 ) } function e ( a ) { var b = [ ] ; a . forEach ( function ( a ) { if ( "true" ==
a . getAttribute ( "contenteditable" ) ) return b . push ( a ) , ! 1 } , CKEDITOR . NODE _ELEMENT , ! 0 ) ; return b } function g ( 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 l ( a ) { var b = a . createBookmark ( ! 0 ) , c = a . createIterator ( ) ; c . enforceRealBlocks = ! 0 ; this . _ . enterMode && ( c . enlargeBr = this . _ . enterMode ! =CKEDITOR . ENTER _BR ) ; for ( var d , e = a . document , f ; d = c . getNextParagraph ( ) ; ) ! d . isReadOnly ( ) && ( c . activeFilter ? c . activeFilter . check ( this ) : 1 ) && ( f = H ( this , e , d ) , v ( d , f ) ) ; a . moveToBookmark ( b ) } function q ( a ) { var b = a . createBookmark ( 1 ) , c = a . createIterator ( ) ; c . enforceRealBlocks = ! 0 ; c . enlargeBr = this . _ . enterMode != CKEDITOR . ENTER _BR ; for ( var d , e ; d = c . getNextParagraph ( ) ; ) this . checkElementRemovable ( d ) &&
( d . is ( "pre" ) ? ( ( e = this . _ . enterMode == CKEDITOR . ENTER _BR ? null : a . document . createElement ( this . _ . enterMode == CKEDITOR . ENTER _P ? "p" : "div" ) ) && d . copyAttributes ( e ) , v ( d , e ) ) : r . call ( this , d ) ) ; a . moveToBookmark ( b ) } function v ( a , b ) { var c = ! b ; c && ( b = a . getDocument ( ) . createElement ( "div" ) , a . copyAttributes ( b ) ) ; var d = b && b . is ( "pre" ) , e = a . is ( "pre" ) , g = ! d && e ; if ( d && ! e ) { e = b ; ( g = a . getBogus ( ) ) && g . remove ( ) ; g = a . getHtml ( ) ; g = y ( g , /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g , "" ) ; g = g . replace ( /[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi , "$1 " ) ; g = g . replace ( /([ \t\n\r]+| )/g ,
" " ) ; g = g . replace ( /<br\b[^>]*>/gi , "\n" ) ; if ( CKEDITOR . env . ie ) { var h = a . getDocument ( ) . createElement ( "div" ) ; h . append ( e ) ; e . $ . outerHTML = "\x3cpre\x3e" + g + "\x3c/ pre\x3e" ; e . copyAttributes ( h . getFirst ( ) ) ; e = h . getFirst ( ) . remove ( ) } else e . setHtml ( g ) ; b = e } else g ? b = A ( c ? [ a . getHtml ( ) ] : f ( a ) , b ) : a . moveChildren ( b ) ; b . replace ( a ) ; if ( d ) { var c = b , k ; ( k = c . getPrevious ( P ) ) && 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 && w ( b ) } function f ( a ) { var b = [ ] ; y ( a . getOuterHtml ( ) , /(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi , function ( a , b , c ) { return b + "\x3c/pre\x3e" + c + "\x3cpre\x3e" } ) . replace ( /<pre\b.*?>([\s\S]*?)<\/pre>/gi , function ( a , c ) { b . push ( c ) } ) ; return b } function y ( a , b , c ) { var d = "" , e = "" ; a = a . replace ( /(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi , function ( a , b , c ) { b && ( d = b ) ; c && ( e = c ) ; return "" } ) ; return d + a . replace ( b , c ) + e } function A ( 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 t ( a , b ) { var c = this . _ . definition , d = c . attributes , c = c . styles , e = h ( 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 ) == n ( g , d [ g ] ) ) b && "data-" == g . slice ( 0 , 5 ) || ( f = a . hasAttribute ( g ) , a . removeAttribute ( g ) ) ; for ( var k in c ) this . _ . definition . fullMatch && a . getStyle ( k ) != n ( k , c [ k ] , ! 0 ) || ( f = f || ! ! a . getStyle ( k ) , a . removeStyle ( k ) ) ; p ( a , e , z [ a . getName ( ) ] ) ; f && ( this . _ . definition . alwaysRemoveElement ?
x ( a , 1 ) : ! CKEDITOR . dtd . $block [ a . getName ( ) ] || this . _ . enterMode == CKEDITOR . ENTER _BR && ! a . hasAttributes ( ) ? x ( a ) : a . renameNode ( this . _ . enterMode == CKEDITOR . ENTER _P ? "p" : "div" ) ) } function D ( a ) { for ( var b = h ( this ) , c = a . getElementsByTag ( this . element ) , d , e = c . count ( ) ; 0 <= -- e ; ) d = c . getItem ( e ) , d . isReadOnly ( ) || t . 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 ( ) || p ( d , b [ f ] ) } function p ( 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 || x ( a ) } function x ( a , b ) { if ( ! a . hasAttributes ( ) || b ) if ( CKEDITOR . dtd . $block [ a . getName ( ) ] ) { var c = a . getPrevious ( R ) , d = a . getNext ( R ) ; ! 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 G ( 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 r ( a ,
b ) { for ( var c in a ) a [ c ] = a [ c ] . replace ( C , function ( a , c ) { return b [ c ] } ) } function h ( 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 n ( a , b , c ) { var d = new CKEDITOR . dom . element ( "span" ) ;
d [ c ? "setStyle" : "setAttribute" ] ( a , b ) ; return d [ c ? "getStyle" : "getAttribute" ] ( a ) } function m ( a , b , c ) { var d = a . document , e = a . getRanges ( ) ; b = b ? this . removeFromRange : this . applyToRange ; for ( var f , g = e . createIterator ( ) ; f = g . getNextRange ( ) ; ) b . call ( this , f , c ) ; a . selectRanges ( e ) ; d . removeCustomData ( "doc_processing_style" ) } var z = { 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 } , B = { 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 } , E = /\s*(?:;\s*|$)/ , C = /#\((.+?)\)/g , H = CKEDITOR . dom . walker . bookmark ( 0 , 1 ) , R = 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 ) , r ( a . attributes , b ) , r ( a . styles , b ) ) ; c = this . element = a . element ? "string" == typeof a . element ? a . element . toLowerCase ( ) : a . element : "*" ; this . type = a . type || ( z [ c ] ? CKEDITOR . STYLE _BLOCK : B [ 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 m . call ( this , a . getSelection ( ) ) ; if ( this . checkApplicable ( a . elementPath ( ) , a ) ) { var b =
this . _ . enterMode ; b || ( this . _ . enterMode = a . activeEnterMode ) ; m . call ( this , a . getSelection ( ) , 0 , a ) ; this . _ . enterMode = b } } , remove : function ( a ) { if ( a instanceof CKEDITOR . dom . document ) return m . call ( this , a . getSelection ( ) , 1 ) ; if ( this . checkApplicable ( a . elementPath ( ) , a ) ) { var b = this . _ . enterMode ; b || ( this . _ . enterMode = a . activeEnterMode ) ; m . 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 ? k : this . type == CKEDITOR . STYLE _OBJECT ?
g : null ; return this . applyToRange ( a ) } , removeFromRange : function ( a ) { this . removeFromRange = this . type == CKEDITOR . STYLE _INLINE ? c : this . type == CKEDITOR . STYLE _BLOCK ? q : this . type == CKEDITOR . STYLE _OBJECT ? l : null ; return this . removeFromRange ( a ) } , applyToObject : function ( a ) { u ( a , this ) } , checkActive : function ( a , b ) { switch ( this . type ) { case CKEDITOR . STYLE _BLOCK : return this . checkElementRemovable ( a . block || a . blockLimit , ! 0 , b ) ; case CKEDITOR . STYLE _OBJECT : case CKEDITOR . STYLE _INLINE : for ( var c = a . elements , d = 0 , e ; d < c . length ; d ++ ) if ( e = c [ d ] ,
this . type != CKEDITOR . STYLE _INLINE || e != a . block && e != a . blockLimit ) { if ( this . type == CKEDITOR . STYLE _OBJECT ) { var f = e . getName ( ) ; if ( ! ( "string" == typeof this . element ? f == this . element : f in this . element ) ) continue } if ( this . checkElementRemovable ( e , ! 0 , b ) ) return ! 0 } } return ! 1 } , checkApplicable : function ( a , b , c ) { b && b instanceof CKEDITOR . filter && ( c = b ) ; if ( c && ! c . check ( this ) ) return ! 1 ; switch ( this . type ) { case CKEDITOR . STYLE _OBJECT : return ! ! a . contains ( this . element ) ; case CKEDITOR . STYLE _BLOCK : return ! ! a . blockLimit . getDtd ( ) [ this . element ] } return ! 0 } ,
checkElementMatch : function ( a , b ) { var c = this . _ . definition ; if ( ! a || ! c . ignoreReadonly && a . isReadOnly ( ) ) return ! 1 ; var d = a . getName ( ) ; if ( "string" == typeof this . element ? d == this . element : d in this . element ) { if ( ! b && ! a . hasAttributes ( ) ) return ! 0 ; if ( d = c . _AC ) c = d ; else { var d = { } , e = 0 , f = c . attributes ; if ( f ) for ( var g in f ) e ++ , d [ g ] = f [ g ] ; if ( g = CKEDITOR . style . getStyleText ( c ) ) d . style || e ++ , d . style = g ; d . _length = e ; c = c . _AC = d } if ( c . _length ) { for ( var h in c ) if ( "_length" != h ) { e = a . getAttribute ( h ) || "" ; if ( "style" == h ) a : { d = c [ h ] ; "string" == typeof d &&
( d = CKEDITOR . tools . parseCssText ( d ) ) ; "string" == typeof e && ( e = CKEDITOR . tools . parseCssText ( e , ! 0 ) ) ; g = void 0 ; for ( g in d ) if ( ! ( g in e ) || e [ g ] != d [ g ] && "inherit" != d [ g ] && "inherit "! =e [ g ] ) { d = ! 1 ; break a } d = ! 0 } else d = c [ h ] == e ; if ( d ) { if ( ! b ) return ! 0 } else if ( b ) return ! 1 } if ( b ) return ! 0 } else return ! 0 } return ! 1 } , checkElementRemovable : function ( a , b , c ) { if ( this . checkElementMatch ( a , b , c ) ) return ! 0 ; if ( b = h ( this ) [ a . getName ( ) ] ) { var d ; if ( ! ( b = b . attributes ) ) return ! 0 ; for ( c = 0 ; c < b . length ; c ++ ) if ( d = b [ c ] [ 0 ] , d = a . getAttribute ( d ) ) { var e = b [ c ] [ 1 ] ; if ( null ===
e ) return ! 0 ; if ( "string" == typeof e ) { if ( d == e ) return ! 0 } else if ( e . test ( d ) ) return ! 0 } } return ! 1 } , buildPreview : function ( a ) { var b = this . _ . definition , c = [ ] , d = b . element ; "bdo" == d && ( d = "span" ) ; var c = [ "\x3c" , d ] , e = b . attributes ; if ( e ) for ( var f in e ) c . push ( " " , f , '\x3d"' , e [ f ] , '"' ) ; ( e = CKEDITOR . style . getStyleText ( b ) ) && c . push ( ' style\x3d"' , e , '"' ) ; c . push ( "\x3e" , a || b . name , "\x3c/" , d , "\x3e" ) ; return c . join ( "" ) } , getDefinition : function ( ) { return this . _ . definition } } ; CKEDITOR . style . getStyleText = function ( a ) { var b = a . _ST ; if ( b ) return b ;
var b = a . styles , c = a . attributes && a . attributes . style || "" , d = "" ; c . length && ( c = c . replace ( E , ";" ) ) ; for ( var e in b ) { var f = b [ e ] , g = ( e + ":" + f ) . replace ( E , ";" ) ; "inherit" == f ? d += g : c += g } c . length && ( c = CKEDITOR . tools . normalizeCssText ( c , ! 0 ) ) ; return a . _ST = c + d } ; CKEDITOR . style . customHandlers = { } ; CKEDITOR . style . addCustomHandler = function ( a ) { var b = function ( a ) { this . _ = { definition : a } ; this . setup && this . setup ( a ) } ; b . prototype = CKEDITOR . tools . extend ( CKEDITOR . tools . prototypedCopy ( CKEDITOR . style . prototype ) , { assignedTo : CKEDITOR . STYLE _OBJECT } ,
a , ! 0 ) ; return this . customHandlers [ a . type ] = b } ; var T = CKEDITOR . POSITION _PRECEDING | CKEDITOR . POSITION _IDENTICAL | CKEDITOR . POSITION _IS _CONTAINED , Q = CKEDITOR . POSITION _FOLLOWING | CKEDITOR . POSITION _IDENTICAL | CKEDITOR . POSITION _IS _CONTAINED } ) ( ) ; CKEDITOR . styleCommand = function ( a , d ) { this . requiredContent = this . allowedContent = this . style = a ; CKEDITOR . tools . extend ( this , d , ! 0 ) } ;
c . append ( f ) } else b . setHtml ( e ) } return c || b } function r ( a , b ) { var c = this . _ . definition , d = c . attributes , c = c . styles , e = h ( 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 ) == p ( g , d [ g ] ) ) b && "data-" == g . slice ( 0 , 5 ) || ( f = a . hasAttribute ( g ) , a . removeAttribute ( g ) ) ; for ( var k in c ) this . _ . definition . fullMatch && a . getStyle ( k ) != p ( k , c [ k ] , ! 0 ) || ( f = f || ! ! a . getStyle ( k ) , a . removeStyle ( k ) ) ; n ( a , e , z [ a . getName ( ) ] ) ; f && ( this . _ . definition . alwaysRemoveElement ?
w ( a , 1 ) : ! CKEDITOR . dtd . $block [ a . getName ( ) ] || this . _ . enterMode == CKEDITOR . ENTER _BR && ! a . hasAttributes ( ) ? w ( a ) : a . renameNode ( this . _ . enterMode == CKEDITOR . ENTER _P ? "p" : "div" ) ) } function D ( a ) { for ( var b = h ( this ) , c = a . getElementsByTag ( this . element ) , d , e = c . count ( ) ; 0 <= -- e ; ) d = c . getItem ( e ) , d . isReadOnly ( ) || r . 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 ( ) || n ( d , b [ f ] ) } function n ( 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 || w ( a ) } function w ( a , b ) { if ( ! a . hasAttributes ( ) || b ) if ( CKEDITOR . dtd . $block [ a . getName ( ) ] ) { var c = a . getPrevious ( P ) , d = a . getNext ( P ) ; ! c || c . type != CKEDITOR . NODE _TEXT && c . isBlockBoundary ( { br : 1 } ) || a . append ( "br" , 1 ) ; ! d || d . type != CKEDITOR . NODE _TEXT && d . isBlockBoundary ( { br : 1 } ) || a . append ( "br" ) ; a . remove ( ! 0 ) } else c = a . getFirst ( ) , d = a . getLast ( ) , a . remove ( ! 0 ) , c && ( c . type == CKEDITOR . NODE _ELEMENT && c . mergeSiblings ( ) ,
d && ! c . equals ( d ) && d . type == CKEDITOR . NODE _ELEMENT && d . mergeSiblings ( ) ) } function H ( a , b , c ) { var d ; d = a . element ; "*" == d && ( d = "span" ) ; d = new CKEDITOR . dom . element ( d , b ) ; c && c . copyAttributes ( d ) ; d = u ( d , a ) ; b . getCustomData ( "doc_processing_style" ) && d . hasAttribute ( "id" ) ? d . removeAttribute ( "id" ) : b . setCustomData ( "doc_processing_style" , 1 ) ; return d } function u ( a , b ) { var c = b . _ . definition , d = c . attributes , c = CKEDITOR . style . getStyleText ( c ) ; if ( d ) for ( var e in d ) a . setAttribute ( e , d [ e ] ) ; c && a . setAttribute ( "style" , c ) ; return a } function t ( a ,
b ) { for ( var c in a ) a [ c ] = a [ c ] . replace ( E , function ( a , c ) { return b [ c ] } ) } function h ( 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 p ( a , b , c ) { var d = new CKEDITOR . dom . element ( "span" ) ;
d [ c ? "setStyle" : "setAttribute" ] ( a , b ) ; return d [ c ? "getStyle" : "getAttribute" ] ( a ) } function m ( 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 x ( a , b , c ) { var d = a . document , e = a . getRanges ( ) ; b = b ? this . removeFromRange : this . applyToRange ; for ( var f , g = e . createIterator ( ) ; f =
g . getNextRange ( ) ; ) b . call ( this , f , c ) ; a . selectRanges ( e ) ; d . removeCustomData ( "doc_processing_style" ) } var z = { 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 } , F = { 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 } , B = /\s*(?:;\s*|$)/ , E = /#\((.+?)\)/g , Y = CKEDITOR . dom . walker . bookmark ( 0 ,
1 ) , P = 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 ) , t ( a . attributes , b ) , t ( a . styles , b ) ) ; c = this . element = a . element ? "string" == typeof a . element ? a . element . toLowerCase ( ) : a . element : "*" ; this . type = a . type || ( z [ c ] ? CKEDITOR . STYLE _BLOCK : F [ 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 x . call ( this , a . getSelection ( ) ) ; if ( this . checkApplicable ( a . elementPath ( ) , a ) ) { var b = this . _ . enterMode ; b || ( this . _ . enterMode = a . activeEnterMode ) ; x . call ( this , a . getSelection ( ) , 0 , a ) ; this . _ . enterMode = b } } , remove : function ( a ) { if ( a instanceof CKEDITOR . dom . document ) return x . call ( this , a . getSelection ( ) , 1 ) ; if ( this . checkApplicable ( a . elementPath ( ) ,
a ) ) { var b = this . _ . enterMode ; b || ( this . _ . enterMode = a . activeEnterMode ) ; x . 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 ? l : this . type == CKEDITOR . STYLE _OBJECT ? g : null ; return this . applyToRange ( a ) } , removeFromRange : function ( a ) { this . removeFromRange = this . type == CKEDITOR . STYLE _INLINE ? c : this . type == CKEDITOR . STYLE _BLOCK ? q : this . type == CKEDITOR . STYLE _OBJECT ? k : null ; return this . removeFromRange ( a ) } , applyToObject : function ( a ) { u ( a ,
this ) } , checkActive : function ( a , b ) { switch ( this . type ) { case CKEDITOR . STYLE _BLOCK : return this . checkElementRemovable ( a . block || a . blockLimit , ! 0 , b ) ; case CKEDITOR . STYLE _OBJECT : case CKEDITOR . STYLE _INLINE : for ( var c = a . elements , d = 0 , e ; d < c . length ; d ++ ) if ( e = c [ d ] , this . type != CKEDITOR . STYLE _INLINE || e != a . block && e != a . blockLimit ) { if ( this . type == CKEDITOR . STYLE _OBJECT ) { var f = e . getName ( ) ; if ( ! ( "string" == typeof this . element ? f == this . element : f in this . element ) ) continue } if ( this . checkElementRemovable ( e , ! 0 , b ) ) return ! 0 } } return ! 1 } , checkApplicable : function ( a ,
b , c ) { b && b instanceof CKEDITOR . filter && ( c = b ) ; if ( c && ! c . check ( this ) ) return ! 1 ; switch ( this . type ) { case CKEDITOR . STYLE _OBJECT : return ! ! a . contains ( this . element ) ; case CKEDITOR . STYLE _BLOCK : return ! ! a . blockLimit . getDtd ( ) [ this . element ] } return ! 0 } , checkElementMatch : function ( a , b ) { var c = this . _ . definition ; if ( ! a || ! c . ignoreReadonly && a . isReadOnly ( ) ) return ! 1 ; var d = a . getName ( ) ; if ( "string" == typeof this . element ? d == this . element : d in this . element ) { if ( ! b && ! a . hasAttributes ( ) ) return ! 0 ; if ( d = c . _AC ) c = d ; else { var d = { } , e = 0 , f = c . attributes ;
if ( f ) for ( var g in f ) e ++ , d [ g ] = f [ g ] ; if ( g = CKEDITOR . style . getStyleText ( c ) ) d . style || e ++ , d . style = g ; d . _length = e ; c = c . _AC = d } if ( c . _length ) { for ( var h in c ) if ( "_length" != h ) if ( d = a . getAttribute ( h ) || "" , "style "= =h ? m ( c [ h ] , d ) : c [ h ] == d ) { if ( ! b ) return ! 0 } else if ( b ) return ! 1 ; if ( b ) return ! 0 } else return ! 0 } return ! 1 } , checkElementRemovable : function ( a , b , c ) { if ( this . checkElementMatch ( a , b , c ) ) return ! 0 ; if ( b = h ( this ) [ a . getName ( ) ] ) { var d ; if ( ! ( b = b . attributes ) ) return ! 0 ; for ( c = 0 ; c < b . length ; c ++ ) if ( d = b [ c ] [ 0 ] , d = a . getAttribute ( d ) ) { var e = b [ c ] [ 1 ] ;
if ( null === e ) return ! 0 ; if ( "string" == typeof e ) { if ( d == e ) return ! 0 } else if ( e . test ( d ) ) return ! 0 } } return ! 1 } , buildPreview : function ( a ) { var b = this . _ . definition , c = [ ] , d = b . element ; "bdo" == d && ( d = "span" ) ; var c = [ "\x3c" , d ] , e = b . attributes ; if ( e ) for ( var f in e ) c . push ( " " , f , '\x3d"' , e [ f ] , '"' ) ; ( e = CKEDITOR . style . getStyleText ( b ) ) && c . push ( ' style\x3d"' , e , '"' ) ; c . push ( "\x3e" , a || b . name , "\x3c/" , d , "\x3e" ) ; return c . join ( "" ) } , getDefinition : function ( ) { return this . _ . definition } } ; CKEDITOR . style . getStyleText = function ( a ) { var b = a . _ST ; if ( b ) return b ;
var b = a . styles , c = a . attributes && a . attributes . style || "" , d = "" ; c . length && ( c = c . replace ( B , ";" ) ) ; for ( var e in b ) { var f = b [ e ] , g = ( e + ":" + f ) . replace ( B , ";" ) ; "inherit" == f ? d += g : c += g } c . length && ( c = CKEDITOR . tools . normalizeCssText ( c , ! 0 ) ) ; return a . _ST = c + d } ; CKEDITOR . style . customHandlers = { } ; CKEDITOR . style . addCustomHandler = function ( a ) { var b = function ( a ) { this . _ = { definition : a } ; this . setup && this . setup ( a ) } ; b . prototype = CKEDITOR . tools . extend ( CKEDITOR . tools . prototypedCopy ( CKEDITOR . style . prototype ) , { assignedTo : CKEDITOR . STYLE _OBJECT } ,
a , ! 0 ) ; return this . customHandlers [ a . type ] = b } ; var O = CKEDITOR . POSITION _PRECEDING | CKEDITOR . POSITION _IDENTICAL | CKEDITOR . POSITION _IS _CONTAINED , N = CKEDITOR . POSITION _FOLLOWING | CKEDITOR . POSITION _IDENTICAL | CKEDITOR . POSITION _IS _CONTAINED } ) ( ) ; CKEDITOR . styleCommand = function ( a , d ) { this . requiredContent = this . allowedContent = this . style = a ; CKEDITOR . tools . extend ( this , d , ! 0 ) } ;
CKEDITOR . styleCommand . prototype . exec = function ( a ) { a . focus ( ) ; this . state == CKEDITOR . TRISTATE _OFF ? a . applyStyle ( this . style ) : this . state == CKEDITOR . TRISTATE _ON && a . removeStyle ( this . style ) } ; CKEDITOR . stylesSet = new CKEDITOR . resourceManager ( "" , "stylesSet" ) ; CKEDITOR . addStylesSet = CKEDITOR . tools . bind ( CKEDITOR . stylesSet . add , CKEDITOR . stylesSet ) ; CKEDITOR . loadStylesSet = function ( a , d , b ) { CKEDITOR . stylesSet . addExternal ( a , d , "" ) ; CKEDITOR . stylesSet . load ( a , b ) } ;
CKEDITOR . tools . extend ( CKEDITOR . editor . prototype , { attachStyleStateChange : function ( a , d ) { var b = this . _ . styleStateChangeCallbacks ; b || ( b = this . _ . styleStateChangeCallbacks = [ ] , this . on ( "selectionChange" , function ( a ) { for ( var d = 0 ; d < b . length ; d ++ ) { var g = b [ d ] , l = g . style . checkActive ( a . data . path , this ) ? CKEDITOR . TRISTATE _ON : CKEDITOR . TRISTATE _OFF ; g . fn . call ( this , l ) } } ) ) ; b . push ( { style : a , fn : d } ) } , applyStyle : function ( a ) { a . apply ( this ) } , removeStyle : function ( a ) { a . remove ( this ) } , getStylesSet : function ( a ) { if ( this . _ . stylesDefinitions ) a ( this . _ . stylesDefinitions ) ;
CKEDITOR . tools . extend ( CKEDITOR . editor . prototype , { attachStyleStateChange : function ( a , d ) { var b = this . _ . styleStateChangeCallbacks ; b || ( b = this . _ . styleStateChangeCallbacks = [ ] , this . on ( "selectionChange" , function ( a ) { for ( var d = 0 ; d < b . length ; d ++ ) { var g = b [ d ] , k = g . style . checkActive ( a . data . path , this ) ? CKEDITOR . TRISTATE _ON : CKEDITOR . TRISTATE _OFF ; g . fn . call ( this , k ) } } ) ) ; b . push ( { style : a , fn : d } ) } , applyStyle : function ( a ) { a . apply ( this ) } , removeStyle : function ( a ) { a . remove ( this ) } , getStylesSet : function ( a ) { if ( this . _ . stylesDefinitions ) a ( this . _ . stylesDefinitions ) ;
else { var d = this , b = d . config . stylesCombo _stylesSet || d . config . stylesSet ; if ( ! 1 === b ) a ( null ) ; else if ( b instanceof Array ) d . _ . stylesDefinitions = b , a ( b ) ; else { b || ( b = "default" ) ; var b = b . split ( ":" ) , c = b [ 0 ] ; CKEDITOR . stylesSet . addExternal ( c , b [ 1 ] ? b . slice ( 1 ) . join ( ":" ) : CKEDITOR . getUrl ( "styles.js" ) , "" ) ; CKEDITOR . stylesSet . load ( c , function ( b ) { d . _ . stylesDefinitions = b [ c ] ; a ( d . _ . stylesDefinitions ) } ) } } } } ) ;
CKEDITOR . dom . comment = function ( a , d ) { "string" == typeof a && ( a = ( d ? d . $ : document ) . createComment ( a ) ) ; CKEDITOR . dom . domObject . call ( this , a ) } ; CKEDITOR . dom . comment . prototype = new CKEDITOR . dom . node ; CKEDITOR . tools . extend ( CKEDITOR . dom . comment . prototype , { type : CKEDITOR . NODE _COMMENT , getOuterHtml : function ( ) { return "\x3c!--" + this . $ . nodeValue + "--\x3e" } } ) ; "use strict" ;
( function ( ) { var a = { } , d = { } , b ; for ( b in CKEDITOR . dtd . $blockLimit ) b in CKEDITOR . dtd . $list || ( a [ b ] = 1 ) ; for ( b in CKEDITOR . dtd . $block ) b in CKEDITOR . dtd . $blockLimit || b in CKEDITOR . dtd . $empty || ( d [ b ] = 1 ) ; CKEDITOR . dom . elementPath = function ( b , e ) { var g = null , l = null , k = [ ] , q = b , w ; e = e || b . getDocument ( ) . getBody ( ) ; do if ( q . type == CKEDITOR . NODE _ELEMENT ) { k . push ( q ) ; if ( ! this . lastElement && ( this . lastElement = q , q . is ( CKEDITOR . dtd . $object ) || "false" == q . getAttribute ( "contenteditable" ) ) ) continue ; if ( q . equals ( e ) ) break ; if ( ! l && ( w = q . getName ( ) ,
"true" == q . getAttribute ( "contenteditable" ) ? l = q : ! g && d [ w ] && ( g = q ) , a [ w ] ) ) { if ( w = ! g && "div" == w ) { a : { w = q . getChildren ( ) ; for ( var f = 0 , y = w . count ( ) ; f < y ; f ++ ) { var A = w . getItem ( f ) ; if ( A . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $block [ A . getName ( ) ] ) { w = ! 0 ; break a } } w = ! 1 } w = ! w } w ? g = q : l = q } } while ( q = q . getParent ( ) ) ; l || ( l = e ) ; this . block = g ; this . blockLimit = l ; this . root = e ; this . elements = k } } ) ( ) ;
( function ( ) { var a = { } , d = { } , b ; for ( b in CKEDITOR . dtd . $blockLimit ) b in CKEDITOR . dtd . $list || ( a [ b ] = 1 ) ; for ( b in CKEDITOR . dtd . $block ) b in CKEDITOR . dtd . $blockLimit || b in CKEDITOR . dtd . $empty || ( d [ b ] = 1 ) ; CKEDITOR . dom . elementPath = function ( b , e ) { var g = null , k = null , l = [ ] , q = b , v ; e = e || b . getDocument ( ) . getBody ( ) ; do if ( q . type == CKEDITOR . NODE _ELEMENT ) { l . push ( q ) ; if ( ! this . lastElement && ( this . lastElement = q , q . is ( CKEDITOR . dtd . $object ) || "false" == q . getAttribute ( "contenteditable" ) ) ) continue ; if ( q . equals ( e ) ) break ; if ( ! k && ( v = q . getName ( ) ,
"true" == q . getAttribute ( "contenteditable" ) ? k = q : ! g && d [ v ] && ( g = q ) , a [ v ] ) ) { if ( v = ! g && "div" == v ) { a : { v = q . getChildren ( ) ; for ( var f = 0 , y = v . count ( ) ; f < y ; f ++ ) { var A = v . getItem ( f ) ; if ( A . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $block [ A . getName ( ) ] ) { v = ! 0 ; break a } } v = ! 1 } v = ! v } v ? g = q : k = q } } while ( q = q . getParent ( ) ) ; k || ( k = e ) ; this . block = g ; this . blockLimit = k ; this . root = e ; this . elements = l } } ) ( ) ;
CKEDITOR . dom . elementPath . prototype = { compare : function ( a ) { var d = this . elements ; a = a && a . elements ; if ( ! a || d . length != a . length ) return ! 1 ; for ( var b = 0 ; b < d . length ; b ++ ) if ( ! d [ b ] . equals ( a [ b ] ) ) return ! 1 ; return ! 0 } , contains : function ( a , d , b ) { var c ; "string" == typeof a && ( c = function ( b ) { return b . getName ( ) == a } ) ; a instanceof CKEDITOR . dom . element ? c = function ( b ) { return b . equals ( a ) } : CKEDITOR . tools . isArray ( a ) ? c = function ( b ) { return - 1 < CKEDITOR . tools . indexOf ( a , b . getName ( ) ) } : "function" == typeof a ? c = a : "object" == typeof a && ( c = function ( b ) { return b . getName ( ) in
a } ) ; var e = this . elements , g = e . length ; d && g -- ; b && ( e = Array . prototype . slice . call ( e , 0 ) , e . reverse ( ) ) ; for ( d = 0 ; d < g ; d ++ ) if ( c ( e [ d ] ) ) return e [ d ] ; return null } , isContextFor : function ( a ) { var d ; return a in CKEDITOR . dtd . $block ? ( d = this . contains ( CKEDITOR . dtd . $intermediate ) || this . root . equals ( this . block ) && this . block || this . blockLimit , ! ! d . getDtd ( ) [ a ] ) : ! 0 } , direction : function ( ) { return ( this . block || this . blockLimit || this . root ) . getDirection ( 1 ) } } ;
CKEDITOR . dom . text = function ( a , d ) { "string" == typeof a && ( a = ( d ? d . $ : document ) . createTextNode ( a ) ) ; this . $ = a } ; CKEDITOR . dom . text . prototype = new CKEDITOR . dom . node ;
CKEDITOR . tools . extend ( CKEDITOR . dom . text . prototype , { type : CKEDITOR . NODE _TEXT , getLength : function ( ) { return this . $ . nodeValue . length } , getText : function ( ) { return this . $ . nodeValue } , setText : function ( a ) { this . $ . nodeValue = a } , split : function ( a ) { var d = this . $ . parentNode , b = d . childNodes . length , c = this . getLength ( ) , e = this . getDocument ( ) , g = new CKEDITOR . dom . text ( this . $ . splitText ( a ) , e ) ; d . childNodes . length == b && ( a >= c ? ( g = e . createText ( "" ) , g . insertAfter ( this ) ) : ( a = e . createText ( "" ) , a . insertAfter ( g ) , a . remove ( ) ) ) ; return g } , substring : function ( a ,
d ) { return "number" != typeof d ? this . $ . nodeValue . substr ( a ) : this . $ . nodeValue . substring ( a , d ) } } ) ;
( function ( ) { function a ( a , c , d ) { var g = a . serializable , l = c [ d ? "endContainer" : "startContainer" ] , k = d ? "endOffset" : "startOffset" , q = g ? c . document . getById ( a . startNode ) : a . startNode ; a = g ? c . document . getById ( a . endNode ) : a . endNode ; l . equals ( q . getPrevious ( ) ) ? ( c . startOffset = c . startOffset - l . getLength ( ) - a . getPrevious ( ) . getLength ( ) , l = a . getNext ( ) ) : l . equals ( a . getPrevious ( ) ) && ( c . startOffset -= l . getLength ( ) , l = a . getNext ( ) ) ; l . equals ( q . getParent ( ) ) && c [ k ] ++ ; l . equals ( a . getParent ( ) ) && c [ k ] ++ ; c [ d ? "endContainer" : "startContainer" ] = l ; return c }
CKEDITOR . dom . rangeList = function ( a ) { if ( a instanceof CKEDITOR . dom . rangeList ) return a ; a ? a instanceof CKEDITOR . dom . range && ( a = [ a ] ) : a = [ ] ; return CKEDITOR . tools . extend ( a , d ) } ; var d = { createIterator : function ( ) { var a = this , c = CKEDITOR . dom . walker . bookmark ( ) , d = [ ] , g ; return { getNextRange : function ( l ) { g = void 0 === g ? 0 : g + 1 ; var k = a [ g ] ; if ( k && 1 < a . length ) { if ( ! g ) for ( var q = a . length - 1 ; 0 <= q ; q -- ) d . unshift ( a [ q ] . createBookmark ( ! 0 ) ) ; if ( l ) for ( var w = 0 ; a [ g + w + 1 ] ; ) { var f = k . document ; l = 0 ; q = f . getById ( d [ w ] . endNode ) ; for ( f = f . getById ( d [ w + 1 ] . startNode ) ; ; ) { q =
q . getNextSourceNode ( ! 1 ) ; if ( f . equals ( q ) ) l = 1 ; else if ( c ( q ) || q . type == CKEDITOR . NODE _ELEMENT && q . isBlockBoundary ( ) ) continue ; break } if ( ! l ) break ; w ++ } for ( k . moveToBookmark ( d . shift ( ) ) ; w -- ; ) q = a [ ++ g ] , q . moveToBookmark ( d . shift ( ) ) , k . setEnd ( q . endContainer , q . endOffset ) } return k } } } , createBookmarks : function ( b ) { for ( var c = [ ] , d , g = 0 ; g < this . length ; g ++ ) { c . push ( d = this [ g ] . createBookmark ( b , ! 0 ) ) ; for ( var l = g + 1 ; l < this . length ; l ++ ) this [ l ] = a ( d , this [ l ] ) , this [ l ] = a ( d , this [ l ] , ! 0 ) } return c } , createBookmarks2 : function ( a ) { for ( var c = [ ] , d = 0 ; d <
( function ( ) { function a ( a , c , d ) { var g = a . serializable , k = c [ d ? "endContainer" : "startContainer" ] , l = d ? "endOffset" : "startOffset" , q = g ? c . document . getById ( a . startNode ) : a . startNode ; a = g ? c . document . getById ( a . endNode ) : a . endNode ; k . equals ( q . getPrevious ( ) ) ? ( c . startOffset = c . startOffset - k . getLength ( ) - a . getPrevious ( ) . getLength ( ) , k = a . getNext ( ) ) : k . equals ( a . getPrevious ( ) ) && ( c . startOffset -= k . getLength ( ) , k = a . getNext ( ) ) ; k . equals ( q . getParent ( ) ) && c [ l ] ++ ; k . equals ( a . getParent ( ) ) && c [ l ] ++ ; c [ d ? "endContainer" : "startContainer" ] = k ; return c }
CKEDITOR . dom . rangeList = function ( a ) { if ( a instanceof CKEDITOR . dom . rangeList ) return a ; a ? a instanceof CKEDITOR . dom . range && ( a = [ a ] ) : a = [ ] ; return CKEDITOR . tools . extend ( a , d ) } ; var d = { createIterator : function ( ) { var a = this , c = CKEDITOR . dom . walker . bookmark ( ) , d = [ ] , g ; return { getNextRange : function ( k ) { g = void 0 === g ? 0 : g + 1 ; var l = a [ g ] ; if ( l && 1 < a . length ) { if ( ! g ) for ( var q = a . length - 1 ; 0 <= q ; q -- ) d . unshift ( a [ q ] . createBookmark ( ! 0 ) ) ; if ( k ) for ( var v = 0 ; a [ g + v + 1 ] ; ) { var f = l . document ; k = 0 ; q = f . getById ( d [ v ] . endNode ) ; for ( f = f . getById ( d [ v + 1 ] . startNode ) ; ; ) { q =
q . getNextSourceNode ( ! 1 ) ; if ( f . equals ( q ) ) k = 1 ; else if ( c ( q ) || q . type == CKEDITOR . NODE _ELEMENT && q . isBlockBoundary ( ) ) continue ; break } if ( ! k ) break ; v ++ } for ( l . moveToBookmark ( d . shift ( ) ) ; v -- ; ) q = a [ ++ g ] , q . moveToBookmark ( d . shift ( ) ) , l . setEnd ( q . endContainer , q . endOffset ) } return l } } } , createBookmarks : function ( b ) { for ( var c = [ ] , d , g = 0 ; g < this . length ; g ++ ) { c . push ( d = this [ g ] . createBookmark ( b , ! 0 ) ) ; for ( var k = g + 1 ; k < this . length ; k ++ ) this [ k ] = a ( d , this [ k ] ) , this [ k ] = a ( d , this [ k ] , ! 0 ) } return c } , createBookmarks2 : function ( a ) { for ( var c = [ ] , d = 0 ; d <
this . length ; d ++ ) c . push ( this [ d ] . createBookmark2 ( a ) ) ; return c } , moveToBookmarks : function ( a ) { for ( var c = 0 ; c < this . length ; c ++ ) this [ c ] . moveToBookmark ( a [ c ] ) } } } ) ( ) ;
( function ( ) { function a ( ) { return CKEDITOR . getUrl ( CKEDITOR . skinName . split ( "," ) [ 1 ] || "skins/" + CKEDITOR . skinName . split ( "," ) [ 0 ] + "/" ) } function d ( b ) { var c = CKEDITOR . skin [ "ua_" + b ] , d = CKEDITOR . env ; if ( c ) for ( var c = c . split ( "," ) . sort ( function ( a , b ) { return a > b ? - 1 : 1 } ) , e = 0 , g ; e < c . length ; e ++ ) if ( g = c [ e ] , d . ie && ( g . replace ( /^ie/ , "" ) == d . version || d . quirks && "iequirks" == g ) && ( g = "ie" ) , d [ g ] ) { b += "_" + c [ e ] ; break } return CKEDITOR . getUrl ( a ( ) + b + ".css" ) } function b ( a , b ) { g [ a ] || ( CKEDITOR . document . appendStyleSheet ( d ( a ) ) , g [ a ] = 1 ) ; b && b ( ) } function c ( a ) { var b =
a . getById ( l ) ; b || ( b = a . getHead ( ) . append ( "style" ) , b . setAttribute ( "id" , l ) , b . setAttribute ( "type" , "text/css" ) ) ; return b } function e ( a , b , c ) { var d , e , g ; if ( CKEDITOR . env . webkit ) for ( b = b . split ( "}" ) . slice ( 0 , - 1 ) , e = 0 ; e < b . length ; e ++ ) b [ e ] = b [ e ] . split ( "{" ) ; for ( var k = 0 ; k < a . length ; k ++ ) if ( CKEDITOR . env . webkit ) for ( e = 0 ; e < b . length ; e ++ ) { g = b [ e ] [ 1 ] ; for ( d = 0 ; d < c . length ; d ++ ) g = g . replace ( c [ d ] [ 0 ] , c [ d ] [ 1 ] ) ; a [ k ] . $ . sheet . addRule ( b [ e ] [ 0 ] , g ) } else { g = b ; for ( d = 0 ; d < c . length ; d ++ ) g = g . replace ( c [ d ] [ 0 ] , c [ d ] [ 1 ] ) ; CKEDITOR . env . ie && 11 > CKEDITOR . env . version ?
a . getById ( k ) ; b || ( b = a . getHead ( ) . append ( "style" ) , b . setAttribute ( "id" , k ) , b . setAttribute ( "type" , "text/css" ) ) ; return b } function e ( a , b , c ) { var d , e , g ; if ( CKEDITOR . env . webkit ) for ( b = b . split ( "}" ) . slice ( 0 , - 1 ) , e = 0 ; e < b . length ; e ++ ) b [ e ] = b [ e ] . split ( "{" ) ; for ( var k = 0 ; k < a . length ; k ++ ) if ( CKEDITOR . env . webkit ) for ( e = 0 ; e < b . length ; e ++ ) { g = b [ e ] [ 1 ] ; for ( d = 0 ; d < c . length ; d ++ ) g = g . replace ( c [ d ] [ 0 ] , c [ d ] [ 1 ] ) ; a [ k ] . $ . sheet . addRule ( b [ e ] [ 0 ] , g ) } else { g = b ; for ( d = 0 ; d < c . length ; d ++ ) g = g . replace ( c [ d ] [ 0 ] , c [ d ] [ 1 ] ) ; CKEDITOR . env . ie && 11 > CKEDITOR . env . version ?
a [ k ] . $ . styleSheet . cssText += g : a [ k ] . $ . innerHTML += g } } var g = { } ; CKEDITOR . skin = { path : a , loadPart : function ( c , d ) { CKEDITOR . skin . name != CKEDITOR . skinName . split ( "," ) [ 0 ] ? CKEDITOR . scriptLoader . load ( CKEDITOR . getUrl ( a ( ) + "skin.js" ) , function ( ) { b ( c , d ) } ) : b ( c , d ) } , getPath : function ( a ) { return CKEDITOR . getUrl ( d ( a ) ) } , icons : { } , addIcon : function ( a , b , c , d ) { a = a . toLowerCase ( ) ; this . icons [ a ] || ( this . icons [ a ] = { path : b , offset : c || 0 , bgsize : d || "16px" } ) } , getIconStyle : function ( a , b , c , d , e ) { var g ; a && ( a = a . toLowerCase ( ) , b && ( g = this . icons [ a + "-rtl" ] ) ,
g || ( g = this . icons [ a ] ) ) ; a = c || g && g . path || "" ; d = d || g && g . offset ; e = e || g && g . bgsize || "16px" ; a && ( a = a . replace ( /'/g , "\\'" ) ) ; return a && "background-image:url('" + CKEDITOR . getUrl ( a ) + "');background-position:0 " + d + "px;background-size:" + e + ";" } } ; CKEDITOR . tools . extend ( CKEDITOR . editor . prototype , { getUiColor : function ( ) { return this . uiColor } , setUiColor : function ( a ) { var b = c ( CKEDITOR . document ) ; return ( this . setUiColor = function ( a ) { this . uiColor = a ; var c = CKEDITOR . skin . chameleon , d = "" , g = "" ; "function" == typeof c && ( d = c ( this , "editor" ) , g =
c ( this , "panel" ) ) ; a = [ [ q , a ] ] ; e ( [ b ] , d , a ) ; e ( k , g , a ) } ) . call ( this , a ) } } ) ; var l = "cke_ui_color" , k = [ ] , q = /\$color/g ; CKEDITOR . on ( "instanceLoaded" , function ( a ) { if ( ! CKEDITOR . env . ie || ! CKEDITOR . env . quirks ) { var b = a . editor ; a = function ( a ) { a = ( a . data [ 0 ] || a . data ) . element . getElementsByTag ( "iframe" ) . getItem ( 0 ) . getFrameDocument ( ) ; if ( ! a . getById ( "cke_ui_color" ) ) { a = c ( a ) ; k . push ( a ) ; var d = b . getUiColor ( ) ; d && e ( [ a ] , CKEDITOR . skin . chameleon ( b , "panel" ) , [ [ q , d ] ] ) } } ; b . on ( "panelShow" , a ) ; b . on ( "menuShow" , a ) ; b . config . uiColor && b . setUiColor ( b . config . uiColor ) } } ) } ) ( ) ;
c ( this , "panel" ) ) ; a = [ [ q , a ] ] ; e ( [ b ] , d , a ) ; e ( l , g , a ) } ) . call ( this , a ) } } ) ; var k = "cke_ui_color" , l = [ ] , q = /\$color/g ; CKEDITOR . on ( "instanceLoaded" , function ( a ) { if ( ! CKEDITOR . env . ie || ! CKEDITOR . env . quirks ) { var b = a . editor ; a = function ( a ) { a = ( a . data [ 0 ] || a . data ) . element . getElementsByTag ( "iframe" ) . getItem ( 0 ) . getFrameDocument ( ) ; if ( ! a . getById ( "cke_ui_color" ) ) { a = c ( a ) ; l . push ( a ) ; var d = b . getUiColor ( ) ; d && e ( [ a ] , CKEDITOR . skin . chameleon ( b , "panel" ) , [ [ q , d ] ] ) } } ; b . on ( "panelShow" , a ) ; b . on ( "menuShow" , a ) ; b . config . uiColor && b . setUiColor ( b . config . uiColor ) } } ) } ) ( ) ;
( function ( ) { if ( CKEDITOR . env . webkit ) CKEDITOR . env . hc = ! 1 ; else { var a = CKEDITOR . dom . element . createFromHtml ( '\x3cdiv style\x3d"width:0;height:0;position:absolute;left:-10000px;border:1px solid;border-color:red blue"\x3e\x3c/div\x3e' , CKEDITOR . document ) ; a . appendTo ( CKEDITOR . document . getHead ( ) ) ; try { var d = a . getComputedStyle ( "border-top-color" ) , b = a . getComputedStyle ( "border-right-color" ) ; CKEDITOR . env . hc = ! ( ! d || d != b ) } catch ( c ) { CKEDITOR . env . hc = ! 1 } a . remove ( ) } CKEDITOR . env . hc && ( CKEDITOR . env . cssClass += " cke_hc" ) ; CKEDITOR . document . appendStyleText ( ".cke{visibility:hidden;}" ) ;
CKEDITOR . status = "loaded" ; CKEDITOR . fireOnce ( "loaded" ) ; if ( a = CKEDITOR . _ . pending ) for ( delete CKEDITOR . _ . pending , d = 0 ; d < a . length ; d ++ ) CKEDITOR . editor . prototype . constructor . apply ( a [ d ] [ 0 ] , a [ d ] [ 1 ] ) , CKEDITOR . add ( a [ d ] [ 0 ] ) } ) ( ) ; / *
Copyright ( c ) 2003 - 2015 , CKSource - Frederico Knabben . All rights reserved .
@@ -826,7 +828,9 @@ d.reset(),d.evaluator=G,a=d.previous()),c=a,e.moveToElementEditEnd(c),e.moveToPo
G ( h ) ? h : c , g = 0 , ( a = d . next ( ) ) && a . type == CKEDITOR . NODE _ELEMENT && a . getName ( ) in v && a . equals ( h ) ? ( g = 1 , a = d . next ( ) ) : f . checkBoundaryOfElement ( k , CKEDITOR . END ) && ( g = 2 ) , g && a ) { f = f . clone ( ) ; f . moveToElementEditStart ( a ) ; if ( 1 == g && ( e . optimize ( ) , ! e . startContainer . equals ( c ) ) ) { for ( c = e . startContainer ; c . is ( CKEDITOR . dtd . $inline ) ; ) p = c , c = c . getParent ( ) ; p && e . moveToPosition ( p , CKEDITOR . POSITION _AFTER _END ) } 2 == g && ( e . moveToPosition ( e . endPath ( ) . block , CKEDITOR . POSITION _BEFORE _END ) , f . endPath ( ) . block && f . moveToPosition ( f . endPath ( ) . block , CKEDITOR . POSITION _AFTER _START ) ) ;
C ( b , e , f ) ; m . cancel ( ) } } else d . range . setEndAt ( h , CKEDITOR . POSITION _BEFORE _END ) , ( a = d . next ( ) ) && a . type == CKEDITOR . NODE _ELEMENT && a . is ( v ) && ( a = a . getFirst ( u ) , g . block && f . checkStartOfBlock ( ) && f . checkEndOfBlock ( ) ? ( g . block . remove ( ) , f . moveToElementEditStart ( a ) , f . select ( ) ) : A ( a ) ? ( f . moveToElementEditStart ( a ) , f . select ( ) ) : ( f = f . clone ( ) , f . moveToElementEditStart ( a ) , C ( b , e , f ) ) , m . cancel ( ) ) ; setTimeout ( function ( ) { b . selectionChange ( 1 ) } ) } } } ) ) } } ) } ) ( ) ; CKEDITOR . plugins . add ( "menubutton" , { requires : "button,menu" , onLoad : function ( ) { var d = function ( c ) { var a = this . _ , b = a . menu ; a . state !== CKEDITOR . TRISTATE _DISABLED && ( a . on && b ? b . hide ( ) : ( a . previousState = a . state , b || ( b = a . menu = new CKEDITOR . menu ( c , { panel : { className : "cke_menu_panel" , attributes : { "aria-label" : c . lang . common . options } } } ) , b . onHide = CKEDITOR . tools . bind ( function ( ) { var b = this . command ? c . getCommand ( this . command ) . modes : this . modes ; this . setState ( ! b || b [ c . mode ] ? a . previousState : CKEDITOR . TRISTATE _DISABLED ) ; a . on = 0 } , this ) ,
this . onMenu && b . addListener ( this . onMenu ) ) , this . setState ( CKEDITOR . TRISTATE _ON ) , a . on = 1 , setTimeout ( function ( ) { b . show ( CKEDITOR . document . getById ( a . id ) , 4 ) } , 0 ) ) ) } ; CKEDITOR . ui . menuButton = CKEDITOR . tools . createClass ( { base : CKEDITOR . ui . button , $ : function ( c ) { delete c . panel ; this . base ( c ) ; this . hasArrow = ! 0 ; this . click = d } , statics : { handler : { create : function ( c ) { return new CKEDITOR . ui . menuButton ( c ) } } } } ) } , beforeInit : function ( d ) { d . ui . addHandler ( CKEDITOR . UI _MENUBUTTON , CKEDITOR . ui . menuButton . handler ) } } ) ;
CKEDITOR . UI _MENUBUTTON = "menubutton" ; ( function ( ) { var c = { canUndo : ! 1 , async : ! 0 , exec : function ( a ) { a . getClipboardData ( { title : a . lang . pastetext . title } , function ( b ) { b && a . fire ( "paste" , { type : "text" , dataValue : b . dataValue , method : "paste ", dataTransfer : CKEDITOR . plugins . clipboard . initPasteDataTransfer ( ) } ) ; a . fire ( "afterCommandExec " , { name : "pastetext" , command : c , returnValue : ! ! b } ) } ) } } ; CKEDITOR . plugins . add ( "pastetext" , { requires : "clipboard" , init : function ( a ) { a . addCommand ( "pastetext" , c ) ; a . ui . addButton && a . ui . addButton ( "P asteText " , { label : a . lang . pastetext . button ,
CKEDITOR . UI _MENUBUTTON = "menubutton" ; ( function ( ) { function h ( a , d , f ) { var b = CKEDITOR . cleanWord ; b ? f ( ) : ( a = CKEDITOR . getUrl ( a . config . pasteFromWordCleanupFile || d + "filter/default.js" ) , CKEDITOR . scriptLoader . load ( a , f , null , ! 0 ) ) ; return ! b } function k ( a ) { a . data . type = "html" } CKEDITOR . plugins . add ( "pastefromword" , { requires : "clipboard ", init : function ( a ) { var d = 0 , f = this . path ; a . addCommand ( "pastefromword " , { canUndo : ! 1 , async : ! 0 , exec : function ( a ) { var e = this ; d = 1 ; a . once ( "beforePaste" , k ) ; a . getClipboardData ( { title : a . lang . pastefromword . title } , function ( c ) { c && a . fire ( "p aste" ,
{ type : "html" , dataValue : c . dataValue , method : "paste" , dataTransfer : CKEDITOR . plugins . clipboard . initPasteDataTransfer ( ) } ) ; a . fire ( "afterCommandExec" , { name : "pastefromword" , command : e , returnValue : ! ! c } ) } ) } } ) ; a . ui . addButton && a . ui . addButton ( "PasteFromWord" , { label : a . lang . pastefromword . toolbar , command : "pastefromword" , toolbar : "clipboard,50" } ) ; a . on ( "pasteState" , function ( b ) { a . getCommand ( "pastefromword" ) . setState ( b . data ) } ) ; a . on ( "paste" , function ( b ) { var e = b . data , c = e . dataValue ; if ( c && ( d || /(class=\"?Mso|style=\"[^\"]*\bmso\-|w:WordDocument)/ . test ( c ) ) ) { e . dontFilter =
! 0 ; var g = h ( a , f , function ( ) { if ( g ) a . fire ( "paste" , e ) ; else if ( ! a . config . pasteFromWordPromptCleanup || d || confirm ( a . lang . pastefromword . confirmCleanup ) ) e . dataValue = CKEDITOR . cleanWord ( c , a ) ; d = 0 } ) ; g && b . cancel ( ) } } , null , null , 3 ) } } ) } ) ( ) ; ( function ( ) { var c = { canUndo : ! 1 , async : ! 0 , exec : function ( a ) { a . getClipboardData ( { title : a . lang . pastetext . title } , function ( b ) { b && a . fire ( "paste" , { type : "text" , dataValue : b . dataValue , method : "paste" , dataTransfer : CKEDITOR . plugins . clipboard . initPasteDataTransfer ( ) } ) ; a . fire ( "afterCommandExec" , { name : "pastetext" , command : c , returnValue : ! ! b } ) } ) } } ; CKEDITOR . plugins . add ( "pastetext" , { requires : "clipboard" , init : function ( a ) { a . addCommand ( "pastetext" , c ) ; a . ui . addButton && a . ui . addButton ( "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" , 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" ] ; b = { scaytToggle : CKEDITOR . TRISTATE _OFF , scaytOptions : b ? CKEDITOR . TRISTATE _OFF :
CKEDITOR . TRISTATE _DISABLED , scaytLangs : b ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED , scaytDict : b ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED , scaytAbout : b ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED , WSC : a . plugins . wsc ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED } ; a . config . scayt _uiTabs [ 0 ] || delete b . scaytOptions ; a . config . scayt _uiTabs [ 1 ] || delete b . scaytLangs ; a . config . scayt _uiTabs [ 2 ] || delete b . scaytDict ; return b } } ) ; a . contextMenu && a . addMenuItems && ( a . contextMenu . addListener ( function ( b , d ) { var e =
@@ -967,6 +971,4 @@ e+a):a=c.docType+'\x3chtml dir\x3d"'+c.contentsLangDirection+'" lang\x3d"'+(c.co
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 ; ( function ( ) { function h ( a , d , f ) { var b = CKEDITOR . cleanWord ; b ? f ( ) : ( a = CKEDITOR . getUrl ( a . config . pasteFromWordCleanupFile || d + "filter/default.js" ) , CKEDITOR . scriptLoader . load ( a , f , null , ! 0 ) ) ; return ! b } function k ( a ) { a . data . type = "html" } CKEDITOR . plugins . add ( "pastefromword" , { requires : "clipboard" , init : function ( a ) { var d = 0 , f = this . path ; a . addCommand ( "pastefromword" , { canUndo : ! 1 , async : ! 0 , exec : function ( a ) { var e = this ; d = 1 ; a . once ( "beforePaste" , k ) ; a . getClipboardData ( { title : a . lang . pastefromword . title } , function ( c ) { c && a . fire ( "paste" ,
{ type : "html" , dataValue : c . dataValue , method : "paste" , dataTransfer : CKEDITOR . plugins . clipboard . initPasteDataTransfer ( ) } ) ; a . fire ( "afterCommandExec" , { name : "pastefromword" , command : e , returnValue : ! ! c } ) } ) } } ) ; a . ui . addButton && a . ui . addButton ( "PasteFromWord" , { label : a . lang . pastefromword . toolbar , command : "pastefromword" , toolbar : "clipboard,50" } ) ; a . on ( "pasteState" , function ( b ) { a . getCommand ( "pastefromword" ) . setState ( b . data ) } ) ; a . on ( "paste" , function ( b ) { var e = b . data , c = e . dataValue ; if ( c && ( d || /(class=\"?Mso|style=\"[^\"]*\bmso\-|w:WordDocument)/ . test ( c ) ) ) { e . dontFilter =
! 0 ; var g = h ( a , f , function ( ) { if ( g ) a . fire ( "paste" , e ) ; else if ( ! a . config . pasteFromWordPromptCleanup || d || confirm ( a . lang . pastefromword . confirmCleanup ) ) e . dataValue = CKEDITOR . cleanWord ( c , a ) ; d = 0 } ) ; g && b . cancel ( ) } } , null , null , 3 ) } } ) } ) ( ) ; CKEDITOR . config . plugins = 'dialogui,dialog,about,base64image,basicstyles,blockquote,button,clipboard,panelbutton,panel,floatpanel,colorbutton,colordialog,menu,contextmenu,div,enterkey,entities,fakeobjects,floatingspace,listblock,richcombo,font,format,image,indent,indentlist,justify,link,list,menubutton,pastetext,scayt,sourcearea,tab,table,tabletools,tableresize,toolbar,undo,wsc,wysiwygarea,pastefromword' ; 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,,pastetext-rtl,840,,pastetext,864,,scayt,888,,source-rtl,912,,source,936,,table,960,,redo-rtl,984,,redo,1008,,undo-rtl,1032,,undo,1056,,spellchecker,1080,,pastefromword-rtl,1104,,pastefromword,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,pastetext-rtl,840,auto,pastetext,864,auto,scayt,888,auto,source-rtl,912,auto,source,936,auto,table,960,auto,redo-rtl,984,auto,redo,1008,auto,undo-rtl,1032,auto,undo,1056,auto,spellchecker,1080,auto,pastefromword-rtl,1104,auto,pastefromword,1128,auto' , 'icons.png' ) ; } ) ( ) ; CKEDITOR . lang . languages = { "ar" : 1 , "ca" : 1 , "cs" : 1 , "cy" : 1 , "da" : 1 , "de" : 1 , "en" : 1 , "es" : 1 , "eu" : 1 , "fi" : 1 , "fr" : 1 , "hr" : 1 , "hu" : 1 , "is" : 1 , "it" : 1 , "lt" : 1 , "mk" : 1 , "nb" : 1 , "nl" : 1 , "no" : 1 , "pl" : 1 , "pt" : 1 , "pt-br" : 1 , "ru" : 1 , "sk" : 1 , "sl" : 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,base64image,basicstyles,blockquote,button,clipboard,panelbutton,panel,floatpanel,colorbutton,colordialog,menu,contextmenu,div,enterkey,entities,fakeobjects,floatingspace,listblock,richcombo,font,format,image,indent,indentlist,justify,link,list,menubutton,pastefromword,pastetext,scayt,sourcearea,tab,table,tabletools,tableresize,toolbar,undo,wsc,wysiwygarea' ; CKEDITOR . config . skin = 'minimalist' ; ( function ( ) { var setIcons = function ( icons , strip ) { var path = CKEDITOR . getUrl ( 'plugins/' + strip ) ; icons = icons . split ( ',' ) ; for ( var i = 0 ; i < icons . length ; i ++ ) CKEDITOR . skin . icons [ icons [ i ] ] = { path : path , offset : - icons [ ++ i ] , bgsize : icons [ ++ i ] } ; } ; if ( CKEDITOR . env . hidpi ) setIcons ( 'about,0,,base64image,24,,bold,48,,italic,72,,strike,96,,subscript,120,,superscript,144,,underline,168,,blockquote,192,,copy-rtl,216,,copy,240,,cut-rtl,264,,cut,288,,paste-rtl,312,,paste,336,,bgcolor,360,,textcolor,384,,creatediv,408,,image,432,,indent-rtl,456,,indent,480,,outdent-rtl,504,,outdent,528,,justifyblock,552,,justifycenter,576,,justifyleft,600,,justifyright,624,,anchor-rtl,648,,anchor,672,,link,696,,unlink,720,,bulletedlist-rtl,744,,bulletedlist,768,,numberedlist-rtl,792,,numberedlist,816,,pastefromword-rtl,840,,pastefromword,864,,pastetext-rtl,888,,pastetext,912,,scayt,936,,source-rtl,960,,source,984,,table,1008,,redo-rtl,1032,,redo,1056,,undo-rtl,1080,,undo,1104,,spellchecker,1128,' , 'icons_hidpi.png' ) ; else setIcons ( 'about,0,auto,base64image,24,auto,bold,48,auto,italic,72,auto,strike,96,auto,subscript,120,auto,superscript,144,auto,underline,168,auto,blockquote,192,auto,copy-rtl,216,auto,copy,240,auto,cut-rtl,264,auto,cut,288,auto,paste-rtl,312,auto,paste,336,auto,bgcolor,360,auto,textcolor,384,auto,creatediv,408,auto,image,432,auto,indent-rtl,456,auto,indent,480,auto,outdent-rtl,504,auto,outdent,528,auto,justifyblock,552,auto,justifycenter,576,auto,justifyleft,600,auto,justifyright,624,auto,anchor-rtl,648,auto,anchor,672,auto,link,696,auto,unlink,720,auto,bulletedlist-rtl,744,auto,bulletedlist,768,auto,numberedlist-rtl,792,auto,numberedlist,816,auto,pastefromword-rtl,840,auto,pastefromword,864,auto,pastetext-rtl,888,auto,pastetext,912,auto,scayt,936,auto,source-rtl,960,auto,source,984,auto,table,1008,auto,redo-rtl,1032,auto,redo,1056,auto,undo-rtl,1080,auto,undo,1104,auto,spellchecker,1128,auto' , 'icons.png' ) ; } ) ( ) ; CKEDITOR . lang . languages = { "ar" : 1 , "ca" : 1 , "cs" : 1 , "cy" : 1 , "da" : 1 , "de" : 1 , "en" : 1 , "es" : 1 , "eu" : 1 , "fi" : 1 , "fr" : 1 , "hr" : 1 , "hu" : 1 , "is" : 1 , "it" : 1 , "lt" : 1 , "mk" : 1 , "nb" : 1 , "nl" : 1 , "no" : 1 , "pl" : 1 , "pt" : 1 , "pt-br" : 1 , "ru" : 1 , "sk" : 1 , "sl" : 1 , "sv" : 1 , "tr" : 1 , "uk" : 1 , "zh" : 1 , "zh-cn" : 1 } ; } ( ) ) ;