wp/wp-includes/js/tinymce/themes/inlite/theme.js
changeset 7 cf61fcea0001
child 9 177826044cd9
equal deleted inserted replaced
6:490d5cc509ed 7:cf61fcea0001
       
     1 (function () {
       
     2 var inlite = (function () {
       
     3   'use strict';
       
     4 
       
     5   var global = tinymce.util.Tools.resolve('tinymce.ThemeManager');
       
     6 
       
     7   var global$1 = tinymce.util.Tools.resolve('tinymce.Env');
       
     8 
       
     9   var global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
       
    10 
       
    11   var global$3 = tinymce.util.Tools.resolve('tinymce.util.Delay');
       
    12 
       
    13   var flatten = function (arr) {
       
    14     return arr.reduce(function (results, item) {
       
    15       return Array.isArray(item) ? results.concat(flatten(item)) : results.concat(item);
       
    16     }, []);
       
    17   };
       
    18   var $_ccn98l17xjjgwejz7 = { flatten: flatten };
       
    19 
       
    20   var result = function (id, rect) {
       
    21     return {
       
    22       id: id,
       
    23       rect: rect
       
    24     };
       
    25   };
       
    26   var match = function (editor, matchers) {
       
    27     for (var i = 0; i < matchers.length; i++) {
       
    28       var f = matchers[i];
       
    29       var result_1 = f(editor);
       
    30       if (result_1) {
       
    31         return result_1;
       
    32       }
       
    33     }
       
    34     return null;
       
    35   };
       
    36   var $_6lg87517zjjgwejza = {
       
    37     match: match,
       
    38     result: result
       
    39   };
       
    40 
       
    41   var fromClientRect = function (clientRect) {
       
    42     return {
       
    43       x: clientRect.left,
       
    44       y: clientRect.top,
       
    45       w: clientRect.width,
       
    46       h: clientRect.height
       
    47     };
       
    48   };
       
    49   var toClientRect = function (geomRect) {
       
    50     return {
       
    51       left: geomRect.x,
       
    52       top: geomRect.y,
       
    53       width: geomRect.w,
       
    54       height: geomRect.h,
       
    55       right: geomRect.x + geomRect.w,
       
    56       bottom: geomRect.y + geomRect.h
       
    57     };
       
    58   };
       
    59   var $_1x174x181jjgwejzd = {
       
    60     fromClientRect: fromClientRect,
       
    61     toClientRect: toClientRect
       
    62   };
       
    63 
       
    64   var toAbsolute = function (rect) {
       
    65     var vp = global$2.DOM.getViewPort();
       
    66     return {
       
    67       x: rect.x + vp.x,
       
    68       y: rect.y + vp.y,
       
    69       w: rect.w,
       
    70       h: rect.h
       
    71     };
       
    72   };
       
    73   var measureElement = function (elm) {
       
    74     var clientRect = elm.getBoundingClientRect();
       
    75     return toAbsolute({
       
    76       x: clientRect.left,
       
    77       y: clientRect.top,
       
    78       w: Math.max(elm.clientWidth, elm.offsetWidth),
       
    79       h: Math.max(elm.clientHeight, elm.offsetHeight)
       
    80     });
       
    81   };
       
    82   var getElementRect = function (editor, elm) {
       
    83     return measureElement(elm);
       
    84   };
       
    85   var getPageAreaRect = function (editor) {
       
    86     return measureElement(editor.getElement().ownerDocument.body);
       
    87   };
       
    88   var getContentAreaRect = function (editor) {
       
    89     return measureElement(editor.getContentAreaContainer() || editor.getBody());
       
    90   };
       
    91   var getSelectionRect = function (editor) {
       
    92     var clientRect = editor.selection.getBoundingClientRect();
       
    93     return clientRect ? toAbsolute($_1x174x181jjgwejzd.fromClientRect(clientRect)) : null;
       
    94   };
       
    95   var $_51qgo2180jjgwejzb = {
       
    96     getElementRect: getElementRect,
       
    97     getPageAreaRect: getPageAreaRect,
       
    98     getContentAreaRect: getContentAreaRect,
       
    99     getSelectionRect: getSelectionRect
       
   100   };
       
   101 
       
   102   var element = function (element, predicateIds) {
       
   103     return function (editor) {
       
   104       for (var i = 0; i < predicateIds.length; i++) {
       
   105         if (predicateIds[i].predicate(element)) {
       
   106           var result = $_6lg87517zjjgwejza.result(predicateIds[i].id, $_51qgo2180jjgwejzb.getElementRect(editor, element));
       
   107           return result;
       
   108         }
       
   109       }
       
   110       return null;
       
   111     };
       
   112   };
       
   113   var parent = function (elements, predicateIds) {
       
   114     return function (editor) {
       
   115       for (var i = 0; i < elements.length; i++) {
       
   116         for (var x = 0; x < predicateIds.length; x++) {
       
   117           if (predicateIds[x].predicate(elements[i])) {
       
   118             return $_6lg87517zjjgwejza.result(predicateIds[x].id, $_51qgo2180jjgwejzb.getElementRect(editor, elements[i]));
       
   119           }
       
   120         }
       
   121       }
       
   122       return null;
       
   123     };
       
   124   };
       
   125   var $_egsucq17yjjgwejz9 = {
       
   126     element: element,
       
   127     parent: parent
       
   128   };
       
   129 
       
   130   var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools');
       
   131 
       
   132   var create = function (id, predicate) {
       
   133     return {
       
   134       id: id,
       
   135       predicate: predicate
       
   136     };
       
   137   };
       
   138   var fromContextToolbars = function (toolbars) {
       
   139     return global$4.map(toolbars, function (toolbar) {
       
   140       return create(toolbar.id, toolbar.predicate);
       
   141     });
       
   142   };
       
   143   var $_9rj8kx182jjgwejze = {
       
   144     create: create,
       
   145     fromContextToolbars: fromContextToolbars
       
   146   };
       
   147 
       
   148   var textSelection = function (id) {
       
   149     return function (editor) {
       
   150       if (!editor.selection.isCollapsed()) {
       
   151         var result = $_6lg87517zjjgwejza.result(id, $_51qgo2180jjgwejzb.getSelectionRect(editor));
       
   152         return result;
       
   153       }
       
   154       return null;
       
   155     };
       
   156   };
       
   157   var emptyTextBlock = function (elements, id) {
       
   158     return function (editor) {
       
   159       var i;
       
   160       var textBlockElementsMap = editor.schema.getTextBlockElements();
       
   161       for (i = 0; i < elements.length; i++) {
       
   162         if (elements[i].nodeName === 'TABLE') {
       
   163           return null;
       
   164         }
       
   165       }
       
   166       for (i = 0; i < elements.length; i++) {
       
   167         if (elements[i].nodeName in textBlockElementsMap) {
       
   168           if (editor.dom.isEmpty(elements[i])) {
       
   169             return $_6lg87517zjjgwejza.result(id, $_51qgo2180jjgwejzb.getSelectionRect(editor));
       
   170           }
       
   171           return null;
       
   172         }
       
   173       }
       
   174       return null;
       
   175     };
       
   176   };
       
   177   var $_fhwgeg184jjgwejzf = {
       
   178     textSelection: textSelection,
       
   179     emptyTextBlock: emptyTextBlock
       
   180   };
       
   181 
       
   182   var fireSkinLoaded = function (editor) {
       
   183     editor.fire('SkinLoaded');
       
   184   };
       
   185   var fireBeforeRenderUI = function (editor) {
       
   186     return editor.fire('BeforeRenderUI');
       
   187   };
       
   188   var $_77u64d186jjgwejzi = {
       
   189     fireSkinLoaded: fireSkinLoaded,
       
   190     fireBeforeRenderUI: fireBeforeRenderUI
       
   191   };
       
   192 
       
   193   var global$5 = tinymce.util.Tools.resolve('tinymce.EditorManager');
       
   194 
       
   195   var isType = function (type) {
       
   196     return function (value) {
       
   197       return typeof value === type;
       
   198     };
       
   199   };
       
   200   var isArray = function (value) {
       
   201     return Array.isArray(value);
       
   202   };
       
   203   var isNull = function (value) {
       
   204     return value === null;
       
   205   };
       
   206   var isObject = function (predicate) {
       
   207     return function (value) {
       
   208       return !isNull(value) && !isArray(value) && predicate(value);
       
   209     };
       
   210   };
       
   211   var isString = function (value) {
       
   212     return isType('string')(value);
       
   213   };
       
   214   var isNumber = function (value) {
       
   215     return isType('number')(value);
       
   216   };
       
   217   var isFunction = function (value) {
       
   218     return isType('function')(value);
       
   219   };
       
   220   var isBoolean = function (value) {
       
   221     return isType('boolean')(value);
       
   222   };
       
   223   var $_e4npq318ajjgwejzo = {
       
   224     isString: isString,
       
   225     isNumber: isNumber,
       
   226     isBoolean: isBoolean,
       
   227     isFunction: isFunction,
       
   228     isObject: isObject(isType('object')),
       
   229     isNull: isNull,
       
   230     isArray: isArray
       
   231   };
       
   232 
       
   233   var validDefaultOrDie = function (value, predicate) {
       
   234     if (predicate(value)) {
       
   235       return true;
       
   236     }
       
   237     throw new Error('Default value doesn\'t match requested type.');
       
   238   };
       
   239   var getByTypeOr = function (predicate) {
       
   240     return function (editor, name, defaultValue) {
       
   241       var settings = editor.settings;
       
   242       validDefaultOrDie(defaultValue, predicate);
       
   243       return name in settings && predicate(settings[name]) ? settings[name] : defaultValue;
       
   244     };
       
   245   };
       
   246   var splitNoEmpty = function (str, delim) {
       
   247     return str.split(delim).filter(function (item) {
       
   248       return item.length > 0;
       
   249     });
       
   250   };
       
   251   var itemsToArray = function (value, defaultValue) {
       
   252     var stringToItemsArray = function (value) {
       
   253       return typeof value === 'string' ? splitNoEmpty(value, /[ ,]/) : value;
       
   254     };
       
   255     var boolToItemsArray = function (value, defaultValue) {
       
   256       return value === false ? [] : defaultValue;
       
   257     };
       
   258     if ($_e4npq318ajjgwejzo.isArray(value)) {
       
   259       return value;
       
   260     } else if ($_e4npq318ajjgwejzo.isString(value)) {
       
   261       return stringToItemsArray(value);
       
   262     } else if ($_e4npq318ajjgwejzo.isBoolean(value)) {
       
   263       return boolToItemsArray(value, defaultValue);
       
   264     }
       
   265     return defaultValue;
       
   266   };
       
   267   var getToolbarItemsOr = function (predicate) {
       
   268     return function (editor, name, defaultValue) {
       
   269       var value = name in editor.settings ? editor.settings[name] : defaultValue;
       
   270       validDefaultOrDie(defaultValue, predicate);
       
   271       return itemsToArray(value, defaultValue);
       
   272     };
       
   273   };
       
   274   var $_c8umh189jjgwejzm = {
       
   275     getStringOr: getByTypeOr($_e4npq318ajjgwejzo.isString),
       
   276     getBoolOr: getByTypeOr($_e4npq318ajjgwejzo.isBoolean),
       
   277     getNumberOr: getByTypeOr($_e4npq318ajjgwejzo.isNumber),
       
   278     getHandlerOr: getByTypeOr($_e4npq318ajjgwejzo.isFunction),
       
   279     getToolbarItemsOr: getToolbarItemsOr($_e4npq318ajjgwejzo.isArray)
       
   280   };
       
   281 
       
   282   var global$6 = tinymce.util.Tools.resolve('tinymce.geom.Rect');
       
   283 
       
   284   var result$1 = function (rect, position) {
       
   285     return {
       
   286       rect: rect,
       
   287       position: position
       
   288     };
       
   289   };
       
   290   var moveTo = function (rect, toRect) {
       
   291     return {
       
   292       x: toRect.x,
       
   293       y: toRect.y,
       
   294       w: rect.w,
       
   295       h: rect.h
       
   296     };
       
   297   };
       
   298   var calcByPositions = function (testPositions1, testPositions2, targetRect, contentAreaRect, panelRect) {
       
   299     var relPos, relRect, outputPanelRect;
       
   300     var paddedContentRect = {
       
   301       x: contentAreaRect.x,
       
   302       y: contentAreaRect.y,
       
   303       w: contentAreaRect.w + (contentAreaRect.w < panelRect.w + targetRect.w ? panelRect.w : 0),
       
   304       h: contentAreaRect.h + (contentAreaRect.h < panelRect.h + targetRect.h ? panelRect.h : 0)
       
   305     };
       
   306     relPos = global$6.findBestRelativePosition(panelRect, targetRect, paddedContentRect, testPositions1);
       
   307     targetRect = global$6.clamp(targetRect, paddedContentRect);
       
   308     if (relPos) {
       
   309       relRect = global$6.relativePosition(panelRect, targetRect, relPos);
       
   310       outputPanelRect = moveTo(panelRect, relRect);
       
   311       return result$1(outputPanelRect, relPos);
       
   312     }
       
   313     targetRect = global$6.intersect(paddedContentRect, targetRect);
       
   314     if (targetRect) {
       
   315       relPos = global$6.findBestRelativePosition(panelRect, targetRect, paddedContentRect, testPositions2);
       
   316       if (relPos) {
       
   317         relRect = global$6.relativePosition(panelRect, targetRect, relPos);
       
   318         outputPanelRect = moveTo(panelRect, relRect);
       
   319         return result$1(outputPanelRect, relPos);
       
   320       }
       
   321       outputPanelRect = moveTo(panelRect, targetRect);
       
   322       return result$1(outputPanelRect, relPos);
       
   323     }
       
   324     return null;
       
   325   };
       
   326   var calcInsert = function (targetRect, contentAreaRect, panelRect) {
       
   327     return calcByPositions([
       
   328       'cr-cl',
       
   329       'cl-cr'
       
   330     ], [
       
   331       'bc-tc',
       
   332       'bl-tl',
       
   333       'br-tr'
       
   334     ], targetRect, contentAreaRect, panelRect);
       
   335   };
       
   336   var calc = function (targetRect, contentAreaRect, panelRect) {
       
   337     return calcByPositions([
       
   338       'tc-bc',
       
   339       'bc-tc',
       
   340       'tl-bl',
       
   341       'bl-tl',
       
   342       'tr-br',
       
   343       'br-tr',
       
   344       'cr-cl',
       
   345       'cl-cr'
       
   346     ], [
       
   347       'bc-tc',
       
   348       'bl-tl',
       
   349       'br-tr',
       
   350       'cr-cl'
       
   351     ], targetRect, contentAreaRect, panelRect);
       
   352   };
       
   353   var userConstrain = function (handler, targetRect, contentAreaRect, panelRect) {
       
   354     var userConstrainedPanelRect;
       
   355     if (typeof handler === 'function') {
       
   356       userConstrainedPanelRect = handler({
       
   357         elementRect: $_1x174x181jjgwejzd.toClientRect(targetRect),
       
   358         contentAreaRect: $_1x174x181jjgwejzd.toClientRect(contentAreaRect),
       
   359         panelRect: $_1x174x181jjgwejzd.toClientRect(panelRect)
       
   360       });
       
   361       return $_1x174x181jjgwejzd.fromClientRect(userConstrainedPanelRect);
       
   362     }
       
   363     return panelRect;
       
   364   };
       
   365   var defaultHandler = function (rects) {
       
   366     return rects.panelRect;
       
   367   };
       
   368   var $_gir42l18bjjgwejzq = {
       
   369     calcInsert: calcInsert,
       
   370     calc: calc,
       
   371     userConstrain: userConstrain,
       
   372     defaultHandler: defaultHandler
       
   373   };
       
   374 
       
   375   var toAbsoluteUrl = function (editor, url) {
       
   376     return editor.documentBaseURI.toAbsolute(url);
       
   377   };
       
   378   var urlFromName = function (name) {
       
   379     var prefix = global$5.baseURL + '/skins/';
       
   380     return name ? prefix + name : prefix + 'lightgray';
       
   381   };
       
   382   var getTextSelectionToolbarItems = function (editor) {
       
   383     return $_c8umh189jjgwejzm.getToolbarItemsOr(editor, 'selection_toolbar', [
       
   384       'bold',
       
   385       'italic',
       
   386       '|',
       
   387       'quicklink',
       
   388       'h2',
       
   389       'h3',
       
   390       'blockquote'
       
   391     ]);
       
   392   };
       
   393   var getInsertToolbarItems = function (editor) {
       
   394     return $_c8umh189jjgwejzm.getToolbarItemsOr(editor, 'insert_toolbar', [
       
   395       'quickimage',
       
   396       'quicktable'
       
   397     ]);
       
   398   };
       
   399   var getPositionHandler = function (editor) {
       
   400     return $_c8umh189jjgwejzm.getHandlerOr(editor, 'inline_toolbar_position_handler', $_gir42l18bjjgwejzq.defaultHandler);
       
   401   };
       
   402   var getSkinUrl = function (editor) {
       
   403     var settings = editor.settings;
       
   404     return settings.skin_url ? toAbsoluteUrl(editor, settings.skin_url) : urlFromName(settings.skin);
       
   405   };
       
   406   var isSkinDisabled = function (editor) {
       
   407     return editor.settings.skin === false;
       
   408   };
       
   409   var $_4j2h42187jjgwejzk = {
       
   410     getTextSelectionToolbarItems: getTextSelectionToolbarItems,
       
   411     getInsertToolbarItems: getInsertToolbarItems,
       
   412     getPositionHandler: getPositionHandler,
       
   413     getSkinUrl: getSkinUrl,
       
   414     isSkinDisabled: isSkinDisabled
       
   415   };
       
   416 
       
   417   var fireSkinLoaded$1 = function (editor, callback) {
       
   418     var done = function () {
       
   419       editor._skinLoaded = true;
       
   420       $_77u64d186jjgwejzi.fireSkinLoaded(editor);
       
   421       callback();
       
   422     };
       
   423     if (editor.initialized) {
       
   424       done();
       
   425     } else {
       
   426       editor.on('init', done);
       
   427     }
       
   428   };
       
   429   var load = function (editor, callback) {
       
   430     var skinUrl = $_4j2h42187jjgwejzk.getSkinUrl(editor);
       
   431     var done = function () {
       
   432       fireSkinLoaded$1(editor, callback);
       
   433     };
       
   434     if ($_4j2h42187jjgwejzk.isSkinDisabled(editor)) {
       
   435       done();
       
   436     } else {
       
   437       global$2.DOM.styleSheetLoader.load(skinUrl + '/skin.min.css', done);
       
   438       editor.contentCSS.push(skinUrl + '/content.inline.min.css');
       
   439     }
       
   440   };
       
   441   var $_93v08q185jjgwejzh = { load: load };
       
   442 
       
   443   var getSelectionElements = function (editor) {
       
   444     var node = editor.selection.getNode();
       
   445     var elms = editor.dom.getParents(node, '*');
       
   446     return elms;
       
   447   };
       
   448   var createToolbar = function (editor, selector, id, items) {
       
   449     var selectorPredicate = function (elm) {
       
   450       return editor.dom.is(elm, selector);
       
   451     };
       
   452     return {
       
   453       predicate: selectorPredicate,
       
   454       id: id,
       
   455       items: items
       
   456     };
       
   457   };
       
   458   var getToolbars = function (editor) {
       
   459     var contextToolbars = editor.contextToolbars;
       
   460     return $_ccn98l17xjjgwejz7.flatten([
       
   461       contextToolbars ? contextToolbars : [],
       
   462       createToolbar(editor, 'img', 'image', 'alignleft aligncenter alignright')
       
   463     ]);
       
   464   };
       
   465   var findMatchResult = function (editor, toolbars) {
       
   466     var result, elements, contextToolbarsPredicateIds;
       
   467     elements = getSelectionElements(editor);
       
   468     contextToolbarsPredicateIds = $_9rj8kx182jjgwejze.fromContextToolbars(toolbars);
       
   469     result = $_6lg87517zjjgwejza.match(editor, [
       
   470       $_egsucq17yjjgwejz9.element(elements[0], contextToolbarsPredicateIds),
       
   471       $_fhwgeg184jjgwejzf.textSelection('text'),
       
   472       $_fhwgeg184jjgwejzf.emptyTextBlock(elements, 'insert'),
       
   473       $_egsucq17yjjgwejz9.parent(elements, contextToolbarsPredicateIds)
       
   474     ]);
       
   475     return result && result.rect ? result : null;
       
   476   };
       
   477   var editorHasFocus = function (editor) {
       
   478     return document.activeElement === editor.getBody();
       
   479   };
       
   480   var togglePanel = function (editor, panel) {
       
   481     var toggle = function () {
       
   482       var toolbars = getToolbars(editor);
       
   483       var result = findMatchResult(editor, toolbars);
       
   484       if (result) {
       
   485         panel.show(editor, result.id, result.rect, toolbars);
       
   486       } else {
       
   487         panel.hide();
       
   488       }
       
   489     };
       
   490     return function () {
       
   491       if (!editor.removed && editorHasFocus(editor)) {
       
   492         toggle();
       
   493       }
       
   494     };
       
   495   };
       
   496   var repositionPanel = function (editor, panel) {
       
   497     return function () {
       
   498       var toolbars = getToolbars(editor);
       
   499       var result = findMatchResult(editor, toolbars);
       
   500       if (result) {
       
   501         panel.reposition(editor, result.id, result.rect);
       
   502       }
       
   503     };
       
   504   };
       
   505   var ignoreWhenFormIsVisible = function (editor, panel, f) {
       
   506     return function () {
       
   507       if (!editor.removed && !panel.inForm()) {
       
   508         f();
       
   509       }
       
   510     };
       
   511   };
       
   512   var bindContextualToolbarsEvents = function (editor, panel) {
       
   513     var throttledTogglePanel = global$3.throttle(togglePanel(editor, panel), 0);
       
   514     var throttledTogglePanelWhenNotInForm = global$3.throttle(ignoreWhenFormIsVisible(editor, panel, togglePanel(editor, panel)), 0);
       
   515     var reposition = repositionPanel(editor, panel);
       
   516     editor.on('blur hide ObjectResizeStart', panel.hide);
       
   517     editor.on('click', throttledTogglePanel);
       
   518     editor.on('nodeChange mouseup', throttledTogglePanelWhenNotInForm);
       
   519     editor.on('ResizeEditor keyup', throttledTogglePanel);
       
   520     editor.on('ResizeWindow', reposition);
       
   521     global$2.DOM.bind(global$1.container, 'scroll', reposition);
       
   522     editor.on('remove', function () {
       
   523       global$2.DOM.unbind(global$1.container, 'scroll', reposition);
       
   524       panel.remove();
       
   525     });
       
   526     editor.shortcuts.add('Alt+F10,F10', '', panel.focus);
       
   527   };
       
   528   var overrideLinkShortcut = function (editor, panel) {
       
   529     editor.shortcuts.remove('meta+k');
       
   530     editor.shortcuts.add('meta+k', '', function () {
       
   531       var toolbars = getToolbars(editor);
       
   532       var result = $_6lg87517zjjgwejza.match(editor, [$_fhwgeg184jjgwejzf.textSelection('quicklink')]);
       
   533       if (result) {
       
   534         panel.show(editor, result.id, result.rect, toolbars);
       
   535       }
       
   536     });
       
   537   };
       
   538   var renderInlineUI = function (editor, panel) {
       
   539     $_93v08q185jjgwejzh.load(editor, function () {
       
   540       bindContextualToolbarsEvents(editor, panel);
       
   541       overrideLinkShortcut(editor, panel);
       
   542     });
       
   543     return {};
       
   544   };
       
   545   var fail = function (message) {
       
   546     throw new Error(message);
       
   547   };
       
   548   var renderUI = function (editor, panel) {
       
   549     return editor.inline ? renderInlineUI(editor, panel) : fail('inlite theme only supports inline mode.');
       
   550   };
       
   551   var $_b0wxh217tjjgwejyx = { renderUI: renderUI };
       
   552 
       
   553   var noop = function () {
       
   554     var x = [];
       
   555     for (var _i = 0; _i < arguments.length; _i++) {
       
   556       x[_i] = arguments[_i];
       
   557     }
       
   558   };
       
   559 
       
   560   var compose = function (fa, fb) {
       
   561     return function () {
       
   562       var x = [];
       
   563       for (var _i = 0; _i < arguments.length; _i++) {
       
   564         x[_i] = arguments[_i];
       
   565       }
       
   566       return fa(fb.apply(null, arguments));
       
   567     };
       
   568   };
       
   569   var constant = function (value) {
       
   570     return function () {
       
   571       return value;
       
   572     };
       
   573   };
       
   574 
       
   575 
       
   576   var curry = function (f) {
       
   577     var x = [];
       
   578     for (var _i = 1; _i < arguments.length; _i++) {
       
   579       x[_i - 1] = arguments[_i];
       
   580     }
       
   581     var args = new Array(arguments.length - 1);
       
   582     for (var i = 1; i < arguments.length; i++)
       
   583       args[i - 1] = arguments[i];
       
   584     return function () {
       
   585       var x = [];
       
   586       for (var _i = 0; _i < arguments.length; _i++) {
       
   587         x[_i] = arguments[_i];
       
   588       }
       
   589       var newArgs = new Array(arguments.length);
       
   590       for (var j = 0; j < newArgs.length; j++)
       
   591         newArgs[j] = arguments[j];
       
   592       var all = args.concat(newArgs);
       
   593       return f.apply(null, all);
       
   594     };
       
   595   };
       
   596 
       
   597 
       
   598 
       
   599 
       
   600   var never = constant(false);
       
   601   var always = constant(true);
       
   602 
       
   603   var never$1 = never;
       
   604   var always$1 = always;
       
   605   var none = function () {
       
   606     return NONE;
       
   607   };
       
   608   var NONE = function () {
       
   609     var eq = function (o) {
       
   610       return o.isNone();
       
   611     };
       
   612     var call$$1 = function (thunk) {
       
   613       return thunk();
       
   614     };
       
   615     var id = function (n) {
       
   616       return n;
       
   617     };
       
   618     var noop$$1 = function () {
       
   619     };
       
   620     var nul = function () {
       
   621       return null;
       
   622     };
       
   623     var undef = function () {
       
   624       return undefined;
       
   625     };
       
   626     var me = {
       
   627       fold: function (n, s) {
       
   628         return n();
       
   629       },
       
   630       is: never$1,
       
   631       isSome: never$1,
       
   632       isNone: always$1,
       
   633       getOr: id,
       
   634       getOrThunk: call$$1,
       
   635       getOrDie: function (msg) {
       
   636         throw new Error(msg || 'error: getOrDie called on none.');
       
   637       },
       
   638       getOrNull: nul,
       
   639       getOrUndefined: undef,
       
   640       or: id,
       
   641       orThunk: call$$1,
       
   642       map: none,
       
   643       ap: none,
       
   644       each: noop$$1,
       
   645       bind: none,
       
   646       flatten: none,
       
   647       exists: never$1,
       
   648       forall: always$1,
       
   649       filter: none,
       
   650       equals: eq,
       
   651       equals_: eq,
       
   652       toArray: function () {
       
   653         return [];
       
   654       },
       
   655       toString: constant('none()')
       
   656     };
       
   657     if (Object.freeze)
       
   658       Object.freeze(me);
       
   659     return me;
       
   660   }();
       
   661   var some = function (a) {
       
   662     var constant_a = function () {
       
   663       return a;
       
   664     };
       
   665     var self = function () {
       
   666       return me;
       
   667     };
       
   668     var map = function (f) {
       
   669       return some(f(a));
       
   670     };
       
   671     var bind = function (f) {
       
   672       return f(a);
       
   673     };
       
   674     var me = {
       
   675       fold: function (n, s) {
       
   676         return s(a);
       
   677       },
       
   678       is: function (v) {
       
   679         return a === v;
       
   680       },
       
   681       isSome: always$1,
       
   682       isNone: never$1,
       
   683       getOr: constant_a,
       
   684       getOrThunk: constant_a,
       
   685       getOrDie: constant_a,
       
   686       getOrNull: constant_a,
       
   687       getOrUndefined: constant_a,
       
   688       or: self,
       
   689       orThunk: self,
       
   690       map: map,
       
   691       ap: function (optfab) {
       
   692         return optfab.fold(none, function (fab) {
       
   693           return some(fab(a));
       
   694         });
       
   695       },
       
   696       each: function (f) {
       
   697         f(a);
       
   698       },
       
   699       bind: bind,
       
   700       flatten: constant_a,
       
   701       exists: bind,
       
   702       forall: bind,
       
   703       filter: function (f) {
       
   704         return f(a) ? me : NONE;
       
   705       },
       
   706       equals: function (o) {
       
   707         return o.is(a);
       
   708       },
       
   709       equals_: function (o, elementEq) {
       
   710         return o.fold(never$1, function (b) {
       
   711           return elementEq(a, b);
       
   712         });
       
   713       },
       
   714       toArray: function () {
       
   715         return [a];
       
   716       },
       
   717       toString: function () {
       
   718         return 'some(' + a + ')';
       
   719       }
       
   720     };
       
   721     return me;
       
   722   };
       
   723   var from = function (value) {
       
   724     return value === null || value === undefined ? NONE : some(value);
       
   725   };
       
   726   var Option = {
       
   727     some: some,
       
   728     none: none,
       
   729     from: from
       
   730   };
       
   731 
       
   732   var typeOf = function (x) {
       
   733     if (x === null)
       
   734       return 'null';
       
   735     var t = typeof x;
       
   736     if (t === 'object' && Array.prototype.isPrototypeOf(x))
       
   737       return 'array';
       
   738     if (t === 'object' && String.prototype.isPrototypeOf(x))
       
   739       return 'string';
       
   740     return t;
       
   741   };
       
   742   var isType$1 = function (type) {
       
   743     return function (value) {
       
   744       return typeOf(value) === type;
       
   745     };
       
   746   };
       
   747 
       
   748 
       
   749 
       
   750 
       
   751 
       
   752 
       
   753   var isFunction$1 = isType$1('function');
       
   754   var isNumber$1 = isType$1('number');
       
   755 
       
   756   var rawIndexOf = function () {
       
   757     var pIndexOf = Array.prototype.indexOf;
       
   758     var fastIndex = function (xs, x) {
       
   759       return pIndexOf.call(xs, x);
       
   760     };
       
   761     var slowIndex = function (xs, x) {
       
   762       return slowIndexOf(xs, x);
       
   763     };
       
   764     return pIndexOf === undefined ? slowIndex : fastIndex;
       
   765   }();
       
   766   var indexOf = function (xs, x) {
       
   767     var r = rawIndexOf(xs, x);
       
   768     return r === -1 ? Option.none() : Option.some(r);
       
   769   };
       
   770 
       
   771   var exists = function (xs, pred) {
       
   772     return findIndex(xs, pred).isSome();
       
   773   };
       
   774 
       
   775 
       
   776   var map = function (xs, f) {
       
   777     var len = xs.length;
       
   778     var r = new Array(len);
       
   779     for (var i = 0; i < len; i++) {
       
   780       var x = xs[i];
       
   781       r[i] = f(x, i, xs);
       
   782     }
       
   783     return r;
       
   784   };
       
   785   var each = function (xs, f) {
       
   786     for (var i = 0, len = xs.length; i < len; i++) {
       
   787       var x = xs[i];
       
   788       f(x, i, xs);
       
   789     }
       
   790   };
       
   791 
       
   792 
       
   793   var filter = function (xs, pred) {
       
   794     var r = [];
       
   795     for (var i = 0, len = xs.length; i < len; i++) {
       
   796       var x = xs[i];
       
   797       if (pred(x, i, xs)) {
       
   798         r.push(x);
       
   799       }
       
   800     }
       
   801     return r;
       
   802   };
       
   803 
       
   804 
       
   805   var foldl = function (xs, f, acc) {
       
   806     each(xs, function (x) {
       
   807       acc = f(acc, x);
       
   808     });
       
   809     return acc;
       
   810   };
       
   811   var find = function (xs, pred) {
       
   812     for (var i = 0, len = xs.length; i < len; i++) {
       
   813       var x = xs[i];
       
   814       if (pred(x, i, xs)) {
       
   815         return Option.some(x);
       
   816       }
       
   817     }
       
   818     return Option.none();
       
   819   };
       
   820   var findIndex = function (xs, pred) {
       
   821     for (var i = 0, len = xs.length; i < len; i++) {
       
   822       var x = xs[i];
       
   823       if (pred(x, i, xs)) {
       
   824         return Option.some(i);
       
   825       }
       
   826     }
       
   827     return Option.none();
       
   828   };
       
   829   var slowIndexOf = function (xs, x) {
       
   830     for (var i = 0, len = xs.length; i < len; ++i) {
       
   831       if (xs[i] === x) {
       
   832         return i;
       
   833       }
       
   834     }
       
   835     return -1;
       
   836   };
       
   837   var push = Array.prototype.push;
       
   838   var flatten$1 = function (xs) {
       
   839     var r = [];
       
   840     for (var i = 0, len = xs.length; i < len; ++i) {
       
   841       if (!Array.prototype.isPrototypeOf(xs[i]))
       
   842         throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);
       
   843       push.apply(r, xs[i]);
       
   844     }
       
   845     return r;
       
   846   };
       
   847 
       
   848 
       
   849 
       
   850   var slice = Array.prototype.slice;
       
   851   var reverse = function (xs) {
       
   852     var r = slice.call(xs, 0);
       
   853     r.reverse();
       
   854     return r;
       
   855   };
       
   856 
       
   857 
       
   858 
       
   859 
       
   860 
       
   861 
       
   862   var from$1 = isFunction$1(Array.from) ? Array.from : function (x) {
       
   863     return slice.call(x);
       
   864   };
       
   865 
       
   866   var count = 0;
       
   867   var funcs = {
       
   868     id: function () {
       
   869       return 'mceu_' + count++;
       
   870     },
       
   871     create: function (name$$1, attrs, children) {
       
   872       var elm = document.createElement(name$$1);
       
   873       global$2.DOM.setAttribs(elm, attrs);
       
   874       if (typeof children === 'string') {
       
   875         elm.innerHTML = children;
       
   876       } else {
       
   877         global$4.each(children, function (child) {
       
   878           if (child.nodeType) {
       
   879             elm.appendChild(child);
       
   880           }
       
   881         });
       
   882       }
       
   883       return elm;
       
   884     },
       
   885     createFragment: function (html) {
       
   886       return global$2.DOM.createFragment(html);
       
   887     },
       
   888     getWindowSize: function () {
       
   889       return global$2.DOM.getViewPort();
       
   890     },
       
   891     getSize: function (elm) {
       
   892       var width, height;
       
   893       if (elm.getBoundingClientRect) {
       
   894         var rect = elm.getBoundingClientRect();
       
   895         width = Math.max(rect.width || rect.right - rect.left, elm.offsetWidth);
       
   896         height = Math.max(rect.height || rect.bottom - rect.bottom, elm.offsetHeight);
       
   897       } else {
       
   898         width = elm.offsetWidth;
       
   899         height = elm.offsetHeight;
       
   900       }
       
   901       return {
       
   902         width: width,
       
   903         height: height
       
   904       };
       
   905     },
       
   906     getPos: function (elm, root) {
       
   907       return global$2.DOM.getPos(elm, root || funcs.getContainer());
       
   908     },
       
   909     getContainer: function () {
       
   910       return global$1.container ? global$1.container : document.body;
       
   911     },
       
   912     getViewPort: function (win) {
       
   913       return global$2.DOM.getViewPort(win);
       
   914     },
       
   915     get: function (id) {
       
   916       return document.getElementById(id);
       
   917     },
       
   918     addClass: function (elm, cls) {
       
   919       return global$2.DOM.addClass(elm, cls);
       
   920     },
       
   921     removeClass: function (elm, cls) {
       
   922       return global$2.DOM.removeClass(elm, cls);
       
   923     },
       
   924     hasClass: function (elm, cls) {
       
   925       return global$2.DOM.hasClass(elm, cls);
       
   926     },
       
   927     toggleClass: function (elm, cls, state) {
       
   928       return global$2.DOM.toggleClass(elm, cls, state);
       
   929     },
       
   930     css: function (elm, name$$1, value) {
       
   931       return global$2.DOM.setStyle(elm, name$$1, value);
       
   932     },
       
   933     getRuntimeStyle: function (elm, name$$1) {
       
   934       return global$2.DOM.getStyle(elm, name$$1, true);
       
   935     },
       
   936     on: function (target, name$$1, callback, scope) {
       
   937       return global$2.DOM.bind(target, name$$1, callback, scope);
       
   938     },
       
   939     off: function (target, name$$1, callback) {
       
   940       return global$2.DOM.unbind(target, name$$1, callback);
       
   941     },
       
   942     fire: function (target, name$$1, args) {
       
   943       return global$2.DOM.fire(target, name$$1, args);
       
   944     },
       
   945     innerHtml: function (elm, html) {
       
   946       global$2.DOM.setHTML(elm, html);
       
   947     }
       
   948   };
       
   949 
       
   950   var global$7 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');
       
   951 
       
   952   var global$8 = tinymce.util.Tools.resolve('tinymce.util.Class');
       
   953 
       
   954   var global$9 = tinymce.util.Tools.resolve('tinymce.util.EventDispatcher');
       
   955 
       
   956   var $_4kbuyt18pjjgwek1w = {
       
   957     parseBox: function (value) {
       
   958       var len;
       
   959       var radix = 10;
       
   960       if (!value) {
       
   961         return;
       
   962       }
       
   963       if (typeof value === 'number') {
       
   964         value = value || 0;
       
   965         return {
       
   966           top: value,
       
   967           left: value,
       
   968           bottom: value,
       
   969           right: value
       
   970         };
       
   971       }
       
   972       value = value.split(' ');
       
   973       len = value.length;
       
   974       if (len === 1) {
       
   975         value[1] = value[2] = value[3] = value[0];
       
   976       } else if (len === 2) {
       
   977         value[2] = value[0];
       
   978         value[3] = value[1];
       
   979       } else if (len === 3) {
       
   980         value[3] = value[1];
       
   981       }
       
   982       return {
       
   983         top: parseInt(value[0], radix) || 0,
       
   984         right: parseInt(value[1], radix) || 0,
       
   985         bottom: parseInt(value[2], radix) || 0,
       
   986         left: parseInt(value[3], radix) || 0
       
   987       };
       
   988     },
       
   989     measureBox: function (elm, prefix) {
       
   990       function getStyle(name) {
       
   991         var defaultView = elm.ownerDocument.defaultView;
       
   992         if (defaultView) {
       
   993           var computedStyle = defaultView.getComputedStyle(elm, null);
       
   994           if (computedStyle) {
       
   995             name = name.replace(/[A-Z]/g, function (a) {
       
   996               return '-' + a;
       
   997             });
       
   998             return computedStyle.getPropertyValue(name);
       
   999           } else {
       
  1000             return null;
       
  1001           }
       
  1002         }
       
  1003         return elm.currentStyle[name];
       
  1004       }
       
  1005       function getSide(name) {
       
  1006         var val = parseFloat(getStyle(name));
       
  1007         return isNaN(val) ? 0 : val;
       
  1008       }
       
  1009       return {
       
  1010         top: getSide(prefix + 'TopWidth'),
       
  1011         right: getSide(prefix + 'RightWidth'),
       
  1012         bottom: getSide(prefix + 'BottomWidth'),
       
  1013         left: getSide(prefix + 'LeftWidth')
       
  1014       };
       
  1015     }
       
  1016   };
       
  1017 
       
  1018   function noop$1() {
       
  1019   }
       
  1020   function ClassList(onchange) {
       
  1021     this.cls = [];
       
  1022     this.cls._map = {};
       
  1023     this.onchange = onchange || noop$1;
       
  1024     this.prefix = '';
       
  1025   }
       
  1026   global$4.extend(ClassList.prototype, {
       
  1027     add: function (cls) {
       
  1028       if (cls && !this.contains(cls)) {
       
  1029         this.cls._map[cls] = true;
       
  1030         this.cls.push(cls);
       
  1031         this._change();
       
  1032       }
       
  1033       return this;
       
  1034     },
       
  1035     remove: function (cls) {
       
  1036       if (this.contains(cls)) {
       
  1037         var i = void 0;
       
  1038         for (i = 0; i < this.cls.length; i++) {
       
  1039           if (this.cls[i] === cls) {
       
  1040             break;
       
  1041           }
       
  1042         }
       
  1043         this.cls.splice(i, 1);
       
  1044         delete this.cls._map[cls];
       
  1045         this._change();
       
  1046       }
       
  1047       return this;
       
  1048     },
       
  1049     toggle: function (cls, state) {
       
  1050       var curState = this.contains(cls);
       
  1051       if (curState !== state) {
       
  1052         if (curState) {
       
  1053           this.remove(cls);
       
  1054         } else {
       
  1055           this.add(cls);
       
  1056         }
       
  1057         this._change();
       
  1058       }
       
  1059       return this;
       
  1060     },
       
  1061     contains: function (cls) {
       
  1062       return !!this.cls._map[cls];
       
  1063     },
       
  1064     _change: function () {
       
  1065       delete this.clsValue;
       
  1066       this.onchange.call(this);
       
  1067     }
       
  1068   });
       
  1069   ClassList.prototype.toString = function () {
       
  1070     var value;
       
  1071     if (this.clsValue) {
       
  1072       return this.clsValue;
       
  1073     }
       
  1074     value = '';
       
  1075     for (var i = 0; i < this.cls.length; i++) {
       
  1076       if (i > 0) {
       
  1077         value += ' ';
       
  1078       }
       
  1079       value += this.prefix + this.cls[i];
       
  1080     }
       
  1081     return value;
       
  1082   };
       
  1083 
       
  1084   function unique(array) {
       
  1085     var uniqueItems = [];
       
  1086     var i = array.length, item;
       
  1087     while (i--) {
       
  1088       item = array[i];
       
  1089       if (!item.__checked) {
       
  1090         uniqueItems.push(item);
       
  1091         item.__checked = 1;
       
  1092       }
       
  1093     }
       
  1094     i = uniqueItems.length;
       
  1095     while (i--) {
       
  1096       delete uniqueItems[i].__checked;
       
  1097     }
       
  1098     return uniqueItems;
       
  1099   }
       
  1100   var expression = /^([\w\\*]+)?(?:#([\w\-\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i;
       
  1101   var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g;
       
  1102   var whiteSpace = /^\s*|\s*$/g;
       
  1103   var Collection;
       
  1104   var Selector = global$8.extend({
       
  1105     init: function (selector) {
       
  1106       var match = this.match;
       
  1107       function compileNameFilter(name) {
       
  1108         if (name) {
       
  1109           name = name.toLowerCase();
       
  1110           return function (item) {
       
  1111             return name === '*' || item.type === name;
       
  1112           };
       
  1113         }
       
  1114       }
       
  1115       function compileIdFilter(id) {
       
  1116         if (id) {
       
  1117           return function (item) {
       
  1118             return item._name === id;
       
  1119           };
       
  1120         }
       
  1121       }
       
  1122       function compileClassesFilter(classes) {
       
  1123         if (classes) {
       
  1124           classes = classes.split('.');
       
  1125           return function (item) {
       
  1126             var i = classes.length;
       
  1127             while (i--) {
       
  1128               if (!item.classes.contains(classes[i])) {
       
  1129                 return false;
       
  1130               }
       
  1131             }
       
  1132             return true;
       
  1133           };
       
  1134         }
       
  1135       }
       
  1136       function compileAttrFilter(name, cmp, check) {
       
  1137         if (name) {
       
  1138           return function (item) {
       
  1139             var value = item[name] ? item[name]() : '';
       
  1140             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;
       
  1141           };
       
  1142         }
       
  1143       }
       
  1144       function compilePsuedoFilter(name) {
       
  1145         var notSelectors;
       
  1146         if (name) {
       
  1147           name = /(?:not\((.+)\))|(.+)/i.exec(name);
       
  1148           if (!name[1]) {
       
  1149             name = name[2];
       
  1150             return function (item, index, length) {
       
  1151               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;
       
  1152             };
       
  1153           }
       
  1154           notSelectors = parseChunks(name[1], []);
       
  1155           return function (item) {
       
  1156             return !match(item, notSelectors);
       
  1157           };
       
  1158         }
       
  1159       }
       
  1160       function compile(selector, filters, direct) {
       
  1161         var parts;
       
  1162         function add(filter) {
       
  1163           if (filter) {
       
  1164             filters.push(filter);
       
  1165           }
       
  1166         }
       
  1167         parts = expression.exec(selector.replace(whiteSpace, ''));
       
  1168         add(compileNameFilter(parts[1]));
       
  1169         add(compileIdFilter(parts[2]));
       
  1170         add(compileClassesFilter(parts[3]));
       
  1171         add(compileAttrFilter(parts[4], parts[5], parts[6]));
       
  1172         add(compilePsuedoFilter(parts[7]));
       
  1173         filters.pseudo = !!parts[7];
       
  1174         filters.direct = direct;
       
  1175         return filters;
       
  1176       }
       
  1177       function parseChunks(selector, selectors) {
       
  1178         var parts = [];
       
  1179         var extra, matches, i;
       
  1180         do {
       
  1181           chunker.exec('');
       
  1182           matches = chunker.exec(selector);
       
  1183           if (matches) {
       
  1184             selector = matches[3];
       
  1185             parts.push(matches[1]);
       
  1186             if (matches[2]) {
       
  1187               extra = matches[3];
       
  1188               break;
       
  1189             }
       
  1190           }
       
  1191         } while (matches);
       
  1192         if (extra) {
       
  1193           parseChunks(extra, selectors);
       
  1194         }
       
  1195         selector = [];
       
  1196         for (i = 0; i < parts.length; i++) {
       
  1197           if (parts[i] !== '>') {
       
  1198             selector.push(compile(parts[i], [], parts[i - 1] === '>'));
       
  1199           }
       
  1200         }
       
  1201         selectors.push(selector);
       
  1202         return selectors;
       
  1203       }
       
  1204       this._selectors = parseChunks(selector, []);
       
  1205     },
       
  1206     match: function (control, selectors) {
       
  1207       var i, l, si, sl, selector, fi, fl, filters, index, length, siblings, count, item;
       
  1208       selectors = selectors || this._selectors;
       
  1209       for (i = 0, l = selectors.length; i < l; i++) {
       
  1210         selector = selectors[i];
       
  1211         sl = selector.length;
       
  1212         item = control;
       
  1213         count = 0;
       
  1214         for (si = sl - 1; si >= 0; si--) {
       
  1215           filters = selector[si];
       
  1216           while (item) {
       
  1217             if (filters.pseudo) {
       
  1218               siblings = item.parent().items();
       
  1219               index = length = siblings.length;
       
  1220               while (index--) {
       
  1221                 if (siblings[index] === item) {
       
  1222                   break;
       
  1223                 }
       
  1224               }
       
  1225             }
       
  1226             for (fi = 0, fl = filters.length; fi < fl; fi++) {
       
  1227               if (!filters[fi](item, index, length)) {
       
  1228                 fi = fl + 1;
       
  1229                 break;
       
  1230               }
       
  1231             }
       
  1232             if (fi === fl) {
       
  1233               count++;
       
  1234               break;
       
  1235             } else {
       
  1236               if (si === sl - 1) {
       
  1237                 break;
       
  1238               }
       
  1239             }
       
  1240             item = item.parent();
       
  1241           }
       
  1242         }
       
  1243         if (count === sl) {
       
  1244           return true;
       
  1245         }
       
  1246       }
       
  1247       return false;
       
  1248     },
       
  1249     find: function (container) {
       
  1250       var matches = [], i, l;
       
  1251       var selectors = this._selectors;
       
  1252       function collect(items, selector, index) {
       
  1253         var i, l, fi, fl, item;
       
  1254         var filters = selector[index];
       
  1255         for (i = 0, l = items.length; i < l; i++) {
       
  1256           item = items[i];
       
  1257           for (fi = 0, fl = filters.length; fi < fl; fi++) {
       
  1258             if (!filters[fi](item, i, l)) {
       
  1259               fi = fl + 1;
       
  1260               break;
       
  1261             }
       
  1262           }
       
  1263           if (fi === fl) {
       
  1264             if (index === selector.length - 1) {
       
  1265               matches.push(item);
       
  1266             } else {
       
  1267               if (item.items) {
       
  1268                 collect(item.items(), selector, index + 1);
       
  1269               }
       
  1270             }
       
  1271           } else if (filters.direct) {
       
  1272             return;
       
  1273           }
       
  1274           if (item.items) {
       
  1275             collect(item.items(), selector, index);
       
  1276           }
       
  1277         }
       
  1278       }
       
  1279       if (container.items) {
       
  1280         for (i = 0, l = selectors.length; i < l; i++) {
       
  1281           collect(container.items(), selectors[i], 0);
       
  1282         }
       
  1283         if (l > 1) {
       
  1284           matches = unique(matches);
       
  1285         }
       
  1286       }
       
  1287       if (!Collection) {
       
  1288         Collection = Selector.Collection;
       
  1289       }
       
  1290       return new Collection(matches);
       
  1291     }
       
  1292   });
       
  1293 
       
  1294   var Collection$1;
       
  1295   var proto;
       
  1296   var push$1 = Array.prototype.push;
       
  1297   var slice$1 = Array.prototype.slice;
       
  1298   proto = {
       
  1299     length: 0,
       
  1300     init: function (items) {
       
  1301       if (items) {
       
  1302         this.add(items);
       
  1303       }
       
  1304     },
       
  1305     add: function (items) {
       
  1306       var self = this;
       
  1307       if (!global$4.isArray(items)) {
       
  1308         if (items instanceof Collection$1) {
       
  1309           self.add(items.toArray());
       
  1310         } else {
       
  1311           push$1.call(self, items);
       
  1312         }
       
  1313       } else {
       
  1314         push$1.apply(self, items);
       
  1315       }
       
  1316       return self;
       
  1317     },
       
  1318     set: function (items) {
       
  1319       var self = this;
       
  1320       var len = self.length;
       
  1321       var i;
       
  1322       self.length = 0;
       
  1323       self.add(items);
       
  1324       for (i = self.length; i < len; i++) {
       
  1325         delete self[i];
       
  1326       }
       
  1327       return self;
       
  1328     },
       
  1329     filter: function (selector) {
       
  1330       var self = this;
       
  1331       var i, l;
       
  1332       var matches = [];
       
  1333       var item, match;
       
  1334       if (typeof selector === 'string') {
       
  1335         selector = new Selector(selector);
       
  1336         match = function (item) {
       
  1337           return selector.match(item);
       
  1338         };
       
  1339       } else {
       
  1340         match = selector;
       
  1341       }
       
  1342       for (i = 0, l = self.length; i < l; i++) {
       
  1343         item = self[i];
       
  1344         if (match(item)) {
       
  1345           matches.push(item);
       
  1346         }
       
  1347       }
       
  1348       return new Collection$1(matches);
       
  1349     },
       
  1350     slice: function () {
       
  1351       return new Collection$1(slice$1.apply(this, arguments));
       
  1352     },
       
  1353     eq: function (index) {
       
  1354       return index === -1 ? this.slice(index) : this.slice(index, +index + 1);
       
  1355     },
       
  1356     each: function (callback) {
       
  1357       global$4.each(this, callback);
       
  1358       return this;
       
  1359     },
       
  1360     toArray: function () {
       
  1361       return global$4.toArray(this);
       
  1362     },
       
  1363     indexOf: function (ctrl) {
       
  1364       var self = this;
       
  1365       var i = self.length;
       
  1366       while (i--) {
       
  1367         if (self[i] === ctrl) {
       
  1368           break;
       
  1369         }
       
  1370       }
       
  1371       return i;
       
  1372     },
       
  1373     reverse: function () {
       
  1374       return new Collection$1(global$4.toArray(this).reverse());
       
  1375     },
       
  1376     hasClass: function (cls) {
       
  1377       return this[0] ? this[0].classes.contains(cls) : false;
       
  1378     },
       
  1379     prop: function (name, value) {
       
  1380       var self = this;
       
  1381       var item;
       
  1382       if (value !== undefined) {
       
  1383         self.each(function (item) {
       
  1384           if (item[name]) {
       
  1385             item[name](value);
       
  1386           }
       
  1387         });
       
  1388         return self;
       
  1389       }
       
  1390       item = self[0];
       
  1391       if (item && item[name]) {
       
  1392         return item[name]();
       
  1393       }
       
  1394     },
       
  1395     exec: function (name) {
       
  1396       var self = this, args = global$4.toArray(arguments).slice(1);
       
  1397       self.each(function (item) {
       
  1398         if (item[name]) {
       
  1399           item[name].apply(item, args);
       
  1400         }
       
  1401       });
       
  1402       return self;
       
  1403     },
       
  1404     remove: function () {
       
  1405       var i = this.length;
       
  1406       while (i--) {
       
  1407         this[i].remove();
       
  1408       }
       
  1409       return this;
       
  1410     },
       
  1411     addClass: function (cls) {
       
  1412       return this.each(function (item) {
       
  1413         item.classes.add(cls);
       
  1414       });
       
  1415     },
       
  1416     removeClass: function (cls) {
       
  1417       return this.each(function (item) {
       
  1418         item.classes.remove(cls);
       
  1419       });
       
  1420     }
       
  1421   };
       
  1422   global$4.each('fire on off show hide append prepend before after reflow'.split(' '), function (name) {
       
  1423     proto[name] = function () {
       
  1424       var args = global$4.toArray(arguments);
       
  1425       this.each(function (ctrl) {
       
  1426         if (name in ctrl) {
       
  1427           ctrl[name].apply(ctrl, args);
       
  1428         }
       
  1429       });
       
  1430       return this;
       
  1431     };
       
  1432   });
       
  1433   global$4.each('text name disabled active selected checked visible parent value data'.split(' '), function (name) {
       
  1434     proto[name] = function (value) {
       
  1435       return this.prop(name, value);
       
  1436     };
       
  1437   });
       
  1438   Collection$1 = global$8.extend(proto);
       
  1439   Selector.Collection = Collection$1;
       
  1440   var Collection$2 = Collection$1;
       
  1441 
       
  1442   var Binding = function (settings) {
       
  1443     this.create = settings.create;
       
  1444   };
       
  1445   Binding.create = function (model, name) {
       
  1446     return new Binding({
       
  1447       create: function (otherModel, otherName) {
       
  1448         var bindings;
       
  1449         var fromSelfToOther = function (e) {
       
  1450           otherModel.set(otherName, e.value);
       
  1451         };
       
  1452         var fromOtherToSelf = function (e) {
       
  1453           model.set(name, e.value);
       
  1454         };
       
  1455         otherModel.on('change:' + otherName, fromOtherToSelf);
       
  1456         model.on('change:' + name, fromSelfToOther);
       
  1457         bindings = otherModel._bindings;
       
  1458         if (!bindings) {
       
  1459           bindings = otherModel._bindings = [];
       
  1460           otherModel.on('destroy', function () {
       
  1461             var i = bindings.length;
       
  1462             while (i--) {
       
  1463               bindings[i]();
       
  1464             }
       
  1465           });
       
  1466         }
       
  1467         bindings.push(function () {
       
  1468           model.off('change:' + name, fromSelfToOther);
       
  1469         });
       
  1470         return model.get(name);
       
  1471       }
       
  1472     });
       
  1473   };
       
  1474 
       
  1475   var global$10 = tinymce.util.Tools.resolve('tinymce.util.Observable');
       
  1476 
       
  1477   function isNode(node) {
       
  1478     return node.nodeType > 0;
       
  1479   }
       
  1480   function isEqual(a, b) {
       
  1481     var k, checked;
       
  1482     if (a === b) {
       
  1483       return true;
       
  1484     }
       
  1485     if (a === null || b === null) {
       
  1486       return a === b;
       
  1487     }
       
  1488     if (typeof a !== 'object' || typeof b !== 'object') {
       
  1489       return a === b;
       
  1490     }
       
  1491     if (global$4.isArray(b)) {
       
  1492       if (a.length !== b.length) {
       
  1493         return false;
       
  1494       }
       
  1495       k = a.length;
       
  1496       while (k--) {
       
  1497         if (!isEqual(a[k], b[k])) {
       
  1498           return false;
       
  1499         }
       
  1500       }
       
  1501     }
       
  1502     if (isNode(a) || isNode(b)) {
       
  1503       return a === b;
       
  1504     }
       
  1505     checked = {};
       
  1506     for (k in b) {
       
  1507       if (!isEqual(a[k], b[k])) {
       
  1508         return false;
       
  1509       }
       
  1510       checked[k] = true;
       
  1511     }
       
  1512     for (k in a) {
       
  1513       if (!checked[k] && !isEqual(a[k], b[k])) {
       
  1514         return false;
       
  1515       }
       
  1516     }
       
  1517     return true;
       
  1518   }
       
  1519   var ObservableObject = global$8.extend({
       
  1520     Mixins: [global$10],
       
  1521     init: function (data) {
       
  1522       var name, value;
       
  1523       data = data || {};
       
  1524       for (name in data) {
       
  1525         value = data[name];
       
  1526         if (value instanceof Binding) {
       
  1527           data[name] = value.create(this, name);
       
  1528         }
       
  1529       }
       
  1530       this.data = data;
       
  1531     },
       
  1532     set: function (name, value) {
       
  1533       var key, args;
       
  1534       var oldValue = this.data[name];
       
  1535       if (value instanceof Binding) {
       
  1536         value = value.create(this, name);
       
  1537       }
       
  1538       if (typeof name === 'object') {
       
  1539         for (key in name) {
       
  1540           this.set(key, name[key]);
       
  1541         }
       
  1542         return this;
       
  1543       }
       
  1544       if (!isEqual(oldValue, value)) {
       
  1545         this.data[name] = value;
       
  1546         args = {
       
  1547           target: this,
       
  1548           name: name,
       
  1549           value: value,
       
  1550           oldValue: oldValue
       
  1551         };
       
  1552         this.fire('change:' + name, args);
       
  1553         this.fire('change', args);
       
  1554       }
       
  1555       return this;
       
  1556     },
       
  1557     get: function (name) {
       
  1558       return this.data[name];
       
  1559     },
       
  1560     has: function (name) {
       
  1561       return name in this.data;
       
  1562     },
       
  1563     bind: function (name) {
       
  1564       return Binding.create(this, name);
       
  1565     },
       
  1566     destroy: function () {
       
  1567       this.fire('destroy');
       
  1568     }
       
  1569   });
       
  1570 
       
  1571   var dirtyCtrls = {};
       
  1572   var animationFrameRequested;
       
  1573   var $_cqjgb518wjjgwek2f = {
       
  1574     add: function (ctrl) {
       
  1575       var parent$$1 = ctrl.parent();
       
  1576       if (parent$$1) {
       
  1577         if (!parent$$1._layout || parent$$1._layout.isNative()) {
       
  1578           return;
       
  1579         }
       
  1580         if (!dirtyCtrls[parent$$1._id]) {
       
  1581           dirtyCtrls[parent$$1._id] = parent$$1;
       
  1582         }
       
  1583         if (!animationFrameRequested) {
       
  1584           animationFrameRequested = true;
       
  1585           global$3.requestAnimationFrame(function () {
       
  1586             var id, ctrl;
       
  1587             animationFrameRequested = false;
       
  1588             for (id in dirtyCtrls) {
       
  1589               ctrl = dirtyCtrls[id];
       
  1590               if (ctrl.state.get('rendered')) {
       
  1591                 ctrl.reflow();
       
  1592               }
       
  1593             }
       
  1594             dirtyCtrls = {};
       
  1595           }, document.body);
       
  1596         }
       
  1597       }
       
  1598     },
       
  1599     remove: function (ctrl) {
       
  1600       if (dirtyCtrls[ctrl._id]) {
       
  1601         delete dirtyCtrls[ctrl._id];
       
  1602       }
       
  1603     }
       
  1604   };
       
  1605 
       
  1606   var getUiContainerDelta = function (ctrl) {
       
  1607     var uiContainer = getUiContainer(ctrl);
       
  1608     if (uiContainer && global$2.DOM.getStyle(uiContainer, 'position', true) !== 'static') {
       
  1609       var containerPos = global$2.DOM.getPos(uiContainer);
       
  1610       var dx = uiContainer.scrollLeft - containerPos.x;
       
  1611       var dy = uiContainer.scrollTop - containerPos.y;
       
  1612       return Option.some({
       
  1613         x: dx,
       
  1614         y: dy
       
  1615       });
       
  1616     } else {
       
  1617       return Option.none();
       
  1618     }
       
  1619   };
       
  1620   var setUiContainer = function (editor, ctrl) {
       
  1621     var uiContainer = global$2.DOM.select(editor.settings.ui_container)[0];
       
  1622     ctrl.getRoot().uiContainer = uiContainer;
       
  1623   };
       
  1624   var getUiContainer = function (ctrl) {
       
  1625     return ctrl ? ctrl.getRoot().uiContainer : null;
       
  1626   };
       
  1627   var inheritUiContainer = function (fromCtrl, toCtrl) {
       
  1628     return toCtrl.uiContainer = getUiContainer(fromCtrl);
       
  1629   };
       
  1630   var $_egt6ye18xjjgwek2h = {
       
  1631     getUiContainerDelta: getUiContainerDelta,
       
  1632     setUiContainer: setUiContainer,
       
  1633     getUiContainer: getUiContainer,
       
  1634     inheritUiContainer: inheritUiContainer
       
  1635   };
       
  1636 
       
  1637   var hasMouseWheelEventSupport = 'onmousewheel' in document;
       
  1638   var hasWheelEventSupport = false;
       
  1639   var classPrefix = 'mce-';
       
  1640   var Control;
       
  1641   var idCounter = 0;
       
  1642   var proto$1 = {
       
  1643     Statics: { classPrefix: classPrefix },
       
  1644     isRtl: function () {
       
  1645       return Control.rtl;
       
  1646     },
       
  1647     classPrefix: classPrefix,
       
  1648     init: function (settings) {
       
  1649       var self$$1 = this;
       
  1650       var classes, defaultClasses;
       
  1651       function applyClasses(classes) {
       
  1652         var i;
       
  1653         classes = classes.split(' ');
       
  1654         for (i = 0; i < classes.length; i++) {
       
  1655           self$$1.classes.add(classes[i]);
       
  1656         }
       
  1657       }
       
  1658       self$$1.settings = settings = global$4.extend({}, self$$1.Defaults, settings);
       
  1659       self$$1._id = settings.id || 'mceu_' + idCounter++;
       
  1660       self$$1._aria = { role: settings.role };
       
  1661       self$$1._elmCache = {};
       
  1662       self$$1.$ = global$7;
       
  1663       self$$1.state = new ObservableObject({
       
  1664         visible: true,
       
  1665         active: false,
       
  1666         disabled: false,
       
  1667         value: ''
       
  1668       });
       
  1669       self$$1.data = new ObservableObject(settings.data);
       
  1670       self$$1.classes = new ClassList(function () {
       
  1671         if (self$$1.state.get('rendered')) {
       
  1672           self$$1.getEl().className = this.toString();
       
  1673         }
       
  1674       });
       
  1675       self$$1.classes.prefix = self$$1.classPrefix;
       
  1676       classes = settings.classes;
       
  1677       if (classes) {
       
  1678         if (self$$1.Defaults) {
       
  1679           defaultClasses = self$$1.Defaults.classes;
       
  1680           if (defaultClasses && classes !== defaultClasses) {
       
  1681             applyClasses(defaultClasses);
       
  1682           }
       
  1683         }
       
  1684         applyClasses(classes);
       
  1685       }
       
  1686       global$4.each('title text name visible disabled active value'.split(' '), function (name$$1) {
       
  1687         if (name$$1 in settings) {
       
  1688           self$$1[name$$1](settings[name$$1]);
       
  1689         }
       
  1690       });
       
  1691       self$$1.on('click', function () {
       
  1692         if (self$$1.disabled()) {
       
  1693           return false;
       
  1694         }
       
  1695       });
       
  1696       self$$1.settings = settings;
       
  1697       self$$1.borderBox = $_4kbuyt18pjjgwek1w.parseBox(settings.border);
       
  1698       self$$1.paddingBox = $_4kbuyt18pjjgwek1w.parseBox(settings.padding);
       
  1699       self$$1.marginBox = $_4kbuyt18pjjgwek1w.parseBox(settings.margin);
       
  1700       if (settings.hidden) {
       
  1701         self$$1.hide();
       
  1702       }
       
  1703     },
       
  1704     Properties: 'parent,name',
       
  1705     getContainerElm: function () {
       
  1706       var uiContainer = $_egt6ye18xjjgwek2h.getUiContainer(this);
       
  1707       return uiContainer ? uiContainer : funcs.getContainer();
       
  1708     },
       
  1709     getParentCtrl: function (elm) {
       
  1710       var ctrl;
       
  1711       var lookup = this.getRoot().controlIdLookup;
       
  1712       while (elm && lookup) {
       
  1713         ctrl = lookup[elm.id];
       
  1714         if (ctrl) {
       
  1715           break;
       
  1716         }
       
  1717         elm = elm.parentNode;
       
  1718       }
       
  1719       return ctrl;
       
  1720     },
       
  1721     initLayoutRect: function () {
       
  1722       var self$$1 = this;
       
  1723       var settings = self$$1.settings;
       
  1724       var borderBox, layoutRect;
       
  1725       var elm = self$$1.getEl();
       
  1726       var width, height, minWidth, minHeight, autoResize;
       
  1727       var startMinWidth, startMinHeight, initialSize;
       
  1728       borderBox = self$$1.borderBox = self$$1.borderBox || $_4kbuyt18pjjgwek1w.measureBox(elm, 'border');
       
  1729       self$$1.paddingBox = self$$1.paddingBox || $_4kbuyt18pjjgwek1w.measureBox(elm, 'padding');
       
  1730       self$$1.marginBox = self$$1.marginBox || $_4kbuyt18pjjgwek1w.measureBox(elm, 'margin');
       
  1731       initialSize = funcs.getSize(elm);
       
  1732       startMinWidth = settings.minWidth;
       
  1733       startMinHeight = settings.minHeight;
       
  1734       minWidth = startMinWidth || initialSize.width;
       
  1735       minHeight = startMinHeight || initialSize.height;
       
  1736       width = settings.width;
       
  1737       height = settings.height;
       
  1738       autoResize = settings.autoResize;
       
  1739       autoResize = typeof autoResize !== 'undefined' ? autoResize : !width && !height;
       
  1740       width = width || minWidth;
       
  1741       height = height || minHeight;
       
  1742       var deltaW = borderBox.left + borderBox.right;
       
  1743       var deltaH = borderBox.top + borderBox.bottom;
       
  1744       var maxW = settings.maxWidth || 65535;
       
  1745       var maxH = settings.maxHeight || 65535;
       
  1746       self$$1._layoutRect = layoutRect = {
       
  1747         x: settings.x || 0,
       
  1748         y: settings.y || 0,
       
  1749         w: width,
       
  1750         h: height,
       
  1751         deltaW: deltaW,
       
  1752         deltaH: deltaH,
       
  1753         contentW: width - deltaW,
       
  1754         contentH: height - deltaH,
       
  1755         innerW: width - deltaW,
       
  1756         innerH: height - deltaH,
       
  1757         startMinWidth: startMinWidth || 0,
       
  1758         startMinHeight: startMinHeight || 0,
       
  1759         minW: Math.min(minWidth, maxW),
       
  1760         minH: Math.min(minHeight, maxH),
       
  1761         maxW: maxW,
       
  1762         maxH: maxH,
       
  1763         autoResize: autoResize,
       
  1764         scrollW: 0
       
  1765       };
       
  1766       self$$1._lastLayoutRect = {};
       
  1767       return layoutRect;
       
  1768     },
       
  1769     layoutRect: function (newRect) {
       
  1770       var self$$1 = this;
       
  1771       var curRect = self$$1._layoutRect, lastLayoutRect, size, deltaWidth, deltaHeight, repaintControls;
       
  1772       if (!curRect) {
       
  1773         curRect = self$$1.initLayoutRect();
       
  1774       }
       
  1775       if (newRect) {
       
  1776         deltaWidth = curRect.deltaW;
       
  1777         deltaHeight = curRect.deltaH;
       
  1778         if (newRect.x !== undefined) {
       
  1779           curRect.x = newRect.x;
       
  1780         }
       
  1781         if (newRect.y !== undefined) {
       
  1782           curRect.y = newRect.y;
       
  1783         }
       
  1784         if (newRect.minW !== undefined) {
       
  1785           curRect.minW = newRect.minW;
       
  1786         }
       
  1787         if (newRect.minH !== undefined) {
       
  1788           curRect.minH = newRect.minH;
       
  1789         }
       
  1790         size = newRect.w;
       
  1791         if (size !== undefined) {
       
  1792           size = size < curRect.minW ? curRect.minW : size;
       
  1793           size = size > curRect.maxW ? curRect.maxW : size;
       
  1794           curRect.w = size;
       
  1795           curRect.innerW = size - deltaWidth;
       
  1796         }
       
  1797         size = newRect.h;
       
  1798         if (size !== undefined) {
       
  1799           size = size < curRect.minH ? curRect.minH : size;
       
  1800           size = size > curRect.maxH ? curRect.maxH : size;
       
  1801           curRect.h = size;
       
  1802           curRect.innerH = size - deltaHeight;
       
  1803         }
       
  1804         size = newRect.innerW;
       
  1805         if (size !== undefined) {
       
  1806           size = size < curRect.minW - deltaWidth ? curRect.minW - deltaWidth : size;
       
  1807           size = size > curRect.maxW - deltaWidth ? curRect.maxW - deltaWidth : size;
       
  1808           curRect.innerW = size;
       
  1809           curRect.w = size + deltaWidth;
       
  1810         }
       
  1811         size = newRect.innerH;
       
  1812         if (size !== undefined) {
       
  1813           size = size < curRect.minH - deltaHeight ? curRect.minH - deltaHeight : size;
       
  1814           size = size > curRect.maxH - deltaHeight ? curRect.maxH - deltaHeight : size;
       
  1815           curRect.innerH = size;
       
  1816           curRect.h = size + deltaHeight;
       
  1817         }
       
  1818         if (newRect.contentW !== undefined) {
       
  1819           curRect.contentW = newRect.contentW;
       
  1820         }
       
  1821         if (newRect.contentH !== undefined) {
       
  1822           curRect.contentH = newRect.contentH;
       
  1823         }
       
  1824         lastLayoutRect = self$$1._lastLayoutRect;
       
  1825         if (lastLayoutRect.x !== curRect.x || lastLayoutRect.y !== curRect.y || lastLayoutRect.w !== curRect.w || lastLayoutRect.h !== curRect.h) {
       
  1826           repaintControls = Control.repaintControls;
       
  1827           if (repaintControls) {
       
  1828             if (repaintControls.map && !repaintControls.map[self$$1._id]) {
       
  1829               repaintControls.push(self$$1);
       
  1830               repaintControls.map[self$$1._id] = true;
       
  1831             }
       
  1832           }
       
  1833           lastLayoutRect.x = curRect.x;
       
  1834           lastLayoutRect.y = curRect.y;
       
  1835           lastLayoutRect.w = curRect.w;
       
  1836           lastLayoutRect.h = curRect.h;
       
  1837         }
       
  1838         return self$$1;
       
  1839       }
       
  1840       return curRect;
       
  1841     },
       
  1842     repaint: function () {
       
  1843       var self$$1 = this;
       
  1844       var style, bodyStyle, bodyElm, rect, borderBox;
       
  1845       var borderW, borderH, lastRepaintRect, round, value;
       
  1846       round = !document.createRange ? Math.round : function (value) {
       
  1847         return value;
       
  1848       };
       
  1849       style = self$$1.getEl().style;
       
  1850       rect = self$$1._layoutRect;
       
  1851       lastRepaintRect = self$$1._lastRepaintRect || {};
       
  1852       borderBox = self$$1.borderBox;
       
  1853       borderW = borderBox.left + borderBox.right;
       
  1854       borderH = borderBox.top + borderBox.bottom;
       
  1855       if (rect.x !== lastRepaintRect.x) {
       
  1856         style.left = round(rect.x) + 'px';
       
  1857         lastRepaintRect.x = rect.x;
       
  1858       }
       
  1859       if (rect.y !== lastRepaintRect.y) {
       
  1860         style.top = round(rect.y) + 'px';
       
  1861         lastRepaintRect.y = rect.y;
       
  1862       }
       
  1863       if (rect.w !== lastRepaintRect.w) {
       
  1864         value = round(rect.w - borderW);
       
  1865         style.width = (value >= 0 ? value : 0) + 'px';
       
  1866         lastRepaintRect.w = rect.w;
       
  1867       }
       
  1868       if (rect.h !== lastRepaintRect.h) {
       
  1869         value = round(rect.h - borderH);
       
  1870         style.height = (value >= 0 ? value : 0) + 'px';
       
  1871         lastRepaintRect.h = rect.h;
       
  1872       }
       
  1873       if (self$$1._hasBody && rect.innerW !== lastRepaintRect.innerW) {
       
  1874         value = round(rect.innerW);
       
  1875         bodyElm = self$$1.getEl('body');
       
  1876         if (bodyElm) {
       
  1877           bodyStyle = bodyElm.style;
       
  1878           bodyStyle.width = (value >= 0 ? value : 0) + 'px';
       
  1879         }
       
  1880         lastRepaintRect.innerW = rect.innerW;
       
  1881       }
       
  1882       if (self$$1._hasBody && rect.innerH !== lastRepaintRect.innerH) {
       
  1883         value = round(rect.innerH);
       
  1884         bodyElm = bodyElm || self$$1.getEl('body');
       
  1885         if (bodyElm) {
       
  1886           bodyStyle = bodyStyle || bodyElm.style;
       
  1887           bodyStyle.height = (value >= 0 ? value : 0) + 'px';
       
  1888         }
       
  1889         lastRepaintRect.innerH = rect.innerH;
       
  1890       }
       
  1891       self$$1._lastRepaintRect = lastRepaintRect;
       
  1892       self$$1.fire('repaint', {}, false);
       
  1893     },
       
  1894     updateLayoutRect: function () {
       
  1895       var self$$1 = this;
       
  1896       self$$1.parent()._lastRect = null;
       
  1897       funcs.css(self$$1.getEl(), {
       
  1898         width: '',
       
  1899         height: ''
       
  1900       });
       
  1901       self$$1._layoutRect = self$$1._lastRepaintRect = self$$1._lastLayoutRect = null;
       
  1902       self$$1.initLayoutRect();
       
  1903     },
       
  1904     on: function (name$$1, callback) {
       
  1905       var self$$1 = this;
       
  1906       function resolveCallbackName(name$$1) {
       
  1907         var callback, scope;
       
  1908         if (typeof name$$1 !== 'string') {
       
  1909           return name$$1;
       
  1910         }
       
  1911         return function (e) {
       
  1912           if (!callback) {
       
  1913             self$$1.parentsAndSelf().each(function (ctrl) {
       
  1914               var callbacks = ctrl.settings.callbacks;
       
  1915               if (callbacks && (callback = callbacks[name$$1])) {
       
  1916                 scope = ctrl;
       
  1917                 return false;
       
  1918               }
       
  1919             });
       
  1920           }
       
  1921           if (!callback) {
       
  1922             e.action = name$$1;
       
  1923             this.fire('execute', e);
       
  1924             return;
       
  1925           }
       
  1926           return callback.call(scope, e);
       
  1927         };
       
  1928       }
       
  1929       getEventDispatcher(self$$1).on(name$$1, resolveCallbackName(callback));
       
  1930       return self$$1;
       
  1931     },
       
  1932     off: function (name$$1, callback) {
       
  1933       getEventDispatcher(this).off(name$$1, callback);
       
  1934       return this;
       
  1935     },
       
  1936     fire: function (name$$1, args, bubble) {
       
  1937       var self$$1 = this;
       
  1938       args = args || {};
       
  1939       if (!args.control) {
       
  1940         args.control = self$$1;
       
  1941       }
       
  1942       args = getEventDispatcher(self$$1).fire(name$$1, args);
       
  1943       if (bubble !== false && self$$1.parent) {
       
  1944         var parent$$1 = self$$1.parent();
       
  1945         while (parent$$1 && !args.isPropagationStopped()) {
       
  1946           parent$$1.fire(name$$1, args, false);
       
  1947           parent$$1 = parent$$1.parent();
       
  1948         }
       
  1949       }
       
  1950       return args;
       
  1951     },
       
  1952     hasEventListeners: function (name$$1) {
       
  1953       return getEventDispatcher(this).has(name$$1);
       
  1954     },
       
  1955     parents: function (selector) {
       
  1956       var self$$1 = this;
       
  1957       var ctrl, parents = new Collection$2();
       
  1958       for (ctrl = self$$1.parent(); ctrl; ctrl = ctrl.parent()) {
       
  1959         parents.add(ctrl);
       
  1960       }
       
  1961       if (selector) {
       
  1962         parents = parents.filter(selector);
       
  1963       }
       
  1964       return parents;
       
  1965     },
       
  1966     parentsAndSelf: function (selector) {
       
  1967       return new Collection$2(this).add(this.parents(selector));
       
  1968     },
       
  1969     next: function () {
       
  1970       var parentControls = this.parent().items();
       
  1971       return parentControls[parentControls.indexOf(this) + 1];
       
  1972     },
       
  1973     prev: function () {
       
  1974       var parentControls = this.parent().items();
       
  1975       return parentControls[parentControls.indexOf(this) - 1];
       
  1976     },
       
  1977     innerHtml: function (html) {
       
  1978       this.$el.html(html);
       
  1979       return this;
       
  1980     },
       
  1981     getEl: function (suffix) {
       
  1982       var id = suffix ? this._id + '-' + suffix : this._id;
       
  1983       if (!this._elmCache[id]) {
       
  1984         this._elmCache[id] = global$7('#' + id)[0];
       
  1985       }
       
  1986       return this._elmCache[id];
       
  1987     },
       
  1988     show: function () {
       
  1989       return this.visible(true);
       
  1990     },
       
  1991     hide: function () {
       
  1992       return this.visible(false);
       
  1993     },
       
  1994     focus: function () {
       
  1995       try {
       
  1996         this.getEl().focus();
       
  1997       } catch (ex) {
       
  1998       }
       
  1999       return this;
       
  2000     },
       
  2001     blur: function () {
       
  2002       this.getEl().blur();
       
  2003       return this;
       
  2004     },
       
  2005     aria: function (name$$1, value) {
       
  2006       var self$$1 = this, elm = self$$1.getEl(self$$1.ariaTarget);
       
  2007       if (typeof value === 'undefined') {
       
  2008         return self$$1._aria[name$$1];
       
  2009       }
       
  2010       self$$1._aria[name$$1] = value;
       
  2011       if (self$$1.state.get('rendered')) {
       
  2012         elm.setAttribute(name$$1 === 'role' ? name$$1 : 'aria-' + name$$1, value);
       
  2013       }
       
  2014       return self$$1;
       
  2015     },
       
  2016     encode: function (text, translate) {
       
  2017       if (translate !== false) {
       
  2018         text = this.translate(text);
       
  2019       }
       
  2020       return (text || '').replace(/[&<>"]/g, function (match) {
       
  2021         return '&#' + match.charCodeAt(0) + ';';
       
  2022       });
       
  2023     },
       
  2024     translate: function (text) {
       
  2025       return Control.translate ? Control.translate(text) : text;
       
  2026     },
       
  2027     before: function (items) {
       
  2028       var self$$1 = this, parent$$1 = self$$1.parent();
       
  2029       if (parent$$1) {
       
  2030         parent$$1.insert(items, parent$$1.items().indexOf(self$$1), true);
       
  2031       }
       
  2032       return self$$1;
       
  2033     },
       
  2034     after: function (items) {
       
  2035       var self$$1 = this, parent$$1 = self$$1.parent();
       
  2036       if (parent$$1) {
       
  2037         parent$$1.insert(items, parent$$1.items().indexOf(self$$1));
       
  2038       }
       
  2039       return self$$1;
       
  2040     },
       
  2041     remove: function () {
       
  2042       var self$$1 = this;
       
  2043       var elm = self$$1.getEl();
       
  2044       var parent$$1 = self$$1.parent();
       
  2045       var newItems, i;
       
  2046       if (self$$1.items) {
       
  2047         var controls = self$$1.items().toArray();
       
  2048         i = controls.length;
       
  2049         while (i--) {
       
  2050           controls[i].remove();
       
  2051         }
       
  2052       }
       
  2053       if (parent$$1 && parent$$1.items) {
       
  2054         newItems = [];
       
  2055         parent$$1.items().each(function (item) {
       
  2056           if (item !== self$$1) {
       
  2057             newItems.push(item);
       
  2058           }
       
  2059         });
       
  2060         parent$$1.items().set(newItems);
       
  2061         parent$$1._lastRect = null;
       
  2062       }
       
  2063       if (self$$1._eventsRoot && self$$1._eventsRoot === self$$1) {
       
  2064         global$7(elm).off();
       
  2065       }
       
  2066       var lookup = self$$1.getRoot().controlIdLookup;
       
  2067       if (lookup) {
       
  2068         delete lookup[self$$1._id];
       
  2069       }
       
  2070       if (elm && elm.parentNode) {
       
  2071         elm.parentNode.removeChild(elm);
       
  2072       }
       
  2073       self$$1.state.set('rendered', false);
       
  2074       self$$1.state.destroy();
       
  2075       self$$1.fire('remove');
       
  2076       return self$$1;
       
  2077     },
       
  2078     renderBefore: function (elm) {
       
  2079       global$7(elm).before(this.renderHtml());
       
  2080       this.postRender();
       
  2081       return this;
       
  2082     },
       
  2083     renderTo: function (elm) {
       
  2084       global$7(elm || this.getContainerElm()).append(this.renderHtml());
       
  2085       this.postRender();
       
  2086       return this;
       
  2087     },
       
  2088     preRender: function () {
       
  2089     },
       
  2090     render: function () {
       
  2091     },
       
  2092     renderHtml: function () {
       
  2093       return '<div id="' + this._id + '" class="' + this.classes + '"></div>';
       
  2094     },
       
  2095     postRender: function () {
       
  2096       var self$$1 = this;
       
  2097       var settings = self$$1.settings;
       
  2098       var elm, box, parent$$1, name$$1, parentEventsRoot;
       
  2099       self$$1.$el = global$7(self$$1.getEl());
       
  2100       self$$1.state.set('rendered', true);
       
  2101       for (name$$1 in settings) {
       
  2102         if (name$$1.indexOf('on') === 0) {
       
  2103           self$$1.on(name$$1.substr(2), settings[name$$1]);
       
  2104         }
       
  2105       }
       
  2106       if (self$$1._eventsRoot) {
       
  2107         for (parent$$1 = self$$1.parent(); !parentEventsRoot && parent$$1; parent$$1 = parent$$1.parent()) {
       
  2108           parentEventsRoot = parent$$1._eventsRoot;
       
  2109         }
       
  2110         if (parentEventsRoot) {
       
  2111           for (name$$1 in parentEventsRoot._nativeEvents) {
       
  2112             self$$1._nativeEvents[name$$1] = true;
       
  2113           }
       
  2114         }
       
  2115       }
       
  2116       bindPendingEvents(self$$1);
       
  2117       if (settings.style) {
       
  2118         elm = self$$1.getEl();
       
  2119         if (elm) {
       
  2120           elm.setAttribute('style', settings.style);
       
  2121           elm.style.cssText = settings.style;
       
  2122         }
       
  2123       }
       
  2124       if (self$$1.settings.border) {
       
  2125         box = self$$1.borderBox;
       
  2126         self$$1.$el.css({
       
  2127           'border-top-width': box.top,
       
  2128           'border-right-width': box.right,
       
  2129           'border-bottom-width': box.bottom,
       
  2130           'border-left-width': box.left
       
  2131         });
       
  2132       }
       
  2133       var root = self$$1.getRoot();
       
  2134       if (!root.controlIdLookup) {
       
  2135         root.controlIdLookup = {};
       
  2136       }
       
  2137       root.controlIdLookup[self$$1._id] = self$$1;
       
  2138       for (var key in self$$1._aria) {
       
  2139         self$$1.aria(key, self$$1._aria[key]);
       
  2140       }
       
  2141       if (self$$1.state.get('visible') === false) {
       
  2142         self$$1.getEl().style.display = 'none';
       
  2143       }
       
  2144       self$$1.bindStates();
       
  2145       self$$1.state.on('change:visible', function (e) {
       
  2146         var state = e.value;
       
  2147         var parentCtrl;
       
  2148         if (self$$1.state.get('rendered')) {
       
  2149           self$$1.getEl().style.display = state === false ? 'none' : '';
       
  2150           self$$1.getEl().getBoundingClientRect();
       
  2151         }
       
  2152         parentCtrl = self$$1.parent();
       
  2153         if (parentCtrl) {
       
  2154           parentCtrl._lastRect = null;
       
  2155         }
       
  2156         self$$1.fire(state ? 'show' : 'hide');
       
  2157         $_cqjgb518wjjgwek2f.add(self$$1);
       
  2158       });
       
  2159       self$$1.fire('postrender', {}, false);
       
  2160     },
       
  2161     bindStates: function () {
       
  2162     },
       
  2163     scrollIntoView: function (align) {
       
  2164       function getOffset(elm, rootElm) {
       
  2165         var x, y, parent$$1 = elm;
       
  2166         x = y = 0;
       
  2167         while (parent$$1 && parent$$1 !== rootElm && parent$$1.nodeType) {
       
  2168           x += parent$$1.offsetLeft || 0;
       
  2169           y += parent$$1.offsetTop || 0;
       
  2170           parent$$1 = parent$$1.offsetParent;
       
  2171         }
       
  2172         return {
       
  2173           x: x,
       
  2174           y: y
       
  2175         };
       
  2176       }
       
  2177       var elm = this.getEl(), parentElm = elm.parentNode;
       
  2178       var x, y, width, height, parentWidth, parentHeight;
       
  2179       var pos = getOffset(elm, parentElm);
       
  2180       x = pos.x;
       
  2181       y = pos.y;
       
  2182       width = elm.offsetWidth;
       
  2183       height = elm.offsetHeight;
       
  2184       parentWidth = parentElm.clientWidth;
       
  2185       parentHeight = parentElm.clientHeight;
       
  2186       if (align === 'end') {
       
  2187         x -= parentWidth - width;
       
  2188         y -= parentHeight - height;
       
  2189       } else if (align === 'center') {
       
  2190         x -= parentWidth / 2 - width / 2;
       
  2191         y -= parentHeight / 2 - height / 2;
       
  2192       }
       
  2193       parentElm.scrollLeft = x;
       
  2194       parentElm.scrollTop = y;
       
  2195       return this;
       
  2196     },
       
  2197     getRoot: function () {
       
  2198       var ctrl = this, rootControl;
       
  2199       var parents = [];
       
  2200       while (ctrl) {
       
  2201         if (ctrl.rootControl) {
       
  2202           rootControl = ctrl.rootControl;
       
  2203           break;
       
  2204         }
       
  2205         parents.push(ctrl);
       
  2206         rootControl = ctrl;
       
  2207         ctrl = ctrl.parent();
       
  2208       }
       
  2209       if (!rootControl) {
       
  2210         rootControl = this;
       
  2211       }
       
  2212       var i = parents.length;
       
  2213       while (i--) {
       
  2214         parents[i].rootControl = rootControl;
       
  2215       }
       
  2216       return rootControl;
       
  2217     },
       
  2218     reflow: function () {
       
  2219       $_cqjgb518wjjgwek2f.remove(this);
       
  2220       var parent$$1 = this.parent();
       
  2221       if (parent$$1 && parent$$1._layout && !parent$$1._layout.isNative()) {
       
  2222         parent$$1.reflow();
       
  2223       }
       
  2224       return this;
       
  2225     }
       
  2226   };
       
  2227   global$4.each('text title visible disabled active value'.split(' '), function (name$$1) {
       
  2228     proto$1[name$$1] = function (value) {
       
  2229       if (arguments.length === 0) {
       
  2230         return this.state.get(name$$1);
       
  2231       }
       
  2232       if (typeof value !== 'undefined') {
       
  2233         this.state.set(name$$1, value);
       
  2234       }
       
  2235       return this;
       
  2236     };
       
  2237   });
       
  2238   Control = global$8.extend(proto$1);
       
  2239   function getEventDispatcher(obj) {
       
  2240     if (!obj._eventDispatcher) {
       
  2241       obj._eventDispatcher = new global$9({
       
  2242         scope: obj,
       
  2243         toggleEvent: function (name$$1, state) {
       
  2244           if (state && global$9.isNative(name$$1)) {
       
  2245             if (!obj._nativeEvents) {
       
  2246               obj._nativeEvents = {};
       
  2247             }
       
  2248             obj._nativeEvents[name$$1] = true;
       
  2249             if (obj.state.get('rendered')) {
       
  2250               bindPendingEvents(obj);
       
  2251             }
       
  2252           }
       
  2253         }
       
  2254       });
       
  2255     }
       
  2256     return obj._eventDispatcher;
       
  2257   }
       
  2258   function bindPendingEvents(eventCtrl) {
       
  2259     var i, l, parents, eventRootCtrl, nativeEvents, name$$1;
       
  2260     function delegate(e) {
       
  2261       var control = eventCtrl.getParentCtrl(e.target);
       
  2262       if (control) {
       
  2263         control.fire(e.type, e);
       
  2264       }
       
  2265     }
       
  2266     function mouseLeaveHandler() {
       
  2267       var ctrl = eventRootCtrl._lastHoverCtrl;
       
  2268       if (ctrl) {
       
  2269         ctrl.fire('mouseleave', { target: ctrl.getEl() });
       
  2270         ctrl.parents().each(function (ctrl) {
       
  2271           ctrl.fire('mouseleave', { target: ctrl.getEl() });
       
  2272         });
       
  2273         eventRootCtrl._lastHoverCtrl = null;
       
  2274       }
       
  2275     }
       
  2276     function mouseEnterHandler(e) {
       
  2277       var ctrl = eventCtrl.getParentCtrl(e.target), lastCtrl = eventRootCtrl._lastHoverCtrl, idx = 0, i, parents, lastParents;
       
  2278       if (ctrl !== lastCtrl) {
       
  2279         eventRootCtrl._lastHoverCtrl = ctrl;
       
  2280         parents = ctrl.parents().toArray().reverse();
       
  2281         parents.push(ctrl);
       
  2282         if (lastCtrl) {
       
  2283           lastParents = lastCtrl.parents().toArray().reverse();
       
  2284           lastParents.push(lastCtrl);
       
  2285           for (idx = 0; idx < lastParents.length; idx++) {
       
  2286             if (parents[idx] !== lastParents[idx]) {
       
  2287               break;
       
  2288             }
       
  2289           }
       
  2290           for (i = lastParents.length - 1; i >= idx; i--) {
       
  2291             lastCtrl = lastParents[i];
       
  2292             lastCtrl.fire('mouseleave', { target: lastCtrl.getEl() });
       
  2293           }
       
  2294         }
       
  2295         for (i = idx; i < parents.length; i++) {
       
  2296           ctrl = parents[i];
       
  2297           ctrl.fire('mouseenter', { target: ctrl.getEl() });
       
  2298         }
       
  2299       }
       
  2300     }
       
  2301     function fixWheelEvent(e) {
       
  2302       e.preventDefault();
       
  2303       if (e.type === 'mousewheel') {
       
  2304         e.deltaY = -1 / 40 * e.wheelDelta;
       
  2305         if (e.wheelDeltaX) {
       
  2306           e.deltaX = -1 / 40 * e.wheelDeltaX;
       
  2307         }
       
  2308       } else {
       
  2309         e.deltaX = 0;
       
  2310         e.deltaY = e.detail;
       
  2311       }
       
  2312       e = eventCtrl.fire('wheel', e);
       
  2313     }
       
  2314     nativeEvents = eventCtrl._nativeEvents;
       
  2315     if (nativeEvents) {
       
  2316       parents = eventCtrl.parents().toArray();
       
  2317       parents.unshift(eventCtrl);
       
  2318       for (i = 0, l = parents.length; !eventRootCtrl && i < l; i++) {
       
  2319         eventRootCtrl = parents[i]._eventsRoot;
       
  2320       }
       
  2321       if (!eventRootCtrl) {
       
  2322         eventRootCtrl = parents[parents.length - 1] || eventCtrl;
       
  2323       }
       
  2324       eventCtrl._eventsRoot = eventRootCtrl;
       
  2325       for (l = i, i = 0; i < l; i++) {
       
  2326         parents[i]._eventsRoot = eventRootCtrl;
       
  2327       }
       
  2328       var eventRootDelegates = eventRootCtrl._delegates;
       
  2329       if (!eventRootDelegates) {
       
  2330         eventRootDelegates = eventRootCtrl._delegates = {};
       
  2331       }
       
  2332       for (name$$1 in nativeEvents) {
       
  2333         if (!nativeEvents) {
       
  2334           return false;
       
  2335         }
       
  2336         if (name$$1 === 'wheel' && !hasWheelEventSupport) {
       
  2337           if (hasMouseWheelEventSupport) {
       
  2338             global$7(eventCtrl.getEl()).on('mousewheel', fixWheelEvent);
       
  2339           } else {
       
  2340             global$7(eventCtrl.getEl()).on('DOMMouseScroll', fixWheelEvent);
       
  2341           }
       
  2342           continue;
       
  2343         }
       
  2344         if (name$$1 === 'mouseenter' || name$$1 === 'mouseleave') {
       
  2345           if (!eventRootCtrl._hasMouseEnter) {
       
  2346             global$7(eventRootCtrl.getEl()).on('mouseleave', mouseLeaveHandler).on('mouseover', mouseEnterHandler);
       
  2347             eventRootCtrl._hasMouseEnter = 1;
       
  2348           }
       
  2349         } else if (!eventRootDelegates[name$$1]) {
       
  2350           global$7(eventRootCtrl.getEl()).on(name$$1, delegate);
       
  2351           eventRootDelegates[name$$1] = true;
       
  2352         }
       
  2353         nativeEvents[name$$1] = false;
       
  2354       }
       
  2355     }
       
  2356   }
       
  2357   var Control$1 = Control;
       
  2358 
       
  2359   var isStatic = function (elm) {
       
  2360     return funcs.getRuntimeStyle(elm, 'position') === 'static';
       
  2361   };
       
  2362   var isFixed = function (ctrl) {
       
  2363     return ctrl.state.get('fixed');
       
  2364   };
       
  2365   function calculateRelativePosition(ctrl, targetElm, rel) {
       
  2366     var ctrlElm, pos, x, y, selfW, selfH, targetW, targetH, viewport, size;
       
  2367     viewport = getWindowViewPort();
       
  2368     pos = funcs.getPos(targetElm, $_egt6ye18xjjgwek2h.getUiContainer(ctrl));
       
  2369     x = pos.x;
       
  2370     y = pos.y;
       
  2371     if (isFixed(ctrl) && isStatic(document.body)) {
       
  2372       x -= viewport.x;
       
  2373       y -= viewport.y;
       
  2374     }
       
  2375     ctrlElm = ctrl.getEl();
       
  2376     size = funcs.getSize(ctrlElm);
       
  2377     selfW = size.width;
       
  2378     selfH = size.height;
       
  2379     size = funcs.getSize(targetElm);
       
  2380     targetW = size.width;
       
  2381     targetH = size.height;
       
  2382     rel = (rel || '').split('');
       
  2383     if (rel[0] === 'b') {
       
  2384       y += targetH;
       
  2385     }
       
  2386     if (rel[1] === 'r') {
       
  2387       x += targetW;
       
  2388     }
       
  2389     if (rel[0] === 'c') {
       
  2390       y += Math.round(targetH / 2);
       
  2391     }
       
  2392     if (rel[1] === 'c') {
       
  2393       x += Math.round(targetW / 2);
       
  2394     }
       
  2395     if (rel[3] === 'b') {
       
  2396       y -= selfH;
       
  2397     }
       
  2398     if (rel[4] === 'r') {
       
  2399       x -= selfW;
       
  2400     }
       
  2401     if (rel[3] === 'c') {
       
  2402       y -= Math.round(selfH / 2);
       
  2403     }
       
  2404     if (rel[4] === 'c') {
       
  2405       x -= Math.round(selfW / 2);
       
  2406     }
       
  2407     return {
       
  2408       x: x,
       
  2409       y: y,
       
  2410       w: selfW,
       
  2411       h: selfH
       
  2412     };
       
  2413   }
       
  2414   var getUiContainerViewPort = function (customUiContainer) {
       
  2415     return {
       
  2416       x: 0,
       
  2417       y: 0,
       
  2418       w: customUiContainer.scrollWidth - 1,
       
  2419       h: customUiContainer.scrollHeight - 1
       
  2420     };
       
  2421   };
       
  2422   var getWindowViewPort = function () {
       
  2423     var win = window;
       
  2424     var x = Math.max(win.pageXOffset, document.body.scrollLeft, document.documentElement.scrollLeft);
       
  2425     var y = Math.max(win.pageYOffset, document.body.scrollTop, document.documentElement.scrollTop);
       
  2426     var w = win.innerWidth || document.documentElement.clientWidth;
       
  2427     var h = win.innerHeight || document.documentElement.clientHeight;
       
  2428     return {
       
  2429       x: x,
       
  2430       y: y,
       
  2431       w: x + w,
       
  2432       h: y + h
       
  2433     };
       
  2434   };
       
  2435   var getViewPortRect = function (ctrl) {
       
  2436     var customUiContainer = $_egt6ye18xjjgwek2h.getUiContainer(ctrl);
       
  2437     return customUiContainer && !isFixed(ctrl) ? getUiContainerViewPort(customUiContainer) : getWindowViewPort();
       
  2438   };
       
  2439   var $_8zu82i18yjjgwek2l = {
       
  2440     testMoveRel: function (elm, rels) {
       
  2441       var viewPortRect = getViewPortRect(this);
       
  2442       for (var i = 0; i < rels.length; i++) {
       
  2443         var pos = calculateRelativePosition(this, elm, rels[i]);
       
  2444         if (isFixed(this)) {
       
  2445           if (pos.x > 0 && pos.x + pos.w < viewPortRect.w && pos.y > 0 && pos.y + pos.h < viewPortRect.h) {
       
  2446             return rels[i];
       
  2447           }
       
  2448         } else {
       
  2449           if (pos.x > viewPortRect.x && pos.x + pos.w < viewPortRect.w && pos.y > viewPortRect.y && pos.y + pos.h < viewPortRect.h) {
       
  2450             return rels[i];
       
  2451           }
       
  2452         }
       
  2453       }
       
  2454       return rels[0];
       
  2455     },
       
  2456     moveRel: function (elm, rel) {
       
  2457       if (typeof rel !== 'string') {
       
  2458         rel = this.testMoveRel(elm, rel);
       
  2459       }
       
  2460       var pos = calculateRelativePosition(this, elm, rel);
       
  2461       return this.moveTo(pos.x, pos.y);
       
  2462     },
       
  2463     moveBy: function (dx, dy) {
       
  2464       var self$$1 = this, rect = self$$1.layoutRect();
       
  2465       self$$1.moveTo(rect.x + dx, rect.y + dy);
       
  2466       return self$$1;
       
  2467     },
       
  2468     moveTo: function (x, y) {
       
  2469       var self$$1 = this;
       
  2470       function constrain(value, max, size) {
       
  2471         if (value < 0) {
       
  2472           return 0;
       
  2473         }
       
  2474         if (value + size > max) {
       
  2475           value = max - size;
       
  2476           return value < 0 ? 0 : value;
       
  2477         }
       
  2478         return value;
       
  2479       }
       
  2480       if (self$$1.settings.constrainToViewport) {
       
  2481         var viewPortRect = getViewPortRect(this);
       
  2482         var layoutRect = self$$1.layoutRect();
       
  2483         x = constrain(x, viewPortRect.w, layoutRect.w);
       
  2484         y = constrain(y, viewPortRect.h, layoutRect.h);
       
  2485       }
       
  2486       var uiContainer = $_egt6ye18xjjgwek2h.getUiContainer(self$$1);
       
  2487       if (uiContainer && isStatic(uiContainer) && !isFixed(self$$1)) {
       
  2488         x -= uiContainer.scrollLeft;
       
  2489         y -= uiContainer.scrollTop;
       
  2490       }
       
  2491       if (uiContainer) {
       
  2492         x += 1;
       
  2493         y += 1;
       
  2494       }
       
  2495       if (self$$1.state.get('rendered')) {
       
  2496         self$$1.layoutRect({
       
  2497           x: x,
       
  2498           y: y
       
  2499         }).repaint();
       
  2500       } else {
       
  2501         self$$1.settings.x = x;
       
  2502         self$$1.settings.y = y;
       
  2503       }
       
  2504       self$$1.fire('move', {
       
  2505         x: x,
       
  2506         y: y
       
  2507       });
       
  2508       return self$$1;
       
  2509     }
       
  2510   };
       
  2511 
       
  2512   var Tooltip = Control$1.extend({
       
  2513     Mixins: [$_8zu82i18yjjgwek2l],
       
  2514     Defaults: { classes: 'widget tooltip tooltip-n' },
       
  2515     renderHtml: function () {
       
  2516       var self = this, prefix = self.classPrefix;
       
  2517       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>';
       
  2518     },
       
  2519     bindStates: function () {
       
  2520       var self = this;
       
  2521       self.state.on('change:text', function (e) {
       
  2522         self.getEl().lastChild.innerHTML = self.encode(e.value);
       
  2523       });
       
  2524       return self._super();
       
  2525     },
       
  2526     repaint: function () {
       
  2527       var self = this;
       
  2528       var style, rect;
       
  2529       style = self.getEl().style;
       
  2530       rect = self._layoutRect;
       
  2531       style.left = rect.x + 'px';
       
  2532       style.top = rect.y + 'px';
       
  2533       style.zIndex = 65535 + 65535;
       
  2534     }
       
  2535   });
       
  2536 
       
  2537   var Widget = Control$1.extend({
       
  2538     init: function (settings) {
       
  2539       var self = this;
       
  2540       self._super(settings);
       
  2541       settings = self.settings;
       
  2542       self.canFocus = true;
       
  2543       if (settings.tooltip && Widget.tooltips !== false) {
       
  2544         self.on('mouseenter', function (e) {
       
  2545           var tooltip = self.tooltip().moveTo(-65535);
       
  2546           if (e.control === self) {
       
  2547             var rel = tooltip.text(settings.tooltip).show().testMoveRel(self.getEl(), [
       
  2548               'bc-tc',
       
  2549               'bc-tl',
       
  2550               'bc-tr'
       
  2551             ]);
       
  2552             tooltip.classes.toggle('tooltip-n', rel === 'bc-tc');
       
  2553             tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl');
       
  2554             tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr');
       
  2555             tooltip.moveRel(self.getEl(), rel);
       
  2556           } else {
       
  2557             tooltip.hide();
       
  2558           }
       
  2559         });
       
  2560         self.on('mouseleave mousedown click', function () {
       
  2561           self.tooltip().remove();
       
  2562           self._tooltip = null;
       
  2563         });
       
  2564       }
       
  2565       self.aria('label', settings.ariaLabel || settings.tooltip);
       
  2566     },
       
  2567     tooltip: function () {
       
  2568       if (!this._tooltip) {
       
  2569         this._tooltip = new Tooltip({ type: 'tooltip' });
       
  2570         $_egt6ye18xjjgwek2h.inheritUiContainer(this, this._tooltip);
       
  2571         this._tooltip.renderTo();
       
  2572       }
       
  2573       return this._tooltip;
       
  2574     },
       
  2575     postRender: function () {
       
  2576       var self = this, settings = self.settings;
       
  2577       self._super();
       
  2578       if (!self.parent() && (settings.width || settings.height)) {
       
  2579         self.initLayoutRect();
       
  2580         self.repaint();
       
  2581       }
       
  2582       if (settings.autofocus) {
       
  2583         self.focus();
       
  2584       }
       
  2585     },
       
  2586     bindStates: function () {
       
  2587       var self = this;
       
  2588       function disable(state) {
       
  2589         self.aria('disabled', state);
       
  2590         self.classes.toggle('disabled', state);
       
  2591       }
       
  2592       function active(state) {
       
  2593         self.aria('pressed', state);
       
  2594         self.classes.toggle('active', state);
       
  2595       }
       
  2596       self.state.on('change:disabled', function (e) {
       
  2597         disable(e.value);
       
  2598       });
       
  2599       self.state.on('change:active', function (e) {
       
  2600         active(e.value);
       
  2601       });
       
  2602       if (self.state.get('disabled')) {
       
  2603         disable(true);
       
  2604       }
       
  2605       if (self.state.get('active')) {
       
  2606         active(true);
       
  2607       }
       
  2608       return self._super();
       
  2609     },
       
  2610     remove: function () {
       
  2611       this._super();
       
  2612       if (this._tooltip) {
       
  2613         this._tooltip.remove();
       
  2614         this._tooltip = null;
       
  2615       }
       
  2616     }
       
  2617   });
       
  2618 
       
  2619   var Progress = Widget.extend({
       
  2620     Defaults: { value: 0 },
       
  2621     init: function (settings) {
       
  2622       var self = this;
       
  2623       self._super(settings);
       
  2624       self.classes.add('progress');
       
  2625       if (!self.settings.filter) {
       
  2626         self.settings.filter = function (value) {
       
  2627           return Math.round(value);
       
  2628         };
       
  2629       }
       
  2630     },
       
  2631     renderHtml: function () {
       
  2632       var self = this, id = self._id, prefix = this.classPrefix;
       
  2633       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>';
       
  2634     },
       
  2635     postRender: function () {
       
  2636       var self = this;
       
  2637       self._super();
       
  2638       self.value(self.settings.value);
       
  2639       return self;
       
  2640     },
       
  2641     bindStates: function () {
       
  2642       var self = this;
       
  2643       function setValue(value) {
       
  2644         value = self.settings.filter(value);
       
  2645         self.getEl().lastChild.innerHTML = value + '%';
       
  2646         self.getEl().firstChild.firstChild.style.width = value + '%';
       
  2647       }
       
  2648       self.state.on('change:value', function (e) {
       
  2649         setValue(e.value);
       
  2650       });
       
  2651       setValue(self.state.get('value'));
       
  2652       return self._super();
       
  2653     }
       
  2654   });
       
  2655 
       
  2656   var updateLiveRegion = function (ctx, text) {
       
  2657     ctx.getEl().lastChild.textContent = text + (ctx.progressBar ? ' ' + ctx.progressBar.value() + '%' : '');
       
  2658   };
       
  2659   var Notification = Control$1.extend({
       
  2660     Mixins: [$_8zu82i18yjjgwek2l],
       
  2661     Defaults: { classes: 'widget notification' },
       
  2662     init: function (settings) {
       
  2663       var self = this;
       
  2664       self._super(settings);
       
  2665       self.maxWidth = settings.maxWidth;
       
  2666       if (settings.text) {
       
  2667         self.text(settings.text);
       
  2668       }
       
  2669       if (settings.icon) {
       
  2670         self.icon = settings.icon;
       
  2671       }
       
  2672       if (settings.color) {
       
  2673         self.color = settings.color;
       
  2674       }
       
  2675       if (settings.type) {
       
  2676         self.classes.add('notification-' + settings.type);
       
  2677       }
       
  2678       if (settings.timeout && (settings.timeout < 0 || settings.timeout > 0) && !settings.closeButton) {
       
  2679         self.closeButton = false;
       
  2680       } else {
       
  2681         self.classes.add('has-close');
       
  2682         self.closeButton = true;
       
  2683       }
       
  2684       if (settings.progressBar) {
       
  2685         self.progressBar = new Progress();
       
  2686       }
       
  2687       self.on('click', function (e) {
       
  2688         if (e.target.className.indexOf(self.classPrefix + 'close') !== -1) {
       
  2689           self.close();
       
  2690         }
       
  2691       });
       
  2692     },
       
  2693     renderHtml: function () {
       
  2694       var self = this;
       
  2695       var prefix = self.classPrefix;
       
  2696       var icon = '', closeButton = '', progressBar = '', notificationStyle = '';
       
  2697       if (self.icon) {
       
  2698         icon = '<i class="' + prefix + 'ico' + ' ' + prefix + 'i-' + self.icon + '"></i>';
       
  2699       }
       
  2700       notificationStyle = ' style="max-width: ' + self.maxWidth + 'px;' + (self.color ? 'background-color: ' + self.color + ';"' : '"');
       
  2701       if (self.closeButton) {
       
  2702         closeButton = '<button type="button" class="' + prefix + 'close" aria-hidden="true">\xD7</button>';
       
  2703       }
       
  2704       if (self.progressBar) {
       
  2705         progressBar = self.progressBar.renderHtml();
       
  2706       }
       
  2707       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>';
       
  2708     },
       
  2709     postRender: function () {
       
  2710       var self = this;
       
  2711       global$3.setTimeout(function () {
       
  2712         self.$el.addClass(self.classPrefix + 'in');
       
  2713         updateLiveRegion(self, self.state.get('text'));
       
  2714       }, 100);
       
  2715       return self._super();
       
  2716     },
       
  2717     bindStates: function () {
       
  2718       var self = this;
       
  2719       self.state.on('change:text', function (e) {
       
  2720         self.getEl().firstChild.innerHTML = e.value;
       
  2721         updateLiveRegion(self, e.value);
       
  2722       });
       
  2723       if (self.progressBar) {
       
  2724         self.progressBar.bindStates();
       
  2725         self.progressBar.state.on('change:value', function (e) {
       
  2726           updateLiveRegion(self, self.state.get('text'));
       
  2727         });
       
  2728       }
       
  2729       return self._super();
       
  2730     },
       
  2731     close: function () {
       
  2732       var self = this;
       
  2733       if (!self.fire('close').isDefaultPrevented()) {
       
  2734         self.remove();
       
  2735       }
       
  2736       return self;
       
  2737     },
       
  2738     repaint: function () {
       
  2739       var self = this;
       
  2740       var style, rect;
       
  2741       style = self.getEl().style;
       
  2742       rect = self._layoutRect;
       
  2743       style.left = rect.x + 'px';
       
  2744       style.top = rect.y + 'px';
       
  2745       style.zIndex = 65535 - 1;
       
  2746     }
       
  2747   });
       
  2748 
       
  2749   function NotificationManagerImpl (editor) {
       
  2750     var getEditorContainer = function (editor) {
       
  2751       return editor.inline ? editor.getElement() : editor.getContentAreaContainer();
       
  2752     };
       
  2753     var getContainerWidth = function () {
       
  2754       var container = getEditorContainer(editor);
       
  2755       return funcs.getSize(container).width;
       
  2756     };
       
  2757     var prePositionNotifications = function (notifications) {
       
  2758       each(notifications, function (notification) {
       
  2759         notification.moveTo(0, 0);
       
  2760       });
       
  2761     };
       
  2762     var positionNotifications = function (notifications) {
       
  2763       if (notifications.length > 0) {
       
  2764         var firstItem = notifications.slice(0, 1)[0];
       
  2765         var container = getEditorContainer(editor);
       
  2766         firstItem.moveRel(container, 'tc-tc');
       
  2767         each(notifications, function (notification, index) {
       
  2768           if (index > 0) {
       
  2769             notification.moveRel(notifications[index - 1].getEl(), 'bc-tc');
       
  2770           }
       
  2771         });
       
  2772       }
       
  2773     };
       
  2774     var reposition = function (notifications) {
       
  2775       prePositionNotifications(notifications);
       
  2776       positionNotifications(notifications);
       
  2777     };
       
  2778     var open = function (args, closeCallback) {
       
  2779       var extendedArgs = global$4.extend(args, { maxWidth: getContainerWidth() });
       
  2780       var notif = new Notification(extendedArgs);
       
  2781       notif.args = extendedArgs;
       
  2782       if (extendedArgs.timeout > 0) {
       
  2783         notif.timer = setTimeout(function () {
       
  2784           notif.close();
       
  2785           closeCallback();
       
  2786         }, extendedArgs.timeout);
       
  2787       }
       
  2788       notif.on('close', function () {
       
  2789         closeCallback();
       
  2790       });
       
  2791       notif.renderTo();
       
  2792       return notif;
       
  2793     };
       
  2794     var close = function (notification) {
       
  2795       notification.close();
       
  2796     };
       
  2797     var getArgs = function (notification) {
       
  2798       return notification.args;
       
  2799     };
       
  2800     return {
       
  2801       open: open,
       
  2802       close: close,
       
  2803       reposition: reposition,
       
  2804       getArgs: getArgs
       
  2805     };
       
  2806   }
       
  2807 
       
  2808   function getDocumentSize(doc) {
       
  2809     var documentElement, body, scrollWidth, clientWidth;
       
  2810     var offsetWidth, scrollHeight, clientHeight, offsetHeight;
       
  2811     var max = Math.max;
       
  2812     documentElement = doc.documentElement;
       
  2813     body = doc.body;
       
  2814     scrollWidth = max(documentElement.scrollWidth, body.scrollWidth);
       
  2815     clientWidth = max(documentElement.clientWidth, body.clientWidth);
       
  2816     offsetWidth = max(documentElement.offsetWidth, body.offsetWidth);
       
  2817     scrollHeight = max(documentElement.scrollHeight, body.scrollHeight);
       
  2818     clientHeight = max(documentElement.clientHeight, body.clientHeight);
       
  2819     offsetHeight = max(documentElement.offsetHeight, body.offsetHeight);
       
  2820     return {
       
  2821       width: scrollWidth < offsetWidth ? clientWidth : scrollWidth,
       
  2822       height: scrollHeight < offsetHeight ? clientHeight : scrollHeight
       
  2823     };
       
  2824   }
       
  2825   function updateWithTouchData(e) {
       
  2826     var keys, i;
       
  2827     if (e.changedTouches) {
       
  2828       keys = 'screenX screenY pageX pageY clientX clientY'.split(' ');
       
  2829       for (i = 0; i < keys.length; i++) {
       
  2830         e[keys[i]] = e.changedTouches[0][keys[i]];
       
  2831       }
       
  2832     }
       
  2833   }
       
  2834   function DragHelper (id, settings) {
       
  2835     var $eventOverlay;
       
  2836     var doc = settings.document || document;
       
  2837     var downButton;
       
  2838     var start, stop$$1, drag, startX, startY;
       
  2839     settings = settings || {};
       
  2840     var handleElement = doc.getElementById(settings.handle || id);
       
  2841     start = function (e) {
       
  2842       var docSize = getDocumentSize(doc);
       
  2843       var handleElm, cursor;
       
  2844       updateWithTouchData(e);
       
  2845       e.preventDefault();
       
  2846       downButton = e.button;
       
  2847       handleElm = handleElement;
       
  2848       startX = e.screenX;
       
  2849       startY = e.screenY;
       
  2850       if (window.getComputedStyle) {
       
  2851         cursor = window.getComputedStyle(handleElm, null).getPropertyValue('cursor');
       
  2852       } else {
       
  2853         cursor = handleElm.runtimeStyle.cursor;
       
  2854       }
       
  2855       $eventOverlay = global$7('<div></div>').css({
       
  2856         position: 'absolute',
       
  2857         top: 0,
       
  2858         left: 0,
       
  2859         width: docSize.width,
       
  2860         height: docSize.height,
       
  2861         zIndex: 2147483647,
       
  2862         opacity: 0.0001,
       
  2863         cursor: cursor
       
  2864       }).appendTo(doc.body);
       
  2865       global$7(doc).on('mousemove touchmove', drag).on('mouseup touchend', stop$$1);
       
  2866       settings.start(e);
       
  2867     };
       
  2868     drag = function (e) {
       
  2869       updateWithTouchData(e);
       
  2870       if (e.button !== downButton) {
       
  2871         return stop$$1(e);
       
  2872       }
       
  2873       e.deltaX = e.screenX - startX;
       
  2874       e.deltaY = e.screenY - startY;
       
  2875       e.preventDefault();
       
  2876       settings.drag(e);
       
  2877     };
       
  2878     stop$$1 = function (e) {
       
  2879       updateWithTouchData(e);
       
  2880       global$7(doc).off('mousemove touchmove', drag).off('mouseup touchend', stop$$1);
       
  2881       $eventOverlay.remove();
       
  2882       if (settings.stop) {
       
  2883         settings.stop(e);
       
  2884       }
       
  2885     };
       
  2886     this.destroy = function () {
       
  2887       global$7(handleElement).off();
       
  2888     };
       
  2889     global$7(handleElement).on('mousedown touchstart', start);
       
  2890   }
       
  2891 
       
  2892   var global$11 = tinymce.util.Tools.resolve('tinymce.ui.Factory');
       
  2893 
       
  2894   var hasTabstopData = function (elm) {
       
  2895     return elm.getAttribute('data-mce-tabstop') ? true : false;
       
  2896   };
       
  2897   function KeyboardNavigation (settings) {
       
  2898     var root = settings.root;
       
  2899     var focusedElement, focusedControl;
       
  2900     function isElement(node) {
       
  2901       return node && node.nodeType === 1;
       
  2902     }
       
  2903     try {
       
  2904       focusedElement = document.activeElement;
       
  2905     } catch (ex) {
       
  2906       focusedElement = document.body;
       
  2907     }
       
  2908     focusedControl = root.getParentCtrl(focusedElement);
       
  2909     function getRole(elm) {
       
  2910       elm = elm || focusedElement;
       
  2911       if (isElement(elm)) {
       
  2912         return elm.getAttribute('role');
       
  2913       }
       
  2914       return null;
       
  2915     }
       
  2916     function getParentRole(elm) {
       
  2917       var role, parent$$1 = elm || focusedElement;
       
  2918       while (parent$$1 = parent$$1.parentNode) {
       
  2919         if (role = getRole(parent$$1)) {
       
  2920           return role;
       
  2921         }
       
  2922       }
       
  2923     }
       
  2924     function getAriaProp(name$$1) {
       
  2925       var elm = focusedElement;
       
  2926       if (isElement(elm)) {
       
  2927         return elm.getAttribute('aria-' + name$$1);
       
  2928       }
       
  2929     }
       
  2930     function isTextInputElement(elm) {
       
  2931       var tagName = elm.tagName.toUpperCase();
       
  2932       return tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT';
       
  2933     }
       
  2934     function canFocus(elm) {
       
  2935       if (isTextInputElement(elm) && !elm.hidden) {
       
  2936         return true;
       
  2937       }
       
  2938       if (hasTabstopData(elm)) {
       
  2939         return true;
       
  2940       }
       
  2941       if (/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell|slider)$/.test(getRole(elm))) {
       
  2942         return true;
       
  2943       }
       
  2944       return false;
       
  2945     }
       
  2946     function getFocusElements(elm) {
       
  2947       var elements = [];
       
  2948       function collect(elm) {
       
  2949         if (elm.nodeType !== 1 || elm.style.display === 'none' || elm.disabled) {
       
  2950           return;
       
  2951         }
       
  2952         if (canFocus(elm)) {
       
  2953           elements.push(elm);
       
  2954         }
       
  2955         for (var i = 0; i < elm.childNodes.length; i++) {
       
  2956           collect(elm.childNodes[i]);
       
  2957         }
       
  2958       }
       
  2959       collect(elm || root.getEl());
       
  2960       return elements;
       
  2961     }
       
  2962     function getNavigationRoot(targetControl) {
       
  2963       var navigationRoot, controls;
       
  2964       targetControl = targetControl || focusedControl;
       
  2965       controls = targetControl.parents().toArray();
       
  2966       controls.unshift(targetControl);
       
  2967       for (var i = 0; i < controls.length; i++) {
       
  2968         navigationRoot = controls[i];
       
  2969         if (navigationRoot.settings.ariaRoot) {
       
  2970           break;
       
  2971         }
       
  2972       }
       
  2973       return navigationRoot;
       
  2974     }
       
  2975     function focusFirst(targetControl) {
       
  2976       var navigationRoot = getNavigationRoot(targetControl);
       
  2977       var focusElements = getFocusElements(navigationRoot.getEl());
       
  2978       if (navigationRoot.settings.ariaRemember && 'lastAriaIndex' in navigationRoot) {
       
  2979         moveFocusToIndex(navigationRoot.lastAriaIndex, focusElements);
       
  2980       } else {
       
  2981         moveFocusToIndex(0, focusElements);
       
  2982       }
       
  2983     }
       
  2984     function moveFocusToIndex(idx, elements) {
       
  2985       if (idx < 0) {
       
  2986         idx = elements.length - 1;
       
  2987       } else if (idx >= elements.length) {
       
  2988         idx = 0;
       
  2989       }
       
  2990       if (elements[idx]) {
       
  2991         elements[idx].focus();
       
  2992       }
       
  2993       return idx;
       
  2994     }
       
  2995     function moveFocus(dir, elements) {
       
  2996       var idx = -1;
       
  2997       var navigationRoot = getNavigationRoot();
       
  2998       elements = elements || getFocusElements(navigationRoot.getEl());
       
  2999       for (var i = 0; i < elements.length; i++) {
       
  3000         if (elements[i] === focusedElement) {
       
  3001           idx = i;
       
  3002         }
       
  3003       }
       
  3004       idx += dir;
       
  3005       navigationRoot.lastAriaIndex = moveFocusToIndex(idx, elements);
       
  3006     }
       
  3007     function left() {
       
  3008       var parentRole = getParentRole();
       
  3009       if (parentRole === 'tablist') {
       
  3010         moveFocus(-1, getFocusElements(focusedElement.parentNode));
       
  3011       } else if (focusedControl.parent().submenu) {
       
  3012         cancel();
       
  3013       } else {
       
  3014         moveFocus(-1);
       
  3015       }
       
  3016     }
       
  3017     function right() {
       
  3018       var role = getRole(), parentRole = getParentRole();
       
  3019       if (parentRole === 'tablist') {
       
  3020         moveFocus(1, getFocusElements(focusedElement.parentNode));
       
  3021       } else if (role === 'menuitem' && parentRole === 'menu' && getAriaProp('haspopup')) {
       
  3022         enter();
       
  3023       } else {
       
  3024         moveFocus(1);
       
  3025       }
       
  3026     }
       
  3027     function up() {
       
  3028       moveFocus(-1);
       
  3029     }
       
  3030     function down() {
       
  3031       var role = getRole(), parentRole = getParentRole();
       
  3032       if (role === 'menuitem' && parentRole === 'menubar') {
       
  3033         enter();
       
  3034       } else if (role === 'button' && getAriaProp('haspopup')) {
       
  3035         enter({ key: 'down' });
       
  3036       } else {
       
  3037         moveFocus(1);
       
  3038       }
       
  3039     }
       
  3040     function tab(e) {
       
  3041       var parentRole = getParentRole();
       
  3042       if (parentRole === 'tablist') {
       
  3043         var elm = getFocusElements(focusedControl.getEl('body'))[0];
       
  3044         if (elm) {
       
  3045           elm.focus();
       
  3046         }
       
  3047       } else {
       
  3048         moveFocus(e.shiftKey ? -1 : 1);
       
  3049       }
       
  3050     }
       
  3051     function cancel() {
       
  3052       focusedControl.fire('cancel');
       
  3053     }
       
  3054     function enter(aria) {
       
  3055       aria = aria || {};
       
  3056       focusedControl.fire('click', {
       
  3057         target: focusedElement,
       
  3058         aria: aria
       
  3059       });
       
  3060     }
       
  3061     root.on('keydown', function (e) {
       
  3062       function handleNonTabOrEscEvent(e, handler) {
       
  3063         if (isTextInputElement(focusedElement) || hasTabstopData(focusedElement)) {
       
  3064           return;
       
  3065         }
       
  3066         if (getRole(focusedElement) === 'slider') {
       
  3067           return;
       
  3068         }
       
  3069         if (handler(e) !== false) {
       
  3070           e.preventDefault();
       
  3071         }
       
  3072       }
       
  3073       if (e.isDefaultPrevented()) {
       
  3074         return;
       
  3075       }
       
  3076       switch (e.keyCode) {
       
  3077       case 37:
       
  3078         handleNonTabOrEscEvent(e, left);
       
  3079         break;
       
  3080       case 39:
       
  3081         handleNonTabOrEscEvent(e, right);
       
  3082         break;
       
  3083       case 38:
       
  3084         handleNonTabOrEscEvent(e, up);
       
  3085         break;
       
  3086       case 40:
       
  3087         handleNonTabOrEscEvent(e, down);
       
  3088         break;
       
  3089       case 27:
       
  3090         cancel();
       
  3091         break;
       
  3092       case 14:
       
  3093       case 13:
       
  3094       case 32:
       
  3095         handleNonTabOrEscEvent(e, enter);
       
  3096         break;
       
  3097       case 9:
       
  3098         tab(e);
       
  3099         e.preventDefault();
       
  3100         break;
       
  3101       }
       
  3102     });
       
  3103     root.on('focusin', function (e) {
       
  3104       focusedElement = e.target;
       
  3105       focusedControl = e.control;
       
  3106     });
       
  3107     return { focusFirst: focusFirst };
       
  3108   }
       
  3109 
       
  3110   var selectorCache = {};
       
  3111   var Container = Control$1.extend({
       
  3112     init: function (settings) {
       
  3113       var self = this;
       
  3114       self._super(settings);
       
  3115       settings = self.settings;
       
  3116       if (settings.fixed) {
       
  3117         self.state.set('fixed', true);
       
  3118       }
       
  3119       self._items = new Collection$2();
       
  3120       if (self.isRtl()) {
       
  3121         self.classes.add('rtl');
       
  3122       }
       
  3123       self.bodyClasses = new ClassList(function () {
       
  3124         if (self.state.get('rendered')) {
       
  3125           self.getEl('body').className = this.toString();
       
  3126         }
       
  3127       });
       
  3128       self.bodyClasses.prefix = self.classPrefix;
       
  3129       self.classes.add('container');
       
  3130       self.bodyClasses.add('container-body');
       
  3131       if (settings.containerCls) {
       
  3132         self.classes.add(settings.containerCls);
       
  3133       }
       
  3134       self._layout = global$11.create((settings.layout || '') + 'layout');
       
  3135       if (self.settings.items) {
       
  3136         self.add(self.settings.items);
       
  3137       } else {
       
  3138         self.add(self.render());
       
  3139       }
       
  3140       self._hasBody = true;
       
  3141     },
       
  3142     items: function () {
       
  3143       return this._items;
       
  3144     },
       
  3145     find: function (selector) {
       
  3146       selector = selectorCache[selector] = selectorCache[selector] || new Selector(selector);
       
  3147       return selector.find(this);
       
  3148     },
       
  3149     add: function (items) {
       
  3150       var self = this;
       
  3151       self.items().add(self.create(items)).parent(self);
       
  3152       return self;
       
  3153     },
       
  3154     focus: function (keyboard) {
       
  3155       var self = this;
       
  3156       var focusCtrl, keyboardNav, items;
       
  3157       if (keyboard) {
       
  3158         keyboardNav = self.keyboardNav || self.parents().eq(-1)[0].keyboardNav;
       
  3159         if (keyboardNav) {
       
  3160           keyboardNav.focusFirst(self);
       
  3161           return;
       
  3162         }
       
  3163       }
       
  3164       items = self.find('*');
       
  3165       if (self.statusbar) {
       
  3166         items.add(self.statusbar.items());
       
  3167       }
       
  3168       items.each(function (ctrl) {
       
  3169         if (ctrl.settings.autofocus) {
       
  3170           focusCtrl = null;
       
  3171           return false;
       
  3172         }
       
  3173         if (ctrl.canFocus) {
       
  3174           focusCtrl = focusCtrl || ctrl;
       
  3175         }
       
  3176       });
       
  3177       if (focusCtrl) {
       
  3178         focusCtrl.focus();
       
  3179       }
       
  3180       return self;
       
  3181     },
       
  3182     replace: function (oldItem, newItem) {
       
  3183       var ctrlElm;
       
  3184       var items = this.items();
       
  3185       var i = items.length;
       
  3186       while (i--) {
       
  3187         if (items[i] === oldItem) {
       
  3188           items[i] = newItem;
       
  3189           break;
       
  3190         }
       
  3191       }
       
  3192       if (i >= 0) {
       
  3193         ctrlElm = newItem.getEl();
       
  3194         if (ctrlElm) {
       
  3195           ctrlElm.parentNode.removeChild(ctrlElm);
       
  3196         }
       
  3197         ctrlElm = oldItem.getEl();
       
  3198         if (ctrlElm) {
       
  3199           ctrlElm.parentNode.removeChild(ctrlElm);
       
  3200         }
       
  3201       }
       
  3202       newItem.parent(this);
       
  3203     },
       
  3204     create: function (items) {
       
  3205       var self = this;
       
  3206       var settings;
       
  3207       var ctrlItems = [];
       
  3208       if (!global$4.isArray(items)) {
       
  3209         items = [items];
       
  3210       }
       
  3211       global$4.each(items, function (item) {
       
  3212         if (item) {
       
  3213           if (!(item instanceof Control$1)) {
       
  3214             if (typeof item === 'string') {
       
  3215               item = { type: item };
       
  3216             }
       
  3217             settings = global$4.extend({}, self.settings.defaults, item);
       
  3218             item.type = settings.type = settings.type || item.type || self.settings.defaultType || (settings.defaults ? settings.defaults.type : null);
       
  3219             item = global$11.create(settings);
       
  3220           }
       
  3221           ctrlItems.push(item);
       
  3222         }
       
  3223       });
       
  3224       return ctrlItems;
       
  3225     },
       
  3226     renderNew: function () {
       
  3227       var self = this;
       
  3228       self.items().each(function (ctrl, index) {
       
  3229         var containerElm;
       
  3230         ctrl.parent(self);
       
  3231         if (!ctrl.state.get('rendered')) {
       
  3232           containerElm = self.getEl('body');
       
  3233           if (containerElm.hasChildNodes() && index <= containerElm.childNodes.length - 1) {
       
  3234             global$7(containerElm.childNodes[index]).before(ctrl.renderHtml());
       
  3235           } else {
       
  3236             global$7(containerElm).append(ctrl.renderHtml());
       
  3237           }
       
  3238           ctrl.postRender();
       
  3239           $_cqjgb518wjjgwek2f.add(ctrl);
       
  3240         }
       
  3241       });
       
  3242       self._layout.applyClasses(self.items().filter(':visible'));
       
  3243       self._lastRect = null;
       
  3244       return self;
       
  3245     },
       
  3246     append: function (items) {
       
  3247       return this.add(items).renderNew();
       
  3248     },
       
  3249     prepend: function (items) {
       
  3250       var self = this;
       
  3251       self.items().set(self.create(items).concat(self.items().toArray()));
       
  3252       return self.renderNew();
       
  3253     },
       
  3254     insert: function (items, index, before) {
       
  3255       var self = this;
       
  3256       var curItems, beforeItems, afterItems;
       
  3257       items = self.create(items);
       
  3258       curItems = self.items();
       
  3259       if (!before && index < curItems.length - 1) {
       
  3260         index += 1;
       
  3261       }
       
  3262       if (index >= 0 && index < curItems.length) {
       
  3263         beforeItems = curItems.slice(0, index).toArray();
       
  3264         afterItems = curItems.slice(index).toArray();
       
  3265         curItems.set(beforeItems.concat(items, afterItems));
       
  3266       }
       
  3267       return self.renderNew();
       
  3268     },
       
  3269     fromJSON: function (data) {
       
  3270       var self = this;
       
  3271       for (var name in data) {
       
  3272         self.find('#' + name).value(data[name]);
       
  3273       }
       
  3274       return self;
       
  3275     },
       
  3276     toJSON: function () {
       
  3277       var self = this, data = {};
       
  3278       self.find('*').each(function (ctrl) {
       
  3279         var name = ctrl.name(), value = ctrl.value();
       
  3280         if (name && typeof value !== 'undefined') {
       
  3281           data[name] = value;
       
  3282         }
       
  3283       });
       
  3284       return data;
       
  3285     },
       
  3286     renderHtml: function () {
       
  3287       var self = this, layout = self._layout, role = this.settings.role;
       
  3288       self.preRender();
       
  3289       layout.preRender(self);
       
  3290       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>';
       
  3291     },
       
  3292     postRender: function () {
       
  3293       var self = this;
       
  3294       var box;
       
  3295       self.items().exec('postRender');
       
  3296       self._super();
       
  3297       self._layout.postRender(self);
       
  3298       self.state.set('rendered', true);
       
  3299       if (self.settings.style) {
       
  3300         self.$el.css(self.settings.style);
       
  3301       }
       
  3302       if (self.settings.border) {
       
  3303         box = self.borderBox;
       
  3304         self.$el.css({
       
  3305           'border-top-width': box.top,
       
  3306           'border-right-width': box.right,
       
  3307           'border-bottom-width': box.bottom,
       
  3308           'border-left-width': box.left
       
  3309         });
       
  3310       }
       
  3311       if (!self.parent()) {
       
  3312         self.keyboardNav = KeyboardNavigation({ root: self });
       
  3313       }
       
  3314       return self;
       
  3315     },
       
  3316     initLayoutRect: function () {
       
  3317       var self = this, layoutRect = self._super();
       
  3318       self._layout.recalc(self);
       
  3319       return layoutRect;
       
  3320     },
       
  3321     recalc: function () {
       
  3322       var self = this;
       
  3323       var rect = self._layoutRect;
       
  3324       var lastRect = self._lastRect;
       
  3325       if (!lastRect || lastRect.w !== rect.w || lastRect.h !== rect.h) {
       
  3326         self._layout.recalc(self);
       
  3327         rect = self.layoutRect();
       
  3328         self._lastRect = {
       
  3329           x: rect.x,
       
  3330           y: rect.y,
       
  3331           w: rect.w,
       
  3332           h: rect.h
       
  3333         };
       
  3334         return true;
       
  3335       }
       
  3336     },
       
  3337     reflow: function () {
       
  3338       var i;
       
  3339       $_cqjgb518wjjgwek2f.remove(this);
       
  3340       if (this.visible()) {
       
  3341         Control$1.repaintControls = [];
       
  3342         Control$1.repaintControls.map = {};
       
  3343         this.recalc();
       
  3344         i = Control$1.repaintControls.length;
       
  3345         while (i--) {
       
  3346           Control$1.repaintControls[i].repaint();
       
  3347         }
       
  3348         if (this.settings.layout !== 'flow' && this.settings.layout !== 'stack') {
       
  3349           this.repaint();
       
  3350         }
       
  3351         Control$1.repaintControls = [];
       
  3352       }
       
  3353       return this;
       
  3354     }
       
  3355   });
       
  3356 
       
  3357   var $_8woeth19ajjgwek4b = {
       
  3358     init: function () {
       
  3359       var self = this;
       
  3360       self.on('repaint', self.renderScroll);
       
  3361     },
       
  3362     renderScroll: function () {
       
  3363       var self = this, margin = 2;
       
  3364       function repaintScroll() {
       
  3365         var hasScrollH, hasScrollV, bodyElm;
       
  3366         function repaintAxis(axisName, posName, sizeName, contentSizeName, hasScroll, ax) {
       
  3367           var containerElm, scrollBarElm, scrollThumbElm;
       
  3368           var containerSize, scrollSize, ratio, rect;
       
  3369           var posNameLower, sizeNameLower;
       
  3370           scrollBarElm = self.getEl('scroll' + axisName);
       
  3371           if (scrollBarElm) {
       
  3372             posNameLower = posName.toLowerCase();
       
  3373             sizeNameLower = sizeName.toLowerCase();
       
  3374             global$7(self.getEl('absend')).css(posNameLower, self.layoutRect()[contentSizeName] - 1);
       
  3375             if (!hasScroll) {
       
  3376               global$7(scrollBarElm).css('display', 'none');
       
  3377               return;
       
  3378             }
       
  3379             global$7(scrollBarElm).css('display', 'block');
       
  3380             containerElm = self.getEl('body');
       
  3381             scrollThumbElm = self.getEl('scroll' + axisName + 't');
       
  3382             containerSize = containerElm['client' + sizeName] - margin * 2;
       
  3383             containerSize -= hasScrollH && hasScrollV ? scrollBarElm['client' + ax] : 0;
       
  3384             scrollSize = containerElm['scroll' + sizeName];
       
  3385             ratio = containerSize / scrollSize;
       
  3386             rect = {};
       
  3387             rect[posNameLower] = containerElm['offset' + posName] + margin;
       
  3388             rect[sizeNameLower] = containerSize;
       
  3389             global$7(scrollBarElm).css(rect);
       
  3390             rect = {};
       
  3391             rect[posNameLower] = containerElm['scroll' + posName] * ratio;
       
  3392             rect[sizeNameLower] = containerSize * ratio;
       
  3393             global$7(scrollThumbElm).css(rect);
       
  3394           }
       
  3395         }
       
  3396         bodyElm = self.getEl('body');
       
  3397         hasScrollH = bodyElm.scrollWidth > bodyElm.clientWidth;
       
  3398         hasScrollV = bodyElm.scrollHeight > bodyElm.clientHeight;
       
  3399         repaintAxis('h', 'Left', 'Width', 'contentW', hasScrollH, 'Height');
       
  3400         repaintAxis('v', 'Top', 'Height', 'contentH', hasScrollV, 'Width');
       
  3401       }
       
  3402       function addScroll() {
       
  3403         function addScrollAxis(axisName, posName, sizeName, deltaPosName, ax) {
       
  3404           var scrollStart;
       
  3405           var axisId = self._id + '-scroll' + axisName, prefix = self.classPrefix;
       
  3406           global$7(self.getEl()).append('<div id="' + axisId + '" class="' + prefix + 'scrollbar ' + prefix + 'scrollbar-' + axisName + '">' + '<div id="' + axisId + 't" class="' + prefix + 'scrollbar-thumb"></div>' + '</div>');
       
  3407           self.draghelper = new DragHelper(axisId + 't', {
       
  3408             start: function () {
       
  3409               scrollStart = self.getEl('body')['scroll' + posName];
       
  3410               global$7('#' + axisId).addClass(prefix + 'active');
       
  3411             },
       
  3412             drag: function (e) {
       
  3413               var ratio, hasScrollH, hasScrollV, containerSize;
       
  3414               var layoutRect = self.layoutRect();
       
  3415               hasScrollH = layoutRect.contentW > layoutRect.innerW;
       
  3416               hasScrollV = layoutRect.contentH > layoutRect.innerH;
       
  3417               containerSize = self.getEl('body')['client' + sizeName] - margin * 2;
       
  3418               containerSize -= hasScrollH && hasScrollV ? self.getEl('scroll' + axisName)['client' + ax] : 0;
       
  3419               ratio = containerSize / self.getEl('body')['scroll' + sizeName];
       
  3420               self.getEl('body')['scroll' + posName] = scrollStart + e['delta' + deltaPosName] / ratio;
       
  3421             },
       
  3422             stop: function () {
       
  3423               global$7('#' + axisId).removeClass(prefix + 'active');
       
  3424             }
       
  3425           });
       
  3426         }
       
  3427         self.classes.add('scroll');
       
  3428         addScrollAxis('v', 'Top', 'Height', 'Y', 'Width');
       
  3429         addScrollAxis('h', 'Left', 'Width', 'X', 'Height');
       
  3430       }
       
  3431       if (self.settings.autoScroll) {
       
  3432         if (!self._hasScroll) {
       
  3433           self._hasScroll = true;
       
  3434           addScroll();
       
  3435           self.on('wheel', function (e) {
       
  3436             var bodyEl = self.getEl('body');
       
  3437             bodyEl.scrollLeft += (e.deltaX || 0) * 10;
       
  3438             bodyEl.scrollTop += e.deltaY * 10;
       
  3439             repaintScroll();
       
  3440           });
       
  3441           global$7(self.getEl('body')).on('scroll', repaintScroll);
       
  3442         }
       
  3443         repaintScroll();
       
  3444       }
       
  3445     }
       
  3446   };
       
  3447 
       
  3448   var Panel = Container.extend({
       
  3449     Defaults: {
       
  3450       layout: 'fit',
       
  3451       containerCls: 'panel'
       
  3452     },
       
  3453     Mixins: [$_8woeth19ajjgwek4b],
       
  3454     renderHtml: function () {
       
  3455       var self = this;
       
  3456       var layout = self._layout;
       
  3457       var innerHtml = self.settings.html;
       
  3458       self.preRender();
       
  3459       layout.preRender(self);
       
  3460       if (typeof innerHtml === 'undefined') {
       
  3461         innerHtml = '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + layout.renderHtml(self) + '</div>';
       
  3462       } else {
       
  3463         if (typeof innerHtml === 'function') {
       
  3464           innerHtml = innerHtml.call(self);
       
  3465         }
       
  3466         self._hasBody = false;
       
  3467       }
       
  3468       return '<div id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1" role="group">' + (self._preBodyHtml || '') + innerHtml + '</div>';
       
  3469     }
       
  3470   });
       
  3471 
       
  3472   var $_20hy1119bjjgwek4f = {
       
  3473     resizeToContent: function () {
       
  3474       this._layoutRect.autoResize = true;
       
  3475       this._lastRect = null;
       
  3476       this.reflow();
       
  3477     },
       
  3478     resizeTo: function (w, h) {
       
  3479       if (w <= 1 || h <= 1) {
       
  3480         var rect = funcs.getWindowSize();
       
  3481         w = w <= 1 ? w * rect.w : w;
       
  3482         h = h <= 1 ? h * rect.h : h;
       
  3483       }
       
  3484       this._layoutRect.autoResize = false;
       
  3485       return this.layoutRect({
       
  3486         minW: w,
       
  3487         minH: h,
       
  3488         w: w,
       
  3489         h: h
       
  3490       }).reflow();
       
  3491     },
       
  3492     resizeBy: function (dw, dh) {
       
  3493       var self = this, rect = self.layoutRect();
       
  3494       return self.resizeTo(rect.w + dw, rect.h + dh);
       
  3495     }
       
  3496   };
       
  3497 
       
  3498   var documentClickHandler;
       
  3499   var documentScrollHandler;
       
  3500   var windowResizeHandler;
       
  3501   var visiblePanels = [];
       
  3502   var zOrder = [];
       
  3503   var hasModal;
       
  3504   function isChildOf(ctrl, parent$$1) {
       
  3505     while (ctrl) {
       
  3506       if (ctrl === parent$$1) {
       
  3507         return true;
       
  3508       }
       
  3509       ctrl = ctrl.parent();
       
  3510     }
       
  3511   }
       
  3512   function skipOrHidePanels(e) {
       
  3513     var i = visiblePanels.length;
       
  3514     while (i--) {
       
  3515       var panel = visiblePanels[i], clickCtrl = panel.getParentCtrl(e.target);
       
  3516       if (panel.settings.autohide) {
       
  3517         if (clickCtrl) {
       
  3518           if (isChildOf(clickCtrl, panel) || panel.parent() === clickCtrl) {
       
  3519             continue;
       
  3520           }
       
  3521         }
       
  3522         e = panel.fire('autohide', { target: e.target });
       
  3523         if (!e.isDefaultPrevented()) {
       
  3524           panel.hide();
       
  3525         }
       
  3526       }
       
  3527     }
       
  3528   }
       
  3529   function bindDocumentClickHandler() {
       
  3530     if (!documentClickHandler) {
       
  3531       documentClickHandler = function (e) {
       
  3532         if (e.button === 2) {
       
  3533           return;
       
  3534         }
       
  3535         skipOrHidePanels(e);
       
  3536       };
       
  3537       global$7(document).on('click touchstart', documentClickHandler);
       
  3538     }
       
  3539   }
       
  3540   function bindDocumentScrollHandler() {
       
  3541     if (!documentScrollHandler) {
       
  3542       documentScrollHandler = function () {
       
  3543         var i;
       
  3544         i = visiblePanels.length;
       
  3545         while (i--) {
       
  3546           repositionPanel$1(visiblePanels[i]);
       
  3547         }
       
  3548       };
       
  3549       global$7(window).on('scroll', documentScrollHandler);
       
  3550     }
       
  3551   }
       
  3552   function bindWindowResizeHandler() {
       
  3553     if (!windowResizeHandler) {
       
  3554       var docElm_1 = document.documentElement;
       
  3555       var clientWidth_1 = docElm_1.clientWidth, clientHeight_1 = docElm_1.clientHeight;
       
  3556       windowResizeHandler = function () {
       
  3557         if (!document.all || clientWidth_1 !== docElm_1.clientWidth || clientHeight_1 !== docElm_1.clientHeight) {
       
  3558           clientWidth_1 = docElm_1.clientWidth;
       
  3559           clientHeight_1 = docElm_1.clientHeight;
       
  3560           FloatPanel.hideAll();
       
  3561         }
       
  3562       };
       
  3563       global$7(window).on('resize', windowResizeHandler);
       
  3564     }
       
  3565   }
       
  3566   function repositionPanel$1(panel) {
       
  3567     var scrollY$$1 = funcs.getViewPort().y;
       
  3568     function toggleFixedChildPanels(fixed, deltaY) {
       
  3569       var parent$$1;
       
  3570       for (var i = 0; i < visiblePanels.length; i++) {
       
  3571         if (visiblePanels[i] !== panel) {
       
  3572           parent$$1 = visiblePanels[i].parent();
       
  3573           while (parent$$1 && (parent$$1 = parent$$1.parent())) {
       
  3574             if (parent$$1 === panel) {
       
  3575               visiblePanels[i].fixed(fixed).moveBy(0, deltaY).repaint();
       
  3576             }
       
  3577           }
       
  3578         }
       
  3579       }
       
  3580     }
       
  3581     if (panel.settings.autofix) {
       
  3582       if (!panel.state.get('fixed')) {
       
  3583         panel._autoFixY = panel.layoutRect().y;
       
  3584         if (panel._autoFixY < scrollY$$1) {
       
  3585           panel.fixed(true).layoutRect({ y: 0 }).repaint();
       
  3586           toggleFixedChildPanels(true, scrollY$$1 - panel._autoFixY);
       
  3587         }
       
  3588       } else {
       
  3589         if (panel._autoFixY > scrollY$$1) {
       
  3590           panel.fixed(false).layoutRect({ y: panel._autoFixY }).repaint();
       
  3591           toggleFixedChildPanels(false, panel._autoFixY - scrollY$$1);
       
  3592         }
       
  3593       }
       
  3594     }
       
  3595   }
       
  3596   function addRemove(add, ctrl) {
       
  3597     var i, zIndex = FloatPanel.zIndex || 65535, topModal;
       
  3598     if (add) {
       
  3599       zOrder.push(ctrl);
       
  3600     } else {
       
  3601       i = zOrder.length;
       
  3602       while (i--) {
       
  3603         if (zOrder[i] === ctrl) {
       
  3604           zOrder.splice(i, 1);
       
  3605         }
       
  3606       }
       
  3607     }
       
  3608     if (zOrder.length) {
       
  3609       for (i = 0; i < zOrder.length; i++) {
       
  3610         if (zOrder[i].modal) {
       
  3611           zIndex++;
       
  3612           topModal = zOrder[i];
       
  3613         }
       
  3614         zOrder[i].getEl().style.zIndex = zIndex;
       
  3615         zOrder[i].zIndex = zIndex;
       
  3616         zIndex++;
       
  3617       }
       
  3618     }
       
  3619     var modalBlockEl = global$7('#' + ctrl.classPrefix + 'modal-block', ctrl.getContainerElm())[0];
       
  3620     if (topModal) {
       
  3621       global$7(modalBlockEl).css('z-index', topModal.zIndex - 1);
       
  3622     } else if (modalBlockEl) {
       
  3623       modalBlockEl.parentNode.removeChild(modalBlockEl);
       
  3624       hasModal = false;
       
  3625     }
       
  3626     FloatPanel.currentZIndex = zIndex;
       
  3627   }
       
  3628   var FloatPanel = Panel.extend({
       
  3629     Mixins: [
       
  3630       $_8zu82i18yjjgwek2l,
       
  3631       $_20hy1119bjjgwek4f
       
  3632     ],
       
  3633     init: function (settings) {
       
  3634       var self$$1 = this;
       
  3635       self$$1._super(settings);
       
  3636       self$$1._eventsRoot = self$$1;
       
  3637       self$$1.classes.add('floatpanel');
       
  3638       if (settings.autohide) {
       
  3639         bindDocumentClickHandler();
       
  3640         bindWindowResizeHandler();
       
  3641         visiblePanels.push(self$$1);
       
  3642       }
       
  3643       if (settings.autofix) {
       
  3644         bindDocumentScrollHandler();
       
  3645         self$$1.on('move', function () {
       
  3646           repositionPanel$1(this);
       
  3647         });
       
  3648       }
       
  3649       self$$1.on('postrender show', function (e) {
       
  3650         if (e.control === self$$1) {
       
  3651           var $modalBlockEl_1;
       
  3652           var prefix_1 = self$$1.classPrefix;
       
  3653           if (self$$1.modal && !hasModal) {
       
  3654             $modalBlockEl_1 = global$7('#' + prefix_1 + 'modal-block', self$$1.getContainerElm());
       
  3655             if (!$modalBlockEl_1[0]) {
       
  3656               $modalBlockEl_1 = global$7('<div id="' + prefix_1 + 'modal-block" class="' + prefix_1 + 'reset ' + prefix_1 + 'fade"></div>').appendTo(self$$1.getContainerElm());
       
  3657             }
       
  3658             global$3.setTimeout(function () {
       
  3659               $modalBlockEl_1.addClass(prefix_1 + 'in');
       
  3660               global$7(self$$1.getEl()).addClass(prefix_1 + 'in');
       
  3661             });
       
  3662             hasModal = true;
       
  3663           }
       
  3664           addRemove(true, self$$1);
       
  3665         }
       
  3666       });
       
  3667       self$$1.on('show', function () {
       
  3668         self$$1.parents().each(function (ctrl) {
       
  3669           if (ctrl.state.get('fixed')) {
       
  3670             self$$1.fixed(true);
       
  3671             return false;
       
  3672           }
       
  3673         });
       
  3674       });
       
  3675       if (settings.popover) {
       
  3676         self$$1._preBodyHtml = '<div class="' + self$$1.classPrefix + 'arrow"></div>';
       
  3677         self$$1.classes.add('popover').add('bottom').add(self$$1.isRtl() ? 'end' : 'start');
       
  3678       }
       
  3679       self$$1.aria('label', settings.ariaLabel);
       
  3680       self$$1.aria('labelledby', self$$1._id);
       
  3681       self$$1.aria('describedby', self$$1.describedBy || self$$1._id + '-none');
       
  3682     },
       
  3683     fixed: function (state) {
       
  3684       var self$$1 = this;
       
  3685       if (self$$1.state.get('fixed') !== state) {
       
  3686         if (self$$1.state.get('rendered')) {
       
  3687           var viewport = funcs.getViewPort();
       
  3688           if (state) {
       
  3689             self$$1.layoutRect().y -= viewport.y;
       
  3690           } else {
       
  3691             self$$1.layoutRect().y += viewport.y;
       
  3692           }
       
  3693         }
       
  3694         self$$1.classes.toggle('fixed', state);
       
  3695         self$$1.state.set('fixed', state);
       
  3696       }
       
  3697       return self$$1;
       
  3698     },
       
  3699     show: function () {
       
  3700       var self$$1 = this;
       
  3701       var i;
       
  3702       var state = self$$1._super();
       
  3703       i = visiblePanels.length;
       
  3704       while (i--) {
       
  3705         if (visiblePanels[i] === self$$1) {
       
  3706           break;
       
  3707         }
       
  3708       }
       
  3709       if (i === -1) {
       
  3710         visiblePanels.push(self$$1);
       
  3711       }
       
  3712       return state;
       
  3713     },
       
  3714     hide: function () {
       
  3715       removeVisiblePanel(this);
       
  3716       addRemove(false, this);
       
  3717       return this._super();
       
  3718     },
       
  3719     hideAll: function () {
       
  3720       FloatPanel.hideAll();
       
  3721     },
       
  3722     close: function () {
       
  3723       var self$$1 = this;
       
  3724       if (!self$$1.fire('close').isDefaultPrevented()) {
       
  3725         self$$1.remove();
       
  3726         addRemove(false, self$$1);
       
  3727       }
       
  3728       return self$$1;
       
  3729     },
       
  3730     remove: function () {
       
  3731       removeVisiblePanel(this);
       
  3732       this._super();
       
  3733     },
       
  3734     postRender: function () {
       
  3735       var self$$1 = this;
       
  3736       if (self$$1.settings.bodyRole) {
       
  3737         this.getEl('body').setAttribute('role', self$$1.settings.bodyRole);
       
  3738       }
       
  3739       return self$$1._super();
       
  3740     }
       
  3741   });
       
  3742   FloatPanel.hideAll = function () {
       
  3743     var i = visiblePanels.length;
       
  3744     while (i--) {
       
  3745       var panel = visiblePanels[i];
       
  3746       if (panel && panel.settings.autohide) {
       
  3747         panel.hide();
       
  3748         visiblePanels.splice(i, 1);
       
  3749       }
       
  3750     }
       
  3751   };
       
  3752   function removeVisiblePanel(panel) {
       
  3753     var i;
       
  3754     i = visiblePanels.length;
       
  3755     while (i--) {
       
  3756       if (visiblePanels[i] === panel) {
       
  3757         visiblePanels.splice(i, 1);
       
  3758       }
       
  3759     }
       
  3760     i = zOrder.length;
       
  3761     while (i--) {
       
  3762       if (zOrder[i] === panel) {
       
  3763         zOrder.splice(i, 1);
       
  3764       }
       
  3765     }
       
  3766   }
       
  3767 
       
  3768   var windows = [];
       
  3769   var oldMetaValue = '';
       
  3770   function toggleFullScreenState(state) {
       
  3771     var noScaleMetaValue = 'width=device-width,initial-scale=1.0,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0';
       
  3772     var viewport = global$7('meta[name=viewport]')[0], contentValue;
       
  3773     if (global$1.overrideViewPort === false) {
       
  3774       return;
       
  3775     }
       
  3776     if (!viewport) {
       
  3777       viewport = document.createElement('meta');
       
  3778       viewport.setAttribute('name', 'viewport');
       
  3779       document.getElementsByTagName('head')[0].appendChild(viewport);
       
  3780     }
       
  3781     contentValue = viewport.getAttribute('content');
       
  3782     if (contentValue && typeof oldMetaValue !== 'undefined') {
       
  3783       oldMetaValue = contentValue;
       
  3784     }
       
  3785     viewport.setAttribute('content', state ? noScaleMetaValue : oldMetaValue);
       
  3786   }
       
  3787   function toggleBodyFullScreenClasses(classPrefix, state) {
       
  3788     if (checkFullscreenWindows() && state === false) {
       
  3789       global$7([
       
  3790         document.documentElement,
       
  3791         document.body
       
  3792       ]).removeClass(classPrefix + 'fullscreen');
       
  3793     }
       
  3794   }
       
  3795   function checkFullscreenWindows() {
       
  3796     for (var i = 0; i < windows.length; i++) {
       
  3797       if (windows[i]._fullscreen) {
       
  3798         return true;
       
  3799       }
       
  3800     }
       
  3801     return false;
       
  3802   }
       
  3803   function handleWindowResize() {
       
  3804     if (!global$1.desktop) {
       
  3805       var lastSize_1 = {
       
  3806         w: window.innerWidth,
       
  3807         h: window.innerHeight
       
  3808       };
       
  3809       global$3.setInterval(function () {
       
  3810         var w = window.innerWidth, h = window.innerHeight;
       
  3811         if (lastSize_1.w !== w || lastSize_1.h !== h) {
       
  3812           lastSize_1 = {
       
  3813             w: w,
       
  3814             h: h
       
  3815           };
       
  3816           global$7(window).trigger('resize');
       
  3817         }
       
  3818       }, 100);
       
  3819     }
       
  3820     function reposition() {
       
  3821       var i;
       
  3822       var rect = funcs.getWindowSize();
       
  3823       var layoutRect;
       
  3824       for (i = 0; i < windows.length; i++) {
       
  3825         layoutRect = windows[i].layoutRect();
       
  3826         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));
       
  3827       }
       
  3828     }
       
  3829     global$7(window).on('resize', reposition);
       
  3830   }
       
  3831   var Window$$1 = FloatPanel.extend({
       
  3832     modal: true,
       
  3833     Defaults: {
       
  3834       border: 1,
       
  3835       layout: 'flex',
       
  3836       containerCls: 'panel',
       
  3837       role: 'dialog',
       
  3838       callbacks: {
       
  3839         submit: function () {
       
  3840           this.fire('submit', { data: this.toJSON() });
       
  3841         },
       
  3842         close: function () {
       
  3843           this.close();
       
  3844         }
       
  3845       }
       
  3846     },
       
  3847     init: function (settings) {
       
  3848       var self$$1 = this;
       
  3849       self$$1._super(settings);
       
  3850       if (self$$1.isRtl()) {
       
  3851         self$$1.classes.add('rtl');
       
  3852       }
       
  3853       self$$1.classes.add('window');
       
  3854       self$$1.bodyClasses.add('window-body');
       
  3855       self$$1.state.set('fixed', true);
       
  3856       if (settings.buttons) {
       
  3857         self$$1.statusbar = new Panel({
       
  3858           layout: 'flex',
       
  3859           border: '1 0 0 0',
       
  3860           spacing: 3,
       
  3861           padding: 10,
       
  3862           align: 'center',
       
  3863           pack: self$$1.isRtl() ? 'start' : 'end',
       
  3864           defaults: { type: 'button' },
       
  3865           items: settings.buttons
       
  3866         });
       
  3867         self$$1.statusbar.classes.add('foot');
       
  3868         self$$1.statusbar.parent(self$$1);
       
  3869       }
       
  3870       self$$1.on('click', function (e) {
       
  3871         var closeClass = self$$1.classPrefix + 'close';
       
  3872         if (funcs.hasClass(e.target, closeClass) || funcs.hasClass(e.target.parentNode, closeClass)) {
       
  3873           self$$1.close();
       
  3874         }
       
  3875       });
       
  3876       self$$1.on('cancel', function () {
       
  3877         self$$1.close();
       
  3878       });
       
  3879       self$$1.on('move', function (e) {
       
  3880         if (e.control === self$$1) {
       
  3881           FloatPanel.hideAll();
       
  3882         }
       
  3883       });
       
  3884       self$$1.aria('describedby', self$$1.describedBy || self$$1._id + '-none');
       
  3885       self$$1.aria('label', settings.title);
       
  3886       self$$1._fullscreen = false;
       
  3887     },
       
  3888     recalc: function () {
       
  3889       var self$$1 = this;
       
  3890       var statusbar$$1 = self$$1.statusbar;
       
  3891       var layoutRect, width, x, needsRecalc;
       
  3892       if (self$$1._fullscreen) {
       
  3893         self$$1.layoutRect(funcs.getWindowSize());
       
  3894         self$$1.layoutRect().contentH = self$$1.layoutRect().innerH;
       
  3895       }
       
  3896       self$$1._super();
       
  3897       layoutRect = self$$1.layoutRect();
       
  3898       if (self$$1.settings.title && !self$$1._fullscreen) {
       
  3899         width = layoutRect.headerW;
       
  3900         if (width > layoutRect.w) {
       
  3901           x = layoutRect.x - Math.max(0, width / 2);
       
  3902           self$$1.layoutRect({
       
  3903             w: width,
       
  3904             x: x
       
  3905           });
       
  3906           needsRecalc = true;
       
  3907         }
       
  3908       }
       
  3909       if (statusbar$$1) {
       
  3910         statusbar$$1.layoutRect({ w: self$$1.layoutRect().innerW }).recalc();
       
  3911         width = statusbar$$1.layoutRect().minW + layoutRect.deltaW;
       
  3912         if (width > layoutRect.w) {
       
  3913           x = layoutRect.x - Math.max(0, width - layoutRect.w);
       
  3914           self$$1.layoutRect({
       
  3915             w: width,
       
  3916             x: x
       
  3917           });
       
  3918           needsRecalc = true;
       
  3919         }
       
  3920       }
       
  3921       if (needsRecalc) {
       
  3922         self$$1.recalc();
       
  3923       }
       
  3924     },
       
  3925     initLayoutRect: function () {
       
  3926       var self$$1 = this;
       
  3927       var layoutRect = self$$1._super();
       
  3928       var deltaH = 0, headEl;
       
  3929       if (self$$1.settings.title && !self$$1._fullscreen) {
       
  3930         headEl = self$$1.getEl('head');
       
  3931         var size = funcs.getSize(headEl);
       
  3932         layoutRect.headerW = size.width;
       
  3933         layoutRect.headerH = size.height;
       
  3934         deltaH += layoutRect.headerH;
       
  3935       }
       
  3936       if (self$$1.statusbar) {
       
  3937         deltaH += self$$1.statusbar.layoutRect().h;
       
  3938       }
       
  3939       layoutRect.deltaH += deltaH;
       
  3940       layoutRect.minH += deltaH;
       
  3941       layoutRect.h += deltaH;
       
  3942       var rect = funcs.getWindowSize();
       
  3943       layoutRect.x = self$$1.settings.x || Math.max(0, rect.w / 2 - layoutRect.w / 2);
       
  3944       layoutRect.y = self$$1.settings.y || Math.max(0, rect.h / 2 - layoutRect.h / 2);
       
  3945       return layoutRect;
       
  3946     },
       
  3947     renderHtml: function () {
       
  3948       var self$$1 = this, layout = self$$1._layout, id = self$$1._id, prefix = self$$1.classPrefix;
       
  3949       var settings = self$$1.settings;
       
  3950       var headerHtml = '', footerHtml = '', html = settings.html;
       
  3951       self$$1.preRender();
       
  3952       layout.preRender(self$$1);
       
  3953       if (settings.title) {
       
  3954         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>';
       
  3955       }
       
  3956       if (settings.url) {
       
  3957         html = '<iframe src="' + settings.url + '" tabindex="-1"></iframe>';
       
  3958       }
       
  3959       if (typeof html === 'undefined') {
       
  3960         html = layout.renderHtml(self$$1);
       
  3961       }
       
  3962       if (self$$1.statusbar) {
       
  3963         footerHtml = self$$1.statusbar.renderHtml();
       
  3964       }
       
  3965       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>';
       
  3966     },
       
  3967     fullscreen: function (state) {
       
  3968       var self$$1 = this;
       
  3969       var documentElement = document.documentElement;
       
  3970       var slowRendering;
       
  3971       var prefix = self$$1.classPrefix;
       
  3972       var layoutRect;
       
  3973       if (state !== self$$1._fullscreen) {
       
  3974         global$7(window).on('resize', function () {
       
  3975           var time;
       
  3976           if (self$$1._fullscreen) {
       
  3977             if (!slowRendering) {
       
  3978               time = new Date().getTime();
       
  3979               var rect = funcs.getWindowSize();
       
  3980               self$$1.moveTo(0, 0).resizeTo(rect.w, rect.h);
       
  3981               if (new Date().getTime() - time > 50) {
       
  3982                 slowRendering = true;
       
  3983               }
       
  3984             } else {
       
  3985               if (!self$$1._timer) {
       
  3986                 self$$1._timer = global$3.setTimeout(function () {
       
  3987                   var rect = funcs.getWindowSize();
       
  3988                   self$$1.moveTo(0, 0).resizeTo(rect.w, rect.h);
       
  3989                   self$$1._timer = 0;
       
  3990                 }, 50);
       
  3991               }
       
  3992             }
       
  3993           }
       
  3994         });
       
  3995         layoutRect = self$$1.layoutRect();
       
  3996         self$$1._fullscreen = state;
       
  3997         if (!state) {
       
  3998           self$$1.borderBox = $_4kbuyt18pjjgwek1w.parseBox(self$$1.settings.border);
       
  3999           self$$1.getEl('head').style.display = '';
       
  4000           layoutRect.deltaH += layoutRect.headerH;
       
  4001           global$7([
       
  4002             documentElement,
       
  4003             document.body
       
  4004           ]).removeClass(prefix + 'fullscreen');
       
  4005           self$$1.classes.remove('fullscreen');
       
  4006           self$$1.moveTo(self$$1._initial.x, self$$1._initial.y).resizeTo(self$$1._initial.w, self$$1._initial.h);
       
  4007         } else {
       
  4008           self$$1._initial = {
       
  4009             x: layoutRect.x,
       
  4010             y: layoutRect.y,
       
  4011             w: layoutRect.w,
       
  4012             h: layoutRect.h
       
  4013           };
       
  4014           self$$1.borderBox = $_4kbuyt18pjjgwek1w.parseBox('0');
       
  4015           self$$1.getEl('head').style.display = 'none';
       
  4016           layoutRect.deltaH -= layoutRect.headerH + 2;
       
  4017           global$7([
       
  4018             documentElement,
       
  4019             document.body
       
  4020           ]).addClass(prefix + 'fullscreen');
       
  4021           self$$1.classes.add('fullscreen');
       
  4022           var rect = funcs.getWindowSize();
       
  4023           self$$1.moveTo(0, 0).resizeTo(rect.w, rect.h);
       
  4024         }
       
  4025       }
       
  4026       return self$$1.reflow();
       
  4027     },
       
  4028     postRender: function () {
       
  4029       var self$$1 = this;
       
  4030       var startPos;
       
  4031       setTimeout(function () {
       
  4032         self$$1.classes.add('in');
       
  4033         self$$1.fire('open');
       
  4034       }, 0);
       
  4035       self$$1._super();
       
  4036       if (self$$1.statusbar) {
       
  4037         self$$1.statusbar.postRender();
       
  4038       }
       
  4039       self$$1.focus();
       
  4040       this.dragHelper = new DragHelper(self$$1._id + '-dragh', {
       
  4041         start: function () {
       
  4042           startPos = {
       
  4043             x: self$$1.layoutRect().x,
       
  4044             y: self$$1.layoutRect().y
       
  4045           };
       
  4046         },
       
  4047         drag: function (e) {
       
  4048           self$$1.moveTo(startPos.x + e.deltaX, startPos.y + e.deltaY);
       
  4049         }
       
  4050       });
       
  4051       self$$1.on('submit', function (e) {
       
  4052         if (!e.isDefaultPrevented()) {
       
  4053           self$$1.close();
       
  4054         }
       
  4055       });
       
  4056       windows.push(self$$1);
       
  4057       toggleFullScreenState(true);
       
  4058     },
       
  4059     submit: function () {
       
  4060       return this.fire('submit', { data: this.toJSON() });
       
  4061     },
       
  4062     remove: function () {
       
  4063       var self$$1 = this;
       
  4064       var i;
       
  4065       self$$1.dragHelper.destroy();
       
  4066       self$$1._super();
       
  4067       if (self$$1.statusbar) {
       
  4068         this.statusbar.remove();
       
  4069       }
       
  4070       toggleBodyFullScreenClasses(self$$1.classPrefix, false);
       
  4071       i = windows.length;
       
  4072       while (i--) {
       
  4073         if (windows[i] === self$$1) {
       
  4074           windows.splice(i, 1);
       
  4075         }
       
  4076       }
       
  4077       toggleFullScreenState(windows.length > 0);
       
  4078     },
       
  4079     getContentWindow: function () {
       
  4080       var ifr = this.getEl().getElementsByTagName('iframe')[0];
       
  4081       return ifr ? ifr.contentWindow : null;
       
  4082     }
       
  4083   });
       
  4084   handleWindowResize();
       
  4085 
       
  4086   var MessageBox = Window$$1.extend({
       
  4087     init: function (settings) {
       
  4088       settings = {
       
  4089         border: 1,
       
  4090         padding: 20,
       
  4091         layout: 'flex',
       
  4092         pack: 'center',
       
  4093         align: 'center',
       
  4094         containerCls: 'panel',
       
  4095         autoScroll: true,
       
  4096         buttons: {
       
  4097           type: 'button',
       
  4098           text: 'Ok',
       
  4099           action: 'ok'
       
  4100         },
       
  4101         items: {
       
  4102           type: 'label',
       
  4103           multiline: true,
       
  4104           maxWidth: 500,
       
  4105           maxHeight: 200
       
  4106         }
       
  4107       };
       
  4108       this._super(settings);
       
  4109     },
       
  4110     Statics: {
       
  4111       OK: 1,
       
  4112       OK_CANCEL: 2,
       
  4113       YES_NO: 3,
       
  4114       YES_NO_CANCEL: 4,
       
  4115       msgBox: function (settings) {
       
  4116         var buttons;
       
  4117         var callback = settings.callback || function () {
       
  4118         };
       
  4119         function createButton(text, status$$1, primary) {
       
  4120           return {
       
  4121             type: 'button',
       
  4122             text: text,
       
  4123             subtype: primary ? 'primary' : '',
       
  4124             onClick: function (e) {
       
  4125               e.control.parents()[1].close();
       
  4126               callback(status$$1);
       
  4127             }
       
  4128           };
       
  4129         }
       
  4130         switch (settings.buttons) {
       
  4131         case MessageBox.OK_CANCEL:
       
  4132           buttons = [
       
  4133             createButton('Ok', true, true),
       
  4134             createButton('Cancel', false)
       
  4135           ];
       
  4136           break;
       
  4137         case MessageBox.YES_NO:
       
  4138         case MessageBox.YES_NO_CANCEL:
       
  4139           buttons = [
       
  4140             createButton('Yes', 1, true),
       
  4141             createButton('No', 0)
       
  4142           ];
       
  4143           if (settings.buttons === MessageBox.YES_NO_CANCEL) {
       
  4144             buttons.push(createButton('Cancel', -1));
       
  4145           }
       
  4146           break;
       
  4147         default:
       
  4148           buttons = [createButton('Ok', true, true)];
       
  4149           break;
       
  4150         }
       
  4151         return new Window$$1({
       
  4152           padding: 20,
       
  4153           x: settings.x,
       
  4154           y: settings.y,
       
  4155           minWidth: 300,
       
  4156           minHeight: 100,
       
  4157           layout: 'flex',
       
  4158           pack: 'center',
       
  4159           align: 'center',
       
  4160           buttons: buttons,
       
  4161           title: settings.title,
       
  4162           role: 'alertdialog',
       
  4163           items: {
       
  4164             type: 'label',
       
  4165             multiline: true,
       
  4166             maxWidth: 500,
       
  4167             maxHeight: 200,
       
  4168             text: settings.text
       
  4169           },
       
  4170           onPostRender: function () {
       
  4171             this.aria('describedby', this.items()[0]._id);
       
  4172           },
       
  4173           onClose: settings.onClose,
       
  4174           onCancel: function () {
       
  4175             callback(false);
       
  4176           }
       
  4177         }).renderTo(document.body).reflow();
       
  4178       },
       
  4179       alert: function (settings, callback) {
       
  4180         if (typeof settings === 'string') {
       
  4181           settings = { text: settings };
       
  4182         }
       
  4183         settings.callback = callback;
       
  4184         return MessageBox.msgBox(settings);
       
  4185       },
       
  4186       confirm: function (settings, callback) {
       
  4187         if (typeof settings === 'string') {
       
  4188           settings = { text: settings };
       
  4189         }
       
  4190         settings.callback = callback;
       
  4191         settings.buttons = MessageBox.OK_CANCEL;
       
  4192         return MessageBox.msgBox(settings);
       
  4193       }
       
  4194     }
       
  4195   });
       
  4196 
       
  4197   function WindowManagerImpl (editor) {
       
  4198     var open$$1 = function (args, params, closeCallback) {
       
  4199       var win;
       
  4200       args.title = args.title || ' ';
       
  4201       args.url = args.url || args.file;
       
  4202       if (args.url) {
       
  4203         args.width = parseInt(args.width || 320, 10);
       
  4204         args.height = parseInt(args.height || 240, 10);
       
  4205       }
       
  4206       if (args.body) {
       
  4207         args.items = {
       
  4208           defaults: args.defaults,
       
  4209           type: args.bodyType || 'form',
       
  4210           items: args.body,
       
  4211           data: args.data,
       
  4212           callbacks: args.commands
       
  4213         };
       
  4214       }
       
  4215       if (!args.url && !args.buttons) {
       
  4216         args.buttons = [
       
  4217           {
       
  4218             text: 'Ok',
       
  4219             subtype: 'primary',
       
  4220             onclick: function () {
       
  4221               win.find('form')[0].submit();
       
  4222             }
       
  4223           },
       
  4224           {
       
  4225             text: 'Cancel',
       
  4226             onclick: function () {
       
  4227               win.close();
       
  4228             }
       
  4229           }
       
  4230         ];
       
  4231       }
       
  4232       win = new Window$$1(args);
       
  4233       win.on('close', function () {
       
  4234         closeCallback(win);
       
  4235       });
       
  4236       if (args.data) {
       
  4237         win.on('postRender', function () {
       
  4238           this.find('*').each(function (ctrl) {
       
  4239             var name$$1 = ctrl.name();
       
  4240             if (name$$1 in args.data) {
       
  4241               ctrl.value(args.data[name$$1]);
       
  4242             }
       
  4243           });
       
  4244         });
       
  4245       }
       
  4246       win.features = args || {};
       
  4247       win.params = params || {};
       
  4248       win = win.renderTo(document.body).reflow();
       
  4249       return win;
       
  4250     };
       
  4251     var alert$$1 = function (message, choiceCallback, closeCallback) {
       
  4252       var win;
       
  4253       win = MessageBox.alert(message, function () {
       
  4254         choiceCallback();
       
  4255       });
       
  4256       win.on('close', function () {
       
  4257         closeCallback(win);
       
  4258       });
       
  4259       return win;
       
  4260     };
       
  4261     var confirm$$1 = function (message, choiceCallback, closeCallback) {
       
  4262       var win;
       
  4263       win = MessageBox.confirm(message, function (state) {
       
  4264         choiceCallback(state);
       
  4265       });
       
  4266       win.on('close', function () {
       
  4267         closeCallback(win);
       
  4268       });
       
  4269       return win;
       
  4270     };
       
  4271     var close$$1 = function (window$$1) {
       
  4272       window$$1.close();
       
  4273     };
       
  4274     var getParams = function (window$$1) {
       
  4275       return window$$1.params;
       
  4276     };
       
  4277     var setParams = function (window$$1, params) {
       
  4278       window$$1.params = params;
       
  4279     };
       
  4280     return {
       
  4281       open: open$$1,
       
  4282       alert: alert$$1,
       
  4283       confirm: confirm$$1,
       
  4284       close: close$$1,
       
  4285       getParams: getParams,
       
  4286       setParams: setParams
       
  4287     };
       
  4288   }
       
  4289 
       
  4290   var get = function (editor, panel) {
       
  4291     var renderUI = function () {
       
  4292       return $_b0wxh217tjjgwejyx.renderUI(editor, panel);
       
  4293     };
       
  4294     return {
       
  4295       renderUI: renderUI,
       
  4296       getNotificationManagerImpl: function () {
       
  4297         return NotificationManagerImpl(editor);
       
  4298       },
       
  4299       getWindowManagerImpl: function () {
       
  4300         return WindowManagerImpl(editor);
       
  4301       }
       
  4302     };
       
  4303   };
       
  4304   var $_7y4x3k17sjjgwejyw = { get: get };
       
  4305 
       
  4306   var Global = typeof window !== 'undefined' ? window : Function('return this;')();
       
  4307 
       
  4308   var path = function (parts, scope) {
       
  4309     var o = scope !== undefined && scope !== null ? scope : Global;
       
  4310     for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i)
       
  4311       o = o[parts[i]];
       
  4312     return o;
       
  4313   };
       
  4314   var resolve = function (p, scope) {
       
  4315     var parts = p.split('.');
       
  4316     return path(parts, scope);
       
  4317   };
       
  4318 
       
  4319   var unsafe = function (name, scope) {
       
  4320     return resolve(name, scope);
       
  4321   };
       
  4322   var getOrDie = function (name, scope) {
       
  4323     var actual = unsafe(name, scope);
       
  4324     if (actual === undefined || actual === null)
       
  4325       throw name + ' not available on this browser';
       
  4326     return actual;
       
  4327   };
       
  4328   var $_8wnjhx19gjjgwek54 = { getOrDie: getOrDie };
       
  4329 
       
  4330   function FileReader () {
       
  4331     var f = $_8wnjhx19gjjgwek54.getOrDie('FileReader');
       
  4332     return new f();
       
  4333   }
       
  4334 
       
  4335   var global$12 = tinymce.util.Tools.resolve('tinymce.util.Promise');
       
  4336 
       
  4337   var blobToBase64 = function (blob) {
       
  4338     return new global$12(function (resolve) {
       
  4339       var reader = new FileReader();
       
  4340       reader.onloadend = function () {
       
  4341         resolve(reader.result.split(',')[1]);
       
  4342       };
       
  4343       reader.readAsDataURL(blob);
       
  4344     });
       
  4345   };
       
  4346   var $_c292419ejjgwek4z = { blobToBase64: blobToBase64 };
       
  4347 
       
  4348   var pickFile = function () {
       
  4349     return new global$12(function (resolve) {
       
  4350       var fileInput;
       
  4351       fileInput = document.createElement('input');
       
  4352       fileInput.type = 'file';
       
  4353       fileInput.style.position = 'fixed';
       
  4354       fileInput.style.left = 0;
       
  4355       fileInput.style.top = 0;
       
  4356       fileInput.style.opacity = 0.001;
       
  4357       document.body.appendChild(fileInput);
       
  4358       fileInput.onchange = function (e) {
       
  4359         resolve(Array.prototype.slice.call(e.target.files));
       
  4360       };
       
  4361       fileInput.click();
       
  4362       fileInput.parentNode.removeChild(fileInput);
       
  4363     });
       
  4364   };
       
  4365   var $_edjfwb19kjjgwek5a = { pickFile: pickFile };
       
  4366 
       
  4367   var count$1 = 0;
       
  4368   var seed = function () {
       
  4369     var rnd = function () {
       
  4370       return Math.round(Math.random() * 4294967295).toString(36);
       
  4371     };
       
  4372     return 's' + Date.now().toString(36) + rnd() + rnd() + rnd();
       
  4373   };
       
  4374   var uuid = function (prefix) {
       
  4375     return prefix + count$1++ + seed();
       
  4376   };
       
  4377   var $_49gxzf19mjjgwek5f = { uuid: uuid };
       
  4378 
       
  4379   var create$1 = function (dom, rng) {
       
  4380     var bookmark = {};
       
  4381     function setupEndPoint(start) {
       
  4382       var offsetNode, container, offset;
       
  4383       container = rng[start ? 'startContainer' : 'endContainer'];
       
  4384       offset = rng[start ? 'startOffset' : 'endOffset'];
       
  4385       if (container.nodeType === 1) {
       
  4386         offsetNode = dom.create('span', { 'data-mce-type': 'bookmark' });
       
  4387         if (container.hasChildNodes()) {
       
  4388           offset = Math.min(offset, container.childNodes.length - 1);
       
  4389           if (start) {
       
  4390             container.insertBefore(offsetNode, container.childNodes[offset]);
       
  4391           } else {
       
  4392             dom.insertAfter(offsetNode, container.childNodes[offset]);
       
  4393           }
       
  4394         } else {
       
  4395           container.appendChild(offsetNode);
       
  4396         }
       
  4397         container = offsetNode;
       
  4398         offset = 0;
       
  4399       }
       
  4400       bookmark[start ? 'startContainer' : 'endContainer'] = container;
       
  4401       bookmark[start ? 'startOffset' : 'endOffset'] = offset;
       
  4402     }
       
  4403     setupEndPoint(true);
       
  4404     if (!rng.collapsed) {
       
  4405       setupEndPoint();
       
  4406     }
       
  4407     return bookmark;
       
  4408   };
       
  4409   var resolve$1 = function (dom, bookmark) {
       
  4410     function restoreEndPoint(start) {
       
  4411       var container, offset, node;
       
  4412       function nodeIndex(container) {
       
  4413         var node = container.parentNode.firstChild, idx = 0;
       
  4414         while (node) {
       
  4415           if (node === container) {
       
  4416             return idx;
       
  4417           }
       
  4418           if (node.nodeType !== 1 || node.getAttribute('data-mce-type') !== 'bookmark') {
       
  4419             idx++;
       
  4420           }
       
  4421           node = node.nextSibling;
       
  4422         }
       
  4423         return -1;
       
  4424       }
       
  4425       container = node = bookmark[start ? 'startContainer' : 'endContainer'];
       
  4426       offset = bookmark[start ? 'startOffset' : 'endOffset'];
       
  4427       if (!container) {
       
  4428         return;
       
  4429       }
       
  4430       if (container.nodeType === 1) {
       
  4431         offset = nodeIndex(container);
       
  4432         container = container.parentNode;
       
  4433         dom.remove(node);
       
  4434       }
       
  4435       bookmark[start ? 'startContainer' : 'endContainer'] = container;
       
  4436       bookmark[start ? 'startOffset' : 'endOffset'] = offset;
       
  4437     }
       
  4438     restoreEndPoint(true);
       
  4439     restoreEndPoint();
       
  4440     var rng = dom.createRng();
       
  4441     rng.setStart(bookmark.startContainer, bookmark.startOffset);
       
  4442     if (bookmark.endContainer) {
       
  4443       rng.setEnd(bookmark.endContainer, bookmark.endOffset);
       
  4444     }
       
  4445     return rng;
       
  4446   };
       
  4447   var $_3b24e19ojjgwek5i = {
       
  4448     create: create$1,
       
  4449     resolve: resolve$1
       
  4450   };
       
  4451 
       
  4452   var global$13 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');
       
  4453 
       
  4454   var global$14 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');
       
  4455 
       
  4456   var getSelectedElements = function (rootElm, startNode, endNode) {
       
  4457     var walker, node;
       
  4458     var elms = [];
       
  4459     walker = new global$13(startNode, rootElm);
       
  4460     for (node = startNode; node; node = walker.next()) {
       
  4461       if (node.nodeType === 1) {
       
  4462         elms.push(node);
       
  4463       }
       
  4464       if (node === endNode) {
       
  4465         break;
       
  4466       }
       
  4467     }
       
  4468     return elms;
       
  4469   };
       
  4470   var unwrapElements = function (editor, elms) {
       
  4471     var bookmark, dom, selection;
       
  4472     dom = editor.dom;
       
  4473     selection = editor.selection;
       
  4474     bookmark = $_3b24e19ojjgwek5i.create(dom, selection.getRng());
       
  4475     global$4.each(elms, function (elm) {
       
  4476       editor.dom.remove(elm, true);
       
  4477     });
       
  4478     selection.setRng($_3b24e19ojjgwek5i.resolve(dom, bookmark));
       
  4479   };
       
  4480   var isLink = function (elm) {
       
  4481     return elm.nodeName === 'A' && elm.hasAttribute('href');
       
  4482   };
       
  4483   var getParentAnchorOrSelf = function (dom, elm) {
       
  4484     var anchorElm = dom.getParent(elm, isLink);
       
  4485     return anchorElm ? anchorElm : elm;
       
  4486   };
       
  4487   var getSelectedAnchors = function (editor) {
       
  4488     var startElm, endElm, rootElm, anchorElms, selection, dom, rng;
       
  4489     selection = editor.selection;
       
  4490     dom = editor.dom;
       
  4491     rng = selection.getRng();
       
  4492     startElm = getParentAnchorOrSelf(dom, global$14.getNode(rng.startContainer, rng.startOffset));
       
  4493     endElm = global$14.getNode(rng.endContainer, rng.endOffset);
       
  4494     rootElm = editor.getBody();
       
  4495     anchorElms = global$4.grep(getSelectedElements(rootElm, startElm, endElm), isLink);
       
  4496     return anchorElms;
       
  4497   };
       
  4498   var unlinkSelection = function (editor) {
       
  4499     unwrapElements(editor, getSelectedAnchors(editor));
       
  4500   };
       
  4501   var $_aunbnv19njjgwek5g = { unlinkSelection: unlinkSelection };
       
  4502 
       
  4503   var createTableHtml = function (cols, rows) {
       
  4504     var x, y, html;
       
  4505     html = '<table data-mce-id="mce" style="width: 100%">';
       
  4506     html += '<tbody>';
       
  4507     for (y = 0; y < rows; y++) {
       
  4508       html += '<tr>';
       
  4509       for (x = 0; x < cols; x++) {
       
  4510         html += '<td><br></td>';
       
  4511       }
       
  4512       html += '</tr>';
       
  4513     }
       
  4514     html += '</tbody>';
       
  4515     html += '</table>';
       
  4516     return html;
       
  4517   };
       
  4518   var getInsertedElement = function (editor) {
       
  4519     var elms = editor.dom.select('*[data-mce-id]');
       
  4520     return elms[0];
       
  4521   };
       
  4522   var insertTableHtml = function (editor, cols, rows) {
       
  4523     editor.undoManager.transact(function () {
       
  4524       var tableElm, cellElm;
       
  4525       editor.insertContent(createTableHtml(cols, rows));
       
  4526       tableElm = getInsertedElement(editor);
       
  4527       tableElm.removeAttribute('data-mce-id');
       
  4528       cellElm = editor.dom.select('td,th', tableElm);
       
  4529       editor.selection.setCursorLocation(cellElm[0], 0);
       
  4530     });
       
  4531   };
       
  4532   var insertTable = function (editor, cols, rows) {
       
  4533     editor.plugins.table ? editor.plugins.table.insertTable(cols, rows) : insertTableHtml(editor, cols, rows);
       
  4534   };
       
  4535   var formatBlock = function (editor, formatName) {
       
  4536     editor.execCommand('FormatBlock', false, formatName);
       
  4537   };
       
  4538   var insertBlob = function (editor, base64, blob) {
       
  4539     var blobCache, blobInfo;
       
  4540     blobCache = editor.editorUpload.blobCache;
       
  4541     blobInfo = blobCache.create($_49gxzf19mjjgwek5f.uuid('mceu'), blob, base64);
       
  4542     blobCache.add(blobInfo);
       
  4543     editor.insertContent(editor.dom.createHTML('img', { src: blobInfo.blobUri() }));
       
  4544   };
       
  4545   var collapseSelectionToEnd = function (editor) {
       
  4546     editor.selection.collapse(false);
       
  4547   };
       
  4548   var unlink = function (editor) {
       
  4549     editor.focus();
       
  4550     $_aunbnv19njjgwek5g.unlinkSelection(editor);
       
  4551     collapseSelectionToEnd(editor);
       
  4552   };
       
  4553   var changeHref = function (editor, elm, url) {
       
  4554     editor.focus();
       
  4555     editor.dom.setAttrib(elm, 'href', url);
       
  4556     collapseSelectionToEnd(editor);
       
  4557   };
       
  4558   var insertLink = function (editor, url) {
       
  4559     editor.execCommand('mceInsertLink', false, { href: url });
       
  4560     collapseSelectionToEnd(editor);
       
  4561   };
       
  4562   var updateOrInsertLink = function (editor, url) {
       
  4563     var elm = editor.dom.getParent(editor.selection.getStart(), 'a[href]');
       
  4564     elm ? changeHref(editor, elm, url) : insertLink(editor, url);
       
  4565   };
       
  4566   var createLink = function (editor, url) {
       
  4567     url.trim().length === 0 ? unlink(editor) : updateOrInsertLink(editor, url);
       
  4568   };
       
  4569   var $_elxm3u19ljjgwek5d = {
       
  4570     insertTable: insertTable,
       
  4571     formatBlock: formatBlock,
       
  4572     insertBlob: insertBlob,
       
  4573     createLink: createLink,
       
  4574     unlink: unlink
       
  4575   };
       
  4576 
       
  4577   var addHeaderButtons = function (editor) {
       
  4578     var formatBlock = function (name) {
       
  4579       return function () {
       
  4580         $_elxm3u19ljjgwek5d.formatBlock(editor, name);
       
  4581       };
       
  4582     };
       
  4583     for (var i = 1; i < 6; i++) {
       
  4584       var name = 'h' + i;
       
  4585       editor.addButton(name, {
       
  4586         text: name.toUpperCase(),
       
  4587         tooltip: 'Heading ' + i,
       
  4588         stateSelector: name,
       
  4589         onclick: formatBlock(name),
       
  4590         onPostRender: function () {
       
  4591           var span = this.getEl().firstChild.firstChild;
       
  4592           span.style.fontWeight = 'bold';
       
  4593         }
       
  4594       });
       
  4595     }
       
  4596   };
       
  4597   var addToEditor = function (editor, panel) {
       
  4598     editor.addButton('quicklink', {
       
  4599       icon: 'link',
       
  4600       tooltip: 'Insert/Edit link',
       
  4601       stateSelector: 'a[href]',
       
  4602       onclick: function () {
       
  4603         panel.showForm(editor, 'quicklink');
       
  4604       }
       
  4605     });
       
  4606     editor.addButton('quickimage', {
       
  4607       icon: 'image',
       
  4608       tooltip: 'Insert image',
       
  4609       onclick: function () {
       
  4610         $_edjfwb19kjjgwek5a.pickFile().then(function (files) {
       
  4611           var blob = files[0];
       
  4612           $_c292419ejjgwek4z.blobToBase64(blob).then(function (base64) {
       
  4613             $_elxm3u19ljjgwek5d.insertBlob(editor, base64, blob);
       
  4614           });
       
  4615         });
       
  4616       }
       
  4617     });
       
  4618     editor.addButton('quicktable', {
       
  4619       icon: 'table',
       
  4620       tooltip: 'Insert table',
       
  4621       onclick: function () {
       
  4622         panel.hide();
       
  4623         $_elxm3u19ljjgwek5d.insertTable(editor, 2, 2);
       
  4624       }
       
  4625     });
       
  4626     addHeaderButtons(editor);
       
  4627   };
       
  4628   var $_epdxt419djjgwek4l = { addToEditor: addToEditor };
       
  4629 
       
  4630   var getUiContainerDelta$1 = function () {
       
  4631     var uiContainer = global$1.container;
       
  4632     if (uiContainer && global$2.DOM.getStyle(uiContainer, 'position', true) !== 'static') {
       
  4633       var containerPos = global$2.DOM.getPos(uiContainer);
       
  4634       var dx = containerPos.x - uiContainer.scrollLeft;
       
  4635       var dy = containerPos.y - uiContainer.scrollTop;
       
  4636       return Option.some({
       
  4637         x: dx,
       
  4638         y: dy
       
  4639       });
       
  4640     } else {
       
  4641       return Option.none();
       
  4642     }
       
  4643   };
       
  4644   var $_9hbv4x19sjjgwek5q = { getUiContainerDelta: getUiContainerDelta$1 };
       
  4645 
       
  4646   var isDomainLike = function (href) {
       
  4647     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());
       
  4648   };
       
  4649   var isAbsolute = function (href) {
       
  4650     return /^https?:\/\//.test(href.trim());
       
  4651   };
       
  4652   var $_5y05uk19ujjgwek5w = {
       
  4653     isDomainLike: isDomainLike,
       
  4654     isAbsolute: isAbsolute
       
  4655   };
       
  4656 
       
  4657   var focusFirstTextBox = function (form) {
       
  4658     form.find('textbox').eq(0).each(function (ctrl) {
       
  4659       ctrl.focus();
       
  4660     });
       
  4661   };
       
  4662   var createForm = function (name, spec) {
       
  4663     var form = global$11.create(global$4.extend({
       
  4664       type: 'form',
       
  4665       layout: 'flex',
       
  4666       direction: 'row',
       
  4667       padding: 5,
       
  4668       name: name,
       
  4669       spacing: 3
       
  4670     }, spec));
       
  4671     form.on('show', function () {
       
  4672       focusFirstTextBox(form);
       
  4673     });
       
  4674     return form;
       
  4675   };
       
  4676   var toggleVisibility = function (ctrl, state) {
       
  4677     return state ? ctrl.show() : ctrl.hide();
       
  4678   };
       
  4679   var askAboutPrefix = function (editor, href) {
       
  4680     return new global$12(function (resolve) {
       
  4681       editor.windowManager.confirm('The URL you entered seems to be an external link. Do you want to add the required http:// prefix?', function (result) {
       
  4682         var output = result === true ? 'http://' + href : href;
       
  4683         resolve(output);
       
  4684       });
       
  4685     });
       
  4686   };
       
  4687   var convertLinkToAbsolute = function (editor, href) {
       
  4688     return !$_5y05uk19ujjgwek5w.isAbsolute(href) && $_5y05uk19ujjgwek5w.isDomainLike(href) ? askAboutPrefix(editor, href) : global$12.resolve(href);
       
  4689   };
       
  4690   var createQuickLinkForm = function (editor, hide) {
       
  4691     var attachState = {};
       
  4692     var unlink = function () {
       
  4693       editor.focus();
       
  4694       $_elxm3u19ljjgwek5d.unlink(editor);
       
  4695       hide();
       
  4696     };
       
  4697     var onChangeHandler = function (e) {
       
  4698       var meta = e.meta;
       
  4699       if (meta && meta.attach) {
       
  4700         attachState = {
       
  4701           href: this.value(),
       
  4702           attach: meta.attach
       
  4703         };
       
  4704       }
       
  4705     };
       
  4706     var onShowHandler = function (e) {
       
  4707       if (e.control === this) {
       
  4708         var elm = void 0, linkurl = '';
       
  4709         elm = editor.dom.getParent(editor.selection.getStart(), 'a[href]');
       
  4710         if (elm) {
       
  4711           linkurl = editor.dom.getAttrib(elm, 'href');
       
  4712         }
       
  4713         this.fromJSON({ linkurl: linkurl });
       
  4714         toggleVisibility(this.find('#unlink'), elm);
       
  4715         this.find('#linkurl')[0].focus();
       
  4716       }
       
  4717     };
       
  4718     return createForm('quicklink', {
       
  4719       items: [
       
  4720         {
       
  4721           type: 'button',
       
  4722           name: 'unlink',
       
  4723           icon: 'unlink',
       
  4724           onclick: unlink,
       
  4725           tooltip: 'Remove link'
       
  4726         },
       
  4727         {
       
  4728           type: 'filepicker',
       
  4729           name: 'linkurl',
       
  4730           placeholder: 'Paste or type a link',
       
  4731           filetype: 'file',
       
  4732           onchange: onChangeHandler
       
  4733         },
       
  4734         {
       
  4735           type: 'button',
       
  4736           icon: 'checkmark',
       
  4737           subtype: 'primary',
       
  4738           tooltip: 'Ok',
       
  4739           onclick: 'submit'
       
  4740         }
       
  4741       ],
       
  4742       onshow: onShowHandler,
       
  4743       onsubmit: function (e) {
       
  4744         convertLinkToAbsolute(editor, e.data.linkurl).then(function (url) {
       
  4745           editor.undoManager.transact(function () {
       
  4746             if (url === attachState.href) {
       
  4747               attachState.attach();
       
  4748               attachState = {};
       
  4749             }
       
  4750             $_elxm3u19ljjgwek5d.createLink(editor, url);
       
  4751           });
       
  4752           hide();
       
  4753         });
       
  4754       }
       
  4755     });
       
  4756   };
       
  4757   var $_amewps19tjjgwek5t = { createQuickLinkForm: createQuickLinkForm };
       
  4758 
       
  4759   var getSelectorStateResult = function (itemName, item) {
       
  4760     var result = function (selector, handler) {
       
  4761       return {
       
  4762         selector: selector,
       
  4763         handler: handler
       
  4764       };
       
  4765     };
       
  4766     var activeHandler = function (state) {
       
  4767       item.active(state);
       
  4768     };
       
  4769     var disabledHandler = function (state) {
       
  4770       item.disabled(state);
       
  4771     };
       
  4772     if (item.settings.stateSelector) {
       
  4773       return result(item.settings.stateSelector, activeHandler);
       
  4774     }
       
  4775     if (item.settings.disabledStateSelector) {
       
  4776       return result(item.settings.disabledStateSelector, disabledHandler);
       
  4777     }
       
  4778     return null;
       
  4779   };
       
  4780   var bindSelectorChanged = function (editor, itemName, item) {
       
  4781     return function () {
       
  4782       var result = getSelectorStateResult(itemName, item);
       
  4783       if (result !== null) {
       
  4784         editor.selection.selectorChanged(result.selector, result.handler);
       
  4785       }
       
  4786     };
       
  4787   };
       
  4788   var itemsToArray$1 = function (items) {
       
  4789     if ($_e4npq318ajjgwejzo.isArray(items)) {
       
  4790       return items;
       
  4791     } else if ($_e4npq318ajjgwejzo.isString(items)) {
       
  4792       return items.split(/[ ,]/);
       
  4793     }
       
  4794     return [];
       
  4795   };
       
  4796   var create$2 = function (editor, name, items) {
       
  4797     var toolbarItems = [];
       
  4798     var buttonGroup;
       
  4799     if (!items) {
       
  4800       return;
       
  4801     }
       
  4802     global$4.each(itemsToArray$1(items), function (item) {
       
  4803       if (item === '|') {
       
  4804         buttonGroup = null;
       
  4805       } else {
       
  4806         if (editor.buttons[item]) {
       
  4807           if (!buttonGroup) {
       
  4808             buttonGroup = {
       
  4809               type: 'buttongroup',
       
  4810               items: []
       
  4811             };
       
  4812             toolbarItems.push(buttonGroup);
       
  4813           }
       
  4814           var button = editor.buttons[item];
       
  4815           if ($_e4npq318ajjgwejzo.isFunction(button)) {
       
  4816             button = button();
       
  4817           }
       
  4818           button.type = button.type || 'button';
       
  4819           button = global$11.create(button);
       
  4820           button.on('postRender', bindSelectorChanged(editor, item, button));
       
  4821           buttonGroup.items.push(button);
       
  4822         }
       
  4823       }
       
  4824     });
       
  4825     return global$11.create({
       
  4826       type: 'toolbar',
       
  4827       layout: 'flow',
       
  4828       name: name,
       
  4829       items: toolbarItems
       
  4830     });
       
  4831   };
       
  4832   var $_797pa819vjjgwek5x = { create: create$2 };
       
  4833 
       
  4834   var create$3 = function () {
       
  4835     var panel, currentRect;
       
  4836     var createToolbars = function (editor, toolbars) {
       
  4837       return global$4.map(toolbars, function (toolbar) {
       
  4838         return $_797pa819vjjgwek5x.create(editor, toolbar.id, toolbar.items);
       
  4839       });
       
  4840     };
       
  4841     var hasToolbarItems = function (toolbar) {
       
  4842       return toolbar.items().length > 0;
       
  4843     };
       
  4844     var create = function (editor, toolbars) {
       
  4845       var items = createToolbars(editor, toolbars).concat([
       
  4846         $_797pa819vjjgwek5x.create(editor, 'text', $_4j2h42187jjgwejzk.getTextSelectionToolbarItems(editor)),
       
  4847         $_797pa819vjjgwek5x.create(editor, 'insert', $_4j2h42187jjgwejzk.getInsertToolbarItems(editor)),
       
  4848         $_amewps19tjjgwek5t.createQuickLinkForm(editor, hide)
       
  4849       ]);
       
  4850       return global$11.create({
       
  4851         type: 'floatpanel',
       
  4852         role: 'dialog',
       
  4853         classes: 'tinymce tinymce-inline arrow',
       
  4854         ariaLabel: 'Inline toolbar',
       
  4855         layout: 'flex',
       
  4856         direction: 'column',
       
  4857         align: 'stretch',
       
  4858         autohide: false,
       
  4859         autofix: true,
       
  4860         fixed: true,
       
  4861         border: 1,
       
  4862         items: global$4.grep(items, hasToolbarItems),
       
  4863         oncancel: function () {
       
  4864           editor.focus();
       
  4865         }
       
  4866       });
       
  4867     };
       
  4868     var showPanel = function (panel) {
       
  4869       if (panel) {
       
  4870         panel.show();
       
  4871       }
       
  4872     };
       
  4873     var movePanelTo = function (panel, pos) {
       
  4874       panel.moveTo(pos.x, pos.y);
       
  4875     };
       
  4876     var togglePositionClass = function (panel, relPos) {
       
  4877       relPos = relPos ? relPos.substr(0, 2) : '';
       
  4878       global$4.each({
       
  4879         t: 'down',
       
  4880         b: 'up',
       
  4881         c: 'center'
       
  4882       }, function (cls, pos) {
       
  4883         panel.classes.toggle('arrow-' + cls, pos === relPos.substr(0, 1));
       
  4884       });
       
  4885       if (relPos === 'cr') {
       
  4886         panel.classes.toggle('arrow-left', true);
       
  4887         panel.classes.toggle('arrow-right', false);
       
  4888       } else if (relPos === 'cl') {
       
  4889         panel.classes.toggle('arrow-left', true);
       
  4890         panel.classes.toggle('arrow-right', true);
       
  4891       } else {
       
  4892         global$4.each({
       
  4893           l: 'left',
       
  4894           r: 'right'
       
  4895         }, function (cls, pos) {
       
  4896           panel.classes.toggle('arrow-' + cls, pos === relPos.substr(1, 1));
       
  4897         });
       
  4898       }
       
  4899     };
       
  4900     var showToolbar = function (panel, id) {
       
  4901       var toolbars = panel.items().filter('#' + id);
       
  4902       if (toolbars.length > 0) {
       
  4903         toolbars[0].show();
       
  4904         panel.reflow();
       
  4905         return true;
       
  4906       }
       
  4907       return false;
       
  4908     };
       
  4909     var repositionPanelAt = function (panel, id, editor, targetRect) {
       
  4910       var contentAreaRect, panelRect, result, userConstainHandler;
       
  4911       userConstainHandler = $_4j2h42187jjgwejzk.getPositionHandler(editor);
       
  4912       contentAreaRect = $_51qgo2180jjgwejzb.getContentAreaRect(editor);
       
  4913       panelRect = global$2.DOM.getRect(panel.getEl());
       
  4914       if (id === 'insert') {
       
  4915         result = $_gir42l18bjjgwejzq.calcInsert(targetRect, contentAreaRect, panelRect);
       
  4916       } else {
       
  4917         result = $_gir42l18bjjgwejzq.calc(targetRect, contentAreaRect, panelRect);
       
  4918       }
       
  4919       if (result) {
       
  4920         var delta = $_9hbv4x19sjjgwek5q.getUiContainerDelta().getOr({
       
  4921           x: 0,
       
  4922           y: 0
       
  4923         });
       
  4924         var transposedPanelRect = {
       
  4925           x: result.rect.x - delta.x,
       
  4926           y: result.rect.y - delta.y,
       
  4927           w: result.rect.w,
       
  4928           h: result.rect.h
       
  4929         };
       
  4930         currentRect = targetRect;
       
  4931         movePanelTo(panel, $_gir42l18bjjgwejzq.userConstrain(userConstainHandler, targetRect, contentAreaRect, transposedPanelRect));
       
  4932         togglePositionClass(panel, result.position);
       
  4933         return true;
       
  4934       } else {
       
  4935         return false;
       
  4936       }
       
  4937     };
       
  4938     var showPanelAt = function (panel, id, editor, targetRect) {
       
  4939       showPanel(panel);
       
  4940       panel.items().hide();
       
  4941       if (!showToolbar(panel, id)) {
       
  4942         hide();
       
  4943         return;
       
  4944       }
       
  4945       if (repositionPanelAt(panel, id, editor, targetRect) === false) {
       
  4946         hide();
       
  4947       }
       
  4948     };
       
  4949     var hasFormVisible = function () {
       
  4950       return panel.items().filter('form:visible').length > 0;
       
  4951     };
       
  4952     var showForm = function (editor, id) {
       
  4953       if (panel) {
       
  4954         panel.items().hide();
       
  4955         if (!showToolbar(panel, id)) {
       
  4956           hide();
       
  4957           return;
       
  4958         }
       
  4959         var contentAreaRect = void 0, panelRect = void 0, result = void 0, userConstainHandler = void 0;
       
  4960         showPanel(panel);
       
  4961         panel.items().hide();
       
  4962         showToolbar(panel, id);
       
  4963         userConstainHandler = $_4j2h42187jjgwejzk.getPositionHandler(editor);
       
  4964         contentAreaRect = $_51qgo2180jjgwejzb.getContentAreaRect(editor);
       
  4965         panelRect = global$2.DOM.getRect(panel.getEl());
       
  4966         result = $_gir42l18bjjgwejzq.calc(currentRect, contentAreaRect, panelRect);
       
  4967         if (result) {
       
  4968           panelRect = result.rect;
       
  4969           movePanelTo(panel, $_gir42l18bjjgwejzq.userConstrain(userConstainHandler, currentRect, contentAreaRect, panelRect));
       
  4970           togglePositionClass(panel, result.position);
       
  4971         }
       
  4972       }
       
  4973     };
       
  4974     var show = function (editor, id, targetRect, toolbars) {
       
  4975       if (!panel) {
       
  4976         $_77u64d186jjgwejzi.fireBeforeRenderUI(editor);
       
  4977         panel = create(editor, toolbars);
       
  4978         panel.renderTo().reflow().moveTo(targetRect.x, targetRect.y);
       
  4979         editor.nodeChanged();
       
  4980       }
       
  4981       showPanelAt(panel, id, editor, targetRect);
       
  4982     };
       
  4983     var reposition = function (editor, id, targetRect) {
       
  4984       if (panel) {
       
  4985         repositionPanelAt(panel, id, editor, targetRect);
       
  4986       }
       
  4987     };
       
  4988     var hide = function () {
       
  4989       if (panel) {
       
  4990         panel.hide();
       
  4991       }
       
  4992     };
       
  4993     var focus = function () {
       
  4994       if (panel) {
       
  4995         panel.find('toolbar:visible').eq(0).each(function (item) {
       
  4996           item.focus(true);
       
  4997         });
       
  4998       }
       
  4999     };
       
  5000     var remove = function () {
       
  5001       if (panel) {
       
  5002         panel.remove();
       
  5003         panel = null;
       
  5004       }
       
  5005     };
       
  5006     var inForm = function () {
       
  5007       return panel && panel.visible() && hasFormVisible();
       
  5008     };
       
  5009     return {
       
  5010       show: show,
       
  5011       showForm: showForm,
       
  5012       reposition: reposition,
       
  5013       inForm: inForm,
       
  5014       hide: hide,
       
  5015       focus: focus,
       
  5016       remove: remove
       
  5017     };
       
  5018   };
       
  5019 
       
  5020   var Layout$1 = global$8.extend({
       
  5021     Defaults: {
       
  5022       firstControlClass: 'first',
       
  5023       lastControlClass: 'last'
       
  5024     },
       
  5025     init: function (settings) {
       
  5026       this.settings = global$4.extend({}, this.Defaults, settings);
       
  5027     },
       
  5028     preRender: function (container) {
       
  5029       container.bodyClasses.add(this.settings.containerClass);
       
  5030     },
       
  5031     applyClasses: function (items) {
       
  5032       var self = this;
       
  5033       var settings = self.settings;
       
  5034       var firstClass, lastClass, firstItem, lastItem;
       
  5035       firstClass = settings.firstControlClass;
       
  5036       lastClass = settings.lastControlClass;
       
  5037       items.each(function (item) {
       
  5038         item.classes.remove(firstClass).remove(lastClass).add(settings.controlClass);
       
  5039         if (item.visible()) {
       
  5040           if (!firstItem) {
       
  5041             firstItem = item;
       
  5042           }
       
  5043           lastItem = item;
       
  5044         }
       
  5045       });
       
  5046       if (firstItem) {
       
  5047         firstItem.classes.add(firstClass);
       
  5048       }
       
  5049       if (lastItem) {
       
  5050         lastItem.classes.add(lastClass);
       
  5051       }
       
  5052     },
       
  5053     renderHtml: function (container) {
       
  5054       var self = this;
       
  5055       var html = '';
       
  5056       self.applyClasses(container.items());
       
  5057       container.items().each(function (item) {
       
  5058         html += item.renderHtml();
       
  5059       });
       
  5060       return html;
       
  5061     },
       
  5062     recalc: function () {
       
  5063     },
       
  5064     postRender: function () {
       
  5065     },
       
  5066     isNative: function () {
       
  5067       return false;
       
  5068     }
       
  5069   });
       
  5070 
       
  5071   var AbsoluteLayout = Layout$1.extend({
       
  5072     Defaults: {
       
  5073       containerClass: 'abs-layout',
       
  5074       controlClass: 'abs-layout-item'
       
  5075     },
       
  5076     recalc: function (container) {
       
  5077       container.items().filter(':visible').each(function (ctrl) {
       
  5078         var settings = ctrl.settings;
       
  5079         ctrl.layoutRect({
       
  5080           x: settings.x,
       
  5081           y: settings.y,
       
  5082           w: settings.w,
       
  5083           h: settings.h
       
  5084         });
       
  5085         if (ctrl.recalc) {
       
  5086           ctrl.recalc();
       
  5087         }
       
  5088       });
       
  5089     },
       
  5090     renderHtml: function (container) {
       
  5091       return '<div id="' + container._id + '-absend" class="' + container.classPrefix + 'abs-end"></div>' + this._super(container);
       
  5092     }
       
  5093   });
       
  5094 
       
  5095   var Button = Widget.extend({
       
  5096     Defaults: {
       
  5097       classes: 'widget btn',
       
  5098       role: 'button'
       
  5099     },
       
  5100     init: function (settings) {
       
  5101       var self$$1 = this;
       
  5102       var size;
       
  5103       self$$1._super(settings);
       
  5104       settings = self$$1.settings;
       
  5105       size = self$$1.settings.size;
       
  5106       self$$1.on('click mousedown', function (e) {
       
  5107         e.preventDefault();
       
  5108       });
       
  5109       self$$1.on('touchstart', function (e) {
       
  5110         self$$1.fire('click', e);
       
  5111         e.preventDefault();
       
  5112       });
       
  5113       if (settings.subtype) {
       
  5114         self$$1.classes.add(settings.subtype);
       
  5115       }
       
  5116       if (size) {
       
  5117         self$$1.classes.add('btn-' + size);
       
  5118       }
       
  5119       if (settings.icon) {
       
  5120         self$$1.icon(settings.icon);
       
  5121       }
       
  5122     },
       
  5123     icon: function (icon) {
       
  5124       if (!arguments.length) {
       
  5125         return this.state.get('icon');
       
  5126       }
       
  5127       this.state.set('icon', icon);
       
  5128       return this;
       
  5129     },
       
  5130     repaint: function () {
       
  5131       var btnElm = this.getEl().firstChild;
       
  5132       var btnStyle;
       
  5133       if (btnElm) {
       
  5134         btnStyle = btnElm.style;
       
  5135         btnStyle.width = btnStyle.height = '100%';
       
  5136       }
       
  5137       this._super();
       
  5138     },
       
  5139     renderHtml: function () {
       
  5140       var self$$1 = this, id = self$$1._id, prefix = self$$1.classPrefix;
       
  5141       var icon = self$$1.state.get('icon'), image;
       
  5142       var text = self$$1.state.get('text');
       
  5143       var textHtml = '';
       
  5144       var ariaPressed;
       
  5145       var settings = self$$1.settings;
       
  5146       image = settings.image;
       
  5147       if (image) {
       
  5148         icon = 'none';
       
  5149         if (typeof image !== 'string') {
       
  5150           image = window.getSelection ? image[0] : image[1];
       
  5151         }
       
  5152         image = ' style="background-image: url(\'' + image + '\')"';
       
  5153       } else {
       
  5154         image = '';
       
  5155       }
       
  5156       if (text) {
       
  5157         self$$1.classes.add('btn-has-text');
       
  5158         textHtml = '<span class="' + prefix + 'txt">' + self$$1.encode(text) + '</span>';
       
  5159       }
       
  5160       icon = icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';
       
  5161       ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed="' + settings.active + '"' : '';
       
  5162       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>';
       
  5163     },
       
  5164     bindStates: function () {
       
  5165       var self$$1 = this, $ = self$$1.$, textCls = self$$1.classPrefix + 'txt';
       
  5166       function setButtonText(text) {
       
  5167         var $span = $('span.' + textCls, self$$1.getEl());
       
  5168         if (text) {
       
  5169           if (!$span[0]) {
       
  5170             $('button:first', self$$1.getEl()).append('<span class="' + textCls + '"></span>');
       
  5171             $span = $('span.' + textCls, self$$1.getEl());
       
  5172           }
       
  5173           $span.html(self$$1.encode(text));
       
  5174         } else {
       
  5175           $span.remove();
       
  5176         }
       
  5177         self$$1.classes.toggle('btn-has-text', !!text);
       
  5178       }
       
  5179       self$$1.state.on('change:text', function (e) {
       
  5180         setButtonText(e.value);
       
  5181       });
       
  5182       self$$1.state.on('change:icon', function (e) {
       
  5183         var icon = e.value;
       
  5184         var prefix = self$$1.classPrefix;
       
  5185         self$$1.settings.icon = icon;
       
  5186         icon = icon ? prefix + 'ico ' + prefix + 'i-' + self$$1.settings.icon : '';
       
  5187         var btnElm = self$$1.getEl().firstChild;
       
  5188         var iconElm = btnElm.getElementsByTagName('i')[0];
       
  5189         if (icon) {
       
  5190           if (!iconElm || iconElm !== btnElm.firstChild) {
       
  5191             iconElm = document.createElement('i');
       
  5192             btnElm.insertBefore(iconElm, btnElm.firstChild);
       
  5193           }
       
  5194           iconElm.className = icon;
       
  5195         } else if (iconElm) {
       
  5196           btnElm.removeChild(iconElm);
       
  5197         }
       
  5198         setButtonText(self$$1.state.get('text'));
       
  5199       });
       
  5200       return self$$1._super();
       
  5201     }
       
  5202   });
       
  5203 
       
  5204   var BrowseButton = Button.extend({
       
  5205     init: function (settings) {
       
  5206       var self = this;
       
  5207       settings = global$4.extend({
       
  5208         text: 'Browse...',
       
  5209         multiple: false,
       
  5210         accept: null
       
  5211       }, settings);
       
  5212       self._super(settings);
       
  5213       self.classes.add('browsebutton');
       
  5214       if (settings.multiple) {
       
  5215         self.classes.add('multiple');
       
  5216       }
       
  5217     },
       
  5218     postRender: function () {
       
  5219       var self = this;
       
  5220       var input = funcs.create('input', {
       
  5221         type: 'file',
       
  5222         id: self._id + '-browse',
       
  5223         accept: self.settings.accept
       
  5224       });
       
  5225       self._super();
       
  5226       global$7(input).on('change', function (e) {
       
  5227         var files = e.target.files;
       
  5228         self.value = function () {
       
  5229           if (!files.length) {
       
  5230             return null;
       
  5231           } else if (self.settings.multiple) {
       
  5232             return files;
       
  5233           } else {
       
  5234             return files[0];
       
  5235           }
       
  5236         };
       
  5237         e.preventDefault();
       
  5238         if (files.length) {
       
  5239           self.fire('change', e);
       
  5240         }
       
  5241       });
       
  5242       global$7(input).on('click', function (e) {
       
  5243         e.stopPropagation();
       
  5244       });
       
  5245       global$7(self.getEl('button')).on('click', function (e) {
       
  5246         e.stopPropagation();
       
  5247         input.click();
       
  5248       });
       
  5249       self.getEl().appendChild(input);
       
  5250     },
       
  5251     remove: function () {
       
  5252       global$7(this.getEl('button')).off();
       
  5253       global$7(this.getEl('input')).off();
       
  5254       this._super();
       
  5255     }
       
  5256   });
       
  5257 
       
  5258   var ButtonGroup = Container.extend({
       
  5259     Defaults: {
       
  5260       defaultType: 'button',
       
  5261       role: 'group'
       
  5262     },
       
  5263     renderHtml: function () {
       
  5264       var self = this, layout = self._layout;
       
  5265       self.classes.add('btn-group');
       
  5266       self.preRender();
       
  5267       layout.preRender(self);
       
  5268       return '<div id="' + self._id + '" class="' + self.classes + '">' + '<div id="' + self._id + '-body">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</div>';
       
  5269     }
       
  5270   });
       
  5271 
       
  5272   var Checkbox = Widget.extend({
       
  5273     Defaults: {
       
  5274       classes: 'checkbox',
       
  5275       role: 'checkbox',
       
  5276       checked: false
       
  5277     },
       
  5278     init: function (settings) {
       
  5279       var self$$1 = this;
       
  5280       self$$1._super(settings);
       
  5281       self$$1.on('click mousedown', function (e) {
       
  5282         e.preventDefault();
       
  5283       });
       
  5284       self$$1.on('click', function (e) {
       
  5285         e.preventDefault();
       
  5286         if (!self$$1.disabled()) {
       
  5287           self$$1.checked(!self$$1.checked());
       
  5288         }
       
  5289       });
       
  5290       self$$1.checked(self$$1.settings.checked);
       
  5291     },
       
  5292     checked: function (state) {
       
  5293       if (!arguments.length) {
       
  5294         return this.state.get('checked');
       
  5295       }
       
  5296       this.state.set('checked', state);
       
  5297       return this;
       
  5298     },
       
  5299     value: function (state) {
       
  5300       if (!arguments.length) {
       
  5301         return this.checked();
       
  5302       }
       
  5303       return this.checked(state);
       
  5304     },
       
  5305     renderHtml: function () {
       
  5306       var self$$1 = this, id = self$$1._id, prefix = self$$1.classPrefix;
       
  5307       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>';
       
  5308     },
       
  5309     bindStates: function () {
       
  5310       var self$$1 = this;
       
  5311       function checked(state) {
       
  5312         self$$1.classes.toggle('checked', state);
       
  5313         self$$1.aria('checked', state);
       
  5314       }
       
  5315       self$$1.state.on('change:text', function (e) {
       
  5316         self$$1.getEl('al').firstChild.data = self$$1.translate(e.value);
       
  5317       });
       
  5318       self$$1.state.on('change:checked change:value', function (e) {
       
  5319         self$$1.fire('change');
       
  5320         checked(e.value);
       
  5321       });
       
  5322       self$$1.state.on('change:icon', function (e) {
       
  5323         var icon = e.value;
       
  5324         var prefix = self$$1.classPrefix;
       
  5325         if (typeof icon === 'undefined') {
       
  5326           return self$$1.settings.icon;
       
  5327         }
       
  5328         self$$1.settings.icon = icon;
       
  5329         icon = icon ? prefix + 'ico ' + prefix + 'i-' + self$$1.settings.icon : '';
       
  5330         var btnElm = self$$1.getEl().firstChild;
       
  5331         var iconElm = btnElm.getElementsByTagName('i')[0];
       
  5332         if (icon) {
       
  5333           if (!iconElm || iconElm !== btnElm.firstChild) {
       
  5334             iconElm = document.createElement('i');
       
  5335             btnElm.insertBefore(iconElm, btnElm.firstChild);
       
  5336           }
       
  5337           iconElm.className = icon;
       
  5338         } else if (iconElm) {
       
  5339           btnElm.removeChild(iconElm);
       
  5340         }
       
  5341       });
       
  5342       if (self$$1.state.get('checked')) {
       
  5343         checked(true);
       
  5344       }
       
  5345       return self$$1._super();
       
  5346     }
       
  5347   });
       
  5348 
       
  5349   var global$15 = tinymce.util.Tools.resolve('tinymce.util.VK');
       
  5350 
       
  5351   var ComboBox = Widget.extend({
       
  5352     init: function (settings) {
       
  5353       var self$$1 = this;
       
  5354       self$$1._super(settings);
       
  5355       settings = self$$1.settings;
       
  5356       self$$1.classes.add('combobox');
       
  5357       self$$1.subinput = true;
       
  5358       self$$1.ariaTarget = 'inp';
       
  5359       settings.menu = settings.menu || settings.values;
       
  5360       if (settings.menu) {
       
  5361         settings.icon = 'caret';
       
  5362       }
       
  5363       self$$1.on('click', function (e) {
       
  5364         var elm = e.target;
       
  5365         var root = self$$1.getEl();
       
  5366         if (!global$7.contains(root, elm) && elm !== root) {
       
  5367           return;
       
  5368         }
       
  5369         while (elm && elm !== root) {
       
  5370           if (elm.id && elm.id.indexOf('-open') !== -1) {
       
  5371             self$$1.fire('action');
       
  5372             if (settings.menu) {
       
  5373               self$$1.showMenu();
       
  5374               if (e.aria) {
       
  5375                 self$$1.menu.items()[0].focus();
       
  5376               }
       
  5377             }
       
  5378           }
       
  5379           elm = elm.parentNode;
       
  5380         }
       
  5381       });
       
  5382       self$$1.on('keydown', function (e) {
       
  5383         var rootControl;
       
  5384         if (e.keyCode === 13 && e.target.nodeName === 'INPUT') {
       
  5385           e.preventDefault();
       
  5386           self$$1.parents().reverse().each(function (ctrl) {
       
  5387             if (ctrl.toJSON) {
       
  5388               rootControl = ctrl;
       
  5389               return false;
       
  5390             }
       
  5391           });
       
  5392           self$$1.fire('submit', { data: rootControl.toJSON() });
       
  5393         }
       
  5394       });
       
  5395       self$$1.on('keyup', function (e) {
       
  5396         if (e.target.nodeName === 'INPUT') {
       
  5397           var oldValue = self$$1.state.get('value');
       
  5398           var newValue = e.target.value;
       
  5399           if (newValue !== oldValue) {
       
  5400             self$$1.state.set('value', newValue);
       
  5401             self$$1.fire('autocomplete', e);
       
  5402           }
       
  5403         }
       
  5404       });
       
  5405       self$$1.on('mouseover', function (e) {
       
  5406         var tooltip = self$$1.tooltip().moveTo(-65535);
       
  5407         if (self$$1.statusLevel() && e.target.className.indexOf(self$$1.classPrefix + 'status') !== -1) {
       
  5408           var statusMessage = self$$1.statusMessage() || 'Ok';
       
  5409           var rel = tooltip.text(statusMessage).show().testMoveRel(e.target, [
       
  5410             'bc-tc',
       
  5411             'bc-tl',
       
  5412             'bc-tr'
       
  5413           ]);
       
  5414           tooltip.classes.toggle('tooltip-n', rel === 'bc-tc');
       
  5415           tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl');
       
  5416           tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr');
       
  5417           tooltip.moveRel(e.target, rel);
       
  5418         }
       
  5419       });
       
  5420     },
       
  5421     statusLevel: function (value) {
       
  5422       if (arguments.length > 0) {
       
  5423         this.state.set('statusLevel', value);
       
  5424       }
       
  5425       return this.state.get('statusLevel');
       
  5426     },
       
  5427     statusMessage: function (value) {
       
  5428       if (arguments.length > 0) {
       
  5429         this.state.set('statusMessage', value);
       
  5430       }
       
  5431       return this.state.get('statusMessage');
       
  5432     },
       
  5433     showMenu: function () {
       
  5434       var self$$1 = this;
       
  5435       var settings = self$$1.settings;
       
  5436       var menu;
       
  5437       if (!self$$1.menu) {
       
  5438         menu = settings.menu || [];
       
  5439         if (menu.length) {
       
  5440           menu = {
       
  5441             type: 'menu',
       
  5442             items: menu
       
  5443           };
       
  5444         } else {
       
  5445           menu.type = menu.type || 'menu';
       
  5446         }
       
  5447         self$$1.menu = global$11.create(menu).parent(self$$1).renderTo(self$$1.getContainerElm());
       
  5448         self$$1.fire('createmenu');
       
  5449         self$$1.menu.reflow();
       
  5450         self$$1.menu.on('cancel', function (e) {
       
  5451           if (e.control === self$$1.menu) {
       
  5452             self$$1.focus();
       
  5453           }
       
  5454         });
       
  5455         self$$1.menu.on('show hide', function (e) {
       
  5456           e.control.items().each(function (ctrl) {
       
  5457             ctrl.active(ctrl.value() === self$$1.value());
       
  5458           });
       
  5459         }).fire('show');
       
  5460         self$$1.menu.on('select', function (e) {
       
  5461           self$$1.value(e.control.value());
       
  5462         });
       
  5463         self$$1.on('focusin', function (e) {
       
  5464           if (e.target.tagName.toUpperCase() === 'INPUT') {
       
  5465             self$$1.menu.hide();
       
  5466           }
       
  5467         });
       
  5468         self$$1.aria('expanded', true);
       
  5469       }
       
  5470       self$$1.menu.show();
       
  5471       self$$1.menu.layoutRect({ w: self$$1.layoutRect().w });
       
  5472       self$$1.menu.moveRel(self$$1.getEl(), self$$1.isRtl() ? [
       
  5473         'br-tr',
       
  5474         'tr-br'
       
  5475       ] : [
       
  5476         'bl-tl',
       
  5477         'tl-bl'
       
  5478       ]);
       
  5479     },
       
  5480     focus: function () {
       
  5481       this.getEl('inp').focus();
       
  5482     },
       
  5483     repaint: function () {
       
  5484       var self$$1 = this, elm = self$$1.getEl(), openElm = self$$1.getEl('open'), rect = self$$1.layoutRect();
       
  5485       var width, lineHeight, innerPadding = 0;
       
  5486       var inputElm = elm.firstChild;
       
  5487       if (self$$1.statusLevel() && self$$1.statusLevel() !== 'none') {
       
  5488         innerPadding = parseInt(funcs.getRuntimeStyle(inputElm, 'padding-right'), 10) - parseInt(funcs.getRuntimeStyle(inputElm, 'padding-left'), 10);
       
  5489       }
       
  5490       if (openElm) {
       
  5491         width = rect.w - funcs.getSize(openElm).width - 10;
       
  5492       } else {
       
  5493         width = rect.w - 10;
       
  5494       }
       
  5495       var doc = document;
       
  5496       if (doc.all && (!doc.documentMode || doc.documentMode <= 8)) {
       
  5497         lineHeight = self$$1.layoutRect().h - 2 + 'px';
       
  5498       }
       
  5499       global$7(inputElm).css({
       
  5500         width: width - innerPadding,
       
  5501         lineHeight: lineHeight
       
  5502       });
       
  5503       self$$1._super();
       
  5504       return self$$1;
       
  5505     },
       
  5506     postRender: function () {
       
  5507       var self$$1 = this;
       
  5508       global$7(this.getEl('inp')).on('change', function (e) {
       
  5509         self$$1.state.set('value', e.target.value);
       
  5510         self$$1.fire('change', e);
       
  5511       });
       
  5512       return self$$1._super();
       
  5513     },
       
  5514     renderHtml: function () {
       
  5515       var self$$1 = this, id = self$$1._id, settings = self$$1.settings, prefix = self$$1.classPrefix;
       
  5516       var value = self$$1.state.get('value') || '';
       
  5517       var icon, text, openBtnHtml = '', extraAttrs = '', statusHtml = '';
       
  5518       if ('spellcheck' in settings) {
       
  5519         extraAttrs += ' spellcheck="' + settings.spellcheck + '"';
       
  5520       }
       
  5521       if (settings.maxLength) {
       
  5522         extraAttrs += ' maxlength="' + settings.maxLength + '"';
       
  5523       }
       
  5524       if (settings.size) {
       
  5525         extraAttrs += ' size="' + settings.size + '"';
       
  5526       }
       
  5527       if (settings.subtype) {
       
  5528         extraAttrs += ' type="' + settings.subtype + '"';
       
  5529       }
       
  5530       statusHtml = '<i id="' + id + '-status" class="mce-status mce-ico" style="display: none"></i>';
       
  5531       if (self$$1.disabled()) {
       
  5532         extraAttrs += ' disabled="disabled"';
       
  5533       }
       
  5534       icon = settings.icon;
       
  5535       if (icon && icon !== 'caret') {
       
  5536         icon = prefix + 'ico ' + prefix + 'i-' + settings.icon;
       
  5537       }
       
  5538       text = self$$1.state.get('text');
       
  5539       if (icon || text) {
       
  5540         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>';
       
  5541         self$$1.classes.add('has-open');
       
  5542       }
       
  5543       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>';
       
  5544     },
       
  5545     value: function (value) {
       
  5546       if (arguments.length) {
       
  5547         this.state.set('value', value);
       
  5548         return this;
       
  5549       }
       
  5550       if (this.state.get('rendered')) {
       
  5551         this.state.set('value', this.getEl('inp').value);
       
  5552       }
       
  5553       return this.state.get('value');
       
  5554     },
       
  5555     showAutoComplete: function (items, term) {
       
  5556       var self$$1 = this;
       
  5557       if (items.length === 0) {
       
  5558         self$$1.hideMenu();
       
  5559         return;
       
  5560       }
       
  5561       var insert = function (value, title) {
       
  5562         return function () {
       
  5563           self$$1.fire('selectitem', {
       
  5564             title: title,
       
  5565             value: value
       
  5566           });
       
  5567         };
       
  5568       };
       
  5569       if (self$$1.menu) {
       
  5570         self$$1.menu.items().remove();
       
  5571       } else {
       
  5572         self$$1.menu = global$11.create({
       
  5573           type: 'menu',
       
  5574           classes: 'combobox-menu',
       
  5575           layout: 'flow'
       
  5576         }).parent(self$$1).renderTo();
       
  5577       }
       
  5578       global$4.each(items, function (item) {
       
  5579         self$$1.menu.add({
       
  5580           text: item.title,
       
  5581           url: item.previewUrl,
       
  5582           match: term,
       
  5583           classes: 'menu-item-ellipsis',
       
  5584           onclick: insert(item.value, item.title)
       
  5585         });
       
  5586       });
       
  5587       self$$1.menu.renderNew();
       
  5588       self$$1.hideMenu();
       
  5589       self$$1.menu.on('cancel', function (e) {
       
  5590         if (e.control.parent() === self$$1.menu) {
       
  5591           e.stopPropagation();
       
  5592           self$$1.focus();
       
  5593           self$$1.hideMenu();
       
  5594         }
       
  5595       });
       
  5596       self$$1.menu.on('select', function () {
       
  5597         self$$1.focus();
       
  5598       });
       
  5599       var maxW = self$$1.layoutRect().w;
       
  5600       self$$1.menu.layoutRect({
       
  5601         w: maxW,
       
  5602         minW: 0,
       
  5603         maxW: maxW
       
  5604       });
       
  5605       self$$1.menu.repaint();
       
  5606       self$$1.menu.reflow();
       
  5607       self$$1.menu.show();
       
  5608       self$$1.menu.moveRel(self$$1.getEl(), self$$1.isRtl() ? [
       
  5609         'br-tr',
       
  5610         'tr-br'
       
  5611       ] : [
       
  5612         'bl-tl',
       
  5613         'tl-bl'
       
  5614       ]);
       
  5615     },
       
  5616     hideMenu: function () {
       
  5617       if (this.menu) {
       
  5618         this.menu.hide();
       
  5619       }
       
  5620     },
       
  5621     bindStates: function () {
       
  5622       var self$$1 = this;
       
  5623       self$$1.state.on('change:value', function (e) {
       
  5624         if (self$$1.getEl('inp').value !== e.value) {
       
  5625           self$$1.getEl('inp').value = e.value;
       
  5626         }
       
  5627       });
       
  5628       self$$1.state.on('change:disabled', function (e) {
       
  5629         self$$1.getEl('inp').disabled = e.value;
       
  5630       });
       
  5631       self$$1.state.on('change:statusLevel', function (e) {
       
  5632         var statusIconElm = self$$1.getEl('status');
       
  5633         var prefix = self$$1.classPrefix, value = e.value;
       
  5634         funcs.css(statusIconElm, 'display', value === 'none' ? 'none' : '');
       
  5635         funcs.toggleClass(statusIconElm, prefix + 'i-checkmark', value === 'ok');
       
  5636         funcs.toggleClass(statusIconElm, prefix + 'i-warning', value === 'warn');
       
  5637         funcs.toggleClass(statusIconElm, prefix + 'i-error', value === 'error');
       
  5638         self$$1.classes.toggle('has-status', value !== 'none');
       
  5639         self$$1.repaint();
       
  5640       });
       
  5641       funcs.on(self$$1.getEl('status'), 'mouseleave', function () {
       
  5642         self$$1.tooltip().hide();
       
  5643       });
       
  5644       self$$1.on('cancel', function (e) {
       
  5645         if (self$$1.menu && self$$1.menu.visible()) {
       
  5646           e.stopPropagation();
       
  5647           self$$1.hideMenu();
       
  5648         }
       
  5649       });
       
  5650       var focusIdx = function (idx, menu) {
       
  5651         if (menu && menu.items().length > 0) {
       
  5652           menu.items().eq(idx)[0].focus();
       
  5653         }
       
  5654       };
       
  5655       self$$1.on('keydown', function (e) {
       
  5656         var keyCode = e.keyCode;
       
  5657         if (e.target.nodeName === 'INPUT') {
       
  5658           if (keyCode === global$15.DOWN) {
       
  5659             e.preventDefault();
       
  5660             self$$1.fire('autocomplete');
       
  5661             focusIdx(0, self$$1.menu);
       
  5662           } else if (keyCode === global$15.UP) {
       
  5663             e.preventDefault();
       
  5664             focusIdx(-1, self$$1.menu);
       
  5665           }
       
  5666         }
       
  5667       });
       
  5668       return self$$1._super();
       
  5669     },
       
  5670     remove: function () {
       
  5671       global$7(this.getEl('inp')).off();
       
  5672       if (this.menu) {
       
  5673         this.menu.remove();
       
  5674       }
       
  5675       this._super();
       
  5676     }
       
  5677   });
       
  5678 
       
  5679   var ColorBox = ComboBox.extend({
       
  5680     init: function (settings) {
       
  5681       var self = this;
       
  5682       settings.spellcheck = false;
       
  5683       if (settings.onaction) {
       
  5684         settings.icon = 'none';
       
  5685       }
       
  5686       self._super(settings);
       
  5687       self.classes.add('colorbox');
       
  5688       self.on('change keyup postrender', function () {
       
  5689         self.repaintColor(self.value());
       
  5690       });
       
  5691     },
       
  5692     repaintColor: function (value) {
       
  5693       var openElm = this.getEl('open');
       
  5694       var elm = openElm ? openElm.getElementsByTagName('i')[0] : null;
       
  5695       if (elm) {
       
  5696         try {
       
  5697           elm.style.background = value;
       
  5698         } catch (ex) {
       
  5699         }
       
  5700       }
       
  5701     },
       
  5702     bindStates: function () {
       
  5703       var self = this;
       
  5704       self.state.on('change:value', function (e) {
       
  5705         if (self.state.get('rendered')) {
       
  5706           self.repaintColor(e.value);
       
  5707         }
       
  5708       });
       
  5709       return self._super();
       
  5710     }
       
  5711   });
       
  5712 
       
  5713   var PanelButton = Button.extend({
       
  5714     showPanel: function () {
       
  5715       var self = this, settings = self.settings;
       
  5716       self.classes.add('opened');
       
  5717       if (!self.panel) {
       
  5718         var panelSettings = settings.panel;
       
  5719         if (panelSettings.type) {
       
  5720           panelSettings = {
       
  5721             layout: 'grid',
       
  5722             items: panelSettings
       
  5723           };
       
  5724         }
       
  5725         panelSettings.role = panelSettings.role || 'dialog';
       
  5726         panelSettings.popover = true;
       
  5727         panelSettings.autohide = true;
       
  5728         panelSettings.ariaRoot = true;
       
  5729         self.panel = new FloatPanel(panelSettings).on('hide', function () {
       
  5730           self.classes.remove('opened');
       
  5731         }).on('cancel', function (e) {
       
  5732           e.stopPropagation();
       
  5733           self.focus();
       
  5734           self.hidePanel();
       
  5735         }).parent(self).renderTo(self.getContainerElm());
       
  5736         self.panel.fire('show');
       
  5737         self.panel.reflow();
       
  5738       } else {
       
  5739         self.panel.show();
       
  5740       }
       
  5741       var rtlRels = [
       
  5742         'bc-tc',
       
  5743         'bc-tl',
       
  5744         'bc-tr'
       
  5745       ];
       
  5746       var ltrRels = [
       
  5747         'bc-tc',
       
  5748         'bc-tr',
       
  5749         'bc-tl',
       
  5750         'tc-bc',
       
  5751         'tc-br',
       
  5752         'tc-bl'
       
  5753       ];
       
  5754       var rel = self.panel.testMoveRel(self.getEl(), settings.popoverAlign || (self.isRtl() ? rtlRels : ltrRels));
       
  5755       self.panel.classes.toggle('start', rel.substr(-1) === 'l');
       
  5756       self.panel.classes.toggle('end', rel.substr(-1) === 'r');
       
  5757       var isTop = rel.substr(0, 1) === 't';
       
  5758       self.panel.classes.toggle('bottom', !isTop);
       
  5759       self.panel.classes.toggle('top', isTop);
       
  5760       self.panel.moveRel(self.getEl(), rel);
       
  5761     },
       
  5762     hidePanel: function () {
       
  5763       var self = this;
       
  5764       if (self.panel) {
       
  5765         self.panel.hide();
       
  5766       }
       
  5767     },
       
  5768     postRender: function () {
       
  5769       var self = this;
       
  5770       self.aria('haspopup', true);
       
  5771       self.on('click', function (e) {
       
  5772         if (e.control === self) {
       
  5773           if (self.panel && self.panel.visible()) {
       
  5774             self.hidePanel();
       
  5775           } else {
       
  5776             self.showPanel();
       
  5777             self.panel.focus(!!e.aria);
       
  5778           }
       
  5779         }
       
  5780       });
       
  5781       return self._super();
       
  5782     },
       
  5783     remove: function () {
       
  5784       if (this.panel) {
       
  5785         this.panel.remove();
       
  5786         this.panel = null;
       
  5787       }
       
  5788       return this._super();
       
  5789     }
       
  5790   });
       
  5791 
       
  5792   var DOM = global$2.DOM;
       
  5793   var ColorButton = PanelButton.extend({
       
  5794     init: function (settings) {
       
  5795       this._super(settings);
       
  5796       this.classes.add('splitbtn');
       
  5797       this.classes.add('colorbutton');
       
  5798     },
       
  5799     color: function (color) {
       
  5800       if (color) {
       
  5801         this._color = color;
       
  5802         this.getEl('preview').style.backgroundColor = color;
       
  5803         return this;
       
  5804       }
       
  5805       return this._color;
       
  5806     },
       
  5807     resetColor: function () {
       
  5808       this._color = null;
       
  5809       this.getEl('preview').style.backgroundColor = null;
       
  5810       return this;
       
  5811     },
       
  5812     renderHtml: function () {
       
  5813       var self = this, id = self._id, prefix = self.classPrefix, text = self.state.get('text');
       
  5814       var icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';
       
  5815       var image = self.settings.image ? ' style="background-image: url(\'' + self.settings.image + '\')"' : '';
       
  5816       var textHtml = '';
       
  5817       if (text) {
       
  5818         self.classes.add('btn-has-text');
       
  5819         textHtml = '<span class="' + prefix + 'txt">' + self.encode(text) + '</span>';
       
  5820       }
       
  5821       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>';
       
  5822     },
       
  5823     postRender: function () {
       
  5824       var self = this, onClickHandler = self.settings.onclick;
       
  5825       self.on('click', function (e) {
       
  5826         if (e.aria && e.aria.key === 'down') {
       
  5827           return;
       
  5828         }
       
  5829         if (e.control === self && !DOM.getParent(e.target, '.' + self.classPrefix + 'open')) {
       
  5830           e.stopImmediatePropagation();
       
  5831           onClickHandler.call(self, e);
       
  5832         }
       
  5833       });
       
  5834       delete self.settings.onclick;
       
  5835       return self._super();
       
  5836     }
       
  5837   });
       
  5838 
       
  5839   var global$16 = tinymce.util.Tools.resolve('tinymce.util.Color');
       
  5840 
       
  5841   var ColorPicker = Widget.extend({
       
  5842     Defaults: { classes: 'widget colorpicker' },
       
  5843     init: function (settings) {
       
  5844       this._super(settings);
       
  5845     },
       
  5846     postRender: function () {
       
  5847       var self = this;
       
  5848       var color = self.color();
       
  5849       var hsv, hueRootElm, huePointElm, svRootElm, svPointElm;
       
  5850       hueRootElm = self.getEl('h');
       
  5851       huePointElm = self.getEl('hp');
       
  5852       svRootElm = self.getEl('sv');
       
  5853       svPointElm = self.getEl('svp');
       
  5854       function getPos(elm, event) {
       
  5855         var pos = funcs.getPos(elm);
       
  5856         var x, y;
       
  5857         x = event.pageX - pos.x;
       
  5858         y = event.pageY - pos.y;
       
  5859         x = Math.max(0, Math.min(x / elm.clientWidth, 1));
       
  5860         y = Math.max(0, Math.min(y / elm.clientHeight, 1));
       
  5861         return {
       
  5862           x: x,
       
  5863           y: y
       
  5864         };
       
  5865       }
       
  5866       function updateColor(hsv, hueUpdate) {
       
  5867         var hue = (360 - hsv.h) / 360;
       
  5868         funcs.css(huePointElm, { top: hue * 100 + '%' });
       
  5869         if (!hueUpdate) {
       
  5870           funcs.css(svPointElm, {
       
  5871             left: hsv.s + '%',
       
  5872             top: 100 - hsv.v + '%'
       
  5873           });
       
  5874         }
       
  5875         svRootElm.style.background = global$16({
       
  5876           s: 100,
       
  5877           v: 100,
       
  5878           h: hsv.h
       
  5879         }).toHex();
       
  5880         self.color().parse({
       
  5881           s: hsv.s,
       
  5882           v: hsv.v,
       
  5883           h: hsv.h
       
  5884         });
       
  5885       }
       
  5886       function updateSaturationAndValue(e) {
       
  5887         var pos;
       
  5888         pos = getPos(svRootElm, e);
       
  5889         hsv.s = pos.x * 100;
       
  5890         hsv.v = (1 - pos.y) * 100;
       
  5891         updateColor(hsv);
       
  5892         self.fire('change');
       
  5893       }
       
  5894       function updateHue(e) {
       
  5895         var pos;
       
  5896         pos = getPos(hueRootElm, e);
       
  5897         hsv = color.toHsv();
       
  5898         hsv.h = (1 - pos.y) * 360;
       
  5899         updateColor(hsv, true);
       
  5900         self.fire('change');
       
  5901       }
       
  5902       self._repaint = function () {
       
  5903         hsv = color.toHsv();
       
  5904         updateColor(hsv);
       
  5905       };
       
  5906       self._super();
       
  5907       self._svdraghelper = new DragHelper(self._id + '-sv', {
       
  5908         start: updateSaturationAndValue,
       
  5909         drag: updateSaturationAndValue
       
  5910       });
       
  5911       self._hdraghelper = new DragHelper(self._id + '-h', {
       
  5912         start: updateHue,
       
  5913         drag: updateHue
       
  5914       });
       
  5915       self._repaint();
       
  5916     },
       
  5917     rgb: function () {
       
  5918       return this.color().toRgb();
       
  5919     },
       
  5920     value: function (value) {
       
  5921       var self = this;
       
  5922       if (arguments.length) {
       
  5923         self.color().parse(value);
       
  5924         if (self._rendered) {
       
  5925           self._repaint();
       
  5926         }
       
  5927       } else {
       
  5928         return self.color().toHex();
       
  5929       }
       
  5930     },
       
  5931     color: function () {
       
  5932       if (!this._color) {
       
  5933         this._color = global$16();
       
  5934       }
       
  5935       return this._color;
       
  5936     },
       
  5937     renderHtml: function () {
       
  5938       var self = this;
       
  5939       var id = self._id;
       
  5940       var prefix = self.classPrefix;
       
  5941       var hueHtml;
       
  5942       var stops = '#ff0000,#ff0080,#ff00ff,#8000ff,#0000ff,#0080ff,#00ffff,#00ff80,#00ff00,#80ff00,#ffff00,#ff8000,#ff0000';
       
  5943       function getOldIeFallbackHtml() {
       
  5944         var i, l, html = '', gradientPrefix, stopsList;
       
  5945         gradientPrefix = 'filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=';
       
  5946         stopsList = stops.split(',');
       
  5947         for (i = 0, l = stopsList.length - 1; i < l; i++) {
       
  5948           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>';
       
  5949         }
       
  5950         return html;
       
  5951       }
       
  5952       var gradientCssText = 'background: -ms-linear-gradient(top,' + stops + ');' + 'background: linear-gradient(to bottom,' + stops + ');';
       
  5953       hueHtml = '<div id="' + id + '-h" class="' + prefix + 'colorpicker-h" style="' + gradientCssText + '">' + getOldIeFallbackHtml() + '<div id="' + id + '-hp" class="' + prefix + 'colorpicker-h-marker"></div>' + '</div>';
       
  5954       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>';
       
  5955     }
       
  5956   });
       
  5957 
       
  5958   var DropZone = Widget.extend({
       
  5959     init: function (settings) {
       
  5960       var self = this;
       
  5961       settings = global$4.extend({
       
  5962         height: 100,
       
  5963         text: 'Drop an image here',
       
  5964         multiple: false,
       
  5965         accept: null
       
  5966       }, settings);
       
  5967       self._super(settings);
       
  5968       self.classes.add('dropzone');
       
  5969       if (settings.multiple) {
       
  5970         self.classes.add('multiple');
       
  5971       }
       
  5972     },
       
  5973     renderHtml: function () {
       
  5974       var self = this;
       
  5975       var attrs, elm;
       
  5976       var cfg = self.settings;
       
  5977       attrs = {
       
  5978         id: self._id,
       
  5979         hidefocus: '1'
       
  5980       };
       
  5981       elm = funcs.create('div', attrs, '<span>' + this.translate(cfg.text) + '</span>');
       
  5982       if (cfg.height) {
       
  5983         funcs.css(elm, 'height', cfg.height + 'px');
       
  5984       }
       
  5985       if (cfg.width) {
       
  5986         funcs.css(elm, 'width', cfg.width + 'px');
       
  5987       }
       
  5988       elm.className = self.classes;
       
  5989       return elm.outerHTML;
       
  5990     },
       
  5991     postRender: function () {
       
  5992       var self = this;
       
  5993       var toggleDragClass = function (e) {
       
  5994         e.preventDefault();
       
  5995         self.classes.toggle('dragenter');
       
  5996         self.getEl().className = self.classes;
       
  5997       };
       
  5998       var filter = function (files) {
       
  5999         var accept = self.settings.accept;
       
  6000         if (typeof accept !== 'string') {
       
  6001           return files;
       
  6002         }
       
  6003         var re = new RegExp('(' + accept.split(/\s*,\s*/).join('|') + ')$', 'i');
       
  6004         return global$4.grep(files, function (file) {
       
  6005           return re.test(file.name);
       
  6006         });
       
  6007       };
       
  6008       self._super();
       
  6009       self.$el.on('dragover', function (e) {
       
  6010         e.preventDefault();
       
  6011       });
       
  6012       self.$el.on('dragenter', toggleDragClass);
       
  6013       self.$el.on('dragleave', toggleDragClass);
       
  6014       self.$el.on('drop', function (e) {
       
  6015         e.preventDefault();
       
  6016         if (self.state.get('disabled')) {
       
  6017           return;
       
  6018         }
       
  6019         var files = filter(e.dataTransfer.files);
       
  6020         self.value = function () {
       
  6021           if (!files.length) {
       
  6022             return null;
       
  6023           } else if (self.settings.multiple) {
       
  6024             return files;
       
  6025           } else {
       
  6026             return files[0];
       
  6027           }
       
  6028         };
       
  6029         if (files.length) {
       
  6030           self.fire('change', e);
       
  6031         }
       
  6032       });
       
  6033     },
       
  6034     remove: function () {
       
  6035       this.$el.off();
       
  6036       this._super();
       
  6037     }
       
  6038   });
       
  6039 
       
  6040   var Path = Widget.extend({
       
  6041     init: function (settings) {
       
  6042       var self = this;
       
  6043       if (!settings.delimiter) {
       
  6044         settings.delimiter = '\xBB';
       
  6045       }
       
  6046       self._super(settings);
       
  6047       self.classes.add('path');
       
  6048       self.canFocus = true;
       
  6049       self.on('click', function (e) {
       
  6050         var index;
       
  6051         var target = e.target;
       
  6052         if (index = target.getAttribute('data-index')) {
       
  6053           self.fire('select', {
       
  6054             value: self.row()[index],
       
  6055             index: index
       
  6056           });
       
  6057         }
       
  6058       });
       
  6059       self.row(self.settings.row);
       
  6060     },
       
  6061     focus: function () {
       
  6062       var self = this;
       
  6063       self.getEl().firstChild.focus();
       
  6064       return self;
       
  6065     },
       
  6066     row: function (row) {
       
  6067       if (!arguments.length) {
       
  6068         return this.state.get('row');
       
  6069       }
       
  6070       this.state.set('row', row);
       
  6071       return this;
       
  6072     },
       
  6073     renderHtml: function () {
       
  6074       var self = this;
       
  6075       return '<div id="' + self._id + '" class="' + self.classes + '">' + self._getDataPathHtml(self.state.get('row')) + '</div>';
       
  6076     },
       
  6077     bindStates: function () {
       
  6078       var self = this;
       
  6079       self.state.on('change:row', function (e) {
       
  6080         self.innerHtml(self._getDataPathHtml(e.value));
       
  6081       });
       
  6082       return self._super();
       
  6083     },
       
  6084     _getDataPathHtml: function (data) {
       
  6085       var self = this;
       
  6086       var parts = data || [];
       
  6087       var i, l, html = '';
       
  6088       var prefix = self.classPrefix;
       
  6089       for (i = 0, l = parts.length; i < l; i++) {
       
  6090         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>';
       
  6091       }
       
  6092       if (!html) {
       
  6093         html = '<div class="' + prefix + 'path-item">\xA0</div>';
       
  6094       }
       
  6095       return html;
       
  6096     }
       
  6097   });
       
  6098 
       
  6099   var ElementPath = Path.extend({
       
  6100     postRender: function () {
       
  6101       var self = this, editor = self.settings.editor;
       
  6102       function isHidden(elm) {
       
  6103         if (elm.nodeType === 1) {
       
  6104           if (elm.nodeName === 'BR' || !!elm.getAttribute('data-mce-bogus')) {
       
  6105             return true;
       
  6106           }
       
  6107           if (elm.getAttribute('data-mce-type') === 'bookmark') {
       
  6108             return true;
       
  6109           }
       
  6110         }
       
  6111         return false;
       
  6112       }
       
  6113       if (editor.settings.elementpath !== false) {
       
  6114         self.on('select', function (e) {
       
  6115           editor.focus();
       
  6116           editor.selection.select(this.row()[e.index].element);
       
  6117           editor.nodeChanged();
       
  6118         });
       
  6119         editor.on('nodeChange', function (e) {
       
  6120           var outParents = [];
       
  6121           var parents = e.parents;
       
  6122           var i = parents.length;
       
  6123           while (i--) {
       
  6124             if (parents[i].nodeType === 1 && !isHidden(parents[i])) {
       
  6125               var args = editor.fire('ResolveName', {
       
  6126                 name: parents[i].nodeName.toLowerCase(),
       
  6127                 target: parents[i]
       
  6128               });
       
  6129               if (!args.isDefaultPrevented()) {
       
  6130                 outParents.push({
       
  6131                   name: args.name,
       
  6132                   element: parents[i]
       
  6133                 });
       
  6134               }
       
  6135               if (args.isPropagationStopped()) {
       
  6136                 break;
       
  6137               }
       
  6138             }
       
  6139           }
       
  6140           self.row(outParents);
       
  6141         });
       
  6142       }
       
  6143       return self._super();
       
  6144     }
       
  6145   });
       
  6146 
       
  6147   var FormItem = Container.extend({
       
  6148     Defaults: {
       
  6149       layout: 'flex',
       
  6150       align: 'center',
       
  6151       defaults: { flex: 1 }
       
  6152     },
       
  6153     renderHtml: function () {
       
  6154       var self = this, layout = self._layout, prefix = self.classPrefix;
       
  6155       self.classes.add('formitem');
       
  6156       layout.preRender(self);
       
  6157       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>';
       
  6158     }
       
  6159   });
       
  6160 
       
  6161   var Form = Container.extend({
       
  6162     Defaults: {
       
  6163       containerCls: 'form',
       
  6164       layout: 'flex',
       
  6165       direction: 'column',
       
  6166       align: 'stretch',
       
  6167       flex: 1,
       
  6168       padding: 15,
       
  6169       labelGap: 30,
       
  6170       spacing: 10,
       
  6171       callbacks: {
       
  6172         submit: function () {
       
  6173           this.submit();
       
  6174         }
       
  6175       }
       
  6176     },
       
  6177     preRender: function () {
       
  6178       var self = this, items = self.items();
       
  6179       if (!self.settings.formItemDefaults) {
       
  6180         self.settings.formItemDefaults = {
       
  6181           layout: 'flex',
       
  6182           autoResize: 'overflow',
       
  6183           defaults: { flex: 1 }
       
  6184         };
       
  6185       }
       
  6186       items.each(function (ctrl) {
       
  6187         var formItem;
       
  6188         var label = ctrl.settings.label;
       
  6189         if (label) {
       
  6190           formItem = new FormItem(global$4.extend({
       
  6191             items: {
       
  6192               type: 'label',
       
  6193               id: ctrl._id + '-l',
       
  6194               text: label,
       
  6195               flex: 0,
       
  6196               forId: ctrl._id,
       
  6197               disabled: ctrl.disabled()
       
  6198             }
       
  6199           }, self.settings.formItemDefaults));
       
  6200           formItem.type = 'formitem';
       
  6201           ctrl.aria('labelledby', ctrl._id + '-l');
       
  6202           if (typeof ctrl.settings.flex === 'undefined') {
       
  6203             ctrl.settings.flex = 1;
       
  6204           }
       
  6205           self.replace(ctrl, formItem);
       
  6206           formItem.add(ctrl);
       
  6207         }
       
  6208       });
       
  6209     },
       
  6210     submit: function () {
       
  6211       return this.fire('submit', { data: this.toJSON() });
       
  6212     },
       
  6213     postRender: function () {
       
  6214       var self = this;
       
  6215       self._super();
       
  6216       self.fromJSON(self.settings.data);
       
  6217     },
       
  6218     bindStates: function () {
       
  6219       var self = this;
       
  6220       self._super();
       
  6221       function recalcLabels() {
       
  6222         var maxLabelWidth = 0;
       
  6223         var labels = [];
       
  6224         var i, labelGap, items;
       
  6225         if (self.settings.labelGapCalc === false) {
       
  6226           return;
       
  6227         }
       
  6228         if (self.settings.labelGapCalc === 'children') {
       
  6229           items = self.find('formitem');
       
  6230         } else {
       
  6231           items = self.items();
       
  6232         }
       
  6233         items.filter('formitem').each(function (item) {
       
  6234           var labelCtrl = item.items()[0], labelWidth = labelCtrl.getEl().clientWidth;
       
  6235           maxLabelWidth = labelWidth > maxLabelWidth ? labelWidth : maxLabelWidth;
       
  6236           labels.push(labelCtrl);
       
  6237         });
       
  6238         labelGap = self.settings.labelGap || 0;
       
  6239         i = labels.length;
       
  6240         while (i--) {
       
  6241           labels[i].settings.minWidth = maxLabelWidth + labelGap;
       
  6242         }
       
  6243       }
       
  6244       self.on('show', recalcLabels);
       
  6245       recalcLabels();
       
  6246     }
       
  6247   });
       
  6248 
       
  6249   var FieldSet = Form.extend({
       
  6250     Defaults: {
       
  6251       containerCls: 'fieldset',
       
  6252       layout: 'flex',
       
  6253       direction: 'column',
       
  6254       align: 'stretch',
       
  6255       flex: 1,
       
  6256       padding: '25 15 5 15',
       
  6257       labelGap: 30,
       
  6258       spacing: 10,
       
  6259       border: 1
       
  6260     },
       
  6261     renderHtml: function () {
       
  6262       var self = this, layout = self._layout, prefix = self.classPrefix;
       
  6263       self.preRender();
       
  6264       layout.preRender(self);
       
  6265       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>';
       
  6266     }
       
  6267   });
       
  6268 
       
  6269   var unique$1 = 0;
       
  6270   var generate = function (prefix) {
       
  6271     var date = new Date();
       
  6272     var time = date.getTime();
       
  6273     var random = Math.floor(Math.random() * 1000000000);
       
  6274     unique$1++;
       
  6275     return prefix + '_' + random + unique$1 + String(time);
       
  6276   };
       
  6277 
       
  6278   var fromHtml = function (html, scope) {
       
  6279     var doc = scope || document;
       
  6280     var div = doc.createElement('div');
       
  6281     div.innerHTML = html;
       
  6282     if (!div.hasChildNodes() || div.childNodes.length > 1) {
       
  6283       console.error('HTML does not have a single root node', html);
       
  6284       throw 'HTML must have a single root node';
       
  6285     }
       
  6286     return fromDom(div.childNodes[0]);
       
  6287   };
       
  6288   var fromTag = function (tag, scope) {
       
  6289     var doc = scope || document;
       
  6290     var node = doc.createElement(tag);
       
  6291     return fromDom(node);
       
  6292   };
       
  6293   var fromText = function (text, scope) {
       
  6294     var doc = scope || document;
       
  6295     var node = doc.createTextNode(text);
       
  6296     return fromDom(node);
       
  6297   };
       
  6298   var fromDom = function (node) {
       
  6299     if (node === null || node === undefined)
       
  6300       throw new Error('Node cannot be null or undefined');
       
  6301     return { dom: constant(node) };
       
  6302   };
       
  6303   var fromPoint = function (docElm, x, y) {
       
  6304     var doc = docElm.dom();
       
  6305     return Option.from(doc.elementFromPoint(x, y)).map(fromDom);
       
  6306   };
       
  6307   var Element$$1 = {
       
  6308     fromHtml: fromHtml,
       
  6309     fromTag: fromTag,
       
  6310     fromText: fromText,
       
  6311     fromDom: fromDom,
       
  6312     fromPoint: fromPoint
       
  6313   };
       
  6314 
       
  6315   var cached = function (f) {
       
  6316     var called = false;
       
  6317     var r;
       
  6318     return function () {
       
  6319       var args = [];
       
  6320       for (var _i = 0; _i < arguments.length; _i++) {
       
  6321         args[_i] = arguments[_i];
       
  6322       }
       
  6323       if (!called) {
       
  6324         called = true;
       
  6325         r = f.apply(null, args);
       
  6326       }
       
  6327       return r;
       
  6328     };
       
  6329   };
       
  6330 
       
  6331   var $_2jrgnk1apjjgwek8y = {
       
  6332     ATTRIBUTE: Node.ATTRIBUTE_NODE,
       
  6333     CDATA_SECTION: Node.CDATA_SECTION_NODE,
       
  6334     COMMENT: Node.COMMENT_NODE,
       
  6335     DOCUMENT: Node.DOCUMENT_NODE,
       
  6336     DOCUMENT_TYPE: Node.DOCUMENT_TYPE_NODE,
       
  6337     DOCUMENT_FRAGMENT: Node.DOCUMENT_FRAGMENT_NODE,
       
  6338     ELEMENT: Node.ELEMENT_NODE,
       
  6339     TEXT: Node.TEXT_NODE,
       
  6340     PROCESSING_INSTRUCTION: Node.PROCESSING_INSTRUCTION_NODE,
       
  6341     ENTITY_REFERENCE: Node.ENTITY_REFERENCE_NODE,
       
  6342     ENTITY: Node.ENTITY_NODE,
       
  6343     NOTATION: Node.NOTATION_NODE
       
  6344   };
       
  6345 
       
  6346   var name = function (element) {
       
  6347     var r = element.dom().nodeName;
       
  6348     return r.toLowerCase();
       
  6349   };
       
  6350   var type = function (element) {
       
  6351     return element.dom().nodeType;
       
  6352   };
       
  6353   var value = function (element) {
       
  6354     return element.dom().nodeValue;
       
  6355   };
       
  6356   var isType$2 = function (t) {
       
  6357     return function (element) {
       
  6358       return type(element) === t;
       
  6359     };
       
  6360   };
       
  6361   var isComment = function (element) {
       
  6362     return type(element) === $_2jrgnk1apjjgwek8y.COMMENT || name(element) === '#comment';
       
  6363   };
       
  6364   var isElement = isType$2($_2jrgnk1apjjgwek8y.ELEMENT);
       
  6365   var isText = isType$2($_2jrgnk1apjjgwek8y.TEXT);
       
  6366   var isDocument = isType$2($_2jrgnk1apjjgwek8y.DOCUMENT);
       
  6367   var $_fv3as1aojjgwek8x = {
       
  6368     name: name,
       
  6369     type: type,
       
  6370     value: value,
       
  6371     isElement: isElement,
       
  6372     isText: isText,
       
  6373     isDocument: isDocument,
       
  6374     isComment: isComment
       
  6375   };
       
  6376 
       
  6377   var inBody = function (element) {
       
  6378     var dom = $_fv3as1aojjgwek8x.isText(element) ? element.dom().parentNode : element.dom();
       
  6379     return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);
       
  6380   };
       
  6381   var body = cached(function () {
       
  6382     return getBody(Element$$1.fromDom(document));
       
  6383   });
       
  6384   var getBody = function (doc) {
       
  6385     var body = doc.dom().body;
       
  6386     if (body === null || body === undefined)
       
  6387       throw 'Body is not available yet';
       
  6388     return Element$$1.fromDom(body);
       
  6389   };
       
  6390   var $_d2glpe1amjjgwek8t = {
       
  6391     body: body,
       
  6392     getBody: getBody,
       
  6393     inBody: inBody
       
  6394   };
       
  6395 
       
  6396   var Immutable = function () {
       
  6397     var fields = [];
       
  6398     for (var _i = 0; _i < arguments.length; _i++) {
       
  6399       fields[_i] = arguments[_i];
       
  6400     }
       
  6401     return function () {
       
  6402       var values = [];
       
  6403       for (var _i = 0; _i < arguments.length; _i++) {
       
  6404         values[_i] = arguments[_i];
       
  6405       }
       
  6406       if (fields.length !== values.length) {
       
  6407         throw new Error('Wrong number of arguments to struct. Expected "[' + fields.length + ']", got ' + values.length + ' arguments');
       
  6408       }
       
  6409       var struct = {};
       
  6410       each(fields, function (name, i) {
       
  6411         struct[name] = constant(values[i]);
       
  6412       });
       
  6413       return struct;
       
  6414     };
       
  6415   };
       
  6416 
       
  6417   var toArray = function (target, f) {
       
  6418     var r = [];
       
  6419     var recurse = function (e) {
       
  6420       r.push(e);
       
  6421       return f(e);
       
  6422     };
       
  6423     var cur = f(target);
       
  6424     do {
       
  6425       cur = cur.bind(recurse);
       
  6426     } while (cur.isSome());
       
  6427     return r;
       
  6428   };
       
  6429   var $_607sf01awjjgweka0 = { toArray: toArray };
       
  6430 
       
  6431   var node = function () {
       
  6432     var f = $_8wnjhx19gjjgwek54.getOrDie('Node');
       
  6433     return f;
       
  6434   };
       
  6435   var compareDocumentPosition = function (a, b, match) {
       
  6436     return (a.compareDocumentPosition(b) & match) !== 0;
       
  6437   };
       
  6438   var documentPositionPreceding = function (a, b) {
       
  6439     return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);
       
  6440   };
       
  6441   var documentPositionContainedBy = function (a, b) {
       
  6442     return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);
       
  6443   };
       
  6444   var $_d0o64o1ayjjgwekaa = {
       
  6445     documentPositionPreceding: documentPositionPreceding,
       
  6446     documentPositionContainedBy: documentPositionContainedBy
       
  6447   };
       
  6448 
       
  6449   var firstMatch = function (regexes, s) {
       
  6450     for (var i = 0; i < regexes.length; i++) {
       
  6451       var x = regexes[i];
       
  6452       if (x.test(s))
       
  6453         return x;
       
  6454     }
       
  6455     return undefined;
       
  6456   };
       
  6457   var find$2 = function (regexes, agent) {
       
  6458     var r = firstMatch(regexes, agent);
       
  6459     if (!r)
       
  6460       return {
       
  6461         major: 0,
       
  6462         minor: 0
       
  6463       };
       
  6464     var group = function (i) {
       
  6465       return Number(agent.replace(r, '$' + i));
       
  6466     };
       
  6467     return nu(group(1), group(2));
       
  6468   };
       
  6469   var detect = function (versionRegexes, agent) {
       
  6470     var cleanedAgent = String(agent).toLowerCase();
       
  6471     if (versionRegexes.length === 0)
       
  6472       return unknown();
       
  6473     return find$2(versionRegexes, cleanedAgent);
       
  6474   };
       
  6475   var unknown = function () {
       
  6476     return nu(0, 0);
       
  6477   };
       
  6478   var nu = function (major, minor) {
       
  6479     return {
       
  6480       major: major,
       
  6481       minor: minor
       
  6482     };
       
  6483   };
       
  6484   var $_bhlk9t1b2jjgwekaq = {
       
  6485     nu: nu,
       
  6486     detect: detect,
       
  6487     unknown: unknown
       
  6488   };
       
  6489 
       
  6490   var edge = 'Edge';
       
  6491   var chrome = 'Chrome';
       
  6492   var ie = 'IE';
       
  6493   var opera = 'Opera';
       
  6494   var firefox = 'Firefox';
       
  6495   var safari = 'Safari';
       
  6496   var isBrowser = function (name, current) {
       
  6497     return function () {
       
  6498       return current === name;
       
  6499     };
       
  6500   };
       
  6501   var unknown$1 = function () {
       
  6502     return nu$1({
       
  6503       current: undefined,
       
  6504       version: $_bhlk9t1b2jjgwekaq.unknown()
       
  6505     });
       
  6506   };
       
  6507   var nu$1 = function (info) {
       
  6508     var current = info.current;
       
  6509     var version = info.version;
       
  6510     return {
       
  6511       current: current,
       
  6512       version: version,
       
  6513       isEdge: isBrowser(edge, current),
       
  6514       isChrome: isBrowser(chrome, current),
       
  6515       isIE: isBrowser(ie, current),
       
  6516       isOpera: isBrowser(opera, current),
       
  6517       isFirefox: isBrowser(firefox, current),
       
  6518       isSafari: isBrowser(safari, current)
       
  6519     };
       
  6520   };
       
  6521   var $_3j4jht1b1jjgwekal = {
       
  6522     unknown: unknown$1,
       
  6523     nu: nu$1,
       
  6524     edge: constant(edge),
       
  6525     chrome: constant(chrome),
       
  6526     ie: constant(ie),
       
  6527     opera: constant(opera),
       
  6528     firefox: constant(firefox),
       
  6529     safari: constant(safari)
       
  6530   };
       
  6531 
       
  6532   var windows$1 = 'Windows';
       
  6533   var ios = 'iOS';
       
  6534   var android = 'Android';
       
  6535   var linux = 'Linux';
       
  6536   var osx = 'OSX';
       
  6537   var solaris = 'Solaris';
       
  6538   var freebsd = 'FreeBSD';
       
  6539   var isOS = function (name, current) {
       
  6540     return function () {
       
  6541       return current === name;
       
  6542     };
       
  6543   };
       
  6544   var unknown$2 = function () {
       
  6545     return nu$2({
       
  6546       current: undefined,
       
  6547       version: $_bhlk9t1b2jjgwekaq.unknown()
       
  6548     });
       
  6549   };
       
  6550   var nu$2 = function (info) {
       
  6551     var current = info.current;
       
  6552     var version = info.version;
       
  6553     return {
       
  6554       current: current,
       
  6555       version: version,
       
  6556       isWindows: isOS(windows$1, current),
       
  6557       isiOS: isOS(ios, current),
       
  6558       isAndroid: isOS(android, current),
       
  6559       isOSX: isOS(osx, current),
       
  6560       isLinux: isOS(linux, current),
       
  6561       isSolaris: isOS(solaris, current),
       
  6562       isFreeBSD: isOS(freebsd, current)
       
  6563     };
       
  6564   };
       
  6565   var $_7je60a1b3jjgwekar = {
       
  6566     unknown: unknown$2,
       
  6567     nu: nu$2,
       
  6568     windows: constant(windows$1),
       
  6569     ios: constant(ios),
       
  6570     android: constant(android),
       
  6571     linux: constant(linux),
       
  6572     osx: constant(osx),
       
  6573     solaris: constant(solaris),
       
  6574     freebsd: constant(freebsd)
       
  6575   };
       
  6576 
       
  6577   function DeviceType (os, browser, userAgent) {
       
  6578     var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;
       
  6579     var isiPhone = os.isiOS() && !isiPad;
       
  6580     var isAndroid3 = os.isAndroid() && os.version.major === 3;
       
  6581     var isAndroid4 = os.isAndroid() && os.version.major === 4;
       
  6582     var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;
       
  6583     var isTouch = os.isiOS() || os.isAndroid();
       
  6584     var isPhone = isTouch && !isTablet;
       
  6585     var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;
       
  6586     return {
       
  6587       isiPad: constant(isiPad),
       
  6588       isiPhone: constant(isiPhone),
       
  6589       isTablet: constant(isTablet),
       
  6590       isPhone: constant(isPhone),
       
  6591       isTouch: constant(isTouch),
       
  6592       isAndroid: os.isAndroid,
       
  6593       isiOS: os.isiOS,
       
  6594       isWebView: constant(iOSwebview)
       
  6595     };
       
  6596   }
       
  6597 
       
  6598   var detect$1 = function (candidates, userAgent) {
       
  6599     var agent = String(userAgent).toLowerCase();
       
  6600     return find(candidates, function (candidate) {
       
  6601       return candidate.search(agent);
       
  6602     });
       
  6603   };
       
  6604   var detectBrowser = function (browsers, userAgent) {
       
  6605     return detect$1(browsers, userAgent).map(function (browser) {
       
  6606       var version = $_bhlk9t1b2jjgwekaq.detect(browser.versionRegexes, userAgent);
       
  6607       return {
       
  6608         current: browser.name,
       
  6609         version: version
       
  6610       };
       
  6611     });
       
  6612   };
       
  6613   var detectOs = function (oses, userAgent) {
       
  6614     return detect$1(oses, userAgent).map(function (os) {
       
  6615       var version = $_bhlk9t1b2jjgwekaq.detect(os.versionRegexes, userAgent);
       
  6616       return {
       
  6617         current: os.name,
       
  6618         version: version
       
  6619       };
       
  6620     });
       
  6621   };
       
  6622   var $_1uo66k1b5jjgwekb9 = {
       
  6623     detectBrowser: detectBrowser,
       
  6624     detectOs: detectOs
       
  6625   };
       
  6626 
       
  6627   var contains$1 = function (str, substr) {
       
  6628     return str.indexOf(substr) !== -1;
       
  6629   };
       
  6630 
       
  6631   var normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/;
       
  6632   var checkContains = function (target) {
       
  6633     return function (uastring) {
       
  6634       return contains$1(uastring, target);
       
  6635     };
       
  6636   };
       
  6637   var browsers = [
       
  6638     {
       
  6639       name: 'Edge',
       
  6640       versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],
       
  6641       search: function (uastring) {
       
  6642         var monstrosity = contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit');
       
  6643         return monstrosity;
       
  6644       }
       
  6645     },
       
  6646     {
       
  6647       name: 'Chrome',
       
  6648       versionRegexes: [
       
  6649         /.*?chrome\/([0-9]+)\.([0-9]+).*/,
       
  6650         normalVersionRegex
       
  6651       ],
       
  6652       search: function (uastring) {
       
  6653         return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe');
       
  6654       }
       
  6655     },
       
  6656     {
       
  6657       name: 'IE',
       
  6658       versionRegexes: [
       
  6659         /.*?msie\ ?([0-9]+)\.([0-9]+).*/,
       
  6660         /.*?rv:([0-9]+)\.([0-9]+).*/
       
  6661       ],
       
  6662       search: function (uastring) {
       
  6663         return contains$1(uastring, 'msie') || contains$1(uastring, 'trident');
       
  6664       }
       
  6665     },
       
  6666     {
       
  6667       name: 'Opera',
       
  6668       versionRegexes: [
       
  6669         normalVersionRegex,
       
  6670         /.*?opera\/([0-9]+)\.([0-9]+).*/
       
  6671       ],
       
  6672       search: checkContains('opera')
       
  6673     },
       
  6674     {
       
  6675       name: 'Firefox',
       
  6676       versionRegexes: [/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],
       
  6677       search: checkContains('firefox')
       
  6678     },
       
  6679     {
       
  6680       name: 'Safari',
       
  6681       versionRegexes: [
       
  6682         normalVersionRegex,
       
  6683         /.*?cpu os ([0-9]+)_([0-9]+).*/
       
  6684       ],
       
  6685       search: function (uastring) {
       
  6686         return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');
       
  6687       }
       
  6688     }
       
  6689   ];
       
  6690   var oses = [
       
  6691     {
       
  6692       name: 'Windows',
       
  6693       search: checkContains('win'),
       
  6694       versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]
       
  6695     },
       
  6696     {
       
  6697       name: 'iOS',
       
  6698       search: function (uastring) {
       
  6699         return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad');
       
  6700       },
       
  6701       versionRegexes: [
       
  6702         /.*?version\/\ ?([0-9]+)\.([0-9]+).*/,
       
  6703         /.*cpu os ([0-9]+)_([0-9]+).*/,
       
  6704         /.*cpu iphone os ([0-9]+)_([0-9]+).*/
       
  6705       ]
       
  6706     },
       
  6707     {
       
  6708       name: 'Android',
       
  6709       search: checkContains('android'),
       
  6710       versionRegexes: [/.*?android\ ?([0-9]+)\.([0-9]+).*/]
       
  6711     },
       
  6712     {
       
  6713       name: 'OSX',
       
  6714       search: checkContains('os x'),
       
  6715       versionRegexes: [/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]
       
  6716     },
       
  6717     {
       
  6718       name: 'Linux',
       
  6719       search: checkContains('linux'),
       
  6720       versionRegexes: []
       
  6721     },
       
  6722     {
       
  6723       name: 'Solaris',
       
  6724       search: checkContains('sunos'),
       
  6725       versionRegexes: []
       
  6726     },
       
  6727     {
       
  6728       name: 'FreeBSD',
       
  6729       search: checkContains('freebsd'),
       
  6730       versionRegexes: []
       
  6731     }
       
  6732   ];
       
  6733   var $_4f7v971b6jjgwekbd = {
       
  6734     browsers: constant(browsers),
       
  6735     oses: constant(oses)
       
  6736   };
       
  6737 
       
  6738   var detect$2 = function (userAgent) {
       
  6739     var browsers = $_4f7v971b6jjgwekbd.browsers();
       
  6740     var oses = $_4f7v971b6jjgwekbd.oses();
       
  6741     var browser = $_1uo66k1b5jjgwekb9.detectBrowser(browsers, userAgent).fold($_3j4jht1b1jjgwekal.unknown, $_3j4jht1b1jjgwekal.nu);
       
  6742     var os = $_1uo66k1b5jjgwekb9.detectOs(oses, userAgent).fold($_7je60a1b3jjgwekar.unknown, $_7je60a1b3jjgwekar.nu);
       
  6743     var deviceType = DeviceType(os, browser, userAgent);
       
  6744     return {
       
  6745       browser: browser,
       
  6746       os: os,
       
  6747       deviceType: deviceType
       
  6748     };
       
  6749   };
       
  6750   var $_d71emz1b0jjgwekak = { detect: detect$2 };
       
  6751 
       
  6752   var detect$3 = cached(function () {
       
  6753     var userAgent = navigator.userAgent;
       
  6754     return $_d71emz1b0jjgwekak.detect(userAgent);
       
  6755   });
       
  6756   var $_9xrxmy1azjjgwekac = { detect: detect$3 };
       
  6757 
       
  6758   var ELEMENT = $_2jrgnk1apjjgwek8y.ELEMENT;
       
  6759   var DOCUMENT = $_2jrgnk1apjjgwek8y.DOCUMENT;
       
  6760   var is = function (element, selector) {
       
  6761     var elem = element.dom();
       
  6762     if (elem.nodeType !== ELEMENT)
       
  6763       return false;
       
  6764     else if (elem.matches !== undefined)
       
  6765       return elem.matches(selector);
       
  6766     else if (elem.msMatchesSelector !== undefined)
       
  6767       return elem.msMatchesSelector(selector);
       
  6768     else if (elem.webkitMatchesSelector !== undefined)
       
  6769       return elem.webkitMatchesSelector(selector);
       
  6770     else if (elem.mozMatchesSelector !== undefined)
       
  6771       return elem.mozMatchesSelector(selector);
       
  6772     else
       
  6773       throw new Error('Browser lacks native selectors');
       
  6774   };
       
  6775   var bypassSelector = function (dom) {
       
  6776     return dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT || dom.childElementCount === 0;
       
  6777   };
       
  6778   var all = function (selector, scope) {
       
  6779     var base = scope === undefined ? document : scope.dom();
       
  6780     return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element$$1.fromDom);
       
  6781   };
       
  6782   var one = function (selector, scope) {
       
  6783     var base = scope === undefined ? document : scope.dom();
       
  6784     return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element$$1.fromDom);
       
  6785   };
       
  6786   var $_e63uk51bajjgwekbq = {
       
  6787     all: all,
       
  6788     is: is,
       
  6789     one: one
       
  6790   };
       
  6791 
       
  6792   var eq = function (e1, e2) {
       
  6793     return e1.dom() === e2.dom();
       
  6794   };
       
  6795   var isEqualNode = function (e1, e2) {
       
  6796     return e1.dom().isEqualNode(e2.dom());
       
  6797   };
       
  6798   var member = function (element, elements) {
       
  6799     return exists(elements, curry(eq, element));
       
  6800   };
       
  6801   var regularContains = function (e1, e2) {
       
  6802     var d1 = e1.dom(), d2 = e2.dom();
       
  6803     return d1 === d2 ? false : d1.contains(d2);
       
  6804   };
       
  6805   var ieContains = function (e1, e2) {
       
  6806     return $_d0o64o1ayjjgwekaa.documentPositionContainedBy(e1.dom(), e2.dom());
       
  6807   };
       
  6808   var browser = $_9xrxmy1azjjgwekac.detect().browser;
       
  6809   var contains$2 = browser.isIE() ? ieContains : regularContains;
       
  6810   var $_36s5ie1axjjgweka1 = {
       
  6811     eq: eq,
       
  6812     isEqualNode: isEqualNode,
       
  6813     member: member,
       
  6814     contains: contains$2,
       
  6815     is: $_e63uk51bajjgwekbq.is
       
  6816   };
       
  6817 
       
  6818   var owner = function (element) {
       
  6819     return Element$$1.fromDom(element.dom().ownerDocument);
       
  6820   };
       
  6821   var documentElement = function (element) {
       
  6822     return Element$$1.fromDom(element.dom().ownerDocument.documentElement);
       
  6823   };
       
  6824   var defaultView = function (element) {
       
  6825     var el = element.dom();
       
  6826     var defaultView = el.ownerDocument.defaultView;
       
  6827     return Element$$1.fromDom(defaultView);
       
  6828   };
       
  6829   var parent$1 = function (element) {
       
  6830     var dom = element.dom();
       
  6831     return Option.from(dom.parentNode).map(Element$$1.fromDom);
       
  6832   };
       
  6833   var findIndex$1 = function (element) {
       
  6834     return parent$1(element).bind(function (p) {
       
  6835       var kin = children(p);
       
  6836       return findIndex(kin, function (elem) {
       
  6837         return $_36s5ie1axjjgweka1.eq(element, elem);
       
  6838       });
       
  6839     });
       
  6840   };
       
  6841   var parents = function (element, isRoot) {
       
  6842     var stop = isFunction$1(isRoot) ? isRoot : constant(false);
       
  6843     var dom = element.dom();
       
  6844     var ret = [];
       
  6845     while (dom.parentNode !== null && dom.parentNode !== undefined) {
       
  6846       var rawParent = dom.parentNode;
       
  6847       var parent = Element$$1.fromDom(rawParent);
       
  6848       ret.push(parent);
       
  6849       if (stop(parent) === true)
       
  6850         break;
       
  6851       else
       
  6852         dom = rawParent;
       
  6853     }
       
  6854     return ret;
       
  6855   };
       
  6856   var siblings = function (element) {
       
  6857     var filterSelf = function (elements) {
       
  6858       return filter(elements, function (x) {
       
  6859         return !$_36s5ie1axjjgweka1.eq(element, x);
       
  6860       });
       
  6861     };
       
  6862     return parent$1(element).map(children).map(filterSelf).getOr([]);
       
  6863   };
       
  6864   var offsetParent = function (element) {
       
  6865     var dom = element.dom();
       
  6866     return Option.from(dom.offsetParent).map(Element$$1.fromDom);
       
  6867   };
       
  6868   var prevSibling = function (element) {
       
  6869     var dom = element.dom();
       
  6870     return Option.from(dom.previousSibling).map(Element$$1.fromDom);
       
  6871   };
       
  6872   var nextSibling = function (element) {
       
  6873     var dom = element.dom();
       
  6874     return Option.from(dom.nextSibling).map(Element$$1.fromDom);
       
  6875   };
       
  6876   var prevSiblings = function (element) {
       
  6877     return reverse($_607sf01awjjgweka0.toArray(element, prevSibling));
       
  6878   };
       
  6879   var nextSiblings = function (element) {
       
  6880     return $_607sf01awjjgweka0.toArray(element, nextSibling);
       
  6881   };
       
  6882   var children = function (element) {
       
  6883     var dom = element.dom();
       
  6884     return map(dom.childNodes, Element$$1.fromDom);
       
  6885   };
       
  6886   var child = function (element, index) {
       
  6887     var children = element.dom().childNodes;
       
  6888     return Option.from(children[index]).map(Element$$1.fromDom);
       
  6889   };
       
  6890   var firstChild = function (element) {
       
  6891     return child(element, 0);
       
  6892   };
       
  6893   var lastChild = function (element) {
       
  6894     return child(element, element.dom().childNodes.length - 1);
       
  6895   };
       
  6896   var childNodesCount = function (element) {
       
  6897     return element.dom().childNodes.length;
       
  6898   };
       
  6899   var hasChildNodes = function (element) {
       
  6900     return element.dom().hasChildNodes();
       
  6901   };
       
  6902   var spot = Immutable('element', 'offset');
       
  6903   var leaf = function (element, offset) {
       
  6904     var cs = children(element);
       
  6905     return cs.length > 0 && offset < cs.length ? spot(cs[offset], 0) : spot(element, offset);
       
  6906   };
       
  6907   var $_fk3hdw1aqjjgwek91 = {
       
  6908     owner: owner,
       
  6909     defaultView: defaultView,
       
  6910     documentElement: documentElement,
       
  6911     parent: parent$1,
       
  6912     findIndex: findIndex$1,
       
  6913     parents: parents,
       
  6914     siblings: siblings,
       
  6915     prevSibling: prevSibling,
       
  6916     offsetParent: offsetParent,
       
  6917     prevSiblings: prevSiblings,
       
  6918     nextSibling: nextSibling,
       
  6919     nextSiblings: nextSiblings,
       
  6920     children: children,
       
  6921     child: child,
       
  6922     firstChild: firstChild,
       
  6923     lastChild: lastChild,
       
  6924     childNodesCount: childNodesCount,
       
  6925     hasChildNodes: hasChildNodes,
       
  6926     leaf: leaf
       
  6927   };
       
  6928 
       
  6929   var all$1 = function (predicate) {
       
  6930     return descendants($_d2glpe1amjjgwek8t.body(), predicate);
       
  6931   };
       
  6932   var ancestors = function (scope, predicate, isRoot) {
       
  6933     return filter($_fk3hdw1aqjjgwek91.parents(scope, isRoot), predicate);
       
  6934   };
       
  6935   var siblings$1 = function (scope, predicate) {
       
  6936     return filter($_fk3hdw1aqjjgwek91.siblings(scope), predicate);
       
  6937   };
       
  6938   var children$1 = function (scope, predicate) {
       
  6939     return filter($_fk3hdw1aqjjgwek91.children(scope), predicate);
       
  6940   };
       
  6941   var descendants = function (scope, predicate) {
       
  6942     var result = [];
       
  6943     each($_fk3hdw1aqjjgwek91.children(scope), function (x) {
       
  6944       if (predicate(x)) {
       
  6945         result = result.concat([x]);
       
  6946       }
       
  6947       result = result.concat(descendants(x, predicate));
       
  6948     });
       
  6949     return result;
       
  6950   };
       
  6951   var $_4re57m1aljjgwek8p = {
       
  6952     all: all$1,
       
  6953     ancestors: ancestors,
       
  6954     siblings: siblings$1,
       
  6955     children: children$1,
       
  6956     descendants: descendants
       
  6957   };
       
  6958 
       
  6959   var all$2 = function (selector) {
       
  6960     return $_e63uk51bajjgwekbq.all(selector);
       
  6961   };
       
  6962   var ancestors$1 = function (scope, selector, isRoot) {
       
  6963     return $_4re57m1aljjgwek8p.ancestors(scope, function (e) {
       
  6964       return $_e63uk51bajjgwekbq.is(e, selector);
       
  6965     }, isRoot);
       
  6966   };
       
  6967   var siblings$2 = function (scope, selector) {
       
  6968     return $_4re57m1aljjgwek8p.siblings(scope, function (e) {
       
  6969       return $_e63uk51bajjgwekbq.is(e, selector);
       
  6970     });
       
  6971   };
       
  6972   var children$2 = function (scope, selector) {
       
  6973     return $_4re57m1aljjgwek8p.children(scope, function (e) {
       
  6974       return $_e63uk51bajjgwekbq.is(e, selector);
       
  6975     });
       
  6976   };
       
  6977   var descendants$1 = function (scope, selector) {
       
  6978     return $_e63uk51bajjgwekbq.all(selector, scope);
       
  6979   };
       
  6980   var $_1jc9su1akjjgwek8o = {
       
  6981     all: all$2,
       
  6982     ancestors: ancestors$1,
       
  6983     siblings: siblings$2,
       
  6984     children: children$2,
       
  6985     descendants: descendants$1
       
  6986   };
       
  6987 
       
  6988   var trim$1 = global$4.trim;
       
  6989   var hasContentEditableState = function (value) {
       
  6990     return function (node) {
       
  6991       if (node && node.nodeType === 1) {
       
  6992         if (node.contentEditable === value) {
       
  6993           return true;
       
  6994         }
       
  6995         if (node.getAttribute('data-mce-contenteditable') === value) {
       
  6996           return true;
       
  6997         }
       
  6998       }
       
  6999       return false;
       
  7000     };
       
  7001   };
       
  7002   var isContentEditableTrue = hasContentEditableState('true');
       
  7003   var isContentEditableFalse = hasContentEditableState('false');
       
  7004   var create$4 = function (type, title, url, level, attach) {
       
  7005     return {
       
  7006       type: type,
       
  7007       title: title,
       
  7008       url: url,
       
  7009       level: level,
       
  7010       attach: attach
       
  7011     };
       
  7012   };
       
  7013   var isChildOfContentEditableTrue = function (node) {
       
  7014     while (node = node.parentNode) {
       
  7015       var value = node.contentEditable;
       
  7016       if (value && value !== 'inherit') {
       
  7017         return isContentEditableTrue(node);
       
  7018       }
       
  7019     }
       
  7020     return false;
       
  7021   };
       
  7022   var select = function (selector, root) {
       
  7023     return map($_1jc9su1akjjgwek8o.descendants(Element$$1.fromDom(root), selector), function (element) {
       
  7024       return element.dom();
       
  7025     });
       
  7026   };
       
  7027   var getElementText = function (elm) {
       
  7028     return elm.innerText || elm.textContent;
       
  7029   };
       
  7030   var getOrGenerateId = function (elm) {
       
  7031     return elm.id ? elm.id : generate('h');
       
  7032   };
       
  7033   var isAnchor = function (elm) {
       
  7034     return elm && elm.nodeName === 'A' && (elm.id || elm.name);
       
  7035   };
       
  7036   var isValidAnchor = function (elm) {
       
  7037     return isAnchor(elm) && isEditable(elm);
       
  7038   };
       
  7039   var isHeader = function (elm) {
       
  7040     return elm && /^(H[1-6])$/.test(elm.nodeName);
       
  7041   };
       
  7042   var isEditable = function (elm) {
       
  7043     return isChildOfContentEditableTrue(elm) && !isContentEditableFalse(elm);
       
  7044   };
       
  7045   var isValidHeader = function (elm) {
       
  7046     return isHeader(elm) && isEditable(elm);
       
  7047   };
       
  7048   var getLevel = function (elm) {
       
  7049     return isHeader(elm) ? parseInt(elm.nodeName.substr(1), 10) : 0;
       
  7050   };
       
  7051   var headerTarget = function (elm) {
       
  7052     var headerId = getOrGenerateId(elm);
       
  7053     var attach = function () {
       
  7054       elm.id = headerId;
       
  7055     };
       
  7056     return create$4('header', getElementText(elm), '#' + headerId, getLevel(elm), attach);
       
  7057   };
       
  7058   var anchorTarget = function (elm) {
       
  7059     var anchorId = elm.id || elm.name;
       
  7060     var anchorText = getElementText(elm);
       
  7061     return create$4('anchor', anchorText ? anchorText : '#' + anchorId, '#' + anchorId, 0, noop);
       
  7062   };
       
  7063   var getHeaderTargets = function (elms) {
       
  7064     return map(filter(elms, isValidHeader), headerTarget);
       
  7065   };
       
  7066   var getAnchorTargets = function (elms) {
       
  7067     return map(filter(elms, isValidAnchor), anchorTarget);
       
  7068   };
       
  7069   var getTargetElements = function (elm) {
       
  7070     var elms = select('h1,h2,h3,h4,h5,h6,a:not([href])', elm);
       
  7071     return elms;
       
  7072   };
       
  7073   var hasTitle = function (target) {
       
  7074     return trim$1(target.title).length > 0;
       
  7075   };
       
  7076   var find$3 = function (elm) {
       
  7077     var elms = getTargetElements(elm);
       
  7078     return filter(getHeaderTargets(elms).concat(getAnchorTargets(elms)), hasTitle);
       
  7079   };
       
  7080   var $_5ia43q1ahjjgwek7u = { find: find$3 };
       
  7081 
       
  7082   var getActiveEditor = function () {
       
  7083     return window.tinymce ? window.tinymce.activeEditor : global$5.activeEditor;
       
  7084   };
       
  7085   var history = {};
       
  7086   var HISTORY_LENGTH = 5;
       
  7087   var clearHistory = function () {
       
  7088     history = {};
       
  7089   };
       
  7090   var toMenuItem = function (target) {
       
  7091     return {
       
  7092       title: target.title,
       
  7093       value: {
       
  7094         title: { raw: target.title },
       
  7095         url: target.url,
       
  7096         attach: target.attach
       
  7097       }
       
  7098     };
       
  7099   };
       
  7100   var toMenuItems = function (targets) {
       
  7101     return global$4.map(targets, toMenuItem);
       
  7102   };
       
  7103   var staticMenuItem = function (title, url) {
       
  7104     return {
       
  7105       title: title,
       
  7106       value: {
       
  7107         title: title,
       
  7108         url: url,
       
  7109         attach: noop
       
  7110       }
       
  7111     };
       
  7112   };
       
  7113   var isUniqueUrl = function (url, targets) {
       
  7114     var foundTarget = exists(targets, function (target) {
       
  7115       return target.url === url;
       
  7116     });
       
  7117     return !foundTarget;
       
  7118   };
       
  7119   var getSetting = function (editorSettings, name, defaultValue) {
       
  7120     var value = name in editorSettings ? editorSettings[name] : defaultValue;
       
  7121     return value === false ? null : value;
       
  7122   };
       
  7123   var createMenuItems = function (term, targets, fileType, editorSettings) {
       
  7124     var separator = { title: '-' };
       
  7125     var fromHistoryMenuItems = function (history) {
       
  7126       var historyItems = history.hasOwnProperty(fileType) ? history[fileType] : [];
       
  7127       var uniqueHistory = filter(historyItems, function (url) {
       
  7128         return isUniqueUrl(url, targets);
       
  7129       });
       
  7130       return global$4.map(uniqueHistory, function (url) {
       
  7131         return {
       
  7132           title: url,
       
  7133           value: {
       
  7134             title: url,
       
  7135             url: url,
       
  7136             attach: noop
       
  7137           }
       
  7138         };
       
  7139       });
       
  7140     };
       
  7141     var fromMenuItems = function (type) {
       
  7142       var filteredTargets = filter(targets, function (target) {
       
  7143         return target.type === type;
       
  7144       });
       
  7145       return toMenuItems(filteredTargets);
       
  7146     };
       
  7147     var anchorMenuItems = function () {
       
  7148       var anchorMenuItems = fromMenuItems('anchor');
       
  7149       var topAnchor = getSetting(editorSettings, 'anchor_top', '#top');
       
  7150       var bottomAchor = getSetting(editorSettings, 'anchor_bottom', '#bottom');
       
  7151       if (topAnchor !== null) {
       
  7152         anchorMenuItems.unshift(staticMenuItem('<top>', topAnchor));
       
  7153       }
       
  7154       if (bottomAchor !== null) {
       
  7155         anchorMenuItems.push(staticMenuItem('<bottom>', bottomAchor));
       
  7156       }
       
  7157       return anchorMenuItems;
       
  7158     };
       
  7159     var join = function (items) {
       
  7160       return foldl(items, function (a, b) {
       
  7161         var bothEmpty = a.length === 0 || b.length === 0;
       
  7162         return bothEmpty ? a.concat(b) : a.concat(separator, b);
       
  7163       }, []);
       
  7164     };
       
  7165     if (editorSettings.typeahead_urls === false) {
       
  7166       return [];
       
  7167     }
       
  7168     return fileType === 'file' ? join([
       
  7169       filterByQuery(term, fromHistoryMenuItems(history)),
       
  7170       filterByQuery(term, fromMenuItems('header')),
       
  7171       filterByQuery(term, anchorMenuItems())
       
  7172     ]) : filterByQuery(term, fromHistoryMenuItems(history));
       
  7173   };
       
  7174   var addToHistory = function (url, fileType) {
       
  7175     var items = history[fileType];
       
  7176     if (!/^https?/.test(url)) {
       
  7177       return;
       
  7178     }
       
  7179     if (items) {
       
  7180       if (indexOf(items, url).isNone()) {
       
  7181         history[fileType] = items.slice(0, HISTORY_LENGTH).concat(url);
       
  7182       }
       
  7183     } else {
       
  7184       history[fileType] = [url];
       
  7185     }
       
  7186   };
       
  7187   var filterByQuery = function (term, menuItems) {
       
  7188     var lowerCaseTerm = term.toLowerCase();
       
  7189     var result = global$4.grep(menuItems, function (item) {
       
  7190       return item.title.toLowerCase().indexOf(lowerCaseTerm) !== -1;
       
  7191     });
       
  7192     return result.length === 1 && result[0].title === term ? [] : result;
       
  7193   };
       
  7194   var getTitle = function (linkDetails) {
       
  7195     var title = linkDetails.title;
       
  7196     return title.raw ? title.raw : title;
       
  7197   };
       
  7198   var setupAutoCompleteHandler = function (ctrl, editorSettings, bodyElm, fileType) {
       
  7199     var autocomplete = function (term) {
       
  7200       var linkTargets = $_5ia43q1ahjjgwek7u.find(bodyElm);
       
  7201       var menuItems = createMenuItems(term, linkTargets, fileType, editorSettings);
       
  7202       ctrl.showAutoComplete(menuItems, term);
       
  7203     };
       
  7204     ctrl.on('autocomplete', function () {
       
  7205       autocomplete(ctrl.value());
       
  7206     });
       
  7207     ctrl.on('selectitem', function (e) {
       
  7208       var linkDetails = e.value;
       
  7209       ctrl.value(linkDetails.url);
       
  7210       var title = getTitle(linkDetails);
       
  7211       if (fileType === 'image') {
       
  7212         ctrl.fire('change', {
       
  7213           meta: {
       
  7214             alt: title,
       
  7215             attach: linkDetails.attach
       
  7216           }
       
  7217         });
       
  7218       } else {
       
  7219         ctrl.fire('change', {
       
  7220           meta: {
       
  7221             text: title,
       
  7222             attach: linkDetails.attach
       
  7223           }
       
  7224         });
       
  7225       }
       
  7226       ctrl.focus();
       
  7227     });
       
  7228     ctrl.on('click', function (e) {
       
  7229       if (ctrl.value().length === 0 && e.target.nodeName === 'INPUT') {
       
  7230         autocomplete('');
       
  7231       }
       
  7232     });
       
  7233     ctrl.on('PostRender', function () {
       
  7234       ctrl.getRoot().on('submit', function (e) {
       
  7235         if (!e.isDefaultPrevented()) {
       
  7236           addToHistory(ctrl.value(), fileType);
       
  7237         }
       
  7238       });
       
  7239     });
       
  7240   };
       
  7241   var statusToUiState = function (result) {
       
  7242     var status = result.status, message = result.message;
       
  7243     if (status === 'valid') {
       
  7244       return {
       
  7245         status: 'ok',
       
  7246         message: message
       
  7247       };
       
  7248     } else if (status === 'unknown') {
       
  7249       return {
       
  7250         status: 'warn',
       
  7251         message: message
       
  7252       };
       
  7253     } else if (status === 'invalid') {
       
  7254       return {
       
  7255         status: 'warn',
       
  7256         message: message
       
  7257       };
       
  7258     } else {
       
  7259       return {
       
  7260         status: 'none',
       
  7261         message: ''
       
  7262       };
       
  7263     }
       
  7264   };
       
  7265   var setupLinkValidatorHandler = function (ctrl, editorSettings, fileType) {
       
  7266     var validatorHandler = editorSettings.filepicker_validator_handler;
       
  7267     if (validatorHandler) {
       
  7268       var validateUrl_1 = function (url) {
       
  7269         if (url.length === 0) {
       
  7270           ctrl.statusLevel('none');
       
  7271           return;
       
  7272         }
       
  7273         validatorHandler({
       
  7274           url: url,
       
  7275           type: fileType
       
  7276         }, function (result) {
       
  7277           var uiState = statusToUiState(result);
       
  7278           ctrl.statusMessage(uiState.message);
       
  7279           ctrl.statusLevel(uiState.status);
       
  7280         });
       
  7281       };
       
  7282       ctrl.state.on('change:value', function (e) {
       
  7283         validateUrl_1(e.value);
       
  7284       });
       
  7285     }
       
  7286   };
       
  7287   var FilePicker = ComboBox.extend({
       
  7288     Statics: { clearHistory: clearHistory },
       
  7289     init: function (settings) {
       
  7290       var self = this, editor = getActiveEditor(), editorSettings = editor.settings;
       
  7291       var actionCallback, fileBrowserCallback, fileBrowserCallbackTypes;
       
  7292       var fileType = settings.filetype;
       
  7293       settings.spellcheck = false;
       
  7294       fileBrowserCallbackTypes = editorSettings.file_picker_types || editorSettings.file_browser_callback_types;
       
  7295       if (fileBrowserCallbackTypes) {
       
  7296         fileBrowserCallbackTypes = global$4.makeMap(fileBrowserCallbackTypes, /[, ]/);
       
  7297       }
       
  7298       if (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType]) {
       
  7299         fileBrowserCallback = editorSettings.file_picker_callback;
       
  7300         if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) {
       
  7301           actionCallback = function () {
       
  7302             var meta = self.fire('beforecall').meta;
       
  7303             meta = global$4.extend({ filetype: fileType }, meta);
       
  7304             fileBrowserCallback.call(editor, function (value, meta) {
       
  7305               self.value(value).fire('change', { meta: meta });
       
  7306             }, self.value(), meta);
       
  7307           };
       
  7308         } else {
       
  7309           fileBrowserCallback = editorSettings.file_browser_callback;
       
  7310           if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) {
       
  7311             actionCallback = function () {
       
  7312               fileBrowserCallback(self.getEl('inp').id, self.value(), fileType, window);
       
  7313             };
       
  7314           }
       
  7315         }
       
  7316       }
       
  7317       if (actionCallback) {
       
  7318         settings.icon = 'browse';
       
  7319         settings.onaction = actionCallback;
       
  7320       }
       
  7321       self._super(settings);
       
  7322       self.classes.add('filepicker');
       
  7323       setupAutoCompleteHandler(self, editorSettings, editor.getBody(), fileType);
       
  7324       setupLinkValidatorHandler(self, editorSettings, fileType);
       
  7325     }
       
  7326   });
       
  7327 
       
  7328   var FitLayout = AbsoluteLayout.extend({
       
  7329     recalc: function (container) {
       
  7330       var contLayoutRect = container.layoutRect(), paddingBox = container.paddingBox;
       
  7331       container.items().filter(':visible').each(function (ctrl) {
       
  7332         ctrl.layoutRect({
       
  7333           x: paddingBox.left,
       
  7334           y: paddingBox.top,
       
  7335           w: contLayoutRect.innerW - paddingBox.right - paddingBox.left,
       
  7336           h: contLayoutRect.innerH - paddingBox.top - paddingBox.bottom
       
  7337         });
       
  7338         if (ctrl.recalc) {
       
  7339           ctrl.recalc();
       
  7340         }
       
  7341       });
       
  7342     }
       
  7343   });
       
  7344 
       
  7345   var FlexLayout = AbsoluteLayout.extend({
       
  7346     recalc: function (container) {
       
  7347       var i, l, items, contLayoutRect, contPaddingBox, contSettings, align, pack, spacing, totalFlex, availableSpace, direction;
       
  7348       var ctrl, ctrlLayoutRect, ctrlSettings, flex;
       
  7349       var maxSizeItems = [];
       
  7350       var size, maxSize, ratio, rect, pos, maxAlignEndPos;
       
  7351       var sizeName, minSizeName, posName, maxSizeName, beforeName, innerSizeName, deltaSizeName, contentSizeName;
       
  7352       var alignAxisName, alignInnerSizeName, alignSizeName, alignMinSizeName, alignBeforeName, alignAfterName;
       
  7353       var alignDeltaSizeName, alignContentSizeName;
       
  7354       var max = Math.max, min = Math.min;
       
  7355       items = container.items().filter(':visible');
       
  7356       contLayoutRect = container.layoutRect();
       
  7357       contPaddingBox = container.paddingBox;
       
  7358       contSettings = container.settings;
       
  7359       direction = container.isRtl() ? contSettings.direction || 'row-reversed' : contSettings.direction;
       
  7360       align = contSettings.align;
       
  7361       pack = container.isRtl() ? contSettings.pack || 'end' : contSettings.pack;
       
  7362       spacing = contSettings.spacing || 0;
       
  7363       if (direction === 'row-reversed' || direction === 'column-reverse') {
       
  7364         items = items.set(items.toArray().reverse());
       
  7365         direction = direction.split('-')[0];
       
  7366       }
       
  7367       if (direction === 'column') {
       
  7368         posName = 'y';
       
  7369         sizeName = 'h';
       
  7370         minSizeName = 'minH';
       
  7371         maxSizeName = 'maxH';
       
  7372         innerSizeName = 'innerH';
       
  7373         beforeName = 'top';
       
  7374         deltaSizeName = 'deltaH';
       
  7375         contentSizeName = 'contentH';
       
  7376         alignBeforeName = 'left';
       
  7377         alignSizeName = 'w';
       
  7378         alignAxisName = 'x';
       
  7379         alignInnerSizeName = 'innerW';
       
  7380         alignMinSizeName = 'minW';
       
  7381         alignAfterName = 'right';
       
  7382         alignDeltaSizeName = 'deltaW';
       
  7383         alignContentSizeName = 'contentW';
       
  7384       } else {
       
  7385         posName = 'x';
       
  7386         sizeName = 'w';
       
  7387         minSizeName = 'minW';
       
  7388         maxSizeName = 'maxW';
       
  7389         innerSizeName = 'innerW';
       
  7390         beforeName = 'left';
       
  7391         deltaSizeName = 'deltaW';
       
  7392         contentSizeName = 'contentW';
       
  7393         alignBeforeName = 'top';
       
  7394         alignSizeName = 'h';
       
  7395         alignAxisName = 'y';
       
  7396         alignInnerSizeName = 'innerH';
       
  7397         alignMinSizeName = 'minH';
       
  7398         alignAfterName = 'bottom';
       
  7399         alignDeltaSizeName = 'deltaH';
       
  7400         alignContentSizeName = 'contentH';
       
  7401       }
       
  7402       availableSpace = contLayoutRect[innerSizeName] - contPaddingBox[beforeName] - contPaddingBox[beforeName];
       
  7403       maxAlignEndPos = totalFlex = 0;
       
  7404       for (i = 0, l = items.length; i < l; i++) {
       
  7405         ctrl = items[i];
       
  7406         ctrlLayoutRect = ctrl.layoutRect();
       
  7407         ctrlSettings = ctrl.settings;
       
  7408         flex = ctrlSettings.flex;
       
  7409         availableSpace -= i < l - 1 ? spacing : 0;
       
  7410         if (flex > 0) {
       
  7411           totalFlex += flex;
       
  7412           if (ctrlLayoutRect[maxSizeName]) {
       
  7413             maxSizeItems.push(ctrl);
       
  7414           }
       
  7415           ctrlLayoutRect.flex = flex;
       
  7416         }
       
  7417         availableSpace -= ctrlLayoutRect[minSizeName];
       
  7418         size = contPaddingBox[alignBeforeName] + ctrlLayoutRect[alignMinSizeName] + contPaddingBox[alignAfterName];
       
  7419         if (size > maxAlignEndPos) {
       
  7420           maxAlignEndPos = size;
       
  7421         }
       
  7422       }
       
  7423       rect = {};
       
  7424       if (availableSpace < 0) {
       
  7425         rect[minSizeName] = contLayoutRect[minSizeName] - availableSpace + contLayoutRect[deltaSizeName];
       
  7426       } else {
       
  7427         rect[minSizeName] = contLayoutRect[innerSizeName] - availableSpace + contLayoutRect[deltaSizeName];
       
  7428       }
       
  7429       rect[alignMinSizeName] = maxAlignEndPos + contLayoutRect[alignDeltaSizeName];
       
  7430       rect[contentSizeName] = contLayoutRect[innerSizeName] - availableSpace;
       
  7431       rect[alignContentSizeName] = maxAlignEndPos;
       
  7432       rect.minW = min(rect.minW, contLayoutRect.maxW);
       
  7433       rect.minH = min(rect.minH, contLayoutRect.maxH);
       
  7434       rect.minW = max(rect.minW, contLayoutRect.startMinWidth);
       
  7435       rect.minH = max(rect.minH, contLayoutRect.startMinHeight);
       
  7436       if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) {
       
  7437         rect.w = rect.minW;
       
  7438         rect.h = rect.minH;
       
  7439         container.layoutRect(rect);
       
  7440         this.recalc(container);
       
  7441         if (container._lastRect === null) {
       
  7442           var parentCtrl = container.parent();
       
  7443           if (parentCtrl) {
       
  7444             parentCtrl._lastRect = null;
       
  7445             parentCtrl.recalc();
       
  7446           }
       
  7447         }
       
  7448         return;
       
  7449       }
       
  7450       ratio = availableSpace / totalFlex;
       
  7451       for (i = 0, l = maxSizeItems.length; i < l; i++) {
       
  7452         ctrl = maxSizeItems[i];
       
  7453         ctrlLayoutRect = ctrl.layoutRect();
       
  7454         maxSize = ctrlLayoutRect[maxSizeName];
       
  7455         size = ctrlLayoutRect[minSizeName] + ctrlLayoutRect.flex * ratio;
       
  7456         if (size > maxSize) {
       
  7457           availableSpace -= ctrlLayoutRect[maxSizeName] - ctrlLayoutRect[minSizeName];
       
  7458           totalFlex -= ctrlLayoutRect.flex;
       
  7459           ctrlLayoutRect.flex = 0;
       
  7460           ctrlLayoutRect.maxFlexSize = maxSize;
       
  7461         } else {
       
  7462           ctrlLayoutRect.maxFlexSize = 0;
       
  7463         }
       
  7464       }
       
  7465       ratio = availableSpace / totalFlex;
       
  7466       pos = contPaddingBox[beforeName];
       
  7467       rect = {};
       
  7468       if (totalFlex === 0) {
       
  7469         if (pack === 'end') {
       
  7470           pos = availableSpace + contPaddingBox[beforeName];
       
  7471         } else if (pack === 'center') {
       
  7472           pos = Math.round(contLayoutRect[innerSizeName] / 2 - (contLayoutRect[innerSizeName] - availableSpace) / 2) + contPaddingBox[beforeName];
       
  7473           if (pos < 0) {
       
  7474             pos = contPaddingBox[beforeName];
       
  7475           }
       
  7476         } else if (pack === 'justify') {
       
  7477           pos = contPaddingBox[beforeName];
       
  7478           spacing = Math.floor(availableSpace / (items.length - 1));
       
  7479         }
       
  7480       }
       
  7481       rect[alignAxisName] = contPaddingBox[alignBeforeName];
       
  7482       for (i = 0, l = items.length; i < l; i++) {
       
  7483         ctrl = items[i];
       
  7484         ctrlLayoutRect = ctrl.layoutRect();
       
  7485         size = ctrlLayoutRect.maxFlexSize || ctrlLayoutRect[minSizeName];
       
  7486         if (align === 'center') {
       
  7487           rect[alignAxisName] = Math.round(contLayoutRect[alignInnerSizeName] / 2 - ctrlLayoutRect[alignSizeName] / 2);
       
  7488         } else if (align === 'stretch') {
       
  7489           rect[alignSizeName] = max(ctrlLayoutRect[alignMinSizeName] || 0, contLayoutRect[alignInnerSizeName] - contPaddingBox[alignBeforeName] - contPaddingBox[alignAfterName]);
       
  7490           rect[alignAxisName] = contPaddingBox[alignBeforeName];
       
  7491         } else if (align === 'end') {
       
  7492           rect[alignAxisName] = contLayoutRect[alignInnerSizeName] - ctrlLayoutRect[alignSizeName] - contPaddingBox.top;
       
  7493         }
       
  7494         if (ctrlLayoutRect.flex > 0) {
       
  7495           size += ctrlLayoutRect.flex * ratio;
       
  7496         }
       
  7497         rect[sizeName] = size;
       
  7498         rect[posName] = pos;
       
  7499         ctrl.layoutRect(rect);
       
  7500         if (ctrl.recalc) {
       
  7501           ctrl.recalc();
       
  7502         }
       
  7503         pos += size + spacing;
       
  7504       }
       
  7505     }
       
  7506   });
       
  7507 
       
  7508   var FlowLayout = Layout$1.extend({
       
  7509     Defaults: {
       
  7510       containerClass: 'flow-layout',
       
  7511       controlClass: 'flow-layout-item',
       
  7512       endClass: 'break'
       
  7513     },
       
  7514     recalc: function (container) {
       
  7515       container.items().filter(':visible').each(function (ctrl) {
       
  7516         if (ctrl.recalc) {
       
  7517           ctrl.recalc();
       
  7518         }
       
  7519       });
       
  7520     },
       
  7521     isNative: function () {
       
  7522       return true;
       
  7523     }
       
  7524   });
       
  7525 
       
  7526   function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {
       
  7527     return is(scope, a) ? Option.some(scope) : isFunction$1(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot);
       
  7528   }
       
  7529 
       
  7530   var first$1 = function (predicate) {
       
  7531     return descendant($_d2glpe1amjjgwek8t.body(), predicate);
       
  7532   };
       
  7533   var ancestor = function (scope, predicate, isRoot) {
       
  7534     var element = scope.dom();
       
  7535     var stop = isFunction$1(isRoot) ? isRoot : constant(false);
       
  7536     while (element.parentNode) {
       
  7537       element = element.parentNode;
       
  7538       var el = Element$$1.fromDom(element);
       
  7539       if (predicate(el))
       
  7540         return Option.some(el);
       
  7541       else if (stop(el))
       
  7542         break;
       
  7543     }
       
  7544     return Option.none();
       
  7545   };
       
  7546   var closest = function (scope, predicate, isRoot) {
       
  7547     var is = function (scope) {
       
  7548       return predicate(scope);
       
  7549     };
       
  7550     return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);
       
  7551   };
       
  7552   var sibling = function (scope, predicate) {
       
  7553     var element = scope.dom();
       
  7554     if (!element.parentNode)
       
  7555       return Option.none();
       
  7556     return child$1(Element$$1.fromDom(element.parentNode), function (x) {
       
  7557       return !$_36s5ie1axjjgweka1.eq(scope, x) && predicate(x);
       
  7558     });
       
  7559   };
       
  7560   var child$1 = function (scope, predicate) {
       
  7561     var result = find(scope.dom().childNodes, compose(predicate, Element$$1.fromDom));
       
  7562     return result.map(Element$$1.fromDom);
       
  7563   };
       
  7564   var descendant = function (scope, predicate) {
       
  7565     var descend = function (node) {
       
  7566       for (var i = 0; i < node.childNodes.length; i++) {
       
  7567         if (predicate(Element$$1.fromDom(node.childNodes[i])))
       
  7568           return Option.some(Element$$1.fromDom(node.childNodes[i]));
       
  7569         var res = descend(node.childNodes[i]);
       
  7570         if (res.isSome())
       
  7571           return res;
       
  7572       }
       
  7573       return Option.none();
       
  7574     };
       
  7575     return descend(scope.dom());
       
  7576   };
       
  7577   var $_df9cwz1bgjjgwekcd = {
       
  7578     first: first$1,
       
  7579     ancestor: ancestor,
       
  7580     closest: closest,
       
  7581     sibling: sibling,
       
  7582     child: child$1,
       
  7583     descendant: descendant
       
  7584   };
       
  7585 
       
  7586   var first$2 = function (selector) {
       
  7587     return $_e63uk51bajjgwekbq.one(selector);
       
  7588   };
       
  7589   var ancestor$1 = function (scope, selector, isRoot) {
       
  7590     return $_df9cwz1bgjjgwekcd.ancestor(scope, function (e) {
       
  7591       return $_e63uk51bajjgwekbq.is(e, selector);
       
  7592     }, isRoot);
       
  7593   };
       
  7594   var sibling$1 = function (scope, selector) {
       
  7595     return $_df9cwz1bgjjgwekcd.sibling(scope, function (e) {
       
  7596       return $_e63uk51bajjgwekbq.is(e, selector);
       
  7597     });
       
  7598   };
       
  7599   var child$2 = function (scope, selector) {
       
  7600     return $_df9cwz1bgjjgwekcd.child(scope, function (e) {
       
  7601       return $_e63uk51bajjgwekbq.is(e, selector);
       
  7602     });
       
  7603   };
       
  7604   var descendant$1 = function (scope, selector) {
       
  7605     return $_e63uk51bajjgwekbq.one(selector, scope);
       
  7606   };
       
  7607   var closest$1 = function (scope, selector, isRoot) {
       
  7608     return ClosestOrAncestor($_e63uk51bajjgwekbq.is, ancestor$1, scope, selector, isRoot);
       
  7609   };
       
  7610   var $_6nlstg1bfjjgwekcb = {
       
  7611     first: first$2,
       
  7612     ancestor: ancestor$1,
       
  7613     sibling: sibling$1,
       
  7614     child: child$2,
       
  7615     descendant: descendant$1,
       
  7616     closest: closest$1
       
  7617   };
       
  7618 
       
  7619   var toggleFormat = function (editor, fmt) {
       
  7620     return function () {
       
  7621       editor.execCommand('mceToggleFormat', false, fmt);
       
  7622     };
       
  7623   };
       
  7624   var addFormatChangedListener = function (editor, name, changed) {
       
  7625     var handler = function (state) {
       
  7626       changed(state, name);
       
  7627     };
       
  7628     if (editor.formatter) {
       
  7629       editor.formatter.formatChanged(name, handler);
       
  7630     } else {
       
  7631       editor.on('init', function () {
       
  7632         editor.formatter.formatChanged(name, handler);
       
  7633       });
       
  7634     }
       
  7635   };
       
  7636   var postRenderFormatToggle = function (editor, name) {
       
  7637     return function (e) {
       
  7638       addFormatChangedListener(editor, name, function (state) {
       
  7639         e.control.active(state);
       
  7640       });
       
  7641     };
       
  7642   };
       
  7643 
       
  7644   var register = function (editor) {
       
  7645     var alignFormats = [
       
  7646       'alignleft',
       
  7647       'aligncenter',
       
  7648       'alignright',
       
  7649       'alignjustify'
       
  7650     ];
       
  7651     var defaultAlign = 'alignleft';
       
  7652     var alignMenuItems = [
       
  7653       {
       
  7654         text: 'Left',
       
  7655         icon: 'alignleft',
       
  7656         onclick: toggleFormat(editor, 'alignleft')
       
  7657       },
       
  7658       {
       
  7659         text: 'Center',
       
  7660         icon: 'aligncenter',
       
  7661         onclick: toggleFormat(editor, 'aligncenter')
       
  7662       },
       
  7663       {
       
  7664         text: 'Right',
       
  7665         icon: 'alignright',
       
  7666         onclick: toggleFormat(editor, 'alignright')
       
  7667       },
       
  7668       {
       
  7669         text: 'Justify',
       
  7670         icon: 'alignjustify',
       
  7671         onclick: toggleFormat(editor, 'alignjustify')
       
  7672       }
       
  7673     ];
       
  7674     editor.addMenuItem('align', {
       
  7675       text: 'Align',
       
  7676       menu: alignMenuItems
       
  7677     });
       
  7678     editor.addButton('align', {
       
  7679       type: 'menubutton',
       
  7680       icon: defaultAlign,
       
  7681       menu: alignMenuItems,
       
  7682       onShowMenu: function (e) {
       
  7683         var menu = e.control.menu;
       
  7684         global$4.each(alignFormats, function (formatName, idx) {
       
  7685           menu.items().eq(idx).each(function (item) {
       
  7686             return item.active(editor.formatter.match(formatName));
       
  7687           });
       
  7688         });
       
  7689       },
       
  7690       onPostRender: function (e) {
       
  7691         var ctrl = e.control;
       
  7692         global$4.each(alignFormats, function (formatName, idx) {
       
  7693           addFormatChangedListener(editor, formatName, function (state) {
       
  7694             ctrl.icon(defaultAlign);
       
  7695             if (state) {
       
  7696               ctrl.icon(formatName);
       
  7697             }
       
  7698           });
       
  7699         });
       
  7700       }
       
  7701     });
       
  7702     global$4.each({
       
  7703       alignleft: [
       
  7704         'Align left',
       
  7705         'JustifyLeft'
       
  7706       ],
       
  7707       aligncenter: [
       
  7708         'Align center',
       
  7709         'JustifyCenter'
       
  7710       ],
       
  7711       alignright: [
       
  7712         'Align right',
       
  7713         'JustifyRight'
       
  7714       ],
       
  7715       alignjustify: [
       
  7716         'Justify',
       
  7717         'JustifyFull'
       
  7718       ],
       
  7719       alignnone: [
       
  7720         'No alignment',
       
  7721         'JustifyNone'
       
  7722       ]
       
  7723     }, function (item, name) {
       
  7724       editor.addButton(name, {
       
  7725         active: false,
       
  7726         tooltip: item[0],
       
  7727         cmd: item[1],
       
  7728         onPostRender: postRenderFormatToggle(editor, name)
       
  7729       });
       
  7730     });
       
  7731   };
       
  7732   var $_7uh4c31bijjgwekcw = { register: register };
       
  7733 
       
  7734   var getFirstFont = function (fontFamily) {
       
  7735     return fontFamily ? fontFamily.split(',')[0] : '';
       
  7736   };
       
  7737   var findMatchingValue = function (items, fontFamily) {
       
  7738     var font = fontFamily ? fontFamily.toLowerCase() : '';
       
  7739     var value;
       
  7740     global$4.each(items, function (item) {
       
  7741       if (item.value.toLowerCase() === font) {
       
  7742         value = item.value;
       
  7743       }
       
  7744     });
       
  7745     global$4.each(items, function (item) {
       
  7746       if (!value && getFirstFont(item.value).toLowerCase() === getFirstFont(font).toLowerCase()) {
       
  7747         value = item.value;
       
  7748       }
       
  7749     });
       
  7750     return value;
       
  7751   };
       
  7752   var createFontNameListBoxChangeHandler = function (editor, items) {
       
  7753     return function () {
       
  7754       var self = this;
       
  7755       self.state.set('value', null);
       
  7756       editor.on('init nodeChange', function (e) {
       
  7757         var fontFamily = editor.queryCommandValue('FontName');
       
  7758         var match = findMatchingValue(items, fontFamily);
       
  7759         self.value(match ? match : null);
       
  7760         if (!match && fontFamily) {
       
  7761           self.text(getFirstFont(fontFamily));
       
  7762         }
       
  7763       });
       
  7764     };
       
  7765   };
       
  7766   var createFormats = function (formats) {
       
  7767     formats = formats.replace(/;$/, '').split(';');
       
  7768     var i = formats.length;
       
  7769     while (i--) {
       
  7770       formats[i] = formats[i].split('=');
       
  7771     }
       
  7772     return formats;
       
  7773   };
       
  7774   var getFontItems = function (editor) {
       
  7775     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';
       
  7776     var fonts = createFormats(editor.settings.font_formats || defaultFontsFormats);
       
  7777     return global$4.map(fonts, function (font) {
       
  7778       return {
       
  7779         text: { raw: font[0] },
       
  7780         value: font[1],
       
  7781         textStyle: font[1].indexOf('dings') === -1 ? 'font-family:' + font[1] : ''
       
  7782       };
       
  7783     });
       
  7784   };
       
  7785   var registerButtons = function (editor) {
       
  7786     editor.addButton('fontselect', function () {
       
  7787       var items = getFontItems(editor);
       
  7788       return {
       
  7789         type: 'listbox',
       
  7790         text: 'Font Family',
       
  7791         tooltip: 'Font Family',
       
  7792         values: items,
       
  7793         fixedWidth: true,
       
  7794         onPostRender: createFontNameListBoxChangeHandler(editor, items),
       
  7795         onselect: function (e) {
       
  7796           if (e.control.settings.value) {
       
  7797             editor.execCommand('FontName', false, e.control.settings.value);
       
  7798           }
       
  7799         }
       
  7800       };
       
  7801     });
       
  7802   };
       
  7803   var register$1 = function (editor) {
       
  7804     registerButtons(editor);
       
  7805   };
       
  7806   var $_2g5ce1bkjjgwekcz = { register: register$1 };
       
  7807 
       
  7808   var round = function (number, precision) {
       
  7809     var factor = Math.pow(10, precision);
       
  7810     return Math.round(number * factor) / factor;
       
  7811   };
       
  7812   var toPt = function (fontSize, precision) {
       
  7813     if (/[0-9.]+px$/.test(fontSize)) {
       
  7814       return round(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';
       
  7815     }
       
  7816     return fontSize;
       
  7817   };
       
  7818   var findMatchingValue$1 = function (items, pt, px) {
       
  7819     var value;
       
  7820     global$4.each(items, function (item) {
       
  7821       if (item.value === px) {
       
  7822         value = px;
       
  7823       } else if (item.value === pt) {
       
  7824         value = pt;
       
  7825       }
       
  7826     });
       
  7827     return value;
       
  7828   };
       
  7829   var createFontSizeListBoxChangeHandler = function (editor, items) {
       
  7830     return function () {
       
  7831       var self = this;
       
  7832       editor.on('init nodeChange', function (e) {
       
  7833         var px, pt, precision, match;
       
  7834         px = editor.queryCommandValue('FontSize');
       
  7835         if (px) {
       
  7836           for (precision = 3; !match && precision >= 0; precision--) {
       
  7837             pt = toPt(px, precision);
       
  7838             match = findMatchingValue$1(items, pt, px);
       
  7839           }
       
  7840         }
       
  7841         self.value(match ? match : null);
       
  7842         if (!match) {
       
  7843           self.text(pt);
       
  7844         }
       
  7845       });
       
  7846     };
       
  7847   };
       
  7848   var getFontSizeItems = function (editor) {
       
  7849     var defaultFontsizeFormats = '8pt 10pt 12pt 14pt 18pt 24pt 36pt';
       
  7850     var fontsizeFormats = editor.settings.fontsize_formats || defaultFontsizeFormats;
       
  7851     return global$4.map(fontsizeFormats.split(' '), function (item) {
       
  7852       var text = item, value = item;
       
  7853       var values = item.split('=');
       
  7854       if (values.length > 1) {
       
  7855         text = values[0];
       
  7856         value = values[1];
       
  7857       }
       
  7858       return {
       
  7859         text: text,
       
  7860         value: value
       
  7861       };
       
  7862     });
       
  7863   };
       
  7864   var registerButtons$1 = function (editor) {
       
  7865     editor.addButton('fontsizeselect', function () {
       
  7866       var items = getFontSizeItems(editor);
       
  7867       return {
       
  7868         type: 'listbox',
       
  7869         text: 'Font Sizes',
       
  7870         tooltip: 'Font Sizes',
       
  7871         values: items,
       
  7872         fixedWidth: true,
       
  7873         onPostRender: createFontSizeListBoxChangeHandler(editor, items),
       
  7874         onclick: function (e) {
       
  7875           if (e.control.settings.value) {
       
  7876             editor.execCommand('FontSize', false, e.control.settings.value);
       
  7877           }
       
  7878         }
       
  7879       };
       
  7880     });
       
  7881   };
       
  7882   var register$2 = function (editor) {
       
  7883     registerButtons$1(editor);
       
  7884   };
       
  7885   var $_b15nsk1bljjgwekd9 = { register: register$2 };
       
  7886 
       
  7887   var hideMenuObjects = function (editor, menu) {
       
  7888     var count = menu.length;
       
  7889     global$4.each(menu, function (item) {
       
  7890       if (item.menu) {
       
  7891         item.hidden = hideMenuObjects(editor, item.menu) === 0;
       
  7892       }
       
  7893       var formatName = item.format;
       
  7894       if (formatName) {
       
  7895         item.hidden = !editor.formatter.canApply(formatName);
       
  7896       }
       
  7897       if (item.hidden) {
       
  7898         count--;
       
  7899       }
       
  7900     });
       
  7901     return count;
       
  7902   };
       
  7903   var hideFormatMenuItems = function (editor, menu) {
       
  7904     var count = menu.items().length;
       
  7905     menu.items().each(function (item) {
       
  7906       if (item.menu) {
       
  7907         item.visible(hideFormatMenuItems(editor, item.menu) > 0);
       
  7908       }
       
  7909       if (!item.menu && item.settings.menu) {
       
  7910         item.visible(hideMenuObjects(editor, item.settings.menu) > 0);
       
  7911       }
       
  7912       var formatName = item.settings.format;
       
  7913       if (formatName) {
       
  7914         item.visible(editor.formatter.canApply(formatName));
       
  7915       }
       
  7916       if (!item.visible()) {
       
  7917         count--;
       
  7918       }
       
  7919     });
       
  7920     return count;
       
  7921   };
       
  7922   var createFormatMenu = function (editor) {
       
  7923     var count = 0;
       
  7924     var newFormats = [];
       
  7925     var defaultStyleFormats = [
       
  7926       {
       
  7927         title: 'Headings',
       
  7928         items: [
       
  7929           {
       
  7930             title: 'Heading 1',
       
  7931             format: 'h1'
       
  7932           },
       
  7933           {
       
  7934             title: 'Heading 2',
       
  7935             format: 'h2'
       
  7936           },
       
  7937           {
       
  7938             title: 'Heading 3',
       
  7939             format: 'h3'
       
  7940           },
       
  7941           {
       
  7942             title: 'Heading 4',
       
  7943             format: 'h4'
       
  7944           },
       
  7945           {
       
  7946             title: 'Heading 5',
       
  7947             format: 'h5'
       
  7948           },
       
  7949           {
       
  7950             title: 'Heading 6',
       
  7951             format: 'h6'
       
  7952           }
       
  7953         ]
       
  7954       },
       
  7955       {
       
  7956         title: 'Inline',
       
  7957         items: [
       
  7958           {
       
  7959             title: 'Bold',
       
  7960             icon: 'bold',
       
  7961             format: 'bold'
       
  7962           },
       
  7963           {
       
  7964             title: 'Italic',
       
  7965             icon: 'italic',
       
  7966             format: 'italic'
       
  7967           },
       
  7968           {
       
  7969             title: 'Underline',
       
  7970             icon: 'underline',
       
  7971             format: 'underline'
       
  7972           },
       
  7973           {
       
  7974             title: 'Strikethrough',
       
  7975             icon: 'strikethrough',
       
  7976             format: 'strikethrough'
       
  7977           },
       
  7978           {
       
  7979             title: 'Superscript',
       
  7980             icon: 'superscript',
       
  7981             format: 'superscript'
       
  7982           },
       
  7983           {
       
  7984             title: 'Subscript',
       
  7985             icon: 'subscript',
       
  7986             format: 'subscript'
       
  7987           },
       
  7988           {
       
  7989             title: 'Code',
       
  7990             icon: 'code',
       
  7991             format: 'code'
       
  7992           }
       
  7993         ]
       
  7994       },
       
  7995       {
       
  7996         title: 'Blocks',
       
  7997         items: [
       
  7998           {
       
  7999             title: 'Paragraph',
       
  8000             format: 'p'
       
  8001           },
       
  8002           {
       
  8003             title: 'Blockquote',
       
  8004             format: 'blockquote'
       
  8005           },
       
  8006           {
       
  8007             title: 'Div',
       
  8008             format: 'div'
       
  8009           },
       
  8010           {
       
  8011             title: 'Pre',
       
  8012             format: 'pre'
       
  8013           }
       
  8014         ]
       
  8015       },
       
  8016       {
       
  8017         title: 'Alignment',
       
  8018         items: [
       
  8019           {
       
  8020             title: 'Left',
       
  8021             icon: 'alignleft',
       
  8022             format: 'alignleft'
       
  8023           },
       
  8024           {
       
  8025             title: 'Center',
       
  8026             icon: 'aligncenter',
       
  8027             format: 'aligncenter'
       
  8028           },
       
  8029           {
       
  8030             title: 'Right',
       
  8031             icon: 'alignright',
       
  8032             format: 'alignright'
       
  8033           },
       
  8034           {
       
  8035             title: 'Justify',
       
  8036             icon: 'alignjustify',
       
  8037             format: 'alignjustify'
       
  8038           }
       
  8039         ]
       
  8040       }
       
  8041     ];
       
  8042     var createMenu = function (formats) {
       
  8043       var menu = [];
       
  8044       if (!formats) {
       
  8045         return;
       
  8046       }
       
  8047       global$4.each(formats, function (format) {
       
  8048         var menuItem = {
       
  8049           text: format.title,
       
  8050           icon: format.icon
       
  8051         };
       
  8052         if (format.items) {
       
  8053           menuItem.menu = createMenu(format.items);
       
  8054         } else {
       
  8055           var formatName = format.format || 'custom' + count++;
       
  8056           if (!format.format) {
       
  8057             format.name = formatName;
       
  8058             newFormats.push(format);
       
  8059           }
       
  8060           menuItem.format = formatName;
       
  8061           menuItem.cmd = format.cmd;
       
  8062         }
       
  8063         menu.push(menuItem);
       
  8064       });
       
  8065       return menu;
       
  8066     };
       
  8067     var createStylesMenu = function () {
       
  8068       var menu;
       
  8069       if (editor.settings.style_formats_merge) {
       
  8070         if (editor.settings.style_formats) {
       
  8071           menu = createMenu(defaultStyleFormats.concat(editor.settings.style_formats));
       
  8072         } else {
       
  8073           menu = createMenu(defaultStyleFormats);
       
  8074         }
       
  8075       } else {
       
  8076         menu = createMenu(editor.settings.style_formats || defaultStyleFormats);
       
  8077       }
       
  8078       return menu;
       
  8079     };
       
  8080     editor.on('init', function () {
       
  8081       global$4.each(newFormats, function (format) {
       
  8082         editor.formatter.register(format.name, format);
       
  8083       });
       
  8084     });
       
  8085     return {
       
  8086       type: 'menu',
       
  8087       items: createStylesMenu(),
       
  8088       onPostRender: function (e) {
       
  8089         editor.fire('renderFormatsMenu', { control: e.control });
       
  8090       },
       
  8091       itemDefaults: {
       
  8092         preview: true,
       
  8093         textStyle: function () {
       
  8094           if (this.settings.format) {
       
  8095             return editor.formatter.getCssText(this.settings.format);
       
  8096           }
       
  8097         },
       
  8098         onPostRender: function () {
       
  8099           var self = this;
       
  8100           self.parent().on('show', function () {
       
  8101             var formatName, command;
       
  8102             formatName = self.settings.format;
       
  8103             if (formatName) {
       
  8104               self.disabled(!editor.formatter.canApply(formatName));
       
  8105               self.active(editor.formatter.match(formatName));
       
  8106             }
       
  8107             command = self.settings.cmd;
       
  8108             if (command) {
       
  8109               self.active(editor.queryCommandState(command));
       
  8110             }
       
  8111           });
       
  8112         },
       
  8113         onclick: function () {
       
  8114           if (this.settings.format) {
       
  8115             toggleFormat(editor, this.settings.format)();
       
  8116           }
       
  8117           if (this.settings.cmd) {
       
  8118             editor.execCommand(this.settings.cmd);
       
  8119           }
       
  8120         }
       
  8121       }
       
  8122     };
       
  8123   };
       
  8124   var registerMenuItems = function (editor, formatMenu) {
       
  8125     editor.addMenuItem('formats', {
       
  8126       text: 'Formats',
       
  8127       menu: formatMenu
       
  8128     });
       
  8129   };
       
  8130   var registerButtons$2 = function (editor, formatMenu) {
       
  8131     editor.addButton('styleselect', {
       
  8132       type: 'menubutton',
       
  8133       text: 'Formats',
       
  8134       menu: formatMenu,
       
  8135       onShowMenu: function () {
       
  8136         if (editor.settings.style_formats_autohide) {
       
  8137           hideFormatMenuItems(editor, this.menu);
       
  8138         }
       
  8139       }
       
  8140     });
       
  8141   };
       
  8142   var register$3 = function (editor) {
       
  8143     var formatMenu = createFormatMenu(editor);
       
  8144     registerMenuItems(editor, formatMenu);
       
  8145     registerButtons$2(editor, formatMenu);
       
  8146   };
       
  8147   var $_9qaa1r1bmjjgwekdc = { register: register$3 };
       
  8148 
       
  8149   var defaultBlocks = 'Paragraph=p;' + 'Heading 1=h1;' + 'Heading 2=h2;' + 'Heading 3=h3;' + 'Heading 4=h4;' + 'Heading 5=h5;' + 'Heading 6=h6;' + 'Preformatted=pre';
       
  8150   var createFormats$1 = function (formats) {
       
  8151     formats = formats.replace(/;$/, '').split(';');
       
  8152     var i = formats.length;
       
  8153     while (i--) {
       
  8154       formats[i] = formats[i].split('=');
       
  8155     }
       
  8156     return formats;
       
  8157   };
       
  8158   var createListBoxChangeHandler = function (editor, items, formatName) {
       
  8159     return function () {
       
  8160       var self = this;
       
  8161       editor.on('nodeChange', function (e) {
       
  8162         var formatter = editor.formatter;
       
  8163         var value = null;
       
  8164         global$4.each(e.parents, function (node) {
       
  8165           global$4.each(items, function (item) {
       
  8166             if (formatName) {
       
  8167               if (formatter.matchNode(node, formatName, { value: item.value })) {
       
  8168                 value = item.value;
       
  8169               }
       
  8170             } else {
       
  8171               if (formatter.matchNode(node, item.value)) {
       
  8172                 value = item.value;
       
  8173               }
       
  8174             }
       
  8175             if (value) {
       
  8176               return false;
       
  8177             }
       
  8178           });
       
  8179           if (value) {
       
  8180             return false;
       
  8181           }
       
  8182         });
       
  8183         self.value(value);
       
  8184       });
       
  8185     };
       
  8186   };
       
  8187   var lazyFormatSelectBoxItems = function (editor, blocks) {
       
  8188     return function () {
       
  8189       var items = [];
       
  8190       global$4.each(blocks, function (block) {
       
  8191         items.push({
       
  8192           text: block[0],
       
  8193           value: block[1],
       
  8194           textStyle: function () {
       
  8195             return editor.formatter.getCssText(block[1]);
       
  8196           }
       
  8197         });
       
  8198       });
       
  8199       return {
       
  8200         type: 'listbox',
       
  8201         text: blocks[0][0],
       
  8202         values: items,
       
  8203         fixedWidth: true,
       
  8204         onselect: function (e) {
       
  8205           if (e.control) {
       
  8206             var fmt = e.control.value();
       
  8207             toggleFormat(editor, fmt)();
       
  8208           }
       
  8209         },
       
  8210         onPostRender: createListBoxChangeHandler(editor, items)
       
  8211       };
       
  8212     };
       
  8213   };
       
  8214   var buildMenuItems = function (editor, blocks) {
       
  8215     return global$4.map(blocks, function (block) {
       
  8216       return {
       
  8217         text: block[0],
       
  8218         onclick: toggleFormat(editor, block[1]),
       
  8219         textStyle: function () {
       
  8220           return editor.formatter.getCssText(block[1]);
       
  8221         }
       
  8222       };
       
  8223     });
       
  8224   };
       
  8225   var register$4 = function (editor) {
       
  8226     var blocks = createFormats$1(editor.settings.block_formats || defaultBlocks);
       
  8227     editor.addMenuItem('blockformats', {
       
  8228       text: 'Blocks',
       
  8229       menu: buildMenuItems(editor, blocks)
       
  8230     });
       
  8231     editor.addButton('formatselect', lazyFormatSelectBoxItems(editor, blocks));
       
  8232   };
       
  8233   var $_a3xw9u1bnjjgwekdh = { register: register$4 };
       
  8234 
       
  8235   var createCustomMenuItems = function (editor, names) {
       
  8236     var items, nameList;
       
  8237     if (typeof names === 'string') {
       
  8238       nameList = names.split(' ');
       
  8239     } else if (global$4.isArray(names)) {
       
  8240       return flatten$1(global$4.map(names, function (names) {
       
  8241         return createCustomMenuItems(editor, names);
       
  8242       }));
       
  8243     }
       
  8244     items = global$4.grep(nameList, function (name) {
       
  8245       return name === '|' || name in editor.menuItems;
       
  8246     });
       
  8247     return global$4.map(items, function (name) {
       
  8248       return name === '|' ? { text: '-' } : editor.menuItems[name];
       
  8249     });
       
  8250   };
       
  8251   var isSeparator = function (menuItem) {
       
  8252     return menuItem && menuItem.text === '-';
       
  8253   };
       
  8254   var trimMenuItems = function (menuItems) {
       
  8255     var menuItems2 = filter(menuItems, function (menuItem, i, menuItems) {
       
  8256       return !isSeparator(menuItem) || !isSeparator(menuItems[i - 1]);
       
  8257     });
       
  8258     return filter(menuItems2, function (menuItem, i, menuItems) {
       
  8259       return !isSeparator(menuItem) || i > 0 && i < menuItems.length - 1;
       
  8260     });
       
  8261   };
       
  8262   var createContextMenuItems = function (editor, context) {
       
  8263     var outputMenuItems = [{ text: '-' }];
       
  8264     var menuItems = global$4.grep(editor.menuItems, function (menuItem) {
       
  8265       return menuItem.context === context;
       
  8266     });
       
  8267     global$4.each(menuItems, function (menuItem) {
       
  8268       if (menuItem.separator === 'before') {
       
  8269         outputMenuItems.push({ text: '|' });
       
  8270       }
       
  8271       if (menuItem.prependToContext) {
       
  8272         outputMenuItems.unshift(menuItem);
       
  8273       } else {
       
  8274         outputMenuItems.push(menuItem);
       
  8275       }
       
  8276       if (menuItem.separator === 'after') {
       
  8277         outputMenuItems.push({ text: '|' });
       
  8278       }
       
  8279     });
       
  8280     return outputMenuItems;
       
  8281   };
       
  8282   var createInsertMenu = function (editor) {
       
  8283     var insertButtonItems = editor.settings.insert_button_items;
       
  8284     if (insertButtonItems) {
       
  8285       return trimMenuItems(createCustomMenuItems(editor, insertButtonItems));
       
  8286     } else {
       
  8287       return trimMenuItems(createContextMenuItems(editor, 'insert'));
       
  8288     }
       
  8289   };
       
  8290   var registerButtons$3 = function (editor) {
       
  8291     editor.addButton('insert', {
       
  8292       type: 'menubutton',
       
  8293       icon: 'insert',
       
  8294       menu: [],
       
  8295       oncreatemenu: function () {
       
  8296         this.menu.add(createInsertMenu(editor));
       
  8297         this.menu.renderNew();
       
  8298       }
       
  8299     });
       
  8300   };
       
  8301   var register$5 = function (editor) {
       
  8302     registerButtons$3(editor);
       
  8303   };
       
  8304   var $_dvqvtt1bojjgwekdj = { register: register$5 };
       
  8305 
       
  8306   var registerFormatButtons = function (editor) {
       
  8307     global$4.each({
       
  8308       bold: 'Bold',
       
  8309       italic: 'Italic',
       
  8310       underline: 'Underline',
       
  8311       strikethrough: 'Strikethrough',
       
  8312       subscript: 'Subscript',
       
  8313       superscript: 'Superscript'
       
  8314     }, function (text, name) {
       
  8315       editor.addButton(name, {
       
  8316         active: false,
       
  8317         tooltip: text,
       
  8318         onPostRender: postRenderFormatToggle(editor, name),
       
  8319         onclick: toggleFormat(editor, name)
       
  8320       });
       
  8321     });
       
  8322   };
       
  8323   var registerCommandButtons = function (editor) {
       
  8324     global$4.each({
       
  8325       outdent: [
       
  8326         'Decrease indent',
       
  8327         'Outdent'
       
  8328       ],
       
  8329       indent: [
       
  8330         'Increase indent',
       
  8331         'Indent'
       
  8332       ],
       
  8333       cut: [
       
  8334         'Cut',
       
  8335         'Cut'
       
  8336       ],
       
  8337       copy: [
       
  8338         'Copy',
       
  8339         'Copy'
       
  8340       ],
       
  8341       paste: [
       
  8342         'Paste',
       
  8343         'Paste'
       
  8344       ],
       
  8345       help: [
       
  8346         'Help',
       
  8347         'mceHelp'
       
  8348       ],
       
  8349       selectall: [
       
  8350         'Select all',
       
  8351         'SelectAll'
       
  8352       ],
       
  8353       visualaid: [
       
  8354         'Visual aids',
       
  8355         'mceToggleVisualAid'
       
  8356       ],
       
  8357       newdocument: [
       
  8358         'New document',
       
  8359         'mceNewDocument'
       
  8360       ],
       
  8361       removeformat: [
       
  8362         'Clear formatting',
       
  8363         'RemoveFormat'
       
  8364       ],
       
  8365       remove: [
       
  8366         'Remove',
       
  8367         'Delete'
       
  8368       ]
       
  8369     }, function (item, name) {
       
  8370       editor.addButton(name, {
       
  8371         tooltip: item[0],
       
  8372         cmd: item[1]
       
  8373       });
       
  8374     });
       
  8375   };
       
  8376   var registerCommandToggleButtons = function (editor) {
       
  8377     global$4.each({
       
  8378       blockquote: [
       
  8379         'Blockquote',
       
  8380         'mceBlockQuote'
       
  8381       ],
       
  8382       subscript: [
       
  8383         'Subscript',
       
  8384         'Subscript'
       
  8385       ],
       
  8386       superscript: [
       
  8387         'Superscript',
       
  8388         'Superscript'
       
  8389       ]
       
  8390     }, function (item, name) {
       
  8391       editor.addButton(name, {
       
  8392         active: false,
       
  8393         tooltip: item[0],
       
  8394         cmd: item[1],
       
  8395         onPostRender: postRenderFormatToggle(editor, name)
       
  8396       });
       
  8397     });
       
  8398   };
       
  8399   var registerButtons$4 = function (editor) {
       
  8400     registerFormatButtons(editor);
       
  8401     registerCommandButtons(editor);
       
  8402     registerCommandToggleButtons(editor);
       
  8403   };
       
  8404   var registerMenuItems$1 = function (editor) {
       
  8405     global$4.each({
       
  8406       bold: [
       
  8407         'Bold',
       
  8408         'Bold',
       
  8409         'Meta+B'
       
  8410       ],
       
  8411       italic: [
       
  8412         'Italic',
       
  8413         'Italic',
       
  8414         'Meta+I'
       
  8415       ],
       
  8416       underline: [
       
  8417         'Underline',
       
  8418         'Underline',
       
  8419         'Meta+U'
       
  8420       ],
       
  8421       strikethrough: [
       
  8422         'Strikethrough',
       
  8423         'Strikethrough'
       
  8424       ],
       
  8425       subscript: [
       
  8426         'Subscript',
       
  8427         'Subscript'
       
  8428       ],
       
  8429       superscript: [
       
  8430         'Superscript',
       
  8431         'Superscript'
       
  8432       ],
       
  8433       removeformat: [
       
  8434         'Clear formatting',
       
  8435         'RemoveFormat'
       
  8436       ],
       
  8437       newdocument: [
       
  8438         'New document',
       
  8439         'mceNewDocument'
       
  8440       ],
       
  8441       cut: [
       
  8442         'Cut',
       
  8443         'Cut',
       
  8444         'Meta+X'
       
  8445       ],
       
  8446       copy: [
       
  8447         'Copy',
       
  8448         'Copy',
       
  8449         'Meta+C'
       
  8450       ],
       
  8451       paste: [
       
  8452         'Paste',
       
  8453         'Paste',
       
  8454         'Meta+V'
       
  8455       ],
       
  8456       selectall: [
       
  8457         'Select all',
       
  8458         'SelectAll',
       
  8459         'Meta+A'
       
  8460       ]
       
  8461     }, function (item, name) {
       
  8462       editor.addMenuItem(name, {
       
  8463         text: item[0],
       
  8464         icon: name,
       
  8465         shortcut: item[2],
       
  8466         cmd: item[1]
       
  8467       });
       
  8468     });
       
  8469     editor.addMenuItem('codeformat', {
       
  8470       text: 'Code',
       
  8471       icon: 'code',
       
  8472       onclick: toggleFormat(editor, 'code')
       
  8473     });
       
  8474   };
       
  8475   var register$6 = function (editor) {
       
  8476     registerButtons$4(editor);
       
  8477     registerMenuItems$1(editor);
       
  8478   };
       
  8479   var $_2ywvy11bpjjgwekdn = { register: register$6 };
       
  8480 
       
  8481   var toggleUndoRedoState = function (editor, type) {
       
  8482     return function () {
       
  8483       var self = this;
       
  8484       var checkState = function () {
       
  8485         var typeFn = type === 'redo' ? 'hasRedo' : 'hasUndo';
       
  8486         return editor.undoManager ? editor.undoManager[typeFn]() : false;
       
  8487       };
       
  8488       self.disabled(!checkState());
       
  8489       editor.on('Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', function () {
       
  8490         self.disabled(editor.readonly || !checkState());
       
  8491       });
       
  8492     };
       
  8493   };
       
  8494   var registerMenuItems$2 = function (editor) {
       
  8495     editor.addMenuItem('undo', {
       
  8496       text: 'Undo',
       
  8497       icon: 'undo',
       
  8498       shortcut: 'Meta+Z',
       
  8499       onPostRender: toggleUndoRedoState(editor, 'undo'),
       
  8500       cmd: 'undo'
       
  8501     });
       
  8502     editor.addMenuItem('redo', {
       
  8503       text: 'Redo',
       
  8504       icon: 'redo',
       
  8505       shortcut: 'Meta+Y',
       
  8506       onPostRender: toggleUndoRedoState(editor, 'redo'),
       
  8507       cmd: 'redo'
       
  8508     });
       
  8509   };
       
  8510   var registerButtons$5 = function (editor) {
       
  8511     editor.addButton('undo', {
       
  8512       tooltip: 'Undo',
       
  8513       onPostRender: toggleUndoRedoState(editor, 'undo'),
       
  8514       cmd: 'undo'
       
  8515     });
       
  8516     editor.addButton('redo', {
       
  8517       tooltip: 'Redo',
       
  8518       onPostRender: toggleUndoRedoState(editor, 'redo'),
       
  8519       cmd: 'redo'
       
  8520     });
       
  8521   };
       
  8522   var register$7 = function (editor) {
       
  8523     registerMenuItems$2(editor);
       
  8524     registerButtons$5(editor);
       
  8525   };
       
  8526   var $_5qfrkx1bqjjgwekdq = { register: register$7 };
       
  8527 
       
  8528   var toggleVisualAidState = function (editor) {
       
  8529     return function () {
       
  8530       var self = this;
       
  8531       editor.on('VisualAid', function (e) {
       
  8532         self.active(e.hasVisual);
       
  8533       });
       
  8534       self.active(editor.hasVisual);
       
  8535     };
       
  8536   };
       
  8537   var registerMenuItems$3 = function (editor) {
       
  8538     editor.addMenuItem('visualaid', {
       
  8539       text: 'Visual aids',
       
  8540       selectable: true,
       
  8541       onPostRender: toggleVisualAidState(editor),
       
  8542       cmd: 'mceToggleVisualAid'
       
  8543     });
       
  8544   };
       
  8545   var register$8 = function (editor) {
       
  8546     registerMenuItems$3(editor);
       
  8547   };
       
  8548   var $_ebb6rc1brjjgwekdr = { register: register$8 };
       
  8549 
       
  8550   var setupEnvironment = function () {
       
  8551     Widget.tooltips = !global$1.iOS;
       
  8552     Control$1.translate = function (text) {
       
  8553       return global$5.translate(text);
       
  8554     };
       
  8555   };
       
  8556   var setupUiContainer = function (editor) {
       
  8557     if (editor.settings.ui_container) {
       
  8558       global$1.container = $_6nlstg1bfjjgwekcb.descendant(Element$$1.fromDom(document.body), editor.settings.ui_container).fold(constant(null), function (elm) {
       
  8559         return elm.dom();
       
  8560       });
       
  8561     }
       
  8562   };
       
  8563   var setupRtlMode = function (editor) {
       
  8564     if (editor.rtl) {
       
  8565       Control$1.rtl = true;
       
  8566     }
       
  8567   };
       
  8568   var setupHideFloatPanels = function (editor) {
       
  8569     editor.on('mousedown', function () {
       
  8570       FloatPanel.hideAll();
       
  8571     });
       
  8572   };
       
  8573   var setup = function (editor) {
       
  8574     setupRtlMode(editor);
       
  8575     setupHideFloatPanels(editor);
       
  8576     setupUiContainer(editor);
       
  8577     setupEnvironment();
       
  8578     $_a3xw9u1bnjjgwekdh.register(editor);
       
  8579     $_7uh4c31bijjgwekcw.register(editor);
       
  8580     $_2ywvy11bpjjgwekdn.register(editor);
       
  8581     $_5qfrkx1bqjjgwekdq.register(editor);
       
  8582     $_b15nsk1bljjgwekd9.register(editor);
       
  8583     $_2g5ce1bkjjgwekcz.register(editor);
       
  8584     $_9qaa1r1bmjjgwekdc.register(editor);
       
  8585     $_ebb6rc1brjjgwekdr.register(editor);
       
  8586     $_dvqvtt1bojjgwekdj.register(editor);
       
  8587   };
       
  8588   var $_gg6ikw1bejjgwekc5 = { setup: setup };
       
  8589 
       
  8590   var GridLayout = AbsoluteLayout.extend({
       
  8591     recalc: function (container) {
       
  8592       var settings, rows, cols, items, contLayoutRect, width, height, rect, ctrlLayoutRect, ctrl, x, y, posX, posY, ctrlSettings, contPaddingBox, align, spacingH, spacingV, alignH, alignV, maxX, maxY;
       
  8593       var colWidths = [];
       
  8594       var rowHeights = [];
       
  8595       var ctrlMinWidth, ctrlMinHeight, availableWidth, availableHeight, reverseRows, idx;
       
  8596       settings = container.settings;
       
  8597       items = container.items().filter(':visible');
       
  8598       contLayoutRect = container.layoutRect();
       
  8599       cols = settings.columns || Math.ceil(Math.sqrt(items.length));
       
  8600       rows = Math.ceil(items.length / cols);
       
  8601       spacingH = settings.spacingH || settings.spacing || 0;
       
  8602       spacingV = settings.spacingV || settings.spacing || 0;
       
  8603       alignH = settings.alignH || settings.align;
       
  8604       alignV = settings.alignV || settings.align;
       
  8605       contPaddingBox = container.paddingBox;
       
  8606       reverseRows = 'reverseRows' in settings ? settings.reverseRows : container.isRtl();
       
  8607       if (alignH && typeof alignH === 'string') {
       
  8608         alignH = [alignH];
       
  8609       }
       
  8610       if (alignV && typeof alignV === 'string') {
       
  8611         alignV = [alignV];
       
  8612       }
       
  8613       for (x = 0; x < cols; x++) {
       
  8614         colWidths.push(0);
       
  8615       }
       
  8616       for (y = 0; y < rows; y++) {
       
  8617         rowHeights.push(0);
       
  8618       }
       
  8619       for (y = 0; y < rows; y++) {
       
  8620         for (x = 0; x < cols; x++) {
       
  8621           ctrl = items[y * cols + x];
       
  8622           if (!ctrl) {
       
  8623             break;
       
  8624           }
       
  8625           ctrlLayoutRect = ctrl.layoutRect();
       
  8626           ctrlMinWidth = ctrlLayoutRect.minW;
       
  8627           ctrlMinHeight = ctrlLayoutRect.minH;
       
  8628           colWidths[x] = ctrlMinWidth > colWidths[x] ? ctrlMinWidth : colWidths[x];
       
  8629           rowHeights[y] = ctrlMinHeight > rowHeights[y] ? ctrlMinHeight : rowHeights[y];
       
  8630         }
       
  8631       }
       
  8632       availableWidth = contLayoutRect.innerW - contPaddingBox.left - contPaddingBox.right;
       
  8633       for (maxX = 0, x = 0; x < cols; x++) {
       
  8634         maxX += colWidths[x] + (x > 0 ? spacingH : 0);
       
  8635         availableWidth -= (x > 0 ? spacingH : 0) + colWidths[x];
       
  8636       }
       
  8637       availableHeight = contLayoutRect.innerH - contPaddingBox.top - contPaddingBox.bottom;
       
  8638       for (maxY = 0, y = 0; y < rows; y++) {
       
  8639         maxY += rowHeights[y] + (y > 0 ? spacingV : 0);
       
  8640         availableHeight -= (y > 0 ? spacingV : 0) + rowHeights[y];
       
  8641       }
       
  8642       maxX += contPaddingBox.left + contPaddingBox.right;
       
  8643       maxY += contPaddingBox.top + contPaddingBox.bottom;
       
  8644       rect = {};
       
  8645       rect.minW = maxX + (contLayoutRect.w - contLayoutRect.innerW);
       
  8646       rect.minH = maxY + (contLayoutRect.h - contLayoutRect.innerH);
       
  8647       rect.contentW = rect.minW - contLayoutRect.deltaW;
       
  8648       rect.contentH = rect.minH - contLayoutRect.deltaH;
       
  8649       rect.minW = Math.min(rect.minW, contLayoutRect.maxW);
       
  8650       rect.minH = Math.min(rect.minH, contLayoutRect.maxH);
       
  8651       rect.minW = Math.max(rect.minW, contLayoutRect.startMinWidth);
       
  8652       rect.minH = Math.max(rect.minH, contLayoutRect.startMinHeight);
       
  8653       if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) {
       
  8654         rect.w = rect.minW;
       
  8655         rect.h = rect.minH;
       
  8656         container.layoutRect(rect);
       
  8657         this.recalc(container);
       
  8658         if (container._lastRect === null) {
       
  8659           var parentCtrl = container.parent();
       
  8660           if (parentCtrl) {
       
  8661             parentCtrl._lastRect = null;
       
  8662             parentCtrl.recalc();
       
  8663           }
       
  8664         }
       
  8665         return;
       
  8666       }
       
  8667       if (contLayoutRect.autoResize) {
       
  8668         rect = container.layoutRect(rect);
       
  8669         rect.contentW = rect.minW - contLayoutRect.deltaW;
       
  8670         rect.contentH = rect.minH - contLayoutRect.deltaH;
       
  8671       }
       
  8672       var flexV;
       
  8673       if (settings.packV === 'start') {
       
  8674         flexV = 0;
       
  8675       } else {
       
  8676         flexV = availableHeight > 0 ? Math.floor(availableHeight / rows) : 0;
       
  8677       }
       
  8678       var totalFlex = 0;
       
  8679       var flexWidths = settings.flexWidths;
       
  8680       if (flexWidths) {
       
  8681         for (x = 0; x < flexWidths.length; x++) {
       
  8682           totalFlex += flexWidths[x];
       
  8683         }
       
  8684       } else {
       
  8685         totalFlex = cols;
       
  8686       }
       
  8687       var ratio = availableWidth / totalFlex;
       
  8688       for (x = 0; x < cols; x++) {
       
  8689         colWidths[x] += flexWidths ? flexWidths[x] * ratio : ratio;
       
  8690       }
       
  8691       posY = contPaddingBox.top;
       
  8692       for (y = 0; y < rows; y++) {
       
  8693         posX = contPaddingBox.left;
       
  8694         height = rowHeights[y] + flexV;
       
  8695         for (x = 0; x < cols; x++) {
       
  8696           if (reverseRows) {
       
  8697             idx = y * cols + cols - 1 - x;
       
  8698           } else {
       
  8699             idx = y * cols + x;
       
  8700           }
       
  8701           ctrl = items[idx];
       
  8702           if (!ctrl) {
       
  8703             break;
       
  8704           }
       
  8705           ctrlSettings = ctrl.settings;
       
  8706           ctrlLayoutRect = ctrl.layoutRect();
       
  8707           width = Math.max(colWidths[x], ctrlLayoutRect.startMinWidth);
       
  8708           ctrlLayoutRect.x = posX;
       
  8709           ctrlLayoutRect.y = posY;
       
  8710           align = ctrlSettings.alignH || (alignH ? alignH[x] || alignH[0] : null);
       
  8711           if (align === 'center') {
       
  8712             ctrlLayoutRect.x = posX + width / 2 - ctrlLayoutRect.w / 2;
       
  8713           } else if (align === 'right') {
       
  8714             ctrlLayoutRect.x = posX + width - ctrlLayoutRect.w;
       
  8715           } else if (align === 'stretch') {
       
  8716             ctrlLayoutRect.w = width;
       
  8717           }
       
  8718           align = ctrlSettings.alignV || (alignV ? alignV[x] || alignV[0] : null);
       
  8719           if (align === 'center') {
       
  8720             ctrlLayoutRect.y = posY + height / 2 - ctrlLayoutRect.h / 2;
       
  8721           } else if (align === 'bottom') {
       
  8722             ctrlLayoutRect.y = posY + height - ctrlLayoutRect.h;
       
  8723           } else if (align === 'stretch') {
       
  8724             ctrlLayoutRect.h = height;
       
  8725           }
       
  8726           ctrl.layoutRect(ctrlLayoutRect);
       
  8727           posX += width + spacingH;
       
  8728           if (ctrl.recalc) {
       
  8729             ctrl.recalc();
       
  8730           }
       
  8731         }
       
  8732         posY += height + spacingV;
       
  8733       }
       
  8734     }
       
  8735   });
       
  8736 
       
  8737   var Iframe = Widget.extend({
       
  8738     renderHtml: function () {
       
  8739       var self = this;
       
  8740       self.classes.add('iframe');
       
  8741       self.canFocus = false;
       
  8742       return '<iframe id="' + self._id + '" class="' + self.classes + '" tabindex="-1" src="' + (self.settings.url || 'javascript:\'\'') + '" frameborder="0"></iframe>';
       
  8743     },
       
  8744     src: function (src) {
       
  8745       this.getEl().src = src;
       
  8746     },
       
  8747     html: function (html, callback) {
       
  8748       var self = this, body = this.getEl().contentWindow.document.body;
       
  8749       if (!body) {
       
  8750         global$3.setTimeout(function () {
       
  8751           self.html(html);
       
  8752         });
       
  8753       } else {
       
  8754         body.innerHTML = html;
       
  8755         if (callback) {
       
  8756           callback();
       
  8757         }
       
  8758       }
       
  8759       return this;
       
  8760     }
       
  8761   });
       
  8762 
       
  8763   var InfoBox = Widget.extend({
       
  8764     init: function (settings) {
       
  8765       var self = this;
       
  8766       self._super(settings);
       
  8767       self.classes.add('widget').add('infobox');
       
  8768       self.canFocus = false;
       
  8769     },
       
  8770     severity: function (level) {
       
  8771       this.classes.remove('error');
       
  8772       this.classes.remove('warning');
       
  8773       this.classes.remove('success');
       
  8774       this.classes.add(level);
       
  8775     },
       
  8776     help: function (state) {
       
  8777       this.state.set('help', state);
       
  8778     },
       
  8779     renderHtml: function () {
       
  8780       var self = this, prefix = self.classPrefix;
       
  8781       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>';
       
  8782     },
       
  8783     bindStates: function () {
       
  8784       var self = this;
       
  8785       self.state.on('change:text', function (e) {
       
  8786         self.getEl('body').firstChild.data = self.encode(e.value);
       
  8787         if (self.state.get('rendered')) {
       
  8788           self.updateLayoutRect();
       
  8789         }
       
  8790       });
       
  8791       self.state.on('change:help', function (e) {
       
  8792         self.classes.toggle('has-help', e.value);
       
  8793         if (self.state.get('rendered')) {
       
  8794           self.updateLayoutRect();
       
  8795         }
       
  8796       });
       
  8797       return self._super();
       
  8798     }
       
  8799   });
       
  8800 
       
  8801   var Label = Widget.extend({
       
  8802     init: function (settings) {
       
  8803       var self = this;
       
  8804       self._super(settings);
       
  8805       self.classes.add('widget').add('label');
       
  8806       self.canFocus = false;
       
  8807       if (settings.multiline) {
       
  8808         self.classes.add('autoscroll');
       
  8809       }
       
  8810       if (settings.strong) {
       
  8811         self.classes.add('strong');
       
  8812       }
       
  8813     },
       
  8814     initLayoutRect: function () {
       
  8815       var self = this, layoutRect = self._super();
       
  8816       if (self.settings.multiline) {
       
  8817         var size = funcs.getSize(self.getEl());
       
  8818         if (size.width > layoutRect.maxW) {
       
  8819           layoutRect.minW = layoutRect.maxW;
       
  8820           self.classes.add('multiline');
       
  8821         }
       
  8822         self.getEl().style.width = layoutRect.minW + 'px';
       
  8823         layoutRect.startMinH = layoutRect.h = layoutRect.minH = Math.min(layoutRect.maxH, funcs.getSize(self.getEl()).height);
       
  8824       }
       
  8825       return layoutRect;
       
  8826     },
       
  8827     repaint: function () {
       
  8828       var self = this;
       
  8829       if (!self.settings.multiline) {
       
  8830         self.getEl().style.lineHeight = self.layoutRect().h + 'px';
       
  8831       }
       
  8832       return self._super();
       
  8833     },
       
  8834     severity: function (level) {
       
  8835       this.classes.remove('error');
       
  8836       this.classes.remove('warning');
       
  8837       this.classes.remove('success');
       
  8838       this.classes.add(level);
       
  8839     },
       
  8840     renderHtml: function () {
       
  8841       var self = this;
       
  8842       var targetCtrl, forName, forId = self.settings.forId;
       
  8843       var text = self.settings.html ? self.settings.html : self.encode(self.state.get('text'));
       
  8844       if (!forId && (forName = self.settings.forName)) {
       
  8845         targetCtrl = self.getRoot().find('#' + forName)[0];
       
  8846         if (targetCtrl) {
       
  8847           forId = targetCtrl._id;
       
  8848         }
       
  8849       }
       
  8850       if (forId) {
       
  8851         return '<label id="' + self._id + '" class="' + self.classes + '"' + (forId ? ' for="' + forId + '"' : '') + '>' + text + '</label>';
       
  8852       }
       
  8853       return '<span id="' + self._id + '" class="' + self.classes + '">' + text + '</span>';
       
  8854     },
       
  8855     bindStates: function () {
       
  8856       var self = this;
       
  8857       self.state.on('change:text', function (e) {
       
  8858         self.innerHtml(self.encode(e.value));
       
  8859         if (self.state.get('rendered')) {
       
  8860           self.updateLayoutRect();
       
  8861         }
       
  8862       });
       
  8863       return self._super();
       
  8864     }
       
  8865   });
       
  8866 
       
  8867   var Toolbar$1 = Container.extend({
       
  8868     Defaults: {
       
  8869       role: 'toolbar',
       
  8870       layout: 'flow'
       
  8871     },
       
  8872     init: function (settings) {
       
  8873       var self = this;
       
  8874       self._super(settings);
       
  8875       self.classes.add('toolbar');
       
  8876     },
       
  8877     postRender: function () {
       
  8878       var self = this;
       
  8879       self.items().each(function (ctrl) {
       
  8880         ctrl.classes.add('toolbar-item');
       
  8881       });
       
  8882       return self._super();
       
  8883     }
       
  8884   });
       
  8885 
       
  8886   var MenuBar = Toolbar$1.extend({
       
  8887     Defaults: {
       
  8888       role: 'menubar',
       
  8889       containerCls: 'menubar',
       
  8890       ariaRoot: true,
       
  8891       defaults: { type: 'menubutton' }
       
  8892     }
       
  8893   });
       
  8894 
       
  8895   function isChildOf$1(node, parent$$1) {
       
  8896     while (node) {
       
  8897       if (parent$$1 === node) {
       
  8898         return true;
       
  8899       }
       
  8900       node = node.parentNode;
       
  8901     }
       
  8902     return false;
       
  8903   }
       
  8904   var MenuButton = Button.extend({
       
  8905     init: function (settings) {
       
  8906       var self$$1 = this;
       
  8907       self$$1._renderOpen = true;
       
  8908       self$$1._super(settings);
       
  8909       settings = self$$1.settings;
       
  8910       self$$1.classes.add('menubtn');
       
  8911       if (settings.fixedWidth) {
       
  8912         self$$1.classes.add('fixed-width');
       
  8913       }
       
  8914       self$$1.aria('haspopup', true);
       
  8915       self$$1.state.set('menu', settings.menu || self$$1.render());
       
  8916     },
       
  8917     showMenu: function (toggle) {
       
  8918       var self$$1 = this;
       
  8919       var menu;
       
  8920       if (self$$1.menu && self$$1.menu.visible() && toggle !== false) {
       
  8921         return self$$1.hideMenu();
       
  8922       }
       
  8923       if (!self$$1.menu) {
       
  8924         menu = self$$1.state.get('menu') || [];
       
  8925         self$$1.classes.add('opened');
       
  8926         if (menu.length) {
       
  8927           menu = {
       
  8928             type: 'menu',
       
  8929             animate: true,
       
  8930             items: menu
       
  8931           };
       
  8932         } else {
       
  8933           menu.type = menu.type || 'menu';
       
  8934           menu.animate = true;
       
  8935         }
       
  8936         if (!menu.renderTo) {
       
  8937           self$$1.menu = global$11.create(menu).parent(self$$1).renderTo();
       
  8938         } else {
       
  8939           self$$1.menu = menu.parent(self$$1).show().renderTo();
       
  8940         }
       
  8941         self$$1.fire('createmenu');
       
  8942         self$$1.menu.reflow();
       
  8943         self$$1.menu.on('cancel', function (e) {
       
  8944           if (e.control.parent() === self$$1.menu) {
       
  8945             e.stopPropagation();
       
  8946             self$$1.focus();
       
  8947             self$$1.hideMenu();
       
  8948           }
       
  8949         });
       
  8950         self$$1.menu.on('select', function () {
       
  8951           self$$1.focus();
       
  8952         });
       
  8953         self$$1.menu.on('show hide', function (e) {
       
  8954           if (e.control === self$$1.menu) {
       
  8955             self$$1.activeMenu(e.type === 'show');
       
  8956             self$$1.classes.toggle('opened', e.type === 'show');
       
  8957           }
       
  8958           self$$1.aria('expanded', e.type === 'show');
       
  8959         }).fire('show');
       
  8960       }
       
  8961       self$$1.menu.show();
       
  8962       self$$1.menu.layoutRect({ w: self$$1.layoutRect().w });
       
  8963       self$$1.menu.repaint();
       
  8964       self$$1.menu.moveRel(self$$1.getEl(), self$$1.isRtl() ? [
       
  8965         'br-tr',
       
  8966         'tr-br'
       
  8967       ] : [
       
  8968         'bl-tl',
       
  8969         'tl-bl'
       
  8970       ]);
       
  8971       self$$1.fire('showmenu');
       
  8972     },
       
  8973     hideMenu: function () {
       
  8974       var self$$1 = this;
       
  8975       if (self$$1.menu) {
       
  8976         self$$1.menu.items().each(function (item) {
       
  8977           if (item.hideMenu) {
       
  8978             item.hideMenu();
       
  8979           }
       
  8980         });
       
  8981         self$$1.menu.hide();
       
  8982       }
       
  8983     },
       
  8984     activeMenu: function (state) {
       
  8985       this.classes.toggle('active', state);
       
  8986     },
       
  8987     renderHtml: function () {
       
  8988       var self$$1 = this, id = self$$1._id, prefix = self$$1.classPrefix;
       
  8989       var icon = self$$1.settings.icon, image;
       
  8990       var text = self$$1.state.get('text');
       
  8991       var textHtml = '';
       
  8992       image = self$$1.settings.image;
       
  8993       if (image) {
       
  8994         icon = 'none';
       
  8995         if (typeof image !== 'string') {
       
  8996           image = window.getSelection ? image[0] : image[1];
       
  8997         }
       
  8998         image = ' style="background-image: url(\'' + image + '\')"';
       
  8999       } else {
       
  9000         image = '';
       
  9001       }
       
  9002       if (text) {
       
  9003         self$$1.classes.add('btn-has-text');
       
  9004         textHtml = '<span class="' + prefix + 'txt">' + self$$1.encode(text) + '</span>';
       
  9005       }
       
  9006       icon = self$$1.settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';
       
  9007       self$$1.aria('role', self$$1.parent() instanceof MenuBar ? 'menuitem' : 'button');
       
  9008       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>';
       
  9009     },
       
  9010     postRender: function () {
       
  9011       var self$$1 = this;
       
  9012       self$$1.on('click', function (e) {
       
  9013         if (e.control === self$$1 && isChildOf$1(e.target, self$$1.getEl())) {
       
  9014           self$$1.focus();
       
  9015           self$$1.showMenu(!e.aria);
       
  9016           if (e.aria) {
       
  9017             self$$1.menu.items().filter(':visible')[0].focus();
       
  9018           }
       
  9019         }
       
  9020       });
       
  9021       self$$1.on('mouseenter', function (e) {
       
  9022         var overCtrl = e.control;
       
  9023         var parent$$1 = self$$1.parent();
       
  9024         var hasVisibleSiblingMenu;
       
  9025         if (overCtrl && parent$$1 && overCtrl instanceof MenuButton && overCtrl.parent() === parent$$1) {
       
  9026           parent$$1.items().filter('MenuButton').each(function (ctrl) {
       
  9027             if (ctrl.hideMenu && ctrl !== overCtrl) {
       
  9028               if (ctrl.menu && ctrl.menu.visible()) {
       
  9029                 hasVisibleSiblingMenu = true;
       
  9030               }
       
  9031               ctrl.hideMenu();
       
  9032             }
       
  9033           });
       
  9034           if (hasVisibleSiblingMenu) {
       
  9035             overCtrl.focus();
       
  9036             overCtrl.showMenu();
       
  9037           }
       
  9038         }
       
  9039       });
       
  9040       return self$$1._super();
       
  9041     },
       
  9042     bindStates: function () {
       
  9043       var self$$1 = this;
       
  9044       self$$1.state.on('change:menu', function () {
       
  9045         if (self$$1.menu) {
       
  9046           self$$1.menu.remove();
       
  9047         }
       
  9048         self$$1.menu = null;
       
  9049       });
       
  9050       return self$$1._super();
       
  9051     },
       
  9052     remove: function () {
       
  9053       this._super();
       
  9054       if (this.menu) {
       
  9055         this.menu.remove();
       
  9056       }
       
  9057     }
       
  9058   });
       
  9059 
       
  9060   function Throbber (elm, inline) {
       
  9061     var self = this;
       
  9062     var state;
       
  9063     var classPrefix = Control$1.classPrefix;
       
  9064     var timer;
       
  9065     self.show = function (time, callback) {
       
  9066       function render() {
       
  9067         if (state) {
       
  9068           global$7(elm).append('<div class="' + classPrefix + 'throbber' + (inline ? ' ' + classPrefix + 'throbber-inline' : '') + '"></div>');
       
  9069           if (callback) {
       
  9070             callback();
       
  9071           }
       
  9072         }
       
  9073       }
       
  9074       self.hide();
       
  9075       state = true;
       
  9076       if (time) {
       
  9077         timer = global$3.setTimeout(render, time);
       
  9078       } else {
       
  9079         render();
       
  9080       }
       
  9081       return self;
       
  9082     };
       
  9083     self.hide = function () {
       
  9084       var child = elm.lastChild;
       
  9085       global$3.clearTimeout(timer);
       
  9086       if (child && child.className.indexOf('throbber') !== -1) {
       
  9087         child.parentNode.removeChild(child);
       
  9088       }
       
  9089       state = false;
       
  9090       return self;
       
  9091     };
       
  9092   }
       
  9093 
       
  9094   var Menu = FloatPanel.extend({
       
  9095     Defaults: {
       
  9096       defaultType: 'menuitem',
       
  9097       border: 1,
       
  9098       layout: 'stack',
       
  9099       role: 'application',
       
  9100       bodyRole: 'menu',
       
  9101       ariaRoot: true
       
  9102     },
       
  9103     init: function (settings) {
       
  9104       var self = this;
       
  9105       settings.autohide = true;
       
  9106       settings.constrainToViewport = true;
       
  9107       if (typeof settings.items === 'function') {
       
  9108         settings.itemsFactory = settings.items;
       
  9109         settings.items = [];
       
  9110       }
       
  9111       if (settings.itemDefaults) {
       
  9112         var items = settings.items;
       
  9113         var i = items.length;
       
  9114         while (i--) {
       
  9115           items[i] = global$4.extend({}, settings.itemDefaults, items[i]);
       
  9116         }
       
  9117       }
       
  9118       self._super(settings);
       
  9119       self.classes.add('menu');
       
  9120       if (settings.animate && global$1.ie !== 11) {
       
  9121         self.classes.add('animate');
       
  9122       }
       
  9123     },
       
  9124     repaint: function () {
       
  9125       this.classes.toggle('menu-align', true);
       
  9126       this._super();
       
  9127       this.getEl().style.height = '';
       
  9128       this.getEl('body').style.height = '';
       
  9129       return this;
       
  9130     },
       
  9131     cancel: function () {
       
  9132       var self = this;
       
  9133       self.hideAll();
       
  9134       self.fire('select');
       
  9135     },
       
  9136     load: function () {
       
  9137       var self = this;
       
  9138       var time, factory;
       
  9139       function hideThrobber() {
       
  9140         if (self.throbber) {
       
  9141           self.throbber.hide();
       
  9142           self.throbber = null;
       
  9143         }
       
  9144       }
       
  9145       factory = self.settings.itemsFactory;
       
  9146       if (!factory) {
       
  9147         return;
       
  9148       }
       
  9149       if (!self.throbber) {
       
  9150         self.throbber = new Throbber(self.getEl('body'), true);
       
  9151         if (self.items().length === 0) {
       
  9152           self.throbber.show();
       
  9153           self.fire('loading');
       
  9154         } else {
       
  9155           self.throbber.show(100, function () {
       
  9156             self.items().remove();
       
  9157             self.fire('loading');
       
  9158           });
       
  9159         }
       
  9160         self.on('hide close', hideThrobber);
       
  9161       }
       
  9162       self.requestTime = time = new Date().getTime();
       
  9163       self.settings.itemsFactory(function (items) {
       
  9164         if (items.length === 0) {
       
  9165           self.hide();
       
  9166           return;
       
  9167         }
       
  9168         if (self.requestTime !== time) {
       
  9169           return;
       
  9170         }
       
  9171         self.getEl().style.width = '';
       
  9172         self.getEl('body').style.width = '';
       
  9173         hideThrobber();
       
  9174         self.items().remove();
       
  9175         self.getEl('body').innerHTML = '';
       
  9176         self.add(items);
       
  9177         self.renderNew();
       
  9178         self.fire('loaded');
       
  9179       });
       
  9180     },
       
  9181     hideAll: function () {
       
  9182       var self = this;
       
  9183       this.find('menuitem').exec('hideMenu');
       
  9184       return self._super();
       
  9185     },
       
  9186     preRender: function () {
       
  9187       var self = this;
       
  9188       self.items().each(function (ctrl) {
       
  9189         var settings = ctrl.settings;
       
  9190         if (settings.icon || settings.image || settings.selectable) {
       
  9191           self._hasIcons = true;
       
  9192           return false;
       
  9193         }
       
  9194       });
       
  9195       if (self.settings.itemsFactory) {
       
  9196         self.on('postrender', function () {
       
  9197           if (self.settings.itemsFactory) {
       
  9198             self.load();
       
  9199           }
       
  9200         });
       
  9201       }
       
  9202       self.on('show hide', function (e) {
       
  9203         if (e.control === self) {
       
  9204           if (e.type === 'show') {
       
  9205             global$3.setTimeout(function () {
       
  9206               self.classes.add('in');
       
  9207             }, 0);
       
  9208           } else {
       
  9209             self.classes.remove('in');
       
  9210           }
       
  9211         }
       
  9212       });
       
  9213       return self._super();
       
  9214     }
       
  9215   });
       
  9216 
       
  9217   var ListBox = MenuButton.extend({
       
  9218     init: function (settings) {
       
  9219       var self = this;
       
  9220       var values, selected, selectedText, lastItemCtrl;
       
  9221       function setSelected(menuValues) {
       
  9222         for (var i = 0; i < menuValues.length; i++) {
       
  9223           selected = menuValues[i].selected || settings.value === menuValues[i].value;
       
  9224           if (selected) {
       
  9225             selectedText = selectedText || menuValues[i].text;
       
  9226             self.state.set('value', menuValues[i].value);
       
  9227             return true;
       
  9228           }
       
  9229           if (menuValues[i].menu) {
       
  9230             if (setSelected(menuValues[i].menu)) {
       
  9231               return true;
       
  9232             }
       
  9233           }
       
  9234         }
       
  9235       }
       
  9236       self._super(settings);
       
  9237       settings = self.settings;
       
  9238       self._values = values = settings.values;
       
  9239       if (values) {
       
  9240         if (typeof settings.value !== 'undefined') {
       
  9241           setSelected(values);
       
  9242         }
       
  9243         if (!selected && values.length > 0) {
       
  9244           selectedText = values[0].text;
       
  9245           self.state.set('value', values[0].value);
       
  9246         }
       
  9247         self.state.set('menu', values);
       
  9248       }
       
  9249       self.state.set('text', settings.text || selectedText);
       
  9250       self.classes.add('listbox');
       
  9251       self.on('select', function (e) {
       
  9252         var ctrl = e.control;
       
  9253         if (lastItemCtrl) {
       
  9254           e.lastControl = lastItemCtrl;
       
  9255         }
       
  9256         if (settings.multiple) {
       
  9257           ctrl.active(!ctrl.active());
       
  9258         } else {
       
  9259           self.value(e.control.value());
       
  9260         }
       
  9261         lastItemCtrl = ctrl;
       
  9262       });
       
  9263     },
       
  9264     value: function (value) {
       
  9265       if (arguments.length === 0) {
       
  9266         return this.state.get('value');
       
  9267       }
       
  9268       if (typeof value === 'undefined') {
       
  9269         return this;
       
  9270       }
       
  9271       if (this.settings.values) {
       
  9272         var matchingValues = global$4.grep(this.settings.values, function (a) {
       
  9273           return a.value === value;
       
  9274         });
       
  9275         if (matchingValues.length > 0) {
       
  9276           this.state.set('value', value);
       
  9277         } else if (value === null) {
       
  9278           this.state.set('value', null);
       
  9279         }
       
  9280       } else {
       
  9281         this.state.set('value', value);
       
  9282       }
       
  9283       return this;
       
  9284     },
       
  9285     bindStates: function () {
       
  9286       var self = this;
       
  9287       function activateMenuItemsByValue(menu, value) {
       
  9288         if (menu instanceof Menu) {
       
  9289           menu.items().each(function (ctrl) {
       
  9290             if (!ctrl.hasMenus()) {
       
  9291               ctrl.active(ctrl.value() === value);
       
  9292             }
       
  9293           });
       
  9294         }
       
  9295       }
       
  9296       function getSelectedItem(menuValues, value) {
       
  9297         var selectedItem;
       
  9298         if (!menuValues) {
       
  9299           return;
       
  9300         }
       
  9301         for (var i = 0; i < menuValues.length; i++) {
       
  9302           if (menuValues[i].value === value) {
       
  9303             return menuValues[i];
       
  9304           }
       
  9305           if (menuValues[i].menu) {
       
  9306             selectedItem = getSelectedItem(menuValues[i].menu, value);
       
  9307             if (selectedItem) {
       
  9308               return selectedItem;
       
  9309             }
       
  9310           }
       
  9311         }
       
  9312       }
       
  9313       self.on('show', function (e) {
       
  9314         activateMenuItemsByValue(e.control, self.value());
       
  9315       });
       
  9316       self.state.on('change:value', function (e) {
       
  9317         var selectedItem = getSelectedItem(self.state.get('menu'), e.value);
       
  9318         if (selectedItem) {
       
  9319           self.text(selectedItem.text);
       
  9320         } else {
       
  9321           self.text(self.settings.text);
       
  9322         }
       
  9323       });
       
  9324       return self._super();
       
  9325     }
       
  9326   });
       
  9327 
       
  9328   var toggleTextStyle = function (ctrl, state) {
       
  9329     var textStyle = ctrl._textStyle;
       
  9330     if (textStyle) {
       
  9331       var textElm = ctrl.getEl('text');
       
  9332       textElm.setAttribute('style', textStyle);
       
  9333       if (state) {
       
  9334         textElm.style.color = '';
       
  9335         textElm.style.backgroundColor = '';
       
  9336       }
       
  9337     }
       
  9338   };
       
  9339   var MenuItem = Widget.extend({
       
  9340     Defaults: {
       
  9341       border: 0,
       
  9342       role: 'menuitem'
       
  9343     },
       
  9344     init: function (settings) {
       
  9345       var self = this;
       
  9346       var text;
       
  9347       self._super(settings);
       
  9348       settings = self.settings;
       
  9349       self.classes.add('menu-item');
       
  9350       if (settings.menu) {
       
  9351         self.classes.add('menu-item-expand');
       
  9352       }
       
  9353       if (settings.preview) {
       
  9354         self.classes.add('menu-item-preview');
       
  9355       }
       
  9356       text = self.state.get('text');
       
  9357       if (text === '-' || text === '|') {
       
  9358         self.classes.add('menu-item-sep');
       
  9359         self.aria('role', 'separator');
       
  9360         self.state.set('text', '-');
       
  9361       }
       
  9362       if (settings.selectable) {
       
  9363         self.aria('role', 'menuitemcheckbox');
       
  9364         self.classes.add('menu-item-checkbox');
       
  9365         settings.icon = 'selected';
       
  9366       }
       
  9367       if (!settings.preview && !settings.selectable) {
       
  9368         self.classes.add('menu-item-normal');
       
  9369       }
       
  9370       self.on('mousedown', function (e) {
       
  9371         e.preventDefault();
       
  9372       });
       
  9373       if (settings.menu && !settings.ariaHideMenu) {
       
  9374         self.aria('haspopup', true);
       
  9375       }
       
  9376     },
       
  9377     hasMenus: function () {
       
  9378       return !!this.settings.menu;
       
  9379     },
       
  9380     showMenu: function () {
       
  9381       var self = this;
       
  9382       var settings = self.settings;
       
  9383       var menu;
       
  9384       var parent = self.parent();
       
  9385       parent.items().each(function (ctrl) {
       
  9386         if (ctrl !== self) {
       
  9387           ctrl.hideMenu();
       
  9388         }
       
  9389       });
       
  9390       if (settings.menu) {
       
  9391         menu = self.menu;
       
  9392         if (!menu) {
       
  9393           menu = settings.menu;
       
  9394           if (menu.length) {
       
  9395             menu = {
       
  9396               type: 'menu',
       
  9397               items: menu
       
  9398             };
       
  9399           } else {
       
  9400             menu.type = menu.type || 'menu';
       
  9401           }
       
  9402           if (parent.settings.itemDefaults) {
       
  9403             menu.itemDefaults = parent.settings.itemDefaults;
       
  9404           }
       
  9405           menu = self.menu = global$11.create(menu).parent(self).renderTo();
       
  9406           menu.reflow();
       
  9407           menu.on('cancel', function (e) {
       
  9408             e.stopPropagation();
       
  9409             self.focus();
       
  9410             menu.hide();
       
  9411           });
       
  9412           menu.on('show hide', function (e) {
       
  9413             if (e.control.items) {
       
  9414               e.control.items().each(function (ctrl) {
       
  9415                 ctrl.active(ctrl.settings.selected);
       
  9416               });
       
  9417             }
       
  9418           }).fire('show');
       
  9419           menu.on('hide', function (e) {
       
  9420             if (e.control === menu) {
       
  9421               self.classes.remove('selected');
       
  9422             }
       
  9423           });
       
  9424           menu.submenu = true;
       
  9425         } else {
       
  9426           menu.show();
       
  9427         }
       
  9428         menu._parentMenu = parent;
       
  9429         menu.classes.add('menu-sub');
       
  9430         var rel = menu.testMoveRel(self.getEl(), self.isRtl() ? [
       
  9431           'tl-tr',
       
  9432           'bl-br',
       
  9433           'tr-tl',
       
  9434           'br-bl'
       
  9435         ] : [
       
  9436           'tr-tl',
       
  9437           'br-bl',
       
  9438           'tl-tr',
       
  9439           'bl-br'
       
  9440         ]);
       
  9441         menu.moveRel(self.getEl(), rel);
       
  9442         menu.rel = rel;
       
  9443         rel = 'menu-sub-' + rel;
       
  9444         menu.classes.remove(menu._lastRel).add(rel);
       
  9445         menu._lastRel = rel;
       
  9446         self.classes.add('selected');
       
  9447         self.aria('expanded', true);
       
  9448       }
       
  9449     },
       
  9450     hideMenu: function () {
       
  9451       var self = this;
       
  9452       if (self.menu) {
       
  9453         self.menu.items().each(function (item) {
       
  9454           if (item.hideMenu) {
       
  9455             item.hideMenu();
       
  9456           }
       
  9457         });
       
  9458         self.menu.hide();
       
  9459         self.aria('expanded', false);
       
  9460       }
       
  9461       return self;
       
  9462     },
       
  9463     renderHtml: function () {
       
  9464       var self = this;
       
  9465       var id = self._id;
       
  9466       var settings = self.settings;
       
  9467       var prefix = self.classPrefix;
       
  9468       var text = self.state.get('text');
       
  9469       var icon = self.settings.icon, image = '', shortcut = settings.shortcut;
       
  9470       var url = self.encode(settings.url), iconHtml = '';
       
  9471       function convertShortcut(shortcut) {
       
  9472         var i, value, replace = {};
       
  9473         if (global$1.mac) {
       
  9474           replace = {
       
  9475             alt: '&#x2325;',
       
  9476             ctrl: '&#x2318;',
       
  9477             shift: '&#x21E7;',
       
  9478             meta: '&#x2318;'
       
  9479           };
       
  9480         } else {
       
  9481           replace = { meta: 'Ctrl' };
       
  9482         }
       
  9483         shortcut = shortcut.split('+');
       
  9484         for (i = 0; i < shortcut.length; i++) {
       
  9485           value = replace[shortcut[i].toLowerCase()];
       
  9486           if (value) {
       
  9487             shortcut[i] = value;
       
  9488           }
       
  9489         }
       
  9490         return shortcut.join('+');
       
  9491       }
       
  9492       function escapeRegExp(str) {
       
  9493         return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
       
  9494       }
       
  9495       function markMatches(text) {
       
  9496         var match = settings.match || '';
       
  9497         return match ? text.replace(new RegExp(escapeRegExp(match), 'gi'), function (match) {
       
  9498           return '!mce~match[' + match + ']mce~match!';
       
  9499         }) : text;
       
  9500       }
       
  9501       function boldMatches(text) {
       
  9502         return text.replace(new RegExp(escapeRegExp('!mce~match['), 'g'), '<b>').replace(new RegExp(escapeRegExp(']mce~match!'), 'g'), '</b>');
       
  9503       }
       
  9504       if (icon) {
       
  9505         self.parent().classes.add('menu-has-icons');
       
  9506       }
       
  9507       if (settings.image) {
       
  9508         image = ' style="background-image: url(\'' + settings.image + '\')"';
       
  9509       }
       
  9510       if (shortcut) {
       
  9511         shortcut = convertShortcut(shortcut);
       
  9512       }
       
  9513       icon = prefix + 'ico ' + prefix + 'i-' + (self.settings.icon || 'none');
       
  9514       iconHtml = text !== '-' ? '<i class="' + icon + '"' + image + '></i>\xA0' : '';
       
  9515       text = boldMatches(self.encode(markMatches(text)));
       
  9516       url = boldMatches(self.encode(markMatches(url)));
       
  9517       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>';
       
  9518     },
       
  9519     postRender: function () {
       
  9520       var self = this, settings = self.settings;
       
  9521       var textStyle = settings.textStyle;
       
  9522       if (typeof textStyle === 'function') {
       
  9523         textStyle = textStyle.call(this);
       
  9524       }
       
  9525       if (textStyle) {
       
  9526         var textElm = self.getEl('text');
       
  9527         if (textElm) {
       
  9528           textElm.setAttribute('style', textStyle);
       
  9529           self._textStyle = textStyle;
       
  9530         }
       
  9531       }
       
  9532       self.on('mouseenter click', function (e) {
       
  9533         if (e.control === self) {
       
  9534           if (!settings.menu && e.type === 'click') {
       
  9535             self.fire('select');
       
  9536             global$3.requestAnimationFrame(function () {
       
  9537               self.parent().hideAll();
       
  9538             });
       
  9539           } else {
       
  9540             self.showMenu();
       
  9541             if (e.aria) {
       
  9542               self.menu.focus(true);
       
  9543             }
       
  9544           }
       
  9545         }
       
  9546       });
       
  9547       self._super();
       
  9548       return self;
       
  9549     },
       
  9550     hover: function () {
       
  9551       var self = this;
       
  9552       self.parent().items().each(function (ctrl) {
       
  9553         ctrl.classes.remove('selected');
       
  9554       });
       
  9555       self.classes.toggle('selected', true);
       
  9556       return self;
       
  9557     },
       
  9558     active: function (state) {
       
  9559       toggleTextStyle(this, state);
       
  9560       if (typeof state !== 'undefined') {
       
  9561         this.aria('checked', state);
       
  9562       }
       
  9563       return this._super(state);
       
  9564     },
       
  9565     remove: function () {
       
  9566       this._super();
       
  9567       if (this.menu) {
       
  9568         this.menu.remove();
       
  9569       }
       
  9570     }
       
  9571   });
       
  9572 
       
  9573   var Radio = Checkbox.extend({
       
  9574     Defaults: {
       
  9575       classes: 'radio',
       
  9576       role: 'radio'
       
  9577     }
       
  9578   });
       
  9579 
       
  9580   var ResizeHandle = Widget.extend({
       
  9581     renderHtml: function () {
       
  9582       var self = this, prefix = self.classPrefix;
       
  9583       self.classes.add('resizehandle');
       
  9584       if (self.settings.direction === 'both') {
       
  9585         self.classes.add('resizehandle-both');
       
  9586       }
       
  9587       self.canFocus = false;
       
  9588       return '<div id="' + self._id + '" class="' + self.classes + '">' + '<i class="' + prefix + 'ico ' + prefix + 'i-resize"></i>' + '</div>';
       
  9589     },
       
  9590     postRender: function () {
       
  9591       var self = this;
       
  9592       self._super();
       
  9593       self.resizeDragHelper = new DragHelper(this._id, {
       
  9594         start: function () {
       
  9595           self.fire('ResizeStart');
       
  9596         },
       
  9597         drag: function (e) {
       
  9598           if (self.settings.direction !== 'both') {
       
  9599             e.deltaX = 0;
       
  9600           }
       
  9601           self.fire('Resize', e);
       
  9602         },
       
  9603         stop: function () {
       
  9604           self.fire('ResizeEnd');
       
  9605         }
       
  9606       });
       
  9607     },
       
  9608     remove: function () {
       
  9609       if (this.resizeDragHelper) {
       
  9610         this.resizeDragHelper.destroy();
       
  9611       }
       
  9612       return this._super();
       
  9613     }
       
  9614   });
       
  9615 
       
  9616   function createOptions(options) {
       
  9617     var strOptions = '';
       
  9618     if (options) {
       
  9619       for (var i = 0; i < options.length; i++) {
       
  9620         strOptions += '<option value="' + options[i] + '">' + options[i] + '</option>';
       
  9621       }
       
  9622     }
       
  9623     return strOptions;
       
  9624   }
       
  9625   var SelectBox = Widget.extend({
       
  9626     Defaults: {
       
  9627       classes: 'selectbox',
       
  9628       role: 'selectbox',
       
  9629       options: []
       
  9630     },
       
  9631     init: function (settings) {
       
  9632       var self = this;
       
  9633       self._super(settings);
       
  9634       if (self.settings.size) {
       
  9635         self.size = self.settings.size;
       
  9636       }
       
  9637       if (self.settings.options) {
       
  9638         self._options = self.settings.options;
       
  9639       }
       
  9640       self.on('keydown', function (e) {
       
  9641         var rootControl;
       
  9642         if (e.keyCode === 13) {
       
  9643           e.preventDefault();
       
  9644           self.parents().reverse().each(function (ctrl) {
       
  9645             if (ctrl.toJSON) {
       
  9646               rootControl = ctrl;
       
  9647               return false;
       
  9648             }
       
  9649           });
       
  9650           self.fire('submit', { data: rootControl.toJSON() });
       
  9651         }
       
  9652       });
       
  9653     },
       
  9654     options: function (state) {
       
  9655       if (!arguments.length) {
       
  9656         return this.state.get('options');
       
  9657       }
       
  9658       this.state.set('options', state);
       
  9659       return this;
       
  9660     },
       
  9661     renderHtml: function () {
       
  9662       var self = this;
       
  9663       var options, size = '';
       
  9664       options = createOptions(self._options);
       
  9665       if (self.size) {
       
  9666         size = ' size = "' + self.size + '"';
       
  9667       }
       
  9668       return '<select id="' + self._id + '" class="' + self.classes + '"' + size + '>' + options + '</select>';
       
  9669     },
       
  9670     bindStates: function () {
       
  9671       var self = this;
       
  9672       self.state.on('change:options', function (e) {
       
  9673         self.getEl().innerHTML = createOptions(e.value);
       
  9674       });
       
  9675       return self._super();
       
  9676     }
       
  9677   });
       
  9678 
       
  9679   function constrain(value, minVal, maxVal) {
       
  9680     if (value < minVal) {
       
  9681       value = minVal;
       
  9682     }
       
  9683     if (value > maxVal) {
       
  9684       value = maxVal;
       
  9685     }
       
  9686     return value;
       
  9687   }
       
  9688   function setAriaProp(el, name, value) {
       
  9689     el.setAttribute('aria-' + name, value);
       
  9690   }
       
  9691   function updateSliderHandle(ctrl, value) {
       
  9692     var maxHandlePos, shortSizeName, sizeName, stylePosName, styleValue, handleEl;
       
  9693     if (ctrl.settings.orientation === 'v') {
       
  9694       stylePosName = 'top';
       
  9695       sizeName = 'height';
       
  9696       shortSizeName = 'h';
       
  9697     } else {
       
  9698       stylePosName = 'left';
       
  9699       sizeName = 'width';
       
  9700       shortSizeName = 'w';
       
  9701     }
       
  9702     handleEl = ctrl.getEl('handle');
       
  9703     maxHandlePos = (ctrl.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName];
       
  9704     styleValue = maxHandlePos * ((value - ctrl._minValue) / (ctrl._maxValue - ctrl._minValue)) + 'px';
       
  9705     handleEl.style[stylePosName] = styleValue;
       
  9706     handleEl.style.height = ctrl.layoutRect().h + 'px';
       
  9707     setAriaProp(handleEl, 'valuenow', value);
       
  9708     setAriaProp(handleEl, 'valuetext', '' + ctrl.settings.previewFilter(value));
       
  9709     setAriaProp(handleEl, 'valuemin', ctrl._minValue);
       
  9710     setAriaProp(handleEl, 'valuemax', ctrl._maxValue);
       
  9711   }
       
  9712   var Slider = Widget.extend({
       
  9713     init: function (settings) {
       
  9714       var self = this;
       
  9715       if (!settings.previewFilter) {
       
  9716         settings.previewFilter = function (value) {
       
  9717           return Math.round(value * 100) / 100;
       
  9718         };
       
  9719       }
       
  9720       self._super(settings);
       
  9721       self.classes.add('slider');
       
  9722       if (settings.orientation === 'v') {
       
  9723         self.classes.add('vertical');
       
  9724       }
       
  9725       self._minValue = isNumber$1(settings.minValue) ? settings.minValue : 0;
       
  9726       self._maxValue = isNumber$1(settings.maxValue) ? settings.maxValue : 100;
       
  9727       self._initValue = self.state.get('value');
       
  9728     },
       
  9729     renderHtml: function () {
       
  9730       var self = this, id = self._id, prefix = self.classPrefix;
       
  9731       return '<div id="' + id + '" class="' + self.classes + '">' + '<div id="' + id + '-handle" class="' + prefix + 'slider-handle" role="slider" tabindex="-1"></div>' + '</div>';
       
  9732     },
       
  9733     reset: function () {
       
  9734       this.value(this._initValue).repaint();
       
  9735     },
       
  9736     postRender: function () {
       
  9737       var self = this;
       
  9738       var minValue, maxValue, screenCordName, stylePosName, sizeName, shortSizeName;
       
  9739       function toFraction(min, max, val) {
       
  9740         return (val + min) / (max - min);
       
  9741       }
       
  9742       function fromFraction(min, max, val) {
       
  9743         return val * (max - min) - min;
       
  9744       }
       
  9745       function handleKeyboard(minValue, maxValue) {
       
  9746         function alter(delta) {
       
  9747           var value;
       
  9748           value = self.value();
       
  9749           value = fromFraction(minValue, maxValue, toFraction(minValue, maxValue, value) + delta * 0.05);
       
  9750           value = constrain(value, minValue, maxValue);
       
  9751           self.value(value);
       
  9752           self.fire('dragstart', { value: value });
       
  9753           self.fire('drag', { value: value });
       
  9754           self.fire('dragend', { value: value });
       
  9755         }
       
  9756         self.on('keydown', function (e) {
       
  9757           switch (e.keyCode) {
       
  9758           case 37:
       
  9759           case 38:
       
  9760             alter(-1);
       
  9761             break;
       
  9762           case 39:
       
  9763           case 40:
       
  9764             alter(1);
       
  9765             break;
       
  9766           }
       
  9767         });
       
  9768       }
       
  9769       function handleDrag(minValue, maxValue, handleEl) {
       
  9770         var startPos, startHandlePos, maxHandlePos, handlePos, value;
       
  9771         self._dragHelper = new DragHelper(self._id, {
       
  9772           handle: self._id + '-handle',
       
  9773           start: function (e) {
       
  9774             startPos = e[screenCordName];
       
  9775             startHandlePos = parseInt(self.getEl('handle').style[stylePosName], 10);
       
  9776             maxHandlePos = (self.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName];
       
  9777             self.fire('dragstart', { value: value });
       
  9778           },
       
  9779           drag: function (e) {
       
  9780             var delta = e[screenCordName] - startPos;
       
  9781             handlePos = constrain(startHandlePos + delta, 0, maxHandlePos);
       
  9782             handleEl.style[stylePosName] = handlePos + 'px';
       
  9783             value = minValue + handlePos / maxHandlePos * (maxValue - minValue);
       
  9784             self.value(value);
       
  9785             self.tooltip().text('' + self.settings.previewFilter(value)).show().moveRel(handleEl, 'bc tc');
       
  9786             self.fire('drag', { value: value });
       
  9787           },
       
  9788           stop: function () {
       
  9789             self.tooltip().hide();
       
  9790             self.fire('dragend', { value: value });
       
  9791           }
       
  9792         });
       
  9793       }
       
  9794       minValue = self._minValue;
       
  9795       maxValue = self._maxValue;
       
  9796       if (self.settings.orientation === 'v') {
       
  9797         screenCordName = 'screenY';
       
  9798         stylePosName = 'top';
       
  9799         sizeName = 'height';
       
  9800         shortSizeName = 'h';
       
  9801       } else {
       
  9802         screenCordName = 'screenX';
       
  9803         stylePosName = 'left';
       
  9804         sizeName = 'width';
       
  9805         shortSizeName = 'w';
       
  9806       }
       
  9807       self._super();
       
  9808       handleKeyboard(minValue, maxValue);
       
  9809       handleDrag(minValue, maxValue, self.getEl('handle'));
       
  9810     },
       
  9811     repaint: function () {
       
  9812       this._super();
       
  9813       updateSliderHandle(this, this.value());
       
  9814     },
       
  9815     bindStates: function () {
       
  9816       var self = this;
       
  9817       self.state.on('change:value', function (e) {
       
  9818         updateSliderHandle(self, e.value);
       
  9819       });
       
  9820       return self._super();
       
  9821     }
       
  9822   });
       
  9823 
       
  9824   var Spacer = Widget.extend({
       
  9825     renderHtml: function () {
       
  9826       var self = this;
       
  9827       self.classes.add('spacer');
       
  9828       self.canFocus = false;
       
  9829       return '<div id="' + self._id + '" class="' + self.classes + '"></div>';
       
  9830     }
       
  9831   });
       
  9832 
       
  9833   var SplitButton = MenuButton.extend({
       
  9834     Defaults: {
       
  9835       classes: 'widget btn splitbtn',
       
  9836       role: 'button'
       
  9837     },
       
  9838     repaint: function () {
       
  9839       var self$$1 = this;
       
  9840       var elm = self$$1.getEl();
       
  9841       var rect = self$$1.layoutRect();
       
  9842       var mainButtonElm, menuButtonElm;
       
  9843       self$$1._super();
       
  9844       mainButtonElm = elm.firstChild;
       
  9845       menuButtonElm = elm.lastChild;
       
  9846       global$7(mainButtonElm).css({
       
  9847         width: rect.w - funcs.getSize(menuButtonElm).width,
       
  9848         height: rect.h - 2
       
  9849       });
       
  9850       global$7(menuButtonElm).css({ height: rect.h - 2 });
       
  9851       return self$$1;
       
  9852     },
       
  9853     activeMenu: function (state) {
       
  9854       var self$$1 = this;
       
  9855       global$7(self$$1.getEl().lastChild).toggleClass(self$$1.classPrefix + 'active', state);
       
  9856     },
       
  9857     renderHtml: function () {
       
  9858       var self$$1 = this;
       
  9859       var id = self$$1._id;
       
  9860       var prefix = self$$1.classPrefix;
       
  9861       var image;
       
  9862       var icon = self$$1.state.get('icon');
       
  9863       var text = self$$1.state.get('text');
       
  9864       var settings = self$$1.settings;
       
  9865       var textHtml = '', ariaPressed;
       
  9866       image = settings.image;
       
  9867       if (image) {
       
  9868         icon = 'none';
       
  9869         if (typeof image !== 'string') {
       
  9870           image = window.getSelection ? image[0] : image[1];
       
  9871         }
       
  9872         image = ' style="background-image: url(\'' + image + '\')"';
       
  9873       } else {
       
  9874         image = '';
       
  9875       }
       
  9876       icon = settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';
       
  9877       if (text) {
       
  9878         self$$1.classes.add('btn-has-text');
       
  9879         textHtml = '<span class="' + prefix + 'txt">' + self$$1.encode(text) + '</span>';
       
  9880       }
       
  9881       ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed="' + settings.active + '"' : '';
       
  9882       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>';
       
  9883     },
       
  9884     postRender: function () {
       
  9885       var self$$1 = this, onClickHandler = self$$1.settings.onclick;
       
  9886       self$$1.on('click', function (e) {
       
  9887         var node = e.target;
       
  9888         if (e.control === this) {
       
  9889           while (node) {
       
  9890             if (e.aria && e.aria.key !== 'down' || node.nodeName === 'BUTTON' && node.className.indexOf('open') === -1) {
       
  9891               e.stopImmediatePropagation();
       
  9892               if (onClickHandler) {
       
  9893                 onClickHandler.call(this, e);
       
  9894               }
       
  9895               return;
       
  9896             }
       
  9897             node = node.parentNode;
       
  9898           }
       
  9899         }
       
  9900       });
       
  9901       delete self$$1.settings.onclick;
       
  9902       return self$$1._super();
       
  9903     }
       
  9904   });
       
  9905 
       
  9906   var StackLayout = FlowLayout.extend({
       
  9907     Defaults: {
       
  9908       containerClass: 'stack-layout',
       
  9909       controlClass: 'stack-layout-item',
       
  9910       endClass: 'break'
       
  9911     },
       
  9912     isNative: function () {
       
  9913       return true;
       
  9914     }
       
  9915   });
       
  9916 
       
  9917   var TabPanel = Panel.extend({
       
  9918     Defaults: {
       
  9919       layout: 'absolute',
       
  9920       defaults: { type: 'panel' }
       
  9921     },
       
  9922     activateTab: function (idx) {
       
  9923       var activeTabElm;
       
  9924       if (this.activeTabId) {
       
  9925         activeTabElm = this.getEl(this.activeTabId);
       
  9926         global$7(activeTabElm).removeClass(this.classPrefix + 'active');
       
  9927         activeTabElm.setAttribute('aria-selected', 'false');
       
  9928       }
       
  9929       this.activeTabId = 't' + idx;
       
  9930       activeTabElm = this.getEl('t' + idx);
       
  9931       activeTabElm.setAttribute('aria-selected', 'true');
       
  9932       global$7(activeTabElm).addClass(this.classPrefix + 'active');
       
  9933       this.items()[idx].show().fire('showtab');
       
  9934       this.reflow();
       
  9935       this.items().each(function (item, i) {
       
  9936         if (idx !== i) {
       
  9937           item.hide();
       
  9938         }
       
  9939       });
       
  9940     },
       
  9941     renderHtml: function () {
       
  9942       var self = this;
       
  9943       var layout = self._layout;
       
  9944       var tabsHtml = '';
       
  9945       var prefix = self.classPrefix;
       
  9946       self.preRender();
       
  9947       layout.preRender(self);
       
  9948       self.items().each(function (ctrl, i) {
       
  9949         var id = self._id + '-t' + i;
       
  9950         ctrl.aria('role', 'tabpanel');
       
  9951         ctrl.aria('labelledby', id);
       
  9952         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>';
       
  9953       });
       
  9954       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>';
       
  9955     },
       
  9956     postRender: function () {
       
  9957       var self = this;
       
  9958       self._super();
       
  9959       self.settings.activeTab = self.settings.activeTab || 0;
       
  9960       self.activateTab(self.settings.activeTab);
       
  9961       this.on('click', function (e) {
       
  9962         var targetParent = e.target.parentNode;
       
  9963         if (targetParent && targetParent.id === self._id + '-head') {
       
  9964           var i = targetParent.childNodes.length;
       
  9965           while (i--) {
       
  9966             if (targetParent.childNodes[i] === e.target) {
       
  9967               self.activateTab(i);
       
  9968             }
       
  9969           }
       
  9970         }
       
  9971       });
       
  9972     },
       
  9973     initLayoutRect: function () {
       
  9974       var self = this;
       
  9975       var rect, minW, minH;
       
  9976       minW = funcs.getSize(self.getEl('head')).width;
       
  9977       minW = minW < 0 ? 0 : minW;
       
  9978       minH = 0;
       
  9979       self.items().each(function (item) {
       
  9980         minW = Math.max(minW, item.layoutRect().minW);
       
  9981         minH = Math.max(minH, item.layoutRect().minH);
       
  9982       });
       
  9983       self.items().each(function (ctrl) {
       
  9984         ctrl.settings.x = 0;
       
  9985         ctrl.settings.y = 0;
       
  9986         ctrl.settings.w = minW;
       
  9987         ctrl.settings.h = minH;
       
  9988         ctrl.layoutRect({
       
  9989           x: 0,
       
  9990           y: 0,
       
  9991           w: minW,
       
  9992           h: minH
       
  9993         });
       
  9994       });
       
  9995       var headH = funcs.getSize(self.getEl('head')).height;
       
  9996       self.settings.minWidth = minW;
       
  9997       self.settings.minHeight = minH + headH;
       
  9998       rect = self._super();
       
  9999       rect.deltaH += headH;
       
 10000       rect.innerH = rect.h - rect.deltaH;
       
 10001       return rect;
       
 10002     }
       
 10003   });
       
 10004 
       
 10005   var TextBox = Widget.extend({
       
 10006     init: function (settings) {
       
 10007       var self$$1 = this;
       
 10008       self$$1._super(settings);
       
 10009       self$$1.classes.add('textbox');
       
 10010       if (settings.multiline) {
       
 10011         self$$1.classes.add('multiline');
       
 10012       } else {
       
 10013         self$$1.on('keydown', function (e) {
       
 10014           var rootControl;
       
 10015           if (e.keyCode === 13) {
       
 10016             e.preventDefault();
       
 10017             self$$1.parents().reverse().each(function (ctrl) {
       
 10018               if (ctrl.toJSON) {
       
 10019                 rootControl = ctrl;
       
 10020                 return false;
       
 10021               }
       
 10022             });
       
 10023             self$$1.fire('submit', { data: rootControl.toJSON() });
       
 10024           }
       
 10025         });
       
 10026         self$$1.on('keyup', function (e) {
       
 10027           self$$1.state.set('value', e.target.value);
       
 10028         });
       
 10029       }
       
 10030     },
       
 10031     repaint: function () {
       
 10032       var self$$1 = this;
       
 10033       var style, rect, borderBox, borderW, borderH = 0, lastRepaintRect;
       
 10034       style = self$$1.getEl().style;
       
 10035       rect = self$$1._layoutRect;
       
 10036       lastRepaintRect = self$$1._lastRepaintRect || {};
       
 10037       var doc = document;
       
 10038       if (!self$$1.settings.multiline && doc.all && (!doc.documentMode || doc.documentMode <= 8)) {
       
 10039         style.lineHeight = rect.h - borderH + 'px';
       
 10040       }
       
 10041       borderBox = self$$1.borderBox;
       
 10042       borderW = borderBox.left + borderBox.right + 8;
       
 10043       borderH = borderBox.top + borderBox.bottom + (self$$1.settings.multiline ? 8 : 0);
       
 10044       if (rect.x !== lastRepaintRect.x) {
       
 10045         style.left = rect.x + 'px';
       
 10046         lastRepaintRect.x = rect.x;
       
 10047       }
       
 10048       if (rect.y !== lastRepaintRect.y) {
       
 10049         style.top = rect.y + 'px';
       
 10050         lastRepaintRect.y = rect.y;
       
 10051       }
       
 10052       if (rect.w !== lastRepaintRect.w) {
       
 10053         style.width = rect.w - borderW + 'px';
       
 10054         lastRepaintRect.w = rect.w;
       
 10055       }
       
 10056       if (rect.h !== lastRepaintRect.h) {
       
 10057         style.height = rect.h - borderH + 'px';
       
 10058         lastRepaintRect.h = rect.h;
       
 10059       }
       
 10060       self$$1._lastRepaintRect = lastRepaintRect;
       
 10061       self$$1.fire('repaint', {}, false);
       
 10062       return self$$1;
       
 10063     },
       
 10064     renderHtml: function () {
       
 10065       var self$$1 = this;
       
 10066       var settings = self$$1.settings;
       
 10067       var attrs, elm;
       
 10068       attrs = {
       
 10069         id: self$$1._id,
       
 10070         hidefocus: '1'
       
 10071       };
       
 10072       global$4.each([
       
 10073         'rows',
       
 10074         'spellcheck',
       
 10075         'maxLength',
       
 10076         'size',
       
 10077         'readonly',
       
 10078         'min',
       
 10079         'max',
       
 10080         'step',
       
 10081         'list',
       
 10082         'pattern',
       
 10083         'placeholder',
       
 10084         'required',
       
 10085         'multiple'
       
 10086       ], function (name$$1) {
       
 10087         attrs[name$$1] = settings[name$$1];
       
 10088       });
       
 10089       if (self$$1.disabled()) {
       
 10090         attrs.disabled = 'disabled';
       
 10091       }
       
 10092       if (settings.subtype) {
       
 10093         attrs.type = settings.subtype;
       
 10094       }
       
 10095       elm = funcs.create(settings.multiline ? 'textarea' : 'input', attrs);
       
 10096       elm.value = self$$1.state.get('value');
       
 10097       elm.className = self$$1.classes.toString();
       
 10098       return elm.outerHTML;
       
 10099     },
       
 10100     value: function (value) {
       
 10101       if (arguments.length) {
       
 10102         this.state.set('value', value);
       
 10103         return this;
       
 10104       }
       
 10105       if (this.state.get('rendered')) {
       
 10106         this.state.set('value', this.getEl().value);
       
 10107       }
       
 10108       return this.state.get('value');
       
 10109     },
       
 10110     postRender: function () {
       
 10111       var self$$1 = this;
       
 10112       self$$1.getEl().value = self$$1.state.get('value');
       
 10113       self$$1._super();
       
 10114       self$$1.$el.on('change', function (e) {
       
 10115         self$$1.state.set('value', e.target.value);
       
 10116         self$$1.fire('change', e);
       
 10117       });
       
 10118     },
       
 10119     bindStates: function () {
       
 10120       var self$$1 = this;
       
 10121       self$$1.state.on('change:value', function (e) {
       
 10122         if (self$$1.getEl().value !== e.value) {
       
 10123           self$$1.getEl().value = e.value;
       
 10124         }
       
 10125       });
       
 10126       self$$1.state.on('change:disabled', function (e) {
       
 10127         self$$1.getEl().disabled = e.value;
       
 10128       });
       
 10129       return self$$1._super();
       
 10130     },
       
 10131     remove: function () {
       
 10132       this.$el.off();
       
 10133       this._super();
       
 10134     }
       
 10135   });
       
 10136 
       
 10137   var getApi = function () {
       
 10138     return {
       
 10139       Selector: Selector,
       
 10140       Collection: Collection$2,
       
 10141       ReflowQueue: $_cqjgb518wjjgwek2f,
       
 10142       Control: Control$1,
       
 10143       Factory: global$11,
       
 10144       KeyboardNavigation: KeyboardNavigation,
       
 10145       Container: Container,
       
 10146       DragHelper: DragHelper,
       
 10147       Scrollable: $_8woeth19ajjgwek4b,
       
 10148       Panel: Panel,
       
 10149       Movable: $_8zu82i18yjjgwek2l,
       
 10150       Resizable: $_20hy1119bjjgwek4f,
       
 10151       FloatPanel: FloatPanel,
       
 10152       Window: Window$$1,
       
 10153       MessageBox: MessageBox,
       
 10154       Tooltip: Tooltip,
       
 10155       Widget: Widget,
       
 10156       Progress: Progress,
       
 10157       Notification: Notification,
       
 10158       Layout: Layout$1,
       
 10159       AbsoluteLayout: AbsoluteLayout,
       
 10160       Button: Button,
       
 10161       ButtonGroup: ButtonGroup,
       
 10162       Checkbox: Checkbox,
       
 10163       ComboBox: ComboBox,
       
 10164       ColorBox: ColorBox,
       
 10165       PanelButton: PanelButton,
       
 10166       ColorButton: ColorButton,
       
 10167       ColorPicker: ColorPicker,
       
 10168       Path: Path,
       
 10169       ElementPath: ElementPath,
       
 10170       FormItem: FormItem,
       
 10171       Form: Form,
       
 10172       FieldSet: FieldSet,
       
 10173       FilePicker: FilePicker,
       
 10174       FitLayout: FitLayout,
       
 10175       FlexLayout: FlexLayout,
       
 10176       FlowLayout: FlowLayout,
       
 10177       FormatControls: $_gg6ikw1bejjgwekc5,
       
 10178       GridLayout: GridLayout,
       
 10179       Iframe: Iframe,
       
 10180       InfoBox: InfoBox,
       
 10181       Label: Label,
       
 10182       Toolbar: Toolbar$1,
       
 10183       MenuBar: MenuBar,
       
 10184       MenuButton: MenuButton,
       
 10185       MenuItem: MenuItem,
       
 10186       Throbber: Throbber,
       
 10187       Menu: Menu,
       
 10188       ListBox: ListBox,
       
 10189       Radio: Radio,
       
 10190       ResizeHandle: ResizeHandle,
       
 10191       SelectBox: SelectBox,
       
 10192       Slider: Slider,
       
 10193       Spacer: Spacer,
       
 10194       SplitButton: SplitButton,
       
 10195       StackLayout: StackLayout,
       
 10196       TabPanel: TabPanel,
       
 10197       TextBox: TextBox,
       
 10198       DropZone: DropZone,
       
 10199       BrowseButton: BrowseButton
       
 10200     };
       
 10201   };
       
 10202   var appendTo = function (target) {
       
 10203     if (target.ui) {
       
 10204       global$4.each(getApi(), function (ref, key) {
       
 10205         target.ui[key] = ref;
       
 10206       });
       
 10207     } else {
       
 10208       target.ui = getApi();
       
 10209     }
       
 10210   };
       
 10211   var registerToFactory = function () {
       
 10212     global$4.each(getApi(), function (ref, key) {
       
 10213       global$11.add(key, ref);
       
 10214     });
       
 10215   };
       
 10216   var Api = {
       
 10217     appendTo: appendTo,
       
 10218     registerToFactory: registerToFactory
       
 10219   };
       
 10220 
       
 10221   Api.registerToFactory();
       
 10222   Api.appendTo(window.tinymce ? window.tinymce : {});
       
 10223   global.add('inlite', function (editor) {
       
 10224     var panel = create$3();
       
 10225     $_gg6ikw1bejjgwekc5.setup(editor);
       
 10226     $_epdxt419djjgwek4l.addToEditor(editor, panel);
       
 10227     return $_7y4x3k17sjjgwejyw.get(editor, panel);
       
 10228   });
       
 10229   function Theme () {
       
 10230   }
       
 10231 
       
 10232   return Theme;
       
 10233 
       
 10234 }());
       
 10235 })();