@@ -1,60 +1,62 @@
/*
Copyright (c) 2003-2015 , CKSource - Frederico Knabben. All rights reserved.
Copyright (c) 2003-2017 , CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.md or http://ckeditor.com/license
*/
( function ( ) { function p ( a ) { this . editor = a ; this . registered = { } ; this . instances = { } ; this . selected = [ ] ; this . widgetHoldingFocusedEditable = this . focused = null ; this . _ = { nextId : 0 , upcasts : [ ] , upcastCallbacks : [ ] , filters : { } } ; F ( this ) ; G ( this ) ; this . on ( "checkWidgets" , H ) ; this . editor . on ( "contentDomInvalidated" , this . checkWidgets , this ) ; I ( this ) ; J ( this ) ; K ( this ) ; L ( this ) ; M ( this ) } function g ( a , b , c , d , e ) { var f = a . editor ; CKEDITOR . tools . extend ( this , d , { editor : f , id : b , inline : "span" == c . getParent ( ) . getName ( ) , element : c , data : CKEDITOR . tools . extend ( { } ,
"function" == typeof d . defaults ? d . defaults ( ) : d . defaults ) , dataReady : ! 1 , inited : ! 1 , ready : ! 1 , edit : g . prototype . edit , focusedEditable : null , definition : d , repository : a , draggable : ! 1 !== d . draggable , _ : { downcastFn : d . downcast && "string" == typeof d . downcast ? d . downcasts [ d . downcast ] : d . downcast } } , ! 0 ) ; a . fire ( "instanceCreated" , this ) ; N ( this , d ) ; this . init && this . init ( ) ; this . inited = ! 0 ; ( a = this . element . data ( "cke-widget-data" ) ) && this . setData ( JSON . parse ( decodeURIComponent ( a ) ) ) ; e && this . setData ( e ) ; this . data . classes || this . setData ( "classes" ,
this . getClasses ( ) ) ; this . dataReady = ! 0 ; r ( this ) ; this . fire ( "data" , this . data ) ; this . isInited ( ) && f . editable ( ) . contains ( this . wrapper ) && ( this . ready = ! 0 , this . fire ( "ready" ) ) } function q ( a , b , c ) { CKEDITOR . dom . element . call ( this , b . $ ) ; this . editor = a ; this . _ = { } ; b = this . filter = c . filter ; CKEDITOR . dtd [ this . getName ( ) ] . p ? ( this . enterMode = b ? b . getAllowedEnterMode ( a . enterMode ) : a . enterMode , this . shiftEnterMode = b ? b . getAllowedEnterMode ( a . shiftEnterMode , ! 0 ) : a . shiftEnterMode ) : this . enterMode = this . shiftEnterMode = CKEDITOR . ENTER _BR } function O ( a ,
b ) { a . addCommand ( b . name , { exec : function ( a , d ) { function e ( ) { a . widgets . finalizeCreation ( k ) } var f = a . widgets . focused ; if ( f && f . name == b . name ) f . edit ( ) ; else if ( b . insert ) b . insert ( ) ; else if ( b . template ) { var f = "function" == typeof b . defaults ? b . defaults ( ) : b . defaults , f = CKEDITOR . dom . element . createFromHtml ( b . template . output ( f ) ) , h , l = a . widgets . wrapElement ( f , b . name ) , k = new CKEDITOR . dom . documentFragment ( l . getDocument ( ) ) ; k . append ( l ) ; ( h = a . widgets . initOn ( f , b , d && d . startupData ) ) ? ( f = h . once ( "edit" , function ( b ) { if ( b . data . dialog ) h . once ( "dialog" ,
function ( b ) { b = b . data ; var d , f ; d = b . once ( "ok" , e , null , null , 20 ) ; f = b . once ( "cancel" , function ( b ) { b . data && ! 1 === b . data . hide || a . widgets . destroy ( h , ! 0 ) } ) ; b . once ( "hide" , function ( ) { d . removeListener ( ) ; f . removeListener ( ) } ) } ) ; else e ( ) } , null , null , 999 ) , h . edit ( ) , f . removeListener ( ) ) : e ( ) } } , allowedContent : b . allowedContent , requiredContent : b . requiredContent , contentForms : b . contentForms , contentTransformations : b . contentTransformations } ) } function P ( a , b ) { function c ( c , b, d ) { var e = CKEDITOR . tools . getIndex ( a . _ . upcasts , function ( a ) { return a [ 2 ] >
d } ) ; 0 > e && ( e = a . _ . upcasts . length ) ; a . _ . upcasts . splice ( e , 0 , [ c , b, d ] ) } var d = b . upcast , e = b . upcastPriority || 10 ; if ( d ) if ( "string" == typeof d ) for ( d = d . split ( "," ) ; d . length ; ) c ( b . upcasts [ d . pop ( ) ] , b . name , e ) ; else c ( d , b . name , e ) } function t ( a , b ) { a . focused = null ; if ( b . isInited ( ) ) { var c = b . editor . checkDirty ( ) ; a . fire ( "widgetBlurred" , { widget : b } ) ; b . setFocused ( ! 1 ) ; ! c && b . editor . resetDirty ( ) } } function H ( a ) { a = a . data ; if ( "wysiwyg" == this . editor . mode ) { var b = this . editor . editable ( ) , c = this . instances , d , e , f , h ; if ( b ) { for ( d in c ) c [ d ] . isReady ( ) &&
function ( b ) { b = b . data ; var d , f ; d = b . once ( "ok" , e , null , null , 20 ) ; f = b . once ( "cancel" , function ( b ) { b . data && ! 1 === b . data . hide || a . widgets . destroy ( h , ! 0 ) } ) ; b . once ( "hide" , function ( ) { d . removeListener ( ) ; f . removeListener ( ) } ) } ) ; else e ( ) } , null , null , 999 ) , h . edit ( ) , f . removeListener ( ) ) : e ( ) } } , allowedContent : b . allowedContent , requiredContent : b . requiredContent , contentForms : b . contentForms , contentTransformations : b . contentTransformations } ) } function P ( a , b ) { function c ( b , d , c ){ var e = CKEDITOR . tools . getIndex ( a . _ . upcasts , function ( a ) { return a [ 2 ] >
c } ) ; 0 > e && ( e = a . _ . upcasts . length ) ; a . _ . upcasts . splice ( e , 0 , [ b , d , c ]) } var d = b . upcast , e = b . upcastPriority || 10 ; if ( d ) if ( "string" == typeof d ) for ( d = d . split ( "," ) ; d . length ; ) c ( b . upcasts [ d . pop ( ) ] , b . name , e ) ; else c ( d , b . name , e ) } function t ( a , b ) { a . focused = null ; if ( b . isInited ( ) ) { var c = b . editor . checkDirty ( ) ; a . fire ( "widgetBlurred" , { widget : b } ) ; b . setFocused ( ! 1 ) ; ! c && b . editor . resetDirty ( ) } } function H ( a ) { a = a . data ; if ( "wysiwyg" == this . editor . mode ) { var b = this . editor . editable ( ) , c = this . instances , d , e , f , h ; if ( b ) { for ( d in c ) c [ d ] . isReady ( ) &&
! b . contains ( c [ d ] . wrapper ) && this . destroy ( c [ d ] , ! 0 ) ; if ( a && a . initOnlyNew ) c = this . initOnAll ( ) ; else { var l = b . find ( ".cke_widget_wrapper" ) , c = [ ] ; d = 0 ; for ( e = l . count ( ) ; d < e ; d ++ ) { f = l . getItem ( d ) ; if ( h = ! this . getByElement ( f , ! 0 ) ) { a : { h = Q ; for ( var k = f ; k = k . getParent ( ) ; ) if ( h ( k ) ) { h = ! 0 ; break a } h = ! 1 } h = ! h } h && b . contains ( f ) && ( f . addClass ( "cke_widget_new" ) , c . push ( this . initOn ( f . getFirst ( g . isDomWidgetElement ) ) ) ) } } a && a . focusInited && 1 == c . length && c [ 0 ] . focus ( ) } } } function u ( a , b , c ) { if ( ! c . allowedContent ) return null ; var d = this . _ . filters [ a ] ;
d || ( this . _ . filters [ a ] = d = { } ) ; ( a = d [ b ] ) || ( d [ b ] = a = new CKEDITOR . filter ( c . allowedContent ) ) ; return a } function R ( a ) { var b = [ ] , c = a . _ . upcasts , d = a . _ . upcastCallbacks ; return { toBeWrapped : b , iterator : function ( a ) { var f , h , l , k , m ; if ( "data-cke-widget-wrapper" in a . attributes ) return ( a = a . getFirst ( g . isParserWidgetElement ) ) && b . push ( [ a ] ) , ! 1 ; if ( "data-widget" in a . attributes ) return b . push ( [ a ] ) , ! 1 ; if ( m = c . length ) { if ( a . attributes [ "data-cke-widget-upcasted" ] ) return ! 1 ; k = 0 ; for ( f = d . length ; k < f ; ++ k ) if ( ! 1 === d [ k ] ( a ) ) return ; for ( k = 0 ; k < m ; ++ k ) if ( f =
c [ k ] , l = { } , h = f [ 0 ] ( a , l ) ) return h instanceof CKEDITOR . htmlParser . element && ( a = h ) , a . attributes [ "data-cke-widget-data" ] = encodeURIComponent ( JSON . stringify ( l ) ) , a . attributes [ "data-cke-widget-upcasted" ] = 1 , b . push ( [ a , f [ 1 ] ] ) , ! 1 } } } } function v ( a ) { return { tabindex : - 1 , contenteditable : "false" , "data-cke-widget-wrapper" : 1 , "data-cke-filter" : "off" , "class" : "cke_widget_wrapper cke_widget_new cke_widget_" + ( a ? "inline" : "block" ) } } function w ( a , b , c ) { if ( a . type == CKEDITOR . NODE _ELEMENT ) { var d = CKEDITOR . dtd [ a . name ] ; if ( d && ! d [ c . name ] ) { var d =
a . split ( b ) , e = a . parent ; b = d . getIndex ( ) ; a . children . length || ( -- b , a . remove ( ) ) ; d . children . length || d . remove ( ) ; return w ( e , b , c ) } } a . add ( c , b ) } function x ( a , b ) { return "boolean" == typeof a . inline ? a . inline : ! ! CKEDITOR . dtd . $inline [ b ] } function Q ( a ) { return a . hasAttribute ( "data-cke-temp" ) } function n ( a , b , c , d ) { var e = a . editor ; e . fire ( "lockSnapshot" ) ; c ? ( d = c . data ( "cke-widget-editable" ) , d = b . editables [ d ] , a . widgetHoldingFocusedEditable = b , b . focusedEditable = d , c . addClass ( "cke_widget_editable_focused" ) , d . filter && e . setActiveFilter ( d . filter ) ,
e . setActiveEnterMode ( d . enterMode , d . shiftEnterMode ) ) : ( d || b . focusedEditable . removeClass ( "cke_widget_editable_focused" ) , b . focusedEditable = null , a . widgetHoldingFocusedEditable = null , e . setActiveFilter ( null ) , e . setActiveEnterMode ( null , null ) ) ; e . fire ( "unlockSnapshot" ) } function S ( a ) { a . contextMenu && a . contextMenu . addListener ( function ( b ) { if ( b = a . widgets . getByElement ( b , ! 0 ) ) return b . fire ( "contextMenu" , { } ) } ) } function T ( a , b ) { return CKEDITOR . tools . trim ( b ) } function L ( a ) { var b = a . editor , c = CKEDITOR . plugins . lineutils ; b . on ( "dragstart" ,
function ( c ) { var e = c . data . target ; g . isDomDragHandler ( e ) && ( e = a . getByElement ( e ) , c . data . dataTransfer . setData ( "cke/widget-id" , e . id ) , b . focus ( ) , e . focus ( ) ) } ) ; b . on ( "drop" , function ( c ) { var e = c . data . dataTransfer , f = e . getData ( "cke/widget-id" ) , h = e . getTransferType ( b ) , e = b . createRange ( ) ; "" !== f && h === CKEDITOR . DATA _TRANSFER _CROSS _EDITORS ? c . cancel ( ) : "" !== f && h == CKEDITOR . DATA _TRANSFER _INTERNAL && ( f = a . instances [ f ] ) && ( e . setStartBefore ( f . wrapper ) , e . setEndAfter ( f . wrapper ) , c . data . dragRange = e , delete CKEDITOR . plugins . clipboard . dragStartContainerChildCount ,
delete CKEDITOR . plugins . clipboard . dragEndContainerChildCount , c . data . dataTransfer . setData ( "text/html" , b . editable ( ) . getHtmlFromRange ( e ) . getHtml ( ) ) , b . widgets . destroy ( f , ! 0 ) ) } ) ; b . on ( "contentDom" , function ( ) { var d = b . editable ( ) ; CKEDITOR . tools . extend ( a , { finder : new c . finder ( b , { lookups : { "default" : function ( c ) { if ( ! c . is ( CKEDITOR . dtd . $listItem ) && c . is ( CKEDITOR . dtd . $block ) && ! g . isDomNestedEditable ( c ) && ! a . _ . draggedWidget . wrapper . contains ( c ) ) { var b = g . getNestedEditable ( d , c ) ; if ( b ) { c = a . _ . draggedWidget ; if ( a . getByElement ( b ) ==
c ) return ; b = CKEDITOR . filter . instances [ b . data ( "cke-filter" ) ] ; c = c . requiredContent ; if ( b && c && ! b . check ( c ) ) return } return CKEDITOR . LINEUTILS _BEFORE | CKEDITOR . LINEUTILS _AFTER } } } } ) , locator : new c . locator ( b ) , liner : new c . liner ( b , { lineStyle : { cursor : "move !important" , "border-top-color" : "#666" } , tipLeftStyle : { "border-left-color" : "#666" } , tipRightStyle : { "border-right-color" : "#666" } } ) } , ! 0 ) } ) } function J ( a ) { var b = a . editor ; b . on ( "contentDom" , function ( ) { var c = b . editable ( ) , d = c . isInline ( ) ? c : b . document , e , f ; c . attachListener ( d ,
"mousedown" , function ( c ) { var d = c . data . getTarget ( ) ; if ( ! d . type ) return ! 1 ; e = a . getByElement ( d ) ; f = 0 ; e && ( e . inline && d . type == CKEDITOR . NODE _ELEMENT && d . hasAttribute ( "data-cke-widget-drag-handler" ) ? ( f = 1 , a . focused != e && b . getSelection ( ) . removeAllRanges ( ) ) : g . getNestedEditable ( e . wrapper , d ) ? e = null : ( c . data . preventDefault ( ) , CKEDITOR . env . ie || e . focus ( ) ) ) } ) ; c . attachListener ( d , "mouseup" , function ( ) { f && e && e . wrapper && ( f = 0 , e . focus ( ) ) } ) ; CKEDITOR . env . ie && c . attachListener ( d , "mouseup" , function ( ) { setTimeout ( function ( ) { e && e . wrapper &&
c . contains ( e . wrapper ) && ( e . focus ( ) , e = null ) } ) } ) } ) ; b . on ( "doubleclick" , function ( c ) { var b = a . getByElement ( c . data . element ) ; if ( b && ! g . getNestedEditable ( b . wrapper , c . data . element ) ) return b . fire ( "doubleclick" , { element : c . data . element } ) } , null , null , 1 ) } function K ( a ) { a . editor . on ( "key" , function ( b ) { var c = a . focused , d = a . widgetHoldingFocusedEditable , e ; c ? e = c . fire ( "key" , { keyCode : b . data . keyCode } ) : d && ( c = b . data . keyCode , b = d . focusedEditable , c == CKEDITOR . CTRL + 65 ? ( c = b . getBogus ( ) , d = d . editor . createRange ( ) , d . selectNodeContents ( b ) ,
c && d . setEndAt ( c , CKEDITOR . POSITION _BEFORE _START ) , d . select ( ) , e = ! 1 ) : 8 == c || 46 == c ? ( e = d . editor . getSelection ( ) . getRanges ( ) , d = e [ 0 ] , e = ! ( 1 == e . length && d . collapsed && d . checkBoundaryOfElement ( b , CKEDITOR [ 8 == c ? "START" : "END" ] ) ) ) : e = void 0 ) ; return e } , null , null , 1 ) } function M ( a ) { function b ( c ) { a . focused && y ( a . focused , "cut" == c . name ) } var c = a . editor ; c . on ( "contentDom" , function ( ) { var a = c . editable ( ) ; a . attachListener ( a , "copy" , b ) ; a . attachListener ( a , "cut" , b ) } ) } function I ( a ) { var b = a . editor ; b . on ( "selectionCheck" , function ( ) { a . fire ( "checkSelection" ) } ) ;
a . on ( "checkSelection" , a . checkSelection , a ) ; b . on ( "selectionChange" , function ( c ) { var d = ( c = g . getNestedEditable ( b . editable ( ) , c . data . selection . getStartElement ( ) ) ) && a . getByElement ( c ) , e = a . widgetHoldingFocusedEditable ; e ? e === d && e . focusedEditable . equals ( c ) || ( n ( a , e , null ) , d && c && n ( a , d , c ) ) : d && c && n ( a , d , c ) } ) ; b . on ( "dataReady" , function ( ) { z ( a ) . commit ( ) } ) ; b . on ( "blur" , function ( ) { var c ; ( c = a . focused ) && t ( a , c ) ; ( c = a . widgetHoldingFocusedEditable ) && n ( a , c , null ) } ) } function G ( a ) { var b = a . editor , c = { } ; b . on ( "toDataFormat" , function ( b ) { var e =
CKEDITOR . tools . getNextNumber ( ) , f = [ ] ; b . data . downcastingSessionId = e ; c [ e ] = f ; b . data . dataValue . forEach ( function ( c ) { var b = c . attributes , d ; if ( "data-cke-widget-id" in b ) { if ( b = a . instances [ b [ "data-cke-widget-id" ] ] ) d = c . getFirst ( g . isParserWidgetElement ) , f . push ( { wrapper : c , element : d , widget : b , editables : { } } ) , "1" != d . attributes [ "data-cke-widget-keep-attr" ] && delete d . attributes [ "data-widget" ] } else if ( "data-cke-widget-editable" in b ) return f [ f . length - 1 ] . editables [ b [ "data-cke-widget-editable" ] ] = c , ! 1 } , CKEDITOR . NODE _ELEMENT ,
c [ k ] , l = { } , h = f [ 0 ] ( a , l ) ) return h instanceof CKEDITOR . htmlParser . element && ( a = h ) , a . attributes [ "data-cke-widget-data" ] = encodeURIComponent ( JSON . stringify ( l ) ) , a . attributes [ "data-cke-widget-upcasted" ] = 1 , b . push ( [ a , f [ 1 ] ] ) , ! 1 } } } } function v ( a , b ){ return { tabindex : - 1 , contenteditable : "false" , "data-cke-widget-wrapper" : 1 , "data-cke-filter" : "off" , "class" : "cke_widget_wrapper cke_widget_new cke_widget_" + ( a ? "inline" : "block" ) + ( b ? " cke_widget_" + b : "" ) } } function w ( a , b , c ) { if ( a . type == CKEDITOR . NODE _ELEMENT ) { var d = CKEDITOR . dtd [ a . name ] ;
if ( d && ! d [ c . name ] ) { var d = a . split ( b ) , e = a . parent ; b = d . getIndex ( ) ; a . children . length || ( -- b , a . remove ( ) ) ; d . children . length || d . remove ( ) ; return w ( e , b , c ) } } a . add ( c , b ) } function x ( a , b ) { return "boolean" == typeof a . inline ? a . inline : ! ! CKEDITOR . dtd . $inline [ b ] } function Q ( a ) { return a . hasAttribute ( "data-cke-temp" ) } function n ( a , b , c , d ) { var e = a . editor ; e . fire ( "lockSnapshot" ) ; c ? ( d = c . data ( "cke-widget-editable" ) , d = b . editables [ d ] , a . widgetHoldingFocusedEditable = b , b . focusedEditable = d , c . addClass ( "cke_widget_editable_focused" ) , d . filter &&
e . setActiveFilter ( d . filter ) , e . setActiveEnterMode ( d . enterMode , d . shiftEnterMode ) ) : ( d || b . focusedEditable . removeClass ( "cke_widget_editable_focused" ) , b . focusedEditable = null , a . widgetHoldingFocusedEditable = null , e . setActiveFilter ( null ) , e . setActiveEnterMode ( null , null ) ) ; e . fire ( "unlockSnapshot" ) } function S ( a ) { a . contextMenu && a . contextMenu . addListener ( function ( b ) { if ( b = a . widgets . getByElement ( b , ! 0 ) ) return b . fire ( "contextMenu" , { } ) } ) } function T ( a , b ) { return CKEDITOR . tools . trim ( b ) } function L ( a ) { var b = a . editor , c = CKEDITOR . plugins . lineutils ;
b . on ( "dragstart" , function ( d ) { var c = d . data . target ; g . isDomDragHandler ( c ) && ( c = a . getByElement ( c ) , d . data . dataTransfer . setData ( "cke/widget-id" , c . id ) , b . focus ( ) , c . focus ( ) ) } ) ; b . on ( "drop" , function ( d ) { var c = d . data . dataTransfer , f = c . getData ( "cke/widget-id" ) , h = c . getTransferType ( b ) , c = b . createRange ( ) ; "" !== f && h === CKEDITOR . DATA _TRANSFER _CROSS _EDITORS ? d . cancel ( ) : "" !== f && h == CKEDITOR . DATA _TRANSFER _INTERNAL && ( f = a . instances [ f ] ) && ( c . setStartBefore ( f . wrapper ) , c . setEndAfter ( f . wrapper ) , d . data . dragRange = c , delete CKEDITOR . plugins . clipboard . dragStartContainerChildCount ,
delete CKEDITOR . plugins . clipboard . dragEndContainerChildCount , d . data . dataTransfer . setData ( "text/html" , b . editable ( ) . getHtmlFromRange ( c ) . getHtml ( ) ) , b . widgets . destroy ( f , ! 0 ) ) } ) ; b . on ( "contentDom" , function ( ) { var d = b . editable ( ) ; CKEDITOR . tools . extend ( a , { finder : new c . finder ( b , { lookups : { "default" : function ( b ) { if ( ! b . is ( CKEDITOR . dtd . $listItem ) && b . is ( CKEDITOR . dtd . $block ) && ! g . isDomNestedEditable ( b ) && ! a . _ . draggedWidget . wrapper . contains ( b ) ) { var c = g . getNestedEditable ( d , b ) ; if ( c ) { b = a . _ . draggedWidget ; if ( a . getByElement ( c ) ==
b ) return ; c = CKEDITOR . filter . instances [ c . data ( "cke-filter" ) ] ; b = b . requiredContent ; if ( c && b && ! c . check ( b ) ) return } return CKEDITOR . LINEUTILS _BEFORE | CKEDITOR . LINEUTILS _AFTER } } } } ) , locator : new c . locator ( b ) , liner : new c . liner ( b , { lineStyle : { cursor : "move !important" , "border-top-color" : "#666" } , tipLeftStyle : { "border-left-color" : "#666" } , tipRightStyle : { "border-right-color" : "#666" } } ) } , ! 0 ) } ) } function J ( a ) { var b = a . editor ; b . on ( "contentDom" , function ( ) { var c = b . editable ( ) , d = c . isInline ( ) ? c : b . document , e , f ; c . attachListener ( d ,
"mousedown" , function ( c ) { var d = c . data . getTarget ( ) ; e = d instanceof CKEDITOR . dom . element ? a . getByElement ( d ) : null ; f = 0 ; e && ( e . inline && d . type == CKEDITOR . NODE _ELEMENT && d . hasAttribute ( "data-cke-widget-drag-handler" ) ? ( f = 1 , a . focused != e && b . getSelection ( ) . removeAllRanges ( ) ) : g . getNestedEditable ( e . wrapper , d ) ? e = null : ( c . data . preventDefault ( ) , CKEDITOR . env . ie || e . focus ( ) ) ) } ) ; c . attachListener ( d , "mouseup" , function ( ) { f && e && e . wrapper && ( f = 0 , e . focus ( ) ) } ) ; CKEDITOR . env . ie && c . attachListener ( d , "mouseup" , function ( ) { setTimeout ( function ( ) { e &&
e . wrapper && c . contains ( e . wrapper ) && ( e . focus ( ) , e = null ) } ) } ) } ) ; b . on ( "doubleclick" , function ( b ) { var d = a . getByElement ( b . data . element ) ; if ( d && ! g . getNestedEditable ( d . wrapper , b . data . element ) ) return d . fire ( "doubleclick" , { element : b . data . element } ) } , null , null , 1 ) } function K ( a ) { a . editor . on ( "key" , function ( b ) { var c = a . focused , d = a . widgetHoldingFocusedEditable , e ; c ? e = c . fire ( "key" , { keyCode : b . data . keyCode } ) : d && ( c = b . data . keyCode , b = d . focusedEditable , c == CKEDITOR . CTRL + 65 ? ( c = b . getBogus ( ) , d = d . editor . createRange ( ) , d . selectNodeContents ( b ) ,
c && d . setEndAt ( c , CKEDITOR . POSITION _BEFORE _START ) , d . select ( ) , e = ! 1 ) : 8 == c || 46 == c ? ( e = d . editor . getSelection ( ) . getRanges ( ) , d = e [ 0 ] , e = ! ( 1 == e . length && d . collapsed && d . checkBoundaryOfElement ( b , CKEDITOR [ 8 == c ? "START" : "END" ] ) ) ) : e = void 0 ) ; return e } , null , null , 1 ) } function M ( a ) { function b ( b ) { a . focused && y ( a . focused , "cut" == b . name ) } var c = a . editor ; c . on ( "contentDom" , function ( ) { var a = c . editable ( ) ; a . attachListener ( a , "copy" , b ) ; a . attachListener ( a , "cut" , b ) } ) } function I ( a ) { var b = a . editor ; b . on ( "selectionCheck" , function ( ) { a . fire ( "checkSelection" ) } ) ;
a . on ( "checkSelection" , a . checkSelection , a ) ; b . on ( "selectionChange" , function ( c ) { var d = ( c = g . getNestedEditable ( b . editable ( ) , c . data . selection . getStartElement ( ) ) ) && a . getByElement ( c ) , e = a . widgetHoldingFocusedEditable ; e ? e === d && e . focusedEditable . equals ( c ) || ( n ( a , e , null ) , d && c && n ( a , d , c ) ) : d && c && n ( a , d , c ) } ) ; b . on ( "dataReady" , function ( ) { z ( a ) . commit ( ) } ) ; b . on ( "blur" , function ( ) { var b ; ( b = a . focused ) && t ( a , b ) ; ( b = a . widgetHoldingFocusedEditable ) && n ( a , b , null ) } ) } function G ( a ) { var b = a . editor , c = { } ; b . on ( "toDataFormat" , function ( b ) { var e =
CKEDITOR . tools . getNextNumber ( ) , f = [ ] ; b . data . downcastingSessionId = e ; c [ e ] = f ; b . data . dataValue . forEach ( function ( b ) { var c = b . attributes , d ; if ( "data-cke-widget-id" in c ) { if ( c = a . instances [ c [ "data-cke-widget-id" ] ] ) d = b . getFirst ( g . isParserWidgetElement ) , f . push ( { wrapper : b , element : d , widget : c , editables : { } } ) , "1" != d . attributes [ "data-cke-widget-keep-attr" ] && delete d . attributes [ "data-widget" ] } else if ( "data-cke-widget-editable" in c ) return f [ f . length - 1 ] . editables [ c [ "data-cke-widget-editable" ] ] = b , ! 1 } , CKEDITOR . NODE _ELEMENT ,
! 0 ) } , null , null , 8 ) ; b . on ( "toDataFormat" , function ( a ) { if ( a . data . downcastingSessionId ) { a = c [ a . data . downcastingSessionId ] ; for ( var b , f , h , l , g , m ; b = a . shift ( ) ; ) { f = b . widget ; h = b . element ; l = f . _ . downcastFn && f . _ . downcastFn . call ( f , h ) ; for ( m in b . editables ) g = b . editables [ m ] , delete g . attributes . contenteditable , g . setHtml ( f . editables [ m ] . getData ( ) ) ; l || ( l = h ) ; b . wrapper . replaceWith ( l ) } } } , null , null , 13 ) ; b . on ( "contentDomUnload" , function ( ) { a . destroyAll ( ! 0 ) } ) } function F ( a ) { var b = a . editor , c , d ; b . on ( "toHtml" , function ( b ) { var d = R ( a ) , h ;
for ( b . data . dataValue . forEach ( d . iterator , CKEDITOR . NODE _ELEMENT , ! 0 ) ; h = d . toBeWrapped . pop ( ) ; ) { var l = h [ 0 ] , k = l . parent ; k . type == CKEDITOR . NODE _ELEMENT && k . attributes [ "data-cke-widget-wrapper" ] && k . replaceWith ( l ) ; a . wrapElement ( h [ 0 ] , h [ 1 ] ) } c = b . data . protectedWhitespaces ? 3 == b . data . dataValue . children . length && g . isParserWidgetWrapper ( b . data . dataValue . children [ 1 ] ) : 1 == b . data . dataValue . children . length && g . isParserWidgetWrapper ( b . data . dataValue . children [ 0 ] ) } , null , null , 8 ) ; b . on ( "dataReady" , function ( ) { if ( d ) for ( var c = b . editable ( ) . find ( ".cke_widget_wrapper" ) ,
f , h , l = 0 , k = c . count ( ) ; l < k ; ++ l ) f = c . getItem ( l ) , h = f . getFirst ( g . isDomWidgetElement ) , h . type == CKEDITOR . NODE _ELEMENT && h . data ( "widget" ) ? ( h . replace ( f ) , a . wrapElement ( h ) ) : f . remove ( ) ; d = 0 ; a . destroyAll ( ! 0 ) ; a . initOnAll ( ) } ) ; b . on ( "loadSnapshot" , function ( c ) { /data-cke-widget/ . test ( c . data ) && ( d = 1 ) ; a . destroyAll ( ! 0 ) } , null , null , 9 ) ; b . on ( "paste" , function ( a ) { a = a . data ; a . dataValue = a . dataValue . replace ( U , T ) ; a . range && ( a = g . getNestedEditable ( b . editable ( ) , a . range . startContainer ) ) && ( a = CKEDITOR . filter . instances [ a . data ( "cke-filter" ) ] ) &&
f , h , l = 0 , k = c . count ( ) ; l < k ; ++ l ) f = c . getItem ( l ) , h = f . getFirst ( g . isDomWidgetElement ) , h . type == CKEDITOR . NODE _ELEMENT && h . data ( "widget" ) ? ( h . replace ( f ) , a . wrapElement ( h ) ) : f . remove ( ) ; d = 0 ; a . destroyAll ( ! 0 ) ; a . initOnAll ( ) } ) ; b . on ( "loadSnapshot" , function ( b ) { /data-cke-widget/ . test ( b . data ) && ( d = 1 ) ; a . destroyAll ( ! 0 ) } , null , null , 9 ) ; b . on ( "paste" , function ( a ) { a = a . data ; a . dataValue = a . dataValue . replace ( U , T ) ; a . range && ( a = g . getNestedEditable ( b . editable ( ) , a . range . startContainer ) ) && ( a = CKEDITOR . filter . instances [ a . data ( "cke-filter" ) ] ) &&
b . setActiveFilter ( a ) } ) ; b . on ( "afterInsertHtml" , function ( d ) { d . data . intoRange ? a . checkWidgets ( { initOnlyNew : ! 0 } ) : ( b . fire ( "lockSnapshot" ) , a . checkWidgets ( { initOnlyNew : ! 0 , focusInited : c } ) , b . fire ( "unlockSnapshot" ) ) } ) } function z ( a ) { var b = a . selected , c = [ ] , d = b . slice ( 0 ) , e = null ; return { select : function ( a ) { 0 > CKEDITOR . tools . indexOf ( b , a ) && c . push ( a ) ; a = CKEDITOR . tools . indexOf ( d , a ) ; 0 <= a && d . splice ( a , 1 ) ; return this } , focus : function ( a ) { e = a ; return this } , commit : function ( ) { var f = a . focused !== e , h , g ; a . editor . fire ( "lockSnapshot" ) ; for ( f &&
( h = a . focused ) && t ( a , h ) ; h = d . pop ( ) ; ) b . splice ( CKEDITOR . tools . indexOf ( b , h ) , 1 ) , h . isInited ( ) && ( g = h . editor . checkDirty ( ) , h . setSelected ( ! 1 ) , ! g && h . editor . resetDirty ( ) ) ; f && e && ( g = a . editor . checkDirty ( ) , a . focused = e , a . fire ( "widgetFocused" , { widget : e } ) , e . setFocused ( ! 0 ) , ! g && a . editor . resetDirty ( ) ) ; for ( ; h = c . pop ( ) ; ) b . push ( h ) , h . setSelected ( ! 0 ) ; a . editor . fire ( "unlockSnapshot" ) } } } function A ( a , b , c ) { var d = 0 ; b = B ( b ) ; var e = a . data . classes || { } , f ; if ( b ) { for ( e = CKEDITOR . tools . clone ( e ) ; f = b . pop ( ) ; ) c ? e [ f ] || ( d = e [ f ] = 1 ) : e [ f ] && ( delete e [ f ] ,
d = 1 ) ; d && a . setData ( "classes" , e ) } } function C ( a ) { a . cancel ( ) } function y ( a , b ) { var c = a . editor , d = c . document ; if ( ! d . getById ( "cke_copybin" ) ) { var e = c . blockless || CKEDITOR . env . ie ? "span" : "div" , f = d . createElement ( e ) , h = d . createElement ( e ) , e = CKEDITOR . env . ie && 9 > CKEDITOR . env . version ; h . setAttributes ( { id : "cke_copybin" , "data-cke-temp" : "1" } ) ; f . setStyles ( { position : "absolute" , width : "1px" , height : "1px" , overflow : "hidden" } ) ; f . setStyle ( "ltr" == c . config . contentsLangDirection ? "left" : "right" , "-5000px" ) ; var g = c . createRange ( ) ; g . setStartBefore ( a . wrapper ) ;
g . setEndAfter ( a . wrapper ) ; f . setHtml ( '\x3cspan data-cke-copybin-start\x3d"1"\x3e \x3c/span\x3e' + c . editable ( ) . getHtmlFromRange ( g ) . getHtml ( ) + '\x3cspan data-cke-copybin-end\x3d"1"\x3e \x3c/span\x3e' ) ; c . fire ( "saveSnapshot" ) ; c . fire ( "lockSnapshot" ) ; h . append ( f ) ; c . editable ( ) . append ( h ) ; var k = c . on ( "selectionChange" , C , null , null , 0 ) , m = a . repository . on ( "checkSelection" , C , null , null , 0 ) ; if ( e ) var n = d . getDocumentElement ( ) . $ , p = n . scrollTop ; g = c . createRange ( ) ; g . selectNodeContents ( f ) ; g . select ( ) ; e && ( n . scrollTop = p ) ; setTimeout ( function ( ) { b ||
a . focus ( ) ; h . remove ( ) ; k . removeListener ( ) ; m . removeListener ( ) ; c . fire ( "unlockSnapshot" ) ; b && ( a . repository . del ( a ) , c . fire ( "saveSnapshot" ) ) } , 100 ) } } function B ( a ) { return ( a = ( a = a . getDefinition ( ) . attributes ) && a [ "class" ] ) ? a . split ( /\s+/ ) : null } function D ( ) { var a = CKEDITOR . document . getActive ( ) , b = this . editor , c = b . editable ( ) ; ( c . isInline ( ) ? c : b . document . getWindow ( ) . getFrame ( ) ) . equals ( a ) && b . focusManager . focus ( c ) } function E ( ) { CKEDITOR . env . gecko && this . editor . unlockSelection ( ) ; CKEDITOR . env . webkit || ( this . editor . forceNextSelectionCheck ( ) ,
this . editor . selectionChange ( 1 ) ) } function V ( a ) { var b = null ; a . on ( "data" , function ( ) { var a = this . data . classes , d ; if ( b != a ) { for ( d in b ) a && a [ d ] || this . removeClass ( d ) ; for ( d in a ) this . addClass ( d ) ; b = a } } ) } function W ( a ) { if ( a . d raggable ) { var b = a . editor , c = a . wrapper . getLast ( g . isDomDragHandlerContainer ) , d ; c ? d = c . findOne ( "img" ) : ( c = new CKEDITOR . dom . element ( "span " , b . document ) , c . setAttributes ( { "class" : "cke_reset cke_widget_drag_handler_container" , style : "background:rgba(220,220,220,0.5);background-image:url(" + b . plugins . widget . path +
"images/handle.png)" } ) , d = new CKEDITOR . dom . element ( "img" , b . document ) , d . setAttributes ( { "class" : "cke_reset cke_widget_drag_handler" , "data-cke-widget-drag-handler" : "1" , src : CKEDITOR . tools . transparentImageData , width : 15 , title : b . lang . widget . move, height : 15 } ) , a . inline && d . setAttribute ( "draggable" , "true" ) , c . append ( d ) , a . wrapper . append ( c ) ) ; a . wrapper . on ( "dragover" , function ( a ) { a . data . preventDefault ( ) } ) ; a . wrapper . on ( "mouseenter" , a . updateDragHandlerPosition , a ) ; setTimeout ( function ( ) { a . on ( "data" , a . updateDragHandlerPosition ,
a ) } , 50 ) ; if ( ! a . inline && ( d . on ( "mousedown" , X , a ) , CKEDITOR . env . ie && 9 > CKEDITOR . env . version ) ) d . on ( "dragstart " , function ( a ) { a . data . preventDefault ( ! 0 ) } ) ; a . d ragHandlerContainer = c } } function X ( a ) { function b ( ) { var c ; for ( n . reset ( ) ; c = g . pop ( ) ; ) c . removeListener ( ) ; var b = k ; c = a . sender ; var d = this . repository . finder , e = this . repository . liner , f = this . editor , h = this . editor . editable ( ) ; CKEDITOR . tools . isEmpty ( e . visible ) || ( b = d . getRange ( b [ 0 ] ) , this . focus ( ) , f . fire ( "drop" , { dropRange : b , target : b . startContainer } ) ) ; h . removeClass ( "cke_widget_dragging" ) ;
e . hideVisible ( ) ; f . fire ( "dragend" , { target : c } ) } var c = this . repository . fi nder, d = this . repository . locato r, e = this . repository . liner , f = this . editor , h = f . editable ( ) , g = [ ] , k = [ ] ; this . repos itory . _ . draggedWidget = this ; var m = c . greedySearch ( ) , n = CKEDITOR . tools . eventsBuffer ( 50 , function ( ) { p = d . locate ( m ) ; k = d . sort ( q , 1 ) ; k . length && ( e . prepa re( m , p ) , e . placeLine ( k [ 0 ] ) , e . cleanup ( ) ) } ) , p , q ; h . add Class( "cke_widget_dragging" ) ; g . push ( h . on ( "mousemove" , function ( a ) { q = a . data . $ . clientY ; n . input ( ) } ) ) ; f . fire ( "dragstart" , { target : a . sender } ) ; g . push ( f . document . once ( "mouseup" ,
b , this ) ) ; h . isInline ( ) || g . push ( CKEDITOR . document . once ( "mouseup" , b , this ) ) } function Y ( a ) { var b , c , d = a . editables ; a . editables = { } ; if ( a . editables ) for ( b in d ) c = d [ b ] , a . initEditable ( b , "string" == typeof c ? { selector : c } : c ) } function Z ( a ) { if ( a . mask ) { var b = a . wrapper . findOn e ( ".cke_widget_mask " ) ; b || ( b = new CKEDITOR . dom . element ( "img ", a . editor . document ) , b . setAttributes ( { src : CKEDITOR . tools . transparentImageData , "class" : "cke_reset cke_widget_mask" } ) , a . wrapper . append ( b ) ) ; a . mask = b } } function aa ( a ) { if ( a . parts ) { var b = { } , c , d ; for ( d in a . parts ) c =
a . wrapper . findOne ( a . parts [ d ] ) , b [ d ] = c ; a . parts = b } } function N ( a , b ){ ba ( a ) ; aa ( a ) ; Y ( a ) ; Z ( a ) ; W ( a ) ; V ( a ) ; if ( CKEDITOR . env . ie && 9 > CKEDITOR . env . version ) a . wrapper . on ( "dragstart" , function ( c ) { var b = c . data . getTarget ( ) ; g . getNestedEditable ( a , b ) || a . inli ne && g . isDomDragHandler ( b ) || c . data . preventDefault ( ) } ) ; a . wrapper . removeClass ( "cke_widget_new" ) ; a . element . addClass ( "cke_widget_element" ) ; a . on ( "key" , function ( b ) { b = b . data . keyCode ; if ( 13 == b ) a . edit ( ) ; else { if ( b == CKEDITOR . CTRL + 67 || b == CKEDITOR . CTRL + 88 ) { y ( a , b == CKEDITOR . CTRL + 88 ) ; return } if ( b in
ca || CKEDITOR . CTRL & b || CKEDITOR . ALT & b ) return } return ! 1 } , null , null , 999 ) ; a . on ( "doubleclick" , function ( b ) { a . edit ( ) && b . cancel ( ) } ) ; if ( b . data ) a . on ( "data " , b . data ) ; if ( b . edit ) a . on ( "edit" , b . edit ) } function ba ( a ) { ( a . wrapper = a . element . getParent ( ) ) . setAttribute ( "data-cke-widget-id" , a . id ) } function r ( a ) { a . element . data ( "cke-widget-data" , encodeURIComponent ( JSON . string ify ( a . data ) ) ) } CKEDITOR . plugins . add ( "widget" , { lang : "af,ar,bg,ca,cs,cy,da,de,el,en,en-gb,eo,es,eu,fa,fi,fr,gl,he,hr,hu,id,it,ja,km,ko,ku,lv,nb,nl,no,pl,pt,pt-br,ru,sk,sl,sq,sv,tr,tt,ug,uk,vi,zh,zh-cn" ,
requires : "lineutils,clipboard" , onLoad : function ( ) { CKEDITOR . addCss ( ".cke_widget_wrapper{position:relative;outline:none}.cke_widget_inline{display:inline-block}.cke_widget_wrapper:hover\x3e.cke_widget_element{outline:2px solid yellow;cursor:default}.cke_widget_wrapper:hover .cke_widget_editable{outline:2px solid yellow}.cke_widget_wrapper.cke_widget_focused\x3e.cke_widget_element,.cke_widget_wrapper .cke_widget_editable.cke_widget_editable_focused{outline:2px solid #ace}.cke_widget_editable{cursor:text}.cke_widget_drag_handler_container{position:absolute;width:15px;height:0;display:none;opacity:0.75;transition:height 0s 0.2s;line-height:0}.cke_widget_wrapper:hover\x3e.cke_widget_drag_handler_container{height:15px;transition:none}.cke_widget_drag_handler_container:hover{opacity:1}img.cke_widget_drag_handler{cursor:move;width:15px;height:15px;display:inline-block}.cke_widget_mask{position:absolute;top:0;left:0;width:100%;height:100%;display:block}.cke_editable.cke_widget_dragging, .cke_editable.cke_widget_dragging *{cursor:move !important}" ) } ,
this . editor . selectionChange ( 1 ) ) } function V ( a ) { var b = null ; a . on ( "data" , function ( ) { var a = this . data . classes , d ; if ( b != a ) { for ( d in b ) a && a [ d ] || this . removeClass ( d ) ; for ( d in a ) this . addClass ( d ) ; b = a } } ) } function W ( a ) { a . on ( "data" , function ( ) { if ( a . w rapper ) { var b = this . getLabel ? this . getLabel ( ) : this . editor . lang . widget . label . replace ( /%1/ , this . pathName || this . element . getName ( ) ) ; a . wrapper . setAttribute ( "role " , "region" ) ; a . wrapper . setAttribute ( "aria-label" , b ) } } , null , null , 9999 ) } function X ( a ) { if ( a . draggable ) { var b = a . editor ,
c = a . wrapper . getLast ( g . isDomDragHandlerContainer ) , d ; c ? d = c . findOne ( "img" ) : ( c = new CKEDITOR . dom . element ( "span" , b . document ) , c . setAttributes ( { "class" : "cke_reset cke_widget_drag_handler_container" , style : "background:rgba(220,220,220,0.5);background-image:url(" + b . plugins . widget . path + "images/handle.png)" } ) , d = new CKEDITOR . dom . element ( "img" , b . document ) , d . setAttributes ( { "class" : "cke_reset cke_widget_drag_handler" , "data-cke-widget-drag-handler" : "1" , src : CKEDITOR . tools . transparentImageData , width : 15 , title : b . lang . widget . move ,
height : 15 , role : "presentation" } ) , a . inline && d . setAttribute ( "draggable" , "true" ) , c . app end ( d ) , a . wrapper . append ( c ) ) ; a . wrapper . on ( "dragover " , function ( a ) { a . data . preventDefault ( ) } ) ; a . w rapper . on ( "mouseenter" , a . updateDragHandlerPosition , a ) ; setTimeout ( function ( ) { a . on ( "data" , a . updateDragHandlerPosition , a ) } , 50 ) ; if ( ! a . inline && ( d . on ( "mousedown" , Y , a ) , CKEDITOR . env . ie && 9 > CKEDITOR . env . version ) ) d . on ( "dragstart" , function ( a ) { a . data . preventDefault ( ! 0 ) } ) ; a . dragHandlerContainer = c } } function Y ( a ) { function b ( ) { var b ; for ( q . reset ( ) ; b =
g . pop ( ) ; ) b . removeListener ( ) ; var c = k ; b = a . se nder; var d = this . repository . finde r, e = this . repository . liner , f = this . editor , h = this . ed itor. editable ( ) ; CKEDITOR . tools . isEmpty ( e . visible ) || ( c = d . getRange ( c [ 0 ] ) , this . focus ( ) , f . fi re( "drop" , { dropRange : c , target : c . startContainer } ) ) ; h . remove Class( "cke_widget_dragging" ) ; e . hideVisible ( ) ; f . fire ( "dragend" , { target : b } ) } var c = this . repository . finder , d = this . repository . locator , e = this . repository . liner , f= this . editor , h = f . editable ( ) , g = [ ] , k = [ ] , m , n ; this . repository . _ . draggedWidget = this ;
var p = c . greedySearch ( ) , q = CKEDITOR . tools . eventsBuffer ( 50 , function ( ) { m = d . locate ( p ) ; k = d . sort ( n , 1 ) ; k . length && ( e . prepare ( p , m ) , e . placeLine ( k [ 0 ] ) ,e . cleanup ( ) ) } ) ; h . addClass ( "cke_widget_dragging" ) ; g . push ( h . on ( "mousemove" , function ( a ) { n = a . data . $ . clientY ; q . input ( ) } ) ) ; f . fir e ( "dragstart " , { target : a . sender } ) ; g . push ( f . document . once ( "mouseup ", b , this ) ) ; h . isInline ( ) || g . push ( CKEDITOR . document . once ( "mouseup" , b , this ) ) } function Z ( a ) { var b, c , d = a . editables ; a . editables = { } ; if ( a . editables ) for ( b in d ) c = d [ b ] , a . initEditable ( b , "string" ==
typeof c ? { selector : c } : c ) } function aa ( a ) { if ( a . mask ) { var b = a . wrapper . findOne ( ".cke_widget_mask" ) ; b || ( b = new CKEDITOR . dom . element ( "img" , a . editor . document ) , b . setAttributes ( { src : CKEDITOR . tools . transparentImageData , "class" : "cke_reset cke_widget_mask" } ) , a . wrapper . append ( b ) ) ; a . mask = b } } function ba ( a ) { if ( a . parts ) { var b = { } , c , d; for ( d in a . parts ) c = a . wrapper . f indO ne( a . parts [ d ] ) , b [ d ] = c ; a . parts = b } } function N ( a , b ) { ca ( a ) ; b a( a ) ; Z ( a ) ; aa ( a ) ; X ( a ) ; V ( a ) ; W ( a ) ; if ( CKEDITOR . env . ie && 9 > CKEDITOR . env . version ) a . wrapper . on ( "dragstart" ,
function ( b ) { var d = b . data . getTarget ( ) ; g . getNestedEditable ( a , d ) || a . inline && g . isDomDragHandler ( d ) || b . data . preventDefault ( ) } ) ; a . wrapper . removeClass ( "cke_widget_new" ) ; a . element . addClass ( "cke_widget_element" ) ; a . on ( "key " , function ( b ) { b = b . data . keyCode ; if ( 13 == b ) a . edit ( ) ; else { if ( b == CKEDITOR . CTRL + 67 || b == CKEDITOR . CTRL + 88 ) { y ( a , b == CKEDITOR . CTRL + 88 ) ; return } if ( b in da || CKEDITOR . CTRL & b || CKEDITOR . ALT & b ) return } return ! 1 } , null , null , 999 ) ; a . on ( "doubleclick" , function ( b ) { a . edit ( ) && b . cancel ( ) } ) ; if ( b . data ) a . on ( "data" , b . data ) ;
if ( b . edit ) a . on ( "edit" , b . edit ) } function ca ( a ) { ( a . wrapper = a . element . getParent ( ) ) . setAttribute ( "data-cke-widget-id" , a . id ) } function r ( a ) { a . element . data ( "cke-widget-data" , encodeURIComponent ( JSON . stringify ( a . data ) ) ) } CKEDITOR . plugins . add ( "widget" , { lang : "af,ar,az,bg,ca,cs,cy,da,de,de-ch,el,en,en-gb,eo,es,es-mx,eu,fa,fi,fr,gl,he,hr,hu,id,it,ja,km,ko,ku,lv,nb,nl,no,oc,pl,pt,pt-br,ru,sk,sl,sq,sv,tr,tt,ug,uk,vi,zh,zh-cn" , requires : "lineutils,clipboard,widgetselection " , onLoad : function ( ) { CKEDITOR . addCss ( ".cke_widget_wrapper{position:relative;outline:none}.cke_widget_inline{display:inline-block}.cke_widget_wrapper:hover\x3e.cke_widget_element{outline:2px solid yellow;cursor:default}.cke_widget_wrapper:hover .cke_widget_editable{outline:2px solid yellow}.cke_widget_wrapper.cke_widget_focused\x3e.cke_widget_element,.cke_widget_wrapper .cke_widget_editable.cke_widget_editable_focused{outline:2px solid #ace}.cke_widget_editable{cursor:text}.cke_widget_drag_handler_container{position:absolute;width:15px;height:0;display:none;opacity:0.75;transition:height 0s 0.2s;line-height:0}.cke_widget_wrapper:hover\x3e.cke_widget_drag_handler_container{height:15px;transition:none}.cke_widget_drag_handler_container:hover{opacity:1}img.cke_widget_drag_handler{cursor:move;width:15px;height:15px;display:inline-block}.cke_widget_mask{position:absolute;top:0;left:0;width:100%;height:100%;display:block}.cke_editable.cke_widget_dragging, .cke_editable.cke_widget_dragging *{cursor:move !important}" ) } ,
beforeInit : function ( a ) { a . widgets = new p ( a ) } , afterInit : function ( a ) { var b = a . widgets . registered , c , d , e ; for ( d in b ) c = b [ d ] , ( e = c . button ) && a . ui . addButton && a . ui . addButton ( CKEDITOR . tools . capitalize ( c . name , ! 0 ) , { label : e , command : c . name , toolbar : "insert,10" } ) ; S ( a ) } } ) ; p . prototype = { MIN _SELECTION _CHECK _INTERVAL : 500 , add : function ( a , b ) { b = CKEDITOR . tools . prototypedCopy ( b ) ; b . name = a ; b . _ = b . _ || { } ; this . editor . fire ( "widgetDefinition" , b ) ; b . template && ( b . template = new CKEDITOR . template ( b . template ) ) ; O ( this . editor , b ) ; P ( this , b ) ; return this . registered [ a ] =
b } , addUpcastCallback : function ( a ) { this . _ . upcastCallbacks . push ( a ) } , checkSelection : function ( ) { var a = this . editor . getSelection ( ) , b = a . getSelectedElement ( ) , c = z ( this ) , d ; if ( b && ( d = this . getByElement ( b , ! 0 ) ) ) return c . focus ( d ) . select ( d ) . commit ( ) ; a = a . getRanges ( ) [ 0 ] ; if ( ! a || a . collapsed ) return c . commit ( ) ; a = new CKEDITOR . dom . walker ( a ) ; for ( a . evaluator = g . isDomWidgetWrapper ; b = a . next ( ) ; ) c . select ( this . getByElement ( b ) ) ; c . commit ( ) } , checkWidgets : function ( a ) { this . fire ( "checkWidgets" , CKEDITOR . tools . copy ( a || { } ) ) } , del : function ( a ) { if ( this . focused ===
a ) { var b = a . editor , c = b . createRange ( ) , d ; ( d = c . moveToClosestEditablePosition ( a . wrapper , ! 0 ) ) || ( d = c . moveToClosestEditablePosition ( a . wrapper , ! 1 ) ) ; d && b . getSelection ( ) . selectRanges ( [ c ] ) } a . wrapper . remove ( ) ; this . destroy ( a , ! 0 ) } , destroy : function ( a , b ) { this . widgetHoldingFocusedEditable === a && n ( this , a , null , b ) ; a . destroy ( b ) ; delete this . instances [ a . id ] ; this . fire ( "instanceDestroyed" , a ) } , destroyAll : function ( a , b ) { var c , d , e = this . instances ; if ( b && ! a ) { d = b . find ( ".cke_widget_wrapper" ) ; for ( var e = d . count ( ) , f = 0 ; f < e ; ++ f ) ( c = this . getByElement ( d . getItem ( f ) ,
! 0 ) ) && this . destroy ( c ) } else for ( d in e ) c = e [ d ] , this . destroy ( c , a ) } , finalizeCreation : function ( a ) { ( a = a . getFirst ( ) ) && g . isDomWidgetWrapper ( a ) && ( this . editor . insertElement ( a ) , a = this . getByElement ( a ) , a . ready = ! 0 , a . fire ( "ready" ) , a . focus ( ) ) } , getByElement : function ( ) { function a ( a ) { return a . is ( b ) && a . data ( "cke-widget-id" ) } var b = { div : 1 , span : 1 } ; return function ( b , d ) { if ( ! b ) return null ; var e = a ( b ) ; if ( ! d && ! e ) { var f = this . editor . editable ( ) ; do b = b . getParent ( ) ; while ( b && ! b . equals ( f ) && ! ( e = a ( b ) ) ) } return this . instances [ e ] || null } } ( ) ,
initOn : function ( a , b , c ) { b ? "string" == typeof b && ( b = this . registered [ b ] ) : b = this . registered [ a . data ( "widget" ) ] ; if ( ! b ) return null ; var d = this . wrapElement ( a , b . name ) ; return d ? d . hasClass ( "cke_widget_new" ) ? ( a = new g ( this , this . _ . nextId ++ , a , b , c ) , a . isInited ( ) ? this . instances [ a . id ] = a : null ) : this . getByElement ( a ) : null } , initOnAll : function ( a ) { a = ( a || this . editor . editable ( ) ) . find ( ".cke_widget_new" ) ; for ( var b = [ ] , c , d = a . count ( ) ; d -- ; ) ( c = this . initOn ( a . getItem ( d ) . getFirst ( g . isDomWidgetElement ) ) ) && b . push ( c ) ; return b } , onWidget : function ( a ) { var b =
Array . prototype . slice . call ( arguments ) ; b . shift ( ) ; for ( var c in this . instances ) { var d = this . instances [ c ] ; d . name == a && d . on . apply ( d , b ) } this . on ( "instanceCreated" , function ( c ) { c = c . data ; c . name == a && c . on . apply ( c , b ) } ) } , parseElementClasses : function ( a ) { if ( ! a ) return null ; a = CKEDITOR . tools . trim ( a ) . split ( /\s+/ ) ; for ( var b , c = { } , d = 0 ; b = a . pop ( ) ; ) - 1 == b . indexOf ( "cke_" ) && ( c [ b ] = d = 1 ) ; return d ? c : null } , wrapElement : function ( a , b ) { var c = null , d , e ; if ( a instanceof CKEDITOR . dom . element ) { d = this . registered [ b || a . data ( "widget" ) ] ; if ( ! d ) return null ;
if ( ( c = a . getParent ( ) ) && c . type == CKEDITOR . NODE _ELEMENT && c . data ( "cke-widget-wrapper" ) ) return c ; a . hasAttribute ( "data-cke-widget-keep-attr" ) || a . data ( "cke-widget-keep-attr" , a . data ( "widget" ) ? 1 : 0 ) ; b && a. data ( "widget" , b ) ; e = x ( d , a . getName ( ) ) ; c = new CKEDITOR . dom . element ( e ? "span" : "div" ) ; c . setAttributes ( v ( e ) ) ; c . data ( "cke-display-name" , d . pathName ? d . pathName : a . getName ( ) ) ; a . getParent ( ! 0 ) && c . replace ( a ) ; a . appendTo ( c ) } else if ( a instanceof CKEDITOR . htmlParser . element ) { d = this . registered [ b || a . attributes [ "data-widget" ] ] ; if ( ! d ) return null ;
if ( ( c = a . parent ) && c . type == CKEDITOR . NODE _ELEMENT && c . attributes [ "data-cke-widget-wrapper" ] ) return c ; "data-cke-widget-keep-attr" in a . attributes || ( a . attributes [ "data-cke-widget-keep-attr" ] = a . attributes [ "data-widget" ] ? 1 : 0 ) ; b && ( a . attributes [ "data-widget" ] = b ) ; e = x ( d , a . name ) ; c = new CKEDITOR . htmlParser . element ( e ? "span" : "div" , v ( e ) ) ; c . attributes [ "data-cke-display-name" ] = d . pathName ? d . pathName : a . name ; d = a . parent ; var f ; d && ( f = a . getIndex ( ) , a . remove ( ) ) ; c . add ( a ) ; d && w ( d , f , c ) } return c } , _tests _createEditableFilter : u } ; CKEDITOR . event . implementOn ( p . prototype ) ;
g . prototype = { addClass : function ( a ) { this . element . addClass ( a ) } , applyStyle : function ( a ) { A ( this , a , 1 ) } , checkStyleActive : function ( a ) { a = B ( a ) ; var b ; if ( ! a ) return ! 1 ; for ( ; b = a . pop ( ) ; ) if ( ! this . hasClass ( b ) ) return ! 1 ; return ! 0 } , destroy : function ( a ) { this . fire ( "destroy" ) ; if ( this . editables ) for ( var b in this . editables ) this . destroyEditable ( b , a ) ; a || ( "0" == this . element . data ( "cke-widget-keep-attr" ) && this . element . removeAttribute ( "data-widget" ) , this . element . removeAttributes ( [ "data-cke-widget-data" , "data-cke-widget-keep-attr" ] ) ,
this . element . removeClass ( "cke_widget_element" ) , this . element . replace ( this . wrapper ) ) ; this . wrapper = null } , destroyEditable : function ( a , b ) { var c = this . editables [ a ] ; c . removeListener ( "focus" , E ) ; c . removeListener ( "blur" , D ) ; this . editor . focusManager . remove ( c ) ; b || ( this . repository . destroyAll ( ! 1 , c ) , c . removeClass ( "cke_widget_editable" ) , c . removeClass ( "cke_widget_editable_focused" ) , c . removeAttributes ( [ "contenteditable" , "data-cke-widget-editable" , "data-cke-enter-mode" ] ) ) ; delete this . editables [ a ] } , edit : function ( ) { var a =
{ dialog : this . dialog } , b = this ; if ( ! 1 === this . fire ( "edit" , a ) || ! a . dialog ) return ! 1 ; this . editor . openDialog ( a . dialog , function ( a ) { var d , e ; ! 1 !== b . fire ( "dialog" , a ) && ( d = a . on ( "show" , function ( ) { a . setupContent ( b ) } ) , e = a . on ( "ok" , function ( ) { var d , e = b . on ( "data" , function ( a ) { d = 1 ; a . cancel ( ) } , null , null , 0 ) ; b . editor . fire ( "saveSnapshot" ) ; a . commitContent ( b ) ; e . removeListener ( ) ; d && ( b . fire ( "data" , b . data ) , b . editor . fire ( "saveSnapshot" ) ) } ) , a . once ( "hide" , function ( ) { d . removeListener ( ) ; e . removeListener ( ) } ) ) } ) ; return ! 0 } , getClasses : function ( ) { return this . repository . parseElementClasses ( this . element . getAttribute ( "class" ) ) } ,
hasClass : function ( a ) { return this . element . hasClass ( a ) } , initEditable : function ( a , b ) { var c = this . _findOneNotNested ( b . selector ) ; return c && c . is ( CKEDITOR . dtd . $editable ) ? ( c = new q ( this . editor , c , { filter : u . call ( this . repository , this . name , a , b ) } ) , this . editables [ a ] = c , c . setAttributes ( { contenteditable : "true" , "data-cke-widget-editable" : a , "data-cke-enter-mode" : c . enterMode } ) , c . filter && c . data ( "cke-filter" , c . filter . id ) , c . addClass ( "cke_widget_editable" ) , c . removeClass ( "cke_widget_editable_focused" ) , b . pathName && c . data ( "cke-display-name" ,
b . pathName ) , this . editor . focusManager . add ( c ) , c . on ( "focus" , E , this ) , CKEDITOR . env . ie && c . on ( "blur" , D , this ) , c . _ . initialSetData = ! 0 , c . setData ( c . getHtml ( ) ) , ! 0 ) : ! 1 } , _findOneNotNested : function ( a ) { a = this . wrapper . find ( a ) ; for ( var b , c , d = 0 ; d < a . count ( ) ; d ++ ) if ( b = a . getItem ( d ) , c = b . getAscendant ( g . isDomWidgetWrapper ) , this . wrapper . equals ( c ) ) return b ; return null } , isInited : function ( ) { return ! ( ! this . wrapper || ! this . inited ) } , isReady : function ( ) { return this . isInited ( ) && this . ready } , focus : function ( ) { var a = this . editor . getSelection ( ) ;
if ( a ) { var b = this . editor . checkDirty ( ) ; a . fake ( this . wrapper ) ; ! b && this . editor . resetDirty ( ) } this . editor . focus ( ) } , removeClass : function ( a ) { this . element . removeClass ( a ) } , removeStyle : function ( a ) { A ( this , a , 0 ) } , setData : function ( a , b ) { var c = this . data , d = 0 ; if ( "string" == typeof a ) c [ a ] !== b && ( c [ a ] = b , d = 1 ) ; else { var e = a ; for ( a in e ) c [ a ] !== e [ a ] && ( d = 1 , c [ a ] = e [ a ] ) } d && this . dataReady && ( r ( this ) , this . fire ( "data" , c ) ) ; return this } , setFocused : function ( a ) { this . wrapper [ a ? "addClass" : "removeClass" ] ( "cke_widget_focused" ) ; this . fire ( a ? "focus" :
"blur" ) ; return this } , setSelected : function ( a ) { this . wrapper [ a ? "addClass" : "removeClass" ] ( "cke_widget_selected" ) ; this . fire ( a ? "select" : "deselect" ) ; return this } , updateDragHandlerPosition : function ( ) { var a = this . editor , b = this . element . $ , c = this . _ . dragHandlerOffset , b = { x : b . offsetLeft , y : b . offsetTop - 15 } ; c && b . x == c . x && b . y == c . y || ( c = a . checkDirty ( ) , a . fire ( "lockSnapshot" ) , this . dragHandlerContainer . setStyles ( { top : b . y + "px" , left : b . x + "px" , display : "block" } ) , a . fire ( "unlockSnapshot" ) , ! c && a . resetDirty ( ) , this . _ . dragHandlerOffset =
b ) } } ; CKEDITOR . event . implementOn ( g . prototype ) ; g . getNestedEditable = function ( a , b ) { return ! b || b . equals ( a ) ? null : g . isDomNestedEditable ( b ) ? b : g . getNestedEditable ( a , b . getParent ( ) ) } ; g . isDomDragHandler = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "data-cke-widget-drag-handler" ) } ; g . isDomDragHandlerContainer = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasClass ( "cke_widget_drag_handler_container" ) } ; g . isDomNestedEditable = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "data-cke-widget-editable" ) } ;
g . isDomWidgetElement = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "data-widget" ) } ; g . isDomWidgetWrapper = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "data-cke-widget-wrapper" ) } ; g . isParserWidgetElement = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && ! ! a . attributes [ "data-widget" ] } ; g . isParserWidgetWrapper = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && ! ! a . attributes [ "data-cke-widget-wrapper" ] } ; q . prototype = CKEDITOR . tools . extend ( CKEDITOR . tools . prototypedCopy ( CKEDITOR . dom . element . prototype ) ,
{ setData : function ( a ) { this . _ . initialSetData || this . editor . widgets . destroyAll ( ! 1 , this ) ; this . _ . initialSetData = ! 1 ; a = this . editor . dataProcessor . toHtml ( a , { context : this . getName ( ) , filter : this . filter , enterMode : this . enterMode } ) ; this . setHtml ( a ) ; this . editor . widgets . initOnAll ( this ) } , getData : function ( ) { return this . editor . dataProcessor . toDataFormat ( this . getHtml ( ) , { context : this . getName ( ) , filter : this . filter , enterMode : this . enterMode } ) } } ) ; var U = /^(?:<(?:div|span)(?: data-cke-temp="1")?(?: id="cke_copybin")?(?: data-cke-temp="1")?>)?(?:<(?:div|span)(?: style="[^"]+")?>)?<span [^>]*data-cke-copybin-start="1"[^>]*>.?<\/span>([\s\S]+)<span [^>]*data-cke-copybin-end="1"[^>]*>.?<\/span>(?:<\/(?:div|span)>)?(?:<\/(?:div|span)>)?$/i ,
ca = { 37 : 1 , 38 : 1 , 39 : 1 , 40 : 1 , 8 : 1 , 46 : 1 } ; ( function ( ) { function a ( ) { } function b ( a , b , e ) { return e && this . checkElement ( a ) ? ( a = e . widgets . getByElement ( a , ! 0 ) ) && a . checkStyleActive ( this ) : ! 1 } CKEDITOR . style . addCustomHandler ( { type : "widget" , setup : function ( a ) { this . widget = a . widget } , apply : function ( a ) { a instanceof CKEDITOR . editor && this . checkApplicable ( a . elementPath ( ) , a ) && a . widgets . focused . applyStyle ( this ) } , remove : function ( a ) { a instanceof CKEDITOR . editor && this . checkApplicable ( a . elementPath ( ) , a ) && a . widgets . focused . removeStyle ( this ) } ,
checkActive : function ( a , b ) { return this . checkElementMatch ( a . lastElement , 0 , b ) } , checkApplicable : fun ction ( a , b ) { return b instanceof CKEDITOR . editor ? this . checkElement ( a . lastElement ) : ! 1 } , checkElementMatch : b , checkElementRemovable : b , checkElement : function ( a ) { return g . isDomWidgetWrapper ( a ) ? ( a = a . getFirst ( g . isDomWidgetElement ) ) && a . data ( "widget" ) == this . widget : ! 1 } , buildPreview : function ( a ) { return a || this . _ . definition . name } , toAllowedContentRules : function ( a ) { if ( ! a ) return null ; a = a . widgets . registered [ this . widget ] ; var b ,
e = { } ; if ( ! a ) return null ; if ( a . styleableElements ) { b = this . getClassesArray ( ) ; if ( ! b ) return null ; e [ a . styleableElements ] = { classes : b , propertiesOnly : ! 0 } ; return e } return a . styleToAllowedContentRules ? a . styleToAllowedContentRu les ( this ) : null } , getClassesArray : function ( ) { var a = this . _ . definition . attributes && this . _ . definition . attributes [ "class" ] ; return a ? CKEDITOR . tools . trim ( a ) . split ( /\s+/ ) : null } , applyToRange : a , removeFromRange : a , applyToObject : a } ) } ) ( ) ; CKEDITOR . plugins . widget = g ; g . repository = p ; g . nestedEditab le= q } ) ( ) ;
Array . prototype . slice . call ( arguments ) ; b . shift ( ) ; for ( var c in this . instances ) { var d = this . instances [ c ] ; d . name == a && d . on . apply ( d , b ) } this . on ( "instanceCreated" , function ( d ) { d = d . data ; d . name == a && d . on . apply ( d , b ) } ) } , parseElementClasses : function ( a ) { if ( ! a ) return null ; a = CKEDITOR . tools . trim ( a ) . split ( /\s+/ ) ; for ( var b , c = { } , d = 0 ; b = a . pop ( ) ; ) - 1 == b . indexOf ( "cke_" ) && ( c [ b ] = d = 1 ) ; return d ? c : null } , wrapElement : function ( a , b ) { var c = null , d , e ; if ( a instanceof CKEDITOR . dom . element ) { b = b || a . data ( "widget" ) ; d = this . registered [ b ]; if ( ! d ) return null ;
if ( ( c = a . getParent ( ) ) && c . type == CKEDITOR . NODE _ELEMENT && c . data ( "cke-widget-wrapper" ) ) return c ; a . hasAttribute ( "data-cke-widget-keep-attr" ) || a . data ( "cke-widget-keep-attr" , a . data ( "widget" ) ? 1 : 0 ) ; a . data ( "widget" , b ) ; e = x ( d , a . getName ( ) ) ; c = new CKEDITOR . dom . element ( e ? "span" : "div" ) ; c . setAttributes ( v ( e , b )) ; c . data ( "cke-display-name" , d . pathName ? d . pathName : a . getName ( ) ) ; a . getParent ( ! 0 ) && c . replace ( a ) ; a . appendTo ( c ) } else if ( a instanceof CKEDITOR . htmlParser . element ) { b = b || a . attributes [ "data-widget" ] ; d = this . registered [ b ] ;
if ( ! d ) return null ; if ( ( c = a . parent ) && c . type == CKEDITOR . NODE _ELEMENT && c . attributes [ "data-cke-widget-wrapper" ] ) return c ; "data-cke-widget-keep-attr" in a . attributes || ( a . attributes [ "data-cke-widget-keep-attr" ] = a . attributes [ "data-widget" ] ? 1 : 0 ) ; b && ( a . attributes [ "data-widget" ] = b ) ; e = x ( d , a . name ) ; c = new CKEDITOR . htmlParser . element ( e ? "span" : "div" , v ( e , b )) ; c . attributes [ "data-cke-display-name" ] = d . pathName ? d . pathName : a . name ; d = a . parent ; var f ; d && ( f = a . getIndex ( ) , a . remove ( ) ) ; c . add ( a ) ; d && w ( d , f , c ) } return c } , _tests _createEditableFilter : u } ;
CKEDITOR . event . implementOn ( p . prototype ) ; g . prototype = { addClass : function ( a ) { this . element . addClass ( a ) ; this . wrapper . addClass ( g . WRAPPER _CLASS _PREFIX + a ) }, applyStyle : function ( a ) { A ( this , a , 1 ) } , checkStyleActive : function ( a ) { a = B ( a ) ; var b ; if ( ! a ) return ! 1 ; for ( ; b = a . pop ( ) ; ) if ( ! this . hasClass ( b ) ) return ! 1 ; return ! 0 } , destroy : function ( a ) { this . fire ( "destroy" ) ; if ( this . editables ) for ( var b in this . editables ) this . destroyEditable ( b , a ) ; a || ( "0" == this . element . data ( "cke-widget-keep-attr" ) && this . element . removeAttribute ( "data-widget" ) ,
this . element . removeAttributes ( [ "data-cke-widget-data" , "data-cke-widget-keep-attr" ] ) , this . element . removeClass ( "cke_widget_element" ) , this . element . replace ( this . wrapper ) ) ; this . wrapper = null } , destroyEditable : function ( a , b ) { var c = this . editables [ a ] ; c . removeListener ( "focus" , E ) ; c . removeListener ( "blur" , D ) ; this . editor . focusManager . remove ( c ) ; b || ( this . repository . destroyAll ( ! 1 , c ) , c . removeClass ( "cke_widget_editable" ) , c . removeClass ( "cke_widget_editable_focused" ) , c . removeAttributes ( [ "contenteditable" , "data-cke-widget-editable" ,
"data-cke-enter-mode" ] ) ) ; delete this . editables [ a ] } , edit : function ( ) { var a = { dialog : this . dialog } , b = this ; if ( ! 1 === this . fire ( "edit" , a ) || ! a . dialog ) return ! 1 ; this . editor . openDialog ( a . dialog , function ( a ) { var d , e ; ! 1 !== b . fire ( "dialog" , a ) && ( d = a . on ( "show" , function ( ) { a . setupContent ( b ) } ) , e = a . on ( "ok" , function ( ) { var d , e = b . on ( "data" , function ( a ) { d = 1 ; a . cancel ( ) } , null , null , 0 ) ; b . editor . fire ( "saveSnapshot" ) ; a . commitContent ( b ) ; e . removeListener ( ) ; d && ( b . fire ( "data" , b . data ) , b . editor . fire ( "saveSnapshot" ) ) } ) , a . once ( "hide" , function ( ) { d . removeListener ( ) ;
e . removeListener ( ) } ) ) } ) ; return ! 0 } , getClasses : function ( ) { return this . repository . parseElementClasses ( this . element . getAttribute ( "class" ) ) } , hasClass : function ( a ) { return this . element . hasClass ( a ) } , initEditable : function ( a , b ) { var c = this . _findOneNotNested ( b . selector ) ; return c && c . is ( CKEDITOR . dtd . $editable ) ? ( c = new q ( this . editor , c , { filter : u . call ( this . repository , this . name , a , b ) } ) , this . editables [ a ] = c , c . setAttributes ( { contenteditable : "true" , "data-cke-widget-editable" : a , "data-cke-enter-mode" : c . enterMode } ) , c . filter &&
c . data ( "cke-filter" , c . filter . id ) , c . addClass ( "cke_widget_editable" ) , c . removeClass ( "cke_widget_editable_focused" ) , b . pathName && c . data ( "cke-display-name" , b . pathName ) , this . editor . focusManager . add ( c ) , c . on ( "focus" , E , this ) , CKEDITOR . env . ie && c . on ( "blur" , D , this ) , c . _ . initialSetData = ! 0 , c . setData ( c . getHtml ( ) ) , ! 0 ) : ! 1 } , _findOneNotNested : function ( a ) { a = this . wrapper . find ( a ) ; for ( var b , c , d = 0 ; d < a . count ( ) ; d ++ ) if ( b = a . getItem ( d ) , c = b . getAscendant ( g . isDomWidgetWrapper ) , this . wrapper . equals ( c ) ) return b ; return null } , isInited : function ( ) { return ! ( ! this . wrapper ||
! this . inited ) } , isReady : function ( ) { return this . isInited ( ) && this . ready } , focus : function ( ) { var a = this . editor . getSelection ( ) ; if ( a ) { var b = this . editor . checkDirty ( ) ; a . fake ( this . wrapper ) ; ! b && this . editor . resetDirty ( ) } this . editor . focus ( ) } , removeClass : function ( a ) { this . element . removeClass ( a ) ; this . wrapper . removeClass ( g . WRAPPER _CLASS _PREFIX + a ) }, removeStyle : function ( a ) { A ( this , a , 0 ) } , setData : function ( a , b ) { var c = this . data , d = 0 ; if ( "string" == typeof a ) c [ a ] !== b && ( c [ a ] = b , d = 1 ) ; else { var e = a ; for ( a in e ) c [ a ] !== e [ a ] && ( d = 1 , c [ a ] =
e [ a ] ) } d && this . dataReady && ( r ( this ) , this . fire ( "data" , c ) ) ; return this } , setFocused : function ( a ) { this . wrapper [ a ? "addClass" : "removeClass" ] ( "cke_widget_focused" ) ; this . fire ( a ? "focus" : "blur" ) ; return this } , setSelected : function ( a ) { this . wrapper [ a ? "addClass" : "removeClass" ] ( "cke_widget_selected" ) ; this . fire ( a ? "select" : "deselect" ) ; return this } , updateDragHandlerPosition : function ( ) { var a = this . editor , b = this . element . $ , c = this . _ . dragHandlerOffset , b = { x : b . offsetLeft , y : b . offsetTop - 15 } ; c && b . x == c . x && b . y == c . y || ( c = a . checkDirty ( ) ,
a . fire ( "lockSnapshot" ) , this . dragHandlerContainer . setStyles ( { top : b . y + "px" , left : b . x + "px" , display : "block" } ) , a . fire ( "unlockSnapshot" ) , ! c && a . resetDirty ( ) , this . _ . dragHandlerOffset = b ) } } ; CKEDITOR . event . implementOn ( g . prototype ) ; g . getNestedEditable = function ( a , b ) { return ! b || b . equals ( a ) ? null : g . isDomNestedEditable ( b ) ? b : g . getNestedEditable ( a , b . getParent ( ) ) } ; g . isDomDragHandler = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "data-cke-widget-drag-handler" ) } ; g . isDomDragHandlerContainer = function ( a ) { return a . type ==
CKEDITOR . NODE _ELEMENT && a . hasClass ( "cke_widget_drag_handler_container" ) } ; g . isDomNestedEditable = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "data-cke-widget-editable" ) } ; g . isDomWidgetElement = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "data-widget" ) } ; g . isDomWidgetWrapper = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && a . hasAttribute ( "data-cke-widget-wrapper" ) } ; g . isParserWidgetElement = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && ! ! a . attributes [ "data-widget" ] } ;
g . isParserWidgetWrapper = function ( a ) { return a . type == CKEDITOR . NODE _ELEMENT && ! ! a . attributes [ "data-cke-widget-wrapper" ] } ; g . WRAPPER _CLASS _PREFIX = "cke_widget_wrapper_" ; q . prototype = CKEDITOR . tools . extend ( CKEDITOR . tools . prototypedCopy ( CKEDITOR . dom . element . prototype ) , { setData : function ( a ) { this . _ . initialSetData || this . editor . widgets . destroyAll ( ! 1 , this ) ; this . _ . initialSetData = ! 1 ; a = this . editor . dataProcessor . toHtml ( a , { context : this . getName ( ) , filter : this . filter , enterMode : this . enterMode } ) ; this . setHtml ( a ) ; this . editor . widgets . initOnAll ( this ) } ,
getData : function ( ) { return this . editor . dataProcessor . toDataFormat ( this . getHtml ( ) , { context : this . getName ( ) , filter : this . filter , enterMode : this . enterMode } ) } } ) ; var U = /^(?:<(?:div|span)(?: data-cke-temp="1")?(?: id="cke_copybin")?(?: data-cke-temp="1")?>)?(?:<(?:div|span)(?: style="[^"]+")?>)?<span [^>]*data-cke-copybin-start="1"[^>]*>.?<\/span>([\s\S]+)<span [^>]*data-cke-copybin-end="1"[^>]*>.?<\/span>(?:<\/(?:div|span)>)?(?:<\/(?:div|span)>)?$/i , d a= { 37 : 1 , 38 : 1 , 39 : 1 , 40 : 1 , 8 : 1 , 46 : 1 } ; ( function ( ) { function a ( ) { }
function b ( a , b , c ){ return c && this . checkElement( a ) ? ( a = c . widgets . getByElement ( a , ! 0 ) ) && a . checkStyleA ctive ( this ) : ! 1 } var c = { } ; CKEDITOR . style . addCustomHandler ( { type : "widget" , setup : function ( a ) { this . widget = a . widget ; if ( this . group = "string" == typeof a . group ? [ a . group ] : a . group ) { a = this . widget ; var b ; c [ a ] || ( c [ a ] = { } ) ; for ( var f = 0 , h = this . group . length ; f < h ; f ++ ) b= this . group [ f ] , c [ a ] [ b ] || ( c [ a ] [ b ] = [ ] ) , c [ a ] [ b ] . push ( this ) } } , apply : function ( a ) { var b ; a instanceof CKEDITOR . editor && this . checkApplicable ( a . elementPath ( ) , a ) && ( b = a . widgets . focused ,
this . group && this . removeStylesFromSameGroup ( a ) , b . applyStyle ( this ) ) } , remove : function ( a ) { a instanceof CKEDITOR . editor && this . checkApplicable ( a . elementPath ( ) , a ) && a . widgets . focused . removeSty le( this ) } , removeStylesFromSameGroup : function ( a ) { var b , f , h = ! 1 ; if ( ! ( a instanceof CKEDITOR . editor ) ) return ! 1 ; f = a . elementPath ( ) ; if ( this . checkApplicable ( f , a ) ) for ( var g = 0 , k = this . group . length ; g < k ; g ++ ) { b = c [ this . widget ] [ this . group [ g ] ] ; for ( var m = 0 ; m < b . length ; m ++ ) b [ m ] !== this && b [ m ] . checkActive ( f , a ) && ( a . widgets . focused . removeSty le( b [ m ] ) ,
h = ! 0 ) } return h } , checkActive : function ( a , b ) { return this . checkElementMatch ( a . lastElement , 0 , b ) } , checkApplicable : function ( a , b ) { return b instanceof CKEDITOR . editor ? this . checkElement ( a . lastElement ) : ! 1 } , checkElementMatch : b , checkElementRemovable : b , checkElement : function ( a ) { return g . isDomWidgetWrapper ( a ) ? ( a = a . getFirst ( g . isDomWidgetElement ) ) && a . data ( "widget" ) == this . widget : ! 1 } , buildPreview : function ( a ) { return a || this . _ . definition . name } , toAllowedContentRules : function ( a ) { if ( ! a ) return null ; a = a . widgets . registered [ this . widget ] ;
var b , c = { } ; if ( ! a ) return null ; if ( a . styleableElements ) { b = this . getClassesArray ( ) ; if ( ! b ) return null ; c [ a . styleableElements ] = { classes : b , propertiesOnly : ! 0 } ; return c } return a . styleToAllowedContentRules ? a . styleToAllowedContentRules ( this ) : null } , getClassesArray : function ( ) { var a = this . _ . definition . attributes && this . _ . definition . attributes [ "class" ] ; return a ? CKEDITOR . tools . trim ( a ) . split ( /\s+/ ) : null } , applyToRange : a , removeFromRange : a , applyToObject : a } ) } ) ( ) ; CKEDITOR . plugins . widget = g ; g . repository = p ; g . nestedEditable = q } ) ( ) ;