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