10236 lines
		
	
	
	
		
			310 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			10236 lines
		
	
	
	
		
			310 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | (function () { | ||
|  | var inlite = (function () { | ||
|  |   'use strict'; | ||
|  | 
 | ||
|  |   var global = tinymce.util.Tools.resolve('tinymce.ThemeManager'); | ||
|  | 
 | ||
|  |   var global$1 = tinymce.util.Tools.resolve('tinymce.Env'); | ||
|  | 
 | ||
|  |   var global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils'); | ||
|  | 
 | ||
|  |   var global$3 = tinymce.util.Tools.resolve('tinymce.util.Delay'); | ||
|  | 
 | ||
|  |   var flatten = function (arr) { | ||
|  |     return arr.reduce(function (results, item) { | ||
|  |       return Array.isArray(item) ? results.concat(flatten(item)) : results.concat(item); | ||
|  |     }, []); | ||
|  |   }; | ||
|  |   var $_ccn98l17xjjgwejz7 = { flatten: flatten }; | ||
|  | 
 | ||
|  |   var result = function (id, rect) { | ||
|  |     return { | ||
|  |       id: id, | ||
|  |       rect: rect | ||
|  |     }; | ||
|  |   }; | ||
|  |   var match = function (editor, matchers) { | ||
|  |     for (var i = 0; i < matchers.length; i++) { | ||
|  |       var f = matchers[i]; | ||
|  |       var result_1 = f(editor); | ||
|  |       if (result_1) { | ||
|  |         return result_1; | ||
|  |       } | ||
|  |     } | ||
|  |     return null; | ||
|  |   }; | ||
|  |   var $_6lg87517zjjgwejza = { | ||
|  |     match: match, | ||
|  |     result: result | ||
|  |   }; | ||
|  | 
 | ||
|  |   var fromClientRect = function (clientRect) { | ||
|  |     return { | ||
|  |       x: clientRect.left, | ||
|  |       y: clientRect.top, | ||
|  |       w: clientRect.width, | ||
|  |       h: clientRect.height | ||
|  |     }; | ||
|  |   }; | ||
|  |   var toClientRect = function (geomRect) { | ||
|  |     return { | ||
|  |       left: geomRect.x, | ||
|  |       top: geomRect.y, | ||
|  |       width: geomRect.w, | ||
|  |       height: geomRect.h, | ||
|  |       right: geomRect.x + geomRect.w, | ||
|  |       bottom: geomRect.y + geomRect.h | ||
|  |     }; | ||
|  |   }; | ||
|  |   var $_1x174x181jjgwejzd = { | ||
|  |     fromClientRect: fromClientRect, | ||
|  |     toClientRect: toClientRect | ||
|  |   }; | ||
|  | 
 | ||
|  |   var toAbsolute = function (rect) { | ||
|  |     var vp = global$2.DOM.getViewPort(); | ||
|  |     return { | ||
|  |       x: rect.x + vp.x, | ||
|  |       y: rect.y + vp.y, | ||
|  |       w: rect.w, | ||
|  |       h: rect.h | ||
|  |     }; | ||
|  |   }; | ||
|  |   var measureElement = function (elm) { | ||
|  |     var clientRect = elm.getBoundingClientRect(); | ||
|  |     return toAbsolute({ | ||
|  |       x: clientRect.left, | ||
|  |       y: clientRect.top, | ||
|  |       w: Math.max(elm.clientWidth, elm.offsetWidth), | ||
|  |       h: Math.max(elm.clientHeight, elm.offsetHeight) | ||
|  |     }); | ||
|  |   }; | ||
|  |   var getElementRect = function (editor, elm) { | ||
|  |     return measureElement(elm); | ||
|  |   }; | ||
|  |   var getPageAreaRect = function (editor) { | ||
|  |     return measureElement(editor.getElement().ownerDocument.body); | ||
|  |   }; | ||
|  |   var getContentAreaRect = function (editor) { | ||
|  |     return measureElement(editor.getContentAreaContainer() || editor.getBody()); | ||
|  |   }; | ||
|  |   var getSelectionRect = function (editor) { | ||
|  |     var clientRect = editor.selection.getBoundingClientRect(); | ||
|  |     return clientRect ? toAbsolute($_1x174x181jjgwejzd.fromClientRect(clientRect)) : null; | ||
|  |   }; | ||
|  |   var $_51qgo2180jjgwejzb = { | ||
|  |     getElementRect: getElementRect, | ||
|  |     getPageAreaRect: getPageAreaRect, | ||
|  |     getContentAreaRect: getContentAreaRect, | ||
|  |     getSelectionRect: getSelectionRect | ||
|  |   }; | ||
|  | 
 | ||
|  |   var element = function (element, predicateIds) { | ||
|  |     return function (editor) { | ||
|  |       for (var i = 0; i < predicateIds.length; i++) { | ||
|  |         if (predicateIds[i].predicate(element)) { | ||
|  |           var result = $_6lg87517zjjgwejza.result(predicateIds[i].id, $_51qgo2180jjgwejzb.getElementRect(editor, element)); | ||
|  |           return result; | ||
|  |         } | ||
|  |       } | ||
|  |       return null; | ||
|  |     }; | ||
|  |   }; | ||
|  |   var parent = function (elements, predicateIds) { | ||
|  |     return function (editor) { | ||
|  |       for (var i = 0; i < elements.length; i++) { | ||
|  |         for (var x = 0; x < predicateIds.length; x++) { | ||
|  |           if (predicateIds[x].predicate(elements[i])) { | ||
|  |             return $_6lg87517zjjgwejza.result(predicateIds[x].id, $_51qgo2180jjgwejzb.getElementRect(editor, elements[i])); | ||
|  |           } | ||
|  |         } | ||
|  |       } | ||
|  |       return null; | ||
|  |     }; | ||
|  |   }; | ||
|  |   var $_egsucq17yjjgwejz9 = { | ||
|  |     element: element, | ||
|  |     parent: parent | ||
|  |   }; | ||
|  | 
 | ||
|  |   var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools'); | ||
|  | 
 | ||
|  |   var create = function (id, predicate) { | ||
|  |     return { | ||
|  |       id: id, | ||
|  |       predicate: predicate | ||
|  |     }; | ||
|  |   }; | ||
|  |   var fromContextToolbars = function (toolbars) { | ||
|  |     return global$4.map(toolbars, function (toolbar) { | ||
|  |       return create(toolbar.id, toolbar.predicate); | ||
|  |     }); | ||
|  |   }; | ||
|  |   var $_9rj8kx182jjgwejze = { | ||
|  |     create: create, | ||
|  |     fromContextToolbars: fromContextToolbars | ||
|  |   }; | ||
|  | 
 | ||
|  |   var textSelection = function (id) { | ||
|  |     return function (editor) { | ||
|  |       if (!editor.selection.isCollapsed()) { | ||
|  |         var result = $_6lg87517zjjgwejza.result(id, $_51qgo2180jjgwejzb.getSelectionRect(editor)); | ||
|  |         return result; | ||
|  |       } | ||
|  |       return null; | ||
|  |     }; | ||
|  |   }; | ||
|  |   var emptyTextBlock = function (elements, id) { | ||
|  |     return function (editor) { | ||
|  |       var i; | ||
|  |       var textBlockElementsMap = editor.schema.getTextBlockElements(); | ||
|  |       for (i = 0; i < elements.length; i++) { | ||
|  |         if (elements[i].nodeName === 'TABLE') { | ||
|  |           return null; | ||
|  |         } | ||
|  |       } | ||
|  |       for (i = 0; i < elements.length; i++) { | ||
|  |         if (elements[i].nodeName in textBlockElementsMap) { | ||
|  |           if (editor.dom.isEmpty(elements[i])) { | ||
|  |             return $_6lg87517zjjgwejza.result(id, $_51qgo2180jjgwejzb.getSelectionRect(editor)); | ||
|  |           } | ||
|  |           return null; | ||
|  |         } | ||
|  |       } | ||
|  |       return null; | ||
|  |     }; | ||
|  |   }; | ||
|  |   var $_fhwgeg184jjgwejzf = { | ||
|  |     textSelection: textSelection, | ||
|  |     emptyTextBlock: emptyTextBlock | ||
|  |   }; | ||
|  | 
 | ||
|  |   var fireSkinLoaded = function (editor) { | ||
|  |     editor.fire('SkinLoaded'); | ||
|  |   }; | ||
|  |   var fireBeforeRenderUI = function (editor) { | ||
|  |     return editor.fire('BeforeRenderUI'); | ||
|  |   }; | ||
|  |   var $_77u64d186jjgwejzi = { | ||
|  |     fireSkinLoaded: fireSkinLoaded, | ||
|  |     fireBeforeRenderUI: fireBeforeRenderUI | ||
|  |   }; | ||
|  | 
 | ||
|  |   var global$5 = tinymce.util.Tools.resolve('tinymce.EditorManager'); | ||
|  | 
 | ||
|  |   var isType = function (type) { | ||
|  |     return function (value) { | ||
|  |       return typeof value === type; | ||
|  |     }; | ||
|  |   }; | ||
|  |   var isArray = function (value) { | ||
|  |     return Array.isArray(value); | ||
|  |   }; | ||
|  |   var isNull = function (value) { | ||
|  |     return value === null; | ||
|  |   }; | ||
|  |   var isObject = function (predicate) { | ||
|  |     return function (value) { | ||
|  |       return !isNull(value) && !isArray(value) && predicate(value); | ||
|  |     }; | ||
|  |   }; | ||
|  |   var isString = function (value) { | ||
|  |     return isType('string')(value); | ||
|  |   }; | ||
|  |   var isNumber = function (value) { | ||
|  |     return isType('number')(value); | ||
|  |   }; | ||
|  |   var isFunction = function (value) { | ||
|  |     return isType('function')(value); | ||
|  |   }; | ||
|  |   var isBoolean = function (value) { | ||
|  |     return isType('boolean')(value); | ||
|  |   }; | ||
|  |   var $_e4npq318ajjgwejzo = { | ||
|  |     isString: isString, | ||
|  |     isNumber: isNumber, | ||
|  |     isBoolean: isBoolean, | ||
|  |     isFunction: isFunction, | ||
|  |     isObject: isObject(isType('object')), | ||
|  |     isNull: isNull, | ||
|  |     isArray: isArray | ||
|  |   }; | ||
|  | 
 | ||
|  |   var validDefaultOrDie = function (value, predicate) { | ||
|  |     if (predicate(value)) { | ||
|  |       return true; | ||
|  |     } | ||
|  |     throw new Error('Default value doesn\'t match requested type.'); | ||
|  |   }; | ||
|  |   var getByTypeOr = function (predicate) { | ||
|  |     return function (editor, name, defaultValue) { | ||
|  |       var settings = editor.settings; | ||
|  |       validDefaultOrDie(defaultValue, predicate); | ||
|  |       return name in settings && predicate(settings[name]) ? settings[name] : defaultValue; | ||
|  |     }; | ||
|  |   }; | ||
|  |   var splitNoEmpty = function (str, delim) { | ||
|  |     return str.split(delim).filter(function (item) { | ||
|  |       return item.length > 0; | ||
|  |     }); | ||
|  |   }; | ||
|  |   var itemsToArray = function (value, defaultValue) { | ||
|  |     var stringToItemsArray = function (value) { | ||
|  |       return typeof value === 'string' ? splitNoEmpty(value, /[ ,]/) : value; | ||
|  |     }; | ||
|  |     var boolToItemsArray = function (value, defaultValue) { | ||
|  |       return value === false ? [] : defaultValue; | ||
|  |     }; | ||
|  |     if ($_e4npq318ajjgwejzo.isArray(value)) { | ||
|  |       return value; | ||
|  |     } else if ($_e4npq318ajjgwejzo.isString(value)) { | ||
|  |       return stringToItemsArray(value); | ||
|  |     } else if ($_e4npq318ajjgwejzo.isBoolean(value)) { | ||
|  |       return boolToItemsArray(value, defaultValue); | ||
|  |     } | ||
|  |     return defaultValue; | ||
|  |   }; | ||
|  |   var getToolbarItemsOr = function (predicate) { | ||
|  |     return function (editor, name, defaultValue) { | ||
|  |       var value = name in editor.settings ? editor.settings[name] : defaultValue; | ||
|  |       validDefaultOrDie(defaultValue, predicate); | ||
|  |       return itemsToArray(value, defaultValue); | ||
|  |     }; | ||
|  |   }; | ||
|  |   var $_c8umh189jjgwejzm = { | ||
|  |     getStringOr: getByTypeOr($_e4npq318ajjgwejzo.isString), | ||
|  |     getBoolOr: getByTypeOr($_e4npq318ajjgwejzo.isBoolean), | ||
|  |     getNumberOr: getByTypeOr($_e4npq318ajjgwejzo.isNumber), | ||
|  |     getHandlerOr: getByTypeOr($_e4npq318ajjgwejzo.isFunction), | ||
|  |     getToolbarItemsOr: getToolbarItemsOr($_e4npq318ajjgwejzo.isArray) | ||
|  |   }; | ||
|  | 
 | ||
|  |   var global$6 = tinymce.util.Tools.resolve('tinymce.geom.Rect'); | ||
|  | 
 | ||
|  |   var result$1 = function (rect, position) { | ||
|  |     return { | ||
|  |       rect: rect, | ||
|  |       position: position | ||
|  |     }; | ||
|  |   }; | ||
|  |   var moveTo = function (rect, toRect) { | ||
|  |     return { | ||
|  |       x: toRect.x, | ||
|  |       y: toRect.y, | ||
|  |       w: rect.w, | ||
|  |       h: rect.h | ||
|  |     }; | ||
|  |   }; | ||
|  |   var calcByPositions = function (testPositions1, testPositions2, targetRect, contentAreaRect, panelRect) { | ||
|  |     var relPos, relRect, outputPanelRect; | ||
|  |     var paddedContentRect = { | ||
|  |       x: contentAreaRect.x, | ||
|  |       y: contentAreaRect.y, | ||
|  |       w: contentAreaRect.w + (contentAreaRect.w < panelRect.w + targetRect.w ? panelRect.w : 0), | ||
|  |       h: contentAreaRect.h + (contentAreaRect.h < panelRect.h + targetRect.h ? panelRect.h : 0) | ||
|  |     }; | ||
|  |     relPos = global$6.findBestRelativePosition(panelRect, targetRect, paddedContentRect, testPositions1); | ||
|  |     targetRect = global$6.clamp(targetRect, paddedContentRect); | ||
|  |     if (relPos) { | ||
|  |       relRect = global$6.relativePosition(panelRect, targetRect, relPos); | ||
|  |       outputPanelRect = moveTo(panelRect, relRect); | ||
|  |       return result$1(outputPanelRect, relPos); | ||
|  |     } | ||
|  |     targetRect = global$6.intersect(paddedContentRect, targetRect); | ||
|  |     if (targetRect) { | ||
|  |       relPos = global$6.findBestRelativePosition(panelRect, targetRect, paddedContentRect, testPositions2); | ||
|  |       if (relPos) { | ||
|  |         relRect = global$6.relativePosition(panelRect, targetRect, relPos); | ||
|  |         outputPanelRect = moveTo(panelRect, relRect); | ||
|  |         return result$1(outputPanelRect, relPos); | ||
|  |       } | ||
|  |       outputPanelRect = moveTo(panelRect, targetRect); | ||
|  |       return result$1(outputPanelRect, relPos); | ||
|  |     } | ||
|  |     return null; | ||
|  |   }; | ||
|  |   var calcInsert = function (targetRect, contentAreaRect, panelRect) { | ||
|  |     return calcByPositions([ | ||
|  |       'cr-cl', | ||
|  |       'cl-cr' | ||
|  |     ], [ | ||
|  |       'bc-tc', | ||
|  |       'bl-tl', | ||
|  |       'br-tr' | ||
|  |     ], targetRect, contentAreaRect, panelRect); | ||
|  |   }; | ||
|  |   var calc = function (targetRect, contentAreaRect, panelRect) { | ||
|  |     return calcByPositions([ | ||
|  |       'tc-bc', | ||
|  |       'bc-tc', | ||
|  |       'tl-bl', | ||
|  |       'bl-tl', | ||
|  |       'tr-br', | ||
|  |       'br-tr', | ||
|  |       'cr-cl', | ||
|  |       'cl-cr' | ||
|  |     ], [ | ||
|  |       'bc-tc', | ||
|  |       'bl-tl', | ||
|  |       'br-tr', | ||
|  |       'cr-cl' | ||
|  |     ], targetRect, contentAreaRect, panelRect); | ||
|  |   }; | ||
|  |   var userConstrain = function (handler, targetRect, contentAreaRect, panelRect) { | ||
|  |     var userConstrainedPanelRect; | ||
|  |     if (typeof handler === 'function') { | ||
|  |       userConstrainedPanelRect = handler({ | ||
|  |         elementRect: $_1x174x181jjgwejzd.toClientRect(targetRect), | ||
|  |         contentAreaRect: $_1x174x181jjgwejzd.toClientRect(contentAreaRect), | ||
|  |         panelRect: $_1x174x181jjgwejzd.toClientRect(panelRect) | ||
|  |       }); | ||
|  |       return $_1x174x181jjgwejzd.fromClientRect(userConstrainedPanelRect); | ||
|  |     } | ||
|  |     return panelRect; | ||
|  |   }; | ||
|  |   var defaultHandler = function (rects) { | ||
|  |     return rects.panelRect; | ||
|  |   }; | ||
|  |   var $_gir42l18bjjgwejzq = { | ||
|  |     calcInsert: calcInsert, | ||
|  |     calc: calc, | ||
|  |     userConstrain: userConstrain, | ||
|  |     defaultHandler: defaultHandler | ||
|  |   }; | ||
|  | 
 | ||
|  |   var toAbsoluteUrl = function (editor, url) { | ||
|  |     return editor.documentBaseURI.toAbsolute(url); | ||
|  |   }; | ||
|  |   var urlFromName = function (name) { | ||
|  |     var prefix = global$5.baseURL + '/skins/'; | ||
|  |     return name ? prefix + name : prefix + 'lightgray'; | ||
|  |   }; | ||
|  |   var getTextSelectionToolbarItems = function (editor) { | ||
|  |     return $_c8umh189jjgwejzm.getToolbarItemsOr(editor, 'selection_toolbar', [ | ||
|  |       'bold', | ||
|  |       'italic', | ||
|  |       '|', | ||
|  |       'quicklink', | ||
|  |       'h2', | ||
|  |       'h3', | ||
|  |       'blockquote' | ||
|  |     ]); | ||
|  |   }; | ||
|  |   var getInsertToolbarItems = function (editor) { | ||
|  |     return $_c8umh189jjgwejzm.getToolbarItemsOr(editor, 'insert_toolbar', [ | ||
|  |       'quickimage', | ||
|  |       'quicktable' | ||
|  |     ]); | ||
|  |   }; | ||
|  |   var getPositionHandler = function (editor) { | ||
|  |     return $_c8umh189jjgwejzm.getHandlerOr(editor, 'inline_toolbar_position_handler', $_gir42l18bjjgwejzq.defaultHandler); | ||
|  |   }; | ||
|  |   var getSkinUrl = function (editor) { | ||
|  |     var settings = editor.settings; | ||
|  |     return settings.skin_url ? toAbsoluteUrl(editor, settings.skin_url) : urlFromName(settings.skin); | ||
|  |   }; | ||
|  |   var isSkinDisabled = function (editor) { | ||
|  |     return editor.settings.skin === false; | ||
|  |   }; | ||
|  |   var $_4j2h42187jjgwejzk = { | ||
|  |     getTextSelectionToolbarItems: getTextSelectionToolbarItems, | ||
|  |     getInsertToolbarItems: getInsertToolbarItems, | ||
|  |     getPositionHandler: getPositionHandler, | ||
|  |     getSkinUrl: getSkinUrl, | ||
|  |     isSkinDisabled: isSkinDisabled | ||
|  |   }; | ||
|  | 
 | ||
|  |   var fireSkinLoaded$1 = function (editor, callback) { | ||
|  |     var done = function () { | ||
|  |       editor._skinLoaded = true; | ||
|  |       $_77u64d186jjgwejzi.fireSkinLoaded(editor); | ||
|  |       callback(); | ||
|  |     }; | ||
|  |     if (editor.initialized) { | ||
|  |       done(); | ||
|  |     } else { | ||
|  |       editor.on('init', done); | ||
|  |     } | ||
|  |   }; | ||
|  |   var load = function (editor, callback) { | ||
|  |     var skinUrl = $_4j2h42187jjgwejzk.getSkinUrl(editor); | ||
|  |     var done = function () { | ||
|  |       fireSkinLoaded$1(editor, callback); | ||
|  |     }; | ||
|  |     if ($_4j2h42187jjgwejzk.isSkinDisabled(editor)) { | ||
|  |       done(); | ||
|  |     } else { | ||
|  |       global$2.DOM.styleSheetLoader.load(skinUrl + '/skin.min.css', done); | ||
|  |       editor.contentCSS.push(skinUrl + '/content.inline.min.css'); | ||
|  |     } | ||
|  |   }; | ||
|  |   var $_93v08q185jjgwejzh = { load: load }; | ||
|  | 
 | ||
|  |   var getSelectionElements = function (editor) { | ||
|  |     var node = editor.selection.getNode(); | ||
|  |     var elms = editor.dom.getParents(node, '*'); | ||
|  |     return elms; | ||
|  |   }; | ||
|  |   var createToolbar = function (editor, selector, id, items) { | ||
|  |     var selectorPredicate = function (elm) { | ||
|  |       return editor.dom.is(elm, selector); | ||
|  |     }; | ||
|  |     return { | ||
|  |       predicate: selectorPredicate, | ||
|  |       id: id, | ||
|  |       items: items | ||
|  |     }; | ||
|  |   }; | ||
|  |   var getToolbars = function (editor) { | ||
|  |     var contextToolbars = editor.contextToolbars; | ||
|  |     return $_ccn98l17xjjgwejz7.flatten([ | ||
|  |       contextToolbars ? contextToolbars : [], | ||
|  |       createToolbar(editor, 'img', 'image', 'alignleft aligncenter alignright') | ||
|  |     ]); | ||
|  |   }; | ||
|  |   var findMatchResult = function (editor, toolbars) { | ||
|  |     var result, elements, contextToolbarsPredicateIds; | ||
|  |     elements = getSelectionElements(editor); | ||
|  |     contextToolbarsPredicateIds = $_9rj8kx182jjgwejze.fromContextToolbars(toolbars); | ||
|  |     result = $_6lg87517zjjgwejza.match(editor, [ | ||
|  |       $_egsucq17yjjgwejz9.element(elements[0], contextToolbarsPredicateIds), | ||
|  |       $_fhwgeg184jjgwejzf.textSelection('text'), | ||
|  |       $_fhwgeg184jjgwejzf.emptyTextBlock(elements, 'insert'), | ||
|  |       $_egsucq17yjjgwejz9.parent(elements, contextToolbarsPredicateIds) | ||
|  |     ]); | ||
|  |     return result && result.rect ? result : null; | ||
|  |   }; | ||
|  |   var editorHasFocus = function (editor) { | ||
|  |     return document.activeElement === editor.getBody(); | ||
|  |   }; | ||
|  |   var togglePanel = function (editor, panel) { | ||
|  |     var toggle = function () { | ||
|  |       var toolbars = getToolbars(editor); | ||
|  |       var result = findMatchResult(editor, toolbars); | ||
|  |       if (result) { | ||
|  |         panel.show(editor, result.id, result.rect, toolbars); | ||
|  |       } else { | ||
|  |         panel.hide(); | ||
|  |       } | ||
|  |     }; | ||
|  |     return function () { | ||
|  |       if (!editor.removed && editorHasFocus(editor)) { | ||
|  |         toggle(); | ||
|  |       } | ||
|  |     }; | ||
|  |   }; | ||
|  |   var repositionPanel = function (editor, panel) { | ||
|  |     return function () { | ||
|  |       var toolbars = getToolbars(editor); | ||
|  |       var result = findMatchResult(editor, toolbars); | ||
|  |       if (result) { | ||
|  |         panel.reposition(editor, result.id, result.rect); | ||
|  |       } | ||
|  |     }; | ||
|  |   }; | ||
|  |   var ignoreWhenFormIsVisible = function (editor, panel, f) { | ||
|  |     return function () { | ||
|  |       if (!editor.removed && !panel.inForm()) { | ||
|  |         f(); | ||
|  |       } | ||
|  |     }; | ||
|  |   }; | ||
|  |   var bindContextualToolbarsEvents = function (editor, panel) { | ||
|  |     var throttledTogglePanel = global$3.throttle(togglePanel(editor, panel), 0); | ||
|  |     var throttledTogglePanelWhenNotInForm = global$3.throttle(ignoreWhenFormIsVisible(editor, panel, togglePanel(editor, panel)), 0); | ||
|  |     var reposition = repositionPanel(editor, panel); | ||
|  |     editor.on('blur hide ObjectResizeStart', panel.hide); | ||
|  |     editor.on('click', throttledTogglePanel); | ||
|  |     editor.on('nodeChange mouseup', throttledTogglePanelWhenNotInForm); | ||
|  |     editor.on('ResizeEditor keyup', throttledTogglePanel); | ||
|  |     editor.on('ResizeWindow', reposition); | ||
|  |     global$2.DOM.bind(global$1.container, 'scroll', reposition); | ||
|  |     editor.on('remove', function () { | ||
|  |       global$2.DOM.unbind(global$1.container, 'scroll', reposition); | ||
|  |       panel.remove(); | ||
|  |     }); | ||
|  |     editor.shortcuts.add('Alt+F10,F10', '', panel.focus); | ||
|  |   }; | ||
|  |   var overrideLinkShortcut = function (editor, panel) { | ||
|  |     editor.shortcuts.remove('meta+k'); | ||
|  |     editor.shortcuts.add('meta+k', '', function () { | ||
|  |       var toolbars = getToolbars(editor); | ||
|  |       var result = $_6lg87517zjjgwejza.match(editor, [$_fhwgeg184jjgwejzf.textSelection('quicklink')]); | ||
|  |       if (result) { | ||
|  |         panel.show(editor, result.id, result.rect, toolbars); | ||
|  |       } | ||
|  |     }); | ||
|  |   }; | ||
|  |   var renderInlineUI = function (editor, panel) { | ||
|  |     $_93v08q185jjgwejzh.load(editor, function () { | ||
|  |       bindContextualToolbarsEvents(editor, panel); | ||
|  |       overrideLinkShortcut(editor, panel); | ||
|  |     }); | ||
|  |     return {}; | ||
|  |   }; | ||
|  |   var fail = function (message) { | ||
|  |     throw new Error(message); | ||
|  |   }; | ||
|  |   var renderUI = function (editor, panel) { | ||
|  |     return editor.inline ? renderInlineUI(editor, panel) : fail('inlite theme only supports inline mode.'); | ||
|  |   }; | ||
|  |   var $_b0wxh217tjjgwejyx = { renderUI: renderUI }; | ||
|  | 
 | ||
|  |   var noop = function () { | ||
|  |     var x = []; | ||
|  |     for (var _i = 0; _i < arguments.length; _i++) { | ||
|  |       x[_i] = arguments[_i]; | ||
|  |     } | ||
|  |   }; | ||
|  | 
 | ||
|  |   var compose = function (fa, fb) { | ||
|  |     return function () { | ||
|  |       var x = []; | ||
|  |       for (var _i = 0; _i < arguments.length; _i++) { | ||
|  |         x[_i] = arguments[_i]; | ||
|  |       } | ||
|  |       return fa(fb.apply(null, arguments)); | ||
|  |     }; | ||
|  |   }; | ||
|  |   var constant = function (value) { | ||
|  |     return function () { | ||
|  |       return value; | ||
|  |     }; | ||
|  |   }; | ||
|  | 
 | ||
|  | 
 | ||
|  |   var curry = function (f) { | ||
|  |     var x = []; | ||
|  |     for (var _i = 1; _i < arguments.length; _i++) { | ||
|  |       x[_i - 1] = arguments[_i]; | ||
|  |     } | ||
|  |     var args = new Array(arguments.length - 1); | ||
|  |     for (var i = 1; i < arguments.length; i++) | ||
|  |       args[i - 1] = arguments[i]; | ||
|  |     return function () { | ||
|  |       var x = []; | ||
|  |       for (var _i = 0; _i < arguments.length; _i++) { | ||
|  |         x[_i] = arguments[_i]; | ||
|  |       } | ||
|  |       var newArgs = new Array(arguments.length); | ||
|  |       for (var j = 0; j < newArgs.length; j++) | ||
|  |         newArgs[j] = arguments[j]; | ||
|  |       var all = args.concat(newArgs); | ||
|  |       return f.apply(null, all); | ||
|  |     }; | ||
|  |   }; | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |   var never = constant(false); | ||
|  |   var always = constant(true); | ||
|  | 
 | ||
|  |   var never$1 = never; | ||
|  |   var always$1 = always; | ||
|  |   var none = function () { | ||
|  |     return NONE; | ||
|  |   }; | ||
|  |   var NONE = function () { | ||
|  |     var eq = function (o) { | ||
|  |       return o.isNone(); | ||
|  |     }; | ||
|  |     var call$$1 = function (thunk) { | ||
|  |       return thunk(); | ||
|  |     }; | ||
|  |     var id = function (n) { | ||
|  |       return n; | ||
|  |     }; | ||
|  |     var noop$$1 = function () { | ||
|  |     }; | ||
|  |     var nul = function () { | ||
|  |       return null; | ||
|  |     }; | ||
|  |     var undef = function () { | ||
|  |       return undefined; | ||
|  |     }; | ||
|  |     var me = { | ||
|  |       fold: function (n, s) { | ||
|  |         return n(); | ||
|  |       }, | ||
|  |       is: never$1, | ||
|  |       isSome: never$1, | ||
|  |       isNone: always$1, | ||
|  |       getOr: id, | ||
|  |       getOrThunk: call$$1, | ||
|  |       getOrDie: function (msg) { | ||
|  |         throw new Error(msg || 'error: getOrDie called on none.'); | ||
|  |       }, | ||
|  |       getOrNull: nul, | ||
|  |       getOrUndefined: undef, | ||
|  |       or: id, | ||
|  |       orThunk: call$$1, | ||
|  |       map: none, | ||
|  |       ap: none, | ||
|  |       each: noop$$1, | ||
|  |       bind: none, | ||
|  |       flatten: none, | ||
|  |       exists: never$1, | ||
|  |       forall: always$1, | ||
|  |       filter: none, | ||
|  |       equals: eq, | ||
|  |       equals_: eq, | ||
|  |       toArray: function () { | ||
|  |         return []; | ||
|  |       }, | ||
|  |       toString: constant('none()') | ||
|  |     }; | ||
|  |     if (Object.freeze) | ||
|  |       Object.freeze(me); | ||
|  |     return me; | ||
|  |   }(); | ||
|  |   var some = function (a) { | ||
|  |     var constant_a = function () { | ||
|  |       return a; | ||
|  |     }; | ||
|  |     var self = function () { | ||
|  |       return me; | ||
|  |     }; | ||
|  |     var map = function (f) { | ||
|  |       return some(f(a)); | ||
|  |     }; | ||
|  |     var bind = function (f) { | ||
|  |       return f(a); | ||
|  |     }; | ||
|  |     var me = { | ||
|  |       fold: function (n, s) { | ||
|  |         return s(a); | ||
|  |       }, | ||
|  |       is: function (v) { | ||
|  |         return a === v; | ||
|  |       }, | ||
|  |       isSome: always$1, | ||
|  |       isNone: never$1, | ||
|  |       getOr: constant_a, | ||
|  |       getOrThunk: constant_a, | ||
|  |       getOrDie: constant_a, | ||
|  |       getOrNull: constant_a, | ||
|  |       getOrUndefined: constant_a, | ||
|  |       or: self, | ||
|  |       orThunk: self, | ||
|  |       map: map, | ||
|  |       ap: function (optfab) { | ||
|  |         return optfab.fold(none, function (fab) { | ||
|  |           return some(fab(a)); | ||
|  |         }); | ||
|  |       }, | ||
|  |       each: function (f) { | ||
|  |         f(a); | ||
|  |       }, | ||
|  |       bind: bind, | ||
|  |       flatten: constant_a, | ||
|  |       exists: bind, | ||
|  |       forall: bind, | ||
|  |       filter: function (f) { | ||
|  |         return f(a) ? me : NONE; | ||
|  |       }, | ||
|  |       equals: function (o) { | ||
|  |         return o.is(a); | ||
|  |       }, | ||
|  |       equals_: function (o, elementEq) { | ||
|  |         return o.fold(never$1, function (b) { | ||
|  |           return elementEq(a, b); | ||
|  |         }); | ||
|  |       }, | ||
|  |       toArray: function () { | ||
|  |         return [a]; | ||
|  |       }, | ||
|  |       toString: function () { | ||
|  |         return 'some(' + a + ')'; | ||
|  |       } | ||
|  |     }; | ||
|  |     return me; | ||
|  |   }; | ||
|  |   var from = function (value) { | ||
|  |     return value === null || value === undefined ? NONE : some(value); | ||
|  |   }; | ||
|  |   var Option = { | ||
|  |     some: some, | ||
|  |     none: none, | ||
|  |     from: from | ||
|  |   }; | ||
|  | 
 | ||
|  |   var typeOf = function (x) { | ||
|  |     if (x === null) | ||
|  |       return 'null'; | ||
|  |     var t = typeof x; | ||
|  |     if (t === 'object' && Array.prototype.isPrototypeOf(x)) | ||
|  |       return 'array'; | ||
|  |     if (t === 'object' && String.prototype.isPrototypeOf(x)) | ||
|  |       return 'string'; | ||
|  |     return t; | ||
|  |   }; | ||
|  |   var isType$1 = function (type) { | ||
|  |     return function (value) { | ||
|  |       return typeOf(value) === type; | ||
|  |     }; | ||
|  |   }; | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |   var isFunction$1 = isType$1('function'); | ||
|  |   var isNumber$1 = isType$1('number'); | ||
|  | 
 | ||
|  |   var rawIndexOf = function () { | ||
|  |     var pIndexOf = Array.prototype.indexOf; | ||
|  |     var fastIndex = function (xs, x) { | ||
|  |       return pIndexOf.call(xs, x); | ||
|  |     }; | ||
|  |     var slowIndex = function (xs, x) { | ||
|  |       return slowIndexOf(xs, x); | ||
|  |     }; | ||
|  |     return pIndexOf === undefined ? slowIndex : fastIndex; | ||
|  |   }(); | ||
|  |   var indexOf = function (xs, x) { | ||
|  |     var r = rawIndexOf(xs, x); | ||
|  |     return r === -1 ? Option.none() : Option.some(r); | ||
|  |   }; | ||
|  | 
 | ||
|  |   var exists = function (xs, pred) { | ||
|  |     return findIndex(xs, pred).isSome(); | ||
|  |   }; | ||
|  | 
 | ||
|  | 
 | ||
|  |   var map = function (xs, f) { | ||
|  |     var len = xs.length; | ||
|  |     var r = new Array(len); | ||
|  |     for (var i = 0; i < len; i++) { | ||
|  |       var x = xs[i]; | ||
|  |       r[i] = f(x, i, xs); | ||
|  |     } | ||
|  |     return r; | ||
|  |   }; | ||
|  |   var each = function (xs, f) { | ||
|  |     for (var i = 0, len = xs.length; i < len; i++) { | ||
|  |       var x = xs[i]; | ||
|  |       f(x, i, xs); | ||
|  |     } | ||
|  |   }; | ||
|  | 
 | ||
|  | 
 | ||
|  |   var filter = function (xs, pred) { | ||
|  |     var r = []; | ||
|  |     for (var i = 0, len = xs.length; i < len; i++) { | ||
|  |       var x = xs[i]; | ||
|  |       if (pred(x, i, xs)) { | ||
|  |         r.push(x); | ||
|  |       } | ||
|  |     } | ||
|  |     return r; | ||
|  |   }; | ||
|  | 
 | ||
|  | 
 | ||
|  |   var foldl = function (xs, f, acc) { | ||
|  |     each(xs, function (x) { | ||
|  |       acc = f(acc, x); | ||
|  |     }); | ||
|  |     return acc; | ||
|  |   }; | ||
|  |   var find = function (xs, pred) { | ||
|  |     for (var i = 0, len = xs.length; i < len; i++) { | ||
|  |       var x = xs[i]; | ||
|  |       if (pred(x, i, xs)) { | ||
|  |         return Option.some(x); | ||
|  |       } | ||
|  |     } | ||
|  |     return Option.none(); | ||
|  |   }; | ||
|  |   var findIndex = function (xs, pred) { | ||
|  |     for (var i = 0, len = xs.length; i < len; i++) { | ||
|  |       var x = xs[i]; | ||
|  |       if (pred(x, i, xs)) { | ||
|  |         return Option.some(i); | ||
|  |       } | ||
|  |     } | ||
|  |     return Option.none(); | ||
|  |   }; | ||
|  |   var slowIndexOf = function (xs, x) { | ||
|  |     for (var i = 0, len = xs.length; i < len; ++i) { | ||
|  |       if (xs[i] === x) { | ||
|  |         return i; | ||
|  |       } | ||
|  |     } | ||
|  |     return -1; | ||
|  |   }; | ||
|  |   var push = Array.prototype.push; | ||
|  |   var flatten$1 = function (xs) { | ||
|  |     var r = []; | ||
|  |     for (var i = 0, len = xs.length; i < len; ++i) { | ||
|  |       if (!Array.prototype.isPrototypeOf(xs[i])) | ||
|  |         throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs); | ||
|  |       push.apply(r, xs[i]); | ||
|  |     } | ||
|  |     return r; | ||
|  |   }; | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |   var slice = Array.prototype.slice; | ||
|  |   var reverse = function (xs) { | ||
|  |     var r = slice.call(xs, 0); | ||
|  |     r.reverse(); | ||
|  |     return r; | ||
|  |   }; | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |   var from$1 = isFunction$1(Array.from) ? Array.from : function (x) { | ||
|  |     return slice.call(x); | ||
|  |   }; | ||
|  | 
 | ||
|  |   var count = 0; | ||
|  |   var funcs = { | ||
|  |     id: function () { | ||
|  |       return 'mceu_' + count++; | ||
|  |     }, | ||
|  |     create: function (name$$1, attrs, children) { | ||
|  |       var elm = document.createElement(name$$1); | ||
|  |       global$2.DOM.setAttribs(elm, attrs); | ||
|  |       if (typeof children === 'string') { | ||
|  |         elm.innerHTML = children; | ||
|  |       } else { | ||
|  |         global$4.each(children, function (child) { | ||
|  |           if (child.nodeType) { | ||
|  |             elm.appendChild(child); | ||
|  |           } | ||
|  |         }); | ||
|  |       } | ||
|  |       return elm; | ||
|  |     }, | ||
|  |     createFragment: function (html) { | ||
|  |       return global$2.DOM.createFragment(html); | ||
|  |     }, | ||
|  |     getWindowSize: function () { | ||
|  |       return global$2.DOM.getViewPort(); | ||
|  |     }, | ||
|  |     getSize: function (elm) { | ||
|  |       var width, height; | ||
|  |       if (elm.getBoundingClientRect) { | ||
|  |         var rect = elm.getBoundingClientRect(); | ||
|  |         width = Math.max(rect.width || rect.right - rect.left, elm.offsetWidth); | ||
|  |         height = Math.max(rect.height || rect.bottom - rect.bottom, elm.offsetHeight); | ||
|  |       } else { | ||
|  |         width = elm.offsetWidth; | ||
|  |         height = elm.offsetHeight; | ||
|  |       } | ||
|  |       return { | ||
|  |         width: width, | ||
|  |         height: height | ||
|  |       }; | ||
|  |     }, | ||
|  |     getPos: function (elm, root) { | ||
|  |       return global$2.DOM.getPos(elm, root || funcs.getContainer()); | ||
|  |     }, | ||
|  |     getContainer: function () { | ||
|  |       return global$1.container ? global$1.container : document.body; | ||
|  |     }, | ||
|  |     getViewPort: function (win) { | ||
|  |       return global$2.DOM.getViewPort(win); | ||
|  |     }, | ||
|  |     get: function (id) { | ||
|  |       return document.getElementById(id); | ||
|  |     }, | ||
|  |     addClass: function (elm, cls) { | ||
|  |       return global$2.DOM.addClass(elm, cls); | ||
|  |     }, | ||
|  |     removeClass: function (elm, cls) { | ||
|  |       return global$2.DOM.removeClass(elm, cls); | ||
|  |     }, | ||
|  |     hasClass: function (elm, cls) { | ||
|  |       return global$2.DOM.hasClass(elm, cls); | ||
|  |     }, | ||
|  |     toggleClass: function (elm, cls, state) { | ||
|  |       return global$2.DOM.toggleClass(elm, cls, state); | ||
|  |     }, | ||
|  |     css: function (elm, name$$1, value) { | ||
|  |       return global$2.DOM.setStyle(elm, name$$1, value); | ||
|  |     }, | ||
|  |     getRuntimeStyle: function (elm, name$$1) { | ||
|  |       return global$2.DOM.getStyle(elm, name$$1, true); | ||
|  |     }, | ||
|  |     on: function (target, name$$1, callback, scope) { | ||
|  |       return global$2.DOM.bind(target, name$$1, callback, scope); | ||
|  |     }, | ||
|  |     off: function (target, name$$1, callback) { | ||
|  |       return global$2.DOM.unbind(target, name$$1, callback); | ||
|  |     }, | ||
|  |     fire: function (target, name$$1, args) { | ||
|  |       return global$2.DOM.fire(target, name$$1, args); | ||
|  |     }, | ||
|  |     innerHtml: function (elm, html) { | ||
|  |       global$2.DOM.setHTML(elm, html); | ||
|  |     } | ||
|  |   }; | ||
|  | 
 | ||
|  |   var global$7 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery'); | ||
|  | 
 | ||
|  |   var global$8 = tinymce.util.Tools.resolve('tinymce.util.Class'); | ||
|  | 
 | ||
|  |   var global$9 = tinymce.util.Tools.resolve('tinymce.util.EventDispatcher'); | ||
|  | 
 | ||
|  |   var $_4kbuyt18pjjgwek1w = { | ||
|  |     parseBox: function (value) { | ||
|  |       var len; | ||
|  |       var radix = 10; | ||
|  |       if (!value) { | ||
|  |         return; | ||
|  |       } | ||
|  |       if (typeof value === 'number') { | ||
|  |         value = value || 0; | ||
|  |         return { | ||
|  |           top: value, | ||
|  |           left: value, | ||
|  |           bottom: value, | ||
|  |           right: value | ||
|  |         }; | ||
|  |       } | ||
|  |       value = value.split(' '); | ||
|  |       len = value.length; | ||
|  |       if (len === 1) { | ||
|  |         value[1] = value[2] = value[3] = value[0]; | ||
|  |       } else if (len === 2) { | ||
|  |         value[2] = value[0]; | ||
|  |         value[3] = value[1]; | ||
|  |       } else if (len === 3) { | ||
|  |         value[3] = value[1]; | ||
|  |       } | ||
|  |       return { | ||
|  |         top: parseInt(value[0], radix) || 0, | ||
|  |         right: parseInt(value[1], radix) || 0, | ||
|  |         bottom: parseInt(value[2], radix) || 0, | ||
|  |         left: parseInt(value[3], radix) || 0 | ||
|  |       }; | ||
|  |     }, | ||
|  |     measureBox: function (elm, prefix) { | ||
|  |       function getStyle(name) { | ||
|  |         var defaultView = elm.ownerDocument.defaultView; | ||
|  |         if (defaultView) { | ||
|  |           var computedStyle = defaultView.getComputedStyle(elm, null); | ||
|  |           if (computedStyle) { | ||
|  |             name = name.replace(/[A-Z]/g, function (a) { | ||
|  |               return '-' + a; | ||
|  |             }); | ||
|  |             return computedStyle.getPropertyValue(name); | ||
|  |           } else { | ||
|  |             return null; | ||
|  |           } | ||
|  |         } | ||
|  |         return elm.currentStyle[name]; | ||
|  |       } | ||
|  |       function getSide(name) { | ||
|  |         var val = parseFloat(getStyle(name)); | ||
|  |         return isNaN(val) ? 0 : val; | ||
|  |       } | ||
|  |       return { | ||
|  |         top: getSide(prefix + 'TopWidth'), | ||
|  |         right: getSide(prefix + 'RightWidth'), | ||
|  |         bottom: getSide(prefix + 'BottomWidth'), | ||
|  |         left: getSide(prefix + 'LeftWidth') | ||
|  |       }; | ||
|  |     } | ||
|  |   }; | ||
|  | 
 | ||
|  |   function noop$1() { | ||
|  |   } | ||
|  |   function ClassList(onchange) { | ||
|  |     this.cls = []; | ||
|  |     this.cls._map = {}; | ||
|  |     this.onchange = onchange || noop$1; | ||
|  |     this.prefix = ''; | ||
|  |   } | ||
|  |   global$4.extend(ClassList.prototype, { | ||
|  |     add: function (cls) { | ||
|  |       if (cls && !this.contains(cls)) { | ||
|  |         this.cls._map[cls] = true; | ||
|  |         this.cls.push(cls); | ||
|  |         this._change(); | ||
|  |       } | ||
|  |       return this; | ||
|  |     }, | ||
|  |     remove: function (cls) { | ||
|  |       if (this.contains(cls)) { | ||
|  |         var i = void 0; | ||
|  |         for (i = 0; i < this.cls.length; i++) { | ||
|  |           if (this.cls[i] === cls) { | ||
|  |             break; | ||
|  |           } | ||
|  |         } | ||
|  |         this.cls.splice(i, 1); | ||
|  |         delete this.cls._map[cls]; | ||
|  |         this._change(); | ||
|  |       } | ||
|  |       return this; | ||
|  |     }, | ||
|  |     toggle: function (cls, state) { | ||
|  |       var curState = this.contains(cls); | ||
|  |       if (curState !== state) { | ||
|  |         if (curState) { | ||
|  |           this.remove(cls); | ||
|  |         } else { | ||
|  |           this.add(cls); | ||
|  |         } | ||
|  |         this._change(); | ||
|  |       } | ||
|  |       return this; | ||
|  |     }, | ||
|  |     contains: function (cls) { | ||
|  |       return !!this.cls._map[cls]; | ||
|  |     }, | ||
|  |     _change: function () { | ||
|  |       delete this.clsValue; | ||
|  |       this.onchange.call(this); | ||
|  |     } | ||
|  |   }); | ||
|  |   ClassList.prototype.toString = function () { | ||
|  |     var value; | ||
|  |     if (this.clsValue) { | ||
|  |       return this.clsValue; | ||
|  |     } | ||
|  |     value = ''; | ||
|  |     for (var i = 0; i < this.cls.length; i++) { | ||
|  |       if (i > 0) { | ||
|  |         value += ' '; | ||
|  |       } | ||
|  |       value += this.prefix + this.cls[i]; | ||
|  |     } | ||
|  |     return value; | ||
|  |   }; | ||
|  | 
 | ||
|  |   function unique(array) { | ||
|  |     var uniqueItems = []; | ||
|  |     var i = array.length, item; | ||
|  |     while (i--) { | ||
|  |       item = array[i]; | ||
|  |       if (!item.__checked) { | ||
|  |         uniqueItems.push(item); | ||
|  |         item.__checked = 1; | ||
|  |       } | ||
|  |     } | ||
|  |     i = uniqueItems.length; | ||
|  |     while (i--) { | ||
|  |       delete uniqueItems[i].__checked; | ||
|  |     } | ||
|  |     return uniqueItems; | ||
|  |   } | ||
|  |   var expression = /^([\w\\*]+)?(?:#([\w\-\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i; | ||
|  |   var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g; | ||
|  |   var whiteSpace = /^\s*|\s*$/g; | ||
|  |   var Collection; | ||
|  |   var Selector = global$8.extend({ | ||
|  |     init: function (selector) { | ||
|  |       var match = this.match; | ||
|  |       function compileNameFilter(name) { | ||
|  |         if (name) { | ||
|  |           name = name.toLowerCase(); | ||
|  |           return function (item) { | ||
|  |             return name === '*' || item.type === name; | ||
|  |           }; | ||
|  |         } | ||
|  |       } | ||
|  |       function compileIdFilter(id) { | ||
|  |         if (id) { | ||
|  |           return function (item) { | ||
|  |             return item._name === id; | ||
|  |           }; | ||
|  |         } | ||
|  |       } | ||
|  |       function compileClassesFilter(classes) { | ||
|  |         if (classes) { | ||
|  |           classes = classes.split('.'); | ||
|  |           return function (item) { | ||
|  |             var i = classes.length; | ||
|  |             while (i--) { | ||
|  |               if (!item.classes.contains(classes[i])) { | ||
|  |                 return false; | ||
|  |               } | ||
|  |             } | ||
|  |             return true; | ||
|  |           }; | ||
|  |         } | ||
|  |       } | ||
|  |       function compileAttrFilter(name, cmp, check) { | ||
|  |         if (name) { | ||
|  |           return function (item) { | ||
|  |             var value = item[name] ? item[name]() : ''; | ||
|  |             return !cmp ? !!check : cmp === '=' ? value === check : cmp === '*=' ? value.indexOf(check) >= 0 : cmp === '~=' ? (' ' + value + ' ').indexOf(' ' + check + ' ') >= 0 : cmp === '!=' ? value !== check : cmp === '^=' ? value.indexOf(check) === 0 : cmp === '$=' ? value.substr(value.length - check.length) === check : false; | ||
|  |           }; | ||
|  |         } | ||
|  |       } | ||
|  |       function compilePsuedoFilter(name) { | ||
|  |         var notSelectors; | ||
|  |         if (name) { | ||
|  |           name = /(?:not\((.+)\))|(.+)/i.exec(name); | ||
|  |           if (!name[1]) { | ||
|  |             name = name[2]; | ||
|  |             return function (item, index, length) { | ||
|  |               return name === 'first' ? index === 0 : name === 'last' ? index === length - 1 : name === 'even' ? index % 2 === 0 : name === 'odd' ? index % 2 === 1 : item[name] ? item[name]() : false; | ||
|  |             }; | ||
|  |           } | ||
|  |           notSelectors = parseChunks(name[1], []); | ||
|  |           return function (item) { | ||
|  |             return !match(item, notSelectors); | ||
|  |           }; | ||
|  |         } | ||
|  |       } | ||
|  |       function compile(selector, filters, direct) { | ||
|  |         var parts; | ||
|  |         function add(filter) { | ||
|  |           if (filter) { | ||
|  |             filters.push(filter); | ||
|  |           } | ||
|  |         } | ||
|  |         parts = expression.exec(selector.replace(whiteSpace, '')); | ||
|  |         add(compileNameFilter(parts[1])); | ||
|  |         add(compileIdFilter(parts[2])); | ||
|  |         add(compileClassesFilter(parts[3])); | ||
|  |         add(compileAttrFilter(parts[4], parts[5], parts[6])); | ||
|  |         add(compilePsuedoFilter(parts[7])); | ||
|  |         filters.pseudo = !!parts[7]; | ||
|  |         filters.direct = direct; | ||
|  |         return filters; | ||
|  |       } | ||
|  |       function parseChunks(selector, selectors) { | ||
|  |         var parts = []; | ||
|  |         var extra, matches, i; | ||
|  |         do { | ||
|  |           chunker.exec(''); | ||
|  |           matches = chunker.exec(selector); | ||
|  |           if (matches) { | ||
|  |             selector = matches[3]; | ||
|  |             parts.push(matches[1]); | ||
|  |             if (matches[2]) { | ||
|  |               extra = matches[3]; | ||
|  |               break; | ||
|  |             } | ||
|  |           } | ||
|  |         } while (matches); | ||
|  |         if (extra) { | ||
|  |           parseChunks(extra, selectors); | ||
|  |         } | ||
|  |         selector = []; | ||
|  |         for (i = 0; i < parts.length; i++) { | ||
|  |           if (parts[i] !== '>') { | ||
|  |             selector.push(compile(parts[i], [], parts[i - 1] === '>')); | ||
|  |           } | ||
|  |         } | ||
|  |         selectors.push(selector); | ||
|  |         return selectors; | ||
|  |       } | ||
|  |       this._selectors = parseChunks(selector, []); | ||
|  |     }, | ||
|  |     match: function (control, selectors) { | ||
|  |       var i, l, si, sl, selector, fi, fl, filters, index, length, siblings, count, item; | ||
|  |       selectors = selectors || this._selectors; | ||
|  |       for (i = 0, l = selectors.length; i < l; i++) { | ||
|  |         selector = selectors[i]; | ||
|  |         sl = selector.length; | ||
|  |         item = control; | ||
|  |         count = 0; | ||
|  |         for (si = sl - 1; si >= 0; si--) { | ||
|  |           filters = selector[si]; | ||
|  |           while (item) { | ||
|  |             if (filters.pseudo) { | ||
|  |               siblings = item.parent().items(); | ||
|  |               index = length = siblings.length; | ||
|  |               while (index--) { | ||
|  |                 if (siblings[index] === item) { | ||
|  |                   break; | ||
|  |                 } | ||
|  |               } | ||
|  |             } | ||
|  |             for (fi = 0, fl = filters.length; fi < fl; fi++) { | ||
|  |               if (!filters[fi](item, index, length)) { | ||
|  |                 fi = fl + 1; | ||
|  |                 break; | ||
|  |               } | ||
|  |             } | ||
|  |             if (fi === fl) { | ||
|  |               count++; | ||
|  |               break; | ||
|  |             } else { | ||
|  |               if (si === sl - 1) { | ||
|  |                 break; | ||
|  |               } | ||
|  |             } | ||
|  |             item = item.parent(); | ||
|  |           } | ||
|  |         } | ||
|  |         if (count === sl) { | ||
|  |           return true; | ||
|  |         } | ||
|  |       } | ||
|  |       return false; | ||
|  |     }, | ||
|  |     find: function (container) { | ||
|  |       var matches = [], i, l; | ||
|  |       var selectors = this._selectors; | ||
|  |       function collect(items, selector, index) { | ||
|  |         var i, l, fi, fl, item; | ||
|  |         var filters = selector[index]; | ||
|  |         for (i = 0, l = items.length; i < l; i++) { | ||
|  |           item = items[i]; | ||
|  |           for (fi = 0, fl = filters.length; fi < fl; fi++) { | ||
|  |             if (!filters[fi](item, i, l)) { | ||
|  |               fi = fl + 1; | ||
|  |               break; | ||
|  |             } | ||
|  |           } | ||
|  |           if (fi === fl) { | ||
|  |             if (index === selector.length - 1) { | ||
|  |               matches.push(item); | ||
|  |             } else { | ||
|  |               if (item.items) { | ||
|  |                 collect(item.items(), selector, index + 1); | ||
|  |               } | ||
|  |             } | ||
|  |           } else if (filters.direct) { | ||
|  |             return; | ||
|  |           } | ||
|  |           if (item.items) { | ||
|  |             collect(item.items(), selector, index); | ||
|  |           } | ||
|  |         } | ||
|  |       } | ||
|  |       if (container.items) { | ||
|  |         for (i = 0, l = selectors.length; i < l; i++) { | ||
|  |           collect(container.items(), selectors[i], 0); | ||
|  |         } | ||
|  |         if (l > 1) { | ||
|  |           matches = unique(matches); | ||
|  |         } | ||
|  |       } | ||
|  |       if (!Collection) { | ||
|  |         Collection = Selector.Collection; | ||
|  |       } | ||
|  |       return new Collection(matches); | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var Collection$1; | ||
|  |   var proto; | ||
|  |   var push$1 = Array.prototype.push; | ||
|  |   var slice$1 = Array.prototype.slice; | ||
|  |   proto = { | ||
|  |     length: 0, | ||
|  |     init: function (items) { | ||
|  |       if (items) { | ||
|  |         this.add(items); | ||
|  |       } | ||
|  |     }, | ||
|  |     add: function (items) { | ||
|  |       var self = this; | ||
|  |       if (!global$4.isArray(items)) { | ||
|  |         if (items instanceof Collection$1) { | ||
|  |           self.add(items.toArray()); | ||
|  |         } else { | ||
|  |           push$1.call(self, items); | ||
|  |         } | ||
|  |       } else { | ||
|  |         push$1.apply(self, items); | ||
|  |       } | ||
|  |       return self; | ||
|  |     }, | ||
|  |     set: function (items) { | ||
|  |       var self = this; | ||
|  |       var len = self.length; | ||
|  |       var i; | ||
|  |       self.length = 0; | ||
|  |       self.add(items); | ||
|  |       for (i = self.length; i < len; i++) { | ||
|  |         delete self[i]; | ||
|  |       } | ||
|  |       return self; | ||
|  |     }, | ||
|  |     filter: function (selector) { | ||
|  |       var self = this; | ||
|  |       var i, l; | ||
|  |       var matches = []; | ||
|  |       var item, match; | ||
|  |       if (typeof selector === 'string') { | ||
|  |         selector = new Selector(selector); | ||
|  |         match = function (item) { | ||
|  |           return selector.match(item); | ||
|  |         }; | ||
|  |       } else { | ||
|  |         match = selector; | ||
|  |       } | ||
|  |       for (i = 0, l = self.length; i < l; i++) { | ||
|  |         item = self[i]; | ||
|  |         if (match(item)) { | ||
|  |           matches.push(item); | ||
|  |         } | ||
|  |       } | ||
|  |       return new Collection$1(matches); | ||
|  |     }, | ||
|  |     slice: function () { | ||
|  |       return new Collection$1(slice$1.apply(this, arguments)); | ||
|  |     }, | ||
|  |     eq: function (index) { | ||
|  |       return index === -1 ? this.slice(index) : this.slice(index, +index + 1); | ||
|  |     }, | ||
|  |     each: function (callback) { | ||
|  |       global$4.each(this, callback); | ||
|  |       return this; | ||
|  |     }, | ||
|  |     toArray: function () { | ||
|  |       return global$4.toArray(this); | ||
|  |     }, | ||
|  |     indexOf: function (ctrl) { | ||
|  |       var self = this; | ||
|  |       var i = self.length; | ||
|  |       while (i--) { | ||
|  |         if (self[i] === ctrl) { | ||
|  |           break; | ||
|  |         } | ||
|  |       } | ||
|  |       return i; | ||
|  |     }, | ||
|  |     reverse: function () { | ||
|  |       return new Collection$1(global$4.toArray(this).reverse()); | ||
|  |     }, | ||
|  |     hasClass: function (cls) { | ||
|  |       return this[0] ? this[0].classes.contains(cls) : false; | ||
|  |     }, | ||
|  |     prop: function (name, value) { | ||
|  |       var self = this; | ||
|  |       var item; | ||
|  |       if (value !== undefined) { | ||
|  |         self.each(function (item) { | ||
|  |           if (item[name]) { | ||
|  |             item[name](value); | ||
|  |           } | ||
|  |         }); | ||
|  |         return self; | ||
|  |       } | ||
|  |       item = self[0]; | ||
|  |       if (item && item[name]) { | ||
|  |         return item[name](); | ||
|  |       } | ||
|  |     }, | ||
|  |     exec: function (name) { | ||
|  |       var self = this, args = global$4.toArray(arguments).slice(1); | ||
|  |       self.each(function (item) { | ||
|  |         if (item[name]) { | ||
|  |           item[name].apply(item, args); | ||
|  |         } | ||
|  |       }); | ||
|  |       return self; | ||
|  |     }, | ||
|  |     remove: function () { | ||
|  |       var i = this.length; | ||
|  |       while (i--) { | ||
|  |         this[i].remove(); | ||
|  |       } | ||
|  |       return this; | ||
|  |     }, | ||
|  |     addClass: function (cls) { | ||
|  |       return this.each(function (item) { | ||
|  |         item.classes.add(cls); | ||
|  |       }); | ||
|  |     }, | ||
|  |     removeClass: function (cls) { | ||
|  |       return this.each(function (item) { | ||
|  |         item.classes.remove(cls); | ||
|  |       }); | ||
|  |     } | ||
|  |   }; | ||
|  |   global$4.each('fire on off show hide append prepend before after reflow'.split(' '), function (name) { | ||
|  |     proto[name] = function () { | ||
|  |       var args = global$4.toArray(arguments); | ||
|  |       this.each(function (ctrl) { | ||
|  |         if (name in ctrl) { | ||
|  |           ctrl[name].apply(ctrl, args); | ||
|  |         } | ||
|  |       }); | ||
|  |       return this; | ||
|  |     }; | ||
|  |   }); | ||
|  |   global$4.each('text name disabled active selected checked visible parent value data'.split(' '), function (name) { | ||
|  |     proto[name] = function (value) { | ||
|  |       return this.prop(name, value); | ||
|  |     }; | ||
|  |   }); | ||
|  |   Collection$1 = global$8.extend(proto); | ||
|  |   Selector.Collection = Collection$1; | ||
|  |   var Collection$2 = Collection$1; | ||
|  | 
 | ||
|  |   var Binding = function (settings) { | ||
|  |     this.create = settings.create; | ||
|  |   }; | ||
|  |   Binding.create = function (model, name) { | ||
|  |     return new Binding({ | ||
|  |       create: function (otherModel, otherName) { | ||
|  |         var bindings; | ||
|  |         var fromSelfToOther = function (e) { | ||
|  |           otherModel.set(otherName, e.value); | ||
|  |         }; | ||
|  |         var fromOtherToSelf = function (e) { | ||
|  |           model.set(name, e.value); | ||
|  |         }; | ||
|  |         otherModel.on('change:' + otherName, fromOtherToSelf); | ||
|  |         model.on('change:' + name, fromSelfToOther); | ||
|  |         bindings = otherModel._bindings; | ||
|  |         if (!bindings) { | ||
|  |           bindings = otherModel._bindings = []; | ||
|  |           otherModel.on('destroy', function () { | ||
|  |             var i = bindings.length; | ||
|  |             while (i--) { | ||
|  |               bindings[i](); | ||
|  |             } | ||
|  |           }); | ||
|  |         } | ||
|  |         bindings.push(function () { | ||
|  |           model.off('change:' + name, fromSelfToOther); | ||
|  |         }); | ||
|  |         return model.get(name); | ||
|  |       } | ||
|  |     }); | ||
|  |   }; | ||
|  | 
 | ||
|  |   var global$10 = tinymce.util.Tools.resolve('tinymce.util.Observable'); | ||
|  | 
 | ||
|  |   function isNode(node) { | ||
|  |     return node.nodeType > 0; | ||
|  |   } | ||
|  |   function isEqual(a, b) { | ||
|  |     var k, checked; | ||
|  |     if (a === b) { | ||
|  |       return true; | ||
|  |     } | ||
|  |     if (a === null || b === null) { | ||
|  |       return a === b; | ||
|  |     } | ||
|  |     if (typeof a !== 'object' || typeof b !== 'object') { | ||
|  |       return a === b; | ||
|  |     } | ||
|  |     if (global$4.isArray(b)) { | ||
|  |       if (a.length !== b.length) { | ||
|  |         return false; | ||
|  |       } | ||
|  |       k = a.length; | ||
|  |       while (k--) { | ||
|  |         if (!isEqual(a[k], b[k])) { | ||
|  |           return false; | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  |     if (isNode(a) || isNode(b)) { | ||
|  |       return a === b; | ||
|  |     } | ||
|  |     checked = {}; | ||
|  |     for (k in b) { | ||
|  |       if (!isEqual(a[k], b[k])) { | ||
|  |         return false; | ||
|  |       } | ||
|  |       checked[k] = true; | ||
|  |     } | ||
|  |     for (k in a) { | ||
|  |       if (!checked[k] && !isEqual(a[k], b[k])) { | ||
|  |         return false; | ||
|  |       } | ||
|  |     } | ||
|  |     return true; | ||
|  |   } | ||
|  |   var ObservableObject = global$8.extend({ | ||
|  |     Mixins: [global$10], | ||
|  |     init: function (data) { | ||
|  |       var name, value; | ||
|  |       data = data || {}; | ||
|  |       for (name in data) { | ||
|  |         value = data[name]; | ||
|  |         if (value instanceof Binding) { | ||
|  |           data[name] = value.create(this, name); | ||
|  |         } | ||
|  |       } | ||
|  |       this.data = data; | ||
|  |     }, | ||
|  |     set: function (name, value) { | ||
|  |       var key, args; | ||
|  |       var oldValue = this.data[name]; | ||
|  |       if (value instanceof Binding) { | ||
|  |         value = value.create(this, name); | ||
|  |       } | ||
|  |       if (typeof name === 'object') { | ||
|  |         for (key in name) { | ||
|  |           this.set(key, name[key]); | ||
|  |         } | ||
|  |         return this; | ||
|  |       } | ||
|  |       if (!isEqual(oldValue, value)) { | ||
|  |         this.data[name] = value; | ||
|  |         args = { | ||
|  |           target: this, | ||
|  |           name: name, | ||
|  |           value: value, | ||
|  |           oldValue: oldValue | ||
|  |         }; | ||
|  |         this.fire('change:' + name, args); | ||
|  |         this.fire('change', args); | ||
|  |       } | ||
|  |       return this; | ||
|  |     }, | ||
|  |     get: function (name) { | ||
|  |       return this.data[name]; | ||
|  |     }, | ||
|  |     has: function (name) { | ||
|  |       return name in this.data; | ||
|  |     }, | ||
|  |     bind: function (name) { | ||
|  |       return Binding.create(this, name); | ||
|  |     }, | ||
|  |     destroy: function () { | ||
|  |       this.fire('destroy'); | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var dirtyCtrls = {}; | ||
|  |   var animationFrameRequested; | ||
|  |   var $_cqjgb518wjjgwek2f = { | ||
|  |     add: function (ctrl) { | ||
|  |       var parent$$1 = ctrl.parent(); | ||
|  |       if (parent$$1) { | ||
|  |         if (!parent$$1._layout || parent$$1._layout.isNative()) { | ||
|  |           return; | ||
|  |         } | ||
|  |         if (!dirtyCtrls[parent$$1._id]) { | ||
|  |           dirtyCtrls[parent$$1._id] = parent$$1; | ||
|  |         } | ||
|  |         if (!animationFrameRequested) { | ||
|  |           animationFrameRequested = true; | ||
|  |           global$3.requestAnimationFrame(function () { | ||
|  |             var id, ctrl; | ||
|  |             animationFrameRequested = false; | ||
|  |             for (id in dirtyCtrls) { | ||
|  |               ctrl = dirtyCtrls[id]; | ||
|  |               if (ctrl.state.get('rendered')) { | ||
|  |                 ctrl.reflow(); | ||
|  |               } | ||
|  |             } | ||
|  |             dirtyCtrls = {}; | ||
|  |           }, document.body); | ||
|  |         } | ||
|  |       } | ||
|  |     }, | ||
|  |     remove: function (ctrl) { | ||
|  |       if (dirtyCtrls[ctrl._id]) { | ||
|  |         delete dirtyCtrls[ctrl._id]; | ||
|  |       } | ||
|  |     } | ||
|  |   }; | ||
|  | 
 | ||
|  |   var getUiContainerDelta = function (ctrl) { | ||
|  |     var uiContainer = getUiContainer(ctrl); | ||
|  |     if (uiContainer && global$2.DOM.getStyle(uiContainer, 'position', true) !== 'static') { | ||
|  |       var containerPos = global$2.DOM.getPos(uiContainer); | ||
|  |       var dx = uiContainer.scrollLeft - containerPos.x; | ||
|  |       var dy = uiContainer.scrollTop - containerPos.y; | ||
|  |       return Option.some({ | ||
|  |         x: dx, | ||
|  |         y: dy | ||
|  |       }); | ||
|  |     } else { | ||
|  |       return Option.none(); | ||
|  |     } | ||
|  |   }; | ||
|  |   var setUiContainer = function (editor, ctrl) { | ||
|  |     var uiContainer = global$2.DOM.select(editor.settings.ui_container)[0]; | ||
|  |     ctrl.getRoot().uiContainer = uiContainer; | ||
|  |   }; | ||
|  |   var getUiContainer = function (ctrl) { | ||
|  |     return ctrl ? ctrl.getRoot().uiContainer : null; | ||
|  |   }; | ||
|  |   var inheritUiContainer = function (fromCtrl, toCtrl) { | ||
|  |     return toCtrl.uiContainer = getUiContainer(fromCtrl); | ||
|  |   }; | ||
|  |   var $_egt6ye18xjjgwek2h = { | ||
|  |     getUiContainerDelta: getUiContainerDelta, | ||
|  |     setUiContainer: setUiContainer, | ||
|  |     getUiContainer: getUiContainer, | ||
|  |     inheritUiContainer: inheritUiContainer | ||
|  |   }; | ||
|  | 
 | ||
|  |   var hasMouseWheelEventSupport = 'onmousewheel' in document; | ||
|  |   var hasWheelEventSupport = false; | ||
|  |   var classPrefix = 'mce-'; | ||
|  |   var Control; | ||
|  |   var idCounter = 0; | ||
|  |   var proto$1 = { | ||
|  |     Statics: { classPrefix: classPrefix }, | ||
|  |     isRtl: function () { | ||
|  |       return Control.rtl; | ||
|  |     }, | ||
|  |     classPrefix: classPrefix, | ||
|  |     init: function (settings) { | ||
|  |       var self$$1 = this; | ||
|  |       var classes, defaultClasses; | ||
|  |       function applyClasses(classes) { | ||
|  |         var i; | ||
|  |         classes = classes.split(' '); | ||
|  |         for (i = 0; i < classes.length; i++) { | ||
|  |           self$$1.classes.add(classes[i]); | ||
|  |         } | ||
|  |       } | ||
|  |       self$$1.settings = settings = global$4.extend({}, self$$1.Defaults, settings); | ||
|  |       self$$1._id = settings.id || 'mceu_' + idCounter++; | ||
|  |       self$$1._aria = { role: settings.role }; | ||
|  |       self$$1._elmCache = {}; | ||
|  |       self$$1.$ = global$7; | ||
|  |       self$$1.state = new ObservableObject({ | ||
|  |         visible: true, | ||
|  |         active: false, | ||
|  |         disabled: false, | ||
|  |         value: '' | ||
|  |       }); | ||
|  |       self$$1.data = new ObservableObject(settings.data); | ||
|  |       self$$1.classes = new ClassList(function () { | ||
|  |         if (self$$1.state.get('rendered')) { | ||
|  |           self$$1.getEl().className = this.toString(); | ||
|  |         } | ||
|  |       }); | ||
|  |       self$$1.classes.prefix = self$$1.classPrefix; | ||
|  |       classes = settings.classes; | ||
|  |       if (classes) { | ||
|  |         if (self$$1.Defaults) { | ||
|  |           defaultClasses = self$$1.Defaults.classes; | ||
|  |           if (defaultClasses && classes !== defaultClasses) { | ||
|  |             applyClasses(defaultClasses); | ||
|  |           } | ||
|  |         } | ||
|  |         applyClasses(classes); | ||
|  |       } | ||
|  |       global$4.each('title text name visible disabled active value'.split(' '), function (name$$1) { | ||
|  |         if (name$$1 in settings) { | ||
|  |           self$$1[name$$1](settings[name$$1]); | ||
|  |         } | ||
|  |       }); | ||
|  |       self$$1.on('click', function () { | ||
|  |         if (self$$1.disabled()) { | ||
|  |           return false; | ||
|  |         } | ||
|  |       }); | ||
|  |       self$$1.settings = settings; | ||
|  |       self$$1.borderBox = $_4kbuyt18pjjgwek1w.parseBox(settings.border); | ||
|  |       self$$1.paddingBox = $_4kbuyt18pjjgwek1w.parseBox(settings.padding); | ||
|  |       self$$1.marginBox = $_4kbuyt18pjjgwek1w.parseBox(settings.margin); | ||
|  |       if (settings.hidden) { | ||
|  |         self$$1.hide(); | ||
|  |       } | ||
|  |     }, | ||
|  |     Properties: 'parent,name', | ||
|  |     getContainerElm: function () { | ||
|  |       var uiContainer = $_egt6ye18xjjgwek2h.getUiContainer(this); | ||
|  |       return uiContainer ? uiContainer : funcs.getContainer(); | ||
|  |     }, | ||
|  |     getParentCtrl: function (elm) { | ||
|  |       var ctrl; | ||
|  |       var lookup = this.getRoot().controlIdLookup; | ||
|  |       while (elm && lookup) { | ||
|  |         ctrl = lookup[elm.id]; | ||
|  |         if (ctrl) { | ||
|  |           break; | ||
|  |         } | ||
|  |         elm = elm.parentNode; | ||
|  |       } | ||
|  |       return ctrl; | ||
|  |     }, | ||
|  |     initLayoutRect: function () { | ||
|  |       var self$$1 = this; | ||
|  |       var settings = self$$1.settings; | ||
|  |       var borderBox, layoutRect; | ||
|  |       var elm = self$$1.getEl(); | ||
|  |       var width, height, minWidth, minHeight, autoResize; | ||
|  |       var startMinWidth, startMinHeight, initialSize; | ||
|  |       borderBox = self$$1.borderBox = self$$1.borderBox || $_4kbuyt18pjjgwek1w.measureBox(elm, 'border'); | ||
|  |       self$$1.paddingBox = self$$1.paddingBox || $_4kbuyt18pjjgwek1w.measureBox(elm, 'padding'); | ||
|  |       self$$1.marginBox = self$$1.marginBox || $_4kbuyt18pjjgwek1w.measureBox(elm, 'margin'); | ||
|  |       initialSize = funcs.getSize(elm); | ||
|  |       startMinWidth = settings.minWidth; | ||
|  |       startMinHeight = settings.minHeight; | ||
|  |       minWidth = startMinWidth || initialSize.width; | ||
|  |       minHeight = startMinHeight || initialSize.height; | ||
|  |       width = settings.width; | ||
|  |       height = settings.height; | ||
|  |       autoResize = settings.autoResize; | ||
|  |       autoResize = typeof autoResize !== 'undefined' ? autoResize : !width && !height; | ||
|  |       width = width || minWidth; | ||
|  |       height = height || minHeight; | ||
|  |       var deltaW = borderBox.left + borderBox.right; | ||
|  |       var deltaH = borderBox.top + borderBox.bottom; | ||
|  |       var maxW = settings.maxWidth || 65535; | ||
|  |       var maxH = settings.maxHeight || 65535; | ||
|  |       self$$1._layoutRect = layoutRect = { | ||
|  |         x: settings.x || 0, | ||
|  |         y: settings.y || 0, | ||
|  |         w: width, | ||
|  |         h: height, | ||
|  |         deltaW: deltaW, | ||
|  |         deltaH: deltaH, | ||
|  |         contentW: width - deltaW, | ||
|  |         contentH: height - deltaH, | ||
|  |         innerW: width - deltaW, | ||
|  |         innerH: height - deltaH, | ||
|  |         startMinWidth: startMinWidth || 0, | ||
|  |         startMinHeight: startMinHeight || 0, | ||
|  |         minW: Math.min(minWidth, maxW), | ||
|  |         minH: Math.min(minHeight, maxH), | ||
|  |         maxW: maxW, | ||
|  |         maxH: maxH, | ||
|  |         autoResize: autoResize, | ||
|  |         scrollW: 0 | ||
|  |       }; | ||
|  |       self$$1._lastLayoutRect = {}; | ||
|  |       return layoutRect; | ||
|  |     }, | ||
|  |     layoutRect: function (newRect) { | ||
|  |       var self$$1 = this; | ||
|  |       var curRect = self$$1._layoutRect, lastLayoutRect, size, deltaWidth, deltaHeight, repaintControls; | ||
|  |       if (!curRect) { | ||
|  |         curRect = self$$1.initLayoutRect(); | ||
|  |       } | ||
|  |       if (newRect) { | ||
|  |         deltaWidth = curRect.deltaW; | ||
|  |         deltaHeight = curRect.deltaH; | ||
|  |         if (newRect.x !== undefined) { | ||
|  |           curRect.x = newRect.x; | ||
|  |         } | ||
|  |         if (newRect.y !== undefined) { | ||
|  |           curRect.y = newRect.y; | ||
|  |         } | ||
|  |         if (newRect.minW !== undefined) { | ||
|  |           curRect.minW = newRect.minW; | ||
|  |         } | ||
|  |         if (newRect.minH !== undefined) { | ||
|  |           curRect.minH = newRect.minH; | ||
|  |         } | ||
|  |         size = newRect.w; | ||
|  |         if (size !== undefined) { | ||
|  |           size = size < curRect.minW ? curRect.minW : size; | ||
|  |           size = size > curRect.maxW ? curRect.maxW : size; | ||
|  |           curRect.w = size; | ||
|  |           curRect.innerW = size - deltaWidth; | ||
|  |         } | ||
|  |         size = newRect.h; | ||
|  |         if (size !== undefined) { | ||
|  |           size = size < curRect.minH ? curRect.minH : size; | ||
|  |           size = size > curRect.maxH ? curRect.maxH : size; | ||
|  |           curRect.h = size; | ||
|  |           curRect.innerH = size - deltaHeight; | ||
|  |         } | ||
|  |         size = newRect.innerW; | ||
|  |         if (size !== undefined) { | ||
|  |           size = size < curRect.minW - deltaWidth ? curRect.minW - deltaWidth : size; | ||
|  |           size = size > curRect.maxW - deltaWidth ? curRect.maxW - deltaWidth : size; | ||
|  |           curRect.innerW = size; | ||
|  |           curRect.w = size + deltaWidth; | ||
|  |         } | ||
|  |         size = newRect.innerH; | ||
|  |         if (size !== undefined) { | ||
|  |           size = size < curRect.minH - deltaHeight ? curRect.minH - deltaHeight : size; | ||
|  |           size = size > curRect.maxH - deltaHeight ? curRect.maxH - deltaHeight : size; | ||
|  |           curRect.innerH = size; | ||
|  |           curRect.h = size + deltaHeight; | ||
|  |         } | ||
|  |         if (newRect.contentW !== undefined) { | ||
|  |           curRect.contentW = newRect.contentW; | ||
|  |         } | ||
|  |         if (newRect.contentH !== undefined) { | ||
|  |           curRect.contentH = newRect.contentH; | ||
|  |         } | ||
|  |         lastLayoutRect = self$$1._lastLayoutRect; | ||
|  |         if (lastLayoutRect.x !== curRect.x || lastLayoutRect.y !== curRect.y || lastLayoutRect.w !== curRect.w || lastLayoutRect.h !== curRect.h) { | ||
|  |           repaintControls = Control.repaintControls; | ||
|  |           if (repaintControls) { | ||
|  |             if (repaintControls.map && !repaintControls.map[self$$1._id]) { | ||
|  |               repaintControls.push(self$$1); | ||
|  |               repaintControls.map[self$$1._id] = true; | ||
|  |             } | ||
|  |           } | ||
|  |           lastLayoutRect.x = curRect.x; | ||
|  |           lastLayoutRect.y = curRect.y; | ||
|  |           lastLayoutRect.w = curRect.w; | ||
|  |           lastLayoutRect.h = curRect.h; | ||
|  |         } | ||
|  |         return self$$1; | ||
|  |       } | ||
|  |       return curRect; | ||
|  |     }, | ||
|  |     repaint: function () { | ||
|  |       var self$$1 = this; | ||
|  |       var style, bodyStyle, bodyElm, rect, borderBox; | ||
|  |       var borderW, borderH, lastRepaintRect, round, value; | ||
|  |       round = !document.createRange ? Math.round : function (value) { | ||
|  |         return value; | ||
|  |       }; | ||
|  |       style = self$$1.getEl().style; | ||
|  |       rect = self$$1._layoutRect; | ||
|  |       lastRepaintRect = self$$1._lastRepaintRect || {}; | ||
|  |       borderBox = self$$1.borderBox; | ||
|  |       borderW = borderBox.left + borderBox.right; | ||
|  |       borderH = borderBox.top + borderBox.bottom; | ||
|  |       if (rect.x !== lastRepaintRect.x) { | ||
|  |         style.left = round(rect.x) + 'px'; | ||
|  |         lastRepaintRect.x = rect.x; | ||
|  |       } | ||
|  |       if (rect.y !== lastRepaintRect.y) { | ||
|  |         style.top = round(rect.y) + 'px'; | ||
|  |         lastRepaintRect.y = rect.y; | ||
|  |       } | ||
|  |       if (rect.w !== lastRepaintRect.w) { | ||
|  |         value = round(rect.w - borderW); | ||
|  |         style.width = (value >= 0 ? value : 0) + 'px'; | ||
|  |         lastRepaintRect.w = rect.w; | ||
|  |       } | ||
|  |       if (rect.h !== lastRepaintRect.h) { | ||
|  |         value = round(rect.h - borderH); | ||
|  |         style.height = (value >= 0 ? value : 0) + 'px'; | ||
|  |         lastRepaintRect.h = rect.h; | ||
|  |       } | ||
|  |       if (self$$1._hasBody && rect.innerW !== lastRepaintRect.innerW) { | ||
|  |         value = round(rect.innerW); | ||
|  |         bodyElm = self$$1.getEl('body'); | ||
|  |         if (bodyElm) { | ||
|  |           bodyStyle = bodyElm.style; | ||
|  |           bodyStyle.width = (value >= 0 ? value : 0) + 'px'; | ||
|  |         } | ||
|  |         lastRepaintRect.innerW = rect.innerW; | ||
|  |       } | ||
|  |       if (self$$1._hasBody && rect.innerH !== lastRepaintRect.innerH) { | ||
|  |         value = round(rect.innerH); | ||
|  |         bodyElm = bodyElm || self$$1.getEl('body'); | ||
|  |         if (bodyElm) { | ||
|  |           bodyStyle = bodyStyle || bodyElm.style; | ||
|  |           bodyStyle.height = (value >= 0 ? value : 0) + 'px'; | ||
|  |         } | ||
|  |         lastRepaintRect.innerH = rect.innerH; | ||
|  |       } | ||
|  |       self$$1._lastRepaintRect = lastRepaintRect; | ||
|  |       self$$1.fire('repaint', {}, false); | ||
|  |     }, | ||
|  |     updateLayoutRect: function () { | ||
|  |       var self$$1 = this; | ||
|  |       self$$1.parent()._lastRect = null; | ||
|  |       funcs.css(self$$1.getEl(), { | ||
|  |         width: '', | ||
|  |         height: '' | ||
|  |       }); | ||
|  |       self$$1._layoutRect = self$$1._lastRepaintRect = self$$1._lastLayoutRect = null; | ||
|  |       self$$1.initLayoutRect(); | ||
|  |     }, | ||
|  |     on: function (name$$1, callback) { | ||
|  |       var self$$1 = this; | ||
|  |       function resolveCallbackName(name$$1) { | ||
|  |         var callback, scope; | ||
|  |         if (typeof name$$1 !== 'string') { | ||
|  |           return name$$1; | ||
|  |         } | ||
|  |         return function (e) { | ||
|  |           if (!callback) { | ||
|  |             self$$1.parentsAndSelf().each(function (ctrl) { | ||
|  |               var callbacks = ctrl.settings.callbacks; | ||
|  |               if (callbacks && (callback = callbacks[name$$1])) { | ||
|  |                 scope = ctrl; | ||
|  |                 return false; | ||
|  |               } | ||
|  |             }); | ||
|  |           } | ||
|  |           if (!callback) { | ||
|  |             e.action = name$$1; | ||
|  |             this.fire('execute', e); | ||
|  |             return; | ||
|  |           } | ||
|  |           return callback.call(scope, e); | ||
|  |         }; | ||
|  |       } | ||
|  |       getEventDispatcher(self$$1).on(name$$1, resolveCallbackName(callback)); | ||
|  |       return self$$1; | ||
|  |     }, | ||
|  |     off: function (name$$1, callback) { | ||
|  |       getEventDispatcher(this).off(name$$1, callback); | ||
|  |       return this; | ||
|  |     }, | ||
|  |     fire: function (name$$1, args, bubble) { | ||
|  |       var self$$1 = this; | ||
|  |       args = args || {}; | ||
|  |       if (!args.control) { | ||
|  |         args.control = self$$1; | ||
|  |       } | ||
|  |       args = getEventDispatcher(self$$1).fire(name$$1, args); | ||
|  |       if (bubble !== false && self$$1.parent) { | ||
|  |         var parent$$1 = self$$1.parent(); | ||
|  |         while (parent$$1 && !args.isPropagationStopped()) { | ||
|  |           parent$$1.fire(name$$1, args, false); | ||
|  |           parent$$1 = parent$$1.parent(); | ||
|  |         } | ||
|  |       } | ||
|  |       return args; | ||
|  |     }, | ||
|  |     hasEventListeners: function (name$$1) { | ||
|  |       return getEventDispatcher(this).has(name$$1); | ||
|  |     }, | ||
|  |     parents: function (selector) { | ||
|  |       var self$$1 = this; | ||
|  |       var ctrl, parents = new Collection$2(); | ||
|  |       for (ctrl = self$$1.parent(); ctrl; ctrl = ctrl.parent()) { | ||
|  |         parents.add(ctrl); | ||
|  |       } | ||
|  |       if (selector) { | ||
|  |         parents = parents.filter(selector); | ||
|  |       } | ||
|  |       return parents; | ||
|  |     }, | ||
|  |     parentsAndSelf: function (selector) { | ||
|  |       return new Collection$2(this).add(this.parents(selector)); | ||
|  |     }, | ||
|  |     next: function () { | ||
|  |       var parentControls = this.parent().items(); | ||
|  |       return parentControls[parentControls.indexOf(this) + 1]; | ||
|  |     }, | ||
|  |     prev: function () { | ||
|  |       var parentControls = this.parent().items(); | ||
|  |       return parentControls[parentControls.indexOf(this) - 1]; | ||
|  |     }, | ||
|  |     innerHtml: function (html) { | ||
|  |       this.$el.html(html); | ||
|  |       return this; | ||
|  |     }, | ||
|  |     getEl: function (suffix) { | ||
|  |       var id = suffix ? this._id + '-' + suffix : this._id; | ||
|  |       if (!this._elmCache[id]) { | ||
|  |         this._elmCache[id] = global$7('#' + id)[0]; | ||
|  |       } | ||
|  |       return this._elmCache[id]; | ||
|  |     }, | ||
|  |     show: function () { | ||
|  |       return this.visible(true); | ||
|  |     }, | ||
|  |     hide: function () { | ||
|  |       return this.visible(false); | ||
|  |     }, | ||
|  |     focus: function () { | ||
|  |       try { | ||
|  |         this.getEl().focus(); | ||
|  |       } catch (ex) { | ||
|  |       } | ||
|  |       return this; | ||
|  |     }, | ||
|  |     blur: function () { | ||
|  |       this.getEl().blur(); | ||
|  |       return this; | ||
|  |     }, | ||
|  |     aria: function (name$$1, value) { | ||
|  |       var self$$1 = this, elm = self$$1.getEl(self$$1.ariaTarget); | ||
|  |       if (typeof value === 'undefined') { | ||
|  |         return self$$1._aria[name$$1]; | ||
|  |       } | ||
|  |       self$$1._aria[name$$1] = value; | ||
|  |       if (self$$1.state.get('rendered')) { | ||
|  |         elm.setAttribute(name$$1 === 'role' ? name$$1 : 'aria-' + name$$1, value); | ||
|  |       } | ||
|  |       return self$$1; | ||
|  |     }, | ||
|  |     encode: function (text, translate) { | ||
|  |       if (translate !== false) { | ||
|  |         text = this.translate(text); | ||
|  |       } | ||
|  |       return (text || '').replace(/[&<>"]/g, function (match) { | ||
|  |         return '&#' + match.charCodeAt(0) + ';'; | ||
|  |       }); | ||
|  |     }, | ||
|  |     translate: function (text) { | ||
|  |       return Control.translate ? Control.translate(text) : text; | ||
|  |     }, | ||
|  |     before: function (items) { | ||
|  |       var self$$1 = this, parent$$1 = self$$1.parent(); | ||
|  |       if (parent$$1) { | ||
|  |         parent$$1.insert(items, parent$$1.items().indexOf(self$$1), true); | ||
|  |       } | ||
|  |       return self$$1; | ||
|  |     }, | ||
|  |     after: function (items) { | ||
|  |       var self$$1 = this, parent$$1 = self$$1.parent(); | ||
|  |       if (parent$$1) { | ||
|  |         parent$$1.insert(items, parent$$1.items().indexOf(self$$1)); | ||
|  |       } | ||
|  |       return self$$1; | ||
|  |     }, | ||
|  |     remove: function () { | ||
|  |       var self$$1 = this; | ||
|  |       var elm = self$$1.getEl(); | ||
|  |       var parent$$1 = self$$1.parent(); | ||
|  |       var newItems, i; | ||
|  |       if (self$$1.items) { | ||
|  |         var controls = self$$1.items().toArray(); | ||
|  |         i = controls.length; | ||
|  |         while (i--) { | ||
|  |           controls[i].remove(); | ||
|  |         } | ||
|  |       } | ||
|  |       if (parent$$1 && parent$$1.items) { | ||
|  |         newItems = []; | ||
|  |         parent$$1.items().each(function (item) { | ||
|  |           if (item !== self$$1) { | ||
|  |             newItems.push(item); | ||
|  |           } | ||
|  |         }); | ||
|  |         parent$$1.items().set(newItems); | ||
|  |         parent$$1._lastRect = null; | ||
|  |       } | ||
|  |       if (self$$1._eventsRoot && self$$1._eventsRoot === self$$1) { | ||
|  |         global$7(elm).off(); | ||
|  |       } | ||
|  |       var lookup = self$$1.getRoot().controlIdLookup; | ||
|  |       if (lookup) { | ||
|  |         delete lookup[self$$1._id]; | ||
|  |       } | ||
|  |       if (elm && elm.parentNode) { | ||
|  |         elm.parentNode.removeChild(elm); | ||
|  |       } | ||
|  |       self$$1.state.set('rendered', false); | ||
|  |       self$$1.state.destroy(); | ||
|  |       self$$1.fire('remove'); | ||
|  |       return self$$1; | ||
|  |     }, | ||
|  |     renderBefore: function (elm) { | ||
|  |       global$7(elm).before(this.renderHtml()); | ||
|  |       this.postRender(); | ||
|  |       return this; | ||
|  |     }, | ||
|  |     renderTo: function (elm) { | ||
|  |       global$7(elm || this.getContainerElm()).append(this.renderHtml()); | ||
|  |       this.postRender(); | ||
|  |       return this; | ||
|  |     }, | ||
|  |     preRender: function () { | ||
|  |     }, | ||
|  |     render: function () { | ||
|  |     }, | ||
|  |     renderHtml: function () { | ||
|  |       return '<div id="' + this._id + '" class="' + this.classes + '"></div>'; | ||
|  |     }, | ||
|  |     postRender: function () { | ||
|  |       var self$$1 = this; | ||
|  |       var settings = self$$1.settings; | ||
|  |       var elm, box, parent$$1, name$$1, parentEventsRoot; | ||
|  |       self$$1.$el = global$7(self$$1.getEl()); | ||
|  |       self$$1.state.set('rendered', true); | ||
|  |       for (name$$1 in settings) { | ||
|  |         if (name$$1.indexOf('on') === 0) { | ||
|  |           self$$1.on(name$$1.substr(2), settings[name$$1]); | ||
|  |         } | ||
|  |       } | ||
|  |       if (self$$1._eventsRoot) { | ||
|  |         for (parent$$1 = self$$1.parent(); !parentEventsRoot && parent$$1; parent$$1 = parent$$1.parent()) { | ||
|  |           parentEventsRoot = parent$$1._eventsRoot; | ||
|  |         } | ||
|  |         if (parentEventsRoot) { | ||
|  |           for (name$$1 in parentEventsRoot._nativeEvents) { | ||
|  |             self$$1._nativeEvents[name$$1] = true; | ||
|  |           } | ||
|  |         } | ||
|  |       } | ||
|  |       bindPendingEvents(self$$1); | ||
|  |       if (settings.style) { | ||
|  |         elm = self$$1.getEl(); | ||
|  |         if (elm) { | ||
|  |           elm.setAttribute('style', settings.style); | ||
|  |           elm.style.cssText = settings.style; | ||
|  |         } | ||
|  |       } | ||
|  |       if (self$$1.settings.border) { | ||
|  |         box = self$$1.borderBox; | ||
|  |         self$$1.$el.css({ | ||
|  |           'border-top-width': box.top, | ||
|  |           'border-right-width': box.right, | ||
|  |           'border-bottom-width': box.bottom, | ||
|  |           'border-left-width': box.left | ||
|  |         }); | ||
|  |       } | ||
|  |       var root = self$$1.getRoot(); | ||
|  |       if (!root.controlIdLookup) { | ||
|  |         root.controlIdLookup = {}; | ||
|  |       } | ||
|  |       root.controlIdLookup[self$$1._id] = self$$1; | ||
|  |       for (var key in self$$1._aria) { | ||
|  |         self$$1.aria(key, self$$1._aria[key]); | ||
|  |       } | ||
|  |       if (self$$1.state.get('visible') === false) { | ||
|  |         self$$1.getEl().style.display = 'none'; | ||
|  |       } | ||
|  |       self$$1.bindStates(); | ||
|  |       self$$1.state.on('change:visible', function (e) { | ||
|  |         var state = e.value; | ||
|  |         var parentCtrl; | ||
|  |         if (self$$1.state.get('rendered')) { | ||
|  |           self$$1.getEl().style.display = state === false ? 'none' : ''; | ||
|  |           self$$1.getEl().getBoundingClientRect(); | ||
|  |         } | ||
|  |         parentCtrl = self$$1.parent(); | ||
|  |         if (parentCtrl) { | ||
|  |           parentCtrl._lastRect = null; | ||
|  |         } | ||
|  |         self$$1.fire(state ? 'show' : 'hide'); | ||
|  |         $_cqjgb518wjjgwek2f.add(self$$1); | ||
|  |       }); | ||
|  |       self$$1.fire('postrender', {}, false); | ||
|  |     }, | ||
|  |     bindStates: function () { | ||
|  |     }, | ||
|  |     scrollIntoView: function (align) { | ||
|  |       function getOffset(elm, rootElm) { | ||
|  |         var x, y, parent$$1 = elm; | ||
|  |         x = y = 0; | ||
|  |         while (parent$$1 && parent$$1 !== rootElm && parent$$1.nodeType) { | ||
|  |           x += parent$$1.offsetLeft || 0; | ||
|  |           y += parent$$1.offsetTop || 0; | ||
|  |           parent$$1 = parent$$1.offsetParent; | ||
|  |         } | ||
|  |         return { | ||
|  |           x: x, | ||
|  |           y: y | ||
|  |         }; | ||
|  |       } | ||
|  |       var elm = this.getEl(), parentElm = elm.parentNode; | ||
|  |       var x, y, width, height, parentWidth, parentHeight; | ||
|  |       var pos = getOffset(elm, parentElm); | ||
|  |       x = pos.x; | ||
|  |       y = pos.y; | ||
|  |       width = elm.offsetWidth; | ||
|  |       height = elm.offsetHeight; | ||
|  |       parentWidth = parentElm.clientWidth; | ||
|  |       parentHeight = parentElm.clientHeight; | ||
|  |       if (align === 'end') { | ||
|  |         x -= parentWidth - width; | ||
|  |         y -= parentHeight - height; | ||
|  |       } else if (align === 'center') { | ||
|  |         x -= parentWidth / 2 - width / 2; | ||
|  |         y -= parentHeight / 2 - height / 2; | ||
|  |       } | ||
|  |       parentElm.scrollLeft = x; | ||
|  |       parentElm.scrollTop = y; | ||
|  |       return this; | ||
|  |     }, | ||
|  |     getRoot: function () { | ||
|  |       var ctrl = this, rootControl; | ||
|  |       var parents = []; | ||
|  |       while (ctrl) { | ||
|  |         if (ctrl.rootControl) { | ||
|  |           rootControl = ctrl.rootControl; | ||
|  |           break; | ||
|  |         } | ||
|  |         parents.push(ctrl); | ||
|  |         rootControl = ctrl; | ||
|  |         ctrl = ctrl.parent(); | ||
|  |       } | ||
|  |       if (!rootControl) { | ||
|  |         rootControl = this; | ||
|  |       } | ||
|  |       var i = parents.length; | ||
|  |       while (i--) { | ||
|  |         parents[i].rootControl = rootControl; | ||
|  |       } | ||
|  |       return rootControl; | ||
|  |     }, | ||
|  |     reflow: function () { | ||
|  |       $_cqjgb518wjjgwek2f.remove(this); | ||
|  |       var parent$$1 = this.parent(); | ||
|  |       if (parent$$1 && parent$$1._layout && !parent$$1._layout.isNative()) { | ||
|  |         parent$$1.reflow(); | ||
|  |       } | ||
|  |       return this; | ||
|  |     } | ||
|  |   }; | ||
|  |   global$4.each('text title visible disabled active value'.split(' '), function (name$$1) { | ||
|  |     proto$1[name$$1] = function (value) { | ||
|  |       if (arguments.length === 0) { | ||
|  |         return this.state.get(name$$1); | ||
|  |       } | ||
|  |       if (typeof value !== 'undefined') { | ||
|  |         this.state.set(name$$1, value); | ||
|  |       } | ||
|  |       return this; | ||
|  |     }; | ||
|  |   }); | ||
|  |   Control = global$8.extend(proto$1); | ||
|  |   function getEventDispatcher(obj) { | ||
|  |     if (!obj._eventDispatcher) { | ||
|  |       obj._eventDispatcher = new global$9({ | ||
|  |         scope: obj, | ||
|  |         toggleEvent: function (name$$1, state) { | ||
|  |           if (state && global$9.isNative(name$$1)) { | ||
|  |             if (!obj._nativeEvents) { | ||
|  |               obj._nativeEvents = {}; | ||
|  |             } | ||
|  |             obj._nativeEvents[name$$1] = true; | ||
|  |             if (obj.state.get('rendered')) { | ||
|  |               bindPendingEvents(obj); | ||
|  |             } | ||
|  |           } | ||
|  |         } | ||
|  |       }); | ||
|  |     } | ||
|  |     return obj._eventDispatcher; | ||
|  |   } | ||
|  |   function bindPendingEvents(eventCtrl) { | ||
|  |     var i, l, parents, eventRootCtrl, nativeEvents, name$$1; | ||
|  |     function delegate(e) { | ||
|  |       var control = eventCtrl.getParentCtrl(e.target); | ||
|  |       if (control) { | ||
|  |         control.fire(e.type, e); | ||
|  |       } | ||
|  |     } | ||
|  |     function mouseLeaveHandler() { | ||
|  |       var ctrl = eventRootCtrl._lastHoverCtrl; | ||
|  |       if (ctrl) { | ||
|  |         ctrl.fire('mouseleave', { target: ctrl.getEl() }); | ||
|  |         ctrl.parents().each(function (ctrl) { | ||
|  |           ctrl.fire('mouseleave', { target: ctrl.getEl() }); | ||
|  |         }); | ||
|  |         eventRootCtrl._lastHoverCtrl = null; | ||
|  |       } | ||
|  |     } | ||
|  |     function mouseEnterHandler(e) { | ||
|  |       var ctrl = eventCtrl.getParentCtrl(e.target), lastCtrl = eventRootCtrl._lastHoverCtrl, idx = 0, i, parents, lastParents; | ||
|  |       if (ctrl !== lastCtrl) { | ||
|  |         eventRootCtrl._lastHoverCtrl = ctrl; | ||
|  |         parents = ctrl.parents().toArray().reverse(); | ||
|  |         parents.push(ctrl); | ||
|  |         if (lastCtrl) { | ||
|  |           lastParents = lastCtrl.parents().toArray().reverse(); | ||
|  |           lastParents.push(lastCtrl); | ||
|  |           for (idx = 0; idx < lastParents.length; idx++) { | ||
|  |             if (parents[idx] !== lastParents[idx]) { | ||
|  |               break; | ||
|  |             } | ||
|  |           } | ||
|  |           for (i = lastParents.length - 1; i >= idx; i--) { | ||
|  |             lastCtrl = lastParents[i]; | ||
|  |             lastCtrl.fire('mouseleave', { target: lastCtrl.getEl() }); | ||
|  |           } | ||
|  |         } | ||
|  |         for (i = idx; i < parents.length; i++) { | ||
|  |           ctrl = parents[i]; | ||
|  |           ctrl.fire('mouseenter', { target: ctrl.getEl() }); | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  |     function fixWheelEvent(e) { | ||
|  |       e.preventDefault(); | ||
|  |       if (e.type === 'mousewheel') { | ||
|  |         e.deltaY = -1 / 40 * e.wheelDelta; | ||
|  |         if (e.wheelDeltaX) { | ||
|  |           e.deltaX = -1 / 40 * e.wheelDeltaX; | ||
|  |         } | ||
|  |       } else { | ||
|  |         e.deltaX = 0; | ||
|  |         e.deltaY = e.detail; | ||
|  |       } | ||
|  |       e = eventCtrl.fire('wheel', e); | ||
|  |     } | ||
|  |     nativeEvents = eventCtrl._nativeEvents; | ||
|  |     if (nativeEvents) { | ||
|  |       parents = eventCtrl.parents().toArray(); | ||
|  |       parents.unshift(eventCtrl); | ||
|  |       for (i = 0, l = parents.length; !eventRootCtrl && i < l; i++) { | ||
|  |         eventRootCtrl = parents[i]._eventsRoot; | ||
|  |       } | ||
|  |       if (!eventRootCtrl) { | ||
|  |         eventRootCtrl = parents[parents.length - 1] || eventCtrl; | ||
|  |       } | ||
|  |       eventCtrl._eventsRoot = eventRootCtrl; | ||
|  |       for (l = i, i = 0; i < l; i++) { | ||
|  |         parents[i]._eventsRoot = eventRootCtrl; | ||
|  |       } | ||
|  |       var eventRootDelegates = eventRootCtrl._delegates; | ||
|  |       if (!eventRootDelegates) { | ||
|  |         eventRootDelegates = eventRootCtrl._delegates = {}; | ||
|  |       } | ||
|  |       for (name$$1 in nativeEvents) { | ||
|  |         if (!nativeEvents) { | ||
|  |           return false; | ||
|  |         } | ||
|  |         if (name$$1 === 'wheel' && !hasWheelEventSupport) { | ||
|  |           if (hasMouseWheelEventSupport) { | ||
|  |             global$7(eventCtrl.getEl()).on('mousewheel', fixWheelEvent); | ||
|  |           } else { | ||
|  |             global$7(eventCtrl.getEl()).on('DOMMouseScroll', fixWheelEvent); | ||
|  |           } | ||
|  |           continue; | ||
|  |         } | ||
|  |         if (name$$1 === 'mouseenter' || name$$1 === 'mouseleave') { | ||
|  |           if (!eventRootCtrl._hasMouseEnter) { | ||
|  |             global$7(eventRootCtrl.getEl()).on('mouseleave', mouseLeaveHandler).on('mouseover', mouseEnterHandler); | ||
|  |             eventRootCtrl._hasMouseEnter = 1; | ||
|  |           } | ||
|  |         } else if (!eventRootDelegates[name$$1]) { | ||
|  |           global$7(eventRootCtrl.getEl()).on(name$$1, delegate); | ||
|  |           eventRootDelegates[name$$1] = true; | ||
|  |         } | ||
|  |         nativeEvents[name$$1] = false; | ||
|  |       } | ||
|  |     } | ||
|  |   } | ||
|  |   var Control$1 = Control; | ||
|  | 
 | ||
|  |   var isStatic = function (elm) { | ||
|  |     return funcs.getRuntimeStyle(elm, 'position') === 'static'; | ||
|  |   }; | ||
|  |   var isFixed = function (ctrl) { | ||
|  |     return ctrl.state.get('fixed'); | ||
|  |   }; | ||
|  |   function calculateRelativePosition(ctrl, targetElm, rel) { | ||
|  |     var ctrlElm, pos, x, y, selfW, selfH, targetW, targetH, viewport, size; | ||
|  |     viewport = getWindowViewPort(); | ||
|  |     pos = funcs.getPos(targetElm, $_egt6ye18xjjgwek2h.getUiContainer(ctrl)); | ||
|  |     x = pos.x; | ||
|  |     y = pos.y; | ||
|  |     if (isFixed(ctrl) && isStatic(document.body)) { | ||
|  |       x -= viewport.x; | ||
|  |       y -= viewport.y; | ||
|  |     } | ||
|  |     ctrlElm = ctrl.getEl(); | ||
|  |     size = funcs.getSize(ctrlElm); | ||
|  |     selfW = size.width; | ||
|  |     selfH = size.height; | ||
|  |     size = funcs.getSize(targetElm); | ||
|  |     targetW = size.width; | ||
|  |     targetH = size.height; | ||
|  |     rel = (rel || '').split(''); | ||
|  |     if (rel[0] === 'b') { | ||
|  |       y += targetH; | ||
|  |     } | ||
|  |     if (rel[1] === 'r') { | ||
|  |       x += targetW; | ||
|  |     } | ||
|  |     if (rel[0] === 'c') { | ||
|  |       y += Math.round(targetH / 2); | ||
|  |     } | ||
|  |     if (rel[1] === 'c') { | ||
|  |       x += Math.round(targetW / 2); | ||
|  |     } | ||
|  |     if (rel[3] === 'b') { | ||
|  |       y -= selfH; | ||
|  |     } | ||
|  |     if (rel[4] === 'r') { | ||
|  |       x -= selfW; | ||
|  |     } | ||
|  |     if (rel[3] === 'c') { | ||
|  |       y -= Math.round(selfH / 2); | ||
|  |     } | ||
|  |     if (rel[4] === 'c') { | ||
|  |       x -= Math.round(selfW / 2); | ||
|  |     } | ||
|  |     return { | ||
|  |       x: x, | ||
|  |       y: y, | ||
|  |       w: selfW, | ||
|  |       h: selfH | ||
|  |     }; | ||
|  |   } | ||
|  |   var getUiContainerViewPort = function (customUiContainer) { | ||
|  |     return { | ||
|  |       x: 0, | ||
|  |       y: 0, | ||
|  |       w: customUiContainer.scrollWidth - 1, | ||
|  |       h: customUiContainer.scrollHeight - 1 | ||
|  |     }; | ||
|  |   }; | ||
|  |   var getWindowViewPort = function () { | ||
|  |     var win = window; | ||
|  |     var x = Math.max(win.pageXOffset, document.body.scrollLeft, document.documentElement.scrollLeft); | ||
|  |     var y = Math.max(win.pageYOffset, document.body.scrollTop, document.documentElement.scrollTop); | ||
|  |     var w = win.innerWidth || document.documentElement.clientWidth; | ||
|  |     var h = win.innerHeight || document.documentElement.clientHeight; | ||
|  |     return { | ||
|  |       x: x, | ||
|  |       y: y, | ||
|  |       w: x + w, | ||
|  |       h: y + h | ||
|  |     }; | ||
|  |   }; | ||
|  |   var getViewPortRect = function (ctrl) { | ||
|  |     var customUiContainer = $_egt6ye18xjjgwek2h.getUiContainer(ctrl); | ||
|  |     return customUiContainer && !isFixed(ctrl) ? getUiContainerViewPort(customUiContainer) : getWindowViewPort(); | ||
|  |   }; | ||
|  |   var $_8zu82i18yjjgwek2l = { | ||
|  |     testMoveRel: function (elm, rels) { | ||
|  |       var viewPortRect = getViewPortRect(this); | ||
|  |       for (var i = 0; i < rels.length; i++) { | ||
|  |         var pos = calculateRelativePosition(this, elm, rels[i]); | ||
|  |         if (isFixed(this)) { | ||
|  |           if (pos.x > 0 && pos.x + pos.w < viewPortRect.w && pos.y > 0 && pos.y + pos.h < viewPortRect.h) { | ||
|  |             return rels[i]; | ||
|  |           } | ||
|  |         } else { | ||
|  |           if (pos.x > viewPortRect.x && pos.x + pos.w < viewPortRect.w && pos.y > viewPortRect.y && pos.y + pos.h < viewPortRect.h) { | ||
|  |             return rels[i]; | ||
|  |           } | ||
|  |         } | ||
|  |       } | ||
|  |       return rels[0]; | ||
|  |     }, | ||
|  |     moveRel: function (elm, rel) { | ||
|  |       if (typeof rel !== 'string') { | ||
|  |         rel = this.testMoveRel(elm, rel); | ||
|  |       } | ||
|  |       var pos = calculateRelativePosition(this, elm, rel); | ||
|  |       return this.moveTo(pos.x, pos.y); | ||
|  |     }, | ||
|  |     moveBy: function (dx, dy) { | ||
|  |       var self$$1 = this, rect = self$$1.layoutRect(); | ||
|  |       self$$1.moveTo(rect.x + dx, rect.y + dy); | ||
|  |       return self$$1; | ||
|  |     }, | ||
|  |     moveTo: function (x, y) { | ||
|  |       var self$$1 = this; | ||
|  |       function constrain(value, max, size) { | ||
|  |         if (value < 0) { | ||
|  |           return 0; | ||
|  |         } | ||
|  |         if (value + size > max) { | ||
|  |           value = max - size; | ||
|  |           return value < 0 ? 0 : value; | ||
|  |         } | ||
|  |         return value; | ||
|  |       } | ||
|  |       if (self$$1.settings.constrainToViewport) { | ||
|  |         var viewPortRect = getViewPortRect(this); | ||
|  |         var layoutRect = self$$1.layoutRect(); | ||
|  |         x = constrain(x, viewPortRect.w, layoutRect.w); | ||
|  |         y = constrain(y, viewPortRect.h, layoutRect.h); | ||
|  |       } | ||
|  |       var uiContainer = $_egt6ye18xjjgwek2h.getUiContainer(self$$1); | ||
|  |       if (uiContainer && isStatic(uiContainer) && !isFixed(self$$1)) { | ||
|  |         x -= uiContainer.scrollLeft; | ||
|  |         y -= uiContainer.scrollTop; | ||
|  |       } | ||
|  |       if (uiContainer) { | ||
|  |         x += 1; | ||
|  |         y += 1; | ||
|  |       } | ||
|  |       if (self$$1.state.get('rendered')) { | ||
|  |         self$$1.layoutRect({ | ||
|  |           x: x, | ||
|  |           y: y | ||
|  |         }).repaint(); | ||
|  |       } else { | ||
|  |         self$$1.settings.x = x; | ||
|  |         self$$1.settings.y = y; | ||
|  |       } | ||
|  |       self$$1.fire('move', { | ||
|  |         x: x, | ||
|  |         y: y | ||
|  |       }); | ||
|  |       return self$$1; | ||
|  |     } | ||
|  |   }; | ||
|  | 
 | ||
|  |   var Tooltip = Control$1.extend({ | ||
|  |     Mixins: [$_8zu82i18yjjgwek2l], | ||
|  |     Defaults: { classes: 'widget tooltip tooltip-n' }, | ||
|  |     renderHtml: function () { | ||
|  |       var self = this, prefix = self.classPrefix; | ||
|  |       return '<div id="' + self._id + '" class="' + self.classes + '" role="presentation">' + '<div class="' + prefix + 'tooltip-arrow"></div>' + '<div class="' + prefix + 'tooltip-inner">' + self.encode(self.state.get('text')) + '</div>' + '</div>'; | ||
|  |     }, | ||
|  |     bindStates: function () { | ||
|  |       var self = this; | ||
|  |       self.state.on('change:text', function (e) { | ||
|  |         self.getEl().lastChild.innerHTML = self.encode(e.value); | ||
|  |       }); | ||
|  |       return self._super(); | ||
|  |     }, | ||
|  |     repaint: function () { | ||
|  |       var self = this; | ||
|  |       var style, rect; | ||
|  |       style = self.getEl().style; | ||
|  |       rect = self._layoutRect; | ||
|  |       style.left = rect.x + 'px'; | ||
|  |       style.top = rect.y + 'px'; | ||
|  |       style.zIndex = 65535 + 65535; | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var Widget = Control$1.extend({ | ||
|  |     init: function (settings) { | ||
|  |       var self = this; | ||
|  |       self._super(settings); | ||
|  |       settings = self.settings; | ||
|  |       self.canFocus = true; | ||
|  |       if (settings.tooltip && Widget.tooltips !== false) { | ||
|  |         self.on('mouseenter', function (e) { | ||
|  |           var tooltip = self.tooltip().moveTo(-65535); | ||
|  |           if (e.control === self) { | ||
|  |             var rel = tooltip.text(settings.tooltip).show().testMoveRel(self.getEl(), [ | ||
|  |               'bc-tc', | ||
|  |               'bc-tl', | ||
|  |               'bc-tr' | ||
|  |             ]); | ||
|  |             tooltip.classes.toggle('tooltip-n', rel === 'bc-tc'); | ||
|  |             tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl'); | ||
|  |             tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr'); | ||
|  |             tooltip.moveRel(self.getEl(), rel); | ||
|  |           } else { | ||
|  |             tooltip.hide(); | ||
|  |           } | ||
|  |         }); | ||
|  |         self.on('mouseleave mousedown click', function () { | ||
|  |           self.tooltip().remove(); | ||
|  |           self._tooltip = null; | ||
|  |         }); | ||
|  |       } | ||
|  |       self.aria('label', settings.ariaLabel || settings.tooltip); | ||
|  |     }, | ||
|  |     tooltip: function () { | ||
|  |       if (!this._tooltip) { | ||
|  |         this._tooltip = new Tooltip({ type: 'tooltip' }); | ||
|  |         $_egt6ye18xjjgwek2h.inheritUiContainer(this, this._tooltip); | ||
|  |         this._tooltip.renderTo(); | ||
|  |       } | ||
|  |       return this._tooltip; | ||
|  |     }, | ||
|  |     postRender: function () { | ||
|  |       var self = this, settings = self.settings; | ||
|  |       self._super(); | ||
|  |       if (!self.parent() && (settings.width || settings.height)) { | ||
|  |         self.initLayoutRect(); | ||
|  |         self.repaint(); | ||
|  |       } | ||
|  |       if (settings.autofocus) { | ||
|  |         self.focus(); | ||
|  |       } | ||
|  |     }, | ||
|  |     bindStates: function () { | ||
|  |       var self = this; | ||
|  |       function disable(state) { | ||
|  |         self.aria('disabled', state); | ||
|  |         self.classes.toggle('disabled', state); | ||
|  |       } | ||
|  |       function active(state) { | ||
|  |         self.aria('pressed', state); | ||
|  |         self.classes.toggle('active', state); | ||
|  |       } | ||
|  |       self.state.on('change:disabled', function (e) { | ||
|  |         disable(e.value); | ||
|  |       }); | ||
|  |       self.state.on('change:active', function (e) { | ||
|  |         active(e.value); | ||
|  |       }); | ||
|  |       if (self.state.get('disabled')) { | ||
|  |         disable(true); | ||
|  |       } | ||
|  |       if (self.state.get('active')) { | ||
|  |         active(true); | ||
|  |       } | ||
|  |       return self._super(); | ||
|  |     }, | ||
|  |     remove: function () { | ||
|  |       this._super(); | ||
|  |       if (this._tooltip) { | ||
|  |         this._tooltip.remove(); | ||
|  |         this._tooltip = null; | ||
|  |       } | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var Progress = Widget.extend({ | ||
|  |     Defaults: { value: 0 }, | ||
|  |     init: function (settings) { | ||
|  |       var self = this; | ||
|  |       self._super(settings); | ||
|  |       self.classes.add('progress'); | ||
|  |       if (!self.settings.filter) { | ||
|  |         self.settings.filter = function (value) { | ||
|  |           return Math.round(value); | ||
|  |         }; | ||
|  |       } | ||
|  |     }, | ||
|  |     renderHtml: function () { | ||
|  |       var self = this, id = self._id, prefix = this.classPrefix; | ||
|  |       return '<div id="' + id + '" class="' + self.classes + '">' + '<div class="' + prefix + 'bar-container">' + '<div class="' + prefix + 'bar"></div>' + '</div>' + '<div class="' + prefix + 'text">0%</div>' + '</div>'; | ||
|  |     }, | ||
|  |     postRender: function () { | ||
|  |       var self = this; | ||
|  |       self._super(); | ||
|  |       self.value(self.settings.value); | ||
|  |       return self; | ||
|  |     }, | ||
|  |     bindStates: function () { | ||
|  |       var self = this; | ||
|  |       function setValue(value) { | ||
|  |         value = self.settings.filter(value); | ||
|  |         self.getEl().lastChild.innerHTML = value + '%'; | ||
|  |         self.getEl().firstChild.firstChild.style.width = value + '%'; | ||
|  |       } | ||
|  |       self.state.on('change:value', function (e) { | ||
|  |         setValue(e.value); | ||
|  |       }); | ||
|  |       setValue(self.state.get('value')); | ||
|  |       return self._super(); | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var updateLiveRegion = function (ctx, text) { | ||
|  |     ctx.getEl().lastChild.textContent = text + (ctx.progressBar ? ' ' + ctx.progressBar.value() + '%' : ''); | ||
|  |   }; | ||
|  |   var Notification = Control$1.extend({ | ||
|  |     Mixins: [$_8zu82i18yjjgwek2l], | ||
|  |     Defaults: { classes: 'widget notification' }, | ||
|  |     init: function (settings) { | ||
|  |       var self = this; | ||
|  |       self._super(settings); | ||
|  |       self.maxWidth = settings.maxWidth; | ||
|  |       if (settings.text) { | ||
|  |         self.text(settings.text); | ||
|  |       } | ||
|  |       if (settings.icon) { | ||
|  |         self.icon = settings.icon; | ||
|  |       } | ||
|  |       if (settings.color) { | ||
|  |         self.color = settings.color; | ||
|  |       } | ||
|  |       if (settings.type) { | ||
|  |         self.classes.add('notification-' + settings.type); | ||
|  |       } | ||
|  |       if (settings.timeout && (settings.timeout < 0 || settings.timeout > 0) && !settings.closeButton) { | ||
|  |         self.closeButton = false; | ||
|  |       } else { | ||
|  |         self.classes.add('has-close'); | ||
|  |         self.closeButton = true; | ||
|  |       } | ||
|  |       if (settings.progressBar) { | ||
|  |         self.progressBar = new Progress(); | ||
|  |       } | ||
|  |       self.on('click', function (e) { | ||
|  |         if (e.target.className.indexOf(self.classPrefix + 'close') !== -1) { | ||
|  |           self.close(); | ||
|  |         } | ||
|  |       }); | ||
|  |     }, | ||
|  |     renderHtml: function () { | ||
|  |       var self = this; | ||
|  |       var prefix = self.classPrefix; | ||
|  |       var icon = '', closeButton = '', progressBar = '', notificationStyle = ''; | ||
|  |       if (self.icon) { | ||
|  |         icon = '<i class="' + prefix + 'ico' + ' ' + prefix + 'i-' + self.icon + '"></i>'; | ||
|  |       } | ||
|  |       notificationStyle = ' style="max-width: ' + self.maxWidth + 'px;' + (self.color ? 'background-color: ' + self.color + ';"' : '"'); | ||
|  |       if (self.closeButton) { | ||
|  |         closeButton = '<button type="button" class="' + prefix + 'close" aria-hidden="true">\xD7</button>'; | ||
|  |       } | ||
|  |       if (self.progressBar) { | ||
|  |         progressBar = self.progressBar.renderHtml(); | ||
|  |       } | ||
|  |       return '<div id="' + self._id + '" class="' + self.classes + '"' + notificationStyle + ' role="presentation">' + icon + '<div class="' + prefix + 'notification-inner">' + self.state.get('text') + '</div>' + progressBar + closeButton + '<div style="clip: rect(1px, 1px, 1px, 1px);height: 1px;overflow: hidden;position: absolute;width: 1px;"' + ' aria-live="assertive" aria-relevant="additions" aria-atomic="true"></div>' + '</div>'; | ||
|  |     }, | ||
|  |     postRender: function () { | ||
|  |       var self = this; | ||
|  |       global$3.setTimeout(function () { | ||
|  |         self.$el.addClass(self.classPrefix + 'in'); | ||
|  |         updateLiveRegion(self, self.state.get('text')); | ||
|  |       }, 100); | ||
|  |       return self._super(); | ||
|  |     }, | ||
|  |     bindStates: function () { | ||
|  |       var self = this; | ||
|  |       self.state.on('change:text', function (e) { | ||
|  |         self.getEl().firstChild.innerHTML = e.value; | ||
|  |         updateLiveRegion(self, e.value); | ||
|  |       }); | ||
|  |       if (self.progressBar) { | ||
|  |         self.progressBar.bindStates(); | ||
|  |         self.progressBar.state.on('change:value', function (e) { | ||
|  |           updateLiveRegion(self, self.state.get('text')); | ||
|  |         }); | ||
|  |       } | ||
|  |       return self._super(); | ||
|  |     }, | ||
|  |     close: function () { | ||
|  |       var self = this; | ||
|  |       if (!self.fire('close').isDefaultPrevented()) { | ||
|  |         self.remove(); | ||
|  |       } | ||
|  |       return self; | ||
|  |     }, | ||
|  |     repaint: function () { | ||
|  |       var self = this; | ||
|  |       var style, rect; | ||
|  |       style = self.getEl().style; | ||
|  |       rect = self._layoutRect; | ||
|  |       style.left = rect.x + 'px'; | ||
|  |       style.top = rect.y + 'px'; | ||
|  |       style.zIndex = 65535 - 1; | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   function NotificationManagerImpl (editor) { | ||
|  |     var getEditorContainer = function (editor) { | ||
|  |       return editor.inline ? editor.getElement() : editor.getContentAreaContainer(); | ||
|  |     }; | ||
|  |     var getContainerWidth = function () { | ||
|  |       var container = getEditorContainer(editor); | ||
|  |       return funcs.getSize(container).width; | ||
|  |     }; | ||
|  |     var prePositionNotifications = function (notifications) { | ||
|  |       each(notifications, function (notification) { | ||
|  |         notification.moveTo(0, 0); | ||
|  |       }); | ||
|  |     }; | ||
|  |     var positionNotifications = function (notifications) { | ||
|  |       if (notifications.length > 0) { | ||
|  |         var firstItem = notifications.slice(0, 1)[0]; | ||
|  |         var container = getEditorContainer(editor); | ||
|  |         firstItem.moveRel(container, 'tc-tc'); | ||
|  |         each(notifications, function (notification, index) { | ||
|  |           if (index > 0) { | ||
|  |             notification.moveRel(notifications[index - 1].getEl(), 'bc-tc'); | ||
|  |           } | ||
|  |         }); | ||
|  |       } | ||
|  |     }; | ||
|  |     var reposition = function (notifications) { | ||
|  |       prePositionNotifications(notifications); | ||
|  |       positionNotifications(notifications); | ||
|  |     }; | ||
|  |     var open = function (args, closeCallback) { | ||
|  |       var extendedArgs = global$4.extend(args, { maxWidth: getContainerWidth() }); | ||
|  |       var notif = new Notification(extendedArgs); | ||
|  |       notif.args = extendedArgs; | ||
|  |       if (extendedArgs.timeout > 0) { | ||
|  |         notif.timer = setTimeout(function () { | ||
|  |           notif.close(); | ||
|  |           closeCallback(); | ||
|  |         }, extendedArgs.timeout); | ||
|  |       } | ||
|  |       notif.on('close', function () { | ||
|  |         closeCallback(); | ||
|  |       }); | ||
|  |       notif.renderTo(); | ||
|  |       return notif; | ||
|  |     }; | ||
|  |     var close = function (notification) { | ||
|  |       notification.close(); | ||
|  |     }; | ||
|  |     var getArgs = function (notification) { | ||
|  |       return notification.args; | ||
|  |     }; | ||
|  |     return { | ||
|  |       open: open, | ||
|  |       close: close, | ||
|  |       reposition: reposition, | ||
|  |       getArgs: getArgs | ||
|  |     }; | ||
|  |   } | ||
|  | 
 | ||
|  |   function getDocumentSize(doc) { | ||
|  |     var documentElement, body, scrollWidth, clientWidth; | ||
|  |     var offsetWidth, scrollHeight, clientHeight, offsetHeight; | ||
|  |     var max = Math.max; | ||
|  |     documentElement = doc.documentElement; | ||
|  |     body = doc.body; | ||
|  |     scrollWidth = max(documentElement.scrollWidth, body.scrollWidth); | ||
|  |     clientWidth = max(documentElement.clientWidth, body.clientWidth); | ||
|  |     offsetWidth = max(documentElement.offsetWidth, body.offsetWidth); | ||
|  |     scrollHeight = max(documentElement.scrollHeight, body.scrollHeight); | ||
|  |     clientHeight = max(documentElement.clientHeight, body.clientHeight); | ||
|  |     offsetHeight = max(documentElement.offsetHeight, body.offsetHeight); | ||
|  |     return { | ||
|  |       width: scrollWidth < offsetWidth ? clientWidth : scrollWidth, | ||
|  |       height: scrollHeight < offsetHeight ? clientHeight : scrollHeight | ||
|  |     }; | ||
|  |   } | ||
|  |   function updateWithTouchData(e) { | ||
|  |     var keys, i; | ||
|  |     if (e.changedTouches) { | ||
|  |       keys = 'screenX screenY pageX pageY clientX clientY'.split(' '); | ||
|  |       for (i = 0; i < keys.length; i++) { | ||
|  |         e[keys[i]] = e.changedTouches[0][keys[i]]; | ||
|  |       } | ||
|  |     } | ||
|  |   } | ||
|  |   function DragHelper (id, settings) { | ||
|  |     var $eventOverlay; | ||
|  |     var doc = settings.document || document; | ||
|  |     var downButton; | ||
|  |     var start, stop$$1, drag, startX, startY; | ||
|  |     settings = settings || {}; | ||
|  |     var handleElement = doc.getElementById(settings.handle || id); | ||
|  |     start = function (e) { | ||
|  |       var docSize = getDocumentSize(doc); | ||
|  |       var handleElm, cursor; | ||
|  |       updateWithTouchData(e); | ||
|  |       e.preventDefault(); | ||
|  |       downButton = e.button; | ||
|  |       handleElm = handleElement; | ||
|  |       startX = e.screenX; | ||
|  |       startY = e.screenY; | ||
|  |       if (window.getComputedStyle) { | ||
|  |         cursor = window.getComputedStyle(handleElm, null).getPropertyValue('cursor'); | ||
|  |       } else { | ||
|  |         cursor = handleElm.runtimeStyle.cursor; | ||
|  |       } | ||
|  |       $eventOverlay = global$7('<div></div>').css({ | ||
|  |         position: 'absolute', | ||
|  |         top: 0, | ||
|  |         left: 0, | ||
|  |         width: docSize.width, | ||
|  |         height: docSize.height, | ||
|  |         zIndex: 2147483647, | ||
|  |         opacity: 0.0001, | ||
|  |         cursor: cursor | ||
|  |       }).appendTo(doc.body); | ||
|  |       global$7(doc).on('mousemove touchmove', drag).on('mouseup touchend', stop$$1); | ||
|  |       settings.start(e); | ||
|  |     }; | ||
|  |     drag = function (e) { | ||
|  |       updateWithTouchData(e); | ||
|  |       if (e.button !== downButton) { | ||
|  |         return stop$$1(e); | ||
|  |       } | ||
|  |       e.deltaX = e.screenX - startX; | ||
|  |       e.deltaY = e.screenY - startY; | ||
|  |       e.preventDefault(); | ||
|  |       settings.drag(e); | ||
|  |     }; | ||
|  |     stop$$1 = function (e) { | ||
|  |       updateWithTouchData(e); | ||
|  |       global$7(doc).off('mousemove touchmove', drag).off('mouseup touchend', stop$$1); | ||
|  |       $eventOverlay.remove(); | ||
|  |       if (settings.stop) { | ||
|  |         settings.stop(e); | ||
|  |       } | ||
|  |     }; | ||
|  |     this.destroy = function () { | ||
|  |       global$7(handleElement).off(); | ||
|  |     }; | ||
|  |     global$7(handleElement).on('mousedown touchstart', start); | ||
|  |   } | ||
|  | 
 | ||
|  |   var global$11 = tinymce.util.Tools.resolve('tinymce.ui.Factory'); | ||
|  | 
 | ||
|  |   var hasTabstopData = function (elm) { | ||
|  |     return elm.getAttribute('data-mce-tabstop') ? true : false; | ||
|  |   }; | ||
|  |   function KeyboardNavigation (settings) { | ||
|  |     var root = settings.root; | ||
|  |     var focusedElement, focusedControl; | ||
|  |     function isElement(node) { | ||
|  |       return node && node.nodeType === 1; | ||
|  |     } | ||
|  |     try { | ||
|  |       focusedElement = document.activeElement; | ||
|  |     } catch (ex) { | ||
|  |       focusedElement = document.body; | ||
|  |     } | ||
|  |     focusedControl = root.getParentCtrl(focusedElement); | ||
|  |     function getRole(elm) { | ||
|  |       elm = elm || focusedElement; | ||
|  |       if (isElement(elm)) { | ||
|  |         return elm.getAttribute('role'); | ||
|  |       } | ||
|  |       return null; | ||
|  |     } | ||
|  |     function getParentRole(elm) { | ||
|  |       var role, parent$$1 = elm || focusedElement; | ||
|  |       while (parent$$1 = parent$$1.parentNode) { | ||
|  |         if (role = getRole(parent$$1)) { | ||
|  |           return role; | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  |     function getAriaProp(name$$1) { | ||
|  |       var elm = focusedElement; | ||
|  |       if (isElement(elm)) { | ||
|  |         return elm.getAttribute('aria-' + name$$1); | ||
|  |       } | ||
|  |     } | ||
|  |     function isTextInputElement(elm) { | ||
|  |       var tagName = elm.tagName.toUpperCase(); | ||
|  |       return tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT'; | ||
|  |     } | ||
|  |     function canFocus(elm) { | ||
|  |       if (isTextInputElement(elm) && !elm.hidden) { | ||
|  |         return true; | ||
|  |       } | ||
|  |       if (hasTabstopData(elm)) { | ||
|  |         return true; | ||
|  |       } | ||
|  |       if (/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell|slider)$/.test(getRole(elm))) { | ||
|  |         return true; | ||
|  |       } | ||
|  |       return false; | ||
|  |     } | ||
|  |     function getFocusElements(elm) { | ||
|  |       var elements = []; | ||
|  |       function collect(elm) { | ||
|  |         if (elm.nodeType !== 1 || elm.style.display === 'none' || elm.disabled) { | ||
|  |           return; | ||
|  |         } | ||
|  |         if (canFocus(elm)) { | ||
|  |           elements.push(elm); | ||
|  |         } | ||
|  |         for (var i = 0; i < elm.childNodes.length; i++) { | ||
|  |           collect(elm.childNodes[i]); | ||
|  |         } | ||
|  |       } | ||
|  |       collect(elm || root.getEl()); | ||
|  |       return elements; | ||
|  |     } | ||
|  |     function getNavigationRoot(targetControl) { | ||
|  |       var navigationRoot, controls; | ||
|  |       targetControl = targetControl || focusedControl; | ||
|  |       controls = targetControl.parents().toArray(); | ||
|  |       controls.unshift(targetControl); | ||
|  |       for (var i = 0; i < controls.length; i++) { | ||
|  |         navigationRoot = controls[i]; | ||
|  |         if (navigationRoot.settings.ariaRoot) { | ||
|  |           break; | ||
|  |         } | ||
|  |       } | ||
|  |       return navigationRoot; | ||
|  |     } | ||
|  |     function focusFirst(targetControl) { | ||
|  |       var navigationRoot = getNavigationRoot(targetControl); | ||
|  |       var focusElements = getFocusElements(navigationRoot.getEl()); | ||
|  |       if (navigationRoot.settings.ariaRemember && 'lastAriaIndex' in navigationRoot) { | ||
|  |         moveFocusToIndex(navigationRoot.lastAriaIndex, focusElements); | ||
|  |       } else { | ||
|  |         moveFocusToIndex(0, focusElements); | ||
|  |       } | ||
|  |     } | ||
|  |     function moveFocusToIndex(idx, elements) { | ||
|  |       if (idx < 0) { | ||
|  |         idx = elements.length - 1; | ||
|  |       } else if (idx >= elements.length) { | ||
|  |         idx = 0; | ||
|  |       } | ||
|  |       if (elements[idx]) { | ||
|  |         elements[idx].focus(); | ||
|  |       } | ||
|  |       return idx; | ||
|  |     } | ||
|  |     function moveFocus(dir, elements) { | ||
|  |       var idx = -1; | ||
|  |       var navigationRoot = getNavigationRoot(); | ||
|  |       elements = elements || getFocusElements(navigationRoot.getEl()); | ||
|  |       for (var i = 0; i < elements.length; i++) { | ||
|  |         if (elements[i] === focusedElement) { | ||
|  |           idx = i; | ||
|  |         } | ||
|  |       } | ||
|  |       idx += dir; | ||
|  |       navigationRoot.lastAriaIndex = moveFocusToIndex(idx, elements); | ||
|  |     } | ||
|  |     function left() { | ||
|  |       var parentRole = getParentRole(); | ||
|  |       if (parentRole === 'tablist') { | ||
|  |         moveFocus(-1, getFocusElements(focusedElement.parentNode)); | ||
|  |       } else if (focusedControl.parent().submenu) { | ||
|  |         cancel(); | ||
|  |       } else { | ||
|  |         moveFocus(-1); | ||
|  |       } | ||
|  |     } | ||
|  |     function right() { | ||
|  |       var role = getRole(), parentRole = getParentRole(); | ||
|  |       if (parentRole === 'tablist') { | ||
|  |         moveFocus(1, getFocusElements(focusedElement.parentNode)); | ||
|  |       } else if (role === 'menuitem' && parentRole === 'menu' && getAriaProp('haspopup')) { | ||
|  |         enter(); | ||
|  |       } else { | ||
|  |         moveFocus(1); | ||
|  |       } | ||
|  |     } | ||
|  |     function up() { | ||
|  |       moveFocus(-1); | ||
|  |     } | ||
|  |     function down() { | ||
|  |       var role = getRole(), parentRole = getParentRole(); | ||
|  |       if (role === 'menuitem' && parentRole === 'menubar') { | ||
|  |         enter(); | ||
|  |       } else if (role === 'button' && getAriaProp('haspopup')) { | ||
|  |         enter({ key: 'down' }); | ||
|  |       } else { | ||
|  |         moveFocus(1); | ||
|  |       } | ||
|  |     } | ||
|  |     function tab(e) { | ||
|  |       var parentRole = getParentRole(); | ||
|  |       if (parentRole === 'tablist') { | ||
|  |         var elm = getFocusElements(focusedControl.getEl('body'))[0]; | ||
|  |         if (elm) { | ||
|  |           elm.focus(); | ||
|  |         } | ||
|  |       } else { | ||
|  |         moveFocus(e.shiftKey ? -1 : 1); | ||
|  |       } | ||
|  |     } | ||
|  |     function cancel() { | ||
|  |       focusedControl.fire('cancel'); | ||
|  |     } | ||
|  |     function enter(aria) { | ||
|  |       aria = aria || {}; | ||
|  |       focusedControl.fire('click', { | ||
|  |         target: focusedElement, | ||
|  |         aria: aria | ||
|  |       }); | ||
|  |     } | ||
|  |     root.on('keydown', function (e) { | ||
|  |       function handleNonTabOrEscEvent(e, handler) { | ||
|  |         if (isTextInputElement(focusedElement) || hasTabstopData(focusedElement)) { | ||
|  |           return; | ||
|  |         } | ||
|  |         if (getRole(focusedElement) === 'slider') { | ||
|  |           return; | ||
|  |         } | ||
|  |         if (handler(e) !== false) { | ||
|  |           e.preventDefault(); | ||
|  |         } | ||
|  |       } | ||
|  |       if (e.isDefaultPrevented()) { | ||
|  |         return; | ||
|  |       } | ||
|  |       switch (e.keyCode) { | ||
|  |       case 37: | ||
|  |         handleNonTabOrEscEvent(e, left); | ||
|  |         break; | ||
|  |       case 39: | ||
|  |         handleNonTabOrEscEvent(e, right); | ||
|  |         break; | ||
|  |       case 38: | ||
|  |         handleNonTabOrEscEvent(e, up); | ||
|  |         break; | ||
|  |       case 40: | ||
|  |         handleNonTabOrEscEvent(e, down); | ||
|  |         break; | ||
|  |       case 27: | ||
|  |         cancel(); | ||
|  |         break; | ||
|  |       case 14: | ||
|  |       case 13: | ||
|  |       case 32: | ||
|  |         handleNonTabOrEscEvent(e, enter); | ||
|  |         break; | ||
|  |       case 9: | ||
|  |         tab(e); | ||
|  |         e.preventDefault(); | ||
|  |         break; | ||
|  |       } | ||
|  |     }); | ||
|  |     root.on('focusin', function (e) { | ||
|  |       focusedElement = e.target; | ||
|  |       focusedControl = e.control; | ||
|  |     }); | ||
|  |     return { focusFirst: focusFirst }; | ||
|  |   } | ||
|  | 
 | ||
|  |   var selectorCache = {}; | ||
|  |   var Container = Control$1.extend({ | ||
|  |     init: function (settings) { | ||
|  |       var self = this; | ||
|  |       self._super(settings); | ||
|  |       settings = self.settings; | ||
|  |       if (settings.fixed) { | ||
|  |         self.state.set('fixed', true); | ||
|  |       } | ||
|  |       self._items = new Collection$2(); | ||
|  |       if (self.isRtl()) { | ||
|  |         self.classes.add('rtl'); | ||
|  |       } | ||
|  |       self.bodyClasses = new ClassList(function () { | ||
|  |         if (self.state.get('rendered')) { | ||
|  |           self.getEl('body').className = this.toString(); | ||
|  |         } | ||
|  |       }); | ||
|  |       self.bodyClasses.prefix = self.classPrefix; | ||
|  |       self.classes.add('container'); | ||
|  |       self.bodyClasses.add('container-body'); | ||
|  |       if (settings.containerCls) { | ||
|  |         self.classes.add(settings.containerCls); | ||
|  |       } | ||
|  |       self._layout = global$11.create((settings.layout || '') + 'layout'); | ||
|  |       if (self.settings.items) { | ||
|  |         self.add(self.settings.items); | ||
|  |       } else { | ||
|  |         self.add(self.render()); | ||
|  |       } | ||
|  |       self._hasBody = true; | ||
|  |     }, | ||
|  |     items: function () { | ||
|  |       return this._items; | ||
|  |     }, | ||
|  |     find: function (selector) { | ||
|  |       selector = selectorCache[selector] = selectorCache[selector] || new Selector(selector); | ||
|  |       return selector.find(this); | ||
|  |     }, | ||
|  |     add: function (items) { | ||
|  |       var self = this; | ||
|  |       self.items().add(self.create(items)).parent(self); | ||
|  |       return self; | ||
|  |     }, | ||
|  |     focus: function (keyboard) { | ||
|  |       var self = this; | ||
|  |       var focusCtrl, keyboardNav, items; | ||
|  |       if (keyboard) { | ||
|  |         keyboardNav = self.keyboardNav || self.parents().eq(-1)[0].keyboardNav; | ||
|  |         if (keyboardNav) { | ||
|  |           keyboardNav.focusFirst(self); | ||
|  |           return; | ||
|  |         } | ||
|  |       } | ||
|  |       items = self.find('*'); | ||
|  |       if (self.statusbar) { | ||
|  |         items.add(self.statusbar.items()); | ||
|  |       } | ||
|  |       items.each(function (ctrl) { | ||
|  |         if (ctrl.settings.autofocus) { | ||
|  |           focusCtrl = null; | ||
|  |           return false; | ||
|  |         } | ||
|  |         if (ctrl.canFocus) { | ||
|  |           focusCtrl = focusCtrl || ctrl; | ||
|  |         } | ||
|  |       }); | ||
|  |       if (focusCtrl) { | ||
|  |         focusCtrl.focus(); | ||
|  |       } | ||
|  |       return self; | ||
|  |     }, | ||
|  |     replace: function (oldItem, newItem) { | ||
|  |       var ctrlElm; | ||
|  |       var items = this.items(); | ||
|  |       var i = items.length; | ||
|  |       while (i--) { | ||
|  |         if (items[i] === oldItem) { | ||
|  |           items[i] = newItem; | ||
|  |           break; | ||
|  |         } | ||
|  |       } | ||
|  |       if (i >= 0) { | ||
|  |         ctrlElm = newItem.getEl(); | ||
|  |         if (ctrlElm) { | ||
|  |           ctrlElm.parentNode.removeChild(ctrlElm); | ||
|  |         } | ||
|  |         ctrlElm = oldItem.getEl(); | ||
|  |         if (ctrlElm) { | ||
|  |           ctrlElm.parentNode.removeChild(ctrlElm); | ||
|  |         } | ||
|  |       } | ||
|  |       newItem.parent(this); | ||
|  |     }, | ||
|  |     create: function (items) { | ||
|  |       var self = this; | ||
|  |       var settings; | ||
|  |       var ctrlItems = []; | ||
|  |       if (!global$4.isArray(items)) { | ||
|  |         items = [items]; | ||
|  |       } | ||
|  |       global$4.each(items, function (item) { | ||
|  |         if (item) { | ||
|  |           if (!(item instanceof Control$1)) { | ||
|  |             if (typeof item === 'string') { | ||
|  |               item = { type: item }; | ||
|  |             } | ||
|  |             settings = global$4.extend({}, self.settings.defaults, item); | ||
|  |             item.type = settings.type = settings.type || item.type || self.settings.defaultType || (settings.defaults ? settings.defaults.type : null); | ||
|  |             item = global$11.create(settings); | ||
|  |           } | ||
|  |           ctrlItems.push(item); | ||
|  |         } | ||
|  |       }); | ||
|  |       return ctrlItems; | ||
|  |     }, | ||
|  |     renderNew: function () { | ||
|  |       var self = this; | ||
|  |       self.items().each(function (ctrl, index) { | ||
|  |         var containerElm; | ||
|  |         ctrl.parent(self); | ||
|  |         if (!ctrl.state.get('rendered')) { | ||
|  |           containerElm = self.getEl('body'); | ||
|  |           if (containerElm.hasChildNodes() && index <= containerElm.childNodes.length - 1) { | ||
|  |             global$7(containerElm.childNodes[index]).before(ctrl.renderHtml()); | ||
|  |           } else { | ||
|  |             global$7(containerElm).append(ctrl.renderHtml()); | ||
|  |           } | ||
|  |           ctrl.postRender(); | ||
|  |           $_cqjgb518wjjgwek2f.add(ctrl); | ||
|  |         } | ||
|  |       }); | ||
|  |       self._layout.applyClasses(self.items().filter(':visible')); | ||
|  |       self._lastRect = null; | ||
|  |       return self; | ||
|  |     }, | ||
|  |     append: function (items) { | ||
|  |       return this.add(items).renderNew(); | ||
|  |     }, | ||
|  |     prepend: function (items) { | ||
|  |       var self = this; | ||
|  |       self.items().set(self.create(items).concat(self.items().toArray())); | ||
|  |       return self.renderNew(); | ||
|  |     }, | ||
|  |     insert: function (items, index, before) { | ||
|  |       var self = this; | ||
|  |       var curItems, beforeItems, afterItems; | ||
|  |       items = self.create(items); | ||
|  |       curItems = self.items(); | ||
|  |       if (!before && index < curItems.length - 1) { | ||
|  |         index += 1; | ||
|  |       } | ||
|  |       if (index >= 0 && index < curItems.length) { | ||
|  |         beforeItems = curItems.slice(0, index).toArray(); | ||
|  |         afterItems = curItems.slice(index).toArray(); | ||
|  |         curItems.set(beforeItems.concat(items, afterItems)); | ||
|  |       } | ||
|  |       return self.renderNew(); | ||
|  |     }, | ||
|  |     fromJSON: function (data) { | ||
|  |       var self = this; | ||
|  |       for (var name in data) { | ||
|  |         self.find('#' + name).value(data[name]); | ||
|  |       } | ||
|  |       return self; | ||
|  |     }, | ||
|  |     toJSON: function () { | ||
|  |       var self = this, data = {}; | ||
|  |       self.find('*').each(function (ctrl) { | ||
|  |         var name = ctrl.name(), value = ctrl.value(); | ||
|  |         if (name && typeof value !== 'undefined') { | ||
|  |           data[name] = value; | ||
|  |         } | ||
|  |       }); | ||
|  |       return data; | ||
|  |     }, | ||
|  |     renderHtml: function () { | ||
|  |       var self = this, layout = self._layout, role = this.settings.role; | ||
|  |       self.preRender(); | ||
|  |       layout.preRender(self); | ||
|  |       return '<div id="' + self._id + '" class="' + self.classes + '"' + (role ? ' role="' + this.settings.role + '"' : '') + '>' + '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</div>'; | ||
|  |     }, | ||
|  |     postRender: function () { | ||
|  |       var self = this; | ||
|  |       var box; | ||
|  |       self.items().exec('postRender'); | ||
|  |       self._super(); | ||
|  |       self._layout.postRender(self); | ||
|  |       self.state.set('rendered', true); | ||
|  |       if (self.settings.style) { | ||
|  |         self.$el.css(self.settings.style); | ||
|  |       } | ||
|  |       if (self.settings.border) { | ||
|  |         box = self.borderBox; | ||
|  |         self.$el.css({ | ||
|  |           'border-top-width': box.top, | ||
|  |           'border-right-width': box.right, | ||
|  |           'border-bottom-width': box.bottom, | ||
|  |           'border-left-width': box.left | ||
|  |         }); | ||
|  |       } | ||
|  |       if (!self.parent()) { | ||
|  |         self.keyboardNav = KeyboardNavigation({ root: self }); | ||
|  |       } | ||
|  |       return self; | ||
|  |     }, | ||
|  |     initLayoutRect: function () { | ||
|  |       var self = this, layoutRect = self._super(); | ||
|  |       self._layout.recalc(self); | ||
|  |       return layoutRect; | ||
|  |     }, | ||
|  |     recalc: function () { | ||
|  |       var self = this; | ||
|  |       var rect = self._layoutRect; | ||
|  |       var lastRect = self._lastRect; | ||
|  |       if (!lastRect || lastRect.w !== rect.w || lastRect.h !== rect.h) { | ||
|  |         self._layout.recalc(self); | ||
|  |         rect = self.layoutRect(); | ||
|  |         self._lastRect = { | ||
|  |           x: rect.x, | ||
|  |           y: rect.y, | ||
|  |           w: rect.w, | ||
|  |           h: rect.h | ||
|  |         }; | ||
|  |         return true; | ||
|  |       } | ||
|  |     }, | ||
|  |     reflow: function () { | ||
|  |       var i; | ||
|  |       $_cqjgb518wjjgwek2f.remove(this); | ||
|  |       if (this.visible()) { | ||
|  |         Control$1.repaintControls = []; | ||
|  |         Control$1.repaintControls.map = {}; | ||
|  |         this.recalc(); | ||
|  |         i = Control$1.repaintControls.length; | ||
|  |         while (i--) { | ||
|  |           Control$1.repaintControls[i].repaint(); | ||
|  |         } | ||
|  |         if (this.settings.layout !== 'flow' && this.settings.layout !== 'stack') { | ||
|  |           this.repaint(); | ||
|  |         } | ||
|  |         Control$1.repaintControls = []; | ||
|  |       } | ||
|  |       return this; | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var $_8woeth19ajjgwek4b = { | ||
|  |     init: function () { | ||
|  |       var self = this; | ||
|  |       self.on('repaint', self.renderScroll); | ||
|  |     }, | ||
|  |     renderScroll: function () { | ||
|  |       var self = this, margin = 2; | ||
|  |       function repaintScroll() { | ||
|  |         var hasScrollH, hasScrollV, bodyElm; | ||
|  |         function repaintAxis(axisName, posName, sizeName, contentSizeName, hasScroll, ax) { | ||
|  |           var containerElm, scrollBarElm, scrollThumbElm; | ||
|  |           var containerSize, scrollSize, ratio, rect; | ||
|  |           var posNameLower, sizeNameLower; | ||
|  |           scrollBarElm = self.getEl('scroll' + axisName); | ||
|  |           if (scrollBarElm) { | ||
|  |             posNameLower = posName.toLowerCase(); | ||
|  |             sizeNameLower = sizeName.toLowerCase(); | ||
|  |             global$7(self.getEl('absend')).css(posNameLower, self.layoutRect()[contentSizeName] - 1); | ||
|  |             if (!hasScroll) { | ||
|  |               global$7(scrollBarElm).css('display', 'none'); | ||
|  |               return; | ||
|  |             } | ||
|  |             global$7(scrollBarElm).css('display', 'block'); | ||
|  |             containerElm = self.getEl('body'); | ||
|  |             scrollThumbElm = self.getEl('scroll' + axisName + 't'); | ||
|  |             containerSize = containerElm['client' + sizeName] - margin * 2; | ||
|  |             containerSize -= hasScrollH && hasScrollV ? scrollBarElm['client' + ax] : 0; | ||
|  |             scrollSize = containerElm['scroll' + sizeName]; | ||
|  |             ratio = containerSize / scrollSize; | ||
|  |             rect = {}; | ||
|  |             rect[posNameLower] = containerElm['offset' + posName] + margin; | ||
|  |             rect[sizeNameLower] = containerSize; | ||
|  |             global$7(scrollBarElm).css(rect); | ||
|  |             rect = {}; | ||
|  |             rect[posNameLower] = containerElm['scroll' + posName] * ratio; | ||
|  |             rect[sizeNameLower] = containerSize * ratio; | ||
|  |             global$7(scrollThumbElm).css(rect); | ||
|  |           } | ||
|  |         } | ||
|  |         bodyElm = self.getEl('body'); | ||
|  |         hasScrollH = bodyElm.scrollWidth > bodyElm.clientWidth; | ||
|  |         hasScrollV = bodyElm.scrollHeight > bodyElm.clientHeight; | ||
|  |         repaintAxis('h', 'Left', 'Width', 'contentW', hasScrollH, 'Height'); | ||
|  |         repaintAxis('v', 'Top', 'Height', 'contentH', hasScrollV, 'Width'); | ||
|  |       } | ||
|  |       function addScroll() { | ||
|  |         function addScrollAxis(axisName, posName, sizeName, deltaPosName, ax) { | ||
|  |           var scrollStart; | ||
|  |           var axisId = self._id + '-scroll' + axisName, prefix = self.classPrefix; | ||
|  |           global$7(self.getEl()).append('<div id="' + axisId + '" class="' + prefix + 'scrollbar ' + prefix + 'scrollbar-' + axisName + '">' + '<div id="' + axisId + 't" class="' + prefix + 'scrollbar-thumb"></div>' + '</div>'); | ||
|  |           self.draghelper = new DragHelper(axisId + 't', { | ||
|  |             start: function () { | ||
|  |               scrollStart = self.getEl('body')['scroll' + posName]; | ||
|  |               global$7('#' + axisId).addClass(prefix + 'active'); | ||
|  |             }, | ||
|  |             drag: function (e) { | ||
|  |               var ratio, hasScrollH, hasScrollV, containerSize; | ||
|  |               var layoutRect = self.layoutRect(); | ||
|  |               hasScrollH = layoutRect.contentW > layoutRect.innerW; | ||
|  |               hasScrollV = layoutRect.contentH > layoutRect.innerH; | ||
|  |               containerSize = self.getEl('body')['client' + sizeName] - margin * 2; | ||
|  |               containerSize -= hasScrollH && hasScrollV ? self.getEl('scroll' + axisName)['client' + ax] : 0; | ||
|  |               ratio = containerSize / self.getEl('body')['scroll' + sizeName]; | ||
|  |               self.getEl('body')['scroll' + posName] = scrollStart + e['delta' + deltaPosName] / ratio; | ||
|  |             }, | ||
|  |             stop: function () { | ||
|  |               global$7('#' + axisId).removeClass(prefix + 'active'); | ||
|  |             } | ||
|  |           }); | ||
|  |         } | ||
|  |         self.classes.add('scroll'); | ||
|  |         addScrollAxis('v', 'Top', 'Height', 'Y', 'Width'); | ||
|  |         addScrollAxis('h', 'Left', 'Width', 'X', 'Height'); | ||
|  |       } | ||
|  |       if (self.settings.autoScroll) { | ||
|  |         if (!self._hasScroll) { | ||
|  |           self._hasScroll = true; | ||
|  |           addScroll(); | ||
|  |           self.on('wheel', function (e) { | ||
|  |             var bodyEl = self.getEl('body'); | ||
|  |             bodyEl.scrollLeft += (e.deltaX || 0) * 10; | ||
|  |             bodyEl.scrollTop += e.deltaY * 10; | ||
|  |             repaintScroll(); | ||
|  |           }); | ||
|  |           global$7(self.getEl('body')).on('scroll', repaintScroll); | ||
|  |         } | ||
|  |         repaintScroll(); | ||
|  |       } | ||
|  |     } | ||
|  |   }; | ||
|  | 
 | ||
|  |   var Panel = Container.extend({ | ||
|  |     Defaults: { | ||
|  |       layout: 'fit', | ||
|  |       containerCls: 'panel' | ||
|  |     }, | ||
|  |     Mixins: [$_8woeth19ajjgwek4b], | ||
|  |     renderHtml: function () { | ||
|  |       var self = this; | ||
|  |       var layout = self._layout; | ||
|  |       var innerHtml = self.settings.html; | ||
|  |       self.preRender(); | ||
|  |       layout.preRender(self); | ||
|  |       if (typeof innerHtml === 'undefined') { | ||
|  |         innerHtml = '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + layout.renderHtml(self) + '</div>'; | ||
|  |       } else { | ||
|  |         if (typeof innerHtml === 'function') { | ||
|  |           innerHtml = innerHtml.call(self); | ||
|  |         } | ||
|  |         self._hasBody = false; | ||
|  |       } | ||
|  |       return '<div id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1" role="group">' + (self._preBodyHtml || '') + innerHtml + '</div>'; | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var $_20hy1119bjjgwek4f = { | ||
|  |     resizeToContent: function () { | ||
|  |       this._layoutRect.autoResize = true; | ||
|  |       this._lastRect = null; | ||
|  |       this.reflow(); | ||
|  |     }, | ||
|  |     resizeTo: function (w, h) { | ||
|  |       if (w <= 1 || h <= 1) { | ||
|  |         var rect = funcs.getWindowSize(); | ||
|  |         w = w <= 1 ? w * rect.w : w; | ||
|  |         h = h <= 1 ? h * rect.h : h; | ||
|  |       } | ||
|  |       this._layoutRect.autoResize = false; | ||
|  |       return this.layoutRect({ | ||
|  |         minW: w, | ||
|  |         minH: h, | ||
|  |         w: w, | ||
|  |         h: h | ||
|  |       }).reflow(); | ||
|  |     }, | ||
|  |     resizeBy: function (dw, dh) { | ||
|  |       var self = this, rect = self.layoutRect(); | ||
|  |       return self.resizeTo(rect.w + dw, rect.h + dh); | ||
|  |     } | ||
|  |   }; | ||
|  | 
 | ||
|  |   var documentClickHandler; | ||
|  |   var documentScrollHandler; | ||
|  |   var windowResizeHandler; | ||
|  |   var visiblePanels = []; | ||
|  |   var zOrder = []; | ||
|  |   var hasModal; | ||
|  |   function isChildOf(ctrl, parent$$1) { | ||
|  |     while (ctrl) { | ||
|  |       if (ctrl === parent$$1) { | ||
|  |         return true; | ||
|  |       } | ||
|  |       ctrl = ctrl.parent(); | ||
|  |     } | ||
|  |   } | ||
|  |   function skipOrHidePanels(e) { | ||
|  |     var i = visiblePanels.length; | ||
|  |     while (i--) { | ||
|  |       var panel = visiblePanels[i], clickCtrl = panel.getParentCtrl(e.target); | ||
|  |       if (panel.settings.autohide) { | ||
|  |         if (clickCtrl) { | ||
|  |           if (isChildOf(clickCtrl, panel) || panel.parent() === clickCtrl) { | ||
|  |             continue; | ||
|  |           } | ||
|  |         } | ||
|  |         e = panel.fire('autohide', { target: e.target }); | ||
|  |         if (!e.isDefaultPrevented()) { | ||
|  |           panel.hide(); | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  |   } | ||
|  |   function bindDocumentClickHandler() { | ||
|  |     if (!documentClickHandler) { | ||
|  |       documentClickHandler = function (e) { | ||
|  |         if (e.button === 2) { | ||
|  |           return; | ||
|  |         } | ||
|  |         skipOrHidePanels(e); | ||
|  |       }; | ||
|  |       global$7(document).on('click touchstart', documentClickHandler); | ||
|  |     } | ||
|  |   } | ||
|  |   function bindDocumentScrollHandler() { | ||
|  |     if (!documentScrollHandler) { | ||
|  |       documentScrollHandler = function () { | ||
|  |         var i; | ||
|  |         i = visiblePanels.length; | ||
|  |         while (i--) { | ||
|  |           repositionPanel$1(visiblePanels[i]); | ||
|  |         } | ||
|  |       }; | ||
|  |       global$7(window).on('scroll', documentScrollHandler); | ||
|  |     } | ||
|  |   } | ||
|  |   function bindWindowResizeHandler() { | ||
|  |     if (!windowResizeHandler) { | ||
|  |       var docElm_1 = document.documentElement; | ||
|  |       var clientWidth_1 = docElm_1.clientWidth, clientHeight_1 = docElm_1.clientHeight; | ||
|  |       windowResizeHandler = function () { | ||
|  |         if (!document.all || clientWidth_1 !== docElm_1.clientWidth || clientHeight_1 !== docElm_1.clientHeight) { | ||
|  |           clientWidth_1 = docElm_1.clientWidth; | ||
|  |           clientHeight_1 = docElm_1.clientHeight; | ||
|  |           FloatPanel.hideAll(); | ||
|  |         } | ||
|  |       }; | ||
|  |       global$7(window).on('resize', windowResizeHandler); | ||
|  |     } | ||
|  |   } | ||
|  |   function repositionPanel$1(panel) { | ||
|  |     var scrollY$$1 = funcs.getViewPort().y; | ||
|  |     function toggleFixedChildPanels(fixed, deltaY) { | ||
|  |       var parent$$1; | ||
|  |       for (var i = 0; i < visiblePanels.length; i++) { | ||
|  |         if (visiblePanels[i] !== panel) { | ||
|  |           parent$$1 = visiblePanels[i].parent(); | ||
|  |           while (parent$$1 && (parent$$1 = parent$$1.parent())) { | ||
|  |             if (parent$$1 === panel) { | ||
|  |               visiblePanels[i].fixed(fixed).moveBy(0, deltaY).repaint(); | ||
|  |             } | ||
|  |           } | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  |     if (panel.settings.autofix) { | ||
|  |       if (!panel.state.get('fixed')) { | ||
|  |         panel._autoFixY = panel.layoutRect().y; | ||
|  |         if (panel._autoFixY < scrollY$$1) { | ||
|  |           panel.fixed(true).layoutRect({ y: 0 }).repaint(); | ||
|  |           toggleFixedChildPanels(true, scrollY$$1 - panel._autoFixY); | ||
|  |         } | ||
|  |       } else { | ||
|  |         if (panel._autoFixY > scrollY$$1) { | ||
|  |           panel.fixed(false).layoutRect({ y: panel._autoFixY }).repaint(); | ||
|  |           toggleFixedChildPanels(false, panel._autoFixY - scrollY$$1); | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  |   } | ||
|  |   function addRemove(add, ctrl) { | ||
|  |     var i, zIndex = FloatPanel.zIndex || 65535, topModal; | ||
|  |     if (add) { | ||
|  |       zOrder.push(ctrl); | ||
|  |     } else { | ||
|  |       i = zOrder.length; | ||
|  |       while (i--) { | ||
|  |         if (zOrder[i] === ctrl) { | ||
|  |           zOrder.splice(i, 1); | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  |     if (zOrder.length) { | ||
|  |       for (i = 0; i < zOrder.length; i++) { | ||
|  |         if (zOrder[i].modal) { | ||
|  |           zIndex++; | ||
|  |           topModal = zOrder[i]; | ||
|  |         } | ||
|  |         zOrder[i].getEl().style.zIndex = zIndex; | ||
|  |         zOrder[i].zIndex = zIndex; | ||
|  |         zIndex++; | ||
|  |       } | ||
|  |     } | ||
|  |     var modalBlockEl = global$7('#' + ctrl.classPrefix + 'modal-block', ctrl.getContainerElm())[0]; | ||
|  |     if (topModal) { | ||
|  |       global$7(modalBlockEl).css('z-index', topModal.zIndex - 1); | ||
|  |     } else if (modalBlockEl) { | ||
|  |       modalBlockEl.parentNode.removeChild(modalBlockEl); | ||
|  |       hasModal = false; | ||
|  |     } | ||
|  |     FloatPanel.currentZIndex = zIndex; | ||
|  |   } | ||
|  |   var FloatPanel = Panel.extend({ | ||
|  |     Mixins: [ | ||
|  |       $_8zu82i18yjjgwek2l, | ||
|  |       $_20hy1119bjjgwek4f | ||
|  |     ], | ||
|  |     init: function (settings) { | ||
|  |       var self$$1 = this; | ||
|  |       self$$1._super(settings); | ||
|  |       self$$1._eventsRoot = self$$1; | ||
|  |       self$$1.classes.add('floatpanel'); | ||
|  |       if (settings.autohide) { | ||
|  |         bindDocumentClickHandler(); | ||
|  |         bindWindowResizeHandler(); | ||
|  |         visiblePanels.push(self$$1); | ||
|  |       } | ||
|  |       if (settings.autofix) { | ||
|  |         bindDocumentScrollHandler(); | ||
|  |         self$$1.on('move', function () { | ||
|  |           repositionPanel$1(this); | ||
|  |         }); | ||
|  |       } | ||
|  |       self$$1.on('postrender show', function (e) { | ||
|  |         if (e.control === self$$1) { | ||
|  |           var $modalBlockEl_1; | ||
|  |           var prefix_1 = self$$1.classPrefix; | ||
|  |           if (self$$1.modal && !hasModal) { | ||
|  |             $modalBlockEl_1 = global$7('#' + prefix_1 + 'modal-block', self$$1.getContainerElm()); | ||
|  |             if (!$modalBlockEl_1[0]) { | ||
|  |               $modalBlockEl_1 = global$7('<div id="' + prefix_1 + 'modal-block" class="' + prefix_1 + 'reset ' + prefix_1 + 'fade"></div>').appendTo(self$$1.getContainerElm()); | ||
|  |             } | ||
|  |             global$3.setTimeout(function () { | ||
|  |               $modalBlockEl_1.addClass(prefix_1 + 'in'); | ||
|  |               global$7(self$$1.getEl()).addClass(prefix_1 + 'in'); | ||
|  |             }); | ||
|  |             hasModal = true; | ||
|  |           } | ||
|  |           addRemove(true, self$$1); | ||
|  |         } | ||
|  |       }); | ||
|  |       self$$1.on('show', function () { | ||
|  |         self$$1.parents().each(function (ctrl) { | ||
|  |           if (ctrl.state.get('fixed')) { | ||
|  |             self$$1.fixed(true); | ||
|  |             return false; | ||
|  |           } | ||
|  |         }); | ||
|  |       }); | ||
|  |       if (settings.popover) { | ||
|  |         self$$1._preBodyHtml = '<div class="' + self$$1.classPrefix + 'arrow"></div>'; | ||
|  |         self$$1.classes.add('popover').add('bottom').add(self$$1.isRtl() ? 'end' : 'start'); | ||
|  |       } | ||
|  |       self$$1.aria('label', settings.ariaLabel); | ||
|  |       self$$1.aria('labelledby', self$$1._id); | ||
|  |       self$$1.aria('describedby', self$$1.describedBy || self$$1._id + '-none'); | ||
|  |     }, | ||
|  |     fixed: function (state) { | ||
|  |       var self$$1 = this; | ||
|  |       if (self$$1.state.get('fixed') !== state) { | ||
|  |         if (self$$1.state.get('rendered')) { | ||
|  |           var viewport = funcs.getViewPort(); | ||
|  |           if (state) { | ||
|  |             self$$1.layoutRect().y -= viewport.y; | ||
|  |           } else { | ||
|  |             self$$1.layoutRect().y += viewport.y; | ||
|  |           } | ||
|  |         } | ||
|  |         self$$1.classes.toggle('fixed', state); | ||
|  |         self$$1.state.set('fixed', state); | ||
|  |       } | ||
|  |       return self$$1; | ||
|  |     }, | ||
|  |     show: function () { | ||
|  |       var self$$1 = this; | ||
|  |       var i; | ||
|  |       var state = self$$1._super(); | ||
|  |       i = visiblePanels.length; | ||
|  |       while (i--) { | ||
|  |         if (visiblePanels[i] === self$$1) { | ||
|  |           break; | ||
|  |         } | ||
|  |       } | ||
|  |       if (i === -1) { | ||
|  |         visiblePanels.push(self$$1); | ||
|  |       } | ||
|  |       return state; | ||
|  |     }, | ||
|  |     hide: function () { | ||
|  |       removeVisiblePanel(this); | ||
|  |       addRemove(false, this); | ||
|  |       return this._super(); | ||
|  |     }, | ||
|  |     hideAll: function () { | ||
|  |       FloatPanel.hideAll(); | ||
|  |     }, | ||
|  |     close: function () { | ||
|  |       var self$$1 = this; | ||
|  |       if (!self$$1.fire('close').isDefaultPrevented()) { | ||
|  |         self$$1.remove(); | ||
|  |         addRemove(false, self$$1); | ||
|  |       } | ||
|  |       return self$$1; | ||
|  |     }, | ||
|  |     remove: function () { | ||
|  |       removeVisiblePanel(this); | ||
|  |       this._super(); | ||
|  |     }, | ||
|  |     postRender: function () { | ||
|  |       var self$$1 = this; | ||
|  |       if (self$$1.settings.bodyRole) { | ||
|  |         this.getEl('body').setAttribute('role', self$$1.settings.bodyRole); | ||
|  |       } | ||
|  |       return self$$1._super(); | ||
|  |     } | ||
|  |   }); | ||
|  |   FloatPanel.hideAll = function () { | ||
|  |     var i = visiblePanels.length; | ||
|  |     while (i--) { | ||
|  |       var panel = visiblePanels[i]; | ||
|  |       if (panel && panel.settings.autohide) { | ||
|  |         panel.hide(); | ||
|  |         visiblePanels.splice(i, 1); | ||
|  |       } | ||
|  |     } | ||
|  |   }; | ||
|  |   function removeVisiblePanel(panel) { | ||
|  |     var i; | ||
|  |     i = visiblePanels.length; | ||
|  |     while (i--) { | ||
|  |       if (visiblePanels[i] === panel) { | ||
|  |         visiblePanels.splice(i, 1); | ||
|  |       } | ||
|  |     } | ||
|  |     i = zOrder.length; | ||
|  |     while (i--) { | ||
|  |       if (zOrder[i] === panel) { | ||
|  |         zOrder.splice(i, 1); | ||
|  |       } | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   var windows = []; | ||
|  |   var oldMetaValue = ''; | ||
|  |   function toggleFullScreenState(state) { | ||
|  |     var noScaleMetaValue = 'width=device-width,initial-scale=1.0,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0'; | ||
|  |     var viewport = global$7('meta[name=viewport]')[0], contentValue; | ||
|  |     if (global$1.overrideViewPort === false) { | ||
|  |       return; | ||
|  |     } | ||
|  |     if (!viewport) { | ||
|  |       viewport = document.createElement('meta'); | ||
|  |       viewport.setAttribute('name', 'viewport'); | ||
|  |       document.getElementsByTagName('head')[0].appendChild(viewport); | ||
|  |     } | ||
|  |     contentValue = viewport.getAttribute('content'); | ||
|  |     if (contentValue && typeof oldMetaValue !== 'undefined') { | ||
|  |       oldMetaValue = contentValue; | ||
|  |     } | ||
|  |     viewport.setAttribute('content', state ? noScaleMetaValue : oldMetaValue); | ||
|  |   } | ||
|  |   function toggleBodyFullScreenClasses(classPrefix, state) { | ||
|  |     if (checkFullscreenWindows() && state === false) { | ||
|  |       global$7([ | ||
|  |         document.documentElement, | ||
|  |         document.body | ||
|  |       ]).removeClass(classPrefix + 'fullscreen'); | ||
|  |     } | ||
|  |   } | ||
|  |   function checkFullscreenWindows() { | ||
|  |     for (var i = 0; i < windows.length; i++) { | ||
|  |       if (windows[i]._fullscreen) { | ||
|  |         return true; | ||
|  |       } | ||
|  |     } | ||
|  |     return false; | ||
|  |   } | ||
|  |   function handleWindowResize() { | ||
|  |     if (!global$1.desktop) { | ||
|  |       var lastSize_1 = { | ||
|  |         w: window.innerWidth, | ||
|  |         h: window.innerHeight | ||
|  |       }; | ||
|  |       global$3.setInterval(function () { | ||
|  |         var w = window.innerWidth, h = window.innerHeight; | ||
|  |         if (lastSize_1.w !== w || lastSize_1.h !== h) { | ||
|  |           lastSize_1 = { | ||
|  |             w: w, | ||
|  |             h: h | ||
|  |           }; | ||
|  |           global$7(window).trigger('resize'); | ||
|  |         } | ||
|  |       }, 100); | ||
|  |     } | ||
|  |     function reposition() { | ||
|  |       var i; | ||
|  |       var rect = funcs.getWindowSize(); | ||
|  |       var layoutRect; | ||
|  |       for (i = 0; i < windows.length; i++) { | ||
|  |         layoutRect = windows[i].layoutRect(); | ||
|  |         windows[i].moveTo(windows[i].settings.x || Math.max(0, rect.w / 2 - layoutRect.w / 2), windows[i].settings.y || Math.max(0, rect.h / 2 - layoutRect.h / 2)); | ||
|  |       } | ||
|  |     } | ||
|  |     global$7(window).on('resize', reposition); | ||
|  |   } | ||
|  |   var Window$$1 = FloatPanel.extend({ | ||
|  |     modal: true, | ||
|  |     Defaults: { | ||
|  |       border: 1, | ||
|  |       layout: 'flex', | ||
|  |       containerCls: 'panel', | ||
|  |       role: 'dialog', | ||
|  |       callbacks: { | ||
|  |         submit: function () { | ||
|  |           this.fire('submit', { data: this.toJSON() }); | ||
|  |         }, | ||
|  |         close: function () { | ||
|  |           this.close(); | ||
|  |         } | ||
|  |       } | ||
|  |     }, | ||
|  |     init: function (settings) { | ||
|  |       var self$$1 = this; | ||
|  |       self$$1._super(settings); | ||
|  |       if (self$$1.isRtl()) { | ||
|  |         self$$1.classes.add('rtl'); | ||
|  |       } | ||
|  |       self$$1.classes.add('window'); | ||
|  |       self$$1.bodyClasses.add('window-body'); | ||
|  |       self$$1.state.set('fixed', true); | ||
|  |       if (settings.buttons) { | ||
|  |         self$$1.statusbar = new Panel({ | ||
|  |           layout: 'flex', | ||
|  |           border: '1 0 0 0', | ||
|  |           spacing: 3, | ||
|  |           padding: 10, | ||
|  |           align: 'center', | ||
|  |           pack: self$$1.isRtl() ? 'start' : 'end', | ||
|  |           defaults: { type: 'button' }, | ||
|  |           items: settings.buttons | ||
|  |         }); | ||
|  |         self$$1.statusbar.classes.add('foot'); | ||
|  |         self$$1.statusbar.parent(self$$1); | ||
|  |       } | ||
|  |       self$$1.on('click', function (e) { | ||
|  |         var closeClass = self$$1.classPrefix + 'close'; | ||
|  |         if (funcs.hasClass(e.target, closeClass) || funcs.hasClass(e.target.parentNode, closeClass)) { | ||
|  |           self$$1.close(); | ||
|  |         } | ||
|  |       }); | ||
|  |       self$$1.on('cancel', function () { | ||
|  |         self$$1.close(); | ||
|  |       }); | ||
|  |       self$$1.on('move', function (e) { | ||
|  |         if (e.control === self$$1) { | ||
|  |           FloatPanel.hideAll(); | ||
|  |         } | ||
|  |       }); | ||
|  |       self$$1.aria('describedby', self$$1.describedBy || self$$1._id + '-none'); | ||
|  |       self$$1.aria('label', settings.title); | ||
|  |       self$$1._fullscreen = false; | ||
|  |     }, | ||
|  |     recalc: function () { | ||
|  |       var self$$1 = this; | ||
|  |       var statusbar$$1 = self$$1.statusbar; | ||
|  |       var layoutRect, width, x, needsRecalc; | ||
|  |       if (self$$1._fullscreen) { | ||
|  |         self$$1.layoutRect(funcs.getWindowSize()); | ||
|  |         self$$1.layoutRect().contentH = self$$1.layoutRect().innerH; | ||
|  |       } | ||
|  |       self$$1._super(); | ||
|  |       layoutRect = self$$1.layoutRect(); | ||
|  |       if (self$$1.settings.title && !self$$1._fullscreen) { | ||
|  |         width = layoutRect.headerW; | ||
|  |         if (width > layoutRect.w) { | ||
|  |           x = layoutRect.x - Math.max(0, width / 2); | ||
|  |           self$$1.layoutRect({ | ||
|  |             w: width, | ||
|  |             x: x | ||
|  |           }); | ||
|  |           needsRecalc = true; | ||
|  |         } | ||
|  |       } | ||
|  |       if (statusbar$$1) { | ||
|  |         statusbar$$1.layoutRect({ w: self$$1.layoutRect().innerW }).recalc(); | ||
|  |         width = statusbar$$1.layoutRect().minW + layoutRect.deltaW; | ||
|  |         if (width > layoutRect.w) { | ||
|  |           x = layoutRect.x - Math.max(0, width - layoutRect.w); | ||
|  |           self$$1.layoutRect({ | ||
|  |             w: width, | ||
|  |             x: x | ||
|  |           }); | ||
|  |           needsRecalc = true; | ||
|  |         } | ||
|  |       } | ||
|  |       if (needsRecalc) { | ||
|  |         self$$1.recalc(); | ||
|  |       } | ||
|  |     }, | ||
|  |     initLayoutRect: function () { | ||
|  |       var self$$1 = this; | ||
|  |       var layoutRect = self$$1._super(); | ||
|  |       var deltaH = 0, headEl; | ||
|  |       if (self$$1.settings.title && !self$$1._fullscreen) { | ||
|  |         headEl = self$$1.getEl('head'); | ||
|  |         var size = funcs.getSize(headEl); | ||
|  |         layoutRect.headerW = size.width; | ||
|  |         layoutRect.headerH = size.height; | ||
|  |         deltaH += layoutRect.headerH; | ||
|  |       } | ||
|  |       if (self$$1.statusbar) { | ||
|  |         deltaH += self$$1.statusbar.layoutRect().h; | ||
|  |       } | ||
|  |       layoutRect.deltaH += deltaH; | ||
|  |       layoutRect.minH += deltaH; | ||
|  |       layoutRect.h += deltaH; | ||
|  |       var rect = funcs.getWindowSize(); | ||
|  |       layoutRect.x = self$$1.settings.x || Math.max(0, rect.w / 2 - layoutRect.w / 2); | ||
|  |       layoutRect.y = self$$1.settings.y || Math.max(0, rect.h / 2 - layoutRect.h / 2); | ||
|  |       return layoutRect; | ||
|  |     }, | ||
|  |     renderHtml: function () { | ||
|  |       var self$$1 = this, layout = self$$1._layout, id = self$$1._id, prefix = self$$1.classPrefix; | ||
|  |       var settings = self$$1.settings; | ||
|  |       var headerHtml = '', footerHtml = '', html = settings.html; | ||
|  |       self$$1.preRender(); | ||
|  |       layout.preRender(self$$1); | ||
|  |       if (settings.title) { | ||
|  |         headerHtml = '<div id="' + id + '-head" class="' + prefix + 'window-head">' + '<div id="' + id + '-title" class="' + prefix + 'title">' + self$$1.encode(settings.title) + '</div>' + '<div id="' + id + '-dragh" class="' + prefix + 'dragh"></div>' + '<button type="button" class="' + prefix + 'close" aria-hidden="true">' + '<i class="mce-ico mce-i-remove"></i>' + '</button>' + '</div>'; | ||
|  |       } | ||
|  |       if (settings.url) { | ||
|  |         html = '<iframe src="' + settings.url + '" tabindex="-1"></iframe>'; | ||
|  |       } | ||
|  |       if (typeof html === 'undefined') { | ||
|  |         html = layout.renderHtml(self$$1); | ||
|  |       } | ||
|  |       if (self$$1.statusbar) { | ||
|  |         footerHtml = self$$1.statusbar.renderHtml(); | ||
|  |       } | ||
|  |       return '<div id="' + id + '" class="' + self$$1.classes + '" hidefocus="1">' + '<div class="' + self$$1.classPrefix + 'reset" role="application">' + headerHtml + '<div id="' + id + '-body" class="' + self$$1.bodyClasses + '">' + html + '</div>' + footerHtml + '</div>' + '</div>'; | ||
|  |     }, | ||
|  |     fullscreen: function (state) { | ||
|  |       var self$$1 = this; | ||
|  |       var documentElement = document.documentElement; | ||
|  |       var slowRendering; | ||
|  |       var prefix = self$$1.classPrefix; | ||
|  |       var layoutRect; | ||
|  |       if (state !== self$$1._fullscreen) { | ||
|  |         global$7(window).on('resize', function () { | ||
|  |           var time; | ||
|  |           if (self$$1._fullscreen) { | ||
|  |             if (!slowRendering) { | ||
|  |               time = new Date().getTime(); | ||
|  |               var rect = funcs.getWindowSize(); | ||
|  |               self$$1.moveTo(0, 0).resizeTo(rect.w, rect.h); | ||
|  |               if (new Date().getTime() - time > 50) { | ||
|  |                 slowRendering = true; | ||
|  |               } | ||
|  |             } else { | ||
|  |               if (!self$$1._timer) { | ||
|  |                 self$$1._timer = global$3.setTimeout(function () { | ||
|  |                   var rect = funcs.getWindowSize(); | ||
|  |                   self$$1.moveTo(0, 0).resizeTo(rect.w, rect.h); | ||
|  |                   self$$1._timer = 0; | ||
|  |                 }, 50); | ||
|  |               } | ||
|  |             } | ||
|  |           } | ||
|  |         }); | ||
|  |         layoutRect = self$$1.layoutRect(); | ||
|  |         self$$1._fullscreen = state; | ||
|  |         if (!state) { | ||
|  |           self$$1.borderBox = $_4kbuyt18pjjgwek1w.parseBox(self$$1.settings.border); | ||
|  |           self$$1.getEl('head').style.display = ''; | ||
|  |           layoutRect.deltaH += layoutRect.headerH; | ||
|  |           global$7([ | ||
|  |             documentElement, | ||
|  |             document.body | ||
|  |           ]).removeClass(prefix + 'fullscreen'); | ||
|  |           self$$1.classes.remove('fullscreen'); | ||
|  |           self$$1.moveTo(self$$1._initial.x, self$$1._initial.y).resizeTo(self$$1._initial.w, self$$1._initial.h); | ||
|  |         } else { | ||
|  |           self$$1._initial = { | ||
|  |             x: layoutRect.x, | ||
|  |             y: layoutRect.y, | ||
|  |             w: layoutRect.w, | ||
|  |             h: layoutRect.h | ||
|  |           }; | ||
|  |           self$$1.borderBox = $_4kbuyt18pjjgwek1w.parseBox('0'); | ||
|  |           self$$1.getEl('head').style.display = 'none'; | ||
|  |           layoutRect.deltaH -= layoutRect.headerH + 2; | ||
|  |           global$7([ | ||
|  |             documentElement, | ||
|  |             document.body | ||
|  |           ]).addClass(prefix + 'fullscreen'); | ||
|  |           self$$1.classes.add('fullscreen'); | ||
|  |           var rect = funcs.getWindowSize(); | ||
|  |           self$$1.moveTo(0, 0).resizeTo(rect.w, rect.h); | ||
|  |         } | ||
|  |       } | ||
|  |       return self$$1.reflow(); | ||
|  |     }, | ||
|  |     postRender: function () { | ||
|  |       var self$$1 = this; | ||
|  |       var startPos; | ||
|  |       setTimeout(function () { | ||
|  |         self$$1.classes.add('in'); | ||
|  |         self$$1.fire('open'); | ||
|  |       }, 0); | ||
|  |       self$$1._super(); | ||
|  |       if (self$$1.statusbar) { | ||
|  |         self$$1.statusbar.postRender(); | ||
|  |       } | ||
|  |       self$$1.focus(); | ||
|  |       this.dragHelper = new DragHelper(self$$1._id + '-dragh', { | ||
|  |         start: function () { | ||
|  |           startPos = { | ||
|  |             x: self$$1.layoutRect().x, | ||
|  |             y: self$$1.layoutRect().y | ||
|  |           }; | ||
|  |         }, | ||
|  |         drag: function (e) { | ||
|  |           self$$1.moveTo(startPos.x + e.deltaX, startPos.y + e.deltaY); | ||
|  |         } | ||
|  |       }); | ||
|  |       self$$1.on('submit', function (e) { | ||
|  |         if (!e.isDefaultPrevented()) { | ||
|  |           self$$1.close(); | ||
|  |         } | ||
|  |       }); | ||
|  |       windows.push(self$$1); | ||
|  |       toggleFullScreenState(true); | ||
|  |     }, | ||
|  |     submit: function () { | ||
|  |       return this.fire('submit', { data: this.toJSON() }); | ||
|  |     }, | ||
|  |     remove: function () { | ||
|  |       var self$$1 = this; | ||
|  |       var i; | ||
|  |       self$$1.dragHelper.destroy(); | ||
|  |       self$$1._super(); | ||
|  |       if (self$$1.statusbar) { | ||
|  |         this.statusbar.remove(); | ||
|  |       } | ||
|  |       toggleBodyFullScreenClasses(self$$1.classPrefix, false); | ||
|  |       i = windows.length; | ||
|  |       while (i--) { | ||
|  |         if (windows[i] === self$$1) { | ||
|  |           windows.splice(i, 1); | ||
|  |         } | ||
|  |       } | ||
|  |       toggleFullScreenState(windows.length > 0); | ||
|  |     }, | ||
|  |     getContentWindow: function () { | ||
|  |       var ifr = this.getEl().getElementsByTagName('iframe')[0]; | ||
|  |       return ifr ? ifr.contentWindow : null; | ||
|  |     } | ||
|  |   }); | ||
|  |   handleWindowResize(); | ||
|  | 
 | ||
|  |   var MessageBox = Window$$1.extend({ | ||
|  |     init: function (settings) { | ||
|  |       settings = { | ||
|  |         border: 1, | ||
|  |         padding: 20, | ||
|  |         layout: 'flex', | ||
|  |         pack: 'center', | ||
|  |         align: 'center', | ||
|  |         containerCls: 'panel', | ||
|  |         autoScroll: true, | ||
|  |         buttons: { | ||
|  |           type: 'button', | ||
|  |           text: 'Ok', | ||
|  |           action: 'ok' | ||
|  |         }, | ||
|  |         items: { | ||
|  |           type: 'label', | ||
|  |           multiline: true, | ||
|  |           maxWidth: 500, | ||
|  |           maxHeight: 200 | ||
|  |         } | ||
|  |       }; | ||
|  |       this._super(settings); | ||
|  |     }, | ||
|  |     Statics: { | ||
|  |       OK: 1, | ||
|  |       OK_CANCEL: 2, | ||
|  |       YES_NO: 3, | ||
|  |       YES_NO_CANCEL: 4, | ||
|  |       msgBox: function (settings) { | ||
|  |         var buttons; | ||
|  |         var callback = settings.callback || function () { | ||
|  |         }; | ||
|  |         function createButton(text, status$$1, primary) { | ||
|  |           return { | ||
|  |             type: 'button', | ||
|  |             text: text, | ||
|  |             subtype: primary ? 'primary' : '', | ||
|  |             onClick: function (e) { | ||
|  |               e.control.parents()[1].close(); | ||
|  |               callback(status$$1); | ||
|  |             } | ||
|  |           }; | ||
|  |         } | ||
|  |         switch (settings.buttons) { | ||
|  |         case MessageBox.OK_CANCEL: | ||
|  |           buttons = [ | ||
|  |             createButton('Ok', true, true), | ||
|  |             createButton('Cancel', false) | ||
|  |           ]; | ||
|  |           break; | ||
|  |         case MessageBox.YES_NO: | ||
|  |         case MessageBox.YES_NO_CANCEL: | ||
|  |           buttons = [ | ||
|  |             createButton('Yes', 1, true), | ||
|  |             createButton('No', 0) | ||
|  |           ]; | ||
|  |           if (settings.buttons === MessageBox.YES_NO_CANCEL) { | ||
|  |             buttons.push(createButton('Cancel', -1)); | ||
|  |           } | ||
|  |           break; | ||
|  |         default: | ||
|  |           buttons = [createButton('Ok', true, true)]; | ||
|  |           break; | ||
|  |         } | ||
|  |         return new Window$$1({ | ||
|  |           padding: 20, | ||
|  |           x: settings.x, | ||
|  |           y: settings.y, | ||
|  |           minWidth: 300, | ||
|  |           minHeight: 100, | ||
|  |           layout: 'flex', | ||
|  |           pack: 'center', | ||
|  |           align: 'center', | ||
|  |           buttons: buttons, | ||
|  |           title: settings.title, | ||
|  |           role: 'alertdialog', | ||
|  |           items: { | ||
|  |             type: 'label', | ||
|  |             multiline: true, | ||
|  |             maxWidth: 500, | ||
|  |             maxHeight: 200, | ||
|  |             text: settings.text | ||
|  |           }, | ||
|  |           onPostRender: function () { | ||
|  |             this.aria('describedby', this.items()[0]._id); | ||
|  |           }, | ||
|  |           onClose: settings.onClose, | ||
|  |           onCancel: function () { | ||
|  |             callback(false); | ||
|  |           } | ||
|  |         }).renderTo(document.body).reflow(); | ||
|  |       }, | ||
|  |       alert: function (settings, callback) { | ||
|  |         if (typeof settings === 'string') { | ||
|  |           settings = { text: settings }; | ||
|  |         } | ||
|  |         settings.callback = callback; | ||
|  |         return MessageBox.msgBox(settings); | ||
|  |       }, | ||
|  |       confirm: function (settings, callback) { | ||
|  |         if (typeof settings === 'string') { | ||
|  |           settings = { text: settings }; | ||
|  |         } | ||
|  |         settings.callback = callback; | ||
|  |         settings.buttons = MessageBox.OK_CANCEL; | ||
|  |         return MessageBox.msgBox(settings); | ||
|  |       } | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   function WindowManagerImpl (editor) { | ||
|  |     var open$$1 = function (args, params, closeCallback) { | ||
|  |       var win; | ||
|  |       args.title = args.title || ' '; | ||
|  |       args.url = args.url || args.file; | ||
|  |       if (args.url) { | ||
|  |         args.width = parseInt(args.width || 320, 10); | ||
|  |         args.height = parseInt(args.height || 240, 10); | ||
|  |       } | ||
|  |       if (args.body) { | ||
|  |         args.items = { | ||
|  |           defaults: args.defaults, | ||
|  |           type: args.bodyType || 'form', | ||
|  |           items: args.body, | ||
|  |           data: args.data, | ||
|  |           callbacks: args.commands | ||
|  |         }; | ||
|  |       } | ||
|  |       if (!args.url && !args.buttons) { | ||
|  |         args.buttons = [ | ||
|  |           { | ||
|  |             text: 'Ok', | ||
|  |             subtype: 'primary', | ||
|  |             onclick: function () { | ||
|  |               win.find('form')[0].submit(); | ||
|  |             } | ||
|  |           }, | ||
|  |           { | ||
|  |             text: 'Cancel', | ||
|  |             onclick: function () { | ||
|  |               win.close(); | ||
|  |             } | ||
|  |           } | ||
|  |         ]; | ||
|  |       } | ||
|  |       win = new Window$$1(args); | ||
|  |       win.on('close', function () { | ||
|  |         closeCallback(win); | ||
|  |       }); | ||
|  |       if (args.data) { | ||
|  |         win.on('postRender', function () { | ||
|  |           this.find('*').each(function (ctrl) { | ||
|  |             var name$$1 = ctrl.name(); | ||
|  |             if (name$$1 in args.data) { | ||
|  |               ctrl.value(args.data[name$$1]); | ||
|  |             } | ||
|  |           }); | ||
|  |         }); | ||
|  |       } | ||
|  |       win.features = args || {}; | ||
|  |       win.params = params || {}; | ||
|  |       win = win.renderTo(document.body).reflow(); | ||
|  |       return win; | ||
|  |     }; | ||
|  |     var alert$$1 = function (message, choiceCallback, closeCallback) { | ||
|  |       var win; | ||
|  |       win = MessageBox.alert(message, function () { | ||
|  |         choiceCallback(); | ||
|  |       }); | ||
|  |       win.on('close', function () { | ||
|  |         closeCallback(win); | ||
|  |       }); | ||
|  |       return win; | ||
|  |     }; | ||
|  |     var confirm$$1 = function (message, choiceCallback, closeCallback) { | ||
|  |       var win; | ||
|  |       win = MessageBox.confirm(message, function (state) { | ||
|  |         choiceCallback(state); | ||
|  |       }); | ||
|  |       win.on('close', function () { | ||
|  |         closeCallback(win); | ||
|  |       }); | ||
|  |       return win; | ||
|  |     }; | ||
|  |     var close$$1 = function (window$$1) { | ||
|  |       window$$1.close(); | ||
|  |     }; | ||
|  |     var getParams = function (window$$1) { | ||
|  |       return window$$1.params; | ||
|  |     }; | ||
|  |     var setParams = function (window$$1, params) { | ||
|  |       window$$1.params = params; | ||
|  |     }; | ||
|  |     return { | ||
|  |       open: open$$1, | ||
|  |       alert: alert$$1, | ||
|  |       confirm: confirm$$1, | ||
|  |       close: close$$1, | ||
|  |       getParams: getParams, | ||
|  |       setParams: setParams | ||
|  |     }; | ||
|  |   } | ||
|  | 
 | ||
|  |   var get = function (editor, panel) { | ||
|  |     var renderUI = function () { | ||
|  |       return $_b0wxh217tjjgwejyx.renderUI(editor, panel); | ||
|  |     }; | ||
|  |     return { | ||
|  |       renderUI: renderUI, | ||
|  |       getNotificationManagerImpl: function () { | ||
|  |         return NotificationManagerImpl(editor); | ||
|  |       }, | ||
|  |       getWindowManagerImpl: function () { | ||
|  |         return WindowManagerImpl(editor); | ||
|  |       } | ||
|  |     }; | ||
|  |   }; | ||
|  |   var $_7y4x3k17sjjgwejyw = { get: get }; | ||
|  | 
 | ||
|  |   var Global = typeof window !== 'undefined' ? window : Function('return this;')(); | ||
|  | 
 | ||
|  |   var path = function (parts, scope) { | ||
|  |     var o = scope !== undefined && scope !== null ? scope : Global; | ||
|  |     for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) | ||
|  |       o = o[parts[i]]; | ||
|  |     return o; | ||
|  |   }; | ||
|  |   var resolve = function (p, scope) { | ||
|  |     var parts = p.split('.'); | ||
|  |     return path(parts, scope); | ||
|  |   }; | ||
|  | 
 | ||
|  |   var unsafe = function (name, scope) { | ||
|  |     return resolve(name, scope); | ||
|  |   }; | ||
|  |   var getOrDie = function (name, scope) { | ||
|  |     var actual = unsafe(name, scope); | ||
|  |     if (actual === undefined || actual === null) | ||
|  |       throw name + ' not available on this browser'; | ||
|  |     return actual; | ||
|  |   }; | ||
|  |   var $_8wnjhx19gjjgwek54 = { getOrDie: getOrDie }; | ||
|  | 
 | ||
|  |   function FileReader () { | ||
|  |     var f = $_8wnjhx19gjjgwek54.getOrDie('FileReader'); | ||
|  |     return new f(); | ||
|  |   } | ||
|  | 
 | ||
|  |   var global$12 = tinymce.util.Tools.resolve('tinymce.util.Promise'); | ||
|  | 
 | ||
|  |   var blobToBase64 = function (blob) { | ||
|  |     return new global$12(function (resolve) { | ||
|  |       var reader = new FileReader(); | ||
|  |       reader.onloadend = function () { | ||
|  |         resolve(reader.result.split(',')[1]); | ||
|  |       }; | ||
|  |       reader.readAsDataURL(blob); | ||
|  |     }); | ||
|  |   }; | ||
|  |   var $_c292419ejjgwek4z = { blobToBase64: blobToBase64 }; | ||
|  | 
 | ||
|  |   var pickFile = function () { | ||
|  |     return new global$12(function (resolve) { | ||
|  |       var fileInput; | ||
|  |       fileInput = document.createElement('input'); | ||
|  |       fileInput.type = 'file'; | ||
|  |       fileInput.style.position = 'fixed'; | ||
|  |       fileInput.style.left = 0; | ||
|  |       fileInput.style.top = 0; | ||
|  |       fileInput.style.opacity = 0.001; | ||
|  |       document.body.appendChild(fileInput); | ||
|  |       fileInput.onchange = function (e) { | ||
|  |         resolve(Array.prototype.slice.call(e.target.files)); | ||
|  |       }; | ||
|  |       fileInput.click(); | ||
|  |       fileInput.parentNode.removeChild(fileInput); | ||
|  |     }); | ||
|  |   }; | ||
|  |   var $_edjfwb19kjjgwek5a = { pickFile: pickFile }; | ||
|  | 
 | ||
|  |   var count$1 = 0; | ||
|  |   var seed = function () { | ||
|  |     var rnd = function () { | ||
|  |       return Math.round(Math.random() * 4294967295).toString(36); | ||
|  |     }; | ||
|  |     return 's' + Date.now().toString(36) + rnd() + rnd() + rnd(); | ||
|  |   }; | ||
|  |   var uuid = function (prefix) { | ||
|  |     return prefix + count$1++ + seed(); | ||
|  |   }; | ||
|  |   var $_49gxzf19mjjgwek5f = { uuid: uuid }; | ||
|  | 
 | ||
|  |   var create$1 = function (dom, rng) { | ||
|  |     var bookmark = {}; | ||
|  |     function setupEndPoint(start) { | ||
|  |       var offsetNode, container, offset; | ||
|  |       container = rng[start ? 'startContainer' : 'endContainer']; | ||
|  |       offset = rng[start ? 'startOffset' : 'endOffset']; | ||
|  |       if (container.nodeType === 1) { | ||
|  |         offsetNode = dom.create('span', { 'data-mce-type': 'bookmark' }); | ||
|  |         if (container.hasChildNodes()) { | ||
|  |           offset = Math.min(offset, container.childNodes.length - 1); | ||
|  |           if (start) { | ||
|  |             container.insertBefore(offsetNode, container.childNodes[offset]); | ||
|  |           } else { | ||
|  |             dom.insertAfter(offsetNode, container.childNodes[offset]); | ||
|  |           } | ||
|  |         } else { | ||
|  |           container.appendChild(offsetNode); | ||
|  |         } | ||
|  |         container = offsetNode; | ||
|  |         offset = 0; | ||
|  |       } | ||
|  |       bookmark[start ? 'startContainer' : 'endContainer'] = container; | ||
|  |       bookmark[start ? 'startOffset' : 'endOffset'] = offset; | ||
|  |     } | ||
|  |     setupEndPoint(true); | ||
|  |     if (!rng.collapsed) { | ||
|  |       setupEndPoint(); | ||
|  |     } | ||
|  |     return bookmark; | ||
|  |   }; | ||
|  |   var resolve$1 = function (dom, bookmark) { | ||
|  |     function restoreEndPoint(start) { | ||
|  |       var container, offset, node; | ||
|  |       function nodeIndex(container) { | ||
|  |         var node = container.parentNode.firstChild, idx = 0; | ||
|  |         while (node) { | ||
|  |           if (node === container) { | ||
|  |             return idx; | ||
|  |           } | ||
|  |           if (node.nodeType !== 1 || node.getAttribute('data-mce-type') !== 'bookmark') { | ||
|  |             idx++; | ||
|  |           } | ||
|  |           node = node.nextSibling; | ||
|  |         } | ||
|  |         return -1; | ||
|  |       } | ||
|  |       container = node = bookmark[start ? 'startContainer' : 'endContainer']; | ||
|  |       offset = bookmark[start ? 'startOffset' : 'endOffset']; | ||
|  |       if (!container) { | ||
|  |         return; | ||
|  |       } | ||
|  |       if (container.nodeType === 1) { | ||
|  |         offset = nodeIndex(container); | ||
|  |         container = container.parentNode; | ||
|  |         dom.remove(node); | ||
|  |       } | ||
|  |       bookmark[start ? 'startContainer' : 'endContainer'] = container; | ||
|  |       bookmark[start ? 'startOffset' : 'endOffset'] = offset; | ||
|  |     } | ||
|  |     restoreEndPoint(true); | ||
|  |     restoreEndPoint(); | ||
|  |     var rng = dom.createRng(); | ||
|  |     rng.setStart(bookmark.startContainer, bookmark.startOffset); | ||
|  |     if (bookmark.endContainer) { | ||
|  |       rng.setEnd(bookmark.endContainer, bookmark.endOffset); | ||
|  |     } | ||
|  |     return rng; | ||
|  |   }; | ||
|  |   var $_3b24e19ojjgwek5i = { | ||
|  |     create: create$1, | ||
|  |     resolve: resolve$1 | ||
|  |   }; | ||
|  | 
 | ||
|  |   var global$13 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker'); | ||
|  | 
 | ||
|  |   var global$14 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils'); | ||
|  | 
 | ||
|  |   var getSelectedElements = function (rootElm, startNode, endNode) { | ||
|  |     var walker, node; | ||
|  |     var elms = []; | ||
|  |     walker = new global$13(startNode, rootElm); | ||
|  |     for (node = startNode; node; node = walker.next()) { | ||
|  |       if (node.nodeType === 1) { | ||
|  |         elms.push(node); | ||
|  |       } | ||
|  |       if (node === endNode) { | ||
|  |         break; | ||
|  |       } | ||
|  |     } | ||
|  |     return elms; | ||
|  |   }; | ||
|  |   var unwrapElements = function (editor, elms) { | ||
|  |     var bookmark, dom, selection; | ||
|  |     dom = editor.dom; | ||
|  |     selection = editor.selection; | ||
|  |     bookmark = $_3b24e19ojjgwek5i.create(dom, selection.getRng()); | ||
|  |     global$4.each(elms, function (elm) { | ||
|  |       editor.dom.remove(elm, true); | ||
|  |     }); | ||
|  |     selection.setRng($_3b24e19ojjgwek5i.resolve(dom, bookmark)); | ||
|  |   }; | ||
|  |   var isLink = function (elm) { | ||
|  |     return elm.nodeName === 'A' && elm.hasAttribute('href'); | ||
|  |   }; | ||
|  |   var getParentAnchorOrSelf = function (dom, elm) { | ||
|  |     var anchorElm = dom.getParent(elm, isLink); | ||
|  |     return anchorElm ? anchorElm : elm; | ||
|  |   }; | ||
|  |   var getSelectedAnchors = function (editor) { | ||
|  |     var startElm, endElm, rootElm, anchorElms, selection, dom, rng; | ||
|  |     selection = editor.selection; | ||
|  |     dom = editor.dom; | ||
|  |     rng = selection.getRng(); | ||
|  |     startElm = getParentAnchorOrSelf(dom, global$14.getNode(rng.startContainer, rng.startOffset)); | ||
|  |     endElm = global$14.getNode(rng.endContainer, rng.endOffset); | ||
|  |     rootElm = editor.getBody(); | ||
|  |     anchorElms = global$4.grep(getSelectedElements(rootElm, startElm, endElm), isLink); | ||
|  |     return anchorElms; | ||
|  |   }; | ||
|  |   var unlinkSelection = function (editor) { | ||
|  |     unwrapElements(editor, getSelectedAnchors(editor)); | ||
|  |   }; | ||
|  |   var $_aunbnv19njjgwek5g = { unlinkSelection: unlinkSelection }; | ||
|  | 
 | ||
|  |   var createTableHtml = function (cols, rows) { | ||
|  |     var x, y, html; | ||
|  |     html = '<table data-mce-id="mce" style="width: 100%">'; | ||
|  |     html += '<tbody>'; | ||
|  |     for (y = 0; y < rows; y++) { | ||
|  |       html += '<tr>'; | ||
|  |       for (x = 0; x < cols; x++) { | ||
|  |         html += '<td><br></td>'; | ||
|  |       } | ||
|  |       html += '</tr>'; | ||
|  |     } | ||
|  |     html += '</tbody>'; | ||
|  |     html += '</table>'; | ||
|  |     return html; | ||
|  |   }; | ||
|  |   var getInsertedElement = function (editor) { | ||
|  |     var elms = editor.dom.select('*[data-mce-id]'); | ||
|  |     return elms[0]; | ||
|  |   }; | ||
|  |   var insertTableHtml = function (editor, cols, rows) { | ||
|  |     editor.undoManager.transact(function () { | ||
|  |       var tableElm, cellElm; | ||
|  |       editor.insertContent(createTableHtml(cols, rows)); | ||
|  |       tableElm = getInsertedElement(editor); | ||
|  |       tableElm.removeAttribute('data-mce-id'); | ||
|  |       cellElm = editor.dom.select('td,th', tableElm); | ||
|  |       editor.selection.setCursorLocation(cellElm[0], 0); | ||
|  |     }); | ||
|  |   }; | ||
|  |   var insertTable = function (editor, cols, rows) { | ||
|  |     editor.plugins.table ? editor.plugins.table.insertTable(cols, rows) : insertTableHtml(editor, cols, rows); | ||
|  |   }; | ||
|  |   var formatBlock = function (editor, formatName) { | ||
|  |     editor.execCommand('FormatBlock', false, formatName); | ||
|  |   }; | ||
|  |   var insertBlob = function (editor, base64, blob) { | ||
|  |     var blobCache, blobInfo; | ||
|  |     blobCache = editor.editorUpload.blobCache; | ||
|  |     blobInfo = blobCache.create($_49gxzf19mjjgwek5f.uuid('mceu'), blob, base64); | ||
|  |     blobCache.add(blobInfo); | ||
|  |     editor.insertContent(editor.dom.createHTML('img', { src: blobInfo.blobUri() })); | ||
|  |   }; | ||
|  |   var collapseSelectionToEnd = function (editor) { | ||
|  |     editor.selection.collapse(false); | ||
|  |   }; | ||
|  |   var unlink = function (editor) { | ||
|  |     editor.focus(); | ||
|  |     $_aunbnv19njjgwek5g.unlinkSelection(editor); | ||
|  |     collapseSelectionToEnd(editor); | ||
|  |   }; | ||
|  |   var changeHref = function (editor, elm, url) { | ||
|  |     editor.focus(); | ||
|  |     editor.dom.setAttrib(elm, 'href', url); | ||
|  |     collapseSelectionToEnd(editor); | ||
|  |   }; | ||
|  |   var insertLink = function (editor, url) { | ||
|  |     editor.execCommand('mceInsertLink', false, { href: url }); | ||
|  |     collapseSelectionToEnd(editor); | ||
|  |   }; | ||
|  |   var updateOrInsertLink = function (editor, url) { | ||
|  |     var elm = editor.dom.getParent(editor.selection.getStart(), 'a[href]'); | ||
|  |     elm ? changeHref(editor, elm, url) : insertLink(editor, url); | ||
|  |   }; | ||
|  |   var createLink = function (editor, url) { | ||
|  |     url.trim().length === 0 ? unlink(editor) : updateOrInsertLink(editor, url); | ||
|  |   }; | ||
|  |   var $_elxm3u19ljjgwek5d = { | ||
|  |     insertTable: insertTable, | ||
|  |     formatBlock: formatBlock, | ||
|  |     insertBlob: insertBlob, | ||
|  |     createLink: createLink, | ||
|  |     unlink: unlink | ||
|  |   }; | ||
|  | 
 | ||
|  |   var addHeaderButtons = function (editor) { | ||
|  |     var formatBlock = function (name) { | ||
|  |       return function () { | ||
|  |         $_elxm3u19ljjgwek5d.formatBlock(editor, name); | ||
|  |       }; | ||
|  |     }; | ||
|  |     for (var i = 1; i < 6; i++) { | ||
|  |       var name = 'h' + i; | ||
|  |       editor.addButton(name, { | ||
|  |         text: name.toUpperCase(), | ||
|  |         tooltip: 'Heading ' + i, | ||
|  |         stateSelector: name, | ||
|  |         onclick: formatBlock(name), | ||
|  |         onPostRender: function () { | ||
|  |           var span = this.getEl().firstChild.firstChild; | ||
|  |           span.style.fontWeight = 'bold'; | ||
|  |         } | ||
|  |       }); | ||
|  |     } | ||
|  |   }; | ||
|  |   var addToEditor = function (editor, panel) { | ||
|  |     editor.addButton('quicklink', { | ||
|  |       icon: 'link', | ||
|  |       tooltip: 'Insert/Edit link', | ||
|  |       stateSelector: 'a[href]', | ||
|  |       onclick: function () { | ||
|  |         panel.showForm(editor, 'quicklink'); | ||
|  |       } | ||
|  |     }); | ||
|  |     editor.addButton('quickimage', { | ||
|  |       icon: 'image', | ||
|  |       tooltip: 'Insert image', | ||
|  |       onclick: function () { | ||
|  |         $_edjfwb19kjjgwek5a.pickFile().then(function (files) { | ||
|  |           var blob = files[0]; | ||
|  |           $_c292419ejjgwek4z.blobToBase64(blob).then(function (base64) { | ||
|  |             $_elxm3u19ljjgwek5d.insertBlob(editor, base64, blob); | ||
|  |           }); | ||
|  |         }); | ||
|  |       } | ||
|  |     }); | ||
|  |     editor.addButton('quicktable', { | ||
|  |       icon: 'table', | ||
|  |       tooltip: 'Insert table', | ||
|  |       onclick: function () { | ||
|  |         panel.hide(); | ||
|  |         $_elxm3u19ljjgwek5d.insertTable(editor, 2, 2); | ||
|  |       } | ||
|  |     }); | ||
|  |     addHeaderButtons(editor); | ||
|  |   }; | ||
|  |   var $_epdxt419djjgwek4l = { addToEditor: addToEditor }; | ||
|  | 
 | ||
|  |   var getUiContainerDelta$1 = function () { | ||
|  |     var uiContainer = global$1.container; | ||
|  |     if (uiContainer && global$2.DOM.getStyle(uiContainer, 'position', true) !== 'static') { | ||
|  |       var containerPos = global$2.DOM.getPos(uiContainer); | ||
|  |       var dx = containerPos.x - uiContainer.scrollLeft; | ||
|  |       var dy = containerPos.y - uiContainer.scrollTop; | ||
|  |       return Option.some({ | ||
|  |         x: dx, | ||
|  |         y: dy | ||
|  |       }); | ||
|  |     } else { | ||
|  |       return Option.none(); | ||
|  |     } | ||
|  |   }; | ||
|  |   var $_9hbv4x19sjjgwek5q = { getUiContainerDelta: getUiContainerDelta$1 }; | ||
|  | 
 | ||
|  |   var isDomainLike = function (href) { | ||
|  |     return /^www\.|\.(com|org|edu|gov|uk|net|ca|de|jp|fr|au|us|ru|ch|it|nl|se|no|es|mil)$/i.test(href.trim()); | ||
|  |   }; | ||
|  |   var isAbsolute = function (href) { | ||
|  |     return /^https?:\/\//.test(href.trim()); | ||
|  |   }; | ||
|  |   var $_5y05uk19ujjgwek5w = { | ||
|  |     isDomainLike: isDomainLike, | ||
|  |     isAbsolute: isAbsolute | ||
|  |   }; | ||
|  | 
 | ||
|  |   var focusFirstTextBox = function (form) { | ||
|  |     form.find('textbox').eq(0).each(function (ctrl) { | ||
|  |       ctrl.focus(); | ||
|  |     }); | ||
|  |   }; | ||
|  |   var createForm = function (name, spec) { | ||
|  |     var form = global$11.create(global$4.extend({ | ||
|  |       type: 'form', | ||
|  |       layout: 'flex', | ||
|  |       direction: 'row', | ||
|  |       padding: 5, | ||
|  |       name: name, | ||
|  |       spacing: 3 | ||
|  |     }, spec)); | ||
|  |     form.on('show', function () { | ||
|  |       focusFirstTextBox(form); | ||
|  |     }); | ||
|  |     return form; | ||
|  |   }; | ||
|  |   var toggleVisibility = function (ctrl, state) { | ||
|  |     return state ? ctrl.show() : ctrl.hide(); | ||
|  |   }; | ||
|  |   var askAboutPrefix = function (editor, href) { | ||
|  |     return new global$12(function (resolve) { | ||
|  |       editor.windowManager.confirm('The URL you entered seems to be an external link. Do you want to add the required http:// prefix?', function (result) { | ||
|  |         var output = result === true ? 'http://' + href : href; | ||
|  |         resolve(output); | ||
|  |       }); | ||
|  |     }); | ||
|  |   }; | ||
|  |   var convertLinkToAbsolute = function (editor, href) { | ||
|  |     return !$_5y05uk19ujjgwek5w.isAbsolute(href) && $_5y05uk19ujjgwek5w.isDomainLike(href) ? askAboutPrefix(editor, href) : global$12.resolve(href); | ||
|  |   }; | ||
|  |   var createQuickLinkForm = function (editor, hide) { | ||
|  |     var attachState = {}; | ||
|  |     var unlink = function () { | ||
|  |       editor.focus(); | ||
|  |       $_elxm3u19ljjgwek5d.unlink(editor); | ||
|  |       hide(); | ||
|  |     }; | ||
|  |     var onChangeHandler = function (e) { | ||
|  |       var meta = e.meta; | ||
|  |       if (meta && meta.attach) { | ||
|  |         attachState = { | ||
|  |           href: this.value(), | ||
|  |           attach: meta.attach | ||
|  |         }; | ||
|  |       } | ||
|  |     }; | ||
|  |     var onShowHandler = function (e) { | ||
|  |       if (e.control === this) { | ||
|  |         var elm = void 0, linkurl = ''; | ||
|  |         elm = editor.dom.getParent(editor.selection.getStart(), 'a[href]'); | ||
|  |         if (elm) { | ||
|  |           linkurl = editor.dom.getAttrib(elm, 'href'); | ||
|  |         } | ||
|  |         this.fromJSON({ linkurl: linkurl }); | ||
|  |         toggleVisibility(this.find('#unlink'), elm); | ||
|  |         this.find('#linkurl')[0].focus(); | ||
|  |       } | ||
|  |     }; | ||
|  |     return createForm('quicklink', { | ||
|  |       items: [ | ||
|  |         { | ||
|  |           type: 'button', | ||
|  |           name: 'unlink', | ||
|  |           icon: 'unlink', | ||
|  |           onclick: unlink, | ||
|  |           tooltip: 'Remove link' | ||
|  |         }, | ||
|  |         { | ||
|  |           type: 'filepicker', | ||
|  |           name: 'linkurl', | ||
|  |           placeholder: 'Paste or type a link', | ||
|  |           filetype: 'file', | ||
|  |           onchange: onChangeHandler | ||
|  |         }, | ||
|  |         { | ||
|  |           type: 'button', | ||
|  |           icon: 'checkmark', | ||
|  |           subtype: 'primary', | ||
|  |           tooltip: 'Ok', | ||
|  |           onclick: 'submit' | ||
|  |         } | ||
|  |       ], | ||
|  |       onshow: onShowHandler, | ||
|  |       onsubmit: function (e) { | ||
|  |         convertLinkToAbsolute(editor, e.data.linkurl).then(function (url) { | ||
|  |           editor.undoManager.transact(function () { | ||
|  |             if (url === attachState.href) { | ||
|  |               attachState.attach(); | ||
|  |               attachState = {}; | ||
|  |             } | ||
|  |             $_elxm3u19ljjgwek5d.createLink(editor, url); | ||
|  |           }); | ||
|  |           hide(); | ||
|  |         }); | ||
|  |       } | ||
|  |     }); | ||
|  |   }; | ||
|  |   var $_amewps19tjjgwek5t = { createQuickLinkForm: createQuickLinkForm }; | ||
|  | 
 | ||
|  |   var getSelectorStateResult = function (itemName, item) { | ||
|  |     var result = function (selector, handler) { | ||
|  |       return { | ||
|  |         selector: selector, | ||
|  |         handler: handler | ||
|  |       }; | ||
|  |     }; | ||
|  |     var activeHandler = function (state) { | ||
|  |       item.active(state); | ||
|  |     }; | ||
|  |     var disabledHandler = function (state) { | ||
|  |       item.disabled(state); | ||
|  |     }; | ||
|  |     if (item.settings.stateSelector) { | ||
|  |       return result(item.settings.stateSelector, activeHandler); | ||
|  |     } | ||
|  |     if (item.settings.disabledStateSelector) { | ||
|  |       return result(item.settings.disabledStateSelector, disabledHandler); | ||
|  |     } | ||
|  |     return null; | ||
|  |   }; | ||
|  |   var bindSelectorChanged = function (editor, itemName, item) { | ||
|  |     return function () { | ||
|  |       var result = getSelectorStateResult(itemName, item); | ||
|  |       if (result !== null) { | ||
|  |         editor.selection.selectorChanged(result.selector, result.handler); | ||
|  |       } | ||
|  |     }; | ||
|  |   }; | ||
|  |   var itemsToArray$1 = function (items) { | ||
|  |     if ($_e4npq318ajjgwejzo.isArray(items)) { | ||
|  |       return items; | ||
|  |     } else if ($_e4npq318ajjgwejzo.isString(items)) { | ||
|  |       return items.split(/[ ,]/); | ||
|  |     } | ||
|  |     return []; | ||
|  |   }; | ||
|  |   var create$2 = function (editor, name, items) { | ||
|  |     var toolbarItems = []; | ||
|  |     var buttonGroup; | ||
|  |     if (!items) { | ||
|  |       return; | ||
|  |     } | ||
|  |     global$4.each(itemsToArray$1(items), function (item) { | ||
|  |       if (item === '|') { | ||
|  |         buttonGroup = null; | ||
|  |       } else { | ||
|  |         if (editor.buttons[item]) { | ||
|  |           if (!buttonGroup) { | ||
|  |             buttonGroup = { | ||
|  |               type: 'buttongroup', | ||
|  |               items: [] | ||
|  |             }; | ||
|  |             toolbarItems.push(buttonGroup); | ||
|  |           } | ||
|  |           var button = editor.buttons[item]; | ||
|  |           if ($_e4npq318ajjgwejzo.isFunction(button)) { | ||
|  |             button = button(); | ||
|  |           } | ||
|  |           button.type = button.type || 'button'; | ||
|  |           button = global$11.create(button); | ||
|  |           button.on('postRender', bindSelectorChanged(editor, item, button)); | ||
|  |           buttonGroup.items.push(button); | ||
|  |         } | ||
|  |       } | ||
|  |     }); | ||
|  |     return global$11.create({ | ||
|  |       type: 'toolbar', | ||
|  |       layout: 'flow', | ||
|  |       name: name, | ||
|  |       items: toolbarItems | ||
|  |     }); | ||
|  |   }; | ||
|  |   var $_797pa819vjjgwek5x = { create: create$2 }; | ||
|  | 
 | ||
|  |   var create$3 = function () { | ||
|  |     var panel, currentRect; | ||
|  |     var createToolbars = function (editor, toolbars) { | ||
|  |       return global$4.map(toolbars, function (toolbar) { | ||
|  |         return $_797pa819vjjgwek5x.create(editor, toolbar.id, toolbar.items); | ||
|  |       }); | ||
|  |     }; | ||
|  |     var hasToolbarItems = function (toolbar) { | ||
|  |       return toolbar.items().length > 0; | ||
|  |     }; | ||
|  |     var create = function (editor, toolbars) { | ||
|  |       var items = createToolbars(editor, toolbars).concat([ | ||
|  |         $_797pa819vjjgwek5x.create(editor, 'text', $_4j2h42187jjgwejzk.getTextSelectionToolbarItems(editor)), | ||
|  |         $_797pa819vjjgwek5x.create(editor, 'insert', $_4j2h42187jjgwejzk.getInsertToolbarItems(editor)), | ||
|  |         $_amewps19tjjgwek5t.createQuickLinkForm(editor, hide) | ||
|  |       ]); | ||
|  |       return global$11.create({ | ||
|  |         type: 'floatpanel', | ||
|  |         role: 'dialog', | ||
|  |         classes: 'tinymce tinymce-inline arrow', | ||
|  |         ariaLabel: 'Inline toolbar', | ||
|  |         layout: 'flex', | ||
|  |         direction: 'column', | ||
|  |         align: 'stretch', | ||
|  |         autohide: false, | ||
|  |         autofix: true, | ||
|  |         fixed: true, | ||
|  |         border: 1, | ||
|  |         items: global$4.grep(items, hasToolbarItems), | ||
|  |         oncancel: function () { | ||
|  |           editor.focus(); | ||
|  |         } | ||
|  |       }); | ||
|  |     }; | ||
|  |     var showPanel = function (panel) { | ||
|  |       if (panel) { | ||
|  |         panel.show(); | ||
|  |       } | ||
|  |     }; | ||
|  |     var movePanelTo = function (panel, pos) { | ||
|  |       panel.moveTo(pos.x, pos.y); | ||
|  |     }; | ||
|  |     var togglePositionClass = function (panel, relPos) { | ||
|  |       relPos = relPos ? relPos.substr(0, 2) : ''; | ||
|  |       global$4.each({ | ||
|  |         t: 'down', | ||
|  |         b: 'up', | ||
|  |         c: 'center' | ||
|  |       }, function (cls, pos) { | ||
|  |         panel.classes.toggle('arrow-' + cls, pos === relPos.substr(0, 1)); | ||
|  |       }); | ||
|  |       if (relPos === 'cr') { | ||
|  |         panel.classes.toggle('arrow-left', true); | ||
|  |         panel.classes.toggle('arrow-right', false); | ||
|  |       } else if (relPos === 'cl') { | ||
|  |         panel.classes.toggle('arrow-left', true); | ||
|  |         panel.classes.toggle('arrow-right', true); | ||
|  |       } else { | ||
|  |         global$4.each({ | ||
|  |           l: 'left', | ||
|  |           r: 'right' | ||
|  |         }, function (cls, pos) { | ||
|  |           panel.classes.toggle('arrow-' + cls, pos === relPos.substr(1, 1)); | ||
|  |         }); | ||
|  |       } | ||
|  |     }; | ||
|  |     var showToolbar = function (panel, id) { | ||
|  |       var toolbars = panel.items().filter('#' + id); | ||
|  |       if (toolbars.length > 0) { | ||
|  |         toolbars[0].show(); | ||
|  |         panel.reflow(); | ||
|  |         return true; | ||
|  |       } | ||
|  |       return false; | ||
|  |     }; | ||
|  |     var repositionPanelAt = function (panel, id, editor, targetRect) { | ||
|  |       var contentAreaRect, panelRect, result, userConstainHandler; | ||
|  |       userConstainHandler = $_4j2h42187jjgwejzk.getPositionHandler(editor); | ||
|  |       contentAreaRect = $_51qgo2180jjgwejzb.getContentAreaRect(editor); | ||
|  |       panelRect = global$2.DOM.getRect(panel.getEl()); | ||
|  |       if (id === 'insert') { | ||
|  |         result = $_gir42l18bjjgwejzq.calcInsert(targetRect, contentAreaRect, panelRect); | ||
|  |       } else { | ||
|  |         result = $_gir42l18bjjgwejzq.calc(targetRect, contentAreaRect, panelRect); | ||
|  |       } | ||
|  |       if (result) { | ||
|  |         var delta = $_9hbv4x19sjjgwek5q.getUiContainerDelta().getOr({ | ||
|  |           x: 0, | ||
|  |           y: 0 | ||
|  |         }); | ||
|  |         var transposedPanelRect = { | ||
|  |           x: result.rect.x - delta.x, | ||
|  |           y: result.rect.y - delta.y, | ||
|  |           w: result.rect.w, | ||
|  |           h: result.rect.h | ||
|  |         }; | ||
|  |         currentRect = targetRect; | ||
|  |         movePanelTo(panel, $_gir42l18bjjgwejzq.userConstrain(userConstainHandler, targetRect, contentAreaRect, transposedPanelRect)); | ||
|  |         togglePositionClass(panel, result.position); | ||
|  |         return true; | ||
|  |       } else { | ||
|  |         return false; | ||
|  |       } | ||
|  |     }; | ||
|  |     var showPanelAt = function (panel, id, editor, targetRect) { | ||
|  |       showPanel(panel); | ||
|  |       panel.items().hide(); | ||
|  |       if (!showToolbar(panel, id)) { | ||
|  |         hide(); | ||
|  |         return; | ||
|  |       } | ||
|  |       if (repositionPanelAt(panel, id, editor, targetRect) === false) { | ||
|  |         hide(); | ||
|  |       } | ||
|  |     }; | ||
|  |     var hasFormVisible = function () { | ||
|  |       return panel.items().filter('form:visible').length > 0; | ||
|  |     }; | ||
|  |     var showForm = function (editor, id) { | ||
|  |       if (panel) { | ||
|  |         panel.items().hide(); | ||
|  |         if (!showToolbar(panel, id)) { | ||
|  |           hide(); | ||
|  |           return; | ||
|  |         } | ||
|  |         var contentAreaRect = void 0, panelRect = void 0, result = void 0, userConstainHandler = void 0; | ||
|  |         showPanel(panel); | ||
|  |         panel.items().hide(); | ||
|  |         showToolbar(panel, id); | ||
|  |         userConstainHandler = $_4j2h42187jjgwejzk.getPositionHandler(editor); | ||
|  |         contentAreaRect = $_51qgo2180jjgwejzb.getContentAreaRect(editor); | ||
|  |         panelRect = global$2.DOM.getRect(panel.getEl()); | ||
|  |         result = $_gir42l18bjjgwejzq.calc(currentRect, contentAreaRect, panelRect); | ||
|  |         if (result) { | ||
|  |           panelRect = result.rect; | ||
|  |           movePanelTo(panel, $_gir42l18bjjgwejzq.userConstrain(userConstainHandler, currentRect, contentAreaRect, panelRect)); | ||
|  |           togglePositionClass(panel, result.position); | ||
|  |         } | ||
|  |       } | ||
|  |     }; | ||
|  |     var show = function (editor, id, targetRect, toolbars) { | ||
|  |       if (!panel) { | ||
|  |         $_77u64d186jjgwejzi.fireBeforeRenderUI(editor); | ||
|  |         panel = create(editor, toolbars); | ||
|  |         panel.renderTo().reflow().moveTo(targetRect.x, targetRect.y); | ||
|  |         editor.nodeChanged(); | ||
|  |       } | ||
|  |       showPanelAt(panel, id, editor, targetRect); | ||
|  |     }; | ||
|  |     var reposition = function (editor, id, targetRect) { | ||
|  |       if (panel) { | ||
|  |         repositionPanelAt(panel, id, editor, targetRect); | ||
|  |       } | ||
|  |     }; | ||
|  |     var hide = function () { | ||
|  |       if (panel) { | ||
|  |         panel.hide(); | ||
|  |       } | ||
|  |     }; | ||
|  |     var focus = function () { | ||
|  |       if (panel) { | ||
|  |         panel.find('toolbar:visible').eq(0).each(function (item) { | ||
|  |           item.focus(true); | ||
|  |         }); | ||
|  |       } | ||
|  |     }; | ||
|  |     var remove = function () { | ||
|  |       if (panel) { | ||
|  |         panel.remove(); | ||
|  |         panel = null; | ||
|  |       } | ||
|  |     }; | ||
|  |     var inForm = function () { | ||
|  |       return panel && panel.visible() && hasFormVisible(); | ||
|  |     }; | ||
|  |     return { | ||
|  |       show: show, | ||
|  |       showForm: showForm, | ||
|  |       reposition: reposition, | ||
|  |       inForm: inForm, | ||
|  |       hide: hide, | ||
|  |       focus: focus, | ||
|  |       remove: remove | ||
|  |     }; | ||
|  |   }; | ||
|  | 
 | ||
|  |   var Layout$1 = global$8.extend({ | ||
|  |     Defaults: { | ||
|  |       firstControlClass: 'first', | ||
|  |       lastControlClass: 'last' | ||
|  |     }, | ||
|  |     init: function (settings) { | ||
|  |       this.settings = global$4.extend({}, this.Defaults, settings); | ||
|  |     }, | ||
|  |     preRender: function (container) { | ||
|  |       container.bodyClasses.add(this.settings.containerClass); | ||
|  |     }, | ||
|  |     applyClasses: function (items) { | ||
|  |       var self = this; | ||
|  |       var settings = self.settings; | ||
|  |       var firstClass, lastClass, firstItem, lastItem; | ||
|  |       firstClass = settings.firstControlClass; | ||
|  |       lastClass = settings.lastControlClass; | ||
|  |       items.each(function (item) { | ||
|  |         item.classes.remove(firstClass).remove(lastClass).add(settings.controlClass); | ||
|  |         if (item.visible()) { | ||
|  |           if (!firstItem) { | ||
|  |             firstItem = item; | ||
|  |           } | ||
|  |           lastItem = item; | ||
|  |         } | ||
|  |       }); | ||
|  |       if (firstItem) { | ||
|  |         firstItem.classes.add(firstClass); | ||
|  |       } | ||
|  |       if (lastItem) { | ||
|  |         lastItem.classes.add(lastClass); | ||
|  |       } | ||
|  |     }, | ||
|  |     renderHtml: function (container) { | ||
|  |       var self = this; | ||
|  |       var html = ''; | ||
|  |       self.applyClasses(container.items()); | ||
|  |       container.items().each(function (item) { | ||
|  |         html += item.renderHtml(); | ||
|  |       }); | ||
|  |       return html; | ||
|  |     }, | ||
|  |     recalc: function () { | ||
|  |     }, | ||
|  |     postRender: function () { | ||
|  |     }, | ||
|  |     isNative: function () { | ||
|  |       return false; | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var AbsoluteLayout = Layout$1.extend({ | ||
|  |     Defaults: { | ||
|  |       containerClass: 'abs-layout', | ||
|  |       controlClass: 'abs-layout-item' | ||
|  |     }, | ||
|  |     recalc: function (container) { | ||
|  |       container.items().filter(':visible').each(function (ctrl) { | ||
|  |         var settings = ctrl.settings; | ||
|  |         ctrl.layoutRect({ | ||
|  |           x: settings.x, | ||
|  |           y: settings.y, | ||
|  |           w: settings.w, | ||
|  |           h: settings.h | ||
|  |         }); | ||
|  |         if (ctrl.recalc) { | ||
|  |           ctrl.recalc(); | ||
|  |         } | ||
|  |       }); | ||
|  |     }, | ||
|  |     renderHtml: function (container) { | ||
|  |       return '<div id="' + container._id + '-absend" class="' + container.classPrefix + 'abs-end"></div>' + this._super(container); | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var Button = Widget.extend({ | ||
|  |     Defaults: { | ||
|  |       classes: 'widget btn', | ||
|  |       role: 'button' | ||
|  |     }, | ||
|  |     init: function (settings) { | ||
|  |       var self$$1 = this; | ||
|  |       var size; | ||
|  |       self$$1._super(settings); | ||
|  |       settings = self$$1.settings; | ||
|  |       size = self$$1.settings.size; | ||
|  |       self$$1.on('click mousedown', function (e) { | ||
|  |         e.preventDefault(); | ||
|  |       }); | ||
|  |       self$$1.on('touchstart', function (e) { | ||
|  |         self$$1.fire('click', e); | ||
|  |         e.preventDefault(); | ||
|  |       }); | ||
|  |       if (settings.subtype) { | ||
|  |         self$$1.classes.add(settings.subtype); | ||
|  |       } | ||
|  |       if (size) { | ||
|  |         self$$1.classes.add('btn-' + size); | ||
|  |       } | ||
|  |       if (settings.icon) { | ||
|  |         self$$1.icon(settings.icon); | ||
|  |       } | ||
|  |     }, | ||
|  |     icon: function (icon) { | ||
|  |       if (!arguments.length) { | ||
|  |         return this.state.get('icon'); | ||
|  |       } | ||
|  |       this.state.set('icon', icon); | ||
|  |       return this; | ||
|  |     }, | ||
|  |     repaint: function () { | ||
|  |       var btnElm = this.getEl().firstChild; | ||
|  |       var btnStyle; | ||
|  |       if (btnElm) { | ||
|  |         btnStyle = btnElm.style; | ||
|  |         btnStyle.width = btnStyle.height = '100%'; | ||
|  |       } | ||
|  |       this._super(); | ||
|  |     }, | ||
|  |     renderHtml: function () { | ||
|  |       var self$$1 = this, id = self$$1._id, prefix = self$$1.classPrefix; | ||
|  |       var icon = self$$1.state.get('icon'), image; | ||
|  |       var text = self$$1.state.get('text'); | ||
|  |       var textHtml = ''; | ||
|  |       var ariaPressed; | ||
|  |       var settings = self$$1.settings; | ||
|  |       image = settings.image; | ||
|  |       if (image) { | ||
|  |         icon = 'none'; | ||
|  |         if (typeof image !== 'string') { | ||
|  |           image = window.getSelection ? image[0] : image[1]; | ||
|  |         } | ||
|  |         image = ' style="background-image: url(\'' + image + '\')"'; | ||
|  |       } else { | ||
|  |         image = ''; | ||
|  |       } | ||
|  |       if (text) { | ||
|  |         self$$1.classes.add('btn-has-text'); | ||
|  |         textHtml = '<span class="' + prefix + 'txt">' + self$$1.encode(text) + '</span>'; | ||
|  |       } | ||
|  |       icon = icon ? prefix + 'ico ' + prefix + 'i-' + icon : ''; | ||
|  |       ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed="' + settings.active + '"' : ''; | ||
|  |       return '<div id="' + id + '" class="' + self$$1.classes + '" tabindex="-1"' + ariaPressed + '>' + '<button id="' + id + '-button" role="presentation" type="button" tabindex="-1">' + (icon ? '<i class="' + icon + '"' + image + '></i>' : '') + textHtml + '</button>' + '</div>'; | ||
|  |     }, | ||
|  |     bindStates: function () { | ||
|  |       var self$$1 = this, $ = self$$1.$, textCls = self$$1.classPrefix + 'txt'; | ||
|  |       function setButtonText(text) { | ||
|  |         var $span = $('span.' + textCls, self$$1.getEl()); | ||
|  |         if (text) { | ||
|  |           if (!$span[0]) { | ||
|  |             $('button:first', self$$1.getEl()).append('<span class="' + textCls + '"></span>'); | ||
|  |             $span = $('span.' + textCls, self$$1.getEl()); | ||
|  |           } | ||
|  |           $span.html(self$$1.encode(text)); | ||
|  |         } else { | ||
|  |           $span.remove(); | ||
|  |         } | ||
|  |         self$$1.classes.toggle('btn-has-text', !!text); | ||
|  |       } | ||
|  |       self$$1.state.on('change:text', function (e) { | ||
|  |         setButtonText(e.value); | ||
|  |       }); | ||
|  |       self$$1.state.on('change:icon', function (e) { | ||
|  |         var icon = e.value; | ||
|  |         var prefix = self$$1.classPrefix; | ||
|  |         self$$1.settings.icon = icon; | ||
|  |         icon = icon ? prefix + 'ico ' + prefix + 'i-' + self$$1.settings.icon : ''; | ||
|  |         var btnElm = self$$1.getEl().firstChild; | ||
|  |         var iconElm = btnElm.getElementsByTagName('i')[0]; | ||
|  |         if (icon) { | ||
|  |           if (!iconElm || iconElm !== btnElm.firstChild) { | ||
|  |             iconElm = document.createElement('i'); | ||
|  |             btnElm.insertBefore(iconElm, btnElm.firstChild); | ||
|  |           } | ||
|  |           iconElm.className = icon; | ||
|  |         } else if (iconElm) { | ||
|  |           btnElm.removeChild(iconElm); | ||
|  |         } | ||
|  |         setButtonText(self$$1.state.get('text')); | ||
|  |       }); | ||
|  |       return self$$1._super(); | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var BrowseButton = Button.extend({ | ||
|  |     init: function (settings) { | ||
|  |       var self = this; | ||
|  |       settings = global$4.extend({ | ||
|  |         text: 'Browse...', | ||
|  |         multiple: false, | ||
|  |         accept: null | ||
|  |       }, settings); | ||
|  |       self._super(settings); | ||
|  |       self.classes.add('browsebutton'); | ||
|  |       if (settings.multiple) { | ||
|  |         self.classes.add('multiple'); | ||
|  |       } | ||
|  |     }, | ||
|  |     postRender: function () { | ||
|  |       var self = this; | ||
|  |       var input = funcs.create('input', { | ||
|  |         type: 'file', | ||
|  |         id: self._id + '-browse', | ||
|  |         accept: self.settings.accept | ||
|  |       }); | ||
|  |       self._super(); | ||
|  |       global$7(input).on('change', function (e) { | ||
|  |         var files = e.target.files; | ||
|  |         self.value = function () { | ||
|  |           if (!files.length) { | ||
|  |             return null; | ||
|  |           } else if (self.settings.multiple) { | ||
|  |             return files; | ||
|  |           } else { | ||
|  |             return files[0]; | ||
|  |           } | ||
|  |         }; | ||
|  |         e.preventDefault(); | ||
|  |         if (files.length) { | ||
|  |           self.fire('change', e); | ||
|  |         } | ||
|  |       }); | ||
|  |       global$7(input).on('click', function (e) { | ||
|  |         e.stopPropagation(); | ||
|  |       }); | ||
|  |       global$7(self.getEl('button')).on('click', function (e) { | ||
|  |         e.stopPropagation(); | ||
|  |         input.click(); | ||
|  |       }); | ||
|  |       self.getEl().appendChild(input); | ||
|  |     }, | ||
|  |     remove: function () { | ||
|  |       global$7(this.getEl('button')).off(); | ||
|  |       global$7(this.getEl('input')).off(); | ||
|  |       this._super(); | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var ButtonGroup = Container.extend({ | ||
|  |     Defaults: { | ||
|  |       defaultType: 'button', | ||
|  |       role: 'group' | ||
|  |     }, | ||
|  |     renderHtml: function () { | ||
|  |       var self = this, layout = self._layout; | ||
|  |       self.classes.add('btn-group'); | ||
|  |       self.preRender(); | ||
|  |       layout.preRender(self); | ||
|  |       return '<div id="' + self._id + '" class="' + self.classes + '">' + '<div id="' + self._id + '-body">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</div>'; | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var Checkbox = Widget.extend({ | ||
|  |     Defaults: { | ||
|  |       classes: 'checkbox', | ||
|  |       role: 'checkbox', | ||
|  |       checked: false | ||
|  |     }, | ||
|  |     init: function (settings) { | ||
|  |       var self$$1 = this; | ||
|  |       self$$1._super(settings); | ||
|  |       self$$1.on('click mousedown', function (e) { | ||
|  |         e.preventDefault(); | ||
|  |       }); | ||
|  |       self$$1.on('click', function (e) { | ||
|  |         e.preventDefault(); | ||
|  |         if (!self$$1.disabled()) { | ||
|  |           self$$1.checked(!self$$1.checked()); | ||
|  |         } | ||
|  |       }); | ||
|  |       self$$1.checked(self$$1.settings.checked); | ||
|  |     }, | ||
|  |     checked: function (state) { | ||
|  |       if (!arguments.length) { | ||
|  |         return this.state.get('checked'); | ||
|  |       } | ||
|  |       this.state.set('checked', state); | ||
|  |       return this; | ||
|  |     }, | ||
|  |     value: function (state) { | ||
|  |       if (!arguments.length) { | ||
|  |         return this.checked(); | ||
|  |       } | ||
|  |       return this.checked(state); | ||
|  |     }, | ||
|  |     renderHtml: function () { | ||
|  |       var self$$1 = this, id = self$$1._id, prefix = self$$1.classPrefix; | ||
|  |       return '<div id="' + id + '" class="' + self$$1.classes + '" unselectable="on" aria-labelledby="' + id + '-al" tabindex="-1">' + '<i class="' + prefix + 'ico ' + prefix + 'i-checkbox"></i>' + '<span id="' + id + '-al" class="' + prefix + 'label">' + self$$1.encode(self$$1.state.get('text')) + '</span>' + '</div>'; | ||
|  |     }, | ||
|  |     bindStates: function () { | ||
|  |       var self$$1 = this; | ||
|  |       function checked(state) { | ||
|  |         self$$1.classes.toggle('checked', state); | ||
|  |         self$$1.aria('checked', state); | ||
|  |       } | ||
|  |       self$$1.state.on('change:text', function (e) { | ||
|  |         self$$1.getEl('al').firstChild.data = self$$1.translate(e.value); | ||
|  |       }); | ||
|  |       self$$1.state.on('change:checked change:value', function (e) { | ||
|  |         self$$1.fire('change'); | ||
|  |         checked(e.value); | ||
|  |       }); | ||
|  |       self$$1.state.on('change:icon', function (e) { | ||
|  |         var icon = e.value; | ||
|  |         var prefix = self$$1.classPrefix; | ||
|  |         if (typeof icon === 'undefined') { | ||
|  |           return self$$1.settings.icon; | ||
|  |         } | ||
|  |         self$$1.settings.icon = icon; | ||
|  |         icon = icon ? prefix + 'ico ' + prefix + 'i-' + self$$1.settings.icon : ''; | ||
|  |         var btnElm = self$$1.getEl().firstChild; | ||
|  |         var iconElm = btnElm.getElementsByTagName('i')[0]; | ||
|  |         if (icon) { | ||
|  |           if (!iconElm || iconElm !== btnElm.firstChild) { | ||
|  |             iconElm = document.createElement('i'); | ||
|  |             btnElm.insertBefore(iconElm, btnElm.firstChild); | ||
|  |           } | ||
|  |           iconElm.className = icon; | ||
|  |         } else if (iconElm) { | ||
|  |           btnElm.removeChild(iconElm); | ||
|  |         } | ||
|  |       }); | ||
|  |       if (self$$1.state.get('checked')) { | ||
|  |         checked(true); | ||
|  |       } | ||
|  |       return self$$1._super(); | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var global$15 = tinymce.util.Tools.resolve('tinymce.util.VK'); | ||
|  | 
 | ||
|  |   var ComboBox = Widget.extend({ | ||
|  |     init: function (settings) { | ||
|  |       var self$$1 = this; | ||
|  |       self$$1._super(settings); | ||
|  |       settings = self$$1.settings; | ||
|  |       self$$1.classes.add('combobox'); | ||
|  |       self$$1.subinput = true; | ||
|  |       self$$1.ariaTarget = 'inp'; | ||
|  |       settings.menu = settings.menu || settings.values; | ||
|  |       if (settings.menu) { | ||
|  |         settings.icon = 'caret'; | ||
|  |       } | ||
|  |       self$$1.on('click', function (e) { | ||
|  |         var elm = e.target; | ||
|  |         var root = self$$1.getEl(); | ||
|  |         if (!global$7.contains(root, elm) && elm !== root) { | ||
|  |           return; | ||
|  |         } | ||
|  |         while (elm && elm !== root) { | ||
|  |           if (elm.id && elm.id.indexOf('-open') !== -1) { | ||
|  |             self$$1.fire('action'); | ||
|  |             if (settings.menu) { | ||
|  |               self$$1.showMenu(); | ||
|  |               if (e.aria) { | ||
|  |                 self$$1.menu.items()[0].focus(); | ||
|  |               } | ||
|  |             } | ||
|  |           } | ||
|  |           elm = elm.parentNode; | ||
|  |         } | ||
|  |       }); | ||
|  |       self$$1.on('keydown', function (e) { | ||
|  |         var rootControl; | ||
|  |         if (e.keyCode === 13 && e.target.nodeName === 'INPUT') { | ||
|  |           e.preventDefault(); | ||
|  |           self$$1.parents().reverse().each(function (ctrl) { | ||
|  |             if (ctrl.toJSON) { | ||
|  |               rootControl = ctrl; | ||
|  |               return false; | ||
|  |             } | ||
|  |           }); | ||
|  |           self$$1.fire('submit', { data: rootControl.toJSON() }); | ||
|  |         } | ||
|  |       }); | ||
|  |       self$$1.on('keyup', function (e) { | ||
|  |         if (e.target.nodeName === 'INPUT') { | ||
|  |           var oldValue = self$$1.state.get('value'); | ||
|  |           var newValue = e.target.value; | ||
|  |           if (newValue !== oldValue) { | ||
|  |             self$$1.state.set('value', newValue); | ||
|  |             self$$1.fire('autocomplete', e); | ||
|  |           } | ||
|  |         } | ||
|  |       }); | ||
|  |       self$$1.on('mouseover', function (e) { | ||
|  |         var tooltip = self$$1.tooltip().moveTo(-65535); | ||
|  |         if (self$$1.statusLevel() && e.target.className.indexOf(self$$1.classPrefix + 'status') !== -1) { | ||
|  |           var statusMessage = self$$1.statusMessage() || 'Ok'; | ||
|  |           var rel = tooltip.text(statusMessage).show().testMoveRel(e.target, [ | ||
|  |             'bc-tc', | ||
|  |             'bc-tl', | ||
|  |             'bc-tr' | ||
|  |           ]); | ||
|  |           tooltip.classes.toggle('tooltip-n', rel === 'bc-tc'); | ||
|  |           tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl'); | ||
|  |           tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr'); | ||
|  |           tooltip.moveRel(e.target, rel); | ||
|  |         } | ||
|  |       }); | ||
|  |     }, | ||
|  |     statusLevel: function (value) { | ||
|  |       if (arguments.length > 0) { | ||
|  |         this.state.set('statusLevel', value); | ||
|  |       } | ||
|  |       return this.state.get('statusLevel'); | ||
|  |     }, | ||
|  |     statusMessage: function (value) { | ||
|  |       if (arguments.length > 0) { | ||
|  |         this.state.set('statusMessage', value); | ||
|  |       } | ||
|  |       return this.state.get('statusMessage'); | ||
|  |     }, | ||
|  |     showMenu: function () { | ||
|  |       var self$$1 = this; | ||
|  |       var settings = self$$1.settings; | ||
|  |       var menu; | ||
|  |       if (!self$$1.menu) { | ||
|  |         menu = settings.menu || []; | ||
|  |         if (menu.length) { | ||
|  |           menu = { | ||
|  |             type: 'menu', | ||
|  |             items: menu | ||
|  |           }; | ||
|  |         } else { | ||
|  |           menu.type = menu.type || 'menu'; | ||
|  |         } | ||
|  |         self$$1.menu = global$11.create(menu).parent(self$$1).renderTo(self$$1.getContainerElm()); | ||
|  |         self$$1.fire('createmenu'); | ||
|  |         self$$1.menu.reflow(); | ||
|  |         self$$1.menu.on('cancel', function (e) { | ||
|  |           if (e.control === self$$1.menu) { | ||
|  |             self$$1.focus(); | ||
|  |           } | ||
|  |         }); | ||
|  |         self$$1.menu.on('show hide', function (e) { | ||
|  |           e.control.items().each(function (ctrl) { | ||
|  |             ctrl.active(ctrl.value() === self$$1.value()); | ||
|  |           }); | ||
|  |         }).fire('show'); | ||
|  |         self$$1.menu.on('select', function (e) { | ||
|  |           self$$1.value(e.control.value()); | ||
|  |         }); | ||
|  |         self$$1.on('focusin', function (e) { | ||
|  |           if (e.target.tagName.toUpperCase() === 'INPUT') { | ||
|  |             self$$1.menu.hide(); | ||
|  |           } | ||
|  |         }); | ||
|  |         self$$1.aria('expanded', true); | ||
|  |       } | ||
|  |       self$$1.menu.show(); | ||
|  |       self$$1.menu.layoutRect({ w: self$$1.layoutRect().w }); | ||
|  |       self$$1.menu.moveRel(self$$1.getEl(), self$$1.isRtl() ? [ | ||
|  |         'br-tr', | ||
|  |         'tr-br' | ||
|  |       ] : [ | ||
|  |         'bl-tl', | ||
|  |         'tl-bl' | ||
|  |       ]); | ||
|  |     }, | ||
|  |     focus: function () { | ||
|  |       this.getEl('inp').focus(); | ||
|  |     }, | ||
|  |     repaint: function () { | ||
|  |       var self$$1 = this, elm = self$$1.getEl(), openElm = self$$1.getEl('open'), rect = self$$1.layoutRect(); | ||
|  |       var width, lineHeight, innerPadding = 0; | ||
|  |       var inputElm = elm.firstChild; | ||
|  |       if (self$$1.statusLevel() && self$$1.statusLevel() !== 'none') { | ||
|  |         innerPadding = parseInt(funcs.getRuntimeStyle(inputElm, 'padding-right'), 10) - parseInt(funcs.getRuntimeStyle(inputElm, 'padding-left'), 10); | ||
|  |       } | ||
|  |       if (openElm) { | ||
|  |         width = rect.w - funcs.getSize(openElm).width - 10; | ||
|  |       } else { | ||
|  |         width = rect.w - 10; | ||
|  |       } | ||
|  |       var doc = document; | ||
|  |       if (doc.all && (!doc.documentMode || doc.documentMode <= 8)) { | ||
|  |         lineHeight = self$$1.layoutRect().h - 2 + 'px'; | ||
|  |       } | ||
|  |       global$7(inputElm).css({ | ||
|  |         width: width - innerPadding, | ||
|  |         lineHeight: lineHeight | ||
|  |       }); | ||
|  |       self$$1._super(); | ||
|  |       return self$$1; | ||
|  |     }, | ||
|  |     postRender: function () { | ||
|  |       var self$$1 = this; | ||
|  |       global$7(this.getEl('inp')).on('change', function (e) { | ||
|  |         self$$1.state.set('value', e.target.value); | ||
|  |         self$$1.fire('change', e); | ||
|  |       }); | ||
|  |       return self$$1._super(); | ||
|  |     }, | ||
|  |     renderHtml: function () { | ||
|  |       var self$$1 = this, id = self$$1._id, settings = self$$1.settings, prefix = self$$1.classPrefix; | ||
|  |       var value = self$$1.state.get('value') || ''; | ||
|  |       var icon, text, openBtnHtml = '', extraAttrs = '', statusHtml = ''; | ||
|  |       if ('spellcheck' in settings) { | ||
|  |         extraAttrs += ' spellcheck="' + settings.spellcheck + '"'; | ||
|  |       } | ||
|  |       if (settings.maxLength) { | ||
|  |         extraAttrs += ' maxlength="' + settings.maxLength + '"'; | ||
|  |       } | ||
|  |       if (settings.size) { | ||
|  |         extraAttrs += ' size="' + settings.size + '"'; | ||
|  |       } | ||
|  |       if (settings.subtype) { | ||
|  |         extraAttrs += ' type="' + settings.subtype + '"'; | ||
|  |       } | ||
|  |       statusHtml = '<i id="' + id + '-status" class="mce-status mce-ico" style="display: none"></i>'; | ||
|  |       if (self$$1.disabled()) { | ||
|  |         extraAttrs += ' disabled="disabled"'; | ||
|  |       } | ||
|  |       icon = settings.icon; | ||
|  |       if (icon && icon !== 'caret') { | ||
|  |         icon = prefix + 'ico ' + prefix + 'i-' + settings.icon; | ||
|  |       } | ||
|  |       text = self$$1.state.get('text'); | ||
|  |       if (icon || text) { | ||
|  |         openBtnHtml = '<div id="' + id + '-open" class="' + prefix + 'btn ' + prefix + 'open" tabIndex="-1" role="button">' + '<button id="' + id + '-action" type="button" hidefocus="1" tabindex="-1">' + (icon !== 'caret' ? '<i class="' + icon + '"></i>' : '<i class="' + prefix + 'caret"></i>') + (text ? (icon ? ' ' : '') + text : '') + '</button>' + '</div>'; | ||
|  |         self$$1.classes.add('has-open'); | ||
|  |       } | ||
|  |       return '<div id="' + id + '" class="' + self$$1.classes + '">' + '<input id="' + id + '-inp" class="' + prefix + 'textbox" value="' + self$$1.encode(value, false) + '" hidefocus="1"' + extraAttrs + ' placeholder="' + self$$1.encode(settings.placeholder) + '" />' + statusHtml + openBtnHtml + '</div>'; | ||
|  |     }, | ||
|  |     value: function (value) { | ||
|  |       if (arguments.length) { | ||
|  |         this.state.set('value', value); | ||
|  |         return this; | ||
|  |       } | ||
|  |       if (this.state.get('rendered')) { | ||
|  |         this.state.set('value', this.getEl('inp').value); | ||
|  |       } | ||
|  |       return this.state.get('value'); | ||
|  |     }, | ||
|  |     showAutoComplete: function (items, term) { | ||
|  |       var self$$1 = this; | ||
|  |       if (items.length === 0) { | ||
|  |         self$$1.hideMenu(); | ||
|  |         return; | ||
|  |       } | ||
|  |       var insert = function (value, title) { | ||
|  |         return function () { | ||
|  |           self$$1.fire('selectitem', { | ||
|  |             title: title, | ||
|  |             value: value | ||
|  |           }); | ||
|  |         }; | ||
|  |       }; | ||
|  |       if (self$$1.menu) { | ||
|  |         self$$1.menu.items().remove(); | ||
|  |       } else { | ||
|  |         self$$1.menu = global$11.create({ | ||
|  |           type: 'menu', | ||
|  |           classes: 'combobox-menu', | ||
|  |           layout: 'flow' | ||
|  |         }).parent(self$$1).renderTo(); | ||
|  |       } | ||
|  |       global$4.each(items, function (item) { | ||
|  |         self$$1.menu.add({ | ||
|  |           text: item.title, | ||
|  |           url: item.previewUrl, | ||
|  |           match: term, | ||
|  |           classes: 'menu-item-ellipsis', | ||
|  |           onclick: insert(item.value, item.title) | ||
|  |         }); | ||
|  |       }); | ||
|  |       self$$1.menu.renderNew(); | ||
|  |       self$$1.hideMenu(); | ||
|  |       self$$1.menu.on('cancel', function (e) { | ||
|  |         if (e.control.parent() === self$$1.menu) { | ||
|  |           e.stopPropagation(); | ||
|  |           self$$1.focus(); | ||
|  |           self$$1.hideMenu(); | ||
|  |         } | ||
|  |       }); | ||
|  |       self$$1.menu.on('select', function () { | ||
|  |         self$$1.focus(); | ||
|  |       }); | ||
|  |       var maxW = self$$1.layoutRect().w; | ||
|  |       self$$1.menu.layoutRect({ | ||
|  |         w: maxW, | ||
|  |         minW: 0, | ||
|  |         maxW: maxW | ||
|  |       }); | ||
|  |       self$$1.menu.repaint(); | ||
|  |       self$$1.menu.reflow(); | ||
|  |       self$$1.menu.show(); | ||
|  |       self$$1.menu.moveRel(self$$1.getEl(), self$$1.isRtl() ? [ | ||
|  |         'br-tr', | ||
|  |         'tr-br' | ||
|  |       ] : [ | ||
|  |         'bl-tl', | ||
|  |         'tl-bl' | ||
|  |       ]); | ||
|  |     }, | ||
|  |     hideMenu: function () { | ||
|  |       if (this.menu) { | ||
|  |         this.menu.hide(); | ||
|  |       } | ||
|  |     }, | ||
|  |     bindStates: function () { | ||
|  |       var self$$1 = this; | ||
|  |       self$$1.state.on('change:value', function (e) { | ||
|  |         if (self$$1.getEl('inp').value !== e.value) { | ||
|  |           self$$1.getEl('inp').value = e.value; | ||
|  |         } | ||
|  |       }); | ||
|  |       self$$1.state.on('change:disabled', function (e) { | ||
|  |         self$$1.getEl('inp').disabled = e.value; | ||
|  |       }); | ||
|  |       self$$1.state.on('change:statusLevel', function (e) { | ||
|  |         var statusIconElm = self$$1.getEl('status'); | ||
|  |         var prefix = self$$1.classPrefix, value = e.value; | ||
|  |         funcs.css(statusIconElm, 'display', value === 'none' ? 'none' : ''); | ||
|  |         funcs.toggleClass(statusIconElm, prefix + 'i-checkmark', value === 'ok'); | ||
|  |         funcs.toggleClass(statusIconElm, prefix + 'i-warning', value === 'warn'); | ||
|  |         funcs.toggleClass(statusIconElm, prefix + 'i-error', value === 'error'); | ||
|  |         self$$1.classes.toggle('has-status', value !== 'none'); | ||
|  |         self$$1.repaint(); | ||
|  |       }); | ||
|  |       funcs.on(self$$1.getEl('status'), 'mouseleave', function () { | ||
|  |         self$$1.tooltip().hide(); | ||
|  |       }); | ||
|  |       self$$1.on('cancel', function (e) { | ||
|  |         if (self$$1.menu && self$$1.menu.visible()) { | ||
|  |           e.stopPropagation(); | ||
|  |           self$$1.hideMenu(); | ||
|  |         } | ||
|  |       }); | ||
|  |       var focusIdx = function (idx, menu) { | ||
|  |         if (menu && menu.items().length > 0) { | ||
|  |           menu.items().eq(idx)[0].focus(); | ||
|  |         } | ||
|  |       }; | ||
|  |       self$$1.on('keydown', function (e) { | ||
|  |         var keyCode = e.keyCode; | ||
|  |         if (e.target.nodeName === 'INPUT') { | ||
|  |           if (keyCode === global$15.DOWN) { | ||
|  |             e.preventDefault(); | ||
|  |             self$$1.fire('autocomplete'); | ||
|  |             focusIdx(0, self$$1.menu); | ||
|  |           } else if (keyCode === global$15.UP) { | ||
|  |             e.preventDefault(); | ||
|  |             focusIdx(-1, self$$1.menu); | ||
|  |           } | ||
|  |         } | ||
|  |       }); | ||
|  |       return self$$1._super(); | ||
|  |     }, | ||
|  |     remove: function () { | ||
|  |       global$7(this.getEl('inp')).off(); | ||
|  |       if (this.menu) { | ||
|  |         this.menu.remove(); | ||
|  |       } | ||
|  |       this._super(); | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var ColorBox = ComboBox.extend({ | ||
|  |     init: function (settings) { | ||
|  |       var self = this; | ||
|  |       settings.spellcheck = false; | ||
|  |       if (settings.onaction) { | ||
|  |         settings.icon = 'none'; | ||
|  |       } | ||
|  |       self._super(settings); | ||
|  |       self.classes.add('colorbox'); | ||
|  |       self.on('change keyup postrender', function () { | ||
|  |         self.repaintColor(self.value()); | ||
|  |       }); | ||
|  |     }, | ||
|  |     repaintColor: function (value) { | ||
|  |       var openElm = this.getEl('open'); | ||
|  |       var elm = openElm ? openElm.getElementsByTagName('i')[0] : null; | ||
|  |       if (elm) { | ||
|  |         try { | ||
|  |           elm.style.background = value; | ||
|  |         } catch (ex) { | ||
|  |         } | ||
|  |       } | ||
|  |     }, | ||
|  |     bindStates: function () { | ||
|  |       var self = this; | ||
|  |       self.state.on('change:value', function (e) { | ||
|  |         if (self.state.get('rendered')) { | ||
|  |           self.repaintColor(e.value); | ||
|  |         } | ||
|  |       }); | ||
|  |       return self._super(); | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var PanelButton = Button.extend({ | ||
|  |     showPanel: function () { | ||
|  |       var self = this, settings = self.settings; | ||
|  |       self.classes.add('opened'); | ||
|  |       if (!self.panel) { | ||
|  |         var panelSettings = settings.panel; | ||
|  |         if (panelSettings.type) { | ||
|  |           panelSettings = { | ||
|  |             layout: 'grid', | ||
|  |             items: panelSettings | ||
|  |           }; | ||
|  |         } | ||
|  |         panelSettings.role = panelSettings.role || 'dialog'; | ||
|  |         panelSettings.popover = true; | ||
|  |         panelSettings.autohide = true; | ||
|  |         panelSettings.ariaRoot = true; | ||
|  |         self.panel = new FloatPanel(panelSettings).on('hide', function () { | ||
|  |           self.classes.remove('opened'); | ||
|  |         }).on('cancel', function (e) { | ||
|  |           e.stopPropagation(); | ||
|  |           self.focus(); | ||
|  |           self.hidePanel(); | ||
|  |         }).parent(self).renderTo(self.getContainerElm()); | ||
|  |         self.panel.fire('show'); | ||
|  |         self.panel.reflow(); | ||
|  |       } else { | ||
|  |         self.panel.show(); | ||
|  |       } | ||
|  |       var rtlRels = [ | ||
|  |         'bc-tc', | ||
|  |         'bc-tl', | ||
|  |         'bc-tr' | ||
|  |       ]; | ||
|  |       var ltrRels = [ | ||
|  |         'bc-tc', | ||
|  |         'bc-tr', | ||
|  |         'bc-tl', | ||
|  |         'tc-bc', | ||
|  |         'tc-br', | ||
|  |         'tc-bl' | ||
|  |       ]; | ||
|  |       var rel = self.panel.testMoveRel(self.getEl(), settings.popoverAlign || (self.isRtl() ? rtlRels : ltrRels)); | ||
|  |       self.panel.classes.toggle('start', rel.substr(-1) === 'l'); | ||
|  |       self.panel.classes.toggle('end', rel.substr(-1) === 'r'); | ||
|  |       var isTop = rel.substr(0, 1) === 't'; | ||
|  |       self.panel.classes.toggle('bottom', !isTop); | ||
|  |       self.panel.classes.toggle('top', isTop); | ||
|  |       self.panel.moveRel(self.getEl(), rel); | ||
|  |     }, | ||
|  |     hidePanel: function () { | ||
|  |       var self = this; | ||
|  |       if (self.panel) { | ||
|  |         self.panel.hide(); | ||
|  |       } | ||
|  |     }, | ||
|  |     postRender: function () { | ||
|  |       var self = this; | ||
|  |       self.aria('haspopup', true); | ||
|  |       self.on('click', function (e) { | ||
|  |         if (e.control === self) { | ||
|  |           if (self.panel && self.panel.visible()) { | ||
|  |             self.hidePanel(); | ||
|  |           } else { | ||
|  |             self.showPanel(); | ||
|  |             self.panel.focus(!!e.aria); | ||
|  |           } | ||
|  |         } | ||
|  |       }); | ||
|  |       return self._super(); | ||
|  |     }, | ||
|  |     remove: function () { | ||
|  |       if (this.panel) { | ||
|  |         this.panel.remove(); | ||
|  |         this.panel = null; | ||
|  |       } | ||
|  |       return this._super(); | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var DOM = global$2.DOM; | ||
|  |   var ColorButton = PanelButton.extend({ | ||
|  |     init: function (settings) { | ||
|  |       this._super(settings); | ||
|  |       this.classes.add('splitbtn'); | ||
|  |       this.classes.add('colorbutton'); | ||
|  |     }, | ||
|  |     color: function (color) { | ||
|  |       if (color) { | ||
|  |         this._color = color; | ||
|  |         this.getEl('preview').style.backgroundColor = color; | ||
|  |         return this; | ||
|  |       } | ||
|  |       return this._color; | ||
|  |     }, | ||
|  |     resetColor: function () { | ||
|  |       this._color = null; | ||
|  |       this.getEl('preview').style.backgroundColor = null; | ||
|  |       return this; | ||
|  |     }, | ||
|  |     renderHtml: function () { | ||
|  |       var self = this, id = self._id, prefix = self.classPrefix, text = self.state.get('text'); | ||
|  |       var icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : ''; | ||
|  |       var image = self.settings.image ? ' style="background-image: url(\'' + self.settings.image + '\')"' : ''; | ||
|  |       var textHtml = ''; | ||
|  |       if (text) { | ||
|  |         self.classes.add('btn-has-text'); | ||
|  |         textHtml = '<span class="' + prefix + 'txt">' + self.encode(text) + '</span>'; | ||
|  |       } | ||
|  |       return '<div id="' + id + '" class="' + self.classes + '" role="button" tabindex="-1" aria-haspopup="true">' + '<button role="presentation" hidefocus="1" type="button" tabindex="-1">' + (icon ? '<i class="' + icon + '"' + image + '></i>' : '') + '<span id="' + id + '-preview" class="' + prefix + 'preview"></span>' + textHtml + '</button>' + '<button type="button" class="' + prefix + 'open" hidefocus="1" tabindex="-1">' + ' <i class="' + prefix + 'caret"></i>' + '</button>' + '</div>'; | ||
|  |     }, | ||
|  |     postRender: function () { | ||
|  |       var self = this, onClickHandler = self.settings.onclick; | ||
|  |       self.on('click', function (e) { | ||
|  |         if (e.aria && e.aria.key === 'down') { | ||
|  |           return; | ||
|  |         } | ||
|  |         if (e.control === self && !DOM.getParent(e.target, '.' + self.classPrefix + 'open')) { | ||
|  |           e.stopImmediatePropagation(); | ||
|  |           onClickHandler.call(self, e); | ||
|  |         } | ||
|  |       }); | ||
|  |       delete self.settings.onclick; | ||
|  |       return self._super(); | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var global$16 = tinymce.util.Tools.resolve('tinymce.util.Color'); | ||
|  | 
 | ||
|  |   var ColorPicker = Widget.extend({ | ||
|  |     Defaults: { classes: 'widget colorpicker' }, | ||
|  |     init: function (settings) { | ||
|  |       this._super(settings); | ||
|  |     }, | ||
|  |     postRender: function () { | ||
|  |       var self = this; | ||
|  |       var color = self.color(); | ||
|  |       var hsv, hueRootElm, huePointElm, svRootElm, svPointElm; | ||
|  |       hueRootElm = self.getEl('h'); | ||
|  |       huePointElm = self.getEl('hp'); | ||
|  |       svRootElm = self.getEl('sv'); | ||
|  |       svPointElm = self.getEl('svp'); | ||
|  |       function getPos(elm, event) { | ||
|  |         var pos = funcs.getPos(elm); | ||
|  |         var x, y; | ||
|  |         x = event.pageX - pos.x; | ||
|  |         y = event.pageY - pos.y; | ||
|  |         x = Math.max(0, Math.min(x / elm.clientWidth, 1)); | ||
|  |         y = Math.max(0, Math.min(y / elm.clientHeight, 1)); | ||
|  |         return { | ||
|  |           x: x, | ||
|  |           y: y | ||
|  |         }; | ||
|  |       } | ||
|  |       function updateColor(hsv, hueUpdate) { | ||
|  |         var hue = (360 - hsv.h) / 360; | ||
|  |         funcs.css(huePointElm, { top: hue * 100 + '%' }); | ||
|  |         if (!hueUpdate) { | ||
|  |           funcs.css(svPointElm, { | ||
|  |             left: hsv.s + '%', | ||
|  |             top: 100 - hsv.v + '%' | ||
|  |           }); | ||
|  |         } | ||
|  |         svRootElm.style.background = global$16({ | ||
|  |           s: 100, | ||
|  |           v: 100, | ||
|  |           h: hsv.h | ||
|  |         }).toHex(); | ||
|  |         self.color().parse({ | ||
|  |           s: hsv.s, | ||
|  |           v: hsv.v, | ||
|  |           h: hsv.h | ||
|  |         }); | ||
|  |       } | ||
|  |       function updateSaturationAndValue(e) { | ||
|  |         var pos; | ||
|  |         pos = getPos(svRootElm, e); | ||
|  |         hsv.s = pos.x * 100; | ||
|  |         hsv.v = (1 - pos.y) * 100; | ||
|  |         updateColor(hsv); | ||
|  |         self.fire('change'); | ||
|  |       } | ||
|  |       function updateHue(e) { | ||
|  |         var pos; | ||
|  |         pos = getPos(hueRootElm, e); | ||
|  |         hsv = color.toHsv(); | ||
|  |         hsv.h = (1 - pos.y) * 360; | ||
|  |         updateColor(hsv, true); | ||
|  |         self.fire('change'); | ||
|  |       } | ||
|  |       self._repaint = function () { | ||
|  |         hsv = color.toHsv(); | ||
|  |         updateColor(hsv); | ||
|  |       }; | ||
|  |       self._super(); | ||
|  |       self._svdraghelper = new DragHelper(self._id + '-sv', { | ||
|  |         start: updateSaturationAndValue, | ||
|  |         drag: updateSaturationAndValue | ||
|  |       }); | ||
|  |       self._hdraghelper = new DragHelper(self._id + '-h', { | ||
|  |         start: updateHue, | ||
|  |         drag: updateHue | ||
|  |       }); | ||
|  |       self._repaint(); | ||
|  |     }, | ||
|  |     rgb: function () { | ||
|  |       return this.color().toRgb(); | ||
|  |     }, | ||
|  |     value: function (value) { | ||
|  |       var self = this; | ||
|  |       if (arguments.length) { | ||
|  |         self.color().parse(value); | ||
|  |         if (self._rendered) { | ||
|  |           self._repaint(); | ||
|  |         } | ||
|  |       } else { | ||
|  |         return self.color().toHex(); | ||
|  |       } | ||
|  |     }, | ||
|  |     color: function () { | ||
|  |       if (!this._color) { | ||
|  |         this._color = global$16(); | ||
|  |       } | ||
|  |       return this._color; | ||
|  |     }, | ||
|  |     renderHtml: function () { | ||
|  |       var self = this; | ||
|  |       var id = self._id; | ||
|  |       var prefix = self.classPrefix; | ||
|  |       var hueHtml; | ||
|  |       var stops = '#ff0000,#ff0080,#ff00ff,#8000ff,#0000ff,#0080ff,#00ffff,#00ff80,#00ff00,#80ff00,#ffff00,#ff8000,#ff0000'; | ||
|  |       function getOldIeFallbackHtml() { | ||
|  |         var i, l, html = '', gradientPrefix, stopsList; | ||
|  |         gradientPrefix = 'filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='; | ||
|  |         stopsList = stops.split(','); | ||
|  |         for (i = 0, l = stopsList.length - 1; i < l; i++) { | ||
|  |           html += '<div class="' + prefix + 'colorpicker-h-chunk" style="' + 'height:' + 100 / l + '%;' + gradientPrefix + stopsList[i] + ',endColorstr=' + stopsList[i + 1] + ');' + '-ms-' + gradientPrefix + stopsList[i] + ',endColorstr=' + stopsList[i + 1] + ')' + '"></div>'; | ||
|  |         } | ||
|  |         return html; | ||
|  |       } | ||
|  |       var gradientCssText = 'background: -ms-linear-gradient(top,' + stops + ');' + 'background: linear-gradient(to bottom,' + stops + ');'; | ||
|  |       hueHtml = '<div id="' + id + '-h" class="' + prefix + 'colorpicker-h" style="' + gradientCssText + '">' + getOldIeFallbackHtml() + '<div id="' + id + '-hp" class="' + prefix + 'colorpicker-h-marker"></div>' + '</div>'; | ||
|  |       return '<div id="' + id + '" class="' + self.classes + '">' + '<div id="' + id + '-sv" class="' + prefix + 'colorpicker-sv">' + '<div class="' + prefix + 'colorpicker-overlay1">' + '<div class="' + prefix + 'colorpicker-overlay2">' + '<div id="' + id + '-svp" class="' + prefix + 'colorpicker-selector1">' + '<div class="' + prefix + 'colorpicker-selector2"></div>' + '</div>' + '</div>' + '</div>' + '</div>' + hueHtml + '</div>'; | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var DropZone = Widget.extend({ | ||
|  |     init: function (settings) { | ||
|  |       var self = this; | ||
|  |       settings = global$4.extend({ | ||
|  |         height: 100, | ||
|  |         text: 'Drop an image here', | ||
|  |         multiple: false, | ||
|  |         accept: null | ||
|  |       }, settings); | ||
|  |       self._super(settings); | ||
|  |       self.classes.add('dropzone'); | ||
|  |       if (settings.multiple) { | ||
|  |         self.classes.add('multiple'); | ||
|  |       } | ||
|  |     }, | ||
|  |     renderHtml: function () { | ||
|  |       var self = this; | ||
|  |       var attrs, elm; | ||
|  |       var cfg = self.settings; | ||
|  |       attrs = { | ||
|  |         id: self._id, | ||
|  |         hidefocus: '1' | ||
|  |       }; | ||
|  |       elm = funcs.create('div', attrs, '<span>' + this.translate(cfg.text) + '</span>'); | ||
|  |       if (cfg.height) { | ||
|  |         funcs.css(elm, 'height', cfg.height + 'px'); | ||
|  |       } | ||
|  |       if (cfg.width) { | ||
|  |         funcs.css(elm, 'width', cfg.width + 'px'); | ||
|  |       } | ||
|  |       elm.className = self.classes; | ||
|  |       return elm.outerHTML; | ||
|  |     }, | ||
|  |     postRender: function () { | ||
|  |       var self = this; | ||
|  |       var toggleDragClass = function (e) { | ||
|  |         e.preventDefault(); | ||
|  |         self.classes.toggle('dragenter'); | ||
|  |         self.getEl().className = self.classes; | ||
|  |       }; | ||
|  |       var filter = function (files) { | ||
|  |         var accept = self.settings.accept; | ||
|  |         if (typeof accept !== 'string') { | ||
|  |           return files; | ||
|  |         } | ||
|  |         var re = new RegExp('(' + accept.split(/\s*,\s*/).join('|') + ')$', 'i'); | ||
|  |         return global$4.grep(files, function (file) { | ||
|  |           return re.test(file.name); | ||
|  |         }); | ||
|  |       }; | ||
|  |       self._super(); | ||
|  |       self.$el.on('dragover', function (e) { | ||
|  |         e.preventDefault(); | ||
|  |       }); | ||
|  |       self.$el.on('dragenter', toggleDragClass); | ||
|  |       self.$el.on('dragleave', toggleDragClass); | ||
|  |       self.$el.on('drop', function (e) { | ||
|  |         e.preventDefault(); | ||
|  |         if (self.state.get('disabled')) { | ||
|  |           return; | ||
|  |         } | ||
|  |         var files = filter(e.dataTransfer.files); | ||
|  |         self.value = function () { | ||
|  |           if (!files.length) { | ||
|  |             return null; | ||
|  |           } else if (self.settings.multiple) { | ||
|  |             return files; | ||
|  |           } else { | ||
|  |             return files[0]; | ||
|  |           } | ||
|  |         }; | ||
|  |         if (files.length) { | ||
|  |           self.fire('change', e); | ||
|  |         } | ||
|  |       }); | ||
|  |     }, | ||
|  |     remove: function () { | ||
|  |       this.$el.off(); | ||
|  |       this._super(); | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var Path = Widget.extend({ | ||
|  |     init: function (settings) { | ||
|  |       var self = this; | ||
|  |       if (!settings.delimiter) { | ||
|  |         settings.delimiter = '\xBB'; | ||
|  |       } | ||
|  |       self._super(settings); | ||
|  |       self.classes.add('path'); | ||
|  |       self.canFocus = true; | ||
|  |       self.on('click', function (e) { | ||
|  |         var index; | ||
|  |         var target = e.target; | ||
|  |         if (index = target.getAttribute('data-index')) { | ||
|  |           self.fire('select', { | ||
|  |             value: self.row()[index], | ||
|  |             index: index | ||
|  |           }); | ||
|  |         } | ||
|  |       }); | ||
|  |       self.row(self.settings.row); | ||
|  |     }, | ||
|  |     focus: function () { | ||
|  |       var self = this; | ||
|  |       self.getEl().firstChild.focus(); | ||
|  |       return self; | ||
|  |     }, | ||
|  |     row: function (row) { | ||
|  |       if (!arguments.length) { | ||
|  |         return this.state.get('row'); | ||
|  |       } | ||
|  |       this.state.set('row', row); | ||
|  |       return this; | ||
|  |     }, | ||
|  |     renderHtml: function () { | ||
|  |       var self = this; | ||
|  |       return '<div id="' + self._id + '" class="' + self.classes + '">' + self._getDataPathHtml(self.state.get('row')) + '</div>'; | ||
|  |     }, | ||
|  |     bindStates: function () { | ||
|  |       var self = this; | ||
|  |       self.state.on('change:row', function (e) { | ||
|  |         self.innerHtml(self._getDataPathHtml(e.value)); | ||
|  |       }); | ||
|  |       return self._super(); | ||
|  |     }, | ||
|  |     _getDataPathHtml: function (data) { | ||
|  |       var self = this; | ||
|  |       var parts = data || []; | ||
|  |       var i, l, html = ''; | ||
|  |       var prefix = self.classPrefix; | ||
|  |       for (i = 0, l = parts.length; i < l; i++) { | ||
|  |         html += (i > 0 ? '<div class="' + prefix + 'divider" aria-hidden="true"> ' + self.settings.delimiter + ' </div>' : '') + '<div role="button" class="' + prefix + 'path-item' + (i === l - 1 ? ' ' + prefix + 'last' : '') + '" data-index="' + i + '" tabindex="-1" id="' + self._id + '-' + i + '" aria-level="' + (i + 1) + '">' + parts[i].name + '</div>'; | ||
|  |       } | ||
|  |       if (!html) { | ||
|  |         html = '<div class="' + prefix + 'path-item">\xA0</div>'; | ||
|  |       } | ||
|  |       return html; | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var ElementPath = Path.extend({ | ||
|  |     postRender: function () { | ||
|  |       var self = this, editor = self.settings.editor; | ||
|  |       function isHidden(elm) { | ||
|  |         if (elm.nodeType === 1) { | ||
|  |           if (elm.nodeName === 'BR' || !!elm.getAttribute('data-mce-bogus')) { | ||
|  |             return true; | ||
|  |           } | ||
|  |           if (elm.getAttribute('data-mce-type') === 'bookmark') { | ||
|  |             return true; | ||
|  |           } | ||
|  |         } | ||
|  |         return false; | ||
|  |       } | ||
|  |       if (editor.settings.elementpath !== false) { | ||
|  |         self.on('select', function (e) { | ||
|  |           editor.focus(); | ||
|  |           editor.selection.select(this.row()[e.index].element); | ||
|  |           editor.nodeChanged(); | ||
|  |         }); | ||
|  |         editor.on('nodeChange', function (e) { | ||
|  |           var outParents = []; | ||
|  |           var parents = e.parents; | ||
|  |           var i = parents.length; | ||
|  |           while (i--) { | ||
|  |             if (parents[i].nodeType === 1 && !isHidden(parents[i])) { | ||
|  |               var args = editor.fire('ResolveName', { | ||
|  |                 name: parents[i].nodeName.toLowerCase(), | ||
|  |                 target: parents[i] | ||
|  |               }); | ||
|  |               if (!args.isDefaultPrevented()) { | ||
|  |                 outParents.push({ | ||
|  |                   name: args.name, | ||
|  |                   element: parents[i] | ||
|  |                 }); | ||
|  |               } | ||
|  |               if (args.isPropagationStopped()) { | ||
|  |                 break; | ||
|  |               } | ||
|  |             } | ||
|  |           } | ||
|  |           self.row(outParents); | ||
|  |         }); | ||
|  |       } | ||
|  |       return self._super(); | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var FormItem = Container.extend({ | ||
|  |     Defaults: { | ||
|  |       layout: 'flex', | ||
|  |       align: 'center', | ||
|  |       defaults: { flex: 1 } | ||
|  |     }, | ||
|  |     renderHtml: function () { | ||
|  |       var self = this, layout = self._layout, prefix = self.classPrefix; | ||
|  |       self.classes.add('formitem'); | ||
|  |       layout.preRender(self); | ||
|  |       return '<div id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1">' + (self.settings.title ? '<div id="' + self._id + '-title" class="' + prefix + 'title">' + self.settings.title + '</div>' : '') + '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</div>'; | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var Form = Container.extend({ | ||
|  |     Defaults: { | ||
|  |       containerCls: 'form', | ||
|  |       layout: 'flex', | ||
|  |       direction: 'column', | ||
|  |       align: 'stretch', | ||
|  |       flex: 1, | ||
|  |       padding: 15, | ||
|  |       labelGap: 30, | ||
|  |       spacing: 10, | ||
|  |       callbacks: { | ||
|  |         submit: function () { | ||
|  |           this.submit(); | ||
|  |         } | ||
|  |       } | ||
|  |     }, | ||
|  |     preRender: function () { | ||
|  |       var self = this, items = self.items(); | ||
|  |       if (!self.settings.formItemDefaults) { | ||
|  |         self.settings.formItemDefaults = { | ||
|  |           layout: 'flex', | ||
|  |           autoResize: 'overflow', | ||
|  |           defaults: { flex: 1 } | ||
|  |         }; | ||
|  |       } | ||
|  |       items.each(function (ctrl) { | ||
|  |         var formItem; | ||
|  |         var label = ctrl.settings.label; | ||
|  |         if (label) { | ||
|  |           formItem = new FormItem(global$4.extend({ | ||
|  |             items: { | ||
|  |               type: 'label', | ||
|  |               id: ctrl._id + '-l', | ||
|  |               text: label, | ||
|  |               flex: 0, | ||
|  |               forId: ctrl._id, | ||
|  |               disabled: ctrl.disabled() | ||
|  |             } | ||
|  |           }, self.settings.formItemDefaults)); | ||
|  |           formItem.type = 'formitem'; | ||
|  |           ctrl.aria('labelledby', ctrl._id + '-l'); | ||
|  |           if (typeof ctrl.settings.flex === 'undefined') { | ||
|  |             ctrl.settings.flex = 1; | ||
|  |           } | ||
|  |           self.replace(ctrl, formItem); | ||
|  |           formItem.add(ctrl); | ||
|  |         } | ||
|  |       }); | ||
|  |     }, | ||
|  |     submit: function () { | ||
|  |       return this.fire('submit', { data: this.toJSON() }); | ||
|  |     }, | ||
|  |     postRender: function () { | ||
|  |       var self = this; | ||
|  |       self._super(); | ||
|  |       self.fromJSON(self.settings.data); | ||
|  |     }, | ||
|  |     bindStates: function () { | ||
|  |       var self = this; | ||
|  |       self._super(); | ||
|  |       function recalcLabels() { | ||
|  |         var maxLabelWidth = 0; | ||
|  |         var labels = []; | ||
|  |         var i, labelGap, items; | ||
|  |         if (self.settings.labelGapCalc === false) { | ||
|  |           return; | ||
|  |         } | ||
|  |         if (self.settings.labelGapCalc === 'children') { | ||
|  |           items = self.find('formitem'); | ||
|  |         } else { | ||
|  |           items = self.items(); | ||
|  |         } | ||
|  |         items.filter('formitem').each(function (item) { | ||
|  |           var labelCtrl = item.items()[0], labelWidth = labelCtrl.getEl().clientWidth; | ||
|  |           maxLabelWidth = labelWidth > maxLabelWidth ? labelWidth : maxLabelWidth; | ||
|  |           labels.push(labelCtrl); | ||
|  |         }); | ||
|  |         labelGap = self.settings.labelGap || 0; | ||
|  |         i = labels.length; | ||
|  |         while (i--) { | ||
|  |           labels[i].settings.minWidth = maxLabelWidth + labelGap; | ||
|  |         } | ||
|  |       } | ||
|  |       self.on('show', recalcLabels); | ||
|  |       recalcLabels(); | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var FieldSet = Form.extend({ | ||
|  |     Defaults: { | ||
|  |       containerCls: 'fieldset', | ||
|  |       layout: 'flex', | ||
|  |       direction: 'column', | ||
|  |       align: 'stretch', | ||
|  |       flex: 1, | ||
|  |       padding: '25 15 5 15', | ||
|  |       labelGap: 30, | ||
|  |       spacing: 10, | ||
|  |       border: 1 | ||
|  |     }, | ||
|  |     renderHtml: function () { | ||
|  |       var self = this, layout = self._layout, prefix = self.classPrefix; | ||
|  |       self.preRender(); | ||
|  |       layout.preRender(self); | ||
|  |       return '<fieldset id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1">' + (self.settings.title ? '<legend id="' + self._id + '-title" class="' + prefix + 'fieldset-title">' + self.settings.title + '</legend>' : '') + '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</fieldset>'; | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var unique$1 = 0; | ||
|  |   var generate = function (prefix) { | ||
|  |     var date = new Date(); | ||
|  |     var time = date.getTime(); | ||
|  |     var random = Math.floor(Math.random() * 1000000000); | ||
|  |     unique$1++; | ||
|  |     return prefix + '_' + random + unique$1 + String(time); | ||
|  |   }; | ||
|  | 
 | ||
|  |   var fromHtml = function (html, scope) { | ||
|  |     var doc = scope || document; | ||
|  |     var div = doc.createElement('div'); | ||
|  |     div.innerHTML = html; | ||
|  |     if (!div.hasChildNodes() || div.childNodes.length > 1) { | ||
|  |       console.error('HTML does not have a single root node', html); | ||
|  |       throw 'HTML must have a single root node'; | ||
|  |     } | ||
|  |     return fromDom(div.childNodes[0]); | ||
|  |   }; | ||
|  |   var fromTag = function (tag, scope) { | ||
|  |     var doc = scope || document; | ||
|  |     var node = doc.createElement(tag); | ||
|  |     return fromDom(node); | ||
|  |   }; | ||
|  |   var fromText = function (text, scope) { | ||
|  |     var doc = scope || document; | ||
|  |     var node = doc.createTextNode(text); | ||
|  |     return fromDom(node); | ||
|  |   }; | ||
|  |   var fromDom = function (node) { | ||
|  |     if (node === null || node === undefined) | ||
|  |       throw new Error('Node cannot be null or undefined'); | ||
|  |     return { dom: constant(node) }; | ||
|  |   }; | ||
|  |   var fromPoint = function (docElm, x, y) { | ||
|  |     var doc = docElm.dom(); | ||
|  |     return Option.from(doc.elementFromPoint(x, y)).map(fromDom); | ||
|  |   }; | ||
|  |   var Element$$1 = { | ||
|  |     fromHtml: fromHtml, | ||
|  |     fromTag: fromTag, | ||
|  |     fromText: fromText, | ||
|  |     fromDom: fromDom, | ||
|  |     fromPoint: fromPoint | ||
|  |   }; | ||
|  | 
 | ||
|  |   var cached = function (f) { | ||
|  |     var called = false; | ||
|  |     var r; | ||
|  |     return function () { | ||
|  |       var args = []; | ||
|  |       for (var _i = 0; _i < arguments.length; _i++) { | ||
|  |         args[_i] = arguments[_i]; | ||
|  |       } | ||
|  |       if (!called) { | ||
|  |         called = true; | ||
|  |         r = f.apply(null, args); | ||
|  |       } | ||
|  |       return r; | ||
|  |     }; | ||
|  |   }; | ||
|  | 
 | ||
|  |   var $_2jrgnk1apjjgwek8y = { | ||
|  |     ATTRIBUTE: Node.ATTRIBUTE_NODE, | ||
|  |     CDATA_SECTION: Node.CDATA_SECTION_NODE, | ||
|  |     COMMENT: Node.COMMENT_NODE, | ||
|  |     DOCUMENT: Node.DOCUMENT_NODE, | ||
|  |     DOCUMENT_TYPE: Node.DOCUMENT_TYPE_NODE, | ||
|  |     DOCUMENT_FRAGMENT: Node.DOCUMENT_FRAGMENT_NODE, | ||
|  |     ELEMENT: Node.ELEMENT_NODE, | ||
|  |     TEXT: Node.TEXT_NODE, | ||
|  |     PROCESSING_INSTRUCTION: Node.PROCESSING_INSTRUCTION_NODE, | ||
|  |     ENTITY_REFERENCE: Node.ENTITY_REFERENCE_NODE, | ||
|  |     ENTITY: Node.ENTITY_NODE, | ||
|  |     NOTATION: Node.NOTATION_NODE | ||
|  |   }; | ||
|  | 
 | ||
|  |   var name = function (element) { | ||
|  |     var r = element.dom().nodeName; | ||
|  |     return r.toLowerCase(); | ||
|  |   }; | ||
|  |   var type = function (element) { | ||
|  |     return element.dom().nodeType; | ||
|  |   }; | ||
|  |   var value = function (element) { | ||
|  |     return element.dom().nodeValue; | ||
|  |   }; | ||
|  |   var isType$2 = function (t) { | ||
|  |     return function (element) { | ||
|  |       return type(element) === t; | ||
|  |     }; | ||
|  |   }; | ||
|  |   var isComment = function (element) { | ||
|  |     return type(element) === $_2jrgnk1apjjgwek8y.COMMENT || name(element) === '#comment'; | ||
|  |   }; | ||
|  |   var isElement = isType$2($_2jrgnk1apjjgwek8y.ELEMENT); | ||
|  |   var isText = isType$2($_2jrgnk1apjjgwek8y.TEXT); | ||
|  |   var isDocument = isType$2($_2jrgnk1apjjgwek8y.DOCUMENT); | ||
|  |   var $_fv3as1aojjgwek8x = { | ||
|  |     name: name, | ||
|  |     type: type, | ||
|  |     value: value, | ||
|  |     isElement: isElement, | ||
|  |     isText: isText, | ||
|  |     isDocument: isDocument, | ||
|  |     isComment: isComment | ||
|  |   }; | ||
|  | 
 | ||
|  |   var inBody = function (element) { | ||
|  |     var dom = $_fv3as1aojjgwek8x.isText(element) ? element.dom().parentNode : element.dom(); | ||
|  |     return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom); | ||
|  |   }; | ||
|  |   var body = cached(function () { | ||
|  |     return getBody(Element$$1.fromDom(document)); | ||
|  |   }); | ||
|  |   var getBody = function (doc) { | ||
|  |     var body = doc.dom().body; | ||
|  |     if (body === null || body === undefined) | ||
|  |       throw 'Body is not available yet'; | ||
|  |     return Element$$1.fromDom(body); | ||
|  |   }; | ||
|  |   var $_d2glpe1amjjgwek8t = { | ||
|  |     body: body, | ||
|  |     getBody: getBody, | ||
|  |     inBody: inBody | ||
|  |   }; | ||
|  | 
 | ||
|  |   var Immutable = function () { | ||
|  |     var fields = []; | ||
|  |     for (var _i = 0; _i < arguments.length; _i++) { | ||
|  |       fields[_i] = arguments[_i]; | ||
|  |     } | ||
|  |     return function () { | ||
|  |       var values = []; | ||
|  |       for (var _i = 0; _i < arguments.length; _i++) { | ||
|  |         values[_i] = arguments[_i]; | ||
|  |       } | ||
|  |       if (fields.length !== values.length) { | ||
|  |         throw new Error('Wrong number of arguments to struct. Expected "[' + fields.length + ']", got ' + values.length + ' arguments'); | ||
|  |       } | ||
|  |       var struct = {}; | ||
|  |       each(fields, function (name, i) { | ||
|  |         struct[name] = constant(values[i]); | ||
|  |       }); | ||
|  |       return struct; | ||
|  |     }; | ||
|  |   }; | ||
|  | 
 | ||
|  |   var toArray = function (target, f) { | ||
|  |     var r = []; | ||
|  |     var recurse = function (e) { | ||
|  |       r.push(e); | ||
|  |       return f(e); | ||
|  |     }; | ||
|  |     var cur = f(target); | ||
|  |     do { | ||
|  |       cur = cur.bind(recurse); | ||
|  |     } while (cur.isSome()); | ||
|  |     return r; | ||
|  |   }; | ||
|  |   var $_607sf01awjjgweka0 = { toArray: toArray }; | ||
|  | 
 | ||
|  |   var node = function () { | ||
|  |     var f = $_8wnjhx19gjjgwek54.getOrDie('Node'); | ||
|  |     return f; | ||
|  |   }; | ||
|  |   var compareDocumentPosition = function (a, b, match) { | ||
|  |     return (a.compareDocumentPosition(b) & match) !== 0; | ||
|  |   }; | ||
|  |   var documentPositionPreceding = function (a, b) { | ||
|  |     return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING); | ||
|  |   }; | ||
|  |   var documentPositionContainedBy = function (a, b) { | ||
|  |     return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY); | ||
|  |   }; | ||
|  |   var $_d0o64o1ayjjgwekaa = { | ||
|  |     documentPositionPreceding: documentPositionPreceding, | ||
|  |     documentPositionContainedBy: documentPositionContainedBy | ||
|  |   }; | ||
|  | 
 | ||
|  |   var firstMatch = function (regexes, s) { | ||
|  |     for (var i = 0; i < regexes.length; i++) { | ||
|  |       var x = regexes[i]; | ||
|  |       if (x.test(s)) | ||
|  |         return x; | ||
|  |     } | ||
|  |     return undefined; | ||
|  |   }; | ||
|  |   var find$2 = function (regexes, agent) { | ||
|  |     var r = firstMatch(regexes, agent); | ||
|  |     if (!r) | ||
|  |       return { | ||
|  |         major: 0, | ||
|  |         minor: 0 | ||
|  |       }; | ||
|  |     var group = function (i) { | ||
|  |       return Number(agent.replace(r, '$' + i)); | ||
|  |     }; | ||
|  |     return nu(group(1), group(2)); | ||
|  |   }; | ||
|  |   var detect = function (versionRegexes, agent) { | ||
|  |     var cleanedAgent = String(agent).toLowerCase(); | ||
|  |     if (versionRegexes.length === 0) | ||
|  |       return unknown(); | ||
|  |     return find$2(versionRegexes, cleanedAgent); | ||
|  |   }; | ||
|  |   var unknown = function () { | ||
|  |     return nu(0, 0); | ||
|  |   }; | ||
|  |   var nu = function (major, minor) { | ||
|  |     return { | ||
|  |       major: major, | ||
|  |       minor: minor | ||
|  |     }; | ||
|  |   }; | ||
|  |   var $_bhlk9t1b2jjgwekaq = { | ||
|  |     nu: nu, | ||
|  |     detect: detect, | ||
|  |     unknown: unknown | ||
|  |   }; | ||
|  | 
 | ||
|  |   var edge = 'Edge'; | ||
|  |   var chrome = 'Chrome'; | ||
|  |   var ie = 'IE'; | ||
|  |   var opera = 'Opera'; | ||
|  |   var firefox = 'Firefox'; | ||
|  |   var safari = 'Safari'; | ||
|  |   var isBrowser = function (name, current) { | ||
|  |     return function () { | ||
|  |       return current === name; | ||
|  |     }; | ||
|  |   }; | ||
|  |   var unknown$1 = function () { | ||
|  |     return nu$1({ | ||
|  |       current: undefined, | ||
|  |       version: $_bhlk9t1b2jjgwekaq.unknown() | ||
|  |     }); | ||
|  |   }; | ||
|  |   var nu$1 = function (info) { | ||
|  |     var current = info.current; | ||
|  |     var version = info.version; | ||
|  |     return { | ||
|  |       current: current, | ||
|  |       version: version, | ||
|  |       isEdge: isBrowser(edge, current), | ||
|  |       isChrome: isBrowser(chrome, current), | ||
|  |       isIE: isBrowser(ie, current), | ||
|  |       isOpera: isBrowser(opera, current), | ||
|  |       isFirefox: isBrowser(firefox, current), | ||
|  |       isSafari: isBrowser(safari, current) | ||
|  |     }; | ||
|  |   }; | ||
|  |   var $_3j4jht1b1jjgwekal = { | ||
|  |     unknown: unknown$1, | ||
|  |     nu: nu$1, | ||
|  |     edge: constant(edge), | ||
|  |     chrome: constant(chrome), | ||
|  |     ie: constant(ie), | ||
|  |     opera: constant(opera), | ||
|  |     firefox: constant(firefox), | ||
|  |     safari: constant(safari) | ||
|  |   }; | ||
|  | 
 | ||
|  |   var windows$1 = 'Windows'; | ||
|  |   var ios = 'iOS'; | ||
|  |   var android = 'Android'; | ||
|  |   var linux = 'Linux'; | ||
|  |   var osx = 'OSX'; | ||
|  |   var solaris = 'Solaris'; | ||
|  |   var freebsd = 'FreeBSD'; | ||
|  |   var isOS = function (name, current) { | ||
|  |     return function () { | ||
|  |       return current === name; | ||
|  |     }; | ||
|  |   }; | ||
|  |   var unknown$2 = function () { | ||
|  |     return nu$2({ | ||
|  |       current: undefined, | ||
|  |       version: $_bhlk9t1b2jjgwekaq.unknown() | ||
|  |     }); | ||
|  |   }; | ||
|  |   var nu$2 = function (info) { | ||
|  |     var current = info.current; | ||
|  |     var version = info.version; | ||
|  |     return { | ||
|  |       current: current, | ||
|  |       version: version, | ||
|  |       isWindows: isOS(windows$1, current), | ||
|  |       isiOS: isOS(ios, current), | ||
|  |       isAndroid: isOS(android, current), | ||
|  |       isOSX: isOS(osx, current), | ||
|  |       isLinux: isOS(linux, current), | ||
|  |       isSolaris: isOS(solaris, current), | ||
|  |       isFreeBSD: isOS(freebsd, current) | ||
|  |     }; | ||
|  |   }; | ||
|  |   var $_7je60a1b3jjgwekar = { | ||
|  |     unknown: unknown$2, | ||
|  |     nu: nu$2, | ||
|  |     windows: constant(windows$1), | ||
|  |     ios: constant(ios), | ||
|  |     android: constant(android), | ||
|  |     linux: constant(linux), | ||
|  |     osx: constant(osx), | ||
|  |     solaris: constant(solaris), | ||
|  |     freebsd: constant(freebsd) | ||
|  |   }; | ||
|  | 
 | ||
|  |   function DeviceType (os, browser, userAgent) { | ||
|  |     var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true; | ||
|  |     var isiPhone = os.isiOS() && !isiPad; | ||
|  |     var isAndroid3 = os.isAndroid() && os.version.major === 3; | ||
|  |     var isAndroid4 = os.isAndroid() && os.version.major === 4; | ||
|  |     var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true; | ||
|  |     var isTouch = os.isiOS() || os.isAndroid(); | ||
|  |     var isPhone = isTouch && !isTablet; | ||
|  |     var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false; | ||
|  |     return { | ||
|  |       isiPad: constant(isiPad), | ||
|  |       isiPhone: constant(isiPhone), | ||
|  |       isTablet: constant(isTablet), | ||
|  |       isPhone: constant(isPhone), | ||
|  |       isTouch: constant(isTouch), | ||
|  |       isAndroid: os.isAndroid, | ||
|  |       isiOS: os.isiOS, | ||
|  |       isWebView: constant(iOSwebview) | ||
|  |     }; | ||
|  |   } | ||
|  | 
 | ||
|  |   var detect$1 = function (candidates, userAgent) { | ||
|  |     var agent = String(userAgent).toLowerCase(); | ||
|  |     return find(candidates, function (candidate) { | ||
|  |       return candidate.search(agent); | ||
|  |     }); | ||
|  |   }; | ||
|  |   var detectBrowser = function (browsers, userAgent) { | ||
|  |     return detect$1(browsers, userAgent).map(function (browser) { | ||
|  |       var version = $_bhlk9t1b2jjgwekaq.detect(browser.versionRegexes, userAgent); | ||
|  |       return { | ||
|  |         current: browser.name, | ||
|  |         version: version | ||
|  |       }; | ||
|  |     }); | ||
|  |   }; | ||
|  |   var detectOs = function (oses, userAgent) { | ||
|  |     return detect$1(oses, userAgent).map(function (os) { | ||
|  |       var version = $_bhlk9t1b2jjgwekaq.detect(os.versionRegexes, userAgent); | ||
|  |       return { | ||
|  |         current: os.name, | ||
|  |         version: version | ||
|  |       }; | ||
|  |     }); | ||
|  |   }; | ||
|  |   var $_1uo66k1b5jjgwekb9 = { | ||
|  |     detectBrowser: detectBrowser, | ||
|  |     detectOs: detectOs | ||
|  |   }; | ||
|  | 
 | ||
|  |   var contains$1 = function (str, substr) { | ||
|  |     return str.indexOf(substr) !== -1; | ||
|  |   }; | ||
|  | 
 | ||
|  |   var normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/; | ||
|  |   var checkContains = function (target) { | ||
|  |     return function (uastring) { | ||
|  |       return contains$1(uastring, target); | ||
|  |     }; | ||
|  |   }; | ||
|  |   var browsers = [ | ||
|  |     { | ||
|  |       name: 'Edge', | ||
|  |       versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/], | ||
|  |       search: function (uastring) { | ||
|  |         var monstrosity = contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit'); | ||
|  |         return monstrosity; | ||
|  |       } | ||
|  |     }, | ||
|  |     { | ||
|  |       name: 'Chrome', | ||
|  |       versionRegexes: [ | ||
|  |         /.*?chrome\/([0-9]+)\.([0-9]+).*/, | ||
|  |         normalVersionRegex | ||
|  |       ], | ||
|  |       search: function (uastring) { | ||
|  |         return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe'); | ||
|  |       } | ||
|  |     }, | ||
|  |     { | ||
|  |       name: 'IE', | ||
|  |       versionRegexes: [ | ||
|  |         /.*?msie\ ?([0-9]+)\.([0-9]+).*/, | ||
|  |         /.*?rv:([0-9]+)\.([0-9]+).*/ | ||
|  |       ], | ||
|  |       search: function (uastring) { | ||
|  |         return contains$1(uastring, 'msie') || contains$1(uastring, 'trident'); | ||
|  |       } | ||
|  |     }, | ||
|  |     { | ||
|  |       name: 'Opera', | ||
|  |       versionRegexes: [ | ||
|  |         normalVersionRegex, | ||
|  |         /.*?opera\/([0-9]+)\.([0-9]+).*/ | ||
|  |       ], | ||
|  |       search: checkContains('opera') | ||
|  |     }, | ||
|  |     { | ||
|  |       name: 'Firefox', | ||
|  |       versionRegexes: [/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/], | ||
|  |       search: checkContains('firefox') | ||
|  |     }, | ||
|  |     { | ||
|  |       name: 'Safari', | ||
|  |       versionRegexes: [ | ||
|  |         normalVersionRegex, | ||
|  |         /.*?cpu os ([0-9]+)_([0-9]+).*/ | ||
|  |       ], | ||
|  |       search: function (uastring) { | ||
|  |         return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit'); | ||
|  |       } | ||
|  |     } | ||
|  |   ]; | ||
|  |   var oses = [ | ||
|  |     { | ||
|  |       name: 'Windows', | ||
|  |       search: checkContains('win'), | ||
|  |       versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/] | ||
|  |     }, | ||
|  |     { | ||
|  |       name: 'iOS', | ||
|  |       search: function (uastring) { | ||
|  |         return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad'); | ||
|  |       }, | ||
|  |       versionRegexes: [ | ||
|  |         /.*?version\/\ ?([0-9]+)\.([0-9]+).*/, | ||
|  |         /.*cpu os ([0-9]+)_([0-9]+).*/, | ||
|  |         /.*cpu iphone os ([0-9]+)_([0-9]+).*/ | ||
|  |       ] | ||
|  |     }, | ||
|  |     { | ||
|  |       name: 'Android', | ||
|  |       search: checkContains('android'), | ||
|  |       versionRegexes: [/.*?android\ ?([0-9]+)\.([0-9]+).*/] | ||
|  |     }, | ||
|  |     { | ||
|  |       name: 'OSX', | ||
|  |       search: checkContains('os x'), | ||
|  |       versionRegexes: [/.*?os\ x\ ?([0-9]+)_([0-9]+).*/] | ||
|  |     }, | ||
|  |     { | ||
|  |       name: 'Linux', | ||
|  |       search: checkContains('linux'), | ||
|  |       versionRegexes: [] | ||
|  |     }, | ||
|  |     { | ||
|  |       name: 'Solaris', | ||
|  |       search: checkContains('sunos'), | ||
|  |       versionRegexes: [] | ||
|  |     }, | ||
|  |     { | ||
|  |       name: 'FreeBSD', | ||
|  |       search: checkContains('freebsd'), | ||
|  |       versionRegexes: [] | ||
|  |     } | ||
|  |   ]; | ||
|  |   var $_4f7v971b6jjgwekbd = { | ||
|  |     browsers: constant(browsers), | ||
|  |     oses: constant(oses) | ||
|  |   }; | ||
|  | 
 | ||
|  |   var detect$2 = function (userAgent) { | ||
|  |     var browsers = $_4f7v971b6jjgwekbd.browsers(); | ||
|  |     var oses = $_4f7v971b6jjgwekbd.oses(); | ||
|  |     var browser = $_1uo66k1b5jjgwekb9.detectBrowser(browsers, userAgent).fold($_3j4jht1b1jjgwekal.unknown, $_3j4jht1b1jjgwekal.nu); | ||
|  |     var os = $_1uo66k1b5jjgwekb9.detectOs(oses, userAgent).fold($_7je60a1b3jjgwekar.unknown, $_7je60a1b3jjgwekar.nu); | ||
|  |     var deviceType = DeviceType(os, browser, userAgent); | ||
|  |     return { | ||
|  |       browser: browser, | ||
|  |       os: os, | ||
|  |       deviceType: deviceType | ||
|  |     }; | ||
|  |   }; | ||
|  |   var $_d71emz1b0jjgwekak = { detect: detect$2 }; | ||
|  | 
 | ||
|  |   var detect$3 = cached(function () { | ||
|  |     var userAgent = navigator.userAgent; | ||
|  |     return $_d71emz1b0jjgwekak.detect(userAgent); | ||
|  |   }); | ||
|  |   var $_9xrxmy1azjjgwekac = { detect: detect$3 }; | ||
|  | 
 | ||
|  |   var ELEMENT = $_2jrgnk1apjjgwek8y.ELEMENT; | ||
|  |   var DOCUMENT = $_2jrgnk1apjjgwek8y.DOCUMENT; | ||
|  |   var is = function (element, selector) { | ||
|  |     var elem = element.dom(); | ||
|  |     if (elem.nodeType !== ELEMENT) | ||
|  |       return false; | ||
|  |     else if (elem.matches !== undefined) | ||
|  |       return elem.matches(selector); | ||
|  |     else if (elem.msMatchesSelector !== undefined) | ||
|  |       return elem.msMatchesSelector(selector); | ||
|  |     else if (elem.webkitMatchesSelector !== undefined) | ||
|  |       return elem.webkitMatchesSelector(selector); | ||
|  |     else if (elem.mozMatchesSelector !== undefined) | ||
|  |       return elem.mozMatchesSelector(selector); | ||
|  |     else | ||
|  |       throw new Error('Browser lacks native selectors'); | ||
|  |   }; | ||
|  |   var bypassSelector = function (dom) { | ||
|  |     return dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT || dom.childElementCount === 0; | ||
|  |   }; | ||
|  |   var all = function (selector, scope) { | ||
|  |     var base = scope === undefined ? document : scope.dom(); | ||
|  |     return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element$$1.fromDom); | ||
|  |   }; | ||
|  |   var one = function (selector, scope) { | ||
|  |     var base = scope === undefined ? document : scope.dom(); | ||
|  |     return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element$$1.fromDom); | ||
|  |   }; | ||
|  |   var $_e63uk51bajjgwekbq = { | ||
|  |     all: all, | ||
|  |     is: is, | ||
|  |     one: one | ||
|  |   }; | ||
|  | 
 | ||
|  |   var eq = function (e1, e2) { | ||
|  |     return e1.dom() === e2.dom(); | ||
|  |   }; | ||
|  |   var isEqualNode = function (e1, e2) { | ||
|  |     return e1.dom().isEqualNode(e2.dom()); | ||
|  |   }; | ||
|  |   var member = function (element, elements) { | ||
|  |     return exists(elements, curry(eq, element)); | ||
|  |   }; | ||
|  |   var regularContains = function (e1, e2) { | ||
|  |     var d1 = e1.dom(), d2 = e2.dom(); | ||
|  |     return d1 === d2 ? false : d1.contains(d2); | ||
|  |   }; | ||
|  |   var ieContains = function (e1, e2) { | ||
|  |     return $_d0o64o1ayjjgwekaa.documentPositionContainedBy(e1.dom(), e2.dom()); | ||
|  |   }; | ||
|  |   var browser = $_9xrxmy1azjjgwekac.detect().browser; | ||
|  |   var contains$2 = browser.isIE() ? ieContains : regularContains; | ||
|  |   var $_36s5ie1axjjgweka1 = { | ||
|  |     eq: eq, | ||
|  |     isEqualNode: isEqualNode, | ||
|  |     member: member, | ||
|  |     contains: contains$2, | ||
|  |     is: $_e63uk51bajjgwekbq.is | ||
|  |   }; | ||
|  | 
 | ||
|  |   var owner = function (element) { | ||
|  |     return Element$$1.fromDom(element.dom().ownerDocument); | ||
|  |   }; | ||
|  |   var documentElement = function (element) { | ||
|  |     return Element$$1.fromDom(element.dom().ownerDocument.documentElement); | ||
|  |   }; | ||
|  |   var defaultView = function (element) { | ||
|  |     var el = element.dom(); | ||
|  |     var defaultView = el.ownerDocument.defaultView; | ||
|  |     return Element$$1.fromDom(defaultView); | ||
|  |   }; | ||
|  |   var parent$1 = function (element) { | ||
|  |     var dom = element.dom(); | ||
|  |     return Option.from(dom.parentNode).map(Element$$1.fromDom); | ||
|  |   }; | ||
|  |   var findIndex$1 = function (element) { | ||
|  |     return parent$1(element).bind(function (p) { | ||
|  |       var kin = children(p); | ||
|  |       return findIndex(kin, function (elem) { | ||
|  |         return $_36s5ie1axjjgweka1.eq(element, elem); | ||
|  |       }); | ||
|  |     }); | ||
|  |   }; | ||
|  |   var parents = function (element, isRoot) { | ||
|  |     var stop = isFunction$1(isRoot) ? isRoot : constant(false); | ||
|  |     var dom = element.dom(); | ||
|  |     var ret = []; | ||
|  |     while (dom.parentNode !== null && dom.parentNode !== undefined) { | ||
|  |       var rawParent = dom.parentNode; | ||
|  |       var parent = Element$$1.fromDom(rawParent); | ||
|  |       ret.push(parent); | ||
|  |       if (stop(parent) === true) | ||
|  |         break; | ||
|  |       else | ||
|  |         dom = rawParent; | ||
|  |     } | ||
|  |     return ret; | ||
|  |   }; | ||
|  |   var siblings = function (element) { | ||
|  |     var filterSelf = function (elements) { | ||
|  |       return filter(elements, function (x) { | ||
|  |         return !$_36s5ie1axjjgweka1.eq(element, x); | ||
|  |       }); | ||
|  |     }; | ||
|  |     return parent$1(element).map(children).map(filterSelf).getOr([]); | ||
|  |   }; | ||
|  |   var offsetParent = function (element) { | ||
|  |     var dom = element.dom(); | ||
|  |     return Option.from(dom.offsetParent).map(Element$$1.fromDom); | ||
|  |   }; | ||
|  |   var prevSibling = function (element) { | ||
|  |     var dom = element.dom(); | ||
|  |     return Option.from(dom.previousSibling).map(Element$$1.fromDom); | ||
|  |   }; | ||
|  |   var nextSibling = function (element) { | ||
|  |     var dom = element.dom(); | ||
|  |     return Option.from(dom.nextSibling).map(Element$$1.fromDom); | ||
|  |   }; | ||
|  |   var prevSiblings = function (element) { | ||
|  |     return reverse($_607sf01awjjgweka0.toArray(element, prevSibling)); | ||
|  |   }; | ||
|  |   var nextSiblings = function (element) { | ||
|  |     return $_607sf01awjjgweka0.toArray(element, nextSibling); | ||
|  |   }; | ||
|  |   var children = function (element) { | ||
|  |     var dom = element.dom(); | ||
|  |     return map(dom.childNodes, Element$$1.fromDom); | ||
|  |   }; | ||
|  |   var child = function (element, index) { | ||
|  |     var children = element.dom().childNodes; | ||
|  |     return Option.from(children[index]).map(Element$$1.fromDom); | ||
|  |   }; | ||
|  |   var firstChild = function (element) { | ||
|  |     return child(element, 0); | ||
|  |   }; | ||
|  |   var lastChild = function (element) { | ||
|  |     return child(element, element.dom().childNodes.length - 1); | ||
|  |   }; | ||
|  |   var childNodesCount = function (element) { | ||
|  |     return element.dom().childNodes.length; | ||
|  |   }; | ||
|  |   var hasChildNodes = function (element) { | ||
|  |     return element.dom().hasChildNodes(); | ||
|  |   }; | ||
|  |   var spot = Immutable('element', 'offset'); | ||
|  |   var leaf = function (element, offset) { | ||
|  |     var cs = children(element); | ||
|  |     return cs.length > 0 && offset < cs.length ? spot(cs[offset], 0) : spot(element, offset); | ||
|  |   }; | ||
|  |   var $_fk3hdw1aqjjgwek91 = { | ||
|  |     owner: owner, | ||
|  |     defaultView: defaultView, | ||
|  |     documentElement: documentElement, | ||
|  |     parent: parent$1, | ||
|  |     findIndex: findIndex$1, | ||
|  |     parents: parents, | ||
|  |     siblings: siblings, | ||
|  |     prevSibling: prevSibling, | ||
|  |     offsetParent: offsetParent, | ||
|  |     prevSiblings: prevSiblings, | ||
|  |     nextSibling: nextSibling, | ||
|  |     nextSiblings: nextSiblings, | ||
|  |     children: children, | ||
|  |     child: child, | ||
|  |     firstChild: firstChild, | ||
|  |     lastChild: lastChild, | ||
|  |     childNodesCount: childNodesCount, | ||
|  |     hasChildNodes: hasChildNodes, | ||
|  |     leaf: leaf | ||
|  |   }; | ||
|  | 
 | ||
|  |   var all$1 = function (predicate) { | ||
|  |     return descendants($_d2glpe1amjjgwek8t.body(), predicate); | ||
|  |   }; | ||
|  |   var ancestors = function (scope, predicate, isRoot) { | ||
|  |     return filter($_fk3hdw1aqjjgwek91.parents(scope, isRoot), predicate); | ||
|  |   }; | ||
|  |   var siblings$1 = function (scope, predicate) { | ||
|  |     return filter($_fk3hdw1aqjjgwek91.siblings(scope), predicate); | ||
|  |   }; | ||
|  |   var children$1 = function (scope, predicate) { | ||
|  |     return filter($_fk3hdw1aqjjgwek91.children(scope), predicate); | ||
|  |   }; | ||
|  |   var descendants = function (scope, predicate) { | ||
|  |     var result = []; | ||
|  |     each($_fk3hdw1aqjjgwek91.children(scope), function (x) { | ||
|  |       if (predicate(x)) { | ||
|  |         result = result.concat([x]); | ||
|  |       } | ||
|  |       result = result.concat(descendants(x, predicate)); | ||
|  |     }); | ||
|  |     return result; | ||
|  |   }; | ||
|  |   var $_4re57m1aljjgwek8p = { | ||
|  |     all: all$1, | ||
|  |     ancestors: ancestors, | ||
|  |     siblings: siblings$1, | ||
|  |     children: children$1, | ||
|  |     descendants: descendants | ||
|  |   }; | ||
|  | 
 | ||
|  |   var all$2 = function (selector) { | ||
|  |     return $_e63uk51bajjgwekbq.all(selector); | ||
|  |   }; | ||
|  |   var ancestors$1 = function (scope, selector, isRoot) { | ||
|  |     return $_4re57m1aljjgwek8p.ancestors(scope, function (e) { | ||
|  |       return $_e63uk51bajjgwekbq.is(e, selector); | ||
|  |     }, isRoot); | ||
|  |   }; | ||
|  |   var siblings$2 = function (scope, selector) { | ||
|  |     return $_4re57m1aljjgwek8p.siblings(scope, function (e) { | ||
|  |       return $_e63uk51bajjgwekbq.is(e, selector); | ||
|  |     }); | ||
|  |   }; | ||
|  |   var children$2 = function (scope, selector) { | ||
|  |     return $_4re57m1aljjgwek8p.children(scope, function (e) { | ||
|  |       return $_e63uk51bajjgwekbq.is(e, selector); | ||
|  |     }); | ||
|  |   }; | ||
|  |   var descendants$1 = function (scope, selector) { | ||
|  |     return $_e63uk51bajjgwekbq.all(selector, scope); | ||
|  |   }; | ||
|  |   var $_1jc9su1akjjgwek8o = { | ||
|  |     all: all$2, | ||
|  |     ancestors: ancestors$1, | ||
|  |     siblings: siblings$2, | ||
|  |     children: children$2, | ||
|  |     descendants: descendants$1 | ||
|  |   }; | ||
|  | 
 | ||
|  |   var trim$1 = global$4.trim; | ||
|  |   var hasContentEditableState = function (value) { | ||
|  |     return function (node) { | ||
|  |       if (node && node.nodeType === 1) { | ||
|  |         if (node.contentEditable === value) { | ||
|  |           return true; | ||
|  |         } | ||
|  |         if (node.getAttribute('data-mce-contenteditable') === value) { | ||
|  |           return true; | ||
|  |         } | ||
|  |       } | ||
|  |       return false; | ||
|  |     }; | ||
|  |   }; | ||
|  |   var isContentEditableTrue = hasContentEditableState('true'); | ||
|  |   var isContentEditableFalse = hasContentEditableState('false'); | ||
|  |   var create$4 = function (type, title, url, level, attach) { | ||
|  |     return { | ||
|  |       type: type, | ||
|  |       title: title, | ||
|  |       url: url, | ||
|  |       level: level, | ||
|  |       attach: attach | ||
|  |     }; | ||
|  |   }; | ||
|  |   var isChildOfContentEditableTrue = function (node) { | ||
|  |     while (node = node.parentNode) { | ||
|  |       var value = node.contentEditable; | ||
|  |       if (value && value !== 'inherit') { | ||
|  |         return isContentEditableTrue(node); | ||
|  |       } | ||
|  |     } | ||
|  |     return false; | ||
|  |   }; | ||
|  |   var select = function (selector, root) { | ||
|  |     return map($_1jc9su1akjjgwek8o.descendants(Element$$1.fromDom(root), selector), function (element) { | ||
|  |       return element.dom(); | ||
|  |     }); | ||
|  |   }; | ||
|  |   var getElementText = function (elm) { | ||
|  |     return elm.innerText || elm.textContent; | ||
|  |   }; | ||
|  |   var getOrGenerateId = function (elm) { | ||
|  |     return elm.id ? elm.id : generate('h'); | ||
|  |   }; | ||
|  |   var isAnchor = function (elm) { | ||
|  |     return elm && elm.nodeName === 'A' && (elm.id || elm.name); | ||
|  |   }; | ||
|  |   var isValidAnchor = function (elm) { | ||
|  |     return isAnchor(elm) && isEditable(elm); | ||
|  |   }; | ||
|  |   var isHeader = function (elm) { | ||
|  |     return elm && /^(H[1-6])$/.test(elm.nodeName); | ||
|  |   }; | ||
|  |   var isEditable = function (elm) { | ||
|  |     return isChildOfContentEditableTrue(elm) && !isContentEditableFalse(elm); | ||
|  |   }; | ||
|  |   var isValidHeader = function (elm) { | ||
|  |     return isHeader(elm) && isEditable(elm); | ||
|  |   }; | ||
|  |   var getLevel = function (elm) { | ||
|  |     return isHeader(elm) ? parseInt(elm.nodeName.substr(1), 10) : 0; | ||
|  |   }; | ||
|  |   var headerTarget = function (elm) { | ||
|  |     var headerId = getOrGenerateId(elm); | ||
|  |     var attach = function () { | ||
|  |       elm.id = headerId; | ||
|  |     }; | ||
|  |     return create$4('header', getElementText(elm), '#' + headerId, getLevel(elm), attach); | ||
|  |   }; | ||
|  |   var anchorTarget = function (elm) { | ||
|  |     var anchorId = elm.id || elm.name; | ||
|  |     var anchorText = getElementText(elm); | ||
|  |     return create$4('anchor', anchorText ? anchorText : '#' + anchorId, '#' + anchorId, 0, noop); | ||
|  |   }; | ||
|  |   var getHeaderTargets = function (elms) { | ||
|  |     return map(filter(elms, isValidHeader), headerTarget); | ||
|  |   }; | ||
|  |   var getAnchorTargets = function (elms) { | ||
|  |     return map(filter(elms, isValidAnchor), anchorTarget); | ||
|  |   }; | ||
|  |   var getTargetElements = function (elm) { | ||
|  |     var elms = select('h1,h2,h3,h4,h5,h6,a:not([href])', elm); | ||
|  |     return elms; | ||
|  |   }; | ||
|  |   var hasTitle = function (target) { | ||
|  |     return trim$1(target.title).length > 0; | ||
|  |   }; | ||
|  |   var find$3 = function (elm) { | ||
|  |     var elms = getTargetElements(elm); | ||
|  |     return filter(getHeaderTargets(elms).concat(getAnchorTargets(elms)), hasTitle); | ||
|  |   }; | ||
|  |   var $_5ia43q1ahjjgwek7u = { find: find$3 }; | ||
|  | 
 | ||
|  |   var getActiveEditor = function () { | ||
|  |     return window.tinymce ? window.tinymce.activeEditor : global$5.activeEditor; | ||
|  |   }; | ||
|  |   var history = {}; | ||
|  |   var HISTORY_LENGTH = 5; | ||
|  |   var clearHistory = function () { | ||
|  |     history = {}; | ||
|  |   }; | ||
|  |   var toMenuItem = function (target) { | ||
|  |     return { | ||
|  |       title: target.title, | ||
|  |       value: { | ||
|  |         title: { raw: target.title }, | ||
|  |         url: target.url, | ||
|  |         attach: target.attach | ||
|  |       } | ||
|  |     }; | ||
|  |   }; | ||
|  |   var toMenuItems = function (targets) { | ||
|  |     return global$4.map(targets, toMenuItem); | ||
|  |   }; | ||
|  |   var staticMenuItem = function (title, url) { | ||
|  |     return { | ||
|  |       title: title, | ||
|  |       value: { | ||
|  |         title: title, | ||
|  |         url: url, | ||
|  |         attach: noop | ||
|  |       } | ||
|  |     }; | ||
|  |   }; | ||
|  |   var isUniqueUrl = function (url, targets) { | ||
|  |     var foundTarget = exists(targets, function (target) { | ||
|  |       return target.url === url; | ||
|  |     }); | ||
|  |     return !foundTarget; | ||
|  |   }; | ||
|  |   var getSetting = function (editorSettings, name, defaultValue) { | ||
|  |     var value = name in editorSettings ? editorSettings[name] : defaultValue; | ||
|  |     return value === false ? null : value; | ||
|  |   }; | ||
|  |   var createMenuItems = function (term, targets, fileType, editorSettings) { | ||
|  |     var separator = { title: '-' }; | ||
|  |     var fromHistoryMenuItems = function (history) { | ||
|  |       var historyItems = history.hasOwnProperty(fileType) ? history[fileType] : []; | ||
|  |       var uniqueHistory = filter(historyItems, function (url) { | ||
|  |         return isUniqueUrl(url, targets); | ||
|  |       }); | ||
|  |       return global$4.map(uniqueHistory, function (url) { | ||
|  |         return { | ||
|  |           title: url, | ||
|  |           value: { | ||
|  |             title: url, | ||
|  |             url: url, | ||
|  |             attach: noop | ||
|  |           } | ||
|  |         }; | ||
|  |       }); | ||
|  |     }; | ||
|  |     var fromMenuItems = function (type) { | ||
|  |       var filteredTargets = filter(targets, function (target) { | ||
|  |         return target.type === type; | ||
|  |       }); | ||
|  |       return toMenuItems(filteredTargets); | ||
|  |     }; | ||
|  |     var anchorMenuItems = function () { | ||
|  |       var anchorMenuItems = fromMenuItems('anchor'); | ||
|  |       var topAnchor = getSetting(editorSettings, 'anchor_top', '#top'); | ||
|  |       var bottomAchor = getSetting(editorSettings, 'anchor_bottom', '#bottom'); | ||
|  |       if (topAnchor !== null) { | ||
|  |         anchorMenuItems.unshift(staticMenuItem('<top>', topAnchor)); | ||
|  |       } | ||
|  |       if (bottomAchor !== null) { | ||
|  |         anchorMenuItems.push(staticMenuItem('<bottom>', bottomAchor)); | ||
|  |       } | ||
|  |       return anchorMenuItems; | ||
|  |     }; | ||
|  |     var join = function (items) { | ||
|  |       return foldl(items, function (a, b) { | ||
|  |         var bothEmpty = a.length === 0 || b.length === 0; | ||
|  |         return bothEmpty ? a.concat(b) : a.concat(separator, b); | ||
|  |       }, []); | ||
|  |     }; | ||
|  |     if (editorSettings.typeahead_urls === false) { | ||
|  |       return []; | ||
|  |     } | ||
|  |     return fileType === 'file' ? join([ | ||
|  |       filterByQuery(term, fromHistoryMenuItems(history)), | ||
|  |       filterByQuery(term, fromMenuItems('header')), | ||
|  |       filterByQuery(term, anchorMenuItems()) | ||
|  |     ]) : filterByQuery(term, fromHistoryMenuItems(history)); | ||
|  |   }; | ||
|  |   var addToHistory = function (url, fileType) { | ||
|  |     var items = history[fileType]; | ||
|  |     if (!/^https?/.test(url)) { | ||
|  |       return; | ||
|  |     } | ||
|  |     if (items) { | ||
|  |       if (indexOf(items, url).isNone()) { | ||
|  |         history[fileType] = items.slice(0, HISTORY_LENGTH).concat(url); | ||
|  |       } | ||
|  |     } else { | ||
|  |       history[fileType] = [url]; | ||
|  |     } | ||
|  |   }; | ||
|  |   var filterByQuery = function (term, menuItems) { | ||
|  |     var lowerCaseTerm = term.toLowerCase(); | ||
|  |     var result = global$4.grep(menuItems, function (item) { | ||
|  |       return item.title.toLowerCase().indexOf(lowerCaseTerm) !== -1; | ||
|  |     }); | ||
|  |     return result.length === 1 && result[0].title === term ? [] : result; | ||
|  |   }; | ||
|  |   var getTitle = function (linkDetails) { | ||
|  |     var title = linkDetails.title; | ||
|  |     return title.raw ? title.raw : title; | ||
|  |   }; | ||
|  |   var setupAutoCompleteHandler = function (ctrl, editorSettings, bodyElm, fileType) { | ||
|  |     var autocomplete = function (term) { | ||
|  |       var linkTargets = $_5ia43q1ahjjgwek7u.find(bodyElm); | ||
|  |       var menuItems = createMenuItems(term, linkTargets, fileType, editorSettings); | ||
|  |       ctrl.showAutoComplete(menuItems, term); | ||
|  |     }; | ||
|  |     ctrl.on('autocomplete', function () { | ||
|  |       autocomplete(ctrl.value()); | ||
|  |     }); | ||
|  |     ctrl.on('selectitem', function (e) { | ||
|  |       var linkDetails = e.value; | ||
|  |       ctrl.value(linkDetails.url); | ||
|  |       var title = getTitle(linkDetails); | ||
|  |       if (fileType === 'image') { | ||
|  |         ctrl.fire('change', { | ||
|  |           meta: { | ||
|  |             alt: title, | ||
|  |             attach: linkDetails.attach | ||
|  |           } | ||
|  |         }); | ||
|  |       } else { | ||
|  |         ctrl.fire('change', { | ||
|  |           meta: { | ||
|  |             text: title, | ||
|  |             attach: linkDetails.attach | ||
|  |           } | ||
|  |         }); | ||
|  |       } | ||
|  |       ctrl.focus(); | ||
|  |     }); | ||
|  |     ctrl.on('click', function (e) { | ||
|  |       if (ctrl.value().length === 0 && e.target.nodeName === 'INPUT') { | ||
|  |         autocomplete(''); | ||
|  |       } | ||
|  |     }); | ||
|  |     ctrl.on('PostRender', function () { | ||
|  |       ctrl.getRoot().on('submit', function (e) { | ||
|  |         if (!e.isDefaultPrevented()) { | ||
|  |           addToHistory(ctrl.value(), fileType); | ||
|  |         } | ||
|  |       }); | ||
|  |     }); | ||
|  |   }; | ||
|  |   var statusToUiState = function (result) { | ||
|  |     var status = result.status, message = result.message; | ||
|  |     if (status === 'valid') { | ||
|  |       return { | ||
|  |         status: 'ok', | ||
|  |         message: message | ||
|  |       }; | ||
|  |     } else if (status === 'unknown') { | ||
|  |       return { | ||
|  |         status: 'warn', | ||
|  |         message: message | ||
|  |       }; | ||
|  |     } else if (status === 'invalid') { | ||
|  |       return { | ||
|  |         status: 'warn', | ||
|  |         message: message | ||
|  |       }; | ||
|  |     } else { | ||
|  |       return { | ||
|  |         status: 'none', | ||
|  |         message: '' | ||
|  |       }; | ||
|  |     } | ||
|  |   }; | ||
|  |   var setupLinkValidatorHandler = function (ctrl, editorSettings, fileType) { | ||
|  |     var validatorHandler = editorSettings.filepicker_validator_handler; | ||
|  |     if (validatorHandler) { | ||
|  |       var validateUrl_1 = function (url) { | ||
|  |         if (url.length === 0) { | ||
|  |           ctrl.statusLevel('none'); | ||
|  |           return; | ||
|  |         } | ||
|  |         validatorHandler({ | ||
|  |           url: url, | ||
|  |           type: fileType | ||
|  |         }, function (result) { | ||
|  |           var uiState = statusToUiState(result); | ||
|  |           ctrl.statusMessage(uiState.message); | ||
|  |           ctrl.statusLevel(uiState.status); | ||
|  |         }); | ||
|  |       }; | ||
|  |       ctrl.state.on('change:value', function (e) { | ||
|  |         validateUrl_1(e.value); | ||
|  |       }); | ||
|  |     } | ||
|  |   }; | ||
|  |   var FilePicker = ComboBox.extend({ | ||
|  |     Statics: { clearHistory: clearHistory }, | ||
|  |     init: function (settings) { | ||
|  |       var self = this, editor = getActiveEditor(), editorSettings = editor.settings; | ||
|  |       var actionCallback, fileBrowserCallback, fileBrowserCallbackTypes; | ||
|  |       var fileType = settings.filetype; | ||
|  |       settings.spellcheck = false; | ||
|  |       fileBrowserCallbackTypes = editorSettings.file_picker_types || editorSettings.file_browser_callback_types; | ||
|  |       if (fileBrowserCallbackTypes) { | ||
|  |         fileBrowserCallbackTypes = global$4.makeMap(fileBrowserCallbackTypes, /[, ]/); | ||
|  |       } | ||
|  |       if (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType]) { | ||
|  |         fileBrowserCallback = editorSettings.file_picker_callback; | ||
|  |         if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) { | ||
|  |           actionCallback = function () { | ||
|  |             var meta = self.fire('beforecall').meta; | ||
|  |             meta = global$4.extend({ filetype: fileType }, meta); | ||
|  |             fileBrowserCallback.call(editor, function (value, meta) { | ||
|  |               self.value(value).fire('change', { meta: meta }); | ||
|  |             }, self.value(), meta); | ||
|  |           }; | ||
|  |         } else { | ||
|  |           fileBrowserCallback = editorSettings.file_browser_callback; | ||
|  |           if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) { | ||
|  |             actionCallback = function () { | ||
|  |               fileBrowserCallback(self.getEl('inp').id, self.value(), fileType, window); | ||
|  |             }; | ||
|  |           } | ||
|  |         } | ||
|  |       } | ||
|  |       if (actionCallback) { | ||
|  |         settings.icon = 'browse'; | ||
|  |         settings.onaction = actionCallback; | ||
|  |       } | ||
|  |       self._super(settings); | ||
|  |       self.classes.add('filepicker'); | ||
|  |       setupAutoCompleteHandler(self, editorSettings, editor.getBody(), fileType); | ||
|  |       setupLinkValidatorHandler(self, editorSettings, fileType); | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var FitLayout = AbsoluteLayout.extend({ | ||
|  |     recalc: function (container) { | ||
|  |       var contLayoutRect = container.layoutRect(), paddingBox = container.paddingBox; | ||
|  |       container.items().filter(':visible').each(function (ctrl) { | ||
|  |         ctrl.layoutRect({ | ||
|  |           x: paddingBox.left, | ||
|  |           y: paddingBox.top, | ||
|  |           w: contLayoutRect.innerW - paddingBox.right - paddingBox.left, | ||
|  |           h: contLayoutRect.innerH - paddingBox.top - paddingBox.bottom | ||
|  |         }); | ||
|  |         if (ctrl.recalc) { | ||
|  |           ctrl.recalc(); | ||
|  |         } | ||
|  |       }); | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var FlexLayout = AbsoluteLayout.extend({ | ||
|  |     recalc: function (container) { | ||
|  |       var i, l, items, contLayoutRect, contPaddingBox, contSettings, align, pack, spacing, totalFlex, availableSpace, direction; | ||
|  |       var ctrl, ctrlLayoutRect, ctrlSettings, flex; | ||
|  |       var maxSizeItems = []; | ||
|  |       var size, maxSize, ratio, rect, pos, maxAlignEndPos; | ||
|  |       var sizeName, minSizeName, posName, maxSizeName, beforeName, innerSizeName, deltaSizeName, contentSizeName; | ||
|  |       var alignAxisName, alignInnerSizeName, alignSizeName, alignMinSizeName, alignBeforeName, alignAfterName; | ||
|  |       var alignDeltaSizeName, alignContentSizeName; | ||
|  |       var max = Math.max, min = Math.min; | ||
|  |       items = container.items().filter(':visible'); | ||
|  |       contLayoutRect = container.layoutRect(); | ||
|  |       contPaddingBox = container.paddingBox; | ||
|  |       contSettings = container.settings; | ||
|  |       direction = container.isRtl() ? contSettings.direction || 'row-reversed' : contSettings.direction; | ||
|  |       align = contSettings.align; | ||
|  |       pack = container.isRtl() ? contSettings.pack || 'end' : contSettings.pack; | ||
|  |       spacing = contSettings.spacing || 0; | ||
|  |       if (direction === 'row-reversed' || direction === 'column-reverse') { | ||
|  |         items = items.set(items.toArray().reverse()); | ||
|  |         direction = direction.split('-')[0]; | ||
|  |       } | ||
|  |       if (direction === 'column') { | ||
|  |         posName = 'y'; | ||
|  |         sizeName = 'h'; | ||
|  |         minSizeName = 'minH'; | ||
|  |         maxSizeName = 'maxH'; | ||
|  |         innerSizeName = 'innerH'; | ||
|  |         beforeName = 'top'; | ||
|  |         deltaSizeName = 'deltaH'; | ||
|  |         contentSizeName = 'contentH'; | ||
|  |         alignBeforeName = 'left'; | ||
|  |         alignSizeName = 'w'; | ||
|  |         alignAxisName = 'x'; | ||
|  |         alignInnerSizeName = 'innerW'; | ||
|  |         alignMinSizeName = 'minW'; | ||
|  |         alignAfterName = 'right'; | ||
|  |         alignDeltaSizeName = 'deltaW'; | ||
|  |         alignContentSizeName = 'contentW'; | ||
|  |       } else { | ||
|  |         posName = 'x'; | ||
|  |         sizeName = 'w'; | ||
|  |         minSizeName = 'minW'; | ||
|  |         maxSizeName = 'maxW'; | ||
|  |         innerSizeName = 'innerW'; | ||
|  |         beforeName = 'left'; | ||
|  |         deltaSizeName = 'deltaW'; | ||
|  |         contentSizeName = 'contentW'; | ||
|  |         alignBeforeName = 'top'; | ||
|  |         alignSizeName = 'h'; | ||
|  |         alignAxisName = 'y'; | ||
|  |         alignInnerSizeName = 'innerH'; | ||
|  |         alignMinSizeName = 'minH'; | ||
|  |         alignAfterName = 'bottom'; | ||
|  |         alignDeltaSizeName = 'deltaH'; | ||
|  |         alignContentSizeName = 'contentH'; | ||
|  |       } | ||
|  |       availableSpace = contLayoutRect[innerSizeName] - contPaddingBox[beforeName] - contPaddingBox[beforeName]; | ||
|  |       maxAlignEndPos = totalFlex = 0; | ||
|  |       for (i = 0, l = items.length; i < l; i++) { | ||
|  |         ctrl = items[i]; | ||
|  |         ctrlLayoutRect = ctrl.layoutRect(); | ||
|  |         ctrlSettings = ctrl.settings; | ||
|  |         flex = ctrlSettings.flex; | ||
|  |         availableSpace -= i < l - 1 ? spacing : 0; | ||
|  |         if (flex > 0) { | ||
|  |           totalFlex += flex; | ||
|  |           if (ctrlLayoutRect[maxSizeName]) { | ||
|  |             maxSizeItems.push(ctrl); | ||
|  |           } | ||
|  |           ctrlLayoutRect.flex = flex; | ||
|  |         } | ||
|  |         availableSpace -= ctrlLayoutRect[minSizeName]; | ||
|  |         size = contPaddingBox[alignBeforeName] + ctrlLayoutRect[alignMinSizeName] + contPaddingBox[alignAfterName]; | ||
|  |         if (size > maxAlignEndPos) { | ||
|  |           maxAlignEndPos = size; | ||
|  |         } | ||
|  |       } | ||
|  |       rect = {}; | ||
|  |       if (availableSpace < 0) { | ||
|  |         rect[minSizeName] = contLayoutRect[minSizeName] - availableSpace + contLayoutRect[deltaSizeName]; | ||
|  |       } else { | ||
|  |         rect[minSizeName] = contLayoutRect[innerSizeName] - availableSpace + contLayoutRect[deltaSizeName]; | ||
|  |       } | ||
|  |       rect[alignMinSizeName] = maxAlignEndPos + contLayoutRect[alignDeltaSizeName]; | ||
|  |       rect[contentSizeName] = contLayoutRect[innerSizeName] - availableSpace; | ||
|  |       rect[alignContentSizeName] = maxAlignEndPos; | ||
|  |       rect.minW = min(rect.minW, contLayoutRect.maxW); | ||
|  |       rect.minH = min(rect.minH, contLayoutRect.maxH); | ||
|  |       rect.minW = max(rect.minW, contLayoutRect.startMinWidth); | ||
|  |       rect.minH = max(rect.minH, contLayoutRect.startMinHeight); | ||
|  |       if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) { | ||
|  |         rect.w = rect.minW; | ||
|  |         rect.h = rect.minH; | ||
|  |         container.layoutRect(rect); | ||
|  |         this.recalc(container); | ||
|  |         if (container._lastRect === null) { | ||
|  |           var parentCtrl = container.parent(); | ||
|  |           if (parentCtrl) { | ||
|  |             parentCtrl._lastRect = null; | ||
|  |             parentCtrl.recalc(); | ||
|  |           } | ||
|  |         } | ||
|  |         return; | ||
|  |       } | ||
|  |       ratio = availableSpace / totalFlex; | ||
|  |       for (i = 0, l = maxSizeItems.length; i < l; i++) { | ||
|  |         ctrl = maxSizeItems[i]; | ||
|  |         ctrlLayoutRect = ctrl.layoutRect(); | ||
|  |         maxSize = ctrlLayoutRect[maxSizeName]; | ||
|  |         size = ctrlLayoutRect[minSizeName] + ctrlLayoutRect.flex * ratio; | ||
|  |         if (size > maxSize) { | ||
|  |           availableSpace -= ctrlLayoutRect[maxSizeName] - ctrlLayoutRect[minSizeName]; | ||
|  |           totalFlex -= ctrlLayoutRect.flex; | ||
|  |           ctrlLayoutRect.flex = 0; | ||
|  |           ctrlLayoutRect.maxFlexSize = maxSize; | ||
|  |         } else { | ||
|  |           ctrlLayoutRect.maxFlexSize = 0; | ||
|  |         } | ||
|  |       } | ||
|  |       ratio = availableSpace / totalFlex; | ||
|  |       pos = contPaddingBox[beforeName]; | ||
|  |       rect = {}; | ||
|  |       if (totalFlex === 0) { | ||
|  |         if (pack === 'end') { | ||
|  |           pos = availableSpace + contPaddingBox[beforeName]; | ||
|  |         } else if (pack === 'center') { | ||
|  |           pos = Math.round(contLayoutRect[innerSizeName] / 2 - (contLayoutRect[innerSizeName] - availableSpace) / 2) + contPaddingBox[beforeName]; | ||
|  |           if (pos < 0) { | ||
|  |             pos = contPaddingBox[beforeName]; | ||
|  |           } | ||
|  |         } else if (pack === 'justify') { | ||
|  |           pos = contPaddingBox[beforeName]; | ||
|  |           spacing = Math.floor(availableSpace / (items.length - 1)); | ||
|  |         } | ||
|  |       } | ||
|  |       rect[alignAxisName] = contPaddingBox[alignBeforeName]; | ||
|  |       for (i = 0, l = items.length; i < l; i++) { | ||
|  |         ctrl = items[i]; | ||
|  |         ctrlLayoutRect = ctrl.layoutRect(); | ||
|  |         size = ctrlLayoutRect.maxFlexSize || ctrlLayoutRect[minSizeName]; | ||
|  |         if (align === 'center') { | ||
|  |           rect[alignAxisName] = Math.round(contLayoutRect[alignInnerSizeName] / 2 - ctrlLayoutRect[alignSizeName] / 2); | ||
|  |         } else if (align === 'stretch') { | ||
|  |           rect[alignSizeName] = max(ctrlLayoutRect[alignMinSizeName] || 0, contLayoutRect[alignInnerSizeName] - contPaddingBox[alignBeforeName] - contPaddingBox[alignAfterName]); | ||
|  |           rect[alignAxisName] = contPaddingBox[alignBeforeName]; | ||
|  |         } else if (align === 'end') { | ||
|  |           rect[alignAxisName] = contLayoutRect[alignInnerSizeName] - ctrlLayoutRect[alignSizeName] - contPaddingBox.top; | ||
|  |         } | ||
|  |         if (ctrlLayoutRect.flex > 0) { | ||
|  |           size += ctrlLayoutRect.flex * ratio; | ||
|  |         } | ||
|  |         rect[sizeName] = size; | ||
|  |         rect[posName] = pos; | ||
|  |         ctrl.layoutRect(rect); | ||
|  |         if (ctrl.recalc) { | ||
|  |           ctrl.recalc(); | ||
|  |         } | ||
|  |         pos += size + spacing; | ||
|  |       } | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var FlowLayout = Layout$1.extend({ | ||
|  |     Defaults: { | ||
|  |       containerClass: 'flow-layout', | ||
|  |       controlClass: 'flow-layout-item', | ||
|  |       endClass: 'break' | ||
|  |     }, | ||
|  |     recalc: function (container) { | ||
|  |       container.items().filter(':visible').each(function (ctrl) { | ||
|  |         if (ctrl.recalc) { | ||
|  |           ctrl.recalc(); | ||
|  |         } | ||
|  |       }); | ||
|  |     }, | ||
|  |     isNative: function () { | ||
|  |       return true; | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   function ClosestOrAncestor (is, ancestor, scope, a, isRoot) { | ||
|  |     return is(scope, a) ? Option.some(scope) : isFunction$1(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot); | ||
|  |   } | ||
|  | 
 | ||
|  |   var first$1 = function (predicate) { | ||
|  |     return descendant($_d2glpe1amjjgwek8t.body(), predicate); | ||
|  |   }; | ||
|  |   var ancestor = function (scope, predicate, isRoot) { | ||
|  |     var element = scope.dom(); | ||
|  |     var stop = isFunction$1(isRoot) ? isRoot : constant(false); | ||
|  |     while (element.parentNode) { | ||
|  |       element = element.parentNode; | ||
|  |       var el = Element$$1.fromDom(element); | ||
|  |       if (predicate(el)) | ||
|  |         return Option.some(el); | ||
|  |       else if (stop(el)) | ||
|  |         break; | ||
|  |     } | ||
|  |     return Option.none(); | ||
|  |   }; | ||
|  |   var closest = function (scope, predicate, isRoot) { | ||
|  |     var is = function (scope) { | ||
|  |       return predicate(scope); | ||
|  |     }; | ||
|  |     return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot); | ||
|  |   }; | ||
|  |   var sibling = function (scope, predicate) { | ||
|  |     var element = scope.dom(); | ||
|  |     if (!element.parentNode) | ||
|  |       return Option.none(); | ||
|  |     return child$1(Element$$1.fromDom(element.parentNode), function (x) { | ||
|  |       return !$_36s5ie1axjjgweka1.eq(scope, x) && predicate(x); | ||
|  |     }); | ||
|  |   }; | ||
|  |   var child$1 = function (scope, predicate) { | ||
|  |     var result = find(scope.dom().childNodes, compose(predicate, Element$$1.fromDom)); | ||
|  |     return result.map(Element$$1.fromDom); | ||
|  |   }; | ||
|  |   var descendant = function (scope, predicate) { | ||
|  |     var descend = function (node) { | ||
|  |       for (var i = 0; i < node.childNodes.length; i++) { | ||
|  |         if (predicate(Element$$1.fromDom(node.childNodes[i]))) | ||
|  |           return Option.some(Element$$1.fromDom(node.childNodes[i])); | ||
|  |         var res = descend(node.childNodes[i]); | ||
|  |         if (res.isSome()) | ||
|  |           return res; | ||
|  |       } | ||
|  |       return Option.none(); | ||
|  |     }; | ||
|  |     return descend(scope.dom()); | ||
|  |   }; | ||
|  |   var $_df9cwz1bgjjgwekcd = { | ||
|  |     first: first$1, | ||
|  |     ancestor: ancestor, | ||
|  |     closest: closest, | ||
|  |     sibling: sibling, | ||
|  |     child: child$1, | ||
|  |     descendant: descendant | ||
|  |   }; | ||
|  | 
 | ||
|  |   var first$2 = function (selector) { | ||
|  |     return $_e63uk51bajjgwekbq.one(selector); | ||
|  |   }; | ||
|  |   var ancestor$1 = function (scope, selector, isRoot) { | ||
|  |     return $_df9cwz1bgjjgwekcd.ancestor(scope, function (e) { | ||
|  |       return $_e63uk51bajjgwekbq.is(e, selector); | ||
|  |     }, isRoot); | ||
|  |   }; | ||
|  |   var sibling$1 = function (scope, selector) { | ||
|  |     return $_df9cwz1bgjjgwekcd.sibling(scope, function (e) { | ||
|  |       return $_e63uk51bajjgwekbq.is(e, selector); | ||
|  |     }); | ||
|  |   }; | ||
|  |   var child$2 = function (scope, selector) { | ||
|  |     return $_df9cwz1bgjjgwekcd.child(scope, function (e) { | ||
|  |       return $_e63uk51bajjgwekbq.is(e, selector); | ||
|  |     }); | ||
|  |   }; | ||
|  |   var descendant$1 = function (scope, selector) { | ||
|  |     return $_e63uk51bajjgwekbq.one(selector, scope); | ||
|  |   }; | ||
|  |   var closest$1 = function (scope, selector, isRoot) { | ||
|  |     return ClosestOrAncestor($_e63uk51bajjgwekbq.is, ancestor$1, scope, selector, isRoot); | ||
|  |   }; | ||
|  |   var $_6nlstg1bfjjgwekcb = { | ||
|  |     first: first$2, | ||
|  |     ancestor: ancestor$1, | ||
|  |     sibling: sibling$1, | ||
|  |     child: child$2, | ||
|  |     descendant: descendant$1, | ||
|  |     closest: closest$1 | ||
|  |   }; | ||
|  | 
 | ||
|  |   var toggleFormat = function (editor, fmt) { | ||
|  |     return function () { | ||
|  |       editor.execCommand('mceToggleFormat', false, fmt); | ||
|  |     }; | ||
|  |   }; | ||
|  |   var addFormatChangedListener = function (editor, name, changed) { | ||
|  |     var handler = function (state) { | ||
|  |       changed(state, name); | ||
|  |     }; | ||
|  |     if (editor.formatter) { | ||
|  |       editor.formatter.formatChanged(name, handler); | ||
|  |     } else { | ||
|  |       editor.on('init', function () { | ||
|  |         editor.formatter.formatChanged(name, handler); | ||
|  |       }); | ||
|  |     } | ||
|  |   }; | ||
|  |   var postRenderFormatToggle = function (editor, name) { | ||
|  |     return function (e) { | ||
|  |       addFormatChangedListener(editor, name, function (state) { | ||
|  |         e.control.active(state); | ||
|  |       }); | ||
|  |     }; | ||
|  |   }; | ||
|  | 
 | ||
|  |   var register = function (editor) { | ||
|  |     var alignFormats = [ | ||
|  |       'alignleft', | ||
|  |       'aligncenter', | ||
|  |       'alignright', | ||
|  |       'alignjustify' | ||
|  |     ]; | ||
|  |     var defaultAlign = 'alignleft'; | ||
|  |     var alignMenuItems = [ | ||
|  |       { | ||
|  |         text: 'Left', | ||
|  |         icon: 'alignleft', | ||
|  |         onclick: toggleFormat(editor, 'alignleft') | ||
|  |       }, | ||
|  |       { | ||
|  |         text: 'Center', | ||
|  |         icon: 'aligncenter', | ||
|  |         onclick: toggleFormat(editor, 'aligncenter') | ||
|  |       }, | ||
|  |       { | ||
|  |         text: 'Right', | ||
|  |         icon: 'alignright', | ||
|  |         onclick: toggleFormat(editor, 'alignright') | ||
|  |       }, | ||
|  |       { | ||
|  |         text: 'Justify', | ||
|  |         icon: 'alignjustify', | ||
|  |         onclick: toggleFormat(editor, 'alignjustify') | ||
|  |       } | ||
|  |     ]; | ||
|  |     editor.addMenuItem('align', { | ||
|  |       text: 'Align', | ||
|  |       menu: alignMenuItems | ||
|  |     }); | ||
|  |     editor.addButton('align', { | ||
|  |       type: 'menubutton', | ||
|  |       icon: defaultAlign, | ||
|  |       menu: alignMenuItems, | ||
|  |       onShowMenu: function (e) { | ||
|  |         var menu = e.control.menu; | ||
|  |         global$4.each(alignFormats, function (formatName, idx) { | ||
|  |           menu.items().eq(idx).each(function (item) { | ||
|  |             return item.active(editor.formatter.match(formatName)); | ||
|  |           }); | ||
|  |         }); | ||
|  |       }, | ||
|  |       onPostRender: function (e) { | ||
|  |         var ctrl = e.control; | ||
|  |         global$4.each(alignFormats, function (formatName, idx) { | ||
|  |           addFormatChangedListener(editor, formatName, function (state) { | ||
|  |             ctrl.icon(defaultAlign); | ||
|  |             if (state) { | ||
|  |               ctrl.icon(formatName); | ||
|  |             } | ||
|  |           }); | ||
|  |         }); | ||
|  |       } | ||
|  |     }); | ||
|  |     global$4.each({ | ||
|  |       alignleft: [ | ||
|  |         'Align left', | ||
|  |         'JustifyLeft' | ||
|  |       ], | ||
|  |       aligncenter: [ | ||
|  |         'Align center', | ||
|  |         'JustifyCenter' | ||
|  |       ], | ||
|  |       alignright: [ | ||
|  |         'Align right', | ||
|  |         'JustifyRight' | ||
|  |       ], | ||
|  |       alignjustify: [ | ||
|  |         'Justify', | ||
|  |         'JustifyFull' | ||
|  |       ], | ||
|  |       alignnone: [ | ||
|  |         'No alignment', | ||
|  |         'JustifyNone' | ||
|  |       ] | ||
|  |     }, function (item, name) { | ||
|  |       editor.addButton(name, { | ||
|  |         active: false, | ||
|  |         tooltip: item[0], | ||
|  |         cmd: item[1], | ||
|  |         onPostRender: postRenderFormatToggle(editor, name) | ||
|  |       }); | ||
|  |     }); | ||
|  |   }; | ||
|  |   var $_7uh4c31bijjgwekcw = { register: register }; | ||
|  | 
 | ||
|  |   var getFirstFont = function (fontFamily) { | ||
|  |     return fontFamily ? fontFamily.split(',')[0] : ''; | ||
|  |   }; | ||
|  |   var findMatchingValue = function (items, fontFamily) { | ||
|  |     var font = fontFamily ? fontFamily.toLowerCase() : ''; | ||
|  |     var value; | ||
|  |     global$4.each(items, function (item) { | ||
|  |       if (item.value.toLowerCase() === font) { | ||
|  |         value = item.value; | ||
|  |       } | ||
|  |     }); | ||
|  |     global$4.each(items, function (item) { | ||
|  |       if (!value && getFirstFont(item.value).toLowerCase() === getFirstFont(font).toLowerCase()) { | ||
|  |         value = item.value; | ||
|  |       } | ||
|  |     }); | ||
|  |     return value; | ||
|  |   }; | ||
|  |   var createFontNameListBoxChangeHandler = function (editor, items) { | ||
|  |     return function () { | ||
|  |       var self = this; | ||
|  |       self.state.set('value', null); | ||
|  |       editor.on('init nodeChange', function (e) { | ||
|  |         var fontFamily = editor.queryCommandValue('FontName'); | ||
|  |         var match = findMatchingValue(items, fontFamily); | ||
|  |         self.value(match ? match : null); | ||
|  |         if (!match && fontFamily) { | ||
|  |           self.text(getFirstFont(fontFamily)); | ||
|  |         } | ||
|  |       }); | ||
|  |     }; | ||
|  |   }; | ||
|  |   var createFormats = function (formats) { | ||
|  |     formats = formats.replace(/;$/, '').split(';'); | ||
|  |     var i = formats.length; | ||
|  |     while (i--) { | ||
|  |       formats[i] = formats[i].split('='); | ||
|  |     } | ||
|  |     return formats; | ||
|  |   }; | ||
|  |   var getFontItems = function (editor) { | ||
|  |     var defaultFontsFormats = 'Andale Mono=andale mono,monospace;' + 'Arial=arial,helvetica,sans-serif;' + 'Arial Black=arial black,sans-serif;' + 'Book Antiqua=book antiqua,palatino,serif;' + 'Comic Sans MS=comic sans ms,sans-serif;' + 'Courier New=courier new,courier,monospace;' + 'Georgia=georgia,palatino,serif;' + 'Helvetica=helvetica,arial,sans-serif;' + 'Impact=impact,sans-serif;' + 'Symbol=symbol;' + 'Tahoma=tahoma,arial,helvetica,sans-serif;' + 'Terminal=terminal,monaco,monospace;' + 'Times New Roman=times new roman,times,serif;' + 'Trebuchet MS=trebuchet ms,geneva,sans-serif;' + 'Verdana=verdana,geneva,sans-serif;' + 'Webdings=webdings;' + 'Wingdings=wingdings,zapf dingbats'; | ||
|  |     var fonts = createFormats(editor.settings.font_formats || defaultFontsFormats); | ||
|  |     return global$4.map(fonts, function (font) { | ||
|  |       return { | ||
|  |         text: { raw: font[0] }, | ||
|  |         value: font[1], | ||
|  |         textStyle: font[1].indexOf('dings') === -1 ? 'font-family:' + font[1] : '' | ||
|  |       }; | ||
|  |     }); | ||
|  |   }; | ||
|  |   var registerButtons = function (editor) { | ||
|  |     editor.addButton('fontselect', function () { | ||
|  |       var items = getFontItems(editor); | ||
|  |       return { | ||
|  |         type: 'listbox', | ||
|  |         text: 'Font Family', | ||
|  |         tooltip: 'Font Family', | ||
|  |         values: items, | ||
|  |         fixedWidth: true, | ||
|  |         onPostRender: createFontNameListBoxChangeHandler(editor, items), | ||
|  |         onselect: function (e) { | ||
|  |           if (e.control.settings.value) { | ||
|  |             editor.execCommand('FontName', false, e.control.settings.value); | ||
|  |           } | ||
|  |         } | ||
|  |       }; | ||
|  |     }); | ||
|  |   }; | ||
|  |   var register$1 = function (editor) { | ||
|  |     registerButtons(editor); | ||
|  |   }; | ||
|  |   var $_2g5ce1bkjjgwekcz = { register: register$1 }; | ||
|  | 
 | ||
|  |   var round = function (number, precision) { | ||
|  |     var factor = Math.pow(10, precision); | ||
|  |     return Math.round(number * factor) / factor; | ||
|  |   }; | ||
|  |   var toPt = function (fontSize, precision) { | ||
|  |     if (/[0-9.]+px$/.test(fontSize)) { | ||
|  |       return round(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt'; | ||
|  |     } | ||
|  |     return fontSize; | ||
|  |   }; | ||
|  |   var findMatchingValue$1 = function (items, pt, px) { | ||
|  |     var value; | ||
|  |     global$4.each(items, function (item) { | ||
|  |       if (item.value === px) { | ||
|  |         value = px; | ||
|  |       } else if (item.value === pt) { | ||
|  |         value = pt; | ||
|  |       } | ||
|  |     }); | ||
|  |     return value; | ||
|  |   }; | ||
|  |   var createFontSizeListBoxChangeHandler = function (editor, items) { | ||
|  |     return function () { | ||
|  |       var self = this; | ||
|  |       editor.on('init nodeChange', function (e) { | ||
|  |         var px, pt, precision, match; | ||
|  |         px = editor.queryCommandValue('FontSize'); | ||
|  |         if (px) { | ||
|  |           for (precision = 3; !match && precision >= 0; precision--) { | ||
|  |             pt = toPt(px, precision); | ||
|  |             match = findMatchingValue$1(items, pt, px); | ||
|  |           } | ||
|  |         } | ||
|  |         self.value(match ? match : null); | ||
|  |         if (!match) { | ||
|  |           self.text(pt); | ||
|  |         } | ||
|  |       }); | ||
|  |     }; | ||
|  |   }; | ||
|  |   var getFontSizeItems = function (editor) { | ||
|  |     var defaultFontsizeFormats = '8pt 10pt 12pt 14pt 18pt 24pt 36pt'; | ||
|  |     var fontsizeFormats = editor.settings.fontsize_formats || defaultFontsizeFormats; | ||
|  |     return global$4.map(fontsizeFormats.split(' '), function (item) { | ||
|  |       var text = item, value = item; | ||
|  |       var values = item.split('='); | ||
|  |       if (values.length > 1) { | ||
|  |         text = values[0]; | ||
|  |         value = values[1]; | ||
|  |       } | ||
|  |       return { | ||
|  |         text: text, | ||
|  |         value: value | ||
|  |       }; | ||
|  |     }); | ||
|  |   }; | ||
|  |   var registerButtons$1 = function (editor) { | ||
|  |     editor.addButton('fontsizeselect', function () { | ||
|  |       var items = getFontSizeItems(editor); | ||
|  |       return { | ||
|  |         type: 'listbox', | ||
|  |         text: 'Font Sizes', | ||
|  |         tooltip: 'Font Sizes', | ||
|  |         values: items, | ||
|  |         fixedWidth: true, | ||
|  |         onPostRender: createFontSizeListBoxChangeHandler(editor, items), | ||
|  |         onclick: function (e) { | ||
|  |           if (e.control.settings.value) { | ||
|  |             editor.execCommand('FontSize', false, e.control.settings.value); | ||
|  |           } | ||
|  |         } | ||
|  |       }; | ||
|  |     }); | ||
|  |   }; | ||
|  |   var register$2 = function (editor) { | ||
|  |     registerButtons$1(editor); | ||
|  |   }; | ||
|  |   var $_b15nsk1bljjgwekd9 = { register: register$2 }; | ||
|  | 
 | ||
|  |   var hideMenuObjects = function (editor, menu) { | ||
|  |     var count = menu.length; | ||
|  |     global$4.each(menu, function (item) { | ||
|  |       if (item.menu) { | ||
|  |         item.hidden = hideMenuObjects(editor, item.menu) === 0; | ||
|  |       } | ||
|  |       var formatName = item.format; | ||
|  |       if (formatName) { | ||
|  |         item.hidden = !editor.formatter.canApply(formatName); | ||
|  |       } | ||
|  |       if (item.hidden) { | ||
|  |         count--; | ||
|  |       } | ||
|  |     }); | ||
|  |     return count; | ||
|  |   }; | ||
|  |   var hideFormatMenuItems = function (editor, menu) { | ||
|  |     var count = menu.items().length; | ||
|  |     menu.items().each(function (item) { | ||
|  |       if (item.menu) { | ||
|  |         item.visible(hideFormatMenuItems(editor, item.menu) > 0); | ||
|  |       } | ||
|  |       if (!item.menu && item.settings.menu) { | ||
|  |         item.visible(hideMenuObjects(editor, item.settings.menu) > 0); | ||
|  |       } | ||
|  |       var formatName = item.settings.format; | ||
|  |       if (formatName) { | ||
|  |         item.visible(editor.formatter.canApply(formatName)); | ||
|  |       } | ||
|  |       if (!item.visible()) { | ||
|  |         count--; | ||
|  |       } | ||
|  |     }); | ||
|  |     return count; | ||
|  |   }; | ||
|  |   var createFormatMenu = function (editor) { | ||
|  |     var count = 0; | ||
|  |     var newFormats = []; | ||
|  |     var defaultStyleFormats = [ | ||
|  |       { | ||
|  |         title: 'Headings', | ||
|  |         items: [ | ||
|  |           { | ||
|  |             title: 'Heading 1', | ||
|  |             format: 'h1' | ||
|  |           }, | ||
|  |           { | ||
|  |             title: 'Heading 2', | ||
|  |             format: 'h2' | ||
|  |           }, | ||
|  |           { | ||
|  |             title: 'Heading 3', | ||
|  |             format: 'h3' | ||
|  |           }, | ||
|  |           { | ||
|  |             title: 'Heading 4', | ||
|  |             format: 'h4' | ||
|  |           }, | ||
|  |           { | ||
|  |             title: 'Heading 5', | ||
|  |             format: 'h5' | ||
|  |           }, | ||
|  |           { | ||
|  |             title: 'Heading 6', | ||
|  |             format: 'h6' | ||
|  |           } | ||
|  |         ] | ||
|  |       }, | ||
|  |       { | ||
|  |         title: 'Inline', | ||
|  |         items: [ | ||
|  |           { | ||
|  |             title: 'Bold', | ||
|  |             icon: 'bold', | ||
|  |             format: 'bold' | ||
|  |           }, | ||
|  |           { | ||
|  |             title: 'Italic', | ||
|  |             icon: 'italic', | ||
|  |             format: 'italic' | ||
|  |           }, | ||
|  |           { | ||
|  |             title: 'Underline', | ||
|  |             icon: 'underline', | ||
|  |             format: 'underline' | ||
|  |           }, | ||
|  |           { | ||
|  |             title: 'Strikethrough', | ||
|  |             icon: 'strikethrough', | ||
|  |             format: 'strikethrough' | ||
|  |           }, | ||
|  |           { | ||
|  |             title: 'Superscript', | ||
|  |             icon: 'superscript', | ||
|  |             format: 'superscript' | ||
|  |           }, | ||
|  |           { | ||
|  |             title: 'Subscript', | ||
|  |             icon: 'subscript', | ||
|  |             format: 'subscript' | ||
|  |           }, | ||
|  |           { | ||
|  |             title: 'Code', | ||
|  |             icon: 'code', | ||
|  |             format: 'code' | ||
|  |           } | ||
|  |         ] | ||
|  |       }, | ||
|  |       { | ||
|  |         title: 'Blocks', | ||
|  |         items: [ | ||
|  |           { | ||
|  |             title: 'Paragraph', | ||
|  |             format: 'p' | ||
|  |           }, | ||
|  |           { | ||
|  |             title: 'Blockquote', | ||
|  |             format: 'blockquote' | ||
|  |           }, | ||
|  |           { | ||
|  |             title: 'Div', | ||
|  |             format: 'div' | ||
|  |           }, | ||
|  |           { | ||
|  |             title: 'Pre', | ||
|  |             format: 'pre' | ||
|  |           } | ||
|  |         ] | ||
|  |       }, | ||
|  |       { | ||
|  |         title: 'Alignment', | ||
|  |         items: [ | ||
|  |           { | ||
|  |             title: 'Left', | ||
|  |             icon: 'alignleft', | ||
|  |             format: 'alignleft' | ||
|  |           }, | ||
|  |           { | ||
|  |             title: 'Center', | ||
|  |             icon: 'aligncenter', | ||
|  |             format: 'aligncenter' | ||
|  |           }, | ||
|  |           { | ||
|  |             title: 'Right', | ||
|  |             icon: 'alignright', | ||
|  |             format: 'alignright' | ||
|  |           }, | ||
|  |           { | ||
|  |             title: 'Justify', | ||
|  |             icon: 'alignjustify', | ||
|  |             format: 'alignjustify' | ||
|  |           } | ||
|  |         ] | ||
|  |       } | ||
|  |     ]; | ||
|  |     var createMenu = function (formats) { | ||
|  |       var menu = []; | ||
|  |       if (!formats) { | ||
|  |         return; | ||
|  |       } | ||
|  |       global$4.each(formats, function (format) { | ||
|  |         var menuItem = { | ||
|  |           text: format.title, | ||
|  |           icon: format.icon | ||
|  |         }; | ||
|  |         if (format.items) { | ||
|  |           menuItem.menu = createMenu(format.items); | ||
|  |         } else { | ||
|  |           var formatName = format.format || 'custom' + count++; | ||
|  |           if (!format.format) { | ||
|  |             format.name = formatName; | ||
|  |             newFormats.push(format); | ||
|  |           } | ||
|  |           menuItem.format = formatName; | ||
|  |           menuItem.cmd = format.cmd; | ||
|  |         } | ||
|  |         menu.push(menuItem); | ||
|  |       }); | ||
|  |       return menu; | ||
|  |     }; | ||
|  |     var createStylesMenu = function () { | ||
|  |       var menu; | ||
|  |       if (editor.settings.style_formats_merge) { | ||
|  |         if (editor.settings.style_formats) { | ||
|  |           menu = createMenu(defaultStyleFormats.concat(editor.settings.style_formats)); | ||
|  |         } else { | ||
|  |           menu = createMenu(defaultStyleFormats); | ||
|  |         } | ||
|  |       } else { | ||
|  |         menu = createMenu(editor.settings.style_formats || defaultStyleFormats); | ||
|  |       } | ||
|  |       return menu; | ||
|  |     }; | ||
|  |     editor.on('init', function () { | ||
|  |       global$4.each(newFormats, function (format) { | ||
|  |         editor.formatter.register(format.name, format); | ||
|  |       }); | ||
|  |     }); | ||
|  |     return { | ||
|  |       type: 'menu', | ||
|  |       items: createStylesMenu(), | ||
|  |       onPostRender: function (e) { | ||
|  |         editor.fire('renderFormatsMenu', { control: e.control }); | ||
|  |       }, | ||
|  |       itemDefaults: { | ||
|  |         preview: true, | ||
|  |         textStyle: function () { | ||
|  |           if (this.settings.format) { | ||
|  |             return editor.formatter.getCssText(this.settings.format); | ||
|  |           } | ||
|  |         }, | ||
|  |         onPostRender: function () { | ||
|  |           var self = this; | ||
|  |           self.parent().on('show', function () { | ||
|  |             var formatName, command; | ||
|  |             formatName = self.settings.format; | ||
|  |             if (formatName) { | ||
|  |               self.disabled(!editor.formatter.canApply(formatName)); | ||
|  |               self.active(editor.formatter.match(formatName)); | ||
|  |             } | ||
|  |             command = self.settings.cmd; | ||
|  |             if (command) { | ||
|  |               self.active(editor.queryCommandState(command)); | ||
|  |             } | ||
|  |           }); | ||
|  |         }, | ||
|  |         onclick: function () { | ||
|  |           if (this.settings.format) { | ||
|  |             toggleFormat(editor, this.settings.format)(); | ||
|  |           } | ||
|  |           if (this.settings.cmd) { | ||
|  |             editor.execCommand(this.settings.cmd); | ||
|  |           } | ||
|  |         } | ||
|  |       } | ||
|  |     }; | ||
|  |   }; | ||
|  |   var registerMenuItems = function (editor, formatMenu) { | ||
|  |     editor.addMenuItem('formats', { | ||
|  |       text: 'Formats', | ||
|  |       menu: formatMenu | ||
|  |     }); | ||
|  |   }; | ||
|  |   var registerButtons$2 = function (editor, formatMenu) { | ||
|  |     editor.addButton('styleselect', { | ||
|  |       type: 'menubutton', | ||
|  |       text: 'Formats', | ||
|  |       menu: formatMenu, | ||
|  |       onShowMenu: function () { | ||
|  |         if (editor.settings.style_formats_autohide) { | ||
|  |           hideFormatMenuItems(editor, this.menu); | ||
|  |         } | ||
|  |       } | ||
|  |     }); | ||
|  |   }; | ||
|  |   var register$3 = function (editor) { | ||
|  |     var formatMenu = createFormatMenu(editor); | ||
|  |     registerMenuItems(editor, formatMenu); | ||
|  |     registerButtons$2(editor, formatMenu); | ||
|  |   }; | ||
|  |   var $_9qaa1r1bmjjgwekdc = { register: register$3 }; | ||
|  | 
 | ||
|  |   var defaultBlocks = 'Paragraph=p;' + 'Heading 1=h1;' + 'Heading 2=h2;' + 'Heading 3=h3;' + 'Heading 4=h4;' + 'Heading 5=h5;' + 'Heading 6=h6;' + 'Preformatted=pre'; | ||
|  |   var createFormats$1 = function (formats) { | ||
|  |     formats = formats.replace(/;$/, '').split(';'); | ||
|  |     var i = formats.length; | ||
|  |     while (i--) { | ||
|  |       formats[i] = formats[i].split('='); | ||
|  |     } | ||
|  |     return formats; | ||
|  |   }; | ||
|  |   var createListBoxChangeHandler = function (editor, items, formatName) { | ||
|  |     return function () { | ||
|  |       var self = this; | ||
|  |       editor.on('nodeChange', function (e) { | ||
|  |         var formatter = editor.formatter; | ||
|  |         var value = null; | ||
|  |         global$4.each(e.parents, function (node) { | ||
|  |           global$4.each(items, function (item) { | ||
|  |             if (formatName) { | ||
|  |               if (formatter.matchNode(node, formatName, { value: item.value })) { | ||
|  |                 value = item.value; | ||
|  |               } | ||
|  |             } else { | ||
|  |               if (formatter.matchNode(node, item.value)) { | ||
|  |                 value = item.value; | ||
|  |               } | ||
|  |             } | ||
|  |             if (value) { | ||
|  |               return false; | ||
|  |             } | ||
|  |           }); | ||
|  |           if (value) { | ||
|  |             return false; | ||
|  |           } | ||
|  |         }); | ||
|  |         self.value(value); | ||
|  |       }); | ||
|  |     }; | ||
|  |   }; | ||
|  |   var lazyFormatSelectBoxItems = function (editor, blocks) { | ||
|  |     return function () { | ||
|  |       var items = []; | ||
|  |       global$4.each(blocks, function (block) { | ||
|  |         items.push({ | ||
|  |           text: block[0], | ||
|  |           value: block[1], | ||
|  |           textStyle: function () { | ||
|  |             return editor.formatter.getCssText(block[1]); | ||
|  |           } | ||
|  |         }); | ||
|  |       }); | ||
|  |       return { | ||
|  |         type: 'listbox', | ||
|  |         text: blocks[0][0], | ||
|  |         values: items, | ||
|  |         fixedWidth: true, | ||
|  |         onselect: function (e) { | ||
|  |           if (e.control) { | ||
|  |             var fmt = e.control.value(); | ||
|  |             toggleFormat(editor, fmt)(); | ||
|  |           } | ||
|  |         }, | ||
|  |         onPostRender: createListBoxChangeHandler(editor, items) | ||
|  |       }; | ||
|  |     }; | ||
|  |   }; | ||
|  |   var buildMenuItems = function (editor, blocks) { | ||
|  |     return global$4.map(blocks, function (block) { | ||
|  |       return { | ||
|  |         text: block[0], | ||
|  |         onclick: toggleFormat(editor, block[1]), | ||
|  |         textStyle: function () { | ||
|  |           return editor.formatter.getCssText(block[1]); | ||
|  |         } | ||
|  |       }; | ||
|  |     }); | ||
|  |   }; | ||
|  |   var register$4 = function (editor) { | ||
|  |     var blocks = createFormats$1(editor.settings.block_formats || defaultBlocks); | ||
|  |     editor.addMenuItem('blockformats', { | ||
|  |       text: 'Blocks', | ||
|  |       menu: buildMenuItems(editor, blocks) | ||
|  |     }); | ||
|  |     editor.addButton('formatselect', lazyFormatSelectBoxItems(editor, blocks)); | ||
|  |   }; | ||
|  |   var $_a3xw9u1bnjjgwekdh = { register: register$4 }; | ||
|  | 
 | ||
|  |   var createCustomMenuItems = function (editor, names) { | ||
|  |     var items, nameList; | ||
|  |     if (typeof names === 'string') { | ||
|  |       nameList = names.split(' '); | ||
|  |     } else if (global$4.isArray(names)) { | ||
|  |       return flatten$1(global$4.map(names, function (names) { | ||
|  |         return createCustomMenuItems(editor, names); | ||
|  |       })); | ||
|  |     } | ||
|  |     items = global$4.grep(nameList, function (name) { | ||
|  |       return name === '|' || name in editor.menuItems; | ||
|  |     }); | ||
|  |     return global$4.map(items, function (name) { | ||
|  |       return name === '|' ? { text: '-' } : editor.menuItems[name]; | ||
|  |     }); | ||
|  |   }; | ||
|  |   var isSeparator = function (menuItem) { | ||
|  |     return menuItem && menuItem.text === '-'; | ||
|  |   }; | ||
|  |   var trimMenuItems = function (menuItems) { | ||
|  |     var menuItems2 = filter(menuItems, function (menuItem, i, menuItems) { | ||
|  |       return !isSeparator(menuItem) || !isSeparator(menuItems[i - 1]); | ||
|  |     }); | ||
|  |     return filter(menuItems2, function (menuItem, i, menuItems) { | ||
|  |       return !isSeparator(menuItem) || i > 0 && i < menuItems.length - 1; | ||
|  |     }); | ||
|  |   }; | ||
|  |   var createContextMenuItems = function (editor, context) { | ||
|  |     var outputMenuItems = [{ text: '-' }]; | ||
|  |     var menuItems = global$4.grep(editor.menuItems, function (menuItem) { | ||
|  |       return menuItem.context === context; | ||
|  |     }); | ||
|  |     global$4.each(menuItems, function (menuItem) { | ||
|  |       if (menuItem.separator === 'before') { | ||
|  |         outputMenuItems.push({ text: '|' }); | ||
|  |       } | ||
|  |       if (menuItem.prependToContext) { | ||
|  |         outputMenuItems.unshift(menuItem); | ||
|  |       } else { | ||
|  |         outputMenuItems.push(menuItem); | ||
|  |       } | ||
|  |       if (menuItem.separator === 'after') { | ||
|  |         outputMenuItems.push({ text: '|' }); | ||
|  |       } | ||
|  |     }); | ||
|  |     return outputMenuItems; | ||
|  |   }; | ||
|  |   var createInsertMenu = function (editor) { | ||
|  |     var insertButtonItems = editor.settings.insert_button_items; | ||
|  |     if (insertButtonItems) { | ||
|  |       return trimMenuItems(createCustomMenuItems(editor, insertButtonItems)); | ||
|  |     } else { | ||
|  |       return trimMenuItems(createContextMenuItems(editor, 'insert')); | ||
|  |     } | ||
|  |   }; | ||
|  |   var registerButtons$3 = function (editor) { | ||
|  |     editor.addButton('insert', { | ||
|  |       type: 'menubutton', | ||
|  |       icon: 'insert', | ||
|  |       menu: [], | ||
|  |       oncreatemenu: function () { | ||
|  |         this.menu.add(createInsertMenu(editor)); | ||
|  |         this.menu.renderNew(); | ||
|  |       } | ||
|  |     }); | ||
|  |   }; | ||
|  |   var register$5 = function (editor) { | ||
|  |     registerButtons$3(editor); | ||
|  |   }; | ||
|  |   var $_dvqvtt1bojjgwekdj = { register: register$5 }; | ||
|  | 
 | ||
|  |   var registerFormatButtons = function (editor) { | ||
|  |     global$4.each({ | ||
|  |       bold: 'Bold', | ||
|  |       italic: 'Italic', | ||
|  |       underline: 'Underline', | ||
|  |       strikethrough: 'Strikethrough', | ||
|  |       subscript: 'Subscript', | ||
|  |       superscript: 'Superscript' | ||
|  |     }, function (text, name) { | ||
|  |       editor.addButton(name, { | ||
|  |         active: false, | ||
|  |         tooltip: text, | ||
|  |         onPostRender: postRenderFormatToggle(editor, name), | ||
|  |         onclick: toggleFormat(editor, name) | ||
|  |       }); | ||
|  |     }); | ||
|  |   }; | ||
|  |   var registerCommandButtons = function (editor) { | ||
|  |     global$4.each({ | ||
|  |       outdent: [ | ||
|  |         'Decrease indent', | ||
|  |         'Outdent' | ||
|  |       ], | ||
|  |       indent: [ | ||
|  |         'Increase indent', | ||
|  |         'Indent' | ||
|  |       ], | ||
|  |       cut: [ | ||
|  |         'Cut', | ||
|  |         'Cut' | ||
|  |       ], | ||
|  |       copy: [ | ||
|  |         'Copy', | ||
|  |         'Copy' | ||
|  |       ], | ||
|  |       paste: [ | ||
|  |         'Paste', | ||
|  |         'Paste' | ||
|  |       ], | ||
|  |       help: [ | ||
|  |         'Help', | ||
|  |         'mceHelp' | ||
|  |       ], | ||
|  |       selectall: [ | ||
|  |         'Select all', | ||
|  |         'SelectAll' | ||
|  |       ], | ||
|  |       visualaid: [ | ||
|  |         'Visual aids', | ||
|  |         'mceToggleVisualAid' | ||
|  |       ], | ||
|  |       newdocument: [ | ||
|  |         'New document', | ||
|  |         'mceNewDocument' | ||
|  |       ], | ||
|  |       removeformat: [ | ||
|  |         'Clear formatting', | ||
|  |         'RemoveFormat' | ||
|  |       ], | ||
|  |       remove: [ | ||
|  |         'Remove', | ||
|  |         'Delete' | ||
|  |       ] | ||
|  |     }, function (item, name) { | ||
|  |       editor.addButton(name, { | ||
|  |         tooltip: item[0], | ||
|  |         cmd: item[1] | ||
|  |       }); | ||
|  |     }); | ||
|  |   }; | ||
|  |   var registerCommandToggleButtons = function (editor) { | ||
|  |     global$4.each({ | ||
|  |       blockquote: [ | ||
|  |         'Blockquote', | ||
|  |         'mceBlockQuote' | ||
|  |       ], | ||
|  |       subscript: [ | ||
|  |         'Subscript', | ||
|  |         'Subscript' | ||
|  |       ], | ||
|  |       superscript: [ | ||
|  |         'Superscript', | ||
|  |         'Superscript' | ||
|  |       ] | ||
|  |     }, function (item, name) { | ||
|  |       editor.addButton(name, { | ||
|  |         active: false, | ||
|  |         tooltip: item[0], | ||
|  |         cmd: item[1], | ||
|  |         onPostRender: postRenderFormatToggle(editor, name) | ||
|  |       }); | ||
|  |     }); | ||
|  |   }; | ||
|  |   var registerButtons$4 = function (editor) { | ||
|  |     registerFormatButtons(editor); | ||
|  |     registerCommandButtons(editor); | ||
|  |     registerCommandToggleButtons(editor); | ||
|  |   }; | ||
|  |   var registerMenuItems$1 = function (editor) { | ||
|  |     global$4.each({ | ||
|  |       bold: [ | ||
|  |         'Bold', | ||
|  |         'Bold', | ||
|  |         'Meta+B' | ||
|  |       ], | ||
|  |       italic: [ | ||
|  |         'Italic', | ||
|  |         'Italic', | ||
|  |         'Meta+I' | ||
|  |       ], | ||
|  |       underline: [ | ||
|  |         'Underline', | ||
|  |         'Underline', | ||
|  |         'Meta+U' | ||
|  |       ], | ||
|  |       strikethrough: [ | ||
|  |         'Strikethrough', | ||
|  |         'Strikethrough' | ||
|  |       ], | ||
|  |       subscript: [ | ||
|  |         'Subscript', | ||
|  |         'Subscript' | ||
|  |       ], | ||
|  |       superscript: [ | ||
|  |         'Superscript', | ||
|  |         'Superscript' | ||
|  |       ], | ||
|  |       removeformat: [ | ||
|  |         'Clear formatting', | ||
|  |         'RemoveFormat' | ||
|  |       ], | ||
|  |       newdocument: [ | ||
|  |         'New document', | ||
|  |         'mceNewDocument' | ||
|  |       ], | ||
|  |       cut: [ | ||
|  |         'Cut', | ||
|  |         'Cut', | ||
|  |         'Meta+X' | ||
|  |       ], | ||
|  |       copy: [ | ||
|  |         'Copy', | ||
|  |         'Copy', | ||
|  |         'Meta+C' | ||
|  |       ], | ||
|  |       paste: [ | ||
|  |         'Paste', | ||
|  |         'Paste', | ||
|  |         'Meta+V' | ||
|  |       ], | ||
|  |       selectall: [ | ||
|  |         'Select all', | ||
|  |         'SelectAll', | ||
|  |         'Meta+A' | ||
|  |       ] | ||
|  |     }, function (item, name) { | ||
|  |       editor.addMenuItem(name, { | ||
|  |         text: item[0], | ||
|  |         icon: name, | ||
|  |         shortcut: item[2], | ||
|  |         cmd: item[1] | ||
|  |       }); | ||
|  |     }); | ||
|  |     editor.addMenuItem('codeformat', { | ||
|  |       text: 'Code', | ||
|  |       icon: 'code', | ||
|  |       onclick: toggleFormat(editor, 'code') | ||
|  |     }); | ||
|  |   }; | ||
|  |   var register$6 = function (editor) { | ||
|  |     registerButtons$4(editor); | ||
|  |     registerMenuItems$1(editor); | ||
|  |   }; | ||
|  |   var $_2ywvy11bpjjgwekdn = { register: register$6 }; | ||
|  | 
 | ||
|  |   var toggleUndoRedoState = function (editor, type) { | ||
|  |     return function () { | ||
|  |       var self = this; | ||
|  |       var checkState = function () { | ||
|  |         var typeFn = type === 'redo' ? 'hasRedo' : 'hasUndo'; | ||
|  |         return editor.undoManager ? editor.undoManager[typeFn]() : false; | ||
|  |       }; | ||
|  |       self.disabled(!checkState()); | ||
|  |       editor.on('Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', function () { | ||
|  |         self.disabled(editor.readonly || !checkState()); | ||
|  |       }); | ||
|  |     }; | ||
|  |   }; | ||
|  |   var registerMenuItems$2 = function (editor) { | ||
|  |     editor.addMenuItem('undo', { | ||
|  |       text: 'Undo', | ||
|  |       icon: 'undo', | ||
|  |       shortcut: 'Meta+Z', | ||
|  |       onPostRender: toggleUndoRedoState(editor, 'undo'), | ||
|  |       cmd: 'undo' | ||
|  |     }); | ||
|  |     editor.addMenuItem('redo', { | ||
|  |       text: 'Redo', | ||
|  |       icon: 'redo', | ||
|  |       shortcut: 'Meta+Y', | ||
|  |       onPostRender: toggleUndoRedoState(editor, 'redo'), | ||
|  |       cmd: 'redo' | ||
|  |     }); | ||
|  |   }; | ||
|  |   var registerButtons$5 = function (editor) { | ||
|  |     editor.addButton('undo', { | ||
|  |       tooltip: 'Undo', | ||
|  |       onPostRender: toggleUndoRedoState(editor, 'undo'), | ||
|  |       cmd: 'undo' | ||
|  |     }); | ||
|  |     editor.addButton('redo', { | ||
|  |       tooltip: 'Redo', | ||
|  |       onPostRender: toggleUndoRedoState(editor, 'redo'), | ||
|  |       cmd: 'redo' | ||
|  |     }); | ||
|  |   }; | ||
|  |   var register$7 = function (editor) { | ||
|  |     registerMenuItems$2(editor); | ||
|  |     registerButtons$5(editor); | ||
|  |   }; | ||
|  |   var $_5qfrkx1bqjjgwekdq = { register: register$7 }; | ||
|  | 
 | ||
|  |   var toggleVisualAidState = function (editor) { | ||
|  |     return function () { | ||
|  |       var self = this; | ||
|  |       editor.on('VisualAid', function (e) { | ||
|  |         self.active(e.hasVisual); | ||
|  |       }); | ||
|  |       self.active(editor.hasVisual); | ||
|  |     }; | ||
|  |   }; | ||
|  |   var registerMenuItems$3 = function (editor) { | ||
|  |     editor.addMenuItem('visualaid', { | ||
|  |       text: 'Visual aids', | ||
|  |       selectable: true, | ||
|  |       onPostRender: toggleVisualAidState(editor), | ||
|  |       cmd: 'mceToggleVisualAid' | ||
|  |     }); | ||
|  |   }; | ||
|  |   var register$8 = function (editor) { | ||
|  |     registerMenuItems$3(editor); | ||
|  |   }; | ||
|  |   var $_ebb6rc1brjjgwekdr = { register: register$8 }; | ||
|  | 
 | ||
|  |   var setupEnvironment = function () { | ||
|  |     Widget.tooltips = !global$1.iOS; | ||
|  |     Control$1.translate = function (text) { | ||
|  |       return global$5.translate(text); | ||
|  |     }; | ||
|  |   }; | ||
|  |   var setupUiContainer = function (editor) { | ||
|  |     if (editor.settings.ui_container) { | ||
|  |       global$1.container = $_6nlstg1bfjjgwekcb.descendant(Element$$1.fromDom(document.body), editor.settings.ui_container).fold(constant(null), function (elm) { | ||
|  |         return elm.dom(); | ||
|  |       }); | ||
|  |     } | ||
|  |   }; | ||
|  |   var setupRtlMode = function (editor) { | ||
|  |     if (editor.rtl) { | ||
|  |       Control$1.rtl = true; | ||
|  |     } | ||
|  |   }; | ||
|  |   var setupHideFloatPanels = function (editor) { | ||
|  |     editor.on('mousedown', function () { | ||
|  |       FloatPanel.hideAll(); | ||
|  |     }); | ||
|  |   }; | ||
|  |   var setup = function (editor) { | ||
|  |     setupRtlMode(editor); | ||
|  |     setupHideFloatPanels(editor); | ||
|  |     setupUiContainer(editor); | ||
|  |     setupEnvironment(); | ||
|  |     $_a3xw9u1bnjjgwekdh.register(editor); | ||
|  |     $_7uh4c31bijjgwekcw.register(editor); | ||
|  |     $_2ywvy11bpjjgwekdn.register(editor); | ||
|  |     $_5qfrkx1bqjjgwekdq.register(editor); | ||
|  |     $_b15nsk1bljjgwekd9.register(editor); | ||
|  |     $_2g5ce1bkjjgwekcz.register(editor); | ||
|  |     $_9qaa1r1bmjjgwekdc.register(editor); | ||
|  |     $_ebb6rc1brjjgwekdr.register(editor); | ||
|  |     $_dvqvtt1bojjgwekdj.register(editor); | ||
|  |   }; | ||
|  |   var $_gg6ikw1bejjgwekc5 = { setup: setup }; | ||
|  | 
 | ||
|  |   var GridLayout = AbsoluteLayout.extend({ | ||
|  |     recalc: function (container) { | ||
|  |       var settings, rows, cols, items, contLayoutRect, width, height, rect, ctrlLayoutRect, ctrl, x, y, posX, posY, ctrlSettings, contPaddingBox, align, spacingH, spacingV, alignH, alignV, maxX, maxY; | ||
|  |       var colWidths = []; | ||
|  |       var rowHeights = []; | ||
|  |       var ctrlMinWidth, ctrlMinHeight, availableWidth, availableHeight, reverseRows, idx; | ||
|  |       settings = container.settings; | ||
|  |       items = container.items().filter(':visible'); | ||
|  |       contLayoutRect = container.layoutRect(); | ||
|  |       cols = settings.columns || Math.ceil(Math.sqrt(items.length)); | ||
|  |       rows = Math.ceil(items.length / cols); | ||
|  |       spacingH = settings.spacingH || settings.spacing || 0; | ||
|  |       spacingV = settings.spacingV || settings.spacing || 0; | ||
|  |       alignH = settings.alignH || settings.align; | ||
|  |       alignV = settings.alignV || settings.align; | ||
|  |       contPaddingBox = container.paddingBox; | ||
|  |       reverseRows = 'reverseRows' in settings ? settings.reverseRows : container.isRtl(); | ||
|  |       if (alignH && typeof alignH === 'string') { | ||
|  |         alignH = [alignH]; | ||
|  |       } | ||
|  |       if (alignV && typeof alignV === 'string') { | ||
|  |         alignV = [alignV]; | ||
|  |       } | ||
|  |       for (x = 0; x < cols; x++) { | ||
|  |         colWidths.push(0); | ||
|  |       } | ||
|  |       for (y = 0; y < rows; y++) { | ||
|  |         rowHeights.push(0); | ||
|  |       } | ||
|  |       for (y = 0; y < rows; y++) { | ||
|  |         for (x = 0; x < cols; x++) { | ||
|  |           ctrl = items[y * cols + x]; | ||
|  |           if (!ctrl) { | ||
|  |             break; | ||
|  |           } | ||
|  |           ctrlLayoutRect = ctrl.layoutRect(); | ||
|  |           ctrlMinWidth = ctrlLayoutRect.minW; | ||
|  |           ctrlMinHeight = ctrlLayoutRect.minH; | ||
|  |           colWidths[x] = ctrlMinWidth > colWidths[x] ? ctrlMinWidth : colWidths[x]; | ||
|  |           rowHeights[y] = ctrlMinHeight > rowHeights[y] ? ctrlMinHeight : rowHeights[y]; | ||
|  |         } | ||
|  |       } | ||
|  |       availableWidth = contLayoutRect.innerW - contPaddingBox.left - contPaddingBox.right; | ||
|  |       for (maxX = 0, x = 0; x < cols; x++) { | ||
|  |         maxX += colWidths[x] + (x > 0 ? spacingH : 0); | ||
|  |         availableWidth -= (x > 0 ? spacingH : 0) + colWidths[x]; | ||
|  |       } | ||
|  |       availableHeight = contLayoutRect.innerH - contPaddingBox.top - contPaddingBox.bottom; | ||
|  |       for (maxY = 0, y = 0; y < rows; y++) { | ||
|  |         maxY += rowHeights[y] + (y > 0 ? spacingV : 0); | ||
|  |         availableHeight -= (y > 0 ? spacingV : 0) + rowHeights[y]; | ||
|  |       } | ||
|  |       maxX += contPaddingBox.left + contPaddingBox.right; | ||
|  |       maxY += contPaddingBox.top + contPaddingBox.bottom; | ||
|  |       rect = {}; | ||
|  |       rect.minW = maxX + (contLayoutRect.w - contLayoutRect.innerW); | ||
|  |       rect.minH = maxY + (contLayoutRect.h - contLayoutRect.innerH); | ||
|  |       rect.contentW = rect.minW - contLayoutRect.deltaW; | ||
|  |       rect.contentH = rect.minH - contLayoutRect.deltaH; | ||
|  |       rect.minW = Math.min(rect.minW, contLayoutRect.maxW); | ||
|  |       rect.minH = Math.min(rect.minH, contLayoutRect.maxH); | ||
|  |       rect.minW = Math.max(rect.minW, contLayoutRect.startMinWidth); | ||
|  |       rect.minH = Math.max(rect.minH, contLayoutRect.startMinHeight); | ||
|  |       if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) { | ||
|  |         rect.w = rect.minW; | ||
|  |         rect.h = rect.minH; | ||
|  |         container.layoutRect(rect); | ||
|  |         this.recalc(container); | ||
|  |         if (container._lastRect === null) { | ||
|  |           var parentCtrl = container.parent(); | ||
|  |           if (parentCtrl) { | ||
|  |             parentCtrl._lastRect = null; | ||
|  |             parentCtrl.recalc(); | ||
|  |           } | ||
|  |         } | ||
|  |         return; | ||
|  |       } | ||
|  |       if (contLayoutRect.autoResize) { | ||
|  |         rect = container.layoutRect(rect); | ||
|  |         rect.contentW = rect.minW - contLayoutRect.deltaW; | ||
|  |         rect.contentH = rect.minH - contLayoutRect.deltaH; | ||
|  |       } | ||
|  |       var flexV; | ||
|  |       if (settings.packV === 'start') { | ||
|  |         flexV = 0; | ||
|  |       } else { | ||
|  |         flexV = availableHeight > 0 ? Math.floor(availableHeight / rows) : 0; | ||
|  |       } | ||
|  |       var totalFlex = 0; | ||
|  |       var flexWidths = settings.flexWidths; | ||
|  |       if (flexWidths) { | ||
|  |         for (x = 0; x < flexWidths.length; x++) { | ||
|  |           totalFlex += flexWidths[x]; | ||
|  |         } | ||
|  |       } else { | ||
|  |         totalFlex = cols; | ||
|  |       } | ||
|  |       var ratio = availableWidth / totalFlex; | ||
|  |       for (x = 0; x < cols; x++) { | ||
|  |         colWidths[x] += flexWidths ? flexWidths[x] * ratio : ratio; | ||
|  |       } | ||
|  |       posY = contPaddingBox.top; | ||
|  |       for (y = 0; y < rows; y++) { | ||
|  |         posX = contPaddingBox.left; | ||
|  |         height = rowHeights[y] + flexV; | ||
|  |         for (x = 0; x < cols; x++) { | ||
|  |           if (reverseRows) { | ||
|  |             idx = y * cols + cols - 1 - x; | ||
|  |           } else { | ||
|  |             idx = y * cols + x; | ||
|  |           } | ||
|  |           ctrl = items[idx]; | ||
|  |           if (!ctrl) { | ||
|  |             break; | ||
|  |           } | ||
|  |           ctrlSettings = ctrl.settings; | ||
|  |           ctrlLayoutRect = ctrl.layoutRect(); | ||
|  |           width = Math.max(colWidths[x], ctrlLayoutRect.startMinWidth); | ||
|  |           ctrlLayoutRect.x = posX; | ||
|  |           ctrlLayoutRect.y = posY; | ||
|  |           align = ctrlSettings.alignH || (alignH ? alignH[x] || alignH[0] : null); | ||
|  |           if (align === 'center') { | ||
|  |             ctrlLayoutRect.x = posX + width / 2 - ctrlLayoutRect.w / 2; | ||
|  |           } else if (align === 'right') { | ||
|  |             ctrlLayoutRect.x = posX + width - ctrlLayoutRect.w; | ||
|  |           } else if (align === 'stretch') { | ||
|  |             ctrlLayoutRect.w = width; | ||
|  |           } | ||
|  |           align = ctrlSettings.alignV || (alignV ? alignV[x] || alignV[0] : null); | ||
|  |           if (align === 'center') { | ||
|  |             ctrlLayoutRect.y = posY + height / 2 - ctrlLayoutRect.h / 2; | ||
|  |           } else if (align === 'bottom') { | ||
|  |             ctrlLayoutRect.y = posY + height - ctrlLayoutRect.h; | ||
|  |           } else if (align === 'stretch') { | ||
|  |             ctrlLayoutRect.h = height; | ||
|  |           } | ||
|  |           ctrl.layoutRect(ctrlLayoutRect); | ||
|  |           posX += width + spacingH; | ||
|  |           if (ctrl.recalc) { | ||
|  |             ctrl.recalc(); | ||
|  |           } | ||
|  |         } | ||
|  |         posY += height + spacingV; | ||
|  |       } | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var Iframe = Widget.extend({ | ||
|  |     renderHtml: function () { | ||
|  |       var self = this; | ||
|  |       self.classes.add('iframe'); | ||
|  |       self.canFocus = false; | ||
|  |       return '<iframe id="' + self._id + '" class="' + self.classes + '" tabindex="-1" src="' + (self.settings.url || 'javascript:\'\'') + '" frameborder="0"></iframe>'; | ||
|  |     }, | ||
|  |     src: function (src) { | ||
|  |       this.getEl().src = src; | ||
|  |     }, | ||
|  |     html: function (html, callback) { | ||
|  |       var self = this, body = this.getEl().contentWindow.document.body; | ||
|  |       if (!body) { | ||
|  |         global$3.setTimeout(function () { | ||
|  |           self.html(html); | ||
|  |         }); | ||
|  |       } else { | ||
|  |         body.innerHTML = html; | ||
|  |         if (callback) { | ||
|  |           callback(); | ||
|  |         } | ||
|  |       } | ||
|  |       return this; | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var InfoBox = Widget.extend({ | ||
|  |     init: function (settings) { | ||
|  |       var self = this; | ||
|  |       self._super(settings); | ||
|  |       self.classes.add('widget').add('infobox'); | ||
|  |       self.canFocus = false; | ||
|  |     }, | ||
|  |     severity: function (level) { | ||
|  |       this.classes.remove('error'); | ||
|  |       this.classes.remove('warning'); | ||
|  |       this.classes.remove('success'); | ||
|  |       this.classes.add(level); | ||
|  |     }, | ||
|  |     help: function (state) { | ||
|  |       this.state.set('help', state); | ||
|  |     }, | ||
|  |     renderHtml: function () { | ||
|  |       var self = this, prefix = self.classPrefix; | ||
|  |       return '<div id="' + self._id + '" class="' + self.classes + '">' + '<div id="' + self._id + '-body">' + self.encode(self.state.get('text')) + '<button role="button" tabindex="-1">' + '<i class="' + prefix + 'ico ' + prefix + 'i-help"></i>' + '</button>' + '</div>' + '</div>'; | ||
|  |     }, | ||
|  |     bindStates: function () { | ||
|  |       var self = this; | ||
|  |       self.state.on('change:text', function (e) { | ||
|  |         self.getEl('body').firstChild.data = self.encode(e.value); | ||
|  |         if (self.state.get('rendered')) { | ||
|  |           self.updateLayoutRect(); | ||
|  |         } | ||
|  |       }); | ||
|  |       self.state.on('change:help', function (e) { | ||
|  |         self.classes.toggle('has-help', e.value); | ||
|  |         if (self.state.get('rendered')) { | ||
|  |           self.updateLayoutRect(); | ||
|  |         } | ||
|  |       }); | ||
|  |       return self._super(); | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var Label = Widget.extend({ | ||
|  |     init: function (settings) { | ||
|  |       var self = this; | ||
|  |       self._super(settings); | ||
|  |       self.classes.add('widget').add('label'); | ||
|  |       self.canFocus = false; | ||
|  |       if (settings.multiline) { | ||
|  |         self.classes.add('autoscroll'); | ||
|  |       } | ||
|  |       if (settings.strong) { | ||
|  |         self.classes.add('strong'); | ||
|  |       } | ||
|  |     }, | ||
|  |     initLayoutRect: function () { | ||
|  |       var self = this, layoutRect = self._super(); | ||
|  |       if (self.settings.multiline) { | ||
|  |         var size = funcs.getSize(self.getEl()); | ||
|  |         if (size.width > layoutRect.maxW) { | ||
|  |           layoutRect.minW = layoutRect.maxW; | ||
|  |           self.classes.add('multiline'); | ||
|  |         } | ||
|  |         self.getEl().style.width = layoutRect.minW + 'px'; | ||
|  |         layoutRect.startMinH = layoutRect.h = layoutRect.minH = Math.min(layoutRect.maxH, funcs.getSize(self.getEl()).height); | ||
|  |       } | ||
|  |       return layoutRect; | ||
|  |     }, | ||
|  |     repaint: function () { | ||
|  |       var self = this; | ||
|  |       if (!self.settings.multiline) { | ||
|  |         self.getEl().style.lineHeight = self.layoutRect().h + 'px'; | ||
|  |       } | ||
|  |       return self._super(); | ||
|  |     }, | ||
|  |     severity: function (level) { | ||
|  |       this.classes.remove('error'); | ||
|  |       this.classes.remove('warning'); | ||
|  |       this.classes.remove('success'); | ||
|  |       this.classes.add(level); | ||
|  |     }, | ||
|  |     renderHtml: function () { | ||
|  |       var self = this; | ||
|  |       var targetCtrl, forName, forId = self.settings.forId; | ||
|  |       var text = self.settings.html ? self.settings.html : self.encode(self.state.get('text')); | ||
|  |       if (!forId && (forName = self.settings.forName)) { | ||
|  |         targetCtrl = self.getRoot().find('#' + forName)[0]; | ||
|  |         if (targetCtrl) { | ||
|  |           forId = targetCtrl._id; | ||
|  |         } | ||
|  |       } | ||
|  |       if (forId) { | ||
|  |         return '<label id="' + self._id + '" class="' + self.classes + '"' + (forId ? ' for="' + forId + '"' : '') + '>' + text + '</label>'; | ||
|  |       } | ||
|  |       return '<span id="' + self._id + '" class="' + self.classes + '">' + text + '</span>'; | ||
|  |     }, | ||
|  |     bindStates: function () { | ||
|  |       var self = this; | ||
|  |       self.state.on('change:text', function (e) { | ||
|  |         self.innerHtml(self.encode(e.value)); | ||
|  |         if (self.state.get('rendered')) { | ||
|  |           self.updateLayoutRect(); | ||
|  |         } | ||
|  |       }); | ||
|  |       return self._super(); | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var Toolbar$1 = Container.extend({ | ||
|  |     Defaults: { | ||
|  |       role: 'toolbar', | ||
|  |       layout: 'flow' | ||
|  |     }, | ||
|  |     init: function (settings) { | ||
|  |       var self = this; | ||
|  |       self._super(settings); | ||
|  |       self.classes.add('toolbar'); | ||
|  |     }, | ||
|  |     postRender: function () { | ||
|  |       var self = this; | ||
|  |       self.items().each(function (ctrl) { | ||
|  |         ctrl.classes.add('toolbar-item'); | ||
|  |       }); | ||
|  |       return self._super(); | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var MenuBar = Toolbar$1.extend({ | ||
|  |     Defaults: { | ||
|  |       role: 'menubar', | ||
|  |       containerCls: 'menubar', | ||
|  |       ariaRoot: true, | ||
|  |       defaults: { type: 'menubutton' } | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   function isChildOf$1(node, parent$$1) { | ||
|  |     while (node) { | ||
|  |       if (parent$$1 === node) { | ||
|  |         return true; | ||
|  |       } | ||
|  |       node = node.parentNode; | ||
|  |     } | ||
|  |     return false; | ||
|  |   } | ||
|  |   var MenuButton = Button.extend({ | ||
|  |     init: function (settings) { | ||
|  |       var self$$1 = this; | ||
|  |       self$$1._renderOpen = true; | ||
|  |       self$$1._super(settings); | ||
|  |       settings = self$$1.settings; | ||
|  |       self$$1.classes.add('menubtn'); | ||
|  |       if (settings.fixedWidth) { | ||
|  |         self$$1.classes.add('fixed-width'); | ||
|  |       } | ||
|  |       self$$1.aria('haspopup', true); | ||
|  |       self$$1.state.set('menu', settings.menu || self$$1.render()); | ||
|  |     }, | ||
|  |     showMenu: function (toggle) { | ||
|  |       var self$$1 = this; | ||
|  |       var menu; | ||
|  |       if (self$$1.menu && self$$1.menu.visible() && toggle !== false) { | ||
|  |         return self$$1.hideMenu(); | ||
|  |       } | ||
|  |       if (!self$$1.menu) { | ||
|  |         menu = self$$1.state.get('menu') || []; | ||
|  |         self$$1.classes.add('opened'); | ||
|  |         if (menu.length) { | ||
|  |           menu = { | ||
|  |             type: 'menu', | ||
|  |             animate: true, | ||
|  |             items: menu | ||
|  |           }; | ||
|  |         } else { | ||
|  |           menu.type = menu.type || 'menu'; | ||
|  |           menu.animate = true; | ||
|  |         } | ||
|  |         if (!menu.renderTo) { | ||
|  |           self$$1.menu = global$11.create(menu).parent(self$$1).renderTo(); | ||
|  |         } else { | ||
|  |           self$$1.menu = menu.parent(self$$1).show().renderTo(); | ||
|  |         } | ||
|  |         self$$1.fire('createmenu'); | ||
|  |         self$$1.menu.reflow(); | ||
|  |         self$$1.menu.on('cancel', function (e) { | ||
|  |           if (e.control.parent() === self$$1.menu) { | ||
|  |             e.stopPropagation(); | ||
|  |             self$$1.focus(); | ||
|  |             self$$1.hideMenu(); | ||
|  |           } | ||
|  |         }); | ||
|  |         self$$1.menu.on('select', function () { | ||
|  |           self$$1.focus(); | ||
|  |         }); | ||
|  |         self$$1.menu.on('show hide', function (e) { | ||
|  |           if (e.control === self$$1.menu) { | ||
|  |             self$$1.activeMenu(e.type === 'show'); | ||
|  |             self$$1.classes.toggle('opened', e.type === 'show'); | ||
|  |           } | ||
|  |           self$$1.aria('expanded', e.type === 'show'); | ||
|  |         }).fire('show'); | ||
|  |       } | ||
|  |       self$$1.menu.show(); | ||
|  |       self$$1.menu.layoutRect({ w: self$$1.layoutRect().w }); | ||
|  |       self$$1.menu.repaint(); | ||
|  |       self$$1.menu.moveRel(self$$1.getEl(), self$$1.isRtl() ? [ | ||
|  |         'br-tr', | ||
|  |         'tr-br' | ||
|  |       ] : [ | ||
|  |         'bl-tl', | ||
|  |         'tl-bl' | ||
|  |       ]); | ||
|  |       self$$1.fire('showmenu'); | ||
|  |     }, | ||
|  |     hideMenu: function () { | ||
|  |       var self$$1 = this; | ||
|  |       if (self$$1.menu) { | ||
|  |         self$$1.menu.items().each(function (item) { | ||
|  |           if (item.hideMenu) { | ||
|  |             item.hideMenu(); | ||
|  |           } | ||
|  |         }); | ||
|  |         self$$1.menu.hide(); | ||
|  |       } | ||
|  |     }, | ||
|  |     activeMenu: function (state) { | ||
|  |       this.classes.toggle('active', state); | ||
|  |     }, | ||
|  |     renderHtml: function () { | ||
|  |       var self$$1 = this, id = self$$1._id, prefix = self$$1.classPrefix; | ||
|  |       var icon = self$$1.settings.icon, image; | ||
|  |       var text = self$$1.state.get('text'); | ||
|  |       var textHtml = ''; | ||
|  |       image = self$$1.settings.image; | ||
|  |       if (image) { | ||
|  |         icon = 'none'; | ||
|  |         if (typeof image !== 'string') { | ||
|  |           image = window.getSelection ? image[0] : image[1]; | ||
|  |         } | ||
|  |         image = ' style="background-image: url(\'' + image + '\')"'; | ||
|  |       } else { | ||
|  |         image = ''; | ||
|  |       } | ||
|  |       if (text) { | ||
|  |         self$$1.classes.add('btn-has-text'); | ||
|  |         textHtml = '<span class="' + prefix + 'txt">' + self$$1.encode(text) + '</span>'; | ||
|  |       } | ||
|  |       icon = self$$1.settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : ''; | ||
|  |       self$$1.aria('role', self$$1.parent() instanceof MenuBar ? 'menuitem' : 'button'); | ||
|  |       return '<div id="' + id + '" class="' + self$$1.classes + '" tabindex="-1" aria-labelledby="' + id + '">' + '<button id="' + id + '-open" role="presentation" type="button" tabindex="-1">' + (icon ? '<i class="' + icon + '"' + image + '></i>' : '') + textHtml + ' <i class="' + prefix + 'caret"></i>' + '</button>' + '</div>'; | ||
|  |     }, | ||
|  |     postRender: function () { | ||
|  |       var self$$1 = this; | ||
|  |       self$$1.on('click', function (e) { | ||
|  |         if (e.control === self$$1 && isChildOf$1(e.target, self$$1.getEl())) { | ||
|  |           self$$1.focus(); | ||
|  |           self$$1.showMenu(!e.aria); | ||
|  |           if (e.aria) { | ||
|  |             self$$1.menu.items().filter(':visible')[0].focus(); | ||
|  |           } | ||
|  |         } | ||
|  |       }); | ||
|  |       self$$1.on('mouseenter', function (e) { | ||
|  |         var overCtrl = e.control; | ||
|  |         var parent$$1 = self$$1.parent(); | ||
|  |         var hasVisibleSiblingMenu; | ||
|  |         if (overCtrl && parent$$1 && overCtrl instanceof MenuButton && overCtrl.parent() === parent$$1) { | ||
|  |           parent$$1.items().filter('MenuButton').each(function (ctrl) { | ||
|  |             if (ctrl.hideMenu && ctrl !== overCtrl) { | ||
|  |               if (ctrl.menu && ctrl.menu.visible()) { | ||
|  |                 hasVisibleSiblingMenu = true; | ||
|  |               } | ||
|  |               ctrl.hideMenu(); | ||
|  |             } | ||
|  |           }); | ||
|  |           if (hasVisibleSiblingMenu) { | ||
|  |             overCtrl.focus(); | ||
|  |             overCtrl.showMenu(); | ||
|  |           } | ||
|  |         } | ||
|  |       }); | ||
|  |       return self$$1._super(); | ||
|  |     }, | ||
|  |     bindStates: function () { | ||
|  |       var self$$1 = this; | ||
|  |       self$$1.state.on('change:menu', function () { | ||
|  |         if (self$$1.menu) { | ||
|  |           self$$1.menu.remove(); | ||
|  |         } | ||
|  |         self$$1.menu = null; | ||
|  |       }); | ||
|  |       return self$$1._super(); | ||
|  |     }, | ||
|  |     remove: function () { | ||
|  |       this._super(); | ||
|  |       if (this.menu) { | ||
|  |         this.menu.remove(); | ||
|  |       } | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   function Throbber (elm, inline) { | ||
|  |     var self = this; | ||
|  |     var state; | ||
|  |     var classPrefix = Control$1.classPrefix; | ||
|  |     var timer; | ||
|  |     self.show = function (time, callback) { | ||
|  |       function render() { | ||
|  |         if (state) { | ||
|  |           global$7(elm).append('<div class="' + classPrefix + 'throbber' + (inline ? ' ' + classPrefix + 'throbber-inline' : '') + '"></div>'); | ||
|  |           if (callback) { | ||
|  |             callback(); | ||
|  |           } | ||
|  |         } | ||
|  |       } | ||
|  |       self.hide(); | ||
|  |       state = true; | ||
|  |       if (time) { | ||
|  |         timer = global$3.setTimeout(render, time); | ||
|  |       } else { | ||
|  |         render(); | ||
|  |       } | ||
|  |       return self; | ||
|  |     }; | ||
|  |     self.hide = function () { | ||
|  |       var child = elm.lastChild; | ||
|  |       global$3.clearTimeout(timer); | ||
|  |       if (child && child.className.indexOf('throbber') !== -1) { | ||
|  |         child.parentNode.removeChild(child); | ||
|  |       } | ||
|  |       state = false; | ||
|  |       return self; | ||
|  |     }; | ||
|  |   } | ||
|  | 
 | ||
|  |   var Menu = FloatPanel.extend({ | ||
|  |     Defaults: { | ||
|  |       defaultType: 'menuitem', | ||
|  |       border: 1, | ||
|  |       layout: 'stack', | ||
|  |       role: 'application', | ||
|  |       bodyRole: 'menu', | ||
|  |       ariaRoot: true | ||
|  |     }, | ||
|  |     init: function (settings) { | ||
|  |       var self = this; | ||
|  |       settings.autohide = true; | ||
|  |       settings.constrainToViewport = true; | ||
|  |       if (typeof settings.items === 'function') { | ||
|  |         settings.itemsFactory = settings.items; | ||
|  |         settings.items = []; | ||
|  |       } | ||
|  |       if (settings.itemDefaults) { | ||
|  |         var items = settings.items; | ||
|  |         var i = items.length; | ||
|  |         while (i--) { | ||
|  |           items[i] = global$4.extend({}, settings.itemDefaults, items[i]); | ||
|  |         } | ||
|  |       } | ||
|  |       self._super(settings); | ||
|  |       self.classes.add('menu'); | ||
|  |       if (settings.animate && global$1.ie !== 11) { | ||
|  |         self.classes.add('animate'); | ||
|  |       } | ||
|  |     }, | ||
|  |     repaint: function () { | ||
|  |       this.classes.toggle('menu-align', true); | ||
|  |       this._super(); | ||
|  |       this.getEl().style.height = ''; | ||
|  |       this.getEl('body').style.height = ''; | ||
|  |       return this; | ||
|  |     }, | ||
|  |     cancel: function () { | ||
|  |       var self = this; | ||
|  |       self.hideAll(); | ||
|  |       self.fire('select'); | ||
|  |     }, | ||
|  |     load: function () { | ||
|  |       var self = this; | ||
|  |       var time, factory; | ||
|  |       function hideThrobber() { | ||
|  |         if (self.throbber) { | ||
|  |           self.throbber.hide(); | ||
|  |           self.throbber = null; | ||
|  |         } | ||
|  |       } | ||
|  |       factory = self.settings.itemsFactory; | ||
|  |       if (!factory) { | ||
|  |         return; | ||
|  |       } | ||
|  |       if (!self.throbber) { | ||
|  |         self.throbber = new Throbber(self.getEl('body'), true); | ||
|  |         if (self.items().length === 0) { | ||
|  |           self.throbber.show(); | ||
|  |           self.fire('loading'); | ||
|  |         } else { | ||
|  |           self.throbber.show(100, function () { | ||
|  |             self.items().remove(); | ||
|  |             self.fire('loading'); | ||
|  |           }); | ||
|  |         } | ||
|  |         self.on('hide close', hideThrobber); | ||
|  |       } | ||
|  |       self.requestTime = time = new Date().getTime(); | ||
|  |       self.settings.itemsFactory(function (items) { | ||
|  |         if (items.length === 0) { | ||
|  |           self.hide(); | ||
|  |           return; | ||
|  |         } | ||
|  |         if (self.requestTime !== time) { | ||
|  |           return; | ||
|  |         } | ||
|  |         self.getEl().style.width = ''; | ||
|  |         self.getEl('body').style.width = ''; | ||
|  |         hideThrobber(); | ||
|  |         self.items().remove(); | ||
|  |         self.getEl('body').innerHTML = ''; | ||
|  |         self.add(items); | ||
|  |         self.renderNew(); | ||
|  |         self.fire('loaded'); | ||
|  |       }); | ||
|  |     }, | ||
|  |     hideAll: function () { | ||
|  |       var self = this; | ||
|  |       this.find('menuitem').exec('hideMenu'); | ||
|  |       return self._super(); | ||
|  |     }, | ||
|  |     preRender: function () { | ||
|  |       var self = this; | ||
|  |       self.items().each(function (ctrl) { | ||
|  |         var settings = ctrl.settings; | ||
|  |         if (settings.icon || settings.image || settings.selectable) { | ||
|  |           self._hasIcons = true; | ||
|  |           return false; | ||
|  |         } | ||
|  |       }); | ||
|  |       if (self.settings.itemsFactory) { | ||
|  |         self.on('postrender', function () { | ||
|  |           if (self.settings.itemsFactory) { | ||
|  |             self.load(); | ||
|  |           } | ||
|  |         }); | ||
|  |       } | ||
|  |       self.on('show hide', function (e) { | ||
|  |         if (e.control === self) { | ||
|  |           if (e.type === 'show') { | ||
|  |             global$3.setTimeout(function () { | ||
|  |               self.classes.add('in'); | ||
|  |             }, 0); | ||
|  |           } else { | ||
|  |             self.classes.remove('in'); | ||
|  |           } | ||
|  |         } | ||
|  |       }); | ||
|  |       return self._super(); | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var ListBox = MenuButton.extend({ | ||
|  |     init: function (settings) { | ||
|  |       var self = this; | ||
|  |       var values, selected, selectedText, lastItemCtrl; | ||
|  |       function setSelected(menuValues) { | ||
|  |         for (var i = 0; i < menuValues.length; i++) { | ||
|  |           selected = menuValues[i].selected || settings.value === menuValues[i].value; | ||
|  |           if (selected) { | ||
|  |             selectedText = selectedText || menuValues[i].text; | ||
|  |             self.state.set('value', menuValues[i].value); | ||
|  |             return true; | ||
|  |           } | ||
|  |           if (menuValues[i].menu) { | ||
|  |             if (setSelected(menuValues[i].menu)) { | ||
|  |               return true; | ||
|  |             } | ||
|  |           } | ||
|  |         } | ||
|  |       } | ||
|  |       self._super(settings); | ||
|  |       settings = self.settings; | ||
|  |       self._values = values = settings.values; | ||
|  |       if (values) { | ||
|  |         if (typeof settings.value !== 'undefined') { | ||
|  |           setSelected(values); | ||
|  |         } | ||
|  |         if (!selected && values.length > 0) { | ||
|  |           selectedText = values[0].text; | ||
|  |           self.state.set('value', values[0].value); | ||
|  |         } | ||
|  |         self.state.set('menu', values); | ||
|  |       } | ||
|  |       self.state.set('text', settings.text || selectedText); | ||
|  |       self.classes.add('listbox'); | ||
|  |       self.on('select', function (e) { | ||
|  |         var ctrl = e.control; | ||
|  |         if (lastItemCtrl) { | ||
|  |           e.lastControl = lastItemCtrl; | ||
|  |         } | ||
|  |         if (settings.multiple) { | ||
|  |           ctrl.active(!ctrl.active()); | ||
|  |         } else { | ||
|  |           self.value(e.control.value()); | ||
|  |         } | ||
|  |         lastItemCtrl = ctrl; | ||
|  |       }); | ||
|  |     }, | ||
|  |     value: function (value) { | ||
|  |       if (arguments.length === 0) { | ||
|  |         return this.state.get('value'); | ||
|  |       } | ||
|  |       if (typeof value === 'undefined') { | ||
|  |         return this; | ||
|  |       } | ||
|  |       if (this.settings.values) { | ||
|  |         var matchingValues = global$4.grep(this.settings.values, function (a) { | ||
|  |           return a.value === value; | ||
|  |         }); | ||
|  |         if (matchingValues.length > 0) { | ||
|  |           this.state.set('value', value); | ||
|  |         } else if (value === null) { | ||
|  |           this.state.set('value', null); | ||
|  |         } | ||
|  |       } else { | ||
|  |         this.state.set('value', value); | ||
|  |       } | ||
|  |       return this; | ||
|  |     }, | ||
|  |     bindStates: function () { | ||
|  |       var self = this; | ||
|  |       function activateMenuItemsByValue(menu, value) { | ||
|  |         if (menu instanceof Menu) { | ||
|  |           menu.items().each(function (ctrl) { | ||
|  |             if (!ctrl.hasMenus()) { | ||
|  |               ctrl.active(ctrl.value() === value); | ||
|  |             } | ||
|  |           }); | ||
|  |         } | ||
|  |       } | ||
|  |       function getSelectedItem(menuValues, value) { | ||
|  |         var selectedItem; | ||
|  |         if (!menuValues) { | ||
|  |           return; | ||
|  |         } | ||
|  |         for (var i = 0; i < menuValues.length; i++) { | ||
|  |           if (menuValues[i].value === value) { | ||
|  |             return menuValues[i]; | ||
|  |           } | ||
|  |           if (menuValues[i].menu) { | ||
|  |             selectedItem = getSelectedItem(menuValues[i].menu, value); | ||
|  |             if (selectedItem) { | ||
|  |               return selectedItem; | ||
|  |             } | ||
|  |           } | ||
|  |         } | ||
|  |       } | ||
|  |       self.on('show', function (e) { | ||
|  |         activateMenuItemsByValue(e.control, self.value()); | ||
|  |       }); | ||
|  |       self.state.on('change:value', function (e) { | ||
|  |         var selectedItem = getSelectedItem(self.state.get('menu'), e.value); | ||
|  |         if (selectedItem) { | ||
|  |           self.text(selectedItem.text); | ||
|  |         } else { | ||
|  |           self.text(self.settings.text); | ||
|  |         } | ||
|  |       }); | ||
|  |       return self._super(); | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var toggleTextStyle = function (ctrl, state) { | ||
|  |     var textStyle = ctrl._textStyle; | ||
|  |     if (textStyle) { | ||
|  |       var textElm = ctrl.getEl('text'); | ||
|  |       textElm.setAttribute('style', textStyle); | ||
|  |       if (state) { | ||
|  |         textElm.style.color = ''; | ||
|  |         textElm.style.backgroundColor = ''; | ||
|  |       } | ||
|  |     } | ||
|  |   }; | ||
|  |   var MenuItem = Widget.extend({ | ||
|  |     Defaults: { | ||
|  |       border: 0, | ||
|  |       role: 'menuitem' | ||
|  |     }, | ||
|  |     init: function (settings) { | ||
|  |       var self = this; | ||
|  |       var text; | ||
|  |       self._super(settings); | ||
|  |       settings = self.settings; | ||
|  |       self.classes.add('menu-item'); | ||
|  |       if (settings.menu) { | ||
|  |         self.classes.add('menu-item-expand'); | ||
|  |       } | ||
|  |       if (settings.preview) { | ||
|  |         self.classes.add('menu-item-preview'); | ||
|  |       } | ||
|  |       text = self.state.get('text'); | ||
|  |       if (text === '-' || text === '|') { | ||
|  |         self.classes.add('menu-item-sep'); | ||
|  |         self.aria('role', 'separator'); | ||
|  |         self.state.set('text', '-'); | ||
|  |       } | ||
|  |       if (settings.selectable) { | ||
|  |         self.aria('role', 'menuitemcheckbox'); | ||
|  |         self.classes.add('menu-item-checkbox'); | ||
|  |         settings.icon = 'selected'; | ||
|  |       } | ||
|  |       if (!settings.preview && !settings.selectable) { | ||
|  |         self.classes.add('menu-item-normal'); | ||
|  |       } | ||
|  |       self.on('mousedown', function (e) { | ||
|  |         e.preventDefault(); | ||
|  |       }); | ||
|  |       if (settings.menu && !settings.ariaHideMenu) { | ||
|  |         self.aria('haspopup', true); | ||
|  |       } | ||
|  |     }, | ||
|  |     hasMenus: function () { | ||
|  |       return !!this.settings.menu; | ||
|  |     }, | ||
|  |     showMenu: function () { | ||
|  |       var self = this; | ||
|  |       var settings = self.settings; | ||
|  |       var menu; | ||
|  |       var parent = self.parent(); | ||
|  |       parent.items().each(function (ctrl) { | ||
|  |         if (ctrl !== self) { | ||
|  |           ctrl.hideMenu(); | ||
|  |         } | ||
|  |       }); | ||
|  |       if (settings.menu) { | ||
|  |         menu = self.menu; | ||
|  |         if (!menu) { | ||
|  |           menu = settings.menu; | ||
|  |           if (menu.length) { | ||
|  |             menu = { | ||
|  |               type: 'menu', | ||
|  |               items: menu | ||
|  |             }; | ||
|  |           } else { | ||
|  |             menu.type = menu.type || 'menu'; | ||
|  |           } | ||
|  |           if (parent.settings.itemDefaults) { | ||
|  |             menu.itemDefaults = parent.settings.itemDefaults; | ||
|  |           } | ||
|  |           menu = self.menu = global$11.create(menu).parent(self).renderTo(); | ||
|  |           menu.reflow(); | ||
|  |           menu.on('cancel', function (e) { | ||
|  |             e.stopPropagation(); | ||
|  |             self.focus(); | ||
|  |             menu.hide(); | ||
|  |           }); | ||
|  |           menu.on('show hide', function (e) { | ||
|  |             if (e.control.items) { | ||
|  |               e.control.items().each(function (ctrl) { | ||
|  |                 ctrl.active(ctrl.settings.selected); | ||
|  |               }); | ||
|  |             } | ||
|  |           }).fire('show'); | ||
|  |           menu.on('hide', function (e) { | ||
|  |             if (e.control === menu) { | ||
|  |               self.classes.remove('selected'); | ||
|  |             } | ||
|  |           }); | ||
|  |           menu.submenu = true; | ||
|  |         } else { | ||
|  |           menu.show(); | ||
|  |         } | ||
|  |         menu._parentMenu = parent; | ||
|  |         menu.classes.add('menu-sub'); | ||
|  |         var rel = menu.testMoveRel(self.getEl(), self.isRtl() ? [ | ||
|  |           'tl-tr', | ||
|  |           'bl-br', | ||
|  |           'tr-tl', | ||
|  |           'br-bl' | ||
|  |         ] : [ | ||
|  |           'tr-tl', | ||
|  |           'br-bl', | ||
|  |           'tl-tr', | ||
|  |           'bl-br' | ||
|  |         ]); | ||
|  |         menu.moveRel(self.getEl(), rel); | ||
|  |         menu.rel = rel; | ||
|  |         rel = 'menu-sub-' + rel; | ||
|  |         menu.classes.remove(menu._lastRel).add(rel); | ||
|  |         menu._lastRel = rel; | ||
|  |         self.classes.add('selected'); | ||
|  |         self.aria('expanded', true); | ||
|  |       } | ||
|  |     }, | ||
|  |     hideMenu: function () { | ||
|  |       var self = this; | ||
|  |       if (self.menu) { | ||
|  |         self.menu.items().each(function (item) { | ||
|  |           if (item.hideMenu) { | ||
|  |             item.hideMenu(); | ||
|  |           } | ||
|  |         }); | ||
|  |         self.menu.hide(); | ||
|  |         self.aria('expanded', false); | ||
|  |       } | ||
|  |       return self; | ||
|  |     }, | ||
|  |     renderHtml: function () { | ||
|  |       var self = this; | ||
|  |       var id = self._id; | ||
|  |       var settings = self.settings; | ||
|  |       var prefix = self.classPrefix; | ||
|  |       var text = self.state.get('text'); | ||
|  |       var icon = self.settings.icon, image = '', shortcut = settings.shortcut; | ||
|  |       var url = self.encode(settings.url), iconHtml = ''; | ||
|  |       function convertShortcut(shortcut) { | ||
|  |         var i, value, replace = {}; | ||
|  |         if (global$1.mac) { | ||
|  |           replace = { | ||
|  |             alt: '⌥', | ||
|  |             ctrl: '⌘', | ||
|  |             shift: '⇧', | ||
|  |             meta: '⌘' | ||
|  |           }; | ||
|  |         } else { | ||
|  |           replace = { meta: 'Ctrl' }; | ||
|  |         } | ||
|  |         shortcut = shortcut.split('+'); | ||
|  |         for (i = 0; i < shortcut.length; i++) { | ||
|  |           value = replace[shortcut[i].toLowerCase()]; | ||
|  |           if (value) { | ||
|  |             shortcut[i] = value; | ||
|  |           } | ||
|  |         } | ||
|  |         return shortcut.join('+'); | ||
|  |       } | ||
|  |       function escapeRegExp(str) { | ||
|  |         return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); | ||
|  |       } | ||
|  |       function markMatches(text) { | ||
|  |         var match = settings.match || ''; | ||
|  |         return match ? text.replace(new RegExp(escapeRegExp(match), 'gi'), function (match) { | ||
|  |           return '!mce~match[' + match + ']mce~match!'; | ||
|  |         }) : text; | ||
|  |       } | ||
|  |       function boldMatches(text) { | ||
|  |         return text.replace(new RegExp(escapeRegExp('!mce~match['), 'g'), '<b>').replace(new RegExp(escapeRegExp(']mce~match!'), 'g'), '</b>'); | ||
|  |       } | ||
|  |       if (icon) { | ||
|  |         self.parent().classes.add('menu-has-icons'); | ||
|  |       } | ||
|  |       if (settings.image) { | ||
|  |         image = ' style="background-image: url(\'' + settings.image + '\')"'; | ||
|  |       } | ||
|  |       if (shortcut) { | ||
|  |         shortcut = convertShortcut(shortcut); | ||
|  |       } | ||
|  |       icon = prefix + 'ico ' + prefix + 'i-' + (self.settings.icon || 'none'); | ||
|  |       iconHtml = text !== '-' ? '<i class="' + icon + '"' + image + '></i>\xA0' : ''; | ||
|  |       text = boldMatches(self.encode(markMatches(text))); | ||
|  |       url = boldMatches(self.encode(markMatches(url))); | ||
|  |       return '<div id="' + id + '" class="' + self.classes + '" tabindex="-1">' + iconHtml + (text !== '-' ? '<span id="' + id + '-text" class="' + prefix + 'text">' + text + '</span>' : '') + (shortcut ? '<div id="' + id + '-shortcut" class="' + prefix + 'menu-shortcut">' + shortcut + '</div>' : '') + (settings.menu ? '<div class="' + prefix + 'caret"></div>' : '') + (url ? '<div class="' + prefix + 'menu-item-link">' + url + '</div>' : '') + '</div>'; | ||
|  |     }, | ||
|  |     postRender: function () { | ||
|  |       var self = this, settings = self.settings; | ||
|  |       var textStyle = settings.textStyle; | ||
|  |       if (typeof textStyle === 'function') { | ||
|  |         textStyle = textStyle.call(this); | ||
|  |       } | ||
|  |       if (textStyle) { | ||
|  |         var textElm = self.getEl('text'); | ||
|  |         if (textElm) { | ||
|  |           textElm.setAttribute('style', textStyle); | ||
|  |           self._textStyle = textStyle; | ||
|  |         } | ||
|  |       } | ||
|  |       self.on('mouseenter click', function (e) { | ||
|  |         if (e.control === self) { | ||
|  |           if (!settings.menu && e.type === 'click') { | ||
|  |             self.fire('select'); | ||
|  |             global$3.requestAnimationFrame(function () { | ||
|  |               self.parent().hideAll(); | ||
|  |             }); | ||
|  |           } else { | ||
|  |             self.showMenu(); | ||
|  |             if (e.aria) { | ||
|  |               self.menu.focus(true); | ||
|  |             } | ||
|  |           } | ||
|  |         } | ||
|  |       }); | ||
|  |       self._super(); | ||
|  |       return self; | ||
|  |     }, | ||
|  |     hover: function () { | ||
|  |       var self = this; | ||
|  |       self.parent().items().each(function (ctrl) { | ||
|  |         ctrl.classes.remove('selected'); | ||
|  |       }); | ||
|  |       self.classes.toggle('selected', true); | ||
|  |       return self; | ||
|  |     }, | ||
|  |     active: function (state) { | ||
|  |       toggleTextStyle(this, state); | ||
|  |       if (typeof state !== 'undefined') { | ||
|  |         this.aria('checked', state); | ||
|  |       } | ||
|  |       return this._super(state); | ||
|  |     }, | ||
|  |     remove: function () { | ||
|  |       this._super(); | ||
|  |       if (this.menu) { | ||
|  |         this.menu.remove(); | ||
|  |       } | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var Radio = Checkbox.extend({ | ||
|  |     Defaults: { | ||
|  |       classes: 'radio', | ||
|  |       role: 'radio' | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var ResizeHandle = Widget.extend({ | ||
|  |     renderHtml: function () { | ||
|  |       var self = this, prefix = self.classPrefix; | ||
|  |       self.classes.add('resizehandle'); | ||
|  |       if (self.settings.direction === 'both') { | ||
|  |         self.classes.add('resizehandle-both'); | ||
|  |       } | ||
|  |       self.canFocus = false; | ||
|  |       return '<div id="' + self._id + '" class="' + self.classes + '">' + '<i class="' + prefix + 'ico ' + prefix + 'i-resize"></i>' + '</div>'; | ||
|  |     }, | ||
|  |     postRender: function () { | ||
|  |       var self = this; | ||
|  |       self._super(); | ||
|  |       self.resizeDragHelper = new DragHelper(this._id, { | ||
|  |         start: function () { | ||
|  |           self.fire('ResizeStart'); | ||
|  |         }, | ||
|  |         drag: function (e) { | ||
|  |           if (self.settings.direction !== 'both') { | ||
|  |             e.deltaX = 0; | ||
|  |           } | ||
|  |           self.fire('Resize', e); | ||
|  |         }, | ||
|  |         stop: function () { | ||
|  |           self.fire('ResizeEnd'); | ||
|  |         } | ||
|  |       }); | ||
|  |     }, | ||
|  |     remove: function () { | ||
|  |       if (this.resizeDragHelper) { | ||
|  |         this.resizeDragHelper.destroy(); | ||
|  |       } | ||
|  |       return this._super(); | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   function createOptions(options) { | ||
|  |     var strOptions = ''; | ||
|  |     if (options) { | ||
|  |       for (var i = 0; i < options.length; i++) { | ||
|  |         strOptions += '<option value="' + options[i] + '">' + options[i] + '</option>'; | ||
|  |       } | ||
|  |     } | ||
|  |     return strOptions; | ||
|  |   } | ||
|  |   var SelectBox = Widget.extend({ | ||
|  |     Defaults: { | ||
|  |       classes: 'selectbox', | ||
|  |       role: 'selectbox', | ||
|  |       options: [] | ||
|  |     }, | ||
|  |     init: function (settings) { | ||
|  |       var self = this; | ||
|  |       self._super(settings); | ||
|  |       if (self.settings.size) { | ||
|  |         self.size = self.settings.size; | ||
|  |       } | ||
|  |       if (self.settings.options) { | ||
|  |         self._options = self.settings.options; | ||
|  |       } | ||
|  |       self.on('keydown', function (e) { | ||
|  |         var rootControl; | ||
|  |         if (e.keyCode === 13) { | ||
|  |           e.preventDefault(); | ||
|  |           self.parents().reverse().each(function (ctrl) { | ||
|  |             if (ctrl.toJSON) { | ||
|  |               rootControl = ctrl; | ||
|  |               return false; | ||
|  |             } | ||
|  |           }); | ||
|  |           self.fire('submit', { data: rootControl.toJSON() }); | ||
|  |         } | ||
|  |       }); | ||
|  |     }, | ||
|  |     options: function (state) { | ||
|  |       if (!arguments.length) { | ||
|  |         return this.state.get('options'); | ||
|  |       } | ||
|  |       this.state.set('options', state); | ||
|  |       return this; | ||
|  |     }, | ||
|  |     renderHtml: function () { | ||
|  |       var self = this; | ||
|  |       var options, size = ''; | ||
|  |       options = createOptions(self._options); | ||
|  |       if (self.size) { | ||
|  |         size = ' size = "' + self.size + '"'; | ||
|  |       } | ||
|  |       return '<select id="' + self._id + '" class="' + self.classes + '"' + size + '>' + options + '</select>'; | ||
|  |     }, | ||
|  |     bindStates: function () { | ||
|  |       var self = this; | ||
|  |       self.state.on('change:options', function (e) { | ||
|  |         self.getEl().innerHTML = createOptions(e.value); | ||
|  |       }); | ||
|  |       return self._super(); | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   function constrain(value, minVal, maxVal) { | ||
|  |     if (value < minVal) { | ||
|  |       value = minVal; | ||
|  |     } | ||
|  |     if (value > maxVal) { | ||
|  |       value = maxVal; | ||
|  |     } | ||
|  |     return value; | ||
|  |   } | ||
|  |   function setAriaProp(el, name, value) { | ||
|  |     el.setAttribute('aria-' + name, value); | ||
|  |   } | ||
|  |   function updateSliderHandle(ctrl, value) { | ||
|  |     var maxHandlePos, shortSizeName, sizeName, stylePosName, styleValue, handleEl; | ||
|  |     if (ctrl.settings.orientation === 'v') { | ||
|  |       stylePosName = 'top'; | ||
|  |       sizeName = 'height'; | ||
|  |       shortSizeName = 'h'; | ||
|  |     } else { | ||
|  |       stylePosName = 'left'; | ||
|  |       sizeName = 'width'; | ||
|  |       shortSizeName = 'w'; | ||
|  |     } | ||
|  |     handleEl = ctrl.getEl('handle'); | ||
|  |     maxHandlePos = (ctrl.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName]; | ||
|  |     styleValue = maxHandlePos * ((value - ctrl._minValue) / (ctrl._maxValue - ctrl._minValue)) + 'px'; | ||
|  |     handleEl.style[stylePosName] = styleValue; | ||
|  |     handleEl.style.height = ctrl.layoutRect().h + 'px'; | ||
|  |     setAriaProp(handleEl, 'valuenow', value); | ||
|  |     setAriaProp(handleEl, 'valuetext', '' + ctrl.settings.previewFilter(value)); | ||
|  |     setAriaProp(handleEl, 'valuemin', ctrl._minValue); | ||
|  |     setAriaProp(handleEl, 'valuemax', ctrl._maxValue); | ||
|  |   } | ||
|  |   var Slider = Widget.extend({ | ||
|  |     init: function (settings) { | ||
|  |       var self = this; | ||
|  |       if (!settings.previewFilter) { | ||
|  |         settings.previewFilter = function (value) { | ||
|  |           return Math.round(value * 100) / 100; | ||
|  |         }; | ||
|  |       } | ||
|  |       self._super(settings); | ||
|  |       self.classes.add('slider'); | ||
|  |       if (settings.orientation === 'v') { | ||
|  |         self.classes.add('vertical'); | ||
|  |       } | ||
|  |       self._minValue = isNumber$1(settings.minValue) ? settings.minValue : 0; | ||
|  |       self._maxValue = isNumber$1(settings.maxValue) ? settings.maxValue : 100; | ||
|  |       self._initValue = self.state.get('value'); | ||
|  |     }, | ||
|  |     renderHtml: function () { | ||
|  |       var self = this, id = self._id, prefix = self.classPrefix; | ||
|  |       return '<div id="' + id + '" class="' + self.classes + '">' + '<div id="' + id + '-handle" class="' + prefix + 'slider-handle" role="slider" tabindex="-1"></div>' + '</div>'; | ||
|  |     }, | ||
|  |     reset: function () { | ||
|  |       this.value(this._initValue).repaint(); | ||
|  |     }, | ||
|  |     postRender: function () { | ||
|  |       var self = this; | ||
|  |       var minValue, maxValue, screenCordName, stylePosName, sizeName, shortSizeName; | ||
|  |       function toFraction(min, max, val) { | ||
|  |         return (val + min) / (max - min); | ||
|  |       } | ||
|  |       function fromFraction(min, max, val) { | ||
|  |         return val * (max - min) - min; | ||
|  |       } | ||
|  |       function handleKeyboard(minValue, maxValue) { | ||
|  |         function alter(delta) { | ||
|  |           var value; | ||
|  |           value = self.value(); | ||
|  |           value = fromFraction(minValue, maxValue, toFraction(minValue, maxValue, value) + delta * 0.05); | ||
|  |           value = constrain(value, minValue, maxValue); | ||
|  |           self.value(value); | ||
|  |           self.fire('dragstart', { value: value }); | ||
|  |           self.fire('drag', { value: value }); | ||
|  |           self.fire('dragend', { value: value }); | ||
|  |         } | ||
|  |         self.on('keydown', function (e) { | ||
|  |           switch (e.keyCode) { | ||
|  |           case 37: | ||
|  |           case 38: | ||
|  |             alter(-1); | ||
|  |             break; | ||
|  |           case 39: | ||
|  |           case 40: | ||
|  |             alter(1); | ||
|  |             break; | ||
|  |           } | ||
|  |         }); | ||
|  |       } | ||
|  |       function handleDrag(minValue, maxValue, handleEl) { | ||
|  |         var startPos, startHandlePos, maxHandlePos, handlePos, value; | ||
|  |         self._dragHelper = new DragHelper(self._id, { | ||
|  |           handle: self._id + '-handle', | ||
|  |           start: function (e) { | ||
|  |             startPos = e[screenCordName]; | ||
|  |             startHandlePos = parseInt(self.getEl('handle').style[stylePosName], 10); | ||
|  |             maxHandlePos = (self.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName]; | ||
|  |             self.fire('dragstart', { value: value }); | ||
|  |           }, | ||
|  |           drag: function (e) { | ||
|  |             var delta = e[screenCordName] - startPos; | ||
|  |             handlePos = constrain(startHandlePos + delta, 0, maxHandlePos); | ||
|  |             handleEl.style[stylePosName] = handlePos + 'px'; | ||
|  |             value = minValue + handlePos / maxHandlePos * (maxValue - minValue); | ||
|  |             self.value(value); | ||
|  |             self.tooltip().text('' + self.settings.previewFilter(value)).show().moveRel(handleEl, 'bc tc'); | ||
|  |             self.fire('drag', { value: value }); | ||
|  |           }, | ||
|  |           stop: function () { | ||
|  |             self.tooltip().hide(); | ||
|  |             self.fire('dragend', { value: value }); | ||
|  |           } | ||
|  |         }); | ||
|  |       } | ||
|  |       minValue = self._minValue; | ||
|  |       maxValue = self._maxValue; | ||
|  |       if (self.settings.orientation === 'v') { | ||
|  |         screenCordName = 'screenY'; | ||
|  |         stylePosName = 'top'; | ||
|  |         sizeName = 'height'; | ||
|  |         shortSizeName = 'h'; | ||
|  |       } else { | ||
|  |         screenCordName = 'screenX'; | ||
|  |         stylePosName = 'left'; | ||
|  |         sizeName = 'width'; | ||
|  |         shortSizeName = 'w'; | ||
|  |       } | ||
|  |       self._super(); | ||
|  |       handleKeyboard(minValue, maxValue); | ||
|  |       handleDrag(minValue, maxValue, self.getEl('handle')); | ||
|  |     }, | ||
|  |     repaint: function () { | ||
|  |       this._super(); | ||
|  |       updateSliderHandle(this, this.value()); | ||
|  |     }, | ||
|  |     bindStates: function () { | ||
|  |       var self = this; | ||
|  |       self.state.on('change:value', function (e) { | ||
|  |         updateSliderHandle(self, e.value); | ||
|  |       }); | ||
|  |       return self._super(); | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var Spacer = Widget.extend({ | ||
|  |     renderHtml: function () { | ||
|  |       var self = this; | ||
|  |       self.classes.add('spacer'); | ||
|  |       self.canFocus = false; | ||
|  |       return '<div id="' + self._id + '" class="' + self.classes + '"></div>'; | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var SplitButton = MenuButton.extend({ | ||
|  |     Defaults: { | ||
|  |       classes: 'widget btn splitbtn', | ||
|  |       role: 'button' | ||
|  |     }, | ||
|  |     repaint: function () { | ||
|  |       var self$$1 = this; | ||
|  |       var elm = self$$1.getEl(); | ||
|  |       var rect = self$$1.layoutRect(); | ||
|  |       var mainButtonElm, menuButtonElm; | ||
|  |       self$$1._super(); | ||
|  |       mainButtonElm = elm.firstChild; | ||
|  |       menuButtonElm = elm.lastChild; | ||
|  |       global$7(mainButtonElm).css({ | ||
|  |         width: rect.w - funcs.getSize(menuButtonElm).width, | ||
|  |         height: rect.h - 2 | ||
|  |       }); | ||
|  |       global$7(menuButtonElm).css({ height: rect.h - 2 }); | ||
|  |       return self$$1; | ||
|  |     }, | ||
|  |     activeMenu: function (state) { | ||
|  |       var self$$1 = this; | ||
|  |       global$7(self$$1.getEl().lastChild).toggleClass(self$$1.classPrefix + 'active', state); | ||
|  |     }, | ||
|  |     renderHtml: function () { | ||
|  |       var self$$1 = this; | ||
|  |       var id = self$$1._id; | ||
|  |       var prefix = self$$1.classPrefix; | ||
|  |       var image; | ||
|  |       var icon = self$$1.state.get('icon'); | ||
|  |       var text = self$$1.state.get('text'); | ||
|  |       var settings = self$$1.settings; | ||
|  |       var textHtml = '', ariaPressed; | ||
|  |       image = settings.image; | ||
|  |       if (image) { | ||
|  |         icon = 'none'; | ||
|  |         if (typeof image !== 'string') { | ||
|  |           image = window.getSelection ? image[0] : image[1]; | ||
|  |         } | ||
|  |         image = ' style="background-image: url(\'' + image + '\')"'; | ||
|  |       } else { | ||
|  |         image = ''; | ||
|  |       } | ||
|  |       icon = settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : ''; | ||
|  |       if (text) { | ||
|  |         self$$1.classes.add('btn-has-text'); | ||
|  |         textHtml = '<span class="' + prefix + 'txt">' + self$$1.encode(text) + '</span>'; | ||
|  |       } | ||
|  |       ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed="' + settings.active + '"' : ''; | ||
|  |       return '<div id="' + id + '" class="' + self$$1.classes + '" role="button"' + ariaPressed + ' tabindex="-1">' + '<button type="button" hidefocus="1" tabindex="-1">' + (icon ? '<i class="' + icon + '"' + image + '></i>' : '') + textHtml + '</button>' + '<button type="button" class="' + prefix + 'open" hidefocus="1" tabindex="-1">' + (self$$1._menuBtnText ? (icon ? '\xA0' : '') + self$$1._menuBtnText : '') + ' <i class="' + prefix + 'caret"></i>' + '</button>' + '</div>'; | ||
|  |     }, | ||
|  |     postRender: function () { | ||
|  |       var self$$1 = this, onClickHandler = self$$1.settings.onclick; | ||
|  |       self$$1.on('click', function (e) { | ||
|  |         var node = e.target; | ||
|  |         if (e.control === this) { | ||
|  |           while (node) { | ||
|  |             if (e.aria && e.aria.key !== 'down' || node.nodeName === 'BUTTON' && node.className.indexOf('open') === -1) { | ||
|  |               e.stopImmediatePropagation(); | ||
|  |               if (onClickHandler) { | ||
|  |                 onClickHandler.call(this, e); | ||
|  |               } | ||
|  |               return; | ||
|  |             } | ||
|  |             node = node.parentNode; | ||
|  |           } | ||
|  |         } | ||
|  |       }); | ||
|  |       delete self$$1.settings.onclick; | ||
|  |       return self$$1._super(); | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var StackLayout = FlowLayout.extend({ | ||
|  |     Defaults: { | ||
|  |       containerClass: 'stack-layout', | ||
|  |       controlClass: 'stack-layout-item', | ||
|  |       endClass: 'break' | ||
|  |     }, | ||
|  |     isNative: function () { | ||
|  |       return true; | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var TabPanel = Panel.extend({ | ||
|  |     Defaults: { | ||
|  |       layout: 'absolute', | ||
|  |       defaults: { type: 'panel' } | ||
|  |     }, | ||
|  |     activateTab: function (idx) { | ||
|  |       var activeTabElm; | ||
|  |       if (this.activeTabId) { | ||
|  |         activeTabElm = this.getEl(this.activeTabId); | ||
|  |         global$7(activeTabElm).removeClass(this.classPrefix + 'active'); | ||
|  |         activeTabElm.setAttribute('aria-selected', 'false'); | ||
|  |       } | ||
|  |       this.activeTabId = 't' + idx; | ||
|  |       activeTabElm = this.getEl('t' + idx); | ||
|  |       activeTabElm.setAttribute('aria-selected', 'true'); | ||
|  |       global$7(activeTabElm).addClass(this.classPrefix + 'active'); | ||
|  |       this.items()[idx].show().fire('showtab'); | ||
|  |       this.reflow(); | ||
|  |       this.items().each(function (item, i) { | ||
|  |         if (idx !== i) { | ||
|  |           item.hide(); | ||
|  |         } | ||
|  |       }); | ||
|  |     }, | ||
|  |     renderHtml: function () { | ||
|  |       var self = this; | ||
|  |       var layout = self._layout; | ||
|  |       var tabsHtml = ''; | ||
|  |       var prefix = self.classPrefix; | ||
|  |       self.preRender(); | ||
|  |       layout.preRender(self); | ||
|  |       self.items().each(function (ctrl, i) { | ||
|  |         var id = self._id + '-t' + i; | ||
|  |         ctrl.aria('role', 'tabpanel'); | ||
|  |         ctrl.aria('labelledby', id); | ||
|  |         tabsHtml += '<div id="' + id + '" class="' + prefix + 'tab" ' + 'unselectable="on" role="tab" aria-controls="' + ctrl._id + '" aria-selected="false" tabIndex="-1">' + self.encode(ctrl.settings.title) + '</div>'; | ||
|  |       }); | ||
|  |       return '<div id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1">' + '<div id="' + self._id + '-head" class="' + prefix + 'tabs" role="tablist">' + tabsHtml + '</div>' + '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + layout.renderHtml(self) + '</div>' + '</div>'; | ||
|  |     }, | ||
|  |     postRender: function () { | ||
|  |       var self = this; | ||
|  |       self._super(); | ||
|  |       self.settings.activeTab = self.settings.activeTab || 0; | ||
|  |       self.activateTab(self.settings.activeTab); | ||
|  |       this.on('click', function (e) { | ||
|  |         var targetParent = e.target.parentNode; | ||
|  |         if (targetParent && targetParent.id === self._id + '-head') { | ||
|  |           var i = targetParent.childNodes.length; | ||
|  |           while (i--) { | ||
|  |             if (targetParent.childNodes[i] === e.target) { | ||
|  |               self.activateTab(i); | ||
|  |             } | ||
|  |           } | ||
|  |         } | ||
|  |       }); | ||
|  |     }, | ||
|  |     initLayoutRect: function () { | ||
|  |       var self = this; | ||
|  |       var rect, minW, minH; | ||
|  |       minW = funcs.getSize(self.getEl('head')).width; | ||
|  |       minW = minW < 0 ? 0 : minW; | ||
|  |       minH = 0; | ||
|  |       self.items().each(function (item) { | ||
|  |         minW = Math.max(minW, item.layoutRect().minW); | ||
|  |         minH = Math.max(minH, item.layoutRect().minH); | ||
|  |       }); | ||
|  |       self.items().each(function (ctrl) { | ||
|  |         ctrl.settings.x = 0; | ||
|  |         ctrl.settings.y = 0; | ||
|  |         ctrl.settings.w = minW; | ||
|  |         ctrl.settings.h = minH; | ||
|  |         ctrl.layoutRect({ | ||
|  |           x: 0, | ||
|  |           y: 0, | ||
|  |           w: minW, | ||
|  |           h: minH | ||
|  |         }); | ||
|  |       }); | ||
|  |       var headH = funcs.getSize(self.getEl('head')).height; | ||
|  |       self.settings.minWidth = minW; | ||
|  |       self.settings.minHeight = minH + headH; | ||
|  |       rect = self._super(); | ||
|  |       rect.deltaH += headH; | ||
|  |       rect.innerH = rect.h - rect.deltaH; | ||
|  |       return rect; | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var TextBox = Widget.extend({ | ||
|  |     init: function (settings) { | ||
|  |       var self$$1 = this; | ||
|  |       self$$1._super(settings); | ||
|  |       self$$1.classes.add('textbox'); | ||
|  |       if (settings.multiline) { | ||
|  |         self$$1.classes.add('multiline'); | ||
|  |       } else { | ||
|  |         self$$1.on('keydown', function (e) { | ||
|  |           var rootControl; | ||
|  |           if (e.keyCode === 13) { | ||
|  |             e.preventDefault(); | ||
|  |             self$$1.parents().reverse().each(function (ctrl) { | ||
|  |               if (ctrl.toJSON) { | ||
|  |                 rootControl = ctrl; | ||
|  |                 return false; | ||
|  |               } | ||
|  |             }); | ||
|  |             self$$1.fire('submit', { data: rootControl.toJSON() }); | ||
|  |           } | ||
|  |         }); | ||
|  |         self$$1.on('keyup', function (e) { | ||
|  |           self$$1.state.set('value', e.target.value); | ||
|  |         }); | ||
|  |       } | ||
|  |     }, | ||
|  |     repaint: function () { | ||
|  |       var self$$1 = this; | ||
|  |       var style, rect, borderBox, borderW, borderH = 0, lastRepaintRect; | ||
|  |       style = self$$1.getEl().style; | ||
|  |       rect = self$$1._layoutRect; | ||
|  |       lastRepaintRect = self$$1._lastRepaintRect || {}; | ||
|  |       var doc = document; | ||
|  |       if (!self$$1.settings.multiline && doc.all && (!doc.documentMode || doc.documentMode <= 8)) { | ||
|  |         style.lineHeight = rect.h - borderH + 'px'; | ||
|  |       } | ||
|  |       borderBox = self$$1.borderBox; | ||
|  |       borderW = borderBox.left + borderBox.right + 8; | ||
|  |       borderH = borderBox.top + borderBox.bottom + (self$$1.settings.multiline ? 8 : 0); | ||
|  |       if (rect.x !== lastRepaintRect.x) { | ||
|  |         style.left = rect.x + 'px'; | ||
|  |         lastRepaintRect.x = rect.x; | ||
|  |       } | ||
|  |       if (rect.y !== lastRepaintRect.y) { | ||
|  |         style.top = rect.y + 'px'; | ||
|  |         lastRepaintRect.y = rect.y; | ||
|  |       } | ||
|  |       if (rect.w !== lastRepaintRect.w) { | ||
|  |         style.width = rect.w - borderW + 'px'; | ||
|  |         lastRepaintRect.w = rect.w; | ||
|  |       } | ||
|  |       if (rect.h !== lastRepaintRect.h) { | ||
|  |         style.height = rect.h - borderH + 'px'; | ||
|  |         lastRepaintRect.h = rect.h; | ||
|  |       } | ||
|  |       self$$1._lastRepaintRect = lastRepaintRect; | ||
|  |       self$$1.fire('repaint', {}, false); | ||
|  |       return self$$1; | ||
|  |     }, | ||
|  |     renderHtml: function () { | ||
|  |       var self$$1 = this; | ||
|  |       var settings = self$$1.settings; | ||
|  |       var attrs, elm; | ||
|  |       attrs = { | ||
|  |         id: self$$1._id, | ||
|  |         hidefocus: '1' | ||
|  |       }; | ||
|  |       global$4.each([ | ||
|  |         'rows', | ||
|  |         'spellcheck', | ||
|  |         'maxLength', | ||
|  |         'size', | ||
|  |         'readonly', | ||
|  |         'min', | ||
|  |         'max', | ||
|  |         'step', | ||
|  |         'list', | ||
|  |         'pattern', | ||
|  |         'placeholder', | ||
|  |         'required', | ||
|  |         'multiple' | ||
|  |       ], function (name$$1) { | ||
|  |         attrs[name$$1] = settings[name$$1]; | ||
|  |       }); | ||
|  |       if (self$$1.disabled()) { | ||
|  |         attrs.disabled = 'disabled'; | ||
|  |       } | ||
|  |       if (settings.subtype) { | ||
|  |         attrs.type = settings.subtype; | ||
|  |       } | ||
|  |       elm = funcs.create(settings.multiline ? 'textarea' : 'input', attrs); | ||
|  |       elm.value = self$$1.state.get('value'); | ||
|  |       elm.className = self$$1.classes.toString(); | ||
|  |       return elm.outerHTML; | ||
|  |     }, | ||
|  |     value: function (value) { | ||
|  |       if (arguments.length) { | ||
|  |         this.state.set('value', value); | ||
|  |         return this; | ||
|  |       } | ||
|  |       if (this.state.get('rendered')) { | ||
|  |         this.state.set('value', this.getEl().value); | ||
|  |       } | ||
|  |       return this.state.get('value'); | ||
|  |     }, | ||
|  |     postRender: function () { | ||
|  |       var self$$1 = this; | ||
|  |       self$$1.getEl().value = self$$1.state.get('value'); | ||
|  |       self$$1._super(); | ||
|  |       self$$1.$el.on('change', function (e) { | ||
|  |         self$$1.state.set('value', e.target.value); | ||
|  |         self$$1.fire('change', e); | ||
|  |       }); | ||
|  |     }, | ||
|  |     bindStates: function () { | ||
|  |       var self$$1 = this; | ||
|  |       self$$1.state.on('change:value', function (e) { | ||
|  |         if (self$$1.getEl().value !== e.value) { | ||
|  |           self$$1.getEl().value = e.value; | ||
|  |         } | ||
|  |       }); | ||
|  |       self$$1.state.on('change:disabled', function (e) { | ||
|  |         self$$1.getEl().disabled = e.value; | ||
|  |       }); | ||
|  |       return self$$1._super(); | ||
|  |     }, | ||
|  |     remove: function () { | ||
|  |       this.$el.off(); | ||
|  |       this._super(); | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   var getApi = function () { | ||
|  |     return { | ||
|  |       Selector: Selector, | ||
|  |       Collection: Collection$2, | ||
|  |       ReflowQueue: $_cqjgb518wjjgwek2f, | ||
|  |       Control: Control$1, | ||
|  |       Factory: global$11, | ||
|  |       KeyboardNavigation: KeyboardNavigation, | ||
|  |       Container: Container, | ||
|  |       DragHelper: DragHelper, | ||
|  |       Scrollable: $_8woeth19ajjgwek4b, | ||
|  |       Panel: Panel, | ||
|  |       Movable: $_8zu82i18yjjgwek2l, | ||
|  |       Resizable: $_20hy1119bjjgwek4f, | ||
|  |       FloatPanel: FloatPanel, | ||
|  |       Window: Window$$1, | ||
|  |       MessageBox: MessageBox, | ||
|  |       Tooltip: Tooltip, | ||
|  |       Widget: Widget, | ||
|  |       Progress: Progress, | ||
|  |       Notification: Notification, | ||
|  |       Layout: Layout$1, | ||
|  |       AbsoluteLayout: AbsoluteLayout, | ||
|  |       Button: Button, | ||
|  |       ButtonGroup: ButtonGroup, | ||
|  |       Checkbox: Checkbox, | ||
|  |       ComboBox: ComboBox, | ||
|  |       ColorBox: ColorBox, | ||
|  |       PanelButton: PanelButton, | ||
|  |       ColorButton: ColorButton, | ||
|  |       ColorPicker: ColorPicker, | ||
|  |       Path: Path, | ||
|  |       ElementPath: ElementPath, | ||
|  |       FormItem: FormItem, | ||
|  |       Form: Form, | ||
|  |       FieldSet: FieldSet, | ||
|  |       FilePicker: FilePicker, | ||
|  |       FitLayout: FitLayout, | ||
|  |       FlexLayout: FlexLayout, | ||
|  |       FlowLayout: FlowLayout, | ||
|  |       FormatControls: $_gg6ikw1bejjgwekc5, | ||
|  |       GridLayout: GridLayout, | ||
|  |       Iframe: Iframe, | ||
|  |       InfoBox: InfoBox, | ||
|  |       Label: Label, | ||
|  |       Toolbar: Toolbar$1, | ||
|  |       MenuBar: MenuBar, | ||
|  |       MenuButton: MenuButton, | ||
|  |       MenuItem: MenuItem, | ||
|  |       Throbber: Throbber, | ||
|  |       Menu: Menu, | ||
|  |       ListBox: ListBox, | ||
|  |       Radio: Radio, | ||
|  |       ResizeHandle: ResizeHandle, | ||
|  |       SelectBox: SelectBox, | ||
|  |       Slider: Slider, | ||
|  |       Spacer: Spacer, | ||
|  |       SplitButton: SplitButton, | ||
|  |       StackLayout: StackLayout, | ||
|  |       TabPanel: TabPanel, | ||
|  |       TextBox: TextBox, | ||
|  |       DropZone: DropZone, | ||
|  |       BrowseButton: BrowseButton | ||
|  |     }; | ||
|  |   }; | ||
|  |   var appendTo = function (target) { | ||
|  |     if (target.ui) { | ||
|  |       global$4.each(getApi(), function (ref, key) { | ||
|  |         target.ui[key] = ref; | ||
|  |       }); | ||
|  |     } else { | ||
|  |       target.ui = getApi(); | ||
|  |     } | ||
|  |   }; | ||
|  |   var registerToFactory = function () { | ||
|  |     global$4.each(getApi(), function (ref, key) { | ||
|  |       global$11.add(key, ref); | ||
|  |     }); | ||
|  |   }; | ||
|  |   var Api = { | ||
|  |     appendTo: appendTo, | ||
|  |     registerToFactory: registerToFactory | ||
|  |   }; | ||
|  | 
 | ||
|  |   Api.registerToFactory(); | ||
|  |   Api.appendTo(window.tinymce ? window.tinymce : {}); | ||
|  |   global.add('inlite', function (editor) { | ||
|  |     var panel = create$3(); | ||
|  |     $_gg6ikw1bejjgwekc5.setup(editor); | ||
|  |     $_epdxt419djjgwek4l.addToEditor(editor, panel); | ||
|  |     return $_7y4x3k17sjjgwejyw.get(editor, panel); | ||
|  |   }); | ||
|  |   function Theme () { | ||
|  |   } | ||
|  | 
 | ||
|  |   return Theme; | ||
|  | 
 | ||
|  | }()); | ||
|  | })(); |