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&utm_medium=poweredby&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: '⌥', |
|
9284 ctrl: '⌘', |
|
9285 shift: '⇧', |
|
9286 meta: '⌘' |
|
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 })(); |