@@ -2,14 +2,14 @@
Copyright ( c ) 2003 - 2013 , CKSource - Frederico Knabben . All rights reserved .
For licensing , see LICENSE . html or http : //ckeditor.com/license
* /
( function ( ) { if ( window . CKEDITOR && window . CKEDITOR . dom ) return ; window . CKEDITOR || ( window . CKEDITOR = function ( ) { var b = { timestamp : "D8AD " , version : "4.2.1 " , revision : "5010dd4 " , rnd : Math . floor ( 900 * Math . random ( ) ) + 100 , _ : { pending : [ ] } , status : "unloaded" , basePath : function ( ) { var a = window . CKEDITOR _BASEPATH || "" ; if ( ! a ) for ( var b = document . getElementsByTagName ( "script" ) , e = 0 ; e < b . length ; e ++ ) { var c = b [ e ] . src . match ( /(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i ) ; if ( c ) { a = c [ 1 ] ; break } } - 1 == a . indexOf ( ":/" ) && ( a = 0 === a . indexOf ( "/" ) ? location . href . match ( /^.*?:\/\/[^\/]*/ ) [ 0 ] + a : location . href . match ( /^[^\?]*\/(?:)/ ) [ 0 ] +
( function ( ) { if ( window . CKEDITOR && window . CKEDITOR . dom ) return ; window . CKEDITOR || ( window . CKEDITOR = function ( ) { var b = { timestamp : "D9EF " , version : "4.2.2 " , revision : "f98db6d8 " , rnd : Math . floor ( 900 * Math . random ( ) ) + 100 , _ : { pending : [ ] } , status : "unloaded" , basePath : function ( ) { var a = window . CKEDITOR _BASEPATH || "" ; if ( ! a ) for ( var b = document . getElementsByTagName ( "script" ) , e = 0 ; e < b . length ; e ++ ) { var c = b [ e ] . src . match ( /(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i ) ; if ( c ) { a = c [ 1 ] ; break } } - 1 == a . indexOf ( ":/" ) && ( a = 0 === a . indexOf ( "/" ) ? location . href . match ( /^.*?:\/\/[^\/]*/ ) [ 0 ] + a : location . href . match ( /^[^\?]*\/(?:)/ ) [ 0 ] +
a ) ; if ( ! a ) throw 'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.' ; return a } ( ) , 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 ( "?" ) ? "&" : "?" ) + "t=" + 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 ( e ) { } } function b ( ) { for ( var a ; a = e . shift ( ) ; ) a ( ) } var e = [ ] ; return function ( b ) { e . push ( b ) ; "complete" === document . readyState && setTimeout ( a , 1 ) ; if ( 1 == e . length ) if ( document . addEventListener ) document . addEventListener ( "DOMContentLoaded" , a , ! 1 ) , window . addEventListener ( "load" , a , ! 1 ) ; else if ( document . attachEvent ) { document . attachEvent ( "onreadystatechange" , a ) ; window . attachEvent ( "onload" , a ) ; b = ! 1 ; try { b =
! window . frameElement } catch ( d ) { } if ( document . documentElement . doScroll && b ) { var c = function ( ) { try { document . documentElement . doScroll ( "left" ) } catch ( b ) { setTimeout ( c , 1 ) ; return } a ( ) } ; c ( ) } } } } ( ) } , c = window . CKEDITOR _GETURL ; if ( c ) { var a = b . getUrl ; b . getUrl = function ( f ) { return c . call ( b , f ) || a . call ( b , f ) } } return b } ( ) ) ;
CKEDITOR . event || ( CKEDITOR . event = function ( ) { } , CKEDITOR . event . implementOn = function ( b ) { var c = CKEDITOR . event . prototype , a ; for ( a in c ) b [ a ] == void 0 && ( b [ a ] = c [ a ] ) } , CKEDITOR . event . prototype = function ( ) { function b ( f ) { var b = c ( this ) ; return b [ f ] || ( b [ f ] = new a ( f ) ) } var c = function ( a ) { a = a . getPrivate && a . getPrivate ( ) || a . _ || ( a . _ = { } ) ; return a . events || ( a . events = { } ) } , a = function ( a ) { this . name = a ; this . listeners = [ ] } ; a . prototype = { getListenerIndex : function ( a ) { for ( var b = 0 , e = this . listeners ; b < e . length ; b ++ ) if ( e [ b ] . fn == a ) return b ; return - 1 } } ;
return { define : function ( a , d ) { var e = b . call ( this , a ) ; CKEDITOR . tools . extend ( e , d , true ) } , on : function ( a , d , e , c , j ) { function i ( b , g , m , q ) { b = { name : a , sender : this , editor : b , data : g , listenerData : c , stop : m , cancel : q , removeListener : k } ; return d . call ( e , b ) === false ? false : b . data } function k ( ) { q . removeListener ( a , d ) } var m = b . call ( this , a ) ; if ( m . getListenerIndex ( d ) < 0 ) { m = m . listeners ; e || ( e = this ) ; isNaN ( j ) && ( j = 10 ) ; var q = this ; i . fn = d ; i . priority = j ; for ( var r = m . length - 1 ; r >= 0 ; r -- ) if ( m [ r ] . priority <= j ) { m . splice ( r + 1 , 0 , i ) ; return { removeListener : k } } m . unshift ( i ) } return { removeListener : k } } ,
once : function ( ) { var a = arguments [ 1 ] ; arguments [ 1 ] = function ( b ) { b . removeListener ( ) ; return a . apply ( this , arguments ) } ; return this . on . apply ( this , arguments ) } , 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 } , e = 0 , h = function ( ) { e = 1 } ; return function ( j , i , k ) { var m = c ( this ) [ j ] , j = a , q = e ; a = e = 0 ; if ( m ) { var r = m . listeners ; if ( r . length ) for ( var r = r . slice ( 0 ) , l , g = 0 ; g < r . length ; g ++ ) { if ( m . errorProof ) try { l = r [ g ] . call ( this ,
k , i , b , h ) } catch ( p ) { } else l = r [ g ] . call ( this , k , i , b , h ) ; l === false ? e = 1 : typeof l != "undefined" && ( i = l ) ; if ( a || e ) break } } i = e ? false : typeof i == "undefined" ? true : i ; a = j ; e = q ; return i } } ( ) , fireOnce : function ( a , b , e ) { b = this . fire ( a , b , e ) ; delete c ( this ) [ a ] ; return b } , removeListener : function ( a , b ) { var e = c ( this ) [ a ] ; if ( e ) { var h = e . getListenerIndex ( b ) ; h >= 0 && e . listeners . splice ( h , 1 ) } } , removeAllListeners : function ( ) { var a = c ( this ) , b ; for ( b in a ) delete a [ b ] } , hasListeners : function ( a ) { return ( a = c ( this ) [ a ] ) && a . listeners . length > 0 } } } ( ) ) ;
return { define : function ( a , d ) { var e = b . call ( this , a ) ; CKEDITOR . tools . extend ( e , d , true ) } , on : function ( a , d , e , c , j ) { function i ( b , g , m , q ) { b = { name : a , sender : this , editor : b , data : g , listenerData : c , stop : m , cancel : q , removeListener : l } ; return d . call ( e , b ) === false ? false : b . data } function l ( ) { q . removeListener ( a , d ) } var m = b . call ( this , a ) ; if ( m . getListenerIndex ( d ) < 0 ) { m = m . listeners ; e || ( e = this ) ; isNaN ( j ) && ( j = 10 ) ; var q = this ; i . fn = d ; i . priority = j ; for ( var w = m . length - 1 ; w >= 0 ; w -- ) if ( m [ w ] . priority <= j ) { m . splice ( w + 1 , 0 , i ) ; return { removeListener : l } } m . unshift ( i ) } return { removeListener : l } } ,
once : function ( ) { var a = arguments [ 1 ] ; arguments [ 1 ] = function ( b ) { b . removeListener ( ) ; return a . apply ( this , arguments ) } ; return this . on . apply ( this , arguments ) } , 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 } , e = 0 , h = function ( ) { e = 1 } ; return function ( j , i , l ) { var m = c ( this ) [ j ] , j = a , q = e ; a = e = 0 ; if ( m ) { var w = m . listeners ; if ( w . length ) for ( var w = w . slice ( 0 ) , k , g = 0 ; g < w . length ; g ++ ) { if ( m . errorProof ) try { k = w [ g ] . call ( this ,
l , i , b , h ) } catch ( p ) { } else k = w [ g ] . call ( this , l , i , b , h ) ; k === false ? e = 1 : typeof k != "undefined" && ( i = k ) ; if ( a || e ) break } } i = e ? false : typeof i == "undefined" ? true : i ; a = j ; e = q ; return i } } ( ) , fireOnce : function ( a , b , e ) { b = this . fire ( a , b , e ) ; delete c ( this ) [ a ] ; return b } , removeListener : function ( a , b ) { var e = c ( this ) [ a ] ; if ( e ) { var h = e . getListenerIndex ( b ) ; h >= 0 && e . listeners . splice ( h , 1 ) } } , removeAllListeners : function ( ) { var a = c ( this ) , b ; for ( b in a ) delete a [ b ] } , hasListeners : function ( a ) { return ( a = c ( this ) [ a ] ) && a . listeners . length > 0 } } } ( ) ) ;
CKEDITOR . editor || ( CKEDITOR . editor = function ( ) { CKEDITOR . _ . pending . push ( [ this , arguments ] ) ; CKEDITOR . event . call ( this ) } , CKEDITOR . editor . prototype . fire = function ( b , c ) { b in { instanceReady : 1 , loaded : 1 } && ( this [ b ] = true ) ; return CKEDITOR . event . prototype . fire . call ( this , b , c , this ) } , CKEDITOR . editor . prototype . fireOnce = function ( b , c ) { b in { instanceReady : 1 , loaded : 1 } && ( this [ b ] = true ) ; return CKEDITOR . event . prototype . fireOnce . call ( this , b , c , this ) } , CKEDITOR . event . implementOn ( CKEDITOR . editor . prototype ) ) ;
CKEDITOR . env || ( CKEDITOR . env = function ( ) { var b = navigator . userAgent . toLowerCase ( ) , c = window . opera , a = { ie : eval ( "/*@cc_on!@*/false" ) , opera : ! ! c && c . version , webkit : b . indexOf ( " applewebkit/" ) > - 1 , air : b . indexOf ( " adobeair/" ) > - 1 , mac : b . indexOf ( "macintosh" ) > - 1 , quirks : document . compatMode == "BackCompat" , mobile : b . indexOf ( "mobile" ) > - 1 , iOS : /(ipad|iphone|ipod)/ . test ( b ) , isCustomDomain : function ( ) { if ( ! this . ie ) return false ; var a = document . domain , f = window . location . hostname ; return a != f && a != "[" + f + "]" } , secure : location . protocol ==
"https:" } ; a . gecko = navigator . product == "Gecko" && ! a . webkit && ! a . opera ; if ( a . webkit ) b . indexOf ( "chrome" ) > - 1 ? a . chrome = true : a . safari = true ; var f = 0 ; if ( a . ie ) { f = a . quirks || ! document . documentMode ? parseFloat ( b . match ( /msie (\d+)/ ) [ 1 ] ) : document . documentMode ; a . ie9Compat = f == 9 ; a . ie8Compat = f == 8 ; a . ie7Compat = f == 7 ; a . ie6Compat = f < 7 || a . quirks && f < 10 } if ( a . gecko ) { var d = b . match ( /rv:([\d\.]+)/ ) ; if ( d ) { d = d [ 1 ] . split ( "." ) ; f = d [ 0 ] * 1E4 + ( d [ 1 ] || 0 ) * 100 + ( d [ 2 ] || 0 ) * 1 } } a . opera && ( f = parseFloat ( c . version ( ) ) ) ; a . air && ( f = parseFloat ( b . match ( / adobeair\/(\d+)/ ) [ 1 ] ) ) ;
@@ -19,17 +19,17 @@ a.webkit&&(f=parseFloat(b.match(/ applewebkit\/(\d+)/)[1]));a.version=f;a.isComp
CKEDITOR . loadFullCore , c = CKEDITOR . loadFullCoreTimeout ; if ( b ) { CKEDITOR . status = "basic_ready" ; b && b . _load ? b ( ) : c && setTimeout ( function ( ) { CKEDITOR . loadFullCore && CKEDITOR . loadFullCore ( ) } , c * 1E3 ) } } ) } ) ( ) ; CKEDITOR . status = "basic_loaded" } ( ) ; CKEDITOR . dom = { } ;
( function ( ) { var b = [ ] , c = CKEDITOR . env . gecko ? "-moz-" : CKEDITOR . env . webkit ? "-webkit-" : CKEDITOR . env . opera ? "-o-" : CKEDITOR . env . ie ? "-ms-" : "" ; CKEDITOR . on ( "reset" , function ( ) { b = [ ] } ) ; CKEDITOR . tools = { arrayCompare : function ( a , f ) { if ( ! a && ! f ) return true ; if ( ! a || ! f || a . length != f . length ) return false ; for ( var b = 0 ; b < a . length ; b ++ ) if ( a [ b ] != f [ b ] ) return false ; return true } , 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 ( a === null || typeof a != "object" ||
a instanceof String || a instanceof Number || a instanceof Boolean || a instanceof Date || a instanceof RegExp ) return a ; f = new a . constructor ; for ( b in a ) f [ b ] = CKEDITOR . tools . clone ( a [ b ] ) ; return f } , capitalize : function ( a ) { return a . charAt ( 0 ) . toUpperCase ( ) + a . substring ( 1 ) . toLowerCase ( ) } , extend : function ( a ) { var f = arguments . length , b , e ; if ( typeof ( b = arguments [ f - 1 ] ) == "boolean" ) f -- ; else if ( typeof ( b = arguments [ f - 2 ] ) == "boolean" ) { e = arguments [ f - 1 ] ; f = f - 2 } for ( var c = 1 ; c < f ; c ++ ) { var j = arguments [ c ] , i ; for ( i in j ) if ( b === true || a [ i ] == void 0 ) if ( ! e ||
i in e ) a [ i ] = j [ i ] } return a } , prototypedCopy : function ( a ) { var b = function ( ) { } ; b . prototype = a ; return new b } , copy : function ( a ) { var b = { } , d ; for ( d in a ) b [ d ] = a [ d ] ; return b } , isArray : function ( a ) { return ! ! a && a instanceof Array } , isEmpty : function ( a ) { for ( var b in a ) if ( a . hasOwnProperty ( b ) ) return false ; return true } , cssVendorPrefix : function ( a , b , d ) { if ( d ) return c + a + ":" + b + ";" + a + ":" + b ; d = { } ; d [ a ] = b ; d [ c + a ] = b ; return d } , cssStyleToDomStyle : function ( ) { var a = document . createElement ( "div" ) . style , b = typeof a . cssFloat != "undefined" ? "cssFloat" :
typeof a . styleFloat != "undefined" ? "styleFloat" : "float" ; return function ( a ) { return a == "float" ? b : a . replace ( /-./g , function ( a ) { return a . substr ( 1 ) . toUpperCase ( ) } ) } } ( ) , buildStyleHtml : function ( a ) { for ( var a = [ ] . concat ( a ) , b , d = [ ] , c = 0 ; c < a . length ; c ++ ) if ( b = a [ c ] ) / @ import | [ { } ] / . test ( b ) ? d . push ( "<style>" + b + "</style>" ) : d . push ( '<link type="text/css" rel=stylesheet href="' + b + '">' ) ; return d . join ( "" ) } , htmlEncode : function ( a ) { return ( "" + a ) . replace ( /&/g , "&" ) . replace ( />/g , ">" ) . replace ( /</g , "<" ) } , htmlEncodeAttr : function ( a ) { return a . replace ( /"/g ,
""" ) . replace ( /</g , "<" ) . replace ( />/g , ">" ) } , getNextNumber : function ( ) { var a = 0 ; return function ( ) { return ++ a } } ( ) , getNextId : function ( ) { return "cke_" + this . getNextNumber ( ) } , override : function ( a , b ) { var d = b ( a ) ; d . prototype = a . prototype ; return d } , setTimeout : function ( a , b , d , c , h ) { h || ( h = window ) ; d || ( d = h ) ; return h . setTimeout ( function ( ) { c ? a . apply ( d , [ ] . concat ( c ) ) : a . apply ( d ) } , b || 0 ) } , trim : function ( ) { var a = /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g ; return function ( b ) { return b . replace ( a , "" ) } } ( ) , ltrim : function ( ) { var a = /^[ \t\n\r]+/g ;
return function ( b ) { return b . replace ( a , "" ) } } ( ) , rtrim : function ( ) { var a = /[ \t\n\r]+$/g ; return function ( b ) { return b . replace ( a , "" ) } } ( ) , indexOf : function ( a , b ) { if ( typeof b == "function" ) for ( var d = 0 , c = a . length ; d < c ; d ++ ) { if ( b ( a [ d ] ) ) return d } else { if ( a . indexOf ) return a . indexOf ( b ) ; d = 0 ; for ( c = a . length ; d < c ; d ++ ) if ( a [ d ] === b ) return d } return - 1 } , search : function ( a , b ) { var d = CKEDITOR . tools . indexOf ( a , b ) ; return d >= 0 ? a [ d ] : null } , bind : function ( a , b ) { return function ( ) { return a . apply ( b , arguments ) } } , createClass : function ( a ) { var b = a . $ ,
d = a . base , c = a . privates || a . _ , h = a . proto , a = a . statics ; ! b && ( b = function ( ) { d && this . base . apply ( this , arguments ) } ) ; if ( c ) var j = b , b = function ( ) { var a = this . _ || ( this . _ = { } ) , b ; for ( b in c ) { var f = c [ b ] ; a [ b ] = typeof f == "function" ? CKEDITOR . tools . bind ( f , this ) : f } j . apply ( this , arguments ) } ; if ( d ) { b . prototype = this . prototypedCopy ( d . prototype ) ; b . prototype . constructor = b ; b . base = d ; b . baseProto = d . prototype ; b . prototype . base = function ( ) { this . base = d . prototype . base ; d . apply ( this , arguments ) ; this . base = arguments . callee } } h && this . extend ( b . prototype ,
h , true ) ; a && this . extend ( b , a , true ) ; return b } , addFunction : function ( a , f ) { return b . push ( function ( ) { return a . apply ( f || this , arguments ) } ) - 1 } , removeFunction : function ( a ) { b [ a ] = null } , callFunction : function ( a ) { var f = b [ a ] ; return f && f . apply ( window , Array . prototype . slice . call ( arguments , 1 ) ) } , cssLength : function ( ) { var a = /^-?\d+\.?\d*px$/ , b ; return function ( d ) { b = CKEDITOR . tools . trim ( d + "" ) + "px" ; return a . test ( b ) ? b : d || "" } } ( ) , convertToPx : function ( ) { var a ; return function ( b ) { if ( ! a ) { a = CKEDITOR . dom . element . createFromHtml ( '<div style="position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"></div>' ,
CKEDITOR . document ) ; CKEDITOR . document . getBody ( ) . append ( a ) } if ( ! /%$/ . test ( b ) ) { a . setStyle ( "width" , b ) ; return a . $ . clientWidth } return b } } ( ) , repeat : function ( a , b ) { return Array ( b + 1 ) . join ( a ) } , tryThese : function ( ) { for ( var a , b = 0 , d = arguments . length ; b < d ; b ++ ) { var c = arguments [ b ] ; try { a = c ( ) ; break } catch ( h ) { } } return a } , genKey : function ( ) { return Array . prototype . slice . call ( arguments ) . join ( "-" ) } , defer : function ( a ) { return function ( ) { var b = arguments , d = this ; window . setTimeout ( function ( ) { a . apply ( d , b ) } , 0 ) } } , normalizeCssText : function ( a ,
b ) { var d = [ ] , c , h = CKEDITOR . tools . parseCssText ( a , true , b ) ; for ( c in h ) d . push ( c + ":" + h [ c ] ) ; d . sort ( ) ; return d . length ? d . join ( ";" ) + ";" : "" } , convertRgbToHex : function ( a ) { return a . replace ( /(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi , function ( a , b , c , h ) { a = [ b , c , h ] ; for ( b = 0 ; b < 3 ; b ++ ) a [ b ] = ( "0" + parseInt ( a [ b ] , 10 ) . toString ( 16 ) ) . slice ( - 2 ) ; return "#" + a . join ( "" ) } ) } , parseCssText : function ( a , b , d ) { var c = { } ; if ( d ) { d = new CKEDITOR . dom . element ( "span" ) ; d . setAttribute ( "style" , a ) ; a = CKEDITOR . tools . convertRgbToHex ( d . getAttribute ( "style" ) ||
"" ) } if ( ! a || a == ";" ) return c ; a . replace ( /"/g , '"' ) . replace ( /\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g , function ( a , d , i ) { if ( b ) { d = d . toLowerCase ( ) ; d == "font-family" && ( i = i . toLowerCase ( ) . replace ( /["']/g , "" ) . replace ( /\s*,\s*/g , "," ) ) ; i = CKEDITOR . tools . trim ( i ) } c [ d ] = i } ) ; return c } , writeCssText : function ( a , b ) { var d , c = [ ] ; for ( d in a ) c . push ( d + ":" + a [ d ] ) ; b && c . sort ( ) ; return c . join ( "; " ) } , objectCompare : function ( a , b , d ) { var c ; if ( ! a && ! b ) return true ; if ( ! a || ! b ) return false ; for ( c in a ) if ( a [ c ] != b [ c ] ) return false ; if ( ! d ) for ( c in b ) if ( a [ c ] !=
b [ c ] ) return false ; return true } , objectKeys : function ( a ) { var b = [ ] , d ; for ( d in a ) b . push ( d ) ; return b } , convertArrayToObject : function ( a , b ) { var d = { } ; arguments . length == 1 && ( b = true ) ; for ( var c = 0 , h = a . length ; c < h ; ++ c ) d [ a [ c ] ] = b ; return d } , 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 ) { function d ( ) { h = ( new Date ) . getTime ( ) ; c = false ; b ( ) } var c , h = 0 ; return { input : function ( ) { if ( ! c ) { var b =
( new Date ) . getTime ( ) - h ; b < a ? c = setTimeout ( d , a - b ) : d ( ) } } , reset : function ( ) { c && clearTimeout ( c ) ; c = h = 0 } } } } } ) ( ) ;
i in e ) a [ i ] = j [ i ] } return a } , prototypedCopy : function ( a ) { var b = function ( ) { } ; b . prototype = a ; return new b } , copy : function ( a ) { var b = { } , d ; for ( d in a ) b [ d ] = a [ d ] ; return b } , isArray : function ( a ) { return Object . prototype . toString . call ( a ) == "[object Array]" } , isEmpty : function ( a ) { for ( var b in a ) if ( a . hasOwnProperty ( b ) ) return false ; return true } , cssVendorPrefix : function ( a , b , d ) { if ( d ) return c + a + ":" + b + ";" + a + ":" + b ; d = { } ; d [ a ] = b ; d [ c + a ] = b ; return d } , cssStyleToDomStyle : function ( ) { var a = document . createElement ( "div" ) . style , b = typeof a . cssFloat !=
"undefined" ? "cssFloat" : typeof a . styleFloat != "undefined" ? "styleFloat" : "float" ; return function ( a ) { return a == "float" ? b : a . replace ( /-./g , function ( a ) { return a . substr ( 1 ) . toUpperCase ( ) } ) } } ( ) , buildStyleHtml : function ( a ) { for ( var a = [ ] . concat ( a ) , b , d = [ ] , c = 0 ; c < a . length ; c ++ ) if ( b = a [ c ] ) / @ import | [ { } ] / . test ( b ) ? d . push ( "<style>" + b + "</style>" ) : d . push ( '<link type="text/css" rel=stylesheet href="' + b + '">' ) ; return d . join ( "" ) } , htmlEncode : function ( a ) { return ( "" + a ) . replace ( /&/g , "&" ) . replace ( />/g , ">" ) . replace ( /</g , "<" ) } ,
htmlEncodeAttr : function ( a ) { return a . replace ( /"/g , """ ) . replace ( /</g , "<" ) . replace ( />/g , ">" ) } , getNextNumber : function ( ) { var a = 0 ; return function ( ) { return ++ a } } ( ) , getNextId : function ( ) { return "cke_" + this . getNextNumber ( ) } , override : function ( a , b ) { var d = b ( a ) ; d . prototype = a . prototype ; return d } , setTimeout : function ( a , b , d , c , h ) { h || ( h = window ) ; d || ( d = h ) ; return h . setTimeout ( function ( ) { c ? a . apply ( d , [ ] . concat ( c ) ) : a . apply ( d ) } , b || 0 ) } , trim : function ( ) { var a = /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g ; return function ( b ) { return b . replace ( a ,
"" ) } } ( ) , ltrim : function ( ) { var a = /^[ \t\n\r]+/g ; return function ( b ) { return b . replace ( a , "" ) } } ( ) , rtrim : function ( ) { var a = /[ \t\n\r]+$/g ; return function ( b ) { return b . replace ( a , "" ) } } ( ) , indexOf : function ( a , b ) { if ( typeof b == "function" ) for ( var d = 0 , c = a . length ; d < c ; d ++ ) { if ( b ( a [ d ] ) ) return d } else { if ( a . indexOf ) return a . indexOf ( b ) ; d = 0 ; for ( c = a . length ; d < c ; d ++ ) if ( a [ d ] === b ) return d } return - 1 } , search : function ( a , b ) { var d = CKEDITOR . tools . indexOf ( a , b ) ; return d >= 0 ? a [ d ] : null } , bind : function ( a , b ) { return function ( ) { return a . apply ( b ,
arguments ) } } , createClass : function ( a ) { var b = a . $ , d = a . base , c = a . privates || a . _ , h = a . proto , a = a . statics ; ! b && ( b = function ( ) { d && this . base . apply ( this , arguments ) } ) ; if ( c ) var j = b , b = function ( ) { var a = this . _ || ( this . _ = { } ) , b ; for ( b in c ) { var f = c [ b ] ; a [ b ] = typeof f == "function" ? CKEDITOR . tools . bind ( f , this ) : f } j . apply ( this , arguments ) } ; if ( d ) { b . prototype = this . prototypedCopy ( d . prototype ) ; b . prototype . constructor = b ; b . base = d ; b . baseProto = d . prototype ; b . prototype . base = function ( ) { this . base = d . prototype . base ; d . apply ( this , arguments ) ; this . base =
arguments . callee } } h && this . extend ( b . prototype , h , true ) ; a && this . extend ( b , a , true ) ; return b } , addFunction : function ( a , f ) { return b . push ( function ( ) { return a . apply ( f || this , arguments ) } ) - 1 } , removeFunction : function ( a ) { b [ a ] = null } , callFunction : function ( a ) { var f = b [ a ] ; return f && f . apply ( window , Array . prototype . slice . call ( arguments , 1 ) ) } , cssLength : function ( ) { var a = /^-?\d+\.?\d*px$/ , b ; return function ( d ) { b = CKEDITOR . tools . trim ( d + "" ) + "px" ; return a . test ( b ) ? b : d || "" } } ( ) , convertToPx : function ( ) { var a ; return function ( b ) { if ( ! a ) { a =
CKEDITOR . dom . element . createFromHtml ( '<div style="position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"></div>' , CKEDITOR . document ) ; CKEDITOR . document . getBody ( ) . append ( a ) } if ( ! /%$/ . test ( b ) ) { a . setStyle ( "width" , b ) ; return a . $ . clientWidth } return b } } ( ) , repeat : function ( a , b ) { return Array ( b + 1 ) . join ( a ) } , tryThese : function ( ) { for ( var a , b = 0 , d = arguments . length ; b < d ; b ++ ) { var c = arguments [ b ] ; try { a = c ( ) ; break } catch ( h ) { } } return a } , genKey : function ( ) { return Array . prototype . slice . call ( arguments ) . join ( "-" ) } ,
defer : function ( a ) { return function ( ) { var b = arguments , d = this ; window . setTimeout ( function ( ) { a . apply ( d , b ) } , 0 ) } } , normalizeCssText : function ( a , b ) { var d = [ ] , c , h = CKEDITOR . tools . parseCssText ( a , true , b ) ; for ( c in h ) d . push ( c + ":" + h [ c ] ) ; d . sort ( ) ; return d . length ? d . join ( ";" ) + ";" : "" } , convertRgbToHex : function ( a ) { return a . replace ( /(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi , function ( a , b , c , h ) { a = [ b , c , h ] ; for ( b = 0 ; b < 3 ; b ++ ) a [ b ] = ( "0" + parseInt ( a [ b ] , 10 ) . toString ( 16 ) ) . slice ( - 2 ) ; return "#" + a . join ( "" ) } ) } , parseCssText : function ( a ,
b , d ) { var c = { } ; if ( d ) { d = new CKEDITOR . dom . element ( "span" ) ; d . setAttribute ( "style" , a ) ; a = CKEDITOR . tools . convertRgbToHex ( d . getAttribute ( "style" ) || "" ) } if ( ! a || a == ";" ) return c ; a . replace ( /"/g , '"' ) . replace ( /\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g , function ( a , d , i ) { if ( b ) { d = d . toLowerCase ( ) ; d == "font-family" && ( i = i . toLowerCase ( ) . replace ( /["']/g , "" ) . replace ( /\s*,\s*/g , "," ) ) ; i = CKEDITOR . tools . trim ( i ) } c [ d ] = i } ) ; return c } , writeCssText : function ( a , b ) { var d , c = [ ] ; for ( d in a ) c . push ( d + ":" + a [ d ] ) ; b && c . sort ( ) ; return c . join ( "; " ) } ,
objectCompare : function ( a , b , d ) { var c ; if ( ! a && ! b ) return true ; if ( ! a || ! b ) return false ; for ( c in a ) if ( a [ c ] != b [ c ] ) return false ; if ( ! d ) for ( c in b ) if ( a [ c ] != b [ c ] ) return false ; return true } , objectKeys : function ( a ) { var b = [ ] , d ; for ( d in a ) b . push ( d ) ; return b } , convertArrayToObject : function ( a , b ) { var d = { } ; arguments . length == 1 && ( b = true ) ; for ( var c = 0 , h = a . length ; c < h ; ++ c ) d [ a [ c ] ] = b ; return d } , 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 ) { function d ( ) { h = ( new Date ) . getTime ( ) ; c = false ; b ( ) } var c , h = 0 ; return { input : function ( ) { if ( ! c ) { var b = ( new Date ) . getTime ( ) - h ; b < a ? c = setTimeout ( d , a - b ) : d ( ) } } , reset : function ( ) { c && clearTimeout ( c ) ; c = h = 0 } } } } } ) ( ) ;
CKEDITOR . dtd = function ( ) { var b = CKEDITOR . tools . extend , c = function ( a , b ) { for ( var f = CKEDITOR . tools . clone ( a ) , d = 1 ; d < arguments . length ; d ++ ) { var b = arguments [ d ] , c ; for ( c in b ) delete f [ c ] } return f } , a = { } , f = { } , d = { 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 , menu : 1 , nav : 1 , ol : 1 , p : 1 , pre : 1 , section : 1 , table : 1 , ul : 1 } , e = { command : 1 , link : 1 , meta : 1 , noscript : 1 , script : 1 , style : 1 } , h = { } , j = { "#" : 1 } , i = { center : 1 , dir : 1 , noframes : 1 } ;
b ( a , { 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 } , j , { acronym : 1 , applet : 1 , basefont : 1 , big : 1 , font : 1 , isindex : 1 , strike : 1 , style : 1 , tt : 1 } ) ; b ( f , d , a , i ) ; c = { a : c ( a , { a : 1 , button : 1 } ) , abbr : a , address : f ,
area : h , article : b ( { style : 1 } , f ) , aside : b ( { style : 1 } , f ) , audio : b ( { source : 1 , track : 1 } , f ) , b : a , base : h , bdi : a , bdo : a , blockquote : f , body : f , br : h , button : c ( a , { a : 1 , button : 1 } ) , canvas : a , caption : f , cite : a , code : a , col : h , colgroup : { col : 1 } , command : h , datalist : b ( { option : 1 } , a ) , dd : f , del : a , details : b ( { summary : 1 } , f ) , dfn : a , div : b ( { style : 1 } , f ) , dl : { dt : 1 , dd : 1 } , dt : f , em : a , embed : h , fieldset : b ( { legend : 1 } , f ) , figcaption : f , figure : b ( { figcaption : 1 } , f ) , footer : f , form : f , h1 : a , h2 : a , h3 : a , h4 : a , h5 : a , h6 : a , head : b ( { title : 1 , base : 1 } , e ) , header : f , hgroup : { h1 : 1 ,
@@ -91,11 +91,11 @@ return this}:a}(),setAttributes:function(a){for(var b in a)this.setAttribute(b,a
a . length ; b ++ ) this . removeAttribute ( a [ b ] ) ; else for ( b in a ) a . hasOwnProperty ( b ) && this . removeAttribute ( b ) } , removeStyle : function ( a ) { var b = this . $ . style ; if ( ! b . removeProperty && ( a == "border" || a == "margin" || a == "padding" ) ) { var c = [ "top" , "left" , "right" , "bottom" ] , e ; a == "border" && ( e = [ "color" , "style" , "width" ] ) ; for ( var b = [ ] , h = 0 ; h < c . length ; h ++ ) if ( e ) for ( var j = 0 ; j < e . length ; j ++ ) b . push ( [ a , c [ h ] , e [ j ] ] . join ( "-" ) ) ; else b . push ( [ a , c [ h ] ] . join ( "-" ) ) ; for ( a = 0 ; a < b . length ; a ++ ) this . removeStyle ( b [ a ] ) } else { b . removeProperty ? b . removeProperty ( a ) :
b . removeAttribute ( CKEDITOR . tools . cssStyleToDomStyle ( a ) ) ; this . $ . style . cssText || this . removeAttribute ( "style" ) } } , 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 ) { if ( CKEDITOR . env . ie && CKEDITOR . env . version < 9 ) { a = Math . round ( a * 100 ) ; this . setStyle ( "filter" , a >= 100 ? "" : "progid:DXImageTransform.Microsoft.Alpha(opacity=" + a + ")" ) } else this . setStyle ( "opacity" , a ) } , unselectable : function ( ) { this . setStyles ( CKEDITOR . tools . cssVendorPrefix ( "user-select" ,
"none" ) ) ; if ( CKEDITOR . env . ie || CKEDITOR . env . opera ) { this . setAttribute ( "unselectable" , "on" ) ; for ( var a , b = this . getElementsByTag ( "*" ) , c = 0 , e = b . count ( ) ; c < e ; c ++ ) { a = b . getItem ( c ) ; a . setAttribute ( "unselectable" , "on" ) } } } , getPositionedAncestor : function ( ) { for ( var a = this ; a . getName ( ) != "html" ; ) { if ( a . getComputedStyle ( "position" ) != "static" ) return a ; a = a . getParent ( ) } return null } , getDocumentPosition : function ( a ) { var b = 0 , c = 0 , e = this . getDocument ( ) , h = e . getBody ( ) , j = e . $ . compatMode == "BackCompat" ; if ( document . documentElement . getBoundingClientRect ) { var i =
this . $ . getBoundingClientRect ( ) , k = e . $ . documentElement , m = k . clientTop || h . $ . clientTop || 0 , q = k . clientLeft || h . $ . clientLeft || 0 , r = true ; if ( CKEDITOR . env . ie ) { r = e . getDocumentElement ( ) . contains ( this ) ; e = e . getBody ( ) . contains ( this ) ; r = j && e || ! j && r } if ( r ) { b = i . left + ( ! j && k . scrollLeft || h . $ . scrollLeft ) ; b = b - q ; c = i . top + ( ! j && k . scrollTop || h . $ . scrollTop ) ; c = c - m } } else { h = this ; for ( e = null ; h && ! ( h . getName ( ) == "body" || h . getName ( ) == "html" ) ; ) { b = b + ( h . $ . offsetLeft - h . $ . scrollLeft ) ; c = c + ( h . $ . offsetTop - h . $ . scrollTop ) ; if ( ! h . equals ( this ) ) { b = b + ( h . $ . clientLeft ||
this . $ . getBoundingClientRect ( ) , l = e . $ . documentElement , m = l . clientTop || h . $ . clientTop || 0 , q = l . clientLeft || h . $ . clientLeft || 0 , w = true ; if ( CKEDITOR . env . ie ) { w = e . getDocumentElement ( ) . contains ( this ) ; e = e . getBody ( ) . contains ( this ) ; w = j && e || ! j && w } if ( w ) { b = i . left + ( ! j && l . scrollLeft || h . $ . scrollLeft ) ; b = b - q ; c = i . top + ( ! j && l . scrollTop || h . $ . scrollTop ) ; c = c - m } } else { h = this ; for ( e = null ; h && ! ( h . getName ( ) == "body" || h . getName ( ) == "html" ) ; ) { b = b + ( h . $ . offsetLeft - h . $ . scrollLeft ) ; c = c + ( h . $ . offsetTop - h . $ . scrollTop ) ; if ( ! h . equals ( this ) ) { b = b + ( h . $ . clientLeft ||
0 ) ; c = c + ( h . $ . clientTop || 0 ) } for ( ; e && ! e . equals ( h ) ; ) { b = b - e . $ . scrollLeft ; c = c - e . $ . scrollTop ; e = e . getParent ( ) } e = h ; h = ( i = h . $ . offsetParent ) ? new CKEDITOR . dom . element ( i ) : null } } if ( a ) { h = this . getWindow ( ) ; e = a . getWindow ( ) ; if ( ! h . equals ( e ) && h . $ . frameElement ) { a = ( new CKEDITOR . dom . element ( h . $ . frameElement ) ) . getDocumentPosition ( a ) ; b = b + a . x ; c = c + a . y } } if ( ! document . documentElement . getBoundingClientRect && CKEDITOR . env . gecko && ! j ) { b = b + ( this . $ . clientLeft ? 1 : 0 ) ; c = c + ( this . $ . clientTop ? 1 : 0 ) } return { x : b , y : c } } , scrollIntoView : function ( a ) { var b =
this . getParent ( ) ; if ( b ) { do { ( b . $ . clientWidth && b . $ . clientWidth < b . $ . scrollWidth || b . $ . clientHeight && b . $ . clientHeight < b . $ . scrollHeight ) && ! b . is ( "body" ) && this . scrollIntoParent ( b , a , 1 ) ; if ( b . is ( "html" ) ) { var c = b . getWindow ( ) ; try { var e = c . $ . frameElement ; e && ( b = new CKEDITOR . dom . element ( e ) ) } catch ( h ) { } } } while ( b = b . getParent ( ) ) } } , scrollIntoParent : function ( a , b , c ) { var e , h , j , i ; function k ( b , g ) { if ( /body|html/ . test ( a . getName ( ) ) ) a . getWindow ( ) . $ . scrollBy ( b , g ) ; else { a . $ . scrollLeft = a . $ . scrollLeft + b ; a . $ . scrollTop = a . $ . scrollTop + g } }
function m ( a , b ) { var g = { x : 0 , y : 0 } ; if ( ! a . is ( r ? "body" : "html" ) ) { var c = a . $ . getBoundingClientRect ( ) ; g . x = c . left ; g . y = c . top } c = a . getWindow ( ) ; if ( ! c . equals ( b ) ) { c = m ( CKEDITOR . dom . element . get ( c . $ . frameElement ) , b ) ; g . x = g . x + c . x ; g . y = g . y + c . y } return g } function q ( a , b ) { return parseInt ( a . getComputedStyle ( "margin-" + b ) || 0 , 10 ) || 0 } ! a && ( a = this . getWindow ( ) ) ; j = a . getDocument ( ) ; var r = j . $ . compatMode == "BackCompat" ; a instanceof CKEDITOR . dom . window && ( a = r ? j . getBody ( ) : j . getDocumentElement ( ) ) ; j = a . getWindow ( ) ; h = m ( this , j ) ; var l = m ( a , j ) , g = this . $ . offsetHeight ;
e = this . $ . offsetWidth ; var p = a . $ . clientHeight , v = a . $ . clientWidth ; j = h . x - q ( this , "left" ) - l . x || 0 ; i = h . y - q ( this , "top" ) - l . y || 0 ; e = h . x + e + q ( this , "right" ) - ( l . x + v ) || 0 ; h = h . y + g + q ( this , "bottom" ) - ( l . y + p ) || 0 ; if ( i < 0 || h > 0 ) k ( 0 , b === true ? i : b === false ? h : i < 0 ? i : h ) ; if ( c && ( j < 0 || e > 0 ) ) k ( j < 0 ? j : e , 0 ) } , setState : function ( a , b , c ) { b = b || "cke" ; switch ( a ) { case CKEDITOR . TRISTATE _ON : this . addClass ( b + "_on" ) ; this . removeClass ( b + "_off" ) ; this . removeClass ( b + "_disabled" ) ; c && this . setAttribute ( "aria-pressed" , true ) ; c && this . removeAttribute ( "aria-disabled" ) ;
this . getParent ( ) ; if ( b ) { do { ( b . $ . clientWidth && b . $ . clientWidth < b . $ . scrollWidth || b . $ . clientHeight && b . $ . clientHeight < b . $ . scrollHeight ) && ! b . is ( "body" ) && this . scrollIntoParent ( b , a , 1 ) ; if ( b . is ( "html" ) ) { var c = b . getWindow ( ) ; try { var e = c . $ . frameElement ; e && ( b = new CKEDITOR . dom . element ( e ) ) } catch ( h ) { } } } while ( b = b . getParent ( ) ) } } , scrollIntoParent : function ( a , b , c ) { var e , h , j , i ; function l ( b , g ) { if ( /body|html/ . test ( a . getName ( ) ) ) a . getWindow ( ) . $ . scrollBy ( b , g ) ; else { a . $ . scrollLeft = a . $ . scrollLeft + b ; a . $ . scrollTop = a . $ . scrollTop + g } }
function m ( a , b ) { var g = { x : 0 , y : 0 } ; if ( ! a . is ( w ? "body" : "html" ) ) { var c = a . $ . getBoundingClientRect ( ) ; g . x = c . left ; g . y = c . top } c = a . getWindow ( ) ; if ( ! c . equals ( b ) ) { c = m ( CKEDITOR . dom . element . get ( c . $ . frameElement ) , b ) ; g . x = g . x + c . x ; g . y = g . y + c . y } return g } function q ( a , b ) { return parseInt ( a . getComputedStyle ( "margin-" + b ) || 0 , 10 ) || 0 } ! a && ( a = this . getWindow ( ) ) ; j = a . getDocument ( ) ; var w = j . $ . compatMode == "BackCompat" ; a instanceof CKEDITOR . dom . window && ( a = w ? j . getBody ( ) : j . getDocumentElement ( ) ) ; j = a . getWindow ( ) ; h = m ( this , j ) ; var k = m ( a , j ) , g = this . $ . offsetHeight ;
e = this . $ . offsetWidth ; var p = a . $ . clientHeight , v = a . $ . clientWidth ; j = h . x - q ( this , "left" ) - k . x || 0 ; i = h . y - q ( this , "top" ) - k . y || 0 ; e = h . x + e + q ( this , "right" ) - ( k . x + v ) || 0 ; h = h . y + g + q ( this , "bottom" ) - ( k . y + p ) || 0 ; if ( i < 0 || h > 0 ) l ( 0 , b === true ? i : b === false ? h : i < 0 ? i : h ) ; if ( c && ( j < 0 || e > 0 ) ) l ( j < 0 ? j : e , 0 ) } , setState : function ( a , b , c ) { b = b || "cke" ; switch ( a ) { case CKEDITOR . TRISTATE _ON : this . addClass ( b + "_on" ) ; this . removeClass ( b + "_off" ) ; this . removeClass ( b + "_disabled" ) ; c && this . setAttribute ( "aria-pressed" , true ) ; 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" , true ) ; 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 ) { for ( var c = this . $ . attributes , b = b || { } , e = 0 ; e < c . length ; e ++ ) { var h = c [ e ] , j = h . nodeName . toLowerCase ( ) , i ; if ( ! ( j in b ) ) if ( j == "checked" && ( i = this . getAttribute ( j ) ) ) a . setAttribute ( j , i ) ; else if ( h . specified || CKEDITOR . env . ie && h . nodeValue && j == "value" ) { i = this . getAttribute ( j ) ; if ( i === null ) i = h . nodeValue ; a . setAttribute ( j , i ) } } if ( 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 ( ) && this . $ . parentNode . replaceChild ( a . $ , this . $ ) ; a . $ [ "data-cke-expando" ] = this . $ [ "data-cke-expando" ] ; this . $ = a . $ } } , getChild : function ( ) { function a ( a , b ) { var c = a . childNodes ; if ( b >= 0 && b < c . length ) return c [ b ] } return function ( b ) { var c = this . $ ; if ( b . slice ) for ( ; b . length > 0 && 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 ( ) { this . on ( "contextmenu" ,
@@ -103,96 +103,96 @@ function(a){a.data.getTarget().hasClass("cke_enable_context_menu")||a.data.preve
b , c ; for ( b in a ) { c = a [ b ] ; if ( c . element . equals ( this ) && c . elementMode != CKEDITOR . ELEMENT _MODE _APPENDTO ) return c } return null } } ) ; var c = { 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 , c , d ) { if ( typeof c == "number" ) { if ( d && ( ! CKEDITOR . env . ie || ! CKEDITOR . env . quirks ) ) c = c - b . call ( this , a ) ; this . setStyle ( a , c + "px" ) } } ; CKEDITOR . dom . element . prototype . getSize = function ( a ,
c ) { var d = Math . max ( this . $ [ "offset" + CKEDITOR . tools . capitalize ( a ) ] , this . $ [ "client" + CKEDITOR . tools . capitalize ( a ) ] ) || 0 ; c && ( d = d - b . call ( this , a ) ) ; return d } } ) ( ) ; CKEDITOR . dom . documentFragment = function ( b ) { b = b || CKEDITOR . document ; this . $ = b . type == CKEDITOR . NODE _DOCUMENT ? b . $ . createDocumentFragment ( ) : b } ;
CKEDITOR . tools . extend ( CKEDITOR . dom . documentFragment . prototype , CKEDITOR . dom . element . prototype , { type : CKEDITOR . NODE _DOCUMENT _FRAGMENT , insertAfterNode : function ( b ) { b = b . $ ; b . parentNode . insertBefore ( this . $ , b . nextSibling ) } } , ! 0 , { append : 1 , appendBogus : 1 , getFirst : 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 b ( a , b ) { var c = this . range ; if ( this . _ . end ) return null ; if ( ! this . _ . start ) { this . _ . start = 1 ; if ( c . collapsed ) { this . end ( ) ; return null } c . optimize ( ) } var d , m = c . startContainer ; d = c . endContainer ; var q = c . startOffset , f = c . endOffset , l , g = this . guard , p = this . type , e = a ? "getPreviousSourceNode" : "getNextSourceNode" ; if ( ! a && ! this . _ . guardLTR ) { var u = d . type == CKEDITOR . NODE _ELEMENT ? d : d . getParent ( ) , o = d . type == CKEDITOR . NODE _ELEMENT ? d . getChild ( f ) : d . getNext ( ) ; this . _ . guardLTR = function ( a , b ) { return ( ! b || ! u . equals ( a ) ) && ( ! o ||
! a . equals ( o ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } if ( a && ! this . _ . guardRTL ) { var F = m . type == CKEDITOR . NODE _ELEMENT ? m : m . getParent ( ) , A = m . type == CKEDITOR . NODE _ELEMENT ? q ? m . getChild ( q - 1 ) : null : m . getPrevious ( ) ; this . _ . guardRTL = function ( a , b ) { return ( ! b || ! F . equals ( a ) ) && ( ! A || ! a . equals ( A ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } var s = a ? this . _ . guardRTL : this . _ . guardLTR ; l = g ? function ( a , b ) { return s ( a , b ) === false ? false : g ( a , b ) } : s ; if ( this . current ) d = this . current [ e ] ( false , p , l ) ; else { if ( a ) d . type ==
CKEDITOR . NODE _ELEMENT && ( d = f > 0 ? d . getChild ( f - 1 ) : l ( d , true ) === false ? null : d . getPreviousSourceNode ( true , p , l ) ) ; else { d = m ; if ( d . type == CKEDITOR . NODE _ELEMENT && ! ( d = d . getChild ( q ) ) ) d = l ( m , true ) === false ? null : m . getNextSourceNode ( true , p , l ) } d && l ( d ) === false && ( d = null ) } for ( ; d && ! this . _ . end ; ) { this . current = d ; if ( ! this . evaluator || this . evaluator ( d ) !== false ) { if ( ! b ) return d } else if ( b && this . evaluator ) return false ; d = d [ e ] ( false , p , l ) } this . end ( ) ; return this . current = null } function c ( a ) { for ( var c , d = null ; c = b . call ( this , a ) ; ) d = c ; return d }
( function ( ) { function b ( a , b ) { var c = this . range ; if ( this . _ . end ) return null ; if ( ! this . _ . start ) { this . _ . start = 1 ; if ( c . collapsed ) { this . end ( ) ; return null } c . optimize ( ) } var d , m = c . startContainer ; d = c . endContainer ; var q = c . startOffset , f = c . endOffset , k , g = this . guard , p = this . type , e = a ? "getPreviousSourceNode" : "getNextSourceNode" ; if ( ! a && ! this . _ . guardLTR ) { var t = d . type == CKEDITOR . NODE _ELEMENT ? d : d . getParent ( ) , n = d . type == CKEDITOR . NODE _ELEMENT ? d . getChild ( f ) : d . getNext ( ) ; this . _ . guardLTR = function ( a , b ) { return ( ! b || ! t . equals ( a ) ) && ( ! n ||
! a . equals ( n ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } if ( a && ! this . _ . guardRTL ) { var E = m . type == CKEDITOR . NODE _ELEMENT ? m : m . getParent ( ) , B = m . type == CKEDITOR . NODE _ELEMENT ? q ? m . getChild ( q - 1 ) : null : m . getPrevious ( ) ; this . _ . guardRTL = function ( a , b ) { return ( ! b || ! E . equals ( a ) ) && ( ! B || ! a . equals ( B ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } var r = a ? this . _ . guardRTL : this . _ . guardLTR ; k = g ? function ( a , b ) { return r ( a , b ) === false ? false : g ( a , b ) } : r ; if ( this . current ) d = this . current [ e ] ( false , p , k ) ; else { if ( a ) d . type ==
CKEDITOR . NODE _ELEMENT && ( d = f > 0 ? d . getChild ( f - 1 ) : k ( d , true ) === false ? null : d . getPreviousSourceNode ( true , p , k ) ) ; else { d = m ; if ( d . type == CKEDITOR . NODE _ELEMENT && ! ( d = d . getChild ( q ) ) ) d = k ( m , true ) === false ? null : m . getNextSourceNode ( true , p , k ) } d && k ( d ) === false && ( d = null ) } for ( ; d && ! this . _ . end ; ) { this . current = d ; if ( ! this . evaluator || this . evaluator ( d ) !== false ) { if ( ! b ) return d } else if ( b && this . evaluator ) return false ; d = d [ e ] ( false , p , k ) } this . end ( ) ; return this . current = null } function c ( a ) { for ( var c , d = null ; c = b . call ( this , a ) ; ) d = c ; return d }
CKEDITOR . dom . walker = CKEDITOR . tools . createClass ( { $ : function ( a ) { this . range = a ; this . _ = { } } , proto : { end : function ( ) { this . _ . end = 1 } , next : function ( ) { return b . call ( this ) } , previous : function ( ) { return b . call ( this , 1 ) } , checkForward : function ( ) { return b . call ( this , 0 , 1 ) !== false } , checkBackward : function ( ) { return b . call ( this , 1 , 1 ) !== false } , lastForward : function ( ) { return c . call ( this ) } , lastBackward : function ( ) { return c . call ( this , 1 ) } , reset : function ( ) { delete this . current ; this . _ = { } } } } ) ; var a = { 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 } ; CKEDITOR . dom . element . prototype . isBlockBoundary = function ( b ) { b = b ? CKEDITOR . tools . extend ( { } , CKEDITOR . dtd . $block , b || { } ) : CKEDITOR . dtd . $block ; return this . getComputedStyle ( "float" ) == "none" && a [ this . getComputedStyle ( "display" ) ] || b [ this . getName ( ) ] } ; 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 && a . getName ( ) == "span" && a . data ( "cke-bookmark" ) } return function ( d ) { var m , q ; m = d && d . type != CKEDITOR . NODE _ELEMENT && ( q = d . getParent ( ) ) && c ( q ) ; m = a ? m : m || c ( d ) ; return ! ! ( b ^ m ) } } ; 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 ( ) == " " ) ; return ! ! ( a ^ c ) } } ; CKEDITOR . dom . walker . invisible =
function ( a ) { var b = CKEDITOR . dom . walker . whitespaces ( ) ; return function ( c ) { if ( b ( c ) ) c = 1 ; else { c . type == CKEDITOR . NODE _TEXT && ( c = c . getParent ( ) ) ; c = ! c . $ . offsetHeight } return ! ! ( a ^ c ) } } ; 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 ! d ( a ) && ! e ( a ) } return function ( c ) { var d = ! CKEDITOR . env . ie ? c . is && c . is ( "br" ) : c . getText && f . test ( c . getText ( ) ) ; if ( d ) { d = c . getParent ( ) ; c = c . getNext ( b ) ; d = d . isBlockBoundary ( ) && ( ! c || c . type == CKEDITOR . NODE _ELEMENT &&
c . isBlockBoundary ( ) ) } return ! ! ( a ^ d ) } } ; var f = /^[\t\r\n ]*(?: |\xa0)$/ , d = CKEDITOR . dom . walker . whitespaces ( ) , e = CKEDITOR . dom . walker . bookmark ( ) ; CKEDITOR . dom . element . prototype . getBogus = function ( ) { var a = this ; do a = a . getPreviousSourceNode ( ) ; while ( e ( a ) || d ( a ) || a . type == CKEDITOR . NODE _ELEMENT && a . getName ( ) in CKEDITOR . dtd . $inline && ! ( a . getName ( ) in CKEDITOR . dtd . $empty ) ) ; return a && ( ! CKEDITOR . env . ie ? a . is && a . is ( "br" ) : a . getText && f . test ( a . getText ( ) ) ) ? a : false } } ) ( ) ;
CKEDITOR . dom . range = function ( b ) { this . endOffset = this . endContainer = this . startOffset = this . startContainer = null ; this . collapsed = true ; var c = b instanceof CKEDITOR . dom . document ; this . document = c ? b : b . getDocument ( ) ; this . root = c ? b . getBody ( ) : b } ;
( function ( ) { function b ( ) { var a = false , b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . dom . walker . bookmark ( true ) , l = CKEDITOR . dom . walker . bogus ( ) ; return function ( g ) { if ( c ( g ) || b ( g ) ) return true ; if ( l ( g ) && ! a ) return a = true ; return g . type == CKEDITOR . NODE _TEXT && ( g . hasAscendant ( "pre" ) || CKEDITOR . tools . trim ( g . getText ( ) ) . length ) || g . type == CKEDITOR . NODE _ELEMENT && ! g . is ( e ) ? false : true } } function c ( a ) { var b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . dom . walker . bookmark ( 1 ) ; return function ( l ) { return c ( l ) || b ( l ) ? true : ! a && h ( l ) ||
l . type == CKEDITOR . NODE _ELEMENT && l . is ( CKEDITOR . dtd . $removeEmpty ) } } function a ( a ) { return ! j ( a ) && ! i ( a ) } var f = function ( a ) { a . collapsed = a . startContainer && a . endContainer && a . startContainer . equals ( a . endContainer ) && a . startOffset == a . endOffset } , d = function ( a , b , c , l ) { a . optimizeBookmark ( ) ; var g = a . startContainer , d = a . endContainer , f = a . startOffset , e = a . endOffset , h , i ; if ( d . type == CKEDITOR . NODE _TEXT ) d = d . split ( e ) ; else if ( d . getChildCount ( ) > 0 ) if ( e >= d . getChildCount ( ) ) { d = d . append ( a . document . createText ( "" ) ) ; i = true } else d = d . getChild ( e ) ;
if ( g . type == CKEDITOR . NODE _TEXT ) { g . split ( f ) ; g . equals ( d ) && ( d = g . getNext ( ) ) } else if ( f ) if ( f >= g . getChildCount ( ) ) { g = g . append ( a . document . createText ( "" ) ) ; h = true } else g = g . getChild ( f ) . getPrevious ( ) ; else { g = g . append ( a . document . createText ( "" ) , 1 ) ; h = true } var f = g . getParents ( ) , e = d . getParents ( ) , j , s , x ; for ( j = 0 ; j < f . length ; j ++ ) { s = f [ j ] ; x = e [ j ] ; if ( ! s . equals ( x ) ) break } for ( var k = c , t , C , y , n = j ; n < f . length ; n ++ ) { t = f [ n ] ; k && ! t . equals ( g ) && ( C = k . append ( t . clone ( ) ) ) ; for ( t = t . getNext ( ) ; t ; ) { if ( t . equals ( e [ n ] ) || t . equals ( d ) ) break ; y = t . getNext ( ) ;
if ( b == 2 ) k . append ( t . clone ( true ) ) ; else { t . remove ( ) ; b == 1 && k . append ( t ) } t = y } k && ( k = C ) } k = c ; for ( c = j ; c < e . length ; c ++ ) { t = e [ c ] ; b > 0 && ! t . equals ( d ) && ( C = k . append ( t . clone ( ) ) ) ; if ( ! f [ c ] || t . $ . parentNode != f [ c ] . $ . parentNode ) for ( t = t . getPrevious ( ) ; t ; ) { if ( t . equals ( f [ c ] ) || t . equals ( g ) ) break ; y = t . getPrevious ( ) ; if ( b == 2 ) k . $ . insertBefore ( t . $ . cloneNode ( true ) , k . $ . firstChild ) ; else { t . remove ( ) ; b == 1 && k . $ . insertBefore ( t . $ , k . $ . firstChild ) } t = y } k && ( k = C ) } if ( b == 2 ) { s = a . startContainer ; if ( s . type == CKEDITOR . NODE _TEXT ) { s . $ . data = s . $ . data + s . $ . nextSibling . data ;
s . $ . parentNode . removeChild ( s . $ . nextSibling ) } a = a . endContainer ; if ( a . type == CKEDITOR . NODE _TEXT && a . $ . nextSibling ) { a . $ . data = a . $ . data + a . $ . nextSibling . data ; a . $ . parentNode . removeChild ( a . $ . nextSibling ) } } else { if ( s && x && ( g . $ . parentNode != s . $ . parentNode || d . $ . parentNode != x . $ . parentNode ) ) { b = x . getIndex ( ) ; h && x . $ . parentNode == g . $ . parentNode && b -- ; if ( l && s . type == CKEDITOR . NODE _ELEMENT ) { l = CKEDITOR . dom . element . createFromHtml ( '<span data-cke-bookmark="1" style="display:none"> </span>' , a . document ) ; l . insertAfter ( s ) ; s . mergeSiblings ( false ) ;
a . moveToBookmark ( { startNode : l } ) } else a . setStart ( x . getParent ( ) , b ) } a . collapse ( true ) } h && g . remove ( ) ; i && d . $ . parentNode && d . remove ( ) } , e = { abbr : 1 , acronym : 1 , b : 1 , bdo : 1 , big : 1 , cite : 1 , code : 1 , del : 1 , dfn : 1 , em : 1 , font : 1 , i : 1 , ins : 1 , label : 1 , kbd : 1 , q : 1 , samp : 1 , small : 1 , span : 1 , strike : 1 , strong : 1 , sub : 1 , sup : 1 , tt : 1 , u : 1 , "var" : 1 } , h = CKEDITOR . dom . walker . bogus ( ) , j = new CKEDITOR . dom . walker . whitespaces , i = new CKEDITOR . dom . walker . bookmark , k = /^[\t\r\n ]*(?: |\xa0)$/ ; CKEDITOR . dom . range . prototype = { clone : function ( ) { var a = new CKEDITOR . dom . range ( this . root ) ;
( function ( ) { function b ( ) { var a = false , b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . dom . walker . bookmark ( true ) , k = CKEDITOR . dom . walker . bogus ( ) ; return function ( g ) { if ( c ( g ) || b ( g ) ) return true ; if ( k ( g ) && ! a ) return a = true ; return g . type == CKEDITOR . NODE _TEXT && ( g . hasAscendant ( "pre" ) || CKEDITOR . tools . trim ( g . getText ( ) ) . length ) || g . type == CKEDITOR . NODE _ELEMENT && ! g . is ( e ) ? false : true } } function c ( a ) { var b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . dom . walker . bookmark ( 1 ) ; return function ( k ) { return c ( k ) || b ( k ) ? true : ! a && h ( k ) ||
k . type == CKEDITOR . NODE _ELEMENT && k . is ( CKEDITOR . dtd . $removeEmpty ) } } function a ( a ) { return ! j ( a ) && ! i ( a ) } var f = function ( a ) { a . collapsed = a . startContainer && a . endContainer && a . startContainer . equals ( a . endContainer ) && a . startOffset == a . endOffset } , d = function ( a , b , c , k ) { a . optimizeBookmark ( ) ; var g = a . startContainer , d = a . endContainer , f = a . startOffset , e = a . endOffset , h , i ; if ( d . type == CKEDITOR . NODE _TEXT ) d = d . split ( e ) ; else if ( d . getChildCount ( ) > 0 ) if ( e >= d . getChildCount ( ) ) { d = d . append ( a . document . createText ( "" ) ) ; i = true } else d = d . getChild ( e ) ;
if ( g . type == CKEDITOR . NODE _TEXT ) { g . split ( f ) ; g . equals ( d ) && ( d = g . getNext ( ) ) } else if ( f ) if ( f >= g . getChildCount ( ) ) { g = g . append ( a . document . createText ( "" ) ) ; h = true } else g = g . getChild ( f ) . getPrevious ( ) ; else { g = g . append ( a . document . createText ( "" ) , 1 ) ; h = true } var f = g . getParents ( ) , e = d . getParents ( ) , j , r , x ; for ( j = 0 ; j < f . length ; j ++ ) { r = f [ j ] ; x = e [ j ] ; if ( ! r . equals ( x ) ) break } for ( var l = c , s , C , y , o = j ; o < f . length ; o ++ ) { s = f [ o ] ; l && ! s . equals ( g ) && ( C = l . append ( s . clone ( ) ) ) ; for ( s = s . getNext ( ) ; s ; ) { if ( s . equals ( e [ o ] ) || s . equals ( d ) ) break ; y = s . getNext ( ) ;
if ( b == 2 ) l . append ( s . clone ( true ) ) ; else { s . remove ( ) ; b == 1 && l . append ( s ) } s = y } l && ( l = C ) } l = c ; for ( c = j ; c < e . length ; c ++ ) { s = e [ c ] ; b > 0 && ! s . equals ( d ) && ( C = l . append ( s . clone ( ) ) ) ; if ( ! f [ c ] || s . $ . parentNode != f [ c ] . $ . parentNode ) for ( s = s . getPrevious ( ) ; s ; ) { if ( s . equals ( f [ c ] ) || s . equals ( g ) ) break ; y = s . getPrevious ( ) ; if ( b == 2 ) l . $ . insertBefore ( s . $ . cloneNode ( true ) , l . $ . firstChild ) ; else { s . remove ( ) ; b == 1 && l . $ . insertBefore ( s . $ , l . $ . firstChild ) } s = y } l && ( l = C ) } if ( b == 2 ) { r = a . startContainer ; if ( r . type == CKEDITOR . NODE _TEXT ) { r . $ . data = r . $ . data + r . $ . nextSibling . data ;
r . $ . parentNode . removeChild ( r . $ . nextSibling ) } a = a . endContainer ; if ( a . type == CKEDITOR . NODE _TEXT && a . $ . nextSibling ) { a . $ . data = a . $ . data + a . $ . nextSibling . data ; a . $ . parentNode . removeChild ( a . $ . nextSibling ) } } else { if ( r && x && ( g . $ . parentNode != r . $ . parentNode || d . $ . parentNode != x . $ . parentNode ) ) { b = x . getIndex ( ) ; h && x . $ . parentNode == g . $ . parentNode && b -- ; if ( k && r . type == CKEDITOR . NODE _ELEMENT ) { k = CKEDITOR . dom . element . createFromHtml ( '<span data-cke-bookmark="1" style="display:none"> </span>' , a . document ) ; k . insertAfter ( r ) ; r . mergeSiblings ( false ) ;
a . moveToBookmark ( { startNode : k } ) } else a . setStart ( x . getParent ( ) , b ) } a . collapse ( true ) } h && g . remove ( ) ; i && d . $ . parentNode && d . remove ( ) } , e = { abbr : 1 , acronym : 1 , b : 1 , bdo : 1 , big : 1 , cite : 1 , code : 1 , del : 1 , dfn : 1 , em : 1 , font : 1 , i : 1 , ins : 1 , label : 1 , kbd : 1 , q : 1 , samp : 1 , small : 1 , span : 1 , strike : 1 , strong : 1 , sub : 1 , sup : 1 , tt : 1 , u : 1 , "var" : 1 } , h = CKEDITOR . dom . walker . bogus ( ) , j = new CKEDITOR . dom . walker . whitespaces , i = new CKEDITOR . dom . walker . bookmark , l = /^[\t\r\n ]*(?: |\xa0)$/ ; CKEDITOR . dom . range . prototype = { clone : function ( ) { var a = new CKEDITOR . dom . range ( this . root ) ;
a . startContainer = this . startContainer ; a . startOffset = this . startOffset ; a . endContainer = this . endContainer ; a . endOffset = this . endOffset ; a . collapsed = this . collapsed ; return a } , collapse : function ( a ) { if ( a ) { this . endContainer = this . startContainer ; this . endOffset = this . startOffset } else { this . startContainer = this . endContainer ; this . startOffset = this . endOffset } this . collapsed = true } , cloneContents : function ( ) { var a = new CKEDITOR . dom . documentFragment ( this . document ) ; this . collapsed || d ( this , 2 , a ) ; return a } , deleteContents : function ( a ) { this . collapsed ||
d ( this , 0 , null , a ) } , extractContents : function ( a ) { var b = new CKEDITOR . dom . documentFragment ( this . document ) ; this . collapsed || d ( this , 1 , b , a ) ; return b } , createBookmark : function ( a ) { var b , c , d , g , p = this . collapsed ; b = this . document . createElement ( "span" ) ; b . data ( "cke-bookmark" , 1 ) ; b . setStyle ( "display" , "none" ) ; b . setHtml ( " " ) ; if ( a ) { d = "cke_bm_" + CKEDITOR . tools . getNextNumber ( ) ; b . setAttribute ( "id" , d + ( p ? "C" : "S" ) ) } if ( ! p ) { c = b . clone ( ) ; c . setHtml ( " " ) ; a && c . setAttribute ( "id" , d + "E" ) ; g = this . clone ( ) ; g . collapse ( ) ; g . insertNode ( c ) } g =
this . clone ( ) ; g . collapse ( true ) ; g . insertNode ( b ) ; if ( c ) { this . setStartAfter ( b ) ; this . setEndBefore ( c ) } else 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 , c ) { return c > 0 && b && b . type = =CKEDITOR . NODE _TEXT && b . getPrevious ( ) && b . getPrevious ( ) . type == CKEDITOR . NODE _TEXT } function b ( c ) { var d , g , p = c . container , q = c . offset ; if ( p . type == CKEDITOR . NODE _ELEMENT ) { if ( d = p . getChild ( q ) ) { if ( a ( d , q ) ) { p = d ; q = 0 } } else { d =
p . getLast ( ) ; if ( a ( d , q ) ) { p = d ; q = d . getLength ( ) } } d && d . type == CKEDITOR . NODE _ELEMENT && ( q = d . getIndex ( 1 ) ) } for ( ; p . type == CKEDITOR . NODE _TEXT && ( g = p . getPrevious ( ) ) && g . type == CKEDITOR . NODE _TEXT ; ) { p = g ; q = q + g . getLength ( ) } c . container = p ; c . offset = q } return function ( a ) { var c = this . collapsed , g = { container : this . startContainer , offset : this . startOffset } , d = { container : this . endContainer , offset : this . endOffset } ; if ( ! g . container || ! d . container ) return { start : 0 , end : 0 } ; if ( a ) { b ( g ) ; c || b ( d ) } return { start : g . container . getAddress ( a ) , end : c ? null : d . container . getAddress ( a ) ,
startOffset : g . offset , endOffset : d . offset , normalized : a , collapsed : c , is2 : true } } } ( ) , 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 ( true ) } 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 ( ) ; if ( a ) { this . setEndBefore ( a ) ; a . remove ( ) } else this . collapse ( true ) } } ,
getBoundaryNodes : function ( ) { var a = this . startContainer , b = this . endContainer , c = this . startOffset , d = this . endOffset , g ; if ( a . type == CKEDITOR . NODE _ELEMENT ) { g = a . getChildCount ( ) ; if ( g > c ) a = a . getChild ( c ) ; else if ( g < 1 ) 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 ) { g = b . getChildCount ( ) ; if ( g > d ) b = b . getChild ( d ) . getPreviousSourceNode ( true ) ; else if ( g < 1 ) 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 , g = this . collapsed ;
if ( ( ! a || g ) && 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 ( ) ; if ( this . startContainer . equals ( this . endContainer ) ) this . setEnd ( p , this . endOffset - this . startOffset ) ; else if ( c . equals ( this . endContainer ) ) this . endOffset = this . endOffset + 1 } else { d = c . getIndex ( ) ; c = c . getParent ( ) } this . setStart ( c , d ) ; if ( g ) { this . collapse ( true ) ; return } } c = this . endContainer ; d = this . endOffset ; if ( ! b && ! g && c && c . type == CKEDITOR . NODE _TEXT ) { if ( d ) { d >= c . getLength ( ) ||
c . split ( d ) ; d = c . getIndex ( ) + 1 } else d = c . getIndex ( ) ; c = c . getParent ( ) ; this . setEnd ( c , d ) } } , enlarge : function ( a , b ) { switch ( a ) { case CKEDITOR . ENLARGE _INLINE : var c = 1 ; case CKEDITOR . ENLARGE _ELEMENT : if ( this . collapsed ) break ; var d = this . getCommonAncestor ( ) , g = this . root , p , f , e , h , i , j = false , s , x ; s = this . startContainer ; x = this . startOffset ; if ( s . type == CKEDITOR . NODE _TEXT ) { if ( x ) { s = ! CKEDITOR . tools . trim ( s . substring ( 0 , x ) ) . length && s ; j = ! ! s } if ( s && ! ( h = s . getPrevious ( ) ) ) e = s . getParent ( ) } else { x && ( h = s . getChild ( x - 1 ) || s . getLast ( ) ) ; h || ( e = s ) } for ( ; e ||
h ; ) { if ( e && ! h ) { ! i && e . equals ( d ) && ( i = true ) ; if ( c ? e . isBlockBoundary ( ) : ! g . contains ( e ) ) break ; if ( ! j || e . getComputedStyle ( "display" ) != "inline" ) { j = false ; i ? p = e : this . setStartBefore ( e ) } h = e . getPrevious ( ) } for ( ; h ; ) { s = false ; if ( h . type == CKEDITOR . NODE _COMMENT ) h = h . getPrevious ( ) ; else { if ( h . type == CKEDITOR . NODE _TEXT ) { x = h . getText ( ) ; /[^\s\ufeff]/ . test ( x ) && ( h = null ) ; s = /[\s\ufeff]$/ . test ( x ) } else if ( ( h . $ . offsetWidth > 0 || b && h . is ( "br" ) ) && ! h . data ( "cke-bookmark" ) ) if ( j && CKEDITOR . dtd . $removeEmpty [ h . getName ( ) ] ) { x = h . getText ( ) ; if ( /[^\s\ufeff]/ . test ( x ) ) h =
null ; else for ( var k = h . $ . getElementsByTagName ( "*" ) , t = 0 , C ; C = k [ t ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ C . nodeName . toLowerCase ( ) ] ) { h = null ; break } h && ( s = ! ! x . length ) } else h = null ; s && ( j ? i ? p = e : e && this . setStartBefore ( e ) : j = true ) ; if ( h ) { s = h . getPrevious ( ) ; if ( ! e && ! s ) { e = h ; h = null ; break } h = s } else e = null } } e && ( e = e . getParent ( ) ) } s = this . endContainer ; x = this . endOffset ; e = h = null ; i = j = false ; if ( s . type == CKEDITOR . NODE _TEXT ) { s = ! CKEDITOR . tools . trim ( s . substring ( x ) ) . length && s ; j = ! ( s && s . getLength ( ) ) ; if ( s && ! ( h = s . getNext ( ) ) ) e = s . getParent ( ) } else ( h =
s . getChild ( x ) ) || ( e = s ) ; for ( ; e || h ; ) { if ( e && ! h ) { ! i && e . equals ( d ) && ( i = true ) ; if ( c ? e . isBlockBoundary ( ) : ! g . contains ( e ) ) break ; if ( ! j || e . getComputedStyle ( "display" ) != "inline" ) { j = false ; i ? f = e : e && this . setEndAfter ( e ) } h = e . getNext ( ) } for ( ; h ; ) { s = false ; if ( h . type == CKEDITOR . NODE _TEXT ) { x = h . getText ( ) ; /[^\s\ufeff]/ . test ( x ) && ( h = null ) ; s = /^[\s\ufeff]/ . test ( x ) } else if ( h . type == CKEDITOR . NODE _ELEMENT ) { if ( ( h . $ . offsetWidth > 0 || b && h . is ( "br" ) ) && ! h . data ( "cke-bookmark" ) ) if ( j && CKEDITOR . dtd . $removeEmpty [ h . getName ( ) ] ) { x = h . getText ( ) ; if ( /[^\s\ufeff]/ . test ( x ) ) h =
null ; else { k = h . $ . getElementsByTagName ( "*" ) ; for ( t = 0 ; C = k [ t ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ C . nodeName . toLowerCase ( ) ] ) { h = null ; break } } h && ( s = ! ! x . length ) } else h = null } else s = 1 ; s && j && ( i ? f = e : this . setEndAfter ( e ) ) ; if ( h ) { s = h . getNext ( ) ; if ( ! e && ! s ) { e = h ; h = null ; break } h = s } else e = null } e && ( e = e . getParent ( ) ) } if ( p && f ) { d = p . contains ( f ) ? f : p ; this . setStartBefore ( d ) ; this . setEndAfter ( d ) } break ; case CKEDITOR . ENLARGE _BLOCK _CONTENTS : case CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : e = new CKEDITOR . dom . range ( this . root ) ; g = this . root ; e . setStartAt ( g ,
CKEDITOR . POSITION _AFTER _START ) ; e . setEnd ( this . startContainer , this . startOffset ) ; e = new CKEDITOR . dom . walker ( e ) ; var y , n , w = CKEDITOR . dom . walker . blockBoundary ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? { br : 1 } : null ) , I = function ( a ) { var b = w ( a ) ; b || ( y = a ) ; return b } , c = function ( a ) { var b = I ( a ) ; ! b && ( a . is && a . is ( "br" ) ) && ( n = a ) ; return b } ; e . guard = I ; e = e . lastBackward ( ) ; y = y || g ; this . setStartAt ( y , ! y . is ( "br" ) && ( ! e && this . checkStartOfBlock ( ) || e && y . contains ( e ) ) ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _AFTER _END ) ; if ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ) { e =
this . clone ( ) ; e = new CKEDITOR . dom . walker ( e ) ; var G = CKEDITOR . dom . walker . whitespaces ( ) , D = CKEDITOR . dom . walker . bookmark ( ) ; e . evaluator = function ( a ) { return ! G ( a ) && ! D ( a ) } ; if ( ( e = e . previous ( ) ) && e . type == CKEDITOR . NODE _ELEMENT && e . is ( "br" ) ) break } e = this . clone ( ) ; e . collapse ( ) ; e . setEndAt ( g , CKEDITOR . POSITION _BEFORE _END ) ; e = new CKEDITOR . dom . walker ( e ) ; e . guard = a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? c : I ; y = null ; e = e . lastForward ( ) ; y = y || g ; this . setEndAt ( y , ! e && this . checkEndOfBlock ( ) || e && y . contains ( e ) ? CKEDITOR . POSITION _BEFORE _END :
CKEDITOR . POSITION _BEFORE _START ) ; n && this . setEndAfter ( n ) } } , shrink : function ( a , b , c ) { if ( ! this . collapsed ) { var a = a || CKEDITOR . SHRINK _TEXT , d = this . clone ( ) , g = this . startContainer , e = this . endContainer , f = this . startOffset , h = this . endOffset , i = 1 , j = 1 ; if ( g && g . type == CKEDITOR . NODE _TEXT ) if ( f ) if ( f >= g . getLength ( ) ) d . setStartAfter ( g ) ; else { d . setStartBefore ( g ) ; i = 0 } else d . setStartBefore ( g ) ; if ( e && e . type == CKEDITOR . NODE _TEXT ) if ( h ) if ( h >= e . getLength ( ) ) d . setEndAfter ( e ) ; else { d . setEndAfter ( e ) ; j = 0 } else d . setEndBefore ( e ) ; var d = new CKEDITOR . dom . walker ( d ) ,
k = CKEDITOR . dom . walker . bookmark ( ) ; d . evaluator = function ( b ) { return b . type == ( a == CKEDITOR . SHRINK _ELEMENT ? CKEDITOR . NODE _ELEMENT : CKEDITOR . NODE _TEXT ) } ; var s ; d . guard = function ( b , g ) { if ( k ( b ) ) return true ; if ( a == CKEDITOR . SHRINK _ELEMENT && b . type == CKEDITOR . NODE _TEXT || g && b . equals ( s ) || c === false && b . type == CKEDITOR . NODE _ELEMENT && b . isBlockBoundary ( ) ) return false ; ! g && b . type == CKEDITOR . NODE _ELEMENT && ( s = b ) ; return true } ; if ( i ) ( g = d [ a == CKEDITOR . SHRINK _ELEMENT ? "lastForward" : "next" ] ( ) ) && this . setStartAt ( g , b ? CKEDITOR . POSITION _AFTER _START :
CKEDITOR . POSITION _BEFORE _START ) ; if ( j ) { d . reset ( ) ; ( d = d [ a == CKEDITOR . SHRINK _ELEMENT ? "lastBackward" : "previous" ] ( ) ) && this . setEndAt ( d , b ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _AFTER _END ) } return ! ( ! i && ! j ) } } , insertNode : function ( a ) { this . optimizeBookmark ( ) ; this . trim ( false , true ) ; 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 ( true ) } , 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 ( a , b ) { if ( a . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $empty [ a . getName ( ) ] ) { b = a . getIndex ( ) ; a = a . getParent ( ) } this . startContainer = a ; this . startOffset = b ; if ( ! this . endContainer ) { this . endContainer = a ; this . endOffset = b } f ( this ) } , setEnd : function ( a ,
b ) { if ( a . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $empty [ a . getName ( ) ] ) { b = a . getIndex ( ) + 1 ; a = a . getParent ( ) } this . endContainer = a ; this . endOffset = b ; if ( ! this . startContainer ) { this . startContainer = a ; this . startOffset = b } f ( 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 ( a ,
b ) { switch ( b ) { case CKEDITOR . POSITION _AFTER _START : this . setStart ( a , 0 ) ; break ; case CKEDITOR . POSITION _BEFORE _END : a . type == CKEDITOR . NODE _TEXT ? this . setStart ( a , a . getLength ( ) ) : this . setStart ( a , a . getChildCount ( ) ) ; break ; case CKEDITOR . POSITION _BEFORE _START : this . setStartBefore ( a ) ; break ; case CKEDITOR . POSITION _AFTER _END : this . setStartAfter ( a ) } f ( this ) } , setEndAt : function ( a , b ) { switch ( b ) { case CKEDITOR . POSITION _AFTER _START : this . setEnd ( a , 0 ) ; break ; case CKEDITOR . POSITION _BEFORE _END : a . type == CKEDITOR . NODE _TEXT ? this . setEnd ( a ,
a . getLength ( ) ) : this . setEnd ( a , a . getChildCount ( ) ) ; break ; case CKEDITOR . POSITION _BEFORE _START : this . setEndBefore ( a ) ; break ; case CKEDITOR . POSITION _AFTER _END : this . setEndAfter ( a ) } f ( 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 ( ) ; CKEDITOR . env . ie || d . appendBogus ( ) ; this . insertNode ( d ) ; this . moveToBookmark ( c ) ; return d } , splitBlock : function ( a ) { var b = new CKEDITOR . dom . elementPath ( this . startContainer ,
this . root ) , c = new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) , d = b . block , g = c . block , e = null ; if ( ! b . blockLimit . equals ( c . blockLimit ) ) return null ; if ( a != "br" ) { if ( ! d ) { d = this . fixBlock ( true , a ) ; g = ( new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) ) . block } g || ( g = this . fixBlock ( false , a ) ) } a = d && this . checkStartOfBlock ( ) ; b = g && this . checkEndOfBlock ( ) ; this . deleteContents ( ) ; if ( d && d . equals ( g ) ) if ( b ) { e = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) ; this . moveToPosition ( g , CKEDITOR . POSITION _AFTER _END ) ;
g = null } else if ( a ) { e = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) ; this . moveToPosition ( d , CKEDITOR . POSITION _BEFORE _START ) ; d = null } else { g = this . splitElement ( d ) ; ! CKEDITOR . env . ie && ! d . is ( "ul" , "ol" ) && d . appendBogus ( ) } return { previousBlock : d , nextBlock : g , wasStartOfBlock : a , wasEndOfBlock : b , elementPath : e } } , splitElement : function ( a ) { if ( ! this . collapsed ) return null ; this . setEndAt ( a , CKEDITOR . POSITION _BEFORE _END ) ; var b = this . extractContents ( ) , c = a . clone ( false ) ; b . appendTo ( c ) ; c . insertAfter ( a ) ; this . moveToPosition ( a ,
CKEDITOR . POSITION _AFTER _END ) ; return c } , 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" ) ? false : true } } var b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . dom . walker . bookmark ( false ) ; return function ( b ) { for ( var c = this . createBookmark ( ) , d = this [ b ? "endPath" : "startPath" ] ( ) , e = d . block || d . blockLimit , f ; e && ! e . equals ( d . root ) && ! e . getFirst ( a ( e ) ) ; ) { f = e . getParent ( ) ; this [ b ? "setEndAt" : "setStartAt" ] ( e ,
CKEDITOR . POSITION _AFTER _END ) ; e . remove ( 1 ) ; e = f } 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 ; if ( 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 ( true ) ; 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 ; if ( 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 ( false ) ; 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 ( b . getAttribute ( "contentEditable" ) == "false" && ! b . data ( "cke-editable" ) ) return 0 ; if ( b . is ( "html" ) || b . getAttribute ( "contentEditable" ) == "true" && ( 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 ( b , c ) { if ( b . type == CKEDITOR . NODE _ELEMENT && ! b . isEditable ( false ) ) { this . moveToPosition ( b , c ? CKEDITOR . POSITION _AFTER _END : CKEDITOR . POSITION _BEFORE _START ) ; return true } for ( var d = 0 ; b ; ) { if ( b . type == CKEDITOR . NODE _TEXT ) { c && this . checkEndOfBlock ( ) && k . test ( b . getText ( ) ) ? this . moveToPosition ( b , CKEDITOR . POSITION _BEFORE _START ) : this . moveToPosition ( b , c ? CKEDITOR . POSITION _AFTER _END : CKEDITOR . POSITION _BEFORE _START ) ;
d = 1 ; break } if ( b . type == CKEDITOR . NODE _ELEMENT ) if ( b . isEditable ( ) ) { this . moveToPosition ( b , c ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _AFTER _START ) ; d = 1 } else c && ( b . is ( "br" ) && this . checkEndOfBlock ( ) ) && this . moveToPosition ( b , CKEDITOR . POSITION _BEFORE _START ) ; var e = b , g = d , f = void 0 ; e . type == CKEDITOR . NODE _ELEMENT && e . isEditable ( false ) && ( f = e [ c ? "getLast" : "getFirst" ] ( a ) ) ; ! g && ! f && ( f = e [ c ? "getPrevious" : "getNext" ] ( a ) ) ; b = f } return ! ! d } , moveToElementEditStart : function ( a ) { return this . moveToElementEditablePosition ( a ) } , moveToElementEditEnd : function ( a ) { return this . moveToElementEditablePosition ( a ,
true ) } , 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 ( false , true ) , c = CKEDITOR . dom . walker . whitespaces ( true ) ; 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 } , scrollIntoView : function ( ) { var a = new CKEDITOR . dom . element . createFromHtml ( "<span> </span>" , this . document ) , b , c , d , g = this . clone ( ) ; g . optimize ( ) ; if ( d = g . startContainer . type == CKEDITOR . NODE _TEXT ) { c = g . startContainer . getText ( ) ; b = g . startContainer . split ( g . startOffset ) ; a . insertAfter ( g . startContainer ) } else g . insertNode ( a ) ; a . scrollIntoView ( ) ;
if ( d ) { g . startContainer . setText ( c ) ; b . remove ( ) } a . remove ( ) } } } ) ( ) ; 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 ;
this . clone ( ) ; g . collapse ( true ) ; g . insertNode ( b ) ; if ( c ) { this . setStartAfter ( b ) ; this . setEndBefore ( c ) } else 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 c = b . container , d = b . offset , g ; g = c ; var m = d ; g = g . type ! =CKEDITOR . NODE _ELEMENT || m === 0 || m == g . getChildCount ( ) ? 0 : g . getChild ( m - 1 ) . type == CKEDITOR . NODE _TEXT && g . getChild ( m ) . type == CKEDITOR . NODE _TEXT ; if ( g ) { c = c . getChild ( d - 1 ) ; d = c . getLength ( ) } c . type = =
CKEDITOR . NODE _ELEMENT && d > 1 && ( d = c . getChild ( d - 1 ) . getIndex ( true ) + 1 ) ; if ( c . type == CKEDITOR . NODE _TEXT ) { g = c ; for ( m = 0 ; ( g = g . getPrevious ( ) ) && g . type == CKEDITOR . NODE _TEXT ; ) m = m + g . getLength ( ) ; d = d + m } b . container = c ; b . offset = d } return function ( b ) { var c = this . collapsed , d = { container : this . startContainer , offset : this . startOffset } , g = { container : this . endContainer , offset : this . endOffset } ; if ( b ) { a ( d ) ; c || a ( g ) } return { start : d . container . getAddress ( b ) , end : c ? null : g . container . getAddress ( b ) , startOffset : d . offset , endOffset : g . offset , normalized : b ,
collapsed : c , is2 : true } } } ( ) , 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 ( true ) } 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 ( ) ; if ( a ) { this . setEndBefore ( a ) ; a . remove ( ) } else this . collapse ( true ) } } , getBoundaryNodes : function ( ) { var a =
this . startContainer , b = this . endContainer , c = this . startOffset , d = this . endOffset , g ; if ( a . type == CKEDITOR . NODE _ELEMENT ) { g = a . getChildCount ( ) ; if ( g > c ) a = a . getChild ( c ) ; else if ( g < 1 ) 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 ) { g = b . getChildCount ( ) ; if ( g > d ) b = b . getChild ( d ) . getPreviousSourceNode ( true ) ; else if ( g < 1 ) 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 , g = this . collapsed ; if ( ( ! a || g ) && 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 ( ) ; if ( this . startContainer . equals ( this . endContainer ) ) this . setEnd ( p , this . endOffset - this . startOffset ) ; else if ( c . equals ( this . endContainer ) ) this . endOffset = this . endOffset + 1 } else { d = c . getIndex ( ) ; c = c . getParent ( ) } this . setStart ( c , d ) ; if ( g ) { this . collapse ( true ) ; return } } c = this . endContainer ; d = this . endOffset ; if ( ! b && ! g && c && c . type == CKEDITOR . NODE _TEXT ) { if ( d ) { d >= c . getLength ( ) || c . split ( d ) ; d = c . getIndex ( ) + 1 } else d = c . getIndex ( ) ; c = c . getParent ( ) ;
this . setEnd ( c , d ) } } , enlarge : function ( a , b ) { switch ( a ) { case CKEDITOR . ENLARGE _INLINE : var c = 1 ; case CKEDITOR . ENLARGE _ELEMENT : if ( this . collapsed ) break ; var d = this . getCommonAncestor ( ) , g = this . root , p , f , e , h , i , j = false , r , x ; r = this . startContainer ; x = this . startOffset ; if ( r . type == CKEDITOR . NODE _TEXT ) { if ( x ) { r = ! CKEDITOR . tools . trim ( r . substring ( 0 , x ) ) . length && r ; j = ! ! r } if ( r && ! ( h = r . getPrevious ( ) ) ) e = r . getParent ( ) } else { x && ( h = r . getChild ( x - 1 ) || r . getLast ( ) ) ; h || ( e = r ) } for ( ; e || h ; ) { if ( e && ! h ) { ! i && e . equals ( d ) && ( i = true ) ; if ( c ? e . isBlockBoundary ( ) :
! g . contains ( e ) ) break ; if ( ! j || e . getComputedStyle ( "display" ) != "inline" ) { j = false ; i ? p = e : this . setStartBefore ( e ) } h = e . getPrevious ( ) } for ( ; h ; ) { r = false ; if ( h . type == CKEDITOR . NODE _COMMENT ) h = h . getPrevious ( ) ; else { if ( h . type == CKEDITOR . NODE _TEXT ) { x = h . getText ( ) ; /[^\s\ufeff]/ . test ( x ) && ( h = null ) ; r = /[\s\ufeff]$/ . test ( x ) } else if ( ( h . $ . offsetWidth > 0 || b && h . is ( "br" ) ) && ! h . data ( "cke-bookmark" ) ) if ( j && CKEDITOR . dtd . $removeEmpty [ h . getName ( ) ] ) { x = h . getText ( ) ; if ( /[^\s\ufeff]/ . test ( x ) ) h = null ; else for ( var l = h . $ . getElementsByTagName ( "*" ) ,
s = 0 , C ; C = l [ s ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ C . nodeName . toLowerCase ( ) ] ) { h = null ; break } h && ( r = ! ! x . length ) } else h = null ; r && ( j ? i ? p = e : e && this . setStartBefore ( e ) : j = true ) ; if ( h ) { r = h . getPrevious ( ) ; if ( ! e && ! r ) { e = h ; h = null ; break } h = r } else e = null } } e && ( e = e . getParent ( ) ) } r = this . endContainer ; x = this . endOffset ; e = h = null ; i = j = false ; if ( r . type == CKEDITOR . NODE _TEXT ) { r = ! CKEDITOR . tools . trim ( r . substring ( x ) ) . length && r ; j = ! ( r && r . getLength ( ) ) ; if ( r && ! ( h = r . getNext ( ) ) ) e = r . getParent ( ) } else ( h = r . getChild ( x ) ) || ( e = r ) ; for ( ; e || h ; ) { if ( e && ! h ) { ! i &&
e . equals ( d ) && ( i = true ) ; if ( c ? e . isBlockBoundary ( ) : ! g . contains ( e ) ) break ; if ( ! j || e . getComputedStyle ( "display" ) != "inline" ) { j = false ; i ? f = e : e && this . setEndAfter ( e ) } h = e . getNext ( ) } for ( ; h ; ) { r = false ; if ( h . type == CKEDITOR . NODE _TEXT ) { x = h . getText ( ) ; /[^\s\ufeff]/ . test ( x ) && ( h = null ) ; r = /^[\s\ufeff]/ . test ( x ) } else if ( h . type == CKEDITOR . NODE _ELEMENT ) { if ( ( h . $ . offsetWidth > 0 || b && h . is ( "br" ) ) && ! h . data ( "cke-bookmark" ) ) if ( j && CKEDITOR . dtd . $removeEmpty [ h . getName ( ) ] ) { x = h . getText ( ) ; if ( /[^\s\ufeff]/ . test ( x ) ) h = null ; else { l = h . $ . getElementsByTagName ( "*" ) ;
for ( s = 0 ; C = l [ s ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ C . nodeName . toLowerCase ( ) ] ) { h = null ; break } } h && ( r = ! ! x . length ) } else h = null } else r = 1 ; r && j && ( i ? f = e : this . setEndAfter ( e ) ) ; if ( h ) { r = h . getNext ( ) ; if ( ! e && ! r ) { e = h ; h = null ; break } h = r } else e = null } e && ( e = e . getParent ( ) ) } if ( p && f ) { d = p . contains ( f ) ? f : p ; this . setStartBefore ( d ) ; this . setEndAfter ( d ) } break ; case CKEDITOR . ENLARGE _BLOCK _CONTENTS : case CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : e = new CKEDITOR . dom . range ( this . root ) ; g = this . root ; e . setStartAt ( g , CKEDITOR . POSITION _AFTER _START ) ; e . setEnd ( this . startContainer ,
this . startOffset ) ; e = new CKEDITOR . dom . walker ( e ) ; var y , o , u = CKEDITOR . dom . walker . blockBoundary ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? { br : 1 } : null ) , I = function ( a ) { var b = u ( a ) ; b || ( y = a ) ; return b } , c = function ( a ) { var b = I ( a ) ; ! b && ( a . is && a . is ( "br" ) ) && ( o = a ) ; return b } ; e . guard = I ; e = e . lastBackward ( ) ; y = y || g ; this . setStartAt ( y , ! y . is ( "br" ) && ( ! e && this . checkStartOfBlock ( ) || e && y . contains ( e ) ) ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _AFTER _END ) ; if ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ) { e = this . clone ( ) ; e = new CKEDITOR . dom . walker ( e ) ;
var G = CKEDITOR . dom . walker . whitespaces ( ) , D = CKEDITOR . dom . walker . bookmark ( ) ; e . evaluator = function ( a ) { return ! G ( a ) && ! D ( a ) } ; if ( ( e = e . previous ( ) ) && e . type == CKEDITOR . NODE _ELEMENT && e . is ( "br" ) ) break } e = this . clone ( ) ; e . collapse ( ) ; e . setEndAt ( g , CKEDITOR . POSITION _BEFORE _END ) ; e = new CKEDITOR . dom . walker ( e ) ; e . guard = a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? c : I ; y = null ; e = e . lastForward ( ) ; y = y || g ; this . setEndAt ( y , ! e && this . checkEndOfBlock ( ) || e && y . contains ( e ) ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _BEFORE _START ) ; o && this . setEndAfter ( o ) } } ,
shrink : function ( a , b , c ) { if ( ! this . collapsed ) { var a = a || CKEDITOR . SHRINK _TEXT , d = this . clone ( ) , g = this . startContainer , e = this . endContainer , f = this . startOffset , h = this . endOffset , i = 1 , j = 1 ; if ( g && g . type == CKEDITOR . NODE _TEXT ) if ( f ) if ( f >= g . getLength ( ) ) d . setStartAfter ( g ) ; else { d . setStartBefore ( g ) ; i = 0 } else d . setStartBefore ( g ) ; if ( e && e . type == CKEDITOR . NODE _TEXT ) if ( h ) if ( h >= e . getLength ( ) ) d . setEndAfter ( e ) ; else { d . setEndAfter ( e ) ; j = 0 } else d . setEndBefore ( e ) ; var d = new CKEDITOR . dom . walker ( d ) , l = CKEDITOR . dom . walker . bookmark ( ) ; d . evaluator =
function ( b ) { return b . type == ( a == CKEDITOR . SHRINK _ELEMENT ? CKEDITOR . NODE _ELEMENT : CKEDITOR . NODE _TEXT ) } ; var r ; d . guard = function ( b , g ) { if ( l ( b ) ) return true ; if ( a == CKEDITOR . SHRINK _ELEMENT && b . type == CKEDITOR . NODE _TEXT || g && b . equals ( r ) || c === false && b . type == CKEDITOR . NODE _ELEMENT && b . isBlockBoundary ( ) ) return false ; ! g && b . type == CKEDITOR . NODE _ELEMENT && ( r = b ) ; return true } ; if ( i ) ( g = d [ a == CKEDITOR . SHRINK _ELEMENT ? "lastForward" : "next" ] ( ) ) && this . setStartAt ( g , b ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _BEFORE _START ) ; if ( j ) { d . reset ( ) ;
( d = d [ a == CKEDITOR . SHRINK _ELEMENT ? "lastBackward" : "previous" ] ( ) ) && this . setEndAt ( d , b ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _AFTER _END ) } return ! ( ! i && ! j ) } } , insertNode : function ( a ) { this . optimizeBookmark ( ) ; this . trim ( false , true ) ; 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 ( true ) } , 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 ( a , b ) { if ( a . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $empty [ a . getName ( ) ] ) { b = a . getIndex ( ) ; a = a . getParent ( ) } this . startContainer = a ; this . startOffset = b ; if ( ! this . endContainer ) { this . endContainer = a ; this . endOffset = b } f ( this ) } , setEnd : function ( a , b ) { if ( a . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $empty [ a . getName ( ) ] ) { b =
a . getIndex ( ) + 1 ; a = a . getParent ( ) } this . endContainer = a ; this . endOffset = b ; if ( ! this . startContainer ) { this . startContainer = a ; this . startOffset = b } f ( 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 ( a , b ) { switch ( b ) { case CKEDITOR . POSITION _AFTER _START : this . setStart ( a ,
0 ) ; break ; case CKEDITOR . POSITION _BEFORE _END : a . type == CKEDITOR . NODE _TEXT ? this . setStart ( a , a . getLength ( ) ) : this . setStart ( a , a . getChildCount ( ) ) ; break ; case CKEDITOR . POSITION _BEFORE _START : this . setStartBefore ( a ) ; break ; case CKEDITOR . POSITION _AFTER _END : this . setStartAfter ( a ) } f ( this ) } , setEndAt : function ( a , b ) { switch ( b ) { case CKEDITOR . POSITION _AFTER _START : this . setEnd ( a , 0 ) ; break ; case CKEDITOR . POSITION _BEFORE _END : a . type == CKEDITOR . NODE _TEXT ? this . setEnd ( a , a . getLength ( ) ) : this . setEnd ( a , a . getChildCount ( ) ) ; break ; case CKEDITOR . POSITION _BEFORE _START : this . setEndBefore ( a ) ;
break ; case CKEDITOR . POSITION _AFTER _END : this . setEndAfter ( a ) } f ( 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 ( ) ; CKEDITOR . env . ie || d . appendBogus ( ) ; this . insertNode ( d ) ; this . moveToBookmark ( c ) ; return d } , splitBlock : function ( a ) { var b = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) , c = new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) , d = b . block ,
g = c . block , e = null ; if ( ! b . blockLimit . equals ( c . blockLimit ) ) return null ; if ( a != "br" ) { if ( ! d ) { d = this . fixBlock ( true , a ) ; g = ( new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) ) . block } g || ( g = this . fixBlock ( false , a ) ) } a = d && this . checkStartOfBlock ( ) ; b = g && this . checkEndOfBlock ( ) ; this . deleteContents ( ) ; if ( d && d . equals ( g ) ) if ( b ) { e = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) ; this . moveToPosition ( g , CKEDITOR . POSITION _AFTER _END ) ; g = null } else if ( a ) { e = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) ;
this . moveToPosition ( d , CKEDITOR . POSITION _BEFORE _START ) ; d = null } else { g = this . splitElement ( d ) ; ! CKEDITOR . env . ie && ! d . is ( "ul" , "ol" ) && d . appendBogus ( ) } return { previousBlock : d , nextBlock : g , wasStartOfBlock : a , wasEndOfBlock : b , elementPath : e } } , splitElement : function ( a ) { if ( ! this . collapsed ) return null ; this . setEndAt ( a , CKEDITOR . POSITION _BEFORE _END ) ; var b = this . extractContents ( ) , c = a . clone ( false ) ; b . appendTo ( c ) ; c . insertAfter ( a ) ; this . moveToPosition ( a , CKEDITOR . POSITION _AFTER _END ) ; return c } , 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" ) ? false : true } } var b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . dom . walker . bookmark ( false ) ; return function ( b ) { for ( var c = this . createBookmark ( ) , d = this [ b ? "endPath" : "startPath" ] ( ) , e = d . block || d . blockLimit , f ; e && ! e . equals ( d . root ) && ! e . getFirst ( a ( e ) ) ; ) { f = e . getParent ( ) ; this [ b ? "setEndAt" : "setStartAt" ] ( e , CKEDITOR . POSITION _AFTER _END ) ; e . remove ( 1 ) ; e = f } 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 ; if ( 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 ( true ) ; 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 ; if ( 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 ( false ) ; 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 ( b . getAttribute ( "contentEditable" ) == "false" && ! b . data ( "cke-editable" ) ) return 0 ; if ( b . is ( "html" ) || b . getAttribute ( "contentEditable" ) == "true" && ( 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 ( b , c ) { if ( b . type == CKEDITOR . NODE _ELEMENT && ! b . isEditable ( false ) ) { this . moveToPosition ( b ,
c ? CKEDITOR . POSITION _AFTER _END : CKEDITOR . POSITION _BEFORE _START ) ; return true } for ( var d = 0 ; b ; ) { if ( b . type == CKEDITOR . NODE _TEXT ) { c && this . checkEndOfBlock ( ) && l . test ( b . getText ( ) ) ? this . moveToPosition ( b , CKEDITOR . POSITION _BEFORE _START ) : this . moveToPosition ( b , c ? CKEDITOR . POSITION _AFTER _END : CKEDITOR . POSITION _BEFORE _START ) ; d = 1 ; break } if ( b . type == CKEDITOR . NODE _ELEMENT ) if ( b . isEditable ( ) ) { this . moveToPosition ( b , c ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _AFTER _START ) ; d = 1 } else c && ( b . is ( "br" ) && this . checkEndOfBlock ( ) ) &&
this . moveToPosition ( b , CKEDITOR . POSITION _BEFORE _START ) ; var e = b , g = d , f = void 0 ; e . type == CKEDITOR . NODE _ELEMENT && e . isEditable ( false ) && ( f = e [ c ? "getLast" : "getFirst" ] ( a ) ) ; ! g && ! f && ( f = e [ c ? "getPrevious" : "getNext" ] ( a ) ) ; b = f } return ! ! d } , moveToElementEditStart : function ( a ) { return this . moveToElementEditablePosition ( a ) } , moveToElementEditEnd : function ( a ) { return this . moveToElementEditablePosition ( a , true ) } , 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 ( false , true ) , c = CKEDITOR . dom . walker . whitespaces ( true ) ; 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 } , scrollIntoView : function ( ) { var a = new CKEDITOR . dom . element . createFromHtml ( "<span> </span>" , this . document ) , b , c , d , g = this . clone ( ) ; g . optimize ( ) ; if ( d = g . startContainer . type == CKEDITOR . NODE _TEXT ) { c = g . startContainer . getText ( ) ; b = g . startContainer . split ( g . startOffset ) ; a . insertAfter ( g . startContainer ) } else g . insertNode ( a ) ; a . scrollIntoView ( ) ; if ( d ) { g . startContainer . setText ( c ) ; b . remove ( ) } a . remove ( ) } } } ) ( ) ; 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 ;
( function ( ) { function b ( a ) { if ( ! ( arguments . length < 1 ) ) { this . range = a ; this . forceBrBreak = 0 ; this . enlargeBr = 1 ; this . enforceRealBlocks = 0 ; this . _ || ( this . _ = { } ) } } function c ( a , b , c ) { for ( a = a . getNextSourceNode ( b , null , c ) ; ! f ( a ) ; ) a = a . getNextSourceNode ( b , null , c ) ; return a } var a = /^[\r\n\t ]+$/ , f = CKEDITOR . dom . walker . bookmark ( false , true ) , d = CKEDITOR . dom . walker . whitespaces ( true ) , e = function ( a ) { return f ( a ) && d ( a ) } ; b . prototype = { getNextParagraph : function ( b ) { b = b || "p" ; if ( ! CKEDITOR . dtd [ this . range . root . getName ( ) ] [ b ] ) return null ; var d ,
i , k , m , q , r ; if ( ! this . _ . started ) { i = this . range . clone ( ) ; i . shrink ( CKEDITOR . NODE _ELEMENT , true ) ; m = i . endContainer . hasAscendant ( "pre" , true ) || i . startContainer . hasAscendant ( "pre" , true ) ; i . enlarge ( this . forceBrBreak && ! m || ! this . enlargeBr ? CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : CKEDITOR . ENLARGE _BLOCK _CONTENTS ) ; if ( ! i . collapsed ) { m = new CKEDITOR . dom . walker ( i . clone ( ) ) ; var l = CKEDITOR . dom . walker . bookmark ( true , true ) ; m . evaluator = l ; this . _ . nextNode = m . next ( ) ; m = new CKEDITOR . dom . walker ( i . clone ( ) ) ; m . evaluator = l ; m = m . previous ( ) ; this . _ . lastNode =
m . getNextSourceNode ( true ) ; if ( this . _ . lastNode && this . _ . lastNode . type == CKEDITOR . NODE _TEXT && ! CKEDITOR . tools . trim ( this . _ . lastNode . getText ( ) ) && this . _ . lastNode . getParent ( ) . isBlockBoundary ( ) ) { l = this . range . clone ( ) ; l . moveToPosition ( this . _ . lastNode , CKEDITOR . POSITION _AFTER _END ) ; if ( l . checkEndOfBlock ( ) ) { l = new CKEDITOR . dom . elementPath ( l . endContainer , l . root ) ; this . _ . lastNode = ( l . block || l . blockLimit ) . getNextSourceNode ( true ) } } if ( ! this . _ . lastNode ) { this . _ . lastNode = this . _ . docEndMarker = i . document . createText ( "" ) ; this . _ . lastNode . insertAfter ( m ) } i =
null } this . _ . started = 1 } l = this . _ . nextNode ; m = this . _ . lastNode ; for ( this . _ . nextNode = null ; l ; ) { var g = 0 , p = l . hasAscendant ( "pre" ) , v = l . type != CKEDITOR . NODE _ELEMENT , u = 0 ; if ( v ) l . type == CKEDITOR . NODE _TEXT && a . test ( l . getText ( ) ) && ( v = 0 ) ; else { var o = l . getName ( ) ; if ( l . isBlockBoundary ( this . forceBrBreak && ! p && { br : 1 } ) ) { if ( o == "br" ) v = 1 ; else if ( ! i && ! l . getChildCount ( ) && o != "hr" ) { d = l ; k = l . equals ( m ) ; break } if ( i ) { i . setEndAt ( l , CKEDITOR . POSITION _BEFORE _START ) ; if ( o != "br" ) this . _ . nextNode = l } g = 1 } else { if ( l . getFirst ( ) ) { if ( ! i ) { i = this . range . clone ( ) ;
i . setStartAt ( l , CKEDITOR . POSITION _BEFORE _START ) } l = l . getFirst ( ) ; continue } v = 1 } } if ( v && ! i ) { i = this . range . clone ( ) ; i . setStartAt ( l , CKEDITOR . POSITION _BEFORE _START ) } k = ( ! g || v ) && l . equals ( m ) ; if ( i && ! g ) for ( ; ! l . getNext ( e ) && ! k ; ) { o = l . getParent ( ) ; if ( o . isBlockBoundary ( this . forceBrBreak && ! p && { br : 1 } ) ) { g = 1 ; v = 0 ; k || o . equals ( m ) ; i . setEndAt ( o , CKEDITOR . POSITION _BEFORE _END ) ; break } l = o ; v = 1 ; k = l . equals ( m ) ; u = 1 } v && i . setEndAt ( l , CKEDITOR . POSITION _AFTER _END ) ; l = c ( l , u , m ) ; if ( ( k = ! l ) || g && i ) break } if ( ! d ) { if ( ! i ) { this . _ . docEndMarker && this . _ . docEndMarker . remove ( ) ;
return this . _ . nextNode = null } d = new CKEDITOR . dom . elementPath ( i . startContainer , i . root ) ; l = d . blockLimit ; g = { div : 1 , th : 1 , td : 1 } ; d = d . block ; if ( ! d && l && ! this . enforceRealBlocks && g [ l . getName ( ) ] && i . checkStartOfBlock ( ) && i . checkEndOfBlock ( ) && ! l . equals ( i . root ) ) d = l ; else if ( ! d || this . enforceRealBlocks && d . getName ( ) == "li" ) { d = this . range . document . createElement ( b ) ; i . extractContents ( ) . appendTo ( d ) ; d . trim ( ) ; i . insertNode ( d ) ; q = r = true } else if ( d . getName ( ) != "li" ) { if ( ! i . checkStartOfBlock ( ) || ! i . checkEndOfBlock ( ) ) { d = d . clone ( false ) ; i . extractContents ( ) . appendTo ( d ) ;
d . trim ( ) ; r = i . splitBlock ( ) ; q = ! r . wasStartOfBlock ; r = ! r . wasEndOfBlock ; i . insertNode ( d ) } } else if ( ! k ) this . _ . nextNode = d . equals ( m ) ? null : c ( i . getBoundaryNodes ( ) . endNode , 1 , m ) } if ( q ) ( i = d . getPrevious ( ) ) && i . type == CKEDITOR . NODE _ELEMENT && ( i . getName ( ) == "br" ? i . remove ( ) : i . getLast ( ) && i . getLast ( ) . $ . nodeName . toLowerCase ( ) == "br" && i . getLast ( ) . remove ( ) ) ; if ( r ) ( i = d . getLast ( ) ) && i . type == CKEDITOR . NODE _ELEMENT && i . getName ( ) == "br" && ( CKEDITOR . env . ie || i . getPrevious ( f ) || i . getNext ( f ) ) && i . remove ( ) ; if ( ! this . _ . nextNode ) this . _ . nextNode = k ||
i , l , m , q , w ; if ( ! this . _ . started ) { i = this . range . clone ( ) ; i . shrink ( CKEDITOR . NODE _ELEMENT , true ) ; m = i . endContainer . hasAscendant ( "pre" , true ) || i . startContainer . hasAscendant ( "pre" , true ) ; i . enlarge ( this . forceBrBreak && ! m || ! this . enlargeBr ? CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : CKEDITOR . ENLARGE _BLOCK _CONTENTS ) ; if ( ! i . collapsed ) { m = new CKEDITOR . dom . walker ( i . clone ( ) ) ; var k = CKEDITOR . dom . walker . bookmark ( true , true ) ; m . evaluator = k ; this . _ . nextNode = m . next ( ) ; m = new CKEDITOR . dom . walker ( i . clone ( ) ) ; m . evaluator = k ; m = m . previous ( ) ; this . _ . lastNode =
m . getNextSourceNode ( true ) ; if ( this . _ . lastNode && this . _ . lastNode . type == CKEDITOR . NODE _TEXT && ! CKEDITOR . tools . trim ( this . _ . lastNode . getText ( ) ) && this . _ . lastNode . getParent ( ) . isBlockBoundary ( ) ) { k = this . range . clone ( ) ; k . moveToPosition ( this . _ . lastNode , CKEDITOR . POSITION _AFTER _END ) ; if ( k . checkEndOfBlock ( ) ) { k = new CKEDITOR . dom . elementPath ( k . endContainer , k . root ) ; this . _ . lastNode = ( k . block || k . blockLimit ) . getNextSourceNode ( true ) } } if ( ! this . _ . lastNode ) { this . _ . lastNode = this . _ . docEndMarker = i . document . createText ( "" ) ; this . _ . lastNode . insertAfter ( m ) } i =
null } this . _ . started = 1 } k = this . _ . nextNode ; m = this . _ . lastNode ; for ( this . _ . nextNode = null ; k ; ) { var g = 0 , p = k . hasAscendant ( "pre" ) , v = k . type != CKEDITOR . NODE _ELEMENT , t = 0 ; if ( v ) k . type == CKEDITOR . NODE _TEXT && a . test ( k . getText ( ) ) && ( v = 0 ) ; else { var n = k . getName ( ) ; if ( k . isBlockBoundary ( this . forceBrBreak && ! p && { br : 1 } ) ) { if ( n == "br" ) v = 1 ; else if ( ! i && ! k . getChildCount ( ) && n != "hr" ) { d = k ; l = k . equals ( m ) ; break } if ( i ) { i . setEndAt ( k , CKEDITOR . POSITION _BEFORE _START ) ; if ( n != "br" ) this . _ . nextNode = k } g = 1 } else { if ( k . getFirst ( ) ) { if ( ! i ) { i = this . range . clone ( ) ;
i . setStartAt ( k , CKEDITOR . POSITION _BEFORE _START ) } k = k . getFirst ( ) ; continue } v = 1 } } if ( v && ! i ) { i = this . range . clone ( ) ; i . setStartAt ( k , CKEDITOR . POSITION _BEFORE _START ) } l = ( ! g || v ) && k . equals ( m ) ; if ( i && ! g ) for ( ; ! k . getNext ( e ) && ! l ; ) { n = k . getParent ( ) ; if ( n . isBlockBoundary ( this . forceBrBreak && ! p && { br : 1 } ) ) { g = 1 ; v = 0 ; l || n . equals ( m ) ; i . setEndAt ( n , CKEDITOR . POSITION _BEFORE _END ) ; break } k = n ; v = 1 ; l = k . equals ( m ) ; t = 1 } v && i . setEndAt ( k , CKEDITOR . POSITION _AFTER _END ) ; k = c ( k , t , m ) ; if ( ( l = ! k ) || g && i ) break } if ( ! d ) { if ( ! i ) { this . _ . docEndMarker && this . _ . docEndMarker . remove ( ) ;
return this . _ . nextNode = null } d = new CKEDITOR . dom . elementPath ( i . startContainer , i . root ) ; k = d . blockLimit ; g = { div : 1 , th : 1 , td : 1 } ; d = d . block ; if ( ! d && k && ! this . enforceRealBlocks && g [ k . getName ( ) ] && i . checkStartOfBlock ( ) && i . checkEndOfBlock ( ) && ! k . equals ( i . root ) ) d = k ; else if ( ! d || this . enforceRealBlocks && d . getName ( ) == "li" ) { d = this . range . document . createElement ( b ) ; i . extractContents ( ) . appendTo ( d ) ; d . trim ( ) ; i . insertNode ( d ) ; q = w = true } else if ( d . getName ( ) != "li" ) { if ( ! i . checkStartOfBlock ( ) || ! i . checkEndOfBlock ( ) ) { d = d . clone ( false ) ; i . extractContents ( ) . appendTo ( d ) ;
d . trim ( ) ; w = i . splitBlock ( ) ; q = ! w . wasStartOfBlock ; w = ! w . wasEndOfBlock ; i . insertNode ( d ) } } else if ( ! l ) this . _ . nextNode = d . equals ( m ) ? null : c ( i . getBoundaryNodes ( ) . endNode , 1 , m ) } if ( q ) ( i = d . getPrevious ( ) ) && i . type == CKEDITOR . NODE _ELEMENT && ( i . getName ( ) == "br" ? i . remove ( ) : i . getLast ( ) && i . getLast ( ) . $ . nodeName . toLowerCase ( ) == "br" && i . getLast ( ) . remove ( ) ) ; if ( w ) ( i = d . getLast ( ) ) && i . type == CKEDITOR . NODE _ELEMENT && i . getName ( ) == "br" && ( CKEDITOR . env . ie || i . getPrevious ( f ) || i . getNext ( f ) ) && i . remove ( ) ; if ( ! this . _ . nextNode ) this . _ . nextNode = l ||
d . equals ( m ) || ! m ? null : c ( d , 1 , m ) ; return d } } ; CKEDITOR . dom . range . prototype . createIterator = function ( ) { return new b ( this ) } } ) ( ) ;
CKEDITOR . command = function ( b , c ) { this . uiItems = [ ] ; this . exec = function ( a ) { if ( this . state == CKEDITOR . TRISTATE _DISABLED || ! this . checkAllowed ( ) ) return false ; this . editorFocus && b . focus ( ) ; return this . fire ( "exec" ) === false ? true : c . exec . call ( this , b , a ) !== false } ; this . refresh = function ( a , b ) { if ( ! this . readOnly && a . readOnly ) return true ; if ( this . context && ! b . isContextFor ( this . context ) ) { this . disable ( ) ; return true } this . enable ( ) ; return this . fire ( "refresh" , { editor : a , path : b } ) === false ? true : c . refresh && c . refresh . apply ( this , arguments ) !==
false } ; var a ; this . checkAllowed = function ( ) { return typeof a == "boolean" ? a : a = b . filter . checkFeature ( this ) } ; CKEDITOR . tools . extend ( this , c , { modes : { wysiwyg : 1 } , editorFocus : 1 , contextSensitive : ! ! c . 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 || typeof this . previousState == "undefined" ? CKEDITOR . TRISTATE _OFF : this . previousState ) } , disable : function ( ) { this . setState ( CKEDITOR . TRISTATE _DISABLED ) } , setState : function ( b ) { if ( this . state == b || ! this . checkAllowed ( ) ) return false ; this . previousState = this . state ; this . state = b ; this . fire ( "state" ) ; return true } , 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 : "<!DOCTYPE html>" , bodyId : "" , bodyClass : "" , fullPage : ! 1 , height : 200 , extraPlugins : "" , removePlugins : "" , protectedSource : [ ] , tabIndex : 0 , width : "" , baseFloatZIndex : 1E4 , blockedKeystrokes : [ CKEDITOR . CTRL + 66 , CKEDITOR . CTRL + 73 , CKEDITOR . CTRL + 85 ] } ;
( function ( ) { function b ( a , b , g , e , f ) { var p = b . name ; if ( ( e || typeof a . elements != "function" || a . elements ( p ) ) && ( ! a . match || a . match ( b ) ) ) { if ( e = ! f ) { a : if ( a . nothingRequired ) e = true ; else { if ( f = a . requiredClasses ) { p = b . classes ; for ( e = 0 ; e < f . length ; ++ e ) if ( CKEDITOR . tools . indexOf ( p , f [ e ] ) == - 1 ) { e = false ; break a } } e = d ( b . styles , a . requiredStyles ) && d ( b . attributes , a . requiredAttributes ) } e = ! e } if ( ! e ) { if ( ! a . propertiesOnly ) g . valid = true ; if ( ! g . allAttributes ) g . allAttributes = c ( a . attributes , b . attributes , g . validAttributes ) ; if ( ! g . allStyles ) g . allStyles =
c ( a . styles , b . styles , g . validStyles ) ; if ( ! g . allClasses ) { a = a . classes ; b = b . classes ; e = g . validClasses ; if ( a ) if ( a === true ) b = true ; else { for ( var f = 0 , p = b . length , h ; f < p ; ++ f ) { h = b [ f ] ; e [ h ] || ( e [ h ] = a ( h ) ) } b = false } else b = false ; g . allClasses = b } } } } function c ( a , b , c ) { if ( ! a ) return false ; if ( a === true ) return true ; for ( var d in b ) c [ d ] || ( c [ d ] = a ( d , b [ d ] ) ) ; return false } function a ( a , b ) { if ( ! a ) return false ; if ( a === true ) return a ; if ( typeof a == "string" ) { a = x ( a ) ; return a == "*" ? true : CKEDITOR . tools . convertArrayToObject ( a . split ( b ) ) } if ( CKEDITOR . tools . isArray ( a ) ) return a . length ?
CKEDITOR . tools . convertArrayToObject ( a ) : false ; var c = { } , d = 0 , g ; for ( g in a ) { c [ g ] = a [ g ] ; d ++ } return d ? c : false } function f ( a ) { if ( a . _ . filterFunction ) return a . _ . filterFunction ; var c = /^cke:(object|embed|param)$/ , d = /^(object|embed|param)$/ ; return a . _ . filterFunction = function ( g , e , f , h , l , q , n ) { var o = g . name , v , j = false ; if ( l ) g . name = o = o . replace ( c , "$1" ) ; if ( f = f && f [ o ] ) { i ( g ) ; for ( o = 0 ; o < f . length ; ++ o ) p ( a , g , f [ o ] ) ; k ( g ) } if ( e ) { var o = g . name , f = e . elements [ o ] , u = e . generic , e = { valid : false , validAttributes : { } , validClasses : { } , validStyles : { } ,
allAttributes : false , allClasses : false , allStyles : false } ; if ( ! f && ! u ) { h . push ( g ) ; return true } i ( g ) ; if ( f ) { o = 0 ; for ( v = f . length ; o < v ; ++ o ) b ( f [ o ] , g , e , true , q ) } if ( u ) { o = 0 ; for ( v = u . length ; o < v ; ++ o ) b ( u [ o ] , g , e , false , q ) } if ( ! e . valid ) { h . push ( g ) ; return true } q = e . validAttributes ; o = e . validStyles ; f = e . validClasses ; v = g . attributes ; var u = g . styles , s = v [ "class" ] , w = v . style , r , x , A = [ ] , t = [ ] , F = /^data-cke-/ , z = false ; delete v . style ; delete v [ "class" ] ; if ( ! e . allAttributes ) for ( r in v ) if ( ! q [ r ] ) if ( F . test ( r ) ) { if ( r != ( x = r . replace ( /^data-cke-saved-/ , "" ) ) &&
! q [ x ] ) { delete v [ r ] ; z = true } } else { delete v [ r ] ; z = true } if ( e . allStyles ) { if ( w ) v . style = w } else { for ( r in u ) o [ r ] ? A . push ( r + ":" + u [ r ] ) : z = true ; if ( A . length ) v . style = A . sort ( ) . join ( "; " ) } if ( e . allClasses ) s && ( v [ "class" ] = s ) ; else { for ( r in f ) f [ r ] && t . push ( r ) ; t . length && ( v [ "class" ] = t . sort ( ) . join ( " " ) ) ; s && t . length < s . split ( /\s+/ ) . length && ( z = true ) } z && ( j = true ) ; if ( ! n && ! m ( g ) ) { h . push ( g ) ; return true } } if ( l ) g . name = g . name . replace ( d , "cke:$1" ) ; return j } } function d ( a , b ) { if ( ! b ) return true ; for ( var c = 0 ; c < b . length ; ++ c ) if ( ! ( b [ c ] in a ) ) return false ;
return true } function e ( a ) { if ( ! a ) return { } ; for ( var a = a . split ( /\s*,\s*/ ) . sort ( ) , b = { } ; a . length ; ) b [ a . shift ( ) ] = z ; return b } function h ( a ) { for ( var b , c , g , d , e = { } , f = 1 , a = x ( a ) ; b = a . match ( y ) ; ) { if ( c = b [ 2 ] ) { g = j ( c , "styles" ) ; d = j ( c , "attrs" ) ; c = j ( c , "classes" ) } else g = d = c = null ; e [ "$" + f ++ ] = { elements : b [ 1 ] , classes : c , styles : g , attributes : d } ; a = a . slice ( b [ 0 ] . length ) } return e } function j ( a , b ) { var c = a . match ( n [ b ] ) ; return c ? x ( c [ 1 ] ) : null } function i ( a ) { if ( ! a . styles ) a . styles = CKEDITOR . tools . parseCssText ( a . attributes . style || "" , 1 ) ; if ( ! a . classes ) a . classes =
a . attributes [ "class" ] ? a . attributes [ "class" ] . split ( /\s+/ ) : [ ] } function k ( a ) { var b = a . attributes , c ; delete b . style ; delete b [ "class" ] ; if ( c = CKEDITOR . tools . writeCssText ( a . styles , true ) ) b . style = c ; a . classes . length && ( b [ "class" ] = a . classes . sort ( ) . join ( " " ) ) } function m ( a ) { switch ( a . name ) { case "a" : if ( ! a . children . length && ! a . attributes . name ) return false ; break ; case "img" : if ( ! a . attributes . src ) return false } return true } function q ( a ) { return ! a ? false : a === true ? true : function ( b ) { return b in a } } function r ( ) { return new CKEDITOR . htmlParser . element ( "br" ) }
function l ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && ( a . name == "br" || A . $block [ a . name ] ) } function g ( a , b , c ) { var g = a . name ; if ( A . $empty [ g ] || ! a . children . length ) if ( g == "hr" && b == "br" ) a . replaceWith ( r ( ) ) ; else { a . parent && c . push ( { check : "it" , el : a . parent } ) ; a . remove ( ) } else if ( A . $block [ g ] || g == "tr" ) if ( b == "br" ) { if ( a . previous && ! l ( a . previous ) ) { b = r ( ) ; b . insertBefore ( a ) } if ( a . next && ! l ( a . next ) ) { b = r ( ) ; b . insertAfter ( a ) } a . replaceWithChildren ( ) } else { var g = a . children , d ; b : { d = A [ b ] ; for ( var e = 0 , f = g . length , p ; e < f ; ++ e ) { p = g [ e ] ; if ( p . type ==
CKEDITOR . NODE _ELEMENT && ! d [ p . name ] ) { d = false ; break b } } d = true } if ( d ) { a . name = b ; a . attributes = { } ; c . push ( { check : "parent-down" , el : a } ) } else { d = a . parent ; for ( var e = d . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || d . name == "body" , h , f = g . length ; f > 0 ; ) { p = g [ -- f ] ; if ( e && ( p . type == CKEDITOR . NODE _TEXT || p . type == CKEDITOR . NODE _ELEMENT && A . $inline [ p . name ] ) ) { if ( ! h ) { h = new CKEDITOR . htmlParser . element ( b ) ; h . insertAfter ( a ) ; c . push ( { check : "parent-down" , el : h } ) } h . add ( p , 0 ) } else { h = null ; p . insertAfter ( a ) ; d . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT && ( p . type ==
CKEDITOR . NODE _ELEMENT && ! A [ d . name ] [ p . name ] ) && c . push ( { check : "el-up" , el : p } ) } } a . remove ( ) } } else if ( g == "style" ) a . remove ( ) ; else { a . parent && c . push ( { check : "it" , el : a . parent } ) ; a . replaceWithChildren ( ) } } function p ( a , b , c ) { var g , d ; for ( g = 0 ; g < c . length ; ++ g ) { d = c [ g ] ; if ( ( ! d . check || a . check ( d . check , false ) ) && ( ! d . left || d . left ( b ) ) ) { d . right ( b , w ) ; break } } } function v ( a , b ) { var c = b . getDefinition ( ) , g = c . attributes , d = c . styles , e , f , p , h ; if ( a . name != c . element ) return false ; for ( e in g ) if ( e == "class" ) { c = g [ e ] . split ( /\s+/ ) ; for ( p = a . classes . join ( "|" ) ; h =
c . pop ( ) ; ) if ( p . indexOf ( h ) == - 1 ) return false } else if ( a . attributes [ e ] != g [ e ] ) return false ; for ( f in d ) if ( a . styles [ f ] != d [ f ] ) return false ; return true } function u ( a , b ) { var c , g ; if ( typeof a == "string" ) c = a ; else if ( a instanceof CKEDITOR . style ) g = a ; else { c = a [ 0 ] ; g = a [ 1 ] } return [ { element : c , left : g , right : function ( a , c ) { c . transform ( a , b ) } } ] } function o ( a ) { return function ( b ) { return v ( b , a ) } } function F ( a ) { return function ( b , c ) { c [ a ] ( b ) } } var A = CKEDITOR . dtd , s = CKEDITOR . tools . copy , x = CKEDITOR . tools . trim , z = "cke-test" ; CKEDITOR . filter = function ( a ) { this . allowedContent =
[ ] ; this . disabled = false ; this . editor = null ; this . enterMode = CKEDITOR . ENTER _P ; this . _ = { rules : { } , transformations : { } , cachedTests : { } } ; if ( a instanceof CKEDITOR . editor ) { var b = this . editor = a ; this . customConfig = true ; var a = b . config . allowedContent , c ; if ( a === true ) this . disabled = true ; else { if ( ! a ) this . customConfig = false ; this . enterMode = c = b . blockless ? CKEDITOR . ENTER _BR : b . config . enterMode ; var g = [ "br" ] , d = b . blockless ? CKEDITOR . ENTER _BR : b . config . shiftEnterMode ; ( c == CKEDITOR . ENTER _P || d == CKEDITOR . ENTER _P ) && g . push ( "p" ) ; ( c == CKEDITOR . ENTER _DIV ||
d == CKEDITOR . ENTER _DIV ) && g . push ( "div" ) ; this . allow ( g . join ( " " ) , "default" , 1 ) ; this . allow ( a , "config" , 1 ) ; this . allow ( b . config . extraAllowedContent , "extra" , 1 ) ; this . _ . toHtmlListener = b . on ( "toHtml" , function ( a ) { this . applyTo ( a . data . dataValue , true , a . data . dontFilter ) && b . fire ( "dataFiltered" ) } , this , null , 6 ) ; this . _ . toDataFormatListener = b . on ( "toDataFormat" , function ( a ) { this . applyTo ( a . data . dataValue , false , true ) } , this , null , 11 ) } } else { this . customConfig = false ; this . allow ( a , "default" , 1 ) } } ; CKEDITOR . filter . prototype = { allow : function ( b ,
c , g ) { if ( this . disabled || this . customConfig && ! g || ! b ) return false ; this . _ . cachedChecks = { } ; var d , e ; if ( typeof b == "string" ) b = h ( b ) ; else if ( b instanceof CKEDITOR . style ) { e = b . getDefinition ( ) ; g = { } ; b = e . attributes ; g [ e . element ] = e = { styles : e . styles , requiredStyles : e . styles && CKEDITOR . tools . objectKeys ( e . styles ) } ; if ( b ) { b = s ( b ) ; e . classes = b [ "class" ] ? b [ "class" ] . split ( /\s+/ ) : null ; e . requiredClasses = e . classes ; delete b [ "class" ] ; e . attributes = b ; e . requiredAttributes = b && CKEDITOR . tools . objectKeys ( b ) } b = g } else if ( CKEDITOR . tools . isArray ( b ) ) { for ( d =
0 ; d < b . length ; ++ d ) e = this . allow ( b [ d ] , c , g ) ; return e } var f , g = [ ] ; for ( f in b ) { e = b [ f ] ; e = typeof e == "boolean" ? { } : typeof e == "function" ? { match : e } : s ( e ) ; if ( f . charAt ( 0 ) != "$" ) e . elements = f ; if ( c ) e . featureName = c . toLowerCase ( ) ; var p = e ; p . elements = a ( p . elements , /\s+/ ) || null ; p . propertiesOnly = p . propertiesOnly || p . elements === true ; var l = /\s*,\s*/ , n = void 0 ; for ( n in t ) { p [ n ] = a ( p [ n ] , l ) || null ; var o = p , v = C [ n ] , i = a ( p [ C [ n ] ] , l ) , j = p [ n ] , u = [ ] , r = true , w = void 0 ; i ? r = false : i = { } ; for ( w in j ) if ( w . charAt ( 0 ) == "!" ) { w = w . slice ( 1 ) ; u . push ( w ) ; i [ w ] = true ;
r = false } for ( ; w = u . pop ( ) ; ) { j [ w ] = j [ "!" + w ] ; delete j [ "!" + w ] } o [ v ] = ( r ? false : i ) || null } p . match = p . match || null ; this . allowedContent . push ( e ) ; g . push ( e ) } c = this . _ . rules ; f = c . elements || { } ; b = c . generic || [ ] ; e = 0 ; for ( p = g . length ; e < p ; ++ e ) { l = s ( g [ e ] ) ; n = l . classes === true || l . styles === true || l . attributes === true ; o = l ; v = void 0 ; for ( v in t ) o [ v ] = q ( o [ v ] ) ; i = true ; for ( v in C ) { v = C [ v ] ; o [ v ] = CKEDITOR . tools . objectKeys ( o [ v ] ) ; o [ v ] && ( i = false ) } o . nothingRequired = i ; if ( l . elements === true || l . elements === null ) { l . elements = q ( l . elements ) ; b [ n ? "unshift" : "push" ] ( l ) } else { o =
l . elements ; delete l . elements ; for ( d in o ) if ( f [ d ] ) f [ d ] [ n ? "unshift" : "push" ] ( l ) ; else f [ d ] = [ l ] } } c . elements = f ; c . generic = b . length ? b : null ; return true } , applyTo : function ( a , b , c ) { var d = [ ] , e = ! c && this . _ . rules , p = this . _ . transformations , h = f ( this ) , l = this . editor && this . editor . config . protectedSource , q = false ; a . forEach ( function ( a ) { if ( a . type == CKEDITOR . NODE _ELEMENT ) { if ( ! b || ! ( a . name == "span" && ~ CKEDITOR . tools . objectKeys ( a . attributes ) . join ( "|" ) . indexOf ( "data-cke-" ) ) ) h ( a , e , p , d , b ) && ( q = true ) } else if ( a . type == CKEDITOR . NODE _COMMENT &&
a . value . match ( /^\{cke_protected\}(?!\{C\})/ ) ) { var c ; a : { var g = decodeURIComponent ( a . value . replace ( /^\{cke_protected\}/ , "" ) ) ; c = [ ] ; var f , n , o ; if ( l ) for ( n = 0 ; n < l . length ; ++ n ) if ( ( o = g . match ( l [ n ] ) ) && o [ 0 ] . length == g . length ) { c = true ; break a } g = CKEDITOR . htmlParser . fragment . fromHtml ( g ) ; g . children . length == 1 && ( f = g . children [ 0 ] ) . type == CKEDITOR . NODE _ELEMENT && h ( f , e , p , c , b ) ; c = ! c . length } c || d . push ( a ) } } , null , true ) ; d . length && ( q = true ) ; for ( var n , o , a = [ ] , c = [ "p" , "br" , "div" ] [ this . enterMode - 1 ] ; n = d . pop ( ) ; ) n . type == CKEDITOR . NODE _ELEMENT ?
g ( n , c , a ) : n . remove ( ) ; for ( ; o = a . pop ( ) ; ) { n = o . el ; if ( n . parent ) switch ( o . check ) { case "it" : A . $removeEmpty [ n . name ] && ! n . children . length ? g ( n , c , a ) : m ( n ) || g ( n , c , a ) ; break ; case "el-up" : n . parent . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT && ! A [ n . parent . name ] [ n . name ] && g ( n , c , a ) ; break ; case "parent-down" : n . parent . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT && ! A [ n . parent . name ] [ n . name ] && g ( n . parent , c , a ) } } return q } , checkFeature : function ( a ) { if ( this . disabled || ! a ) return true ; a . toFeature && ( a = a . toFeature ( this . editor ) ) ; return ! a . requiredContent ||
this . check ( a . requiredContent ) } , disable : function ( ) { this . disabled = true ; this . _ . toHtmlListener && this . _ . toHtmlListener . removeListener ( ) ; this . _ . toDataFormatListener && this . _ . toDataFormatListener . removeListener ( ) } , addContentForms : function ( a ) { if ( ! this . disabled && a ) { var b , c , g = [ ] , d ; for ( b = 0 ; b < a . length && ! d ; ++ b ) { c = a [ b ] ; if ( ( typeof c == "string" || c instanceof CKEDITOR . style ) && this . check ( c ) ) d = c } if ( d ) { for ( b = 0 ; b < a . length ; ++ b ) g . push ( u ( a [ b ] , d ) ) ; this . addTransformations ( g ) } } } , addFeature : function ( a ) { if ( this . disabled || ! a ) return true ;
a . toFeature && ( a = a . toFeature ( this . editor ) ) ; this . allow ( a . allowedContent , a . name ) ; this . addTransformations ( a . contentTransformations ) ; this . addContentForms ( a . contentForms ) ; return this . customConfig && a . requiredContent ? this . check ( a . requiredContent ) : true } , addTransformations : function ( a ) { var b , c ; if ( ! this . disabled && a ) { var g = this . _ . transformations , d ; for ( d = 0 ; d < a . length ; ++ d ) { b = a [ d ] ; var e = void 0 , f = void 0 , p = void 0 , h = void 0 , l = void 0 , n = void 0 ; c = [ ] ; for ( f = 0 ; f < b . length ; ++ f ) { p = b [ f ] ; if ( typeof p == "string" ) { p = p . split ( /\s*:\s*/ ) ;
h = p [ 0 ] ; l = null ; n = p [ 1 ] } else { h = p . check ; l = p . left ; n = p . right } if ( ! e ) { e = p ; e = e . element ? e . element : h ? h . match ( /^([a-z0-9]+)/i ) [ 0 ] : e . left . getDefinition ( ) . element } l instanceof CKEDITOR . style && ( l = o ( l ) ) ; c . push ( { check : h == e ? null : h , left : l , right : typeof n == "string" ? F ( n ) : n } ) } b = e ; g [ b ] || ( g [ b ] = [ ] ) ; g [ b ] . push ( c ) } } } , check : function ( a , b , c ) { if ( this . disabled ) return true ; if ( CKEDITOR . tools . isArray ( a ) ) { for ( var g = a . length ; g -- ; ) if ( this . check ( a [ g ] , b , c ) ) return true ; return false } var d , l ; if ( typeof a == "string" ) { l = a + "<" + ( b === false ? "0" : "1" ) +
( c ? "1" : "0" ) + ">" ; if ( l in this . _ . cachedChecks ) return this . _ . cachedChecks [ l ] ; g = h ( a ) . $1 ; d = g . styles ; var n = g . classes ; g . name = g . elements ; g . classes = n = n ? n . split ( /\s*,\s*/ ) : [ ] ; g . styles = e ( d ) ; g . attributes = e ( g . attributes ) ; g . children = [ ] ; n . length && ( g . attributes [ "class" ] = n . join ( " " ) ) ; if ( d ) g . attributes . style = CKEDITOR . tools . writeCssText ( g . styles ) ; d = g } else { g = a . getDefinition ( ) ; d = g . styles ; n = g . attributes || { } ; if ( d ) { d = s ( d ) ; n . style = CKEDITOR . tools . writeCssText ( d , true ) } else d = { } ; d = { name : g . element , attributes : n , classes : n [ "class" ] ?
n [ "class" ] . split ( /\s+/ ) : [ ] , styles : d , children : [ ] } } var n = CKEDITOR . tools . clone ( d ) , q = [ ] , o ; if ( b !== false && ( o = this . _ . transformations [ d . name ] ) ) { for ( g = 0 ; g < o . length ; ++ g ) p ( this , d , o [ g ] ) ; k ( d ) } f ( this ) ( n , this . _ . rules , b === false ? false : this . _ . transformations , q , false , ! c , ! c ) ; b = q . length > 0 ? false : CKEDITOR . tools . objectCompare ( d . attributes , n . attributes , true ) ? true : false ; typeof a == "string" && ( this . _ . cachedChecks [ l ] = b ) ; return b } } ; var t = { styles : 1 , attributes : 1 , classes : 1 } , C = { styles : "requiredStyles" , attributes : "requiredAttributes" ,
classes : "requiredClasses" } , y = /^([a-z0-9*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i , n = { styles : /{([^}]+)}/ , attrs : /\[([^\]]+)\]/ , classes : /\(([^\)]+)\)/ } , w = 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 g = a . attributes [ b ] ;
if ( g ) { /^\d+$/ . test ( g ) && ( g = g + "px" ) ; a . styles [ c ] = g } } delete a . attributes [ b ] } , lengthToAttribute : function ( a , b , c ) { c = c || b ; if ( ! ( c in a . attributes ) ) { var g = a . styles [ b ] , d = g && g . match ( /^(\d+)(?:\.\d*)?px$/ ) ; d ? a . attributes [ c ] = d [ 1 ] : g == z && ( a . attributes [ c ] = z ) } delete a . styles [ b ] } , alignmentToStyle : function ( a ) { if ( ! ( "float" in a . styles ) ) { var b = a . attributes . align ; if ( b == "left" || b == "right" ) a . styles [ "float" ] = b } delete a . attributes . align } , alignmentToAttribute : function ( a ) { if ( ! ( "align" in a . attributes ) ) { var b = a . styles [ "float" ] ;
if ( b == "left" || b == "right" ) a . attributes . align = b } delete a . styles [ "float" ] } , matchesStyle : v , transform : function ( a , b ) { if ( typeof b == "string" ) a . name = b ; else { var c = b . getDefinition ( ) , g = c . styles , d = c . attributes , e , f , p , h ; a . name = c . element ; for ( e in d ) if ( e == "class" ) { c = a . classes . join ( "|" ) ; for ( p = d [ e ] . split ( /\s+/ ) ; h = p . pop ( ) ; ) c . indexOf ( h ) == - 1 && a . classes . push ( h ) } else a . attributes [ e ] = d [ e ] ; for ( f in g ) a . styles [ f ] = g [ f ] } } } } ) ( ) ;
( function ( ) { function b ( a , b , g , e , f ) { var h = b . name ; if ( ( e || typeof a . elements != "function" || a . elements ( h ) ) && ( ! a . match || a . match ( b ) ) ) { if ( e = ! f ) { a : if ( a . nothingRequired ) e = true ; else { if ( f = a . requiredClasses ) { h = b . classes ; for ( e = 0 ; e < f . length ; ++ e ) if ( CKEDITOR . tools . indexOf ( h , f [ e ] ) == - 1 ) { e = false ; break a } } e = d ( b . styles , a . requiredStyles ) && d ( b . attributes , a . requiredAttributes ) } e = ! e } if ( ! e ) { if ( ! a . propertiesOnly ) g . valid = true ; if ( ! g . allAttributes ) g . allAttributes = c ( a . attributes , b . attributes , g . validAttributes ) ; if ( ! g . allStyles ) g . allStyles =
c ( a . styles , b . styles , g . validStyles ) ; if ( ! g . allClasses ) { a = a . classes ; b = b . classes ; e = g . validClasses ; if ( a ) if ( a === true ) b = true ; else { for ( var f = 0 , h = b . length , p ; f < h ; ++ f ) { p = b [ f ] ; e [ p ] || ( e [ p ] = a ( p ) ) } b = false } else b = false ; g . allClasses = b } } } } function c ( a , b , c ) { if ( ! a ) return false ; if ( a === true ) return true ; for ( var g in b ) c [ g ] || ( c [ g ] = a ( g , b [ g ] ) ) ; return false } function a ( a , b ) { if ( ! a ) return false ; if ( a === true ) return a ; if ( typeof a == "string" ) { a = x ( a ) ; return a == "*" ? true : CKEDITOR . tools . convertArrayToObject ( a . split ( b ) ) } if ( CKEDITOR . tools . isArray ( a ) ) return a . length ?
CKEDITOR . tools . convertArrayToObject ( a ) : false ; var c = { } , g = 0 , d ; for ( d in a ) { c [ d ] = a [ d ] ; g ++ } return g ? c : false } function f ( a ) { if ( a . _ . filterFunction ) return a . _ . filterFunction ; var c = /^cke:(object|embed|param)$/ , g = /^(object|embed|param)$/ ; return a . _ . filterFunction = function ( d , e , f , h , k , q , o ) { var n = d . name , v , j = false ; if ( k ) d . name = n = n . replace ( c , "$1" ) ; if ( f = f && f [ n ] ) { i ( d ) ; for ( n = 0 ; n < f . length ; ++ n ) p ( a , d , f [ n ] ) ; l ( d ) } if ( e ) { var n = d . name , f = e . elements [ n ] , t = e . generic , e = { valid : false , validAttributes : { } , validClasses : { } , validStyles : { } ,
allAttributes : false , allClasses : false , allStyles : false } ; if ( ! f && ! t ) { h . push ( d ) ; return true } i ( d ) ; if ( f ) { n = 0 ; for ( v = f . length ; n < v ; ++ n ) b ( f [ n ] , d , e , true , q ) } if ( t ) { n = 0 ; for ( v = t . length ; n < v ; ++ n ) b ( t [ n ] , d , e , false , q ) } if ( ! e . valid ) { h . push ( d ) ; return true } q = e . validAttributes ; n = e . validStyles ; f = e . validClasses ; v = d . attributes ; var t = d . styles , r = v [ "class" ] , x = v . style , u , w , B = [ ] , s = [ ] , E = /^data-cke-/ , z = false ; delete v . style ; delete v [ "class" ] ; if ( ! e . allAttributes ) for ( u in v ) if ( ! q [ u ] ) if ( E . test ( u ) ) { if ( u != ( w = u . replace ( /^data-cke-saved-/ , "" ) ) &&
! q [ w ] ) { delete v [ u ] ; z = true } } else { delete v [ u ] ; z = true } if ( e . allStyles ) { if ( x ) v . style = x } else { for ( u in t ) n [ u ] ? B . push ( u + ":" + t [ u ] ) : z = true ; if ( B . length ) v . style = B . sort ( ) . join ( "; " ) } if ( e . allClasses ) r && ( v [ "class" ] = r ) ; else { for ( u in f ) f [ u ] && s . push ( u ) ; s . length && ( v [ "class" ] = s . sort ( ) . join ( " " ) ) ; r && s . length < r . split ( /\s+/ ) . length && ( z = true ) } z && ( j = true ) ; if ( ! o && ! m ( d ) ) { h . push ( d ) ; return true } } if ( k ) d . name = d . name . replace ( g , "cke:$1" ) ; return j } } function d ( a , b ) { if ( ! b ) return true ; for ( var c = 0 ; c < b . length ; ++ c ) if ( ! ( b [ c ] in a ) ) return false ;
return true } function e ( a ) { if ( ! a ) return { } ; for ( var a = a . split ( /\s*,\s*/ ) . sort ( ) , b = { } ; a . length ; ) b [ a . shift ( ) ] = z ; return b } function h ( a ) { for ( var b , c , d , g , e = { } , f = 1 , a = x ( a ) ; b = a . match ( y ) ; ) { if ( c = b [ 2 ] ) { d = j ( c , "styles" ) ; g = j ( c , "attrs" ) ; c = j ( c , "classes" ) } else d = g = c = null ; e [ "$" + f ++ ] = { elements : b [ 1 ] , classes : c , styles : d , attributes : g } ; a = a . slice ( b [ 0 ] . length ) } return e } function j ( a , b ) { var c = a . match ( o [ b ] ) ; return c ? x ( c [ 1 ] ) : null } function i ( a ) { if ( ! a . styles ) a . styles = CKEDITOR . tools . parseCssText ( a . attributes . style || "" , 1 ) ; if ( ! a . classes ) a . classes =
a . attributes [ "class" ] ? a . attributes [ "class" ] . split ( /\s+/ ) : [ ] } function l ( a ) { var b = a . attributes , c ; delete b . style ; delete b [ "class" ] ; if ( c = CKEDITOR . tools . writeCssText ( a . styles , true ) ) b . style = c ; a . classes . length && ( b [ "class" ] = a . classes . sort ( ) . join ( " " ) ) } function m ( a ) { switch ( a . name ) { case "a" : if ( ! a . children . length && ! a . attributes . name ) return false ; break ; case "img" : if ( ! a . attributes . src ) return false } return true } function q ( a ) { return ! a ? false : a === true ? true : function ( b ) { return b in a } } function w ( ) { return new CKEDITOR . htmlParser . element ( "br" ) }
function k ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && ( a . name == "br" || B . $block [ a . name ] ) } function g ( a , b , c ) { var d = a . name ; if ( B . $empty [ d ] || ! a . children . length ) if ( d == "hr" && b == "br" ) a . replaceWith ( w ( ) ) ; else { a . parent && c . push ( { check : "it" , el : a . parent } ) ; a . remove ( ) } else if ( B . $block [ d ] || d == "tr" ) if ( b == "br" ) { if ( a . previous && ! k ( a . previous ) ) { b = w ( ) ; b . insertBefore ( a ) } if ( a . next && ! k ( a . next ) ) { b = w ( ) ; b . insertAfter ( a ) } a . replaceWithChildren ( ) } else { var d = a . children , g ; b : { g = B [ b ] ; for ( var e = 0 , f = d . length , h ; e < f ; ++ e ) { h = d [ e ] ; if ( h . type ==
CKEDITOR . NODE _ELEMENT && ! g [ h . name ] ) { g = false ; break b } } g = true } if ( g ) { a . name = b ; a . attributes = { } ; c . push ( { check : "parent-down" , el : a } ) } else { g = a . parent ; for ( var e = g . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT || g . name == "body" , p , f = d . length ; f > 0 ; ) { h = d [ -- f ] ; if ( e && ( h . type == CKEDITOR . NODE _TEXT || h . type == CKEDITOR . NODE _ELEMENT && B . $inline [ h . name ] ) ) { if ( ! p ) { p = new CKEDITOR . htmlParser . element ( b ) ; p . insertAfter ( a ) ; c . push ( { check : "parent-down" , el : p } ) } p . add ( h , 0 ) } else { p = null ; h . insertAfter ( a ) ; g . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT && ( h . type ==
CKEDITOR . NODE _ELEMENT && ! B [ g . name ] [ h . name ] ) && c . push ( { check : "el-up" , el : h } ) } } a . remove ( ) } } else if ( d == "style" ) a . remove ( ) ; else { a . parent && c . push ( { check : "it" , el : a . parent } ) ; a . replaceWithChildren ( ) } } function p ( a , b , c ) { var d , g ; for ( d = 0 ; d < c . length ; ++ d ) { g = c [ d ] ; if ( ( ! g . check || a . check ( g . check , false ) ) && ( ! g . left || g . left ( b ) ) ) { g . right ( b , u ) ; break } } } function v ( a , b ) { var c = b . getDefinition ( ) , d = c . attributes , g = c . styles , e , f , h , p ; if ( a . name != c . element ) return false ; for ( e in d ) if ( e == "class" ) { c = d [ e ] . split ( /\s+/ ) ; for ( h = a . classes . join ( "|" ) ; p =
c . pop ( ) ; ) if ( h . indexOf ( p ) == - 1 ) return false } else if ( a . attributes [ e ] != d [ e ] ) return false ; for ( f in g ) if ( a . styles [ f ] != g [ f ] ) return false ; return true } function t ( a , b ) { var c , d ; if ( typeof a == "string" ) c = a ; else if ( a instanceof CKEDITOR . style ) d = a ; else { c = a [ 0 ] ; d = a [ 1 ] } return [ { element : c , left : d , right : function ( a , c ) { c . transform ( a , b ) } } ] } function n ( a ) { return function ( b ) { return v ( b , a ) } } function E ( a ) { return function ( b , c ) { c [ a ] ( b ) } } var B = CKEDITOR . dtd , r = CKEDITOR . tools . copy , x = CKEDITOR . tools . trim , z = "cke-test" ; CKEDITOR . filter = function ( a ) { this . allowedContent =
[ ] ; this . disabled = false ; this . editor = null ; this . enterMode = CKEDITOR . ENTER _P ; this . _ = { rules : { } , transformations : { } , cachedTests : { } } ; if ( a instanceof CKEDITOR . editor ) { var b = this . editor = a ; this . customConfig = true ; var a = b . config . allowedContent , c ; if ( a === true ) this . disabled = true ; else { if ( ! a ) this . customConfig = false ; this . enterMode = c = b . blockless ? CKEDITOR . ENTER _BR : b . config . enterMode ; var d = [ "br" ] , g = b . blockless ? CKEDITOR . ENTER _BR : b . config . shiftEnterMode ; ( c == CKEDITOR . ENTER _P || g == CKEDITOR . ENTER _P ) && d . push ( "p" ) ; ( c == CKEDITOR . ENTER _DIV ||
g == CKEDITOR . ENTER _DIV ) && d . push ( "div" ) ; this . allow ( d . join ( " " ) , "default" , 1 ) ; this . allow ( a , "config" , 1 ) ; this . allow ( b . config . extraAllowedContent , "extra" , 1 ) ; this . _ . toHtmlListener = b . on ( "toHtml" , function ( a ) { this . applyTo ( a . data . dataValue , true , a . data . dontFilter ) && b . fire ( "dataFiltered" ) } , this , null , 6 ) ; this . _ . toDataFormatListener = b . on ( "toDataFormat" , function ( a ) { this . applyTo ( a . data . dataValue , false , true ) } , this , null , 11 ) } } else { this . customConfig = false ; this . allow ( a , "default" , 1 ) } } ; CKEDITOR . filter . prototype = { allow : function ( b ,
c , d ) { if ( this . disabled || this . customConfig && ! d || ! b ) return false ; this . _ . cachedChecks = { } ; var g , e ; if ( typeof b == "string" ) b = h ( b ) ; else if ( b instanceof CKEDITOR . style ) { e = b . getDefinition ( ) ; d = { } ; b = e . attributes ; d [ e . element ] = e = { styles : e . styles , requiredStyles : e . styles && CKEDITOR . tools . objectKeys ( e . styles ) } ; if ( b ) { b = r ( b ) ; e . classes = b [ "class" ] ? b [ "class" ] . split ( /\s+/ ) : null ; e . requiredClasses = e . classes ; delete b [ "class" ] ; e . attributes = b ; e . requiredAttributes = b && CKEDITOR . tools . objectKeys ( b ) } b = d } else if ( CKEDITOR . tools . isArray ( b ) ) { for ( g =
0 ; g < b . length ; ++ g ) e = this . allow ( b [ g ] , c , d ) ; return e } var f , d = [ ] ; for ( f in b ) { e = b [ f ] ; e = typeof e == "boolean" ? { } : typeof e == "function" ? { match : e } : r ( e ) ; if ( f . charAt ( 0 ) != "$" ) e . elements = f ; if ( c ) e . featureName = c . toLowerCase ( ) ; var p = e ; p . elements = a ( p . elements , /\s+/ ) || null ; p . propertiesOnly = p . propertiesOnly || p . elements === true ; var k = /\s*,\s*/ , o = void 0 ; for ( o in s ) { p [ o ] = a ( p [ o ] , k ) || null ; var n = p , v = C [ o ] , i = a ( p [ C [ o ] ] , k ) , j = p [ o ] , t = [ ] , u = true , x = void 0 ; i ? u = false : i = { } ; for ( x in j ) if ( x . charAt ( 0 ) == "!" ) { x = x . slice ( 1 ) ; t . push ( x ) ; i [ x ] = true ;
u = false } for ( ; x = t . pop ( ) ; ) { j [ x ] = j [ "!" + x ] ; delete j [ "!" + x ] } n [ v ] = ( u ? false : i ) || null } p . match = p . match || null ; this . allowedContent . push ( e ) ; d . push ( e ) } c = this . _ . rules ; f = c . elements || { } ; b = c . generic || [ ] ; e = 0 ; for ( p = d . length ; e < p ; ++ e ) { k = r ( d [ e ] ) ; o = k . classes === true || k . styles === true || k . attributes === true ; n = k ; v = void 0 ; for ( v in s ) n [ v ] = q ( n [ v ] ) ; i = true ; for ( v in C ) { v = C [ v ] ; n [ v ] = CKEDITOR . tools . objectKeys ( n [ v ] ) ; n [ v ] && ( i = false ) } n . nothingRequired = i ; if ( k . elements === true || k . elements === null ) { k . elements = q ( k . elements ) ; b [ o ? "unshift" : "push" ] ( k ) } else { n =
k . elements ; delete k . elements ; for ( g in n ) if ( f [ g ] ) f [ g ] [ o ? "unshift" : "push" ] ( k ) ; else f [ g ] = [ k ] } } c . elements = f ; c . generic = b . length ? b : null ; return true } , applyTo : function ( a , b , c ) { var d = [ ] , e = ! c && this . _ . rules , h = this . _ . transformations , p = f ( this ) , k = this . editor && this . editor . config . protectedSource , q = false ; a . forEach ( function ( a ) { if ( a . type == CKEDITOR . NODE _ELEMENT ) { if ( ! b || ! ( a . name == "span" && ~ CKEDITOR . tools . objectKeys ( a . attributes ) . join ( "|" ) . indexOf ( "data-cke-" ) ) ) p ( a , e , h , d , b ) && ( q = true ) } else if ( a . type == CKEDITOR . NODE _COMMENT &&
a . value . match ( /^\{cke_protected\}(?!\{C\})/ ) ) { var c ; a : { var g = decodeURIComponent ( a . value . replace ( /^\{cke_protected\}/ , "" ) ) ; c = [ ] ; var f , o , n ; if ( k ) for ( o = 0 ; o < k . length ; ++ o ) if ( ( n = g . match ( k [ o ] ) ) && n [ 0 ] . length == g . length ) { c = true ; break a } g = CKEDITOR . htmlParser . fragment . fromHtml ( g ) ; g . children . length == 1 && ( f = g . children [ 0 ] ) . type == CKEDITOR . NODE _ELEMENT && p ( f , e , h , c , b ) ; c = ! c . length } c || d . push ( a ) } } , null , true ) ; d . length && ( q = true ) ; for ( var o , n , a = [ ] , c = [ "p" , "br" , "div" ] [ this . enterMode - 1 ] ; o = d . pop ( ) ; ) o . type == CKEDITOR . NODE _ELEMENT ?
g ( o , c , a ) : o . remove ( ) ; for ( ; n = a . pop ( ) ; ) { o = n . el ; if ( o . parent ) switch ( n . check ) { case "it" : B . $removeEmpty [ o . name ] && ! o . children . length ? g ( o , c , a ) : m ( o ) || g ( o , c , a ) ; break ; case "el-up" : o . parent . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT && ! B [ o . parent . name ] [ o . name ] && g ( o , c , a ) ; break ; case "parent-down" : o . parent . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT && ! B [ o . parent . name ] [ o . name ] && g ( o . parent , c , a ) } } return q } , checkFeature : function ( a ) { if ( this . disabled || ! a ) return true ; a . toFeature && ( a = a . toFeature ( this . editor ) ) ; return ! a . requiredContent ||
this . check ( a . requiredContent ) } , disable : function ( ) { this . disabled = true ; this . _ . toHtmlListener && this . _ . toHtmlListener . removeListener ( ) ; this . _ . toDataFormatListener && this . _ . toDataFormatListener . removeListener ( ) } , addContentForms : function ( a ) { if ( ! this . disabled && a ) { var b , c , d = [ ] , g ; for ( b = 0 ; b < a . length && ! g ; ++ b ) { c = a [ b ] ; if ( ( typeof c == "string" || c instanceof CKEDITOR . style ) && this . check ( c ) ) g = c } if ( g ) { for ( b = 0 ; b < a . length ; ++ b ) d . push ( t ( a [ b ] , g ) ) ; this . addTransformations ( d ) } } } , addFeature : function ( a ) { if ( this . disabled || ! a ) return true ;
a . toFeature && ( a = a . toFeature ( this . editor ) ) ; this . allow ( a . allowedContent , a . name ) ; this . addTransformations ( a . contentTransformations ) ; this . addContentForms ( a . contentForms ) ; return this . customConfig && a . requiredContent ? this . check ( a . requiredContent ) : true } , addTransformations : function ( a ) { var b , c ; if ( ! this . disabled && a ) { var d = this . _ . transformations , g ; for ( g = 0 ; g < a . length ; ++ g ) { b = a [ g ] ; var e = void 0 , f = void 0 , h = void 0 , p = void 0 , k = void 0 , o = void 0 ; c = [ ] ; for ( f = 0 ; f < b . length ; ++ f ) { h = b [ f ] ; if ( typeof h == "string" ) { h = h . split ( /\s*:\s*/ ) ;
p = h [ 0 ] ; k = null ; o = h [ 1 ] } else { p = h . check ; k = h . left ; o = h . right } if ( ! e ) { e = h ; e = e . element ? e . element : p ? p . match ( /^([a-z0-9]+)/i ) [ 0 ] : e . left . getDefinition ( ) . element } k instanceof CKEDITOR . style && ( k = n ( k ) ) ; c . push ( { check : p == e ? null : p , left : k , right : typeof o == "string" ? E ( o ) : o } ) } b = e ; d [ b ] || ( d [ b ] = [ ] ) ; d [ b ] . push ( c ) } } } , check : function ( a , b , c ) { if ( this . disabled ) return true ; if ( CKEDITOR . tools . isArray ( a ) ) { for ( var d = a . length ; d -- ; ) if ( this . check ( a [ d ] , b , c ) ) return true ; return false } var g , k ; if ( typeof a == "string" ) { k = a + "<" + ( b === false ? "0" : "1" ) +
( c ? "1" : "0" ) + ">" ; if ( k in this . _ . cachedChecks ) return this . _ . cachedChecks [ k ] ; d = h ( a ) . $1 ; g = d . styles ; var o = d . classes ; d . name = d . elements ; d . classes = o = o ? o . split ( /\s*,\s*/ ) : [ ] ; d . styles = e ( g ) ; d . attributes = e ( d . attributes ) ; d . children = [ ] ; o . length && ( d . attributes [ "class" ] = o . join ( " " ) ) ; if ( g ) d . attributes . style = CKEDITOR . tools . writeCssText ( d . styles ) ; g = d } else { d = a . getDefinition ( ) ; g = d . styles ; o = d . attributes || { } ; if ( g ) { g = r ( g ) ; o . style = CKEDITOR . tools . writeCssText ( g , true ) } else g = { } ; g = { name : d . element , attributes : o , classes : o [ "class" ] ?
o [ "class" ] . split ( /\s+/ ) : [ ] , styles : g , children : [ ] } } var o = CKEDITOR . tools . clone ( g ) , q = [ ] , n ; if ( b !== false && ( n = this . _ . transformations [ g . name ] ) ) { for ( d = 0 ; d < n . length ; ++ d ) p ( this , g , n [ d ] ) ; l ( g ) } f ( this ) ( o , this . _ . rules , b === false ? false : this . _ . transformations , q , false , ! c , ! c ) ; b = q . length > 0 ? false : CKEDITOR . tools . objectCompare ( g . attributes , o . attributes , true ) ? true : false ; typeof a == "string" && ( this . _ . cachedChecks [ k ] = b ) ; return b } } ; var s = { styles : 1 , attributes : 1 , classes : 1 } , C = { styles : "requiredStyles" , attributes : "requiredAttributes" ,
classes : "requiredClasses" } , y = /^([a-z0-9*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i , o = { styles : /{([^}]+)}/ , attrs : /\[([^\]]+)\]/ , classes : /\(([^\)]+)\)/ } , u = 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 ] ;
if ( d ) { /^\d+$/ . test ( d ) && ( 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 ] , g = d && d . match ( /^(\d+)(?:\.\d*)?px$/ ) ; g ? a . attributes [ c ] = g [ 1 ] : d == z && ( a . attributes [ c ] = z ) } delete a . styles [ b ] } , alignmentToStyle : function ( a ) { if ( ! ( "float" in a . styles ) ) { var b = a . attributes . align ; if ( b == "left" || b == "right" ) a . styles [ "float" ] = b } delete a . attributes . align } , alignmentToAttribute : function ( a ) { if ( ! ( "align" in a . attributes ) ) { var b = a . styles [ "float" ] ;
if ( b == "left" || b == "right" ) a . attributes . align = b } delete a . styles [ "float" ] } , matchesStyle : v , transform : function ( a , b ) { if ( typeof b == "string" ) a . name = b ; else { var c = b . getDefinition ( ) , d = c . styles , g = c . attributes , e , f , h , p ; a . name = c . element ; for ( e in g ) if ( e == "class" ) { c = a . classes . join ( "|" ) ; for ( h = g [ e ] . split ( /\s+/ ) ; p = h . pop ( ) ; ) c . indexOf ( p ) == - 1 && a . classes . push ( p ) } else a . attributes [ e ] = g [ e ] ; for ( f in d ) a . styles [ f ] = d [ f ] } } } } ) ( ) ;
( function ( ) { CKEDITOR . focusManager = function ( b ) { if ( b . focusManager ) return b . focusManager ; this . hasFocus = false ; this . currentActive = null ; this . _ = { editor : b } ; return this } ; CKEDITOR . focusManager . _ = { blurDelay : 200 } ; CKEDITOR . focusManager . prototype = { focus : function ( ) { this . _ . timer && clearTimeout ( this . _ . timer ) ; if ( ! this . hasFocus && ! this . _ . locked ) { var b = CKEDITOR . currentInstance ; b && b . focusManager . blur ( 1 ) ; this . hasFocus = true ; ( b = this . _ . editor . container ) && b . addClass ( "cke_focus" ) ; this . _ . editor . fire ( "focus" ) } } , lock : function ( ) { this . _ . locked =
1 } , unlock : function ( ) { delete this . _ . locked } , blur : function ( b ) { function c ( ) { if ( this . hasFocus ) { this . hasFocus = false ; var a = this . _ . editor . container ; a && a . removeClass ( "cke_focus" ) ; this . _ . editor . fire ( "blur" ) } } if ( ! this . _ . locked ) { this . _ . timer && clearTimeout ( this . _ . timer ) ; var a = CKEDITOR . focusManager . _ . blurDelay ; b || ! a ? c . call ( this ) : this . _ . timer = CKEDITOR . tools . setTimeout ( function ( ) { delete this . _ . timer ; c . call ( this ) } , a , this ) } } , add : function ( b , c ) { var a = b . getCustomData ( "focusmanager" ) ; if ( ! a || a != this ) { a && a . remove ( b ) ; var a =
"focus" , f = "blur" ; if ( c ) if ( CKEDITOR . env . ie ) { a = "focusin" ; f = "focusout" } else CKEDITOR . event . useCapture = 1 ; var d = { blur : function ( ) { b . equals ( this . currentActive ) && this . blur ( ) } , focus : function ( ) { this . currentActive = b ; this . focus ( ) } } ; b . on ( a , d . focus , this ) ; b . on ( f , d . blur , this ) ; if ( c ) CKEDITOR . event . useCapture = 0 ; b . setCustomData ( "focusmanager" , this ) ; b . setCustomData ( "focusmanager_handlers" , d ) } } , remove : function ( b ) { b . removeCustomData ( "focusmanager" ) ; var c = b . removeCustomData ( "focusmanager_handlers" ) ; b . removeListener ( "blur" ,
@@ -200,27 +200,27 @@ c.blur);b.removeListener("focus",c.focus)}}})();CKEDITOR.keystrokeHandler=functi
( function ( ) { var b , c = function ( a ) { var a = a . data , c = a . getKeystroke ( ) , e = this . keystrokes [ c ] , h = this . _ . editor ; b = h . fire ( "key" , { keyCode : c } ) === false ; if ( ! b ) { e && ( b = h . execCommand ( e , { from : "keystrokeHandler" } ) !== false ) ; b || ( b = ! ! this . blockedKeystrokes [ c ] ) } b && a . preventDefault ( true ) ; return ! b } , a = function ( a ) { if ( b ) { b = false ; a . data . preventDefault ( true ) } } ; CKEDITOR . keystrokeHandler . prototype = { attach : function ( b ) { b . on ( "keydown" , c , this ) ; if ( CKEDITOR . env . opera || CKEDITOR . env . gecko && CKEDITOR . env . mac ) b . on ( "keypress" , a , 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 , 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 , ug : 1 , uk : 1 , vi : 1 , "zh-cn" : 1 , zh : 1 } , rtl : { ar : 1 , fa : 1 , he : 1 , ku : 1 , ug : 1 } , load : function ( b , c , a ) { if ( ! b || ! CKEDITOR . lang . languages [ b ] ) b = this . detect ( c ,
b ) ; this [ b ] ? a ( b , this [ b ] ) : CKEDITOR . scriptLoader . load ( CKEDITOR . getUrl ( "lang/" + b + ".js" ) , function ( ) { this [ b ] . dir = this . rtl [ b ] ? "rtl" : "ltr" ; a ( b , this [ b ] ) } , this ) } , detect : function ( b , c ) { var a = this . languages , c = c || navigator . userLanguage || navigator . language || b , f = c . toLowerCase ( ) . match ( /([a-z]+)(?:-([a-z]+))?/ ) , d = f [ 1 ] , f = f [ 2 ] ; a [ d + "-" + f ] ? d = d + "-" + f : a [ d ] || ( d = null ) ; CKEDITOR . lang . detect = d ? function ( ) { return d } : function ( a ) { return a } ; return d || b } } } ) ( ) ;
CKEDITOR . scriptLoader = function ( ) { var b = { } , c = { } ; return { load : function ( a , f , d , e ) { var h = typeof a == "string" ; h && ( a = [ a ] ) ; d || ( d = CKEDITOR ) ; var j = a . length , i = [ ] , k = [ ] , m = function ( a ) { f && ( h ? f . call ( d , a ) : f . call ( d , i , k ) ) } ; if ( j === 0 ) m ( true ) ; else { var q = function ( a , b ) { ( b ? i : k ) . push ( a ) ; if ( -- j <= 0 ) { e && CKEDITOR . document . getDocumentElement ( ) . removeStyle ( "cursor" ) ; m ( b ) } } , r = function ( a , g ) { b [ a ] = 1 ; var d = c [ a ] ; delete c [ a ] ; for ( var e = 0 ; e < d . length ; e ++ ) d [ e ] ( a , g ) } , l = function ( a ) { if ( b [ a ] ) q ( a , true ) ; else { var g = c [ a ] || ( c [ a ] = [ ] ) ; g . push ( q ) ; if ( ! ( g . length >
1 ) ) { var d = new CKEDITOR . dom . element ( "script" ) ; d . setAttributes ( { type : "text/javascript" , src : a } ) ; if ( f ) if ( CKEDITOR . env . ie ) d . $ . onreadystatechange = function ( ) { if ( d . $ . readyState == "loaded" || d . $ . readyState == "complete" ) { d . $ . onreadystatechange = null ; r ( a , true ) } } ; else { d . $ . onload = function ( ) { setTimeout ( function ( ) { r ( a , true ) } , 0 ) } ; d . $ . onerror = function ( ) { r ( a , false ) } } d . appendTo ( CKEDITOR . document . getHead ( ) ) } } } ; e && CKEDITOR . document . getDocumentElement ( ) . setStyle ( "cursor" , "wait" ) ; for ( var g = 0 ; g < j ; g ++ ) l ( a [ g ] ) } } , queue : function ( ) { function a ( ) { var a ;
CKEDITOR . scriptLoader = function ( ) { var b = { } , c = { } ; return { load : function ( a , f , d , e ) { var h = typeof a == "string" ; h && ( a = [ a ] ) ; d || ( d = CKEDITOR ) ; var j = a . length , i = [ ] , l = [ ] , m = function ( a ) { f && ( h ? f . call ( d , a ) : f . call ( d , i , l ) ) } ; if ( j === 0 ) m ( true ) ; else { var q = function ( a , b ) { ( b ? i : l ) . push ( a ) ; if ( -- j <= 0 ) { e && CKEDITOR . document . getDocumentElement ( ) . removeStyle ( "cursor" ) ; m ( b ) } } , w = function ( a , d ) { b [ a ] = 1 ; var g = c [ a ] ; delete c [ a ] ; for ( var e = 0 ; e < g . length ; e ++ ) g [ e ] ( a , d ) } , k = function ( a ) { if ( b [ a ] ) q ( a , true ) ; else { var d = c [ a ] || ( c [ a ] = [ ] ) ; d . push ( q ) ; if ( ! ( d . length >
1 ) ) { var g = new CKEDITOR . dom . element ( "script" ) ; g . setAttributes ( { type : "text/javascript" , src : a } ) ; if ( f ) if ( CKEDITOR . env . ie ) g . $ . onreadystatechange = function ( ) { if ( g . $ . readyState == "loaded" || g . $ . readyState == "complete" ) { g . $ . onreadystatechange = null ; w ( a , true ) } } ; else { g . $ . onload = function ( ) { setTimeout ( function ( ) { w ( a , true ) } , 0 ) } ; g . $ . onerror = function ( ) { w ( a , false ) } } g . appendTo ( CKEDITOR . document . getHead ( ) ) } } } ; e && CKEDITOR . document . getDocumentElement ( ) . setStyle ( "cursor" , "wait" ) ; for ( var g = 0 ; g < j ; g ++ ) k ( a [ g ] ) } } , queue : function ( ) { function a ( ) { var a ;
( a = b [ 0 ] ) && this . load ( a . scriptUrl , a . callback , CKEDITOR , 0 ) } var b = [ ] ; return function ( c , e ) { var h = this ; b . push ( { scriptUrl : c , callback : function ( ) { e && e . apply ( this , arguments ) ; b . shift ( ) ; a . call ( h ) } } ) ; b . length == 1 && a . call ( this ) } } ( ) } } ( ) ; CKEDITOR . resourceManager = function ( b , c ) { this . basePath = b ; this . fileName = c ; this . registered = { } ; this . loaded = { } ; this . externals = { } ; this . _ = { waitingList : { } } } ;
CKEDITOR . resourceManager . prototype = { add : function ( b , c ) { if ( this . registered [ b ] ) throw '[CKEDITOR.resourceManager.add] The resource name "' + b + '" is already registered.' ; var a = this . registered [ b ] = c || { } ; a . name = b ; a . path = this . getPath ( b ) ; CKEDITOR . fire ( b + CKEDITOR . tools . capitalize ( this . fileName ) + "Ready" , a ) ; return this . get ( b ) } , get : function ( b ) { return this . registered [ b ] || null } , getPath : function ( b ) { var c = this . externals [ b ] ; return CKEDITOR . getUrl ( c && c . dir || this . basePath + b + "/" ) } , getFilePath : function ( b ) { var c = this . externals [ b ] ;
return CKEDITOR . getUrl ( this . getPath ( b ) + ( c && typeof c . file == "string" ? c . file : this . fileName + ".js" ) ) } , addExternal : function ( b , c , a ) { for ( var b = b . split ( "," ) , f = 0 ; f < b . length ; f ++ ) this . externals [ b [ f ] ] = { dir : c , file : a } } , load : function ( b , c , a ) { CKEDITOR . tools . isArray ( b ) || ( b = b ? [ b ] : [ ] ) ; for ( var f = this . loaded , d = this . registered , e = [ ] , h = { } , j = { } , i = 0 ; i < b . length ; i ++ ) { var k = b [ i ] ; if ( k ) if ( ! f [ k ] && ! d [ k ] ) { var m = this . getFilePath ( k ) ; e . push ( m ) ; m in h || ( h [ m ] = [ ] ) ; h [ m ] . push ( k ) } else j [ k ] = this . get ( k ) } CKEDITOR . scriptLoader . load ( e , function ( b ,
d ) { if ( d . length ) throw '[CKEDITOR.resourceManager.load] Resource name "' + h [ d [ 0 ] ] . join ( "," ) + '" was not found at "' + d [ 0 ] + '".' ; for ( var e = 0 ; e < b . length ; e ++ ) for ( var g = h [ b [ e ] ] , p = 0 ; p < g . length ; p ++ ) { var i = g [ p ] ; j [ i ] = this . get ( i ) ; f [ i ] = 1 } c . call ( a , j ) } , this ) } } ; CKEDITOR . plugins = new CKEDITOR . resourceManager ( "plugins/" , "plugin" ) ;
CKEDITOR . plugins . load = CKEDITOR . tools . override ( CKEDITOR . plugins . load , function ( b ) { var c = { } ; return function ( a , f , d ) { var e = { } , h = function ( a ) { b . call ( this , a , function ( a ) { CKEDITOR . tools . extend ( e , a ) ; var b = [ ] , j ; for ( j in a ) { var q = a [ j ] , r = q && q . requires ; if ( ! c [ j ] ) { if ( q . icons ) for ( var l = q . icons . split ( "," ) , g = l . length ; g -- ; ) CKEDITOR . skin . addIcon ( l [ g ] , q . path + "icons/" + ( CKEDITOR . env . hidpi && q . hidpi ? "hidpi/" : "" ) + l [ g ] + ".png" ) ; c [ j ] = 1 } if ( r ) { r . split && ( r = r . split ( "," ) ) ; for ( q = 0 ; q < r . length ; q ++ ) e [ r [ q ] ] || b . push ( r [ q ] ) } } if ( b . length ) h . call ( this ,
return CKEDITOR . getUrl ( this . getPath ( b ) + ( c ? c . file : this . fileName + ".js" ) ) } , addExternal : function ( b , c , a ) { for ( var b = b . split ( "," ) , f = 0 ; f < b . length ; f ++ ) { var d = b [ f ] ; a || ( c = c . replace ( /[^\/]+$/ , function ( b ) { a = b ; return "" } ) ) ; this . externals [ d ] = { dir : c , file : a || this . fileName + ".js" } } } , load : function ( b , c , a ) { CKEDITOR . tools . isArray ( b ) || ( b = b ? [ b ] : [ ] ) ; for ( var f = this . loaded , d = this . registered , e = [ ] , h = { } , j = { } , i = 0 ; i < b . length ; i ++ ) { var l = b [ i ] ; if ( l ) if ( ! f [ l ] && ! d [ l ] ) { var m = this . getFilePath ( l ) ; e . push ( m ) ; m in h || ( h [ m ] = [ ] ) ; h [ m ] . push ( l ) } else j [ l ] =
this . get ( l ) } CKEDITOR . scriptLoader . load ( e , function ( b , d ) { if ( d . length ) throw '[CKEDITOR.resourceManager.load] Resource name "' + h [ d [ 0 ] ] . join ( "," ) + '" was not found at "' + d [ 0 ] + '".' ; for ( var e = 0 ; e < b . length ; e ++ ) for ( var g = h [ b [ e ] ] , p = 0 ; p < g . length ; p ++ ) { var i = g [ p ] ; j [ i ] = this . get ( i ) ; f [ i ] = 1 } c . call ( a , j ) } , this ) } } ; CKEDITOR . plugins = new CKEDITOR . resourceManager ( "plugins/" , "plugin" ) ;
CKEDITOR . plugins . load = CKEDITOR . tools . override ( CKEDITOR . plugins . load , function ( b ) { var c = { } ; return function ( a , f , d ) { var e = { } , h = function ( a ) { b . call ( this , a , function ( a ) { CKEDITOR . tools . extend ( e , a ) ; var b = [ ] , j ; for ( j in a ) { var q = a [ j ] , w = q && q . requires ; if ( ! c [ j ] ) { if ( q . icons ) for ( var k = q . icons . split ( "," ) , g = k . length ; g -- ; ) CKEDITOR . skin . addIcon ( k [ g ] , q . path + "icons/" + ( CKEDITOR . env . hidpi && q . hidpi ? "hidpi/" : "" ) + k [ g ] + ".png" ) ; c [ j ] = 1 } if ( w ) { w . split && ( w = w . split ( "," ) ) ; for ( q = 0 ; q < w . length ; q ++ ) e [ w [ q ] ] || b . push ( w [ q ] ) } } if ( b . length ) h . call ( this ,
b ) ; else { for ( j in e ) { q = e [ j ] ; if ( q . onLoad && ! q . onLoad . _called ) { q . onLoad ( ) === false && delete e [ j ] ; q . onLoad . _called = 1 } } f && f . call ( d || window , e ) } } , this ) } ; h . call ( this , a ) } } ) ; CKEDITOR . plugins . setLang = function ( b , c , a ) { var f = this . get ( b ) , b = f . langEntries || ( f . langEntries = { } ) , f = f . lang || ( f . lang = [ ] ) ; f . split && ( f = f . split ( "," ) ) ; CKEDITOR . tools . indexOf ( f , c ) == - 1 && f . push ( c ) ; b [ c ] = a } ; CKEDITOR . ui = function ( b ) { if ( b . ui ) return b . ui ; this . items = { } ; this . instances = { } ; this . editor = b ; this . _ = { handlers : { } } ; return this } ;
CKEDITOR . ui . prototype = { add : function ( b , c , a ) { a . name = b . toLowerCase ( ) ; var f = this . items [ b ] = { type : c , command : a . command || null , args : Array . prototype . slice . call ( arguments , 2 ) } ; CKEDITOR . tools . extend ( f , a ) } , get : function ( b ) { return this . instances [ b ] } , create : function ( b ) { var c = this . items [ b ] , a = c && this . _ . handlers [ c . type ] , f = c && c . command && this . editor . getCommand ( c . command ) , a = a && a . create . apply ( this , c . args ) ; this . instances [ b ] = a ; f && f . uiItems . push ( a ) ; if ( a && ! a . type ) a . type = c . type ; return a } , addHandler : function ( b , c ) { this . _ . handlers [ b ] =
c } , space : function ( b ) { return CKEDITOR . document . getById ( this . spaceId ( b ) ) } , spaceId : function ( b ) { return this . editor . id + "_" + b } } ; CKEDITOR . event . implementOn ( CKEDITOR . ui ) ;
( function ( ) { function b ( b , e , f ) { CKEDITOR . event . call ( this ) ; b = b && CKEDITOR . tools . clone ( b ) ; if ( e !== void 0 ) { if ( e instanceof CKEDITOR . dom . element ) { if ( ! f ) throw Error ( "One of the element modes must be specified." ) ; } else throw Error ( "Expect element of type CKEDITOR.dom.element." ) ; if ( CKEDITOR . env . ie && CKEDITOR . env . quirks && f == CKEDITOR . ELEMENT _MODE _INLINE ) throw Error ( "Inline element mode is not supported on IE quirks." ) ; if ( ! ( f == CKEDITOR . ELEMENT _MODE _INLINE ? e . is ( CKEDITOR . dtd . $editable ) || e . is ( "textarea" ) : f == CKEDITOR . ELEMENT _MODE _REPLACE ?
! e . is ( CKEDITOR . dtd . $nonBodyContent ) : 1 ) ) 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 || c ( ) ; 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" , a ) ; this . on ( "selectionChange" , d ) ; this . on ( "mode" , a ) ; this . on ( "instanceReady" , function ( ) { this . config . startupFocus && this . focus ( ) } ) ; CKEDITOR . fire ( "instanceCreated" , null , this ) ; CKEDITOR . add ( this ) ; CKEDITOR . tools . setTimeout ( function ( ) { h ( this , b ) } , 0 , this ) } function c ( ) { do var a = "editor" + ++ r ; while ( CKEDITOR . instances [ a ] ) ; return a } function a ( ) { var a = this . commands , b ; for ( b in a ) f ( this , a [ b ] ) }
function f ( a , b ) { b [ b . startDisabled ? "disable" : a . readOnly && ! b . readOnly ? "disable" : b . modes [ a . mode ] ? "enable" : "disable" ] ( ) } function d ( a ) { var b = this . commands , c = a . editor , d = a . data . path , e ; for ( e in b ) { a = b [ e ] ; a . contextSensitive && a . refresh ( c , d ) } } function e ( a ) { var b = a . config . customConfig ; if ( ! b ) return false ; var b = CKEDITOR . getUrl ( b ) , c = l [ b ] || ( l [ b ] = { } ) ; if ( c . fn ) { c . fn . call ( a , a . config ) ; ( CKEDITOR . getUrl ( a . config . customConfig ) == b || ! e ( a ) ) && a . fireOnce ( "customConfigLoaded" ) } else CKEDITOR . scriptLoader . queue ( b , function ( ) { c . fn =
this . focusManager = new CKEDITOR . focusManager ( this ) ; this . keystrokeHandler = new CKEDITOR . keystrokeHandler ( this ) ; this . on ( "readOnly" , a ) ; this . on ( "selectionChange" , d ) ; this . on ( "mode" , a ) ; this . on ( "instanceReady" , function ( ) { this . config . startupFocus && this . focus ( ) } ) ; CKEDITOR . fire ( "instanceCreated" , null , this ) ; CKEDITOR . add ( this ) ; CKEDITOR . tools . setTimeout ( function ( ) { h ( this , b ) } , 0 , this ) } function c ( ) { do var a = "editor" + ++ w ; while ( CKEDITOR . instances [ a ] ) ; return a } function a ( ) { var a = this . commands , b ; for ( b in a ) f ( this , a [ b ] ) }
function f ( a , b ) { b [ b . startDisabled ? "disable" : a . readOnly && ! b . readOnly ? "disable" : b . modes [ a . mode ] ? "enable" : "disable" ] ( ) } function d ( a ) { var b = this . commands , c = a . editor , d = a . data . path , e ; for ( e in b ) { a = b [ e ] ; a . contextSensitive && a . refresh ( c , d ) } } function e ( a ) { var b = a . config . customConfig ; if ( ! b ) return false ; var b = CKEDITOR . getUrl ( b ) , c = k [ b ] || ( k [ b ] = { } ) ; if ( c . fn ) { c . fn . call ( a , a . config ) ; ( CKEDITOR . getUrl ( a . config . customConfig ) == b || ! e ( a ) ) && a . fireOnce ( "customConfigLoaded" ) } else CKEDITOR . scriptLoader . queue ( b , function ( ) { c . fn =
CKEDITOR . editorConfig ? CKEDITOR . editorConfig : function ( ) { } ; e ( a ) } ) ; return true } function h ( a , b ) { a . on ( "customConfigLoaded" , function ( ) { if ( b ) { if ( b . on ) for ( var c in b . on ) a . on ( c , b . on [ c ] ) ; CKEDITOR . tools . extend ( a . config , b , true ) ; delete a . config . on } a . readOnly = ! ( ! a . config . readOnly && ! ( a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? a . element . is ( "textarea" ) ? a . element . hasAttribute ( "disabled" ) : a . element . isReadOnly ( ) : a . elementMode == CKEDITOR . ELEMENT _MODE _REPLACE && a . element . hasAttribute ( "disabled" ) ) ) ; a . blockless = a . elementMode ==
CKEDITOR . ELEMENT _MODE _INLINE ? ! ( a . element . is ( "textarea" ) || CKEDITOR . dtd [ a . element . getName ( ) ] . p ) : false ; a . tabIndex = a . config . tabIndex || a . element && a . element . getAttribute ( "tabindex" ) || 0 ; if ( a . config . skin ) CKEDITOR . skinName = a . config . skin ; a . fireOnce ( "configLoaded" ) ; a . dataProcessor = new CKEDITOR . htmlDataProcessor ( a ) ; a . filter = new CKEDITOR . filter ( a ) ; j ( a ) } ) ; if ( b && b . customConfig != void 0 ) a . config . customConfig = b . customConfig ; e ( a ) || a . fireOnce ( "customConfigLoaded" ) } function j ( a ) { CKEDITOR . skin . loadPart ( "editor" , function ( ) { i ( a ) } ) }
function i ( 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 = typeof d == "string" || d === false ? d : [ a . lang . editor , a . name ] . join ( ", " ) ; if ( CKEDITOR . env . gecko && CKEDITOR . env . version < 10900 && a . lang . dir == "rtl" ) a . lang . dir = "ltr" ; if ( ! a . config . contentsLangDirection ) a . config . contentsLangDirection = a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? a . element . getDirection ( 1 ) : a . lang . dir ; a . fire ( "langLoaded" ) ; k ( a ) } ) } function k ( a ) { a . getStylesSet ( function ( b ) { a . once ( "loaded" ,
function ( ) { a . fire ( "stylesSet" , { styles : b } ) } , null , null , 1 ) ; m ( a ) } ) } function m ( a ) { var b = a . config , c = b . plugins , d = b . extraPlugins , e = b . removePlugins ; if ( d ) var f = RegExp ( "(?:^|,)(?:" + d . replace ( /\s*,\s*/g , "|" ) + ")(?=,|$)" , "g" ) , c = c . replace ( f , "" ) , c = c + ( "," + d ) ; if ( e ) var h = RegExp ( "(?:^|,)(?:" + e . replace ( /\s*,\s*/g , "|" ) + ")(?=,|$)" , "g" ) , c = c . replace ( h , "" ) ; CKEDITOR . env . air && ( c = c + ",adobeair" ) ; CKEDITOR . plugins . load ( c . split ( "," ) , function ( c ) { var d = [ ] , e = [ ] , f = [ ] ; a . plugins = c ; for ( var l in c ) { var q = c [ l ] , n = q . lang , o = null , i = q . requires ,
j ; CKEDITOR . tools . isArray ( i ) && ( i = i . join ( "," ) ) ; if ( i && ( j = i . match ( h ) ) ) for ( ; i = j . pop ( ) ; ) CKEDITOR . tools . setTimeout ( function ( a , b ) { throw Error ( 'Plugin "' + a . replace ( "," , "" ) + '" cannot be removed from the plugins list, because it\'s required by "' + b + '" plugin.' ) ; } , 0 , null , [ i , l ] ) ; if ( n && ! a . lang [ l ] ) { n . split && ( n = n . split ( "," ) ) ; if ( CKEDITOR . tools . indexOf ( n , a . langCode ) >= 0 ) o = a . langCode ; else { o = a . langCode . replace ( /-.*/ , "" ) ; o = o != a . langCode && CKEDITOR . tools . indexOf ( n , o ) >= 0 ? o : CKEDITOR . tools . indexOf ( n , "en" ) >= 0 ? "en" : n [ 0 ] } if ( ! q . langEntries ||
! q . langEntries [ o ] ) f . push ( CKEDITOR . getUrl ( q . path + "lang/" + o + ".js" ) ) ; else { a . lang [ l ] = q . langEntries [ o ] ; o = null } } e . push ( o ) ; d . push ( q ) } CKEDITOR . scriptLoader . load ( f , function ( ) { for ( var c = [ "beforeInit" , "init" , "afterInit" ] , f = 0 ; f < c . length ; f ++ ) for ( var h = 0 ; h < d . length ; h ++ ) { var l = d [ h ] ; f === 0 && ( e [ h ] && l . lang && l . langEntries ) && ( a . lang [ l . name ] = l . langEntries [ e [ h ] ] ) ; if ( l [ c [ f ] ] ) l [ c [ f ] ] ( a ) } a . fireOnce ( "pluginsLoaded" ) ; b . keystrokes && a . setKeystroke ( a . config . keystrokes ) ; for ( h = 0 ; h < a . config . blockedKeystrokes . length ; h ++ ) a . keystrokeHandler . blockedKeystrokes [ a . config . blockedKeystrokes [ h ] ] =
1 ; a . status = "loaded" ; a . fireOnce ( "loaded" ) ; CKEDITOR . fire ( "instanceLoaded" , null , a ) } ) } ) } function q ( ) { 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 true } return false } b . prototype = CKEDITOR . editor . prototype ; CKEDITOR . editor = b ; var r = 0 , l = { } ; CKEDITOR . tools . extend ( CKEDITOR . editor . prototype , { addCommand : function ( a , b ) { b . name = a . toLowerCase ( ) ; var c = new CKEDITOR . command ( this ,
function i ( 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 = typeof d == "string" || d === false ? d : [ a . lang . editor , a . name ] . join ( ", " ) ; if ( CKEDITOR . env . gecko && CKEDITOR . env . version < 10900 && a . lang . dir == "rtl" ) a . lang . dir = "ltr" ; if ( ! a . config . contentsLangDirection ) a . config . contentsLangDirection = a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? a . element . getDirection ( 1 ) : a . lang . dir ; a . fire ( "langLoaded" ) ; l ( a ) } ) } function l ( a ) { a . getStylesSet ( function ( b ) { a . once ( "loaded" ,
function ( ) { a . fire ( "stylesSet" , { styles : b } ) } , null , null , 1 ) ; m ( a ) } ) } function m ( a ) { var b = a . config , c = b . plugins , d = b . extraPlugins , e = b . removePlugins ; if ( d ) var f = RegExp ( "(?:^|,)(?:" + d . replace ( /\s*,\s*/g , "|" ) + ")(?=,|$)" , "g" ) , c = c . replace ( f , "" ) , c = c + ( "," + d ) ; if ( e ) var h = RegExp ( "(?:^|,)(?:" + e . replace ( /\s*,\s*/g , "|" ) + ")(?=,|$)" , "g" ) , c = c . replace ( h , "" ) ; CKEDITOR . env . air && ( c = c + ",adobeair" ) ; CKEDITOR . plugins . load ( c . split ( "," ) , function ( c ) { var d = [ ] , e = [ ] , f = [ ] ; a . plugins = c ; for ( var k in c ) { var q = c [ k ] , o = q . lang , n = null , i = q . requires ,
j ; CKEDITOR . tools . isArray ( i ) && ( i = i . join ( "," ) ) ; if ( i && ( j = i . match ( h ) ) ) for ( ; i = j . pop ( ) ; ) CKEDITOR . tools . setTimeout ( function ( a , b ) { throw Error ( 'Plugin "' + a . replace ( "," , "" ) + '" cannot be removed from the plugins list, because it\'s required by "' + b + '" plugin.' ) ; } , 0 , null , [ i , k ] ) ; if ( o && ! a . lang [ k ] ) { o . split && ( o = o . split ( "," ) ) ; if ( CKEDITOR . tools . indexOf ( o , a . langCode ) >= 0 ) n = a . langCode ; else { n = a . langCode . replace ( /-.*/ , "" ) ; n = n != a . langCode && CKEDITOR . tools . indexOf ( o , n ) >= 0 ? n : CKEDITOR . tools . indexOf ( o , "en" ) >= 0 ? "en" : o [ 0 ] } if ( ! q . langEntries ||
! q . langEntries [ n ] ) f . push ( CKEDITOR . getUrl ( q . path + "lang/" + n + ".js" ) ) ; else { a . lang [ k ] = q . langEntries [ n ] ; n = null } } e . push ( n ) ; d . push ( q ) } CKEDITOR . scriptLoader . load ( f , function ( ) { for ( var c = [ "beforeInit" , "init" , "afterInit" ] , f = 0 ; f < c . length ; f ++ ) for ( var h = 0 ; h < d . length ; h ++ ) { var k = d [ h ] ; f === 0 && ( e [ h ] && k . lang && k . langEntries ) && ( a . lang [ k . name ] = k . langEntries [ e [ h ] ] ) ; if ( k [ c [ f ] ] ) k [ c [ f ] ] ( a ) } a . fireOnce ( "pluginsLoaded" ) ; b . keystrokes && a . setKeystroke ( a . config . keystrokes ) ; for ( h = 0 ; h < a . config . blockedKeystrokes . length ; h ++ ) a . keystrokeHandler . blockedKeystrokes [ a . config . blockedKeystrokes [ h ] ] =
1 ; a . status = "loaded" ; a . fireOnce ( "loaded" ) ; CKEDITOR . fire ( "instanceLoaded" , null , a ) } ) } ) } function q ( ) { 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 true } return false } b . prototype = CKEDITOR . editor . prototype ; CKEDITOR . editor = b ; var w = 0 , k = { } ; CKEDITOR . tools . extend ( CKEDITOR . editor . prototype , { addCommand : function ( a , b ) { b . name = a . toLowerCase ( ) ; var c = new CKEDITOR . command ( this ,
b ) ; this . mode && f ( this , c ) ; return this . commands [ a ] = c } , _attachToForm : function ( ) { var a = this , b = a . element , c = new CKEDITOR . dom . element ( b . $ . form ) ; if ( b . is ( "textarea" ) && c ) { var d = function ( c ) { a . updateElement ( ) ; a . _ . required && ( ! b . getValue ( ) && a . fire ( "required" ) === false ) && c . data . preventDefault ( ) } ; c . on ( "submit" , d ) ; if ( c . $ . submit && c . $ . submit . call && c . $ . submit . apply ) c . $ . submit = CKEDITOR . tools . override ( c . $ . submit , function ( a ) { return function ( ) { d ( ) ; a . apply ? a . apply ( this ) : a ( ) } } ) ; a . on ( "destroy" , function ( ) { c . removeListener ( "submit" ,
d ) } ) } } , destroy : function ( a ) { this . fire ( "beforeDestroy" ) ; ! a && q . call ( this ) ; this . editable ( null ) ; this . status = "destroyed" ; this . fire ( "destroy" ) ; this . removeAllListeners ( ) ; CKEDITOR . remove ( this ) ; CKEDITOR . fire ( "instanceDestroyed" , null , this ) } , elementPath : function ( a ) { return ( a = a || this . getSelection ( ) . getStartElement ( ) ) ? 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 } ; if ( c && c . state != CKEDITOR . TRISTATE _DISABLED && this . fire ( "beforeCommandExec" , d ) !== true ) { d . returnValue = c . exec ( d . commandData ) ; if ( ! c . async && this . fire ( "afterCommandExec" , d ) !== true ) return d . returnValue } return false } , getCommand : function ( a ) { return this . commands [ a ] } , getData : function ( a ) { ! a && this . fire ( "beforeGetData" ) ; var b = this . _ . data ; if ( typeof b != "string" ) b = ( b = this . element ) && this . elementMode == CKEDITOR . ELEMENT _MODE _REPLACE ? b . is ( "textarea" ) ? b . getValue ( ) : b . getHtml ( ) : "" ; b = { dataValue : b } ; ! a &&
@@ -229,7 +229,7 @@ a==void 0||a;if(this.readOnly!=a){this.readOnly=a;this.keystrokeHandler.blockedK
this . getSnapshot ( ) } , updateElement : function ( ) { return q . 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 ; if ( 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 ) } } ) } ) ( ) ; 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 : RegExp ( "<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)--\>)|(?:([^\\s>]+)\\s*((?:(?:\"[^\"]*\")|(?:'[^']*')|[^\"'>])*)\\/?>))" , "g" ) } } ;
( function ( ) { var b = /([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g , c = { 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 ( a ) { for ( var f , d , e = 0 , h ; f = this . _ . htmlPartsRegex . exec ( a ) ; ) { d = f . index ; if ( d > e ) { e = a . substring ( e , d ) ; if ( h ) h . push ( e ) ; else this . onText ( e ) } e =
this . _ . htmlPartsRegex . lastIndex ; if ( d = f [ 1 ] ) { d = d . toLowerCase ( ) ; if ( h && CKEDITOR . dtd . $cdata [ d ] ) { this . onCDATA ( h . join ( "" ) ) ; h = null } if ( ! h ) { this . onTagClose ( d ) ; continue } } if ( h ) h . push ( f [ 0 ] ) ; else if ( d = f [ 3 ] ) { d = d . toLowerCase ( ) ; if ( ! /="/ . test ( d ) ) { var j = { } , i ; f = f [ 4 ] ; var k = ! ! ( f && f . charAt ( f . length - 1 ) == "/" ) ; if ( f ) for ( ; i = b . exec ( f ) ; ) { var m = i [ 1 ] . toLowerCase ( ) ; i = i [ 2 ] || i [ 3 ] || i [ 4 ] || "" ; j [ m ] = ! i && c [ m ] ? m : i } this . onTagOpen ( d , j , k ) ; ! h && CKEDITOR . dtd . $cdata [ d ] && ( h = [ ] ) } } else if ( d = f [ 2 ] ) this . onComment ( d ) } if ( a . length > e ) this . onText ( a . substring ( e ,
this . _ . htmlPartsRegex . lastIndex ; if ( d = f [ 1 ] ) { d = d . toLowerCase ( ) ; if ( h && CKEDITOR . dtd . $cdata [ d ] ) { this . onCDATA ( h . join ( "" ) ) ; h = null } if ( ! h ) { this . onTagClose ( d ) ; continue } } if ( h ) h . push ( f [ 0 ] ) ; else if ( d = f [ 3 ] ) { d = d . toLowerCase ( ) ; if ( ! /="/ . test ( d ) ) { var j = { } , i ; f = f [ 4 ] ; var l = ! ! ( f && f . charAt ( f . length - 1 ) == "/" ) ; if ( f ) for ( ; i = b . exec ( f ) ; ) { var m = i [ 1 ] . toLowerCase ( ) ; i = i [ 2 ] || i [ 3 ] || i [ 4 ] || "" ; j [ m ] = ! i && c [ m ] ? m : i } this . onTagOpen ( d , j , l ) ; ! h && CKEDITOR . dtd . $cdata [ d ] && ( h = [ ] ) } } else if ( d = f [ 2 ] ) this . onComment ( d ) } if ( a . length > e ) this . onText ( a . substring ( e ,
a . length ) ) } } } ) ( ) ;
CKEDITOR . htmlParser . basicWriter = CKEDITOR . tools . createClass ( { $ : function ( ) { this . _ = { output : [ ] } } , proto : { openTag : function ( b ) { this . _ . output . push ( "<" , b ) } , openTagClose : function ( b , c ) { c ? this . _ . output . push ( " />" ) : this . _ . output . push ( ">" ) } , attribute : function ( b , c ) { typeof c == "string" && ( c = CKEDITOR . tools . htmlEncodeAttr ( c ) ) ; this . _ . output . push ( " " , b , '="' , c , '"' ) } , closeTag : function ( b ) { this . _ . output . push ( "</" , b , ">" ) } , text : function ( b ) { this . _ . output . push ( b ) } , comment : function ( b ) { this . _ . output . push ( "<\!--" , b , "--\>" ) } , write : function ( b ) { this . _ . output . push ( b ) } ,
reset : function ( ) { this . _ . output = [ ] ; this . _ . indent = false } , getHtml : function ( b ) { var c = this . _ . output . join ( "" ) ; b && this . reset ( ) ; return c } } } ) ; "use strict" ;
@@ -238,39 +238,39 @@ a=CKEDITOR.tools.indexOf(c,b),f=b.next;c.splice(a+1,0,this);this.next=b.next;thi
CKEDITOR . htmlParser . comment . prototype = CKEDITOR . tools . extend ( new CKEDITOR . htmlParser . node , { type : CKEDITOR . NODE _COMMENT , filter : function ( b ) { var c = this . value ; if ( ! ( c = b . onComment ( c , this ) ) ) { this . remove ( ) ; return false } if ( typeof c != "string" ) { this . replaceWith ( c ) ; return false } this . value = c ; return true } , writeHtml : function ( b , c ) { c && this . filter ( c ) ; b . comment ( this . value ) } } ) ; "use strict" ;
( function ( ) { CKEDITOR . htmlParser . text = function ( b ) { this . value = b ; this . _ = { isBlockLike : false } } ; CKEDITOR . htmlParser . text . prototype = CKEDITOR . tools . extend ( new CKEDITOR . htmlParser . node , { type : CKEDITOR . NODE _TEXT , filter : function ( b ) { if ( ! ( this . value = b . onText ( this . value , this ) ) ) { this . remove ( ) ; return false } } , writeHtml : function ( b , c ) { c && this . filter ( c ) ; b . text ( this . value ) } } ) } ) ( ) ; "use strict" ;
( function ( ) { CKEDITOR . htmlParser . cdata = function ( b ) { this . value = b } ; CKEDITOR . htmlParser . cdata . prototype = CKEDITOR . tools . extend ( new CKEDITOR . htmlParser . node , { type : CKEDITOR . NODE _TEXT , filter : function ( ) { } , writeHtml : function ( b ) { b . write ( this . value ) } } ) } ) ( ) ; "use strict" ; CKEDITOR . htmlParser . fragment = function ( ) { this . children = [ ] ; this . parent = null ; this . _ = { isBlockLike : true , hasInlineStarted : false } } ;
( function ( ) { function b ( a ) { return a . name == "a" && a . attributes . href || CKEDITOR . dtd . $removeEmpty [ a . name ] } var c = CKEDITOR . tools . extend ( { table : 1 , ul : 1 , ol : 1 , dl : 1 } , CKEDITOR . dtd . table , CKEDITOR . dtd . ul , CKEDITOR . dtd . ol , CKEDITOR . dtd . dl ) , a = { ol : 1 , ul : 1 } , f = CKEDITOR . tools . extend ( { } , { html : 1 } , CKEDITOR . dtd . html , CKEDITOR . dtd . body , CKEDITOR . dtd . head , { style : 1 , script : 1 } ) ; CKEDITOR . htmlParser . fragment . fromHtml = function ( d , e , h ) { function j ( a ) { var b ; if ( p . length > 0 ) for ( var c = 0 ; c < p . length ; c ++ ) { var d = p [ c ] , e = d . name , g = CKEDITOR . dtd [ e ] , f = u . name &&
CKEDITOR . dtd [ u . name ] ; if ( ( ! f || f [ e ] ) && ( ! a || ! g || g [ a ] || ! CKEDITOR . dtd [ a ] ) ) { if ( ! b ) { i ( ) ; b = 1 } d = d . clone ( ) ; d . parent = u ; u = d ; p . splice ( c , 1 ) ; c -- } else if ( e == u . name ) { m ( u , u . parent , 1 ) ; c -- } } } function i ( ) { for ( ; v . length ; ) m ( v . shift ( ) , u ) } function k ( a ) { if ( a . _ . isBlockLike && a . name != "pre" && a . name != "textarea" ) { var b = a . children . length , c = a . children [ b - 1 ] , d ; if ( c && c . type == CKEDITOR . NODE _TEXT ) ( d = CKEDITOR . tools . rtrim ( c . value ) ) ? c . value = d : a . children . length = b - 1 } } function m ( a , c , d ) { var c = c || u || g , e = u ; if ( a . previous === void 0 ) { if ( q ( c , a ) ) { u = c ;
l . onTagOpen ( h , { } ) ; a . returnPoint = c = u } k ( a ) ; ( ! b ( a ) || a . children . length ) && c . add ( a ) ; a . name == "pre" && ( F = false ) ; a . name == "textarea" && ( o = false ) } if ( a . returnPoint ) { u = a . returnPoint ; delete a . returnPoint } else u = d ? c : e } function q ( a , b ) { if ( ( a == g || a . name == "body" ) && h && ( ! a . name || CKEDITOR . dtd [ a . name ] [ h ] ) ) { var c , d ; return ( c = b . attributes && ( d = b . attributes [ "data-cke-real-element-type" ] ) ? d : b . name ) && c in CKEDITOR . dtd . $inline && ! ( c in CKEDITOR . dtd . head ) && ! b . isOrphan || b . type == CKEDITOR . NODE _TEXT } } function r ( a , b ) { return a in CKEDITOR . dtd . $listItem ||
a in CKEDITOR . dtd . $tableContent ? a == b || a == "dt" && b == "dd" || a == "dd" && b == "dt" : false } var l = new CKEDITOR . htmlParser , g = e instanceof CKEDITOR . htmlParser . element ? e : typeof e == "string" ? new CKEDITOR . htmlParser . element ( e ) : new CKEDITOR . htmlParser . fragment , p = [ ] , v = [ ] , u = g , o = g . name == "textarea" , F = g . name == "pre" ; l . onTagOpen = function ( d , e , g , h ) { e = new CKEDITOR . htmlParser . element ( d , e ) ; if ( e . isUnknown && g ) e . isEmpty = true ; e . isOptionalClose = h ; if ( b ( e ) ) p . push ( e ) ; else { if ( d == "pre" ) F = true ; else { if ( d == "br" && F ) { u . add ( new CKEDITOR . htmlParser . text ( "\n" ) ) ;
return } d == "textarea" && ( o = true ) } if ( d == "br" ) v . push ( e ) ; else { for ( ; ; ) { h = ( g = u . name ) ? CKEDITOR . dtd [ g ] || ( u . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : f ; if ( ! e . isUnknown && ! u . isUnknown && ! h [ d ] ) if ( u . isOptionalClose ) l . onTagClose ( g ) ; else if ( d in a && g in a ) { g = u . children ; ( g = g [ g . length - 1 ] ) && g . name == "li" || m ( g = new CKEDITOR . htmlParser . element ( "li" ) , u ) ; ! e . returnPoint && ( e . returnPoint = u ) ; u = g } else if ( d in CKEDITOR . dtd . $listItem && ! r ( d , g ) ) l . onTagOpen ( d == "li" ? "ul" : "dl" , { } , 0 , 1 ) ; else if ( g in c && ! r ( d , g ) ) { ! e . returnPoint &&
( e . returnPoint = u ) ; u = u . parent } else { g in CKEDITOR . dtd . $inline && p . unshift ( u ) ; if ( u . parent ) m ( u , u . parent , 1 ) ; else { e . isOrphan = 1 ; break } } else break } j ( d ) ; i ( ) ; e . parent = u ; e . isEmpty ? m ( e ) : u = e } } } ; l . onTagClose = function ( a ) { for ( var b = p . length - 1 ; b >= 0 ; b -- ) if ( a == p [ b ] . name ) { p . splice ( b , 1 ) ; return } for ( var c = [ ] , d = [ ] , e = u ; e != g && e . name != a ; ) { e . _ . isBlockLike || d . unshift ( e ) ; c . push ( e ) ; e = e . returnPoint || e . parent } if ( e != g ) { for ( b = 0 ; b < c . length ; b ++ ) { var f = c [ b ] ; m ( f , f . parent ) } u = e ; e . _ . isBlockLike && i ( ) ; m ( e , e . parent ) ; if ( e == u ) u = u . parent ; p = p . concat ( d ) } a ==
"body" && ( h = false ) } ; l . onText = function ( b ) { if ( ( ! u . _ . hasInlineStarted || v . length ) && ! F && ! o ) { b = CKEDITOR . tools . ltrim ( b ) ; if ( b . length === 0 ) return } var d = u . name , e = d ? CKEDITOR . dtd [ d ] || ( u . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : f ; if ( ! o && ! e [ "#" ] && d in c ) { l . onTagOpen ( d in a ? "li" : d == "dl" ? "dd" : d == "table" ? "tr" : d == "tr" ? "td" : "" ) ; l . onText ( b ) } else { i ( ) ; j ( ) ; ! F && ! o && ( b = b . replace ( /[\t\r\n ]{2,}|[\t\r\n]/g , " " ) ) ; b = new CKEDITOR . htmlParser . text ( b ) ; if ( q ( u , b ) ) this . onTagOpen ( h , { } , 0 , 1 ) ; u . add ( b ) } } ; l . onCDATA = function ( a ) { u . add ( new CKEDITOR . htmlParser . cdata ( a ) ) } ;
l . onComment = function ( a ) { i ( ) ; j ( ) ; u . add ( new CKEDITOR . htmlParser . comment ( a ) ) } ; l . parse ( d ) ; for ( i ( ! CKEDITOR . env . ie && 1 ) ; u != g ; ) m ( u , u . parent , 1 ) ; k ( g ) ; return g } ; CKEDITOR . htmlParser . fragment . prototype = { type : CKEDITOR . NODE _DOCUMENT _FRAGMENT , add : function ( a , b ) { isNaN ( b ) && ( b = this . children . length ) ; var c = b > 0 ? this . children [ b - 1 ] : null ; if ( c ) { if ( a . _ . isBlockLike && c . type == CKEDITOR . NODE _TEXT ) { c . value = CKEDITOR . tools . rtrim ( c . value ) ; if ( c . value . length === 0 ) { this . children . pop ( ) ; this . add ( a ) ; return } } c . next = a } a . previous = c ; a . parent = this ;
( function ( ) { function b ( a ) { return a . name == "a" && a . attributes . href || CKEDITOR . dtd . $removeEmpty [ a . name ] } var c = CKEDITOR . tools . extend ( { table : 1 , ul : 1 , ol : 1 , dl : 1 } , CKEDITOR . dtd . table , CKEDITOR . dtd . ul , CKEDITOR . dtd . ol , CKEDITOR . dtd . dl ) , a = { ol : 1 , ul : 1 } , f = CKEDITOR . tools . extend ( { } , { html : 1 } , CKEDITOR . dtd . html , CKEDITOR . dtd . body , CKEDITOR . dtd . head , { style : 1 , script : 1 } ) ; CKEDITOR . htmlParser . fragment . fromHtml = function ( d , e , h ) { function j ( a ) { var b ; if ( p . length > 0 ) for ( var c = 0 ; c < p . length ; c ++ ) { var d = p [ c ] , e = d . name , g = CKEDITOR . dtd [ e ] , f = t . name &&
CKEDITOR . dtd [ t . name ] ; if ( ( ! f || f [ e ] ) && ( ! a || ! g || g [ a ] || ! CKEDITOR . dtd [ a ] ) ) { if ( ! b ) { i ( ) ; b = 1 } d = d . clone ( ) ; d . parent = t ; t = d ; p . splice ( c , 1 ) ; c -- } else if ( e == t . name ) { m ( t , t . parent , 1 ) ; c -- } } } function i ( ) { for ( ; v . length ; ) m ( v . shift ( ) , t ) } function l ( a ) { if ( a . _ . isBlockLike && a . name != "pre" && a . name != "textarea" ) { var b = a . children . length , c = a . children [ b - 1 ] , d ; if ( c && c . type == CKEDITOR . NODE _TEXT ) ( d = CKEDITOR . tools . rtrim ( c . value ) ) ? c . value = d : a . children . length = b - 1 } } function m ( a , c , d ) { var c = c || t || g , e = t ; if ( a . previous === void 0 ) { if ( q ( c , a ) ) { t = c ;
k . onTagOpen ( h , { } ) ; a . returnPoint = c = t } l ( a ) ; ( ! b ( a ) || a . children . length ) && c . add ( a ) ; a . name == "pre" && ( E = false ) ; a . name == "textarea" && ( n = false ) } if ( a . returnPoint ) { t = a . returnPoint ; delete a . returnPoint } else t = d ? c : e } function q ( a , b ) { if ( ( a == g || a . name == "body" ) && h && ( ! a . name || CKEDITOR . dtd [ a . name ] [ h ] ) ) { var c , d ; return ( c = b . attributes && ( d = b . attributes [ "data-cke-real-element-type" ] ) ? d : b . name ) && c in CKEDITOR . dtd . $inline && ! ( c in CKEDITOR . dtd . head ) && ! b . isOrphan || b . type == CKEDITOR . NODE _TEXT } } function w ( a , b ) { return a in CKEDITOR . dtd . $listItem ||
a in CKEDITOR . dtd . $tableContent ? a == b || a == "dt" && b == "dd" || a == "dd" && b == "dt" : false } var k = new CKEDITOR . htmlParser , g = e instanceof CKEDITOR . htmlParser . element ? e : typeof e == "string" ? new CKEDITOR . htmlParser . element ( e ) : new CKEDITOR . htmlParser . fragment , p = [ ] , v = [ ] , t = g , n = g . name == "textarea" , E = g . name == "pre" ; k . onTagOpen = function ( d , e , g , h ) { e = new CKEDITOR . htmlParser . element ( d , e ) ; if ( e . isUnknown && g ) e . isEmpty = true ; e . isOptionalClose = h ; if ( b ( e ) ) p . push ( e ) ; else { if ( d == "pre" ) E = true ; else { if ( d == "br" && E ) { t . add ( new CKEDITOR . htmlParser . text ( "\n" ) ) ;
return } d == "textarea" && ( n = true ) } if ( d == "br" ) v . push ( e ) ; else { for ( ; ; ) { h = ( g = t . name ) ? CKEDITOR . dtd [ g ] || ( t . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : f ; if ( ! e . isUnknown && ! t . isUnknown && ! h [ d ] ) if ( t . isOptionalClose ) k . onTagClose ( g ) ; else if ( d in a && g in a ) { g = t . children ; ( g = g [ g . length - 1 ] ) && g . name == "li" || m ( g = new CKEDITOR . htmlParser . element ( "li" ) , t ) ; ! e . returnPoint && ( e . returnPoint = t ) ; t = g } else if ( d in CKEDITOR . dtd . $listItem && ! w ( d , g ) ) k . onTagOpen ( d == "li" ? "ul" : "dl" , { } , 0 , 1 ) ; else if ( g in c && ! w ( d , g ) ) { ! e . returnPoint &&
( e . returnPoint = t ) ; t = t . parent } else { g in CKEDITOR . dtd . $inline && p . unshift ( t ) ; if ( t . parent ) m ( t , t . parent , 1 ) ; else { e . isOrphan = 1 ; break } } else break } j ( d ) ; i ( ) ; e . parent = t ; e . isEmpty ? m ( e ) : t = e } } } ; k . onTagClose = function ( a ) { for ( var b = p . length - 1 ; b >= 0 ; b -- ) if ( a == p [ b ] . name ) { p . splice ( b , 1 ) ; return } for ( var c = [ ] , d = [ ] , e = t ; e != g && e . name != a ; ) { e . _ . isBlockLike || d . unshift ( e ) ; c . push ( e ) ; e = e . returnPoint || e . parent } if ( e != g ) { for ( b = 0 ; b < c . length ; b ++ ) { var f = c [ b ] ; m ( f , f . parent ) } t = e ; e . _ . isBlockLike && i ( ) ; m ( e , e . parent ) ; if ( e == t ) t = t . parent ; p = p . concat ( d ) } a ==
"body" && ( h = false ) } ; k . onText = function ( b ) { if ( ( ! t . _ . hasInlineStarted || v . length ) && ! E && ! n ) { b = CKEDITOR . tools . ltrim ( b ) ; if ( b . length === 0 ) return } var d = t . name , e = d ? CKEDITOR . dtd [ d ] || ( t . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : f ; if ( ! n && ! e [ "#" ] && d in c ) { k . onTagOpen ( d in a ? "li" : d == "dl" ? "dd" : d == "table" ? "tr" : d == "tr" ? "td" : "" ) ; k . onText ( b ) } else { i ( ) ; j ( ) ; ! E && ! n && ( b = b . replace ( /[\t\r\n ]{2,}|[\t\r\n]/g , " " ) ) ; b = new CKEDITOR . htmlParser . text ( b ) ; if ( q ( t , b ) ) this . onTagOpen ( h , { } , 0 , 1 ) ; t . add ( b ) } } ; k . onCDATA = function ( a ) { t . add ( new CKEDITOR . htmlParser . cdata ( a ) ) } ;
k . onComment = function ( a ) { i ( ) ; j ( ) ; t . add ( new CKEDITOR . htmlParser . comment ( a ) ) } ; k . parse ( d ) ; for ( i ( ! CKEDITOR . env . ie && 1 ) ; t != g ; ) m ( t , t . parent , 1 ) ; l ( g ) ; return g } ; CKEDITOR . htmlParser . fragment . prototype = { type : CKEDITOR . NODE _DOCUMENT _FRAGMENT , add : function ( a , b ) { isNaN ( b ) && ( b = this . children . length ) ; var c = b > 0 ? this . children [ b - 1 ] : null ; if ( c ) { if ( a . _ . isBlockLike && c . type == CKEDITOR . NODE _TEXT ) { c . value = CKEDITOR . tools . rtrim ( c . value ) ; if ( c . value . length === 0 ) { this . children . pop ( ) ; this . add ( a ) ; return } } c . next = a } a . previous = c ; a . parent = this ;
this . children . splice ( b , 0 , a ) ; if ( ! this . _ . hasInlineStarted ) this . _ . hasInlineStarted = a . type == CKEDITOR . NODE _TEXT || a . type == CKEDITOR . NODE _ELEMENT && ! a . _ . isBlockLike } , filter : function ( a ) { a . onRoot ( this ) ; this . filterChildren ( a ) } , filterChildren : function ( a , b ) { if ( this . childrenFilteredBy != a . id ) { if ( b && ! this . parent ) a . onRoot ( this ) ; this . childrenFilteredBy = a . id ; for ( var c = 0 ; c < this . children . length ; c ++ ) this . children [ c ] . filter ( a ) === false && c -- } } , writeHtml : function ( a , b ) { b && this . filter ( b ) ; this . writeChildrenHtml ( a ) } , writeChildrenHtml : function ( a ,
b , c ) { if ( c && ! this . parent && b ) b . onRoot ( this ) ; b && this . filterChildren ( b ) ; for ( var b = 0 , c = this . children , f = c . length ; b < f ; b ++ ) c [ b ] . writeHtml ( a ) } , forEach : function ( a , b , c ) { ! c && ( ! b || this . type == b ) && a ( this ) ; for ( var c = this . children , f , i = 0 , k = c . length ; i < k ; i ++ ) { f = c [ i ] ; f . type == CKEDITOR . NODE _ELEMENT ? f . forEach ( a , b ) : ( ! b || f . type == b ) && a ( f ) } } } } ) ( ) ;
( function ( ) { function b ( a , b ) { for ( var c = 0 ; a && c < b . length ; c ++ ) var d = b [ c ] , a = a . replace ( d [ 0 ] , d [ 1 ] ) ; return a } function c ( a , b , c ) { typeof b == "function" && ( b = [ b ] ) ; var d , f ; f = a . length ; var m = b && b . length ; if ( m ) { for ( d = 0 ; d < f && a [ d ] . pri <= c ; d ++ ) ; for ( f = m - 1 ; f >= 0 ; f -- ) if ( m = b [ f ] ) { m . pri = c ; a . splice ( d , 0 , m ) } } } function a ( a , b , c ) { if ( b ) for ( var d in b ) { var k = a [ d ] ; a [ d ] = f ( k , b [ d ] , c ) ; k || a . $length ++ } } function f ( a , b , f ) { if ( b ) { b . pri = f ; if ( a ) { if ( a . splice ) c ( a , b , f ) ; else { a = a . pri > f ? [ b , a ] : [ a , b ] ; a . filter = d } return a } return b . filter = b } } function d ( a ) { for ( var b =
b , c ) { if ( c && ! this . parent && b ) b . onRoot ( this ) ; b && this . filterChildren ( b ) ; for ( var b = 0 , c = this . children , f = c . length ; b < f ; b ++ ) c [ b ] . writeHtml ( a ) } , forEach : function ( a , b , c ) { ! c && ( ! b || this . type == b ) && a ( this ) ; for ( var c = this . children , f , i = 0 , l = c . length ; i < l ; i ++ ) { f = c [ i ] ; f . type == CKEDITOR . NODE _ELEMENT ? f . forEach ( a , b ) : ( ! b || f . type == b ) && a ( f ) } } } } ) ( ) ;
( function ( ) { function b ( a , b ) { for ( var c = 0 ; a && c < b . length ; c ++ ) var d = b [ c ] , a = a . replace ( d [ 0 ] , d [ 1 ] ) ; return a } function c ( a , b , c ) { typeof b == "function" && ( b = [ b ] ) ; var d , f ; f = a . length ; var m = b && b . length ; if ( m ) { for ( d = 0 ; d < f && a [ d ] . pri <= c ; d ++ ) ; for ( f = m - 1 ; f >= 0 ; f -- ) if ( m = b [ f ] ) { m . pri = c ; a . splice ( d , 0 , m ) } } } function a ( a , b , c ) { if ( b ) for ( var d in b ) { var l = a [ d ] ; a [ d ] = f ( l , b [ d ] , c ) ; l || a . $length ++ } } function f ( a , b , f ) { if ( b ) { b . pri = f ; if ( a ) { if ( a . splice ) c ( a , b , f ) ; else { a = a . pri > f ? [ b , a ] : [ a , b ] ; a . filter = d } return a } return b . filter = b } } function d ( a ) { for ( var b =
a . type || a instanceof CKEDITOR . htmlParser . fragment , c = 0 ; c < this . length ; c ++ ) { if ( b ) var d = a . type , f = a . name ; var m = this [ c ] . apply ( window , arguments ) ; if ( m === false ) return m ; if ( b ) { if ( m && ( m . name != f || m . type != d ) ) return m } else if ( typeof m != "string" ) return m ; m != void 0 && ( a = m ) } return a } CKEDITOR . htmlParser . filter = CKEDITOR . tools . createClass ( { $ : function ( a ) { this . id = CKEDITOR . tools . getNextNumber ( ) ; this . _ = { elementNames : [ ] , attributeNames : [ ] , elements : { $length : 0 } , attributes : { $length : 0 } } ; a && this . addRules ( a , 10 ) } , proto : { addRules : function ( b ,
d ) { typeof d != "number" && ( d = 10 ) ; c ( this . _ . elementNames , b . elementNames , d ) ; c ( this . _ . attributeNames , b . attributeNames , d ) ; a ( this . _ . elements , b . elements , d ) ; a ( this . _ . attributes , b . attributes , d ) ; this . _ . text = f ( this . _ . text , b . text , d ) || this . _ . text ; this . _ . comment = f ( this . _ . comment , b . comment , d ) || this . _ . comment ; this . _ . root = f ( this . _ . root , b . root , d ) || this . _ . root } , applyTo : function ( a ) { a . filter ( this ) } , onElementName : function ( a ) { return b ( a , this . _ . elementNames ) } , onAttributeName : function ( a ) { return b ( a , this . _ . attributeNames ) } , onText : function ( a ) { var b =
this . _ . text ; return b ? b . filter ( a ) : a } , onComment : function ( a , b ) { var c = this . _ . comment ; return c ? c . filter ( a , b ) : a } , onRoot : function ( a ) { var b = this . _ . root ; return b ? b . filter ( a ) : a } , onElement : function ( a ) { for ( var b = [ this . _ . elements [ "^" ] , this . _ . elements [ a . name ] , this . _ . elements . $ ] , c , d = 0 ; d < 3 ; d ++ ) if ( c = b [ d ] ) { c = c . filter ( a , this ) ; if ( c === false ) return null ; if ( c && c != a ) return this . onNode ( c ) ; if ( a . parent && ! a . name ) break } return a } , onNode : function ( a ) { var b = a . type ; return b == CKEDITOR . NODE _ELEMENT ? this . onElement ( a ) : b == CKEDITOR . NODE _TEXT ?
new CKEDITOR . htmlParser . text ( this . onText ( a . value ) ) : b == CKEDITOR . NODE _COMMENT ? new CKEDITOR . htmlParser . comment ( this . onComment ( a . value ) ) : null } , onAttribute : function ( a , b , c ) { if ( b = this . _ . attributes [ b ] ) { a = b . filter ( c , a , this ) ; if ( a === false ) return false ; if ( typeof a != "undefined" ) return a } return c } } } ) } ) ( ) ;
( function ( ) { function b ( b , c ) { function g ( a ) { return a || CKEDITOR . env . ie ? new CKEDITOR . htmlParser . text ( " " ) : new CKEDITOR . htmlParser . element ( "br" , { "data-cke-bogus" : 1 } ) } function l ( b , c ) { return function ( d ) { if ( d . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ) { var l = [ ] , h = a ( d ) , n , o ; if ( h ) for ( p ( h , 1 ) && l . push ( h ) ; h ; ) { if ( e ( h ) && ( n = f ( h ) ) && p ( n ) ) if ( ( o = f ( n ) ) && ! e ( o ) ) l . push ( n ) ; else { var r = n , w = g ( q ) , j = r . parent . children , B = CKEDITOR . tools . indexOf ( j , r ) ; j . splice ( B + 1 , 0 , w ) ; j = r . next ; r . next = w ; w . previous = r ; w . parent = r . parent ; w . next = j ; i ( n ) } h = h . previous } for ( h =
0 ; h < l . length ; h ++ ) i ( l [ h ] ) ; if ( l = CKEDITOR . env . opera && ! b || ( typeof c == "function" ? c ( d ) !== false : c ) ) if ( ! q && CKEDITOR . env . ie && d . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT ) l = false ; else if ( ! q && CKEDITOR . env . ie && ( document . documentMode > 7 || d . name in CKEDITOR . dtd . tr || d . name in CKEDITOR . dtd . $listItem ) ) l = false ; else { l = a ( d ) ; l = ! l || d . name == "form" && l . name == "input" } l && d . add ( g ( b ) ) } } } function p ( a , b ) { if ( ( ! q || ! CKEDITOR . env . ie ) && a . type == CKEDITOR . NODE _ELEMENT && a . name == "br" && ! a . attributes [ "data-cke-eol" ] ) return true ; var c ; if ( a . type ==
CKEDITOR . NODE _TEXT && ( c = a . value . match ( F ) ) ) { if ( c . index ) { h ( a , new CKEDITOR . htmlParser . text ( a . value . substring ( 0 , c . index ) ) ) ; a . value = c [ 0 ] } if ( CKEDITOR . env . ie && q && ( ! b || a . parent . name in o ) ) return true ; if ( ! q ) if ( ( c = a . previous ) && c . name == "br" || ! c || e ( c ) ) return true } return false } var n = { elements : { } } , q = c == "html" , o = CKEDITOR . tools . extend ( { } , z ) , r ; for ( r in o ) "#" in s [ r ] || delete o [ r ] ; for ( r in o ) n . elements [ r ] = l ( q , b . config . fillEmptyBlocks !== false ) ; n . root = l ( q ) ; n . elements . br = function ( a ) { return function ( b ) { if ( b . parent . type !=
CKEDITOR . NODE _DOCUMENT _FRAGMENT ) { var c = b . attributes ; if ( "data-cke-bogus" in c || "data-cke-eol" in c ) delete c [ "data-cke-bogus" ] ; else { for ( c = b . next ; c && d ( c ) ; ) c = c . next ; var l = f ( b ) ; ! c && e ( b . parent ) ? j ( b . parent , g ( a ) ) : e ( c ) && ( l && ! e ( l ) ) && h ( c , g ( a ) ) } } } } ( q ) ; return n } function c ( a ) { return a . enterMode != CKEDITOR . ENTER _BR && a . autoParagraph !== false ? a . enterMode == CKEDITOR . ENTER _DIV ? "div" : "p" : false } function a ( a ) { for ( a = a . children [ a . children . length - 1 ] ; a && d ( a ) ; ) a = a . previous ; return a } function f ( a ) { for ( a = a . previous ; a && d ( a ) ; ) a = a . previous ;
( function ( ) { function b ( b , c ) { function g ( a ) { return a || CKEDITOR . env . ie ? new CKEDITOR . htmlParser . text ( " " ) : new CKEDITOR . htmlParser . element ( "br" , { "data-cke-bogus" : 1 } ) } function k ( b , c ) { return function ( d ) { if ( d . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ) { var k = [ ] , h = a ( d ) , p , n ; if ( h ) for ( o ( h , 1 ) && k . push ( h ) ; h ; ) { if ( e ( h ) && ( p = f ( h ) ) && o ( p ) ) if ( ( n = f ( p ) ) && ! e ( n ) ) k . push ( p ) ; else { var u = p , j = g ( q ) , A = u . parent . children , v = CKEDITOR . tools . indexOf ( A , u ) ; A . splice ( v + 1 , 0 , j ) ; A = u . next ; u . next = j ; j . previous = u ; j . parent = u . parent ; j . next = A ; i ( p ) } h = h . previous } for ( h =
0 ; h < k . length ; h ++ ) i ( k [ h ] ) ; if ( k = CKEDITOR . env . opera && ! b || ( typeof c == "function" ? c ( d ) !== false : c ) ) if ( ! q && CKEDITOR . env . ie && d . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT ) k = false ; else if ( ! q && CKEDITOR . env . ie && ( document . documentMode > 7 || d . name in CKEDITOR . dtd . tr || d . name in CKEDITOR . dtd . $listItem ) ) k = false ; else { k = a ( d ) ; k = ! k || d . name == "form" && k . name == "input" } k && d . add ( g ( b ) ) } } } function o ( a , b ) { if ( ( ! q || ! CKEDITOR . env . ie ) && a . type == CKEDITOR . NODE _ELEMENT && a . name == "br" && ! a . attributes [ "data-cke-eol" ] ) return true ; var c ; if ( a . type ==
CKEDITOR . NODE _TEXT && ( c = a . value . match ( E ) ) ) { if ( c . index ) { h ( a , new CKEDITOR . htmlParser . text ( a . value . substring ( 0 , c . index ) ) ) ; a . value = c [ 0 ] } if ( CKEDITOR . env . ie && q && ( ! b || a . parent . name in n ) ) return true ; if ( ! q ) if ( ( c = a . previous ) && c . name == "br" || ! c || e ( c ) ) return true } return false } var p = { elements : { } } , q = c == "html" , n = CKEDITOR . tools . extend ( { } , z ) , u ; for ( u in n ) "#" in r [ u ] || delete n [ u ] ; for ( u in n ) p . elements [ u ] = k ( q , b . config . fillEmptyBlocks !== false ) ; p . root = k ( q ) ; p . elements . br = function ( a ) { return function ( b ) { if ( b . parent . type !=
CKEDITOR . NODE _DOCUMENT _FRAGMENT ) { var c = b . attributes ; if ( "data-cke-bogus" in c || "data-cke-eol" in c ) delete c [ "data-cke-bogus" ] ; else { for ( c = b . next ; c && d ( c ) ; ) c = c . next ; var k = f ( b ) ; ! c && e ( b . parent ) ? j ( b . parent , g ( a ) ) : e ( c ) && ( k && ! e ( k ) ) && h ( c , g ( a ) ) } } } } ( q ) ; return p } function c ( a ) { return a . enterMode != CKEDITOR . ENTER _BR && a . autoParagraph !== false ? a . enterMode == CKEDITOR . ENTER _DIV ? "div" : "p" : false } function a ( a ) { for ( a = a . children [ a . children . length - 1 ] ; a && d ( a ) ; ) a = a . previous ; return a } function f ( a ) { for ( a = a . previous ; a && d ( a ) ; ) a = a . previous ;
return a } function d ( a ) { return a . type == CKEDITOR . NODE _TEXT && ! CKEDITOR . tools . trim ( a . value ) || a . type == CKEDITOR . NODE _ELEMENT && a . attributes [ "data-cke-bookmark" ] } function e ( a ) { return a && ( a . type == CKEDITOR . NODE _ELEMENT && a . name in z || a . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT ) } function h ( a , b ) { var c = a . parent . children , d = CKEDITOR . tools . indexOf ( c , a ) ; c . splice ( d , 0 , b ) ; c = a . previous ; a . previous = b ; b . next = a ; b . parent = a . parent ; if ( c ) { b . previous = c ; c . next = b } } function j ( a , b ) { var c = a . children [ a . children . length - 1 ] ; a . children . push ( b ) ;
b . parent = a ; if ( c ) { c . next = b ; b . previous = c } } function i ( a ) { var b = a . parent . children , c = CKEDITOR . tools . indexOf ( b , a ) , d = a . previous , a = a . next ; d && ( d . next = a ) ; a && ( a . previous = d ) ; b . splice ( c , 1 ) } function k ( a ) { var b = a . parent ; return b ? CKEDITOR . tools . indexOf ( b . children , a ) : - 1 } function m ( a ) { a = a . attributes ; a . contenteditable != "false" && ( 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 r ( a ) { return a . replace ( n , function ( a , b , c ) { return "<" + b + c . replace ( w , function ( a , b ) { if ( ! /^on/ . test ( b ) && c . indexOf ( "data-cke-saved-" + b ) == - 1 ) { a = a . slice ( 1 ) ; return " data-cke-saved-" + a + " data-cke-" + CKEDITOR . rnd + "-" + a } return a } ) + ">" } ) } function l ( a , b ) { return a . replace ( b , function ( a , b , c ) { a . indexOf ( "<textarea" ) === 0 && ( a = b + v ( c ) . replace ( /</g , "<" ) . replace ( />/g , ">" ) + "</textarea>" ) ; return "<cke:encoded>" + encodeURIComponent ( a ) + "</cke:encoded>" } ) } function g ( a ) { return a . replace ( D , function ( a , b ) { return decodeURIComponent ( b ) } ) }
function p ( a ) { return a . replace ( /<\!--(?!{cke_protected})[\s\S]+?--\>/g , function ( a ) { return "<\!--" + A + "{C}" + encodeURIComponent ( a ) . replace ( /--/g , "%2D%2D" ) + "--\>" } ) } function v ( a ) { return a . replace ( /<\!--\{cke_protected\}\{C\}([\s\S]+?)--\>/g , function ( a , b ) { return decodeURIComponent ( b ) } ) } function u ( a , b ) { var c = b . _ . dataStore ; return a . replace ( /<\!--\{cke_protected\}([\s\S]+?)--\>/g , function ( a , b ) { return decodeURIComponent ( b ) } ) . replace ( /\{cke_protected_(\d+)\}/g , function ( a , b ) { return c && c [ b ] || "" } ) } function o ( a ,
b . parent = a ; if ( c ) { c . next = b ; b . previous = c } } function i ( a ) { var b = a . parent . children , c = CKEDITOR . tools . indexOf ( b , a ) , d = a . previous , a = a . next ; d && ( d . next = a ) ; a && ( a . previous = d ) ; b . splice ( c , 1 ) } function l ( a ) { var b = a . parent ; return b ? CKEDITOR . tools . indexOf ( b . children , a ) : - 1 } function m ( a ) { a = a . attributes ; a . contenteditable != "false" && ( 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 ( o , function ( a , b , c ) { return "<" + b + c . replace ( u , function ( a , b ) { if ( ! /^on/ . test ( b ) && c . indexOf ( "data-cke-saved-" + b ) == - 1 ) { a = a . slice ( 1 ) ; return " data-cke-saved-" + a + " data-cke-" + CKEDITOR . rnd + "-" + a } return a } ) + ">" } ) } function k ( a , b ) { return a . replace ( b , function ( a , b , c ) { a . indexOf ( "<textarea" ) === 0 && ( a = b + v ( c ) . replace ( /</g , "<" ) . replace ( />/g , ">" ) + "</textarea>" ) ; return "<cke:encoded>" + encodeURIComponent ( a ) + "</cke:encoded>" } ) } function g ( a ) { return a . replace ( D , function ( a , b ) { return decodeURIComponent ( b ) } ) }
function p ( a ) { return a . replace ( /<\!--(?!{cke_protected})[\s\S]+?--\>/g , function ( a ) { return "<\!--" + B + "{C}" + encodeURIComponent ( a ) . replace ( /--/g , "%2D%2D" ) + "--\>" } ) } function v ( a ) { return a . replace ( /<\!--\{cke_protected\}\{C\}([\s\S]+?)--\>/g , function ( a , b ) { return decodeURIComponent ( b ) } ) } function t ( a , b ) { var c = b . _ . dataStore ; return a . replace ( /<\!--\{cke_protected\}([\s\S]+?)--\>/g , function ( a , b ) { return decodeURIComponent ( b ) } ) . replace ( /\{cke_protected_(\d+)\}/g , function ( a , b ) { return c && c [ b ] || "" } ) } function n ( a ,
b ) { for ( var c = [ ] , d = b . config . protectedSource , g = b . _ . dataStore || ( b . _ . dataStore = { id : 1 } ) , e = /<\!--\{cke_temp(comment)?\}(\d*?)--\>/g , d = [ /<script[\s\S]*?<\/script>/gi , /<noscript[\s\S]*?<\/noscript>/gi ] . concat ( d ) , a = a . replace ( /<\!--[\s\S]*?--\>/g , function ( a ) { return "<\!--{cke_tempcomment}" + ( c . push ( a ) - 1 ) + "--\>" } ) , f = 0 ; f < d . length ; f ++ ) a = a . replace ( d [ f ] , function ( a ) { a = a . replace ( e , function ( a , b , d ) { return c [ d ] } ) ; return /cke_temp(comment)?/ . test ( a ) ? a : "<\!--{cke_temp}" + ( c . push ( a ) - 1 ) + "--\>" } ) ; a = a . replace ( e , function ( a , b , d ) { return "<\!--" +
A + ( b ? "{C}" : "" ) + encodeURIComponent ( c [ d ] ) . replace ( /--/g , "%2D%2D" ) + "--\>" } ) ; return a . replace ( /(['"]).*?\1/g , function ( a ) { return a . replace ( /<\!--\{cke_protected\}([\s\S]+?)--\>/g , function ( a , b ) { g [ g . id ] = decodeURIComponent ( b ) ; return "{cke_protected_" + g . id ++ + "}" } ) } ) } CKEDITOR . htmlDataProcessor = function ( a ) { var d , e , f = this ; this . editor = a ; this . dataFilter = d = new CKEDITOR . htmlParser . filter ; this . htmlFilter = e = new CKEDITOR . htmlParser . filter ; this . writer = new CKEDITOR . htmlParser . basicWriter ; d . addRules ( t ) ; d . addRules ( b ( a ,
"data" ) ) ; e . addRules ( C ) ; e . addRules ( b ( a , "html" ) ) ; a . on ( "toHtml" , function ( b ) { var b = b . data , d = b . dataValue , d = o ( d , a ) , d = l ( d , G ) , d = r ( d ) , d = l ( d , I ) , d = d . replace ( Q , "$1cke:$2" ) , d = d . replace ( E , "<cke:$1$2></cke:$1>" ) , d = CKEDITOR . env . opera ? d : d . replace ( /(<pre\b[^>]*>)(\r\n|\n)/g , "$1$2$2" ) , e = b . context || a . editable ( ) . getName ( ) , f ; if ( CKEDITOR . env . ie && CKEDITOR . env . version < 9 && e == "pre" ) { e = "div" ; d = "<pre>" + d + "</pre>" ; f = 1 } e = a . document . createElement ( e ) ; e . setHtml ( "a" + d ) ; d = e . getHtml ( ) . substr ( 1 ) ; d = d . replace ( RegExp ( " data-cke-" + CKEDITOR . rnd +
B + ( b ? "{C}" : "" ) + encodeURIComponent ( c [ d ] ) . replace ( /--/g , "%2D%2D" ) + "--\>" } ) ; return a . replace ( /(['"]).*?\1/g , function ( a ) { return a . replace ( /<\!--\{cke_protected\}([\s\S]+?)--\>/g , function ( a , b ) { g [ g . id ] = decodeURIComponent ( b ) ; return "{cke_protected_" + g . id ++ + "}" } ) } ) } CKEDITOR . htmlDataProcessor = function ( a ) { var d , e , f = this ; this . editor = a ; this . dataFilter = d = new CKEDITOR . htmlParser . filter ; this . htmlFilter = e = new CKEDITOR . htmlParser . filter ; this . writer = new CKEDITOR . htmlParser . basicWriter ; d . addRules ( s ) ; d . addRules ( b ( a ,
"data" ) ) ; e . addRules ( C ) ; e . addRules ( b ( a , "html" ) ) ; a . on ( "toHtml" , function ( b ) { var b = b . data , d = b . dataValue , d = n ( d , a ) , d = k ( d , G ) , d = w ( d ) , d = k ( d , I ) , d = d . replace ( Q , "$1cke:$2" ) , d = d . replace ( F , "<cke:$1$2></cke:$1>" ) , d = CKEDITOR . env . opera ? d : d . replace ( /(<pre\b[^>]*>)(\r\n|\n)/g , "$1$2$2" ) , e = b . context || a . editable ( ) . getName ( ) , f ; if ( CKEDITOR . env . ie && CKEDITOR . env . version < 9 && e == "pre" ) { e = "div" ; d = "<pre>" + d + "</pre>" ; f = 1 } e = a . document . createElement ( e ) ; e . setHtml ( "a" + d ) ; d = e . getHtml ( ) . substr ( 1 ) ; d = d . replace ( RegExp ( " data-cke-" + CKEDITOR . rnd +
"-" , "ig" ) , " " ) ; f && ( d = d . replace ( /^<pre>|<\/pre>$/gi , "" ) ) ; d = d . replace ( L , "$1$2" ) ; d = g ( d ) ; d = v ( d ) ; b . dataValue = CKEDITOR . htmlParser . fragment . fromHtml ( d , b . context , b . fixForBody === false ? false : c ( a . config ) ) } , null , null , 5 ) ; a . on ( "toHtml" , function ( a ) { a . data . dataValue . filterChildren ( f . dataFilter , true ) } , null , null , 10 ) ; a . on ( "toHtml" , function ( a ) { var a = a . data , b = a . dataValue , c = new CKEDITOR . htmlParser . basicWriter ; b . writeChildrenHtml ( c ) ; b = c . getHtml ( true ) ; a . dataValue = p ( b ) } , null , null , 15 ) ; a . on ( "toDataFormat" , function ( b ) { b . data . dataValue =
CKEDITOR . htmlParser . fragment . fromHtml ( b . data . dataValue , a . editable ( ) . getName ( ) , c ( a . config ) ) } , null , null , 5 ) ; a . on ( "toDataFormat" , function ( a ) { a . data . dataValue . filterChildren ( f . htmlFilter , true ) } , null , null , 10 ) ; a . on ( "toDataFormat" , function ( b ) { var c = b . data . dataValue , d = f . writer ; d . reset ( ) ; c . writeChildrenHtml ( d ) ; c = d . getHtml ( true ) ; c = v ( c ) ; c = u ( c , a ) ; b . data . dataValue = c } , null , null , 15 ) } ; CKEDITOR . htmlDataProcessor . prototype = { toHtml : function ( a , b , c , d ) { var g = this . editor ; ! b && b !== null && ( b = g . editable ( ) . getName ( ) ) ; return g . fire ( "toHtml" ,
{ dataValue : a , context : b , fixForBody : c , dontFilter : ! ! d } ) . dataValue } , toDataFormat : function ( a ) { return this . editor . fire ( "toDataFormat" , { dataValue : a } ) . dataValue } } ; var F = /(?: |\xa0)$/ , A = "{cke_protected}" , s = CKEDITOR . dtd , x = [ "caption" , "colgroup" , "col" , "thead" , "tfoot" , "tbody" ] , z = CKEDITOR . tools . extend ( { } , s . $blockLimit , s . $block ) , t = { elements : { } , attributeNames : [ [ /^on/ , "data-cke-pa-on" ] ] } , C = { elementNames : [ [ /^cke:/ , "" ] , [ /^\?xml:namespace$/ , "" ] ] , attributeNames : [ [ /^data-cke-(saved|pa)-/ , "" ] , [ /^data-cke-.*/ , "" ] , [ "hidefocus" ,
"" ] ] , elements : { $ : function ( a ) { var b = a . attributes ; if ( b ) { if ( b [ "data-cke-temp" ] ) return false ; for ( var c = [ "name" , "href" , "src" ] , d , g = 0 ; g < c . length ; g ++ ) { d = "data-cke-saved-" + c [ g ] ; d in b && delete b [ c [ g ] ] } } return a } , table : function ( a ) { a . children . slice ( 0 ) . sort ( function ( a , b ) { var c , d ; if ( a . type == CKEDITOR . NODE _ELEMENT && b . type == a . type ) { c = CKEDITOR . tools . indexOf ( x , a . name ) ; d = CKEDITOR . tools . indexOf ( x , b . name ) } if ( ! ( c > - 1 && d > - 1 && c != d ) ) { c = k ( a ) ; d = k ( b ) } return c > d ? 1 : - 1 } ) } , embed : function ( a ) { var b = a . parent ; if ( b && b . name == "object" ) { var c =
CKEDITOR . htmlParser . fragment . fromHtml ( b . data . dataValue , a . editable ( ) . getName ( ) , c ( a . config ) ) } , null , null , 5 ) ; a . on ( "toDataFormat" , function ( a ) { a . data . dataValue . filterChildren ( f . htmlFilter , true ) } , null , null , 10 ) ; a . on ( "toDataFormat" , function ( b ) { var c = b . data . dataValue , d = f . writer ; d . reset ( ) ; c . writeChildrenHtml ( d ) ; c = d . getHtml ( true ) ; c = v ( c ) ; c = t ( c , a ) ; b . data . dataValue = c } , null , null , 15 ) } ; CKEDITOR . htmlDataProcessor . prototype = { toHtml : function ( a , b , c , d ) { var g = this . editor ; ! b && b !== null && ( b = g . editable ( ) . getName ( ) ) ; return g . fire ( "toHtml" ,
{ dataValue : a , context : b , fixForBody : c , dontFilter : ! ! d } ) . dataValue } , toDataFormat : function ( a ) { return this . editor . fire ( "toDataFormat" , { dataValue : a } ) . dataValue } } ; var E = /(?: |\xa0)$/ , B = "{cke_protected}" , r = CKEDITOR . dtd , x = [ "caption" , "colgroup" , "col" , "thead" , "tfoot" , "tbody" ] , z = CKEDITOR . tools . extend ( { } , r . $blockLimit , r . $block ) , s = { elements : { } , attributeNames : [ [ /^on/ , "data-cke-pa-on" ] ] } , C = { elementNames : [ [ /^cke:/ , "" ] , [ /^\?xml:namespace$/ , "" ] ] , attributeNames : [ [ /^data-cke-(saved|pa)-/ , "" ] , [ /^data-cke-.*/ , "" ] , [ "hidefocus" ,
"" ] ] , elements : { $ : function ( a ) { var b = a . attributes ; if ( b ) { if ( b [ "data-cke-temp" ] ) return false ; for ( var c = [ "name" , "href" , "src" ] , d , g = 0 ; g < c . length ; g ++ ) { d = "data-cke-saved-" + c [ g ] ; d in b && delete b [ c [ g ] ] } } return a } , table : function ( a ) { a . children . slice ( 0 ) . sort ( function ( a , b ) { var c , d ; if ( a . type == CKEDITOR . NODE _ELEMENT && b . type == a . type ) { c = CKEDITOR . tools . indexOf ( x , a . name ) ; d = CKEDITOR . tools . indexOf ( x , b . name ) } if ( ! ( c > - 1 && d > - 1 && c != d ) ) { c = l ( a ) ; d = l ( b ) } return c > d ? 1 : - 1 } ) } , embed : function ( a ) { var b = a . parent ; if ( b && b . name == "object" ) { var c =
b . attributes . width , b = b . attributes . height ; c && ( a . attributes . width = c ) ; b && ( a . attributes . height = b ) } } , param : function ( a ) { a . children = [ ] ; a . isEmpty = true ; return a } , a : function ( a ) { if ( ! a . children . length && ! a . attributes . name && ! a . attributes [ "data-cke-saved-name" ] ) return false } , span : function ( a ) { a . attributes [ "class" ] == "Apple-style-span" && 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 ) ) ; if ( ! a . attributes . type ) a . attributes . type = "text/css" } , title : function ( a ) { var b = a . children [ 0 ] ; ! b && j ( a , b = new CKEDITOR . htmlParser . text ) ; b . value = a . attributes [ "data-cke-title" ] || "" } } , attributes : { "class" : function ( a ) { return CKEDITOR . tools . ltrim ( a . replace ( /(?:^|\s+)cke_[^\s]*/g , "" ) ) || false } } } ; if ( CKEDITOR . env . ie ) C . attributes . style = function ( a ) { return a . replace ( /(^|;)([^\:]+)/g , function ( a ) { return a . toLowerCase ( ) } ) } ; for ( var y in { input : 1 ,
textarea : 1 } ) { t . elements [ y ] = m ; C . elements [ y ] = q } var n = /<(a|area|img|input|source)\b([^>]*)>/gi , w = /\s(on\w+|href|src|name)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi , I = /(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi , G = /(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi , D = /<cke:encoded>([^<]*)<\/cke:encoded>/gi , Q = /(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi , L = /(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi , E = /<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi } ) ( ) ;
textarea : 1 } ) { s . elements [ y ] = m ; C . elements [ y ] = q } var o = /<(a|area|img|input|source)\b([^>]*)>/gi , u = /\s(on\w+|href|src|name)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi , I = /(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi , G = /(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi , D = /<cke:encoded>([^<]*)<\/cke:encoded>/gi , Q = /(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi , L = /(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi , F = /<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi } ) ( ) ;
"use strict" ; CKEDITOR . htmlParser . element = function ( b , c ) { this . name = b ; this . attributes = c || { } ; this . children = [ ] ; var a = b || "" , f = a . match ( /^cke:(.*)/ ) ; f && ( a = f [ 1 ] ) ; a = ! ( ! CKEDITOR . dtd . $nonBodyContent [ a ] && ! CKEDITOR . dtd . $block [ a ] && ! CKEDITOR . dtd . $listItem [ a ] && ! CKEDITOR . dtd . $tableContent [ a ] && ! ( CKEDITOR . dtd . $nonEditable [ a ] || a == "br" ) ) ; this . isEmpty = ! ! CKEDITOR . dtd . $empty [ b ] ; this . isUnknown = ! CKEDITOR . dtd [ b ] ; this . _ = { isBlockLike : a , hasInlineStarted : this . isEmpty || ! a } } ;
CKEDITOR . htmlParser . cssStyle = function ( b ) { var c = { } ; ( ( b instanceof CKEDITOR . htmlParser . element ? b . attributes . style : b ) || "" ) . replace ( /"/g , '"' ) . replace ( /\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g , function ( a , b , d ) { b == "font-family" && ( d = d . replace ( /["']/g , "" ) ) ; c [ b . toLowerCase ( ) ] = d } ) ; return { rules : c , populate : function ( a ) { var b = this . toString ( ) ; if ( b ) a instanceof CKEDITOR . dom . element ? a . setAttribute ( "style" , b ) : a instanceof CKEDITOR . htmlParser . element ? a . attributes . style = b : a . style = b } , toString : function ( ) { var a = [ ] , b ;
for ( b in c ) c [ b ] && a . push ( b , ":" , c [ b ] , ";" ) ; return a . join ( "" ) } } } ;
@@ -286,126 +286,127 @@ b.insertAfter(f);f.hide();f.$.form&&a._attachToForm()}else a.setData(b.getHtml()
CKEDITOR . inlineAll = function ( ) { var b , c , a ; for ( a in CKEDITOR . dtd . $editable ) for ( var f = CKEDITOR . document . getElementsByTag ( a ) , d = 0 , e = f . count ( ) ; d < e ; d ++ ) { b = f . getItem ( d ) ; if ( b . getAttribute ( "contenteditable" ) == "true" ) { c = { element : b , config : { } } ; CKEDITOR . fire ( "inline" , c ) !== false && CKEDITOR . inline ( b , c . config ) } } } ; CKEDITOR . domReady ( function ( ) { ! CKEDITOR . disableAutoInline && CKEDITOR . inlineAll ( ) } ) } ) ( ) ; CKEDITOR . replaceClass = "ckeditor" ;
( function ( ) { function b ( b , e , f , j ) { if ( ! CKEDITOR . env . isCompatible ) return null ; b = CKEDITOR . dom . element . get ( b ) ; if ( b . getEditor ( ) ) throw 'The editor instance "' + b . getEditor ( ) . name + '" is already attached to the provided element.' ; var i = new CKEDITOR . editor ( e , b , j ) ; if ( j == CKEDITOR . ELEMENT _MODE _REPLACE ) { b . setStyle ( "visibility" , "hidden" ) ; i . _ . required = b . hasAttribute ( "required" ) ; b . removeAttribute ( "required" ) } f && i . setData ( f , null , true ) ; i . on ( "loaded" , function ( ) { a ( i ) ; j == CKEDITOR . ELEMENT _MODE _REPLACE && ( i . config . autoUpdateElement &&
b . $ . form ) && i . _attachToForm ( ) ; i . setMode ( i . config . startupMode , function ( ) { i . resetDirty ( ) ; i . status = "ready" ; i . fireOnce ( "instanceReady" ) ; CKEDITOR . fire ( "instanceReady" , null , i ) } ) } ) ; i . on ( "destroy" , c ) ; return i } function c ( ) { var a = this . container , b = this . element ; if ( a ) { a . clearCustomData ( ) ; a . remove ( ) } if ( b ) { b . clearCustomData ( ) ; if ( this . elementMode == CKEDITOR . ELEMENT _MODE _REPLACE ) { b . show ( ) ; this . _ . required && b . setAttribute ( "required" , "required" ) } delete this . element } } function a ( a ) { var b = a . name , c = a . element , j = a . elementMode ,
i = a . fire ( "uiSpace" , { space : "top" , html : "" } ) . html , k = a . fire ( "uiSpace" , { space : "bottom" , html : "" } ) . html ; f || ( f = CKEDITOR . addTemplate ( "maincontainer" , '<{outerEl} id="cke_{name}" class="{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} ' + CKEDITOR . env . cssClass + '" dir="{langDir}" lang="{langCode}" role="application" aria-labelledby="cke_{name}_arialbl"><span id="cke_{name}_arialbl" class="cke_voice_label">{voiceLabel}</span><{outerEl} class="cke_inner cke_reset" role="presentation">{topHtml}<{outerEl} id="{contentId}" class="cke_contents cke_reset" role="presentation"></{outerEl}>{bottomHtml}</{outerEl}></{outerEl}>' ) ) ;
b = CKEDITOR . dom . element . createFromHtml ( f . output ( { id : a . id , name : b , langDir : a . lang . dir , langCode : a . langCode , voiceLabel : [ a . lang . editor , a . name ] . join ( ", " ) , topHtml : i ? '<span id="' + a . ui . spaceId ( "top" ) + '" class="cke_top cke_reset_all" role="presentation" style="height:auto">' + i + "</span>" : "" , contentId : a . ui . spaceId ( "contents" ) , bottomHtml : k ? '<span id="' + a . ui . spaceId ( "bottom" ) + '" class="cke_bottom cke_reset_all" role="presentation">' + k + "</span>" : "" , outerEl : CKEDITOR . env . ie ? "span" : "div" } ) ) ; if ( j == CKEDITOR . ELEMENT _MODE _REPLACE ) { c . hide ( ) ;
b . insertAfter ( c ) } else c . append ( b ) ; a . container = b ; i && a . ui . space ( "top" ) . unselectable ( ) ; k && a . ui . space ( "bottom" ) . unselectable ( ) ; c = a . config . width ; j = a . config . height ; c && b . setStyle ( "width" , CKEDITOR . tools . cssLength ( c ) ) ; j && a . ui . space ( "contents" ) . setStyle ( "height" , CKEDITOR . tools . cssLength ( j ) ) ; b . disableContextMenu ( ) ; CKEDITOR . env . webkit && b . on ( "focus" , function ( ) { a . focus ( ) } ) ; a . fireOnce ( "uiReady" ) } CKEDITOR . replace = function ( a , c ) { return b ( a , c , null , CKEDITOR . ELEMENT _MODE _REPLACE ) } ; CKEDITOR . appendTo = function ( a , c , f ) { return b ( a ,
i = a . fire ( "uiSpace" , { space : "top" , html : "" } ) . html , l = a . fire ( "uiSpace" , { space : "bottom" , html : "" } ) . html ; f || ( f = CKEDITOR . addTemplate ( "maincontainer" , '<{outerEl} id="cke_{name}" class="{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} ' + CKEDITOR . env . cssClass + '" dir="{langDir}" lang="{langCode}" role="application" aria-labelledby="cke_{name}_arialbl"><span id="cke_{name}_arialbl" class="cke_voice_label">{voiceLabel}</span><{outerEl} class="cke_inner cke_reset" role="presentation">{topHtml}<{outerEl} id="{contentId}" class="cke_contents cke_reset" role="presentation"></{outerEl}>{bottomHtml}</{outerEl}></{outerEl}>' ) ) ;
b = CKEDITOR . dom . element . createFromHtml ( f . output ( { id : a . id , name : b , langDir : a . lang . dir , langCode : a . langCode , voiceLabel : [ a . lang . editor , a . name ] . join ( ", " ) , topHtml : i ? '<span id="' + a . ui . spaceId ( "top" ) + '" class="cke_top cke_reset_all" role="presentation" style="height:auto">' + i + "</span>" : "" , contentId : a . ui . spaceId ( "contents" ) , bottomHtml : l ? '<span id="' + a . ui . spaceId ( "bottom" ) + '" class="cke_bottom cke_reset_all" role="presentation">' + l + "</span>" : "" , outerEl : CKEDITOR . env . ie ? "span" : "div" } ) ) ; if ( j == CKEDITOR . ELEMENT _MODE _REPLACE ) { c . hide ( ) ;
b . insertAfter ( c ) } else c . append ( b ) ; a . container = b ; i && a . ui . space ( "top" ) . unselectable ( ) ; l && a . ui . space ( "bottom" ) . unselectable ( ) ; c = a . config . width ; j = a . config . height ; c && b . setStyle ( "width" , CKEDITOR . tools . cssLength ( c ) ) ; j && a . ui . space ( "contents" ) . setStyle ( "height" , CKEDITOR . tools . cssLength ( j ) ) ; b . disableContextMenu ( ) ; CKEDITOR . env . webkit && b . on ( "focus" , function ( ) { a . focus ( ) } ) ; a . fireOnce ( "uiReady" ) } CKEDITOR . replace = function ( a , c ) { return b ( a , c , null , CKEDITOR . ELEMENT _MODE _REPLACE ) } ; CKEDITOR . appendTo = function ( a , c , f ) { return b ( a ,
c , f , CKEDITOR . ELEMENT _MODE _APPENDTO ) } ; CKEDITOR . replaceAll = function ( ) { for ( var a = document . getElementsByTagName ( "textarea" ) , b = 0 ; b < a . length ; b ++ ) { var c = null , f = a [ b ] ; if ( f . name || f . id ) { if ( typeof arguments [ 0 ] == "string" ) { if ( ! RegExp ( "(?:^|\\s)" + arguments [ 0 ] + "(?:$|\\s)" ) . test ( f . className ) ) continue } else if ( typeof arguments [ 0 ] == "function" ) { c = { } ; if ( arguments [ 0 ] ( f , c ) === false ) continue } this . replace ( f , c ) } } } ; CKEDITOR . editor . prototype . addMode = function ( a , b ) { ( this . _ . modes || ( this . _ . modes = { } ) ) [ a ] = b } ; CKEDITOR . editor . prototype . setMode =
function ( a , b ) { var c = this , f = this . _ . modes ; if ( ! ( a == c . mode || ! f || ! f [ a ] ) ) { c . fire ( "beforeSetMode" , a ) ; if ( c . mode ) { var i = c . checkDirty ( ) ; c . _ . previousMode = c . mode ; c . fire ( "beforeModeUnload" ) ; c . editable ( 0 ) ; c . ui . space ( "contents" ) . setHtml ( "" ) ; c . mode = "" } this . _ . modes [ a ] ( function ( ) { c . mode = a ; i !== void 0 && ! i && c . resetDirty ( ) ; setTimeout ( function ( ) { c . fire ( "mode" ) ; b && b . call ( c ) } , 0 ) } ) } } ; CKEDITOR . editor . prototype . resize = function ( a , b , c , f ) { var i = this . container , k = this . ui . space ( "contents" ) , m = CKEDITOR . env . webkit && this . document && this . document . getWindow ( ) . $ . frameElement ,
f = f ? i . getChild ( 1 ) : i ; f . setSize ( "width" , a , true ) ; m && ( m . style . width = "1%" ) ; k . setStyle ( "height" , Math . max ( b - ( c ? 0 : ( f . $ . offsetHeight || 0 ) - ( k . $ . clientHeight || 0 ) ) , 0 ) + "px" ) ; m && ( m . style . width = "100%" ) ; this . fire ( "resize" ) } ; CKEDITOR . editor . prototype . getResizable = function ( a ) { return a ? this . ui . space ( "contents" ) : this . container } ; var f ; CKEDITOR . domReady ( function ( ) { CKEDITOR . replaceClass && CKEDITOR . replaceAll ( CKEDITOR . replaceClass ) } ) } ) ( ) ; CKEDITOR . config . startupMode = "wysiwyg" ;
( function ( ) { function b ( b ) { var c = b . editor , d = c . editable ( ) , g = b . data . path , e = g . blockLimit , f = b . data . selection . getRanges ( ) [ 0 ] , h = c . config . enterMode ; if ( CKEDITOR . env . gecko ) { var o = g . block || g . blockLimit || g . root , i = o && o . getLast ( a ) ; o && ( o . isBlockBoundary ( ) && ( ! i || ! ( i . type == CKEDITOR . NODE _ELEMENT && i . isBlockBoundary ( ) ) ) && ! o . is ( "pre" ) && ! o . getBogus ( ) ) && o . appendBogus ( ) } if ( c . config . autoParagraph !== false && h != CKEDITOR . ENTER _BR && f . collapsed && d . equals ( e ) && ! g . block ) { d = f . clone ( ) ; d . enlarge ( CKEDITOR . ENLARGE _BLOCK _CONTENTS ) ; g = new CKEDITOR . dom . walker ( d ) ;
function ( a , b ) { var c = this , f = this . _ . modes ; if ( ! ( a == c . mode || ! f || ! f [ a ] ) ) { c . fire ( "beforeSetMode" , a ) ; if ( c . mode ) { var i = c . checkDirty ( ) ; c . _ . previousMode = c . mode ; c . fire ( "beforeModeUnload" ) ; c . editable ( 0 ) ; c . ui . space ( "contents" ) . setHtml ( "" ) ; c . mode = "" } this . _ . modes [ a ] ( function ( ) { c . mode = a ; i !== void 0 && ! i && c . resetDirty ( ) ; setTimeout ( function ( ) { c . fire ( "mode" ) ; b && b . call ( c ) } , 0 ) } ) } } ; CKEDITOR . editor . prototype . resize = function ( a , b , c , f ) { var i = this . container , l = this . ui . space ( "contents" ) , m = CKEDITOR . env . webkit && this . document && this . document . getWindow ( ) . $ . frameElement ,
f = f ? i . getChild ( 1 ) : i ; f . setSize ( "width" , a , true ) ; m && ( m . style . width = "1%" ) ; l . setStyle ( "height" , Math . max ( b - ( c ? 0 : ( f . $ . offsetHeight || 0 ) - ( l . $ . clientHeight || 0 ) ) , 0 ) + "px" ) ; m && ( m . style . width = "100%" ) ; this . fire ( "resize" ) } ; CKEDITOR . editor . prototype . getResizable = function ( a ) { return a ? this . ui . space ( "contents" ) : this . container } ; var f ; CKEDITOR . domReady ( function ( ) { CKEDITOR . replaceClass && CKEDITOR . replaceAll ( CKEDITOR . replaceClass ) } ) } ) ( ) ; CKEDITOR . config . startupMode = "wysiwyg" ;
( function ( ) { function b ( b ) { var c = b . editor , d = c . editable ( ) , g = b . data . path , e = g . blockLimit , f = b . data . selection . getRanges ( ) [ 0 ] , h = c . config . enterMode ; if ( CKEDITOR . env . gecko ) { var n = g . block || g . blockLimit || g . root , i = n && n . getLast ( a ) ; n && ( n . isBlockBoundary ( ) && ( ! i || ! ( i . type == CKEDITOR . NODE _ELEMENT && i . isBlockBoundary ( ) ) ) && ! n . is ( "pre" ) && ! n . getBogus ( ) ) && n . appendBogus ( ) } if ( c . config . autoParagraph !== false && h != CKEDITOR . ENTER _BR && f . collapsed && d . equals ( e ) && ! g . block ) { d = f . clone ( ) ; d . enlarge ( CKEDITOR . ENLARGE _BLOCK _CONTENTS ) ; g = new CKEDITOR . dom . walker ( d ) ;
g . guard = function ( b ) { return ! a ( b ) || b . type == CKEDITOR . NODE _COMMENT || b . isReadOnly ( ) } ; if ( ! g . checkForward ( ) || d . checkStartOfBlock ( ) && d . checkEndOfBlock ( ) ) { c = f . fixBlock ( true , c . config . enterMode == CKEDITOR . ENTER _DIV ? "div" : "p" ) ; if ( CKEDITOR . env . ie ) ( c = c . getFirst ( a ) ) && ( c . type == CKEDITOR . NODE _TEXT && CKEDITOR . tools . trim ( c . getText ( ) ) . match ( /^(?: |\xa0)$/ ) ) && c . remove ( ) ; f . select ( ) ; b . cancel ( ) } } } function c ( a ) { var b = a . data . getTarget ( ) ; if ( b . is ( "input" ) ) { b = b . getAttribute ( "type" ) ; ( b == "submit" || b == "reset" ) && a . data . preventDefault ( ) } }
function a ( a ) { return i ( a ) && k ( a ) } function f ( a , b ) { return function ( c ) { var d = CKEDITOR . dom . element . get ( c . data . $ . toElement || c . data . $ . fromElement || c . data . $ . relatedTarget ) ; ( ! d || ! b . equals ( d ) && ! b . contains ( d ) ) && a . call ( this , c ) } } function d ( b ) { var c , d = b . getRanges ( ) [ 0 ] , b = b . root , g = d . startPath ( ) , e = { table : 1 , ul : 1 , ol : 1 , dl : 1 } , f = CKEDITOR . dom . walker . bogus ( ) ; if ( g . contains ( e ) ) { var g = function ( b ) { return function ( d , g ) { g && ( d . type == CKEDITOR . NODE _ELEMENT && d . is ( e ) ) && ( c = d ) ; if ( ! g && a ( d ) && ( ! b || ! f ( d ) ) ) return false } } , h = d . clone ( ) ; h . collapse ( 1 ) ;
function a ( a ) { return i ( a ) && l ( a ) } function f ( a , b ) { return function ( c ) { var d = CKEDITOR . dom . element . get ( c . data . $ . toElement || c . data . $ . fromElement || c . data . $ . relatedTarget ) ; ( ! d || ! b . equals ( d ) && ! b . contains ( d ) ) && a . call ( this , c ) } } function d ( b ) { var c , d = b . getRanges ( ) [ 0 ] , b = b . root , g = d . startPath ( ) , e = { table : 1 , ul : 1 , ol : 1 , dl : 1 } , f = CKEDITOR . dom . walker . bogus ( ) ; if ( g . contains ( e ) ) { var g = function ( b ) { return function ( d , g ) { g && ( d . type == CKEDITOR . NODE _ELEMENT && d . is ( e ) ) && ( c = d ) ; if ( ! g && a ( d ) && ( ! b || ! f ( d ) ) ) return false } } , h = d . clone ( ) ; h . collapse ( 1 ) ;
h . setStartAt ( b , CKEDITOR . POSITION _AFTER _START ) ; b = new CKEDITOR . dom . walker ( h ) ; b . guard = g ( ) ; b . checkBackward ( ) ; if ( c ) { h = d . clone ( ) ; h . collapse ( ) ; h . setEndAt ( c , CKEDITOR . POSITION _AFTER _END ) ; b = new CKEDITOR . dom . walker ( h ) ; b . guard = g ( true ) ; c = false ; b . checkForward ( ) ; return c } } return null } function e ( a ) { a . editor . focus ( ) ; a . editor . fire ( "saveSnapshot" ) } function h ( a , b ) { var c = a . editor ; ! b && c . getSelection ( ) . scrollIntoView ( ) ; setTimeout ( function ( ) { c . fire ( "saveSnapshot" ) } , 0 ) } CKEDITOR . editable = CKEDITOR . tools . createClass ( { base : CKEDITOR . dom . element ,
$ : function ( a , b ) { this . base ( b . $ || b ) ; this . editor = a ; this . hasFocus = false ; this . setup ( ) } , proto : { focus : function ( ) { this . $ [ CKEDITOR . env . ie && this . getDocument ( ) . equals ( CKEDITOR . document ) ? "setActive" : "focus" ] ( ) ; CKEDITOR . env . safari && ! this . isInline ( ) && ( CKEDITOR . document . getActive ( ) . equals ( this . getWindow ( ) . getFrame ( ) ) || this . getWindow ( ) . focus ( ) ) } , on : function ( a , b ) { var c = Array . prototype . slice . call ( arguments , 0 ) ; if ( CKEDITOR . env . ie && /^focus|blur$/ . exec ( a ) ) { a = a == "focus" ? "focusin" : "focusout" ; b = f ( b , this ) ; c [ 0 ] = a ; c [ 1 ] = b } return CKEDITOR . dom . element . prototype . on . apply ( this ,
c ) } , attachListener : function ( a , b , c , d , e , f ) { ! this . _ . listeners && ( this . _ . listeners = [ ] ) ; var h = Array . prototype . slice . call ( arguments , 1 ) ; this . _ . listeners . push ( a . on . apply ( a , h ) ) } , 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 ) if ( a . hasOwnProperty ( c ) ) { b = a [ c ] ; b !== null ? this . setAttribute ( c , b ) : this . removeAttribute ( c ) } } , attachClass : function ( a ) { var b = this . getCustomData ( "classes" ) ; if ( ! this . hasClass ( a ) ) { ! b &&
( b = [ ] ) ; b . push ( a ) ; this . setCustomData ( "classes" , b ) ; this . addClass ( a ) } } , changeAttr : function ( a , b ) { var c = this . getAttribute ( a ) ; if ( b !== c ) { ! this . _ . attrChanges && ( this . _ . attrChanges = { } ) ; a in this . _ . attrChanges || ( this . _ . attrChanges [ a ] = c ) ; this . setAttribute ( a , b ) } } , insertHtml : function ( a , b ) { e ( this ) ; m ( this , b || "html" , a ) } , insertText : function ( a ) { e ( this ) ; var b = this . editor , c = b . getSelection ( ) . getStartElement ( ) . hasAscendant ( "pre" , true ) ? CKEDITOR . ENTER _BR : b . config . enterMode , b = c == CKEDITOR . ENTER _BR , d = CKEDITOR . tools , a = d . htmlEncode ( a . replace ( /\r\n/g ,
"\n" ) ) , a = a . replace ( /\t/g , " " ) , c = c == CKEDITOR . ENTER _P ? "p" : "div" ; if ( ! b ) { var f = /\n{2}/g ; if ( f . test ( a ) ) var h = "<" + c + ">" , i = "</" + c + ">" , a = h + a . replace ( f , function ( ) { return i + h } ) + i } a = a . replace ( /\n/g , "<br>" ) ; b || ( a = a . replace ( RegExp ( "<br>(?=</" + c + ">)" ) , function ( a ) { return d . repeat ( a , 2 ) } ) ) ; a = a . replace ( /^ | $/g , " " ) ; a = a . replace ( /(>|\s) /g , function ( a , b ) { return b + " " } ) . replace ( / (?=<)/g , " " ) ; m ( this , "text" , a ) } , insertElement : function ( b ) { e ( this ) ; for ( var c = this . editor , d = c . config . enterMode ,
g = c . getSelection ( ) , f = g . getRanges ( ) , i = b . getName ( ) , j = CKEDITOR . dtd . $block [ i ] , o , m , k , s = f . length - 1 ; s >= 0 ; s -- ) { o = f [ s ] ; if ( ! o . checkReadOnly ( ) ) { o . deleteContents ( 1 ) ; m = ! s && b || b . clone ( 1 ) ; var x , z ; if ( j ) for ( ; ( x = o . getCommonAncestor ( 0 , 1 ) ) && ( z = CKEDITOR . dtd [ x . getName ( ) ] ) && ( ! z || ! z [ i ] ) ; ) if ( x . getName ( ) in CKEDITOR . dtd . span ) o . splitElement ( x ) ; else if ( o . checkStartOfBlock ( ) && o . checkEndOfBlock ( ) ) { o . setStartBefore ( x ) ; o . collapse ( true ) ; x . remove ( ) } else o . splitBlock ( d == CKEDITOR . ENTER _DIV ? "div" : "p" , c . editable ( ) ) ; o . insertNode ( m ) ; k ||
( k = m ) } } if ( k ) { o . moveToPosition ( k , CKEDITOR . POSITION _AFTER _END ) ; if ( j ) if ( ( b = k . getNext ( a ) ) && b . type == CKEDITOR . NODE _ELEMENT && b . is ( CKEDITOR . dtd . $block ) ) b . getDtd ( ) [ "#" ] ? o . moveToElementEditStart ( b ) : o . moveToElementEditEnd ( k ) ; else if ( ! b && d != CKEDITOR . ENTER _BR ) { b = o . fixBlock ( true , d == CKEDITOR . ENTER _DIV ? "div" : "p" ) ; o . moveToElementEditStart ( b ) } } g . selectRanges ( [ o ] ) ; h ( this , CKEDITOR . env . opera ) } , setData : function ( a , b ) { ! b && this . editor . dataProcessor && ( a = this . editor . dataProcessor . toHtml ( a ) ) ; this . setHtml ( a ) ; this . editor . fire ( "dataReady" ) } ,
g = c . getSelection ( ) , f = g . getRanges ( ) , i = b . getName ( ) , j = CKEDITOR . dtd . $block [ i ] , n , m , l , r = f . length - 1 ; r >= 0 ; r -- ) { n = f [ r ] ; if ( ! n . checkReadOnly ( ) ) { n . deleteContents ( 1 ) ; m = ! r && b || b . clone ( 1 ) ; var x , z ; if ( j ) for ( ; ( x = n . getCommonAncestor ( 0 , 1 ) ) && ( z = CKEDITOR . dtd [ x . getName ( ) ] ) && ( ! z || ! z [ i ] ) ; ) if ( x . getName ( ) in CKEDITOR . dtd . span ) n . splitElement ( x ) ; else if ( n . checkStartOfBlock ( ) && n . checkEndOfBlock ( ) ) { n . setStartBefore ( x ) ; n . collapse ( true ) ; x . remove ( ) } else n . splitBlock ( d == CKEDITOR . ENTER _DIV ? "div" : "p" , c . editable ( ) ) ; n . insertNode ( m ) ; l ||
( l = m ) } } if ( l ) { n . moveToPosition ( l , CKEDITOR . POSITION _AFTER _END ) ; if ( j ) if ( ( b = l . getNext ( a ) ) && b . type == CKEDITOR . NODE _ELEMENT && b . is ( CKEDITOR . dtd . $block ) ) b . getDtd ( ) [ "#" ] ? n . moveToElementEditStart ( b ) : n . moveToElementEditEnd ( l ) ; else if ( ! b && d != CKEDITOR . ENTER _BR ) { b = n . fixBlock ( true , d == CKEDITOR . ENTER _DIV ? "div" : "p" ) ; n . moveToElementEditStart ( b ) } } g . selectRanges ( [ n ] ) ; h ( this , CKEDITOR . env . opera ) } , setData : function ( a , b ) { ! b && this . editor . dataProcessor && ( a = this . editor . dataProcessor . toHtml ( a ) ) ; this . setHtml ( a ) ; this . editor . fire ( "dataReady" ) } ,
getData : function ( a ) { var b = this . getHtml ( ) ; ! a && this . editor . dataProcessor && ( b = this . editor . dataProcessor . toDataFormat ( b ) ) ; return b } , setReadOnly : function ( a ) { this . setAttribute ( "contenteditable" , ! a ) } , detach : function ( ) { this . removeClass ( "cke_editable" ) ; var a = this . editor ; this . _ . detach ( ) ; delete a . document ; delete a . window } , isInline : function ( ) { return this . getDocument ( ) . equals ( CKEDITOR . document ) } , setup : function ( ) { var a = this . editor ; this . attachListener ( a , "beforeGetData" , function ( ) { var b = this . getData ( ) ; this . is ( "textarea" ) ||
a . config . ignoreEmptyParagraph !== false && ( b = b . replace ( j , 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 ( ) ) && b . type == "Control" || this . focus ( ) } , this ) ; this . attachListener ( a , "insertHtml" ,
function ( a ) { this . insertHtml ( a . data . dataValue , a . data . mode ) } , 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" ) ; this . attachClass ( a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? "cke_editable_inline" : a . elementMode == CKEDITOR . ELEMENT _MODE _REPLACE || a . elementMode == CKEDITOR . ELEMENT _MODE _APPENDTO ? "cke_editable_themed" : "" ) ; this . attachClass ( "cke_contents_" +
a . config . contentsLangDirection ) ; a . keystrokeHandler . blockedKeystrokes [ 8 ] = + a . readOnly ; a . keystrokeHandler . attach ( this ) ; this . on ( "blur" , function ( a ) { CKEDITOR . env . opera && CKEDITOR . document . getActive ( ) . equals ( this . isInline ( ) ? this : this . getWindow ( ) . getFrame ( ) ) ? a . cancel ( ) : this . hasFocus = false } , null , null , - 1 ) ; this . on ( "focus" , function ( ) { this . hasFocus = true } , null , null , - 1 ) ; a . focusManager . add ( this ) ; if ( this . equals ( CKEDITOR . document . getActive ( ) ) ) { this . hasFocus = true ; a . once ( "contentDom" , function ( ) { a . focusManager . focus ( ) } ) } this . isInline ( ) &&
this . changeAttr ( "tabindex" , a . tabIndex ) ; if ( ! this . is ( "textarea" ) ) { a . document = this . getDocument ( ) ; a . window = this . getWindow ( ) ; var b = a . document ; this . changeAttr ( "spellcheck" , ! a . config . disableNativeSpellChecker ) ; var e = a . config . contentsLangDirection ; this . getDirection ( 1 ) != e && this . changeAttr ( "dir" , e ) ; var g = CKEDITOR . getCss ( ) ; if ( g ) { e = b . getHead ( ) ; if ( ! e . getCustomData ( "stylesheet" ) ) { g = b . appendStyleText ( g ) ; g = new CKEDITOR . dom . element ( g . ownerNode || g . owningElement ) ; e . setCustomData ( "stylesheet" , g ) ; g . data ( "cke-temp" , 1 ) } } e =
b . getCustomData ( "stylesheet_ref" ) || 0 ; b . setCustomData ( "stylesheet_ref" , e + 1 ) ; this . setCustomData ( "cke_includeReadonly" , ! a . config . disableReadonlyStyling ) ; this . attachListener ( this , "click" , function ( a ) { var a = a . data , b = a . getTarget ( ) ; b . is ( "a" ) && ( a . $ . button != 2 && b . isReadOnly ( ) ) && a . preventDefault ( ) } ) ; this . attachListener ( a , "key" , function ( b ) { if ( a . readOnly ) return true ; var c = b . data . keyCode , g ; if ( c in { 8 : 1 , 46 : 1 } ) { var e = a . getSelection ( ) , b = e . getRanges ( ) [ 0 ] , f = b . startPath ( ) , l , h , j , c = c == 8 ; if ( e = d ( e ) ) { a . fire ( "saveSnapshot" ) ;
b . moveToPosition ( e , CKEDITOR . POSITION _BEFORE _START ) ; e . remove ( ) ; b . select ( ) ; a . fire ( "saveSnapshot" ) ; g = 1 } else if ( b . collapsed ) if ( ( l = f . block ) && b [ c ? "checkStartOfBlock" : "checkEndOfBlock" ] ( ) && ( j = l [ c ? "getPrevious" : "getNext" ] ( i ) ) && j . is ( "table" ) ) { a . fire ( "saveSnapshot" ) ; b [ c ? "checkEndOfBlock" : "checkStartOfBlock" ] ( ) && l . remove ( ) ; b [ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( j ) ; b . select ( ) ; a . fire ( "saveSnapshot" ) ; g = 1 } else if ( f . blockLimit && f . blockLimit . is ( "td" ) && ( h = f . blockLimit . getAscendant ( "table" ) ) && b . checkBoundaryOfElement ( h ,
c ? CKEDITOR . START : CKEDITOR . END ) && ( j = h [ c ? "getPrevious" : "getNext" ] ( i ) ) ) { a . fire ( "saveSnapshot" ) ; b [ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( j ) ; b . checkStartOfBlock ( ) && b . checkEndOfBlock ( ) ? j . remove ( ) : b . select ( ) ; a . fire ( "saveSnapshot" ) ; g = 1 } else if ( ( h = f . contains ( [ "td" , "th" , "caption" ] ) ) && b . checkBoundaryOfElement ( h , c ? CKEDITOR . START : CKEDITOR . END ) ) g = 1 } return ! g } ) ; CKEDITOR . env . ie && this . attachListener ( this , "click" , c ) ; ! CKEDITOR . env . ie && ! CKEDITOR . env . opera && this . attachListener ( this , "mousedown" , function ( b ) { var c = b . data . getTarget ( ) ;
if ( c . is ( "img" , "hr" , "input" , "textarea" , "select" ) ) { a . getSelection ( ) . selectElement ( c ) ; c . is ( "input" , "textarea" , "select" ) && b . data . preventDefault ( ) } } ) ; CKEDITOR . env . gecko && this . attachListener ( this , "mouseup" , function ( b ) { if ( b . data . $ . button == 2 ) { b = b . data . getTarget ( ) ; if ( ! b . getOuterHtml ( ) . replace ( j , "" ) ) { var c = a . createRange ( ) ; c . moveToElementEditStart ( b ) ; c . select ( true ) } } } ) ; if ( 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 ( ) } ) } } } } , _ : { 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 ( ) ) ; a = this . getDocument ( ) ; var b = a . getHead ( ) ; if ( b . getCustomData ( "stylesheet" ) ) { var c = a . getCustomData ( "stylesheet_ref" ) ; if ( -- c ) a . setCustomData ( "stylesheet_ref" , c ) ; else { a . removeCustomData ( "stylesheet_ref" ) ; b . removeCustomData ( "stylesheet" ) . remove ( ) } } delete this . editor } } } ) ;
CKEDITOR . editor . prototype . editable = function ( a ) { var b = this . _ . editable ; if ( b && a ) return 0 ; if ( arguments . length ) b = this . _ . editable = a ? a instanceof CKEDITOR . editable ? a : new CKEDITOR . editable ( this , a ) : ( b && b . detach ( ) , null ) ; return b } ; var j = /(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi , i = CKEDITOR . dom . walker . whitespaces ( true ) , k = CKEDITOR . dom . walker . bookmark ( false , true ) ; CKEDITOR . on ( "instanceLoaded" , function ( a ) { var c = a . editor ; c . on ( "insertElement" ,
function ( a ) { a = a . data ; if ( a . type == CKEDITOR . NODE _ELEMENT && ( a . is ( "input" ) || a . is ( "textarea" ) ) ) { a . getAttribute ( "contentEditable" ) != "false" && a . data ( "cke-editable" , a . hasAttribute ( "contenteditable" ) ? "true" : "1" ) ; a . setAttribute ( "contentEditable" , false ) } } ) ; c . on ( "selectionChange" , function ( a ) { if ( ! c . readOnly ) { var d = c . getSelection ( ) ; if ( d && ! d . isLocked ) { d = c . checkDirty ( ) ; c . fire ( "lockSnapshot" ) ; b ( a ) ; 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 ) ; if ( c = this . ui . space ( this . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? "top" : "contents" ) ) { var d = CKEDITOR . tools . getNextId ( ) , e = CKEDITOR . dom . element . createFromHtml ( '<span id="' + d + '" class="cke_voice_label">' + this . lang . common . editorHelp + "</span>" ) ; c . append ( e ) ; a . changeAttr ( "aria-describedby" , d ) } } } ) } ) ; CKEDITOR . addCss ( ".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}" ) ;
var m = function ( ) { function b ( a ) { return a . type == CKEDITOR . NODE _ELEMENT } function c ( a , d ) { var g , e , f , h , n = [ ] , l = d . range . startContainer ; g = d . range . startPath ( ) ; for ( var l = i [ l . getName ( ) ] , o = 0 , p = a . getChildren ( ) , j = p . count ( ) , m = - 1 , k = - 1 , v = 0 , F = g . contains ( i . $list ) ; o < j ; ++ o ) { g = p . getItem ( o ) ; if ( b ( g ) ) { f = g . getName ( ) ; if ( F && f in CKEDITOR . dtd . $list ) n = n . concat ( c ( g , d ) ) ; else { h = ! ! l [ f ] ; if ( f == "br" && g . data ( "cke-eol" ) && ( ! o || o == j - 1 ) ) { v = ( e = o ? n [ o - 1 ] . node : p . getItem ( o + 1 ) ) && ( ! b ( e ) || ! e . is ( "br" ) ) ; e = e && b ( e ) && i . $block [ e . getName ( ) ] } m == - 1 && ! h && ( m =
o ) ; h || ( k = o ) ; n . push ( { isElement : 1 , isLineBreak : v , isBlock : g . isBlockBoundary ( ) , hasBlockSibling : e , node : g , name : f , allowed : h } ) ; e = v = 0 } } else n . push ( { isElement : 0 , node : g , allowed : 1 } ) } if ( m > - 1 ) n [ m ] . firstNotAllowed = 1 ; if ( k > - 1 ) n [ k ] . lastNotAllowed = 1 ; return n } function d ( a , c ) { var g = [ ] , e = a . getChildren ( ) , f = e . count ( ) , h , n = 0 , o = i [ c ] , p = ! a . is ( i . $inline ) || a . is ( "br" ) ; for ( p && g . push ( " " ) ; n < f ; n ++ ) { h = e . getItem ( n ) ; b ( h ) && ! h . is ( o ) ? g = g . concat ( d ( h , c ) ) : g . push ( h ) } p && g . push ( " " ) ; return g } function g ( a ) { return a && b ( a ) && ( a . is ( i . $removeEmpty ) ||
a . is ( "a" ) && ! a . isBlockBoundary ( ) ) } function e ( a , c , d , g ) { var f = a . clone ( ) , h , n ; f . setEndAt ( c , CKEDITOR . POSITION _BEFORE _END ) ; if ( ( h = ( new CKEDITOR . dom . walker ( f ) ) . next ( ) ) && b ( h ) && o [ h . getName ( ) ] && ( n = h . getPrevious ( ) ) && b ( n ) && ! n . getParent ( ) . equals ( a . startContainer ) && d . contains ( n ) && g . contains ( h ) && h . isIdentical ( n ) ) { h . moveChildren ( n ) ; h . remove ( ) ; e ( a , c , d , g ) } } function f ( a , c ) { function d ( a , c ) { if ( c . isBlock && c . isElement && ! c . node . is ( "br" ) && b ( a ) && a . is ( "br" ) ) { a . remove ( ) ; return 1 } } var g = c . endContainer . getChild ( c . endOffset ) , e = c . endContainer . getChild ( c . endOffset -
1 ) ; g && d ( g , a [ a . length - 1 ] ) ; if ( e && d ( e , a [ 0 ] ) ) { c . setEnd ( c . endContainer , c . endOffset - 1 ) ; c . collapse ( ) } } var i = CKEDITOR . dtd , o = { 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 } , j = { p : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 } , m = CKEDITOR . tools . extend ( { } , i . $inline ) ; delete m . br ; return function ( o , k , z ) { var t = o . editor ; o . getDocument ( ) ; var C = t . getSelection ( ) . getRanges ( ) [ 0 ] , y = false ; if ( k == "unfiltered_html" ) { k = "html" ; y = true } if ( ! C . checkReadOnly ( ) ) { var n = ( new CKEDITOR . dom . elementPath ( C . startContainer ,
C . root ) ) . blockLimit || C . root , k = { type : k , dontFilter : y , editable : o , editor : t , range : C , blockLimit : n , mergeCandidates : [ ] , zombies : [ ] } , t = k . range , y = k . mergeCandidates , w , I , G , D ; if ( k . type == "text" && t . shrink ( CKEDITOR . SHRINK _ELEMENT , true , false ) ) { w = CKEDITOR . dom . element . createFromHtml ( "<span> </span>" , t . document ) ; t . insertNode ( w ) ; t . setStartAfter ( w ) } I = new CKEDITOR . dom . elementPath ( t . startContainer ) ; k . endPath = G = new CKEDITOR . dom . elementPath ( t . endContainer ) ; if ( ! t . collapsed ) { var n = G . block || G . blockLimit , Q = t . getCommonAncestor ( ) ;
n && ( ! n . equals ( Q ) && ! n . contains ( Q ) && t . checkEndOfBlock ( ) ) && k . zombies . push ( n ) ; t . deleteContents ( ) } for ( ; ( D = b ( t . startContainer ) && t . startContainer . getChild ( t . startOffset - 1 ) ) && b ( D ) && D . isBlockBoundary ( ) && I . contains ( D ) ; ) t . moveToPosition ( D , CKEDITOR . POSITION _BEFORE _END ) ; e ( t , k . blockLimit , I , G ) ; if ( w ) { t . setEndBefore ( w ) ; t . collapse ( ) ; w . remove ( ) } w = t . startPath ( ) ; if ( n = w . contains ( g , false , 1 ) ) { t . splitElement ( n ) ; k . inlineStylesRoot = n ; k . inlineStylesPeak = w . lastElement } w = t . createBookmark ( ) ; ( n = w . startNode . getPrevious ( a ) ) && b ( n ) &&
g ( n ) && y . push ( n ) ; ( n = w . startNode . getNext ( a ) ) && b ( n ) && g ( n ) && y . push ( n ) ; for ( n = w . startNode ; ( n = n . getParent ( ) ) && g ( n ) ; ) y . push ( n ) ; t . moveToBookmark ( w ) ; if ( w = z ) { w = k . range ; if ( k . type == "text" && k . inlineStylesRoot ) { D = k . inlineStylesPeak ; t = D . getDocument ( ) . createText ( "{cke-peak}" ) ; for ( y = k . inlineStylesRoot . getParent ( ) ; ! D . equals ( y ) ; ) { t = t . appendTo ( D . clone ( ) ) ; D = D . getParent ( ) } z = t . getOuterHtml ( ) . split ( "{cke-peak}" ) . join ( z ) } D = k . blockLimit . getName ( ) ; if ( /^\s+|\s+$/ . test ( z ) && "span" in CKEDITOR . dtd [ D ] ) var L = '<span data-cke-marker="1"> </span>' ,
z = L + z + L ; z = k . editor . dataProcessor . toHtml ( z , null , false , k . dontFilter ) ; D = w . document . createElement ( "body" ) ; D . setHtml ( z ) ; if ( L ) { D . getFirst ( ) . remove ( ) ; D . getLast ( ) . remove ( ) } if ( ( L = w . startPath ( ) . block ) && ! ( L . getChildCount ( ) == 1 && L . getBogus ( ) ) ) a : { var E ; if ( D . getChildCount ( ) == 1 && b ( E = D . getFirst ( ) ) && E . is ( j ) ) { L = E . getElementsByTag ( "*" ) ; w = 0 ; for ( y = L . count ( ) ; w < y ; w ++ ) { t = L . getItem ( w ) ; if ( ! t . is ( m ) ) break a } E . moveChildren ( E . getParent ( 1 ) ) ; E . remove ( ) } } k . dataWrapper = D ; w = z } if ( w ) { E = k . range ; var L = E . document , B , z = k . blockLimit ; w = 0 ; var J ;
D = [ ] ; var H , N , y = t = 0 , K , O ; I = E . startContainer ; var n = k . endPath . elements [ 0 ] , P ; G = n . getPosition ( I ) ; Q = ! ! n . getCommonAncestor ( I ) && G != CKEDITOR . POSITION _IDENTICAL && ! ( G & CKEDITOR . POSITION _CONTAINS + CKEDITOR . POSITION _IS _CONTAINED ) ; I = c ( k . dataWrapper , k ) ; for ( f ( I , E ) ; w < I . length ; w ++ ) { G = I [ w ] ; if ( B = G . isLineBreak ) { B = E ; K = z ; var M = void 0 , R = void 0 ; if ( G . hasBlockSibling ) B = 1 ; else { M = B . startContainer . getAscendant ( i . $block , 1 ) ; if ( ! M || ! M . is ( { div : 1 , p : 1 } ) ) B = 0 ; else { R = M . getPosition ( K ) ; if ( R == CKEDITOR . POSITION _IDENTICAL || R == CKEDITOR . POSITION _CONTAINS ) B =
0 ; else { K = B . splitElement ( M ) ; B . moveToPosition ( K , CKEDITOR . POSITION _AFTER _START ) ; B = 1 } } } } if ( B ) y = w > 0 ; else { B = E . startPath ( ) ; if ( ! G . isBlock && ( N = k . editor . config . enterMode != CKEDITOR . ENTER _BR && k . editor . config . autoParagraph !== false ? k . editor . config . enterMode == CKEDITOR . ENTER _DIV ? "div" : "p" : false ) && ! B . block && B . blockLimit && B . blockLimit . equals ( E . root ) ) { N = L . createElement ( N ) ; ! CKEDITOR . env . ie && N . appendBogus ( ) ; E . insertNode ( N ) ; ! CKEDITOR . env . ie && ( J = N . getBogus ( ) ) && J . remove ( ) ; E . moveToPosition ( N , CKEDITOR . POSITION _BEFORE _END ) } if ( ( B =
E . startPath ( ) . block ) && ! B . equals ( H ) ) { if ( J = B . getBogus ( ) ) { J . remove ( ) ; D . push ( B ) } H = B } G . firstNotAllowed && ( t = 1 ) ; if ( t && G . isElement ) { B = E . startContainer ; for ( K = null ; B && ! i [ B . getName ( ) ] [ G . name ] ; ) { if ( B . equals ( z ) ) { B = null ; break } K = B ; B = B . getParent ( ) } if ( B ) { if ( K ) { O = E . splitElement ( K ) ; k . zombies . push ( O ) ; k . zombies . push ( K ) } } else { K = z . getName ( ) ; P = ! w ; B = w == I . length - 1 ; K = d ( G . node , K ) ; for ( var M = [ ] , R = K . length , T = 0 , U = void 0 , V = 0 , W = - 1 ; T < R ; T ++ ) { U = K [ T ] ; if ( U == " " ) { if ( ! V && ( ! P || T ) ) { M . push ( new CKEDITOR . dom . text ( " " ) ) ; W = M . length } V = 1 } else { M . push ( U ) ;
V = 0 } } B && W == M . length && M . pop ( ) ; P = M } } if ( P ) { for ( ; B = P . pop ( ) ; ) E . insertNode ( B ) ; P = 0 } else E . insertNode ( G . node ) ; if ( G . lastNotAllowed && w < I . length - 1 ) { ( O = Q ? n : O ) && E . setEndAt ( O , CKEDITOR . POSITION _AFTER _START ) ; t = 0 } E . collapse ( ) } } k . dontMoveCaret = y ; k . bogusNeededBlocks = D } J = k . range ; var S ; O = k . bogusNeededBlocks ; for ( P = J . createBookmark ( ) ; H = k . zombies . pop ( ) ; ) if ( H . getParent ( ) ) { N = J . clone ( ) ; N . moveToElementEditStart ( H ) ; N . removeEmptyBlocksAtEnd ( ) } if ( O ) for ( ; H = O . pop ( ) ; ) H . append ( CKEDITOR . env . ie ? J . document . createText ( " " ) : J . document . createElement ( "br" ) ) ;
for ( ; H = k . mergeCandidates . pop ( ) ; ) H . mergeSiblings ( ) ; J . moveToBookmark ( P ) ; if ( ! k . dontMoveCaret ) { for ( H = b ( J . startContainer ) && J . startContainer . getChild ( J . startOffset - 1 ) ; H && b ( H ) && ! H . is ( i . $empty ) ; ) { if ( H . isBlockBoundary ( ) ) J . moveToPosition ( H , CKEDITOR . POSITION _BEFORE _END ) ; else { if ( g ( H ) && H . getHtml ( ) . match ( /(\s| )$/g ) ) { S = null ; break } S = J . clone ( ) ; S . moveToPosition ( H , CKEDITOR . POSITION _BEFORE _END ) } H = H . getLast ( a ) } S && J . moveToRange ( S ) } C . select ( ) ; h ( o ) } } } ( ) } ) ( ) ;
( function ( ) { function b ( ) { var a = this . getSelection ( 1 ) ; if ( a . getType ( ) != CKEDITOR . SELECTION _NONE ) { this . fire ( "selectionCheck" , a ) ; var b = this . elementPath ( ) ; if ( ! b . compare ( this . _ . selectionPreviousPath ) ) { this . _ . selectionPreviousPath = b ; this . fire ( "selectionChange" , { selection : a , path : b } ) } } } function c ( ) { k = true ; if ( ! i ) { a . call ( this ) ; i = CKEDITOR . tools . setTimeout ( a , 200 , this ) } } function a ( ) { i = null ; if ( k ) { CKEDITOR . tools . setTimeout ( b , 0 , this ) ; k = false } } function f ( a ) { function b ( c , d ) { return ! c || c . type == CKEDITOR . NODE _TEXT ? false :
b . getCustomData ( "stylesheet_ref" ) || 0 ; b . setCustomData ( "stylesheet_ref" , e + 1 ) ; this . setCustomData ( "cke_includeReadonly" , ! a . config . disableReadonlyStyling ) ; this . attachListener ( this , "click" , function ( a ) { var a = a . data , b = ( new CKEDITOR . dom . elementPath ( a . getTarget ( ) , this ) ) . contains ( "a" ) ; b && ( a . $ . button != 2 && b . isReadOnly ( ) ) && a . preventDefault ( ) } ) ; this . attachListener ( a , "key" , function ( b ) { if ( a . readOnly ) return true ; var c = b . data . keyCode , g ; if ( c in { 8 : 1 , 46 : 1 } ) { var e = a . getSelection ( ) , b = e . getRanges ( ) [ 0 ] , f = b . startPath ( ) , h , k ,
j , c = c == 8 ; if ( e = d ( e ) ) { a . fire ( "saveSnapshot" ) ; b . moveToPosition ( e , CKEDITOR . POSITION _BEFORE _START ) ; e . remove ( ) ; b . select ( ) ; a . fire ( "saveSnapshot" ) ; g = 1 } else if ( b . collapsed ) if ( ( h = f . block ) && b [ c ? "checkStartOfBlock" : "checkEndOfBlock" ] ( ) && ( j = h [ c ? "getPrevious" : "getNext" ] ( i ) ) && j . is ( "table" ) ) { a . fire ( "saveSnapshot" ) ; b [ c ? "checkEndOfBlock" : "checkStartOfBlock" ] ( ) && h . remove ( ) ; b [ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( j ) ; b . select ( ) ; a . fire ( "saveSnapshot" ) ; g = 1 } else if ( f . blockLimit && f . blockLimit . is ( "td" ) && ( k = f . blockLimit . getAscendant ( "table" ) ) &&
b . checkBoundaryOfElement ( k , c ? CKEDITOR . START : CKEDITOR . END ) && ( j = k [ c ? "getPrevious" : "getNext" ] ( i ) ) ) { a . fire ( "saveSnapshot" ) ; b [ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( j ) ; b . checkStartOfBlock ( ) && b . checkEndOfBlock ( ) ? j . remove ( ) : b . select ( ) ; a . fire ( "saveSnapshot" ) ; g = 1 } else if ( ( k = f . contains ( [ "td" , "th" , "caption" ] ) ) && b . checkBoundaryOfElement ( k , c ? CKEDITOR . START : CKEDITOR . END ) ) g = 1 } return ! g } ) ; CKEDITOR . env . ie && this . attachListener ( this , "click" , c ) ; ! CKEDITOR . env . ie && ! CKEDITOR . env . opera && this . attachListener ( this , "mousedown" ,
function ( b ) { var c = b . data . getTarget ( ) ; if ( c . is ( "img" , "hr" , "input" , "textarea" , "select" ) ) { a . getSelection ( ) . selectElement ( c ) ; c . is ( "input" , "textarea" , "select" ) && b . data . preventDefault ( ) } } ) ; CKEDITOR . env . gecko && this . attachListener ( this , "mouseup" , function ( b ) { if ( b . data . $ . button == 2 ) { b = b . data . getTarget ( ) ; if ( ! b . getOuterHtml ( ) . replace ( j , "" ) ) { var c = a . createRange ( ) ; c . moveToElementEditStart ( b ) ; c . select ( true ) } } } ) ; if ( 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 ( ) } ) } } } } , _ : { 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 ( ) ) ; a = this . getDocument ( ) ; var b = a . getHead ( ) ; if ( b . getCustomData ( "stylesheet" ) ) { var c = a . getCustomData ( "stylesheet_ref" ) ; if ( -- c ) a . setCustomData ( "stylesheet_ref" , c ) ; else { a . removeCustomData ( "stylesheet_ref" ) ;
b . removeCustomData ( "stylesheet" ) . remove ( ) } } delete this . editor } } } ) ; CKEDITOR . editor . prototype . editable = function ( a ) { var b = this . _ . editable ; if ( b && a ) return 0 ; if ( arguments . length ) b = this . _ . editable = a ? a instanceof CKEDITOR . editable ? a : new CKEDITOR . editable ( this , a ) : ( b && b . detach ( ) , null ) ; return b } ; var j = /(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi , i = CKEDITOR . dom . walker . whitespaces ( true ) , l = CKEDITOR . dom . walker . bookmark ( false , true ) ;
CKEDITOR . on ( "instanceLoaded" , function ( a ) { var c = a . editor ; c . on ( "insertElement" , function ( a ) { a = a . data ; if ( a . type == CKEDITOR . NODE _ELEMENT && ( a . is ( "input" ) || a . is ( "textarea" ) ) ) { a . getAttribute ( "contentEditable" ) != "false" && a . data ( "cke-editable" , a . hasAttribute ( "contenteditable" ) ? "true" : "1" ) ; a . setAttribute ( "contentEditable" , false ) } } ) ; c . on ( "selectionChange" , function ( a ) { if ( ! c . readOnly ) { var d = c . getSelection ( ) ; if ( d && ! d . isLocked ) { d = c . checkDirty ( ) ; c . fire ( "lockSnapshot" ) ; b ( a ) ; 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 ) ; if ( c = this . ui . space ( this . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? "top" : "contents" ) ) { var d = CKEDITOR . tools . getNextId ( ) , e = CKEDITOR . dom . element . createFromHtml ( '<span id="' + d + '" class="cke_voice_label">' + this . lang . common . editorHelp + "</span>" ) ; c . append ( e ) ; a . changeAttr ( "aria-describedby" ,
d ) } } } ) } ) ; CKEDITOR . addCss ( ".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}" ) ; var m = function ( ) { function b ( a ) { return a . type == CKEDITOR . NODE _ELEMENT } function c ( a , d ) { var g , e , f , h , k = [ ] , n = d . range . startContainer ; g = d . range . startPath ( ) ; for ( var n = i [ n . getName ( ) ] , p = 0 , j = a . getChildren ( ) , m = j . count ( ) , l = - 1 , v = - 1 , E = 0 , B = g . contains ( i . $list ) ; p < m ; ++ p ) { g = j . getItem ( p ) ; if ( b ( g ) ) { f = g . getName ( ) ; if ( B && f in CKEDITOR . dtd . $list ) k = k . concat ( c ( g , d ) ) ; else { h = ! ! n [ f ] ; if ( f == "br" && g . data ( "cke-eol" ) &&
( ! p || p == m - 1 ) ) { E = ( e = p ? k [ p - 1 ] . node : j . getItem ( p + 1 ) ) && ( ! b ( e ) || ! e . is ( "br" ) ) ; e = e && b ( e ) && i . $block [ e . getName ( ) ] } l == - 1 && ! h && ( l = p ) ; h || ( v = p ) ; k . push ( { isElement : 1 , isLineBreak : E , isBlock : g . isBlockBoundary ( ) , hasBlockSibling : e , node : g , name : f , allowed : h } ) ; e = E = 0 } } else k . push ( { isElement : 0 , node : g , allowed : 1 } ) } if ( l > - 1 ) k [ l ] . firstNotAllowed = 1 ; if ( v > - 1 ) k [ v ] . lastNotAllowed = 1 ; return k } function d ( a , c ) { var g = [ ] , e = a . getChildren ( ) , f = e . count ( ) , h , o = 0 , n = i [ c ] , p = ! a . is ( i . $inline ) || a . is ( "br" ) ; for ( p && g . push ( " " ) ; o < f ; o ++ ) { h = e . getItem ( o ) ; b ( h ) &&
! h . is ( n ) ? g = g . concat ( d ( h , c ) ) : g . push ( h ) } p && g . push ( " " ) ; return g } function g ( a ) { return a && b ( a ) && ( a . is ( i . $removeEmpty ) || a . is ( "a" ) && ! a . isBlockBoundary ( ) ) } function e ( a , c , d , g ) { var f = a . clone ( ) , h , k ; f . setEndAt ( c , CKEDITOR . POSITION _BEFORE _END ) ; if ( ( h = ( new CKEDITOR . dom . walker ( f ) ) . next ( ) ) && b ( h ) && n [ h . getName ( ) ] && ( k = h . getPrevious ( ) ) && b ( k ) && ! k . getParent ( ) . equals ( a . startContainer ) && d . contains ( k ) && g . contains ( h ) && h . isIdentical ( k ) ) { h . moveChildren ( k ) ; h . remove ( ) ; e ( a , c , d , g ) } } function f ( a , c ) { function d ( a , c ) { if ( c . isBlock && c . isElement &&
! c . node . is ( "br" ) && b ( a ) && a . is ( "br" ) ) { a . remove ( ) ; return 1 } } var g = c . endContainer . getChild ( c . endOffset ) , e = c . endContainer . getChild ( c . endOffset - 1 ) ; g && d ( g , a [ a . length - 1 ] ) ; if ( e && d ( e , a [ 0 ] ) ) { c . setEnd ( c . endContainer , c . endOffset - 1 ) ; c . collapse ( ) } } var i = 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 } , j = { p : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 } , m = CKEDITOR . tools . extend ( { } , i . $inline ) ; delete m . br ; return function ( n , l , z ) { var s = n . editor ; n . getDocument ( ) ; var C = s . getSelection ( ) . getRanges ( ) [ 0 ] ,
y = false ; if ( l == "unfiltered_html" ) { l = "html" ; y = true } if ( ! C . checkReadOnly ( ) ) { var o = ( new CKEDITOR . dom . elementPath ( C . startContainer , C . root ) ) . blockLimit || C . root , l = { type : l , dontFilter : y , editable : n , editor : s , range : C , blockLimit : o , mergeCandidates : [ ] , zombies : [ ] } , s = l . range , y = l . mergeCandidates , u , I , G , D ; if ( l . type == "text" && s . shrink ( CKEDITOR . SHRINK _ELEMENT , true , false ) ) { u = CKEDITOR . dom . element . createFromHtml ( "<span> </span>" , s . document ) ; s . insertNode ( u ) ; s . setStartAfter ( u ) } I = new CKEDITOR . dom . elementPath ( s . startContainer ) ;
l . endPath = G = new CKEDITOR . dom . elementPath ( s . endContainer ) ; if ( ! s . collapsed ) { var o = G . block || G . blockLimit , Q = s . getCommonAncestor ( ) ; o && ( ! o . equals ( Q ) && ! o . contains ( Q ) && s . checkEndOfBlock ( ) ) && l . zombies . push ( o ) ; s . deleteContents ( ) } for ( ; ( D = b ( s . startContainer ) && s . startContainer . getChild ( s . startOffset - 1 ) ) && b ( D ) && D . isBlockBoundary ( ) && I . contains ( D ) ; ) s . moveToPosition ( D , CKEDITOR . POSITION _BEFORE _END ) ; e ( s , l . blockLimit , I , G ) ; if ( u ) { s . setEndBefore ( u ) ; s . collapse ( ) ; u . remove ( ) } u = s . startPath ( ) ; if ( o = u . contains ( g , false , 1 ) ) { s . splitElement ( o ) ;
l . inlineStylesRoot = o ; l . inlineStylesPeak = u . lastElement } u = s . createBookmark ( ) ; ( o = u . startNode . getPrevious ( a ) ) && b ( o ) && g ( o ) && y . push ( o ) ; ( o = u . startNode . getNext ( a ) ) && b ( o ) && g ( o ) && y . push ( o ) ; for ( o = u . startNode ; ( o = o . getParent ( ) ) && g ( o ) ; ) y . push ( o ) ; s . moveToBookmark ( u ) ; if ( u = z ) { u = l . range ; if ( l . type == "text" && l . inlineStylesRoot ) { D = l . inlineStylesPeak ; s = D . getDocument ( ) . createText ( "{cke-peak}" ) ; for ( y = l . inlineStylesRoot . getParent ( ) ; ! D . equals ( y ) ; ) { s = s . appendTo ( D . clone ( ) ) ; D = D . getParent ( ) } z = s . getOuterHtml ( ) . split ( "{cke-peak}" ) . join ( z ) } D =
l . blockLimit . getName ( ) ; if ( /^\s+|\s+$/ . test ( z ) && "span" in CKEDITOR . dtd [ D ] ) var L = '<span data-cke-marker="1"> </span>' , z = L + z + L ; z = l . editor . dataProcessor . toHtml ( z , null , false , l . dontFilter ) ; D = u . document . createElement ( "body" ) ; D . setHtml ( z ) ; if ( L ) { D . getFirst ( ) . remove ( ) ; D . getLast ( ) . remove ( ) } if ( ( L = u . startPath ( ) . block ) && ! ( L . getChildCount ( ) == 1 && L . getBogus ( ) ) ) a : { var F ; if ( D . getChildCount ( ) == 1 && b ( F = D . getFirst ( ) ) && F . is ( j ) ) { L = F . getElementsByTag ( "*" ) ; u = 0 ; for ( y = L . count ( ) ; u < y ; u ++ ) { s = L . getItem ( u ) ; if ( ! s . is ( m ) ) break a } F . moveChildren ( F . getParent ( 1 ) ) ;
F . remove ( ) } } l . dataWrapper = D ; u = z } if ( u ) { F = l . range ; var L = F . document , A , z = l . blockLimit ; u = 0 ; var J ; D = [ ] ; var H , N , y = s = 0 , K , O ; I = F . startContainer ; var o = l . endPath . elements [ 0 ] , P ; G = o . getPosition ( I ) ; Q = ! ! o . getCommonAncestor ( I ) && G != CKEDITOR . POSITION _IDENTICAL && ! ( G & CKEDITOR . POSITION _CONTAINS + CKEDITOR . POSITION _IS _CONTAINED ) ; I = c ( l . dataWrapper , l ) ; for ( f ( I , F ) ; u < I . length ; u ++ ) { G = I [ u ] ; if ( A = G . isLineBreak ) { A = F ; K = z ; var M = void 0 , R = void 0 ; if ( G . hasBlockSibling ) A = 1 ; else { M = A . startContainer . getAscendant ( i . $block , 1 ) ; if ( ! M || ! M . is ( { div : 1 ,
p : 1 } ) ) A = 0 ; else { R = M . getPosition ( K ) ; if ( R == CKEDITOR . POSITION _IDENTICAL || R == CKEDITOR . POSITION _CONTAINS ) A = 0 ; else { K = A . splitElement ( M ) ; A . moveToPosition ( K , CKEDITOR . POSITION _AFTER _START ) ; A = 1 } } } } if ( A ) y = u > 0 ; else { A = F . startPath ( ) ; if ( ! G . isBlock && ( N = l . editor . config . enterMode != CKEDITOR . ENTER _BR && l . editor . config . autoParagraph !== false ? l . editor . config . enterMode == CKEDITOR . ENTER _DIV ? "div" : "p" : false ) && ! A . block && A . blockLimit && A . blockLimit . equals ( F . root ) ) { N = L . createElement ( N ) ; ! CKEDITOR . env . ie && N . appendBogus ( ) ; F . insertNode ( N ) ;
! CKEDITOR . env . ie && ( J = N . getBogus ( ) ) && J . remove ( ) ; F . moveToPosition ( N , CKEDITOR . POSITION _BEFORE _END ) } if ( ( A = F . startPath ( ) . block ) && ! A . equals ( H ) ) { if ( J = A . getBogus ( ) ) { J . remove ( ) ; D . push ( A ) } H = A } G . firstNotAllowed && ( s = 1 ) ; if ( s && G . isElement ) { A = F . startContainer ; for ( K = null ; A && ! i [ A . getName ( ) ] [ G . name ] ; ) { if ( A . equals ( z ) ) { A = null ; break } K = A ; A = A . getParent ( ) } if ( A ) { if ( K ) { O = F . splitElement ( K ) ; l . zombies . push ( O ) ; l . zombies . push ( K ) } } else { K = z . getName ( ) ; P = ! u ; A = u == I . length - 1 ; K = d ( G . node , K ) ; for ( var M = [ ] , R = K . length , T = 0 , U = void 0 , V = 0 , W = - 1 ; T <
R ; T ++ ) { U = K [ T ] ; if ( U == " " ) { if ( ! V && ( ! P || T ) ) { M . push ( new CKEDITOR . dom . text ( " " ) ) ; W = M . length } V = 1 } else { M . push ( U ) ; V = 0 } } A && W == M . length && M . pop ( ) ; P = M } } if ( P ) { for ( ; A = P . pop ( ) ; ) F . insertNode ( A ) ; P = 0 } else F . insertNode ( G . node ) ; if ( G . lastNotAllowed && u < I . length - 1 ) { ( O = Q ? o : O ) && F . setEndAt ( O , CKEDITOR . POSITION _AFTER _START ) ; s = 0 } F . collapse ( ) } } l . dontMoveCaret = y ; l . bogusNeededBlocks = D } J = l . range ; var S ; O = l . bogusNeededBlocks ; for ( P = J . createBookmark ( ) ; H = l . zombies . pop ( ) ; ) if ( H . getParent ( ) ) { N = J . clone ( ) ; N . moveToElementEditStart ( H ) ; N . removeEmptyBlocksAtEnd ( ) } if ( O ) for ( ; H =
O . pop ( ) ; ) H . append ( CKEDITOR . env . ie ? J . document . createText ( " " ) : J . document . createElement ( "br" ) ) ; for ( ; H = l . mergeCandidates . pop ( ) ; ) H . mergeSiblings ( ) ; J . moveToBookmark ( P ) ; if ( ! l . dontMoveCaret ) { for ( H = b ( J . startContainer ) && J . startContainer . getChild ( J . startOffset - 1 ) ; H && b ( H ) && ! H . is ( i . $empty ) ; ) { if ( H . isBlockBoundary ( ) ) J . moveToPosition ( H , CKEDITOR . POSITION _BEFORE _END ) ; else { if ( g ( H ) && H . getHtml ( ) . match ( /(\s| )$/g ) ) { S = null ; break } S = J . clone ( ) ; S . moveToPosition ( H , CKEDITOR . POSITION _BEFORE _END ) } H = H . getLast ( a ) } S && J . moveToRange ( S ) } C . select ( ) ;
h ( n ) } } } ( ) } ) ( ) ;
( function ( ) { function b ( ) { var a = this . getSelection ( 1 ) ; if ( a . getType ( ) != CKEDITOR . SELECTION _NONE ) { this . fire ( "selectionCheck" , a ) ; var b = this . elementPath ( ) ; if ( ! b . compare ( this . _ . selectionPreviousPath ) ) { this . _ . selectionPreviousPath = b ; this . fire ( "selectionChange" , { selection : a , path : b } ) } } } function c ( ) { l = true ; if ( ! i ) { a . call ( this ) ; i = CKEDITOR . tools . setTimeout ( a , 200 , this ) } } function a ( ) { i = null ; if ( l ) { CKEDITOR . tools . setTimeout ( b , 0 , this ) ; l = false } } function f ( a ) { function b ( c , d ) { return ! c || c . type == CKEDITOR . NODE _TEXT ? false :
a . clone ( ) [ "moveToElementEdit" + ( d ? "End" : "Start" ) ] ( c ) } if ( ! ( a . root instanceof CKEDITOR . editable ) ) return false ; var c = a . startContainer , d = a . getPreviousNode ( m , null , c ) , e = a . getNextNode ( m , null , c ) ; return b ( d ) || b ( e , 1 ) || ! d && ! e && ! ( c . type == CKEDITOR . NODE _ELEMENT && c . isBlockBoundary ( ) && c . getBogus ( ) ) ? true : false } function d ( a ) { return a . getCustomData ( "cke-fillingChar" ) } function e ( a , b ) { var c = a && a . removeCustomData ( "cke-fillingChar" ) ; if ( c ) { if ( b !== false ) { var d , e = a . getDocument ( ) . getSelection ( ) . getNative ( ) , f = e && e . type != "None" &&
e . getRangeAt ( 0 ) ; if ( c . getLength ( ) > 1 && f && f . intersectsNode ( c . $ ) ) { d = [ e . anchorOffset , e . focusOffset ] ; f = e . focusNode == c . $ && e . focusOffset > 0 ; e . anchorNode == c . $ && e . anchorOffset > 0 && d [ 0 ] -- ; f && d [ 1 ] -- ; var i ; f = e ; if ( ! f . isCollapsed ) { i = f . getRangeAt ( 0 ) ; i . setStart ( f . anchorNode , f . anchorOffset ) ; i . setEnd ( f . focusNode , f . focusOffset ) ; i = i . collapsed } i && d . unshift ( d . pop ( ) ) } } c . setText ( h ( c . getText ( ) ) ) ; if ( d ) { c = e . getRangeAt ( 0 ) ; c . setStart ( c . startContainer , d [ 0 ] ) ; c . setEnd ( c . startContainer , d [ 1 ] ) ; e . removeAllRanges ( ) ; e . addRange ( c ) } } } function h ( a ) { return a . replace ( /\u200B( )?/g ,
function ( a ) { return a [ 1 ] ? " " : "" } ) } function j ( a , b , c ) { var d = a . on ( "focus" , function ( a ) { a . cancel ( ) } , null , null , - 100 ) ; if ( CKEDITOR . env . ie ) var e = a . getDocument ( ) . on ( "selectionchange" , function ( a ) { a . cancel ( ) } , null , null , - 100 ) ; else { var f = new CKEDITOR . dom . range ( a ) ; f . moveToElementEditStart ( a ) ; var h = a . getDocument ( ) . $ . createRange ( ) ; h . setStart ( f . startContainer . $ , f . startOffset ) ; h . collapse ( 1 ) ; b . removeAllRanges ( ) ; b . addRange ( h ) } c && a . focus ( ) ; d . removeListener ( ) ; e && e . removeListener ( ) } var i , k , m = CKEDITOR . dom . walker . invisible ( 1 ) ;
CKEDITOR . on ( "instanceCreated" , function ( a ) { function d ( ) { var a = f . getSelection ( ) ; a && a . removeAllRanges ( ) } var f = a . editor ; f . define ( "selectionChange" , { errorProof : 1 } ) ; f . on ( "contentDom" , function ( ) { var a = f . document , d = CKEDITOR . document , g = f . editable ( ) , h = a . getBody ( ) , l = a . getDocumentElement ( ) , i = g . isInline ( ) , k ; CKEDITOR . env . gecko && g . attachListener ( g , "focus" , function ( a ) { a . removeListener ( ) ; if ( k !== 0 ) { a = f . getSelection ( ) . getNative ( ) ; if ( a . isCollapsed && a . anchorNode == g . $ ) { a = f . createRange ( ) ; a . moveToElementEditStart ( g ) ; a . select ( ) } } } ,
null , null , - 2 ) ; g . attachListener ( g , "focus" , function ( ) { f . unlockSelection ( k ) ; k = 0 } , null , null , - 1 ) ; g . attachListener ( g , "mousedown" , function ( ) { k = 0 } ) ; if ( CKEDITOR . env . ie || CKEDITOR . env . opera || i ) { var j , m = function ( ) { j = f . getSelection ( 1 ) ; j . lock ( ) } ; q ? g . attachListener ( g , "beforedeactivate" , m , null , null , - 1 ) : g . attachListener ( f , "selectionCheck" , m , null , null , - 1 ) ; g . attachListener ( g , "blur" , function ( ) { f . lockSelection ( j ) ; k = 1 } , null , null , - 1 ) } if ( CKEDITOR . env . ie && ! i ) { var r ; g . attachListener ( g , "mousedown" , function ( a ) { a . data . $ . button ==
2 && f . document . $ . selection . type == "None" && ( r = f . window . getScrollPosition ( ) ) } ) ; g . attachListener ( g , "mouseup" , function ( a ) { if ( a . data . $ . button == 2 && r ) { f . document . $ . documentElement . scrollLeft = r . x ; f . document . $ . documentElement . scrollTop = r . y } r = null } ) ; if ( a . $ . compatMode != "BackCompat" ) { if ( CKEDITOR . env . ie7Compat || CKEDITOR . env . ie6Compat ) l . on ( "mousedown" , function ( a ) { function b ( a ) { a = a . data . $ ; if ( g ) { var c = h . $ . createTextRange ( ) ; try { c . moveToPoint ( a . x , a . y ) } catch ( d ) { } g . setEndPoint ( f . compareEndPoints ( "StartToStart" , c ) < 0 ? "EndToEnd" :
"StartToStart" , c ) ; g . select ( ) } } function c ( ) { l . removeListener ( "mousemove" , b ) ; d . removeListener ( "mouseup" , c ) ; l . removeListener ( "mouseup" , c ) ; g . select ( ) } a = a . data ; if ( a . getTarget ( ) . is ( "html" ) && a . $ . y < l . $ . clientHeight && a . $ . x < l . $ . clientWidth ) { var g = h . $ . createTextRange ( ) ; try { g . moveToPoint ( a . $ . x , a . $ . y ) } catch ( e ) { } var f = g . duplicate ( ) ; l . on ( "mousemove" , b ) ; d . on ( "mouseup" , c ) ; l . on ( "mouseup" , c ) } } ) ; if ( CKEDITOR . env . version > 7 ) { l . on ( "mousedown" , function ( a ) { if ( a . data . getTarget ( ) . is ( "html" ) ) { d . on ( "mouseup" , y ) ; l . on ( "mouseup" ,
y ) } } ) ; var y = function ( ) { d . removeListener ( "mouseup" , y ) ; l . removeListener ( "mouseup" , y ) ; var b = CKEDITOR . document . $ . selection , c = b . createRange ( ) ; b . type != "None" && c . parentElement ( ) . ownerDocument == a . $ && c . select ( ) } } } } g . attachListener ( g , "selectionchange" , b , f ) ; g . attachListener ( g , "keyup" , c , f ) ; g . attachListener ( g , "focus" , function ( ) { f . forceNextSelectionCheck ( ) ; f . selectionChange ( 1 ) } ) ; if ( i ? CKEDITOR . env . webkit || CKEDITOR . env . gecko : CKEDITOR . env . opera ) { var n ; g . attachListener ( g , "mousedown" , function ( ) { n = 1 } ) ; g . attachListener ( a . getDocumentElement ( ) ,
"mouseup" , function ( ) { n && c . call ( f ) ; n = 0 } ) } else g . attachListener ( CKEDITOR . env . ie ? g : a . getDocumentElement ( ) , "mouseup" , c , f ) ; CKEDITOR . env . webkit && g . attachListener ( a , "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 : e ( g ) } } , null , null , - 1 ) } ) ; f . on ( "contentDomUnload" , f . forceNextSelectionCheck , f ) ; f . on ( "dataReady" , function ( ) { f . selectionChange ( 1 ) } ) ; CKEDITOR . env . ie9Compat && f . on ( "beforeDestroy" , d , null , null , 9 ) ; CKEDITOR . env . webkit && f . on ( "setData" ,
function ( a ) { return a [ 1 ] ? " " : "" } ) } function j ( a , b , c ) { var d = a . on ( "focus" , function ( a ) { a . cancel ( ) } , null , null , - 100 ) ; if ( CKEDITOR . env . ie ) var e = a . getDocument ( ) . on ( "selectionchange" , function ( a ) { a . cancel ( ) } , null , null , - 100 ) ; else { var f = new CKEDITOR . dom . range ( a ) ; f . moveToElementEditStart ( a ) ; var h = a . getDocument ( ) . $ . createRange ( ) ; h . setStart ( f . startContainer . $ , f . startOffset ) ; h . collapse ( 1 ) ; b . removeAllRanges ( ) ; b . addRange ( h ) } c && a . focus ( ) ; d . removeListener ( ) ; e && e . removeListener ( ) } var i , l , m = CKEDITOR . dom . walker . invisible ( 1 ) ;
CKEDITOR . on ( "instanceCreated" , function ( a ) { function d ( ) { var a = f . getSelection ( ) ; a && a . removeAllRanges ( ) } var f = a . editor ; f . define ( "selectionChange" , { errorProof : 1 } ) ; f . on ( "contentDom" , function ( ) { var a = f . document , d = CKEDITOR . document , g = f . editable ( ) , h = a . getBody ( ) , k = a . getDocumentElement ( ) , i = g . isInline ( ) , l ; CKEDITOR . env . gecko && g . attachListener ( g , "focus" , function ( a ) { a . removeListener ( ) ; if ( l !== 0 ) { a = f . getSelection ( ) . getNative ( ) ; if ( a . isCollapsed && a . anchorNode == g . $ ) { a = f . createRange ( ) ; a . moveToElementEditStart ( g ) ; a . select ( ) } } } ,
null , null , - 2 ) ; g . attachListener ( g , "focus" , function ( ) { f . unlockSelection ( l ) ; l = 0 } , null , null , - 1 ) ; g . attachListener ( g , "mousedown" , function ( ) { l = 0 } ) ; if ( CKEDITOR . env . ie || CKEDITOR . env . opera || i ) { var j , m = function ( ) { j = f . getSelection ( 1 ) ; j . lock ( ) } ; q ? g . attachListener ( g , "beforedeactivate" , m , null , null , - 1 ) : g . attachListener ( f , "selectionCheck" , m , null , null , - 1 ) ; g . attachListener ( g , "blur" , function ( ) { f . lockSelection ( j ) ; l = 1 } , null , null , - 1 ) } if ( CKEDITOR . env . ie && ! i ) { var w ; g . attachListener ( g , "mousedown" , function ( a ) { a . data . $ . button ==
2 && f . document . $ . selection . type == "None" && ( w = f . window . getScrollPosition ( ) ) } ) ; g . attachListener ( g , "mouseup" , function ( a ) { if ( a . data . $ . button == 2 && w ) { f . document . $ . documentElement . scrollLeft = w . x ; f . document . $ . documentElement . scrollTop = w . y } w = null } ) ; if ( a . $ . compatMode != "BackCompat" ) { if ( CKEDITOR . env . ie7Compat || CKEDITOR . env . ie6Compat ) k . on ( "mousedown" , function ( a ) { function b ( a ) { a = a . data . $ ; if ( g ) { var c = h . $ . createTextRange ( ) ; try { c . moveToPoint ( a . x , a . y ) } catch ( d ) { } g . setEndPoint ( f . compareEndPoints ( "StartToStart" , c ) < 0 ? "EndToEnd" :
"StartToStart" , c ) ; g . select ( ) } } function c ( ) { k . removeListener ( "mousemove" , b ) ; d . removeListener ( "mouseup" , c ) ; k . removeListener ( "mouseup" , c ) ; g . select ( ) } a = a . data ; if ( a . getTarget ( ) . is ( "html" ) && a . $ . y < k . $ . clientHeight && a . $ . x < k . $ . clientWidth ) { var g = h . $ . createTextRange ( ) ; try { g . moveToPoint ( a . $ . x , a . $ . y ) } catch ( e ) { } var f = g . duplicate ( ) ; k . on ( "mousemove" , b ) ; d . on ( "mouseup" , c ) ; k . on ( "mouseup" , c ) } } ) ; if ( CKEDITOR . env . version > 7 ) { k . on ( "mousedown" , function ( a ) { if ( a . data . getTarget ( ) . is ( "html" ) ) { d . on ( "mouseup" , y ) ; k . on ( "mouseup" ,
y ) } } ) ; var y = function ( ) { d . removeListener ( "mouseup" , y ) ; k . removeListener ( "mouseup" , y ) ; var b = CKEDITOR . document . $ . selection , c = b . createRange ( ) ; b . type != "None" && c . parentElement ( ) . ownerDocument == a . $ && c . select ( ) } } } } g . attachListener ( g , "selectionchange" , b , f ) ; g . attachListener ( g , "keyup" , c , f ) ; g . attachListener ( g , "focus" , function ( ) { f . forceNextSelectionCheck ( ) ; f . selectionChange ( 1 ) } ) ; if ( i ? CKEDITOR . env . webkit || CKEDITOR . env . gecko : CKEDITOR . env . opera ) { var o ; g . attachListener ( g , "mousedown" , function ( ) { o = 1 } ) ; g . attachListener ( a . getDocumentElement ( ) ,
"mouseup" , function ( ) { o && c . call ( f ) ; o = 0 } ) } else g . attachListener ( CKEDITOR . env . ie ? g : a . getDocumentElement ( ) , "mouseup" , c , f ) ; CKEDITOR . env . webkit && g . attachListener ( a , "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 : e ( g ) } } , null , null , - 1 ) } ) ; f . on ( "contentDomUnload" , f . forceNextSelectionCheck , f ) ; f . on ( "dataReady" , function ( ) { f . selectionChange ( 1 ) } ) ; CKEDITOR . env . ie9Compat && f . on ( "beforeDestroy" , d , null , null , 9 ) ; CKEDITOR . env . webkit && f . on ( "setData" ,
d ) ; f . on ( "contentDomUnload" , function ( ) { f . unlockSelection ( ) } ) } ) ; CKEDITOR . on ( "instanceReady" , function ( a ) { var b = a . editor ; if ( CKEDITOR . env . webkit ) { b . on ( "selectionChange" , function ( ) { var a = b . editable ( ) , c = d ( a ) ; c && ( c . getCustomData ( "ready" ) ? e ( a ) : c . setCustomData ( "ready" , 1 ) ) } , null , null , - 1 ) ; b . on ( "beforeSetMode" , function ( ) { e ( b . editable ( ) ) } , null , null , - 1 ) ; var c , f , a = function ( ) { var a = b . editable ( ) ; if ( a ) if ( a = d ( a ) ) { var e = b . document . $ . defaultView . getSelection ( ) ; e . type == "Caret" && e . anchorNode == a . $ && ( f = 1 ) ; c = a . getText ( ) ; a . setText ( h ( c ) ) } } ,
i = function ( ) { var a = b . editable ( ) ; if ( a ) if ( a = d ( a ) ) { a . setText ( c ) ; if ( f ) { b . document . $ . defaultView . getSelection ( ) . setPosition ( a . $ , a . getLength ( ) ) ; f = 0 } } } ; b . on ( "beforeUndoImage" , a ) ; b . on ( "afterUndoImage" , i ) ; b . on ( "beforeGetData" , a , null , null , 0 ) ; b . on ( "getData" , i ) } } ) ; CKEDITOR . editor . prototype . selectionChange = function ( a ) { ( a ? b : c ) . call ( this ) } ; CKEDITOR . editor . prototype . getSelection = function ( a ) { if ( this . _ . savedSelection && ! a ) return this . _ . savedSelection ; return ( a = this . editable ( ) ) ? new CKEDITOR . dom . selection ( a ) : null } ; CKEDITOR . editor . prototype . lockSelection =
function ( a ) { a = a || this . getSelection ( 1 ) ; if ( a . getType ( ) != CKEDITOR . SELECTION _NONE ) { ! a . isLocked && a . lock ( ) ; this . _ . savedSelection = a ; return true } return false } ; CKEDITOR . editor . prototype . unlockSelection = function ( a ) { var b = this . _ . savedSelection ; if ( b ) { b . unlock ( a ) ; delete this . _ . savedSelection ; return true } return false } ; 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 q = typeof window . getSelection != "function" ; CKEDITOR . dom . selection = function ( a ) { var b = a instanceof CKEDITOR . dom . element ; this . document = a instanceof CKEDITOR . dom . document ? a : a . getDocument ( ) ; this . root = a = b ? a : this . document . getBody ( ) ;
this . isLocked = 0 ; this . _ = { cache : { } } ; b = q ? this . document . $ . selection : this . document . getWindow ( ) . $ . getSelection ( ) ; if ( CKEDITOR . env . webkit ) ( b . type == "None" && this . document . getActive ( ) . equals ( a ) || b . type == "Caret" && b . anchorNode . nodeType == CKEDITOR . NODE _DOCUMENT ) && j ( a , b ) ; else if ( CKEDITOR . env . gecko ) b && ( this . document . getActive ( ) . equals ( a ) && b . anchorNode && b . anchorNode . nodeType == CKEDITOR . NODE _DOCUMENT ) && j ( a , b , true ) ; else if ( CKEDITOR . env . ie ) { var c ; try { c = this . document . getActive ( ) } catch ( d ) { } if ( q ) b . type == "None" && ( c && c . equals ( this . document . getDocumentElement ( ) ) ) &&
j ( a , null , true ) ; else { ( b = b && b . anchorNode ) && ( b = new CKEDITOR . dom . node ( b ) ) ; c && ( c . equals ( this . document . getDocumentElement ( ) ) && b && ( a . equals ( b ) || a . contains ( b ) ) ) && j ( a , null , true ) } } c = this . getNative ( ) ; var e , f ; if ( c ) if ( c . getRangeAt ) e = ( f = c . rangeCount && c . getRangeAt ( 0 ) ) && new CKEDITOR . dom . node ( f . commonAncestorContainer ) ; else { try { f = c . createRange ( ) } catch ( h ) { } e = f && CKEDITOR . dom . element . get ( f . item && f . item ( 0 ) || f . parentElement ( ) ) } if ( ! e || ! a . equals ( e ) && ! a . contains ( e ) ) { 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 r = { img : 1 , hr : 1 , li : 1 , table : 1 , tr : 1 , td : 1 , th : 1 , embed : 1 , object : 1 , ol : 1 , ul : 1 , a : 1 , input : 1 , form : 1 , select : 1 , textarea : 1 , button : 1 , fieldset : 1 , thead : 1 , tfoot : 1 } ; CKEDITOR . dom . selection . prototype = { getNative : function ( ) { return this . _ . cache . nativeSel !== void 0 ? this . _ . cache . nativeSel : this . _ . cache . nativeSel = q ? this . document . $ . selection : this . document . getWindow ( ) . $ . getSelection ( ) } , getType : q ? function ( ) { var a =
null ; this . _ . cache . selectedElement = null ; this . _ . cache . selectedText = "" ; this . _ . cache . ranges = new CKEDITOR . dom . rangeList } return this } ; var w = { img : 1 , hr : 1 , li : 1 , table : 1 , tr : 1 , td : 1 , th : 1 , embed : 1 , object : 1 , ol : 1 , ul : 1 , a : 1 , input : 1 , form : 1 , select : 1 , textarea : 1 , button : 1 , fieldset : 1 , thead : 1 , tfoot : 1 } ; CKEDITOR . dom . selection . prototype = { getNative : function ( ) { return this . _ . cache . nativeSel !== void 0 ? this . _ . cache . nativeSel : this . _ . cache . nativeSel = q ? this . document . $ . selection : this . document . getWindow ( ) . $ . getSelection ( ) } , getType : q ? function ( ) { var a =
this . _ . cache ; if ( a . type ) return a . type ; var b = CKEDITOR . SELECTION _NONE ; try { var c = this . getNative ( ) , d = c . type ; if ( d == "Text" ) b = CKEDITOR . SELECTION _TEXT ; if ( d == "Control" ) b = CKEDITOR . SELECTION _ELEMENT ; if ( 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 ( c . rangeCount == 1 ) { var c = c . getRangeAt ( 0 ) , d = c . startContainer ; if ( d == c . endContainer &&
d . nodeType == 1 && c . endOffset - c . startOffset == 1 && r [ d . childNodes [ c . startOffset ] . nodeName . toLowerCase ( ) ] ) b = CKEDITOR . SELECTION _ELEMENT } return a . type = b } , getRanges : function ( ) { var a = q ? 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 ( ) , e = d . ownerDocument ; if ( ! d . hasChildNodes ( ) ) return { container : d , offset : 0 } ; for ( var f = d . children , h , i , l = b . duplicate ( ) , k = 0 , j = f . length - 1 , m = - 1 , n , p ; k <= j ; ) { m = Math . floor ( ( k + j ) / 2 ) ; h = f [ m ] ; l . moveToElementText ( h ) ;
n = l . compareEndPoints ( "StartToStart" , b ) ; if ( n > 0 ) j = m - 1 ; else if ( n < 0 ) k = m + 1 ; else { if ( CKEDITOR . env . ie9Compat && h . tagName == "BR" ) { f = e . defaultView . getSelection ( ) ; return { container : f [ c ? "anchorNode" : "focusNode" ] , offset : f [ c ? "anchorOffset" : "focusOffset" ] } } return { container : d , offset : a ( h ) } } } if ( m == - 1 || m == f . length - 1 && n < 0 ) { l . moveToElementText ( d ) ; l . setEndPoint ( "StartToStart" , b ) ; e = l . text . replace ( /(\r\n|\r)/g , "\n" ) . length ; f = d . childNodes ; if ( ! e ) { h = f [ f . length - 1 ] ; return h . nodeType != CKEDITOR . NODE _TEXT ? { container : d , offset : f . length } :
{ container : h , offset : h . nodeValue . length } } for ( d = f . length ; e > 0 && d > 0 ; ) { i = f [ -- d ] ; if ( i . nodeType == CKEDITOR . NODE _TEXT ) { p = i ; e = e - i . nodeValue . length } } return { container : p , offset : - e } } l . collapse ( n > 0 ? true : false ) ; l . setEndPoint ( n > 0 ? "StartToStart" : "EndToStart" , b ) ; e = l . text . replace ( /(\r\n|\r)/g , "\n" ) . length ; if ( ! e ) return { container : d , offset : a ( h ) + ( n > 0 ? 0 : 1 ) } ; for ( ; e > 0 ; ) try { i = h [ n > 0 ? "previousSibling" : "nextSibling" ] ; if ( i . nodeType == CKEDITOR . NODE _TEXT ) { e = e - i . nodeValue . length ; p = i } h = i } catch ( I ) { return { container : d , offset : a ( h ) } } return { container : p ,
offset : n > 0 ? - e : p . nodeValue . length + e } } ; return function ( ) { var a = this . getNative ( ) , c = a && a . createRange ( ) , d = this . getType ( ) ; if ( ! a ) return [ ] ; if ( d == CKEDITOR . SELECTION _TEXT ) { a = new CKEDITOR . dom . range ( this . root ) ; d = b ( c , true ) ; 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 ( ) ; return [ a ] } if ( d == CKEDITOR . SELECTION _ELEMENT ) { for ( var d =
[ ] , e = 0 ; e < c . length ; e ++ ) { for ( var f = c . item ( e ) , g = f . parentNode , h = 0 , a = new CKEDITOR . dom . range ( this . root ) ; h < g . childNodes . length && g . childNodes [ h ] != f ; h ++ ) ; a . setStart ( new CKEDITOR . dom . node ( g ) , h ) ; a . setEnd ( new CKEDITOR . dom . node ( g ) , h + 1 ) ; d . push ( a ) } return d } return [ ] } } ( ) : function ( ) { var a = [ ] , b , c = this . getNative ( ) ; if ( ! c ) return a ; for ( var d = 0 ; d < c . rangeCount ; d ++ ) { var e = c . getRangeAt ( d ) ; b = new CKEDITOR . dom . range ( this . root ) ; b . setStart ( new CKEDITOR . dom . node ( e . startContainer ) , e . startOffset ) ; b . setEnd ( new CKEDITOR . dom . node ( e . endContainer ) ,
e . endOffset ) ; a . push ( b ) } return a } ; return function ( b ) { var c = this . _ . cache ; if ( c . ranges && ! b ) return c . ranges ; if ( ! c . ranges ) c . ranges = new CKEDITOR . dom . rangeList ( a . call ( this ) ) ; if ( b ) for ( var d = c . ranges , e = 0 ; e < d . length ; e ++ ) { var f = d [ e ] ; f . getCommonAncestor ( ) . isReadOnly ( ) && d . splice ( e , 1 ) ; if ( ! f . collapsed ) { if ( f . startContainer . isReadOnly ( ) ) for ( var b = f . startContainer , h ; b ; ) { if ( ( h = b . type == CKEDITOR . NODE _ELEMENT ) && b . is ( "body" ) || ! b . isReadOnly ( ) ) break ; h && b . getAttribute ( "contentEditable" ) == "false" && f . setStartAfter ( b ) ; b = b . getParent ( ) } b =
f . startContainer ; h = f . endContainer ; var i = f . startOffset , k = f . endOffset , j = f . clone ( ) ; b && b . type == CKEDITOR . NODE _TEXT && ( i >= b . getLength ( ) ? j . setStartAfter ( b ) : j . setStartBefore ( b ) ) ; h && h . type == CKEDITOR . NODE _TEXT && ( k ? j . setEndAfter ( h ) : j . setEndBefore ( h ) ) ; b = new CKEDITOR . dom . walker ( j ) ; b . evaluator = function ( a ) { if ( a . type == CKEDITOR . NODE _ELEMENT && a . isReadOnly ( ) ) { var b = f . clone ( ) ; f . setEndBefore ( a ) ; f . collapsed && d . splice ( e -- , 1 ) ; if ( ! ( a . getPosition ( j . endContainer ) & CKEDITOR . POSITION _CONTAINS ) ) { b . setStartAfter ( a ) ; b . collapsed ||
d . splice ( e + 1 , 0 , b ) } return true } return false } ; b . next ( ) } } return c . ranges } } ( ) , getStartElement : function ( ) { var a = this . _ . cache ; if ( a . startElement !== void 0 ) 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 ; if ( c . startOffset == ( b . getChildCount ? b . getChildCount ( ) :
b . getLength ( ) ) && ! b . isBlockBoundary ( ) ) c . setStartAfter ( b ) ; else break } b = c . startContainer ; if ( b . type != CKEDITOR . NODE _ELEMENT ) return b . getParent ( ) ; b = b . getChild ( c . startOffset ) ; if ( ! b || b . type != CKEDITOR . NODE _ELEMENT ) b = c . startContainer ; else for ( c = b . getFirst ( ) ; c && c . type == CKEDITOR . NODE _ELEMENT ; ) { b = c ; c = c . getFirst ( ) } } b = b . $ } } return a . startElement = b ? new CKEDITOR . dom . element ( b ) : null } , getSelectedElement : function ( ) { var a = this . _ . cache ; if ( a . selectedElement !== void 0 ) return a . selectedElement ; var b = this , c = CKEDITOR . tools . tryThese ( function ( ) { return b . getNative ( ) . createRange ( ) . item ( 0 ) } ,
function ( ) { for ( var a = b . getRanges ( ) [ 0 ] , c , d , e = 2 ; e && ( ! ( c = a . getEnclosedNode ( ) ) || ! ( c . type == CKEDITOR . NODE _ELEMENT && r [ c . getName ( ) ] && ( d = c ) ) ) ; e -- ) a . shrink ( CKEDITOR . SHRINK _ELEMENT ) ; return d . $ } ) ; return a . selectedElement = c ? new CKEDITOR . dom . element ( c ) : null } , getSelectedText : function ( ) { var a = this . _ . cache ; if ( a . selectedText !== void 0 ) return a . selectedText ; var b = this . getNative ( ) , b = q ? b . type == "Control" ? "" : 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 ( ) ; this . isLocked = 0 ; this . reset ( ) ; if ( a ) ( a = b || c [ 0 ] && c [ 0 ] . getCommonAncestor ( ) ) && a . getAscendant ( "body" , 1 ) && ( b ? this . selectElement ( b ) : this . selectRanges ( c ) ) } } , reset : function ( ) { this . _ . cache = { } } , selectElement : function ( a ) { var b = new CKEDITOR . dom . range ( this . root ) ; b . setStartBefore ( a ) ; b . setEndAfter ( a ) ; this . selectRanges ( [ b ] ) } , selectRanges : function ( a ) { if ( a . length ) if ( this . isLocked ) { var b =
CKEDITOR . document . getActive ( ) ; this . unlock ( ) ; this . selectRanges ( a ) ; this . lock ( ) ; ! b . equals ( this . root ) && b . focus ( ) } else { if ( q ) { var c = CKEDITOR . dom . walker . whitespaces ( true ) , d = /\ufeff|\u00a0/ , h = { table : 1 , tbody : 1 , tr : 1 } ; if ( a . length > 1 ) { b = a [ a . length - 1 ] ; a [ 0 ] . setEnd ( b . endContainer , b . endOffset ) } var b = a [ 0 ] , a = b . collapsed , i , k , j , m = b . getEnclosedNode ( ) ; if ( m && m . type == CKEDITOR . NODE _ELEMENT && m . getName ( ) in r && ( ! m . is ( "a" ) || ! m . getText ( ) ) ) try { j = m . $ . createControlRange ( ) ; j . addElement ( m . $ ) ; j . select ( ) ; return } catch ( x ) { } ( b . startContainer . type ==
CKEDITOR . NODE _ELEMENT && b . startContainer . getName ( ) in h || b . endContainer . type == CKEDITOR . NODE _ELEMENT && b . endContainer . getName ( ) in h ) && b . shrink ( CKEDITOR . NODE _ELEMENT , true ) ; j = b . createBookmark ( ) ; var h = j . startNode , z ; if ( ! a ) z = j . endNode ; j = b . document . $ . body . createTextRange ( ) ; j . moveToElementText ( h . $ ) ; j . moveStart ( "character" , 1 ) ; if ( z ) { d = b . document . $ . body . createTextRange ( ) ; d . moveToElementText ( z . $ ) ; j . setEndPoint ( "EndToEnd" , d ) ; j . moveEnd ( "character" , - 1 ) } else { i = h . getNext ( c ) ; k = h . hasAscendant ( "pre" ) ; i = ! ( i && i . getText &&
i . getText ( ) . match ( d ) ) && ( k || ! h . hasPrevious ( ) || h . getPrevious ( ) . is && h . getPrevious ( ) . is ( "br" ) ) ; k = b . document . createElement ( "span" ) ; k . setHtml ( "" ) ; k . insertBefore ( h ) ; i && b . document . createText ( " " ) . insertBefore ( h ) } b . setStartBefore ( h ) ; h . remove ( ) ; if ( a ) { if ( i ) { j . moveStart ( "character" , - 1 ) ; j . select ( ) ; b . document . $ . selection . clear ( ) } else j . select ( ) ; b . moveToPosition ( k , CKEDITOR . POSITION _BEFORE _START ) ; k . remove ( ) } else { b . setEndBefore ( z ) ; z . remove ( ) ; j . select ( ) } } else { z = this . getNative ( ) ; if ( ! z ) return ; if ( CKEDITOR . env . opera ) { b =
this . document . $ . createRange ( ) ; b . selectNodeContents ( this . root . $ ) ; z . addRange ( b ) } this . removeAllRanges ( ) ; for ( d = 0 ; d < a . length ; d ++ ) { if ( d < a . length - 1 ) { b = a [ d ] ; j = a [ d + 1 ] ; k = b . clone ( ) ; k . setStart ( b . endContainer , b . endOffset ) ; k . setEnd ( j . startContainer , j . startOffset ) ; if ( ! k . collapsed ) { k . shrink ( CKEDITOR . NODE _ELEMENT , true ) ; i = k . getCommonAncestor ( ) ; k = k . getEnclosedNode ( ) ; if ( i . isReadOnly ( ) || k && k . isReadOnly ( ) ) { j . setStart ( b . startContainer , b . startOffset ) ; a . splice ( d -- , 1 ) ; continue } } } b = a [ d ] ; j = this . document . $ . createRange ( ) ; i = b . startContainer ;
if ( CKEDITOR . env . opera && b . collapsed && i . type == CKEDITOR . NODE _ELEMENT ) { k = i . getChild ( b . startOffset - 1 ) ; c = i . getChild ( b . startOffset ) ; if ( ! k && ! c && i . is ( CKEDITOR . dtd . $removeEmpty ) || k && k . type == CKEDITOR . NODE _ELEMENT || c && c . type == CKEDITOR . NODE _ELEMENT ) { b . insertNode ( this . document . createText ( "" ) ) ; b . collapse ( 1 ) } } if ( b . collapsed && CKEDITOR . env . webkit && f ( b ) ) { i = this . root ; e ( i , false ) ; k = i . getDocument ( ) . createText ( " " ) ; i . setCustomData ( "cke-fillingChar" , k ) ; b . insertNode ( k ) ; if ( ( i = k . getNext ( ) ) && ! k . getPrevious ( ) && i . type == CKEDITOR . NODE _ELEMENT &&
i . getName ( ) == "br" ) { e ( this . root ) ; b . moveToPosition ( i , CKEDITOR . POSITION _BEFORE _START ) } else b . moveToPosition ( k , CKEDITOR . POSITION _AFTER _END ) } j . setStart ( b . startContainer . $ , b . startOffset ) ; try { j . setEnd ( b . endContainer . $ , b . endOffset ) } catch ( t ) { if ( t . toString ( ) . indexOf ( "NS_ERROR_ILLEGAL_VALUE" ) >= 0 ) { b . collapse ( 1 ) ; j . setEnd ( b . endContainer . $ , b . endOffset ) } else throw t ; } z . addRange ( j ) } } this . reset ( ) ; this . root . fire ( "selectionchange" ) } } , createBookmarks : function ( a ) { return this . getRanges ( ) . createBookmarks ( a ) } , createBookmarks2 : function ( a ) { return this . getRanges ( ) . createBookmarks2 ( a ) } ,
selectBookmarks : function ( a ) { for ( var b = [ ] , c = 0 ; c < a . length ; c ++ ) { var d = new CKEDITOR . dom . range ( this . root ) ; d . moveToBookmark ( a [ c ] ) ; b . push ( d ) } this . selectRanges ( b ) ; return this } , getCommonAncestor : function ( ) { var a = this . getRanges ( ) ; return a [ 0 ] . startContainer . getCommonAncestor ( a [ a . length - 1 ] . endContainer ) } , scrollIntoView : function ( ) { this . type != CKEDITOR . SELECTION _NONE && this . getRanges ( ) [ 0 ] . scrollIntoView ( ) } , removeAllRanges : function ( ) { var a = this . getNative ( ) ; try { a && a [ q ? "empty" : "removeAllRanges" ] ( ) } catch ( b ) { } this . reset ( ) } } } ) ( ) ;
d . nodeType == 1 && c . endOffset - c . startOffset == 1 && w [ d . childNodes [ c . startOffset ] . nodeName . toLowerCase ( ) ] ) b = CKEDITOR . SELECTION _ELEMENT } return a . type = b } , getRanges : function ( ) { var a = q ? 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 , k = b . duplicate ( ) , i = 0 , l = e . length - 1 , j = - 1 , m , o ; i <= l ; ) { j = Math . floor ( ( i + l ) / 2 ) ; f = e [ j ] ; k . moveToElementText ( f ) ; m = k . compareEndPoints ( "StartToStart" ,
b ) ; if ( m > 0 ) l = j - 1 ; else if ( m < 0 ) i = j + 1 ; else return { container : d , offset : a ( f ) } } if ( j == - 1 || j == e . length - 1 && m < 0 ) { k . moveToElementText ( d ) ; k . setEndPoint ( "StartToStart" , b ) ; k = k . text . replace ( /(\r\n|\r)/g , "\n" ) . length ; e = d . childNodes ; if ( ! k ) { f = e [ e . length - 1 ] ; return f . nodeType != CKEDITOR . NODE _TEXT ? { container : d , offset : e . length } : { container : f , offset : f . nodeValue . length } } for ( d = e . length ; k > 0 && d > 0 ; ) { h = e [ -- d ] ; if ( h . nodeType == CKEDITOR . NODE _TEXT ) { o = h ; k = k - h . nodeValue . length } } return { container : o , offset : - k } } k . collapse ( m > 0 ? true : false ) ; k . setEndPoint ( m >
0 ? "StartToStart" : "EndToStart" , b ) ; k = k . text . replace ( /(\r\n|\r)/g , "\n" ) . length ; if ( ! k ) return { container : d , offset : a ( f ) + ( m > 0 ? 0 : 1 ) } ; for ( ; k > 0 ; ) try { h = f [ m > 0 ? "previousSibling" : "nextSibling" ] ; if ( h . nodeType == CKEDITOR . NODE _TEXT ) { k = k - h . nodeValue . length ; o = h } f = h } catch ( u ) { return { container : d , offset : a ( f ) } } return { container : o , offset : m > 0 ? - k : o . nodeValue . length + k } } ; return function ( ) { var a = this . getNative ( ) , c = a && a . createRange ( ) , d = this . getType ( ) ; if ( ! a ) return [ ] ; if ( d == CKEDITOR . SELECTION _TEXT ) { a = new CKEDITOR . dom . range ( this . root ) ;
d = b ( c , true ) ; 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 ( ) ; return [ a ] } if ( d == CKEDITOR . SELECTION _ELEMENT ) { for ( var d = [ ] , e = 0 ; e < c . length ; e ++ ) { for ( var f = c . item ( e ) , g = f . parentNode , h = 0 , a = new CKEDITOR . dom . range ( this . root ) ; h < g . childNodes . length && g . childNodes [ h ] != f ; h ++ ) ; a . setStart ( new CKEDITOR . dom . node ( g ) , h ) ; a . setEnd ( new CKEDITOR . dom . node ( g ) ,
h + 1 ) ; d . push ( a ) } return d } return [ ] } } ( ) : function ( ) { var a = [ ] , b , c = this . getNative ( ) ; if ( ! c ) return a ; for ( var d = 0 ; d < c . rangeCount ; d ++ ) { var e = c . getRangeAt ( d ) ; b = new CKEDITOR . dom . range ( this . root ) ; b . setStart ( new CKEDITOR . dom . node ( e . startContainer ) , e . startOffset ) ; b . setEnd ( new CKEDITOR . dom . node ( e . endContainer ) , e . endOffset ) ; a . push ( b ) } return a } ; return function ( b ) { var c = this . _ . cache ; if ( c . ranges && ! b ) return c . ranges ; if ( ! c . ranges ) c . ranges = new CKEDITOR . dom . rangeList ( a . call ( this ) ) ; if ( b ) for ( var d = c . ranges , e = 0 ; e < d . length ; e ++ ) { var f =
d [ e ] ; f . getCommonAncestor ( ) . isReadOnly ( ) && d . splice ( e , 1 ) ; if ( ! f . collapsed ) { if ( f . startContainer . isReadOnly ( ) ) for ( var b = f . startContainer , h ; b ; ) { if ( ( h = b . type == CKEDITOR . NODE _ELEMENT ) && b . is ( "body" ) || ! b . isReadOnly ( ) ) break ; h && b . getAttribute ( "contentEditable" ) == "false" && f . setStartAfter ( b ) ; b = b . getParent ( ) } b = f . startContainer ; h = f . endContainer ; var i = f . startOffset , l = f . endOffset , j = f . clone ( ) ; b && b . type == CKEDITOR . NODE _TEXT && ( i >= b . getLength ( ) ? j . setStartAfter ( b ) : j . setStartBefore ( b ) ) ; h && h . type == CKEDITOR . NODE _TEXT && ( l ? j . setEndAfter ( h ) :
j . setEndBefore ( h ) ) ; b = new CKEDITOR . dom . walker ( j ) ; b . evaluator = function ( a ) { if ( a . type == CKEDITOR . NODE _ELEMENT && a . isReadOnly ( ) ) { var b = f . clone ( ) ; f . setEndBefore ( a ) ; f . collapsed && d . splice ( e -- , 1 ) ; if ( ! ( a . getPosition ( j . endContainer ) & CKEDITOR . POSITION _CONTAINS ) ) { b . setStartAfter ( a ) ; b . collapsed || d . splice ( e + 1 , 0 , b ) } return true } return false } ; b . next ( ) } } return c . ranges } } ( ) , getStartElement : function ( ) { var a = this . _ . cache ; if ( a . startElement !== void 0 ) 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 ; if ( c . startOffset == ( b . getChildCount ? b . getChildCount ( ) : b . getLength ( ) ) && ! b . isBlockBoundary ( ) ) c . setStartAfter ( b ) ; else break } b = c . startContainer ; if ( b . type != CKEDITOR . NODE _ELEMENT ) return b . getParent ( ) ; b = b . getChild ( c . startOffset ) ; if ( ! b || b . type != CKEDITOR . NODE _ELEMENT ) b = c . startContainer ; else for ( c = b . getFirst ( ) ; c && c . type ==
CKEDITOR . NODE _ELEMENT ; ) { b = c ; c = c . getFirst ( ) } } b = b . $ } } return a . startElement = b ? new CKEDITOR . dom . element ( b ) : null } , getSelectedElement : function ( ) { var a = this . _ . cache ; if ( a . selectedElement !== void 0 ) return a . selectedElement ; var b = this , c = CKEDITOR . tools . tryThese ( function ( ) { return b . getNative ( ) . createRange ( ) . item ( 0 ) } , function ( ) { for ( var a = b . getRanges ( ) [ 0 ] , c , d , e = 2 ; e && ( ! ( c = a . getEnclosedNode ( ) ) || ! ( c . type == CKEDITOR . NODE _ELEMENT && w [ c . getName ( ) ] && ( d = c ) ) ) ; e -- ) a . shrink ( CKEDITOR . SHRINK _ELEMENT ) ; return d . $ } ) ; return a . selectedElement =
c ? new CKEDITOR . dom . element ( c ) : null } , getSelectedText : function ( ) { var a = this . _ . cache ; if ( a . selectedText !== void 0 ) return a . selectedText ; var b = this . getNative ( ) , b = q ? b . type == "Control" ? "" : 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 ( ) ; this . isLocked = 0 ;
this . reset ( ) ; if ( a ) ( a = b || c [ 0 ] && c [ 0 ] . getCommonAncestor ( ) ) && a . getAscendant ( "body" , 1 ) && ( b ? this . selectElement ( b ) : this . selectRanges ( c ) ) } } , reset : function ( ) { this . _ . cache = { } } , selectElement : function ( a ) { var b = new CKEDITOR . dom . range ( this . root ) ; b . setStartBefore ( a ) ; b . setEndAfter ( a ) ; this . selectRanges ( [ b ] ) } , selectRanges : function ( a ) { if ( a . length ) if ( this . isLocked ) { var b = CKEDITOR . document . getActive ( ) ; this . unlock ( ) ; this . selectRanges ( a ) ; this . lock ( ) ; ! b . equals ( this . root ) && b . focus ( ) } else { if ( q ) { var c = CKEDITOR . dom . walker . whitespaces ( true ) ,
d = /\ufeff|\u00a0/ , h = { table : 1 , tbody : 1 , tr : 1 } ; if ( a . length > 1 ) { b = a [ a . length - 1 ] ; a [ 0 ] . setEnd ( b . endContainer , b . endOffset ) } var b = a [ 0 ] , a = b . collapsed , i , l , j , m = b . getEnclosedNode ( ) ; if ( m && m . type == CKEDITOR . NODE _ELEMENT && m . getName ( ) in w && ( ! m . is ( "a" ) || ! m . getText ( ) ) ) try { j = m . $ . createControlRange ( ) ; j . addElement ( m . $ ) ; j . select ( ) ; return } catch ( x ) { } ( b . startContainer . type == CKEDITOR . NODE _ELEMENT && b . startContainer . getName ( ) in h || b . endContainer . type == CKEDITOR . NODE _ELEMENT && b . endContainer . getName ( ) in h ) && b . shrink ( CKEDITOR . NODE _ELEMENT ,
true ) ; j = b . createBookmark ( ) ; var h = j . startNode , z ; if ( ! a ) z = j . endNode ; j = b . document . $ . body . createTextRange ( ) ; j . moveToElementText ( h . $ ) ; j . moveStart ( "character" , 1 ) ; if ( z ) { d = b . document . $ . body . createTextRange ( ) ; d . moveToElementText ( z . $ ) ; j . setEndPoint ( "EndToEnd" , d ) ; j . moveEnd ( "character" , - 1 ) } else { i = h . getNext ( c ) ; l = h . hasAscendant ( "pre" ) ; i = ! ( i && i . getText && i . getText ( ) . match ( d ) ) && ( l || ! h . hasPrevious ( ) || h . getPrevious ( ) . is && h . getPrevious ( ) . is ( "br" ) ) ; l = b . document . createElement ( "span" ) ; l . setHtml ( "" ) ; l . insertBefore ( h ) ;
i && b . document . createText ( " " ) . insertBefore ( h ) } b . setStartBefore ( h ) ; h . remove ( ) ; if ( a ) { if ( i ) { j . moveStart ( "character" , - 1 ) ; j . select ( ) ; b . document . $ . selection . clear ( ) } else j . select ( ) ; b . moveToPosition ( l , CKEDITOR . POSITION _BEFORE _START ) ; l . remove ( ) } else { b . setEndBefore ( z ) ; z . remove ( ) ; j . select ( ) } } else { z = this . getNative ( ) ; if ( ! z ) return ; if ( CKEDITOR . env . opera ) { b = this . document . $ . createRange ( ) ; b . selectNodeContents ( this . root . $ ) ; z . addRange ( b ) } this . removeAllRanges ( ) ; for ( d = 0 ; d < a . length ; d ++ ) { if ( d < a . length - 1 ) { b = a [ d ] ; j = a [ d + 1 ] ;
l = b . clone ( ) ; l . setStart ( b . endContainer , b . endOffset ) ; l . setEnd ( j . startContainer , j . startOffset ) ; if ( ! l . collapsed ) { l . shrink ( CKEDITOR . NODE _ELEMENT , true ) ; i = l . getCommonAncestor ( ) ; l = l . getEnclosedNode ( ) ; if ( i . isReadOnly ( ) || l && l . isReadOnly ( ) ) { j . setStart ( b . startContainer , b . startOffset ) ; a . splice ( d -- , 1 ) ; continue } } } b = a [ d ] ; j = this . document . $ . createRange ( ) ; i = b . startContainer ; if ( CKEDITOR . env . opera && b . collapsed && i . type == CKEDITOR . NODE _ELEMENT ) { l = i . getChild ( b . startOffset - 1 ) ; c = i . getChild ( b . startOffset ) ; if ( ! l && ! c && i . is ( CKEDITOR . dtd . $removeEmpty ) ||
l && l . type == CKEDITOR . NODE _ELEMENT || c && c . type == CKEDITOR . NODE _ELEMENT ) { b . insertNode ( this . document . createText ( "" ) ) ; b . collapse ( 1 ) } } if ( b . collapsed && CKEDITOR . env . webkit && f ( b ) ) { i = this . root ; e ( i , false ) ; l = i . getDocument ( ) . createText ( " " ) ; i . setCustomData ( "cke-fillingChar" , l ) ; b . insertNode ( l ) ; if ( ( i = l . getNext ( ) ) && ! l . getPrevious ( ) && i . type == CKEDITOR . NODE _ELEMENT && i . getName ( ) == "br" ) { e ( this . root ) ; b . moveToPosition ( i , CKEDITOR . POSITION _BEFORE _START ) } else b . moveToPosition ( l , CKEDITOR . POSITION _AFTER _END ) } j . setStart ( b . startContainer . $ ,
b . startOffset ) ; try { j . setEnd ( b . endContainer . $ , b . endOffset ) } catch ( s ) { if ( s . toString ( ) . indexOf ( "NS_ERROR_ILLEGAL_VALUE" ) >= 0 ) { b . collapse ( 1 ) ; j . setEnd ( b . endContainer . $ , b . endOffset ) } else throw s ; } z . addRange ( j ) } } this . reset ( ) ; this . root . fire ( "selectionchange" ) } } , createBookmarks : function ( a ) { return this . getRanges ( ) . createBookmarks ( a ) } , createBookmarks2 : function ( a ) { return this . getRanges ( ) . createBookmarks2 ( a ) } , selectBookmarks : function ( a ) { for ( var b = [ ] , c = 0 ; c < a . length ; c ++ ) { var d = new CKEDITOR . dom . range ( this . root ) ; d . moveToBookmark ( a [ c ] ) ;
b . push ( d ) } this . selectRanges ( b ) ; return this } , getCommonAncestor : function ( ) { var a = this . getRanges ( ) ; return a [ 0 ] . startContainer . getCommonAncestor ( a [ a . length - 1 ] . endContainer ) } , scrollIntoView : function ( ) { this . type != CKEDITOR . SELECTION _NONE && this . getRanges ( ) [ 0 ] . scrollIntoView ( ) } , removeAllRanges : function ( ) { var a = this . getNative ( ) ; try { a && a [ q ? "empty" : "removeAllRanges" ] ( ) } catch ( b ) { } this . reset ( ) } } } ) ( ) ;
CKEDITOR . editor . prototype . attachStyleStateChange = function ( b , c ) { var a = this . _ . styleStateChangeCallbacks ; if ( ! a ) { a = this . _ . styleStateChangeCallbacks = [ ] ; this . on ( "selectionChange" , function ( b ) { for ( var c = 0 ; c < a . length ; c ++ ) { var e = a [ c ] , h = e . style . checkActive ( b . data . path ) ? CKEDITOR . TRISTATE _ON : CKEDITOR . TRISTATE _OFF ; e . fn . call ( this , h ) } } ) } a . push ( { style : b , fn : c } ) } ; CKEDITOR . STYLE _BLOCK = 1 ; CKEDITOR . STYLE _INLINE = 2 ; CKEDITOR . STYLE _OBJECT = 3 ;
( function ( ) { function b ( a , b ) { for ( var c , d ; a = a . getParent ( ) ; ) { if ( a . equals ( b ) ) break ; if ( a . getAttribute ( "data-nostyle" ) ) c = a ; else if ( ! d ) { var e = a . getAttribute ( "contentEditable" ) ; e == "false" ? c = a : e == "true" && ( d = 1 ) } } return c } function c ( a ) { var c = a . document ; if ( a . collapsed ) { c = p ( this , c ) ; a . insertNode ( c ) ; a . moveToPosition ( c , CKEDITOR . POSITION _BEFORE _END ) } else { var d = this . element , e = this . _ . definition , f , g = e . ignoreReadonly , h = g || e . includeReadonly ; h == void 0 && ( h = a . root . getCustomData ( "cke_includeReadonly" ) ) ; var i = CKEDITOR . dtd [ d ] ||
( f = true , CKEDITOR . dtd . span ) ; a . enlarge ( CKEDITOR . ENLARGE _INLINE , 1 ) ; a . trim ( ) ; var k = a . createBookmark ( ) , j = k . startNode , l = k . endNode , m = j , q ; if ( ! g ) { var o = a . getCommonAncestor ( ) , g = b ( j , o ) , o = b ( l , o ) ; g && ( m = g . getNextSourceNode ( true ) ) ; o && ( l = o ) } for ( m . getPosition ( l ) == CKEDITOR . POSITION _FOLLOWING && ( m = 0 ) ; m ; ) { g = false ; if ( m . equals ( l ) ) { m = null ; g = true } else { var s = m . type , t = s == CKEDITOR . NODE _ELEMENT ? m . getName ( ) : null , o = t && m . getAttribute ( "contentEditable" ) == "false" , u = t && m . getAttribute ( "data-nostyle" ) ; if ( t && m . data ( "cke-bookmark" ) ) { m =
m . getNextSourceNode ( true ) ; continue } if ( ! t || i [ t ] && ! u && ( ! o || h ) && ( m . getPosition ( l ) | CKEDITOR . POSITION _PRECEDING | CKEDITOR . POSITION _IDENTICAL | CKEDITOR . POSITION _IS _CONTAINED ) == CKEDITOR . POSITION _PRECEDING + CKEDITOR . POSITION _IDENTICAL + CKEDITOR . POSITION _IS _CONTAINED && ( ! e . childRule || e . childRule ( m ) ) ) { var v = m . getParent ( ) ; if ( v && ( ( v . getDtd ( ) || CKEDITOR . dtd . span ) [ d ] || f ) && ( ! e . parentRule || e . parentRule ( v ) ) ) { if ( ! q && ( ! t || ! CKEDITOR . dtd . $removeEmpty [ t ] || ( m . getPosition ( l ) | CKEDITOR . POSITION _PRECEDING | CKEDITOR . POSITION _IDENTICAL |
CKEDITOR . POSITION _IS _CONTAINED ) == CKEDITOR . POSITION _PRECEDING + CKEDITOR . POSITION _IDENTICAL + CKEDITOR . POSITION _IS _CONTAINED ) ) { q = a . clone ( ) ; q . setStartBefore ( m ) } if ( s == CKEDITOR . NODE _TEXT || o || s == CKEDITOR . NODE _ELEMENT && ! m . getChildCount ( ) ) { for ( var s = m , x ; ( g = ! s . getNext ( C ) ) && ( x = s . getParent ( ) , i [ x . getName ( ) ] ) && ( x . getPosition ( j ) | CKEDITOR . POSITION _FOLLOWING | CKEDITOR . POSITION _IDENTICAL | CKEDITOR . POSITION _IS _CONTAINED ) == CKEDITOR . POSITION _FOLLOWING + CKEDITOR . POSITION _IDENTICAL + CKEDITOR . POSITION _IS _CONTAINED && ( ! e . childRule ||
e . childRule ( x ) ) ; ) s = x ; q . setEndAfter ( s ) } } else g = true } else g = true ; m = m . getNextSourceNode ( u || o && ! h ) } if ( g && q && ! q . collapsed ) { for ( var g = p ( this , c ) , o = g . hasAttributes ( ) , u = q . getCommonAncestor ( ) , s = { } , t = { } , v = { } , z = { } , y , A , F ; g && u ; ) { if ( u . getName ( ) == d ) { for ( y in e . attributes ) if ( ! z [ y ] && ( F = u . getAttribute ( A ) ) ) g . getAttribute ( y ) == F ? t [ y ] = 1 : z [ y ] = 1 ; for ( A in e . styles ) if ( ! v [ A ] && ( F = u . getStyle ( A ) ) ) g . getStyle ( A ) == F ? s [ A ] = 1 : v [ A ] = 1 } u = u . getParent ( ) } for ( y in t ) g . removeAttribute ( y ) ; for ( A in s ) g . removeStyle ( A ) ; o && ! g . hasAttributes ( ) && ( g =
null ) ; if ( g ) { q . extractContents ( ) . appendTo ( g ) ; r . call ( this , g ) ; q . insertNode ( g ) ; g . mergeSiblings ( ) ; CKEDITOR . env . ie || g . $ . normalize ( ) } else { g = new CKEDITOR . dom . element ( "span" ) ; q . extractContents ( ) . appendTo ( g ) ; q . insertNode ( g ) ; r . call ( this , g ) ; g . remove ( true ) } q = null } } a . moveToBookmark ( k ) ; a . shrink ( CKEDITOR . SHRINK _TEXT ) } } function a ( a ) { a . enlarge ( CKEDITOR . ENLARGE _INLINE , 1 ) ; var b = a . createBookmark ( ) , c = b . startNode ; if ( a . collapsed ) { for ( var d = new CKEDITOR . dom . elementPath ( c . getParent ( ) , a . root ) , e , f = 0 , g ; f < d . elements . length && ( g =
d . elements [ f ] ) ; f ++ ) { if ( g == d . block || g == d . blockLimit ) break ; if ( this . checkElementRemovable ( g ) ) { var h ; if ( a . collapsed && ( a . checkBoundaryOfElement ( g , CKEDITOR . END ) || ( h = a . checkBoundaryOfElement ( g , CKEDITOR . START ) ) ) ) { e = g ; e . match = h ? "start" : "end" } else { g . mergeSiblings ( ) ; g . getName ( ) == this . element ? q . call ( this , g ) : l ( g , o ( this ) [ g . getName ( ) ] ) } } } if ( e ) { g = c ; for ( f = 0 ; ; f ++ ) { h = d . elements [ f ] ; if ( h . equals ( e ) ) break ; else if ( h . match ) continue ; else h = h . clone ( ) ; h . append ( g ) ; g = h } g [ e . match == "start" ? "insertBefore" : "insertAfter" ] ( e ) } } else { var i =
b . endNode , k = this , d = function ( ) { for ( var a = new CKEDITOR . dom . elementPath ( c . getParent ( ) ) , b = new CKEDITOR . dom . elementPath ( i . getParent ( ) ) , d = null , e = null , f = 0 ; f < a . elements . length ; f ++ ) { var g = a . elements [ f ] ; if ( g == a . block || g == a . blockLimit ) break ; k . checkElementRemovable ( g ) && ( d = g ) } for ( f = 0 ; f < b . elements . length ; f ++ ) { g = b . elements [ f ] ; if ( g == b . block || g == b . blockLimit ) break ; k . checkElementRemovable ( g ) && ( e = g ) } e && i . breakParent ( e ) ; d && c . breakParent ( d ) } ; d ( ) ; for ( e = c ; ! e . equals ( i ) ; ) { f = e . getNextSourceNode ( ) ; if ( e . type == CKEDITOR . NODE _ELEMENT &&
this . checkElementRemovable ( e ) ) { e . getName ( ) == this . element ? q . call ( this , e ) : l ( e , o ( this ) [ e . getName ( ) ] ) ; if ( f . type == CKEDITOR . NODE _ELEMENT && f . contains ( c ) ) { d ( ) ; f = c . getNext ( ) } } e = f } } a . moveToBookmark ( b ) } function f ( a ) { var b = a . getEnclosedNode ( ) || a . getCommonAncestor ( false , true ) ; ( a = ( new CKEDITOR . dom . elementPath ( b , a . root ) ) . contains ( this . element , 1 ) ) && ! a . isReadOnly ( ) && v ( a , this ) } function d ( a ) { var b = a . getCommonAncestor ( true , true ) ; if ( a = ( new CKEDITOR . dom . elementPath ( b , a . root ) ) . contains ( this . element , 1 ) ) { var b = this . _ . definition ,
( f = true , CKEDITOR . dtd . span ) ; a . enlarge ( CKEDITOR . ENLARGE _INLINE , 1 ) ; a . trim ( ) ; var l = a . createBookmark ( ) , k = l . startNode , j = l . endNode , m = k , q ; if ( ! g ) { var n = a . getCommonAncestor ( ) , g = b ( k , n ) , n = b ( j , n ) ; g && ( m = g . getNextSourceNode ( true ) ) ; n && ( j = n ) } for ( m . getPosition ( j ) == CKEDITOR . POSITION _FOLLOWING && ( m = 0 ) ; m ; ) { g = false ; if ( m . equals ( j ) ) { m = null ; g = true } else { var r = m . type , s = r == CKEDITOR . NODE _ELEMENT ? m . getName ( ) : null , n = s && m . getAttribute ( "contentEditable" ) == "false" , t = s && m . getAttribute ( "data-nostyle" ) ; if ( s && m . data ( "cke-bookmark" ) ) { m =
m . getNextSourceNode ( true ) ; continue } if ( ! s || i [ s ] && ! t && ( ! n || h ) && ( m . getPosition ( j ) | CKEDITOR . POSITION _PRECEDING | CKEDITOR . POSITION _IDENTICAL | CKEDITOR . POSITION _IS _CONTAINED ) == CKEDITOR . POSITION _PRECEDING + CKEDITOR . POSITION _IDENTICAL + CKEDITOR . POSITION _IS _CONTAINED && ( ! e . childRule || e . childRule ( m ) ) ) { var v = m . getParent ( ) ; if ( v && ( ( v . getDtd ( ) || CKEDITOR . dtd . span ) [ d ] || f ) && ( ! e . parentRule || e . parentRule ( v ) ) ) { if ( ! q && ( ! s || ! CKEDITOR . dtd . $removeEmpty [ s ] || ( m . getPosition ( j ) | CKEDITOR . POSITION _PRECEDING | CKEDITOR . POSITION _IDENTICAL |
CKEDITOR . POSITION _IS _CONTAINED ) == CKEDITOR . POSITION _PRECEDING + CKEDITOR . POSITION _IDENTICAL + CKEDITOR . POSITION _IS _CONTAINED ) ) { q = a . clone ( ) ; q . setStartBefore ( m ) } if ( r == CKEDITOR . NODE _TEXT || n || r == CKEDITOR . NODE _ELEMENT && ! m . getChildCount ( ) ) { for ( var r = m , x ; ( g = ! r . getNext ( C ) ) && ( x = r . getParent ( ) , i [ x . getName ( ) ] ) && ( x . getPosition ( k ) | CKEDITOR . POSITION _FOLLOWING | CKEDITOR . POSITION _IDENTICAL | CKEDITOR . POSITION _IS _CONTAINED ) == CKEDITOR . POSITION _FOLLOWING + CKEDITOR . POSITION _IDENTICAL + CKEDITOR . POSITION _IS _CONTAINED && ( ! e . childRule ||
e . childRule ( x ) ) ; ) r = x ; q . setEndAfter ( r ) } } else g = true } else g = true ; m = m . getNextSourceNode ( t || n && ! h ) } if ( g && q && ! q . collapsed ) { for ( var g = p ( this , c ) , n = g . hasAttributes ( ) , t = q . getCommonAncestor ( ) , r = { } , s = { } , v = { } , z = { } , y , B , E ; g && t ; ) { if ( t . getName ( ) == d ) { for ( y in e . attributes ) if ( ! z [ y ] && ( E = t . getAttribute ( B ) ) ) g . getAttribute ( y ) == E ? s [ y ] = 1 : z [ y ] = 1 ; for ( B in e . styles ) if ( ! v [ B ] && ( E = t . getStyle ( B ) ) ) g . getStyle ( B ) == E ? r [ B ] = 1 : v [ B ] = 1 } t = t . getParent ( ) } for ( y in s ) g . removeAttribute ( y ) ; for ( B in r ) g . removeStyle ( B ) ; n && ! g . hasAttributes ( ) && ( g =
null ) ; if ( g ) { q . extractContents ( ) . appendTo ( g ) ; w . call ( this , g ) ; q . insertNode ( g ) ; g . mergeSiblings ( ) ; CKEDITOR . env . ie || g . $ . normalize ( ) } else { g = new CKEDITOR . dom . element ( "span" ) ; q . extractContents ( ) . appendTo ( g ) ; q . insertNode ( g ) ; w . call ( this , g ) ; g . remove ( true ) } q = null } } a . moveToBookmark ( l ) ; a . shrink ( CKEDITOR . SHRINK _TEXT ) } } function a ( a ) { a . enlarge ( CKEDITOR . ENLARGE _INLINE , 1 ) ; var b = a . createBookmark ( ) , c = b . startNode ; if ( a . collapsed ) { for ( var d = new CKEDITOR . dom . elementPath ( c . getParent ( ) , a . root ) , e , f = 0 , g ; f < d . elements . length && ( g =
d . elements [ f ] ) ; f ++ ) { if ( g == d . block || g == d . blockLimit ) break ; if ( this . checkElementRemovable ( g ) ) { var h ; if ( a . collapsed && ( a . checkBoundaryOfElement ( g , CKEDITOR . END ) || ( h = a . checkBoundaryOfElement ( g , CKEDITOR . START ) ) ) ) { e = g ; e . match = h ? "start" : "end" } else { g . mergeSiblings ( ) ; g . getName ( ) == this . element ? q . call ( this , g ) : k ( g , n ( this ) [ g . getName ( ) ] ) } } } if ( e ) { g = c ; for ( f = 0 ; ; f ++ ) { h = d . elements [ f ] ; if ( h . equals ( e ) ) break ; else if ( h . match ) continue ; else h = h . clone ( ) ; h . append ( g ) ; g = h } g [ e . match == "start" ? "insertBefore" : "insertAfter" ] ( e ) } } else { var i =
b . endNode , l = this , d = function ( ) { for ( var a = new CKEDITOR . dom . elementPath ( c . getParent ( ) ) , b = new CKEDITOR . dom . elementPath ( i . getParent ( ) ) , d = null , e = null , f = 0 ; f < a . elements . length ; f ++ ) { var g = a . elements [ f ] ; if ( g == a . block || g == a . blockLimit ) break ; l . checkElementRemovable ( g ) && ( d = g ) } for ( f = 0 ; f < b . elements . length ; f ++ ) { g = b . elements [ f ] ; if ( g == b . block || g == b . blockLimit ) break ; l . checkElementRemovable ( g ) && ( e = g ) } e && i . breakParent ( e ) ; d && c . breakParent ( d ) } ; d ( ) ; for ( e = c ; ! e . equals ( i ) ; ) { f = e . getNextSourceNode ( ) ; if ( e . type == CKEDITOR . NODE _ELEMENT &&
this . checkElementRemovable ( e ) ) { e . getName ( ) == this . element ? q . call ( this , e ) : k ( e , n ( this ) [ e . getName ( ) ] ) ; if ( f . type == CKEDITOR . NODE _ELEMENT && f . contains ( c ) ) { d ( ) ; f = c . getNext ( ) } } e = f } } a . moveToBookmark ( b ) } function f ( a ) { var b = a . getEnclosedNode ( ) || a . getCommonAncestor ( false , true ) ; ( a = ( new CKEDITOR . dom . elementPath ( b , a . root ) ) . contains ( this . element , 1 ) ) && ! a . isReadOnly ( ) && v ( a , this ) } function d ( a ) { var b = a . getCommonAncestor ( true , true ) ; 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 e ( a ) { var b = a . createBookmark ( true ) , c = a . createIterator ( ) ; c . enforceRealBlocks = true ; if ( this . _ . enterMode ) c . enlargeBr = this . _ . enterMode != CKEDITOR . ENTER _BR ; for ( var d , e = a . document ; d = c . getNextParagraph ( ) ; ) if ( ! d . isReadOnly ( ) ) { var f = p ( this , e , d ) ; j ( d , f ) } a . moveToBookmark ( b ) } function h ( a ) { var b = a . createBookmark ( 1 ) , c = a . createIterator ( ) ; c . enforceRealBlocks = true ; c . enlargeBr =
this . _ . enterMode != CKEDITOR . ENTER _BR ; for ( var d ; d = c . getNextParagraph ( ) ; ) if ( this . checkElementRemovable ( d ) ) if ( d . is ( "pre" ) ) { var e = this . _ . enterMode == CKEDITOR . ENTER _BR ? null : a . document . createElement ( this . _ . enterMode == CKEDITOR . ENTER _P ? "p" : "div" ) ; e && d . copyAttributes ( e ) ; j ( d , e ) } else q . call ( this , d ) ; a . moveToBookmark ( b ) } function j ( a , b ) { var c = ! b ; if ( c ) { b = a . getDocument ( ) . createElement ( "div" ) ; a . copyAttributes ( b ) } var d = b && b . is ( "pre" ) , e = a . is ( "pre" ) , f = ! d && e ; if ( d && ! e ) { e = b ; ( f = a . getBogus ( ) ) && f . remove ( ) ; f = a . getHtml ( ) ; f = k ( f ,
/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g , "" ) ; f = f . replace ( /[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi , "$1" ) ; f = f . replace ( /([ \t\n\r]+| )/g , " " ) ; f = f . replace ( /<br\b[^>]*>/gi , "\n" ) ; if ( CKEDITOR . env . ie ) { var h = a . getDocument ( ) . createElement ( "div" ) ; h . append ( e ) ; e . $ . outerHTML = "<pre>" + f + "</pre>" ; e . copyAttributes ( h . getFirst ( ) ) ; e = h . getFirst ( ) . remove ( ) } else e . setHtml ( f ) ; b = e } else f ? b = m ( c ? [ a . getHtml ( ) ] : i ( a ) , b ) : a . moveChildren ( b ) ; b . replace ( a ) ; if ( d ) { var c = b , j ; if ( ( j = c . getPrevious ( y ) ) && j . is && j . is ( "pre" ) ) { d = k ( j . getHtml ( ) , /\n$/ , "" ) +
"\n\n" + k ( c . getHtml ( ) , /^\n/ , "" ) ; CKEDITOR . env . ie ? c . $ . outerHTML = "<pre>" + d + "</pre>" : c . setHtml ( d ) ; j . remove ( ) } } else c && g ( b ) } function i ( a ) { a . getName ( ) ; var b = [ ] ; k ( a . getOuterHtml ( ) , /(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi , function ( a , b , c ) { return b + "</pre>" + c + "<pre>" } ) . replace ( /<pre\b.*?>([\s\S]*?)<\/pre>/gi , function ( a , c ) { b . push ( c ) } ) ; return b } function k ( 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 m ( a , b ) { var c ; a . length > 1 && ( 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 = k ( e , /^[ \t]*\n/ , "" ) , e = k ( e , /\n$/ , "" ) , e = k ( e , /^[ \t]+|[ \t]+$/g , function ( a , b ) { return a . length == 1 ? " " : b ? " " + CKEDITOR . tools . repeat ( " " , a . length - 1 ) : CKEDITOR . tools . repeat ( " " , a . length - 1 ) + " " } ) , e = e . replace ( /\n/g , "<br>" ) , e = e . replace ( /[ \t]{2,}/g , function ( a ) { return CKEDITOR . tools . repeat ( " " ,
a . length - 1 ) + " " } ) ; if ( c ) { var f = b . clone ( ) ; f . setHtml ( e ) ; c . append ( f ) } else b . setHtml ( e ) } return c || b } function q ( a ) { var b = this . _ . definition , c = b . attributes , b = b . styles , d = o ( this ) [ a . getName ( ) ] , e = CKEDITOR . tools . isEmpty ( c ) && CKEDITOR . tools . isEmpty ( b ) , f ; for ( f in c ) if ( ! ( ( f == "class" || this . _ . definition . fullMatch ) && a . getAttribute ( f ) != F ( f , c [ f ] ) ) ) { e = a . hasAttribute ( f ) ; a . removeAttribute ( f ) } for ( var h in b ) if ( ! ( this . _ . definition . fullMatch && a . getStyle ( h ) != F ( h , b [ h ] , true ) ) ) { e = e || ! ! a . getStyle ( h ) ; a . removeStyle ( h ) } l ( a , d , s [ a . getName ( ) ] ) ;
e && ( this . _ . definition . alwaysRemoveElement ? g ( a , 1 ) : ! CKEDITOR . dtd . $block [ a . getName ( ) ] || this . _ . enterMode == CKEDITOR . ENTER _BR && ! a . hasAttributes ( ) ? g ( a ) : a . renameNode ( this . _ . enterMode == CKEDITOR . ENTER _P ? "p" : "div" ) ) } function r ( a ) { for ( var b = o ( this ) , c = a . getElementsByTag ( this . element ) , d = c . count ( ) ; -- d >= 0 ; ) q . call ( this , c . getItem ( d ) ) ; for ( var e in b ) if ( e != this . element ) { c = a . getElementsByTag ( e ) ; for ( d = c . count ( ) - 1 ; d >= 0 ; d -- ) { var f = c . getItem ( d ) ; l ( f , b [ e ] ) } } } function l ( a , b , c ) { if ( b = b && b . attributes ) for ( var d = 0 ; d < b . length ; d ++ ) { var e =
this . _ . enterMode != CKEDITOR . ENTER _BR ; for ( var d ; d = c . getNextParagraph ( ) ; ) if ( this . checkElementRemovable ( d ) ) if ( d . is ( "pre" ) ) { var e = this . _ . enterMode == CKEDITOR . ENTER _BR ? null : a . document . createElement ( this . _ . enterMode == CKEDITOR . ENTER _P ? "p" : "div" ) ; e && d . copyAttributes ( e ) ; j ( d , e ) } else q . call ( this , d ) ; a . moveToBookmark ( b ) } function j ( a , b ) { var c = ! b ; if ( c ) { b = a . getDocument ( ) . createElement ( "div" ) ; a . copyAttributes ( b ) } var d = b && b . is ( "pre" ) , e = a . is ( "pre" ) , f = ! d && e ; if ( d && ! e ) { e = b ; ( f = a . getBogus ( ) ) && f . remove ( ) ; f = a . getHtml ( ) ; f = l ( f ,
/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g , "" ) ; f = f . replace ( /[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi , "$1" ) ; f = f . replace ( /([ \t\n\r]+| )/g , " " ) ; f = f . replace ( /<br\b[^>]*>/gi , "\n" ) ; if ( CKEDITOR . env . ie ) { var h = a . getDocument ( ) . createElement ( "div" ) ; h . append ( e ) ; e . $ . outerHTML = "<pre>" + f + "</pre>" ; e . copyAttributes ( h . getFirst ( ) ) ; e = h . getFirst ( ) . remove ( ) } else e . setHtml ( f ) ; b = e } else f ? b = m ( c ? [ a . getHtml ( ) ] : i ( a ) , b ) : a . moveChildren ( b ) ; b . replace ( a ) ; if ( d ) { var c = b , k ; if ( ( k = c . getPrevious ( y ) ) && k . is && k . is ( "pre" ) ) { d = l ( k . getHtml ( ) , /\n$/ , "" ) +
"\n\n" + l ( c . getHtml ( ) , /^\n/ , "" ) ; CKEDITOR . env . ie ? c . $ . outerHTML = "<pre>" + d + "</pre>" : c . setHtml ( d ) ; k . remove ( ) } } else c && g ( b ) } function i ( a ) { a . getName ( ) ; var b = [ ] ; l ( a . getOuterHtml ( ) , /(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi , function ( a , b , c ) { return b + "</pre>" + c + "<pre>" } ) . replace ( /<pre\b.*?>([\s\S]*?)<\/pre>/gi , function ( a , c ) { b . push ( c ) } ) ; return b } function l ( 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 m ( a , b ) { var c ; a . length > 1 && ( 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 = l ( e , /^[ \t]*\n/ , "" ) , e = l ( e , /\n$/ , "" ) , e = l ( e , /^[ \t]+|[ \t]+$/g , function ( a , b ) { return a . length == 1 ? " " : b ? " " + CKEDITOR . tools . repeat ( " " , a . length - 1 ) : CKEDITOR . tools . repeat ( " " , a . length - 1 ) + " " } ) , e = e . replace ( /\n/g , "<br>" ) , e = e . replace ( /[ \t]{2,}/g , function ( a ) { return CKEDITOR . tools . repeat ( " " ,
a . length - 1 ) + " " } ) ; if ( c ) { var f = b . clone ( ) ; f . setHtml ( e ) ; c . append ( f ) } else b . setHtml ( e ) } return c || b } function q ( a ) { var b = this . _ . definition , c = b . attributes , b = b . styles , d = n ( this ) [ a . getName ( ) ] , e = CKEDITOR . tools . isEmpty ( c ) && CKEDITOR . tools . isEmpty ( b ) , f ; for ( f in c ) if ( ! ( ( f == "class" || this . _ . definition . fullMatch ) && a . getAttribute ( f ) != E ( f , c [ f ] ) ) ) { e = a . hasAttribute ( f ) ; a . removeAttribute ( f ) } for ( var h in b ) if ( ! ( this . _ . definition . fullMatch && a . getStyle ( h ) != E ( h , b [ h ] , true ) ) ) { e = e || ! ! a . getStyle ( h ) ; a . removeStyle ( h ) } k ( a , d , r [ a . getName ( ) ] ) ;
e && ( this . _ . definition . alwaysRemoveElement ? g ( a , 1 ) : ! CKEDITOR . dtd . $block [ a . getName ( ) ] || this . _ . enterMode == CKEDITOR . ENTER _BR && ! a . hasAttributes ( ) ? g ( a ) : a . renameNode ( this . _ . enterMode == CKEDITOR . ENTER _P ? "p" : "div" ) ) } function w ( a ) { for ( var b = n ( this ) , c = a . getElementsByTag ( this . element ) , d = c . count ( ) ; -- d >= 0 ; ) q . call ( this , c . getItem ( d ) ) ; for ( var e in b ) if ( e != this . element ) { c = a . getElementsByTag ( e ) ; for ( d = c . count ( ) - 1 ; d >= 0 ; d -- ) { var f = c . getItem ( d ) ; k ( f , b [ e ] ) } } } function k ( 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 h = b [ d ] [ 1 ] ; ( h === null || h . test && h . test ( f ) || typeof h == "string" && f == h ) && a . removeAttribute ( e ) } } c || g ( a ) } function g ( a , b ) { if ( ! a . hasAttributes ( ) || b ) if ( CKEDITOR . dtd . $block [ a . getName ( ) ] ) { var c = a . getPrevious ( y ) , d = a . getNext ( y ) ; 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 ( true ) } else { c = a . getFirst ( ) ; d = a . getLast ( ) ; a . remove ( true ) ; if ( c ) { c . type == CKEDITOR . NODE _ELEMENT &&
c . mergeSiblings ( ) ; d && ( ! c . equals ( d ) && d . type == CKEDITOR . NODE _ELEMENT ) && d . mergeSiblings ( ) } } } function p ( a , b , c ) { var d ; d = a . element ; d == "*" && ( d = "span" ) ; d = new CKEDITOR . dom . element ( d , b ) ; c && c . copyAttributes ( d ) ; d = v ( d , a ) ; b . getCustomData ( "doc_processing_style" ) && d . hasAttribute ( "id" ) ? d . removeAttribute ( "id" ) : b . setCustomData ( "doc_processing_style" , 1 ) ; return d } function v ( 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 u ( a , b ) { for ( var c in a ) a [ c ] = a [ c ] . replace ( t , function ( a , c ) { return b [ c ] } ) } function o ( 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 ; if ( typeof e == "string" ) f = e . toLowerCase ( ) ; else { 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 F ( a ,
b , c ) { var d = new CKEDITOR . dom . element ( "span" ) ; d [ c ? "setStyle" : "setAttribute" ] ( a , b ) ; return d [ c ? "getStyle" : "getAttribute" ] ( a ) } function A ( a , b ) { for ( var c = a . document , d = a . getRanges ( ) , e = b ? this . removeFromRange : this . applyToRange , f , g = d . createIterator ( ) ; f = g . getNextRange ( ) ; ) e . call ( this , f ) ; a . selectRanges ( d ) ; c . removeCustomData ( "doc_processing_style" ) } var s = { 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 } , x = { a : 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 } , z = /\s*(?:;\s*|$)/ , t = /#\((.+?)\)/g , C = CKEDITOR . dom . walker . bookmark ( 0 , 1 ) , y = CKEDITOR . dom . walker . whitespaces ( 1 ) ; CKEDITOR . style = function ( a , b ) { var c = a . attributes ; if ( c && c . style ) { a . styles = CKEDITOR . tools . extend ( { } , a . styles , CKEDITOR . tools . parseCssText ( c . style ) ) ; delete c . style } if ( b ) { a = CKEDITOR . tools . clone ( a ) ; u ( a . attributes , b ) ; u ( a . styles ,
b ) } c = this . element = a . element ? typeof a . element == "string" ? a . element . toLowerCase ( ) : a . element : "*" ; this . type = a . type || ( s [ c ] ? CKEDITOR . STYLE _BLOCK : x [ c ] ? CKEDITOR . STYLE _OBJECT : CKEDITOR . STYLE _INLINE ) ; if ( typeof this . element == "object" ) this . type = CKEDITOR . STYLE _OBJECT ; this . _ = { definition : a } } ; CKEDITOR . editor . prototype . applyStyle = function ( a ) { A . call ( a , this . getSelection ( ) ) } ; CKEDITOR . editor . prototype . removeStyle = function ( a ) { A . call ( a , this . getSelection ( ) , 1 ) } ; CKEDITOR . style . prototype = { apply : function ( a ) { A . call ( this , a . getSelection ( ) ) } ,
remove : function ( a ) { A . call ( this , a . getSelection ( ) , 1 ) } , applyToRange : function ( a ) { return ( this . applyToRange = this . type == CKEDITOR . STYLE _INLINE ? c : this . type == CKEDITOR . STYLE _BLOCK ? e : this . type == CKEDITOR . STYLE _OBJECT ? f : null ) . call ( this , a ) } , removeFromRange : function ( b ) { return ( this . removeFromRange = this . type == CKEDITOR . STYLE _INLINE ? a : this . type == CKEDITOR . STYLE _BLOCK ? h : this . type == CKEDITOR . STYLE _OBJECT ? d : null ) . call ( this , b ) } , applyToObject : function ( a ) { v ( a , this ) } , checkActive : function ( a ) { switch ( this . type ) { case CKEDITOR . STYLE _BLOCK : return this . checkElementRemovable ( a . block ||
return a } function t ( a , b ) { for ( var c in a ) a [ c ] = a [ c ] . replace ( s , function ( a , c ) { return b [ c ] } ) } function n ( 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 ; if ( typeof e == "string" ) f = e . toLowerCase ( ) ; else { 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 E ( a ,
b , c ) { var d = new CKEDITOR . dom . element ( "span" ) ; d [ c ? "setStyle" : "setAttribute" ] ( a , b ) ; return d [ c ? "getStyle" : "getAttribute" ] ( a ) } function B ( a , b ) { for ( var c = a . document , d = a . getRanges ( ) , e = b ? this . removeFromRange : this . applyToRange , f , g = d . createIterator ( ) ; f = g . getNextRange ( ) ; ) e . call ( this , f ) ; a . selectRanges ( d ) ; c . removeCustomData ( "doc_processing_style" ) } var r = { 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 } , x = { a : 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 } , z = /\s*(?:;\s*|$)/ , s = /#\((.+?)\)/g , C = CKEDITOR . dom . walker . bookmark ( 0 , 1 ) , y = CKEDITOR . dom . walker . whitespaces ( 1 ) ; CKEDITOR . style = function ( a , b ) { var c = a . attributes ; if ( c && c . style ) { a . styles = CKEDITOR . tools . extend ( { } , a . styles , CKEDITOR . tools . parseCssText ( c . style ) ) ; delete c . style } if ( b ) { a = CKEDITOR . tools . clone ( a ) ; t ( a . attributes , b ) ; t ( a . styles ,
b ) } c = this . element = a . element ? typeof a . element == "string" ? a . element . toLowerCase ( ) : a . element : "*" ; this . type = a . type || ( r [ c ] ? CKEDITOR . STYLE _BLOCK : x [ c ] ? CKEDITOR . STYLE _OBJECT : CKEDITOR . STYLE _INLINE ) ; if ( typeof this . element == "object" ) this . type = CKEDITOR . STYLE _OBJECT ; this . _ = { definition : a } } ; CKEDITOR . editor . prototype . applyStyle = function ( a ) { B . call ( a , this . getSelection ( ) ) } ; CKEDITOR . editor . prototype . removeStyle = function ( a ) { B . call ( a , this . getSelection ( ) , 1 ) } ; CKEDITOR . style . prototype = { apply : function ( a ) { B . call ( this , a . getSelection ( ) ) } ,
remove : function ( a ) { B . call ( this , a . getSelection ( ) , 1 ) } , applyToRange : function ( a ) { return ( this . applyToRange = this . type == CKEDITOR . STYLE _INLINE ? c : this . type == CKEDITOR . STYLE _BLOCK ? e : this . type == CKEDITOR . STYLE _OBJECT ? f : null ) . call ( this , a ) } , removeFromRange : function ( b ) { return ( this . removeFromRange = this . type == CKEDITOR . STYLE _INLINE ? a : this . type == CKEDITOR . STYLE _BLOCK ? h : this . type == CKEDITOR . STYLE _OBJECT ? d : null ) . call ( this , b ) } , applyToObject : function ( a ) { v ( a , this ) } , checkActive : function ( a ) { switch ( this . type ) { case CKEDITOR . STYLE _BLOCK : return this . checkElementRemovable ( a . block ||
a . blockLimit , true ) ; case CKEDITOR . STYLE _OBJECT : case CKEDITOR . STYLE _INLINE : for ( var b = a . elements , c = 0 , d ; c < b . length ; c ++ ) { d = b [ c ] ; if ( ! ( this . type == CKEDITOR . STYLE _INLINE && ( d == a . block || d == a . blockLimit ) ) ) { if ( this . type == CKEDITOR . STYLE _OBJECT ) { var e = d . getName ( ) ; if ( ! ( typeof this . element == "string" ? e == this . element : e in this . element ) ) continue } if ( this . checkElementRemovable ( d , true ) ) return true } } } return false } , checkApplicable : function ( a ) { switch ( this . type ) { case CKEDITOR . STYLE _OBJECT : return a . contains ( this . element ) } return true } ,
checkElementMatch : function ( a , b ) { var c = this . _ . definition ; if ( ! a || ! c . ignoreReadonly && a . isReadOnly ( ) ) return false ; var d = a . getName ( ) ; if ( typeof this . element == "string" ? d == this . element : d in this . element ) { if ( ! b && ! a . hasAttributes ( ) ) return true ; 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 ( h != "_length" ) { e = a . getAttribute ( h ) || "" ; if ( h == "style" ) a : { d = c [ h ] ; typeof d ==
"string" && ( d = CKEDITOR . tools . parseCssText ( d ) ) ; typeof e == "string" && ( e = CKEDITOR . tools . parseCssText ( e , true ) ) ; g = void 0 ; for ( g in d ) if ( ! ( g in e && ( e [ g ] == d [ g ] || d [ g ] == "inherit" || e [ g ] == "inherit" ) ) ) { d = false ; break a } d = true } else d = c [ h ] == e ; if ( d ) { if ( ! b ) return true } else if ( b ) return false } if ( b ) return true } else return true } return false } , checkElementRemovable : function ( a , b ) { if ( this . checkElementMatch ( a , b ) ) return true ; var c = o ( this ) [ a . getName ( ) ] ; if ( c ) { var d ; if ( ! ( c = c . attributes ) ) return true ; for ( var e = 0 ; e < c . length ; e ++ ) { d =
"string" && ( d = CKEDITOR . tools . parseCssText ( d ) ) ; typeof e == "string" && ( e = CKEDITOR . tools . parseCssText ( e , true ) ) ; g = void 0 ; for ( g in d ) if ( ! ( g in e && ( e [ g ] == d [ g ] || d [ g ] == "inherit" || e [ g ] == "inherit" ) ) ) { d = false ; break a } d = true } else d = c [ h ] == e ; if ( d ) { if ( ! b ) return true } else if ( b ) return false } if ( b ) return true } else return true } return false } , checkElementRemovable : function ( a , b ) { if ( this . checkElementMatch ( a , b ) ) return true ; var c = n ( this ) [ a . getName ( ) ] ; if ( c ) { var d ; if ( ! ( c = c . attributes ) ) return true ; for ( var e = 0 ; e < c . length ; e ++ ) { d =
c [ e ] [ 0 ] ; if ( d = a . getAttribute ( d ) ) { var f = c [ e ] [ 1 ] ; if ( f === null || typeof f == "string" && d == f || f . test ( d ) ) return true } } } return false } , buildPreview : function ( a ) { var b = this . _ . definition , c = [ ] , d = b . element ; d == "bdo" && ( d = "span" ) ; var c = [ "<" , d ] , e = b . attributes ; if ( e ) for ( var f in e ) c . push ( " " , f , '="' , e [ f ] , '"' ) ; ( e = CKEDITOR . style . getStyleText ( b ) ) && c . push ( ' style="' , e , '"' ) ; c . push ( ">" , a || b . name , "</" , d , ">" ) ; 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 ( z , ";" ) ) ; for ( var e in b ) { var f = b [ e ] , g = ( e + ":" + f ) . replace ( z , ";" ) ; f == "inherit" ? d = d + g : c = c + g } c . length && ( c = CKEDITOR . tools . normalizeCssText ( c , true ) ) ; return a . _ST = c + d } } ) ( ) ; CKEDITOR . styleCommand = function ( b , c ) { this . requiredContent = this . allowedContent = this . style = b ; CKEDITOR . tools . extend ( this , c , true ) } ;
CKEDITOR . styleCommand . prototype . exec = function ( b ) { b . focus ( ) ; this . state == CKEDITOR . TRISTATE _OFF ? b . applyStyle ( this . style ) : this . state == CKEDITOR . TRISTATE _ON && b . removeStyle ( this . style ) } ; CKEDITOR . stylesSet = new CKEDITOR . resourceManager ( "" , "stylesSet" ) ; CKEDITOR . addStylesSet = CKEDITOR . tools . bind ( CKEDITOR . stylesSet . add , CKEDITOR . stylesSet ) ; CKEDITOR . loadStylesSet = function ( b , c , a ) { CKEDITOR . stylesSet . addExternal ( b , c , "" ) ; CKEDITOR . stylesSet . load ( b , a ) } ;
CKEDITOR . editor . prototype . getStylesSet = function ( b ) { if ( this . _ . stylesDefinitions ) b ( this . _ . stylesDefinitions ) ; else { var c = this , a = c . config . stylesCombo _stylesSet || c . config . stylesSet ; if ( a === false ) b ( null ) ; else if ( a instanceof Array ) { c . _ . stylesDefinitions = a ; b ( a ) } else { a || ( a = "default" ) ; var a = a . split ( ":" ) , f = a [ 0 ] ; CKEDITOR . stylesSet . addExternal ( f , a [ 1 ] ? a . slice ( 1 ) . join ( ":" ) : CKEDITOR . getUrl ( "styles.js" ) , "" ) ; CKEDITOR . stylesSet . load ( f , function ( a ) { c . _ . stylesDefinitions = a [ f ] ; b ( c . _ . stylesDefinitions ) } ) } } } ;
CKEDITOR . dom . comment = function ( b , c ) { typeof b == "string" && ( b = ( c ? c . $ : document ) . createComment ( b ) ) ; CKEDITOR . dom . domObject . call ( this , b ) } ; CKEDITOR . dom . comment . prototype = new CKEDITOR . dom . node ; CKEDITOR . tools . extend ( CKEDITOR . dom . comment . prototype , { type : CKEDITOR . NODE _COMMENT , getOuterHtml : function ( ) { return "<\!--" + this . $ . nodeValue + "--\>" } } ) ;
( function ( ) { var b = { } , c ; for ( c in CKEDITOR . dtd . $blockLimit ) c in CKEDITOR . dtd . $list || ( b [ c ] = 1 ) ; var a = { } ; for ( c in CKEDITOR . dtd . $block ) c in CKEDITOR . dtd . $blockLimit || c in CKEDITOR . dtd . $empty || ( a [ c ] = 1 ) ; CKEDITOR . dom . elementPath = function ( c , d ) { var e = null , h = null , j = [ ] , d = d || c . getDocument ( ) . getBody ( ) , i = c ; do if ( i . type == CKEDITOR . NODE _ELEMENT ) { j . push ( i ) ; if ( ! this . lastElement ) { this . lastElement = i ; if ( i . is ( CKEDITOR . dtd . $object ) ) continue } var k = i . getName ( ) ; if ( ! h ) { ! e && a [ k ] && ( e = i ) ; if ( b [ k ] ) { var m ; if ( m = ! e ) { if ( k = k == "div" ) { a : { k =
i . getChildren ( ) ; m = 0 ; for ( var q = k . count ( ) ; m < q ; m ++ ) { var r = k . getItem ( m ) ; if ( r . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $block [ r . getName ( ) ] ) { k = true ; break a } } k = false } k = ! k && ! i . equals ( d ) } m = k } m ? e = i : h = i } } if ( i . equals ( d ) ) break } while ( i = i . getParent ( ) ) ; this . block = e ; this . blockLimit = h ; this . root = d ; this . elements = j } } ) ( ) ;
( function ( ) { var b = { } , c ; for ( c in CKEDITOR . dtd . $blockLimit ) c in CKEDITOR . dtd . $list || ( b [ c ] = 1 ) ; var a = { } ; for ( c in CKEDITOR . dtd . $block ) c in CKEDITOR . dtd . $blockLimit || c in CKEDITOR . dtd . $empty || ( a [ c ] = 1 ) ; CKEDITOR . dom . elementPath = function ( c , d ) { var e = null , h = null , j = [ ] , d = d || c . getDocument ( ) . getBody ( ) , i = c ; do if ( i . type == CKEDITOR . NODE _ELEMENT ) { j . push ( i ) ; if ( ! this . lastElement ) { this . lastElement = i ; if ( i . is ( CKEDITOR . dtd . $object ) ) continue } var l = i . getName ( ) ; if ( ! h ) { ! e && a [ l ] && ( e = i ) ; if ( b [ l ] ) { var m ; if ( m = ! e ) { if ( l = l == "div" ) { a : { l =
i . getChildren ( ) ; m = 0 ; for ( var q = l . count ( ) ; m < q ; m ++ ) { var w = l . getItem ( m ) ; if ( w . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $block [ w . getName ( ) ] ) { l = true ; break a } } l = false } l = ! l && ! i . equals ( d ) } m = l } m ? e = i : h = i } } if ( i . equals ( d ) ) break } while ( i = i . getParent ( ) ) ; this . block = e ; this . blockLimit = h ; this . root = d ; this . elements = j } } ) ( ) ;
CKEDITOR . dom . elementPath . prototype = { compare : function ( b ) { var c = this . elements , b = b && b . elements ; if ( ! b || c . length != b . length ) return false ; for ( var a = 0 ; a < c . length ; a ++ ) if ( ! c [ a ] . equals ( b [ a ] ) ) return false ; return true } , contains : function ( b , c , a ) { var f ; typeof b == "string" && ( f = function ( a ) { return a . getName ( ) == b } ) ; b instanceof CKEDITOR . dom . element ? f = function ( a ) { return a . equals ( b ) } : CKEDITOR . tools . isArray ( b ) ? f = function ( a ) { return CKEDITOR . tools . indexOf ( b , a . getName ( ) ) > - 1 } : typeof b == "function" ? f = b : typeof b == "object" && ( f =
function ( a ) { return a . getName ( ) in b } ) ; var d = this . elements , e = d . length ; c && e -- ; if ( a ) { d = Array . prototype . slice . call ( d , 0 ) ; d . reverse ( ) } for ( c = 0 ; c < e ; c ++ ) if ( f ( d [ c ] ) ) return d [ c ] ; return null } , isContextFor : function ( b ) { var c ; if ( b in CKEDITOR . dtd . $block ) { c = this . contains ( CKEDITOR . dtd . $intermediate ) || this . root . equals ( this . block ) && this . block || this . blockLimit ; return ! ! c . getDtd ( ) [ b ] } return true } , direction : function ( ) { return ( this . block || this . blockLimit || this . root ) . getDirection ( 1 ) } } ;
CKEDITOR . dom . text = function ( b , c ) { typeof b == "string" && ( b = ( c ? c . $ : document ) . createTextNode ( b ) ) ; this . $ = b } ; 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 ( b ) { this . $ . nodeValue = b } , split : function ( b ) { var c = this . $ . parentNode , a = c . childNodes . length , f = this . getLength ( ) , d = this . getDocument ( ) , e = new CKEDITOR . dom . text ( this . $ . splitText ( b ) , d ) ; if ( c . childNodes . length == a ) if ( b >= f ) { e = d . createText ( "" ) ; e . insertAfter ( this ) } else { b = d . createText ( "" ) ; b . insertAfter ( e ) ; b . remove ( ) } return e } , substring : function ( b ,
c ) { return typeof c != "number" ? this . $ . nodeValue . substr ( b ) : this . $ . nodeValue . substring ( b , c ) } } ) ;
( function ( ) { function b ( a , b , c ) { var e = a . serializable , h = b [ c ? "endContainer" : "startContainer" ] , j = c ? "endOffset" : "startOffset" , i = e ? b . document . getById ( a . startNode ) : a . startNode , a = e ? b . document . getById ( a . endNode ) : a . endNode ; if ( h . equals ( i . getPrevious ( ) ) ) { b . startOffset = b . startOffset - h . getLength ( ) - a . getPrevious ( ) . getLength ( ) ; h = a . getNext ( ) } else if ( h . equals ( a . getPrevious ( ) ) ) { b . startOffset = b . startOffset - h . getLength ( ) ; h = a . getNext ( ) } h . equals ( i . getParent ( ) ) && b [ j ] ++ ; h . equals ( a . getParent ( ) ) && b [ j ] ++ ; b [ c ? "endContainer" : "startContainer" ] =
h ; return b } 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 , c ) } ; var c = { createIterator : function ( ) { var a = this , b = CKEDITOR . dom . walker . bookmark ( ) , c = [ ] , e ; return { getNextRange : function ( h ) { e = e == void 0 ? 0 : e + 1 ; var j = a [ e ] ; if ( j && a . length > 1 ) { if ( ! e ) for ( var i = a . length - 1 ; i >= 0 ; i -- ) c . unshift ( a [ i ] . createBookmark ( true ) ) ; if ( h ) for ( var k = 0 ; a [ e + k + 1 ] ; ) { for ( var m = j . document , h = 0 , i = m . getById ( c [ k ] . endNode ) , m = m . getById ( c [ k +
1 ] . startNode ) ; ; ) { i = i . getNextSourceNode ( false ) ; if ( m . equals ( i ) ) h = 1 ; else if ( b ( i ) || i . type == CKEDITOR . NODE _ELEMENT && i . isBlockBoundary ( ) ) continue ; break } if ( ! h ) break ; k ++ } for ( j . moveToBookmark ( c . shift ( ) ) ; k -- ; ) { i = a [ ++ e ] ; i . moveToBookmark ( c . shift ( ) ) ; j . setEnd ( i . endContainer , i . endOffset ) } } return j } } } , createBookmarks : function ( a ) { for ( var c = [ ] , d , e = 0 ; e < this . length ; e ++ ) { c . push ( d = this [ e ] . createBookmark ( a , true ) ) ; for ( var h = e + 1 ; h < this . length ; h ++ ) { this [ h ] = b ( d , this [ h ] ) ; this [ h ] = b ( d , this [ h ] , true ) } } return c } , createBookmarks2 : function ( a ) { for ( var b =
h ; return b } 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 , c ) } ; var c = { createIterator : function ( ) { var a = this , b = CKEDITOR . dom . walker . bookmark ( ) , c = [ ] , e ; return { getNextRange : function ( h ) { e = e == void 0 ? 0 : e + 1 ; var j = a [ e ] ; if ( j && a . length > 1 ) { if ( ! e ) for ( var i = a . length - 1 ; i >= 0 ; i -- ) c . unshift ( a [ i ] . createBookmark ( true ) ) ; if ( h ) for ( var l = 0 ; a [ e + l + 1 ] ; ) { for ( var m = j . document , h = 0 , i = m . getById ( c [ l ] . endNode ) , m = m . getById ( c [ l +
1 ] . startNode ) ; ; ) { i = i . getNextSourceNode ( false ) ; if ( m . equals ( i ) ) h = 1 ; else if ( b ( i ) || i . type == CKEDITOR . NODE _ELEMENT && i . isBlockBoundary ( ) ) continue ; break } if ( ! h ) break ; l ++ } for ( j . moveToBookmark ( c . shift ( ) ) ; l -- ; ) { i = a [ ++ e ] ; i . moveToBookmark ( c . shift ( ) ) ; j . setEnd ( i . endContainer , i . endOffset ) } } return j } } } , createBookmarks : function ( a ) { for ( var c = [ ] , d , e = 0 ; e < this . length ; e ++ ) { c . push ( d = this [ e ] . createBookmark ( a , true ) ) ; for ( var h = e + 1 ; h < this . length ; h ++ ) { this [ h ] = b ( d , this [ h ] ) ; this [ h ] = b ( d , this [ h ] , true ) } } return c } , createBookmarks2 : function ( a ) { for ( var b =
[ ] , c = 0 ; c < this . length ; c ++ ) b . push ( this [ c ] . createBookmark2 ( a ) ) ; return b } , moveToBookmarks : function ( a ) { for ( var b = 0 ; b < this . length ; b ++ ) this [ b ] . moveToBookmark ( a [ b ] ) } } } ) ( ) ;
( function ( ) { function b ( ) { return CKEDITOR . getUrl ( CKEDITOR . skinName . split ( "," ) [ 1 ] || "skins/" + CKEDITOR . skinName . split ( "," ) [ 0 ] + "/" ) } function c ( a ) { var c = CKEDITOR . skin [ "ua_" + a ] , d = CKEDITOR . env ; if ( c ) for ( var c = c . split ( "," ) . sort ( function ( a , b ) { return a > b ? - 1 : 1 } ) , e = 0 , f ; e < c . length ; e ++ ) { f = c [ e ] ; if ( d . ie && ( f . replace ( /^ie/ , "" ) == d . version || d . quirks && f == "iequirks" ) ) f = "ie" ; if ( d [ f ] ) { a = a + ( "_" + c [ e ] ) ; break } } return CKEDITOR . getUrl ( b ( ) + a + ".css" ) } function a ( a , b ) { if ( ! e [ a ] ) { CKEDITOR . document . appendStyleSheet ( c ( a ) ) ; e [ a ] = 1 } b && b ( ) }
function f ( a ) { var b = a . getById ( h ) ; if ( ! b ) { b = a . getHead ( ) . append ( "style" ) ; b . setAttribute ( "id" , h ) ; b . setAttribute ( "type" , "text/css" ) } return b } function d ( a , b , c ) { var d , e , f ; if ( CKEDITOR . env . webkit ) { b = b . split ( "}" ) . slice ( 0 , - 1 ) ; for ( e = 0 ; e < b . length ; e ++ ) b [ e ] = b [ e ] . split ( "{" ) } for ( var h = 0 ; h < a . length ; h ++ ) if ( CKEDITOR . env . webkit ) for ( e = 0 ; e < b . length ; e ++ ) { f = b [ e ] [ 1 ] ; for ( d = 0 ; d < c . length ; d ++ ) f = f . replace ( c [ d ] [ 0 ] , c [ d ] [ 1 ] ) ; a [ h ] . $ . sheet . addRule ( b [ e ] [ 0 ] , f ) } else { f = b ; for ( d = 0 ; d < c . length ; d ++ ) f = f . replace ( c [ d ] [ 0 ] , c [ d ] [ 1 ] ) ; CKEDITOR . env . ie ?
@@ -583,25 +584,25 @@ b.entities_latin&&d.push("Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egr
b . entities _additional && d . push ( b . entities _additional ) ) ; var e = j ( d . join ( "," ) ) , f = e . regex ? "[" + e . regex + "]" : "a^" ; delete e . regex ; b . entities && b . entities _processNumerical && ( f = "[^ -~]|" + f ) ; var f = RegExp ( f , "g" ) , c = function ( a ) { return b . entities _processNumerical == "force" || ! e [ a ] ? "&#" + a . charCodeAt ( 0 ) + ";" : e [ a ] } , g = j ( "nbsp,gt,lt,amp,shy" , ! 0 ) , i = RegExp ( g . regex , "g" ) , k = function ( a ) { return g [ a ] } ; a . addRules ( { text : function ( a ) { return a . replace ( i , k ) . replace ( f , c ) } } ) } } } ) } ) ( ) ; CKEDITOR . config . basicEntities = ! 0 ;
CKEDITOR . config . entities = ! 0 ; CKEDITOR . config . entities _latin = ! 0 ; CKEDITOR . config . entities _greek = ! 0 ; CKEDITOR . config . entities _additional = "#39" ; ( function ( ) { function q ( a ) { var i = a . config , l = a . fire ( "uiSpace" , { space : "top" , html : "" } ) . html , o = function ( ) { function f ( a , c , e ) { b . setStyle ( c , t ( e ) ) ; b . setStyle ( "position" , a ) } function e ( a ) { var b = r . getDocumentPosition ( ) ; switch ( a ) { case "top" : f ( "absolute" , "top" , b . y - m - n ) ; break ; case "pin" : f ( "fixed" , "top" , q ) ; break ; case "bottom" : f ( "absolute" , "top" , b . y + ( c . height || c . bottom - c . top ) + n ) } j = a } var j , r , k , c , h , m , s , l = i . floatSpaceDockedOffsetX || 0 , n = i . floatSpaceDockedOffsetY || 0 , p = i . floatSpacePinnedOffsetX || 0 , q = i . floatSpacePinnedOffsetY ||
0 ; return function ( d ) { if ( r = a . editable ( ) ) if ( d && "focus" == d . name && b . show ( ) , b . removeStyle ( "left" ) , b . removeStyle ( "right" ) , k = b . getClientRect ( ) , c = r . getClientRect ( ) , h = g . getViewPaneSize ( ) , m = k . height , s = "pageXOffset" in g . $ ? g . $ . pageXOffset : CKEDITOR . document . $ . documentElement . scrollLeft , j ) { m + n <= c . top ? e ( "top" ) : m + n > h . height - c . bottom ? e ( "pin" ) : e ( "bottom" ) ; var d = h . width / 2 , d = 0 < c . left && c . right < h . width && c . width > k . width ? "rtl" == a . config . contentsLangDirection ? "right" : "left" : d - c . left > c . right - d ? "left" : "right" , f ; k . width > h . width ?
( d = "left" , f = 0 ) : ( f = "left" == d ? 0 < c . left ? c . left : 0 : c . right < h . width ? h . width - c . right : 0 , f + k . width > h . width && ( d = "left" == d ? "right" : "left" , f = 0 ) ) ; b . setStyle ( d , t ( ( "pin" == j ? p : l ) + f + ( "pin" == j ? 0 : "left" == d ? s : - s ) ) ) } else j = "pin" , e ( "pin" ) , o ( d ) } } ( ) ; if ( l ) { var b = CKEDITOR . document . getBody ( ) . append ( CKEDITOR . dom . element . createFromHtml ( u . output ( { content : l , id : a . id , langDir : a . lang . dir , langCode : a . langCode , name : a . name , style : "display:none;z-index:" + ( i . baseFloatZIndex - 1 ) , topId : a . ui . spaceId ( "top" ) } ) ) ) , p = CKEDITOR . tools . eventsBuffer ( 500 ,
o ) , e = CKEDITOR . tools . eventsBuffer ( 100 , o ) ; b . unselectable ( ) ; b . on ( "mousedown" , function ( a ) { a = a . data ; a . getTarget ( ) . hasAscendant ( "a" , 1 ) || a . preventDefault ( ) } ) ; a . on ( "focus" , function ( b ) { o ( b ) ; a . on ( "change" , p . input ) ; g . on ( "scroll" , e . input ) ; g . on ( "resize" , e . input ) } ) ; a . on ( "blur" , function ( ) { b . hide ( ) ; a . removeListener ( "change" , p . input ) ; g . removeListener ( "scroll" , e . input ) ; g . removeListener ( "resize" , e . input ) } ) ; a . on ( "destroy" , function ( ) { g . removeListener ( "scroll" , e . input ) ; g . removeListener ( "resize" , e . input ) ; b . clearCustomData ( ) ;
b . remove ( ) } ) ; a . focusManager . hasFocus && b . show ( ) ; a . focusManager . add ( b , 1 ) } } var u = CKEDITOR . addTemplate ( "floatcontainer" , '<div id="cke_{name}" class="cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_float cke_{langDir} ' + CKEDITOR . env . cssClass + '" dir="{langDir}" title="' + ( CKEDITOR . env . gecko ? " " : "" ) + '" lang="{langCode}" role="application" style="{style}"><div class="cke_inner"><div id="{topId}" class="cke_top" role="presentation">{content}</div></div></div>' ) , g = CKEDITOR . document . getWindow ( ) , t = CKEDITOR . tools . cssLength ;
CKEDITOR . plugins . add ( "floatingspace" , { init : function ( a ) { a . on ( "loaded" , function ( ) { q ( this ) } , null , null , 20 ) } } ) } ) ( ) ; ( function ( ) { function k ( a ) { var d = this . editor , b = a . document , c = b . body ; ( a = b . getElementById ( "cke_actscrpt" ) ) && a . parentNode . removeChild ( a ) ; ( a = b . getElementById ( "cke_shimscrpt" ) ) && a . parentNode . removeChild ( a ) ; CKEDITOR . env . gecko && ( c . contentEditable = ! 1 , 2E4 > CKEDITOR . env . version && ( c . innerHTML = c . innerHTML . replace ( /^.*<\!-- cke-content-start --\>/ , "" ) , setTimeout ( function ( ) { var a = new CKEDITOR . dom . range ( new CKEDITOR . dom . document ( b ) ) ; a . setStart ( new CKEDITOR . dom . node ( c ) , 0 ) ; d . getSelection ( ) . selectRanges ( [ a ] ) } , 0 ) ) ) ; c . contentEditable =
! 0 ; CKEDITOR . env . ie && ( c . hideFocus = ! 0 , c . disabled = ! 0 , c . removeAttribute ( "disabled" ) ) ; delete this . _ . isLoadingData ; this . $ = c ; b = new CKEDITOR . dom . document ( b ) ; this . setup ( ) ; CKEDITOR . env . ie && ( b . getDocumentElement ( ) . addClass ( b . $ . compatMode ) , d . config . enterMode != CKEDITOR . ENTER _P && b . on ( "selectionchange" , function ( ) { var a = b . getBody ( ) , c = d . getSelection ( ) , e = c && c . getRanges ( ) [ 0 ] ; e && ( a . getHtml ( ) . match ( /^<p> <\/p>$/i ) && e . startContainer . equals ( a ) ) && setTimeout ( function ( ) { e = d . getSelection ( ) . getRanges ( ) [ 0 ] ; if ( ! e . startContainer . equals ( "body" ) ) { a . getFirst ( ) . remove ( 1 ) ;
e . moveToElementEditEnd ( a ) ; e . select ( ) } } , 0 ) } ) ) ; try { d . document . $ . execCommand ( "2D-position" , ! 1 , ! 0 ) } catch ( e ) { } try { d . document . $ . execCommand ( "enableInlineTableEditing" , ! 1 , ! d . config . disableNativeTableHandles ) } catch ( g ) { } if ( d . config . disableObjectResizing ) try { this . getDocument ( ) . $ . execCommand ( "enableObjectResizing" , ! 1 , ! 1 ) } catch ( f ) { this . attachListener ( this , CKEDITOR . env . ie ? "resizestart" : "resize" , function ( a ) { a . data . preventDefault ( ) } ) } ( CKEDITOR . env . gecko || CKEDITOR . env . ie && "CSS1Compat" == d . document . $ . compatMode ) &&
this . attachListener ( this , "keydown" , function ( a ) { var b = a . data . getKeystroke ( ) ; if ( b == 33 || b == 34 ) if ( CKEDITOR . env . ie ) setTimeout ( function ( ) { d . getSelection ( ) . scrollIntoView ( ) } , 0 ) ; else if ( d . window . $ . innerHeight > this . $ . offsetHeight ) { var c = d . createRange ( ) ; c [ b == 33 ? "moveToElementEditStart" : "moveToElementEditEnd" ] ( this ) ; c . select ( ) ; a . data . preventDefault ( ) } } ) ; CKEDITOR . env . ie && this . attachListener ( b , "blur" , function ( ) { try { b . $ . selection . empty ( ) } catch ( a ) { } } ) ; d . document . getElementsByTag ( "title" ) . getItem ( 0 ) . data ( "cke-title" ,
d . document . $ . title ) ; CKEDITOR . env . ie && ( d . document . $ . title = this . _ . docTitle ) ; CKEDITOR . tools . setTimeout ( function ( ) { d . fire ( "contentDom" ) ; if ( this . _ . isPendingFocus ) { d . focus ( ) ; this . _ . isPendingFocus = false } setTimeout ( function ( ) { d . fire ( "dataReady" ) } , 0 ) ; CKEDITOR . env . ie && setTimeout ( function ( ) { if ( d . document ) { var a = d . document . $ . body ; a . runtimeStyle . marginBottom = "0px" ; a . runtimeStyle . marginBottom = "" } } , 1E3 ) } , 0 , this ) } function l ( ) { var a = [ ] ; if ( 8 <= CKEDITOR . document . $ . documentMode ) { a . push ( "html.CSS1Compat [contenteditable=false]{min-height:0 !important}" ) ;
var d = [ ] , b ; for ( b in CKEDITOR . dtd . $removeEmpty ) d . push ( "html.CSS1Compat " + b + "[contenteditable=false]" ) ; a . push ( d . join ( "," ) + "{display:inline-block}" ) } else CKEDITOR . env . gecko && ( a . push ( "html{height:100% !important}" ) , a . push ( "img:-moz-broken{-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}" ) ) ; a . push ( "html{cursor:text;*cursor:auto}" ) ; a . push ( "img,input,textarea{cursor:default}" ) ; return a . join ( "\n" ) } CKEDITOR . plugins . add ( "wysiwygarea" , { init : function ( a ) { a . config . fullPage && a . addFeature ( { allowedContent : "html head title; style [media,type]; body (*)[id]; meta link [*]" ,
requiredContent : "body" } ) ; a . addMode ( "wysiwyg" , function ( d ) { function b ( b ) { b && b . removeListener ( ) ; a . editable ( new j ( a , e . $ . contentWindow . document . body ) ) ; a . setData ( a . getData ( 1 ) , d ) } var c = "document.open();" + ( CKEDITOR . env . ie ? "(" + CKEDITOR . tools . fixDomain + ")();" : "" ) + "document.close();" , c = CKEDITOR . env . air ? "javascript:void(0)" : CKEDITOR . env . ie ? "javascript:void(function(){" + encodeURIComponent ( c ) + "}())" : "" , e = CKEDITOR . dom . element . createFromHtml ( '<iframe src="' + c + '" frameBorder="0"></iframe>' ) ; e . setStyles ( { width : "100%" ,
height : "100%" } ) ; e . addClass ( "cke_wysiwyg_frame cke_reset" ) ; var g = a . ui . space ( "contents" ) ; g . append ( e ) ; if ( c = CKEDITOR . env . ie || CKEDITOR . env . gecko ) e . on ( "load" , b ) ; var f = a . title , h = a . lang . common . editorHelp ; f && ( CKEDITOR . env . ie && ( f += ", " + h ) , e . setAttribute ( "title" , f ) ) ; var f = CKEDITOR . tools . getNextId ( ) , i = CKEDITOR . dom . element . createFromHtml ( '<span id="' + f + '" class="cke_voice_label">' + h + "</span>" ) ; g . append ( i , 1 ) ; a . on ( "beforeModeUnload" , function ( a ) { a . removeListener ( ) ; i . remove ( ) } ) ; e . setAttributes ( { "aria-describedby" : f ,
tabIndex : a . tabIndex , allowTransparency : "true" } ) ; ! c && b ( ) ; CKEDITOR . env . webkit && ( c = function ( ) { g . setStyle ( "width" , "100%" ) ; e . hide ( ) ; e . setSize ( "width" , g . getSize ( "width" ) ) ; g . removeStyle ( "width" ) ; e . show ( ) } , e . setCustomData ( "onResize" , c ) , CKEDITOR . document . getWindow ( ) . on ( "resize" , c ) ) ; a . fire ( "ariaWidget" , e ) } ) } } ) ; var j = CKEDITOR . tools . createClass ( { $ : function ( a ) { this . base . apply ( this , arguments ) ; this . _ . frameLoadedHandler = CKEDITOR . tools . addFunction ( function ( a ) { CKEDITOR . tools . setTimeout ( k , 0 , this , a ) } , this ) ; this . _ . docTitle =
this . getWindow ( ) . getFrame ( ) . getAttribute ( "title" ) } , base : CKEDITOR . editable , proto : { setData : function ( a , d ) { var b = this . editor ; if ( d ) this . setHtml ( a ) , b . fire ( "dataReady" ) ; else { this . _ . isLoadingData = ! 0 ; b . _ . dataStore = { id : 1 } ; var c = b . config , e = c . fullPage , g = c . docType , f = CKEDITOR . tools . buildStyleHtml ( l ( ) ) . replace ( /<style>/ , '<style data-cke-temp="1">' ) ; e || ( f += CKEDITOR . tools . buildStyleHtml ( b . config . contentsCss ) ) ; var h = c . baseHref ? '<base href="' + c . baseHref + '" data-cke-temp="1" />' : "" ; e && ( a = a . replace ( /<!DOCTYPE[^>]*>/i ,
function ( a ) { b . docType = g = a ; return "" } ) . replace ( /<\?xml\s[^\?]*\?>/i , function ( a ) { b . xmlDeclaration = a ; return "" } ) ) ; b . dataProcessor && ( a = b . dataProcessor . toHtml ( a ) ) ; e ? ( /<body[\s|>]/ . test ( a ) || ( a = "<body>" + a ) , /<html[\s|>]/ . test ( a ) || ( a = "<html>" + a + "</html>" ) , /<head[\s|>]/ . test ( a ) ? /<title[\s|>]/ . test ( a ) || ( a = a . replace ( /<head[^>]*>/ , "$&<title></title>" ) ) : a = a . replace ( /<html[^>]*>/ , "$&<head><title></title></head>" ) , h && ( a = a . replace ( /<head>/ , "$&" + h ) ) , a = a . replace ( /<\/head\s*>/ , f + "$&" ) , a = g + a ) : a = c . docType + '<html dir="' +
c . contentsLangDirection + '" lang="' + ( c . contentsLanguage || b . langCode ) + '"><head><title>' + this . _ . docTitle + "</title>" + h + f + "</head><body" + ( c . bodyId ? ' id="' + c . bodyId + '"' : "" ) + ( c . bodyClass ? ' class="' + c . bodyClass + '"' : "" ) + ">" + a + "</body></html>" ; CKEDITOR . env . gecko && ( a = a . replace ( /<body/ , '<body contenteditable="true" ' ) , 2E4 > CKEDITOR . env . version && ( a = a . replace ( /<body[^>]*>/ , "$&<\!-- cke-content-start --\>" ) ) ) ; c = '<script id="cke_actscrpt" type="text/javascript"' + ( CKEDITOR . env . ie ? ' defer="defer" ' : "" ) + ">var wasLoaded=0;function onload(){if(!wasLoaded)window.parent.CKEDITOR.tools.callFunction(" +
this . _ . frameLoadedHandler + ",window);wasLoaded=1;}" + ( CKEDITOR . env . ie ? "onload();" : 'document.addEventListener("DOMContentLoaded", onload, false );' ) + "<\/script>" ; CKEDITOR . env . ie && 9 > CKEDITOR . env . version && ( c += '<script id="cke_shimscrpt">(function(){var e="abbr,article,aside,audio,bdi,canvas,data,datalist,details,figcaption,figure,footer,header,hgroup,mark,meter,nav,output,progress,section,summary,time,video".split(","),i=e.length;while(i--){document.createElement(e[i])}})()<\/script>' ) ; a = a . replace ( /(?=\s*<\/(:?head)>)/ ,
c ) ; this . clearCustomData ( ) ; this . clearListeners ( ) ; b . fire ( "contentDomUnload" ) ; var i = this . getDocument ( ) ; try { i . write ( a ) } catch ( j ) { setTimeout ( function ( ) { i . write ( a ) } , 0 ) } } } , getData : function ( a ) { if ( a ) return this . getHtml ( ) ; var a = this . editor , d = a . config , b = d . fullPage , c = b && a . docType , e = b && a . xmlDeclaration , g = this . getDocument ( ) , b = b ? g . getDocumentElement ( ) . getOuterHtml ( ) : g . getBody ( ) . getHtml ( ) ; CKEDITOR . env . gecko && d . enterMode != CKEDITOR . ENTER _BR && ( b = b . replace ( /<br>(?=\s*(:?$|<\/body>))/ , "" ) ) ; a . dataProcessor && ( b = a . dataProcessor . toDataFormat ( b ) ) ;
e && ( b = e + "\n" + b ) ; c && ( b = c + "\n" + b ) ; return b } , focus : function ( ) { this . _ . isLoadingData ? this . _ . isPendingFocus = ! 0 : j . baseProto . focus . call ( this ) } , detach : function ( ) { var a = this . editor , d = a . document , b = a . window . getFrame ( ) ; j . baseProto . detach . call ( this ) ; this . clearCustomData ( ) ; d . getDocumentElement ( ) . clearCustomData ( ) ; b . clearCustomData ( ) ; CKEDITOR . tools . removeFunction ( this . _ . frameLoadedHandler ) ; ( d = b . removeCustomData ( "onResize" ) ) && d . removeListener ( ) ; a . fire ( "contentDomUnload" ) ; b . remove ( ) } } } ) } ) ( ) ;
CKEDITOR . config . disableObjectResizing = ! 1 ; CKEDITOR . config . disableNativeTableHandles = ! 0 ; CKEDITOR . config . disableNativeSpellChecker = ! 0 ; CKEDITOR . config . contentsCss = CKEDITOR . basePath + "contents.css" ; ( function ( ) { function k ( a , b ) { var e , f ; b . on ( "refresh" , function ( a ) { var b = [ j ] , c ; for ( c in a . data . states ) b . push ( a . data . states [ c ] ) ; this . setState ( CKEDITOR . tools . search ( b , m ) ? m : j ) } , b , null , 100 ) ; b . on ( "exec" , function ( b ) { e = a . getSelection ( ) ; f = e . createBookmarks ( 1 ) ; b . data || ( b . data = { } ) ; b . data . done = ! 1 } , b , null , 0 ) ; b . on ( "exec" , function ( ) { a . forceNextSelectionCheck ( ) ; e . selectBookmarks ( f ) } , b , null , 100 ) } var j = CKEDITOR . TRISTATE _DISABLED , m = CKEDITOR . TRISTATE _OFF ; CKEDITOR . plugins . add ( "indent" , { init : function ( a ) { var b = CKEDITOR . plugins . indent . genericDefinition ;
( d = "left" , f = 0 ) : ( f = "left" == d ? 0 < c . left ? c . left : 0 : c . right < h . width ? h . width - c . right : 0 , f + k . width > h . width && ( d = "left" == d ? "right" : "left" , f = 0 ) ) ; b . setStyle ( d , t ( ( "pin" == j ? p : l ) + f + ( "pin" == j ? 0 : "left" == d ? s : - s ) ) ) } else j = "pin" , e ( "pin" ) , o ( d ) } } ( ) ; if ( l ) { var b = CKEDITOR . document . getBody ( ) . append ( CKEDITOR . dom . element . createFromHtml ( u . output ( { content : l , id : a . id , langDir : a . lang . dir , langCode : a . langCode , name : a . name , style : "display:none;z-index:" + ( i . baseFloatZIndex - 1 ) , topId : a . ui . spaceId ( "top" ) , voiceLabel : a . lang . editorPanel + ", " +
a . name } ) ) ) , p = CKEDITOR . tools . eventsBuffer ( 500 , o ) , e = CKEDITOR . tools . eventsBuffer ( 100 , o ) ; b . unselectable ( ) ; b . on ( "mousedown" , function ( a ) { a = a . data ; a . getTarget ( ) . hasAscendant ( "a" , 1 ) || a . preventDefault ( ) } ) ; a . on ( "focus" , function ( b ) { o ( b ) ; a . on ( "change" , p . input ) ; g . on ( "scroll" , e . input ) ; g . on ( "resize" , e . input ) } ) ; a . on ( "blur" , function ( ) { b . hide ( ) ; a . removeListener ( "change" , p . input ) ; g . removeListener ( "scroll" , e . input ) ; g . removeListener ( "resize" , e . input ) } ) ; a . on ( "destroy" , function ( ) { g . removeListener ( "scroll" , e . input ) ; g . removeListener ( "resize" ,
e . input ) ; b . clearCustomData ( ) ; b . remove ( ) } ) ; a . focusManager . hasFocus && b . show ( ) ; a . focusManager . add ( b , 1 ) } } var u = CKEDITOR . addTemplate ( "floatcontainer" , '<div id="cke_{name}" class="cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_float cke_{langDir} ' + CKEDITOR . env . cssClass + '" dir="{langDir}" title="' + ( CKEDITOR . env . gecko ? " " : "" ) + '" lang="{langCode}" role="application" style="{style}" aria-labelledby="cke_{name}_arialbl"><span id="cke_{name}_arialbl" class="cke_voice_label">{voiceLabel}</span ><div class="cke_inner"><div id="{topId}" class="cke_top" role="presentation">{content}</div></div></div>' ) ,
g = CKEDITOR . document . getWindow ( ) , t = CKEDITOR . tools . cssLength ; CKEDITOR . plugins . add ( "floatingspace" , { init : function ( a ) { a . on ( "loaded" , function ( ) { q ( this ) } , null , null , 20 ) } } ) } ) ( ) ; ( function ( ) { function k ( a ) { var d = this . editor , b = a . document , c = b . body ; ( a = b . getElementById ( "cke_actscrpt" ) ) && a . parentNode . removeChild ( a ) ; ( a = b . getElementById ( "cke_shimscrpt" ) ) && a . parentNode . removeChild ( a ) ; CKEDITOR . env . gecko && ( c . contentEditable = ! 1 , 2E4 > CKEDITOR . env . version && ( c . innerHTML = c . innerHTML . replace ( /^.*<\!-- cke-content-start --\>/ , "" ) , setTimeout ( function ( ) { var a = new CKEDITOR . dom . range ( new CKEDITOR . dom . document ( b ) ) ; a . setStart ( new CKEDITOR . dom . node ( c ) , 0 ) ; d . getSelection ( ) . selectRanges ( [ a ] ) } , 0 ) ) ) ; c . contentEditable =
! 0 ; CKEDITOR . env . ie && ( c . hideFocus = ! 0 , c . disabled = ! 0 , c . removeAttribute ( "disabled" ) ) ; delete this . _ . isLoadingData ; this . $ = c ; b = new CKEDITOR . dom . document ( b ) ; this . setup ( ) ; if ( CKEDITOR . env . ie ) b . getDocumentElement ( ) . addClass ( b . $ . compatMode ) , d . config . enterMode != CKEDITOR . ENTER _P && b . on ( "selectionchange" , function ( ) { var a = b . getBody ( ) , c = d . getSelection ( ) , e = c && c . getRanges ( ) [ 0 ] ; e && ( a . getHtml ( ) . match ( /^<p> <\/p>$/i ) && e . startContainer . equals ( a ) ) && setTimeout ( function ( ) { e = d . getSelection ( ) . getRanges ( ) [ 0 ] ; if ( ! e . startContainer . equals ( "body" ) ) { a . getFirst ( ) . remove ( 1 ) ;
e . moveToElementEditEnd ( a ) ; e . select ( ) } } , 0 ) } ) ; else if ( CKEDITOR . env . webkit ) b . getDocumentElement ( ) . on ( "mousedown" , function ( a ) { a . data . getTarget ( ) . is ( "html" ) && d . editable ( ) . focus ( ) } ) ; try { d . document . $ . execCommand ( "2D-position" , ! 1 , ! 0 ) } catch ( e ) { } try { d . document . $ . execCommand ( "enableInlineTableEditing" , ! 1 , ! d . config . disableNativeTableHandles ) } catch ( g ) { } if ( d . config . disableObjectResizing ) try { this . getDocument ( ) . $ . execCommand ( "enableObjectResizing" , ! 1 , ! 1 ) } catch ( f ) { this . attachListener ( this , CKEDITOR . env . ie ? "resizestart" :
"resize" , function ( a ) { a . data . preventDefault ( ) } ) } ( CKEDITOR . env . gecko || CKEDITOR . env . ie && "CSS1Compat" == d . document . $ . compatMode ) && this . attachListener ( this , "keydown" , function ( a ) { var b = a . data . getKeystroke ( ) ; if ( b == 33 || b == 34 ) if ( CKEDITOR . env . ie ) setTimeout ( function ( ) { d . getSelection ( ) . scrollIntoView ( ) } , 0 ) ; else if ( d . window . $ . innerHeight > this . $ . offsetHeight ) { var c = d . createRange ( ) ; c [ b == 33 ? "moveToElementEditStart" : "moveToElementEditEnd" ] ( this ) ; c . select ( ) ; a . data . preventDefault ( ) } } ) ; CKEDITOR . env . ie && this . attachListener ( b ,
"blur" , function ( ) { try { b . $ . selection . empty ( ) } catch ( a ) { } } ) ; d . document . getElementsByTag ( "title" ) . getItem ( 0 ) . data ( "cke-title" , d . document . $ . title ) ; CKEDITOR . env . ie && ( d . document . $ . title = this . _ . docTitle ) ; CKEDITOR . tools . setTimeout ( function ( ) { d . fire ( "contentDom" ) ; if ( this . _ . isPendingFocus ) { d . focus ( ) ; this . _ . isPendingFocus = false } setTimeout ( function ( ) { d . fire ( "dataReady" ) } , 0 ) ; CKEDITOR . env . ie && setTimeout ( function ( ) { if ( d . document ) { var a = d . document . $ . body ; a . runtimeStyle . marginBottom = "0px" ; a . runtimeStyle . marginBottom =
"" } } , 1E3 ) } , 0 , this ) } function l ( ) { var a = [ ] ; if ( 8 <= CKEDITOR . document . $ . documentMode ) { a . push ( "html.CSS1Compat [contenteditable=false]{min-height:0 !important}" ) ; var d = [ ] , b ; for ( b in CKEDITOR . dtd . $removeEmpty ) d . push ( "html.CSS1Compat " + b + "[contenteditable=false]" ) ; a . push ( d . join ( "," ) + "{display:inline-block}" ) } else CKEDITOR . env . gecko && ( a . push ( "html{height:100% !important}" ) , a . push ( "img:-moz-broken{-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}" ) ) ; a . push ( "html{cursor:text;*cursor:auto}" ) ; a . push ( "img,input,textarea{cursor:default}" ) ;
return a . join ( "\n" ) } CKEDITOR . plugins . add ( "wysiwygarea" , { init : function ( a ) { a . config . fullPage && a . addFeature ( { allowedContent : "html head title; style [media,type]; body (*)[id]; meta link [*]" , requiredContent : "body" } ) ; a . addMode ( "wysiwyg" , function ( d ) { function b ( b ) { b && b . removeListener ( ) ; a . editable ( new j ( a , e . $ . contentWindow . document . body ) ) ; a . setData ( a . getData ( 1 ) , d ) } var c = "document.open();" + ( CKEDITOR . env . ie ? "(" + CKEDITOR . tools . fixDomain + ")();" : "" ) + "document.close();" , c = CKEDITOR . env . air ? "javascript:void(0)" :
CKEDITOR . env . ie ? "javascript:void(function(){" + encodeURIComponent ( c ) + "}())" : "" , e = CKEDITOR . dom . element . createFromHtml ( '<iframe src="' + c + '" frameBorder="0"></iframe>' ) ; e . setStyles ( { width : "100%" , height : "100%" } ) ; e . addClass ( "cke_wysiwyg_frame cke_reset" ) ; var g = a . ui . space ( "contents" ) ; g . append ( e ) ; if ( c = CKEDITOR . env . ie || CKEDITOR . env . gecko ) e . on ( "load" , b ) ; var f = a . title , h = a . lang . common . editorHelp ; f && ( CKEDITOR . env . ie && ( f += ", " + h ) , e . setAttribute ( "title" , f ) ) ; var f = CKEDITOR . tools . getNextId ( ) , i = CKEDITOR . dom . element . createFromHtml ( '<span id="' +
f + '" class="cke_voice_label">' + h + "</span>" ) ; g . append ( i , 1 ) ; a . on ( "beforeModeUnload" , function ( a ) { a . removeListener ( ) ; i . remove ( ) } ) ; e . setAttributes ( { "aria-describedby" : f , tabIndex : a . tabIndex , allowTransparency : "true" } ) ; ! c && b ( ) ; CKEDITOR . env . webkit && ( c = function ( ) { g . setStyle ( "width" , "100%" ) ; e . hide ( ) ; e . setSize ( "width" , g . getSize ( "width" ) ) ; g . removeStyle ( "width" ) ; e . show ( ) } , e . setCustomData ( "onResize" , c ) , CKEDITOR . document . getWindow ( ) . on ( "resize" , c ) ) ; a . fire ( "ariaWidget" , e ) } ) } } ) ; var j = CKEDITOR . tools . createClass ( { $ : function ( a ) { this . base . apply ( this ,
arguments ) ; this . _ . frameLoadedHandler = CKEDITOR . tools . addFunction ( function ( a ) { CKEDITOR . tools . setTimeout ( k , 0 , this , a ) } , this ) ; this . _ . docTitle = this . getWindow ( ) . getFrame ( ) . getAttribute ( "title" ) } , base : CKEDITOR . editable , proto : { setData : function ( a , d ) { var b = this . editor ; if ( d ) this . setHtml ( a ) , b . fire ( "dataReady" ) ; else { this . _ . isLoadingData = ! 0 ; b . _ . dataStore = { id : 1 } ; var c = b . config , e = c . fullPage , g = c . docType , f = CKEDITOR . tools . buildStyleHtml ( l ( ) ) . replace ( /<style>/ , '<style data-cke-temp="1">' ) ; e || ( f += CKEDITOR . tools . buildStyleHtml ( b . config . contentsCss ) ) ;
var h = c . baseHref ? '<base href="' + c . baseHref + '" data-cke-temp="1" />' : "" ; e && ( a = a . replace ( /<!DOCTYPE[^>]*>/i , function ( a ) { b . docType = g = a ; return "" } ) . replace ( /<\?xml\s[^\?]*\?>/i , function ( a ) { b . xmlDeclaration = a ; return "" } ) ) ; b . dataProcessor && ( a = b . dataProcessor . toHtml ( a ) ) ; e ? ( /<body[\s|>]/ . test ( a ) || ( a = "<body>" + a ) , /<html[\s|>]/ . test ( a ) || ( a = "<html>" + a + "</html>" ) , /<head[\s|>]/ . test ( a ) ? /<title[\s|>]/ . test ( a ) || ( a = a . replace ( /<head[^>]*>/ , "$&<title></title>" ) ) : a = a . replace ( /<html[^>]*>/ , "$&<head><title></title></head>" ) ,
h && ( a = a . replace ( /<head>/ , "$&" + h ) ) , a = a . replace ( /<\/head\s*>/ , f + "$&" ) , a = g + a ) : a = c . docType + '<html dir="' + c . contentsLangDirection + '" lang="' + ( c . contentsLanguage || b . langCode ) + '"><head><title>' + this . _ . docTitle + "</title>" + h + f + "</head><body" + ( c . bodyId ? ' id="' + c . bodyId + '"' : "" ) + ( c . bodyClass ? ' class="' + c . bodyClass + '"' : "" ) + ">" + a + "</body></html>" ; CKEDITOR . env . gecko && ( a = a . replace ( /<body/ , '<body contenteditable="true" ' ) , 2E4 > CKEDITOR . env . version && ( a = a . replace ( /<body[^>]*>/ , "$&<\!-- cke-content-start --\>" ) ) ) ; c = '<script id="cke_actscrpt" type="text/javascript"' +
( CKEDITOR . env . ie ? ' defer="defer" ' : "" ) + ">var wasLoaded=0;function onload(){if(!wasLoaded)window.parent.CKEDITOR.tools.callFunction(" + this . _ . frameLoadedHandler + ",window);wasLoaded=1;}" + ( CKEDITOR . env . ie ? "onload();" : 'document.addEventListener("DOMContentLoaded", onload, false );' ) + "<\/script>" ; CKEDITOR . env . ie && 9 > CKEDITOR . env . version && ( c += '<script id="cke_shimscrpt">(function(){var e="abbr,article,aside,audio,bdi,canvas,data,datalist,details,figcaption,figure,footer,header,hgroup,mark,meter,nav,output,progress,section,summary,time,video".split(","),i=e.length;while(i--){document.createElement(e[i])}})()<\/script>' ) ;
a = a . replace ( /(?=\s*<\/(:?head)>)/ , c ) ; this . clearCustomData ( ) ; this . clearListeners ( ) ; b . fire ( "contentDomUnload" ) ; var i = this . getDocument ( ) ; try { i . write ( a ) } catch ( j ) { setTimeout ( function ( ) { i . write ( a ) } , 0 ) } } } , getData : function ( a ) { if ( a ) return this . getHtml ( ) ; var a = this . editor , d = a . config , b = d . fullPage , c = b && a . docType , e = b && a . xmlDeclaration , g = this . getDocument ( ) , b = b ? g . getDocumentElement ( ) . getOuterHtml ( ) : g . getBody ( ) . getHtml ( ) ; CKEDITOR . env . gecko && d . enterMode != CKEDITOR . ENTER _BR && ( b = b . replace ( /<br>(?=\s*(:?$|<\/body>))/ ,
"" ) ) ; a . dataProcessor && ( b = a . dataProcessor . toDataFormat ( b ) ) ; e && ( b = e + "\n" + b ) ; c && ( b = c + "\n" + b ) ; return b } , focus : function ( ) { this . _ . isLoadingData ? this . _ . isPendingFocus = ! 0 : j . baseProto . focus . call ( this ) } , detach : function ( ) { var a = this . editor , d = a . document , b = a . window . getFrame ( ) ; j . baseProto . detach . call ( this ) ; this . clearCustomData ( ) ; d . getDocumentElement ( ) . clearCustomData ( ) ; b . clearCustomData ( ) ; CKEDITOR . tools . removeFunction ( this . _ . frameLoadedHandler ) ; ( d = b . removeCustomData ( "onResize" ) ) && d . removeListener ( ) ; a . fire ( "contentDomUnload" ) ;
b . remove ( ) } } } ) } ) ( ) ; CKEDITOR . config . disableObjectResizing = ! 1 ; CKEDITOR . config . disableNativeTableHandles = ! 0 ; CKEDITOR . config . disableNativeSpellChecker = ! 0 ; CKEDITOR . config . contentsCss = CKEDITOR . basePath + "contents.css" ; ( function ( ) { function k ( a , b ) { var e , f ; b . on ( "refresh" , function ( a ) { var b = [ j ] , c ; for ( c in a . data . states ) b . push ( a . data . states [ c ] ) ; this . setState ( CKEDITOR . tools . search ( b , m ) ? m : j ) } , b , null , 100 ) ; b . on ( "exec" , function ( b ) { e = a . getSelection ( ) ; f = e . createBookmarks ( 1 ) ; b . data || ( b . data = { } ) ; b . data . done = ! 1 } , b , null , 0 ) ; b . on ( "exec" , function ( ) { a . forceNextSelectionCheck ( ) ; e . selectBookmarks ( f ) } , b , null , 100 ) } var j = CKEDITOR . TRISTATE _DISABLED , m = CKEDITOR . TRISTATE _OFF ; CKEDITOR . plugins . add ( "indent" , { init : function ( a ) { var b = CKEDITOR . plugins . indent . genericDefinition ;
k ( a , a . addCommand ( "indent" , new b ( ! 0 ) ) ) ; k ( a , a . addCommand ( "outdent" , new b ) ) ; a . ui . addButton && ( a . ui . addButton ( "Indent" , { label : a . lang . indent . indent , command : "indent" , directional : ! 0 , toolbar : "indent,20" } ) , a . ui . addButton ( "Outdent" , { label : a . lang . indent . outdent , command : "outdent" , directional : ! 0 , toolbar : "indent,10" } ) ) ; a . on ( "dirChanged" , function ( b ) { var f = a . createRange ( ) , i = b . data . node ; f . setStartBefore ( i ) ; f . setEndAfter ( i ) ; for ( var l = new CKEDITOR . dom . walker ( f ) , c ; c = l . next ( ) ; ) if ( c . type == CKEDITOR . NODE _ELEMENT ) if ( ! c . equals ( i ) &&
c . getDirection ( ) ) { f . setStartAfter ( c ) ; l = new CKEDITOR . dom . walker ( f ) } else { var d = a . config . indentClasses ; if ( d ) for ( var g = b . data . dir == "ltr" ? [ "_rtl" , "" ] : [ "" , "_rtl" ] , h = 0 ; h < d . length ; h ++ ) if ( c . hasClass ( d [ h ] + g [ 0 ] ) ) { c . removeClass ( d [ h ] + g [ 0 ] ) ; c . addClass ( d [ h ] + g [ 1 ] ) } d = c . getStyle ( "margin-right" ) ; g = c . getStyle ( "margin-left" ) ; d ? c . setStyle ( "margin-left" , d ) : c . removeStyle ( "margin-left" ) ; g ? c . setStyle ( "margin-right" , g ) : c . removeStyle ( "margin-right" ) } } ) } } ) ; CKEDITOR . plugins . indent = { genericDefinition : function ( a ) { this . isIndent =
! ! a ; this . startDisabled = ! this . isIndent } , specificDefinition : function ( a , b , e ) { this . name = b ; this . editor = a ; this . jobs = { } ; this . enterBr = a . config . enterMode == CKEDITOR . ENTER _BR ; this . isIndent = ! ! e ; this . relatedGlobal = e ? "indent" : "outdent" ; this . indentKey = e ? 9 : CKEDITOR . SHIFT + 9 ; this . database = { } } , registerCommands : function ( a , b ) { a . on ( "pluginsLoaded" , function ( ) { for ( var a in b ) ( function ( a , b ) { var e = a . getCommand ( b . relatedGlobal ) , c ; for ( c in b . jobs ) e . on ( "exec" , function ( d ) { d . data . done || ( a . fire ( "lockSnapshot" ) , b . execJob ( a , c ) && ( d . data . done =
@@ -670,11 +671,10 @@ CKEDITOR.UI_PANELBUTTON="panelbutton";(function(){CKEDITOR.plugins.add("panel",{
CKEDITOR . ui . panel . prototype = { render : function ( a , b ) { this . getHolderElement = function ( ) { var a = this . _ . holder ; if ( ! a ) { if ( this . isFramed ) { var a = this . document . getById ( this . id + "_frame" ) , b = a . getParent ( ) , a = a . getFrameDocument ( ) ; CKEDITOR . env . iOS && b . setStyles ( { overflow : "scroll" , "-webkit-overflow-scrolling" : "touch" } ) ; b = CKEDITOR . tools . addFunction ( CKEDITOR . tools . bind ( function ( ) { this . isLoaded = ! 0 ; if ( this . onLoad ) this . onLoad ( ) } , this ) ) ; a . write ( g . output ( CKEDITOR . tools . extend ( { css : CKEDITOR . tools . buildStyleHtml ( this . css ) , onload : "window.parent.CKEDITOR.tools.callFunction(" +
b + ");" } , c ) ) ) ; a . getWindow ( ) . $ . CKEDITOR = CKEDITOR ; a . on ( "key" + ( CKEDITOR . env . opera ? "press" : "down" ) , function ( a ) { var b = a . data . getKeystroke ( ) , c = this . document . getById ( this . id ) . getAttribute ( "dir" ) ; this . _ . onKeyDown && ! 1 === this . _ . onKeyDown ( b ) ? a . data . preventDefault ( ) : ( 27 == b || b == ( "rtl" == c ? 39 : 37 ) ) && this . onEscape && ! 1 === this . onEscape ( b ) && a . data . preventDefault ( ) } , this ) ; a = a . getBody ( ) ; a . unselectable ( ) ; CKEDITOR . env . air && CKEDITOR . tools . callFunction ( b ) } else a = this . document . getById ( this . id ) ; this . _ . holder = a } return a } ; var c =
{ editorId : a . id , id : this . id , langCode : a . langCode , dir : a . lang . dir , cls : this . className , frame : "" , env : CKEDITOR . env . cssClass , "z-index" : a . config . baseFloatZIndex + 1 } ; if ( this . isFramed ) { var d = CKEDITOR . env . air ? "javascript:void(0)" : CKEDITOR . env . ie ? "javascript:void(function(){" + encodeURIComponent ( "document.open();(" + CKEDITOR . tools . fixDomain + ")();document.close();" ) + "}())" : "" ; c . frame = f . output ( { id : this . id + "_frame" , src : d } ) } d = e . output ( c ) ; b && b . push ( d ) ; return d } , addBlock : function ( a , b ) { b = this . _ . blocks [ a ] = b instanceof CKEDITOR . ui . panel . block ?
b : new CKEDITOR . ui . panel . block ( this . getHolderElement ( ) , b ) ; this . _ . currentBlock || this . showBlock ( a ) ; return b } , getBlock : function ( a ) { return this . _ . blocks [ a ] } , showBlock : function ( a ) { var a = this . _ . blocks [ a ] , b = this . _ . currentBlock , c = ! this . forceIFrame || CKEDITOR . env . ie ? this . _ . holder : this . document . getById ( this . id + "_frame" ) ; b && ( c . removeAttributes ( b . attributes ) , b . hide ( ) ) ; this . _ . currentBlock = a ; c . setAttributes ( a . attributes ) ; CKEDITOR . fire ( "ariaWidget" , c ) ; a . _ . focusIndex = - 1 ; this . _ . onKeyDown = a . onKeyDown && CKEDITOR . tools . bind ( a . onKeyDown ,
a ) ; a . show ( ) ; return a } , destroy : function ( ) { this . element && this . element . remove ( ) } } ; CKEDITOR . ui . panel . block = CKEDITOR . tools . createClass ( { $ : function ( a , b ) { this . element = a . append ( a . getDocument ( ) . createElement ( "div" , { attributes : { tabIndex : - 1 , "class" : "cke_panel_block" , role : "presentation" , tabindex : 0 } , styles : { display : "none" } } ) ) ; b && CKEDITOR . tools . extend ( this , b ) ; this . element . setAttributes ( { "aria-label" : this . attributes [ "aria-label" ] , title : this . attributes . title || this . attributes [ "aria-label" ] } ) ; delete this . attributes [ "aria-label" ] ;
delete this . attributes . title ; this . keys = { } ; this . _ . focusIndex = - 1 ; this . element . disableContextMenu ( ) } , _ : { markItem : function ( a ) { - 1 != a && ( a = this . element . getElementsByTag ( "a" ) . getItem ( this . _ . focusIndex = a ) , ( CKEDITOR . env . webkit || CKEDITOR . env . opera ) && a . getDocument ( ) . getWindow ( ) . focus ( ) , a . focus ( ) , this . onMark && this . onMark ( a ) ) } } , proto : { show : function ( ) { this . element . setStyle ( "display" , "" ) } , hide : function ( ) { ( ! this . onHide || ! 0 !== this . onHide . call ( this ) ) && this . element . setStyle ( "display" , "none" ) } , onKeyDown : function ( a ) { var b =
this . keys [ a ] ; switch ( b ) { case "next" : for ( var a = this . _ . focusIndex , b = this . element . getElementsByTag ( "a" ) , c ; c = b . getItem ( ++ a ) ; ) if ( c . getAttribute ( "_cke_focus" ) && c . $ . offsetWidth ) { this . _ . focusIndex = a ; c . focus ( ) ; break } return ! 1 ; case "prev" : a = this . _ . focusIndex ; for ( b = this . element . getElementsByTag ( "a" ) ; 0 < a && ( c = b . getItem ( -- a ) ) ; ) if ( c . getAttribute ( "_cke_focus" ) && c . $ . offsetWidth ) { this . _ . focusIndex = a ; c . focus ( ) ; break } return ! 1 ; case "click" : case "mouseup" : return a = this . _ . focusIndex , ( c = 0 <= a && this . element . getElementsByTag ( "a" ) . getItem ( a ) ) &&
( c . $ [ b ] ? c . $ [ b ] ( ) : c . $ [ "on" + b ] ( ) ) , ! 1 } return ! 0 } } } ) } ) ( ) ; CKEDITOR . plugins . add ( "floatpanel" , { requires : "panel" } ) ;
b : new CKEDITOR . ui . panel . block ( this . getHolderElement ( ) , b ) ; this . _ . currentBlock || this . showBlock ( a ) ; return b } , getBlock : function ( a ) { return this . _ . blocks [ a ] } , showBlock : function ( a ) { var a = this . _ . blocks [ a ] , b = this . _ . currentBlock , c = ! this . forceIFrame || CKEDITOR . env . ie ? this . _ . holder : this . document . getById ( this . id + "_frame" ) ; b && b . hide ( ) ; this . _ . currentBlock = a ; CKEDITOR . fire ( "ariaWidget" , c ) ; a . _ . focusIndex = - 1 ; this . _ . onKeyDown = a . onKeyDown && CKEDITOR . tools . bind ( a . onKeyDown , a ) ; a . show ( ) ; return a } , destroy : function ( ) { this . element &&
this . element . remove ( ) } } ; CKEDITOR . ui . panel . block = CKEDITOR . tools . createClass ( { $ : function ( a , b ) { this . element = a . append ( a . getDocument ( ) . createElement ( "div" , { attributes : { tabindex : - 1 , "class" : "cke_panel_block" } , styles : { display : "none" } } ) ) ; b && CKEDITOR . tools . extend ( this , b ) ; this . element . setAttributes ( { role : this . attributes . role || "presentation" , "aria-label" : this . attributes [ "aria-label" ] , title : this . attributes . title || this . attributes [ "aria-label" ] } ) ; this . keys = { } ; this . _ . focusIndex = - 1 ; this . element . disableContextMenu ( ) } ,
_ : { markItem : function ( a ) { - 1 != a && ( a = this . element . getElementsByTag ( "a" ) . getItem ( this . _ . focusIndex = a ) , ( CKEDITOR . env . webkit || CKEDITOR . env . opera ) && a . getDocument ( ) . getWindow ( ) . focus ( ) , a . focus ( ) , this . onMark && this . onMark ( a ) ) } } , proto : { show : function ( ) { this . element . setStyle ( "display" , "" ) } , hide : function ( ) { ( ! this . onHide || ! 0 !== this . onHide . call ( this ) ) && this . element . setStyle ( "display" , "none" ) } , onKeyDown : function ( a ) { var b = this . keys [ a ] ; switch ( b ) { case "next" : for ( var a = this . _ . focusIndex , b = this . element . getElementsByTag ( "a" ) ,
c ; c = b . getItem ( ++ a ) ; ) if ( c . getAttribute ( "_cke_focus" ) && c . $ . offsetWidth ) { this . _ . focusIndex = a ; c . focus ( ) ; break } return ! 1 ; case "prev" : a = this . _ . focusIndex ; for ( b = this . element . getElementsByTag ( "a" ) ; 0 < a && ( c = b . getItem ( -- a ) ) ; ) if ( c . getAttribute ( "_cke_focus" ) && c . $ . offsetWidth ) { this . _ . focusIndex = a ; c . focus ( ) ; break } return ! 1 ; case "click" : case "mouseup" : return a = this . _ . focusIndex , ( c = 0 <= a && this . element . getElementsByTag ( "a" ) . getItem ( a ) ) && ( c . $ [ b ] ? c . $ [ b ] ( ) : c . $ [ "on" + b ] ( ) ) , ! 1 } return ! 0 } } } ) } ) ( ) ; CKEDITOR . plugins . add ( "floatpanel" , { requires : "panel" } ) ;
( function ( ) { function o ( a , b , c , h , g ) { var g = CKEDITOR . tools . genKey ( b . getUniqueId ( ) , c . getUniqueId ( ) , a . lang . dir , a . uiColor || "" , h . css || "" , g || "" ) , e = i [ g ] ; e || ( e = i [ g ] = new CKEDITOR . ui . panel ( b , h ) , e . element = c . append ( CKEDITOR . dom . element . createFromHtml ( e . render ( a ) , b ) ) , e . element . setStyles ( { display : "none" , position : "absolute" } ) ) ; return e } var i = { } ; CKEDITOR . ui . floatPanel = CKEDITOR . tools . createClass ( { $ : function ( a , b , c , h ) { function g ( ) { j . hide ( ) } c . forceIFrame = 1 ; c . toolbarRelated && a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE &&
( b = CKEDITOR . document . getById ( "cke_" + a . name ) ) ; var e = b . getDocument ( ) , h = o ( a , e , b , c , h || 0 ) , k = h . element , d = k . getFirst ( ) , j = this ; k . disableContextMenu ( ) ; this . element = k ; this . _ = { editor : a , panel : h , parentElement : b , definition : c , document : e , iframe : d , children : [ ] , dir : a . lang . dir } ; a . on ( "mode" , g ) ; a . on ( "resize" , g ) ; e . getWindow ( ) . on ( "resize" , g ) } , proto : { addBlock : function ( a , b ) { return this . _ . panel . addBlock ( a , b ) } , addListBlock : function ( a , b ) { return this . _ . panel . addListBlock ( a , b ) } , getBlock : function ( a ) { return this . _ . panel . getBlock ( a ) } ,
showBlock : function ( a , b , c , h , g ) { var e = this . _ . panel , k = e . showBlock ( a ) ; this . allowBlur ( ! 1 ) ; a = this . _ . editor . editable ( ) ; this . _ . returnFocus = a . hasFocus ? a : new CKEDITOR . dom . element ( CKEDITOR . document . $ . activeElement ) ; var d = this . element , a = this . _ . iframe , a = CKEDITOR . env . ie ? a : new CKEDITOR . dom . window ( a . $ . contentWindow ) , j = d . getDocument ( ) , i = this . _ . parentElement . getPositionedAncestor ( ) , n = b . getDocumentPosition ( j ) , j = i ? i . getDocumentPosition ( j ) : { x : 0 , y : 0 } , m = "rtl" == this . _ . dir , f = n . x + ( h || 0 ) - j . x , l = n . y + ( g || 0 ) - j . y ; if ( m && ( 1 == c || 4 ==
@@ -682,10 +682,11 @@ c))f+=b.$.offsetWidth;else if(!m&&(2==c||3==c))f+=b.$.offsetWidth-1;if(3==c||4==
function ( ) { this . _ . focused = ! 0 ; this . hideChild ( ) ; this . allowBlur ( ! 0 ) } , this ) , CKEDITOR . event . useCapture = ! 1 , this . _ . blurSet = 1 ) ; e . onEscape = CKEDITOR . tools . bind ( function ( a ) { if ( this . onEscape && this . onEscape ( a ) === false ) return false } , this ) ; CKEDITOR . tools . setTimeout ( function ( ) { var a = CKEDITOR . tools . bind ( function ( ) { d . removeStyle ( "width" ) ; if ( k . autoSize ) { var a = k . element . getDocument ( ) , a = ( CKEDITOR . env . webkit ? k . element : a . getBody ( ) ) . $ . scrollWidth ; CKEDITOR . env . ie && ( CKEDITOR . env . quirks && a > 0 ) && ( a = a + ( ( d . $ . offsetWidth || 0 ) - ( d . $ . clientWidth ||
0 ) + 3 ) ) ; d . setStyle ( "width" , a + 10 + "px" ) ; a = k . element . $ . scrollHeight ; CKEDITOR . env . ie && ( CKEDITOR . env . quirks && a > 0 ) && ( a = a + ( ( d . $ . offsetHeight || 0 ) - ( d . $ . clientHeight || 0 ) + 3 ) ) ; d . setStyle ( "height" , a + "px" ) ; e . _ . currentBlock . element . setStyle ( "display" , "none" ) . removeStyle ( "display" ) } else d . removeStyle ( "height" ) ; m && ( f = f - d . $ . offsetWidth ) ; d . setStyle ( "left" , f + "px" ) ; var b = e . element . getWindow ( ) , a = d . $ . getBoundingClientRect ( ) , b = b . getViewPaneSize ( ) , c = a . width || a . right - a . left , g = a . height || a . bottom - a . top , h = m ? a . right : b . width - a . left ,
i = m ? b . width - a . right : a . left ; m ? h < c && ( f = i > c ? f + c : b . width > c ? f - a . left : f - a . right + b . width ) : h < c && ( f = i > c ? f - c : b . width > c ? f - a . right + b . width : f - a . left ) ; c = a . top ; b . height - a . top < g && ( l = c > g ? l - g : b . height > g ? l - a . bottom + b . height : l - a . top ) ; if ( CKEDITOR . env . ie ) { b = a = new CKEDITOR . dom . element ( d . $ . offsetParent ) ; b . getName ( ) == "html" && ( b = b . getDocument ( ) . getBody ( ) ) ; b . getComputedStyle ( "direction" ) == "rtl" && ( f = CKEDITOR . env . ie8Compat ? f - d . getDocument ( ) . getDocumentElement ( ) . $ . scrollLeft * 2 : f - ( a . $ . scrollWidth - a . $ . clientWidth ) ) } var a = d . getFirst ( ) ,
j ; ( j = a . getCustomData ( "activePanel" ) ) && j . onHide && j . onHide . call ( this , 1 ) ; a . setCustomData ( "activePanel" , this ) ; d . setStyles ( { top : l + "px" , left : f + "px" } ) ; d . setOpacity ( 1 ) } , this ) ; e . isLoaded ? a ( ) : e . onLoad = a ; CKEDITOR . tools . setTimeout ( function ( ) { this . focus ( ) ; this . allowBlur ( true ) ; this . _ . editor . fire ( "panelShow" , this ) } , 0 , this ) } , CKEDITOR . env . air ? 200 : 0 , this ) ; this . visible = 1 ; this . onShow && this . onShow . call ( this ) } , focus : function ( ) { if ( CKEDITOR . env . webkit ) { var a = CKEDITOR . document . getActive ( ) ; ! a . equals ( this . _ . iframe ) && a . $ . blur ( ) } ( this . _ . lastFocused ||
this . _ . iframe . getFrameDocument ( ) . getWindow ( ) ) . focus ( ) } , blur : function ( ) { var a = this . _ . iframe . getFrameDocument ( ) . getActive ( ) ; a . is ( "a" ) && ( this . _ . lastFocused = a ) } , hide : function ( a ) { if ( this . visible && ( ! this . onHide || ! 0 !== this . onHide . call ( this ) ) ) { this . hideChild ( ) ; CKEDITOR . env . gecko && this . _ . iframe . getFrameDocument ( ) . $ . activeElement . blur ( ) ; this . element . setStyle ( "display" , "none" ) ; this . visible = 0 ; this . element . getFirst ( ) . removeCustomData ( "activePanel" ) ; if ( a = a && this . _ . returnFocus ) CKEDITOR . env . webkit && a . type && a . getWindow ( ) . $ . focus ( ) ,
a . focus ( ) ; delete this . _ . lastFocused ; this . _ . editor . fire ( "panelHide" , this ) } } , allowBlur : function ( a ) { var b = this . _ . panel ; void 0 != a && ( b . allowBlur = a ) ; return b . allowBlur } , showAsChild : function ( a , b , c , h , g , e ) { this . _ . activeChild == a && a . _ . panel . _ . offsetParentId == c . getId ( ) || ( this . hideChild ( ) , a . onHide = CKEDITOR . tools . bind ( function ( ) { CKEDITOR . tools . setTimeout ( function ( ) { this . _ . focused || this . hide ( ) } , 0 , this ) } , this ) , this . _ . activeChild = a , this . _ . focused = ! 1 , a . showBlock ( b , c , h , g , e ) , this . blur ( ) , ( CKEDITOR . env . ie7Compat || CKEDITOR . env . ie6Compat ) &&
setTimeout ( function ( ) { a . element . getChild ( 0 ) . $ . style . cssText += "" } , 100 ) ) } , hideChild : function ( a ) { var b = this . _ . activeChild ; b && ( delete b . onHide , delete this . _ . activeChild , b . hide ( ) , a && this . focus ( ) ) } } } ) ; CKEDITOR . on ( "instanceDestroyed" , function ( ) { var a = CKEDITOR . tools . isEmpty ( CKEDITOR . instances ) , b ; for ( b in i ) { var c = i [ b ] ; a ? c . destroy ( ) : c . element . hide ( ) } a && ( i = { } ) } ) } ) ( ) ; CKEDITOR . plugins . add ( "colorbutton" , { requires : "panelbutton,floatpanel" , init : function ( c ) { function m ( l , g , e , h ) { var k = new CKEDITOR . style ( i [ "colorButton_" + g + "Style" ] ) , j = CKEDITOR . tools . getNextId ( ) + "_colorBox" ; c . ui . add ( l , CKEDITOR . UI _PANELBUTTON , { label : e , title : e , modes : { wysiwyg : 1 } , editorFocus : 1 , toolbar : "colors," + h , allowedContent : k , requiredContent : k , panel : { css : CKEDITOR . skin . getPath ( "editor" ) , attributes : { role : "listbox" , "aria-label" : f . panelTitle } } , onBlock : function ( a , b ) { b . autoSize = ! 0 ; b . element . addClass ( "cke_colorblock" ) ;
j ; ( j = a . getCustomData ( "activePanel" ) ) && j . onHide && j . onHide . call ( this , 1 ) ; a . setCustomData ( "activePanel" , this ) ; d . setStyles ( { top : l + "px" , left : f + "px" } ) ; d . setOpacity ( 1 ) } , this ) ; e . isLoaded ? a ( ) : e . onLoad = a ; CKEDITOR . tools . setTimeout ( function ( ) { var a = CKEDITOR . env . webkit && CKEDITOR . document . getWindow ( ) . getScrollPosition ( ) . y ; this . focus ( ) ; k . element . focus ( ) ; if ( CKEDITOR . env . webkit ) CKEDITOR . document . getBody ( ) . $ . scrollTop = a ; this . allowBlur ( true ) ; this . _ . editor . fire ( "panelShow" , this ) } , 0 , this ) } , CKEDITOR . env . air ? 200 : 0 , this ) ;
this . visible = 1 ; this . onShow && this . onShow . call ( this ) } , focus : function ( ) { if ( CKEDITOR . env . webkit ) { var a = CKEDITOR . document . getActive ( ) ; ! a . equals ( this . _ . iframe ) && a . $ . blur ( ) } ( this . _ . lastFocused || this . _ . iframe . getFrameDocument ( ) . getWindow ( ) ) . focus ( ) } , blur : function ( ) { var a = this . _ . iframe . getFrameDocument ( ) . getActive ( ) ; a . is ( "a" ) && ( this . _ . lastFocused = a ) } , hide : function ( a ) { if ( this . visible && ( ! this . onHide || ! 0 !== this . onHide . call ( this ) ) ) { this . hideChild ( ) ; CKEDITOR . env . gecko && this . _ . iframe . getFrameDocument ( ) . $ . activeElement . blur ( ) ;
this . element . setStyle ( "display" , "none" ) ; this . visible = 0 ; this . element . getFirst ( ) . removeCustomData ( "activePanel" ) ; if ( a = a && this . _ . returnFocus ) CKEDITOR . env . webkit && a . type && a . getWindow ( ) . $ . focus ( ) , a . focus ( ) ; delete this . _ . lastFocused ; this . _ . editor . fire ( "panelHide" , this ) } } , allowBlur : function ( a ) { var b = this . _ . panel ; void 0 != a && ( b . allowBlur = a ) ; return b . allowBlur } , showAsChild : function ( a , b , c , h , g , e ) { this . _ . activeChild == a && a . _ . panel . _ . offsetParentId == c . getId ( ) || ( this . hideChild ( ) , a . onHide = CKEDITOR . tools . bind ( function ( ) { CKEDITOR . tools . setTimeout ( function ( ) { this . _ . focused ||
this . hide ( ) } , 0 , this ) } , this ) , this . _ . activeChild = a , this . _ . focused = ! 1 , a . showBlock ( b , c , h , g , e ) , this . blur ( ) , ( CKEDITOR . env . ie7Compat || CKEDITOR . env . ie6Compat ) && setTimeout ( function ( ) { a . element . getChild ( 0 ) . $ . style . cssText += "" } , 100 ) ) } , hideChild : function ( a ) { var b = this . _ . activeChild ; b && ( delete b . onHide , delete this . _ . activeChild , b . hide ( ) , a && this . focus ( ) ) } } } ) ; CKEDITOR . on ( "instanceDestroyed" , function ( ) { var a = CKEDITOR . tools . isEmpty ( CKEDITOR . instances ) , b ; for ( b in i ) { var c = i [ b ] ; a ? c . destroy ( ) : c . element . hide ( ) } a && ( i =
{ } ) } ) } ) ( ) ; CKEDITOR . plugins . add ( "colorbutton" , { requires : "panelbutton,floatpanel" , init : function ( c ) { function m ( l , g , e , h ) { var k = new CKEDITOR . style ( i [ "colorButton_" + g + "Style" ] ) , j = CKEDITOR . tools . getNextId ( ) + "_colorBox" ; c . ui . add ( l , CKEDITOR . UI _PANELBUTTON , { label : e , title : e , modes : { wysiwyg : 1 } , editorFocus : 0 , toolbar : "colors," + h , allowedContent : k , requiredContent : k , panel : { css : CKEDITOR . skin . getPath ( "editor" ) , attributes : { role : "listbox" , "aria-label" : f . panelTitle } } , onBlock : function ( a , b ) { b . autoSize = ! 0 ; b . element . addClass ( "cke_colorblock" ) ;
b . element . setHtml ( o ( a , g , j ) ) ; b . element . getDocument ( ) . getBody ( ) . setStyle ( "overflow" , "hidden" ) ; CKEDITOR . ui . fire ( "ready" , this ) ; var d = b . keys , e = "rtl" == c . lang . dir ; d [ e ? 37 : 39 ] = "next" ; d [ 40 ] = "next" ; d [ 9 ] = "next" ; d [ e ? 39 : 37 ] = "prev" ; d [ 38 ] = "prev" ; d [ CKEDITOR . SHIFT + 9 ] = "prev" ; d [ 32 ] = "click" } , onOpen : function ( ) { var a = c . getSelection ( ) , a = a && a . getStartElement ( ) , a = c . elementPath ( a ) , b , a = a . block || a . blockLimit || c . document . getBody ( ) ; do b = a && a . getComputedStyle ( "back" == g ? "background-color" : "color" ) || "transparent" ; while ( "back" == g &&
"transparent" == b && a && ( a = a . getParent ( ) ) ) ; if ( ! b || "transparent" == b ) b = "#ffffff" ; this . _ . panel . _ . iframe . getFrameDocument ( ) . getById ( j ) . setStyle ( "background-color" , b ) ; return b } } ) } function o ( l , g , e ) { var h = [ ] , k = i . colorButton _colors . split ( "," ) , j = CKEDITOR . tools . addFunction ( function ( a , b ) { if ( "?" == a ) { var e = arguments . callee , d = function ( a ) { this . removeListener ( "ok" , d ) ; this . removeListener ( "cancel" , d ) ; "ok" == a . name && e ( this . getContentElement ( "picker" , "selectedColor" ) . getValue ( ) , b ) } ; c . openDialog ( "colordialog" , function ( ) { this . on ( "ok" ,
d ) ; this . on ( "cancel" , d ) } ) } else { c . focus ( ) ; l . hide ( ) ; c . fire ( "saveSnapshot" ) ; c . removeStyle ( new CKEDITOR . style ( i [ "colorButton_" + b + "Style" ] , { color : "inherit" } ) ) ; if ( a ) { var f = i [ "colorButton_" + b + "Style" ] ; f . childRule = "back" == b ? function ( a ) { return n ( a ) } : function ( a ) { return ! ( a . is ( "a" ) || a . getElementsByTag ( "a" ) . count ( ) ) || n ( a ) } ; c . applyStyle ( new CKEDITOR . style ( f , { color : a } ) ) } c . fire ( "saveSnapshot" ) } } ) ; h . push ( '<a class="cke_colorauto" _cke_focus=1 hidefocus=true title="' , f . auto , '" onclick="CKEDITOR.tools.callFunction(' ,
@@ -699,18 +700,18 @@ if(this.onClick)this.onClick(a,b)},this));return this._.click}},proto:{add:funct
label : a } ) ) } , commit : function ( ) { this . _ . close ( ) ; this . element . appendHtml ( this . _ . pendingHtml . join ( "" ) ) ; delete this . _ . size ; this . _ . pendingHtml = [ ] } , toggle : function ( a ) { var b = this . isMarked ( a ) ; b ? this . unmark ( a ) : this . mark ( a ) ; return ! b } , hideGroup : function ( a ) { var b = ( a = this . element . getDocument ( ) . getById ( this . _ . groups [ a ] ) ) && a . getNext ( ) ; a && ( a . setStyle ( "display" , "none" ) , b && "ul" == b . getName ( ) && b . setStyle ( "display" , "none" ) ) } , hideItem : function ( a ) { this . element . getDocument ( ) . getById ( this . _ . items [ a ] ) . setStyle ( "display" , "none" ) } ,
showAll : function ( ) { var a = this . _ . items , b = this . _ . groups , c = this . element . getDocument ( ) , d ; for ( d in a ) c . getById ( a [ d ] ) . setStyle ( "display" , "" ) ; for ( var e in b ) a = c . getById ( b [ e ] ) , d = a . getNext ( ) , a . setStyle ( "display" , "" ) , d && "ul" == d . getName ( ) && d . setStyle ( "display" , "" ) } , mark : function ( a ) { this . multiSelect || this . unmarkAll ( ) ; var a = this . _ . items [ a ] , b = this . element . getDocument ( ) . getById ( a ) ; b . addClass ( "cke_selected" ) ; this . element . getDocument ( ) . getById ( a + "_option" ) . setAttribute ( "aria-selected" , ! 0 ) ; this . onMark && this . onMark ( b ) } ,
unmark : function ( a ) { var b = this . element . getDocument ( ) , a = this . _ . items [ a ] , c = b . getById ( a ) ; c . removeClass ( "cke_selected" ) ; b . getById ( a + "_option" ) . removeAttribute ( "aria-selected" ) ; this . onUnmark && this . onUnmark ( c ) } , unmarkAll : function ( ) { var a = this . _ . items , b = this . element . getDocument ( ) , c ; for ( c in a ) { var d = a [ c ] ; b . getById ( d ) . removeClass ( "cke_selected" ) ; b . getById ( d + "_option" ) . removeAttribute ( "aria-selected" ) } this . onUnmark && this . onUnmark ( ) } , isMarked : function ( a ) { return this . element . getDocument ( ) . getById ( this . _ . items [ a ] ) . hasClass ( "cke_selected" ) } ,
focus : function ( a ) { this . _ . focusIndex = - 1 ; var b = this . element . getElementsByTag ( "a" ) , c , d = - 1 ; if ( a ) for ( c = this . element . getDocument ( ) . getById ( this . _ . items [ a ] ) . getFirst ( ) ; a = b . getItem ( ++ d ) ; ) { if ( a . equals ( c ) ) { this . _ . focusIndex = d ; break } } else b = CKEDITOR . document . getWindow ( ) . getScrollPosition ( ) . y , this . element . focus ( ) , CKEDITOR . env . webkit && ( CKEDITOR . document [ CKEDITOR . env . webkit ? "getBody" : "getDocumentElement" ] ( ) . $ . scrollTop = b ) ; c && setTimeout ( function ( ) { c . focus ( ) } , 0 ) } } } ) } } ) ; CKEDITOR . plugins . add ( "richcombo" , { requires : "floatpanel,listblock,button" , beforeInit : function ( c ) { c . ui . addHandler ( CKEDITOR . UI _RICHCOMBO , CKEDITOR . ui . richCombo . handler ) } } ) ;
focus : function ( a ) { this . _ . focusIndex = - 1 ; var b = this . element . getElementsByTag ( "a" ) , c , d = - 1 ; if ( a ) for ( c = this . element . getDocument ( ) . getById ( this . _ . items [ a ] ) . getFirst ( ) ; a = b . getItem ( ++ d ) ; ) { if ( a . equals ( c ) ) { this . _ . focusIndex = d ; break } } else this . element . focus ( ) ; c && setTimeout ( function ( ) { c . focus ( ) } , 0 ) } } } ) } } ) ; CKEDITOR . plugins . add ( "richcombo" , { requires : "floatpanel,listblock,button" , beforeInit : function ( c ) { c . ui . addHandler ( CKEDITOR . UI _RICHCOMBO , CKEDITOR . ui . richCombo . handler ) } } ) ;
( function ( ) { var c = '<span id="{id}" class="cke_combo cke_combo__{name} {cls}" role="presentation"><span id="{id}_label" class="cke_combo_label">{label}</span><a class="cke_combo_button" hidefocus=true title="{title}" tabindex="-1"' + ( CKEDITOR . env . gecko && 10900 <= CKEDITOR . env . version && ! CKEDITOR . env . hc ? "" : '" href="javascript:void(\'{titleJs}\')"' ) + ' hidefocus="true" role="button" aria-labelledby="{id}_label" aria-haspopup="true"' ; if ( CKEDITOR . env . opera || CKEDITOR . env . gecko && CKEDITOR . env . mac ) c += ' onkeypress="return false;"' ;
CKEDITOR . env . gecko && ( c += ' onblur="this.style.cssText = this.style.cssText;"' ) ; var c = c + ( ' onkeydown="return CKEDITOR.tools.callFunction({keydownFn},event,this);" onmousedown="return CKEDITOR.tools.callFunction({mousedownFn},event);" onfocus="return CKEDITOR.tools.callFunction({focusFn},event);" ' + ( CKEDITOR . env . ie ? 'onclick="return false;" onmouseup' : "onclick" ) + '="CKEDITOR.tools.callFunction({clickFn},this);return false;"><span id="{id}_text" class="cke_combo_text cke_combo_inlinelabel">{label}</span><span class="cke_combo_open"><span class="cke_combo_arrow">' +
( CKEDITOR . env . hc ? "▼" : CKEDITOR . env . air ? " " : "" ) + "</span></span></a></span>" ) , h = CKEDITOR . addTemplate ( "combo" , c ) ; CKEDITOR . UI _RICHCOMBO = "richcombo" ; CKEDITOR . ui . richCombo = CKEDITOR . tools . createClass ( { $ : function ( a ) { CKEDITOR . tools . extend ( this , a , { canGroup : ! 1 , title : a . label , modes : { wysiwyg : 1 } , editorFocus : 1 } ) ; a = this . panel || { } ; delete this . panel ; this . id = CKEDITOR . tools . getNextNumber ( ) ; this . document = a . parent && a . parent . getDocument ( ) || CKEDITOR . document ; a . className = "cke_combopanel" ; a . block = { multiSelect : a . multiSelect ,
attributes : a . attributes } ; a . toolbarRelated = ! 0 ; this . _ = { panelDefinition : a , items : { } } } , proto : { renderHtml : function ( a ) { var b = [ ] ; this . render ( a , b ) ; return b . join ( "" ) } , render : function ( a , b ) { function j ( ) { var d = this . modes [ a . mode ] ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED ; this . setState ( a . readOnly && ! this . readOnly ? CKEDITOR . TRISTATE _DISABLED : d ) ; this . setValue ( "" ) } var c = CKEDITOR . env , g = "cke_" + this . id , e = CKEDITOR . tools . addFunction ( function ( b ) { i && ( a . unlockSelection ( 1 ) , i = 0 ) ; d . execute ( b ) } , this ) , f = this , d = { id : g , combo : this ,
focus : function ( ) { CKEDITOR . document . getById ( g ) . getChild ( 1 ) . focus ( ) } , execute : function ( d ) { var b = f . _ ; if ( b . state != CKEDITOR . TRISTATE _DISABLED ) if ( f . createPanel ( a ) , b . on ) b . panel . hide ( ) ; else { f . commit ( ) ; var c = f . getValue ( ) ; c ? b . list . mark ( c ) : b . list . unmarkAll ( ) ; b . panel . showBlock ( f . id , new CKEDITOR . dom . element ( d ) , 4 ) } } , clickFn : e } ; a . on ( "mode" , j , this ) ; ! this . readOnly && a . on ( "readOnly" , j , this ) ; var k = CKEDITOR . tools . addFunction ( function ( a , b ) { var a = new CKEDITOR . dom . event ( a ) , c = a . getKeystroke ( ) ; switch ( c ) { case 13 : case 32 : case 40 : CKEDITOR . tools . callFunction ( e ,
b ) ; break ; default : d . onkey ( d , c ) } a . preventDefault ( ) } ) , l = CKEDITOR . tools . addFunction ( function ( ) { d . onfocus && d . onfocus ( ) } ) , i = 0 , m = CKEDITOR . tools . addFunction ( function ( ) { if ( CKEDITOR . env . opera ) { var b = a . editable ( ) ; b . isInline ( ) && b . hasFocus && ( a . lockSelection ( ) , i = 1 ) } } ) ; d . keyDownFn = k ; c = { id : g , name : this . name || this . command , label : this . label , title : this . title , cls : this . className || "" , titleJs : c . gecko && 10900 <= c . version && ! c . hc ? "" : ( this . title || "" ) . replace ( "'" , "" ) , keydownFn : k , mousedownFn : m , focusFn : l , clickFn : e } ; h . output ( c , b ) ;
if ( this . onRender ) this . onRender ( ) ; return d } , createPanel : function ( a ) { if ( ! this . _ . panel ) { var b = this . _ . panelDefinition , c = this . _ . panelDefinition . block , h = b . parent || CKEDITOR . document . getBody ( ) , g = "cke_combopanel__" + this . name , e = new CKEDITOR . ui . floatPanel ( a , h , b ) , f = e . addListBlock ( this . id , c ) , d = this ; e . onShow = function ( ) { this . element . addClass ( g ) ; d . setState ( CKEDITOR . TRISTATE _ON ) ; d . _ . on = 1 ; d . editorFocus && a . focus ( ) ; if ( d . onOpen ) d . onOpen ( ) ; f . focus ( ! f . multiSelect && d . getValue ( ) ) } ; e . onHide = function ( b ) { this . element . removeClass ( g ) ;
d . setState ( d . modes && d . modes [ a . mode ] ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED ) ; d . _ . on = 0 ; if ( ! b && d . onClose ) d . onClose ( ) } ; e . onEscape = function ( ) { e . hide ( 1 ) } ; f . onClick = function ( a , b ) { d . onClick && d . onClick . call ( d , a , b ) ; e . hide ( ) } ; this . _ . panel = e ; this . _ . list = f ; e . getBlock ( this . id ) . onHide = function ( ) { d . _ . on = 0 ; d . setState ( CKEDITOR . TRISTATE _OFF ) } ; this . init && this . init ( ) } } , setValue : function ( a , b ) { this . _ . value = a ; var c = this . document . getById ( "cke_" + this . id + "_text" ) ; c && ( ! a && ! b ? ( b = this . label , c . addClass ( "cke_combo_inlinelabel" ) ) :
c . removeClass ( "cke_combo_inlinelabel" ) , c . setText ( "undefined" != typeof b ? b : a ) ) } , getValue : function ( ) { return this . _ . value || "" } , unmarkAll : function ( ) { this . _ . list . unmarkAll ( ) } , mark : function ( a ) { this . _ . list . mark ( a ) } , hideItem : function ( a ) { this . _ . list . hideItem ( a ) } , hideGroup : function ( a ) { this . _ . list . hideGroup ( a ) } , showAll : function ( ) { this . _ . list . showAll ( ) } , add : function ( a , b , c ) { this . _ . items [ a ] = c || a ; this . _ . list . add ( a , b , c ) } , startGroup : function ( a ) { this . _ . list . startGroup ( a ) } , commit : function ( ) { this . _ . committed || ( this . _ . list . commit ( ) ,
this . _ . committed = 1 , CKEDITOR . ui . fire ( "ready" , this ) ) ; this . _ . committed = 1 } , setState : function ( a ) { if ( this . _ . state != a ) { var b = this . document . getById ( "cke_" + this . id ) ; b . setState ( a , "cke_combo" ) ; a == CKEDITOR . TRISTATE _DISABLED ? b . setAttribute ( "aria-disabled" , ! 0 ) : b . removeAttribute ( "aria-disabled" ) ; this . _ . state = a } } , enable : function ( ) { this . _ . state == CKEDITOR . TRISTATE _DISABLED && this . setState ( this . _ . lastState ) } , disable : function ( ) { this . _ . state != CKEDITOR . TRISTATE _DISABLED && ( this . _ . lastState = this . _ . state , this . setState ( CKEDITOR . TRISTATE _DISABLED ) ) } } ,
statics : { handler : { create : function ( a ) { return new CKEDITOR . ui . richCombo ( a ) } } } } ) ; CKEDITOR . ui . prototype . addRichCombo = function ( a , b ) { this . add ( a , CKEDITOR . UI _RICHCOMBO , b ) } } ) ( ) ; ( function ( ) { function g ( a , b , g , h , j , n , k , o ) { for ( var p = a . config , l = new CKEDITOR . style ( k ) , c = j . split ( ";" ) , j = [ ] , f = { } , d = 0 ; d < c . length ; d ++ ) { var e = c [ d ] ; if ( e ) { var e = e . split ( "/" ) , m = { } , i = c [ d ] = e [ 0 ] ; m [ g ] = j [ d ] = e [ 1 ] || i ; f [ i ] = new CKEDITOR . style ( k , m ) ; f [ i ] . _ . definition . name = i } else c . splice ( d -- , 1 ) } a . ui . addRichCombo ( b , { label : h . label , title : h . panelTitle , toolbar : "styles," + o , allowedContent : l , requiredContent : l , panel : { css : [ CKEDITOR . skin . getPath ( "editor" ) ] . concat ( p . contentsCss ) , multiSelect : ! 1 , attributes : { "aria-label" : h . panelTitle } } ,
if ( this . onRender ) this . onRender ( ) ; return d } , createPanel : function ( a ) { if ( ! this . _ . panel ) { var b = this . _ . panelDefinition , c = this . _ . panelDefinition . block , h = b . parent || CKEDITOR . document . getBody ( ) , g = "cke_combopanel__" + this . name , e = new CKEDITOR . ui . floatPanel ( a , h , b ) , f = e . addListBlock ( this . id , c ) , d = this ; e . onShow = function ( ) { this . element . addClass ( g ) ; d . setState ( CKEDITOR . TRISTATE _ON ) ; d . _ . on = 1 ; d . editorFocus && ! a . focusManager . hasFocus && a . focus ( ) ; if ( d . onOpen ) d . onOpen ( ) ; a . once ( "panelShow" , function ( ) { f . focus ( ! f . multiSelect &&
d . getValue ( ) ) } ) } ; e . onHide = function ( b ) { this . element . removeClass ( g ) ; d . setState ( d . modes && d . modes [ a . mode ] ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED ) ; d . _ . on = 0 ; if ( ! b && d . onClose ) d . onClose ( ) } ; e . onEscape = function ( ) { e . hide ( 1 ) } ; f . onClick = function ( a , b ) { d . onClick && d . onClick . call ( d , a , b ) ; e . hide ( ) } ; this . _ . panel = e ; this . _ . list = f ; e . getBlock ( this . id ) . onHide = function ( ) { d . _ . on = 0 ; d . setState ( CKEDITOR . TRISTATE _OFF ) } ; this . init && this . init ( ) } } , setValue : function ( a , b ) { this . _ . value = a ; var c = this . document . getById ( "cke_" + this . id +
"_text" ) ; c && ( ! a && ! b ? ( b = this . label , c . addClass ( "cke_combo_inlinelabel" ) ) : c . removeClass ( "cke_combo_inlinelabel" ) , c . setText ( "undefined" != typeof b ? b : a ) ) } , getValue : function ( ) { return this . _ . value || "" } , unmarkAll : function ( ) { this . _ . list . unmarkAll ( ) } , mark : function ( a ) { this . _ . list . mark ( a ) } , hideItem : function ( a ) { this . _ . list . hideItem ( a ) } , hideGroup : function ( a ) { this . _ . list . hideGroup ( a ) } , showAll : function ( ) { this . _ . list . showAll ( ) } , add : function ( a , b , c ) { this . _ . items [ a ] = c || a ; this . _ . list . add ( a , b , c ) } , startGroup : function ( a ) { this . _ . list . startGroup ( a ) } ,
commit : function ( ) { this . _ . committed || ( this . _ . list . commit ( ) , this . _ . committed = 1 , CKEDITOR . ui . fire ( "ready" , this ) ) ; this . _ . committed = 1 } , setState : function ( a ) { if ( this . _ . state != a ) { var b = this . document . getById ( "cke_" + this . id ) ; b . setState ( a , "cke_combo" ) ; a == CKEDITOR . TRISTATE _DISABLED ? b . setAttribute ( "aria-disabled" , ! 0 ) : b . removeAttribute ( "aria-disabled" ) ; this . _ . state = a } } , enable : function ( ) { this . _ . state == CKEDITOR . TRISTATE _DISABLED && this . setState ( this . _ . lastState ) } , disable : function ( ) { this . _ . state != CKEDITOR . TRISTATE _DISABLED &&
( this . _ . lastState = this . _ . state , this . setState ( CKEDITOR . TRISTATE _DISABLED ) ) } } , statics : { handler : { create : function ( a ) { return new CKEDITOR . ui . richCombo ( a ) } } } } ) ; CKEDITOR . ui . prototype . addRichCombo = function ( a , b ) { this . add ( a , CKEDITOR . UI _RICHCOMBO , b ) } } ) ( ) ; ( function ( ) { function g ( a , b , g , h , j , n , k , o ) { for ( var p = a . config , l = new CKEDITOR . style ( k ) , c = j . split ( ";" ) , j = [ ] , f = { } , d = 0 ; d < c . length ; d ++ ) { var e = c [ d ] ; if ( e ) { var e = e . split ( "/" ) , m = { } , i = c [ d ] = e [ 0 ] ; m [ g ] = j [ d ] = e [ 1 ] || i ; f [ i ] = new CKEDITOR . style ( k , m ) ; f [ i ] . _ . definition . name = i } else c . splice ( d -- , 1 ) } a . ui . addRichCombo ( b , { label : h . label , title : h . panelTitle , toolbar : "styles," + o , allowedContent : l , requiredContent : l , panel : { css : [ CKEDITOR . skin . getPath ( "editor" ) ] . concat ( p . contentsCss ) , multiSelect : ! 1 , attributes : { "aria-label" : h . panelTitle } } ,
init : function ( ) { this . startGroup ( h . panelTitle ) ; for ( var a = 0 ; a < c . length ; a ++ ) { var b = c [ a ] ; this . add ( b , f [ b ] . buildPreview ( ) , b ) } } , onClick : function ( b ) { a . focus ( ) ; a . fire ( "saveSnapshot" ) ; var c = f [ b ] ; a [ this . getValue ( ) == b ? "removeStyle" : "applyStyle" ] ( c ) ; a . fire ( "saveSnapshot" ) } , onRender : function ( ) { a . on ( "selectionChange" , function ( a ) { for ( var b = this . getValue ( ) , a = a . data . path . elements , c = 0 , d ; c < a . length ; c ++ ) { d = a [ c ] ; for ( var e in f ) if ( f [ e ] . checkElementMatch ( d , ! 0 ) ) { e != b && this . setValue ( e ) ; return } } this . setValue ( "" , n ) } , this ) } } ) }
CKEDITOR . plugins . add ( "font" , { requires : "richcombo" , init : function ( a ) { var b = a . config ; g ( a , "Font" , "family" , a . lang . font , b . font _names , b . font _defaultLabel , b . font _style , 30 ) ; g ( a , "FontSize" , "size" , a . lang . font . fontSize , b . fontSize _sizes , b . fontSize _defaultLabel , b . fontSize _style , 40 ) } } ) } ) ( ) ; CKEDITOR . config . font _names = "Arial/Arial, Helvetica, sans-serif;Comic Sans MS/Comic Sans MS, cursive;Courier New/Courier New, Courier, monospace;Georgia/Georgia, serif;Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;Tahoma/Tahoma, Geneva, sans-serif;Times New Roman/Times New Roman, Times, serif;Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;Verdana/Verdana, Geneva, sans-serif" ;
CKEDITOR . config . font _defaultLabel = "" ; CKEDITOR . config . font _style = { element : "span" , styles : { "font-family" : "#(family)" } , overrides : [ { element : "font" , attributes : { face : null } } ] } ; CKEDITOR . config . fontSize _sizes = "8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px" ; CKEDITOR . config . fontSize _defaultLabel = "" ; CKEDITOR . config . fontSize _style = { element : "span" , styles : { "font-size" : "#(size)" } , overrides : [ { element : "font" , attributes : { size : null } } ] } ; ( function ( ) { function e ( b , a ) { a || ( a = b . getSelection ( ) . getSelectedElement ( ) ) ; if ( a && a . is ( "img" ) && ! a . data ( "cke-realelement" ) && ! a . isReadOnly ( ) ) return a } function f ( b ) { var a = b . getStyle ( "float" ) ; if ( "inherit" == a || "none" == a ) a = 0 ; a || ( a = b . getAttribute ( "align" ) ) ; return a } CKEDITOR . plugins . add ( "image" , { requires : "dialog" , init : function ( b ) { CKEDITOR . dialog . add ( "image" , this . path + "dialogs/image.js" ) ; var a = "img[alt,!src]{border-style,border-width,float,height,margin,margin-bottom,margin-left,margin-right,margin-top,width}" ;
@@ -762,8 +763,8 @@ var j=e&&(h.$.className=CKEDITOR.tools.ltrim(h.$.className.replace(this.cssClass
toolbar : "align,20" } ) , a . ui . addButton ( "JustifyRight" , { label : a . lang . justify . right , command : "justifyright" , toolbar : "align,30" } ) , a . ui . addButton ( "JustifyBlock" , { label : a . lang . justify . block , command : "justifyblock" , toolbar : "align,40" } ) ) ; a . on ( "dirChanged" , j ) } } } ) } ) ( ) ; CKEDITOR . config . wsc _removeGlobalVariable = ! 0 ;
CKEDITOR . plugins . add ( "wsc" , { requires : "dialog" , parseApi : function ( a ) { a . config . wsc _onFinish = "function" === typeof a . config . wsc _onFinish ? a . config . wsc _onFinish : function ( ) { } ; a . config . wsc _onClose = "function" === typeof a . config . wsc _onClose ? a . config . wsc _onClose : function ( ) { } } , parseConfig : function ( a ) { a . config . wsc _customerId = a . config . wsc _customerId || CKEDITOR . config . wsc _customerId || "1:ua3xw1-2XyGJ3-GWruD3-6OFNT1-oXcuB1-nR6Bp4-hgQHc-EcYng3-sdRXG3-NOfFk" ; a . config . wsc _customDictionaryIds = a . config . wsc _customDictionaryIds ||
CKEDITOR . config . wsc _customDictionaryIds || "" ; a . config . wsc _userDictionaryName = a . config . wsc _userDictionaryName || CKEDITOR . config . wsc _userDictionaryName || "" ; a . config . wsc _customLoaderScript = a . config . wsc _customLoaderScript || CKEDITOR . config . wsc _customLoaderScript ; CKEDITOR . config . wsc _cmd = a . config . wsc _cmd || CKEDITOR . config . wsc _cmd || "spell" ; CKEDITOR . config . wsc _version = CKEDITOR . version + " | %Rev%" } , init : function ( a ) { this . parseConfig ( a ) ; this . parseApi ( a ) ; a . addCommand ( "checkspell" , new CKEDITOR . dialogCommand ( "checkspell" ) ) . modes =
{ wysiwyg : ! CKEDITOR . env . opera && ! CKEDITOR . env . air && document . domain == window . location . hostname } ; "undefined" == typeof a . plugins . scayt && a . ui . addButton && a . ui . addButton ( "SpellChecker" , { label : a . lang . wsc . toolbar , command : "checkspell" , toolbar : "spellchecker,10" } ) ; CKEDITOR . dialog . add ( "checkspell" , this . path + ( CKEDITOR . env . ie && 8 >= CKEDITOR . env . version ? "dialogs/wsc_ie.js" : window . postMessage ? "dialogs/wsc.js" : "dialogs/wsc_ie.js" ) ) } } ) ; CKEDITOR . plugins . colordialog = { requires : "dialog" , init : function ( b ) { b . addCommand ( "colordialog" , new CKEDITOR . dialogCommand ( "colordialog" ) ) ; CKEDITOR . dialog . add ( "colordialog" , this . path + "dialogs/colordialog.js" ) ; b . getColorFromDialog = function ( e , f ) { var c = function ( a ) { this . removeListener ( "ok" , c ) ; this . removeListener ( "cancel" , c ) ; a = "ok" == a . name ? this . getValueOf ( "picker" , "selectedColor" ) : null ; e . call ( f , a ) } , d = function ( a ) { a . on ( "ok" , c ) ; a . on ( "cancel" , c ) } ; b . execCommand ( "colordialog" ) ; if ( b . _ . storedDialogs && b . _ . storedDialogs . colordialog ) d ( b . _ . storedDialogs . colordialog ) ;
else CKEDITOR . on ( "dialogDefinition" , function ( a ) { if ( "colordialog" == a . data . name ) { var b = a . data . definition ; a . removeListener ( ) ; b . onLoad = CKEDITOR . tools . override ( b . onLoad , function ( a ) { return function ( ) { d ( this ) ; b . onLoad = a ; "function" == typeof a && a . call ( this ) } } ) } } ) } } } ; CKEDITOR . plugins . add ( "colordialog" , CKEDITOR . plugins . colordialog ) ; CKEDITOR . plugins . add ( "contextmenu" , { requires : "menu" , onLoad : function ( ) { CKEDITOR . plugins . contextMenu = CKEDITOR . tools . createClass ( { base : CKEDITOR . menu , $ : function ( b ) { this . base . call ( this , b , { panel : { className : "cke_menu_panel" , attributes : { "aria-label" : b . lang . contextmenu . options } } } ) } , proto : { addTarget : function ( b , d ) { if ( CKEDITOR . env . opera && ! ( "oncontextmenu" in document . body ) ) { var c ; b . on ( "mousedown" , function ( a ) { a = a . data ; if ( 2 != a . $ . button ) a . getKeystroke ( ) == CKEDITOR . CTRL + 1 && b . fire ( "contextmenu" , a ) ; else if ( ! d || ! ( CKEDITOR . env . mac ?
{ wysiwyg : ! CKEDITOR . env . opera && ! CKEDITOR . env . air && document . domain == window . location . hostname } ; "undefined" == typeof a . plugins . scayt && a . ui . addButton && a . ui . addButton ( "SpellChecker" , { label : a . lang . wsc . toolbar , command : "checkspell" , toolbar : "spellchecker,10" } ) ; CKEDITOR . dialog . add ( "checkspell" , this . path + ( CKEDITOR . env . ie && 8 >= CKEDITOR . env . version ? "dialogs/wsc_ie.js" : window . postMessage ? "dialogs/wsc.js" : "dialogs/wsc_ie.js" ) ) } } ) ; CKEDITOR . plugins . colordialog = { requires : "dialog" , init : function ( b ) { var c = new CKEDITOR . dialogCommand ( "colordialog" ) ; c . editorFocus = ! 1 ; b . addCommand ( "colordialog" , c ) ; CKEDITOR . dialog . add ( "colordialog" , this . path + "dialogs/colordialog.js" ) ; b . getColorFromDialog = function ( c , f ) { var d = function ( a ) { this . removeListener ( "ok" , d ) ; this . removeListener ( "cancel" , d ) ; a = "ok" == a . name ? this . getValueOf ( "picker" , "selectedColor" ) : null ; c . call ( f , a ) } , e = function ( a ) { a . on ( "ok" , d ) ; a . on ( "cancel" , d ) } ; b . execCommand ( "colordialog" ) ; if ( b . _ . storedDialogs &&
b . _ . storedDialogs . colordialog ) e ( b . _ . storedDialogs . colordialog ) ; else CKEDITOR . on ( "dialogDefinition" , function ( a ) { if ( "colordialog" == a . data . name ) { var b = a . data . definition ; a . removeListener ( ) ; b . onLoad = CKEDITOR . tools . override ( b . onLoad , function ( a ) { return function ( ) { e ( this ) ; b . onLoad = a ; "function" == typeof a && a . call ( this ) } } ) } } ) } } } ; CKEDITOR . plugins . add ( "colordialog" , CKEDITOR . plugins . colordialog ) ; CKEDITOR . plugins . add ( "contextmenu" , { requires : "menu" , onLoad : function ( ) { CKEDITOR . plugins . contextMenu = CKEDITOR . tools . createClass ( { base : CKEDITOR . menu , $ : function ( b ) { this . base . call ( this , b , { panel : { className : "cke_menu_panel" , attributes : { "aria-label" : b . lang . contextmenu . options } } } ) } , proto : { addTarget : function ( b , d ) { if ( CKEDITOR . env . opera && ! ( "oncontextmenu" in document . body ) ) { var c ; b . on ( "mousedown" , function ( a ) { a = a . data ; if ( 2 != a . $ . button ) a . getKeystroke ( ) == CKEDITOR . CTRL + 1 && b . fire ( "contextmenu" , a ) ; else if ( ! d || ! ( CKEDITOR . env . mac ?
a . $ . metaKey : a . $ . ctrlKey ) ) { var g = a . getTarget ( ) ; c || ( g = g . getDocument ( ) , c = g . createElement ( "input" ) , c . $ . type = "button" , g . getBody ( ) . append ( c ) ) ; c . setAttribute ( "style" , "position:absolute;top:" + ( a . $ . clientY - 2 ) + "px;left:" + ( a . $ . clientX - 2 ) + "px;width:5px;height:5px;opacity:0.01" ) } } ) ; b . on ( "mouseup" , function ( a ) { c && ( c . remove ( ) , c = void 0 , b . fire ( "contextmenu" , a . data ) ) } ) } b . on ( "contextmenu" , function ( a ) { a = a . data ; if ( ! d || ! ( CKEDITOR . env . webkit ? e : CKEDITOR . env . mac ? a . $ . metaKey : a . $ . ctrlKey ) ) { a . preventDefault ( ) ; var b = a . getTarget ( ) . getDocument ( ) ,
c = a . getTarget ( ) . getDocument ( ) . getDocumentElement ( ) , f = ! b . equals ( CKEDITOR . document ) , b = b . getWindow ( ) . getScrollPosition ( ) , h = f ? a . $ . clientX : a . $ . pageX || b . x + a . $ . clientX , i = f ? a . $ . clientY : a . $ . pageY || b . y + a . $ . clientY ; CKEDITOR . tools . setTimeout ( function ( ) { this . open ( c , null , h , i ) } , CKEDITOR . env . ie ? 200 : 0 , this ) } } , this ) ; if ( CKEDITOR . env . opera ) b . on ( "keypress" , function ( a ) { a = a . data ; 0 === a . $ . keyCode && a . preventDefault ( ) } ) ; if ( CKEDITOR . env . webkit ) { var e , f = function ( ) { e = 0 } ; b . on ( "keydown" , function ( a ) { e = CKEDITOR . env . mac ? a . data . $ . metaKey :
a . data . $ . ctrlKey } ) ; b . on ( "keyup" , f ) ; b . on ( "contextmenu" , f ) } } , open : function ( b , d , c , e ) { this . editor . focus ( ) ; b = b || CKEDITOR . document . getDocumentElement ( ) ; this . editor . selectionChange ( 1 ) ; this . show ( b , d , c , e ) } } } ) } , beforeInit : function ( b ) { var d = b . contextMenu = new CKEDITOR . plugins . contextMenu ( b ) ; b . on ( "contentDom" , function ( ) { d . addTarget ( b . editable ( ) , ! 1 !== b . config . browserContextMenuOnCtrl ) } ) ; b . addCommand ( "contextMenu" , { exec : function ( ) { b . contextMenu . open ( b . document . getBody ( ) ) } } ) ; b . setKeystroke ( CKEDITOR . SHIFT + 121 , "contextMenu" ) ;
@@ -783,24 +784,24 @@ f=e;f<=a;f++){for(var g=c[f],h=new CKEDITOR.dom.element(b.$.rows[f]),i=0;i<g.len
( b = e . getAscendant ( "table" ) , 1 == b . $ . rows . length ? b . remove ( ) : e . remove ( ) ) ; return null } function r ( e , d ) { for ( var b = d ? Infinity : 0 , c = 0 ; c < e . length ; c ++ ) { var a ; a = e [ c ] ; for ( var f = d , g = a . getParent ( ) . $ . cells , h = 0 , i = 0 ; i < g . length ; i ++ ) { var j = g [ i ] , h = h + ( f ? 1 : j . colSpan ) ; if ( j == a . $ ) break } a = h - 1 ; if ( d ? a < b : a > b ) b = a } return b } function k ( e , d ) { for ( var b = p ( e ) , c = b [ 0 ] . getAscendant ( "table" ) , a = r ( b , 1 ) , b = r ( b ) , a = d ? a : b , f = CKEDITOR . tools . buildTableMap ( c ) , c = [ ] , b = [ ] , g = f . length , h = 0 ; h < g ; h ++ ) c . push ( f [ h ] [ a ] ) , b . push ( d ? f [ h ] [ a - 1 ] : f [ h ] [ a + 1 ] ) ; for ( h = 0 ; h < g ; h ++ ) c [ h ] &&
( 1 < c [ h ] . colSpan && b [ h ] == c [ h ] ? ( a = c [ h ] , a . colSpan += 1 ) : ( a = ( new CKEDITOR . dom . element ( c [ h ] ) ) . clone ( ) , a . removeAttribute ( "colSpan" ) , ! CKEDITOR . env . ie && a . appendBogus ( ) , a [ d ? "insertBefore" : "insertAfter" ] . call ( a , new CKEDITOR . dom . element ( c [ h ] ) ) , a = a . $ ) , h += a . rowSpan - 1 ) } function u ( e , d ) { var b = e . getStartElement ( ) ; if ( b = b . getAscendant ( "td" , 1 ) || b . getAscendant ( "th" , 1 ) ) { var c = b . clone ( ) ; CKEDITOR . env . ie || c . appendBogus ( ) ; d ? c . insertBefore ( b ) : c . insertAfter ( b ) } } function t ( e ) { if ( e instanceof CKEDITOR . dom . selection ) { var e = p ( e ) , d =
e [ 0 ] && e [ 0 ] . getAscendant ( "table" ) , b ; a : { var c = 0 ; b = e . length - 1 ; for ( var a = { } , f , g ; f = e [ c ++ ] ; ) CKEDITOR . dom . element . setMarker ( a , f , "delete_cell" , ! 0 ) ; for ( c = 0 ; f = e [ c ++ ] ; ) if ( ( g = f . getPrevious ( ) ) && ! g . getCustomData ( "delete_cell" ) || ( g = f . getNext ( ) ) && ! g . getCustomData ( "delete_cell" ) ) { CKEDITOR . dom . element . clearAllMarkers ( a ) ; b = g ; break a } CKEDITOR . dom . element . clearAllMarkers ( a ) ; g = e [ 0 ] . getParent ( ) ; ( g = g . getPrevious ( ) ) ? b = g . getLast ( ) : ( g = e [ b ] . getParent ( ) , b = ( g = g . getNext ( ) ) ? g . getChild ( 0 ) : null ) } for ( g = e . length - 1 ; 0 <= g ; g -- ) t ( e [ g ] ) ;
b ? m ( b , ! 0 ) : d && d . remove ( ) } else e instanceof CKEDITOR . dom . element && ( d = e . getParent ( ) , 1 == d . getChildCount ( ) ? d . remove ( ) : e . remove ( ) ) } function m ( e , d ) { var b = new CKEDITOR . dom . range ( e . getDocument ( ) ) ; if ( ! b [ "moveToElementEdit" + ( d ? "End" : "Start" ) ] ( e ) ) b . selectNodeContents ( e ) , b . collapse ( d ? ! 1 : ! 0 ) ; b . select ( ! 0 ) } function v ( e , d , b ) { e = e [ d ] ; if ( "undefined" == typeof b ) return e ; for ( d = 0 ; e && d < e . length ; d ++ ) { if ( b . is && e [ d ] == b . $ ) return d ; if ( d == b ) return new CKEDITOR . dom . element ( e [ d ] ) } return b . is ? - 1 : null } function s ( e , d , b ) { var c = p ( e ) ,
a ; if ( ( d ? 1 != c . length : 2 > c . length ) || ( a = e . getCommonAncestor ( ) ) && a . type == CKEDITOR . NODE _ELEMENT && a . is ( "table" ) ) return ! 1 ; var f , e = c [ 0 ] ; a = e . getAscendant ( "table" ) ; var g = CKEDITOR . tools . buildTableMap ( a ) , h = g . length , i = g [ 0 ] . length , j = e . getParent ( ) . $ . rowIndex , l = v ( g , j , e ) ; if ( d ) { var n ; try { var m = parseInt ( e . getAttribute ( "rowspan" ) , 10 ) || 1 ; f = parseInt ( e . getAttribute ( "colspan" ) , 10 ) || 1 ; n = g [ "up" == d ? j - m : "down" == d ? j + m : j ] [ "left" == d ? l - f : "right" == d ? l + f : l ] } catch ( z ) { return ! 1 } if ( ! n || e . $ == n ) return ! 1 ; c [ "up" == d || "left" == d ? "unshift" : "push" ] ( new CKEDITOR . dom . element ( n ) ) } for ( var d =
e . getDocument ( ) , o = j , m = n = 0 , q = ! b && new CKEDITOR . dom . documentFragment ( d ) , s = 0 , d = 0 ; d < c . length ; d ++ ) { f = c [ d ] ; var k = f . getParent ( ) , t = f . getFirst ( ) , r = f . $ . colSpan , u = f . $ . rowSpan , k = k . $ . rowIndex , w = v ( g , k , f ) , s = s + r * u , m = Math . max ( m , w - l + r ) ; n = Math . max ( n , k - j + u ) ; if ( ! b ) { r = f ; ( u = r . getBogus ( ) ) && u . remove ( ) ; r . trim ( ) ; if ( f . getChildren ( ) . count ( ) ) { if ( k != o && t && ( ! t . isBlockBoundary || ! t . isBlockBoundary ( { br : 1 } ) ) ) ( o = q . getLast ( CKEDITOR . dom . walker . whitespaces ( ! 0 ) ) ) && ( ! o . is || ! o . is ( "br" ) ) && q . append ( "br" ) ; f . moveChildren ( q ) } d ? f . remove ( ) : f . setHtml ( "" ) } o =
k } if ( b ) return n * m == s ; q . moveChildren ( e ) ; CKEDITOR . env . ie || e . appendBogus ( ) ; m >= i ? e . removeAttribute ( "rowSpan" ) : e . $ . rowSpan = n ; n >= h ? e . removeAttribute ( "colSpan" ) : e . $ . colSpan = m ; b = new CKEDITOR . dom . nodeList ( a . $ . rows ) ; c = b . count ( ) ; for ( d = c - 1 ; 0 <= d ; d -- ) a = b . getItem ( d ) , a . $ . cells . length || ( a . remove ( ) , c ++ ) ; return e } function w ( e , d ) { var b = p ( e ) ; if ( 1 < b . length ) return ! 1 ; if ( d ) return ! 0 ; var b = b [ 0 ] , c = b . getParent ( ) , a = c . getAscendant ( "table" ) , f = CKEDITOR . tools . buildTableMap ( a ) , g = c . $ . rowIndex , h = v ( f , g , b ) , i = b . $ . rowSpan , j ; if ( 1 < i ) { j = Math . ceil ( i /
2 ) ; for ( var i = Math . floor ( i / 2 ) , c = g + j , a = new CKEDITOR . dom . element ( a . $ . rows [ c ] ) , f = v ( f , c ) , l , c = b . clone ( ) , g = 0 ; g < f . length ; g ++ ) if ( l = f [ g ] , l . parentNode == a . $ && g > h ) { c . insertBefore ( new CKEDITOR . dom . element ( l ) ) ; break } else l = null ; l || a . append ( c , ! 0 ) } else { i = j = 1 ; a = c . clone ( ) ; a . insertAfter ( c ) ; a . append ( c = b . clone ( ) ) ; l = v ( f , g ) ; for ( h = 0 ; h < l . length ; h ++ ) l [ h ] . rowSpan ++ } CKEDITOR . env . ie || c . appendBogus ( ) ; b . $ . rowSpan = j ; c . $ . rowSpan = i ; 1 == j && b . removeAttribute ( "rowSpan" ) ; 1 == i && c . removeAttribute ( "rowSpan" ) ; return c } function x ( e , d ) { var b =
p ( e ) ; if ( 1 < b . length ) return ! 1 ; if ( d ) return ! 0 ; var b = b [ 0 ] , c = b . getParent ( ) , a = c . getAscendant ( "table" ) , a = CKEDITOR . tools . buildTableMap ( a ) , f = v ( a , c . $ . rowIndex , b ) , g = b . $ . colSpan ; if ( 1 < g ) c = Math . ceil ( g / 2 ) , g = Math . floor ( g / 2 ) ; else { for ( var g = c = 1 , h = [ ] , i = 0 ; i < a . length ; i ++ ) { var j = a [ i ] ; h . push ( j [ f ] ) ; 1 < j [ f ] . rowSpan && ( i += j [ f ] . rowSpan - 1 ) } for ( a = 0 ; a < h . length ; a ++ ) h [ a ] . colSpan ++ } a = b . clone ( ) ; a . insertAfter ( b ) ; CKEDITOR . env . ie || a . appendBogus ( ) ; b . $ . colSpan = c ; a . $ . colSpan = g ; 1 == c && b . removeAttribute ( "colSpan" ) ; 1 == g && a . removeAttribute ( "colSpan" ) ;
return a } var y = /^(?:td|th)$/ ; CKEDITOR . plugins . tabletools = { requires : "table,dialog,contextmenu" , init : function ( e ) { function d ( a ) { return CKEDITOR . tools . extend ( a || { } , { contextSensitive : 1 , refresh : function ( a , b ) { this . setState ( b . contains ( { td : 1 , th : 1 } , 1 ) ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED ) } } ) } function b ( a , b ) { var c = e . addCommand ( a , b ) ; e . addFeature ( c ) } var c = e . lang . table ; b ( "cellProperties" , new CKEDITOR . dialogCommand ( "cellProperties" , d ( { allowedContent : "td th{width,height,border-color,background-color,white-space,vertical-align,text-align}[colspan,rowspan]" ,
requiredContent : "table" } ) ) ) ; CKEDITOR . dialog . add ( "cellProperties" , this . path + "dialogs/tableCell.js" ) ; b ( "rowDelete" , d ( { requiredContent : "table" , exec : function ( a ) { a = a . getSelection ( ) ; m ( q ( a ) ) } } ) ) ; b ( "rowInsertBefore" , d ( { requiredContent : "table" , exec : function ( a ) { a = a . getSelection ( ) ; o ( a , ! 0 ) } } ) ) ; b ( "rowInsertAfter" , d ( { requiredContent : "table" , exec : function ( a ) { a = a . getSelection ( ) ; o ( a ) } } ) ) ; b ( "columnDelete" , d ( { requiredContent : "table" , exec : function ( a ) { for ( var a = a . getSelection ( ) , a = p ( a ) , b = a [ 0 ] , c = a [ a . length - 1 ] , a = b . getAscendant ( "table" ) ,
d = CKEDITOR . tools . buildTableMap ( a ) , e , j , l = [ ] , n = 0 , o = d . length ; n < o ; n ++ ) for ( var k = 0 , q = d [ n ] . length ; k < q ; k ++ ) d [ n ] [ k ] == b . $ && ( e = k ) , d [ n ] [ k ] == c . $ && ( j = k ) ; for ( n = e ; n <= j ; n ++ ) for ( k = 0 ; k < d . length ; k ++ ) c = d [ k ] , b = new CKEDITOR . dom . element ( a . $ . rows [ k ] ) , c = new CKEDITOR . dom . element ( c [ n ] ) , c . $ && ( 1 == c . $ . colSpan ? c . remove ( ) : c . $ . colSpan -= 1 , k += c . $ . rowSpan - 1 , b . $ . cells . length || l . push ( b ) ) ; j = a . $ . rows [ 0 ] && a . $ . rows [ 0 ] . cells ; e = new CKEDITOR . dom . element ( j [ e ] || ( e ? j [ e - 1 ] : a . $ . parentNode ) ) ; l . length == o && a . remove ( ) ; e && m ( e , ! 0 ) } } ) ) ; b ( "columnInsertBefore" ,
d ( { requiredContent : "table" , exec : function ( a ) { a = a . getSelection ( ) ; k ( a , ! 0 ) } } ) ) ; b ( "columnInsertAfter" , d ( { requiredContent : "table" , exec : function ( a ) { a = a . getSelection ( ) ; k ( a ) } } ) ) ; b ( "cellDelete" , d ( { requiredContent : "table" , exec : function ( a ) { a = a . getSelection ( ) ; t ( a ) } } ) ) ; b ( "cellMerge" , d ( { allowedContent : "td[colspan,rowspan]" , requiredContent : "td[colspan,rowspan]" , exec : function ( a ) { m ( s ( a . getSelection ( ) ) , ! 0 ) } } ) ) ; b ( "cellMergeRight" , d ( { allowedContent : "td[colspan]" , requiredContent : "td[colspan]" , exec : function ( a ) { m ( s ( a . getSelection ( ) ,
"right" ) , ! 0 ) } } ) ) ; b ( "cellMergeDown" , d ( { allowedContent : "td[rowspan]" , requiredContent : "td[rowspan]" , exec : function ( a ) { m ( s ( a . getSelection ( ) , "down" ) , ! 0 ) } } ) ) ; b ( "cellVerticalSplit" , d ( { allowedContent : "td[rowspan]" , requiredContent : "td[rowspan]" , exec : function ( a ) { m ( w ( a . getSelection ( ) ) ) } } ) ) ; b ( "cellHorizontalSplit" , d ( { allowedContent : "td[colspan]" , requiredContent : "td[colspan]" , exec : function ( a ) { m ( x ( a . getSelection ( ) ) ) } } ) ) ; b ( "cellInsertBefore" , d ( { requiredContent : "table" , exec : function ( a ) { a = a . getSelection ( ) ; u ( a , ! 0 ) } } ) ) ;
b ( "cellInsertAfter" , d ( { requiredContent : "table" , exec : function ( a ) { a = a . getSelection ( ) ; u ( a ) } } ) ) ; e . addMenuItems && e . addMenuItems ( { tablecell : { label : c . cell . menu , group : "tablecell" , order : 1 , getItems : function ( ) { var a = e . getSelection ( ) , b = p ( a ) ; return { tablecell _insertBefore : CKEDITOR . TRISTATE _OFF , tablecell _insertAfter : CKEDITOR . TRISTATE _OFF , tablecell _delete : CKEDITOR . TRISTATE _OFF , tablecell _merge : s ( a , null , ! 0 ) ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED , tablecell _merge _right : s ( a , "right" , ! 0 ) ? CKEDITOR . TRISTATE _OFF :
CKEDITOR . TRISTATE _DISABLED , tablecell _merge _down : s ( a , "down" , ! 0 ) ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED , tablecell _split _vertical : w ( a , ! 0 ) ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED , tablecell _split _horizontal : x ( a , ! 0 ) ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED , tablecell _properties : 0 < b . length ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED } } } , tablecell _insertBefore : { label : c . cell . insertBefore , group : "tablecell" , command : "cellInsertBefore" , order : 5 } , tablecell _insertAfter : { label : c . cell . insertAfter ,
group : "tablecell" , command : "cellInsertAfter" , order : 10 } , tablecell _delete : { label : c . cell . deleteCell , group : "tablecell" , command : "cellDelete" , order : 15 } , tablecell _merge : { label : c . cell . merge , group : "tablecell" , command : "cellMerge" , order : 16 } , tablecell _merge _right : { label : c . cell . mergeRight , group : "tablecell" , command : "cellMergeRight" , order : 17 } , tablecell _merge _down : { label : c . cell . mergeDown , group : "tablecell" , command : "cellMergeDown" , order : 18 } , tablecell _split _horizontal : { label : c . cell . splitHorizontal , group : "tablecell" ,
command : "cellHorizontalSplit" , order : 19 } , tablecell _split _vertical : { label : c . cell . splitVertical , group : "tablecell" , command : "cellVerticalSplit" , order : 20 } , tablecell _properties : { label : c . cell . title , group : "tablecellproperties" , command : "cellProperties" , order : 21 } , tablerow : { label : c . row . menu , group : "tablerow" , order : 1 , getItems : function ( ) { return { tablerow _insertBefore : CKEDITOR . TRISTATE _OFF , tablerow _insertAfter : CKEDITOR . TRISTATE _OFF , tablerow _delete : CKEDITOR . TRISTATE _OFF } } } , tablerow _insertBefore : { label : c . row . insertBefore ,
group : "tablerow" , command : "rowInsertBefore" , order : 5 } , tablerow _insertAfter : { label : c . row . insertAfter , group : "tablerow" , command : "rowInsertAfter" , order : 10 } , tablerow _delete : { label : c . row . deleteRow , group : "tablerow" , command : "rowDelete" , order : 15 } , tablecolumn : { label : c . column . menu , group : "tablecolumn" , order : 1 , getItems : function ( ) { return { tablecolumn _insertBefore : CKEDITOR . TRISTATE _OFF , tablecolumn _insertAfter : CKEDITOR . TRISTATE _OFF , tablecolumn _delete : CKEDITOR . TRISTATE _OFF } } } , tablecolumn _insertBefore : { label : c . column . insertBefore ,
group : "tablecolumn" , command : "columnInsertBefore" , order : 5 } , tablecolumn _insertAfter : { label : c . column . insertAfter , group : "tablecolumn" , command : "columnInsertAfter" , order : 10 } , tablecolumn _delete : { label : c . column . deleteColumn , group : "tablecolumn" , command : "columnDelete" , order : 15 } } ) ; e . contextMenu && e . contextMenu . addListener ( function ( a , b , c ) { return ( a = c . contains ( { td : 1 , th : 1 } , 1 ) ) && ! a . isReadOnly ( ) ? { tablecell : CKEDITOR . TRISTATE _OFF , tablerow : CKEDITOR . TRISTATE _OFF , tablecolumn : CKEDITOR . TRISTATE _OFF } : null } ) } , getSelectedCells : p } ;
CKEDITOR . plugins . add ( "tabletools" , CKEDITOR . plugins . tabletools ) } ) ( ) ; CKEDITOR . tools . buildTableMap = function ( p ) { for ( var p = p . $ . rows , o = - 1 , q = [ ] , r = 0 ; r < p . length ; r ++ ) { o ++ ; ! q [ o ] && ( q [ o ] = [ ] ) ; for ( var k = - 1 , u = 0 ; u < p [ r ] . cells . length ; u ++ ) { var t = p [ r ] . cells [ u ] ; for ( k ++ ; q [ o ] [ k ] ; ) k ++ ; for ( var m = isNaN ( t . colSpan ) ? 1 : t . colSpan , t = isNaN ( t . rowSpan ) ? 1 : t . rowSpan , v = 0 ; v < t ; v ++ ) { q [ o + v ] || ( q [ o + v ] = [ ] ) ; for ( var s = 0 ; s < m ; s ++ ) q [ o + v ] [ k + s ] = p [ r ] . cells [ u ] } k += m - 1 } } return q } ; ( function ( ) { function t ( b ) { return CKEDITOR . env . ie ? b . $ . clientWidth : parseInt ( b . getComputedStyle ( "width" ) , 10 ) } function n ( b , i ) { var a = b . getComputedStyle ( "border-" + i + "-width" ) , g = { thin : "0px" , medium : "1px" , thick : "2px" } ; 0 > a . indexOf ( "px" ) && ( a = a in g && "none" != b . getComputedStyle ( "border-style" ) ? g [ a ] : 0 ) ; return parseInt ( a , 10 ) } function v ( b ) { var i = [ ] , a = - 1 , g = "rtl" == b . getComputedStyle ( "direction" ) , c ; c = b . $ . rows ; for ( var p = 0 , e , f , d , h = 0 , o = c . length ; h < o ; h ++ ) d = c [ h ] , e = d . cells . length , e > p && ( p = e , f = d ) ; c = f ; p = new CKEDITOR . dom . element ( b . $ . tBodies [ 0 ] ) ;
b ? m ( b , ! 0 ) : d && d . remove ( ) } else e instanceof CKEDITOR . dom . element && ( d = e . getParent ( ) , 1 == d . getChildCount ( ) ? d . remove ( ) : e . remove ( ) ) } function m ( e , d ) { var b = e . getDocument ( ) , c = CKEDITOR . document ; CKEDITOR . env . ie && 11 > CKEDITOR . env . version && ( c . focus ( ) , b . focus ( ) ) ; b = new CKEDITOR . dom . range ( b ) ; if ( ! b [ "moveToElementEdit" + ( d ? "End" : "Start" ) ] ( e ) ) b . selectNodeContents ( e ) , b . collapse ( d ? ! 1 : ! 0 ) ; b . select ( ! 0 ) } function v ( e , d , b ) { e = e [ d ] ; if ( "undefined" == typeof b ) return e ; for ( d = 0 ; e && d < e . length ; d ++ ) { if ( b . is && e [ d ] == b . $ ) return d ; if ( d == b ) return new CKEDITOR . dom . element ( e [ d ] ) } return b . is ?
- 1 : null } function s ( e , d , b ) { var c = p ( e ) , a ; if ( ( d ? 1 != c . length : 2 > c . length ) || ( a = e . getCommonAncestor ( ) ) && a . type == CKEDITOR . NODE _ELEMENT && a . is ( "table" ) ) return ! 1 ; var f , e = c [ 0 ] ; a = e . getAscendant ( "table" ) ; var g = CKEDITOR . tools . buildTableMap ( a ) , h = g . length , i = g [ 0 ] . length , j = e . getParent ( ) . $ . rowIndex , l = v ( g , j , e ) ; if ( d ) { var n ; try { var m = parseInt ( e . getAttribute ( "rowspan" ) , 10 ) || 1 ; f = parseInt ( e . getAttribute ( "colspan" ) , 10 ) || 1 ; n = g [ "up" == d ? j - m : "down" == d ? j + m : j ] [ "left" == d ? l - f : "right" == d ? l + f : l ] } catch ( z ) { return ! 1 } if ( ! n || e . $ == n ) return ! 1 ;
c [ "up" == d || "left" == d ? "unshift" : "push" ] ( new CKEDITOR . dom . element ( n ) ) } for ( var d = e . getDocument ( ) , o = j , m = n = 0 , q = ! b && new CKEDITOR . dom . documentFragment ( d ) , s = 0 , d = 0 ; d < c . length ; d ++ ) { f = c [ d ] ; var k = f . getParent ( ) , t = f . getFirst ( ) , r = f . $ . colSpan , u = f . $ . rowSpan , k = k . $ . rowIndex , w = v ( g , k , f ) , s = s + r * u , m = Math . max ( m , w - l + r ) ; n = Math . max ( n , k - j + u ) ; if ( ! b ) { r = f ; ( u = r . getBogus ( ) ) && u . remove ( ) ; r . trim ( ) ; if ( f . getChildren ( ) . count ( ) ) { if ( k != o && t && ( ! t . isBlockBoundary || ! t . isBlockBoundary ( { br : 1 } ) ) ) ( o = q . getLast ( CKEDITOR . dom . walker . whitespaces ( ! 0 ) ) ) &&
( ! o . is || ! o . is ( "br" ) ) && q . append ( "br" ) ; f . moveChildren ( q ) } d ? f . remove ( ) : f . setHtml ( "" ) } o = k } if ( b ) return n * m == s ; q . moveChildren ( e ) ; CKEDITOR . env . ie || e . appendBogus ( ) ; m >= i ? e . removeAttribute ( "rowSpan" ) : e . $ . rowSpan = n ; n >= h ? e . removeAttribute ( "colSpan" ) : e . $ . colSpan = m ; b = new CKEDITOR . dom . nodeList ( a . $ . rows ) ; c = b . count ( ) ; for ( d = c - 1 ; 0 <= d ; d -- ) a = b . getItem ( d ) , a . $ . cells . length || ( a . remove ( ) , c ++ ) ; return e } function w ( e , d ) { var b = p ( e ) ; if ( 1 < b . length ) return ! 1 ; if ( d ) return ! 0 ; var b = b [ 0 ] , c = b . getParent ( ) , a = c . getAscendant ( "table" ) , f = CKEDITOR . tools . buildTableMap ( a ) ,
g = c . $ . rowIndex , h = v ( f , g , b ) , i = b . $ . rowSpan , j ; if ( 1 < i ) { j = Math . ceil ( i / 2 ) ; for ( var i = Math . floor ( i / 2 ) , c = g + j , a = new CKEDITOR . dom . element ( a . $ . rows [ c ] ) , f = v ( f , c ) , l , c = b . clone ( ) , g = 0 ; g < f . length ; g ++ ) if ( l = f [ g ] , l . parentNode == a . $ && g > h ) { c . insertBefore ( new CKEDITOR . dom . element ( l ) ) ; break } else l = null ; l || a . append ( c , ! 0 ) } else { i = j = 1 ; a = c . clone ( ) ; a . insertAfter ( c ) ; a . append ( c = b . clone ( ) ) ; l = v ( f , g ) ; for ( h = 0 ; h < l . length ; h ++ ) l [ h ] . rowSpan ++ } CKEDITOR . env . ie || c . appendBogus ( ) ; b . $ . rowSpan = j ; c . $ . rowSpan = i ; 1 == j && b . removeAttribute ( "rowSpan" ) ; 1 ==
i && c . removeAttribute ( "rowSpan" ) ; return c } function x ( e , d ) { var b = p ( e ) ; if ( 1 < b . length ) return ! 1 ; if ( d ) return ! 0 ; var b = b [ 0 ] , c = b . getParent ( ) , a = c . getAscendant ( "table" ) , a = CKEDITOR . tools . buildTableMap ( a ) , f = v ( a , c . $ . rowIndex , b ) , g = b . $ . colSpan ; if ( 1 < g ) c = Math . ceil ( g / 2 ) , g = Math . floor ( g / 2 ) ; else { for ( var g = c = 1 , h = [ ] , i = 0 ; i < a . length ; i ++ ) { var j = a [ i ] ; h . push ( j [ f ] ) ; 1 < j [ f ] . rowSpan && ( i += j [ f ] . rowSpan - 1 ) } for ( a = 0 ; a < h . length ; a ++ ) h [ a ] . colSpan ++ } a = b . clone ( ) ; a . insertAfter ( b ) ; CKEDITOR . env . ie || a . appendBogus ( ) ; b . $ . colSpan = c ; a . $ . colSpan = g ;
1 == c && b . removeAttribute ( "colSpan" ) ; 1 == g && a . removeAttribute ( "colSpan" ) ; return a } var y = /^(?:td|th)$/ ; CKEDITOR . plugins . tabletools = { requires : "table,dialog,contextmenu" , init : function ( e ) { function d ( a ) { return CKEDITOR . tools . extend ( a || { } , { contextSensitive : 1 , refresh : function ( a , b ) { this . setState ( b . contains ( { td : 1 , th : 1 } , 1 ) ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED ) } } ) } function b ( a , b ) { var c = e . addCommand ( a , b ) ; e . addFeature ( c ) } var c = e . lang . table ; b ( "cellProperties" , new CKEDITOR . dialogCommand ( "cellProperties" ,
d ( { allowedContent : "td th{width,height,border-color,background-color,white-space,vertical-align,text-align}[colspan,rowspan]" , requiredContent : "table" } ) ) ) ; CKEDITOR . dialog . add ( "cellProperties" , this . path + "dialogs/tableCell.js" ) ; b ( "rowDelete" , d ( { requiredContent : "table" , exec : function ( a ) { a = a . getSelection ( ) ; m ( q ( a ) ) } } ) ) ; b ( "rowInsertBefore" , d ( { requiredContent : "table" , exec : function ( a ) { a = a . getSelection ( ) ; o ( a , ! 0 ) } } ) ) ; b ( "rowInsertAfter" , d ( { requiredContent : "table" , exec : function ( a ) { a = a . getSelection ( ) ; o ( a ) } } ) ) ; b ( "columnDelete" ,
d ( { requiredContent : "table" , exec : function ( a ) { for ( var a = a . getSelection ( ) , a = p ( a ) , b = a [ 0 ] , c = a [ a . length - 1 ] , a = b . getAscendant ( "table" ) , d = CKEDITOR . tools . buildTableMap ( a ) , e , j , l = [ ] , n = 0 , o = d . length ; n < o ; n ++ ) for ( var k = 0 , q = d [ n ] . length ; k < q ; k ++ ) d [ n ] [ k ] == b . $ && ( e = k ) , d [ n ] [ k ] == c . $ && ( j = k ) ; for ( n = e ; n <= j ; n ++ ) for ( k = 0 ; k < d . length ; k ++ ) c = d [ k ] , b = new CKEDITOR . dom . element ( a . $ . rows [ k ] ) , c = new CKEDITOR . dom . element ( c [ n ] ) , c . $ && ( 1 == c . $ . colSpan ? c . remove ( ) : c . $ . colSpan -= 1 , k += c . $ . rowSpan - 1 , b . $ . cells . length || l . push ( b ) ) ; j = a . $ . rows [ 0 ] && a . $ . rows [ 0 ] . cells ;
e = new CKEDITOR . dom . element ( j [ e ] || ( e ? j [ e - 1 ] : a . $ . parentNode ) ) ; l . length == o && a . remove ( ) ; e && m ( e , ! 0 ) } } ) ) ; b ( "columnInsertBefore" , d ( { requiredContent : "table" , exec : function ( a ) { a = a . getSelection ( ) ; k ( a , ! 0 ) } } ) ) ; b ( "columnInsertAfter" , d ( { requiredContent : "table" , exec : function ( a ) { a = a . getSelection ( ) ; k ( a ) } } ) ) ; b ( "cellDelete" , d ( { requiredContent : "table" , exec : function ( a ) { a = a . getSelection ( ) ; t ( a ) } } ) ) ; b ( "cellMerge" , d ( { allowedContent : "td[colspan,rowspan]" , requiredContent : "td[colspan,rowspan]" , exec : function ( a ) { m ( s ( a . getSelection ( ) ) ,
! 0 ) } } ) ) ; b ( "cellMergeRight" , d ( { allowedContent : "td[colspan]" , requiredContent : "td[colspan]" , exec : function ( a ) { m ( s ( a . getSelection ( ) , "right" ) , ! 0 ) } } ) ) ; b ( "cellMergeDown" , d ( { allowedContent : "td[rowspan]" , requiredContent : "td[rowspan]" , exec : function ( a ) { m ( s ( a . getSelection ( ) , "down" ) , ! 0 ) } } ) ) ; b ( "cellVerticalSplit" , d ( { allowedContent : "td[rowspan]" , requiredContent : "td[rowspan]" , exec : function ( a ) { m ( w ( a . getSelection ( ) ) ) } } ) ) ; b ( "cellHorizontalSplit" , d ( { allowedContent : "td[colspan]" , requiredContent : "td[colspan]" , exec : function ( a ) { m ( x ( a . getSelection ( ) ) ) } } ) ) ;
b ( "cellInsertBefore" , d ( { requiredContent : "table" , exec : function ( a ) { a = a . getSelection ( ) ; u ( a , ! 0 ) } } ) ) ; b ( "cellInsertAfter" , d ( { requiredContent : "table" , exec : function ( a ) { a = a . getSelection ( ) ; u ( a ) } } ) ) ; e . addMenuItems && e . addMenuItems ( { tablecell : { label : c . cell . menu , group : "tablecell" , order : 1 , getItems : function ( ) { var a = e . getSelection ( ) , b = p ( a ) ; return { tablecell _insertBefore : CKEDITOR . TRISTATE _OFF , tablecell _insertAfter : CKEDITOR . TRISTATE _OFF , tablecell _delete : CKEDITOR . TRISTATE _OFF , tablecell _merge : s ( a , null , ! 0 ) ? CKEDITOR . TRISTATE _OFF :
CKEDITOR . TRISTATE _DISABLED , tablecell _merge _right : s ( a , "right" , ! 0 ) ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED , tablecell _merge _down : s ( a , "down" , ! 0 ) ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED , tablecell _split _vertical : w ( a , ! 0 ) ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED , tablecell _split _horizontal : x ( a , ! 0 ) ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED , tablecell _properties : 0 < b . length ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED } } } , tablecell _insertBefore : { label : c . cell . insertBefore , group : "tablecell" ,
command : "cellInsertBefore" , order : 5 } , tablecell _insertAfter : { label : c . cell . insertAfter , group : "tablecell" , command : "cellInsertAfter" , order : 10 } , tablecell _delete : { label : c . cell . deleteCell , group : "tablecell" , command : "cellDelete" , order : 15 } , tablecell _merge : { label : c . cell . merge , group : "tablecell" , command : "cellMerge" , order : 16 } , tablecell _merge _right : { label : c . cell . mergeRight , group : "tablecell" , command : "cellMergeRight" , order : 17 } , tablecell _merge _down : { label : c . cell . mergeDown , group : "tablecell" , command : "cellMergeDown" , order : 18 } ,
tablecell _split _horizontal : { label : c . cell . splitHorizontal , group : "tablecell" , command : "cellHorizontalSplit" , order : 19 } , tablecell _split _vertical : { label : c . cell . splitVertical , group : "tablecell" , command : "cellVerticalSplit" , order : 20 } , tablecell _properties : { label : c . cell . title , group : "tablecellproperties" , command : "cellProperties" , order : 21 } , tablerow : { label : c . row . menu , group : "tablerow" , order : 1 , getItems : function ( ) { return { tablerow _insertBefore : CKEDITOR . TRISTATE _OFF , tablerow _insertAfter : CKEDITOR . TRISTATE _OFF , tablerow _delete : CKEDITOR . TRISTATE _OFF } } } ,
tablerow _insertBefore : { label : c . row . insertBefore , group : "tablerow" , command : "rowInsertBefore" , order : 5 } , tablerow _insertAfter : { label : c . row . insertAfter , group : "tablerow" , command : "rowInsertAfter" , order : 10 } , tablerow _delete : { label : c . row . deleteRow , group : "tablerow" , command : "rowDelete" , order : 15 } , tablecolumn : { label : c . column . menu , group : "tablecolumn" , order : 1 , getItems : function ( ) { return { tablecolumn _insertBefore : CKEDITOR . TRISTATE _OFF , tablecolumn _insertAfter : CKEDITOR . TRISTATE _OFF , tablecolumn _delete : CKEDITOR . TRISTATE _OFF } } } ,
tablecolumn _insertBefore : { label : c . column . insertBefore , group : "tablecolumn" , command : "columnInsertBefore" , order : 5 } , tablecolumn _insertAfter : { label : c . column . insertAfter , group : "tablecolumn" , command : "columnInsertAfter" , order : 10 } , tablecolumn _delete : { label : c . column . deleteColumn , group : "tablecolumn" , command : "columnDelete" , order : 15 } } ) ; e . contextMenu && e . contextMenu . addListener ( function ( a , b , c ) { return ( a = c . contains ( { td : 1 , th : 1 } , 1 ) ) && ! a . isReadOnly ( ) ? { tablecell : CKEDITOR . TRISTATE _OFF , tablerow : CKEDITOR . TRISTATE _OFF , tablecolumn : CKEDITOR . TRISTATE _OFF } :
null } ) } , getSelectedCells : p } ; CKEDITOR . plugins . add ( "tabletools" , CKEDITOR . plugins . tabletools ) } ) ( ) ; CKEDITOR . tools . buildTableMap = function ( p ) { for ( var p = p . $ . rows , o = - 1 , q = [ ] , r = 0 ; r < p . length ; r ++ ) { o ++ ; ! q [ o ] && ( q [ o ] = [ ] ) ; for ( var k = - 1 , u = 0 ; u < p [ r ] . cells . length ; u ++ ) { var t = p [ r ] . cells [ u ] ; for ( k ++ ; q [ o ] [ k ] ; ) k ++ ; for ( var m = isNaN ( t . colSpan ) ? 1 : t . colSpan , t = isNaN ( t . rowSpan ) ? 1 : t . rowSpan , v = 0 ; v < t ; v ++ ) { q [ o + v ] || ( q [ o + v ] = [ ] ) ; for ( var s = 0 ; s < m ; s ++ ) q [ o + v ] [ k + s ] = p [ r ] . cells [ u ] } k += m - 1 } } return q } ; ( function ( ) { function t ( b ) { return CKEDITOR . env . ie ? b . $ . clientWidth : parseInt ( b . getComputedStyle ( "width" ) , 10 ) } function n ( b , i ) { var a = b . getComputedStyle ( "border-" + i + "-width" ) , g = { thin : "0px" , medium : "1px" , thick : "2px" } ; 0 > a . indexOf ( "px" ) && ( a = a in g && "none" != b . getComputedStyle ( "border-style" ) ? g [ a ] : 0 ) ; return parseInt ( a , 10 ) } function v ( b ) { var i = [ ] , a = - 1 , g = "rtl" == b . getComputedStyle ( "direction" ) , c ; c = b . $ . rows ; for ( var p = 0 , e , f , d , h = 0 , o = c . length ; h < o ; h ++ ) d = c [ h ] , e = d . cells . length , e > p && ( p = e , f = d ) ; c = f ; p = new CKEDITOR . dom . element ( b . $ . tBodies [ 0 ] ) ;
e = p . getDocumentPosition ( ) ; f = 0 ; for ( d = c . cells . length ; f < d ; f ++ ) { var h = new CKEDITOR . dom . element ( c . cells [ f ] ) , o = c . cells [ f + 1 ] && new CKEDITOR . dom . element ( c . cells [ f + 1 ] ) , a = a + ( h . $ . colSpan || 1 ) , k , j , l = h . getDocumentPosition ( ) . x ; g ? j = l + n ( h , "left" ) : k = l + h . $ . offsetWidth - n ( h , "right" ) ; o ? ( l = o . getDocumentPosition ( ) . x , g ? k = l + o . $ . offsetWidth - n ( o , "right" ) : j = l + n ( o , "left" ) ) : ( l = b . getDocumentPosition ( ) . x , g ? k = l : j = l + b . $ . offsetWidth ) ; h = Math . max ( j - k , 3 ) ; i . push ( { table : b , index : a , x : k , y : e . y , width : h , height : p . $ . offsetHeight , rtl : g } ) } return i }
function u ( b ) { ( b . data || b ) . preventDefault ( ) } function z ( b ) { function i ( ) { h = 0 ; d . setOpacity ( 0 ) ; k && a ( ) ; var A = e . table ; setTimeout ( function ( ) { A . removeCustomData ( "_cke_table_pillars" ) } , 0 ) ; f . removeListener ( "dragstart" , u ) } function a ( ) { for ( var a = e . rtl , b = a ? l . length : w . length , d = 0 ; d < b ; d ++ ) { var c = w [ d ] , f = l [ d ] , g = e . table ; CKEDITOR . tools . setTimeout ( function ( b , d , c , e , f , h ) { b && b . setStyle ( "width" , j ( Math . max ( d + h , 0 ) ) ) ; c && c . setStyle ( "width" , j ( Math . max ( e - h , 0 ) ) ) ; f && g . setStyle ( "width" , j ( f + h * ( a ? - 1 : 1 ) ) ) } , 0 , this , [ c , c && t ( c ) , f , f && t ( f ) ,
( ! c || ! f ) && t ( g ) + n ( g , "left" ) + n ( g , "right" ) , k ] ) } } function g ( a ) { u ( a ) ; for ( var a = e . index , b = CKEDITOR . tools . buildTableMap ( e . table ) , g = [ ] , i = [ ] , j = Number . MAX _VALUE , n = j , s = e . rtl , r = 0 , v = b . length ; r < v ; r ++ ) { var m = b [ r ] , q = m [ a + ( s ? 1 : 0 ) ] , m = m [ a + ( s ? 0 : 1 ) ] , q = q && new CKEDITOR . dom . element ( q ) , m = m && new CKEDITOR . dom . element ( m ) ; if ( ! q || ! m || ! q . equals ( m ) ) q && ( j = Math . min ( j , t ( q ) ) ) , m && ( n = Math . min ( n , t ( m ) ) ) , g . push ( q ) , i . push ( m ) } w = g ; l = i ; x = e . x - j ; y = e . x + n ; d . setOpacity ( 0.5 ) ; o = parseInt ( d . getStyle ( "left" ) , 10 ) ; k = 0 ; h = 1 ; d . on ( "mousemove" , p ) ; f . on ( "dragstart" ,