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