2021-12-24 10:17:17 +08:00
/ * !
* UEditor
* version : ueditor
* build : Wed Dec 26 2018 17 : 24 : 52 GMT + 0800 ( CST )
* /
2022-02-25 10:39:13 +08:00
! function ( ) { function getListener ( a , b , c ) { var d ; return b = b . toLowerCase ( ) , ( d = a . _ _allListeners || c && ( a . _ _allListeners = { } ) ) && ( d [ b ] || c && ( d [ b ] = [ ] ) ) } function getDomNode ( a , b , c , d , e , f ) { var g , h = d && a [ b ] ; for ( ! h && ( h = a [ c ] ) ; ! h && ( g = ( g || a ) . parentNode ) ; ) { if ( "BODY" == g . tagName || f && ! f ( g ) ) return null ; h = g [ c ] } return h && e && ! e ( h ) ? getDomNode ( h , b , c , ! 1 , e ) : h } UEDITOR _CONFIG = window . UEDITOR _CONFIG || { } ; var baidu = window . baidu || { } ; window . baidu = baidu , window . UE = baidu . editor = window . UE || { } , UE . plugins = { } , UE . commands = { } , UE . instants = { } , UE . I18N = { } , UE . _customizeUI = { } , UE . version = "1.4.3" ; var dom = UE . dom = { } , browser = UE . browser = function ( ) { var a = navigator . userAgent . toLowerCase ( ) , b = window . opera , c = { ie : /(msie\s|trident.*rv:)([\w.]+)/ . test ( a ) , opera : ! ! b && b . version , webkit : a . indexOf ( " applewebkit/" ) > - 1 , mac : a . indexOf ( "macintosh" ) > - 1 , quirks : "BackCompat" == document . compatMode } ; c . gecko = "Gecko" == navigator . product && ! c . webkit && ! c . opera && ! c . ie ; var d = 0 ; if ( c . ie ) { var e = a . match ( /(?:msie\s([\w.]+))/ ) , f = a . match ( /(?:trident.*rv:([\w.]+))/ ) ; d = e && f && e [ 1 ] && f [ 1 ] ? Math . max ( 1 * e [ 1 ] , 1 * f [ 1 ] ) : e && e [ 1 ] ? 1 * e [ 1 ] : f && f [ 1 ] ? 1 * f [ 1 ] : 0 , c . ie11Compat = 11 == document . documentMode , c . ie9Compat = 9 == document . documentMode , c . ie8 = ! ! document . documentMode , c . ie8Compat = 8 == document . documentMode , c . ie7Compat = 7 == d && ! document . documentMode || 7 == document . documentMode , c . ie6Compat = d < 7 || c . quirks , c . ie9above = d > 8 , c . ie9below = d < 9 , c . ie11above = d > 10 , c . ie11below = d < 11 } if ( c . gecko ) { var g = a . match ( /rv:([\d\.]+)/ ) ; g && ( g = g [ 1 ] . split ( "." ) , d = 1e4 * g [ 0 ] + 100 * ( g [ 1 ] || 0 ) + 1 * ( g [ 2 ] || 0 ) ) } return /chrome\/(\d+\.\d)/i . test ( a ) && ( c . chrome = + RegExp . $1 ) , /(\d+\.\d)?(?:\.\d)?\s+safari\/?(\d+\.\d+)?/i . test ( a ) && ! /chrome/i . test ( a ) && ( c . safari = + ( RegExp . $1 || RegExp . $2 ) ) , c . opera && ( d = parseFloat ( b . version ( ) ) ) , c . webkit && ( d = parseFloat ( a . match ( / applewebkit\/(\d+)/ ) [ 1 ] ) ) , c . version = d , c . isCompatible = ! c . mobile && ( c . ie && d >= 6 || c . gecko && d >= 10801 || c . opera && d >= 9.5 || c . air && d >= 1 || c . webkit && d >= 522 || ! 1 ) , c } ( ) , ie = browser . ie , webkit = browser . webkit , gecko = browser . gecko , opera = browser . opera , utils = UE . utils = { each : function ( a , b , c ) { if ( null != a ) if ( a . length === + a . length ) { for ( var d = 0 , e = a . length ; d < e ; d ++ ) if ( b . call ( c , a [ d ] , d , a ) === ! 1 ) return ! 1 } else for ( var f in a ) if ( a . hasOwnProperty ( f ) && b . call ( c , a [ f ] , f , a ) === ! 1 ) return ! 1 } , makeInstance : function ( a ) { var b = new Function ; return b . prototype = a , a = new b , b . prototype = null , a } , extend : function ( a , b , c ) { if ( b ) for ( var d in b ) c && a . hasOwnProperty ( d ) || ( a [ d ] = b [ d ] ) ; return a } , extend2 : function ( a ) { for ( var b = arguments , c = 1 ; c < b . length ; c ++ ) { var d = b [ c ] ; for ( var e in d ) a . hasOwnProperty ( e ) || ( a [ e ] = d [ e ] ) } return a } , inherits : function ( a , b ) { var c = a . prototype , d = utils . makeInstance ( b . prototype ) ; return utils . extend ( d , c , ! 0 ) , a . prototype = d , d . constructor = a } , bind : function ( a , b ) { return function ( ) { return a . apply ( b , arguments ) } } , defer : function ( a , b , c ) { var d ; return function ( ) { c && clearTimeout ( d ) , d = setTimeout ( a , b ) } } , indexOf : function ( a , b , c ) { var d = - 1 ; return c = this . isNumber ( c ) ? c : 0 , this . each ( a , function ( a , e ) { if ( e >= c && a === b ) return d = e , ! 1 } ) , d } , removeItem : function ( a , b ) { for ( var c = 0 , d = a . length ; c < d ; c ++ ) a [ c ] === b && ( a . splice ( c , 1 ) , c -- ) } , trim : function ( a ) { return a . replace ( /(^[ \t\n\r]+)|([ \t\n\r]+$)/g , "" ) } , listToMap : function ( a ) { if ( ! a ) return { } ; a = utils . isArray ( a ) ? a : a . split ( "," ) ; for ( var b , c = 0 , d = { } ; b = a [ c ++ ] ; ) d [ b . toUpperCase ( ) ] = d [ b ] = 1 ; return d } , unhtml : function ( a , b ) { return a ? a . replace ( b || /[&<">'](?:(amp|lt|quot|gt|#39|nbsp|#\d+);)?/g , function ( a , b ) { return b ? a : { "<" : "<" , "&" : "&" , '"' : """ , ">" : ">" , "'" : "'" } [ a ] } ) : "" } , unhtmlForUrl : function ( a , b ) { return a ? a . replace ( b || /[<">']/g , function ( a ) { return { "<" : "<" , "&" : "&" , '"' : """ , ">" : ">" , "'" : "'" } [ a ] } ) : "" } , html : function ( a ) { return a ? a . replace ( /&((g|l|quo)t|amp|#39|nbsp);/g , function ( a ) { return { "<" : "<" , "&" : "&" , """ : '"' , ">" : ">" , "'" : "'" , " " : " " } [ a ] } ) : "" } , cssStyleToDomStyle : function ( ) { var a = document . createElement ( "div" ) . style , b = { "float" : void 0 != a . cssFloat ? "cssFloat" : void 0 != a . styleFloat ? "styleFloat" : "float" } ; return function ( a ) { return b [ a ] || ( b [ a ] = a . toLowerCase ( ) . replace ( /-./g , function ( a ) { return a . charAt ( 1 ) . toUpperCase ( ) } ) ) } } ( ) , loadFile : function ( ) { function a ( a , c ) { try { for ( var d , e = 0 ; d = b [ e ++ ] ; ) if ( d . doc === a && d . url == ( c . src || c . href ) ) return d } catch ( f ) { return null } } var b = [ ] ; return function ( c , d , e ) { v
} } catch ( d ) { } } function f ( a , b ) { var c ; for ( a = a [ b ] ; a && domUtils . isFillChar ( a ) ; ) c = a [ b ] , domUtils . remove ( a ) , a = c } var g , h = 0 , i = domUtils . fillChar , j = dom . Range = function ( a ) { var b = this ; b . startContainer = b . startOffset = b . endContainer = b . endOffset = null , b . document = a , b . collapsed = ! 0 } ; j . prototype = { cloneContents : function ( ) { return this . collapsed ? null : d ( this , 0 ) } , deleteContents : function ( ) { var a ; return this . collapsed || d ( this , 1 ) , browser . webkit && ( a = this . startContainer , 3 != a . nodeType || a . nodeValue . length || ( this . setStartBefore ( a ) . collapse ( ! 0 ) , domUtils . remove ( a ) ) ) , this } , extractContents : function ( ) { return this . collapsed ? null : d ( this , 2 ) } , setStart : function ( a , b ) { return c ( ! 0 , a , b , this ) } , setEnd : function ( a , b ) { return c ( ! 1 , a , b , this ) } , setStartAfter : function ( a ) { return this . setStart ( a . parentNode , domUtils . getNodeIndex ( a ) + 1 ) } , setStartBefore : function ( a ) { return this . setStart ( a . parentNode , domUtils . getNodeIndex ( a ) ) } , setEndAfter : function ( a ) { return this . setEnd ( a . parentNode , domUtils . getNodeIndex ( a ) + 1 ) } , setEndBefore : function ( a ) { return this . setEnd ( a . parentNode , domUtils . getNodeIndex ( a ) ) } , setStartAtFirst : function ( a ) { return this . setStart ( a , 0 ) } , setStartAtLast : function ( a ) { return this . setStart ( a , 3 == a . nodeType ? a . nodeValue . length : a . childNodes . length ) } , setEndAtFirst : function ( a ) { return this . setEnd ( a , 0 ) } , setEndAtLast : function ( a ) { return this . setEnd ( a , 3 == a . nodeType ? a . nodeValue . length : a . childNodes . length ) } , selectNode : function ( a ) { return this . setStartBefore ( a ) . setEndAfter ( a ) } , selectNodeContents : function ( a ) { return this . setStart ( a , 0 ) . setEndAtLast ( a ) } , cloneRange : function ( ) { var a = this ; return new j ( a . document ) . setStart ( a . startContainer , a . startOffset ) . setEnd ( a . endContainer , a . endOffset ) } , collapse : function ( a ) { var b = this ; return a ? ( b . endContainer = b . startContainer , b . endOffset = b . startOffset ) : ( b . startContainer = b . endContainer , b . startOffset = b . endOffset ) , b . collapsed = ! 0 , b } , shrinkBoundary : function ( a ) { function b ( a ) { return 1 == a . nodeType && ! domUtils . isBookmarkNode ( a ) && ! dtd . $empty [ a . tagName ] && ! dtd . $nonChild [ a . tagName ] } for ( var c , d = this , e = d . collapsed ; 1 == d . startContainer . nodeType && ( c = d . startContainer . childNodes [ d . startOffset ] ) && b ( c ) ; ) d . setStart ( c , 0 ) ; if ( e ) return d . collapse ( ! 0 ) ; if ( ! a ) for ( ; 1 == d . endContainer . nodeType && d . endOffset > 0 && ( c = d . endContainer . childNodes [ d . endOffset - 1 ] ) && b ( c ) ; ) d . setEnd ( c , c . childNodes . length ) ; return d } , getCommonAncestor : function ( a , c ) { var d = this , e = d . startContainer , f = d . endContainer ; return e === f ? a && b ( this ) && ( e = e . childNodes [ d . startOffset ] , 1 == e . nodeType ) ? e : c && 3 == e . nodeType ? e . parentNode : e : domUtils . getCommonAncestor ( e , f ) } , trimBoundary : function ( a ) { this . txtToElmBoundary ( ) ; var b = this . startContainer , c = this . startOffset , d = this . collapsed , e = this . endContainer ; if ( 3 == b . nodeType ) { if ( 0 == c ) this . setStartBefore ( b ) ; else if ( c >= b . nodeValue . length ) this . setStartAfter ( b ) ; else { var f = domUtils . split ( b , c ) ; b === e ? this . setEnd ( f , this . endOffset - c ) : b . parentNode === e && ( this . endOffset += 1 ) , this . setStartBefore ( f ) } if ( d ) return this . collapse ( ! 0 ) } return a || ( c = this . endOffset , e = this . endContainer , 3 == e . nodeType && ( 0 == c ? this . setEndBefore ( e ) : ( c < e . nodeValue . length && domUtils . split ( e , c ) , this . setEndAfter ( e ) ) ) ) , this } , txtToElmBoundary : function ( a ) { function b ( a , b ) { var c = a [ b + "Container" ] , d = a [ b + "Offset" ] ; 3 == c . nodeType && ( d ? d >= c . nodeValue . length && a [ "set" + b . replace ( /(\w)/ , function ( a ) { return a . toUpperCase ( ) } ) + "After" ] ( c ) : a [ "set" + b . replace ( /(\w)/ , function ( a ) { return a . toUpperCase ( ) } ) + "Before" ] ( c ) ) } return ! a && this . collapsed || ( b ( this , "start" ) , b ( this , "end" ) ) , this } , insertNode : function ( a ) { var b = a , c = 1 ; 11 == a . nodeType && ( b = a . firstChild , c = a . childNodes . length ) , this . trimBoundary ( ! 0 ) ; var d = this . startContainer , e = this . startOffset , f = d . childNodes [ e ] ; return f ? d . insertBefore ( a , f ) : d . appendChild ( a ) , b . parentNode === this . endContainer && ( this . endOffset = this . endOffset + c ) , this . setStartBefore ( b ) } , setCursor : function ( a , b ) { return this . collapse ( ! a ) . select ( b ) } , createBookmark : function ( a , b ) { var c , d = this . document . createElement ( "span" ) ; return d . style . cssText = "display:none;line-height:0px;" , d . appendChild ( this . document . createTextNode ( " " ) ) , d . id = "_baidu_bookmark_start_" + ( b ? "" : h ++ ) , this . collapsed || ( c = d . cloneNode ( ! 0 ) , c . id = "_baidu_bookmark_end_" + ( b ? "" : h ++ ) ) , this . insertNode ( d ) , c && this . collapse ( ) . insertNode ( c ) . setEndBe
} , setHide : function ( ) { var a = this ; a . lastBk || ( a . lastBk = a . selection . getRange ( ) . createBookmark ( ! 0 ) ) , a . container . style . display = "none" } , hide : function ( ) { return this . setHide ( ) } , getLang : function ( a ) { if ( ! this . options ) return "" ; var b = UE . I18N [ this . options . lang ] ; if ( ! b ) throw Error ( "not import language file" ) ; a = ( a || "" ) . split ( "." ) ; for ( var c , d = 0 ; ( c = a [ d ++ ] ) && ( b = b [ c ] , b ) ; ) ; return b } , getContentLength : function ( a , b ) { var c = this . getContent ( ! 1 , ! 1 , ! 0 ) . length ; if ( a ) { b = ( b || [ ] ) . concat ( [ "hr" , "img" , "iframe" ] ) , c = this . getContentTxt ( ) . replace ( /[\t\r\n]+/g , "" ) . length ; for ( var d , e = 0 ; d = b [ e ++ ] ; ) c += this . document . getElementsByTagName ( d ) . length } return c } , addInputRule : function ( a ) { this . inputRules . push ( a ) } , filterInputRule : function ( a ) { for ( var b , c = 0 ; b = this . inputRules [ c ++ ] ; ) b . call ( this , a ) } , addOutputRule : function ( a ) { this . outputRules . push ( a ) } , filterOutputRule : function ( a ) { for ( var b , c = 0 ; b = this . outputRules [ c ++ ] ; ) b . call ( this , a ) } , getActionUrl : function ( a ) { var b = this . getOpt ( a ) || a , c = this . getOpt ( "imageUrl" ) , d = this . getOpt ( "serverUrl" ) ; return ! d && c && ( d = c . replace ( /^(.*[\/]).+([\.].+)$/ , "$1controller$2" ) ) , d ? ( d = d + ( d . indexOf ( "?" ) == - 1 ? "?" : "&" ) + "action=" + ( b || "" ) , utils . formatUrl ( d ) ) : "" } } , utils . inherits ( f , EventBase ) } ( ) , UE . Editor . defaultOptions = function ( a ) { var b = a . options . UEDITOR _HOME _URL ; return { isShow : ! 0 , initialContent : "" , initialStyle : "" , autoClearinitialContent : ! 1 , iframeCssUrl : b + "themes/iframe.css" , textarea : "editorValue" , focus : ! 1 , focusInEnd : ! 0 , autoClearEmptyNode : ! 0 , fullscreen : ! 1 , readonly : ! 1 , zIndex : 999 , imagePopup : ! 0 , enterTag : "p" , customDomain : ! 1 , lang : "zh-cn" , langPath : b + "lang/" , theme : "default" , themePath : b + "themes/" , allHtmlEnabled : ! 1 , scaleEnabled : ! 1 , tableNativeEditInFF : ! 1 , autoSyncData : ! 0 , fileNameFormat : "{time}{rand:6}" } } , function ( ) { UE . Editor . prototype . loadServerConfig = function ( ) { function showErrorMsg ( a ) { console && console . error ( a ) } var me = this ; setTimeout ( function ( ) { try { me . options . imageUrl && me . setOpt ( "serverUrl" , me . options . imageUrl . replace ( /^(.*[\/]).+([\.].+)$/ , "$1controller$2" ) ) ; var configUrl = me . getActionUrl ( "config" ) , isJsonp = utils . isCrossDomainUrl ( configUrl ) ; me . _serverConfigLoaded = ! 1 , configUrl && UE . ajax . request ( configUrl , { method : "GET" , dataType : isJsonp ? "jsonp" : "" , onsuccess : function ( r ) { try { var config = isJsonp ? r : eval ( "(" + r . responseText + ")" ) ; utils . extend ( me . options , config ) , me . fireEvent ( "serverConfigLoaded" ) , me . _serverConfigLoaded = ! 0 } catch ( e ) { showErrorMsg ( me . getLang ( "loadconfigFormatError" ) ) } } , onerror : function ( ) { showErrorMsg ( me . getLang ( "loadconfigHttpError" ) ) } } ) } catch ( e ) { showErrorMsg ( me . getLang ( "loadconfigError" ) ) } } ) } , UE . Editor . prototype . isServerConfigLoaded = function ( ) { var a = this ; return a . _serverConfigLoaded || ! 1 } , UE . Editor . prototype . afterConfigReady = function ( a ) { if ( a && utils . isFunction ( a ) ) { var b = this , c = function ( ) { a . apply ( b , arguments ) , b . removeListener ( "serverConfigLoaded" , c ) } ; b . isServerConfigLoaded ( ) ? a . call ( b , "serverConfigLoaded" ) : b . addListener ( "serverConfigLoaded" , c ) } } } ( ) , UE . ajax = function ( ) { function a ( a ) { var b = [ ] ; for ( var c in a ) if ( "method" != c && "timeout" != c && "async" != c && "dataType" != c && "callback" != c && void 0 != a [ c ] && null != a [ c ] ) if ( "function" != ( typeof a [ c ] ) . toLowerCase ( ) && "object" != ( typeof a [ c ] ) . toLowerCase ( ) ) b . push ( encodeURIComponent ( c ) + "=" + encodeURIComponent ( a [ c ] ) ) ; else if ( utils . isArray ( a [ c ] ) ) for ( var d = 0 ; d < a [ c ] . length ; d ++ ) b . push ( encodeURIComponent ( c ) + "[]=" + encodeURIComponent ( a [ c ] [ d ] ) ) ; return b . join ( "&" ) } function b ( b , c ) { var d = f ( ) , e = ! 1 , g = { method : "POST" , timeout : 5e3 , async : ! 0 , data : { } , onsuccess : function ( ) { } , onerror : function ( ) { } } ; if ( "object" == typeof b && ( c = b , b = c . url ) , d && b ) { var h = c ? utils . extend ( g , c ) : g , i = a ( h ) ; utils . isEmptyObject ( h . data ) || ( i += ( i ? "&" : "" ) + a ( h . data ) ) ; var j = setTimeout ( function ( ) { 4 != d . readyState && ( e = ! 0 , d . abort ( ) , clearTimeout ( j ) ) } , h . timeout ) , k = h . method . toUpperCase ( ) , l = b + ( b . indexOf ( "?" ) == - 1 ? "?" : "&" ) + ( "POST" == k ? "" : i + "&noCache=" + + new Date ) ; d . open ( k , l , h . async ) , d . onreadystatechange = function ( ) { 4 == d . readyState && ( e || 200 != d . status ? h . onerror ( d ) : h . onsuccess ( d ) ) } , "POST" == k ? ( d . setRequestHeader ( "Content-Type" , "application/x-www-form-urlencoded" ) , d . send ( i ) ) : d . send ( null ) } } function c ( b , c ) { function d ( a , b , c ) { a . setAttribute ( "type" , "text/javascript" ) , a . setAttribute ( "defer" , "defer" ) , c && a . setAttribute ( "charset" , c ) , a . setAttribute ( " sr
getAllHtml : function ( a , b ) { var c = this . body , e = domUtils . getComputedStyle ( c , "background-image" ) , f = "" ; f = e . indexOf ( d . options . imagePath ) > 0 ? e . substring ( e . indexOf ( d . options . imagePath ) , e . length - 1 ) . replace ( /"|\(|\)/gi , "" ) : "none" != e ? e . replace ( /url\("?|"?\)/gi , "" ) : "" ; var g = '<style type="text/css">body{' , h = { "background-color" : domUtils . getComputedStyle ( c , "background-color" ) || "#ffffff" , "background-image" : f ? "url(" + f + ")" : "" , "background-repeat" : domUtils . getComputedStyle ( c , "background-repeat" ) || "" , "background-position" : browser . ie ? domUtils . getComputedStyle ( c , "background-position-x" ) + " " + domUtils . getComputedStyle ( c , "background-position-y" ) : domUtils . getComputedStyle ( c , "background-position" ) , height : domUtils . getComputedStyle ( c , "height" ) } ; for ( var i in h ) h . hasOwnProperty ( i ) && ( g += i + ":" + h [ i ] + "; " ) ; g += "}</style> " , b . push ( g ) } , aftersetcontent : function ( ) { 0 == c && b ( ) } } , inputRule : function ( d ) { c = ! 1 , utils . each ( d . getNodesByTagName ( "p" ) , function ( d ) { var e = d . getAttr ( "data-background" ) ; e && ( c = ! 0 , b ( a ( e ) ) , d . parentNode . removeChild ( d ) ) } ) } , outputRule : function ( a ) { var b = this , c = ( utils . cssRule ( e , b . document ) || "" ) . replace ( /[\n\r]+/g , "" ) . match ( f ) ; c && a . appendChild ( UE . uNode . createElement ( '<p style="display:none;" data-background="' + utils . trim ( c [ 1 ] . replace ( /"/g , "" ) . replace ( /[\s]+/g , " " ) ) + '"><br/></p>' ) ) } , commands : { background : { execCommand : function ( a , c ) { b ( c ) } , queryCommandValue : function ( ) { var b = this , c = ( utils . cssRule ( e , b . document ) || "" ) . replace ( /[\n\r]+/g , "" ) . match ( f ) ; return c ? a ( c [ 1 ] ) : null } , notNeedUndo : ! 0 } } } } ) , UE . commands . imagefloat = { execCommand : function ( a , b ) { var c = this , d = c . selection . getRange ( ) ; if ( ! d . collapsed ) { var e = d . getClosedNode ( ) ; if ( e && "IMG" == e . tagName ) switch ( b ) { case "left" : case "right" : case "none" : for ( var f , g , h , i = e . parentNode ; dtd . $inline [ i . tagName ] || "A" == i . tagName ; ) i = i . parentNode ; if ( f = i , "P" == f . tagName && "center" == domUtils . getStyle ( f , "text-align" ) ) { if ( ! domUtils . isBody ( f ) && 1 == domUtils . getChildCount ( f , function ( a ) { return ! domUtils . isBr ( a ) && ! domUtils . isWhitespace ( a ) } ) ) if ( g = f . previousSibling , h = f . nextSibling , g && h && 1 == g . nodeType && 1 == h . nodeType && g . tagName == h . tagName && domUtils . isBlockElm ( g ) ) { for ( g . appendChild ( f . firstChild ) ; h . firstChild ; ) g . appendChild ( h . firstChild ) ; domUtils . remove ( f ) , domUtils . remove ( h ) } else domUtils . setStyle ( f , "text-align" , "" ) ; d . selectNode ( e ) . select ( ) } domUtils . setStyle ( e , "float" , "none" == b ? "" : b ) , "none" == b && domUtils . removeAttributes ( e , "align" ) ; break ; case "center" : if ( "center" != c . queryCommandValue ( "imagefloat" ) ) { for ( i = e . parentNode , domUtils . setStyle ( e , "float" , "" ) , domUtils . removeAttributes ( e , "align" ) , f = e ; i && 1 == domUtils . getChildCount ( i , function ( a ) { return ! domUtils . isBr ( a ) && ! domUtils . isWhitespace ( a ) } ) && ( dtd . $inline [ i . tagName ] || "A" == i . tagName ) ; ) f = i , i = i . parentNode ; d . setStartBefore ( f ) . setCursor ( ! 1 ) , i = c . document . createElement ( "div" ) , i . appendChild ( f ) , domUtils . setStyle ( f , "float" , "" ) , c . execCommand ( "insertHtml" , '<p id="_img_parent_tmp" style="text-align:center">' + i . innerHTML + "</p>" ) , f = c . document . getElementById ( "_img_parent_tmp" ) , f . removeAttribute ( "id" ) , f = f . firstChild , d . selectNode ( f ) . select ( ) , h = f . parentNode . nextSibling , h && domUtils . isEmptyNode ( h ) && domUtils . remove ( h ) } } } } , queryCommandValue : function ( ) { var a , b , c = this . selection . getRange ( ) ; return c . collapsed ? "none" : ( a = c . getClosedNode ( ) , a && 1 == a . nodeType && "IMG" == a . tagName ? ( b = domUtils . getComputedStyle ( a , "float" ) || a . getAttribute ( "align" ) , "none" == b && ( b = "center" == domUtils . getComputedStyle ( a . parentNode , "text-align" ) ? "center" : b ) , { left : 1 , right : 1 , center : 1 } [ b ] ? b : "none" ) : "none" ) } , queryCommandState : function ( ) { var a , b = this . selection . getRange ( ) ; return b . collapsed ? - 1 : ( a = b . getClosedNode ( ) , a && 1 == a . nodeType && "IMG" == a . tagName ? 0 : - 1 ) } } , UE . commands . insertimage = { execCommand : function ( a , b ) { function c ( a ) { utils . each ( "width,height,border,hspace,vspace" . split ( "," ) , function ( b ) { a [ b ] && ( a [ b ] = parseInt ( a [ b ] , 10 ) || 0 ) } ) , utils . each ( "src,_src" . split ( "," ) , function ( b ) { a [ b ] && ( a [ b ] = utils . unhtmlForUrl ( a [ b ] ) ) } ) , utils . each ( "title,alt" . split ( "," ) , function ( b ) { a [ b ] && ( a [ b ] = utils . unhtml ( a [ b ] ) ) } ) } if ( b = utils . isArray ( b ) ? b : [ b ] , b . length ) { var d = this , e = d . selection . getRange ( ) , f = e . getClosedNode ( ) ; if ( d . fireEvent ( "beforeinsertimage" , b ) !== ! 0 ) { if ( ! f || ! /img/i . test ( f . tagName ) || "edui-faked-video" == f . className && f . className
var e = d . nextSibling ; e || browser . ie && ! ( browser . version > 10 ) ? b . setStartAfter ( d ) : b . insertNode ( d . cloneNode ( ! 1 ) ) , c = d . previousSibling ; for ( var f ; c ; ) if ( f = c , c = c . previousSibling , ! c || "BR" == c . nodeName ) { c = f ; break } if ( c ) { for ( var g = "" ; c && "BR" != c . nodeName && new RegExp ( "^[\\s" + domUtils . fillChar + "]*$" ) . test ( c . nodeValue ) ; ) g += c . nodeValue , c = c . nextSibling ; if ( "BR" != c . nodeName ) { var h = c . nodeValue . match ( new RegExp ( "^([\\s" + domUtils . fillChar + "]+)" ) ) ; h && h [ 1 ] && ( g += h [ 1 ] ) } g && ( g = a . document . createTextNode ( g ) , b . insertNode ( g ) . setStartAfter ( g ) ) } b . collapse ( ! 0 ) . select ( ! 0 ) } else if ( browser . version > 8 ) { var i = a . document . createTextNode ( "\n" ) , j = b . startContainer ; if ( 0 == b . startOffset ) { var k = j . previousSibling ; if ( k ) { b . insertNode ( i ) ; var l = a . document . createTextNode ( " " ) ; b . setStartAfter ( i ) . insertNode ( l ) . setStart ( l , 0 ) . collapse ( ! 0 ) . select ( ! 0 ) } } else { b . insertNode ( i ) . setStartAfter ( i ) ; var l = a . document . createTextNode ( " " ) ; j = b . startContainer . childNodes [ b . startOffset ] , j && ! /^\n/ . test ( j . nodeValue ) && b . setStartBefore ( i ) , b . insertNode ( l ) . setStart ( l , 0 ) . collapse ( ! 0 ) . select ( ! 0 ) } } else { var d = a . document . createElement ( "br" ) ; b . insertNode ( d ) , b . insertNode ( a . document . createTextNode ( domUtils . fillChar ) ) , b . setStartAfter ( d ) , c = d . previousSibling ; for ( var f ; c ; ) if ( f = c , c = c . previousSibling , ! c || "BR" == c . nodeName ) { c = f ; break } if ( c ) { for ( var g = "" ; c && "BR" != c . nodeName && new RegExp ( "^[ " + domUtils . fillChar + "]*$" ) . test ( c . nodeValue ) ; ) g += c . nodeValue , c = c . nextSibling ; if ( "BR" != c . nodeName ) { var h = c . nodeValue . match ( new RegExp ( "^([ " + domUtils . fillChar + "]+)" ) ) ; h && h [ 1 ] && ( g += h [ 1 ] ) } g = a . document . createTextNode ( g ) , b . insertNode ( g ) . setStartAfter ( g ) } b . collapse ( ! 0 ) . select ( ) } return a . fireEvent ( "saveScene" ) , ! 0 } } ) , a . addListener ( "tabkeydown" , function ( b , c ) { var d = a . selection . getRange ( ) , e = domUtils . findParentByTagName ( d . startContainer , "pre" , ! 0 ) ; if ( e ) { if ( a . fireEvent ( "saveScene" ) , c . shiftKey ) ; else if ( d . collapsed ) { var f = a . document . createTextNode ( " " ) ; d . insertNode ( f ) . setStartAfter ( f ) . collapse ( ! 0 ) . select ( ! 0 ) } else { for ( var g = d . createBookmark ( ) , h = g . start . previousSibling ; h ; ) { if ( e . firstChild === h && ! domUtils . isBr ( h ) ) { e . insertBefore ( a . document . createTextNode ( " " ) , h ) ; break } if ( domUtils . isBr ( h ) ) { e . insertBefore ( a . document . createTextNode ( " " ) , h . nextSibling ) ; break } h = h . previousSibling } var i = g . end ; for ( h = g . start . nextSibling , e . firstChild === g . start && e . insertBefore ( a . document . createTextNode ( " " ) , h . nextSibling ) ; h && h !== i ; ) { if ( domUtils . isBr ( h ) && h . nextSibling ) { if ( h . nextSibling === i ) break ; e . insertBefore ( a . document . createTextNode ( " " ) , h . nextSibling ) } h = h . nextSibling } d . moveToBookmark ( g ) . select ( ) } return a . fireEvent ( "saveScene" ) , ! 0 } } ) , a . addListener ( "beforeinserthtml" , function ( a , b ) { var c = this , d = c . selection . getRange ( ) , e = domUtils . findParentByTagName ( d . startContainer , "pre" , ! 0 ) ; if ( e ) { d . collapsed || d . deleteContents ( ) ; var f = "" ; if ( browser . ie && browser . version > 8 ) { utils . each ( UE . filterNode ( UE . htmlparser ( b ) , c . options . filterTxtRules ) . children , function ( a ) { "element" == a . type ? "br" == a . tagName ? f += "\n" : dtd . $empty [ a . tagName ] || ( utils . each ( a . children , function ( b ) { "element" == b . type ? "br" == b . tagName ? f += "\n" : dtd . $empty [ a . tagName ] || ( f += b . innerText ( ) ) : f += b . data } ) , /\n$/ . test ( f ) || ( f += "\n" ) ) : f += a . data + "\n" , ! a . nextSibling ( ) && /\n$/ . test ( f ) && ( f = f . replace ( /\n$/ , "" ) ) } ) ; var g = c . document . createTextNode ( utils . html ( f . replace ( / /g , " " ) ) ) ; d . insertNode ( g ) . selectNode ( g ) . select ( ) } else { var h = c . document . createDocumentFragment ( ) ; utils . each ( UE . filterNode ( UE . htmlparser ( b ) , c . options . filterTxtRules ) . children , function ( a ) { "element" == a . type ? "br" == a . tagName ? h . appendChild ( c . document . createElement ( "br" ) ) : dtd . $empty [ a . tagName ] || ( utils . each ( a . children , function ( b ) { "element" == b . type ? "br" == b . tagName ? h . appendChild ( c . document . createElement ( "br" ) ) : dtd . $empty [ a . tagName ] || h . appendChild ( c . document . createTextNode ( utils . html ( b . innerText ( ) . replace ( / /g , " " ) ) ) ) : h . appendChild ( c . document . createTextNode ( utils . html ( b . data . replace ( / /g , " " ) ) ) ) } ) , "BR" != h . lastChild . nodeName && h . appendChild ( c . document . createElement ( "br" ) ) ) : h . appendChild ( c . document . createTextNode ( utils . html ( a . data . replace ( / /g , " " ) ) ) ) , a . nextSibling ( ) || "BR" != h . lastChild . nodeName || h . removeChild ( h . lastChild ) } ) , d . insertNode ( h ) . select ( ) } return ! 0 } } ) , a . addListener ( "keydown" , func
l . setStart ( s , 0 ) . setCursor ( ) ) , void c ( ) } if ( j = domUtils . findParentByTagName ( l . startContainer , "li" , ! 0 ) ) { if ( domUtils . isEmptyBlock ( j ) ) { p = l . createBookmark ( ) ; var q = j . parentNode ; if ( j !== q . lastChild ? ( domUtils . breakParent ( j , q ) , f ( j ) ) : ( q . parentNode . insertBefore ( j , q . nextSibling ) , domUtils . isEmptyNode ( q ) && domUtils . remove ( q ) ) , ! dtd . $list [ j . parentNode . tagName ] ) if ( domUtils . isBlockElm ( j . firstChild ) ) domUtils . remove ( j , ! 0 ) ; else { for ( s = h . document . createElement ( "p" ) , j . parentNode . insertBefore ( s , j ) ; j . firstChild ; ) s . appendChild ( j . firstChild ) ; domUtils . remove ( j ) } l . moveToBookmark ( p ) . select ( ) } else { var r = j . firstChild ; if ( ! r || ! domUtils . isBlockElm ( r ) ) { var s = h . document . createElement ( "p" ) ; for ( ! j . firstChild && domUtils . fillNode ( h . document , s ) ; j . firstChild ; ) s . appendChild ( j . firstChild ) ; j . appendChild ( s ) , r = s } var t = h . document . createElement ( "span" ) ; l . insertNode ( t ) , domUtils . breakParent ( t , j ) ; var u = t . nextSibling ; r = u . firstChild , r || ( s = h . document . createElement ( "p" ) , domUtils . fillNode ( h . document , s ) , u . appendChild ( s ) , r = s ) , domUtils . isEmptyNode ( r ) && ( r . innerHTML = "" , domUtils . fillNode ( h . document , r ) ) , l . setStart ( r , 0 ) . collapse ( ! 0 ) . shrinkBoundary ( ) . select ( ) , domUtils . remove ( t ) ; var v = u . previousSibling ; v && domUtils . isEmptyBlock ( v ) && ( v . innerHTML = "<p></p>" , domUtils . fillNode ( h . document , v . firstChild ) ) } c ( ) } } } if ( 8 == e && ( l = h . selection . getRange ( ) , l . collapsed && domUtils . isStartInblock ( l ) && ( o = l . cloneRange ( ) . trimBoundary ( ) , j = domUtils . findParentByTagName ( l . startContainer , "li" , ! 0 ) , j && domUtils . isStartInblock ( o ) ) ) ) { if ( m = domUtils . findParentByTagName ( l . startContainer , "p" , ! 0 ) , m && m !== j . firstChild ) { var q = domUtils . findParentByTagName ( m , [ "ol" , "ul" ] ) ; return domUtils . breakParent ( m , q ) , f ( m ) , h . fireEvent ( "contentchange" ) , l . setStart ( m , 0 ) . setCursor ( ! 1 , ! 0 ) , h . fireEvent ( "saveScene" ) , void domUtils . preventDefault ( b ) } if ( j && ( v = j . previousSibling ) ) { if ( 46 == e && j . childNodes . length ) return ; if ( dtd . $list [ v . tagName ] && ( v = v . lastChild ) , h . undoManger && h . undoManger . save ( ) , r = j . firstChild , domUtils . isBlockElm ( r ) ) if ( domUtils . isEmptyNode ( r ) ) for ( v . appendChild ( r ) , l . setStart ( r , 0 ) . setCursor ( ! 1 , ! 0 ) ; j . firstChild ; ) v . appendChild ( j . firstChild ) ; else t = h . document . createElement ( "span" ) , l . insertNode ( t ) , domUtils . isEmptyBlock ( v ) && ( v . innerHTML = "" ) , domUtils . moveChild ( j , v ) , l . setStartBefore ( t ) . collapse ( ! 0 ) . select ( ! 0 ) , domUtils . remove ( t ) ; else if ( domUtils . isEmptyNode ( j ) ) { var s = h . document . createElement ( "p" ) ; v . appendChild ( s ) , l . setStart ( s , 0 ) . setCursor ( ) } else for ( l . setEnd ( v , v . childNodes . length ) . collapse ( ) . select ( ! 0 ) ; j . firstChild ; ) v . appendChild ( j . firstChild ) ; return domUtils . remove ( j ) , h . fireEvent ( "contentchange" ) , h . fireEvent ( "saveScene" ) , void domUtils . preventDefault ( b ) } if ( j && ! j . previousSibling ) { var q = j . parentNode , p = l . createBookmark ( ) ; if ( domUtils . isTagNode ( q . parentNode , "ol ul" ) ) q . parentNode . insertBefore ( j , q ) , domUtils . isEmptyNode ( q ) && domUtils . remove ( q ) ; else { for ( ; j . firstChild ; ) q . parentNode . insertBefore ( j . firstChild , q ) ; domUtils . remove ( j ) , domUtils . isEmptyNode ( q ) && domUtils . remove ( q ) } return l . moveToBookmark ( p ) . setCursor ( ! 1 , ! 0 ) , h . fireEvent ( "contentchange" ) , h . fireEvent ( "saveScene" ) , void domUtils . preventDefault ( b ) } } } ) , h . addListener ( "keyup" , function ( a , c ) { var e = c . keyCode || c . which ; if ( 8 == e ) { var f , g = h . selection . getRange ( ) ; ( f = domUtils . findParentByTagName ( g . startContainer , [ "ol" , "ul" ] , ! 0 ) ) && d ( f , f . tagName . toLowerCase ( ) , b ( f ) || domUtils . getComputedStyle ( f , "list-style-type" ) , ! 0 ) } } ) , h . addListener ( "tabkeydown" , function ( ) { function a ( a ) { if ( h . options . maxListLevel != - 1 ) { for ( var b = a . parentNode , c = 0 ; /[ou]l/i . test ( b . tagName ) ; ) c ++ , b = b . parentNode ; if ( c >= h . options . maxListLevel ) return ! 0 } } var c = h . selection . getRange ( ) , f = domUtils . findParentByTagName ( c . startContainer , "li" , ! 0 ) ; if ( f ) { var g ; if ( ! c . collapsed ) { h . fireEvent ( "saveScene" ) , g = c . createBookmark ( ) ; for ( var i , j , l = 0 , m = domUtils . findParents ( f ) ; j = m [ l ++ ] ; ) if ( domUtils . isTagNode ( j , "ol ul" ) ) { i = j ; break } var n = f ; if ( g . end ) for ( ; n && ! ( domUtils . getPosition ( n , g . end ) & domUtils . POSITION _FOLLOWING ) ; ) if ( a ( n ) ) n = domUtils . getNextDomNode ( n , ! 1 , null , function ( a ) { return a !== i } ) ; else { var o = n . parentNode , p = h . document . createElement ( o . tagName ) , q = utils . indexOf ( k [ p . tagName ] , b ( o ) || domUtils . getComputedStyle ( o , "list-style-type" ) ) , r = q + 1 == k [ p . tagName ] . length ? 0 : q + 1 , s = k [ p . tagName ] [ r ] ; for ( e ( p , s ) , o . insertBefore ( p , n ) ; n
clearTimeout ( c ) , c = setTimeout ( function ( ) { a . call ( b ) } , 100 ) } ) ; var d ; window . onscroll = function ( ) { null === d ? d = this . scrollY : 0 == this . scrollY && 0 != d && ( b . window . scrollTo ( 0 , 0 ) , d = null ) } } ) } } , UE . plugins . autofloat = function ( ) { function a ( ) { return UE . ui ? 1 : ( alert ( g . autofloatMsg ) , 0 ) } function b ( ) { var a = document . body . style ; a . backgroundImage = 'url("about:blank")' , a . backgroundAttachment = "fixed" } function c ( ) { var a = domUtils . getXY ( k ) , b = domUtils . getComputedStyle ( k , "position" ) , c = domUtils . getComputedStyle ( k , "left" ) ; k . style . width = k . offsetWidth + "px" , k . style . zIndex = 1 * f . options . zIndex + 1 , k . parentNode . insertBefore ( q , k ) , o || p && browser . ie ? ( "absolute" != k . style . position && ( k . style . position = "absolute" ) , k . style . top = ( document . body . scrollTop || document . documentElement . scrollTop ) - l + i + "px" ) : ( browser . ie7Compat && r && ( r = ! 1 , k . style . left = domUtils . getXY ( k ) . x - document . documentElement . getBoundingClientRect ( ) . left + 2 + "px" ) , "fixed" != k . style . position && ( k . style . position = "fixed" , k . style . top = i + "px" , ( "absolute" == b || "relative" == b ) && parseFloat ( c ) && ( k . style . left = a . x + "px" ) ) ) } function d ( ) { r = ! 0 , q . parentNode && q . parentNode . removeChild ( q ) , k . style . cssText = j } function e ( ) { var a = m ( f . container ) , b = f . options . toolbarTopOffset || 0 ; a . top < 0 && a . bottom - k . offsetHeight > b ? c ( ) : d ( ) } var f = this , g = f . getLang ( ) ; f . setOpt ( { topOffset : 0 } ) ; var h = f . options . autoFloatEnabled !== ! 1 , i = f . options . topOffset ; if ( h ) { var j , k , l , m , n = UE . ui . uiUtils , o = browser . ie && browser . version <= 6 , p = browser . quirks , q = document . createElement ( "div" ) , r = ! 0 , s = utils . defer ( function ( ) { e ( ) } , browser . ie ? 200 : 100 , ! 0 ) ; f . addListener ( "destroy" , function ( ) { domUtils . un ( window , [ "scroll" , "resize" ] , e ) , f . removeListener ( "keydown" , s ) } ) , f . addListener ( "ready" , function ( ) { if ( a ( f ) ) { if ( ! f . ui ) return ; m = n . getClientRect , k = f . ui . getDom ( "toolbarbox" ) , l = m ( k ) . top , j = k . style . cssText , q . style . height = k . offsetHeight + "px" , o && b ( ) , domUtils . on ( window , [ "scroll" , "resize" ] , e ) , f . addListener ( "keydown" , s ) , f . addListener ( "beforefullscreenchange" , function ( a , b ) { b && d ( ) } ) , f . addListener ( "fullscreenchanged" , function ( a , b ) { b || e ( ) } ) , f . addListener ( "sourcemodechanged" , function ( a , b ) { setTimeout ( function ( ) { e ( ) } , 0 ) } ) , f . addListener ( "clearDoc" , function ( ) { setTimeout ( function ( ) { e ( ) } , 0 ) } ) } } ) } } , UE . plugins . video = function ( ) { function a ( a , b , d , e , f , g , h ) { a = utils . unhtmlForUrl ( a ) , f = utils . unhtml ( f ) , g = utils . unhtml ( g ) . trim ( ) , b = parseInt ( b , 10 ) || 0 , d = parseInt ( d , 10 ) || 0 ; var i ; switch ( h ) { case "image" : i = "<img " + ( e ? 'id="' + e + '"' : "" ) + ' width="' + b + '" height="' + d + '" _url="' + a + '" class="' + g . replace ( /\bvideo-js\b/ , "" ) + '" src="' + c . options . UEDITOR _HOME _URL + 'themes/default/images/spacer.gif" style="background:url(' + c . options . UEDITOR _HOME _URL + "themes/default/images/videologo.gif) no-repeat center center; border:1px solid gray;" + ( f ? "float:" + f + ";" : "" ) + '" />' ; break ; case "embed" : i = '<embed type="application/x-shockwave-flash" class="' + g + '" pluginspage="http://www.macromedia.com/go/getflashplayer" src="' + utils . html ( a ) + '" width="' + b + '" height="' + d + '"' + ( f ? ' style="float:' + f + '"' : "" ) + ' wmode="transparent" play="true" loop="false" menu="false" allowscriptaccess="never" allowfullscreen="true" >' ; break ; case "video" : var j = a . substr ( a . lastIndexOf ( "." ) + 1 ) ; "ogv" == j && ( j = "ogg" ) , i = "<video" + ( e ? ' id="' + e + '"' : "" ) + ' class="' + g + ' video-js" ' + ( f ? ' style="float:' + f + '"' : "" ) + ' controls preload="none" width="' + b + '" height="' + d + '" src="' + a + '" data-setup="{}"><source src="' + a + '" type="video/' + j + '" /></video>' } return i } function b ( b , c ) { utils . each ( b . getNodesByTagName ( c ? "img" : "embed video" ) , function ( b ) { var d = b . getAttr ( "class" ) ; if ( d && d . indexOf ( "edui-faked-video" ) != - 1 ) { var e = a ( c ? b . getAttr ( "_url" ) : b . getAttr ( "src" ) , b . getAttr ( "width" ) , b . getAttr ( "height" ) , null , b . getStyle ( "float" ) || "" , d , c ? "embed" : "image" ) ; b . parentNode . replaceChild ( UE . uNode . createElement ( e ) , b ) } if ( d && d . indexOf ( "edui-upload-video" ) != - 1 ) { var e = a ( c ? b . getAttr ( "_url" ) : b . getAttr ( "src" ) , b . getAttr ( "width" ) , b . getAttr ( "height" ) , null , b . getStyle ( "float" ) || "" , d , c ? "video" : "image" ) ; b . parentNode . replaceChild ( UE . uNode . createElement ( e ) , b ) } } ) } var c = this ; c . addOutputRule ( function ( a ) { b ( a , ! 0 ) } ) , c . addInputRule ( function ( a ) { b ( a ) } ) , c . commands . insertvideo = { execCommand : function ( b , d , e ) { d = utils . isArray ( d ) ? d : [ d ] ; for ( var f , g , h = [ ] , i = "tmpVedio" , j = 0 , k = d . length ; j < k ; j ++ ) g = d [ j ] , f = "upload" =
} , execCommand : function ( ) { var a = this . selection . getRange ( ) , b = a . createBookmark ( ! 0 ) , c = e ( this ) . cell , d = h ( c ) , f = d . getCellInfo ( c ) ; if ( d . selectedTds . length ) for ( var g = d . cellsRange , i = 0 , j = g . endColIndex - g . beginColIndex + 1 ; i < j ; i ++ ) d . insertCol ( g . endColIndex + 1 , c ) ; else d . insertCol ( f . colIndex + f . colSpan , c ) ; a . moveToBookmark ( b ) . select ( ) } } , UE . commands . deletecol = { queryCommandState : function ( ) { var a = e ( this ) ; return a . cell ? 0 : - 1 } , execCommand : function ( ) { var a = e ( this ) . cell , b = h ( a ) , c = b . cellsRange , d = b . getCellInfo ( a ) , f = b . getHSideCell ( a ) , g = b . getHSideCell ( a , ! 0 ) ; if ( utils . isEmptyObject ( c ) ) b . deleteCol ( d . colIndex ) ; else for ( var i = c . beginColIndex ; i < c . endColIndex + 1 ; i ++ ) b . deleteCol ( c . beginColIndex ) ; var j = b . table , k = this . selection . getRange ( ) ; if ( j . getElementsByTagName ( "td" ) . length ) domUtils . inDoc ( a , this . document ) ? k . setStart ( a , 0 ) . setCursor ( ! 1 , ! 0 ) : g && domUtils . inDoc ( g , this . document ) ? k . selectNodeContents ( g ) . setCursor ( ! 1 , ! 0 ) : f && domUtils . inDoc ( f , this . document ) && k . selectNodeContents ( f ) . setCursor ( ! 0 , ! 0 ) ; else { var l = j . nextSibling ; domUtils . remove ( j ) , l && k . setStart ( l , 0 ) . setCursor ( ! 1 , ! 0 ) } } } , UE . commands . splittocells = { queryCommandState : function ( ) { var a = e ( this ) , b = a . cell ; if ( ! b ) return - 1 ; var c = h ( a . table ) ; return c . selectedTds . length > 0 ? - 1 : b && ( b . colSpan > 1 || b . rowSpan > 1 ) ? 0 : - 1 } , execCommand : function ( ) { var a = this . selection . getRange ( ) , b = a . createBookmark ( ! 0 ) , c = e ( this ) . cell , d = h ( c ) ; d . splitToCells ( c ) , a . moveToBookmark ( b ) . select ( ) } } , UE . commands . splittorows = { queryCommandState : function ( ) { var a = e ( this ) , b = a . cell ; if ( ! b ) return - 1 ; var c = h ( a . table ) ; return c . selectedTds . length > 0 ? - 1 : b && b . rowSpan > 1 ? 0 : - 1 } , execCommand : function ( ) { var a = this . selection . getRange ( ) , b = a . createBookmark ( ! 0 ) , c = e ( this ) . cell , d = h ( c ) ; d . splitToRows ( c ) , a . moveToBookmark ( b ) . select ( ) } } , UE . commands . splittocols = { queryCommandState : function ( ) { var a = e ( this ) , b = a . cell ; if ( ! b ) return - 1 ; var c = h ( a . table ) ; return c . selectedTds . length > 0 ? - 1 : b && b . colSpan > 1 ? 0 : - 1 } , execCommand : function ( ) { var a = this . selection . getRange ( ) , b = a . createBookmark ( ! 0 ) , c = e ( this ) . cell , d = h ( c ) ; d . splitToCols ( c ) , a . moveToBookmark ( b ) . select ( ) } } , UE . commands . adaptbytext = UE . commands . adaptbywindow = { queryCommandState : function ( ) { return e ( this ) . table ? 0 : - 1 } , execCommand : function ( b ) { var c = e ( this ) , d = c . table ; if ( d ) if ( "adaptbywindow" == b ) a ( d , this ) ; else { var f = domUtils . getElementsByTagName ( d , "td th" ) ; utils . each ( f , function ( a ) { a . removeAttribute ( "width" ) } ) , d . removeAttribute ( "width" ) } } } , UE . commands . averagedistributecol = { queryCommandState : function ( ) { var a = f ( this ) ; return a && ( a . isFullRow ( ) || a . isFullCol ( ) ) ? 0 : - 1 } , execCommand : function ( a ) { function b ( ) { var a , b = e . table , c = 0 , f = 0 , h = g ( d , b ) ; if ( e . isFullRow ( ) ) c = b . offsetWidth , f = e . colsNum ; else for ( var i , j = e . cellsRange . beginColIndex , k = e . cellsRange . endColIndex , l = j ; l <= k ; ) i = e . selectedTds [ l ] , c += i . offsetWidth , l += i . colSpan , f += 1 ; return a = Math . ceil ( c / f ) - 2 * h . tdBorder - 2 * h . tdPadding } function c ( a ) { utils . each ( domUtils . getElementsByTagName ( e . table , "th" ) , function ( a ) { a . setAttribute ( "width" , "" ) } ) ; var b = e . isFullRow ( ) ? domUtils . getElementsByTagName ( e . table , "td" ) : e . selectedTds ; utils . each ( b , function ( b ) { 1 == b . colSpan && b . setAttribute ( "width" , a ) } ) } var d = this , e = f ( d ) ; e && e . selectedTds . length && c ( b ( ) ) } } , UE . commands . averagedistributerow = { queryCommandState : function ( ) { var a = f ( this ) ; return a ? a . selectedTds && /th/gi . test ( a . selectedTds [ 0 ] . tagName ) ? - 1 : a . isFullRow ( ) || a . isFullCol ( ) ? 0 : - 1 : - 1 } , execCommand : function ( a ) { function b ( ) { var a , b , c = 0 , f = e . table , h = g ( d , f ) , i = parseInt ( domUtils . getComputedStyle ( f . getElementsByTagName ( "td" ) [ 0 ] , "padding-top" ) ) ; if ( e . isFullCol ( ) ) { var j , k , l = domUtils . getElementsByTagName ( f , "caption" ) , m = domUtils . getElementsByTagName ( f , "th" ) ; l . length > 0 && ( j = l [ 0 ] . offsetHeight ) , m . length > 0 && ( k = m [ 0 ] . offsetHeight ) , c = f . offsetHeight - ( j || 0 ) - ( k || 0 ) , b = 0 == m . length ? e . rowsNum : e . rowsNum - 1 } else { for ( var n = e . cellsRange . beginRowIndex , o = e . cellsRange . endRowIndex , p = 0 , q = domUtils . getElementsByTagName ( f , "tr" ) , r = n ; r <= o ; r ++ ) c += q [ r ] . offsetHeight , p += 1 ; b = p } return a = browser . ie && browser . version < 9 ? Math . ceil ( c / b ) : Math . ceil ( c / b ) - 2 * h . tdBorder - 2 * i } function c ( a ) { var b = e . isFullCol ( ) ? domUtils . getElementsByTagName ( e . table , "td" ) : e . selectedTds ; utils . each ( b , function ( b ) { 1 == b . rowSpan && b . setAttribute ( "height" , a ) } ) } var d = this , e = f ( d ) ; e && e . selectedTds . length && c ( b ( ) ) } } , UE . comman
e . splice ( 0 , h . beginRowIndex ) , g = h . endRowIndex + 1 === this . rowsNum ? 0 : h . endRowIndex + 1 } else for ( var j = 0 , i = d . length ; j < i ; j ++ ) e [ j ] = d [ j ] ; var k = { reversecurrent : function ( a , b ) { return 1 } , orderbyasc : function ( a , b ) { var c = a . innerText || a . textContent , d = b . innerText || b . textContent ; return c . localeCompare ( d ) } , reversebyasc : function ( a , b ) { var c = a . innerHTML , d = b . innerHTML ; return d . localeCompare ( c ) } , orderbynum : function ( a , b ) { var c = a [ browser . ie ? "innerText" : "textContent" ] . match ( /\d+/ ) , d = b [ browser . ie ? "innerText" : "textContent" ] . match ( /\d+/ ) ; return c && ( c = + c [ 0 ] ) , d && ( d = + d [ 0 ] ) , ( c || 0 ) - ( d || 0 ) } , reversebynum : function ( a , b ) { var c = a [ browser . ie ? "innerText" : "textContent" ] . match ( /\d+/ ) , d = b [ browser . ie ? "innerText" : "textContent" ] . match ( /\d+/ ) ; return c && ( c = + c [ 0 ] ) , d && ( d = + d [ 0 ] ) , ( d || 0 ) - ( c || 0 ) } } ; c . setAttribute ( "data-sort-type" , b && "string" == typeof b && k [ b ] ? b : "" ) , f && e . splice ( 0 , 1 ) , e = utils . sort ( e , function ( c , d ) { var e ; return e = b && "function" == typeof b ? b . call ( this , c . cells [ a ] , d . cells [ a ] ) : b && "number" == typeof b ? 1 : b && "string" == typeof b && k [ b ] ? k [ b ] . call ( this , c . cells [ a ] , d . cells [ a ] ) : k . orderbyasc . call ( this , c . cells [ a ] , d . cells [ a ] ) } ) ; for ( var l = c . ownerDocument . createDocumentFragment ( ) , m = 0 , i = e . length ; m < i ; m ++ ) l . appendChild ( e [ m ] ) ; var n = c . getElementsByTagName ( "tbody" ) [ 0 ] ; g ? n . insertBefore ( l , d [ g - h . endRowIndex + h . beginRowIndex - 1 ] ) : n . appendChild ( l ) } , UE . plugins . tablesort = function ( ) { var a = this , b = UE . UETable , c = function ( a ) { return b . getUETable ( a ) } , d = function ( a ) { return b . getTableItemsByRange ( a ) } ; a . ready ( function ( ) { utils . cssRule ( "tablesort" , "table.sortEnabled tr.firstRow th,table.sortEnabled tr.firstRow td{padding-right:20px;background-repeat: no-repeat;background-position: center right; background-image:url(" + a . options . themePath + a . options . theme + "/images/sortable.png);}" , a . document ) , a . addListener ( "afterexeccommand" , function ( a , b ) { "mergeright" != b && "mergedown" != b && "mergecells" != b || this . execCommand ( "disablesort" ) } ) } ) , UE . commands . sorttable = { queryCommandState : function ( ) { var a = this , b = d ( a ) ; if ( ! b . cell ) return - 1 ; for ( var c , e = b . table , f = e . getElementsByTagName ( "td" ) , g = 0 ; c = f [ g ++ ] ; ) if ( 1 != c . rowSpan || 1 != c . colSpan ) return - 1 ; return 0 } , execCommand : function ( a , b ) { var e = this , f = e . selection . getRange ( ) , g = f . createBookmark ( ! 0 ) , h = d ( e ) , i = h . cell , j = c ( h . table ) , k = j . getCellInfo ( i ) ; j . sortTable ( k . cellIndex , b ) , f . moveToBookmark ( g ) ; try { f . select ( ) } catch ( l ) { } } } , UE . commands . enablesort = UE . commands . disablesort = { queryCommandState : function ( a ) { var b = d ( this ) . table ; if ( b && "enablesort" == a ) for ( var c = domUtils . getElementsByTagName ( b , "th td" ) , e = 0 ; e < c . length ; e ++ ) if ( c [ e ] . getAttribute ( "colspan" ) > 1 || c [ e ] . getAttribute ( "rowspan" ) > 1 ) return - 1 ; return b ? "enablesort" == a ^ "sortEnabled" != b . getAttribute ( "data-sort" ) ? - 1 : 0 : - 1 } , execCommand : function ( a ) { var b = d ( this ) . table ; b . setAttribute ( "data-sort" , "enablesort" == a ? "sortEnabled" : "sortDisabled" ) , "enablesort" == a ? domUtils . addClass ( b , "sortEnabled" ) : domUtils . removeClasses ( b , "sortEnabled" ) } } } , UE . plugins . contextmenu = function ( ) { var a = this ; if ( a . setOpt ( "enableContextMenu" , ! 0 ) , a . getOpt ( "enableContextMenu" ) !== ! 1 ) { var b , c = a . getLang ( "contextMenu" ) , d = a . options . contextMenu || [ { label : c . selectall , cmdName : "selectall" } , { label : c . cleardoc , cmdName : "cleardoc" , exec : function ( ) { confirm ( c . confirmclear ) && this . execCommand ( "cleardoc" ) } } , "-" , { label : c . unlink , cmdName : "unlink" } , "-" , { group : c . paragraph , icon : "justifyjustify" , subMenu : [ { label : c . justifyleft , cmdName : "justify" , value : "left" } , { label : c . justifyright , cmdName : "justify" , value : "right" } , { label : c . justifycenter , cmdName : "justify" , value : "center" } , { label : c . justifyjustify , cmdName : "justify" , value : "justify" } ] } , "-" , { group : c . table , icon : "table" , subMenu : [ { label : c . inserttable , cmdName : "inserttable" } , { label : c . deletetable , cmdName : "deletetable" } , "-" , { label : c . deleterow , cmdName : "deleterow" } , { label : c . deletecol , cmdName : "deletecol" } , { label : c . insertcol , cmdName : "insertcol" } , { label : c . insertcolnext , cmdName : "insertcolnext" } , { label : c . insertrow , cmdName : "insertrow" } , { label : c . insertrownext , cmdName : "insertrownext" } , "-" , { label : c . insertcaption , cmdName : "insertcaption" } , { label : c . deletecaption , cmdName : "deletecaption" } , { label : c . inserttitle , cmdName : "inserttitle" } , { label : c . deletetitle , cmdName : "deletetitle" } , { label : c . inserttitlecol , cmdName : "inserttitlecol" } , { label : c .
e . setAttribute ( "data-chart" , f . join ( ";" ) ) , domUtils . addClass ( e , "edui-charts-table" ) } , queryCommandState : function ( b , c ) { var d = domUtils . findParentByTagName ( this . selection . getRange ( ) . startContainer , "table" , ! 0 ) ; return d && a ( d ) ? 0 : - 1 } } } , inputRule : function ( a ) { utils . each ( a . getNodesByTagName ( "table" ) , function ( a ) { void 0 !== a . getAttr ( "data-chart" ) && a . setAttr ( "style" ) } ) } , outputRule : function ( a ) { utils . each ( a . getNodesByTagName ( "table" ) , function ( a ) { void 0 !== a . getAttr ( "data-chart" ) && a . setAttr ( "style" , "display: none;" ) } ) } } } ) , UE . plugin . register ( "section" , function ( ) { function a ( a ) { this . tag = "" , this . level = - 1 , this . dom = null , this . nextSection = null , this . previousSection = null , this . parentSection = null , this . startAddress = [ ] , this . endAddress = [ ] , this . children = [ ] } function b ( b ) { var c = new a ; return utils . extend ( c , b ) } function c ( a , b ) { for ( var c = b , d = 0 ; d < a . length ; d ++ ) { if ( ! c . childNodes ) return null ; c = c . childNodes [ a [ d ] ] } return c } var d = this ; return { bindMultiEvents : { type : "aftersetcontent afterscencerestore" , handler : function ( ) { d . fireEvent ( "updateSections" ) } } , bindEvents : { ready : function ( ) { d . fireEvent ( "updateSections" ) , domUtils . on ( d . body , "drop paste" , function ( ) { d . fireEvent ( "updateSections" ) } ) } , afterexeccommand : function ( a , b ) { "paragraph" == b && d . fireEvent ( "updateSections" ) } , keyup : function ( a , b ) { var c = this , d = c . selection . getRange ( ) ; if ( 1 != d . collapsed ) c . fireEvent ( "updateSections" ) ; else { var e = b . keyCode || b . which ; 13 != e && 8 != e && 46 != e || c . fireEvent ( "updateSections" ) } } } , commands : { getsections : { execCommand : function ( a , c ) { function d ( a ) { for ( var b = 0 ; b < f . length ; b ++ ) if ( f [ b ] ( a ) ) return b ; return - 1 } function e ( a , c ) { for ( var f , g , i , k = null , l = a . childNodes , m = 0 , n = l . length ; m < n ; m ++ ) if ( i = l [ m ] , f = d ( i ) , f >= 0 ) { var o = h . selection . getRange ( ) . selectNode ( i ) . createAddress ( ! 0 ) . startAddress , p = b ( { tag : i . tagName , title : i . innerText || i . textContent || "" , level : f , dom : i , startAddress : utils . clone ( o , [ ] ) , endAddress : utils . clone ( o , [ ] ) , children : [ ] } ) ; for ( j . nextSection = p , p . previousSection = j , g = j ; f <= g . level ; ) g = g . parentSection ; p . parentSection = g , g . children . push ( p ) , k = j = p } else 1 === i . nodeType && e ( i , c ) , k && k . endAddress [ k . endAddress . length - 1 ] ++ } for ( var f = c || [ "h1" , "h2" , "h3" , "h4" , "h5" , "h6" ] , g = 0 ; g < f . length ; g ++ ) "string" == typeof f [ g ] ? f [ g ] = function ( a ) { return function ( b ) { return b . tagName == a . toUpperCase ( ) } } ( f [ g ] ) : "function" != typeof f [ g ] && ( f [ g ] = function ( a ) { return null } ) ; var h = this , i = b ( { level : - 1 , title : "root" } ) , j = i ; return e ( h . body , i ) , i } , notNeedUndo : ! 0 } , movesection : { execCommand : function ( a , b , d , e ) { function f ( a , b , c ) { for ( var d = ! 1 , e = ! 1 , f = 0 ; f < a . length && ! ( f >= c . length ) ; f ++ ) { if ( c [ f ] > a [ f ] ) { d = ! 0 ; break } if ( c [ f ] < a [ f ] ) break } for ( var f = 0 ; f < b . length && ! ( f >= c . length ) ; f ++ ) { if ( c [ f ] < a [ f ] ) { e = ! 0 ; break } if ( c [ f ] > a [ f ] ) break } return d && e } var g , h , i = this ; if ( b && d && d . level != - 1 && ( g = e ? d . endAddress : d . startAddress , h = c ( g , i . body ) , g && h && ! f ( b . startAddress , b . endAddress , g ) ) ) { var j , k , l = c ( b . startAddress , i . body ) , m = c ( b . endAddress , i . body ) ; if ( e ) for ( j = m ; j && ! ( domUtils . getPosition ( l , j ) & domUtils . POSITION _FOLLOWING ) && ( k = j . previousSibling , domUtils . insertAfter ( h , j ) , j != l ) ; ) j = k ; else for ( j = l ; j && ! ( domUtils . getPosition ( j , m ) & domUtils . POSITION _FOLLOWING ) && ( k = j . nextSibling , h . parentNode . insertBefore ( j , h ) , j != m ) ; ) j = k ; i . fireEvent ( "updateSections" ) } } } , deletesection : { execCommand : function ( a , b , c ) { function d ( a ) { for ( var b = e . body , c = 0 ; c < a . length ; c ++ ) { if ( ! b . childNodes ) return null ; b = b . childNodes [ a [ c ] ] } return b } var e = this ; if ( b ) { var f , g = d ( b . startAddress ) , h = d ( b . endAddress ) , i = g ; if ( c ) domUtils . remove ( i ) ; else for ( ; i && domUtils . inDoc ( h , e . document ) && ! ( domUtils . getPosition ( i , h ) & domUtils . POSITION _FOLLOWING ) ; ) f = i . nextSibling , domUtils . remove ( i ) , i = f ; e . fireEvent ( "updateSections" ) } } } , selectsection : { execCommand : function ( a , b ) { if ( ! b && ! b . dom ) return ! 1 ; var c = this , d = c . selection . getRange ( ) , e = { startAddress : utils . clone ( b . startAddress , [ ] ) , endAddress : utils . clone ( b . endAddress , [ ] ) } ; return e . endAddress [ e . endAddress . length - 1 ] ++ , d . moveToAddress ( e ) . select ( ) . scrollToView ( ) , ! 0 } , notNeedUndo : ! 0 } , scrolltosection : { execCommand : function ( a , b ) { if ( ! b && ! b . dom ) return ! 1 ; var c = this , d = c . selection . getRange ( ) , e = { startAddress : b . startAddress , endAddress : b . endAddress } ; return e . endAddress [ e . endAddress . length - 1 ] ++ , d . moveToAddress ( e ) . scrollToView ( ) , ! 0 } , notNeedUndo : ! 0 } } } } ) , UE . plugin . register ( "simpleupload" , functi
a . _onPickTable ( c , d ) } } ) , editor : a . editor } ) , this . initSplitButton ( ) } , _onPickTable : function ( a , b ) { this . fireEvent ( "picktable" , a , b ) !== ! 1 && this . popup . hide ( ) } } , a . inherits ( e , d ) } ( ) , function ( ) { var a = baidu . editor . utils , b = baidu . editor . ui . UIBase , c = baidu . editor . ui . AutoTypeSetPicker = function ( a ) { this . initOptions ( a ) , this . initAutoTypeSetPicker ( ) } ; c . prototype = { initAutoTypeSetPicker : function ( ) { this . initUIBase ( ) } , getHtmlTpl : function ( ) { var a = this . editor , b = a . options . autotypeset , c = a . getLang ( "autoTypeSet" ) , d = "textAlignValue" + a . uid , e = "imageBlockLineValue" + a . uid , f = "symbolConverValue" + a . uid ; return '<div id="##" class="edui-autotypesetpicker %%"><div class="edui-autotypesetpicker-body"><table ><tr><td nowrap><input type="checkbox" name="mergeEmptyline" ' + ( b . mergeEmptyline ? "checked" : "" ) + ">" + c . mergeLine + '</td><td colspan="2"><input type="checkbox" name="removeEmptyline" ' + ( b . removeEmptyline ? "checked" : "" ) + ">" + c . delLine + '</td></tr><tr><td nowrap><input type="checkbox" name="removeClass" ' + ( b . removeClass ? "checked" : "" ) + ">" + c . removeFormat + '</td><td colspan="2"><input type="checkbox" name="indent" ' + ( b . indent ? "checked" : "" ) + ">" + c . indent + '</td></tr><tr><td nowrap><input type="checkbox" name="textAlign" ' + ( b . textAlign ? "checked" : "" ) + ">" + c . alignment + '</td><td colspan="2" id="' + d + '"><input type="radio" name="' + d + '" value="left" ' + ( b . textAlign && "left" == b . textAlign ? "checked" : "" ) + ">" + a . getLang ( "justifyleft" ) + '<input type="radio" name="' + d + '" value="center" ' + ( b . textAlign && "center" == b . textAlign ? "checked" : "" ) + ">" + a . getLang ( "justifycenter" ) + '<input type="radio" name="' + d + '" value="right" ' + ( b . textAlign && "right" == b . textAlign ? "checked" : "" ) + ">" + a . getLang ( "justifyright" ) + '</td></tr><tr><td nowrap><input type="checkbox" name="imageBlockLine" ' + ( b . imageBlockLine ? "checked" : "" ) + ">" + c . imageFloat + '</td><td nowrap id="' + e + '"><input type="radio" name="' + e + '" value="none" ' + ( b . imageBlockLine && "none" == b . imageBlockLine ? "checked" : "" ) + ">" + a . getLang ( "default" ) + '<input type="radio" name="' + e + '" value="left" ' + ( b . imageBlockLine && "left" == b . imageBlockLine ? "checked" : "" ) + ">" + a . getLang ( "justifyleft" ) + '<input type="radio" name="' + e + '" value="center" ' + ( b . imageBlockLine && "center" == b . imageBlockLine ? "checked" : "" ) + ">" + a . getLang ( "justifycenter" ) + '<input type="radio" name="' + e + '" value="right" ' + ( b . imageBlockLine && "right" == b . imageBlockLine ? "checked" : "" ) + ">" + a . getLang ( "justifyright" ) + '</td></tr><tr><td nowrap><input type="checkbox" name="clearFontSize" ' + ( b . clearFontSize ? "checked" : "" ) + ">" + c . removeFontsize + '</td><td colspan="2"><input type="checkbox" name="clearFontFamily" ' + ( b . clearFontFamily ? "checked" : "" ) + ">" + c . removeFontFamily + '</td></tr><tr><td nowrap colspan="3"><input type="checkbox" name="removeEmptyNode" ' + ( b . removeEmptyNode ? "checked" : "" ) + ">" + c . removeHtml + '</td></tr><tr><td nowrap colspan="3"><input type="checkbox" name="pasteFilter" ' + ( b . pasteFilter ? "checked" : "" ) + ">" + c . pasteFilter + '</td></tr><tr><td nowrap><input type="checkbox" name="symbolConver" ' + ( b . bdc2sb || b . tobdc ? "checked" : "" ) + ">" + c . symbol + '</td><td id="' + f + '"><input type="radio" name="bdc" value="bdc2sb" ' + ( b . bdc2sb ? "checked" : "" ) + ">" + c . bdc2sb + '<input type="radio" name="bdc" value="tobdc" ' + ( b . tobdc ? "checked" : "" ) + ">" + c . tobdc + '</td><td nowrap align="right"><button >' + c . run + "</button></td></tr></table></div></div>" } , _UIBase _render : b . prototype . render } , a . inherits ( c , b ) } ( ) , function ( ) { function a ( a ) { for ( var c , d = { } , e = a . getDom ( ) , f = a . editor . uid , g = null , h = null , i = domUtils . getElementsByTagName ( e , "input" ) , j = i . length - 1 ; c = i [ j -- ] ; ) if ( g = c . getAttribute ( "type" ) , "checkbox" == g ) if ( h = c . getAttribute ( "name" ) , d [ h ] && delete d [ h ] , c . checked ) { var k = document . getElementById ( h + "Value" + f ) ; if ( k ) { if ( /input/gi . test ( k . tagName ) ) d [ h ] = k . value ; else for ( var l , m = k . getElementsByTagName ( "input" ) , n = m . length - 1 ; l = m [ n -- ] ; ) if ( l . checked ) { d [ h ] = l . value ; break } } else d [ h ] = ! 0 } else d [ h ] = ! 1 ; else d [ c . getAttribute ( "value" ) ] = c . checked ; for ( var o , p = domUtils . getElementsByTagName ( e , "select" ) , j = 0 ; o = p [ j ++ ] ; ) { var q = o . getAttribute ( "name" ) ; d [ q ] = d [ q ] ? o . value : "" } b . extend ( a . editor . options . autotypeset , d ) , a . editor . setPreferences ( "autotypeset" , d ) } var b = baidu . editor . utils , c = baidu . editor . ui . Popup , d = baidu . editor . ui . AutoType
c . execCommand ( a , d ) } , onpicknocolor : function ( ) { c . execCommand ( a , "default" ) , this . setColor ( "transparent" ) , this . color = "default" } , onbuttonclick : function ( ) { c . execCommand ( a , this . color ) } } ) ; return b . buttons [ a ] = d , c . addListener ( "selectionchange" , function ( ) { d . setDisabled ( c . queryCommandState ( a ) == - 1 ) } ) , d } } ( d ) ; var j = { noOk : [ "searchreplace" , "help" , "spechars" , "webapp" , "preview" ] , ok : [ "attachment" , "anchor" , "link" , "insertimage" , "map" , "gmap" , "insertframe" , "wordimage" , "insertvideo" , "insertframe" , "edittip" , "edittable" , "edittd" , "scrawl" , "template" , "music" , "background" , "charts" ] } ; for ( var i in j ) ! function ( c , d ) { for ( var f , g = 0 ; f = d [ g ++ ] ; ) browser . opera && "searchreplace" === f || ! function ( d ) { b [ d ] = function ( f , g , h ) { g = g || ( f . options . iframeUrlMap || { } ) [ d ] || e [ d ] , h = f . options . labelMap [ d ] || f . getLang ( "labelMap." + d ) || "" ; var i ; g && ( i = new b . Dialog ( a . extend ( { iframeUrl : f . ui . mapUrl ( g ) , editor : f , className : "edui-for-" + d , title : h , holdScroll : "insertimage" === d , fullscreen : /charts|preview/ . test ( d ) , closeDialog : f . getLang ( "closeDialog" ) } , "ok" == c ? { buttons : [ { className : "edui-okbutton" , label : f . getLang ( "ok" ) , editor : f , onclick : function ( ) { i . close ( ! 0 ) } } , { className : "edui-cancelbutton" , label : f . getLang ( "cancel" ) , editor : f , onclick : function ( ) { i . close ( ! 1 ) } } ] } : { } ) ) , f . ui . _dialogs [ d + "Dialog" ] = i ) ; var j = new b . Button ( { className : "edui-for-" + d , title : h , onclick : function ( ) { if ( i ) switch ( d ) { case "wordimage" : var a = f . execCommand ( "wordimage" ) ; a && a . length && ( i . render ( ) , i . open ( ) ) ; break ; case "scrawl" : f . queryCommandState ( "scrawl" ) != - 1 && ( i . render ( ) , i . open ( ) ) ; break ; default : i . render ( ) , i . open ( ) } } , theme : f . options . theme , disabled : "scrawl" == d && f . queryCommandState ( "scrawl" ) == - 1 || "charts" == d } ) ; return b . buttons [ d ] = j , f . addListener ( "selectionchange" , function ( ) { var a = { edittable : 1 } ; if ( ! ( d in a ) ) { var b = f . queryCommandState ( d ) ; j . getDom ( ) && ( j . setDisabled ( b == - 1 ) , j . setChecked ( b ) ) } } ) , j } } ( f . toLowerCase ( ) ) } ( i , j [ i ] ) ; b . snapscreen = function ( a , c , d ) { d = a . options . labelMap . snapscreen || a . getLang ( "labelMap.snapscreen" ) || "" ; var f = new b . Button ( { className : "edui-for-snapscreen" , title : d , onclick : function ( ) { a . execCommand ( "snapscreen" ) } , theme : a . options . theme } ) ; if ( b . buttons . snapscreen = f , c = c || ( a . options . iframeUrlMap || { } ) . snapscreen || e . snapscreen ) { var g = new b . Dialog ( { iframeUrl : a . ui . mapUrl ( c ) , editor : a , className : "edui-for-snapscreen" , title : d , buttons : [ { className : "edui-okbutton" , label : a . getLang ( "ok" ) , editor : a , onclick : function ( ) { g . close ( ! 0 ) } } , { className : "edui-cancelbutton" , label : a . getLang ( "cancel" ) , editor : a , onclick : function ( ) { g . close ( ! 1 ) } } ] } ) ; g . render ( ) , a . ui . _dialogs . snapscreenDialog = g } return a . addListener ( "selectionchange" , function ( ) { f . setDisabled ( a . queryCommandState ( "snapscreen" ) == - 1 ) } ) , f } , b . insertcode = function ( c , d , e ) { d = c . options . insertcode || [ ] , e = c . options . labelMap . insertcode || c . getLang ( "labelMap.insertcode" ) || "" ; var f = [ ] ; a . each ( d , function ( a , b ) { f . push ( { label : a , value : b , theme : c . options . theme , renderLabelHtml : function ( ) { return '<div class="edui-label %%-label" >' + ( this . label || "" ) + "</div>" } } ) } ) ; var g = new b . Combox ( { editor : c , items : f , onselect : function ( a , b ) { c . execCommand ( "insertcode" , this . items [ b ] . value ) } , onbuttonclick : function ( ) { this . showPopup ( ) } , title : e , initValue : e , className : "edui-for-insertcode" , indexByValue : function ( a ) { if ( a ) for ( var b , c = 0 ; b = this . items [ c ] ; c ++ ) if ( b . value . indexOf ( a ) != - 1 ) return c ; return - 1 } } ) ; return b . buttons . insertcode = g , c . addListener ( "selectionchange" , function ( a , b , d ) { if ( ! d ) { var f = c . queryCommandState ( "insertcode" ) ; if ( f == - 1 ) g . setDisabled ( ! 0 ) ; else { g . setDisabled ( ! 1 ) ; var h = c . queryCommandValue ( "insertcode" ) ; if ( ! h ) return void g . setValue ( e ) ; h && ( h = h . replace ( /['"]/g , "" ) . split ( "," ) [ 0 ] ) , g . setValue ( h ) } } } ) , g } , b . fontfamily = function ( c , d , e ) { if ( d = c . options . fontfamily || [ ] , e = c . options . labelMap . fontfamily || c . getLang ( "labelMap.fontfamily" ) || "" , d . length ) { for ( var f , g = 0 , h = [ ] ; f = d [ g ] ; g ++ ) { var i = c . getLang ( "fontfamily" ) [ f . name ] || "" ; ! function ( b , d ) { h . push ( { label : b , value : d , theme : c . options . theme , renderLabelHtml : function ( ) { return '<div class="edui-label %%-label" style="font-family:' + a . unhtml ( this . value ) + '">' + ( this . label || "" ) + "</div>" } } ) } ( f . label || i , f . val ) } var j = new b . Combox ( { editor : c , items : h , onselect : function ( a , b ) { c . execCommand ( "FontFamily" , this . items [ b ] . value ) } , onbuttonclick : function ( ) { this . showPopup (