1 (function () { |
1 (function () { |
2 var inlite = (function () { |
2 var inlite = (function (domGlobals) { |
3 'use strict'; |
3 'use strict'; |
4 |
4 |
5 var global = tinymce.util.Tools.resolve('tinymce.ThemeManager'); |
5 var global = tinymce.util.Tools.resolve('tinymce.ThemeManager'); |
6 |
6 |
7 var global$1 = tinymce.util.Tools.resolve('tinymce.Env'); |
7 var global$1 = tinymce.util.Tools.resolve('tinymce.Env'); |
8 |
8 |
9 var global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils'); |
9 var global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils'); |
10 |
10 |
11 var global$3 = tinymce.util.Tools.resolve('tinymce.util.Delay'); |
11 var global$3 = tinymce.util.Tools.resolve('tinymce.util.Delay'); |
12 |
12 |
13 var flatten = function (arr) { |
13 var flatten = function (arr) { |
14 return arr.reduce(function (results, item) { |
14 return arr.reduce(function (results, item) { |
15 return Array.isArray(item) ? results.concat(flatten(item)) : results.concat(item); |
15 return Array.isArray(item) ? results.concat(flatten(item)) : results.concat(item); |
16 }, []); |
16 }, []); |
17 }; |
17 }; |
18 var $_ccn98l17xjjgwejz7 = { flatten: flatten }; |
18 var DeepFlatten = { flatten: flatten }; |
19 |
19 |
20 var result = function (id, rect) { |
20 var result = function (id, rect) { |
21 return { |
21 return { |
22 id: id, |
22 id: id, |
23 rect: rect |
23 rect: rect |
24 }; |
24 }; |
25 }; |
25 }; |
26 var match = function (editor, matchers) { |
26 var match = function (editor, matchers) { |
27 for (var i = 0; i < matchers.length; i++) { |
27 for (var i = 0; i < matchers.length; i++) { |
28 var f = matchers[i]; |
28 var f = matchers[i]; |
29 var result_1 = f(editor); |
29 var result_1 = f(editor); |
30 if (result_1) { |
30 if (result_1) { |
31 return result_1; |
31 return result_1; |
32 } |
32 } |
33 } |
33 } |
34 return null; |
34 return null; |
35 }; |
35 }; |
36 var $_6lg87517zjjgwejza = { |
36 var Matcher = { |
37 match: match, |
37 match: match, |
38 result: result |
38 result: result |
39 }; |
39 }; |
40 |
40 |
41 var fromClientRect = function (clientRect) { |
41 var fromClientRect = function (clientRect) { |
42 return { |
42 return { |
43 x: clientRect.left, |
43 x: clientRect.left, |
44 y: clientRect.top, |
44 y: clientRect.top, |
45 w: clientRect.width, |
45 w: clientRect.width, |
46 h: clientRect.height |
46 h: clientRect.height |
47 }; |
47 }; |
48 }; |
48 }; |
49 var toClientRect = function (geomRect) { |
49 var toClientRect = function (geomRect) { |
50 return { |
50 return { |
51 left: geomRect.x, |
51 left: geomRect.x, |
52 top: geomRect.y, |
52 top: geomRect.y, |
53 width: geomRect.w, |
53 width: geomRect.w, |
54 height: geomRect.h, |
54 height: geomRect.h, |
55 right: geomRect.x + geomRect.w, |
55 right: geomRect.x + geomRect.w, |
56 bottom: geomRect.y + geomRect.h |
56 bottom: geomRect.y + geomRect.h |
57 }; |
57 }; |
58 }; |
58 }; |
59 var $_1x174x181jjgwejzd = { |
59 var Convert = { |
60 fromClientRect: fromClientRect, |
60 fromClientRect: fromClientRect, |
61 toClientRect: toClientRect |
61 toClientRect: toClientRect |
62 }; |
62 }; |
63 |
63 |
64 var toAbsolute = function (rect) { |
64 var toAbsolute = function (rect) { |
65 var vp = global$2.DOM.getViewPort(); |
65 var vp = global$2.DOM.getViewPort(); |
66 return { |
66 return { |
67 x: rect.x + vp.x, |
67 x: rect.x + vp.x, |
68 y: rect.y + vp.y, |
68 y: rect.y + vp.y, |
69 w: rect.w, |
69 w: rect.w, |
70 h: rect.h |
70 h: rect.h |
71 }; |
71 }; |
72 }; |
72 }; |
73 var measureElement = function (elm) { |
73 var measureElement = function (elm) { |
74 var clientRect = elm.getBoundingClientRect(); |
74 var clientRect = elm.getBoundingClientRect(); |
75 return toAbsolute({ |
75 return toAbsolute({ |
76 x: clientRect.left, |
76 x: clientRect.left, |
77 y: clientRect.top, |
77 y: clientRect.top, |
78 w: Math.max(elm.clientWidth, elm.offsetWidth), |
78 w: Math.max(elm.clientWidth, elm.offsetWidth), |
79 h: Math.max(elm.clientHeight, elm.offsetHeight) |
79 h: Math.max(elm.clientHeight, elm.offsetHeight) |
80 }); |
80 }); |
81 }; |
81 }; |
82 var getElementRect = function (editor, elm) { |
82 var getElementRect = function (editor, elm) { |
83 return measureElement(elm); |
83 return measureElement(elm); |
84 }; |
84 }; |
85 var getPageAreaRect = function (editor) { |
85 var getPageAreaRect = function (editor) { |
86 return measureElement(editor.getElement().ownerDocument.body); |
86 return measureElement(editor.getElement().ownerDocument.body); |
87 }; |
87 }; |
88 var getContentAreaRect = function (editor) { |
88 var getContentAreaRect = function (editor) { |
89 return measureElement(editor.getContentAreaContainer() || editor.getBody()); |
89 return measureElement(editor.getContentAreaContainer() || editor.getBody()); |
90 }; |
90 }; |
91 var getSelectionRect = function (editor) { |
91 var getSelectionRect = function (editor) { |
92 var clientRect = editor.selection.getBoundingClientRect(); |
92 var clientRect = editor.selection.getBoundingClientRect(); |
93 return clientRect ? toAbsolute($_1x174x181jjgwejzd.fromClientRect(clientRect)) : null; |
93 return clientRect ? toAbsolute(Convert.fromClientRect(clientRect)) : null; |
94 }; |
94 }; |
95 var $_51qgo2180jjgwejzb = { |
95 var Measure = { |
96 getElementRect: getElementRect, |
96 getElementRect: getElementRect, |
97 getPageAreaRect: getPageAreaRect, |
97 getPageAreaRect: getPageAreaRect, |
98 getContentAreaRect: getContentAreaRect, |
98 getContentAreaRect: getContentAreaRect, |
99 getSelectionRect: getSelectionRect |
99 getSelectionRect: getSelectionRect |
100 }; |
100 }; |
101 |
101 |
102 var element = function (element, predicateIds) { |
102 var element = function (element, predicateIds) { |
103 return function (editor) { |
103 return function (editor) { |
104 for (var i = 0; i < predicateIds.length; i++) { |
104 for (var i = 0; i < predicateIds.length; i++) { |
105 if (predicateIds[i].predicate(element)) { |
105 if (predicateIds[i].predicate(element)) { |
106 var result = $_6lg87517zjjgwejza.result(predicateIds[i].id, $_51qgo2180jjgwejzb.getElementRect(editor, element)); |
106 var result = Matcher.result(predicateIds[i].id, Measure.getElementRect(editor, element)); |
|
107 return result; |
|
108 } |
|
109 } |
|
110 return null; |
|
111 }; |
|
112 }; |
|
113 var parent = function (elements, predicateIds) { |
|
114 return function (editor) { |
|
115 for (var i = 0; i < elements.length; i++) { |
|
116 for (var x = 0; x < predicateIds.length; x++) { |
|
117 if (predicateIds[x].predicate(elements[i])) { |
|
118 return Matcher.result(predicateIds[x].id, Measure.getElementRect(editor, elements[i])); |
|
119 } |
|
120 } |
|
121 } |
|
122 return null; |
|
123 }; |
|
124 }; |
|
125 var ElementMatcher = { |
|
126 element: element, |
|
127 parent: parent |
|
128 }; |
|
129 |
|
130 var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools'); |
|
131 |
|
132 var create = function (id, predicate) { |
|
133 return { |
|
134 id: id, |
|
135 predicate: predicate |
|
136 }; |
|
137 }; |
|
138 var fromContextToolbars = function (toolbars) { |
|
139 return global$4.map(toolbars, function (toolbar) { |
|
140 return create(toolbar.id, toolbar.predicate); |
|
141 }); |
|
142 }; |
|
143 var PredicateId = { |
|
144 create: create, |
|
145 fromContextToolbars: fromContextToolbars |
|
146 }; |
|
147 |
|
148 var textSelection = function (id) { |
|
149 return function (editor) { |
|
150 if (!editor.selection.isCollapsed()) { |
|
151 var result = Matcher.result(id, Measure.getSelectionRect(editor)); |
107 return result; |
152 return result; |
108 } |
153 } |
109 } |
154 return null; |
110 return null; |
155 }; |
111 }; |
156 }; |
112 }; |
157 var emptyTextBlock = function (elements, id) { |
113 var parent = function (elements, predicateIds) { |
158 return function (editor) { |
114 return function (editor) { |
159 var i; |
115 for (var i = 0; i < elements.length; i++) { |
160 var textBlockElementsMap = editor.schema.getTextBlockElements(); |
116 for (var x = 0; x < predicateIds.length; x++) { |
161 for (i = 0; i < elements.length; i++) { |
117 if (predicateIds[x].predicate(elements[i])) { |
162 if (elements[i].nodeName === 'TABLE') { |
118 return $_6lg87517zjjgwejza.result(predicateIds[x].id, $_51qgo2180jjgwejzb.getElementRect(editor, elements[i])); |
163 return null; |
119 } |
164 } |
120 } |
165 } |
121 } |
166 for (i = 0; i < elements.length; i++) { |
122 return null; |
167 if (elements[i].nodeName in textBlockElementsMap) { |
123 }; |
168 if (editor.dom.isEmpty(elements[i])) { |
124 }; |
169 return Matcher.result(id, Measure.getSelectionRect(editor)); |
125 var $_egsucq17yjjgwejz9 = { |
170 } |
126 element: element, |
171 return null; |
127 parent: parent |
172 } |
128 }; |
173 } |
129 |
174 return null; |
130 var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools'); |
175 }; |
131 |
176 }; |
132 var create = function (id, predicate) { |
177 var SelectionMatcher = { |
133 return { |
178 textSelection: textSelection, |
134 id: id, |
179 emptyTextBlock: emptyTextBlock |
135 predicate: predicate |
180 }; |
136 }; |
181 |
137 }; |
182 var fireSkinLoaded = function (editor) { |
138 var fromContextToolbars = function (toolbars) { |
183 editor.fire('SkinLoaded'); |
139 return global$4.map(toolbars, function (toolbar) { |
184 }; |
140 return create(toolbar.id, toolbar.predicate); |
185 var fireBeforeRenderUI = function (editor) { |
141 }); |
186 return editor.fire('BeforeRenderUI'); |
142 }; |
187 }; |
143 var $_9rj8kx182jjgwejze = { |
188 var Events = { |
144 create: create, |
189 fireSkinLoaded: fireSkinLoaded, |
145 fromContextToolbars: fromContextToolbars |
190 fireBeforeRenderUI: fireBeforeRenderUI |
146 }; |
191 }; |
147 |
192 |
148 var textSelection = function (id) { |
193 var global$5 = tinymce.util.Tools.resolve('tinymce.EditorManager'); |
149 return function (editor) { |
194 |
150 if (!editor.selection.isCollapsed()) { |
195 var isType = function (type) { |
151 var result = $_6lg87517zjjgwejza.result(id, $_51qgo2180jjgwejzb.getSelectionRect(editor)); |
196 return function (value) { |
152 return result; |
197 return typeof value === type; |
153 } |
198 }; |
154 return null; |
199 }; |
155 }; |
200 var isArray = function (value) { |
156 }; |
201 return Array.isArray(value); |
157 var emptyTextBlock = function (elements, id) { |
202 }; |
158 return function (editor) { |
203 var isNull = function (value) { |
159 var i; |
204 return value === null; |
160 var textBlockElementsMap = editor.schema.getTextBlockElements(); |
205 }; |
161 for (i = 0; i < elements.length; i++) { |
206 var isObject = function (predicate) { |
162 if (elements[i].nodeName === 'TABLE') { |
207 return function (value) { |
163 return null; |
208 return !isNull(value) && !isArray(value) && predicate(value); |
164 } |
209 }; |
165 } |
210 }; |
166 for (i = 0; i < elements.length; i++) { |
211 var isString = function (value) { |
167 if (elements[i].nodeName in textBlockElementsMap) { |
212 return isType('string')(value); |
168 if (editor.dom.isEmpty(elements[i])) { |
213 }; |
169 return $_6lg87517zjjgwejza.result(id, $_51qgo2180jjgwejzb.getSelectionRect(editor)); |
214 var isNumber = function (value) { |
170 } |
215 return isType('number')(value); |
171 return null; |
216 }; |
172 } |
217 var isFunction = function (value) { |
173 } |
218 return isType('function')(value); |
174 return null; |
219 }; |
175 }; |
220 var isBoolean = function (value) { |
176 }; |
221 return isType('boolean')(value); |
177 var $_fhwgeg184jjgwejzf = { |
222 }; |
178 textSelection: textSelection, |
223 var Type = { |
179 emptyTextBlock: emptyTextBlock |
224 isString: isString, |
180 }; |
225 isNumber: isNumber, |
181 |
226 isBoolean: isBoolean, |
182 var fireSkinLoaded = function (editor) { |
227 isFunction: isFunction, |
183 editor.fire('SkinLoaded'); |
228 isObject: isObject(isType('object')), |
184 }; |
229 isNull: isNull, |
185 var fireBeforeRenderUI = function (editor) { |
230 isArray: isArray |
186 return editor.fire('BeforeRenderUI'); |
231 }; |
187 }; |
232 |
188 var $_77u64d186jjgwejzi = { |
233 var validDefaultOrDie = function (value, predicate) { |
189 fireSkinLoaded: fireSkinLoaded, |
234 if (predicate(value)) { |
190 fireBeforeRenderUI: fireBeforeRenderUI |
235 return true; |
191 }; |
236 } |
192 |
237 throw new Error('Default value doesn\'t match requested type.'); |
193 var global$5 = tinymce.util.Tools.resolve('tinymce.EditorManager'); |
238 }; |
194 |
239 var getByTypeOr = function (predicate) { |
195 var isType = function (type) { |
240 return function (editor, name, defaultValue) { |
196 return function (value) { |
241 var settings = editor.settings; |
197 return typeof value === type; |
242 validDefaultOrDie(defaultValue, predicate); |
198 }; |
243 return name in settings && predicate(settings[name]) ? settings[name] : defaultValue; |
199 }; |
244 }; |
200 var isArray = function (value) { |
245 }; |
201 return Array.isArray(value); |
246 var splitNoEmpty = function (str, delim) { |
202 }; |
247 return str.split(delim).filter(function (item) { |
203 var isNull = function (value) { |
248 return item.length > 0; |
204 return value === null; |
249 }); |
205 }; |
250 }; |
206 var isObject = function (predicate) { |
251 var itemsToArray = function (value, defaultValue) { |
207 return function (value) { |
252 var stringToItemsArray = function (value) { |
208 return !isNull(value) && !isArray(value) && predicate(value); |
253 return typeof value === 'string' ? splitNoEmpty(value, /[ ,]/) : value; |
209 }; |
254 }; |
210 }; |
255 var boolToItemsArray = function (value, defaultValue) { |
211 var isString = function (value) { |
256 return value === false ? [] : defaultValue; |
212 return isType('string')(value); |
257 }; |
213 }; |
258 if (Type.isArray(value)) { |
214 var isNumber = function (value) { |
259 return value; |
215 return isType('number')(value); |
260 } else if (Type.isString(value)) { |
216 }; |
261 return stringToItemsArray(value); |
217 var isFunction = function (value) { |
262 } else if (Type.isBoolean(value)) { |
218 return isType('function')(value); |
263 return boolToItemsArray(value, defaultValue); |
219 }; |
264 } |
220 var isBoolean = function (value) { |
265 return defaultValue; |
221 return isType('boolean')(value); |
266 }; |
222 }; |
267 var getToolbarItemsOr = function (predicate) { |
223 var $_e4npq318ajjgwejzo = { |
268 return function (editor, name, defaultValue) { |
224 isString: isString, |
269 var value = name in editor.settings ? editor.settings[name] : defaultValue; |
225 isNumber: isNumber, |
270 validDefaultOrDie(defaultValue, predicate); |
226 isBoolean: isBoolean, |
271 return itemsToArray(value, defaultValue); |
227 isFunction: isFunction, |
272 }; |
228 isObject: isObject(isType('object')), |
273 }; |
229 isNull: isNull, |
274 var EditorSettings = { |
230 isArray: isArray |
275 getStringOr: getByTypeOr(Type.isString), |
231 }; |
276 getBoolOr: getByTypeOr(Type.isBoolean), |
232 |
277 getNumberOr: getByTypeOr(Type.isNumber), |
233 var validDefaultOrDie = function (value, predicate) { |
278 getHandlerOr: getByTypeOr(Type.isFunction), |
234 if (predicate(value)) { |
279 getToolbarItemsOr: getToolbarItemsOr(Type.isArray) |
235 return true; |
280 }; |
236 } |
281 |
237 throw new Error('Default value doesn\'t match requested type.'); |
282 var global$6 = tinymce.util.Tools.resolve('tinymce.geom.Rect'); |
238 }; |
283 |
239 var getByTypeOr = function (predicate) { |
284 var result$1 = function (rect, position) { |
240 return function (editor, name, defaultValue) { |
285 return { |
241 var settings = editor.settings; |
286 rect: rect, |
242 validDefaultOrDie(defaultValue, predicate); |
287 position: position |
243 return name in settings && predicate(settings[name]) ? settings[name] : defaultValue; |
288 }; |
244 }; |
289 }; |
245 }; |
290 var moveTo = function (rect, toRect) { |
246 var splitNoEmpty = function (str, delim) { |
291 return { |
247 return str.split(delim).filter(function (item) { |
292 x: toRect.x, |
248 return item.length > 0; |
293 y: toRect.y, |
249 }); |
294 w: rect.w, |
250 }; |
295 h: rect.h |
251 var itemsToArray = function (value, defaultValue) { |
296 }; |
252 var stringToItemsArray = function (value) { |
297 }; |
253 return typeof value === 'string' ? splitNoEmpty(value, /[ ,]/) : value; |
298 var calcByPositions = function (testPositions1, testPositions2, targetRect, contentAreaRect, panelRect) { |
254 }; |
299 var relPos, relRect, outputPanelRect; |
255 var boolToItemsArray = function (value, defaultValue) { |
300 var paddedContentRect = { |
256 return value === false ? [] : defaultValue; |
301 x: contentAreaRect.x, |
257 }; |
302 y: contentAreaRect.y, |
258 if ($_e4npq318ajjgwejzo.isArray(value)) { |
303 w: contentAreaRect.w + (contentAreaRect.w < panelRect.w + targetRect.w ? panelRect.w : 0), |
259 return value; |
304 h: contentAreaRect.h + (contentAreaRect.h < panelRect.h + targetRect.h ? panelRect.h : 0) |
260 } else if ($_e4npq318ajjgwejzo.isString(value)) { |
305 }; |
261 return stringToItemsArray(value); |
306 relPos = global$6.findBestRelativePosition(panelRect, targetRect, paddedContentRect, testPositions1); |
262 } else if ($_e4npq318ajjgwejzo.isBoolean(value)) { |
307 targetRect = global$6.clamp(targetRect, paddedContentRect); |
263 return boolToItemsArray(value, defaultValue); |
|
264 } |
|
265 return defaultValue; |
|
266 }; |
|
267 var getToolbarItemsOr = function (predicate) { |
|
268 return function (editor, name, defaultValue) { |
|
269 var value = name in editor.settings ? editor.settings[name] : defaultValue; |
|
270 validDefaultOrDie(defaultValue, predicate); |
|
271 return itemsToArray(value, defaultValue); |
|
272 }; |
|
273 }; |
|
274 var $_c8umh189jjgwejzm = { |
|
275 getStringOr: getByTypeOr($_e4npq318ajjgwejzo.isString), |
|
276 getBoolOr: getByTypeOr($_e4npq318ajjgwejzo.isBoolean), |
|
277 getNumberOr: getByTypeOr($_e4npq318ajjgwejzo.isNumber), |
|
278 getHandlerOr: getByTypeOr($_e4npq318ajjgwejzo.isFunction), |
|
279 getToolbarItemsOr: getToolbarItemsOr($_e4npq318ajjgwejzo.isArray) |
|
280 }; |
|
281 |
|
282 var global$6 = tinymce.util.Tools.resolve('tinymce.geom.Rect'); |
|
283 |
|
284 var result$1 = function (rect, position) { |
|
285 return { |
|
286 rect: rect, |
|
287 position: position |
|
288 }; |
|
289 }; |
|
290 var moveTo = function (rect, toRect) { |
|
291 return { |
|
292 x: toRect.x, |
|
293 y: toRect.y, |
|
294 w: rect.w, |
|
295 h: rect.h |
|
296 }; |
|
297 }; |
|
298 var calcByPositions = function (testPositions1, testPositions2, targetRect, contentAreaRect, panelRect) { |
|
299 var relPos, relRect, outputPanelRect; |
|
300 var paddedContentRect = { |
|
301 x: contentAreaRect.x, |
|
302 y: contentAreaRect.y, |
|
303 w: contentAreaRect.w + (contentAreaRect.w < panelRect.w + targetRect.w ? panelRect.w : 0), |
|
304 h: contentAreaRect.h + (contentAreaRect.h < panelRect.h + targetRect.h ? panelRect.h : 0) |
|
305 }; |
|
306 relPos = global$6.findBestRelativePosition(panelRect, targetRect, paddedContentRect, testPositions1); |
|
307 targetRect = global$6.clamp(targetRect, paddedContentRect); |
|
308 if (relPos) { |
|
309 relRect = global$6.relativePosition(panelRect, targetRect, relPos); |
|
310 outputPanelRect = moveTo(panelRect, relRect); |
|
311 return result$1(outputPanelRect, relPos); |
|
312 } |
|
313 targetRect = global$6.intersect(paddedContentRect, targetRect); |
|
314 if (targetRect) { |
|
315 relPos = global$6.findBestRelativePosition(panelRect, targetRect, paddedContentRect, testPositions2); |
|
316 if (relPos) { |
308 if (relPos) { |
317 relRect = global$6.relativePosition(panelRect, targetRect, relPos); |
309 relRect = global$6.relativePosition(panelRect, targetRect, relPos); |
318 outputPanelRect = moveTo(panelRect, relRect); |
310 outputPanelRect = moveTo(panelRect, relRect); |
319 return result$1(outputPanelRect, relPos); |
311 return result$1(outputPanelRect, relPos); |
320 } |
312 } |
321 outputPanelRect = moveTo(panelRect, targetRect); |
313 targetRect = global$6.intersect(paddedContentRect, targetRect); |
322 return result$1(outputPanelRect, relPos); |
314 if (targetRect) { |
|
315 relPos = global$6.findBestRelativePosition(panelRect, targetRect, paddedContentRect, testPositions2); |
|
316 if (relPos) { |
|
317 relRect = global$6.relativePosition(panelRect, targetRect, relPos); |
|
318 outputPanelRect = moveTo(panelRect, relRect); |
|
319 return result$1(outputPanelRect, relPos); |
|
320 } |
|
321 outputPanelRect = moveTo(panelRect, targetRect); |
|
322 return result$1(outputPanelRect, relPos); |
|
323 } |
|
324 return null; |
|
325 }; |
|
326 var calcInsert = function (targetRect, contentAreaRect, panelRect) { |
|
327 return calcByPositions([ |
|
328 'cr-cl', |
|
329 'cl-cr' |
|
330 ], [ |
|
331 'bc-tc', |
|
332 'bl-tl', |
|
333 'br-tr' |
|
334 ], targetRect, contentAreaRect, panelRect); |
|
335 }; |
|
336 var calc = function (targetRect, contentAreaRect, panelRect) { |
|
337 return calcByPositions([ |
|
338 'tc-bc', |
|
339 'bc-tc', |
|
340 'tl-bl', |
|
341 'bl-tl', |
|
342 'tr-br', |
|
343 'br-tr', |
|
344 'cr-cl', |
|
345 'cl-cr' |
|
346 ], [ |
|
347 'bc-tc', |
|
348 'bl-tl', |
|
349 'br-tr', |
|
350 'cr-cl' |
|
351 ], targetRect, contentAreaRect, panelRect); |
|
352 }; |
|
353 var userConstrain = function (handler, targetRect, contentAreaRect, panelRect) { |
|
354 var userConstrainedPanelRect; |
|
355 if (typeof handler === 'function') { |
|
356 userConstrainedPanelRect = handler({ |
|
357 elementRect: Convert.toClientRect(targetRect), |
|
358 contentAreaRect: Convert.toClientRect(contentAreaRect), |
|
359 panelRect: Convert.toClientRect(panelRect) |
|
360 }); |
|
361 return Convert.fromClientRect(userConstrainedPanelRect); |
|
362 } |
|
363 return panelRect; |
|
364 }; |
|
365 var defaultHandler = function (rects) { |
|
366 return rects.panelRect; |
|
367 }; |
|
368 var Layout = { |
|
369 calcInsert: calcInsert, |
|
370 calc: calc, |
|
371 userConstrain: userConstrain, |
|
372 defaultHandler: defaultHandler |
|
373 }; |
|
374 |
|
375 var toAbsoluteUrl = function (editor, url) { |
|
376 return editor.documentBaseURI.toAbsolute(url); |
|
377 }; |
|
378 var urlFromName = function (name) { |
|
379 var prefix = global$5.baseURL + '/skins/'; |
|
380 return name ? prefix + name : prefix + 'lightgray'; |
|
381 }; |
|
382 var getTextSelectionToolbarItems = function (editor) { |
|
383 return EditorSettings.getToolbarItemsOr(editor, 'selection_toolbar', [ |
|
384 'bold', |
|
385 'italic', |
|
386 '|', |
|
387 'quicklink', |
|
388 'h2', |
|
389 'h3', |
|
390 'blockquote' |
|
391 ]); |
|
392 }; |
|
393 var getInsertToolbarItems = function (editor) { |
|
394 return EditorSettings.getToolbarItemsOr(editor, 'insert_toolbar', [ |
|
395 'quickimage', |
|
396 'quicktable' |
|
397 ]); |
|
398 }; |
|
399 var getPositionHandler = function (editor) { |
|
400 return EditorSettings.getHandlerOr(editor, 'inline_toolbar_position_handler', Layout.defaultHandler); |
|
401 }; |
|
402 var getSkinUrl = function (editor) { |
|
403 var settings = editor.settings; |
|
404 return settings.skin_url ? toAbsoluteUrl(editor, settings.skin_url) : urlFromName(settings.skin); |
|
405 }; |
|
406 var isSkinDisabled = function (editor) { |
|
407 return editor.settings.skin === false; |
|
408 }; |
|
409 var Settings = { |
|
410 getTextSelectionToolbarItems: getTextSelectionToolbarItems, |
|
411 getInsertToolbarItems: getInsertToolbarItems, |
|
412 getPositionHandler: getPositionHandler, |
|
413 getSkinUrl: getSkinUrl, |
|
414 isSkinDisabled: isSkinDisabled |
|
415 }; |
|
416 |
|
417 var fireSkinLoaded$1 = function (editor, callback) { |
|
418 var done = function () { |
|
419 editor._skinLoaded = true; |
|
420 Events.fireSkinLoaded(editor); |
|
421 callback(); |
|
422 }; |
|
423 if (editor.initialized) { |
|
424 done(); |
|
425 } else { |
|
426 editor.on('init', done); |
|
427 } |
|
428 }; |
|
429 var load = function (editor, callback) { |
|
430 var skinUrl = Settings.getSkinUrl(editor); |
|
431 var done = function () { |
|
432 fireSkinLoaded$1(editor, callback); |
|
433 }; |
|
434 if (Settings.isSkinDisabled(editor)) { |
|
435 done(); |
|
436 } else { |
|
437 global$2.DOM.styleSheetLoader.load(skinUrl + '/skin.min.css', done); |
|
438 editor.contentCSS.push(skinUrl + '/content.inline.min.css'); |
|
439 } |
|
440 }; |
|
441 var SkinLoader = { load: load }; |
|
442 |
|
443 var getSelectionElements = function (editor) { |
|
444 var node = editor.selection.getNode(); |
|
445 var elms = editor.dom.getParents(node, '*'); |
|
446 return elms; |
|
447 }; |
|
448 var createToolbar = function (editor, selector, id, items) { |
|
449 var selectorPredicate = function (elm) { |
|
450 return editor.dom.is(elm, selector); |
|
451 }; |
|
452 return { |
|
453 predicate: selectorPredicate, |
|
454 id: id, |
|
455 items: items |
|
456 }; |
|
457 }; |
|
458 var getToolbars = function (editor) { |
|
459 var contextToolbars = editor.contextToolbars; |
|
460 return DeepFlatten.flatten([ |
|
461 contextToolbars ? contextToolbars : [], |
|
462 createToolbar(editor, 'img', 'image', 'alignleft aligncenter alignright') |
|
463 ]); |
|
464 }; |
|
465 var findMatchResult = function (editor, toolbars) { |
|
466 var result, elements, contextToolbarsPredicateIds; |
|
467 elements = getSelectionElements(editor); |
|
468 contextToolbarsPredicateIds = PredicateId.fromContextToolbars(toolbars); |
|
469 result = Matcher.match(editor, [ |
|
470 ElementMatcher.element(elements[0], contextToolbarsPredicateIds), |
|
471 SelectionMatcher.textSelection('text'), |
|
472 SelectionMatcher.emptyTextBlock(elements, 'insert'), |
|
473 ElementMatcher.parent(elements, contextToolbarsPredicateIds) |
|
474 ]); |
|
475 return result && result.rect ? result : null; |
|
476 }; |
|
477 var editorHasFocus = function (editor) { |
|
478 return domGlobals.document.activeElement === editor.getBody(); |
|
479 }; |
|
480 var togglePanel = function (editor, panel) { |
|
481 var toggle = function () { |
|
482 var toolbars = getToolbars(editor); |
|
483 var result = findMatchResult(editor, toolbars); |
|
484 if (result) { |
|
485 panel.show(editor, result.id, result.rect, toolbars); |
|
486 } else { |
|
487 panel.hide(); |
|
488 } |
|
489 }; |
|
490 return function () { |
|
491 if (!editor.removed && editorHasFocus(editor)) { |
|
492 toggle(); |
|
493 } |
|
494 }; |
|
495 }; |
|
496 var repositionPanel = function (editor, panel) { |
|
497 return function () { |
|
498 var toolbars = getToolbars(editor); |
|
499 var result = findMatchResult(editor, toolbars); |
|
500 if (result) { |
|
501 panel.reposition(editor, result.id, result.rect); |
|
502 } |
|
503 }; |
|
504 }; |
|
505 var ignoreWhenFormIsVisible = function (editor, panel, f) { |
|
506 return function () { |
|
507 if (!editor.removed && !panel.inForm()) { |
|
508 f(); |
|
509 } |
|
510 }; |
|
511 }; |
|
512 var bindContextualToolbarsEvents = function (editor, panel) { |
|
513 var throttledTogglePanel = global$3.throttle(togglePanel(editor, panel), 0); |
|
514 var throttledTogglePanelWhenNotInForm = global$3.throttle(ignoreWhenFormIsVisible(editor, panel, togglePanel(editor, panel)), 0); |
|
515 var reposition = repositionPanel(editor, panel); |
|
516 editor.on('blur hide ObjectResizeStart', panel.hide); |
|
517 editor.on('click', throttledTogglePanel); |
|
518 editor.on('nodeChange mouseup', throttledTogglePanelWhenNotInForm); |
|
519 editor.on('ResizeEditor keyup', throttledTogglePanel); |
|
520 editor.on('ResizeWindow', reposition); |
|
521 global$2.DOM.bind(global$1.container, 'scroll', reposition); |
|
522 editor.on('remove', function () { |
|
523 global$2.DOM.unbind(global$1.container, 'scroll', reposition); |
|
524 panel.remove(); |
|
525 }); |
|
526 editor.shortcuts.add('Alt+F10,F10', '', panel.focus); |
|
527 }; |
|
528 var overrideLinkShortcut = function (editor, panel) { |
|
529 editor.shortcuts.remove('meta+k'); |
|
530 editor.shortcuts.add('meta+k', '', function () { |
|
531 var toolbars = getToolbars(editor); |
|
532 var result = Matcher.match(editor, [SelectionMatcher.textSelection('quicklink')]); |
|
533 if (result) { |
|
534 panel.show(editor, result.id, result.rect, toolbars); |
|
535 } |
|
536 }); |
|
537 }; |
|
538 var renderInlineUI = function (editor, panel) { |
|
539 SkinLoader.load(editor, function () { |
|
540 bindContextualToolbarsEvents(editor, panel); |
|
541 overrideLinkShortcut(editor, panel); |
|
542 }); |
|
543 return {}; |
|
544 }; |
|
545 var fail = function (message) { |
|
546 throw new Error(message); |
|
547 }; |
|
548 var renderUI = function (editor, panel) { |
|
549 return editor.inline ? renderInlineUI(editor, panel) : fail('inlite theme only supports inline mode.'); |
|
550 }; |
|
551 var Render = { renderUI: renderUI }; |
|
552 |
|
553 var noop = function () { |
|
554 var args = []; |
|
555 for (var _i = 0; _i < arguments.length; _i++) { |
|
556 args[_i] = arguments[_i]; |
|
557 } |
|
558 }; |
|
559 var constant = function (value) { |
|
560 return function () { |
|
561 return value; |
|
562 }; |
|
563 }; |
|
564 var never = constant(false); |
|
565 var always = constant(true); |
|
566 |
|
567 var never$1 = never; |
|
568 var always$1 = always; |
|
569 var none = function () { |
|
570 return NONE; |
|
571 }; |
|
572 var NONE = function () { |
|
573 var eq = function (o) { |
|
574 return o.isNone(); |
|
575 }; |
|
576 var call = function (thunk) { |
|
577 return thunk(); |
|
578 }; |
|
579 var id = function (n) { |
|
580 return n; |
|
581 }; |
|
582 var noop = function () { |
|
583 }; |
|
584 var nul = function () { |
|
585 return null; |
|
586 }; |
|
587 var undef = function () { |
|
588 return undefined; |
|
589 }; |
|
590 var me = { |
|
591 fold: function (n, s) { |
|
592 return n(); |
|
593 }, |
|
594 is: never$1, |
|
595 isSome: never$1, |
|
596 isNone: always$1, |
|
597 getOr: id, |
|
598 getOrThunk: call, |
|
599 getOrDie: function (msg) { |
|
600 throw new Error(msg || 'error: getOrDie called on none.'); |
|
601 }, |
|
602 getOrNull: nul, |
|
603 getOrUndefined: undef, |
|
604 or: id, |
|
605 orThunk: call, |
|
606 map: none, |
|
607 ap: none, |
|
608 each: noop, |
|
609 bind: none, |
|
610 flatten: none, |
|
611 exists: never$1, |
|
612 forall: always$1, |
|
613 filter: none, |
|
614 equals: eq, |
|
615 equals_: eq, |
|
616 toArray: function () { |
|
617 return []; |
|
618 }, |
|
619 toString: constant('none()') |
|
620 }; |
|
621 if (Object.freeze) |
|
622 Object.freeze(me); |
|
623 return me; |
|
624 }(); |
|
625 var some = function (a) { |
|
626 var constant_a = function () { |
|
627 return a; |
|
628 }; |
|
629 var self = function () { |
|
630 return me; |
|
631 }; |
|
632 var map = function (f) { |
|
633 return some(f(a)); |
|
634 }; |
|
635 var bind = function (f) { |
|
636 return f(a); |
|
637 }; |
|
638 var me = { |
|
639 fold: function (n, s) { |
|
640 return s(a); |
|
641 }, |
|
642 is: function (v) { |
|
643 return a === v; |
|
644 }, |
|
645 isSome: always$1, |
|
646 isNone: never$1, |
|
647 getOr: constant_a, |
|
648 getOrThunk: constant_a, |
|
649 getOrDie: constant_a, |
|
650 getOrNull: constant_a, |
|
651 getOrUndefined: constant_a, |
|
652 or: self, |
|
653 orThunk: self, |
|
654 map: map, |
|
655 ap: function (optfab) { |
|
656 return optfab.fold(none, function (fab) { |
|
657 return some(fab(a)); |
|
658 }); |
|
659 }, |
|
660 each: function (f) { |
|
661 f(a); |
|
662 }, |
|
663 bind: bind, |
|
664 flatten: constant_a, |
|
665 exists: bind, |
|
666 forall: bind, |
|
667 filter: function (f) { |
|
668 return f(a) ? me : NONE; |
|
669 }, |
|
670 equals: function (o) { |
|
671 return o.is(a); |
|
672 }, |
|
673 equals_: function (o, elementEq) { |
|
674 return o.fold(never$1, function (b) { |
|
675 return elementEq(a, b); |
|
676 }); |
|
677 }, |
|
678 toArray: function () { |
|
679 return [a]; |
|
680 }, |
|
681 toString: function () { |
|
682 return 'some(' + a + ')'; |
|
683 } |
|
684 }; |
|
685 return me; |
|
686 }; |
|
687 var from = function (value) { |
|
688 return value === null || value === undefined ? NONE : some(value); |
|
689 }; |
|
690 var Option = { |
|
691 some: some, |
|
692 none: none, |
|
693 from: from |
|
694 }; |
|
695 |
|
696 var typeOf = function (x) { |
|
697 if (x === null) |
|
698 return 'null'; |
|
699 var t = typeof x; |
|
700 if (t === 'object' && Array.prototype.isPrototypeOf(x)) |
|
701 return 'array'; |
|
702 if (t === 'object' && String.prototype.isPrototypeOf(x)) |
|
703 return 'string'; |
|
704 return t; |
|
705 }; |
|
706 var isType$1 = function (type) { |
|
707 return function (value) { |
|
708 return typeOf(value) === type; |
|
709 }; |
|
710 }; |
|
711 var isFunction$1 = isType$1('function'); |
|
712 var isNumber$1 = isType$1('number'); |
|
713 |
|
714 var rawIndexOf = function () { |
|
715 var pIndexOf = Array.prototype.indexOf; |
|
716 var fastIndex = function (xs, x) { |
|
717 return pIndexOf.call(xs, x); |
|
718 }; |
|
719 var slowIndex = function (xs, x) { |
|
720 return slowIndexOf(xs, x); |
|
721 }; |
|
722 return pIndexOf === undefined ? slowIndex : fastIndex; |
|
723 }(); |
|
724 var indexOf = function (xs, x) { |
|
725 var r = rawIndexOf(xs, x); |
|
726 return r === -1 ? Option.none() : Option.some(r); |
|
727 }; |
|
728 var exists = function (xs, pred) { |
|
729 return findIndex(xs, pred).isSome(); |
|
730 }; |
|
731 var map = function (xs, f) { |
|
732 var len = xs.length; |
|
733 var r = new Array(len); |
|
734 for (var i = 0; i < len; i++) { |
|
735 var x = xs[i]; |
|
736 r[i] = f(x, i, xs); |
|
737 } |
|
738 return r; |
|
739 }; |
|
740 var each = function (xs, f) { |
|
741 for (var i = 0, len = xs.length; i < len; i++) { |
|
742 var x = xs[i]; |
|
743 f(x, i, xs); |
|
744 } |
|
745 }; |
|
746 var filter = function (xs, pred) { |
|
747 var r = []; |
|
748 for (var i = 0, len = xs.length; i < len; i++) { |
|
749 var x = xs[i]; |
|
750 if (pred(x, i, xs)) { |
|
751 r.push(x); |
|
752 } |
|
753 } |
|
754 return r; |
|
755 }; |
|
756 var foldl = function (xs, f, acc) { |
|
757 each(xs, function (x) { |
|
758 acc = f(acc, x); |
|
759 }); |
|
760 return acc; |
|
761 }; |
|
762 var find = function (xs, pred) { |
|
763 for (var i = 0, len = xs.length; i < len; i++) { |
|
764 var x = xs[i]; |
|
765 if (pred(x, i, xs)) { |
|
766 return Option.some(x); |
|
767 } |
|
768 } |
|
769 return Option.none(); |
|
770 }; |
|
771 var findIndex = function (xs, pred) { |
|
772 for (var i = 0, len = xs.length; i < len; i++) { |
|
773 var x = xs[i]; |
|
774 if (pred(x, i, xs)) { |
|
775 return Option.some(i); |
|
776 } |
|
777 } |
|
778 return Option.none(); |
|
779 }; |
|
780 var slowIndexOf = function (xs, x) { |
|
781 for (var i = 0, len = xs.length; i < len; ++i) { |
|
782 if (xs[i] === x) { |
|
783 return i; |
|
784 } |
|
785 } |
|
786 return -1; |
|
787 }; |
|
788 var push = Array.prototype.push; |
|
789 var flatten$1 = function (xs) { |
|
790 var r = []; |
|
791 for (var i = 0, len = xs.length; i < len; ++i) { |
|
792 if (!Array.prototype.isPrototypeOf(xs[i])) |
|
793 throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs); |
|
794 push.apply(r, xs[i]); |
|
795 } |
|
796 return r; |
|
797 }; |
|
798 var slice = Array.prototype.slice; |
|
799 var from$1 = isFunction$1(Array.from) ? Array.from : function (x) { |
|
800 return slice.call(x); |
|
801 }; |
|
802 |
|
803 var count = 0; |
|
804 var funcs = { |
|
805 id: function () { |
|
806 return 'mceu_' + count++; |
|
807 }, |
|
808 create: function (name, attrs, children) { |
|
809 var elm = domGlobals.document.createElement(name); |
|
810 global$2.DOM.setAttribs(elm, attrs); |
|
811 if (typeof children === 'string') { |
|
812 elm.innerHTML = children; |
|
813 } else { |
|
814 global$4.each(children, function (child) { |
|
815 if (child.nodeType) { |
|
816 elm.appendChild(child); |
|
817 } |
|
818 }); |
|
819 } |
|
820 return elm; |
|
821 }, |
|
822 createFragment: function (html) { |
|
823 return global$2.DOM.createFragment(html); |
|
824 }, |
|
825 getWindowSize: function () { |
|
826 return global$2.DOM.getViewPort(); |
|
827 }, |
|
828 getSize: function (elm) { |
|
829 var width, height; |
|
830 if (elm.getBoundingClientRect) { |
|
831 var rect = elm.getBoundingClientRect(); |
|
832 width = Math.max(rect.width || rect.right - rect.left, elm.offsetWidth); |
|
833 height = Math.max(rect.height || rect.bottom - rect.bottom, elm.offsetHeight); |
|
834 } else { |
|
835 width = elm.offsetWidth; |
|
836 height = elm.offsetHeight; |
|
837 } |
|
838 return { |
|
839 width: width, |
|
840 height: height |
|
841 }; |
|
842 }, |
|
843 getPos: function (elm, root) { |
|
844 return global$2.DOM.getPos(elm, root || funcs.getContainer()); |
|
845 }, |
|
846 getContainer: function () { |
|
847 return global$1.container ? global$1.container : domGlobals.document.body; |
|
848 }, |
|
849 getViewPort: function (win) { |
|
850 return global$2.DOM.getViewPort(win); |
|
851 }, |
|
852 get: function (id) { |
|
853 return domGlobals.document.getElementById(id); |
|
854 }, |
|
855 addClass: function (elm, cls) { |
|
856 return global$2.DOM.addClass(elm, cls); |
|
857 }, |
|
858 removeClass: function (elm, cls) { |
|
859 return global$2.DOM.removeClass(elm, cls); |
|
860 }, |
|
861 hasClass: function (elm, cls) { |
|
862 return global$2.DOM.hasClass(elm, cls); |
|
863 }, |
|
864 toggleClass: function (elm, cls, state) { |
|
865 return global$2.DOM.toggleClass(elm, cls, state); |
|
866 }, |
|
867 css: function (elm, name, value) { |
|
868 return global$2.DOM.setStyle(elm, name, value); |
|
869 }, |
|
870 getRuntimeStyle: function (elm, name) { |
|
871 return global$2.DOM.getStyle(elm, name, true); |
|
872 }, |
|
873 on: function (target, name, callback, scope) { |
|
874 return global$2.DOM.bind(target, name, callback, scope); |
|
875 }, |
|
876 off: function (target, name, callback) { |
|
877 return global$2.DOM.unbind(target, name, callback); |
|
878 }, |
|
879 fire: function (target, name, args) { |
|
880 return global$2.DOM.fire(target, name, args); |
|
881 }, |
|
882 innerHtml: function (elm, html) { |
|
883 global$2.DOM.setHTML(elm, html); |
|
884 } |
|
885 }; |
|
886 |
|
887 var global$7 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery'); |
|
888 |
|
889 var global$8 = tinymce.util.Tools.resolve('tinymce.util.Class'); |
|
890 |
|
891 var global$9 = tinymce.util.Tools.resolve('tinymce.util.EventDispatcher'); |
|
892 |
|
893 var BoxUtils = { |
|
894 parseBox: function (value) { |
|
895 var len; |
|
896 var radix = 10; |
|
897 if (!value) { |
|
898 return; |
|
899 } |
|
900 if (typeof value === 'number') { |
|
901 value = value || 0; |
|
902 return { |
|
903 top: value, |
|
904 left: value, |
|
905 bottom: value, |
|
906 right: value |
|
907 }; |
|
908 } |
|
909 value = value.split(' '); |
|
910 len = value.length; |
|
911 if (len === 1) { |
|
912 value[1] = value[2] = value[3] = value[0]; |
|
913 } else if (len === 2) { |
|
914 value[2] = value[0]; |
|
915 value[3] = value[1]; |
|
916 } else if (len === 3) { |
|
917 value[3] = value[1]; |
|
918 } |
|
919 return { |
|
920 top: parseInt(value[0], radix) || 0, |
|
921 right: parseInt(value[1], radix) || 0, |
|
922 bottom: parseInt(value[2], radix) || 0, |
|
923 left: parseInt(value[3], radix) || 0 |
|
924 }; |
|
925 }, |
|
926 measureBox: function (elm, prefix) { |
|
927 function getStyle(name) { |
|
928 var defaultView = elm.ownerDocument.defaultView; |
|
929 if (defaultView) { |
|
930 var computedStyle = defaultView.getComputedStyle(elm, null); |
|
931 if (computedStyle) { |
|
932 name = name.replace(/[A-Z]/g, function (a) { |
|
933 return '-' + a; |
|
934 }); |
|
935 return computedStyle.getPropertyValue(name); |
|
936 } else { |
|
937 return null; |
|
938 } |
|
939 } |
|
940 return elm.currentStyle[name]; |
|
941 } |
|
942 function getSide(name) { |
|
943 var val = parseFloat(getStyle(name)); |
|
944 return isNaN(val) ? 0 : val; |
|
945 } |
|
946 return { |
|
947 top: getSide(prefix + 'TopWidth'), |
|
948 right: getSide(prefix + 'RightWidth'), |
|
949 bottom: getSide(prefix + 'BottomWidth'), |
|
950 left: getSide(prefix + 'LeftWidth') |
|
951 }; |
|
952 } |
|
953 }; |
|
954 |
|
955 function noop$1() { |
323 } |
956 } |
324 return null; |
957 function ClassList(onchange) { |
325 }; |
958 this.cls = []; |
326 var calcInsert = function (targetRect, contentAreaRect, panelRect) { |
959 this.cls._map = {}; |
327 return calcByPositions([ |
960 this.onchange = onchange || noop$1; |
328 'cr-cl', |
961 this.prefix = ''; |
329 'cl-cr' |
|
330 ], [ |
|
331 'bc-tc', |
|
332 'bl-tl', |
|
333 'br-tr' |
|
334 ], targetRect, contentAreaRect, panelRect); |
|
335 }; |
|
336 var calc = function (targetRect, contentAreaRect, panelRect) { |
|
337 return calcByPositions([ |
|
338 'tc-bc', |
|
339 'bc-tc', |
|
340 'tl-bl', |
|
341 'bl-tl', |
|
342 'tr-br', |
|
343 'br-tr', |
|
344 'cr-cl', |
|
345 'cl-cr' |
|
346 ], [ |
|
347 'bc-tc', |
|
348 'bl-tl', |
|
349 'br-tr', |
|
350 'cr-cl' |
|
351 ], targetRect, contentAreaRect, panelRect); |
|
352 }; |
|
353 var userConstrain = function (handler, targetRect, contentAreaRect, panelRect) { |
|
354 var userConstrainedPanelRect; |
|
355 if (typeof handler === 'function') { |
|
356 userConstrainedPanelRect = handler({ |
|
357 elementRect: $_1x174x181jjgwejzd.toClientRect(targetRect), |
|
358 contentAreaRect: $_1x174x181jjgwejzd.toClientRect(contentAreaRect), |
|
359 panelRect: $_1x174x181jjgwejzd.toClientRect(panelRect) |
|
360 }); |
|
361 return $_1x174x181jjgwejzd.fromClientRect(userConstrainedPanelRect); |
|
362 } |
962 } |
363 return panelRect; |
963 global$4.extend(ClassList.prototype, { |
364 }; |
964 add: function (cls) { |
365 var defaultHandler = function (rects) { |
965 if (cls && !this.contains(cls)) { |
366 return rects.panelRect; |
966 this.cls._map[cls] = true; |
367 }; |
967 this.cls.push(cls); |
368 var $_gir42l18bjjgwejzq = { |
968 this._change(); |
369 calcInsert: calcInsert, |
969 } |
370 calc: calc, |
970 return this; |
371 userConstrain: userConstrain, |
971 }, |
372 defaultHandler: defaultHandler |
972 remove: function (cls) { |
373 }; |
973 if (this.contains(cls)) { |
374 |
974 var i = void 0; |
375 var toAbsoluteUrl = function (editor, url) { |
975 for (i = 0; i < this.cls.length; i++) { |
376 return editor.documentBaseURI.toAbsolute(url); |
976 if (this.cls[i] === cls) { |
377 }; |
977 break; |
378 var urlFromName = function (name) { |
978 } |
379 var prefix = global$5.baseURL + '/skins/'; |
979 } |
380 return name ? prefix + name : prefix + 'lightgray'; |
980 this.cls.splice(i, 1); |
381 }; |
981 delete this.cls._map[cls]; |
382 var getTextSelectionToolbarItems = function (editor) { |
982 this._change(); |
383 return $_c8umh189jjgwejzm.getToolbarItemsOr(editor, 'selection_toolbar', [ |
983 } |
384 'bold', |
984 return this; |
385 'italic', |
985 }, |
386 '|', |
986 toggle: function (cls, state) { |
387 'quicklink', |
987 var curState = this.contains(cls); |
388 'h2', |
988 if (curState !== state) { |
389 'h3', |
989 if (curState) { |
390 'blockquote' |
990 this.remove(cls); |
391 ]); |
991 } else { |
392 }; |
992 this.add(cls); |
393 var getInsertToolbarItems = function (editor) { |
993 } |
394 return $_c8umh189jjgwejzm.getToolbarItemsOr(editor, 'insert_toolbar', [ |
994 this._change(); |
395 'quickimage', |
995 } |
396 'quicktable' |
996 return this; |
397 ]); |
997 }, |
398 }; |
998 contains: function (cls) { |
399 var getPositionHandler = function (editor) { |
999 return !!this.cls._map[cls]; |
400 return $_c8umh189jjgwejzm.getHandlerOr(editor, 'inline_toolbar_position_handler', $_gir42l18bjjgwejzq.defaultHandler); |
1000 }, |
401 }; |
1001 _change: function () { |
402 var getSkinUrl = function (editor) { |
1002 delete this.clsValue; |
403 var settings = editor.settings; |
1003 this.onchange.call(this); |
404 return settings.skin_url ? toAbsoluteUrl(editor, settings.skin_url) : urlFromName(settings.skin); |
1004 } |
405 }; |
1005 }); |
406 var isSkinDisabled = function (editor) { |
1006 ClassList.prototype.toString = function () { |
407 return editor.settings.skin === false; |
1007 var value; |
408 }; |
1008 if (this.clsValue) { |
409 var $_4j2h42187jjgwejzk = { |
1009 return this.clsValue; |
410 getTextSelectionToolbarItems: getTextSelectionToolbarItems, |
1010 } |
411 getInsertToolbarItems: getInsertToolbarItems, |
1011 value = ''; |
412 getPositionHandler: getPositionHandler, |
1012 for (var i = 0; i < this.cls.length; i++) { |
413 getSkinUrl: getSkinUrl, |
1013 if (i > 0) { |
414 isSkinDisabled: isSkinDisabled |
1014 value += ' '; |
415 }; |
1015 } |
416 |
1016 value += this.prefix + this.cls[i]; |
417 var fireSkinLoaded$1 = function (editor, callback) { |
1017 } |
418 var done = function () { |
1018 return value; |
419 editor._skinLoaded = true; |
1019 }; |
420 $_77u64d186jjgwejzi.fireSkinLoaded(editor); |
1020 |
421 callback(); |
1021 function unique(array) { |
422 }; |
1022 var uniqueItems = []; |
423 if (editor.initialized) { |
1023 var i = array.length, item; |
424 done(); |
1024 while (i--) { |
425 } else { |
1025 item = array[i]; |
426 editor.on('init', done); |
1026 if (!item.__checked) { |
|
1027 uniqueItems.push(item); |
|
1028 item.__checked = 1; |
|
1029 } |
|
1030 } |
|
1031 i = uniqueItems.length; |
|
1032 while (i--) { |
|
1033 delete uniqueItems[i].__checked; |
|
1034 } |
|
1035 return uniqueItems; |
427 } |
1036 } |
428 }; |
1037 var expression = /^([\w\\*]+)?(?:#([\w\-\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i; |
429 var load = function (editor, callback) { |
1038 var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g; |
430 var skinUrl = $_4j2h42187jjgwejzk.getSkinUrl(editor); |
1039 var whiteSpace = /^\s*|\s*$/g; |
431 var done = function () { |
1040 var Collection; |
432 fireSkinLoaded$1(editor, callback); |
1041 var Selector = global$8.extend({ |
433 }; |
1042 init: function (selector) { |
434 if ($_4j2h42187jjgwejzk.isSkinDisabled(editor)) { |
1043 var match = this.match; |
435 done(); |
1044 function compileNameFilter(name) { |
436 } else { |
1045 if (name) { |
437 global$2.DOM.styleSheetLoader.load(skinUrl + '/skin.min.css', done); |
1046 name = name.toLowerCase(); |
438 editor.contentCSS.push(skinUrl + '/content.inline.min.css'); |
1047 return function (item) { |
439 } |
1048 return name === '*' || item.type === name; |
440 }; |
1049 }; |
441 var $_93v08q185jjgwejzh = { load: load }; |
1050 } |
442 |
1051 } |
443 var getSelectionElements = function (editor) { |
1052 function compileIdFilter(id) { |
444 var node = editor.selection.getNode(); |
1053 if (id) { |
445 var elms = editor.dom.getParents(node, '*'); |
1054 return function (item) { |
446 return elms; |
1055 return item._name === id; |
447 }; |
1056 }; |
448 var createToolbar = function (editor, selector, id, items) { |
1057 } |
449 var selectorPredicate = function (elm) { |
1058 } |
450 return editor.dom.is(elm, selector); |
1059 function compileClassesFilter(classes) { |
451 }; |
1060 if (classes) { |
452 return { |
1061 classes = classes.split('.'); |
453 predicate: selectorPredicate, |
1062 return function (item) { |
454 id: id, |
1063 var i = classes.length; |
455 items: items |
1064 while (i--) { |
456 }; |
1065 if (!item.classes.contains(classes[i])) { |
457 }; |
1066 return false; |
458 var getToolbars = function (editor) { |
1067 } |
459 var contextToolbars = editor.contextToolbars; |
|
460 return $_ccn98l17xjjgwejz7.flatten([ |
|
461 contextToolbars ? contextToolbars : [], |
|
462 createToolbar(editor, 'img', 'image', 'alignleft aligncenter alignright') |
|
463 ]); |
|
464 }; |
|
465 var findMatchResult = function (editor, toolbars) { |
|
466 var result, elements, contextToolbarsPredicateIds; |
|
467 elements = getSelectionElements(editor); |
|
468 contextToolbarsPredicateIds = $_9rj8kx182jjgwejze.fromContextToolbars(toolbars); |
|
469 result = $_6lg87517zjjgwejza.match(editor, [ |
|
470 $_egsucq17yjjgwejz9.element(elements[0], contextToolbarsPredicateIds), |
|
471 $_fhwgeg184jjgwejzf.textSelection('text'), |
|
472 $_fhwgeg184jjgwejzf.emptyTextBlock(elements, 'insert'), |
|
473 $_egsucq17yjjgwejz9.parent(elements, contextToolbarsPredicateIds) |
|
474 ]); |
|
475 return result && result.rect ? result : null; |
|
476 }; |
|
477 var editorHasFocus = function (editor) { |
|
478 return document.activeElement === editor.getBody(); |
|
479 }; |
|
480 var togglePanel = function (editor, panel) { |
|
481 var toggle = function () { |
|
482 var toolbars = getToolbars(editor); |
|
483 var result = findMatchResult(editor, toolbars); |
|
484 if (result) { |
|
485 panel.show(editor, result.id, result.rect, toolbars); |
|
486 } else { |
|
487 panel.hide(); |
|
488 } |
|
489 }; |
|
490 return function () { |
|
491 if (!editor.removed && editorHasFocus(editor)) { |
|
492 toggle(); |
|
493 } |
|
494 }; |
|
495 }; |
|
496 var repositionPanel = function (editor, panel) { |
|
497 return function () { |
|
498 var toolbars = getToolbars(editor); |
|
499 var result = findMatchResult(editor, toolbars); |
|
500 if (result) { |
|
501 panel.reposition(editor, result.id, result.rect); |
|
502 } |
|
503 }; |
|
504 }; |
|
505 var ignoreWhenFormIsVisible = function (editor, panel, f) { |
|
506 return function () { |
|
507 if (!editor.removed && !panel.inForm()) { |
|
508 f(); |
|
509 } |
|
510 }; |
|
511 }; |
|
512 var bindContextualToolbarsEvents = function (editor, panel) { |
|
513 var throttledTogglePanel = global$3.throttle(togglePanel(editor, panel), 0); |
|
514 var throttledTogglePanelWhenNotInForm = global$3.throttle(ignoreWhenFormIsVisible(editor, panel, togglePanel(editor, panel)), 0); |
|
515 var reposition = repositionPanel(editor, panel); |
|
516 editor.on('blur hide ObjectResizeStart', panel.hide); |
|
517 editor.on('click', throttledTogglePanel); |
|
518 editor.on('nodeChange mouseup', throttledTogglePanelWhenNotInForm); |
|
519 editor.on('ResizeEditor keyup', throttledTogglePanel); |
|
520 editor.on('ResizeWindow', reposition); |
|
521 global$2.DOM.bind(global$1.container, 'scroll', reposition); |
|
522 editor.on('remove', function () { |
|
523 global$2.DOM.unbind(global$1.container, 'scroll', reposition); |
|
524 panel.remove(); |
|
525 }); |
|
526 editor.shortcuts.add('Alt+F10,F10', '', panel.focus); |
|
527 }; |
|
528 var overrideLinkShortcut = function (editor, panel) { |
|
529 editor.shortcuts.remove('meta+k'); |
|
530 editor.shortcuts.add('meta+k', '', function () { |
|
531 var toolbars = getToolbars(editor); |
|
532 var result = $_6lg87517zjjgwejza.match(editor, [$_fhwgeg184jjgwejzf.textSelection('quicklink')]); |
|
533 if (result) { |
|
534 panel.show(editor, result.id, result.rect, toolbars); |
|
535 } |
|
536 }); |
|
537 }; |
|
538 var renderInlineUI = function (editor, panel) { |
|
539 $_93v08q185jjgwejzh.load(editor, function () { |
|
540 bindContextualToolbarsEvents(editor, panel); |
|
541 overrideLinkShortcut(editor, panel); |
|
542 }); |
|
543 return {}; |
|
544 }; |
|
545 var fail = function (message) { |
|
546 throw new Error(message); |
|
547 }; |
|
548 var renderUI = function (editor, panel) { |
|
549 return editor.inline ? renderInlineUI(editor, panel) : fail('inlite theme only supports inline mode.'); |
|
550 }; |
|
551 var $_b0wxh217tjjgwejyx = { renderUI: renderUI }; |
|
552 |
|
553 var noop = function () { |
|
554 var x = []; |
|
555 for (var _i = 0; _i < arguments.length; _i++) { |
|
556 x[_i] = arguments[_i]; |
|
557 } |
|
558 }; |
|
559 |
|
560 var compose = function (fa, fb) { |
|
561 return function () { |
|
562 var x = []; |
|
563 for (var _i = 0; _i < arguments.length; _i++) { |
|
564 x[_i] = arguments[_i]; |
|
565 } |
|
566 return fa(fb.apply(null, arguments)); |
|
567 }; |
|
568 }; |
|
569 var constant = function (value) { |
|
570 return function () { |
|
571 return value; |
|
572 }; |
|
573 }; |
|
574 |
|
575 |
|
576 var curry = function (f) { |
|
577 var x = []; |
|
578 for (var _i = 1; _i < arguments.length; _i++) { |
|
579 x[_i - 1] = arguments[_i]; |
|
580 } |
|
581 var args = new Array(arguments.length - 1); |
|
582 for (var i = 1; i < arguments.length; i++) |
|
583 args[i - 1] = arguments[i]; |
|
584 return function () { |
|
585 var x = []; |
|
586 for (var _i = 0; _i < arguments.length; _i++) { |
|
587 x[_i] = arguments[_i]; |
|
588 } |
|
589 var newArgs = new Array(arguments.length); |
|
590 for (var j = 0; j < newArgs.length; j++) |
|
591 newArgs[j] = arguments[j]; |
|
592 var all = args.concat(newArgs); |
|
593 return f.apply(null, all); |
|
594 }; |
|
595 }; |
|
596 |
|
597 |
|
598 |
|
599 |
|
600 var never = constant(false); |
|
601 var always = constant(true); |
|
602 |
|
603 var never$1 = never; |
|
604 var always$1 = always; |
|
605 var none = function () { |
|
606 return NONE; |
|
607 }; |
|
608 var NONE = function () { |
|
609 var eq = function (o) { |
|
610 return o.isNone(); |
|
611 }; |
|
612 var call$$1 = function (thunk) { |
|
613 return thunk(); |
|
614 }; |
|
615 var id = function (n) { |
|
616 return n; |
|
617 }; |
|
618 var noop$$1 = function () { |
|
619 }; |
|
620 var nul = function () { |
|
621 return null; |
|
622 }; |
|
623 var undef = function () { |
|
624 return undefined; |
|
625 }; |
|
626 var me = { |
|
627 fold: function (n, s) { |
|
628 return n(); |
|
629 }, |
|
630 is: never$1, |
|
631 isSome: never$1, |
|
632 isNone: always$1, |
|
633 getOr: id, |
|
634 getOrThunk: call$$1, |
|
635 getOrDie: function (msg) { |
|
636 throw new Error(msg || 'error: getOrDie called on none.'); |
|
637 }, |
|
638 getOrNull: nul, |
|
639 getOrUndefined: undef, |
|
640 or: id, |
|
641 orThunk: call$$1, |
|
642 map: none, |
|
643 ap: none, |
|
644 each: noop$$1, |
|
645 bind: none, |
|
646 flatten: none, |
|
647 exists: never$1, |
|
648 forall: always$1, |
|
649 filter: none, |
|
650 equals: eq, |
|
651 equals_: eq, |
|
652 toArray: function () { |
|
653 return []; |
|
654 }, |
|
655 toString: constant('none()') |
|
656 }; |
|
657 if (Object.freeze) |
|
658 Object.freeze(me); |
|
659 return me; |
|
660 }(); |
|
661 var some = function (a) { |
|
662 var constant_a = function () { |
|
663 return a; |
|
664 }; |
|
665 var self = function () { |
|
666 return me; |
|
667 }; |
|
668 var map = function (f) { |
|
669 return some(f(a)); |
|
670 }; |
|
671 var bind = function (f) { |
|
672 return f(a); |
|
673 }; |
|
674 var me = { |
|
675 fold: function (n, s) { |
|
676 return s(a); |
|
677 }, |
|
678 is: function (v) { |
|
679 return a === v; |
|
680 }, |
|
681 isSome: always$1, |
|
682 isNone: never$1, |
|
683 getOr: constant_a, |
|
684 getOrThunk: constant_a, |
|
685 getOrDie: constant_a, |
|
686 getOrNull: constant_a, |
|
687 getOrUndefined: constant_a, |
|
688 or: self, |
|
689 orThunk: self, |
|
690 map: map, |
|
691 ap: function (optfab) { |
|
692 return optfab.fold(none, function (fab) { |
|
693 return some(fab(a)); |
|
694 }); |
|
695 }, |
|
696 each: function (f) { |
|
697 f(a); |
|
698 }, |
|
699 bind: bind, |
|
700 flatten: constant_a, |
|
701 exists: bind, |
|
702 forall: bind, |
|
703 filter: function (f) { |
|
704 return f(a) ? me : NONE; |
|
705 }, |
|
706 equals: function (o) { |
|
707 return o.is(a); |
|
708 }, |
|
709 equals_: function (o, elementEq) { |
|
710 return o.fold(never$1, function (b) { |
|
711 return elementEq(a, b); |
|
712 }); |
|
713 }, |
|
714 toArray: function () { |
|
715 return [a]; |
|
716 }, |
|
717 toString: function () { |
|
718 return 'some(' + a + ')'; |
|
719 } |
|
720 }; |
|
721 return me; |
|
722 }; |
|
723 var from = function (value) { |
|
724 return value === null || value === undefined ? NONE : some(value); |
|
725 }; |
|
726 var Option = { |
|
727 some: some, |
|
728 none: none, |
|
729 from: from |
|
730 }; |
|
731 |
|
732 var typeOf = function (x) { |
|
733 if (x === null) |
|
734 return 'null'; |
|
735 var t = typeof x; |
|
736 if (t === 'object' && Array.prototype.isPrototypeOf(x)) |
|
737 return 'array'; |
|
738 if (t === 'object' && String.prototype.isPrototypeOf(x)) |
|
739 return 'string'; |
|
740 return t; |
|
741 }; |
|
742 var isType$1 = function (type) { |
|
743 return function (value) { |
|
744 return typeOf(value) === type; |
|
745 }; |
|
746 }; |
|
747 |
|
748 |
|
749 |
|
750 |
|
751 |
|
752 |
|
753 var isFunction$1 = isType$1('function'); |
|
754 var isNumber$1 = isType$1('number'); |
|
755 |
|
756 var rawIndexOf = function () { |
|
757 var pIndexOf = Array.prototype.indexOf; |
|
758 var fastIndex = function (xs, x) { |
|
759 return pIndexOf.call(xs, x); |
|
760 }; |
|
761 var slowIndex = function (xs, x) { |
|
762 return slowIndexOf(xs, x); |
|
763 }; |
|
764 return pIndexOf === undefined ? slowIndex : fastIndex; |
|
765 }(); |
|
766 var indexOf = function (xs, x) { |
|
767 var r = rawIndexOf(xs, x); |
|
768 return r === -1 ? Option.none() : Option.some(r); |
|
769 }; |
|
770 |
|
771 var exists = function (xs, pred) { |
|
772 return findIndex(xs, pred).isSome(); |
|
773 }; |
|
774 |
|
775 |
|
776 var map = function (xs, f) { |
|
777 var len = xs.length; |
|
778 var r = new Array(len); |
|
779 for (var i = 0; i < len; i++) { |
|
780 var x = xs[i]; |
|
781 r[i] = f(x, i, xs); |
|
782 } |
|
783 return r; |
|
784 }; |
|
785 var each = function (xs, f) { |
|
786 for (var i = 0, len = xs.length; i < len; i++) { |
|
787 var x = xs[i]; |
|
788 f(x, i, xs); |
|
789 } |
|
790 }; |
|
791 |
|
792 |
|
793 var filter = function (xs, pred) { |
|
794 var r = []; |
|
795 for (var i = 0, len = xs.length; i < len; i++) { |
|
796 var x = xs[i]; |
|
797 if (pred(x, i, xs)) { |
|
798 r.push(x); |
|
799 } |
|
800 } |
|
801 return r; |
|
802 }; |
|
803 |
|
804 |
|
805 var foldl = function (xs, f, acc) { |
|
806 each(xs, function (x) { |
|
807 acc = f(acc, x); |
|
808 }); |
|
809 return acc; |
|
810 }; |
|
811 var find = function (xs, pred) { |
|
812 for (var i = 0, len = xs.length; i < len; i++) { |
|
813 var x = xs[i]; |
|
814 if (pred(x, i, xs)) { |
|
815 return Option.some(x); |
|
816 } |
|
817 } |
|
818 return Option.none(); |
|
819 }; |
|
820 var findIndex = function (xs, pred) { |
|
821 for (var i = 0, len = xs.length; i < len; i++) { |
|
822 var x = xs[i]; |
|
823 if (pred(x, i, xs)) { |
|
824 return Option.some(i); |
|
825 } |
|
826 } |
|
827 return Option.none(); |
|
828 }; |
|
829 var slowIndexOf = function (xs, x) { |
|
830 for (var i = 0, len = xs.length; i < len; ++i) { |
|
831 if (xs[i] === x) { |
|
832 return i; |
|
833 } |
|
834 } |
|
835 return -1; |
|
836 }; |
|
837 var push = Array.prototype.push; |
|
838 var flatten$1 = function (xs) { |
|
839 var r = []; |
|
840 for (var i = 0, len = xs.length; i < len; ++i) { |
|
841 if (!Array.prototype.isPrototypeOf(xs[i])) |
|
842 throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs); |
|
843 push.apply(r, xs[i]); |
|
844 } |
|
845 return r; |
|
846 }; |
|
847 |
|
848 |
|
849 |
|
850 var slice = Array.prototype.slice; |
|
851 var reverse = function (xs) { |
|
852 var r = slice.call(xs, 0); |
|
853 r.reverse(); |
|
854 return r; |
|
855 }; |
|
856 |
|
857 |
|
858 |
|
859 |
|
860 |
|
861 |
|
862 var from$1 = isFunction$1(Array.from) ? Array.from : function (x) { |
|
863 return slice.call(x); |
|
864 }; |
|
865 |
|
866 var count = 0; |
|
867 var funcs = { |
|
868 id: function () { |
|
869 return 'mceu_' + count++; |
|
870 }, |
|
871 create: function (name$$1, attrs, children) { |
|
872 var elm = document.createElement(name$$1); |
|
873 global$2.DOM.setAttribs(elm, attrs); |
|
874 if (typeof children === 'string') { |
|
875 elm.innerHTML = children; |
|
876 } else { |
|
877 global$4.each(children, function (child) { |
|
878 if (child.nodeType) { |
|
879 elm.appendChild(child); |
|
880 } |
|
881 }); |
|
882 } |
|
883 return elm; |
|
884 }, |
|
885 createFragment: function (html) { |
|
886 return global$2.DOM.createFragment(html); |
|
887 }, |
|
888 getWindowSize: function () { |
|
889 return global$2.DOM.getViewPort(); |
|
890 }, |
|
891 getSize: function (elm) { |
|
892 var width, height; |
|
893 if (elm.getBoundingClientRect) { |
|
894 var rect = elm.getBoundingClientRect(); |
|
895 width = Math.max(rect.width || rect.right - rect.left, elm.offsetWidth); |
|
896 height = Math.max(rect.height || rect.bottom - rect.bottom, elm.offsetHeight); |
|
897 } else { |
|
898 width = elm.offsetWidth; |
|
899 height = elm.offsetHeight; |
|
900 } |
|
901 return { |
|
902 width: width, |
|
903 height: height |
|
904 }; |
|
905 }, |
|
906 getPos: function (elm, root) { |
|
907 return global$2.DOM.getPos(elm, root || funcs.getContainer()); |
|
908 }, |
|
909 getContainer: function () { |
|
910 return global$1.container ? global$1.container : document.body; |
|
911 }, |
|
912 getViewPort: function (win) { |
|
913 return global$2.DOM.getViewPort(win); |
|
914 }, |
|
915 get: function (id) { |
|
916 return document.getElementById(id); |
|
917 }, |
|
918 addClass: function (elm, cls) { |
|
919 return global$2.DOM.addClass(elm, cls); |
|
920 }, |
|
921 removeClass: function (elm, cls) { |
|
922 return global$2.DOM.removeClass(elm, cls); |
|
923 }, |
|
924 hasClass: function (elm, cls) { |
|
925 return global$2.DOM.hasClass(elm, cls); |
|
926 }, |
|
927 toggleClass: function (elm, cls, state) { |
|
928 return global$2.DOM.toggleClass(elm, cls, state); |
|
929 }, |
|
930 css: function (elm, name$$1, value) { |
|
931 return global$2.DOM.setStyle(elm, name$$1, value); |
|
932 }, |
|
933 getRuntimeStyle: function (elm, name$$1) { |
|
934 return global$2.DOM.getStyle(elm, name$$1, true); |
|
935 }, |
|
936 on: function (target, name$$1, callback, scope) { |
|
937 return global$2.DOM.bind(target, name$$1, callback, scope); |
|
938 }, |
|
939 off: function (target, name$$1, callback) { |
|
940 return global$2.DOM.unbind(target, name$$1, callback); |
|
941 }, |
|
942 fire: function (target, name$$1, args) { |
|
943 return global$2.DOM.fire(target, name$$1, args); |
|
944 }, |
|
945 innerHtml: function (elm, html) { |
|
946 global$2.DOM.setHTML(elm, html); |
|
947 } |
|
948 }; |
|
949 |
|
950 var global$7 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery'); |
|
951 |
|
952 var global$8 = tinymce.util.Tools.resolve('tinymce.util.Class'); |
|
953 |
|
954 var global$9 = tinymce.util.Tools.resolve('tinymce.util.EventDispatcher'); |
|
955 |
|
956 var $_4kbuyt18pjjgwek1w = { |
|
957 parseBox: function (value) { |
|
958 var len; |
|
959 var radix = 10; |
|
960 if (!value) { |
|
961 return; |
|
962 } |
|
963 if (typeof value === 'number') { |
|
964 value = value || 0; |
|
965 return { |
|
966 top: value, |
|
967 left: value, |
|
968 bottom: value, |
|
969 right: value |
|
970 }; |
|
971 } |
|
972 value = value.split(' '); |
|
973 len = value.length; |
|
974 if (len === 1) { |
|
975 value[1] = value[2] = value[3] = value[0]; |
|
976 } else if (len === 2) { |
|
977 value[2] = value[0]; |
|
978 value[3] = value[1]; |
|
979 } else if (len === 3) { |
|
980 value[3] = value[1]; |
|
981 } |
|
982 return { |
|
983 top: parseInt(value[0], radix) || 0, |
|
984 right: parseInt(value[1], radix) || 0, |
|
985 bottom: parseInt(value[2], radix) || 0, |
|
986 left: parseInt(value[3], radix) || 0 |
|
987 }; |
|
988 }, |
|
989 measureBox: function (elm, prefix) { |
|
990 function getStyle(name) { |
|
991 var defaultView = elm.ownerDocument.defaultView; |
|
992 if (defaultView) { |
|
993 var computedStyle = defaultView.getComputedStyle(elm, null); |
|
994 if (computedStyle) { |
|
995 name = name.replace(/[A-Z]/g, function (a) { |
|
996 return '-' + a; |
|
997 }); |
|
998 return computedStyle.getPropertyValue(name); |
|
999 } else { |
|
1000 return null; |
|
1001 } |
|
1002 } |
|
1003 return elm.currentStyle[name]; |
|
1004 } |
|
1005 function getSide(name) { |
|
1006 var val = parseFloat(getStyle(name)); |
|
1007 return isNaN(val) ? 0 : val; |
|
1008 } |
|
1009 return { |
|
1010 top: getSide(prefix + 'TopWidth'), |
|
1011 right: getSide(prefix + 'RightWidth'), |
|
1012 bottom: getSide(prefix + 'BottomWidth'), |
|
1013 left: getSide(prefix + 'LeftWidth') |
|
1014 }; |
|
1015 } |
|
1016 }; |
|
1017 |
|
1018 function noop$1() { |
|
1019 } |
|
1020 function ClassList(onchange) { |
|
1021 this.cls = []; |
|
1022 this.cls._map = {}; |
|
1023 this.onchange = onchange || noop$1; |
|
1024 this.prefix = ''; |
|
1025 } |
|
1026 global$4.extend(ClassList.prototype, { |
|
1027 add: function (cls) { |
|
1028 if (cls && !this.contains(cls)) { |
|
1029 this.cls._map[cls] = true; |
|
1030 this.cls.push(cls); |
|
1031 this._change(); |
|
1032 } |
|
1033 return this; |
|
1034 }, |
|
1035 remove: function (cls) { |
|
1036 if (this.contains(cls)) { |
|
1037 var i = void 0; |
|
1038 for (i = 0; i < this.cls.length; i++) { |
|
1039 if (this.cls[i] === cls) { |
|
1040 break; |
|
1041 } |
|
1042 } |
|
1043 this.cls.splice(i, 1); |
|
1044 delete this.cls._map[cls]; |
|
1045 this._change(); |
|
1046 } |
|
1047 return this; |
|
1048 }, |
|
1049 toggle: function (cls, state) { |
|
1050 var curState = this.contains(cls); |
|
1051 if (curState !== state) { |
|
1052 if (curState) { |
|
1053 this.remove(cls); |
|
1054 } else { |
|
1055 this.add(cls); |
|
1056 } |
|
1057 this._change(); |
|
1058 } |
|
1059 return this; |
|
1060 }, |
|
1061 contains: function (cls) { |
|
1062 return !!this.cls._map[cls]; |
|
1063 }, |
|
1064 _change: function () { |
|
1065 delete this.clsValue; |
|
1066 this.onchange.call(this); |
|
1067 } |
|
1068 }); |
|
1069 ClassList.prototype.toString = function () { |
|
1070 var value; |
|
1071 if (this.clsValue) { |
|
1072 return this.clsValue; |
|
1073 } |
|
1074 value = ''; |
|
1075 for (var i = 0; i < this.cls.length; i++) { |
|
1076 if (i > 0) { |
|
1077 value += ' '; |
|
1078 } |
|
1079 value += this.prefix + this.cls[i]; |
|
1080 } |
|
1081 return value; |
|
1082 }; |
|
1083 |
|
1084 function unique(array) { |
|
1085 var uniqueItems = []; |
|
1086 var i = array.length, item; |
|
1087 while (i--) { |
|
1088 item = array[i]; |
|
1089 if (!item.__checked) { |
|
1090 uniqueItems.push(item); |
|
1091 item.__checked = 1; |
|
1092 } |
|
1093 } |
|
1094 i = uniqueItems.length; |
|
1095 while (i--) { |
|
1096 delete uniqueItems[i].__checked; |
|
1097 } |
|
1098 return uniqueItems; |
|
1099 } |
|
1100 var expression = /^([\w\\*]+)?(?:#([\w\-\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i; |
|
1101 var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g; |
|
1102 var whiteSpace = /^\s*|\s*$/g; |
|
1103 var Collection; |
|
1104 var Selector = global$8.extend({ |
|
1105 init: function (selector) { |
|
1106 var match = this.match; |
|
1107 function compileNameFilter(name) { |
|
1108 if (name) { |
|
1109 name = name.toLowerCase(); |
|
1110 return function (item) { |
|
1111 return name === '*' || item.type === name; |
|
1112 }; |
|
1113 } |
|
1114 } |
|
1115 function compileIdFilter(id) { |
|
1116 if (id) { |
|
1117 return function (item) { |
|
1118 return item._name === id; |
|
1119 }; |
|
1120 } |
|
1121 } |
|
1122 function compileClassesFilter(classes) { |
|
1123 if (classes) { |
|
1124 classes = classes.split('.'); |
|
1125 return function (item) { |
|
1126 var i = classes.length; |
|
1127 while (i--) { |
|
1128 if (!item.classes.contains(classes[i])) { |
|
1129 return false; |
|
1130 } |
1068 } |
1131 } |
1069 return true; |
1132 return true; |
|
1133 }; |
|
1134 } |
|
1135 } |
|
1136 function compileAttrFilter(name, cmp, check) { |
|
1137 if (name) { |
|
1138 return function (item) { |
|
1139 var value = item[name] ? item[name]() : ''; |
|
1140 return !cmp ? !!check : cmp === '=' ? value === check : cmp === '*=' ? value.indexOf(check) >= 0 : cmp === '~=' ? (' ' + value + ' ').indexOf(' ' + check + ' ') >= 0 : cmp === '!=' ? value !== check : cmp === '^=' ? value.indexOf(check) === 0 : cmp === '$=' ? value.substr(value.length - check.length) === check : false; |
|
1141 }; |
|
1142 } |
|
1143 } |
|
1144 function compilePsuedoFilter(name) { |
|
1145 var notSelectors; |
|
1146 if (name) { |
|
1147 name = /(?:not\((.+)\))|(.+)/i.exec(name); |
|
1148 if (!name[1]) { |
|
1149 name = name[2]; |
|
1150 return function (item, index, length) { |
|
1151 return name === 'first' ? index === 0 : name === 'last' ? index === length - 1 : name === 'even' ? index % 2 === 0 : name === 'odd' ? index % 2 === 1 : item[name] ? item[name]() : false; |
|
1152 }; |
1070 }; |
1153 } |
1071 } |
1154 notSelectors = parseChunks(name[1], []); |
1072 } |
1155 return function (item) { |
1073 function compileAttrFilter(name, cmp, check) { |
1156 return !match(item, notSelectors); |
1074 if (name) { |
1157 }; |
1075 return function (item) { |
1158 } |
1076 var value = item[name] ? item[name]() : ''; |
1159 } |
1077 return !cmp ? !!check : cmp === '=' ? value === check : cmp === '*=' ? value.indexOf(check) >= 0 : cmp === '~=' ? (' ' + value + ' ').indexOf(' ' + check + ' ') >= 0 : cmp === '!=' ? value !== check : cmp === '^=' ? value.indexOf(check) === 0 : cmp === '$=' ? value.substr(value.length - check.length) === check : false; |
1160 function compile(selector, filters, direct) { |
1078 }; |
1161 var parts; |
1079 } |
1162 function add(filter) { |
1080 } |
1163 if (filter) { |
1081 function compilePsuedoFilter(name) { |
1164 filters.push(filter); |
1082 var notSelectors; |
1165 } |
1083 if (name) { |
1166 } |
1084 name = /(?:not\((.+)\))|(.+)/i.exec(name); |
1167 parts = expression.exec(selector.replace(whiteSpace, '')); |
1085 if (!name[1]) { |
1168 add(compileNameFilter(parts[1])); |
1086 name = name[2]; |
1169 add(compileIdFilter(parts[2])); |
1087 return function (item, index, length) { |
1170 add(compileClassesFilter(parts[3])); |
1088 return name === 'first' ? index === 0 : name === 'last' ? index === length - 1 : name === 'even' ? index % 2 === 0 : name === 'odd' ? index % 2 === 1 : item[name] ? item[name]() : false; |
1171 add(compileAttrFilter(parts[4], parts[5], parts[6])); |
1089 }; |
1172 add(compilePsuedoFilter(parts[7])); |
1090 } |
1173 filters.pseudo = !!parts[7]; |
1091 notSelectors = parseChunks(name[1], []); |
1174 filters.direct = direct; |
1092 return function (item) { |
1175 return filters; |
1093 return !match(item, notSelectors); |
1176 } |
1094 }; |
1177 function parseChunks(selector, selectors) { |
1095 } |
1178 var parts = []; |
1096 } |
1179 var extra, matches, i; |
1097 function compile(selector, filters, direct) { |
1180 do { |
1098 var parts; |
1181 chunker.exec(''); |
1099 function add(filter) { |
1182 matches = chunker.exec(selector); |
1100 if (filter) { |
1183 if (matches) { |
1101 filters.push(filter); |
1184 selector = matches[3]; |
1102 } |
1185 parts.push(matches[1]); |
1103 } |
1186 if (matches[2]) { |
1104 parts = expression.exec(selector.replace(whiteSpace, '')); |
1187 extra = matches[3]; |
1105 add(compileNameFilter(parts[1])); |
1188 break; |
1106 add(compileIdFilter(parts[2])); |
1189 } |
1107 add(compileClassesFilter(parts[3])); |
1190 } |
1108 add(compileAttrFilter(parts[4], parts[5], parts[6])); |
1191 } while (matches); |
1109 add(compilePsuedoFilter(parts[7])); |
1192 if (extra) { |
1110 filters.pseudo = !!parts[7]; |
1193 parseChunks(extra, selectors); |
1111 filters.direct = direct; |
1194 } |
1112 return filters; |
1195 selector = []; |
1113 } |
1196 for (i = 0; i < parts.length; i++) { |
1114 function parseChunks(selector, selectors) { |
1197 if (parts[i] !== '>') { |
1115 var parts = []; |
1198 selector.push(compile(parts[i], [], parts[i - 1] === '>')); |
1116 var extra, matches, i; |
1199 } |
1117 do { |
1200 } |
1118 chunker.exec(''); |
1201 selectors.push(selector); |
1119 matches = chunker.exec(selector); |
1202 return selectors; |
1120 if (matches) { |
1203 } |
1121 selector = matches[3]; |
1204 this._selectors = parseChunks(selector, []); |
1122 parts.push(matches[1]); |
1205 }, |
1123 if (matches[2]) { |
1206 match: function (control, selectors) { |
1124 extra = matches[3]; |
1207 var i, l, si, sl, selector, fi, fl, filters, index, length, siblings, count, item; |
1125 break; |
1208 selectors = selectors || this._selectors; |
1126 } |
1209 for (i = 0, l = selectors.length; i < l; i++) { |
1127 } |
1210 selector = selectors[i]; |
1128 } while (matches); |
1211 sl = selector.length; |
1129 if (extra) { |
1212 item = control; |
1130 parseChunks(extra, selectors); |
1213 count = 0; |
1131 } |
1214 for (si = sl - 1; si >= 0; si--) { |
1132 selector = []; |
1215 filters = selector[si]; |
1133 for (i = 0; i < parts.length; i++) { |
1216 while (item) { |
1134 if (parts[i] !== '>') { |
1217 if (filters.pseudo) { |
1135 selector.push(compile(parts[i], [], parts[i - 1] === '>')); |
1218 siblings = item.parent().items(); |
1136 } |
1219 index = length = siblings.length; |
1137 } |
1220 while (index--) { |
1138 selectors.push(selector); |
1221 if (siblings[index] === item) { |
1139 return selectors; |
|
1140 } |
|
1141 this._selectors = parseChunks(selector, []); |
|
1142 }, |
|
1143 match: function (control, selectors) { |
|
1144 var i, l, si, sl, selector, fi, fl, filters, index, length, siblings, count, item; |
|
1145 selectors = selectors || this._selectors; |
|
1146 for (i = 0, l = selectors.length; i < l; i++) { |
|
1147 selector = selectors[i]; |
|
1148 sl = selector.length; |
|
1149 item = control; |
|
1150 count = 0; |
|
1151 for (si = sl - 1; si >= 0; si--) { |
|
1152 filters = selector[si]; |
|
1153 while (item) { |
|
1154 if (filters.pseudo) { |
|
1155 siblings = item.parent().items(); |
|
1156 index = length = siblings.length; |
|
1157 while (index--) { |
|
1158 if (siblings[index] === item) { |
|
1159 break; |
|
1160 } |
|
1161 } |
|
1162 } |
|
1163 for (fi = 0, fl = filters.length; fi < fl; fi++) { |
|
1164 if (!filters[fi](item, index, length)) { |
|
1165 fi = fl + 1; |
1222 break; |
1166 break; |
1223 } |
1167 } |
1224 } |
1168 } |
1225 } |
1169 if (fi === fl) { |
|
1170 count++; |
|
1171 break; |
|
1172 } else { |
|
1173 if (si === sl - 1) { |
|
1174 break; |
|
1175 } |
|
1176 } |
|
1177 item = item.parent(); |
|
1178 } |
|
1179 } |
|
1180 if (count === sl) { |
|
1181 return true; |
|
1182 } |
|
1183 } |
|
1184 return false; |
|
1185 }, |
|
1186 find: function (container) { |
|
1187 var matches = [], i, l; |
|
1188 var selectors = this._selectors; |
|
1189 function collect(items, selector, index) { |
|
1190 var i, l, fi, fl, item; |
|
1191 var filters = selector[index]; |
|
1192 for (i = 0, l = items.length; i < l; i++) { |
|
1193 item = items[i]; |
1226 for (fi = 0, fl = filters.length; fi < fl; fi++) { |
1194 for (fi = 0, fl = filters.length; fi < fl; fi++) { |
1227 if (!filters[fi](item, index, length)) { |
1195 if (!filters[fi](item, i, l)) { |
1228 fi = fl + 1; |
1196 fi = fl + 1; |
1229 break; |
1197 break; |
1230 } |
1198 } |
1231 } |
1199 } |
1232 if (fi === fl) { |
1200 if (fi === fl) { |
1233 count++; |
1201 if (index === selector.length - 1) { |
1234 break; |
1202 matches.push(item); |
1235 } else { |
1203 } else { |
1236 if (si === sl - 1) { |
1204 if (item.items) { |
|
1205 collect(item.items(), selector, index + 1); |
|
1206 } |
|
1207 } |
|
1208 } else if (filters.direct) { |
|
1209 return; |
|
1210 } |
|
1211 if (item.items) { |
|
1212 collect(item.items(), selector, index); |
|
1213 } |
|
1214 } |
|
1215 } |
|
1216 if (container.items) { |
|
1217 for (i = 0, l = selectors.length; i < l; i++) { |
|
1218 collect(container.items(), selectors[i], 0); |
|
1219 } |
|
1220 if (l > 1) { |
|
1221 matches = unique(matches); |
|
1222 } |
|
1223 } |
|
1224 if (!Collection) { |
|
1225 Collection = Selector.Collection; |
|
1226 } |
|
1227 return new Collection(matches); |
|
1228 } |
|
1229 }); |
|
1230 |
|
1231 var Collection$1, proto; |
|
1232 var push$1 = Array.prototype.push, slice$1 = Array.prototype.slice; |
|
1233 proto = { |
|
1234 length: 0, |
|
1235 init: function (items) { |
|
1236 if (items) { |
|
1237 this.add(items); |
|
1238 } |
|
1239 }, |
|
1240 add: function (items) { |
|
1241 var self = this; |
|
1242 if (!global$4.isArray(items)) { |
|
1243 if (items instanceof Collection$1) { |
|
1244 self.add(items.toArray()); |
|
1245 } else { |
|
1246 push$1.call(self, items); |
|
1247 } |
|
1248 } else { |
|
1249 push$1.apply(self, items); |
|
1250 } |
|
1251 return self; |
|
1252 }, |
|
1253 set: function (items) { |
|
1254 var self = this; |
|
1255 var len = self.length; |
|
1256 var i; |
|
1257 self.length = 0; |
|
1258 self.add(items); |
|
1259 for (i = self.length; i < len; i++) { |
|
1260 delete self[i]; |
|
1261 } |
|
1262 return self; |
|
1263 }, |
|
1264 filter: function (selector) { |
|
1265 var self = this; |
|
1266 var i, l; |
|
1267 var matches = []; |
|
1268 var item, match; |
|
1269 if (typeof selector === 'string') { |
|
1270 selector = new Selector(selector); |
|
1271 match = function (item) { |
|
1272 return selector.match(item); |
|
1273 }; |
|
1274 } else { |
|
1275 match = selector; |
|
1276 } |
|
1277 for (i = 0, l = self.length; i < l; i++) { |
|
1278 item = self[i]; |
|
1279 if (match(item)) { |
|
1280 matches.push(item); |
|
1281 } |
|
1282 } |
|
1283 return new Collection$1(matches); |
|
1284 }, |
|
1285 slice: function () { |
|
1286 return new Collection$1(slice$1.apply(this, arguments)); |
|
1287 }, |
|
1288 eq: function (index) { |
|
1289 return index === -1 ? this.slice(index) : this.slice(index, +index + 1); |
|
1290 }, |
|
1291 each: function (callback) { |
|
1292 global$4.each(this, callback); |
|
1293 return this; |
|
1294 }, |
|
1295 toArray: function () { |
|
1296 return global$4.toArray(this); |
|
1297 }, |
|
1298 indexOf: function (ctrl) { |
|
1299 var self = this; |
|
1300 var i = self.length; |
|
1301 while (i--) { |
|
1302 if (self[i] === ctrl) { |
|
1303 break; |
|
1304 } |
|
1305 } |
|
1306 return i; |
|
1307 }, |
|
1308 reverse: function () { |
|
1309 return new Collection$1(global$4.toArray(this).reverse()); |
|
1310 }, |
|
1311 hasClass: function (cls) { |
|
1312 return this[0] ? this[0].classes.contains(cls) : false; |
|
1313 }, |
|
1314 prop: function (name, value) { |
|
1315 var self = this; |
|
1316 var item; |
|
1317 if (value !== undefined) { |
|
1318 self.each(function (item) { |
|
1319 if (item[name]) { |
|
1320 item[name](value); |
|
1321 } |
|
1322 }); |
|
1323 return self; |
|
1324 } |
|
1325 item = self[0]; |
|
1326 if (item && item[name]) { |
|
1327 return item[name](); |
|
1328 } |
|
1329 }, |
|
1330 exec: function (name) { |
|
1331 var self = this, args = global$4.toArray(arguments).slice(1); |
|
1332 self.each(function (item) { |
|
1333 if (item[name]) { |
|
1334 item[name].apply(item, args); |
|
1335 } |
|
1336 }); |
|
1337 return self; |
|
1338 }, |
|
1339 remove: function () { |
|
1340 var i = this.length; |
|
1341 while (i--) { |
|
1342 this[i].remove(); |
|
1343 } |
|
1344 return this; |
|
1345 }, |
|
1346 addClass: function (cls) { |
|
1347 return this.each(function (item) { |
|
1348 item.classes.add(cls); |
|
1349 }); |
|
1350 }, |
|
1351 removeClass: function (cls) { |
|
1352 return this.each(function (item) { |
|
1353 item.classes.remove(cls); |
|
1354 }); |
|
1355 } |
|
1356 }; |
|
1357 global$4.each('fire on off show hide append prepend before after reflow'.split(' '), function (name) { |
|
1358 proto[name] = function () { |
|
1359 var args = global$4.toArray(arguments); |
|
1360 this.each(function (ctrl) { |
|
1361 if (name in ctrl) { |
|
1362 ctrl[name].apply(ctrl, args); |
|
1363 } |
|
1364 }); |
|
1365 return this; |
|
1366 }; |
|
1367 }); |
|
1368 global$4.each('text name disabled active selected checked visible parent value data'.split(' '), function (name) { |
|
1369 proto[name] = function (value) { |
|
1370 return this.prop(name, value); |
|
1371 }; |
|
1372 }); |
|
1373 Collection$1 = global$8.extend(proto); |
|
1374 Selector.Collection = Collection$1; |
|
1375 var Collection$2 = Collection$1; |
|
1376 |
|
1377 var Binding = function (settings) { |
|
1378 this.create = settings.create; |
|
1379 }; |
|
1380 Binding.create = function (model, name) { |
|
1381 return new Binding({ |
|
1382 create: function (otherModel, otherName) { |
|
1383 var bindings; |
|
1384 var fromSelfToOther = function (e) { |
|
1385 otherModel.set(otherName, e.value); |
|
1386 }; |
|
1387 var fromOtherToSelf = function (e) { |
|
1388 model.set(name, e.value); |
|
1389 }; |
|
1390 otherModel.on('change:' + otherName, fromOtherToSelf); |
|
1391 model.on('change:' + name, fromSelfToOther); |
|
1392 bindings = otherModel._bindings; |
|
1393 if (!bindings) { |
|
1394 bindings = otherModel._bindings = []; |
|
1395 otherModel.on('destroy', function () { |
|
1396 var i = bindings.length; |
|
1397 while (i--) { |
|
1398 bindings[i](); |
|
1399 } |
|
1400 }); |
|
1401 } |
|
1402 bindings.push(function () { |
|
1403 model.off('change:' + name, fromSelfToOther); |
|
1404 }); |
|
1405 return model.get(name); |
|
1406 } |
|
1407 }); |
|
1408 }; |
|
1409 |
|
1410 var global$a = tinymce.util.Tools.resolve('tinymce.util.Observable'); |
|
1411 |
|
1412 function isNode(node) { |
|
1413 return node.nodeType > 0; |
|
1414 } |
|
1415 function isEqual(a, b) { |
|
1416 var k, checked; |
|
1417 if (a === b) { |
|
1418 return true; |
|
1419 } |
|
1420 if (a === null || b === null) { |
|
1421 return a === b; |
|
1422 } |
|
1423 if (typeof a !== 'object' || typeof b !== 'object') { |
|
1424 return a === b; |
|
1425 } |
|
1426 if (global$4.isArray(b)) { |
|
1427 if (a.length !== b.length) { |
|
1428 return false; |
|
1429 } |
|
1430 k = a.length; |
|
1431 while (k--) { |
|
1432 if (!isEqual(a[k], b[k])) { |
|
1433 return false; |
|
1434 } |
|
1435 } |
|
1436 } |
|
1437 if (isNode(a) || isNode(b)) { |
|
1438 return a === b; |
|
1439 } |
|
1440 checked = {}; |
|
1441 for (k in b) { |
|
1442 if (!isEqual(a[k], b[k])) { |
|
1443 return false; |
|
1444 } |
|
1445 checked[k] = true; |
|
1446 } |
|
1447 for (k in a) { |
|
1448 if (!checked[k] && !isEqual(a[k], b[k])) { |
|
1449 return false; |
|
1450 } |
|
1451 } |
|
1452 return true; |
|
1453 } |
|
1454 var ObservableObject = global$8.extend({ |
|
1455 Mixins: [global$a], |
|
1456 init: function (data) { |
|
1457 var name, value; |
|
1458 data = data || {}; |
|
1459 for (name in data) { |
|
1460 value = data[name]; |
|
1461 if (value instanceof Binding) { |
|
1462 data[name] = value.create(this, name); |
|
1463 } |
|
1464 } |
|
1465 this.data = data; |
|
1466 }, |
|
1467 set: function (name, value) { |
|
1468 var key, args; |
|
1469 var oldValue = this.data[name]; |
|
1470 if (value instanceof Binding) { |
|
1471 value = value.create(this, name); |
|
1472 } |
|
1473 if (typeof name === 'object') { |
|
1474 for (key in name) { |
|
1475 this.set(key, name[key]); |
|
1476 } |
|
1477 return this; |
|
1478 } |
|
1479 if (!isEqual(oldValue, value)) { |
|
1480 this.data[name] = value; |
|
1481 args = { |
|
1482 target: this, |
|
1483 name: name, |
|
1484 value: value, |
|
1485 oldValue: oldValue |
|
1486 }; |
|
1487 this.fire('change:' + name, args); |
|
1488 this.fire('change', args); |
|
1489 } |
|
1490 return this; |
|
1491 }, |
|
1492 get: function (name) { |
|
1493 return this.data[name]; |
|
1494 }, |
|
1495 has: function (name) { |
|
1496 return name in this.data; |
|
1497 }, |
|
1498 bind: function (name) { |
|
1499 return Binding.create(this, name); |
|
1500 }, |
|
1501 destroy: function () { |
|
1502 this.fire('destroy'); |
|
1503 } |
|
1504 }); |
|
1505 |
|
1506 var dirtyCtrls = {}, animationFrameRequested; |
|
1507 var ReflowQueue = { |
|
1508 add: function (ctrl) { |
|
1509 var parent = ctrl.parent(); |
|
1510 if (parent) { |
|
1511 if (!parent._layout || parent._layout.isNative()) { |
|
1512 return; |
|
1513 } |
|
1514 if (!dirtyCtrls[parent._id]) { |
|
1515 dirtyCtrls[parent._id] = parent; |
|
1516 } |
|
1517 if (!animationFrameRequested) { |
|
1518 animationFrameRequested = true; |
|
1519 global$3.requestAnimationFrame(function () { |
|
1520 var id, ctrl; |
|
1521 animationFrameRequested = false; |
|
1522 for (id in dirtyCtrls) { |
|
1523 ctrl = dirtyCtrls[id]; |
|
1524 if (ctrl.state.get('rendered')) { |
|
1525 ctrl.reflow(); |
|
1526 } |
|
1527 } |
|
1528 dirtyCtrls = {}; |
|
1529 }, domGlobals.document.body); |
|
1530 } |
|
1531 } |
|
1532 }, |
|
1533 remove: function (ctrl) { |
|
1534 if (dirtyCtrls[ctrl._id]) { |
|
1535 delete dirtyCtrls[ctrl._id]; |
|
1536 } |
|
1537 } |
|
1538 }; |
|
1539 |
|
1540 var getUiContainerDelta = function (ctrl) { |
|
1541 var uiContainer = getUiContainer(ctrl); |
|
1542 if (uiContainer && global$2.DOM.getStyle(uiContainer, 'position', true) !== 'static') { |
|
1543 var containerPos = global$2.DOM.getPos(uiContainer); |
|
1544 var dx = uiContainer.scrollLeft - containerPos.x; |
|
1545 var dy = uiContainer.scrollTop - containerPos.y; |
|
1546 return Option.some({ |
|
1547 x: dx, |
|
1548 y: dy |
|
1549 }); |
|
1550 } else { |
|
1551 return Option.none(); |
|
1552 } |
|
1553 }; |
|
1554 var setUiContainer = function (editor, ctrl) { |
|
1555 var uiContainer = global$2.DOM.select(editor.settings.ui_container)[0]; |
|
1556 ctrl.getRoot().uiContainer = uiContainer; |
|
1557 }; |
|
1558 var getUiContainer = function (ctrl) { |
|
1559 return ctrl ? ctrl.getRoot().uiContainer : null; |
|
1560 }; |
|
1561 var inheritUiContainer = function (fromCtrl, toCtrl) { |
|
1562 return toCtrl.uiContainer = getUiContainer(fromCtrl); |
|
1563 }; |
|
1564 var UiContainer = { |
|
1565 getUiContainerDelta: getUiContainerDelta, |
|
1566 setUiContainer: setUiContainer, |
|
1567 getUiContainer: getUiContainer, |
|
1568 inheritUiContainer: inheritUiContainer |
|
1569 }; |
|
1570 |
|
1571 var hasMouseWheelEventSupport = 'onmousewheel' in domGlobals.document; |
|
1572 var hasWheelEventSupport = false; |
|
1573 var classPrefix = 'mce-'; |
|
1574 var Control, idCounter = 0; |
|
1575 var proto$1 = { |
|
1576 Statics: { classPrefix: classPrefix }, |
|
1577 isRtl: function () { |
|
1578 return Control.rtl; |
|
1579 }, |
|
1580 classPrefix: classPrefix, |
|
1581 init: function (settings) { |
|
1582 var self = this; |
|
1583 var classes, defaultClasses; |
|
1584 function applyClasses(classes) { |
|
1585 var i; |
|
1586 classes = classes.split(' '); |
|
1587 for (i = 0; i < classes.length; i++) { |
|
1588 self.classes.add(classes[i]); |
|
1589 } |
|
1590 } |
|
1591 self.settings = settings = global$4.extend({}, self.Defaults, settings); |
|
1592 self._id = settings.id || 'mceu_' + idCounter++; |
|
1593 self._aria = { role: settings.role }; |
|
1594 self._elmCache = {}; |
|
1595 self.$ = global$7; |
|
1596 self.state = new ObservableObject({ |
|
1597 visible: true, |
|
1598 active: false, |
|
1599 disabled: false, |
|
1600 value: '' |
|
1601 }); |
|
1602 self.data = new ObservableObject(settings.data); |
|
1603 self.classes = new ClassList(function () { |
|
1604 if (self.state.get('rendered')) { |
|
1605 self.getEl().className = this.toString(); |
|
1606 } |
|
1607 }); |
|
1608 self.classes.prefix = self.classPrefix; |
|
1609 classes = settings.classes; |
|
1610 if (classes) { |
|
1611 if (self.Defaults) { |
|
1612 defaultClasses = self.Defaults.classes; |
|
1613 if (defaultClasses && classes !== defaultClasses) { |
|
1614 applyClasses(defaultClasses); |
|
1615 } |
|
1616 } |
|
1617 applyClasses(classes); |
|
1618 } |
|
1619 global$4.each('title text name visible disabled active value'.split(' '), function (name) { |
|
1620 if (name in settings) { |
|
1621 self[name](settings[name]); |
|
1622 } |
|
1623 }); |
|
1624 self.on('click', function () { |
|
1625 if (self.disabled()) { |
|
1626 return false; |
|
1627 } |
|
1628 }); |
|
1629 self.settings = settings; |
|
1630 self.borderBox = BoxUtils.parseBox(settings.border); |
|
1631 self.paddingBox = BoxUtils.parseBox(settings.padding); |
|
1632 self.marginBox = BoxUtils.parseBox(settings.margin); |
|
1633 if (settings.hidden) { |
|
1634 self.hide(); |
|
1635 } |
|
1636 }, |
|
1637 Properties: 'parent,name', |
|
1638 getContainerElm: function () { |
|
1639 var uiContainer = UiContainer.getUiContainer(this); |
|
1640 return uiContainer ? uiContainer : funcs.getContainer(); |
|
1641 }, |
|
1642 getParentCtrl: function (elm) { |
|
1643 var ctrl; |
|
1644 var lookup = this.getRoot().controlIdLookup; |
|
1645 while (elm && lookup) { |
|
1646 ctrl = lookup[elm.id]; |
|
1647 if (ctrl) { |
|
1648 break; |
|
1649 } |
|
1650 elm = elm.parentNode; |
|
1651 } |
|
1652 return ctrl; |
|
1653 }, |
|
1654 initLayoutRect: function () { |
|
1655 var self = this; |
|
1656 var settings = self.settings; |
|
1657 var borderBox, layoutRect; |
|
1658 var elm = self.getEl(); |
|
1659 var width, height, minWidth, minHeight, autoResize; |
|
1660 var startMinWidth, startMinHeight, initialSize; |
|
1661 borderBox = self.borderBox = self.borderBox || BoxUtils.measureBox(elm, 'border'); |
|
1662 self.paddingBox = self.paddingBox || BoxUtils.measureBox(elm, 'padding'); |
|
1663 self.marginBox = self.marginBox || BoxUtils.measureBox(elm, 'margin'); |
|
1664 initialSize = funcs.getSize(elm); |
|
1665 startMinWidth = settings.minWidth; |
|
1666 startMinHeight = settings.minHeight; |
|
1667 minWidth = startMinWidth || initialSize.width; |
|
1668 minHeight = startMinHeight || initialSize.height; |
|
1669 width = settings.width; |
|
1670 height = settings.height; |
|
1671 autoResize = settings.autoResize; |
|
1672 autoResize = typeof autoResize !== 'undefined' ? autoResize : !width && !height; |
|
1673 width = width || minWidth; |
|
1674 height = height || minHeight; |
|
1675 var deltaW = borderBox.left + borderBox.right; |
|
1676 var deltaH = borderBox.top + borderBox.bottom; |
|
1677 var maxW = settings.maxWidth || 65535; |
|
1678 var maxH = settings.maxHeight || 65535; |
|
1679 self._layoutRect = layoutRect = { |
|
1680 x: settings.x || 0, |
|
1681 y: settings.y || 0, |
|
1682 w: width, |
|
1683 h: height, |
|
1684 deltaW: deltaW, |
|
1685 deltaH: deltaH, |
|
1686 contentW: width - deltaW, |
|
1687 contentH: height - deltaH, |
|
1688 innerW: width - deltaW, |
|
1689 innerH: height - deltaH, |
|
1690 startMinWidth: startMinWidth || 0, |
|
1691 startMinHeight: startMinHeight || 0, |
|
1692 minW: Math.min(minWidth, maxW), |
|
1693 minH: Math.min(minHeight, maxH), |
|
1694 maxW: maxW, |
|
1695 maxH: maxH, |
|
1696 autoResize: autoResize, |
|
1697 scrollW: 0 |
|
1698 }; |
|
1699 self._lastLayoutRect = {}; |
|
1700 return layoutRect; |
|
1701 }, |
|
1702 layoutRect: function (newRect) { |
|
1703 var self = this; |
|
1704 var curRect = self._layoutRect, lastLayoutRect, size, deltaWidth, deltaHeight, repaintControls; |
|
1705 if (!curRect) { |
|
1706 curRect = self.initLayoutRect(); |
|
1707 } |
|
1708 if (newRect) { |
|
1709 deltaWidth = curRect.deltaW; |
|
1710 deltaHeight = curRect.deltaH; |
|
1711 if (newRect.x !== undefined) { |
|
1712 curRect.x = newRect.x; |
|
1713 } |
|
1714 if (newRect.y !== undefined) { |
|
1715 curRect.y = newRect.y; |
|
1716 } |
|
1717 if (newRect.minW !== undefined) { |
|
1718 curRect.minW = newRect.minW; |
|
1719 } |
|
1720 if (newRect.minH !== undefined) { |
|
1721 curRect.minH = newRect.minH; |
|
1722 } |
|
1723 size = newRect.w; |
|
1724 if (size !== undefined) { |
|
1725 size = size < curRect.minW ? curRect.minW : size; |
|
1726 size = size > curRect.maxW ? curRect.maxW : size; |
|
1727 curRect.w = size; |
|
1728 curRect.innerW = size - deltaWidth; |
|
1729 } |
|
1730 size = newRect.h; |
|
1731 if (size !== undefined) { |
|
1732 size = size < curRect.minH ? curRect.minH : size; |
|
1733 size = size > curRect.maxH ? curRect.maxH : size; |
|
1734 curRect.h = size; |
|
1735 curRect.innerH = size - deltaHeight; |
|
1736 } |
|
1737 size = newRect.innerW; |
|
1738 if (size !== undefined) { |
|
1739 size = size < curRect.minW - deltaWidth ? curRect.minW - deltaWidth : size; |
|
1740 size = size > curRect.maxW - deltaWidth ? curRect.maxW - deltaWidth : size; |
|
1741 curRect.innerW = size; |
|
1742 curRect.w = size + deltaWidth; |
|
1743 } |
|
1744 size = newRect.innerH; |
|
1745 if (size !== undefined) { |
|
1746 size = size < curRect.minH - deltaHeight ? curRect.minH - deltaHeight : size; |
|
1747 size = size > curRect.maxH - deltaHeight ? curRect.maxH - deltaHeight : size; |
|
1748 curRect.innerH = size; |
|
1749 curRect.h = size + deltaHeight; |
|
1750 } |
|
1751 if (newRect.contentW !== undefined) { |
|
1752 curRect.contentW = newRect.contentW; |
|
1753 } |
|
1754 if (newRect.contentH !== undefined) { |
|
1755 curRect.contentH = newRect.contentH; |
|
1756 } |
|
1757 lastLayoutRect = self._lastLayoutRect; |
|
1758 if (lastLayoutRect.x !== curRect.x || lastLayoutRect.y !== curRect.y || lastLayoutRect.w !== curRect.w || lastLayoutRect.h !== curRect.h) { |
|
1759 repaintControls = Control.repaintControls; |
|
1760 if (repaintControls) { |
|
1761 if (repaintControls.map && !repaintControls.map[self._id]) { |
|
1762 repaintControls.push(self); |
|
1763 repaintControls.map[self._id] = true; |
|
1764 } |
|
1765 } |
|
1766 lastLayoutRect.x = curRect.x; |
|
1767 lastLayoutRect.y = curRect.y; |
|
1768 lastLayoutRect.w = curRect.w; |
|
1769 lastLayoutRect.h = curRect.h; |
|
1770 } |
|
1771 return self; |
|
1772 } |
|
1773 return curRect; |
|
1774 }, |
|
1775 repaint: function () { |
|
1776 var self = this; |
|
1777 var style, bodyStyle, bodyElm, rect, borderBox; |
|
1778 var borderW, borderH, lastRepaintRect, round, value; |
|
1779 round = !domGlobals.document.createRange ? Math.round : function (value) { |
|
1780 return value; |
|
1781 }; |
|
1782 style = self.getEl().style; |
|
1783 rect = self._layoutRect; |
|
1784 lastRepaintRect = self._lastRepaintRect || {}; |
|
1785 borderBox = self.borderBox; |
|
1786 borderW = borderBox.left + borderBox.right; |
|
1787 borderH = borderBox.top + borderBox.bottom; |
|
1788 if (rect.x !== lastRepaintRect.x) { |
|
1789 style.left = round(rect.x) + 'px'; |
|
1790 lastRepaintRect.x = rect.x; |
|
1791 } |
|
1792 if (rect.y !== lastRepaintRect.y) { |
|
1793 style.top = round(rect.y) + 'px'; |
|
1794 lastRepaintRect.y = rect.y; |
|
1795 } |
|
1796 if (rect.w !== lastRepaintRect.w) { |
|
1797 value = round(rect.w - borderW); |
|
1798 style.width = (value >= 0 ? value : 0) + 'px'; |
|
1799 lastRepaintRect.w = rect.w; |
|
1800 } |
|
1801 if (rect.h !== lastRepaintRect.h) { |
|
1802 value = round(rect.h - borderH); |
|
1803 style.height = (value >= 0 ? value : 0) + 'px'; |
|
1804 lastRepaintRect.h = rect.h; |
|
1805 } |
|
1806 if (self._hasBody && rect.innerW !== lastRepaintRect.innerW) { |
|
1807 value = round(rect.innerW); |
|
1808 bodyElm = self.getEl('body'); |
|
1809 if (bodyElm) { |
|
1810 bodyStyle = bodyElm.style; |
|
1811 bodyStyle.width = (value >= 0 ? value : 0) + 'px'; |
|
1812 } |
|
1813 lastRepaintRect.innerW = rect.innerW; |
|
1814 } |
|
1815 if (self._hasBody && rect.innerH !== lastRepaintRect.innerH) { |
|
1816 value = round(rect.innerH); |
|
1817 bodyElm = bodyElm || self.getEl('body'); |
|
1818 if (bodyElm) { |
|
1819 bodyStyle = bodyStyle || bodyElm.style; |
|
1820 bodyStyle.height = (value >= 0 ? value : 0) + 'px'; |
|
1821 } |
|
1822 lastRepaintRect.innerH = rect.innerH; |
|
1823 } |
|
1824 self._lastRepaintRect = lastRepaintRect; |
|
1825 self.fire('repaint', {}, false); |
|
1826 }, |
|
1827 updateLayoutRect: function () { |
|
1828 var self = this; |
|
1829 self.parent()._lastRect = null; |
|
1830 funcs.css(self.getEl(), { |
|
1831 width: '', |
|
1832 height: '' |
|
1833 }); |
|
1834 self._layoutRect = self._lastRepaintRect = self._lastLayoutRect = null; |
|
1835 self.initLayoutRect(); |
|
1836 }, |
|
1837 on: function (name, callback) { |
|
1838 var self = this; |
|
1839 function resolveCallbackName(name) { |
|
1840 var callback, scope; |
|
1841 if (typeof name !== 'string') { |
|
1842 return name; |
|
1843 } |
|
1844 return function (e) { |
|
1845 if (!callback) { |
|
1846 self.parentsAndSelf().each(function (ctrl) { |
|
1847 var callbacks = ctrl.settings.callbacks; |
|
1848 if (callbacks && (callback = callbacks[name])) { |
|
1849 scope = ctrl; |
|
1850 return false; |
|
1851 } |
|
1852 }); |
|
1853 } |
|
1854 if (!callback) { |
|
1855 e.action = name; |
|
1856 this.fire('execute', e); |
|
1857 return; |
|
1858 } |
|
1859 return callback.call(scope, e); |
|
1860 }; |
|
1861 } |
|
1862 getEventDispatcher(self).on(name, resolveCallbackName(callback)); |
|
1863 return self; |
|
1864 }, |
|
1865 off: function (name, callback) { |
|
1866 getEventDispatcher(this).off(name, callback); |
|
1867 return this; |
|
1868 }, |
|
1869 fire: function (name, args, bubble) { |
|
1870 var self = this; |
|
1871 args = args || {}; |
|
1872 if (!args.control) { |
|
1873 args.control = self; |
|
1874 } |
|
1875 args = getEventDispatcher(self).fire(name, args); |
|
1876 if (bubble !== false && self.parent) { |
|
1877 var parent = self.parent(); |
|
1878 while (parent && !args.isPropagationStopped()) { |
|
1879 parent.fire(name, args, false); |
|
1880 parent = parent.parent(); |
|
1881 } |
|
1882 } |
|
1883 return args; |
|
1884 }, |
|
1885 hasEventListeners: function (name) { |
|
1886 return getEventDispatcher(this).has(name); |
|
1887 }, |
|
1888 parents: function (selector) { |
|
1889 var self = this; |
|
1890 var ctrl, parents = new Collection$2(); |
|
1891 for (ctrl = self.parent(); ctrl; ctrl = ctrl.parent()) { |
|
1892 parents.add(ctrl); |
|
1893 } |
|
1894 if (selector) { |
|
1895 parents = parents.filter(selector); |
|
1896 } |
|
1897 return parents; |
|
1898 }, |
|
1899 parentsAndSelf: function (selector) { |
|
1900 return new Collection$2(this).add(this.parents(selector)); |
|
1901 }, |
|
1902 next: function () { |
|
1903 var parentControls = this.parent().items(); |
|
1904 return parentControls[parentControls.indexOf(this) + 1]; |
|
1905 }, |
|
1906 prev: function () { |
|
1907 var parentControls = this.parent().items(); |
|
1908 return parentControls[parentControls.indexOf(this) - 1]; |
|
1909 }, |
|
1910 innerHtml: function (html) { |
|
1911 this.$el.html(html); |
|
1912 return this; |
|
1913 }, |
|
1914 getEl: function (suffix) { |
|
1915 var id = suffix ? this._id + '-' + suffix : this._id; |
|
1916 if (!this._elmCache[id]) { |
|
1917 this._elmCache[id] = global$7('#' + id)[0]; |
|
1918 } |
|
1919 return this._elmCache[id]; |
|
1920 }, |
|
1921 show: function () { |
|
1922 return this.visible(true); |
|
1923 }, |
|
1924 hide: function () { |
|
1925 return this.visible(false); |
|
1926 }, |
|
1927 focus: function () { |
|
1928 try { |
|
1929 this.getEl().focus(); |
|
1930 } catch (ex) { |
|
1931 } |
|
1932 return this; |
|
1933 }, |
|
1934 blur: function () { |
|
1935 this.getEl().blur(); |
|
1936 return this; |
|
1937 }, |
|
1938 aria: function (name, value) { |
|
1939 var self = this, elm = self.getEl(self.ariaTarget); |
|
1940 if (typeof value === 'undefined') { |
|
1941 return self._aria[name]; |
|
1942 } |
|
1943 self._aria[name] = value; |
|
1944 if (self.state.get('rendered')) { |
|
1945 elm.setAttribute(name === 'role' ? name : 'aria-' + name, value); |
|
1946 } |
|
1947 return self; |
|
1948 }, |
|
1949 encode: function (text, translate) { |
|
1950 if (translate !== false) { |
|
1951 text = this.translate(text); |
|
1952 } |
|
1953 return (text || '').replace(/[&<>"]/g, function (match) { |
|
1954 return '&#' + match.charCodeAt(0) + ';'; |
|
1955 }); |
|
1956 }, |
|
1957 translate: function (text) { |
|
1958 return Control.translate ? Control.translate(text) : text; |
|
1959 }, |
|
1960 before: function (items) { |
|
1961 var self = this, parent = self.parent(); |
|
1962 if (parent) { |
|
1963 parent.insert(items, parent.items().indexOf(self), true); |
|
1964 } |
|
1965 return self; |
|
1966 }, |
|
1967 after: function (items) { |
|
1968 var self = this, parent = self.parent(); |
|
1969 if (parent) { |
|
1970 parent.insert(items, parent.items().indexOf(self)); |
|
1971 } |
|
1972 return self; |
|
1973 }, |
|
1974 remove: function () { |
|
1975 var self = this; |
|
1976 var elm = self.getEl(); |
|
1977 var parent = self.parent(); |
|
1978 var newItems, i; |
|
1979 if (self.items) { |
|
1980 var controls = self.items().toArray(); |
|
1981 i = controls.length; |
|
1982 while (i--) { |
|
1983 controls[i].remove(); |
|
1984 } |
|
1985 } |
|
1986 if (parent && parent.items) { |
|
1987 newItems = []; |
|
1988 parent.items().each(function (item) { |
|
1989 if (item !== self) { |
|
1990 newItems.push(item); |
|
1991 } |
|
1992 }); |
|
1993 parent.items().set(newItems); |
|
1994 parent._lastRect = null; |
|
1995 } |
|
1996 if (self._eventsRoot && self._eventsRoot === self) { |
|
1997 global$7(elm).off(); |
|
1998 } |
|
1999 var lookup = self.getRoot().controlIdLookup; |
|
2000 if (lookup) { |
|
2001 delete lookup[self._id]; |
|
2002 } |
|
2003 if (elm && elm.parentNode) { |
|
2004 elm.parentNode.removeChild(elm); |
|
2005 } |
|
2006 self.state.set('rendered', false); |
|
2007 self.state.destroy(); |
|
2008 self.fire('remove'); |
|
2009 return self; |
|
2010 }, |
|
2011 renderBefore: function (elm) { |
|
2012 global$7(elm).before(this.renderHtml()); |
|
2013 this.postRender(); |
|
2014 return this; |
|
2015 }, |
|
2016 renderTo: function (elm) { |
|
2017 global$7(elm || this.getContainerElm()).append(this.renderHtml()); |
|
2018 this.postRender(); |
|
2019 return this; |
|
2020 }, |
|
2021 preRender: function () { |
|
2022 }, |
|
2023 render: function () { |
|
2024 }, |
|
2025 renderHtml: function () { |
|
2026 return '<div id="' + this._id + '" class="' + this.classes + '"></div>'; |
|
2027 }, |
|
2028 postRender: function () { |
|
2029 var self = this; |
|
2030 var settings = self.settings; |
|
2031 var elm, box, parent, name, parentEventsRoot; |
|
2032 self.$el = global$7(self.getEl()); |
|
2033 self.state.set('rendered', true); |
|
2034 for (name in settings) { |
|
2035 if (name.indexOf('on') === 0) { |
|
2036 self.on(name.substr(2), settings[name]); |
|
2037 } |
|
2038 } |
|
2039 if (self._eventsRoot) { |
|
2040 for (parent = self.parent(); !parentEventsRoot && parent; parent = parent.parent()) { |
|
2041 parentEventsRoot = parent._eventsRoot; |
|
2042 } |
|
2043 if (parentEventsRoot) { |
|
2044 for (name in parentEventsRoot._nativeEvents) { |
|
2045 self._nativeEvents[name] = true; |
|
2046 } |
|
2047 } |
|
2048 } |
|
2049 bindPendingEvents(self); |
|
2050 if (settings.style) { |
|
2051 elm = self.getEl(); |
|
2052 if (elm) { |
|
2053 elm.setAttribute('style', settings.style); |
|
2054 elm.style.cssText = settings.style; |
|
2055 } |
|
2056 } |
|
2057 if (self.settings.border) { |
|
2058 box = self.borderBox; |
|
2059 self.$el.css({ |
|
2060 'border-top-width': box.top, |
|
2061 'border-right-width': box.right, |
|
2062 'border-bottom-width': box.bottom, |
|
2063 'border-left-width': box.left |
|
2064 }); |
|
2065 } |
|
2066 var root = self.getRoot(); |
|
2067 if (!root.controlIdLookup) { |
|
2068 root.controlIdLookup = {}; |
|
2069 } |
|
2070 root.controlIdLookup[self._id] = self; |
|
2071 for (var key in self._aria) { |
|
2072 self.aria(key, self._aria[key]); |
|
2073 } |
|
2074 if (self.state.get('visible') === false) { |
|
2075 self.getEl().style.display = 'none'; |
|
2076 } |
|
2077 self.bindStates(); |
|
2078 self.state.on('change:visible', function (e) { |
|
2079 var state = e.value; |
|
2080 var parentCtrl; |
|
2081 if (self.state.get('rendered')) { |
|
2082 self.getEl().style.display = state === false ? 'none' : ''; |
|
2083 self.getEl().getBoundingClientRect(); |
|
2084 } |
|
2085 parentCtrl = self.parent(); |
|
2086 if (parentCtrl) { |
|
2087 parentCtrl._lastRect = null; |
|
2088 } |
|
2089 self.fire(state ? 'show' : 'hide'); |
|
2090 ReflowQueue.add(self); |
|
2091 }); |
|
2092 self.fire('postrender', {}, false); |
|
2093 }, |
|
2094 bindStates: function () { |
|
2095 }, |
|
2096 scrollIntoView: function (align) { |
|
2097 function getOffset(elm, rootElm) { |
|
2098 var x, y, parent = elm; |
|
2099 x = y = 0; |
|
2100 while (parent && parent !== rootElm && parent.nodeType) { |
|
2101 x += parent.offsetLeft || 0; |
|
2102 y += parent.offsetTop || 0; |
|
2103 parent = parent.offsetParent; |
|
2104 } |
|
2105 return { |
|
2106 x: x, |
|
2107 y: y |
|
2108 }; |
|
2109 } |
|
2110 var elm = this.getEl(), parentElm = elm.parentNode; |
|
2111 var x, y, width, height, parentWidth, parentHeight; |
|
2112 var pos = getOffset(elm, parentElm); |
|
2113 x = pos.x; |
|
2114 y = pos.y; |
|
2115 width = elm.offsetWidth; |
|
2116 height = elm.offsetHeight; |
|
2117 parentWidth = parentElm.clientWidth; |
|
2118 parentHeight = parentElm.clientHeight; |
|
2119 if (align === 'end') { |
|
2120 x -= parentWidth - width; |
|
2121 y -= parentHeight - height; |
|
2122 } else if (align === 'center') { |
|
2123 x -= parentWidth / 2 - width / 2; |
|
2124 y -= parentHeight / 2 - height / 2; |
|
2125 } |
|
2126 parentElm.scrollLeft = x; |
|
2127 parentElm.scrollTop = y; |
|
2128 return this; |
|
2129 }, |
|
2130 getRoot: function () { |
|
2131 var ctrl = this, rootControl; |
|
2132 var parents = []; |
|
2133 while (ctrl) { |
|
2134 if (ctrl.rootControl) { |
|
2135 rootControl = ctrl.rootControl; |
|
2136 break; |
|
2137 } |
|
2138 parents.push(ctrl); |
|
2139 rootControl = ctrl; |
|
2140 ctrl = ctrl.parent(); |
|
2141 } |
|
2142 if (!rootControl) { |
|
2143 rootControl = this; |
|
2144 } |
|
2145 var i = parents.length; |
|
2146 while (i--) { |
|
2147 parents[i].rootControl = rootControl; |
|
2148 } |
|
2149 return rootControl; |
|
2150 }, |
|
2151 reflow: function () { |
|
2152 ReflowQueue.remove(this); |
|
2153 var parent = this.parent(); |
|
2154 if (parent && parent._layout && !parent._layout.isNative()) { |
|
2155 parent.reflow(); |
|
2156 } |
|
2157 return this; |
|
2158 } |
|
2159 }; |
|
2160 global$4.each('text title visible disabled active value'.split(' '), function (name) { |
|
2161 proto$1[name] = function (value) { |
|
2162 if (arguments.length === 0) { |
|
2163 return this.state.get(name); |
|
2164 } |
|
2165 if (typeof value !== 'undefined') { |
|
2166 this.state.set(name, value); |
|
2167 } |
|
2168 return this; |
|
2169 }; |
|
2170 }); |
|
2171 Control = global$8.extend(proto$1); |
|
2172 function getEventDispatcher(obj) { |
|
2173 if (!obj._eventDispatcher) { |
|
2174 obj._eventDispatcher = new global$9({ |
|
2175 scope: obj, |
|
2176 toggleEvent: function (name, state) { |
|
2177 if (state && global$9.isNative(name)) { |
|
2178 if (!obj._nativeEvents) { |
|
2179 obj._nativeEvents = {}; |
|
2180 } |
|
2181 obj._nativeEvents[name] = true; |
|
2182 if (obj.state.get('rendered')) { |
|
2183 bindPendingEvents(obj); |
|
2184 } |
|
2185 } |
|
2186 } |
|
2187 }); |
|
2188 } |
|
2189 return obj._eventDispatcher; |
|
2190 } |
|
2191 function bindPendingEvents(eventCtrl) { |
|
2192 var i, l, parents, eventRootCtrl, nativeEvents, name; |
|
2193 function delegate(e) { |
|
2194 var control = eventCtrl.getParentCtrl(e.target); |
|
2195 if (control) { |
|
2196 control.fire(e.type, e); |
|
2197 } |
|
2198 } |
|
2199 function mouseLeaveHandler() { |
|
2200 var ctrl = eventRootCtrl._lastHoverCtrl; |
|
2201 if (ctrl) { |
|
2202 ctrl.fire('mouseleave', { target: ctrl.getEl() }); |
|
2203 ctrl.parents().each(function (ctrl) { |
|
2204 ctrl.fire('mouseleave', { target: ctrl.getEl() }); |
|
2205 }); |
|
2206 eventRootCtrl._lastHoverCtrl = null; |
|
2207 } |
|
2208 } |
|
2209 function mouseEnterHandler(e) { |
|
2210 var ctrl = eventCtrl.getParentCtrl(e.target), lastCtrl = eventRootCtrl._lastHoverCtrl, idx = 0, i, parents, lastParents; |
|
2211 if (ctrl !== lastCtrl) { |
|
2212 eventRootCtrl._lastHoverCtrl = ctrl; |
|
2213 parents = ctrl.parents().toArray().reverse(); |
|
2214 parents.push(ctrl); |
|
2215 if (lastCtrl) { |
|
2216 lastParents = lastCtrl.parents().toArray().reverse(); |
|
2217 lastParents.push(lastCtrl); |
|
2218 for (idx = 0; idx < lastParents.length; idx++) { |
|
2219 if (parents[idx] !== lastParents[idx]) { |
1237 break; |
2220 break; |
1238 } |
2221 } |
1239 } |
2222 } |
1240 item = item.parent(); |
2223 for (i = lastParents.length - 1; i >= idx; i--) { |
1241 } |
2224 lastCtrl = lastParents[i]; |
1242 } |
2225 lastCtrl.fire('mouseleave', { target: lastCtrl.getEl() }); |
1243 if (count === sl) { |
2226 } |
|
2227 } |
|
2228 for (i = idx; i < parents.length; i++) { |
|
2229 ctrl = parents[i]; |
|
2230 ctrl.fire('mouseenter', { target: ctrl.getEl() }); |
|
2231 } |
|
2232 } |
|
2233 } |
|
2234 function fixWheelEvent(e) { |
|
2235 e.preventDefault(); |
|
2236 if (e.type === 'mousewheel') { |
|
2237 e.deltaY = -1 / 40 * e.wheelDelta; |
|
2238 if (e.wheelDeltaX) { |
|
2239 e.deltaX = -1 / 40 * e.wheelDeltaX; |
|
2240 } |
|
2241 } else { |
|
2242 e.deltaX = 0; |
|
2243 e.deltaY = e.detail; |
|
2244 } |
|
2245 e = eventCtrl.fire('wheel', e); |
|
2246 } |
|
2247 nativeEvents = eventCtrl._nativeEvents; |
|
2248 if (nativeEvents) { |
|
2249 parents = eventCtrl.parents().toArray(); |
|
2250 parents.unshift(eventCtrl); |
|
2251 for (i = 0, l = parents.length; !eventRootCtrl && i < l; i++) { |
|
2252 eventRootCtrl = parents[i]._eventsRoot; |
|
2253 } |
|
2254 if (!eventRootCtrl) { |
|
2255 eventRootCtrl = parents[parents.length - 1] || eventCtrl; |
|
2256 } |
|
2257 eventCtrl._eventsRoot = eventRootCtrl; |
|
2258 for (l = i, i = 0; i < l; i++) { |
|
2259 parents[i]._eventsRoot = eventRootCtrl; |
|
2260 } |
|
2261 var eventRootDelegates = eventRootCtrl._delegates; |
|
2262 if (!eventRootDelegates) { |
|
2263 eventRootDelegates = eventRootCtrl._delegates = {}; |
|
2264 } |
|
2265 for (name in nativeEvents) { |
|
2266 if (!nativeEvents) { |
|
2267 return false; |
|
2268 } |
|
2269 if (name === 'wheel' && !hasWheelEventSupport) { |
|
2270 if (hasMouseWheelEventSupport) { |
|
2271 global$7(eventCtrl.getEl()).on('mousewheel', fixWheelEvent); |
|
2272 } else { |
|
2273 global$7(eventCtrl.getEl()).on('DOMMouseScroll', fixWheelEvent); |
|
2274 } |
|
2275 continue; |
|
2276 } |
|
2277 if (name === 'mouseenter' || name === 'mouseleave') { |
|
2278 if (!eventRootCtrl._hasMouseEnter) { |
|
2279 global$7(eventRootCtrl.getEl()).on('mouseleave', mouseLeaveHandler).on('mouseover', mouseEnterHandler); |
|
2280 eventRootCtrl._hasMouseEnter = 1; |
|
2281 } |
|
2282 } else if (!eventRootDelegates[name]) { |
|
2283 global$7(eventRootCtrl.getEl()).on(name, delegate); |
|
2284 eventRootDelegates[name] = true; |
|
2285 } |
|
2286 nativeEvents[name] = false; |
|
2287 } |
|
2288 } |
|
2289 } |
|
2290 var Control$1 = Control; |
|
2291 |
|
2292 var isStatic = function (elm) { |
|
2293 return funcs.getRuntimeStyle(elm, 'position') === 'static'; |
|
2294 }; |
|
2295 var isFixed = function (ctrl) { |
|
2296 return ctrl.state.get('fixed'); |
|
2297 }; |
|
2298 function calculateRelativePosition(ctrl, targetElm, rel) { |
|
2299 var ctrlElm, pos, x, y, selfW, selfH, targetW, targetH, viewport, size; |
|
2300 viewport = getWindowViewPort(); |
|
2301 pos = funcs.getPos(targetElm, UiContainer.getUiContainer(ctrl)); |
|
2302 x = pos.x; |
|
2303 y = pos.y; |
|
2304 if (isFixed(ctrl) && isStatic(domGlobals.document.body)) { |
|
2305 x -= viewport.x; |
|
2306 y -= viewport.y; |
|
2307 } |
|
2308 ctrlElm = ctrl.getEl(); |
|
2309 size = funcs.getSize(ctrlElm); |
|
2310 selfW = size.width; |
|
2311 selfH = size.height; |
|
2312 size = funcs.getSize(targetElm); |
|
2313 targetW = size.width; |
|
2314 targetH = size.height; |
|
2315 rel = (rel || '').split(''); |
|
2316 if (rel[0] === 'b') { |
|
2317 y += targetH; |
|
2318 } |
|
2319 if (rel[1] === 'r') { |
|
2320 x += targetW; |
|
2321 } |
|
2322 if (rel[0] === 'c') { |
|
2323 y += Math.round(targetH / 2); |
|
2324 } |
|
2325 if (rel[1] === 'c') { |
|
2326 x += Math.round(targetW / 2); |
|
2327 } |
|
2328 if (rel[3] === 'b') { |
|
2329 y -= selfH; |
|
2330 } |
|
2331 if (rel[4] === 'r') { |
|
2332 x -= selfW; |
|
2333 } |
|
2334 if (rel[3] === 'c') { |
|
2335 y -= Math.round(selfH / 2); |
|
2336 } |
|
2337 if (rel[4] === 'c') { |
|
2338 x -= Math.round(selfW / 2); |
|
2339 } |
|
2340 return { |
|
2341 x: x, |
|
2342 y: y, |
|
2343 w: selfW, |
|
2344 h: selfH |
|
2345 }; |
|
2346 } |
|
2347 var getUiContainerViewPort = function (customUiContainer) { |
|
2348 return { |
|
2349 x: 0, |
|
2350 y: 0, |
|
2351 w: customUiContainer.scrollWidth - 1, |
|
2352 h: customUiContainer.scrollHeight - 1 |
|
2353 }; |
|
2354 }; |
|
2355 var getWindowViewPort = function () { |
|
2356 var win = domGlobals.window; |
|
2357 var x = Math.max(win.pageXOffset, domGlobals.document.body.scrollLeft, domGlobals.document.documentElement.scrollLeft); |
|
2358 var y = Math.max(win.pageYOffset, domGlobals.document.body.scrollTop, domGlobals.document.documentElement.scrollTop); |
|
2359 var w = win.innerWidth || domGlobals.document.documentElement.clientWidth; |
|
2360 var h = win.innerHeight || domGlobals.document.documentElement.clientHeight; |
|
2361 return { |
|
2362 x: x, |
|
2363 y: y, |
|
2364 w: w, |
|
2365 h: h |
|
2366 }; |
|
2367 }; |
|
2368 var getViewPortRect = function (ctrl) { |
|
2369 var customUiContainer = UiContainer.getUiContainer(ctrl); |
|
2370 return customUiContainer && !isFixed(ctrl) ? getUiContainerViewPort(customUiContainer) : getWindowViewPort(); |
|
2371 }; |
|
2372 var Movable = { |
|
2373 testMoveRel: function (elm, rels) { |
|
2374 var viewPortRect = getViewPortRect(this); |
|
2375 for (var i = 0; i < rels.length; i++) { |
|
2376 var pos = calculateRelativePosition(this, elm, rels[i]); |
|
2377 if (isFixed(this)) { |
|
2378 if (pos.x > 0 && pos.x + pos.w < viewPortRect.w && pos.y > 0 && pos.y + pos.h < viewPortRect.h) { |
|
2379 return rels[i]; |
|
2380 } |
|
2381 } else { |
|
2382 if (pos.x > viewPortRect.x && pos.x + pos.w < viewPortRect.w + viewPortRect.x && pos.y > viewPortRect.y && pos.y + pos.h < viewPortRect.h + viewPortRect.y) { |
|
2383 return rels[i]; |
|
2384 } |
|
2385 } |
|
2386 } |
|
2387 return rels[0]; |
|
2388 }, |
|
2389 moveRel: function (elm, rel) { |
|
2390 if (typeof rel !== 'string') { |
|
2391 rel = this.testMoveRel(elm, rel); |
|
2392 } |
|
2393 var pos = calculateRelativePosition(this, elm, rel); |
|
2394 return this.moveTo(pos.x, pos.y); |
|
2395 }, |
|
2396 moveBy: function (dx, dy) { |
|
2397 var self = this, rect = self.layoutRect(); |
|
2398 self.moveTo(rect.x + dx, rect.y + dy); |
|
2399 return self; |
|
2400 }, |
|
2401 moveTo: function (x, y) { |
|
2402 var self = this; |
|
2403 function constrain(value, max, size) { |
|
2404 if (value < 0) { |
|
2405 return 0; |
|
2406 } |
|
2407 if (value + size > max) { |
|
2408 value = max - size; |
|
2409 return value < 0 ? 0 : value; |
|
2410 } |
|
2411 return value; |
|
2412 } |
|
2413 if (self.settings.constrainToViewport) { |
|
2414 var viewPortRect = getViewPortRect(this); |
|
2415 var layoutRect = self.layoutRect(); |
|
2416 x = constrain(x, viewPortRect.w + viewPortRect.x, layoutRect.w); |
|
2417 y = constrain(y, viewPortRect.h + viewPortRect.y, layoutRect.h); |
|
2418 } |
|
2419 var uiContainer = UiContainer.getUiContainer(self); |
|
2420 if (uiContainer && isStatic(uiContainer) && !isFixed(self)) { |
|
2421 x -= uiContainer.scrollLeft; |
|
2422 y -= uiContainer.scrollTop; |
|
2423 } |
|
2424 if (uiContainer) { |
|
2425 x += 1; |
|
2426 y += 1; |
|
2427 } |
|
2428 if (self.state.get('rendered')) { |
|
2429 self.layoutRect({ |
|
2430 x: x, |
|
2431 y: y |
|
2432 }).repaint(); |
|
2433 } else { |
|
2434 self.settings.x = x; |
|
2435 self.settings.y = y; |
|
2436 } |
|
2437 self.fire('move', { |
|
2438 x: x, |
|
2439 y: y |
|
2440 }); |
|
2441 return self; |
|
2442 } |
|
2443 }; |
|
2444 |
|
2445 var Tooltip = Control$1.extend({ |
|
2446 Mixins: [Movable], |
|
2447 Defaults: { classes: 'widget tooltip tooltip-n' }, |
|
2448 renderHtml: function () { |
|
2449 var self = this, prefix = self.classPrefix; |
|
2450 return '<div id="' + self._id + '" class="' + self.classes + '" role="presentation">' + '<div class="' + prefix + 'tooltip-arrow"></div>' + '<div class="' + prefix + 'tooltip-inner">' + self.encode(self.state.get('text')) + '</div>' + '</div>'; |
|
2451 }, |
|
2452 bindStates: function () { |
|
2453 var self = this; |
|
2454 self.state.on('change:text', function (e) { |
|
2455 self.getEl().lastChild.innerHTML = self.encode(e.value); |
|
2456 }); |
|
2457 return self._super(); |
|
2458 }, |
|
2459 repaint: function () { |
|
2460 var self = this; |
|
2461 var style, rect; |
|
2462 style = self.getEl().style; |
|
2463 rect = self._layoutRect; |
|
2464 style.left = rect.x + 'px'; |
|
2465 style.top = rect.y + 'px'; |
|
2466 style.zIndex = 65535 + 65535; |
|
2467 } |
|
2468 }); |
|
2469 |
|
2470 var Widget = Control$1.extend({ |
|
2471 init: function (settings) { |
|
2472 var self = this; |
|
2473 self._super(settings); |
|
2474 settings = self.settings; |
|
2475 self.canFocus = true; |
|
2476 if (settings.tooltip && Widget.tooltips !== false) { |
|
2477 self.on('mouseenter', function (e) { |
|
2478 var tooltip = self.tooltip().moveTo(-65535); |
|
2479 if (e.control === self) { |
|
2480 var rel = tooltip.text(settings.tooltip).show().testMoveRel(self.getEl(), [ |
|
2481 'bc-tc', |
|
2482 'bc-tl', |
|
2483 'bc-tr' |
|
2484 ]); |
|
2485 tooltip.classes.toggle('tooltip-n', rel === 'bc-tc'); |
|
2486 tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl'); |
|
2487 tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr'); |
|
2488 tooltip.moveRel(self.getEl(), rel); |
|
2489 } else { |
|
2490 tooltip.hide(); |
|
2491 } |
|
2492 }); |
|
2493 self.on('mouseleave mousedown click', function () { |
|
2494 self.tooltip().remove(); |
|
2495 self._tooltip = null; |
|
2496 }); |
|
2497 } |
|
2498 self.aria('label', settings.ariaLabel || settings.tooltip); |
|
2499 }, |
|
2500 tooltip: function () { |
|
2501 if (!this._tooltip) { |
|
2502 this._tooltip = new Tooltip({ type: 'tooltip' }); |
|
2503 UiContainer.inheritUiContainer(this, this._tooltip); |
|
2504 this._tooltip.renderTo(); |
|
2505 } |
|
2506 return this._tooltip; |
|
2507 }, |
|
2508 postRender: function () { |
|
2509 var self = this, settings = self.settings; |
|
2510 self._super(); |
|
2511 if (!self.parent() && (settings.width || settings.height)) { |
|
2512 self.initLayoutRect(); |
|
2513 self.repaint(); |
|
2514 } |
|
2515 if (settings.autofocus) { |
|
2516 self.focus(); |
|
2517 } |
|
2518 }, |
|
2519 bindStates: function () { |
|
2520 var self = this; |
|
2521 function disable(state) { |
|
2522 self.aria('disabled', state); |
|
2523 self.classes.toggle('disabled', state); |
|
2524 } |
|
2525 function active(state) { |
|
2526 self.aria('pressed', state); |
|
2527 self.classes.toggle('active', state); |
|
2528 } |
|
2529 self.state.on('change:disabled', function (e) { |
|
2530 disable(e.value); |
|
2531 }); |
|
2532 self.state.on('change:active', function (e) { |
|
2533 active(e.value); |
|
2534 }); |
|
2535 if (self.state.get('disabled')) { |
|
2536 disable(true); |
|
2537 } |
|
2538 if (self.state.get('active')) { |
|
2539 active(true); |
|
2540 } |
|
2541 return self._super(); |
|
2542 }, |
|
2543 remove: function () { |
|
2544 this._super(); |
|
2545 if (this._tooltip) { |
|
2546 this._tooltip.remove(); |
|
2547 this._tooltip = null; |
|
2548 } |
|
2549 } |
|
2550 }); |
|
2551 |
|
2552 var Progress = Widget.extend({ |
|
2553 Defaults: { value: 0 }, |
|
2554 init: function (settings) { |
|
2555 var self = this; |
|
2556 self._super(settings); |
|
2557 self.classes.add('progress'); |
|
2558 if (!self.settings.filter) { |
|
2559 self.settings.filter = function (value) { |
|
2560 return Math.round(value); |
|
2561 }; |
|
2562 } |
|
2563 }, |
|
2564 renderHtml: function () { |
|
2565 var self = this, id = self._id, prefix = this.classPrefix; |
|
2566 return '<div id="' + id + '" class="' + self.classes + '">' + '<div class="' + prefix + 'bar-container">' + '<div class="' + prefix + 'bar"></div>' + '</div>' + '<div class="' + prefix + 'text">0%</div>' + '</div>'; |
|
2567 }, |
|
2568 postRender: function () { |
|
2569 var self = this; |
|
2570 self._super(); |
|
2571 self.value(self.settings.value); |
|
2572 return self; |
|
2573 }, |
|
2574 bindStates: function () { |
|
2575 var self = this; |
|
2576 function setValue(value) { |
|
2577 value = self.settings.filter(value); |
|
2578 self.getEl().lastChild.innerHTML = value + '%'; |
|
2579 self.getEl().firstChild.firstChild.style.width = value + '%'; |
|
2580 } |
|
2581 self.state.on('change:value', function (e) { |
|
2582 setValue(e.value); |
|
2583 }); |
|
2584 setValue(self.state.get('value')); |
|
2585 return self._super(); |
|
2586 } |
|
2587 }); |
|
2588 |
|
2589 var updateLiveRegion = function (ctx, text) { |
|
2590 ctx.getEl().lastChild.textContent = text + (ctx.progressBar ? ' ' + ctx.progressBar.value() + '%' : ''); |
|
2591 }; |
|
2592 var Notification = Control$1.extend({ |
|
2593 Mixins: [Movable], |
|
2594 Defaults: { classes: 'widget notification' }, |
|
2595 init: function (settings) { |
|
2596 var self = this; |
|
2597 self._super(settings); |
|
2598 self.maxWidth = settings.maxWidth; |
|
2599 if (settings.text) { |
|
2600 self.text(settings.text); |
|
2601 } |
|
2602 if (settings.icon) { |
|
2603 self.icon = settings.icon; |
|
2604 } |
|
2605 if (settings.color) { |
|
2606 self.color = settings.color; |
|
2607 } |
|
2608 if (settings.type) { |
|
2609 self.classes.add('notification-' + settings.type); |
|
2610 } |
|
2611 if (settings.timeout && (settings.timeout < 0 || settings.timeout > 0) && !settings.closeButton) { |
|
2612 self.closeButton = false; |
|
2613 } else { |
|
2614 self.classes.add('has-close'); |
|
2615 self.closeButton = true; |
|
2616 } |
|
2617 if (settings.progressBar) { |
|
2618 self.progressBar = new Progress(); |
|
2619 } |
|
2620 self.on('click', function (e) { |
|
2621 if (e.target.className.indexOf(self.classPrefix + 'close') !== -1) { |
|
2622 self.close(); |
|
2623 } |
|
2624 }); |
|
2625 }, |
|
2626 renderHtml: function () { |
|
2627 var self = this; |
|
2628 var prefix = self.classPrefix; |
|
2629 var icon = '', closeButton = '', progressBar = '', notificationStyle = ''; |
|
2630 if (self.icon) { |
|
2631 icon = '<i class="' + prefix + 'ico' + ' ' + prefix + 'i-' + self.icon + '"></i>'; |
|
2632 } |
|
2633 notificationStyle = ' style="max-width: ' + self.maxWidth + 'px;' + (self.color ? 'background-color: ' + self.color + ';"' : '"'); |
|
2634 if (self.closeButton) { |
|
2635 closeButton = '<button type="button" class="' + prefix + 'close" aria-hidden="true">\xD7</button>'; |
|
2636 } |
|
2637 if (self.progressBar) { |
|
2638 progressBar = self.progressBar.renderHtml(); |
|
2639 } |
|
2640 return '<div id="' + self._id + '" class="' + self.classes + '"' + notificationStyle + ' role="presentation">' + icon + '<div class="' + prefix + 'notification-inner">' + self.state.get('text') + '</div>' + progressBar + closeButton + '<div style="clip: rect(1px, 1px, 1px, 1px);height: 1px;overflow: hidden;position: absolute;width: 1px;"' + ' aria-live="assertive" aria-relevant="additions" aria-atomic="true"></div>' + '</div>'; |
|
2641 }, |
|
2642 postRender: function () { |
|
2643 var self = this; |
|
2644 global$3.setTimeout(function () { |
|
2645 self.$el.addClass(self.classPrefix + 'in'); |
|
2646 updateLiveRegion(self, self.state.get('text')); |
|
2647 }, 100); |
|
2648 return self._super(); |
|
2649 }, |
|
2650 bindStates: function () { |
|
2651 var self = this; |
|
2652 self.state.on('change:text', function (e) { |
|
2653 self.getEl().firstChild.innerHTML = e.value; |
|
2654 updateLiveRegion(self, e.value); |
|
2655 }); |
|
2656 if (self.progressBar) { |
|
2657 self.progressBar.bindStates(); |
|
2658 self.progressBar.state.on('change:value', function (e) { |
|
2659 updateLiveRegion(self, self.state.get('text')); |
|
2660 }); |
|
2661 } |
|
2662 return self._super(); |
|
2663 }, |
|
2664 close: function () { |
|
2665 var self = this; |
|
2666 if (!self.fire('close').isDefaultPrevented()) { |
|
2667 self.remove(); |
|
2668 } |
|
2669 return self; |
|
2670 }, |
|
2671 repaint: function () { |
|
2672 var self = this; |
|
2673 var style, rect; |
|
2674 style = self.getEl().style; |
|
2675 rect = self._layoutRect; |
|
2676 style.left = rect.x + 'px'; |
|
2677 style.top = rect.y + 'px'; |
|
2678 style.zIndex = 65535 - 1; |
|
2679 } |
|
2680 }); |
|
2681 |
|
2682 function NotificationManagerImpl (editor) { |
|
2683 var getEditorContainer = function (editor) { |
|
2684 return editor.inline ? editor.getElement() : editor.getContentAreaContainer(); |
|
2685 }; |
|
2686 var getContainerWidth = function () { |
|
2687 var container = getEditorContainer(editor); |
|
2688 return funcs.getSize(container).width; |
|
2689 }; |
|
2690 var prePositionNotifications = function (notifications) { |
|
2691 each(notifications, function (notification) { |
|
2692 notification.moveTo(0, 0); |
|
2693 }); |
|
2694 }; |
|
2695 var positionNotifications = function (notifications) { |
|
2696 if (notifications.length > 0) { |
|
2697 var firstItem = notifications.slice(0, 1)[0]; |
|
2698 var container = getEditorContainer(editor); |
|
2699 firstItem.moveRel(container, 'tc-tc'); |
|
2700 each(notifications, function (notification, index) { |
|
2701 if (index > 0) { |
|
2702 notification.moveRel(notifications[index - 1].getEl(), 'bc-tc'); |
|
2703 } |
|
2704 }); |
|
2705 } |
|
2706 }; |
|
2707 var reposition = function (notifications) { |
|
2708 prePositionNotifications(notifications); |
|
2709 positionNotifications(notifications); |
|
2710 }; |
|
2711 var open = function (args, closeCallback) { |
|
2712 var extendedArgs = global$4.extend(args, { maxWidth: getContainerWidth() }); |
|
2713 var notif = new Notification(extendedArgs); |
|
2714 notif.args = extendedArgs; |
|
2715 if (extendedArgs.timeout > 0) { |
|
2716 notif.timer = setTimeout(function () { |
|
2717 notif.close(); |
|
2718 closeCallback(); |
|
2719 }, extendedArgs.timeout); |
|
2720 } |
|
2721 notif.on('close', function () { |
|
2722 closeCallback(); |
|
2723 }); |
|
2724 notif.renderTo(); |
|
2725 return notif; |
|
2726 }; |
|
2727 var close = function (notification) { |
|
2728 notification.close(); |
|
2729 }; |
|
2730 var getArgs = function (notification) { |
|
2731 return notification.args; |
|
2732 }; |
|
2733 return { |
|
2734 open: open, |
|
2735 close: close, |
|
2736 reposition: reposition, |
|
2737 getArgs: getArgs |
|
2738 }; |
|
2739 } |
|
2740 |
|
2741 function getDocumentSize(doc) { |
|
2742 var documentElement, body, scrollWidth, clientWidth; |
|
2743 var offsetWidth, scrollHeight, clientHeight, offsetHeight; |
|
2744 var max = Math.max; |
|
2745 documentElement = doc.documentElement; |
|
2746 body = doc.body; |
|
2747 scrollWidth = max(documentElement.scrollWidth, body.scrollWidth); |
|
2748 clientWidth = max(documentElement.clientWidth, body.clientWidth); |
|
2749 offsetWidth = max(documentElement.offsetWidth, body.offsetWidth); |
|
2750 scrollHeight = max(documentElement.scrollHeight, body.scrollHeight); |
|
2751 clientHeight = max(documentElement.clientHeight, body.clientHeight); |
|
2752 offsetHeight = max(documentElement.offsetHeight, body.offsetHeight); |
|
2753 return { |
|
2754 width: scrollWidth < offsetWidth ? clientWidth : scrollWidth, |
|
2755 height: scrollHeight < offsetHeight ? clientHeight : scrollHeight |
|
2756 }; |
|
2757 } |
|
2758 function updateWithTouchData(e) { |
|
2759 var keys, i; |
|
2760 if (e.changedTouches) { |
|
2761 keys = 'screenX screenY pageX pageY clientX clientY'.split(' '); |
|
2762 for (i = 0; i < keys.length; i++) { |
|
2763 e[keys[i]] = e.changedTouches[0][keys[i]]; |
|
2764 } |
|
2765 } |
|
2766 } |
|
2767 function DragHelper (id, settings) { |
|
2768 var $eventOverlay; |
|
2769 var doc = settings.document || domGlobals.document; |
|
2770 var downButton; |
|
2771 var start, stop, drag, startX, startY; |
|
2772 settings = settings || {}; |
|
2773 var handleElement = doc.getElementById(settings.handle || id); |
|
2774 start = function (e) { |
|
2775 var docSize = getDocumentSize(doc); |
|
2776 var handleElm, cursor; |
|
2777 updateWithTouchData(e); |
|
2778 e.preventDefault(); |
|
2779 downButton = e.button; |
|
2780 handleElm = handleElement; |
|
2781 startX = e.screenX; |
|
2782 startY = e.screenY; |
|
2783 if (domGlobals.window.getComputedStyle) { |
|
2784 cursor = domGlobals.window.getComputedStyle(handleElm, null).getPropertyValue('cursor'); |
|
2785 } else { |
|
2786 cursor = handleElm.runtimeStyle.cursor; |
|
2787 } |
|
2788 $eventOverlay = global$7('<div></div>').css({ |
|
2789 position: 'absolute', |
|
2790 top: 0, |
|
2791 left: 0, |
|
2792 width: docSize.width, |
|
2793 height: docSize.height, |
|
2794 zIndex: 2147483647, |
|
2795 opacity: 0.0001, |
|
2796 cursor: cursor |
|
2797 }).appendTo(doc.body); |
|
2798 global$7(doc).on('mousemove touchmove', drag).on('mouseup touchend', stop); |
|
2799 settings.start(e); |
|
2800 }; |
|
2801 drag = function (e) { |
|
2802 updateWithTouchData(e); |
|
2803 if (e.button !== downButton) { |
|
2804 return stop(e); |
|
2805 } |
|
2806 e.deltaX = e.screenX - startX; |
|
2807 e.deltaY = e.screenY - startY; |
|
2808 e.preventDefault(); |
|
2809 settings.drag(e); |
|
2810 }; |
|
2811 stop = function (e) { |
|
2812 updateWithTouchData(e); |
|
2813 global$7(doc).off('mousemove touchmove', drag).off('mouseup touchend', stop); |
|
2814 $eventOverlay.remove(); |
|
2815 if (settings.stop) { |
|
2816 settings.stop(e); |
|
2817 } |
|
2818 }; |
|
2819 this.destroy = function () { |
|
2820 global$7(handleElement).off(); |
|
2821 }; |
|
2822 global$7(handleElement).on('mousedown touchstart', start); |
|
2823 } |
|
2824 |
|
2825 var global$b = tinymce.util.Tools.resolve('tinymce.ui.Factory'); |
|
2826 |
|
2827 var hasTabstopData = function (elm) { |
|
2828 return elm.getAttribute('data-mce-tabstop') ? true : false; |
|
2829 }; |
|
2830 function KeyboardNavigation (settings) { |
|
2831 var root = settings.root; |
|
2832 var focusedElement, focusedControl; |
|
2833 function isElement(node) { |
|
2834 return node && node.nodeType === 1; |
|
2835 } |
|
2836 try { |
|
2837 focusedElement = domGlobals.document.activeElement; |
|
2838 } catch (ex) { |
|
2839 focusedElement = domGlobals.document.body; |
|
2840 } |
|
2841 focusedControl = root.getParentCtrl(focusedElement); |
|
2842 function getRole(elm) { |
|
2843 elm = elm || focusedElement; |
|
2844 if (isElement(elm)) { |
|
2845 return elm.getAttribute('role'); |
|
2846 } |
|
2847 return null; |
|
2848 } |
|
2849 function getParentRole(elm) { |
|
2850 var role, parent = elm || focusedElement; |
|
2851 while (parent = parent.parentNode) { |
|
2852 if (role = getRole(parent)) { |
|
2853 return role; |
|
2854 } |
|
2855 } |
|
2856 } |
|
2857 function getAriaProp(name) { |
|
2858 var elm = focusedElement; |
|
2859 if (isElement(elm)) { |
|
2860 return elm.getAttribute('aria-' + name); |
|
2861 } |
|
2862 } |
|
2863 function isTextInputElement(elm) { |
|
2864 var tagName = elm.tagName.toUpperCase(); |
|
2865 return tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT'; |
|
2866 } |
|
2867 function canFocus(elm) { |
|
2868 if (isTextInputElement(elm) && !elm.hidden) { |
1244 return true; |
2869 return true; |
1245 } |
2870 } |
|
2871 if (hasTabstopData(elm)) { |
|
2872 return true; |
|
2873 } |
|
2874 if (/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell|slider)$/.test(getRole(elm))) { |
|
2875 return true; |
|
2876 } |
|
2877 return false; |
|
2878 } |
|
2879 function getFocusElements(elm) { |
|
2880 var elements = []; |
|
2881 function collect(elm) { |
|
2882 if (elm.nodeType !== 1 || elm.style.display === 'none' || elm.disabled) { |
|
2883 return; |
|
2884 } |
|
2885 if (canFocus(elm)) { |
|
2886 elements.push(elm); |
|
2887 } |
|
2888 for (var i = 0; i < elm.childNodes.length; i++) { |
|
2889 collect(elm.childNodes[i]); |
|
2890 } |
|
2891 } |
|
2892 collect(elm || root.getEl()); |
|
2893 return elements; |
|
2894 } |
|
2895 function getNavigationRoot(targetControl) { |
|
2896 var navigationRoot, controls; |
|
2897 targetControl = targetControl || focusedControl; |
|
2898 controls = targetControl.parents().toArray(); |
|
2899 controls.unshift(targetControl); |
|
2900 for (var i = 0; i < controls.length; i++) { |
|
2901 navigationRoot = controls[i]; |
|
2902 if (navigationRoot.settings.ariaRoot) { |
|
2903 break; |
|
2904 } |
|
2905 } |
|
2906 return navigationRoot; |
|
2907 } |
|
2908 function focusFirst(targetControl) { |
|
2909 var navigationRoot = getNavigationRoot(targetControl); |
|
2910 var focusElements = getFocusElements(navigationRoot.getEl()); |
|
2911 if (navigationRoot.settings.ariaRemember && 'lastAriaIndex' in navigationRoot) { |
|
2912 moveFocusToIndex(navigationRoot.lastAriaIndex, focusElements); |
|
2913 } else { |
|
2914 moveFocusToIndex(0, focusElements); |
|
2915 } |
|
2916 } |
|
2917 function moveFocusToIndex(idx, elements) { |
|
2918 if (idx < 0) { |
|
2919 idx = elements.length - 1; |
|
2920 } else if (idx >= elements.length) { |
|
2921 idx = 0; |
|
2922 } |
|
2923 if (elements[idx]) { |
|
2924 elements[idx].focus(); |
|
2925 } |
|
2926 return idx; |
|
2927 } |
|
2928 function moveFocus(dir, elements) { |
|
2929 var idx = -1; |
|
2930 var navigationRoot = getNavigationRoot(); |
|
2931 elements = elements || getFocusElements(navigationRoot.getEl()); |
|
2932 for (var i = 0; i < elements.length; i++) { |
|
2933 if (elements[i] === focusedElement) { |
|
2934 idx = i; |
|
2935 } |
|
2936 } |
|
2937 idx += dir; |
|
2938 navigationRoot.lastAriaIndex = moveFocusToIndex(idx, elements); |
|
2939 } |
|
2940 function left() { |
|
2941 var parentRole = getParentRole(); |
|
2942 if (parentRole === 'tablist') { |
|
2943 moveFocus(-1, getFocusElements(focusedElement.parentNode)); |
|
2944 } else if (focusedControl.parent().submenu) { |
|
2945 cancel(); |
|
2946 } else { |
|
2947 moveFocus(-1); |
|
2948 } |
|
2949 } |
|
2950 function right() { |
|
2951 var role = getRole(), parentRole = getParentRole(); |
|
2952 if (parentRole === 'tablist') { |
|
2953 moveFocus(1, getFocusElements(focusedElement.parentNode)); |
|
2954 } else if (role === 'menuitem' && parentRole === 'menu' && getAriaProp('haspopup')) { |
|
2955 enter(); |
|
2956 } else { |
|
2957 moveFocus(1); |
|
2958 } |
|
2959 } |
|
2960 function up() { |
|
2961 moveFocus(-1); |
|
2962 } |
|
2963 function down() { |
|
2964 var role = getRole(), parentRole = getParentRole(); |
|
2965 if (role === 'menuitem' && parentRole === 'menubar') { |
|
2966 enter(); |
|
2967 } else if (role === 'button' && getAriaProp('haspopup')) { |
|
2968 enter({ key: 'down' }); |
|
2969 } else { |
|
2970 moveFocus(1); |
|
2971 } |
|
2972 } |
|
2973 function tab(e) { |
|
2974 var parentRole = getParentRole(); |
|
2975 if (parentRole === 'tablist') { |
|
2976 var elm = getFocusElements(focusedControl.getEl('body'))[0]; |
|
2977 if (elm) { |
|
2978 elm.focus(); |
|
2979 } |
|
2980 } else { |
|
2981 moveFocus(e.shiftKey ? -1 : 1); |
|
2982 } |
|
2983 } |
|
2984 function cancel() { |
|
2985 focusedControl.fire('cancel'); |
|
2986 } |
|
2987 function enter(aria) { |
|
2988 aria = aria || {}; |
|
2989 focusedControl.fire('click', { |
|
2990 target: focusedElement, |
|
2991 aria: aria |
|
2992 }); |
|
2993 } |
|
2994 root.on('keydown', function (e) { |
|
2995 function handleNonTabOrEscEvent(e, handler) { |
|
2996 if (isTextInputElement(focusedElement) || hasTabstopData(focusedElement)) { |
|
2997 return; |
|
2998 } |
|
2999 if (getRole(focusedElement) === 'slider') { |
|
3000 return; |
|
3001 } |
|
3002 if (handler(e) !== false) { |
|
3003 e.preventDefault(); |
|
3004 } |
|
3005 } |
|
3006 if (e.isDefaultPrevented()) { |
|
3007 return; |
|
3008 } |
|
3009 switch (e.keyCode) { |
|
3010 case 37: |
|
3011 handleNonTabOrEscEvent(e, left); |
|
3012 break; |
|
3013 case 39: |
|
3014 handleNonTabOrEscEvent(e, right); |
|
3015 break; |
|
3016 case 38: |
|
3017 handleNonTabOrEscEvent(e, up); |
|
3018 break; |
|
3019 case 40: |
|
3020 handleNonTabOrEscEvent(e, down); |
|
3021 break; |
|
3022 case 27: |
|
3023 cancel(); |
|
3024 break; |
|
3025 case 14: |
|
3026 case 13: |
|
3027 case 32: |
|
3028 handleNonTabOrEscEvent(e, enter); |
|
3029 break; |
|
3030 case 9: |
|
3031 tab(e); |
|
3032 e.preventDefault(); |
|
3033 break; |
|
3034 } |
|
3035 }); |
|
3036 root.on('focusin', function (e) { |
|
3037 focusedElement = e.target; |
|
3038 focusedControl = e.control; |
|
3039 }); |
|
3040 return { focusFirst: focusFirst }; |
|
3041 } |
|
3042 |
|
3043 var selectorCache = {}; |
|
3044 var Container = Control$1.extend({ |
|
3045 init: function (settings) { |
|
3046 var self = this; |
|
3047 self._super(settings); |
|
3048 settings = self.settings; |
|
3049 if (settings.fixed) { |
|
3050 self.state.set('fixed', true); |
|
3051 } |
|
3052 self._items = new Collection$2(); |
|
3053 if (self.isRtl()) { |
|
3054 self.classes.add('rtl'); |
|
3055 } |
|
3056 self.bodyClasses = new ClassList(function () { |
|
3057 if (self.state.get('rendered')) { |
|
3058 self.getEl('body').className = this.toString(); |
|
3059 } |
|
3060 }); |
|
3061 self.bodyClasses.prefix = self.classPrefix; |
|
3062 self.classes.add('container'); |
|
3063 self.bodyClasses.add('container-body'); |
|
3064 if (settings.containerCls) { |
|
3065 self.classes.add(settings.containerCls); |
|
3066 } |
|
3067 self._layout = global$b.create((settings.layout || '') + 'layout'); |
|
3068 if (self.settings.items) { |
|
3069 self.add(self.settings.items); |
|
3070 } else { |
|
3071 self.add(self.render()); |
|
3072 } |
|
3073 self._hasBody = true; |
|
3074 }, |
|
3075 items: function () { |
|
3076 return this._items; |
|
3077 }, |
|
3078 find: function (selector) { |
|
3079 selector = selectorCache[selector] = selectorCache[selector] || new Selector(selector); |
|
3080 return selector.find(this); |
|
3081 }, |
|
3082 add: function (items) { |
|
3083 var self = this; |
|
3084 self.items().add(self.create(items)).parent(self); |
|
3085 return self; |
|
3086 }, |
|
3087 focus: function (keyboard) { |
|
3088 var self = this; |
|
3089 var focusCtrl, keyboardNav, items; |
|
3090 if (keyboard) { |
|
3091 keyboardNav = self.keyboardNav || self.parents().eq(-1)[0].keyboardNav; |
|
3092 if (keyboardNav) { |
|
3093 keyboardNav.focusFirst(self); |
|
3094 return; |
|
3095 } |
|
3096 } |
|
3097 items = self.find('*'); |
|
3098 if (self.statusbar) { |
|
3099 items.add(self.statusbar.items()); |
|
3100 } |
|
3101 items.each(function (ctrl) { |
|
3102 if (ctrl.settings.autofocus) { |
|
3103 focusCtrl = null; |
|
3104 return false; |
|
3105 } |
|
3106 if (ctrl.canFocus) { |
|
3107 focusCtrl = focusCtrl || ctrl; |
|
3108 } |
|
3109 }); |
|
3110 if (focusCtrl) { |
|
3111 focusCtrl.focus(); |
|
3112 } |
|
3113 return self; |
|
3114 }, |
|
3115 replace: function (oldItem, newItem) { |
|
3116 var ctrlElm; |
|
3117 var items = this.items(); |
|
3118 var i = items.length; |
|
3119 while (i--) { |
|
3120 if (items[i] === oldItem) { |
|
3121 items[i] = newItem; |
|
3122 break; |
|
3123 } |
|
3124 } |
|
3125 if (i >= 0) { |
|
3126 ctrlElm = newItem.getEl(); |
|
3127 if (ctrlElm) { |
|
3128 ctrlElm.parentNode.removeChild(ctrlElm); |
|
3129 } |
|
3130 ctrlElm = oldItem.getEl(); |
|
3131 if (ctrlElm) { |
|
3132 ctrlElm.parentNode.removeChild(ctrlElm); |
|
3133 } |
|
3134 } |
|
3135 newItem.parent(this); |
|
3136 }, |
|
3137 create: function (items) { |
|
3138 var self = this; |
|
3139 var settings; |
|
3140 var ctrlItems = []; |
|
3141 if (!global$4.isArray(items)) { |
|
3142 items = [items]; |
|
3143 } |
|
3144 global$4.each(items, function (item) { |
|
3145 if (item) { |
|
3146 if (!(item instanceof Control$1)) { |
|
3147 if (typeof item === 'string') { |
|
3148 item = { type: item }; |
|
3149 } |
|
3150 settings = global$4.extend({}, self.settings.defaults, item); |
|
3151 item.type = settings.type = settings.type || item.type || self.settings.defaultType || (settings.defaults ? settings.defaults.type : null); |
|
3152 item = global$b.create(settings); |
|
3153 } |
|
3154 ctrlItems.push(item); |
|
3155 } |
|
3156 }); |
|
3157 return ctrlItems; |
|
3158 }, |
|
3159 renderNew: function () { |
|
3160 var self = this; |
|
3161 self.items().each(function (ctrl, index) { |
|
3162 var containerElm; |
|
3163 ctrl.parent(self); |
|
3164 if (!ctrl.state.get('rendered')) { |
|
3165 containerElm = self.getEl('body'); |
|
3166 if (containerElm.hasChildNodes() && index <= containerElm.childNodes.length - 1) { |
|
3167 global$7(containerElm.childNodes[index]).before(ctrl.renderHtml()); |
|
3168 } else { |
|
3169 global$7(containerElm).append(ctrl.renderHtml()); |
|
3170 } |
|
3171 ctrl.postRender(); |
|
3172 ReflowQueue.add(ctrl); |
|
3173 } |
|
3174 }); |
|
3175 self._layout.applyClasses(self.items().filter(':visible')); |
|
3176 self._lastRect = null; |
|
3177 return self; |
|
3178 }, |
|
3179 append: function (items) { |
|
3180 return this.add(items).renderNew(); |
|
3181 }, |
|
3182 prepend: function (items) { |
|
3183 var self = this; |
|
3184 self.items().set(self.create(items).concat(self.items().toArray())); |
|
3185 return self.renderNew(); |
|
3186 }, |
|
3187 insert: function (items, index, before) { |
|
3188 var self = this; |
|
3189 var curItems, beforeItems, afterItems; |
|
3190 items = self.create(items); |
|
3191 curItems = self.items(); |
|
3192 if (!before && index < curItems.length - 1) { |
|
3193 index += 1; |
|
3194 } |
|
3195 if (index >= 0 && index < curItems.length) { |
|
3196 beforeItems = curItems.slice(0, index).toArray(); |
|
3197 afterItems = curItems.slice(index).toArray(); |
|
3198 curItems.set(beforeItems.concat(items, afterItems)); |
|
3199 } |
|
3200 return self.renderNew(); |
|
3201 }, |
|
3202 fromJSON: function (data) { |
|
3203 var self = this; |
|
3204 for (var name in data) { |
|
3205 self.find('#' + name).value(data[name]); |
|
3206 } |
|
3207 return self; |
|
3208 }, |
|
3209 toJSON: function () { |
|
3210 var self = this, data = {}; |
|
3211 self.find('*').each(function (ctrl) { |
|
3212 var name = ctrl.name(), value = ctrl.value(); |
|
3213 if (name && typeof value !== 'undefined') { |
|
3214 data[name] = value; |
|
3215 } |
|
3216 }); |
|
3217 return data; |
|
3218 }, |
|
3219 renderHtml: function () { |
|
3220 var self = this, layout = self._layout, role = this.settings.role; |
|
3221 self.preRender(); |
|
3222 layout.preRender(self); |
|
3223 return '<div id="' + self._id + '" class="' + self.classes + '"' + (role ? ' role="' + this.settings.role + '"' : '') + '>' + '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</div>'; |
|
3224 }, |
|
3225 postRender: function () { |
|
3226 var self = this; |
|
3227 var box; |
|
3228 self.items().exec('postRender'); |
|
3229 self._super(); |
|
3230 self._layout.postRender(self); |
|
3231 self.state.set('rendered', true); |
|
3232 if (self.settings.style) { |
|
3233 self.$el.css(self.settings.style); |
|
3234 } |
|
3235 if (self.settings.border) { |
|
3236 box = self.borderBox; |
|
3237 self.$el.css({ |
|
3238 'border-top-width': box.top, |
|
3239 'border-right-width': box.right, |
|
3240 'border-bottom-width': box.bottom, |
|
3241 'border-left-width': box.left |
|
3242 }); |
|
3243 } |
|
3244 if (!self.parent()) { |
|
3245 self.keyboardNav = KeyboardNavigation({ root: self }); |
|
3246 } |
|
3247 return self; |
|
3248 }, |
|
3249 initLayoutRect: function () { |
|
3250 var self = this, layoutRect = self._super(); |
|
3251 self._layout.recalc(self); |
|
3252 return layoutRect; |
|
3253 }, |
|
3254 recalc: function () { |
|
3255 var self = this; |
|
3256 var rect = self._layoutRect; |
|
3257 var lastRect = self._lastRect; |
|
3258 if (!lastRect || lastRect.w !== rect.w || lastRect.h !== rect.h) { |
|
3259 self._layout.recalc(self); |
|
3260 rect = self.layoutRect(); |
|
3261 self._lastRect = { |
|
3262 x: rect.x, |
|
3263 y: rect.y, |
|
3264 w: rect.w, |
|
3265 h: rect.h |
|
3266 }; |
|
3267 return true; |
|
3268 } |
|
3269 }, |
|
3270 reflow: function () { |
|
3271 var i; |
|
3272 ReflowQueue.remove(this); |
|
3273 if (this.visible()) { |
|
3274 Control$1.repaintControls = []; |
|
3275 Control$1.repaintControls.map = {}; |
|
3276 this.recalc(); |
|
3277 i = Control$1.repaintControls.length; |
|
3278 while (i--) { |
|
3279 Control$1.repaintControls[i].repaint(); |
|
3280 } |
|
3281 if (this.settings.layout !== 'flow' && this.settings.layout !== 'stack') { |
|
3282 this.repaint(); |
|
3283 } |
|
3284 Control$1.repaintControls = []; |
|
3285 } |
|
3286 return this; |
|
3287 } |
|
3288 }); |
|
3289 |
|
3290 var Scrollable = { |
|
3291 init: function () { |
|
3292 var self = this; |
|
3293 self.on('repaint', self.renderScroll); |
|
3294 }, |
|
3295 renderScroll: function () { |
|
3296 var self = this, margin = 2; |
|
3297 function repaintScroll() { |
|
3298 var hasScrollH, hasScrollV, bodyElm; |
|
3299 function repaintAxis(axisName, posName, sizeName, contentSizeName, hasScroll, ax) { |
|
3300 var containerElm, scrollBarElm, scrollThumbElm; |
|
3301 var containerSize, scrollSize, ratio, rect; |
|
3302 var posNameLower, sizeNameLower; |
|
3303 scrollBarElm = self.getEl('scroll' + axisName); |
|
3304 if (scrollBarElm) { |
|
3305 posNameLower = posName.toLowerCase(); |
|
3306 sizeNameLower = sizeName.toLowerCase(); |
|
3307 global$7(self.getEl('absend')).css(posNameLower, self.layoutRect()[contentSizeName] - 1); |
|
3308 if (!hasScroll) { |
|
3309 global$7(scrollBarElm).css('display', 'none'); |
|
3310 return; |
|
3311 } |
|
3312 global$7(scrollBarElm).css('display', 'block'); |
|
3313 containerElm = self.getEl('body'); |
|
3314 scrollThumbElm = self.getEl('scroll' + axisName + 't'); |
|
3315 containerSize = containerElm['client' + sizeName] - margin * 2; |
|
3316 containerSize -= hasScrollH && hasScrollV ? scrollBarElm['client' + ax] : 0; |
|
3317 scrollSize = containerElm['scroll' + sizeName]; |
|
3318 ratio = containerSize / scrollSize; |
|
3319 rect = {}; |
|
3320 rect[posNameLower] = containerElm['offset' + posName] + margin; |
|
3321 rect[sizeNameLower] = containerSize; |
|
3322 global$7(scrollBarElm).css(rect); |
|
3323 rect = {}; |
|
3324 rect[posNameLower] = containerElm['scroll' + posName] * ratio; |
|
3325 rect[sizeNameLower] = containerSize * ratio; |
|
3326 global$7(scrollThumbElm).css(rect); |
|
3327 } |
|
3328 } |
|
3329 bodyElm = self.getEl('body'); |
|
3330 hasScrollH = bodyElm.scrollWidth > bodyElm.clientWidth; |
|
3331 hasScrollV = bodyElm.scrollHeight > bodyElm.clientHeight; |
|
3332 repaintAxis('h', 'Left', 'Width', 'contentW', hasScrollH, 'Height'); |
|
3333 repaintAxis('v', 'Top', 'Height', 'contentH', hasScrollV, 'Width'); |
|
3334 } |
|
3335 function addScroll() { |
|
3336 function addScrollAxis(axisName, posName, sizeName, deltaPosName, ax) { |
|
3337 var scrollStart; |
|
3338 var axisId = self._id + '-scroll' + axisName, prefix = self.classPrefix; |
|
3339 global$7(self.getEl()).append('<div id="' + axisId + '" class="' + prefix + 'scrollbar ' + prefix + 'scrollbar-' + axisName + '">' + '<div id="' + axisId + 't" class="' + prefix + 'scrollbar-thumb"></div>' + '</div>'); |
|
3340 self.draghelper = new DragHelper(axisId + 't', { |
|
3341 start: function () { |
|
3342 scrollStart = self.getEl('body')['scroll' + posName]; |
|
3343 global$7('#' + axisId).addClass(prefix + 'active'); |
|
3344 }, |
|
3345 drag: function (e) { |
|
3346 var ratio, hasScrollH, hasScrollV, containerSize; |
|
3347 var layoutRect = self.layoutRect(); |
|
3348 hasScrollH = layoutRect.contentW > layoutRect.innerW; |
|
3349 hasScrollV = layoutRect.contentH > layoutRect.innerH; |
|
3350 containerSize = self.getEl('body')['client' + sizeName] - margin * 2; |
|
3351 containerSize -= hasScrollH && hasScrollV ? self.getEl('scroll' + axisName)['client' + ax] : 0; |
|
3352 ratio = containerSize / self.getEl('body')['scroll' + sizeName]; |
|
3353 self.getEl('body')['scroll' + posName] = scrollStart + e['delta' + deltaPosName] / ratio; |
|
3354 }, |
|
3355 stop: function () { |
|
3356 global$7('#' + axisId).removeClass(prefix + 'active'); |
|
3357 } |
|
3358 }); |
|
3359 } |
|
3360 self.classes.add('scroll'); |
|
3361 addScrollAxis('v', 'Top', 'Height', 'Y', 'Width'); |
|
3362 addScrollAxis('h', 'Left', 'Width', 'X', 'Height'); |
|
3363 } |
|
3364 if (self.settings.autoScroll) { |
|
3365 if (!self._hasScroll) { |
|
3366 self._hasScroll = true; |
|
3367 addScroll(); |
|
3368 self.on('wheel', function (e) { |
|
3369 var bodyEl = self.getEl('body'); |
|
3370 bodyEl.scrollLeft += (e.deltaX || 0) * 10; |
|
3371 bodyEl.scrollTop += e.deltaY * 10; |
|
3372 repaintScroll(); |
|
3373 }); |
|
3374 global$7(self.getEl('body')).on('scroll', repaintScroll); |
|
3375 } |
|
3376 repaintScroll(); |
|
3377 } |
|
3378 } |
|
3379 }; |
|
3380 |
|
3381 var Panel = Container.extend({ |
|
3382 Defaults: { |
|
3383 layout: 'fit', |
|
3384 containerCls: 'panel' |
|
3385 }, |
|
3386 Mixins: [Scrollable], |
|
3387 renderHtml: function () { |
|
3388 var self = this; |
|
3389 var layout = self._layout; |
|
3390 var innerHtml = self.settings.html; |
|
3391 self.preRender(); |
|
3392 layout.preRender(self); |
|
3393 if (typeof innerHtml === 'undefined') { |
|
3394 innerHtml = '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + layout.renderHtml(self) + '</div>'; |
|
3395 } else { |
|
3396 if (typeof innerHtml === 'function') { |
|
3397 innerHtml = innerHtml.call(self); |
|
3398 } |
|
3399 self._hasBody = false; |
|
3400 } |
|
3401 return '<div id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1" role="group">' + (self._preBodyHtml || '') + innerHtml + '</div>'; |
|
3402 } |
|
3403 }); |
|
3404 |
|
3405 var Resizable = { |
|
3406 resizeToContent: function () { |
|
3407 this._layoutRect.autoResize = true; |
|
3408 this._lastRect = null; |
|
3409 this.reflow(); |
|
3410 }, |
|
3411 resizeTo: function (w, h) { |
|
3412 if (w <= 1 || h <= 1) { |
|
3413 var rect = funcs.getWindowSize(); |
|
3414 w = w <= 1 ? w * rect.w : w; |
|
3415 h = h <= 1 ? h * rect.h : h; |
|
3416 } |
|
3417 this._layoutRect.autoResize = false; |
|
3418 return this.layoutRect({ |
|
3419 minW: w, |
|
3420 minH: h, |
|
3421 w: w, |
|
3422 h: h |
|
3423 }).reflow(); |
|
3424 }, |
|
3425 resizeBy: function (dw, dh) { |
|
3426 var self = this, rect = self.layoutRect(); |
|
3427 return self.resizeTo(rect.w + dw, rect.h + dh); |
|
3428 } |
|
3429 }; |
|
3430 |
|
3431 var documentClickHandler, documentScrollHandler, windowResizeHandler; |
|
3432 var visiblePanels = []; |
|
3433 var zOrder = []; |
|
3434 var hasModal; |
|
3435 function isChildOf(ctrl, parent) { |
|
3436 while (ctrl) { |
|
3437 if (ctrl === parent) { |
|
3438 return true; |
|
3439 } |
|
3440 ctrl = ctrl.parent(); |
|
3441 } |
|
3442 } |
|
3443 function skipOrHidePanels(e) { |
|
3444 var i = visiblePanels.length; |
|
3445 while (i--) { |
|
3446 var panel = visiblePanels[i], clickCtrl = panel.getParentCtrl(e.target); |
|
3447 if (panel.settings.autohide) { |
|
3448 if (clickCtrl) { |
|
3449 if (isChildOf(clickCtrl, panel) || panel.parent() === clickCtrl) { |
|
3450 continue; |
|
3451 } |
|
3452 } |
|
3453 e = panel.fire('autohide', { target: e.target }); |
|
3454 if (!e.isDefaultPrevented()) { |
|
3455 panel.hide(); |
|
3456 } |
|
3457 } |
|
3458 } |
|
3459 } |
|
3460 function bindDocumentClickHandler() { |
|
3461 if (!documentClickHandler) { |
|
3462 documentClickHandler = function (e) { |
|
3463 if (e.button === 2) { |
|
3464 return; |
|
3465 } |
|
3466 skipOrHidePanels(e); |
|
3467 }; |
|
3468 global$7(domGlobals.document).on('click touchstart', documentClickHandler); |
|
3469 } |
|
3470 } |
|
3471 function bindDocumentScrollHandler() { |
|
3472 if (!documentScrollHandler) { |
|
3473 documentScrollHandler = function () { |
|
3474 var i; |
|
3475 i = visiblePanels.length; |
|
3476 while (i--) { |
|
3477 repositionPanel$1(visiblePanels[i]); |
|
3478 } |
|
3479 }; |
|
3480 global$7(domGlobals.window).on('scroll', documentScrollHandler); |
|
3481 } |
|
3482 } |
|
3483 function bindWindowResizeHandler() { |
|
3484 if (!windowResizeHandler) { |
|
3485 var docElm_1 = domGlobals.document.documentElement; |
|
3486 var clientWidth_1 = docElm_1.clientWidth, clientHeight_1 = docElm_1.clientHeight; |
|
3487 windowResizeHandler = function () { |
|
3488 if (!domGlobals.document.all || clientWidth_1 !== docElm_1.clientWidth || clientHeight_1 !== docElm_1.clientHeight) { |
|
3489 clientWidth_1 = docElm_1.clientWidth; |
|
3490 clientHeight_1 = docElm_1.clientHeight; |
|
3491 FloatPanel.hideAll(); |
|
3492 } |
|
3493 }; |
|
3494 global$7(domGlobals.window).on('resize', windowResizeHandler); |
|
3495 } |
|
3496 } |
|
3497 function repositionPanel$1(panel) { |
|
3498 var scrollY = funcs.getViewPort().y; |
|
3499 function toggleFixedChildPanels(fixed, deltaY) { |
|
3500 var parent; |
|
3501 for (var i = 0; i < visiblePanels.length; i++) { |
|
3502 if (visiblePanels[i] !== panel) { |
|
3503 parent = visiblePanels[i].parent(); |
|
3504 while (parent && (parent = parent.parent())) { |
|
3505 if (parent === panel) { |
|
3506 visiblePanels[i].fixed(fixed).moveBy(0, deltaY).repaint(); |
|
3507 } |
|
3508 } |
|
3509 } |
|
3510 } |
|
3511 } |
|
3512 if (panel.settings.autofix) { |
|
3513 if (!panel.state.get('fixed')) { |
|
3514 panel._autoFixY = panel.layoutRect().y; |
|
3515 if (panel._autoFixY < scrollY) { |
|
3516 panel.fixed(true).layoutRect({ y: 0 }).repaint(); |
|
3517 toggleFixedChildPanels(true, scrollY - panel._autoFixY); |
|
3518 } |
|
3519 } else { |
|
3520 if (panel._autoFixY > scrollY) { |
|
3521 panel.fixed(false).layoutRect({ y: panel._autoFixY }).repaint(); |
|
3522 toggleFixedChildPanels(false, panel._autoFixY - scrollY); |
|
3523 } |
|
3524 } |
|
3525 } |
|
3526 } |
|
3527 function addRemove(add, ctrl) { |
|
3528 var i, zIndex = FloatPanel.zIndex || 65535, topModal; |
|
3529 if (add) { |
|
3530 zOrder.push(ctrl); |
|
3531 } else { |
|
3532 i = zOrder.length; |
|
3533 while (i--) { |
|
3534 if (zOrder[i] === ctrl) { |
|
3535 zOrder.splice(i, 1); |
|
3536 } |
|
3537 } |
|
3538 } |
|
3539 if (zOrder.length) { |
|
3540 for (i = 0; i < zOrder.length; i++) { |
|
3541 if (zOrder[i].modal) { |
|
3542 zIndex++; |
|
3543 topModal = zOrder[i]; |
|
3544 } |
|
3545 zOrder[i].getEl().style.zIndex = zIndex; |
|
3546 zOrder[i].zIndex = zIndex; |
|
3547 zIndex++; |
|
3548 } |
|
3549 } |
|
3550 var modalBlockEl = global$7('#' + ctrl.classPrefix + 'modal-block', ctrl.getContainerElm())[0]; |
|
3551 if (topModal) { |
|
3552 global$7(modalBlockEl).css('z-index', topModal.zIndex - 1); |
|
3553 } else if (modalBlockEl) { |
|
3554 modalBlockEl.parentNode.removeChild(modalBlockEl); |
|
3555 hasModal = false; |
|
3556 } |
|
3557 FloatPanel.currentZIndex = zIndex; |
|
3558 } |
|
3559 var FloatPanel = Panel.extend({ |
|
3560 Mixins: [ |
|
3561 Movable, |
|
3562 Resizable |
|
3563 ], |
|
3564 init: function (settings) { |
|
3565 var self = this; |
|
3566 self._super(settings); |
|
3567 self._eventsRoot = self; |
|
3568 self.classes.add('floatpanel'); |
|
3569 if (settings.autohide) { |
|
3570 bindDocumentClickHandler(); |
|
3571 bindWindowResizeHandler(); |
|
3572 visiblePanels.push(self); |
|
3573 } |
|
3574 if (settings.autofix) { |
|
3575 bindDocumentScrollHandler(); |
|
3576 self.on('move', function () { |
|
3577 repositionPanel$1(this); |
|
3578 }); |
|
3579 } |
|
3580 self.on('postrender show', function (e) { |
|
3581 if (e.control === self) { |
|
3582 var $modalBlockEl_1; |
|
3583 var prefix_1 = self.classPrefix; |
|
3584 if (self.modal && !hasModal) { |
|
3585 $modalBlockEl_1 = global$7('#' + prefix_1 + 'modal-block', self.getContainerElm()); |
|
3586 if (!$modalBlockEl_1[0]) { |
|
3587 $modalBlockEl_1 = global$7('<div id="' + prefix_1 + 'modal-block" class="' + prefix_1 + 'reset ' + prefix_1 + 'fade"></div>').appendTo(self.getContainerElm()); |
|
3588 } |
|
3589 global$3.setTimeout(function () { |
|
3590 $modalBlockEl_1.addClass(prefix_1 + 'in'); |
|
3591 global$7(self.getEl()).addClass(prefix_1 + 'in'); |
|
3592 }); |
|
3593 hasModal = true; |
|
3594 } |
|
3595 addRemove(true, self); |
|
3596 } |
|
3597 }); |
|
3598 self.on('show', function () { |
|
3599 self.parents().each(function (ctrl) { |
|
3600 if (ctrl.state.get('fixed')) { |
|
3601 self.fixed(true); |
|
3602 return false; |
|
3603 } |
|
3604 }); |
|
3605 }); |
|
3606 if (settings.popover) { |
|
3607 self._preBodyHtml = '<div class="' + self.classPrefix + 'arrow"></div>'; |
|
3608 self.classes.add('popover').add('bottom').add(self.isRtl() ? 'end' : 'start'); |
|
3609 } |
|
3610 self.aria('label', settings.ariaLabel); |
|
3611 self.aria('labelledby', self._id); |
|
3612 self.aria('describedby', self.describedBy || self._id + '-none'); |
|
3613 }, |
|
3614 fixed: function (state) { |
|
3615 var self = this; |
|
3616 if (self.state.get('fixed') !== state) { |
|
3617 if (self.state.get('rendered')) { |
|
3618 var viewport = funcs.getViewPort(); |
|
3619 if (state) { |
|
3620 self.layoutRect().y -= viewport.y; |
|
3621 } else { |
|
3622 self.layoutRect().y += viewport.y; |
|
3623 } |
|
3624 } |
|
3625 self.classes.toggle('fixed', state); |
|
3626 self.state.set('fixed', state); |
|
3627 } |
|
3628 return self; |
|
3629 }, |
|
3630 show: function () { |
|
3631 var self = this; |
|
3632 var i; |
|
3633 var state = self._super(); |
|
3634 i = visiblePanels.length; |
|
3635 while (i--) { |
|
3636 if (visiblePanels[i] === self) { |
|
3637 break; |
|
3638 } |
|
3639 } |
|
3640 if (i === -1) { |
|
3641 visiblePanels.push(self); |
|
3642 } |
|
3643 return state; |
|
3644 }, |
|
3645 hide: function () { |
|
3646 removeVisiblePanel(this); |
|
3647 addRemove(false, this); |
|
3648 return this._super(); |
|
3649 }, |
|
3650 hideAll: function () { |
|
3651 FloatPanel.hideAll(); |
|
3652 }, |
|
3653 close: function () { |
|
3654 var self = this; |
|
3655 if (!self.fire('close').isDefaultPrevented()) { |
|
3656 self.remove(); |
|
3657 addRemove(false, self); |
|
3658 } |
|
3659 return self; |
|
3660 }, |
|
3661 remove: function () { |
|
3662 removeVisiblePanel(this); |
|
3663 this._super(); |
|
3664 }, |
|
3665 postRender: function () { |
|
3666 var self = this; |
|
3667 if (self.settings.bodyRole) { |
|
3668 this.getEl('body').setAttribute('role', self.settings.bodyRole); |
|
3669 } |
|
3670 return self._super(); |
|
3671 } |
|
3672 }); |
|
3673 FloatPanel.hideAll = function () { |
|
3674 var i = visiblePanels.length; |
|
3675 while (i--) { |
|
3676 var panel = visiblePanels[i]; |
|
3677 if (panel && panel.settings.autohide) { |
|
3678 panel.hide(); |
|
3679 visiblePanels.splice(i, 1); |
|
3680 } |
|
3681 } |
|
3682 }; |
|
3683 function removeVisiblePanel(panel) { |
|
3684 var i; |
|
3685 i = visiblePanels.length; |
|
3686 while (i--) { |
|
3687 if (visiblePanels[i] === panel) { |
|
3688 visiblePanels.splice(i, 1); |
|
3689 } |
|
3690 } |
|
3691 i = zOrder.length; |
|
3692 while (i--) { |
|
3693 if (zOrder[i] === panel) { |
|
3694 zOrder.splice(i, 1); |
|
3695 } |
|
3696 } |
|
3697 } |
|
3698 |
|
3699 var windows = []; |
|
3700 var oldMetaValue = ''; |
|
3701 function toggleFullScreenState(state) { |
|
3702 var noScaleMetaValue = 'width=device-width,initial-scale=1.0,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0'; |
|
3703 var viewport = global$7('meta[name=viewport]')[0], contentValue; |
|
3704 if (global$1.overrideViewPort === false) { |
|
3705 return; |
|
3706 } |
|
3707 if (!viewport) { |
|
3708 viewport = domGlobals.document.createElement('meta'); |
|
3709 viewport.setAttribute('name', 'viewport'); |
|
3710 domGlobals.document.getElementsByTagName('head')[0].appendChild(viewport); |
|
3711 } |
|
3712 contentValue = viewport.getAttribute('content'); |
|
3713 if (contentValue && typeof oldMetaValue !== 'undefined') { |
|
3714 oldMetaValue = contentValue; |
|
3715 } |
|
3716 viewport.setAttribute('content', state ? noScaleMetaValue : oldMetaValue); |
|
3717 } |
|
3718 function toggleBodyFullScreenClasses(classPrefix, state) { |
|
3719 if (checkFullscreenWindows() && state === false) { |
|
3720 global$7([ |
|
3721 domGlobals.document.documentElement, |
|
3722 domGlobals.document.body |
|
3723 ]).removeClass(classPrefix + 'fullscreen'); |
|
3724 } |
|
3725 } |
|
3726 function checkFullscreenWindows() { |
|
3727 for (var i = 0; i < windows.length; i++) { |
|
3728 if (windows[i]._fullscreen) { |
|
3729 return true; |
|
3730 } |
1246 } |
3731 } |
1247 return false; |
3732 return false; |
1248 }, |
3733 } |
1249 find: function (container) { |
3734 function handleWindowResize() { |
1250 var matches = [], i, l; |
3735 if (!global$1.desktop) { |
1251 var selectors = this._selectors; |
3736 var lastSize_1 = { |
1252 function collect(items, selector, index) { |
3737 w: domGlobals.window.innerWidth, |
1253 var i, l, fi, fl, item; |
3738 h: domGlobals.window.innerHeight |
1254 var filters = selector[index]; |
3739 }; |
1255 for (i = 0, l = items.length; i < l; i++) { |
3740 global$3.setInterval(function () { |
1256 item = items[i]; |
3741 var w = domGlobals.window.innerWidth, h = domGlobals.window.innerHeight; |
1257 for (fi = 0, fl = filters.length; fi < fl; fi++) { |
3742 if (lastSize_1.w !== w || lastSize_1.h !== h) { |
1258 if (!filters[fi](item, i, l)) { |
3743 lastSize_1 = { |
1259 fi = fl + 1; |
3744 w: w, |
1260 break; |
3745 h: h |
1261 } |
3746 }; |
1262 } |
3747 global$7(domGlobals.window).trigger('resize'); |
1263 if (fi === fl) { |
3748 } |
1264 if (index === selector.length - 1) { |
3749 }, 100); |
1265 matches.push(item); |
3750 } |
|
3751 function reposition() { |
|
3752 var i; |
|
3753 var rect = funcs.getWindowSize(); |
|
3754 var layoutRect; |
|
3755 for (i = 0; i < windows.length; i++) { |
|
3756 layoutRect = windows[i].layoutRect(); |
|
3757 windows[i].moveTo(windows[i].settings.x || Math.max(0, rect.w / 2 - layoutRect.w / 2), windows[i].settings.y || Math.max(0, rect.h / 2 - layoutRect.h / 2)); |
|
3758 } |
|
3759 } |
|
3760 global$7(domGlobals.window).on('resize', reposition); |
|
3761 } |
|
3762 var Window = FloatPanel.extend({ |
|
3763 modal: true, |
|
3764 Defaults: { |
|
3765 border: 1, |
|
3766 layout: 'flex', |
|
3767 containerCls: 'panel', |
|
3768 role: 'dialog', |
|
3769 callbacks: { |
|
3770 submit: function () { |
|
3771 this.fire('submit', { data: this.toJSON() }); |
|
3772 }, |
|
3773 close: function () { |
|
3774 this.close(); |
|
3775 } |
|
3776 } |
|
3777 }, |
|
3778 init: function (settings) { |
|
3779 var self = this; |
|
3780 self._super(settings); |
|
3781 if (self.isRtl()) { |
|
3782 self.classes.add('rtl'); |
|
3783 } |
|
3784 self.classes.add('window'); |
|
3785 self.bodyClasses.add('window-body'); |
|
3786 self.state.set('fixed', true); |
|
3787 if (settings.buttons) { |
|
3788 self.statusbar = new Panel({ |
|
3789 layout: 'flex', |
|
3790 border: '1 0 0 0', |
|
3791 spacing: 3, |
|
3792 padding: 10, |
|
3793 align: 'center', |
|
3794 pack: self.isRtl() ? 'start' : 'end', |
|
3795 defaults: { type: 'button' }, |
|
3796 items: settings.buttons |
|
3797 }); |
|
3798 self.statusbar.classes.add('foot'); |
|
3799 self.statusbar.parent(self); |
|
3800 } |
|
3801 self.on('click', function (e) { |
|
3802 var closeClass = self.classPrefix + 'close'; |
|
3803 if (funcs.hasClass(e.target, closeClass) || funcs.hasClass(e.target.parentNode, closeClass)) { |
|
3804 self.close(); |
|
3805 } |
|
3806 }); |
|
3807 self.on('cancel', function () { |
|
3808 self.close(); |
|
3809 }); |
|
3810 self.on('move', function (e) { |
|
3811 if (e.control === self) { |
|
3812 FloatPanel.hideAll(); |
|
3813 } |
|
3814 }); |
|
3815 self.aria('describedby', self.describedBy || self._id + '-none'); |
|
3816 self.aria('label', settings.title); |
|
3817 self._fullscreen = false; |
|
3818 }, |
|
3819 recalc: function () { |
|
3820 var self = this; |
|
3821 var statusbar = self.statusbar; |
|
3822 var layoutRect, width, x, needsRecalc; |
|
3823 if (self._fullscreen) { |
|
3824 self.layoutRect(funcs.getWindowSize()); |
|
3825 self.layoutRect().contentH = self.layoutRect().innerH; |
|
3826 } |
|
3827 self._super(); |
|
3828 layoutRect = self.layoutRect(); |
|
3829 if (self.settings.title && !self._fullscreen) { |
|
3830 width = layoutRect.headerW; |
|
3831 if (width > layoutRect.w) { |
|
3832 x = layoutRect.x - Math.max(0, width / 2); |
|
3833 self.layoutRect({ |
|
3834 w: width, |
|
3835 x: x |
|
3836 }); |
|
3837 needsRecalc = true; |
|
3838 } |
|
3839 } |
|
3840 if (statusbar) { |
|
3841 statusbar.layoutRect({ w: self.layoutRect().innerW }).recalc(); |
|
3842 width = statusbar.layoutRect().minW + layoutRect.deltaW; |
|
3843 if (width > layoutRect.w) { |
|
3844 x = layoutRect.x - Math.max(0, width - layoutRect.w); |
|
3845 self.layoutRect({ |
|
3846 w: width, |
|
3847 x: x |
|
3848 }); |
|
3849 needsRecalc = true; |
|
3850 } |
|
3851 } |
|
3852 if (needsRecalc) { |
|
3853 self.recalc(); |
|
3854 } |
|
3855 }, |
|
3856 initLayoutRect: function () { |
|
3857 var self = this; |
|
3858 var layoutRect = self._super(); |
|
3859 var deltaH = 0, headEl; |
|
3860 if (self.settings.title && !self._fullscreen) { |
|
3861 headEl = self.getEl('head'); |
|
3862 var size = funcs.getSize(headEl); |
|
3863 layoutRect.headerW = size.width; |
|
3864 layoutRect.headerH = size.height; |
|
3865 deltaH += layoutRect.headerH; |
|
3866 } |
|
3867 if (self.statusbar) { |
|
3868 deltaH += self.statusbar.layoutRect().h; |
|
3869 } |
|
3870 layoutRect.deltaH += deltaH; |
|
3871 layoutRect.minH += deltaH; |
|
3872 layoutRect.h += deltaH; |
|
3873 var rect = funcs.getWindowSize(); |
|
3874 layoutRect.x = self.settings.x || Math.max(0, rect.w / 2 - layoutRect.w / 2); |
|
3875 layoutRect.y = self.settings.y || Math.max(0, rect.h / 2 - layoutRect.h / 2); |
|
3876 return layoutRect; |
|
3877 }, |
|
3878 renderHtml: function () { |
|
3879 var self = this, layout = self._layout, id = self._id, prefix = self.classPrefix; |
|
3880 var settings = self.settings; |
|
3881 var headerHtml = '', footerHtml = '', html = settings.html; |
|
3882 self.preRender(); |
|
3883 layout.preRender(self); |
|
3884 if (settings.title) { |
|
3885 headerHtml = '<div id="' + id + '-head" class="' + prefix + 'window-head">' + '<div id="' + id + '-title" class="' + prefix + 'title">' + self.encode(settings.title) + '</div>' + '<div id="' + id + '-dragh" class="' + prefix + 'dragh"></div>' + '<button type="button" class="' + prefix + 'close" aria-hidden="true">' + '<i class="mce-ico mce-i-remove"></i>' + '</button>' + '</div>'; |
|
3886 } |
|
3887 if (settings.url) { |
|
3888 html = '<iframe src="' + settings.url + '" tabindex="-1"></iframe>'; |
|
3889 } |
|
3890 if (typeof html === 'undefined') { |
|
3891 html = layout.renderHtml(self); |
|
3892 } |
|
3893 if (self.statusbar) { |
|
3894 footerHtml = self.statusbar.renderHtml(); |
|
3895 } |
|
3896 return '<div id="' + id + '" class="' + self.classes + '" hidefocus="1">' + '<div class="' + self.classPrefix + 'reset" role="application">' + headerHtml + '<div id="' + id + '-body" class="' + self.bodyClasses + '">' + html + '</div>' + footerHtml + '</div>' + '</div>'; |
|
3897 }, |
|
3898 fullscreen: function (state) { |
|
3899 var self = this; |
|
3900 var documentElement = domGlobals.document.documentElement; |
|
3901 var slowRendering; |
|
3902 var prefix = self.classPrefix; |
|
3903 var layoutRect; |
|
3904 if (state !== self._fullscreen) { |
|
3905 global$7(domGlobals.window).on('resize', function () { |
|
3906 var time; |
|
3907 if (self._fullscreen) { |
|
3908 if (!slowRendering) { |
|
3909 time = new Date().getTime(); |
|
3910 var rect = funcs.getWindowSize(); |
|
3911 self.moveTo(0, 0).resizeTo(rect.w, rect.h); |
|
3912 if (new Date().getTime() - time > 50) { |
|
3913 slowRendering = true; |
|
3914 } |
|
3915 } else { |
|
3916 if (!self._timer) { |
|
3917 self._timer = global$3.setTimeout(function () { |
|
3918 var rect = funcs.getWindowSize(); |
|
3919 self.moveTo(0, 0).resizeTo(rect.w, rect.h); |
|
3920 self._timer = 0; |
|
3921 }, 50); |
|
3922 } |
|
3923 } |
|
3924 } |
|
3925 }); |
|
3926 layoutRect = self.layoutRect(); |
|
3927 self._fullscreen = state; |
|
3928 if (!state) { |
|
3929 self.borderBox = BoxUtils.parseBox(self.settings.border); |
|
3930 self.getEl('head').style.display = ''; |
|
3931 layoutRect.deltaH += layoutRect.headerH; |
|
3932 global$7([ |
|
3933 documentElement, |
|
3934 domGlobals.document.body |
|
3935 ]).removeClass(prefix + 'fullscreen'); |
|
3936 self.classes.remove('fullscreen'); |
|
3937 self.moveTo(self._initial.x, self._initial.y).resizeTo(self._initial.w, self._initial.h); |
|
3938 } else { |
|
3939 self._initial = { |
|
3940 x: layoutRect.x, |
|
3941 y: layoutRect.y, |
|
3942 w: layoutRect.w, |
|
3943 h: layoutRect.h |
|
3944 }; |
|
3945 self.borderBox = BoxUtils.parseBox('0'); |
|
3946 self.getEl('head').style.display = 'none'; |
|
3947 layoutRect.deltaH -= layoutRect.headerH + 2; |
|
3948 global$7([ |
|
3949 documentElement, |
|
3950 domGlobals.document.body |
|
3951 ]).addClass(prefix + 'fullscreen'); |
|
3952 self.classes.add('fullscreen'); |
|
3953 var rect = funcs.getWindowSize(); |
|
3954 self.moveTo(0, 0).resizeTo(rect.w, rect.h); |
|
3955 } |
|
3956 } |
|
3957 return self.reflow(); |
|
3958 }, |
|
3959 postRender: function () { |
|
3960 var self = this; |
|
3961 var startPos; |
|
3962 setTimeout(function () { |
|
3963 self.classes.add('in'); |
|
3964 self.fire('open'); |
|
3965 }, 0); |
|
3966 self._super(); |
|
3967 if (self.statusbar) { |
|
3968 self.statusbar.postRender(); |
|
3969 } |
|
3970 self.focus(); |
|
3971 this.dragHelper = new DragHelper(self._id + '-dragh', { |
|
3972 start: function () { |
|
3973 startPos = { |
|
3974 x: self.layoutRect().x, |
|
3975 y: self.layoutRect().y |
|
3976 }; |
|
3977 }, |
|
3978 drag: function (e) { |
|
3979 self.moveTo(startPos.x + e.deltaX, startPos.y + e.deltaY); |
|
3980 } |
|
3981 }); |
|
3982 self.on('submit', function (e) { |
|
3983 if (!e.isDefaultPrevented()) { |
|
3984 self.close(); |
|
3985 } |
|
3986 }); |
|
3987 windows.push(self); |
|
3988 toggleFullScreenState(true); |
|
3989 }, |
|
3990 submit: function () { |
|
3991 return this.fire('submit', { data: this.toJSON() }); |
|
3992 }, |
|
3993 remove: function () { |
|
3994 var self = this; |
|
3995 var i; |
|
3996 self.dragHelper.destroy(); |
|
3997 self._super(); |
|
3998 if (self.statusbar) { |
|
3999 this.statusbar.remove(); |
|
4000 } |
|
4001 toggleBodyFullScreenClasses(self.classPrefix, false); |
|
4002 i = windows.length; |
|
4003 while (i--) { |
|
4004 if (windows[i] === self) { |
|
4005 windows.splice(i, 1); |
|
4006 } |
|
4007 } |
|
4008 toggleFullScreenState(windows.length > 0); |
|
4009 }, |
|
4010 getContentWindow: function () { |
|
4011 var ifr = this.getEl().getElementsByTagName('iframe')[0]; |
|
4012 return ifr ? ifr.contentWindow : null; |
|
4013 } |
|
4014 }); |
|
4015 handleWindowResize(); |
|
4016 |
|
4017 var MessageBox = Window.extend({ |
|
4018 init: function (settings) { |
|
4019 settings = { |
|
4020 border: 1, |
|
4021 padding: 20, |
|
4022 layout: 'flex', |
|
4023 pack: 'center', |
|
4024 align: 'center', |
|
4025 containerCls: 'panel', |
|
4026 autoScroll: true, |
|
4027 buttons: { |
|
4028 type: 'button', |
|
4029 text: 'Ok', |
|
4030 action: 'ok' |
|
4031 }, |
|
4032 items: { |
|
4033 type: 'label', |
|
4034 multiline: true, |
|
4035 maxWidth: 500, |
|
4036 maxHeight: 200 |
|
4037 } |
|
4038 }; |
|
4039 this._super(settings); |
|
4040 }, |
|
4041 Statics: { |
|
4042 OK: 1, |
|
4043 OK_CANCEL: 2, |
|
4044 YES_NO: 3, |
|
4045 YES_NO_CANCEL: 4, |
|
4046 msgBox: function (settings) { |
|
4047 var buttons; |
|
4048 var callback = settings.callback || function () { |
|
4049 }; |
|
4050 function createButton(text, status, primary) { |
|
4051 return { |
|
4052 type: 'button', |
|
4053 text: text, |
|
4054 subtype: primary ? 'primary' : '', |
|
4055 onClick: function (e) { |
|
4056 e.control.parents()[1].close(); |
|
4057 callback(status); |
|
4058 } |
|
4059 }; |
|
4060 } |
|
4061 switch (settings.buttons) { |
|
4062 case MessageBox.OK_CANCEL: |
|
4063 buttons = [ |
|
4064 createButton('Ok', true, true), |
|
4065 createButton('Cancel', false) |
|
4066 ]; |
|
4067 break; |
|
4068 case MessageBox.YES_NO: |
|
4069 case MessageBox.YES_NO_CANCEL: |
|
4070 buttons = [ |
|
4071 createButton('Yes', 1, true), |
|
4072 createButton('No', 0) |
|
4073 ]; |
|
4074 if (settings.buttons === MessageBox.YES_NO_CANCEL) { |
|
4075 buttons.push(createButton('Cancel', -1)); |
|
4076 } |
|
4077 break; |
|
4078 default: |
|
4079 buttons = [createButton('Ok', true, true)]; |
|
4080 break; |
|
4081 } |
|
4082 return new Window({ |
|
4083 padding: 20, |
|
4084 x: settings.x, |
|
4085 y: settings.y, |
|
4086 minWidth: 300, |
|
4087 minHeight: 100, |
|
4088 layout: 'flex', |
|
4089 pack: 'center', |
|
4090 align: 'center', |
|
4091 buttons: buttons, |
|
4092 title: settings.title, |
|
4093 role: 'alertdialog', |
|
4094 items: { |
|
4095 type: 'label', |
|
4096 multiline: true, |
|
4097 maxWidth: 500, |
|
4098 maxHeight: 200, |
|
4099 text: settings.text |
|
4100 }, |
|
4101 onPostRender: function () { |
|
4102 this.aria('describedby', this.items()[0]._id); |
|
4103 }, |
|
4104 onClose: settings.onClose, |
|
4105 onCancel: function () { |
|
4106 callback(false); |
|
4107 } |
|
4108 }).renderTo(domGlobals.document.body).reflow(); |
|
4109 }, |
|
4110 alert: function (settings, callback) { |
|
4111 if (typeof settings === 'string') { |
|
4112 settings = { text: settings }; |
|
4113 } |
|
4114 settings.callback = callback; |
|
4115 return MessageBox.msgBox(settings); |
|
4116 }, |
|
4117 confirm: function (settings, callback) { |
|
4118 if (typeof settings === 'string') { |
|
4119 settings = { text: settings }; |
|
4120 } |
|
4121 settings.callback = callback; |
|
4122 settings.buttons = MessageBox.OK_CANCEL; |
|
4123 return MessageBox.msgBox(settings); |
|
4124 } |
|
4125 } |
|
4126 }); |
|
4127 |
|
4128 function WindowManagerImpl (editor) { |
|
4129 var open = function (args, params, closeCallback) { |
|
4130 var win; |
|
4131 args.title = args.title || ' '; |
|
4132 args.url = args.url || args.file; |
|
4133 if (args.url) { |
|
4134 args.width = parseInt(args.width || 320, 10); |
|
4135 args.height = parseInt(args.height || 240, 10); |
|
4136 } |
|
4137 if (args.body) { |
|
4138 args.items = { |
|
4139 defaults: args.defaults, |
|
4140 type: args.bodyType || 'form', |
|
4141 items: args.body, |
|
4142 data: args.data, |
|
4143 callbacks: args.commands |
|
4144 }; |
|
4145 } |
|
4146 if (!args.url && !args.buttons) { |
|
4147 args.buttons = [ |
|
4148 { |
|
4149 text: 'Ok', |
|
4150 subtype: 'primary', |
|
4151 onclick: function () { |
|
4152 win.find('form')[0].submit(); |
|
4153 } |
|
4154 }, |
|
4155 { |
|
4156 text: 'Cancel', |
|
4157 onclick: function () { |
|
4158 win.close(); |
|
4159 } |
|
4160 } |
|
4161 ]; |
|
4162 } |
|
4163 win = new Window(args); |
|
4164 win.on('close', function () { |
|
4165 closeCallback(win); |
|
4166 }); |
|
4167 if (args.data) { |
|
4168 win.on('postRender', function () { |
|
4169 this.find('*').each(function (ctrl) { |
|
4170 var name = ctrl.name(); |
|
4171 if (name in args.data) { |
|
4172 ctrl.value(args.data[name]); |
|
4173 } |
|
4174 }); |
|
4175 }); |
|
4176 } |
|
4177 win.features = args || {}; |
|
4178 win.params = params || {}; |
|
4179 win = win.renderTo(domGlobals.document.body).reflow(); |
|
4180 return win; |
|
4181 }; |
|
4182 var alert = function (message, choiceCallback, closeCallback) { |
|
4183 var win; |
|
4184 win = MessageBox.alert(message, function () { |
|
4185 choiceCallback(); |
|
4186 }); |
|
4187 win.on('close', function () { |
|
4188 closeCallback(win); |
|
4189 }); |
|
4190 return win; |
|
4191 }; |
|
4192 var confirm = function (message, choiceCallback, closeCallback) { |
|
4193 var win; |
|
4194 win = MessageBox.confirm(message, function (state) { |
|
4195 choiceCallback(state); |
|
4196 }); |
|
4197 win.on('close', function () { |
|
4198 closeCallback(win); |
|
4199 }); |
|
4200 return win; |
|
4201 }; |
|
4202 var close = function (window) { |
|
4203 window.close(); |
|
4204 }; |
|
4205 var getParams = function (window) { |
|
4206 return window.params; |
|
4207 }; |
|
4208 var setParams = function (window, params) { |
|
4209 window.params = params; |
|
4210 }; |
|
4211 return { |
|
4212 open: open, |
|
4213 alert: alert, |
|
4214 confirm: confirm, |
|
4215 close: close, |
|
4216 getParams: getParams, |
|
4217 setParams: setParams |
|
4218 }; |
|
4219 } |
|
4220 |
|
4221 var get = function (editor, panel) { |
|
4222 var renderUI = function () { |
|
4223 return Render.renderUI(editor, panel); |
|
4224 }; |
|
4225 return { |
|
4226 renderUI: renderUI, |
|
4227 getNotificationManagerImpl: function () { |
|
4228 return NotificationManagerImpl(editor); |
|
4229 }, |
|
4230 getWindowManagerImpl: function () { |
|
4231 return WindowManagerImpl(editor); |
|
4232 } |
|
4233 }; |
|
4234 }; |
|
4235 var ThemeApi = { get: get }; |
|
4236 |
|
4237 var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')(); |
|
4238 |
|
4239 var path = function (parts, scope) { |
|
4240 var o = scope !== undefined && scope !== null ? scope : Global; |
|
4241 for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) |
|
4242 o = o[parts[i]]; |
|
4243 return o; |
|
4244 }; |
|
4245 var resolve = function (p, scope) { |
|
4246 var parts = p.split('.'); |
|
4247 return path(parts, scope); |
|
4248 }; |
|
4249 |
|
4250 var unsafe = function (name, scope) { |
|
4251 return resolve(name, scope); |
|
4252 }; |
|
4253 var getOrDie = function (name, scope) { |
|
4254 var actual = unsafe(name, scope); |
|
4255 if (actual === undefined || actual === null) |
|
4256 throw name + ' not available on this browser'; |
|
4257 return actual; |
|
4258 }; |
|
4259 var Global$1 = { getOrDie: getOrDie }; |
|
4260 |
|
4261 function FileReader () { |
|
4262 var f = Global$1.getOrDie('FileReader'); |
|
4263 return new f(); |
|
4264 } |
|
4265 |
|
4266 var global$c = tinymce.util.Tools.resolve('tinymce.util.Promise'); |
|
4267 |
|
4268 var blobToBase64 = function (blob) { |
|
4269 return new global$c(function (resolve) { |
|
4270 var reader = FileReader(); |
|
4271 reader.onloadend = function () { |
|
4272 resolve(reader.result.split(',')[1]); |
|
4273 }; |
|
4274 reader.readAsDataURL(blob); |
|
4275 }); |
|
4276 }; |
|
4277 var Conversions = { blobToBase64: blobToBase64 }; |
|
4278 |
|
4279 var pickFile = function () { |
|
4280 return new global$c(function (resolve) { |
|
4281 var fileInput; |
|
4282 fileInput = domGlobals.document.createElement('input'); |
|
4283 fileInput.type = 'file'; |
|
4284 fileInput.style.position = 'fixed'; |
|
4285 fileInput.style.left = 0; |
|
4286 fileInput.style.top = 0; |
|
4287 fileInput.style.opacity = 0.001; |
|
4288 domGlobals.document.body.appendChild(fileInput); |
|
4289 fileInput.onchange = function (e) { |
|
4290 resolve(Array.prototype.slice.call(e.target.files)); |
|
4291 }; |
|
4292 fileInput.click(); |
|
4293 fileInput.parentNode.removeChild(fileInput); |
|
4294 }); |
|
4295 }; |
|
4296 var Picker = { pickFile: pickFile }; |
|
4297 |
|
4298 var count$1 = 0; |
|
4299 var seed = function () { |
|
4300 var rnd = function () { |
|
4301 return Math.round(Math.random() * 4294967295).toString(36); |
|
4302 }; |
|
4303 return 's' + Date.now().toString(36) + rnd() + rnd() + rnd(); |
|
4304 }; |
|
4305 var uuid = function (prefix) { |
|
4306 return prefix + count$1++ + seed(); |
|
4307 }; |
|
4308 var Uuid = { uuid: uuid }; |
|
4309 |
|
4310 var create$1 = function (dom, rng) { |
|
4311 var bookmark = {}; |
|
4312 function setupEndPoint(start) { |
|
4313 var offsetNode, container, offset; |
|
4314 container = rng[start ? 'startContainer' : 'endContainer']; |
|
4315 offset = rng[start ? 'startOffset' : 'endOffset']; |
|
4316 if (container.nodeType === 1) { |
|
4317 offsetNode = dom.create('span', { 'data-mce-type': 'bookmark' }); |
|
4318 if (container.hasChildNodes()) { |
|
4319 offset = Math.min(offset, container.childNodes.length - 1); |
|
4320 if (start) { |
|
4321 container.insertBefore(offsetNode, container.childNodes[offset]); |
1266 } else { |
4322 } else { |
1267 if (item.items) { |
4323 dom.insertAfter(offsetNode, container.childNodes[offset]); |
1268 collect(item.items(), selector, index + 1); |
4324 } |
|
4325 } else { |
|
4326 container.appendChild(offsetNode); |
|
4327 } |
|
4328 container = offsetNode; |
|
4329 offset = 0; |
|
4330 } |
|
4331 bookmark[start ? 'startContainer' : 'endContainer'] = container; |
|
4332 bookmark[start ? 'startOffset' : 'endOffset'] = offset; |
|
4333 } |
|
4334 setupEndPoint(true); |
|
4335 if (!rng.collapsed) { |
|
4336 setupEndPoint(); |
|
4337 } |
|
4338 return bookmark; |
|
4339 }; |
|
4340 var resolve$1 = function (dom, bookmark) { |
|
4341 function restoreEndPoint(start) { |
|
4342 var container, offset, node; |
|
4343 function nodeIndex(container) { |
|
4344 var node = container.parentNode.firstChild, idx = 0; |
|
4345 while (node) { |
|
4346 if (node === container) { |
|
4347 return idx; |
|
4348 } |
|
4349 if (node.nodeType !== 1 || node.getAttribute('data-mce-type') !== 'bookmark') { |
|
4350 idx++; |
|
4351 } |
|
4352 node = node.nextSibling; |
|
4353 } |
|
4354 return -1; |
|
4355 } |
|
4356 container = node = bookmark[start ? 'startContainer' : 'endContainer']; |
|
4357 offset = bookmark[start ? 'startOffset' : 'endOffset']; |
|
4358 if (!container) { |
|
4359 return; |
|
4360 } |
|
4361 if (container.nodeType === 1) { |
|
4362 offset = nodeIndex(container); |
|
4363 container = container.parentNode; |
|
4364 dom.remove(node); |
|
4365 } |
|
4366 bookmark[start ? 'startContainer' : 'endContainer'] = container; |
|
4367 bookmark[start ? 'startOffset' : 'endOffset'] = offset; |
|
4368 } |
|
4369 restoreEndPoint(true); |
|
4370 restoreEndPoint(); |
|
4371 var rng = dom.createRng(); |
|
4372 rng.setStart(bookmark.startContainer, bookmark.startOffset); |
|
4373 if (bookmark.endContainer) { |
|
4374 rng.setEnd(bookmark.endContainer, bookmark.endOffset); |
|
4375 } |
|
4376 return rng; |
|
4377 }; |
|
4378 var Bookmark = { |
|
4379 create: create$1, |
|
4380 resolve: resolve$1 |
|
4381 }; |
|
4382 |
|
4383 var global$d = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker'); |
|
4384 |
|
4385 var global$e = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils'); |
|
4386 |
|
4387 var getSelectedElements = function (rootElm, startNode, endNode) { |
|
4388 var walker, node; |
|
4389 var elms = []; |
|
4390 walker = new global$d(startNode, rootElm); |
|
4391 for (node = startNode; node; node = walker.next()) { |
|
4392 if (node.nodeType === 1) { |
|
4393 elms.push(node); |
|
4394 } |
|
4395 if (node === endNode) { |
|
4396 break; |
|
4397 } |
|
4398 } |
|
4399 return elms; |
|
4400 }; |
|
4401 var unwrapElements = function (editor, elms) { |
|
4402 var bookmark, dom, selection; |
|
4403 dom = editor.dom; |
|
4404 selection = editor.selection; |
|
4405 bookmark = Bookmark.create(dom, selection.getRng()); |
|
4406 global$4.each(elms, function (elm) { |
|
4407 editor.dom.remove(elm, true); |
|
4408 }); |
|
4409 selection.setRng(Bookmark.resolve(dom, bookmark)); |
|
4410 }; |
|
4411 var isLink = function (elm) { |
|
4412 return elm.nodeName === 'A' && elm.hasAttribute('href'); |
|
4413 }; |
|
4414 var getParentAnchorOrSelf = function (dom, elm) { |
|
4415 var anchorElm = dom.getParent(elm, isLink); |
|
4416 return anchorElm ? anchorElm : elm; |
|
4417 }; |
|
4418 var getSelectedAnchors = function (editor) { |
|
4419 var startElm, endElm, rootElm, anchorElms, selection, dom, rng; |
|
4420 selection = editor.selection; |
|
4421 dom = editor.dom; |
|
4422 rng = selection.getRng(); |
|
4423 startElm = getParentAnchorOrSelf(dom, global$e.getNode(rng.startContainer, rng.startOffset)); |
|
4424 endElm = global$e.getNode(rng.endContainer, rng.endOffset); |
|
4425 rootElm = editor.getBody(); |
|
4426 anchorElms = global$4.grep(getSelectedElements(rootElm, startElm, endElm), isLink); |
|
4427 return anchorElms; |
|
4428 }; |
|
4429 var unlinkSelection = function (editor) { |
|
4430 unwrapElements(editor, getSelectedAnchors(editor)); |
|
4431 }; |
|
4432 var Unlink = { unlinkSelection: unlinkSelection }; |
|
4433 |
|
4434 var createTableHtml = function (cols, rows) { |
|
4435 var x, y, html; |
|
4436 html = '<table data-mce-id="mce" style="width: 100%">'; |
|
4437 html += '<tbody>'; |
|
4438 for (y = 0; y < rows; y++) { |
|
4439 html += '<tr>'; |
|
4440 for (x = 0; x < cols; x++) { |
|
4441 html += '<td><br></td>'; |
|
4442 } |
|
4443 html += '</tr>'; |
|
4444 } |
|
4445 html += '</tbody>'; |
|
4446 html += '</table>'; |
|
4447 return html; |
|
4448 }; |
|
4449 var getInsertedElement = function (editor) { |
|
4450 var elms = editor.dom.select('*[data-mce-id]'); |
|
4451 return elms[0]; |
|
4452 }; |
|
4453 var insertTableHtml = function (editor, cols, rows) { |
|
4454 editor.undoManager.transact(function () { |
|
4455 var tableElm, cellElm; |
|
4456 editor.insertContent(createTableHtml(cols, rows)); |
|
4457 tableElm = getInsertedElement(editor); |
|
4458 tableElm.removeAttribute('data-mce-id'); |
|
4459 cellElm = editor.dom.select('td,th', tableElm); |
|
4460 editor.selection.setCursorLocation(cellElm[0], 0); |
|
4461 }); |
|
4462 }; |
|
4463 var insertTable = function (editor, cols, rows) { |
|
4464 editor.plugins.table ? editor.plugins.table.insertTable(cols, rows) : insertTableHtml(editor, cols, rows); |
|
4465 }; |
|
4466 var formatBlock = function (editor, formatName) { |
|
4467 editor.execCommand('FormatBlock', false, formatName); |
|
4468 }; |
|
4469 var insertBlob = function (editor, base64, blob) { |
|
4470 var blobCache, blobInfo; |
|
4471 blobCache = editor.editorUpload.blobCache; |
|
4472 blobInfo = blobCache.create(Uuid.uuid('mceu'), blob, base64); |
|
4473 blobCache.add(blobInfo); |
|
4474 editor.insertContent(editor.dom.createHTML('img', { src: blobInfo.blobUri() })); |
|
4475 }; |
|
4476 var collapseSelectionToEnd = function (editor) { |
|
4477 editor.selection.collapse(false); |
|
4478 }; |
|
4479 var unlink = function (editor) { |
|
4480 editor.focus(); |
|
4481 Unlink.unlinkSelection(editor); |
|
4482 collapseSelectionToEnd(editor); |
|
4483 }; |
|
4484 var changeHref = function (editor, elm, url) { |
|
4485 editor.focus(); |
|
4486 editor.dom.setAttrib(elm, 'href', url); |
|
4487 collapseSelectionToEnd(editor); |
|
4488 }; |
|
4489 var insertLink = function (editor, url) { |
|
4490 editor.execCommand('mceInsertLink', false, { href: url }); |
|
4491 collapseSelectionToEnd(editor); |
|
4492 }; |
|
4493 var updateOrInsertLink = function (editor, url) { |
|
4494 var elm = editor.dom.getParent(editor.selection.getStart(), 'a[href]'); |
|
4495 elm ? changeHref(editor, elm, url) : insertLink(editor, url); |
|
4496 }; |
|
4497 var createLink = function (editor, url) { |
|
4498 url.trim().length === 0 ? unlink(editor) : updateOrInsertLink(editor, url); |
|
4499 }; |
|
4500 var Actions = { |
|
4501 insertTable: insertTable, |
|
4502 formatBlock: formatBlock, |
|
4503 insertBlob: insertBlob, |
|
4504 createLink: createLink, |
|
4505 unlink: unlink |
|
4506 }; |
|
4507 |
|
4508 var addHeaderButtons = function (editor) { |
|
4509 var formatBlock = function (name) { |
|
4510 return function () { |
|
4511 Actions.formatBlock(editor, name); |
|
4512 }; |
|
4513 }; |
|
4514 for (var i = 1; i < 6; i++) { |
|
4515 var name = 'h' + i; |
|
4516 editor.addButton(name, { |
|
4517 text: name.toUpperCase(), |
|
4518 tooltip: 'Heading ' + i, |
|
4519 stateSelector: name, |
|
4520 onclick: formatBlock(name), |
|
4521 onPostRender: function () { |
|
4522 var span = this.getEl().firstChild.firstChild; |
|
4523 span.style.fontWeight = 'bold'; |
|
4524 } |
|
4525 }); |
|
4526 } |
|
4527 }; |
|
4528 var addToEditor = function (editor, panel) { |
|
4529 editor.addButton('quicklink', { |
|
4530 icon: 'link', |
|
4531 tooltip: 'Insert/Edit link', |
|
4532 stateSelector: 'a[href]', |
|
4533 onclick: function () { |
|
4534 panel.showForm(editor, 'quicklink'); |
|
4535 } |
|
4536 }); |
|
4537 editor.addButton('quickimage', { |
|
4538 icon: 'image', |
|
4539 tooltip: 'Insert image', |
|
4540 onclick: function () { |
|
4541 Picker.pickFile().then(function (files) { |
|
4542 var blob = files[0]; |
|
4543 Conversions.blobToBase64(blob).then(function (base64) { |
|
4544 Actions.insertBlob(editor, base64, blob); |
|
4545 }); |
|
4546 }); |
|
4547 } |
|
4548 }); |
|
4549 editor.addButton('quicktable', { |
|
4550 icon: 'table', |
|
4551 tooltip: 'Insert table', |
|
4552 onclick: function () { |
|
4553 panel.hide(); |
|
4554 Actions.insertTable(editor, 2, 2); |
|
4555 } |
|
4556 }); |
|
4557 addHeaderButtons(editor); |
|
4558 }; |
|
4559 var Buttons = { addToEditor: addToEditor }; |
|
4560 |
|
4561 var getUiContainerDelta$1 = function () { |
|
4562 var uiContainer = global$1.container; |
|
4563 if (uiContainer && global$2.DOM.getStyle(uiContainer, 'position', true) !== 'static') { |
|
4564 var containerPos = global$2.DOM.getPos(uiContainer); |
|
4565 var dx = containerPos.x - uiContainer.scrollLeft; |
|
4566 var dy = containerPos.y - uiContainer.scrollTop; |
|
4567 return Option.some({ |
|
4568 x: dx, |
|
4569 y: dy |
|
4570 }); |
|
4571 } else { |
|
4572 return Option.none(); |
|
4573 } |
|
4574 }; |
|
4575 var UiContainer$1 = { getUiContainerDelta: getUiContainerDelta$1 }; |
|
4576 |
|
4577 var isDomainLike = function (href) { |
|
4578 return /^www\.|\.(com|org|edu|gov|uk|net|ca|de|jp|fr|au|us|ru|ch|it|nl|se|no|es|mil)$/i.test(href.trim()); |
|
4579 }; |
|
4580 var isAbsolute = function (href) { |
|
4581 return /^https?:\/\//.test(href.trim()); |
|
4582 }; |
|
4583 var UrlType = { |
|
4584 isDomainLike: isDomainLike, |
|
4585 isAbsolute: isAbsolute |
|
4586 }; |
|
4587 |
|
4588 var focusFirstTextBox = function (form) { |
|
4589 form.find('textbox').eq(0).each(function (ctrl) { |
|
4590 ctrl.focus(); |
|
4591 }); |
|
4592 }; |
|
4593 var createForm = function (name, spec) { |
|
4594 var form = global$b.create(global$4.extend({ |
|
4595 type: 'form', |
|
4596 layout: 'flex', |
|
4597 direction: 'row', |
|
4598 padding: 5, |
|
4599 name: name, |
|
4600 spacing: 3 |
|
4601 }, spec)); |
|
4602 form.on('show', function () { |
|
4603 focusFirstTextBox(form); |
|
4604 }); |
|
4605 return form; |
|
4606 }; |
|
4607 var toggleVisibility = function (ctrl, state) { |
|
4608 return state ? ctrl.show() : ctrl.hide(); |
|
4609 }; |
|
4610 var askAboutPrefix = function (editor, href) { |
|
4611 return new global$c(function (resolve) { |
|
4612 editor.windowManager.confirm('The URL you entered seems to be an external link. Do you want to add the required http:// prefix?', function (result) { |
|
4613 var output = result === true ? 'http://' + href : href; |
|
4614 resolve(output); |
|
4615 }); |
|
4616 }); |
|
4617 }; |
|
4618 var convertLinkToAbsolute = function (editor, href) { |
|
4619 return !UrlType.isAbsolute(href) && UrlType.isDomainLike(href) ? askAboutPrefix(editor, href) : global$c.resolve(href); |
|
4620 }; |
|
4621 var createQuickLinkForm = function (editor, hide) { |
|
4622 var attachState = {}; |
|
4623 var unlink = function () { |
|
4624 editor.focus(); |
|
4625 Actions.unlink(editor); |
|
4626 hide(); |
|
4627 }; |
|
4628 var onChangeHandler = function (e) { |
|
4629 var meta = e.meta; |
|
4630 if (meta && meta.attach) { |
|
4631 attachState = { |
|
4632 href: this.value(), |
|
4633 attach: meta.attach |
|
4634 }; |
|
4635 } |
|
4636 }; |
|
4637 var onShowHandler = function (e) { |
|
4638 if (e.control === this) { |
|
4639 var elm = void 0, linkurl = ''; |
|
4640 elm = editor.dom.getParent(editor.selection.getStart(), 'a[href]'); |
|
4641 if (elm) { |
|
4642 linkurl = editor.dom.getAttrib(elm, 'href'); |
|
4643 } |
|
4644 this.fromJSON({ linkurl: linkurl }); |
|
4645 toggleVisibility(this.find('#unlink'), elm); |
|
4646 this.find('#linkurl')[0].focus(); |
|
4647 } |
|
4648 }; |
|
4649 return createForm('quicklink', { |
|
4650 items: [ |
|
4651 { |
|
4652 type: 'button', |
|
4653 name: 'unlink', |
|
4654 icon: 'unlink', |
|
4655 onclick: unlink, |
|
4656 tooltip: 'Remove link' |
|
4657 }, |
|
4658 { |
|
4659 type: 'filepicker', |
|
4660 name: 'linkurl', |
|
4661 placeholder: 'Paste or type a link', |
|
4662 filetype: 'file', |
|
4663 onchange: onChangeHandler |
|
4664 }, |
|
4665 { |
|
4666 type: 'button', |
|
4667 icon: 'checkmark', |
|
4668 subtype: 'primary', |
|
4669 tooltip: 'Ok', |
|
4670 onclick: 'submit' |
|
4671 } |
|
4672 ], |
|
4673 onshow: onShowHandler, |
|
4674 onsubmit: function (e) { |
|
4675 convertLinkToAbsolute(editor, e.data.linkurl).then(function (url) { |
|
4676 editor.undoManager.transact(function () { |
|
4677 if (url === attachState.href) { |
|
4678 attachState.attach(); |
|
4679 attachState = {}; |
1269 } |
4680 } |
1270 } |
4681 Actions.createLink(editor, url); |
1271 } else if (filters.direct) { |
4682 }); |
|
4683 hide(); |
|
4684 }); |
|
4685 } |
|
4686 }); |
|
4687 }; |
|
4688 var Forms = { createQuickLinkForm: createQuickLinkForm }; |
|
4689 |
|
4690 var getSelectorStateResult = function (itemName, item) { |
|
4691 var result = function (selector, handler) { |
|
4692 return { |
|
4693 selector: selector, |
|
4694 handler: handler |
|
4695 }; |
|
4696 }; |
|
4697 var activeHandler = function (state) { |
|
4698 item.active(state); |
|
4699 }; |
|
4700 var disabledHandler = function (state) { |
|
4701 item.disabled(state); |
|
4702 }; |
|
4703 if (item.settings.stateSelector) { |
|
4704 return result(item.settings.stateSelector, activeHandler); |
|
4705 } |
|
4706 if (item.settings.disabledStateSelector) { |
|
4707 return result(item.settings.disabledStateSelector, disabledHandler); |
|
4708 } |
|
4709 return null; |
|
4710 }; |
|
4711 var bindSelectorChanged = function (editor, itemName, item) { |
|
4712 return function () { |
|
4713 var result = getSelectorStateResult(itemName, item); |
|
4714 if (result !== null) { |
|
4715 editor.selection.selectorChanged(result.selector, result.handler); |
|
4716 } |
|
4717 }; |
|
4718 }; |
|
4719 var itemsToArray$1 = function (items) { |
|
4720 if (Type.isArray(items)) { |
|
4721 return items; |
|
4722 } else if (Type.isString(items)) { |
|
4723 return items.split(/[ ,]/); |
|
4724 } |
|
4725 return []; |
|
4726 }; |
|
4727 var create$2 = function (editor, name, items) { |
|
4728 var toolbarItems = []; |
|
4729 var buttonGroup; |
|
4730 if (!items) { |
|
4731 return; |
|
4732 } |
|
4733 global$4.each(itemsToArray$1(items), function (item) { |
|
4734 if (item === '|') { |
|
4735 buttonGroup = null; |
|
4736 } else { |
|
4737 if (editor.buttons[item]) { |
|
4738 if (!buttonGroup) { |
|
4739 buttonGroup = { |
|
4740 type: 'buttongroup', |
|
4741 items: [] |
|
4742 }; |
|
4743 toolbarItems.push(buttonGroup); |
|
4744 } |
|
4745 var button = editor.buttons[item]; |
|
4746 if (Type.isFunction(button)) { |
|
4747 button = button(); |
|
4748 } |
|
4749 button.type = button.type || 'button'; |
|
4750 button = global$b.create(button); |
|
4751 button.on('postRender', bindSelectorChanged(editor, item, button)); |
|
4752 buttonGroup.items.push(button); |
|
4753 } |
|
4754 } |
|
4755 }); |
|
4756 return global$b.create({ |
|
4757 type: 'toolbar', |
|
4758 layout: 'flow', |
|
4759 name: name, |
|
4760 items: toolbarItems |
|
4761 }); |
|
4762 }; |
|
4763 var Toolbar = { create: create$2 }; |
|
4764 |
|
4765 var create$3 = function () { |
|
4766 var panel, currentRect; |
|
4767 var createToolbars = function (editor, toolbars) { |
|
4768 return global$4.map(toolbars, function (toolbar) { |
|
4769 return Toolbar.create(editor, toolbar.id, toolbar.items); |
|
4770 }); |
|
4771 }; |
|
4772 var hasToolbarItems = function (toolbar) { |
|
4773 return toolbar.items().length > 0; |
|
4774 }; |
|
4775 var create = function (editor, toolbars) { |
|
4776 var items = createToolbars(editor, toolbars).concat([ |
|
4777 Toolbar.create(editor, 'text', Settings.getTextSelectionToolbarItems(editor)), |
|
4778 Toolbar.create(editor, 'insert', Settings.getInsertToolbarItems(editor)), |
|
4779 Forms.createQuickLinkForm(editor, hide) |
|
4780 ]); |
|
4781 return global$b.create({ |
|
4782 type: 'floatpanel', |
|
4783 role: 'dialog', |
|
4784 classes: 'tinymce tinymce-inline arrow', |
|
4785 ariaLabel: 'Inline toolbar', |
|
4786 layout: 'flex', |
|
4787 direction: 'column', |
|
4788 align: 'stretch', |
|
4789 autohide: false, |
|
4790 autofix: true, |
|
4791 fixed: true, |
|
4792 border: 1, |
|
4793 items: global$4.grep(items, hasToolbarItems), |
|
4794 oncancel: function () { |
|
4795 editor.focus(); |
|
4796 } |
|
4797 }); |
|
4798 }; |
|
4799 var showPanel = function (panel) { |
|
4800 if (panel) { |
|
4801 panel.show(); |
|
4802 } |
|
4803 }; |
|
4804 var movePanelTo = function (panel, pos) { |
|
4805 panel.moveTo(pos.x, pos.y); |
|
4806 }; |
|
4807 var togglePositionClass = function (panel, relPos) { |
|
4808 relPos = relPos ? relPos.substr(0, 2) : ''; |
|
4809 global$4.each({ |
|
4810 t: 'down', |
|
4811 b: 'up', |
|
4812 c: 'center' |
|
4813 }, function (cls, pos) { |
|
4814 panel.classes.toggle('arrow-' + cls, pos === relPos.substr(0, 1)); |
|
4815 }); |
|
4816 if (relPos === 'cr') { |
|
4817 panel.classes.toggle('arrow-left', true); |
|
4818 panel.classes.toggle('arrow-right', false); |
|
4819 } else if (relPos === 'cl') { |
|
4820 panel.classes.toggle('arrow-left', false); |
|
4821 panel.classes.toggle('arrow-right', true); |
|
4822 } else { |
|
4823 global$4.each({ |
|
4824 l: 'left', |
|
4825 r: 'right' |
|
4826 }, function (cls, pos) { |
|
4827 panel.classes.toggle('arrow-' + cls, pos === relPos.substr(1, 1)); |
|
4828 }); |
|
4829 } |
|
4830 }; |
|
4831 var showToolbar = function (panel, id) { |
|
4832 var toolbars = panel.items().filter('#' + id); |
|
4833 if (toolbars.length > 0) { |
|
4834 toolbars[0].show(); |
|
4835 panel.reflow(); |
|
4836 return true; |
|
4837 } |
|
4838 return false; |
|
4839 }; |
|
4840 var repositionPanelAt = function (panel, id, editor, targetRect) { |
|
4841 var contentAreaRect, panelRect, result, userConstainHandler; |
|
4842 userConstainHandler = Settings.getPositionHandler(editor); |
|
4843 contentAreaRect = Measure.getContentAreaRect(editor); |
|
4844 panelRect = global$2.DOM.getRect(panel.getEl()); |
|
4845 if (id === 'insert') { |
|
4846 result = Layout.calcInsert(targetRect, contentAreaRect, panelRect); |
|
4847 } else { |
|
4848 result = Layout.calc(targetRect, contentAreaRect, panelRect); |
|
4849 } |
|
4850 if (result) { |
|
4851 var delta = UiContainer$1.getUiContainerDelta().getOr({ |
|
4852 x: 0, |
|
4853 y: 0 |
|
4854 }); |
|
4855 var transposedPanelRect = { |
|
4856 x: result.rect.x - delta.x, |
|
4857 y: result.rect.y - delta.y, |
|
4858 w: result.rect.w, |
|
4859 h: result.rect.h |
|
4860 }; |
|
4861 currentRect = targetRect; |
|
4862 movePanelTo(panel, Layout.userConstrain(userConstainHandler, targetRect, contentAreaRect, transposedPanelRect)); |
|
4863 togglePositionClass(panel, result.position); |
|
4864 return true; |
|
4865 } else { |
|
4866 return false; |
|
4867 } |
|
4868 }; |
|
4869 var showPanelAt = function (panel, id, editor, targetRect) { |
|
4870 showPanel(panel); |
|
4871 panel.items().hide(); |
|
4872 if (!showToolbar(panel, id)) { |
|
4873 hide(); |
|
4874 return; |
|
4875 } |
|
4876 if (repositionPanelAt(panel, id, editor, targetRect) === false) { |
|
4877 hide(); |
|
4878 } |
|
4879 }; |
|
4880 var hasFormVisible = function () { |
|
4881 return panel.items().filter('form:visible').length > 0; |
|
4882 }; |
|
4883 var showForm = function (editor, id) { |
|
4884 if (panel) { |
|
4885 panel.items().hide(); |
|
4886 if (!showToolbar(panel, id)) { |
|
4887 hide(); |
1272 return; |
4888 return; |
1273 } |
4889 } |
1274 if (item.items) { |
4890 var contentAreaRect = void 0, panelRect = void 0, result = void 0, userConstainHandler = void 0; |
1275 collect(item.items(), selector, index); |
4891 showPanel(panel); |
1276 } |
4892 panel.items().hide(); |
1277 } |
4893 showToolbar(panel, id); |
1278 } |
4894 userConstainHandler = Settings.getPositionHandler(editor); |
1279 if (container.items) { |
4895 contentAreaRect = Measure.getContentAreaRect(editor); |
1280 for (i = 0, l = selectors.length; i < l; i++) { |
4896 panelRect = global$2.DOM.getRect(panel.getEl()); |
1281 collect(container.items(), selectors[i], 0); |
4897 result = Layout.calc(currentRect, contentAreaRect, panelRect); |
1282 } |
4898 if (result) { |
1283 if (l > 1) { |
4899 panelRect = result.rect; |
1284 matches = unique(matches); |
4900 movePanelTo(panel, Layout.userConstrain(userConstainHandler, currentRect, contentAreaRect, panelRect)); |
1285 } |
4901 togglePositionClass(panel, result.position); |
1286 } |
4902 } |
1287 if (!Collection) { |
4903 } |
1288 Collection = Selector.Collection; |
4904 }; |
1289 } |
4905 var show = function (editor, id, targetRect, toolbars) { |
1290 return new Collection(matches); |
4906 if (!panel) { |
1291 } |
4907 Events.fireBeforeRenderUI(editor); |
1292 }); |
4908 panel = create(editor, toolbars); |
1293 |
4909 panel.renderTo().reflow().moveTo(targetRect.x, targetRect.y); |
1294 var Collection$1; |
4910 editor.nodeChanged(); |
1295 var proto; |
4911 } |
1296 var push$1 = Array.prototype.push; |
4912 showPanelAt(panel, id, editor, targetRect); |
1297 var slice$1 = Array.prototype.slice; |
4913 }; |
1298 proto = { |
4914 var reposition = function (editor, id, targetRect) { |
1299 length: 0, |
4915 if (panel) { |
1300 init: function (items) { |
4916 repositionPanelAt(panel, id, editor, targetRect); |
1301 if (items) { |
4917 } |
1302 this.add(items); |
4918 }; |
1303 } |
4919 var hide = function () { |
1304 }, |
4920 if (panel) { |
1305 add: function (items) { |
4921 panel.hide(); |
1306 var self = this; |
4922 } |
1307 if (!global$4.isArray(items)) { |
4923 }; |
1308 if (items instanceof Collection$1) { |
4924 var focus = function () { |
1309 self.add(items.toArray()); |
4925 if (panel) { |
|
4926 panel.find('toolbar:visible').eq(0).each(function (item) { |
|
4927 item.focus(true); |
|
4928 }); |
|
4929 } |
|
4930 }; |
|
4931 var remove = function () { |
|
4932 if (panel) { |
|
4933 panel.remove(); |
|
4934 panel = null; |
|
4935 } |
|
4936 }; |
|
4937 var inForm = function () { |
|
4938 return panel && panel.visible() && hasFormVisible(); |
|
4939 }; |
|
4940 return { |
|
4941 show: show, |
|
4942 showForm: showForm, |
|
4943 reposition: reposition, |
|
4944 inForm: inForm, |
|
4945 hide: hide, |
|
4946 focus: focus, |
|
4947 remove: remove |
|
4948 }; |
|
4949 }; |
|
4950 |
|
4951 var Layout$1 = global$8.extend({ |
|
4952 Defaults: { |
|
4953 firstControlClass: 'first', |
|
4954 lastControlClass: 'last' |
|
4955 }, |
|
4956 init: function (settings) { |
|
4957 this.settings = global$4.extend({}, this.Defaults, settings); |
|
4958 }, |
|
4959 preRender: function (container) { |
|
4960 container.bodyClasses.add(this.settings.containerClass); |
|
4961 }, |
|
4962 applyClasses: function (items) { |
|
4963 var self = this; |
|
4964 var settings = self.settings; |
|
4965 var firstClass, lastClass, firstItem, lastItem; |
|
4966 firstClass = settings.firstControlClass; |
|
4967 lastClass = settings.lastControlClass; |
|
4968 items.each(function (item) { |
|
4969 item.classes.remove(firstClass).remove(lastClass).add(settings.controlClass); |
|
4970 if (item.visible()) { |
|
4971 if (!firstItem) { |
|
4972 firstItem = item; |
|
4973 } |
|
4974 lastItem = item; |
|
4975 } |
|
4976 }); |
|
4977 if (firstItem) { |
|
4978 firstItem.classes.add(firstClass); |
|
4979 } |
|
4980 if (lastItem) { |
|
4981 lastItem.classes.add(lastClass); |
|
4982 } |
|
4983 }, |
|
4984 renderHtml: function (container) { |
|
4985 var self = this; |
|
4986 var html = ''; |
|
4987 self.applyClasses(container.items()); |
|
4988 container.items().each(function (item) { |
|
4989 html += item.renderHtml(); |
|
4990 }); |
|
4991 return html; |
|
4992 }, |
|
4993 recalc: function () { |
|
4994 }, |
|
4995 postRender: function () { |
|
4996 }, |
|
4997 isNative: function () { |
|
4998 return false; |
|
4999 } |
|
5000 }); |
|
5001 |
|
5002 var AbsoluteLayout = Layout$1.extend({ |
|
5003 Defaults: { |
|
5004 containerClass: 'abs-layout', |
|
5005 controlClass: 'abs-layout-item' |
|
5006 }, |
|
5007 recalc: function (container) { |
|
5008 container.items().filter(':visible').each(function (ctrl) { |
|
5009 var settings = ctrl.settings; |
|
5010 ctrl.layoutRect({ |
|
5011 x: settings.x, |
|
5012 y: settings.y, |
|
5013 w: settings.w, |
|
5014 h: settings.h |
|
5015 }); |
|
5016 if (ctrl.recalc) { |
|
5017 ctrl.recalc(); |
|
5018 } |
|
5019 }); |
|
5020 }, |
|
5021 renderHtml: function (container) { |
|
5022 return '<div id="' + container._id + '-absend" class="' + container.classPrefix + 'abs-end"></div>' + this._super(container); |
|
5023 } |
|
5024 }); |
|
5025 |
|
5026 var Button = Widget.extend({ |
|
5027 Defaults: { |
|
5028 classes: 'widget btn', |
|
5029 role: 'button' |
|
5030 }, |
|
5031 init: function (settings) { |
|
5032 var self = this; |
|
5033 var size; |
|
5034 self._super(settings); |
|
5035 settings = self.settings; |
|
5036 size = self.settings.size; |
|
5037 self.on('click mousedown', function (e) { |
|
5038 e.preventDefault(); |
|
5039 }); |
|
5040 self.on('touchstart', function (e) { |
|
5041 self.fire('click', e); |
|
5042 e.preventDefault(); |
|
5043 }); |
|
5044 if (settings.subtype) { |
|
5045 self.classes.add(settings.subtype); |
|
5046 } |
|
5047 if (size) { |
|
5048 self.classes.add('btn-' + size); |
|
5049 } |
|
5050 if (settings.icon) { |
|
5051 self.icon(settings.icon); |
|
5052 } |
|
5053 }, |
|
5054 icon: function (icon) { |
|
5055 if (!arguments.length) { |
|
5056 return this.state.get('icon'); |
|
5057 } |
|
5058 this.state.set('icon', icon); |
|
5059 return this; |
|
5060 }, |
|
5061 repaint: function () { |
|
5062 var btnElm = this.getEl().firstChild; |
|
5063 var btnStyle; |
|
5064 if (btnElm) { |
|
5065 btnStyle = btnElm.style; |
|
5066 btnStyle.width = btnStyle.height = '100%'; |
|
5067 } |
|
5068 this._super(); |
|
5069 }, |
|
5070 renderHtml: function () { |
|
5071 var self = this, id = self._id, prefix = self.classPrefix; |
|
5072 var icon = self.state.get('icon'), image; |
|
5073 var text = self.state.get('text'); |
|
5074 var textHtml = ''; |
|
5075 var ariaPressed; |
|
5076 var settings = self.settings; |
|
5077 image = settings.image; |
|
5078 if (image) { |
|
5079 icon = 'none'; |
|
5080 if (typeof image !== 'string') { |
|
5081 image = domGlobals.window.getSelection ? image[0] : image[1]; |
|
5082 } |
|
5083 image = ' style="background-image: url(\'' + image + '\')"'; |
1310 } else { |
5084 } else { |
1311 push$1.call(self, items); |
5085 image = ''; |
1312 } |
5086 } |
1313 } else { |
5087 if (text) { |
1314 push$1.apply(self, items); |
5088 self.classes.add('btn-has-text'); |
1315 } |
5089 textHtml = '<span class="' + prefix + 'txt">' + self.encode(text) + '</span>'; |
1316 return self; |
5090 } |
1317 }, |
5091 icon = icon ? prefix + 'ico ' + prefix + 'i-' + icon : ''; |
1318 set: function (items) { |
5092 ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed="' + settings.active + '"' : ''; |
1319 var self = this; |
5093 return '<div id="' + id + '" class="' + self.classes + '" tabindex="-1"' + ariaPressed + '>' + '<button id="' + id + '-button" role="presentation" type="button" tabindex="-1">' + (icon ? '<i class="' + icon + '"' + image + '></i>' : '') + textHtml + '</button>' + '</div>'; |
1320 var len = self.length; |
5094 }, |
1321 var i; |
5095 bindStates: function () { |
1322 self.length = 0; |
5096 var self = this, $ = self.$, textCls = self.classPrefix + 'txt'; |
1323 self.add(items); |
5097 function setButtonText(text) { |
1324 for (i = self.length; i < len; i++) { |
5098 var $span = $('span.' + textCls, self.getEl()); |
1325 delete self[i]; |
5099 if (text) { |
1326 } |
5100 if (!$span[0]) { |
1327 return self; |
5101 $('button:first', self.getEl()).append('<span class="' + textCls + '"></span>'); |
1328 }, |
5102 $span = $('span.' + textCls, self.getEl()); |
1329 filter: function (selector) { |
5103 } |
1330 var self = this; |
5104 $span.html(self.encode(text)); |
1331 var i, l; |
5105 } else { |
1332 var matches = []; |
5106 $span.remove(); |
1333 var item, match; |
5107 } |
1334 if (typeof selector === 'string') { |
5108 self.classes.toggle('btn-has-text', !!text); |
1335 selector = new Selector(selector); |
5109 } |
1336 match = function (item) { |
5110 self.state.on('change:text', function (e) { |
1337 return selector.match(item); |
5111 setButtonText(e.value); |
1338 }; |
5112 }); |
1339 } else { |
5113 self.state.on('change:icon', function (e) { |
1340 match = selector; |
5114 var icon = e.value; |
1341 } |
5115 var prefix = self.classPrefix; |
1342 for (i = 0, l = self.length; i < l; i++) { |
5116 self.settings.icon = icon; |
1343 item = self[i]; |
5117 icon = icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : ''; |
1344 if (match(item)) { |
5118 var btnElm = self.getEl().firstChild; |
1345 matches.push(item); |
5119 var iconElm = btnElm.getElementsByTagName('i')[0]; |
1346 } |
5120 if (icon) { |
1347 } |
5121 if (!iconElm || iconElm !== btnElm.firstChild) { |
1348 return new Collection$1(matches); |
5122 iconElm = domGlobals.document.createElement('i'); |
1349 }, |
5123 btnElm.insertBefore(iconElm, btnElm.firstChild); |
1350 slice: function () { |
5124 } |
1351 return new Collection$1(slice$1.apply(this, arguments)); |
5125 iconElm.className = icon; |
1352 }, |
5126 } else if (iconElm) { |
1353 eq: function (index) { |
5127 btnElm.removeChild(iconElm); |
1354 return index === -1 ? this.slice(index) : this.slice(index, +index + 1); |
5128 } |
1355 }, |
5129 setButtonText(self.state.get('text')); |
1356 each: function (callback) { |
5130 }); |
1357 global$4.each(this, callback); |
5131 return self._super(); |
1358 return this; |
|
1359 }, |
|
1360 toArray: function () { |
|
1361 return global$4.toArray(this); |
|
1362 }, |
|
1363 indexOf: function (ctrl) { |
|
1364 var self = this; |
|
1365 var i = self.length; |
|
1366 while (i--) { |
|
1367 if (self[i] === ctrl) { |
|
1368 break; |
|
1369 } |
|
1370 } |
|
1371 return i; |
|
1372 }, |
|
1373 reverse: function () { |
|
1374 return new Collection$1(global$4.toArray(this).reverse()); |
|
1375 }, |
|
1376 hasClass: function (cls) { |
|
1377 return this[0] ? this[0].classes.contains(cls) : false; |
|
1378 }, |
|
1379 prop: function (name, value) { |
|
1380 var self = this; |
|
1381 var item; |
|
1382 if (value !== undefined) { |
|
1383 self.each(function (item) { |
|
1384 if (item[name]) { |
|
1385 item[name](value); |
|
1386 } |
|
1387 }); |
|
1388 return self; |
|
1389 } |
|
1390 item = self[0]; |
|
1391 if (item && item[name]) { |
|
1392 return item[name](); |
|
1393 } |
|
1394 }, |
|
1395 exec: function (name) { |
|
1396 var self = this, args = global$4.toArray(arguments).slice(1); |
|
1397 self.each(function (item) { |
|
1398 if (item[name]) { |
|
1399 item[name].apply(item, args); |
|
1400 } |
|
1401 }); |
|
1402 return self; |
|
1403 }, |
|
1404 remove: function () { |
|
1405 var i = this.length; |
|
1406 while (i--) { |
|
1407 this[i].remove(); |
|
1408 } |
|
1409 return this; |
|
1410 }, |
|
1411 addClass: function (cls) { |
|
1412 return this.each(function (item) { |
|
1413 item.classes.add(cls); |
|
1414 }); |
|
1415 }, |
|
1416 removeClass: function (cls) { |
|
1417 return this.each(function (item) { |
|
1418 item.classes.remove(cls); |
|
1419 }); |
|
1420 } |
|
1421 }; |
|
1422 global$4.each('fire on off show hide append prepend before after reflow'.split(' '), function (name) { |
|
1423 proto[name] = function () { |
|
1424 var args = global$4.toArray(arguments); |
|
1425 this.each(function (ctrl) { |
|
1426 if (name in ctrl) { |
|
1427 ctrl[name].apply(ctrl, args); |
|
1428 } |
|
1429 }); |
|
1430 return this; |
|
1431 }; |
|
1432 }); |
|
1433 global$4.each('text name disabled active selected checked visible parent value data'.split(' '), function (name) { |
|
1434 proto[name] = function (value) { |
|
1435 return this.prop(name, value); |
|
1436 }; |
|
1437 }); |
|
1438 Collection$1 = global$8.extend(proto); |
|
1439 Selector.Collection = Collection$1; |
|
1440 var Collection$2 = Collection$1; |
|
1441 |
|
1442 var Binding = function (settings) { |
|
1443 this.create = settings.create; |
|
1444 }; |
|
1445 Binding.create = function (model, name) { |
|
1446 return new Binding({ |
|
1447 create: function (otherModel, otherName) { |
|
1448 var bindings; |
|
1449 var fromSelfToOther = function (e) { |
|
1450 otherModel.set(otherName, e.value); |
|
1451 }; |
|
1452 var fromOtherToSelf = function (e) { |
|
1453 model.set(name, e.value); |
|
1454 }; |
|
1455 otherModel.on('change:' + otherName, fromOtherToSelf); |
|
1456 model.on('change:' + name, fromSelfToOther); |
|
1457 bindings = otherModel._bindings; |
|
1458 if (!bindings) { |
|
1459 bindings = otherModel._bindings = []; |
|
1460 otherModel.on('destroy', function () { |
|
1461 var i = bindings.length; |
|
1462 while (i--) { |
|
1463 bindings[i](); |
|
1464 } |
|
1465 }); |
|
1466 } |
|
1467 bindings.push(function () { |
|
1468 model.off('change:' + name, fromSelfToOther); |
|
1469 }); |
|
1470 return model.get(name); |
|
1471 } |
5132 } |
1472 }); |
5133 }); |
1473 }; |
5134 |
1474 |
5135 var BrowseButton = Button.extend({ |
1475 var global$10 = tinymce.util.Tools.resolve('tinymce.util.Observable'); |
5136 init: function (settings) { |
1476 |
5137 var self = this; |
1477 function isNode(node) { |
5138 settings = global$4.extend({ |
1478 return node.nodeType > 0; |
5139 text: 'Browse...', |
1479 } |
5140 multiple: false, |
1480 function isEqual(a, b) { |
5141 accept: null |
1481 var k, checked; |
5142 }, settings); |
1482 if (a === b) { |
5143 self._super(settings); |
1483 return true; |
5144 self.classes.add('browsebutton'); |
1484 } |
5145 if (settings.multiple) { |
1485 if (a === null || b === null) { |
5146 self.classes.add('multiple'); |
1486 return a === b; |
5147 } |
1487 } |
5148 }, |
1488 if (typeof a !== 'object' || typeof b !== 'object') { |
5149 postRender: function () { |
1489 return a === b; |
5150 var self = this; |
1490 } |
5151 var input = funcs.create('input', { |
1491 if (global$4.isArray(b)) { |
5152 type: 'file', |
1492 if (a.length !== b.length) { |
5153 id: self._id + '-browse', |
1493 return false; |
5154 accept: self.settings.accept |
1494 } |
5155 }); |
1495 k = a.length; |
5156 self._super(); |
1496 while (k--) { |
5157 global$7(input).on('change', function (e) { |
1497 if (!isEqual(a[k], b[k])) { |
5158 var files = e.target.files; |
1498 return false; |
5159 self.value = function () { |
1499 } |
5160 if (!files.length) { |
1500 } |
5161 return null; |
1501 } |
5162 } else if (self.settings.multiple) { |
1502 if (isNode(a) || isNode(b)) { |
5163 return files; |
1503 return a === b; |
5164 } else { |
1504 } |
5165 return files[0]; |
1505 checked = {}; |
5166 } |
1506 for (k in b) { |
5167 }; |
1507 if (!isEqual(a[k], b[k])) { |
5168 e.preventDefault(); |
1508 return false; |
5169 if (files.length) { |
1509 } |
5170 self.fire('change', e); |
1510 checked[k] = true; |
5171 } |
1511 } |
5172 }); |
1512 for (k in a) { |
5173 global$7(input).on('click', function (e) { |
1513 if (!checked[k] && !isEqual(a[k], b[k])) { |
5174 e.stopPropagation(); |
1514 return false; |
5175 }); |
1515 } |
5176 global$7(self.getEl('button')).on('click', function (e) { |
1516 } |
5177 e.stopPropagation(); |
1517 return true; |
5178 input.click(); |
1518 } |
5179 }); |
1519 var ObservableObject = global$8.extend({ |
5180 self.getEl().appendChild(input); |
1520 Mixins: [global$10], |
5181 }, |
1521 init: function (data) { |
5182 remove: function () { |
1522 var name, value; |
5183 global$7(this.getEl('button')).off(); |
1523 data = data || {}; |
5184 global$7(this.getEl('input')).off(); |
1524 for (name in data) { |
5185 this._super(); |
1525 value = data[name]; |
5186 } |
1526 if (value instanceof Binding) { |
5187 }); |
1527 data[name] = value.create(this, name); |
5188 |
1528 } |
5189 var ButtonGroup = Container.extend({ |
1529 } |
5190 Defaults: { |
1530 this.data = data; |
5191 defaultType: 'button', |
1531 }, |
5192 role: 'group' |
1532 set: function (name, value) { |
5193 }, |
1533 var key, args; |
5194 renderHtml: function () { |
1534 var oldValue = this.data[name]; |
5195 var self = this, layout = self._layout; |
1535 if (value instanceof Binding) { |
5196 self.classes.add('btn-group'); |
1536 value = value.create(this, name); |
5197 self.preRender(); |
1537 } |
5198 layout.preRender(self); |
1538 if (typeof name === 'object') { |
5199 return '<div id="' + self._id + '" class="' + self.classes + '">' + '<div id="' + self._id + '-body">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</div>'; |
1539 for (key in name) { |
5200 } |
1540 this.set(key, name[key]); |
5201 }); |
1541 } |
5202 |
|
5203 var Checkbox = Widget.extend({ |
|
5204 Defaults: { |
|
5205 classes: 'checkbox', |
|
5206 role: 'checkbox', |
|
5207 checked: false |
|
5208 }, |
|
5209 init: function (settings) { |
|
5210 var self = this; |
|
5211 self._super(settings); |
|
5212 self.on('click mousedown', function (e) { |
|
5213 e.preventDefault(); |
|
5214 }); |
|
5215 self.on('click', function (e) { |
|
5216 e.preventDefault(); |
|
5217 if (!self.disabled()) { |
|
5218 self.checked(!self.checked()); |
|
5219 } |
|
5220 }); |
|
5221 self.checked(self.settings.checked); |
|
5222 }, |
|
5223 checked: function (state) { |
|
5224 if (!arguments.length) { |
|
5225 return this.state.get('checked'); |
|
5226 } |
|
5227 this.state.set('checked', state); |
1542 return this; |
5228 return this; |
1543 } |
5229 }, |
1544 if (!isEqual(oldValue, value)) { |
5230 value: function (state) { |
1545 this.data[name] = value; |
5231 if (!arguments.length) { |
1546 args = { |
5232 return this.checked(); |
1547 target: this, |
5233 } |
1548 name: name, |
5234 return this.checked(state); |
1549 value: value, |
5235 }, |
1550 oldValue: oldValue |
5236 renderHtml: function () { |
1551 }; |
5237 var self = this, id = self._id, prefix = self.classPrefix; |
1552 this.fire('change:' + name, args); |
5238 return '<div id="' + id + '" class="' + self.classes + '" unselectable="on" aria-labelledby="' + id + '-al" tabindex="-1">' + '<i class="' + prefix + 'ico ' + prefix + 'i-checkbox"></i>' + '<span id="' + id + '-al" class="' + prefix + 'label">' + self.encode(self.state.get('text')) + '</span>' + '</div>'; |
1553 this.fire('change', args); |
5239 }, |
1554 } |
5240 bindStates: function () { |
1555 return this; |
5241 var self = this; |
1556 }, |
5242 function checked(state) { |
1557 get: function (name) { |
5243 self.classes.toggle('checked', state); |
1558 return this.data[name]; |
5244 self.aria('checked', state); |
1559 }, |
5245 } |
1560 has: function (name) { |
5246 self.state.on('change:text', function (e) { |
1561 return name in this.data; |
5247 self.getEl('al').firstChild.data = self.translate(e.value); |
1562 }, |
5248 }); |
1563 bind: function (name) { |
5249 self.state.on('change:checked change:value', function (e) { |
1564 return Binding.create(this, name); |
5250 self.fire('change'); |
1565 }, |
5251 checked(e.value); |
1566 destroy: function () { |
5252 }); |
1567 this.fire('destroy'); |
5253 self.state.on('change:icon', function (e) { |
1568 } |
5254 var icon = e.value; |
1569 }); |
5255 var prefix = self.classPrefix; |
1570 |
5256 if (typeof icon === 'undefined') { |
1571 var dirtyCtrls = {}; |
5257 return self.settings.icon; |
1572 var animationFrameRequested; |
5258 } |
1573 var $_cqjgb518wjjgwek2f = { |
5259 self.settings.icon = icon; |
1574 add: function (ctrl) { |
5260 icon = icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : ''; |
1575 var parent$$1 = ctrl.parent(); |
5261 var btnElm = self.getEl().firstChild; |
1576 if (parent$$1) { |
5262 var iconElm = btnElm.getElementsByTagName('i')[0]; |
1577 if (!parent$$1._layout || parent$$1._layout.isNative()) { |
5263 if (icon) { |
1578 return; |
5264 if (!iconElm || iconElm !== btnElm.firstChild) { |
1579 } |
5265 iconElm = domGlobals.document.createElement('i'); |
1580 if (!dirtyCtrls[parent$$1._id]) { |
5266 btnElm.insertBefore(iconElm, btnElm.firstChild); |
1581 dirtyCtrls[parent$$1._id] = parent$$1; |
5267 } |
1582 } |
5268 iconElm.className = icon; |
1583 if (!animationFrameRequested) { |
5269 } else if (iconElm) { |
1584 animationFrameRequested = true; |
5270 btnElm.removeChild(iconElm); |
1585 global$3.requestAnimationFrame(function () { |
5271 } |
1586 var id, ctrl; |
5272 }); |
1587 animationFrameRequested = false; |
5273 if (self.state.get('checked')) { |
1588 for (id in dirtyCtrls) { |
5274 checked(true); |
1589 ctrl = dirtyCtrls[id]; |
5275 } |
1590 if (ctrl.state.get('rendered')) { |
5276 return self._super(); |
1591 ctrl.reflow(); |
5277 } |
|
5278 }); |
|
5279 |
|
5280 var global$f = tinymce.util.Tools.resolve('tinymce.util.VK'); |
|
5281 |
|
5282 var ComboBox = Widget.extend({ |
|
5283 init: function (settings) { |
|
5284 var self = this; |
|
5285 self._super(settings); |
|
5286 settings = self.settings; |
|
5287 self.classes.add('combobox'); |
|
5288 self.subinput = true; |
|
5289 self.ariaTarget = 'inp'; |
|
5290 settings.menu = settings.menu || settings.values; |
|
5291 if (settings.menu) { |
|
5292 settings.icon = 'caret'; |
|
5293 } |
|
5294 self.on('click', function (e) { |
|
5295 var elm = e.target; |
|
5296 var root = self.getEl(); |
|
5297 if (!global$7.contains(root, elm) && elm !== root) { |
|
5298 return; |
|
5299 } |
|
5300 while (elm && elm !== root) { |
|
5301 if (elm.id && elm.id.indexOf('-open') !== -1) { |
|
5302 self.fire('action'); |
|
5303 if (settings.menu) { |
|
5304 self.showMenu(); |
|
5305 if (e.aria) { |
|
5306 self.menu.items()[0].focus(); |
|
5307 } |
1592 } |
5308 } |
1593 } |
5309 } |
1594 dirtyCtrls = {}; |
5310 elm = elm.parentNode; |
1595 }, document.body); |
5311 } |
1596 } |
5312 }); |
1597 } |
5313 self.on('keydown', function (e) { |
1598 }, |
5314 var rootControl; |
1599 remove: function (ctrl) { |
5315 if (e.keyCode === 13 && e.target.nodeName === 'INPUT') { |
1600 if (dirtyCtrls[ctrl._id]) { |
5316 e.preventDefault(); |
1601 delete dirtyCtrls[ctrl._id]; |
5317 self.parents().reverse().each(function (ctrl) { |
1602 } |
5318 if (ctrl.toJSON) { |
1603 } |
5319 rootControl = ctrl; |
1604 }; |
|
1605 |
|
1606 var getUiContainerDelta = function (ctrl) { |
|
1607 var uiContainer = getUiContainer(ctrl); |
|
1608 if (uiContainer && global$2.DOM.getStyle(uiContainer, 'position', true) !== 'static') { |
|
1609 var containerPos = global$2.DOM.getPos(uiContainer); |
|
1610 var dx = uiContainer.scrollLeft - containerPos.x; |
|
1611 var dy = uiContainer.scrollTop - containerPos.y; |
|
1612 return Option.some({ |
|
1613 x: dx, |
|
1614 y: dy |
|
1615 }); |
|
1616 } else { |
|
1617 return Option.none(); |
|
1618 } |
|
1619 }; |
|
1620 var setUiContainer = function (editor, ctrl) { |
|
1621 var uiContainer = global$2.DOM.select(editor.settings.ui_container)[0]; |
|
1622 ctrl.getRoot().uiContainer = uiContainer; |
|
1623 }; |
|
1624 var getUiContainer = function (ctrl) { |
|
1625 return ctrl ? ctrl.getRoot().uiContainer : null; |
|
1626 }; |
|
1627 var inheritUiContainer = function (fromCtrl, toCtrl) { |
|
1628 return toCtrl.uiContainer = getUiContainer(fromCtrl); |
|
1629 }; |
|
1630 var $_egt6ye18xjjgwek2h = { |
|
1631 getUiContainerDelta: getUiContainerDelta, |
|
1632 setUiContainer: setUiContainer, |
|
1633 getUiContainer: getUiContainer, |
|
1634 inheritUiContainer: inheritUiContainer |
|
1635 }; |
|
1636 |
|
1637 var hasMouseWheelEventSupport = 'onmousewheel' in document; |
|
1638 var hasWheelEventSupport = false; |
|
1639 var classPrefix = 'mce-'; |
|
1640 var Control; |
|
1641 var idCounter = 0; |
|
1642 var proto$1 = { |
|
1643 Statics: { classPrefix: classPrefix }, |
|
1644 isRtl: function () { |
|
1645 return Control.rtl; |
|
1646 }, |
|
1647 classPrefix: classPrefix, |
|
1648 init: function (settings) { |
|
1649 var self$$1 = this; |
|
1650 var classes, defaultClasses; |
|
1651 function applyClasses(classes) { |
|
1652 var i; |
|
1653 classes = classes.split(' '); |
|
1654 for (i = 0; i < classes.length; i++) { |
|
1655 self$$1.classes.add(classes[i]); |
|
1656 } |
|
1657 } |
|
1658 self$$1.settings = settings = global$4.extend({}, self$$1.Defaults, settings); |
|
1659 self$$1._id = settings.id || 'mceu_' + idCounter++; |
|
1660 self$$1._aria = { role: settings.role }; |
|
1661 self$$1._elmCache = {}; |
|
1662 self$$1.$ = global$7; |
|
1663 self$$1.state = new ObservableObject({ |
|
1664 visible: true, |
|
1665 active: false, |
|
1666 disabled: false, |
|
1667 value: '' |
|
1668 }); |
|
1669 self$$1.data = new ObservableObject(settings.data); |
|
1670 self$$1.classes = new ClassList(function () { |
|
1671 if (self$$1.state.get('rendered')) { |
|
1672 self$$1.getEl().className = this.toString(); |
|
1673 } |
|
1674 }); |
|
1675 self$$1.classes.prefix = self$$1.classPrefix; |
|
1676 classes = settings.classes; |
|
1677 if (classes) { |
|
1678 if (self$$1.Defaults) { |
|
1679 defaultClasses = self$$1.Defaults.classes; |
|
1680 if (defaultClasses && classes !== defaultClasses) { |
|
1681 applyClasses(defaultClasses); |
|
1682 } |
|
1683 } |
|
1684 applyClasses(classes); |
|
1685 } |
|
1686 global$4.each('title text name visible disabled active value'.split(' '), function (name$$1) { |
|
1687 if (name$$1 in settings) { |
|
1688 self$$1[name$$1](settings[name$$1]); |
|
1689 } |
|
1690 }); |
|
1691 self$$1.on('click', function () { |
|
1692 if (self$$1.disabled()) { |
|
1693 return false; |
|
1694 } |
|
1695 }); |
|
1696 self$$1.settings = settings; |
|
1697 self$$1.borderBox = $_4kbuyt18pjjgwek1w.parseBox(settings.border); |
|
1698 self$$1.paddingBox = $_4kbuyt18pjjgwek1w.parseBox(settings.padding); |
|
1699 self$$1.marginBox = $_4kbuyt18pjjgwek1w.parseBox(settings.margin); |
|
1700 if (settings.hidden) { |
|
1701 self$$1.hide(); |
|
1702 } |
|
1703 }, |
|
1704 Properties: 'parent,name', |
|
1705 getContainerElm: function () { |
|
1706 var uiContainer = $_egt6ye18xjjgwek2h.getUiContainer(this); |
|
1707 return uiContainer ? uiContainer : funcs.getContainer(); |
|
1708 }, |
|
1709 getParentCtrl: function (elm) { |
|
1710 var ctrl; |
|
1711 var lookup = this.getRoot().controlIdLookup; |
|
1712 while (elm && lookup) { |
|
1713 ctrl = lookup[elm.id]; |
|
1714 if (ctrl) { |
|
1715 break; |
|
1716 } |
|
1717 elm = elm.parentNode; |
|
1718 } |
|
1719 return ctrl; |
|
1720 }, |
|
1721 initLayoutRect: function () { |
|
1722 var self$$1 = this; |
|
1723 var settings = self$$1.settings; |
|
1724 var borderBox, layoutRect; |
|
1725 var elm = self$$1.getEl(); |
|
1726 var width, height, minWidth, minHeight, autoResize; |
|
1727 var startMinWidth, startMinHeight, initialSize; |
|
1728 borderBox = self$$1.borderBox = self$$1.borderBox || $_4kbuyt18pjjgwek1w.measureBox(elm, 'border'); |
|
1729 self$$1.paddingBox = self$$1.paddingBox || $_4kbuyt18pjjgwek1w.measureBox(elm, 'padding'); |
|
1730 self$$1.marginBox = self$$1.marginBox || $_4kbuyt18pjjgwek1w.measureBox(elm, 'margin'); |
|
1731 initialSize = funcs.getSize(elm); |
|
1732 startMinWidth = settings.minWidth; |
|
1733 startMinHeight = settings.minHeight; |
|
1734 minWidth = startMinWidth || initialSize.width; |
|
1735 minHeight = startMinHeight || initialSize.height; |
|
1736 width = settings.width; |
|
1737 height = settings.height; |
|
1738 autoResize = settings.autoResize; |
|
1739 autoResize = typeof autoResize !== 'undefined' ? autoResize : !width && !height; |
|
1740 width = width || minWidth; |
|
1741 height = height || minHeight; |
|
1742 var deltaW = borderBox.left + borderBox.right; |
|
1743 var deltaH = borderBox.top + borderBox.bottom; |
|
1744 var maxW = settings.maxWidth || 65535; |
|
1745 var maxH = settings.maxHeight || 65535; |
|
1746 self$$1._layoutRect = layoutRect = { |
|
1747 x: settings.x || 0, |
|
1748 y: settings.y || 0, |
|
1749 w: width, |
|
1750 h: height, |
|
1751 deltaW: deltaW, |
|
1752 deltaH: deltaH, |
|
1753 contentW: width - deltaW, |
|
1754 contentH: height - deltaH, |
|
1755 innerW: width - deltaW, |
|
1756 innerH: height - deltaH, |
|
1757 startMinWidth: startMinWidth || 0, |
|
1758 startMinHeight: startMinHeight || 0, |
|
1759 minW: Math.min(minWidth, maxW), |
|
1760 minH: Math.min(minHeight, maxH), |
|
1761 maxW: maxW, |
|
1762 maxH: maxH, |
|
1763 autoResize: autoResize, |
|
1764 scrollW: 0 |
|
1765 }; |
|
1766 self$$1._lastLayoutRect = {}; |
|
1767 return layoutRect; |
|
1768 }, |
|
1769 layoutRect: function (newRect) { |
|
1770 var self$$1 = this; |
|
1771 var curRect = self$$1._layoutRect, lastLayoutRect, size, deltaWidth, deltaHeight, repaintControls; |
|
1772 if (!curRect) { |
|
1773 curRect = self$$1.initLayoutRect(); |
|
1774 } |
|
1775 if (newRect) { |
|
1776 deltaWidth = curRect.deltaW; |
|
1777 deltaHeight = curRect.deltaH; |
|
1778 if (newRect.x !== undefined) { |
|
1779 curRect.x = newRect.x; |
|
1780 } |
|
1781 if (newRect.y !== undefined) { |
|
1782 curRect.y = newRect.y; |
|
1783 } |
|
1784 if (newRect.minW !== undefined) { |
|
1785 curRect.minW = newRect.minW; |
|
1786 } |
|
1787 if (newRect.minH !== undefined) { |
|
1788 curRect.minH = newRect.minH; |
|
1789 } |
|
1790 size = newRect.w; |
|
1791 if (size !== undefined) { |
|
1792 size = size < curRect.minW ? curRect.minW : size; |
|
1793 size = size > curRect.maxW ? curRect.maxW : size; |
|
1794 curRect.w = size; |
|
1795 curRect.innerW = size - deltaWidth; |
|
1796 } |
|
1797 size = newRect.h; |
|
1798 if (size !== undefined) { |
|
1799 size = size < curRect.minH ? curRect.minH : size; |
|
1800 size = size > curRect.maxH ? curRect.maxH : size; |
|
1801 curRect.h = size; |
|
1802 curRect.innerH = size - deltaHeight; |
|
1803 } |
|
1804 size = newRect.innerW; |
|
1805 if (size !== undefined) { |
|
1806 size = size < curRect.minW - deltaWidth ? curRect.minW - deltaWidth : size; |
|
1807 size = size > curRect.maxW - deltaWidth ? curRect.maxW - deltaWidth : size; |
|
1808 curRect.innerW = size; |
|
1809 curRect.w = size + deltaWidth; |
|
1810 } |
|
1811 size = newRect.innerH; |
|
1812 if (size !== undefined) { |
|
1813 size = size < curRect.minH - deltaHeight ? curRect.minH - deltaHeight : size; |
|
1814 size = size > curRect.maxH - deltaHeight ? curRect.maxH - deltaHeight : size; |
|
1815 curRect.innerH = size; |
|
1816 curRect.h = size + deltaHeight; |
|
1817 } |
|
1818 if (newRect.contentW !== undefined) { |
|
1819 curRect.contentW = newRect.contentW; |
|
1820 } |
|
1821 if (newRect.contentH !== undefined) { |
|
1822 curRect.contentH = newRect.contentH; |
|
1823 } |
|
1824 lastLayoutRect = self$$1._lastLayoutRect; |
|
1825 if (lastLayoutRect.x !== curRect.x || lastLayoutRect.y !== curRect.y || lastLayoutRect.w !== curRect.w || lastLayoutRect.h !== curRect.h) { |
|
1826 repaintControls = Control.repaintControls; |
|
1827 if (repaintControls) { |
|
1828 if (repaintControls.map && !repaintControls.map[self$$1._id]) { |
|
1829 repaintControls.push(self$$1); |
|
1830 repaintControls.map[self$$1._id] = true; |
|
1831 } |
|
1832 } |
|
1833 lastLayoutRect.x = curRect.x; |
|
1834 lastLayoutRect.y = curRect.y; |
|
1835 lastLayoutRect.w = curRect.w; |
|
1836 lastLayoutRect.h = curRect.h; |
|
1837 } |
|
1838 return self$$1; |
|
1839 } |
|
1840 return curRect; |
|
1841 }, |
|
1842 repaint: function () { |
|
1843 var self$$1 = this; |
|
1844 var style, bodyStyle, bodyElm, rect, borderBox; |
|
1845 var borderW, borderH, lastRepaintRect, round, value; |
|
1846 round = !document.createRange ? Math.round : function (value) { |
|
1847 return value; |
|
1848 }; |
|
1849 style = self$$1.getEl().style; |
|
1850 rect = self$$1._layoutRect; |
|
1851 lastRepaintRect = self$$1._lastRepaintRect || {}; |
|
1852 borderBox = self$$1.borderBox; |
|
1853 borderW = borderBox.left + borderBox.right; |
|
1854 borderH = borderBox.top + borderBox.bottom; |
|
1855 if (rect.x !== lastRepaintRect.x) { |
|
1856 style.left = round(rect.x) + 'px'; |
|
1857 lastRepaintRect.x = rect.x; |
|
1858 } |
|
1859 if (rect.y !== lastRepaintRect.y) { |
|
1860 style.top = round(rect.y) + 'px'; |
|
1861 lastRepaintRect.y = rect.y; |
|
1862 } |
|
1863 if (rect.w !== lastRepaintRect.w) { |
|
1864 value = round(rect.w - borderW); |
|
1865 style.width = (value >= 0 ? value : 0) + 'px'; |
|
1866 lastRepaintRect.w = rect.w; |
|
1867 } |
|
1868 if (rect.h !== lastRepaintRect.h) { |
|
1869 value = round(rect.h - borderH); |
|
1870 style.height = (value >= 0 ? value : 0) + 'px'; |
|
1871 lastRepaintRect.h = rect.h; |
|
1872 } |
|
1873 if (self$$1._hasBody && rect.innerW !== lastRepaintRect.innerW) { |
|
1874 value = round(rect.innerW); |
|
1875 bodyElm = self$$1.getEl('body'); |
|
1876 if (bodyElm) { |
|
1877 bodyStyle = bodyElm.style; |
|
1878 bodyStyle.width = (value >= 0 ? value : 0) + 'px'; |
|
1879 } |
|
1880 lastRepaintRect.innerW = rect.innerW; |
|
1881 } |
|
1882 if (self$$1._hasBody && rect.innerH !== lastRepaintRect.innerH) { |
|
1883 value = round(rect.innerH); |
|
1884 bodyElm = bodyElm || self$$1.getEl('body'); |
|
1885 if (bodyElm) { |
|
1886 bodyStyle = bodyStyle || bodyElm.style; |
|
1887 bodyStyle.height = (value >= 0 ? value : 0) + 'px'; |
|
1888 } |
|
1889 lastRepaintRect.innerH = rect.innerH; |
|
1890 } |
|
1891 self$$1._lastRepaintRect = lastRepaintRect; |
|
1892 self$$1.fire('repaint', {}, false); |
|
1893 }, |
|
1894 updateLayoutRect: function () { |
|
1895 var self$$1 = this; |
|
1896 self$$1.parent()._lastRect = null; |
|
1897 funcs.css(self$$1.getEl(), { |
|
1898 width: '', |
|
1899 height: '' |
|
1900 }); |
|
1901 self$$1._layoutRect = self$$1._lastRepaintRect = self$$1._lastLayoutRect = null; |
|
1902 self$$1.initLayoutRect(); |
|
1903 }, |
|
1904 on: function (name$$1, callback) { |
|
1905 var self$$1 = this; |
|
1906 function resolveCallbackName(name$$1) { |
|
1907 var callback, scope; |
|
1908 if (typeof name$$1 !== 'string') { |
|
1909 return name$$1; |
|
1910 } |
|
1911 return function (e) { |
|
1912 if (!callback) { |
|
1913 self$$1.parentsAndSelf().each(function (ctrl) { |
|
1914 var callbacks = ctrl.settings.callbacks; |
|
1915 if (callbacks && (callback = callbacks[name$$1])) { |
|
1916 scope = ctrl; |
|
1917 return false; |
5320 return false; |
1918 } |
5321 } |
1919 }); |
5322 }); |
1920 } |
5323 self.fire('submit', { data: rootControl.toJSON() }); |
1921 if (!callback) { |
5324 } |
1922 e.action = name$$1; |
5325 }); |
1923 this.fire('execute', e); |
5326 self.on('keyup', function (e) { |
1924 return; |
5327 if (e.target.nodeName === 'INPUT') { |
1925 } |
5328 var oldValue = self.state.get('value'); |
1926 return callback.call(scope, e); |
5329 var newValue = e.target.value; |
1927 }; |
5330 if (newValue !== oldValue) { |
1928 } |
5331 self.state.set('value', newValue); |
1929 getEventDispatcher(self$$1).on(name$$1, resolveCallbackName(callback)); |
5332 self.fire('autocomplete', e); |
1930 return self$$1; |
5333 } |
1931 }, |
5334 } |
1932 off: function (name$$1, callback) { |
5335 }); |
1933 getEventDispatcher(this).off(name$$1, callback); |
5336 self.on('mouseover', function (e) { |
1934 return this; |
|
1935 }, |
|
1936 fire: function (name$$1, args, bubble) { |
|
1937 var self$$1 = this; |
|
1938 args = args || {}; |
|
1939 if (!args.control) { |
|
1940 args.control = self$$1; |
|
1941 } |
|
1942 args = getEventDispatcher(self$$1).fire(name$$1, args); |
|
1943 if (bubble !== false && self$$1.parent) { |
|
1944 var parent$$1 = self$$1.parent(); |
|
1945 while (parent$$1 && !args.isPropagationStopped()) { |
|
1946 parent$$1.fire(name$$1, args, false); |
|
1947 parent$$1 = parent$$1.parent(); |
|
1948 } |
|
1949 } |
|
1950 return args; |
|
1951 }, |
|
1952 hasEventListeners: function (name$$1) { |
|
1953 return getEventDispatcher(this).has(name$$1); |
|
1954 }, |
|
1955 parents: function (selector) { |
|
1956 var self$$1 = this; |
|
1957 var ctrl, parents = new Collection$2(); |
|
1958 for (ctrl = self$$1.parent(); ctrl; ctrl = ctrl.parent()) { |
|
1959 parents.add(ctrl); |
|
1960 } |
|
1961 if (selector) { |
|
1962 parents = parents.filter(selector); |
|
1963 } |
|
1964 return parents; |
|
1965 }, |
|
1966 parentsAndSelf: function (selector) { |
|
1967 return new Collection$2(this).add(this.parents(selector)); |
|
1968 }, |
|
1969 next: function () { |
|
1970 var parentControls = this.parent().items(); |
|
1971 return parentControls[parentControls.indexOf(this) + 1]; |
|
1972 }, |
|
1973 prev: function () { |
|
1974 var parentControls = this.parent().items(); |
|
1975 return parentControls[parentControls.indexOf(this) - 1]; |
|
1976 }, |
|
1977 innerHtml: function (html) { |
|
1978 this.$el.html(html); |
|
1979 return this; |
|
1980 }, |
|
1981 getEl: function (suffix) { |
|
1982 var id = suffix ? this._id + '-' + suffix : this._id; |
|
1983 if (!this._elmCache[id]) { |
|
1984 this._elmCache[id] = global$7('#' + id)[0]; |
|
1985 } |
|
1986 return this._elmCache[id]; |
|
1987 }, |
|
1988 show: function () { |
|
1989 return this.visible(true); |
|
1990 }, |
|
1991 hide: function () { |
|
1992 return this.visible(false); |
|
1993 }, |
|
1994 focus: function () { |
|
1995 try { |
|
1996 this.getEl().focus(); |
|
1997 } catch (ex) { |
|
1998 } |
|
1999 return this; |
|
2000 }, |
|
2001 blur: function () { |
|
2002 this.getEl().blur(); |
|
2003 return this; |
|
2004 }, |
|
2005 aria: function (name$$1, value) { |
|
2006 var self$$1 = this, elm = self$$1.getEl(self$$1.ariaTarget); |
|
2007 if (typeof value === 'undefined') { |
|
2008 return self$$1._aria[name$$1]; |
|
2009 } |
|
2010 self$$1._aria[name$$1] = value; |
|
2011 if (self$$1.state.get('rendered')) { |
|
2012 elm.setAttribute(name$$1 === 'role' ? name$$1 : 'aria-' + name$$1, value); |
|
2013 } |
|
2014 return self$$1; |
|
2015 }, |
|
2016 encode: function (text, translate) { |
|
2017 if (translate !== false) { |
|
2018 text = this.translate(text); |
|
2019 } |
|
2020 return (text || '').replace(/[&<>"]/g, function (match) { |
|
2021 return '&#' + match.charCodeAt(0) + ';'; |
|
2022 }); |
|
2023 }, |
|
2024 translate: function (text) { |
|
2025 return Control.translate ? Control.translate(text) : text; |
|
2026 }, |
|
2027 before: function (items) { |
|
2028 var self$$1 = this, parent$$1 = self$$1.parent(); |
|
2029 if (parent$$1) { |
|
2030 parent$$1.insert(items, parent$$1.items().indexOf(self$$1), true); |
|
2031 } |
|
2032 return self$$1; |
|
2033 }, |
|
2034 after: function (items) { |
|
2035 var self$$1 = this, parent$$1 = self$$1.parent(); |
|
2036 if (parent$$1) { |
|
2037 parent$$1.insert(items, parent$$1.items().indexOf(self$$1)); |
|
2038 } |
|
2039 return self$$1; |
|
2040 }, |
|
2041 remove: function () { |
|
2042 var self$$1 = this; |
|
2043 var elm = self$$1.getEl(); |
|
2044 var parent$$1 = self$$1.parent(); |
|
2045 var newItems, i; |
|
2046 if (self$$1.items) { |
|
2047 var controls = self$$1.items().toArray(); |
|
2048 i = controls.length; |
|
2049 while (i--) { |
|
2050 controls[i].remove(); |
|
2051 } |
|
2052 } |
|
2053 if (parent$$1 && parent$$1.items) { |
|
2054 newItems = []; |
|
2055 parent$$1.items().each(function (item) { |
|
2056 if (item !== self$$1) { |
|
2057 newItems.push(item); |
|
2058 } |
|
2059 }); |
|
2060 parent$$1.items().set(newItems); |
|
2061 parent$$1._lastRect = null; |
|
2062 } |
|
2063 if (self$$1._eventsRoot && self$$1._eventsRoot === self$$1) { |
|
2064 global$7(elm).off(); |
|
2065 } |
|
2066 var lookup = self$$1.getRoot().controlIdLookup; |
|
2067 if (lookup) { |
|
2068 delete lookup[self$$1._id]; |
|
2069 } |
|
2070 if (elm && elm.parentNode) { |
|
2071 elm.parentNode.removeChild(elm); |
|
2072 } |
|
2073 self$$1.state.set('rendered', false); |
|
2074 self$$1.state.destroy(); |
|
2075 self$$1.fire('remove'); |
|
2076 return self$$1; |
|
2077 }, |
|
2078 renderBefore: function (elm) { |
|
2079 global$7(elm).before(this.renderHtml()); |
|
2080 this.postRender(); |
|
2081 return this; |
|
2082 }, |
|
2083 renderTo: function (elm) { |
|
2084 global$7(elm || this.getContainerElm()).append(this.renderHtml()); |
|
2085 this.postRender(); |
|
2086 return this; |
|
2087 }, |
|
2088 preRender: function () { |
|
2089 }, |
|
2090 render: function () { |
|
2091 }, |
|
2092 renderHtml: function () { |
|
2093 return '<div id="' + this._id + '" class="' + this.classes + '"></div>'; |
|
2094 }, |
|
2095 postRender: function () { |
|
2096 var self$$1 = this; |
|
2097 var settings = self$$1.settings; |
|
2098 var elm, box, parent$$1, name$$1, parentEventsRoot; |
|
2099 self$$1.$el = global$7(self$$1.getEl()); |
|
2100 self$$1.state.set('rendered', true); |
|
2101 for (name$$1 in settings) { |
|
2102 if (name$$1.indexOf('on') === 0) { |
|
2103 self$$1.on(name$$1.substr(2), settings[name$$1]); |
|
2104 } |
|
2105 } |
|
2106 if (self$$1._eventsRoot) { |
|
2107 for (parent$$1 = self$$1.parent(); !parentEventsRoot && parent$$1; parent$$1 = parent$$1.parent()) { |
|
2108 parentEventsRoot = parent$$1._eventsRoot; |
|
2109 } |
|
2110 if (parentEventsRoot) { |
|
2111 for (name$$1 in parentEventsRoot._nativeEvents) { |
|
2112 self$$1._nativeEvents[name$$1] = true; |
|
2113 } |
|
2114 } |
|
2115 } |
|
2116 bindPendingEvents(self$$1); |
|
2117 if (settings.style) { |
|
2118 elm = self$$1.getEl(); |
|
2119 if (elm) { |
|
2120 elm.setAttribute('style', settings.style); |
|
2121 elm.style.cssText = settings.style; |
|
2122 } |
|
2123 } |
|
2124 if (self$$1.settings.border) { |
|
2125 box = self$$1.borderBox; |
|
2126 self$$1.$el.css({ |
|
2127 'border-top-width': box.top, |
|
2128 'border-right-width': box.right, |
|
2129 'border-bottom-width': box.bottom, |
|
2130 'border-left-width': box.left |
|
2131 }); |
|
2132 } |
|
2133 var root = self$$1.getRoot(); |
|
2134 if (!root.controlIdLookup) { |
|
2135 root.controlIdLookup = {}; |
|
2136 } |
|
2137 root.controlIdLookup[self$$1._id] = self$$1; |
|
2138 for (var key in self$$1._aria) { |
|
2139 self$$1.aria(key, self$$1._aria[key]); |
|
2140 } |
|
2141 if (self$$1.state.get('visible') === false) { |
|
2142 self$$1.getEl().style.display = 'none'; |
|
2143 } |
|
2144 self$$1.bindStates(); |
|
2145 self$$1.state.on('change:visible', function (e) { |
|
2146 var state = e.value; |
|
2147 var parentCtrl; |
|
2148 if (self$$1.state.get('rendered')) { |
|
2149 self$$1.getEl().style.display = state === false ? 'none' : ''; |
|
2150 self$$1.getEl().getBoundingClientRect(); |
|
2151 } |
|
2152 parentCtrl = self$$1.parent(); |
|
2153 if (parentCtrl) { |
|
2154 parentCtrl._lastRect = null; |
|
2155 } |
|
2156 self$$1.fire(state ? 'show' : 'hide'); |
|
2157 $_cqjgb518wjjgwek2f.add(self$$1); |
|
2158 }); |
|
2159 self$$1.fire('postrender', {}, false); |
|
2160 }, |
|
2161 bindStates: function () { |
|
2162 }, |
|
2163 scrollIntoView: function (align) { |
|
2164 function getOffset(elm, rootElm) { |
|
2165 var x, y, parent$$1 = elm; |
|
2166 x = y = 0; |
|
2167 while (parent$$1 && parent$$1 !== rootElm && parent$$1.nodeType) { |
|
2168 x += parent$$1.offsetLeft || 0; |
|
2169 y += parent$$1.offsetTop || 0; |
|
2170 parent$$1 = parent$$1.offsetParent; |
|
2171 } |
|
2172 return { |
|
2173 x: x, |
|
2174 y: y |
|
2175 }; |
|
2176 } |
|
2177 var elm = this.getEl(), parentElm = elm.parentNode; |
|
2178 var x, y, width, height, parentWidth, parentHeight; |
|
2179 var pos = getOffset(elm, parentElm); |
|
2180 x = pos.x; |
|
2181 y = pos.y; |
|
2182 width = elm.offsetWidth; |
|
2183 height = elm.offsetHeight; |
|
2184 parentWidth = parentElm.clientWidth; |
|
2185 parentHeight = parentElm.clientHeight; |
|
2186 if (align === 'end') { |
|
2187 x -= parentWidth - width; |
|
2188 y -= parentHeight - height; |
|
2189 } else if (align === 'center') { |
|
2190 x -= parentWidth / 2 - width / 2; |
|
2191 y -= parentHeight / 2 - height / 2; |
|
2192 } |
|
2193 parentElm.scrollLeft = x; |
|
2194 parentElm.scrollTop = y; |
|
2195 return this; |
|
2196 }, |
|
2197 getRoot: function () { |
|
2198 var ctrl = this, rootControl; |
|
2199 var parents = []; |
|
2200 while (ctrl) { |
|
2201 if (ctrl.rootControl) { |
|
2202 rootControl = ctrl.rootControl; |
|
2203 break; |
|
2204 } |
|
2205 parents.push(ctrl); |
|
2206 rootControl = ctrl; |
|
2207 ctrl = ctrl.parent(); |
|
2208 } |
|
2209 if (!rootControl) { |
|
2210 rootControl = this; |
|
2211 } |
|
2212 var i = parents.length; |
|
2213 while (i--) { |
|
2214 parents[i].rootControl = rootControl; |
|
2215 } |
|
2216 return rootControl; |
|
2217 }, |
|
2218 reflow: function () { |
|
2219 $_cqjgb518wjjgwek2f.remove(this); |
|
2220 var parent$$1 = this.parent(); |
|
2221 if (parent$$1 && parent$$1._layout && !parent$$1._layout.isNative()) { |
|
2222 parent$$1.reflow(); |
|
2223 } |
|
2224 return this; |
|
2225 } |
|
2226 }; |
|
2227 global$4.each('text title visible disabled active value'.split(' '), function (name$$1) { |
|
2228 proto$1[name$$1] = function (value) { |
|
2229 if (arguments.length === 0) { |
|
2230 return this.state.get(name$$1); |
|
2231 } |
|
2232 if (typeof value !== 'undefined') { |
|
2233 this.state.set(name$$1, value); |
|
2234 } |
|
2235 return this; |
|
2236 }; |
|
2237 }); |
|
2238 Control = global$8.extend(proto$1); |
|
2239 function getEventDispatcher(obj) { |
|
2240 if (!obj._eventDispatcher) { |
|
2241 obj._eventDispatcher = new global$9({ |
|
2242 scope: obj, |
|
2243 toggleEvent: function (name$$1, state) { |
|
2244 if (state && global$9.isNative(name$$1)) { |
|
2245 if (!obj._nativeEvents) { |
|
2246 obj._nativeEvents = {}; |
|
2247 } |
|
2248 obj._nativeEvents[name$$1] = true; |
|
2249 if (obj.state.get('rendered')) { |
|
2250 bindPendingEvents(obj); |
|
2251 } |
|
2252 } |
|
2253 } |
|
2254 }); |
|
2255 } |
|
2256 return obj._eventDispatcher; |
|
2257 } |
|
2258 function bindPendingEvents(eventCtrl) { |
|
2259 var i, l, parents, eventRootCtrl, nativeEvents, name$$1; |
|
2260 function delegate(e) { |
|
2261 var control = eventCtrl.getParentCtrl(e.target); |
|
2262 if (control) { |
|
2263 control.fire(e.type, e); |
|
2264 } |
|
2265 } |
|
2266 function mouseLeaveHandler() { |
|
2267 var ctrl = eventRootCtrl._lastHoverCtrl; |
|
2268 if (ctrl) { |
|
2269 ctrl.fire('mouseleave', { target: ctrl.getEl() }); |
|
2270 ctrl.parents().each(function (ctrl) { |
|
2271 ctrl.fire('mouseleave', { target: ctrl.getEl() }); |
|
2272 }); |
|
2273 eventRootCtrl._lastHoverCtrl = null; |
|
2274 } |
|
2275 } |
|
2276 function mouseEnterHandler(e) { |
|
2277 var ctrl = eventCtrl.getParentCtrl(e.target), lastCtrl = eventRootCtrl._lastHoverCtrl, idx = 0, i, parents, lastParents; |
|
2278 if (ctrl !== lastCtrl) { |
|
2279 eventRootCtrl._lastHoverCtrl = ctrl; |
|
2280 parents = ctrl.parents().toArray().reverse(); |
|
2281 parents.push(ctrl); |
|
2282 if (lastCtrl) { |
|
2283 lastParents = lastCtrl.parents().toArray().reverse(); |
|
2284 lastParents.push(lastCtrl); |
|
2285 for (idx = 0; idx < lastParents.length; idx++) { |
|
2286 if (parents[idx] !== lastParents[idx]) { |
|
2287 break; |
|
2288 } |
|
2289 } |
|
2290 for (i = lastParents.length - 1; i >= idx; i--) { |
|
2291 lastCtrl = lastParents[i]; |
|
2292 lastCtrl.fire('mouseleave', { target: lastCtrl.getEl() }); |
|
2293 } |
|
2294 } |
|
2295 for (i = idx; i < parents.length; i++) { |
|
2296 ctrl = parents[i]; |
|
2297 ctrl.fire('mouseenter', { target: ctrl.getEl() }); |
|
2298 } |
|
2299 } |
|
2300 } |
|
2301 function fixWheelEvent(e) { |
|
2302 e.preventDefault(); |
|
2303 if (e.type === 'mousewheel') { |
|
2304 e.deltaY = -1 / 40 * e.wheelDelta; |
|
2305 if (e.wheelDeltaX) { |
|
2306 e.deltaX = -1 / 40 * e.wheelDeltaX; |
|
2307 } |
|
2308 } else { |
|
2309 e.deltaX = 0; |
|
2310 e.deltaY = e.detail; |
|
2311 } |
|
2312 e = eventCtrl.fire('wheel', e); |
|
2313 } |
|
2314 nativeEvents = eventCtrl._nativeEvents; |
|
2315 if (nativeEvents) { |
|
2316 parents = eventCtrl.parents().toArray(); |
|
2317 parents.unshift(eventCtrl); |
|
2318 for (i = 0, l = parents.length; !eventRootCtrl && i < l; i++) { |
|
2319 eventRootCtrl = parents[i]._eventsRoot; |
|
2320 } |
|
2321 if (!eventRootCtrl) { |
|
2322 eventRootCtrl = parents[parents.length - 1] || eventCtrl; |
|
2323 } |
|
2324 eventCtrl._eventsRoot = eventRootCtrl; |
|
2325 for (l = i, i = 0; i < l; i++) { |
|
2326 parents[i]._eventsRoot = eventRootCtrl; |
|
2327 } |
|
2328 var eventRootDelegates = eventRootCtrl._delegates; |
|
2329 if (!eventRootDelegates) { |
|
2330 eventRootDelegates = eventRootCtrl._delegates = {}; |
|
2331 } |
|
2332 for (name$$1 in nativeEvents) { |
|
2333 if (!nativeEvents) { |
|
2334 return false; |
|
2335 } |
|
2336 if (name$$1 === 'wheel' && !hasWheelEventSupport) { |
|
2337 if (hasMouseWheelEventSupport) { |
|
2338 global$7(eventCtrl.getEl()).on('mousewheel', fixWheelEvent); |
|
2339 } else { |
|
2340 global$7(eventCtrl.getEl()).on('DOMMouseScroll', fixWheelEvent); |
|
2341 } |
|
2342 continue; |
|
2343 } |
|
2344 if (name$$1 === 'mouseenter' || name$$1 === 'mouseleave') { |
|
2345 if (!eventRootCtrl._hasMouseEnter) { |
|
2346 global$7(eventRootCtrl.getEl()).on('mouseleave', mouseLeaveHandler).on('mouseover', mouseEnterHandler); |
|
2347 eventRootCtrl._hasMouseEnter = 1; |
|
2348 } |
|
2349 } else if (!eventRootDelegates[name$$1]) { |
|
2350 global$7(eventRootCtrl.getEl()).on(name$$1, delegate); |
|
2351 eventRootDelegates[name$$1] = true; |
|
2352 } |
|
2353 nativeEvents[name$$1] = false; |
|
2354 } |
|
2355 } |
|
2356 } |
|
2357 var Control$1 = Control; |
|
2358 |
|
2359 var isStatic = function (elm) { |
|
2360 return funcs.getRuntimeStyle(elm, 'position') === 'static'; |
|
2361 }; |
|
2362 var isFixed = function (ctrl) { |
|
2363 return ctrl.state.get('fixed'); |
|
2364 }; |
|
2365 function calculateRelativePosition(ctrl, targetElm, rel) { |
|
2366 var ctrlElm, pos, x, y, selfW, selfH, targetW, targetH, viewport, size; |
|
2367 viewport = getWindowViewPort(); |
|
2368 pos = funcs.getPos(targetElm, $_egt6ye18xjjgwek2h.getUiContainer(ctrl)); |
|
2369 x = pos.x; |
|
2370 y = pos.y; |
|
2371 if (isFixed(ctrl) && isStatic(document.body)) { |
|
2372 x -= viewport.x; |
|
2373 y -= viewport.y; |
|
2374 } |
|
2375 ctrlElm = ctrl.getEl(); |
|
2376 size = funcs.getSize(ctrlElm); |
|
2377 selfW = size.width; |
|
2378 selfH = size.height; |
|
2379 size = funcs.getSize(targetElm); |
|
2380 targetW = size.width; |
|
2381 targetH = size.height; |
|
2382 rel = (rel || '').split(''); |
|
2383 if (rel[0] === 'b') { |
|
2384 y += targetH; |
|
2385 } |
|
2386 if (rel[1] === 'r') { |
|
2387 x += targetW; |
|
2388 } |
|
2389 if (rel[0] === 'c') { |
|
2390 y += Math.round(targetH / 2); |
|
2391 } |
|
2392 if (rel[1] === 'c') { |
|
2393 x += Math.round(targetW / 2); |
|
2394 } |
|
2395 if (rel[3] === 'b') { |
|
2396 y -= selfH; |
|
2397 } |
|
2398 if (rel[4] === 'r') { |
|
2399 x -= selfW; |
|
2400 } |
|
2401 if (rel[3] === 'c') { |
|
2402 y -= Math.round(selfH / 2); |
|
2403 } |
|
2404 if (rel[4] === 'c') { |
|
2405 x -= Math.round(selfW / 2); |
|
2406 } |
|
2407 return { |
|
2408 x: x, |
|
2409 y: y, |
|
2410 w: selfW, |
|
2411 h: selfH |
|
2412 }; |
|
2413 } |
|
2414 var getUiContainerViewPort = function (customUiContainer) { |
|
2415 return { |
|
2416 x: 0, |
|
2417 y: 0, |
|
2418 w: customUiContainer.scrollWidth - 1, |
|
2419 h: customUiContainer.scrollHeight - 1 |
|
2420 }; |
|
2421 }; |
|
2422 var getWindowViewPort = function () { |
|
2423 var win = window; |
|
2424 var x = Math.max(win.pageXOffset, document.body.scrollLeft, document.documentElement.scrollLeft); |
|
2425 var y = Math.max(win.pageYOffset, document.body.scrollTop, document.documentElement.scrollTop); |
|
2426 var w = win.innerWidth || document.documentElement.clientWidth; |
|
2427 var h = win.innerHeight || document.documentElement.clientHeight; |
|
2428 return { |
|
2429 x: x, |
|
2430 y: y, |
|
2431 w: x + w, |
|
2432 h: y + h |
|
2433 }; |
|
2434 }; |
|
2435 var getViewPortRect = function (ctrl) { |
|
2436 var customUiContainer = $_egt6ye18xjjgwek2h.getUiContainer(ctrl); |
|
2437 return customUiContainer && !isFixed(ctrl) ? getUiContainerViewPort(customUiContainer) : getWindowViewPort(); |
|
2438 }; |
|
2439 var $_8zu82i18yjjgwek2l = { |
|
2440 testMoveRel: function (elm, rels) { |
|
2441 var viewPortRect = getViewPortRect(this); |
|
2442 for (var i = 0; i < rels.length; i++) { |
|
2443 var pos = calculateRelativePosition(this, elm, rels[i]); |
|
2444 if (isFixed(this)) { |
|
2445 if (pos.x > 0 && pos.x + pos.w < viewPortRect.w && pos.y > 0 && pos.y + pos.h < viewPortRect.h) { |
|
2446 return rels[i]; |
|
2447 } |
|
2448 } else { |
|
2449 if (pos.x > viewPortRect.x && pos.x + pos.w < viewPortRect.w && pos.y > viewPortRect.y && pos.y + pos.h < viewPortRect.h) { |
|
2450 return rels[i]; |
|
2451 } |
|
2452 } |
|
2453 } |
|
2454 return rels[0]; |
|
2455 }, |
|
2456 moveRel: function (elm, rel) { |
|
2457 if (typeof rel !== 'string') { |
|
2458 rel = this.testMoveRel(elm, rel); |
|
2459 } |
|
2460 var pos = calculateRelativePosition(this, elm, rel); |
|
2461 return this.moveTo(pos.x, pos.y); |
|
2462 }, |
|
2463 moveBy: function (dx, dy) { |
|
2464 var self$$1 = this, rect = self$$1.layoutRect(); |
|
2465 self$$1.moveTo(rect.x + dx, rect.y + dy); |
|
2466 return self$$1; |
|
2467 }, |
|
2468 moveTo: function (x, y) { |
|
2469 var self$$1 = this; |
|
2470 function constrain(value, max, size) { |
|
2471 if (value < 0) { |
|
2472 return 0; |
|
2473 } |
|
2474 if (value + size > max) { |
|
2475 value = max - size; |
|
2476 return value < 0 ? 0 : value; |
|
2477 } |
|
2478 return value; |
|
2479 } |
|
2480 if (self$$1.settings.constrainToViewport) { |
|
2481 var viewPortRect = getViewPortRect(this); |
|
2482 var layoutRect = self$$1.layoutRect(); |
|
2483 x = constrain(x, viewPortRect.w, layoutRect.w); |
|
2484 y = constrain(y, viewPortRect.h, layoutRect.h); |
|
2485 } |
|
2486 var uiContainer = $_egt6ye18xjjgwek2h.getUiContainer(self$$1); |
|
2487 if (uiContainer && isStatic(uiContainer) && !isFixed(self$$1)) { |
|
2488 x -= uiContainer.scrollLeft; |
|
2489 y -= uiContainer.scrollTop; |
|
2490 } |
|
2491 if (uiContainer) { |
|
2492 x += 1; |
|
2493 y += 1; |
|
2494 } |
|
2495 if (self$$1.state.get('rendered')) { |
|
2496 self$$1.layoutRect({ |
|
2497 x: x, |
|
2498 y: y |
|
2499 }).repaint(); |
|
2500 } else { |
|
2501 self$$1.settings.x = x; |
|
2502 self$$1.settings.y = y; |
|
2503 } |
|
2504 self$$1.fire('move', { |
|
2505 x: x, |
|
2506 y: y |
|
2507 }); |
|
2508 return self$$1; |
|
2509 } |
|
2510 }; |
|
2511 |
|
2512 var Tooltip = Control$1.extend({ |
|
2513 Mixins: [$_8zu82i18yjjgwek2l], |
|
2514 Defaults: { classes: 'widget tooltip tooltip-n' }, |
|
2515 renderHtml: function () { |
|
2516 var self = this, prefix = self.classPrefix; |
|
2517 return '<div id="' + self._id + '" class="' + self.classes + '" role="presentation">' + '<div class="' + prefix + 'tooltip-arrow"></div>' + '<div class="' + prefix + 'tooltip-inner">' + self.encode(self.state.get('text')) + '</div>' + '</div>'; |
|
2518 }, |
|
2519 bindStates: function () { |
|
2520 var self = this; |
|
2521 self.state.on('change:text', function (e) { |
|
2522 self.getEl().lastChild.innerHTML = self.encode(e.value); |
|
2523 }); |
|
2524 return self._super(); |
|
2525 }, |
|
2526 repaint: function () { |
|
2527 var self = this; |
|
2528 var style, rect; |
|
2529 style = self.getEl().style; |
|
2530 rect = self._layoutRect; |
|
2531 style.left = rect.x + 'px'; |
|
2532 style.top = rect.y + 'px'; |
|
2533 style.zIndex = 65535 + 65535; |
|
2534 } |
|
2535 }); |
|
2536 |
|
2537 var Widget = Control$1.extend({ |
|
2538 init: function (settings) { |
|
2539 var self = this; |
|
2540 self._super(settings); |
|
2541 settings = self.settings; |
|
2542 self.canFocus = true; |
|
2543 if (settings.tooltip && Widget.tooltips !== false) { |
|
2544 self.on('mouseenter', function (e) { |
|
2545 var tooltip = self.tooltip().moveTo(-65535); |
5337 var tooltip = self.tooltip().moveTo(-65535); |
2546 if (e.control === self) { |
5338 if (self.statusLevel() && e.target.className.indexOf(self.classPrefix + 'status') !== -1) { |
2547 var rel = tooltip.text(settings.tooltip).show().testMoveRel(self.getEl(), [ |
5339 var statusMessage = self.statusMessage() || 'Ok'; |
|
5340 var rel = tooltip.text(statusMessage).show().testMoveRel(e.target, [ |
2548 'bc-tc', |
5341 'bc-tc', |
2549 'bc-tl', |
5342 'bc-tl', |
2550 'bc-tr' |
5343 'bc-tr' |
2551 ]); |
5344 ]); |
2552 tooltip.classes.toggle('tooltip-n', rel === 'bc-tc'); |
5345 tooltip.classes.toggle('tooltip-n', rel === 'bc-tc'); |
2553 tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl'); |
5346 tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl'); |
2554 tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr'); |
5347 tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr'); |
2555 tooltip.moveRel(self.getEl(), rel); |
5348 tooltip.moveRel(e.target, rel); |
2556 } else { |
5349 } |
2557 tooltip.hide(); |
5350 }); |
2558 } |
5351 }, |
2559 }); |
5352 statusLevel: function (value) { |
2560 self.on('mouseleave mousedown click', function () { |
5353 if (arguments.length > 0) { |
2561 self.tooltip().remove(); |
5354 this.state.set('statusLevel', value); |
2562 self._tooltip = null; |
5355 } |
2563 }); |
5356 return this.state.get('statusLevel'); |
2564 } |
5357 }, |
2565 self.aria('label', settings.ariaLabel || settings.tooltip); |
5358 statusMessage: function (value) { |
2566 }, |
5359 if (arguments.length > 0) { |
2567 tooltip: function () { |
5360 this.state.set('statusMessage', value); |
2568 if (!this._tooltip) { |
5361 } |
2569 this._tooltip = new Tooltip({ type: 'tooltip' }); |
5362 return this.state.get('statusMessage'); |
2570 $_egt6ye18xjjgwek2h.inheritUiContainer(this, this._tooltip); |
5363 }, |
2571 this._tooltip.renderTo(); |
5364 showMenu: function () { |
2572 } |
5365 var self = this; |
2573 return this._tooltip; |
5366 var settings = self.settings; |
2574 }, |
5367 var menu; |
2575 postRender: function () { |
5368 if (!self.menu) { |
2576 var self = this, settings = self.settings; |
5369 menu = settings.menu || []; |
2577 self._super(); |
|
2578 if (!self.parent() && (settings.width || settings.height)) { |
|
2579 self.initLayoutRect(); |
|
2580 self.repaint(); |
|
2581 } |
|
2582 if (settings.autofocus) { |
|
2583 self.focus(); |
|
2584 } |
|
2585 }, |
|
2586 bindStates: function () { |
|
2587 var self = this; |
|
2588 function disable(state) { |
|
2589 self.aria('disabled', state); |
|
2590 self.classes.toggle('disabled', state); |
|
2591 } |
|
2592 function active(state) { |
|
2593 self.aria('pressed', state); |
|
2594 self.classes.toggle('active', state); |
|
2595 } |
|
2596 self.state.on('change:disabled', function (e) { |
|
2597 disable(e.value); |
|
2598 }); |
|
2599 self.state.on('change:active', function (e) { |
|
2600 active(e.value); |
|
2601 }); |
|
2602 if (self.state.get('disabled')) { |
|
2603 disable(true); |
|
2604 } |
|
2605 if (self.state.get('active')) { |
|
2606 active(true); |
|
2607 } |
|
2608 return self._super(); |
|
2609 }, |
|
2610 remove: function () { |
|
2611 this._super(); |
|
2612 if (this._tooltip) { |
|
2613 this._tooltip.remove(); |
|
2614 this._tooltip = null; |
|
2615 } |
|
2616 } |
|
2617 }); |
|
2618 |
|
2619 var Progress = Widget.extend({ |
|
2620 Defaults: { value: 0 }, |
|
2621 init: function (settings) { |
|
2622 var self = this; |
|
2623 self._super(settings); |
|
2624 self.classes.add('progress'); |
|
2625 if (!self.settings.filter) { |
|
2626 self.settings.filter = function (value) { |
|
2627 return Math.round(value); |
|
2628 }; |
|
2629 } |
|
2630 }, |
|
2631 renderHtml: function () { |
|
2632 var self = this, id = self._id, prefix = this.classPrefix; |
|
2633 return '<div id="' + id + '" class="' + self.classes + '">' + '<div class="' + prefix + 'bar-container">' + '<div class="' + prefix + 'bar"></div>' + '</div>' + '<div class="' + prefix + 'text">0%</div>' + '</div>'; |
|
2634 }, |
|
2635 postRender: function () { |
|
2636 var self = this; |
|
2637 self._super(); |
|
2638 self.value(self.settings.value); |
|
2639 return self; |
|
2640 }, |
|
2641 bindStates: function () { |
|
2642 var self = this; |
|
2643 function setValue(value) { |
|
2644 value = self.settings.filter(value); |
|
2645 self.getEl().lastChild.innerHTML = value + '%'; |
|
2646 self.getEl().firstChild.firstChild.style.width = value + '%'; |
|
2647 } |
|
2648 self.state.on('change:value', function (e) { |
|
2649 setValue(e.value); |
|
2650 }); |
|
2651 setValue(self.state.get('value')); |
|
2652 return self._super(); |
|
2653 } |
|
2654 }); |
|
2655 |
|
2656 var updateLiveRegion = function (ctx, text) { |
|
2657 ctx.getEl().lastChild.textContent = text + (ctx.progressBar ? ' ' + ctx.progressBar.value() + '%' : ''); |
|
2658 }; |
|
2659 var Notification = Control$1.extend({ |
|
2660 Mixins: [$_8zu82i18yjjgwek2l], |
|
2661 Defaults: { classes: 'widget notification' }, |
|
2662 init: function (settings) { |
|
2663 var self = this; |
|
2664 self._super(settings); |
|
2665 self.maxWidth = settings.maxWidth; |
|
2666 if (settings.text) { |
|
2667 self.text(settings.text); |
|
2668 } |
|
2669 if (settings.icon) { |
|
2670 self.icon = settings.icon; |
|
2671 } |
|
2672 if (settings.color) { |
|
2673 self.color = settings.color; |
|
2674 } |
|
2675 if (settings.type) { |
|
2676 self.classes.add('notification-' + settings.type); |
|
2677 } |
|
2678 if (settings.timeout && (settings.timeout < 0 || settings.timeout > 0) && !settings.closeButton) { |
|
2679 self.closeButton = false; |
|
2680 } else { |
|
2681 self.classes.add('has-close'); |
|
2682 self.closeButton = true; |
|
2683 } |
|
2684 if (settings.progressBar) { |
|
2685 self.progressBar = new Progress(); |
|
2686 } |
|
2687 self.on('click', function (e) { |
|
2688 if (e.target.className.indexOf(self.classPrefix + 'close') !== -1) { |
|
2689 self.close(); |
|
2690 } |
|
2691 }); |
|
2692 }, |
|
2693 renderHtml: function () { |
|
2694 var self = this; |
|
2695 var prefix = self.classPrefix; |
|
2696 var icon = '', closeButton = '', progressBar = '', notificationStyle = ''; |
|
2697 if (self.icon) { |
|
2698 icon = '<i class="' + prefix + 'ico' + ' ' + prefix + 'i-' + self.icon + '"></i>'; |
|
2699 } |
|
2700 notificationStyle = ' style="max-width: ' + self.maxWidth + 'px;' + (self.color ? 'background-color: ' + self.color + ';"' : '"'); |
|
2701 if (self.closeButton) { |
|
2702 closeButton = '<button type="button" class="' + prefix + 'close" aria-hidden="true">\xD7</button>'; |
|
2703 } |
|
2704 if (self.progressBar) { |
|
2705 progressBar = self.progressBar.renderHtml(); |
|
2706 } |
|
2707 return '<div id="' + self._id + '" class="' + self.classes + '"' + notificationStyle + ' role="presentation">' + icon + '<div class="' + prefix + 'notification-inner">' + self.state.get('text') + '</div>' + progressBar + closeButton + '<div style="clip: rect(1px, 1px, 1px, 1px);height: 1px;overflow: hidden;position: absolute;width: 1px;"' + ' aria-live="assertive" aria-relevant="additions" aria-atomic="true"></div>' + '</div>'; |
|
2708 }, |
|
2709 postRender: function () { |
|
2710 var self = this; |
|
2711 global$3.setTimeout(function () { |
|
2712 self.$el.addClass(self.classPrefix + 'in'); |
|
2713 updateLiveRegion(self, self.state.get('text')); |
|
2714 }, 100); |
|
2715 return self._super(); |
|
2716 }, |
|
2717 bindStates: function () { |
|
2718 var self = this; |
|
2719 self.state.on('change:text', function (e) { |
|
2720 self.getEl().firstChild.innerHTML = e.value; |
|
2721 updateLiveRegion(self, e.value); |
|
2722 }); |
|
2723 if (self.progressBar) { |
|
2724 self.progressBar.bindStates(); |
|
2725 self.progressBar.state.on('change:value', function (e) { |
|
2726 updateLiveRegion(self, self.state.get('text')); |
|
2727 }); |
|
2728 } |
|
2729 return self._super(); |
|
2730 }, |
|
2731 close: function () { |
|
2732 var self = this; |
|
2733 if (!self.fire('close').isDefaultPrevented()) { |
|
2734 self.remove(); |
|
2735 } |
|
2736 return self; |
|
2737 }, |
|
2738 repaint: function () { |
|
2739 var self = this; |
|
2740 var style, rect; |
|
2741 style = self.getEl().style; |
|
2742 rect = self._layoutRect; |
|
2743 style.left = rect.x + 'px'; |
|
2744 style.top = rect.y + 'px'; |
|
2745 style.zIndex = 65535 - 1; |
|
2746 } |
|
2747 }); |
|
2748 |
|
2749 function NotificationManagerImpl (editor) { |
|
2750 var getEditorContainer = function (editor) { |
|
2751 return editor.inline ? editor.getElement() : editor.getContentAreaContainer(); |
|
2752 }; |
|
2753 var getContainerWidth = function () { |
|
2754 var container = getEditorContainer(editor); |
|
2755 return funcs.getSize(container).width; |
|
2756 }; |
|
2757 var prePositionNotifications = function (notifications) { |
|
2758 each(notifications, function (notification) { |
|
2759 notification.moveTo(0, 0); |
|
2760 }); |
|
2761 }; |
|
2762 var positionNotifications = function (notifications) { |
|
2763 if (notifications.length > 0) { |
|
2764 var firstItem = notifications.slice(0, 1)[0]; |
|
2765 var container = getEditorContainer(editor); |
|
2766 firstItem.moveRel(container, 'tc-tc'); |
|
2767 each(notifications, function (notification, index) { |
|
2768 if (index > 0) { |
|
2769 notification.moveRel(notifications[index - 1].getEl(), 'bc-tc'); |
|
2770 } |
|
2771 }); |
|
2772 } |
|
2773 }; |
|
2774 var reposition = function (notifications) { |
|
2775 prePositionNotifications(notifications); |
|
2776 positionNotifications(notifications); |
|
2777 }; |
|
2778 var open = function (args, closeCallback) { |
|
2779 var extendedArgs = global$4.extend(args, { maxWidth: getContainerWidth() }); |
|
2780 var notif = new Notification(extendedArgs); |
|
2781 notif.args = extendedArgs; |
|
2782 if (extendedArgs.timeout > 0) { |
|
2783 notif.timer = setTimeout(function () { |
|
2784 notif.close(); |
|
2785 closeCallback(); |
|
2786 }, extendedArgs.timeout); |
|
2787 } |
|
2788 notif.on('close', function () { |
|
2789 closeCallback(); |
|
2790 }); |
|
2791 notif.renderTo(); |
|
2792 return notif; |
|
2793 }; |
|
2794 var close = function (notification) { |
|
2795 notification.close(); |
|
2796 }; |
|
2797 var getArgs = function (notification) { |
|
2798 return notification.args; |
|
2799 }; |
|
2800 return { |
|
2801 open: open, |
|
2802 close: close, |
|
2803 reposition: reposition, |
|
2804 getArgs: getArgs |
|
2805 }; |
|
2806 } |
|
2807 |
|
2808 function getDocumentSize(doc) { |
|
2809 var documentElement, body, scrollWidth, clientWidth; |
|
2810 var offsetWidth, scrollHeight, clientHeight, offsetHeight; |
|
2811 var max = Math.max; |
|
2812 documentElement = doc.documentElement; |
|
2813 body = doc.body; |
|
2814 scrollWidth = max(documentElement.scrollWidth, body.scrollWidth); |
|
2815 clientWidth = max(documentElement.clientWidth, body.clientWidth); |
|
2816 offsetWidth = max(documentElement.offsetWidth, body.offsetWidth); |
|
2817 scrollHeight = max(documentElement.scrollHeight, body.scrollHeight); |
|
2818 clientHeight = max(documentElement.clientHeight, body.clientHeight); |
|
2819 offsetHeight = max(documentElement.offsetHeight, body.offsetHeight); |
|
2820 return { |
|
2821 width: scrollWidth < offsetWidth ? clientWidth : scrollWidth, |
|
2822 height: scrollHeight < offsetHeight ? clientHeight : scrollHeight |
|
2823 }; |
|
2824 } |
|
2825 function updateWithTouchData(e) { |
|
2826 var keys, i; |
|
2827 if (e.changedTouches) { |
|
2828 keys = 'screenX screenY pageX pageY clientX clientY'.split(' '); |
|
2829 for (i = 0; i < keys.length; i++) { |
|
2830 e[keys[i]] = e.changedTouches[0][keys[i]]; |
|
2831 } |
|
2832 } |
|
2833 } |
|
2834 function DragHelper (id, settings) { |
|
2835 var $eventOverlay; |
|
2836 var doc = settings.document || document; |
|
2837 var downButton; |
|
2838 var start, stop$$1, drag, startX, startY; |
|
2839 settings = settings || {}; |
|
2840 var handleElement = doc.getElementById(settings.handle || id); |
|
2841 start = function (e) { |
|
2842 var docSize = getDocumentSize(doc); |
|
2843 var handleElm, cursor; |
|
2844 updateWithTouchData(e); |
|
2845 e.preventDefault(); |
|
2846 downButton = e.button; |
|
2847 handleElm = handleElement; |
|
2848 startX = e.screenX; |
|
2849 startY = e.screenY; |
|
2850 if (window.getComputedStyle) { |
|
2851 cursor = window.getComputedStyle(handleElm, null).getPropertyValue('cursor'); |
|
2852 } else { |
|
2853 cursor = handleElm.runtimeStyle.cursor; |
|
2854 } |
|
2855 $eventOverlay = global$7('<div></div>').css({ |
|
2856 position: 'absolute', |
|
2857 top: 0, |
|
2858 left: 0, |
|
2859 width: docSize.width, |
|
2860 height: docSize.height, |
|
2861 zIndex: 2147483647, |
|
2862 opacity: 0.0001, |
|
2863 cursor: cursor |
|
2864 }).appendTo(doc.body); |
|
2865 global$7(doc).on('mousemove touchmove', drag).on('mouseup touchend', stop$$1); |
|
2866 settings.start(e); |
|
2867 }; |
|
2868 drag = function (e) { |
|
2869 updateWithTouchData(e); |
|
2870 if (e.button !== downButton) { |
|
2871 return stop$$1(e); |
|
2872 } |
|
2873 e.deltaX = e.screenX - startX; |
|
2874 e.deltaY = e.screenY - startY; |
|
2875 e.preventDefault(); |
|
2876 settings.drag(e); |
|
2877 }; |
|
2878 stop$$1 = function (e) { |
|
2879 updateWithTouchData(e); |
|
2880 global$7(doc).off('mousemove touchmove', drag).off('mouseup touchend', stop$$1); |
|
2881 $eventOverlay.remove(); |
|
2882 if (settings.stop) { |
|
2883 settings.stop(e); |
|
2884 } |
|
2885 }; |
|
2886 this.destroy = function () { |
|
2887 global$7(handleElement).off(); |
|
2888 }; |
|
2889 global$7(handleElement).on('mousedown touchstart', start); |
|
2890 } |
|
2891 |
|
2892 var global$11 = tinymce.util.Tools.resolve('tinymce.ui.Factory'); |
|
2893 |
|
2894 var hasTabstopData = function (elm) { |
|
2895 return elm.getAttribute('data-mce-tabstop') ? true : false; |
|
2896 }; |
|
2897 function KeyboardNavigation (settings) { |
|
2898 var root = settings.root; |
|
2899 var focusedElement, focusedControl; |
|
2900 function isElement(node) { |
|
2901 return node && node.nodeType === 1; |
|
2902 } |
|
2903 try { |
|
2904 focusedElement = document.activeElement; |
|
2905 } catch (ex) { |
|
2906 focusedElement = document.body; |
|
2907 } |
|
2908 focusedControl = root.getParentCtrl(focusedElement); |
|
2909 function getRole(elm) { |
|
2910 elm = elm || focusedElement; |
|
2911 if (isElement(elm)) { |
|
2912 return elm.getAttribute('role'); |
|
2913 } |
|
2914 return null; |
|
2915 } |
|
2916 function getParentRole(elm) { |
|
2917 var role, parent$$1 = elm || focusedElement; |
|
2918 while (parent$$1 = parent$$1.parentNode) { |
|
2919 if (role = getRole(parent$$1)) { |
|
2920 return role; |
|
2921 } |
|
2922 } |
|
2923 } |
|
2924 function getAriaProp(name$$1) { |
|
2925 var elm = focusedElement; |
|
2926 if (isElement(elm)) { |
|
2927 return elm.getAttribute('aria-' + name$$1); |
|
2928 } |
|
2929 } |
|
2930 function isTextInputElement(elm) { |
|
2931 var tagName = elm.tagName.toUpperCase(); |
|
2932 return tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT'; |
|
2933 } |
|
2934 function canFocus(elm) { |
|
2935 if (isTextInputElement(elm) && !elm.hidden) { |
|
2936 return true; |
|
2937 } |
|
2938 if (hasTabstopData(elm)) { |
|
2939 return true; |
|
2940 } |
|
2941 if (/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell|slider)$/.test(getRole(elm))) { |
|
2942 return true; |
|
2943 } |
|
2944 return false; |
|
2945 } |
|
2946 function getFocusElements(elm) { |
|
2947 var elements = []; |
|
2948 function collect(elm) { |
|
2949 if (elm.nodeType !== 1 || elm.style.display === 'none' || elm.disabled) { |
|
2950 return; |
|
2951 } |
|
2952 if (canFocus(elm)) { |
|
2953 elements.push(elm); |
|
2954 } |
|
2955 for (var i = 0; i < elm.childNodes.length; i++) { |
|
2956 collect(elm.childNodes[i]); |
|
2957 } |
|
2958 } |
|
2959 collect(elm || root.getEl()); |
|
2960 return elements; |
|
2961 } |
|
2962 function getNavigationRoot(targetControl) { |
|
2963 var navigationRoot, controls; |
|
2964 targetControl = targetControl || focusedControl; |
|
2965 controls = targetControl.parents().toArray(); |
|
2966 controls.unshift(targetControl); |
|
2967 for (var i = 0; i < controls.length; i++) { |
|
2968 navigationRoot = controls[i]; |
|
2969 if (navigationRoot.settings.ariaRoot) { |
|
2970 break; |
|
2971 } |
|
2972 } |
|
2973 return navigationRoot; |
|
2974 } |
|
2975 function focusFirst(targetControl) { |
|
2976 var navigationRoot = getNavigationRoot(targetControl); |
|
2977 var focusElements = getFocusElements(navigationRoot.getEl()); |
|
2978 if (navigationRoot.settings.ariaRemember && 'lastAriaIndex' in navigationRoot) { |
|
2979 moveFocusToIndex(navigationRoot.lastAriaIndex, focusElements); |
|
2980 } else { |
|
2981 moveFocusToIndex(0, focusElements); |
|
2982 } |
|
2983 } |
|
2984 function moveFocusToIndex(idx, elements) { |
|
2985 if (idx < 0) { |
|
2986 idx = elements.length - 1; |
|
2987 } else if (idx >= elements.length) { |
|
2988 idx = 0; |
|
2989 } |
|
2990 if (elements[idx]) { |
|
2991 elements[idx].focus(); |
|
2992 } |
|
2993 return idx; |
|
2994 } |
|
2995 function moveFocus(dir, elements) { |
|
2996 var idx = -1; |
|
2997 var navigationRoot = getNavigationRoot(); |
|
2998 elements = elements || getFocusElements(navigationRoot.getEl()); |
|
2999 for (var i = 0; i < elements.length; i++) { |
|
3000 if (elements[i] === focusedElement) { |
|
3001 idx = i; |
|
3002 } |
|
3003 } |
|
3004 idx += dir; |
|
3005 navigationRoot.lastAriaIndex = moveFocusToIndex(idx, elements); |
|
3006 } |
|
3007 function left() { |
|
3008 var parentRole = getParentRole(); |
|
3009 if (parentRole === 'tablist') { |
|
3010 moveFocus(-1, getFocusElements(focusedElement.parentNode)); |
|
3011 } else if (focusedControl.parent().submenu) { |
|
3012 cancel(); |
|
3013 } else { |
|
3014 moveFocus(-1); |
|
3015 } |
|
3016 } |
|
3017 function right() { |
|
3018 var role = getRole(), parentRole = getParentRole(); |
|
3019 if (parentRole === 'tablist') { |
|
3020 moveFocus(1, getFocusElements(focusedElement.parentNode)); |
|
3021 } else if (role === 'menuitem' && parentRole === 'menu' && getAriaProp('haspopup')) { |
|
3022 enter(); |
|
3023 } else { |
|
3024 moveFocus(1); |
|
3025 } |
|
3026 } |
|
3027 function up() { |
|
3028 moveFocus(-1); |
|
3029 } |
|
3030 function down() { |
|
3031 var role = getRole(), parentRole = getParentRole(); |
|
3032 if (role === 'menuitem' && parentRole === 'menubar') { |
|
3033 enter(); |
|
3034 } else if (role === 'button' && getAriaProp('haspopup')) { |
|
3035 enter({ key: 'down' }); |
|
3036 } else { |
|
3037 moveFocus(1); |
|
3038 } |
|
3039 } |
|
3040 function tab(e) { |
|
3041 var parentRole = getParentRole(); |
|
3042 if (parentRole === 'tablist') { |
|
3043 var elm = getFocusElements(focusedControl.getEl('body'))[0]; |
|
3044 if (elm) { |
|
3045 elm.focus(); |
|
3046 } |
|
3047 } else { |
|
3048 moveFocus(e.shiftKey ? -1 : 1); |
|
3049 } |
|
3050 } |
|
3051 function cancel() { |
|
3052 focusedControl.fire('cancel'); |
|
3053 } |
|
3054 function enter(aria) { |
|
3055 aria = aria || {}; |
|
3056 focusedControl.fire('click', { |
|
3057 target: focusedElement, |
|
3058 aria: aria |
|
3059 }); |
|
3060 } |
|
3061 root.on('keydown', function (e) { |
|
3062 function handleNonTabOrEscEvent(e, handler) { |
|
3063 if (isTextInputElement(focusedElement) || hasTabstopData(focusedElement)) { |
|
3064 return; |
|
3065 } |
|
3066 if (getRole(focusedElement) === 'slider') { |
|
3067 return; |
|
3068 } |
|
3069 if (handler(e) !== false) { |
|
3070 e.preventDefault(); |
|
3071 } |
|
3072 } |
|
3073 if (e.isDefaultPrevented()) { |
|
3074 return; |
|
3075 } |
|
3076 switch (e.keyCode) { |
|
3077 case 37: |
|
3078 handleNonTabOrEscEvent(e, left); |
|
3079 break; |
|
3080 case 39: |
|
3081 handleNonTabOrEscEvent(e, right); |
|
3082 break; |
|
3083 case 38: |
|
3084 handleNonTabOrEscEvent(e, up); |
|
3085 break; |
|
3086 case 40: |
|
3087 handleNonTabOrEscEvent(e, down); |
|
3088 break; |
|
3089 case 27: |
|
3090 cancel(); |
|
3091 break; |
|
3092 case 14: |
|
3093 case 13: |
|
3094 case 32: |
|
3095 handleNonTabOrEscEvent(e, enter); |
|
3096 break; |
|
3097 case 9: |
|
3098 tab(e); |
|
3099 e.preventDefault(); |
|
3100 break; |
|
3101 } |
|
3102 }); |
|
3103 root.on('focusin', function (e) { |
|
3104 focusedElement = e.target; |
|
3105 focusedControl = e.control; |
|
3106 }); |
|
3107 return { focusFirst: focusFirst }; |
|
3108 } |
|
3109 |
|
3110 var selectorCache = {}; |
|
3111 var Container = Control$1.extend({ |
|
3112 init: function (settings) { |
|
3113 var self = this; |
|
3114 self._super(settings); |
|
3115 settings = self.settings; |
|
3116 if (settings.fixed) { |
|
3117 self.state.set('fixed', true); |
|
3118 } |
|
3119 self._items = new Collection$2(); |
|
3120 if (self.isRtl()) { |
|
3121 self.classes.add('rtl'); |
|
3122 } |
|
3123 self.bodyClasses = new ClassList(function () { |
|
3124 if (self.state.get('rendered')) { |
|
3125 self.getEl('body').className = this.toString(); |
|
3126 } |
|
3127 }); |
|
3128 self.bodyClasses.prefix = self.classPrefix; |
|
3129 self.classes.add('container'); |
|
3130 self.bodyClasses.add('container-body'); |
|
3131 if (settings.containerCls) { |
|
3132 self.classes.add(settings.containerCls); |
|
3133 } |
|
3134 self._layout = global$11.create((settings.layout || '') + 'layout'); |
|
3135 if (self.settings.items) { |
|
3136 self.add(self.settings.items); |
|
3137 } else { |
|
3138 self.add(self.render()); |
|
3139 } |
|
3140 self._hasBody = true; |
|
3141 }, |
|
3142 items: function () { |
|
3143 return this._items; |
|
3144 }, |
|
3145 find: function (selector) { |
|
3146 selector = selectorCache[selector] = selectorCache[selector] || new Selector(selector); |
|
3147 return selector.find(this); |
|
3148 }, |
|
3149 add: function (items) { |
|
3150 var self = this; |
|
3151 self.items().add(self.create(items)).parent(self); |
|
3152 return self; |
|
3153 }, |
|
3154 focus: function (keyboard) { |
|
3155 var self = this; |
|
3156 var focusCtrl, keyboardNav, items; |
|
3157 if (keyboard) { |
|
3158 keyboardNav = self.keyboardNav || self.parents().eq(-1)[0].keyboardNav; |
|
3159 if (keyboardNav) { |
|
3160 keyboardNav.focusFirst(self); |
|
3161 return; |
|
3162 } |
|
3163 } |
|
3164 items = self.find('*'); |
|
3165 if (self.statusbar) { |
|
3166 items.add(self.statusbar.items()); |
|
3167 } |
|
3168 items.each(function (ctrl) { |
|
3169 if (ctrl.settings.autofocus) { |
|
3170 focusCtrl = null; |
|
3171 return false; |
|
3172 } |
|
3173 if (ctrl.canFocus) { |
|
3174 focusCtrl = focusCtrl || ctrl; |
|
3175 } |
|
3176 }); |
|
3177 if (focusCtrl) { |
|
3178 focusCtrl.focus(); |
|
3179 } |
|
3180 return self; |
|
3181 }, |
|
3182 replace: function (oldItem, newItem) { |
|
3183 var ctrlElm; |
|
3184 var items = this.items(); |
|
3185 var i = items.length; |
|
3186 while (i--) { |
|
3187 if (items[i] === oldItem) { |
|
3188 items[i] = newItem; |
|
3189 break; |
|
3190 } |
|
3191 } |
|
3192 if (i >= 0) { |
|
3193 ctrlElm = newItem.getEl(); |
|
3194 if (ctrlElm) { |
|
3195 ctrlElm.parentNode.removeChild(ctrlElm); |
|
3196 } |
|
3197 ctrlElm = oldItem.getEl(); |
|
3198 if (ctrlElm) { |
|
3199 ctrlElm.parentNode.removeChild(ctrlElm); |
|
3200 } |
|
3201 } |
|
3202 newItem.parent(this); |
|
3203 }, |
|
3204 create: function (items) { |
|
3205 var self = this; |
|
3206 var settings; |
|
3207 var ctrlItems = []; |
|
3208 if (!global$4.isArray(items)) { |
|
3209 items = [items]; |
|
3210 } |
|
3211 global$4.each(items, function (item) { |
|
3212 if (item) { |
|
3213 if (!(item instanceof Control$1)) { |
|
3214 if (typeof item === 'string') { |
|
3215 item = { type: item }; |
|
3216 } |
|
3217 settings = global$4.extend({}, self.settings.defaults, item); |
|
3218 item.type = settings.type = settings.type || item.type || self.settings.defaultType || (settings.defaults ? settings.defaults.type : null); |
|
3219 item = global$11.create(settings); |
|
3220 } |
|
3221 ctrlItems.push(item); |
|
3222 } |
|
3223 }); |
|
3224 return ctrlItems; |
|
3225 }, |
|
3226 renderNew: function () { |
|
3227 var self = this; |
|
3228 self.items().each(function (ctrl, index) { |
|
3229 var containerElm; |
|
3230 ctrl.parent(self); |
|
3231 if (!ctrl.state.get('rendered')) { |
|
3232 containerElm = self.getEl('body'); |
|
3233 if (containerElm.hasChildNodes() && index <= containerElm.childNodes.length - 1) { |
|
3234 global$7(containerElm.childNodes[index]).before(ctrl.renderHtml()); |
|
3235 } else { |
|
3236 global$7(containerElm).append(ctrl.renderHtml()); |
|
3237 } |
|
3238 ctrl.postRender(); |
|
3239 $_cqjgb518wjjgwek2f.add(ctrl); |
|
3240 } |
|
3241 }); |
|
3242 self._layout.applyClasses(self.items().filter(':visible')); |
|
3243 self._lastRect = null; |
|
3244 return self; |
|
3245 }, |
|
3246 append: function (items) { |
|
3247 return this.add(items).renderNew(); |
|
3248 }, |
|
3249 prepend: function (items) { |
|
3250 var self = this; |
|
3251 self.items().set(self.create(items).concat(self.items().toArray())); |
|
3252 return self.renderNew(); |
|
3253 }, |
|
3254 insert: function (items, index, before) { |
|
3255 var self = this; |
|
3256 var curItems, beforeItems, afterItems; |
|
3257 items = self.create(items); |
|
3258 curItems = self.items(); |
|
3259 if (!before && index < curItems.length - 1) { |
|
3260 index += 1; |
|
3261 } |
|
3262 if (index >= 0 && index < curItems.length) { |
|
3263 beforeItems = curItems.slice(0, index).toArray(); |
|
3264 afterItems = curItems.slice(index).toArray(); |
|
3265 curItems.set(beforeItems.concat(items, afterItems)); |
|
3266 } |
|
3267 return self.renderNew(); |
|
3268 }, |
|
3269 fromJSON: function (data) { |
|
3270 var self = this; |
|
3271 for (var name in data) { |
|
3272 self.find('#' + name).value(data[name]); |
|
3273 } |
|
3274 return self; |
|
3275 }, |
|
3276 toJSON: function () { |
|
3277 var self = this, data = {}; |
|
3278 self.find('*').each(function (ctrl) { |
|
3279 var name = ctrl.name(), value = ctrl.value(); |
|
3280 if (name && typeof value !== 'undefined') { |
|
3281 data[name] = value; |
|
3282 } |
|
3283 }); |
|
3284 return data; |
|
3285 }, |
|
3286 renderHtml: function () { |
|
3287 var self = this, layout = self._layout, role = this.settings.role; |
|
3288 self.preRender(); |
|
3289 layout.preRender(self); |
|
3290 return '<div id="' + self._id + '" class="' + self.classes + '"' + (role ? ' role="' + this.settings.role + '"' : '') + '>' + '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</div>'; |
|
3291 }, |
|
3292 postRender: function () { |
|
3293 var self = this; |
|
3294 var box; |
|
3295 self.items().exec('postRender'); |
|
3296 self._super(); |
|
3297 self._layout.postRender(self); |
|
3298 self.state.set('rendered', true); |
|
3299 if (self.settings.style) { |
|
3300 self.$el.css(self.settings.style); |
|
3301 } |
|
3302 if (self.settings.border) { |
|
3303 box = self.borderBox; |
|
3304 self.$el.css({ |
|
3305 'border-top-width': box.top, |
|
3306 'border-right-width': box.right, |
|
3307 'border-bottom-width': box.bottom, |
|
3308 'border-left-width': box.left |
|
3309 }); |
|
3310 } |
|
3311 if (!self.parent()) { |
|
3312 self.keyboardNav = KeyboardNavigation({ root: self }); |
|
3313 } |
|
3314 return self; |
|
3315 }, |
|
3316 initLayoutRect: function () { |
|
3317 var self = this, layoutRect = self._super(); |
|
3318 self._layout.recalc(self); |
|
3319 return layoutRect; |
|
3320 }, |
|
3321 recalc: function () { |
|
3322 var self = this; |
|
3323 var rect = self._layoutRect; |
|
3324 var lastRect = self._lastRect; |
|
3325 if (!lastRect || lastRect.w !== rect.w || lastRect.h !== rect.h) { |
|
3326 self._layout.recalc(self); |
|
3327 rect = self.layoutRect(); |
|
3328 self._lastRect = { |
|
3329 x: rect.x, |
|
3330 y: rect.y, |
|
3331 w: rect.w, |
|
3332 h: rect.h |
|
3333 }; |
|
3334 return true; |
|
3335 } |
|
3336 }, |
|
3337 reflow: function () { |
|
3338 var i; |
|
3339 $_cqjgb518wjjgwek2f.remove(this); |
|
3340 if (this.visible()) { |
|
3341 Control$1.repaintControls = []; |
|
3342 Control$1.repaintControls.map = {}; |
|
3343 this.recalc(); |
|
3344 i = Control$1.repaintControls.length; |
|
3345 while (i--) { |
|
3346 Control$1.repaintControls[i].repaint(); |
|
3347 } |
|
3348 if (this.settings.layout !== 'flow' && this.settings.layout !== 'stack') { |
|
3349 this.repaint(); |
|
3350 } |
|
3351 Control$1.repaintControls = []; |
|
3352 } |
|
3353 return this; |
|
3354 } |
|
3355 }); |
|
3356 |
|
3357 var $_8woeth19ajjgwek4b = { |
|
3358 init: function () { |
|
3359 var self = this; |
|
3360 self.on('repaint', self.renderScroll); |
|
3361 }, |
|
3362 renderScroll: function () { |
|
3363 var self = this, margin = 2; |
|
3364 function repaintScroll() { |
|
3365 var hasScrollH, hasScrollV, bodyElm; |
|
3366 function repaintAxis(axisName, posName, sizeName, contentSizeName, hasScroll, ax) { |
|
3367 var containerElm, scrollBarElm, scrollThumbElm; |
|
3368 var containerSize, scrollSize, ratio, rect; |
|
3369 var posNameLower, sizeNameLower; |
|
3370 scrollBarElm = self.getEl('scroll' + axisName); |
|
3371 if (scrollBarElm) { |
|
3372 posNameLower = posName.toLowerCase(); |
|
3373 sizeNameLower = sizeName.toLowerCase(); |
|
3374 global$7(self.getEl('absend')).css(posNameLower, self.layoutRect()[contentSizeName] - 1); |
|
3375 if (!hasScroll) { |
|
3376 global$7(scrollBarElm).css('display', 'none'); |
|
3377 return; |
|
3378 } |
|
3379 global$7(scrollBarElm).css('display', 'block'); |
|
3380 containerElm = self.getEl('body'); |
|
3381 scrollThumbElm = self.getEl('scroll' + axisName + 't'); |
|
3382 containerSize = containerElm['client' + sizeName] - margin * 2; |
|
3383 containerSize -= hasScrollH && hasScrollV ? scrollBarElm['client' + ax] : 0; |
|
3384 scrollSize = containerElm['scroll' + sizeName]; |
|
3385 ratio = containerSize / scrollSize; |
|
3386 rect = {}; |
|
3387 rect[posNameLower] = containerElm['offset' + posName] + margin; |
|
3388 rect[sizeNameLower] = containerSize; |
|
3389 global$7(scrollBarElm).css(rect); |
|
3390 rect = {}; |
|
3391 rect[posNameLower] = containerElm['scroll' + posName] * ratio; |
|
3392 rect[sizeNameLower] = containerSize * ratio; |
|
3393 global$7(scrollThumbElm).css(rect); |
|
3394 } |
|
3395 } |
|
3396 bodyElm = self.getEl('body'); |
|
3397 hasScrollH = bodyElm.scrollWidth > bodyElm.clientWidth; |
|
3398 hasScrollV = bodyElm.scrollHeight > bodyElm.clientHeight; |
|
3399 repaintAxis('h', 'Left', 'Width', 'contentW', hasScrollH, 'Height'); |
|
3400 repaintAxis('v', 'Top', 'Height', 'contentH', hasScrollV, 'Width'); |
|
3401 } |
|
3402 function addScroll() { |
|
3403 function addScrollAxis(axisName, posName, sizeName, deltaPosName, ax) { |
|
3404 var scrollStart; |
|
3405 var axisId = self._id + '-scroll' + axisName, prefix = self.classPrefix; |
|
3406 global$7(self.getEl()).append('<div id="' + axisId + '" class="' + prefix + 'scrollbar ' + prefix + 'scrollbar-' + axisName + '">' + '<div id="' + axisId + 't" class="' + prefix + 'scrollbar-thumb"></div>' + '</div>'); |
|
3407 self.draghelper = new DragHelper(axisId + 't', { |
|
3408 start: function () { |
|
3409 scrollStart = self.getEl('body')['scroll' + posName]; |
|
3410 global$7('#' + axisId).addClass(prefix + 'active'); |
|
3411 }, |
|
3412 drag: function (e) { |
|
3413 var ratio, hasScrollH, hasScrollV, containerSize; |
|
3414 var layoutRect = self.layoutRect(); |
|
3415 hasScrollH = layoutRect.contentW > layoutRect.innerW; |
|
3416 hasScrollV = layoutRect.contentH > layoutRect.innerH; |
|
3417 containerSize = self.getEl('body')['client' + sizeName] - margin * 2; |
|
3418 containerSize -= hasScrollH && hasScrollV ? self.getEl('scroll' + axisName)['client' + ax] : 0; |
|
3419 ratio = containerSize / self.getEl('body')['scroll' + sizeName]; |
|
3420 self.getEl('body')['scroll' + posName] = scrollStart + e['delta' + deltaPosName] / ratio; |
|
3421 }, |
|
3422 stop: function () { |
|
3423 global$7('#' + axisId).removeClass(prefix + 'active'); |
|
3424 } |
|
3425 }); |
|
3426 } |
|
3427 self.classes.add('scroll'); |
|
3428 addScrollAxis('v', 'Top', 'Height', 'Y', 'Width'); |
|
3429 addScrollAxis('h', 'Left', 'Width', 'X', 'Height'); |
|
3430 } |
|
3431 if (self.settings.autoScroll) { |
|
3432 if (!self._hasScroll) { |
|
3433 self._hasScroll = true; |
|
3434 addScroll(); |
|
3435 self.on('wheel', function (e) { |
|
3436 var bodyEl = self.getEl('body'); |
|
3437 bodyEl.scrollLeft += (e.deltaX || 0) * 10; |
|
3438 bodyEl.scrollTop += e.deltaY * 10; |
|
3439 repaintScroll(); |
|
3440 }); |
|
3441 global$7(self.getEl('body')).on('scroll', repaintScroll); |
|
3442 } |
|
3443 repaintScroll(); |
|
3444 } |
|
3445 } |
|
3446 }; |
|
3447 |
|
3448 var Panel = Container.extend({ |
|
3449 Defaults: { |
|
3450 layout: 'fit', |
|
3451 containerCls: 'panel' |
|
3452 }, |
|
3453 Mixins: [$_8woeth19ajjgwek4b], |
|
3454 renderHtml: function () { |
|
3455 var self = this; |
|
3456 var layout = self._layout; |
|
3457 var innerHtml = self.settings.html; |
|
3458 self.preRender(); |
|
3459 layout.preRender(self); |
|
3460 if (typeof innerHtml === 'undefined') { |
|
3461 innerHtml = '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + layout.renderHtml(self) + '</div>'; |
|
3462 } else { |
|
3463 if (typeof innerHtml === 'function') { |
|
3464 innerHtml = innerHtml.call(self); |
|
3465 } |
|
3466 self._hasBody = false; |
|
3467 } |
|
3468 return '<div id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1" role="group">' + (self._preBodyHtml || '') + innerHtml + '</div>'; |
|
3469 } |
|
3470 }); |
|
3471 |
|
3472 var $_20hy1119bjjgwek4f = { |
|
3473 resizeToContent: function () { |
|
3474 this._layoutRect.autoResize = true; |
|
3475 this._lastRect = null; |
|
3476 this.reflow(); |
|
3477 }, |
|
3478 resizeTo: function (w, h) { |
|
3479 if (w <= 1 || h <= 1) { |
|
3480 var rect = funcs.getWindowSize(); |
|
3481 w = w <= 1 ? w * rect.w : w; |
|
3482 h = h <= 1 ? h * rect.h : h; |
|
3483 } |
|
3484 this._layoutRect.autoResize = false; |
|
3485 return this.layoutRect({ |
|
3486 minW: w, |
|
3487 minH: h, |
|
3488 w: w, |
|
3489 h: h |
|
3490 }).reflow(); |
|
3491 }, |
|
3492 resizeBy: function (dw, dh) { |
|
3493 var self = this, rect = self.layoutRect(); |
|
3494 return self.resizeTo(rect.w + dw, rect.h + dh); |
|
3495 } |
|
3496 }; |
|
3497 |
|
3498 var documentClickHandler; |
|
3499 var documentScrollHandler; |
|
3500 var windowResizeHandler; |
|
3501 var visiblePanels = []; |
|
3502 var zOrder = []; |
|
3503 var hasModal; |
|
3504 function isChildOf(ctrl, parent$$1) { |
|
3505 while (ctrl) { |
|
3506 if (ctrl === parent$$1) { |
|
3507 return true; |
|
3508 } |
|
3509 ctrl = ctrl.parent(); |
|
3510 } |
|
3511 } |
|
3512 function skipOrHidePanels(e) { |
|
3513 var i = visiblePanels.length; |
|
3514 while (i--) { |
|
3515 var panel = visiblePanels[i], clickCtrl = panel.getParentCtrl(e.target); |
|
3516 if (panel.settings.autohide) { |
|
3517 if (clickCtrl) { |
|
3518 if (isChildOf(clickCtrl, panel) || panel.parent() === clickCtrl) { |
|
3519 continue; |
|
3520 } |
|
3521 } |
|
3522 e = panel.fire('autohide', { target: e.target }); |
|
3523 if (!e.isDefaultPrevented()) { |
|
3524 panel.hide(); |
|
3525 } |
|
3526 } |
|
3527 } |
|
3528 } |
|
3529 function bindDocumentClickHandler() { |
|
3530 if (!documentClickHandler) { |
|
3531 documentClickHandler = function (e) { |
|
3532 if (e.button === 2) { |
|
3533 return; |
|
3534 } |
|
3535 skipOrHidePanels(e); |
|
3536 }; |
|
3537 global$7(document).on('click touchstart', documentClickHandler); |
|
3538 } |
|
3539 } |
|
3540 function bindDocumentScrollHandler() { |
|
3541 if (!documentScrollHandler) { |
|
3542 documentScrollHandler = function () { |
|
3543 var i; |
|
3544 i = visiblePanels.length; |
|
3545 while (i--) { |
|
3546 repositionPanel$1(visiblePanels[i]); |
|
3547 } |
|
3548 }; |
|
3549 global$7(window).on('scroll', documentScrollHandler); |
|
3550 } |
|
3551 } |
|
3552 function bindWindowResizeHandler() { |
|
3553 if (!windowResizeHandler) { |
|
3554 var docElm_1 = document.documentElement; |
|
3555 var clientWidth_1 = docElm_1.clientWidth, clientHeight_1 = docElm_1.clientHeight; |
|
3556 windowResizeHandler = function () { |
|
3557 if (!document.all || clientWidth_1 !== docElm_1.clientWidth || clientHeight_1 !== docElm_1.clientHeight) { |
|
3558 clientWidth_1 = docElm_1.clientWidth; |
|
3559 clientHeight_1 = docElm_1.clientHeight; |
|
3560 FloatPanel.hideAll(); |
|
3561 } |
|
3562 }; |
|
3563 global$7(window).on('resize', windowResizeHandler); |
|
3564 } |
|
3565 } |
|
3566 function repositionPanel$1(panel) { |
|
3567 var scrollY$$1 = funcs.getViewPort().y; |
|
3568 function toggleFixedChildPanels(fixed, deltaY) { |
|
3569 var parent$$1; |
|
3570 for (var i = 0; i < visiblePanels.length; i++) { |
|
3571 if (visiblePanels[i] !== panel) { |
|
3572 parent$$1 = visiblePanels[i].parent(); |
|
3573 while (parent$$1 && (parent$$1 = parent$$1.parent())) { |
|
3574 if (parent$$1 === panel) { |
|
3575 visiblePanels[i].fixed(fixed).moveBy(0, deltaY).repaint(); |
|
3576 } |
|
3577 } |
|
3578 } |
|
3579 } |
|
3580 } |
|
3581 if (panel.settings.autofix) { |
|
3582 if (!panel.state.get('fixed')) { |
|
3583 panel._autoFixY = panel.layoutRect().y; |
|
3584 if (panel._autoFixY < scrollY$$1) { |
|
3585 panel.fixed(true).layoutRect({ y: 0 }).repaint(); |
|
3586 toggleFixedChildPanels(true, scrollY$$1 - panel._autoFixY); |
|
3587 } |
|
3588 } else { |
|
3589 if (panel._autoFixY > scrollY$$1) { |
|
3590 panel.fixed(false).layoutRect({ y: panel._autoFixY }).repaint(); |
|
3591 toggleFixedChildPanels(false, panel._autoFixY - scrollY$$1); |
|
3592 } |
|
3593 } |
|
3594 } |
|
3595 } |
|
3596 function addRemove(add, ctrl) { |
|
3597 var i, zIndex = FloatPanel.zIndex || 65535, topModal; |
|
3598 if (add) { |
|
3599 zOrder.push(ctrl); |
|
3600 } else { |
|
3601 i = zOrder.length; |
|
3602 while (i--) { |
|
3603 if (zOrder[i] === ctrl) { |
|
3604 zOrder.splice(i, 1); |
|
3605 } |
|
3606 } |
|
3607 } |
|
3608 if (zOrder.length) { |
|
3609 for (i = 0; i < zOrder.length; i++) { |
|
3610 if (zOrder[i].modal) { |
|
3611 zIndex++; |
|
3612 topModal = zOrder[i]; |
|
3613 } |
|
3614 zOrder[i].getEl().style.zIndex = zIndex; |
|
3615 zOrder[i].zIndex = zIndex; |
|
3616 zIndex++; |
|
3617 } |
|
3618 } |
|
3619 var modalBlockEl = global$7('#' + ctrl.classPrefix + 'modal-block', ctrl.getContainerElm())[0]; |
|
3620 if (topModal) { |
|
3621 global$7(modalBlockEl).css('z-index', topModal.zIndex - 1); |
|
3622 } else if (modalBlockEl) { |
|
3623 modalBlockEl.parentNode.removeChild(modalBlockEl); |
|
3624 hasModal = false; |
|
3625 } |
|
3626 FloatPanel.currentZIndex = zIndex; |
|
3627 } |
|
3628 var FloatPanel = Panel.extend({ |
|
3629 Mixins: [ |
|
3630 $_8zu82i18yjjgwek2l, |
|
3631 $_20hy1119bjjgwek4f |
|
3632 ], |
|
3633 init: function (settings) { |
|
3634 var self$$1 = this; |
|
3635 self$$1._super(settings); |
|
3636 self$$1._eventsRoot = self$$1; |
|
3637 self$$1.classes.add('floatpanel'); |
|
3638 if (settings.autohide) { |
|
3639 bindDocumentClickHandler(); |
|
3640 bindWindowResizeHandler(); |
|
3641 visiblePanels.push(self$$1); |
|
3642 } |
|
3643 if (settings.autofix) { |
|
3644 bindDocumentScrollHandler(); |
|
3645 self$$1.on('move', function () { |
|
3646 repositionPanel$1(this); |
|
3647 }); |
|
3648 } |
|
3649 self$$1.on('postrender show', function (e) { |
|
3650 if (e.control === self$$1) { |
|
3651 var $modalBlockEl_1; |
|
3652 var prefix_1 = self$$1.classPrefix; |
|
3653 if (self$$1.modal && !hasModal) { |
|
3654 $modalBlockEl_1 = global$7('#' + prefix_1 + 'modal-block', self$$1.getContainerElm()); |
|
3655 if (!$modalBlockEl_1[0]) { |
|
3656 $modalBlockEl_1 = global$7('<div id="' + prefix_1 + 'modal-block" class="' + prefix_1 + 'reset ' + prefix_1 + 'fade"></div>').appendTo(self$$1.getContainerElm()); |
|
3657 } |
|
3658 global$3.setTimeout(function () { |
|
3659 $modalBlockEl_1.addClass(prefix_1 + 'in'); |
|
3660 global$7(self$$1.getEl()).addClass(prefix_1 + 'in'); |
|
3661 }); |
|
3662 hasModal = true; |
|
3663 } |
|
3664 addRemove(true, self$$1); |
|
3665 } |
|
3666 }); |
|
3667 self$$1.on('show', function () { |
|
3668 self$$1.parents().each(function (ctrl) { |
|
3669 if (ctrl.state.get('fixed')) { |
|
3670 self$$1.fixed(true); |
|
3671 return false; |
|
3672 } |
|
3673 }); |
|
3674 }); |
|
3675 if (settings.popover) { |
|
3676 self$$1._preBodyHtml = '<div class="' + self$$1.classPrefix + 'arrow"></div>'; |
|
3677 self$$1.classes.add('popover').add('bottom').add(self$$1.isRtl() ? 'end' : 'start'); |
|
3678 } |
|
3679 self$$1.aria('label', settings.ariaLabel); |
|
3680 self$$1.aria('labelledby', self$$1._id); |
|
3681 self$$1.aria('describedby', self$$1.describedBy || self$$1._id + '-none'); |
|
3682 }, |
|
3683 fixed: function (state) { |
|
3684 var self$$1 = this; |
|
3685 if (self$$1.state.get('fixed') !== state) { |
|
3686 if (self$$1.state.get('rendered')) { |
|
3687 var viewport = funcs.getViewPort(); |
|
3688 if (state) { |
|
3689 self$$1.layoutRect().y -= viewport.y; |
|
3690 } else { |
|
3691 self$$1.layoutRect().y += viewport.y; |
|
3692 } |
|
3693 } |
|
3694 self$$1.classes.toggle('fixed', state); |
|
3695 self$$1.state.set('fixed', state); |
|
3696 } |
|
3697 return self$$1; |
|
3698 }, |
|
3699 show: function () { |
|
3700 var self$$1 = this; |
|
3701 var i; |
|
3702 var state = self$$1._super(); |
|
3703 i = visiblePanels.length; |
|
3704 while (i--) { |
|
3705 if (visiblePanels[i] === self$$1) { |
|
3706 break; |
|
3707 } |
|
3708 } |
|
3709 if (i === -1) { |
|
3710 visiblePanels.push(self$$1); |
|
3711 } |
|
3712 return state; |
|
3713 }, |
|
3714 hide: function () { |
|
3715 removeVisiblePanel(this); |
|
3716 addRemove(false, this); |
|
3717 return this._super(); |
|
3718 }, |
|
3719 hideAll: function () { |
|
3720 FloatPanel.hideAll(); |
|
3721 }, |
|
3722 close: function () { |
|
3723 var self$$1 = this; |
|
3724 if (!self$$1.fire('close').isDefaultPrevented()) { |
|
3725 self$$1.remove(); |
|
3726 addRemove(false, self$$1); |
|
3727 } |
|
3728 return self$$1; |
|
3729 }, |
|
3730 remove: function () { |
|
3731 removeVisiblePanel(this); |
|
3732 this._super(); |
|
3733 }, |
|
3734 postRender: function () { |
|
3735 var self$$1 = this; |
|
3736 if (self$$1.settings.bodyRole) { |
|
3737 this.getEl('body').setAttribute('role', self$$1.settings.bodyRole); |
|
3738 } |
|
3739 return self$$1._super(); |
|
3740 } |
|
3741 }); |
|
3742 FloatPanel.hideAll = function () { |
|
3743 var i = visiblePanels.length; |
|
3744 while (i--) { |
|
3745 var panel = visiblePanels[i]; |
|
3746 if (panel && panel.settings.autohide) { |
|
3747 panel.hide(); |
|
3748 visiblePanels.splice(i, 1); |
|
3749 } |
|
3750 } |
|
3751 }; |
|
3752 function removeVisiblePanel(panel) { |
|
3753 var i; |
|
3754 i = visiblePanels.length; |
|
3755 while (i--) { |
|
3756 if (visiblePanels[i] === panel) { |
|
3757 visiblePanels.splice(i, 1); |
|
3758 } |
|
3759 } |
|
3760 i = zOrder.length; |
|
3761 while (i--) { |
|
3762 if (zOrder[i] === panel) { |
|
3763 zOrder.splice(i, 1); |
|
3764 } |
|
3765 } |
|
3766 } |
|
3767 |
|
3768 var windows = []; |
|
3769 var oldMetaValue = ''; |
|
3770 function toggleFullScreenState(state) { |
|
3771 var noScaleMetaValue = 'width=device-width,initial-scale=1.0,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0'; |
|
3772 var viewport = global$7('meta[name=viewport]')[0], contentValue; |
|
3773 if (global$1.overrideViewPort === false) { |
|
3774 return; |
|
3775 } |
|
3776 if (!viewport) { |
|
3777 viewport = document.createElement('meta'); |
|
3778 viewport.setAttribute('name', 'viewport'); |
|
3779 document.getElementsByTagName('head')[0].appendChild(viewport); |
|
3780 } |
|
3781 contentValue = viewport.getAttribute('content'); |
|
3782 if (contentValue && typeof oldMetaValue !== 'undefined') { |
|
3783 oldMetaValue = contentValue; |
|
3784 } |
|
3785 viewport.setAttribute('content', state ? noScaleMetaValue : oldMetaValue); |
|
3786 } |
|
3787 function toggleBodyFullScreenClasses(classPrefix, state) { |
|
3788 if (checkFullscreenWindows() && state === false) { |
|
3789 global$7([ |
|
3790 document.documentElement, |
|
3791 document.body |
|
3792 ]).removeClass(classPrefix + 'fullscreen'); |
|
3793 } |
|
3794 } |
|
3795 function checkFullscreenWindows() { |
|
3796 for (var i = 0; i < windows.length; i++) { |
|
3797 if (windows[i]._fullscreen) { |
|
3798 return true; |
|
3799 } |
|
3800 } |
|
3801 return false; |
|
3802 } |
|
3803 function handleWindowResize() { |
|
3804 if (!global$1.desktop) { |
|
3805 var lastSize_1 = { |
|
3806 w: window.innerWidth, |
|
3807 h: window.innerHeight |
|
3808 }; |
|
3809 global$3.setInterval(function () { |
|
3810 var w = window.innerWidth, h = window.innerHeight; |
|
3811 if (lastSize_1.w !== w || lastSize_1.h !== h) { |
|
3812 lastSize_1 = { |
|
3813 w: w, |
|
3814 h: h |
|
3815 }; |
|
3816 global$7(window).trigger('resize'); |
|
3817 } |
|
3818 }, 100); |
|
3819 } |
|
3820 function reposition() { |
|
3821 var i; |
|
3822 var rect = funcs.getWindowSize(); |
|
3823 var layoutRect; |
|
3824 for (i = 0; i < windows.length; i++) { |
|
3825 layoutRect = windows[i].layoutRect(); |
|
3826 windows[i].moveTo(windows[i].settings.x || Math.max(0, rect.w / 2 - layoutRect.w / 2), windows[i].settings.y || Math.max(0, rect.h / 2 - layoutRect.h / 2)); |
|
3827 } |
|
3828 } |
|
3829 global$7(window).on('resize', reposition); |
|
3830 } |
|
3831 var Window$$1 = FloatPanel.extend({ |
|
3832 modal: true, |
|
3833 Defaults: { |
|
3834 border: 1, |
|
3835 layout: 'flex', |
|
3836 containerCls: 'panel', |
|
3837 role: 'dialog', |
|
3838 callbacks: { |
|
3839 submit: function () { |
|
3840 this.fire('submit', { data: this.toJSON() }); |
|
3841 }, |
|
3842 close: function () { |
|
3843 this.close(); |
|
3844 } |
|
3845 } |
|
3846 }, |
|
3847 init: function (settings) { |
|
3848 var self$$1 = this; |
|
3849 self$$1._super(settings); |
|
3850 if (self$$1.isRtl()) { |
|
3851 self$$1.classes.add('rtl'); |
|
3852 } |
|
3853 self$$1.classes.add('window'); |
|
3854 self$$1.bodyClasses.add('window-body'); |
|
3855 self$$1.state.set('fixed', true); |
|
3856 if (settings.buttons) { |
|
3857 self$$1.statusbar = new Panel({ |
|
3858 layout: 'flex', |
|
3859 border: '1 0 0 0', |
|
3860 spacing: 3, |
|
3861 padding: 10, |
|
3862 align: 'center', |
|
3863 pack: self$$1.isRtl() ? 'start' : 'end', |
|
3864 defaults: { type: 'button' }, |
|
3865 items: settings.buttons |
|
3866 }); |
|
3867 self$$1.statusbar.classes.add('foot'); |
|
3868 self$$1.statusbar.parent(self$$1); |
|
3869 } |
|
3870 self$$1.on('click', function (e) { |
|
3871 var closeClass = self$$1.classPrefix + 'close'; |
|
3872 if (funcs.hasClass(e.target, closeClass) || funcs.hasClass(e.target.parentNode, closeClass)) { |
|
3873 self$$1.close(); |
|
3874 } |
|
3875 }); |
|
3876 self$$1.on('cancel', function () { |
|
3877 self$$1.close(); |
|
3878 }); |
|
3879 self$$1.on('move', function (e) { |
|
3880 if (e.control === self$$1) { |
|
3881 FloatPanel.hideAll(); |
|
3882 } |
|
3883 }); |
|
3884 self$$1.aria('describedby', self$$1.describedBy || self$$1._id + '-none'); |
|
3885 self$$1.aria('label', settings.title); |
|
3886 self$$1._fullscreen = false; |
|
3887 }, |
|
3888 recalc: function () { |
|
3889 var self$$1 = this; |
|
3890 var statusbar$$1 = self$$1.statusbar; |
|
3891 var layoutRect, width, x, needsRecalc; |
|
3892 if (self$$1._fullscreen) { |
|
3893 self$$1.layoutRect(funcs.getWindowSize()); |
|
3894 self$$1.layoutRect().contentH = self$$1.layoutRect().innerH; |
|
3895 } |
|
3896 self$$1._super(); |
|
3897 layoutRect = self$$1.layoutRect(); |
|
3898 if (self$$1.settings.title && !self$$1._fullscreen) { |
|
3899 width = layoutRect.headerW; |
|
3900 if (width > layoutRect.w) { |
|
3901 x = layoutRect.x - Math.max(0, width / 2); |
|
3902 self$$1.layoutRect({ |
|
3903 w: width, |
|
3904 x: x |
|
3905 }); |
|
3906 needsRecalc = true; |
|
3907 } |
|
3908 } |
|
3909 if (statusbar$$1) { |
|
3910 statusbar$$1.layoutRect({ w: self$$1.layoutRect().innerW }).recalc(); |
|
3911 width = statusbar$$1.layoutRect().minW + layoutRect.deltaW; |
|
3912 if (width > layoutRect.w) { |
|
3913 x = layoutRect.x - Math.max(0, width - layoutRect.w); |
|
3914 self$$1.layoutRect({ |
|
3915 w: width, |
|
3916 x: x |
|
3917 }); |
|
3918 needsRecalc = true; |
|
3919 } |
|
3920 } |
|
3921 if (needsRecalc) { |
|
3922 self$$1.recalc(); |
|
3923 } |
|
3924 }, |
|
3925 initLayoutRect: function () { |
|
3926 var self$$1 = this; |
|
3927 var layoutRect = self$$1._super(); |
|
3928 var deltaH = 0, headEl; |
|
3929 if (self$$1.settings.title && !self$$1._fullscreen) { |
|
3930 headEl = self$$1.getEl('head'); |
|
3931 var size = funcs.getSize(headEl); |
|
3932 layoutRect.headerW = size.width; |
|
3933 layoutRect.headerH = size.height; |
|
3934 deltaH += layoutRect.headerH; |
|
3935 } |
|
3936 if (self$$1.statusbar) { |
|
3937 deltaH += self$$1.statusbar.layoutRect().h; |
|
3938 } |
|
3939 layoutRect.deltaH += deltaH; |
|
3940 layoutRect.minH += deltaH; |
|
3941 layoutRect.h += deltaH; |
|
3942 var rect = funcs.getWindowSize(); |
|
3943 layoutRect.x = self$$1.settings.x || Math.max(0, rect.w / 2 - layoutRect.w / 2); |
|
3944 layoutRect.y = self$$1.settings.y || Math.max(0, rect.h / 2 - layoutRect.h / 2); |
|
3945 return layoutRect; |
|
3946 }, |
|
3947 renderHtml: function () { |
|
3948 var self$$1 = this, layout = self$$1._layout, id = self$$1._id, prefix = self$$1.classPrefix; |
|
3949 var settings = self$$1.settings; |
|
3950 var headerHtml = '', footerHtml = '', html = settings.html; |
|
3951 self$$1.preRender(); |
|
3952 layout.preRender(self$$1); |
|
3953 if (settings.title) { |
|
3954 headerHtml = '<div id="' + id + '-head" class="' + prefix + 'window-head">' + '<div id="' + id + '-title" class="' + prefix + 'title">' + self$$1.encode(settings.title) + '</div>' + '<div id="' + id + '-dragh" class="' + prefix + 'dragh"></div>' + '<button type="button" class="' + prefix + 'close" aria-hidden="true">' + '<i class="mce-ico mce-i-remove"></i>' + '</button>' + '</div>'; |
|
3955 } |
|
3956 if (settings.url) { |
|
3957 html = '<iframe src="' + settings.url + '" tabindex="-1"></iframe>'; |
|
3958 } |
|
3959 if (typeof html === 'undefined') { |
|
3960 html = layout.renderHtml(self$$1); |
|
3961 } |
|
3962 if (self$$1.statusbar) { |
|
3963 footerHtml = self$$1.statusbar.renderHtml(); |
|
3964 } |
|
3965 return '<div id="' + id + '" class="' + self$$1.classes + '" hidefocus="1">' + '<div class="' + self$$1.classPrefix + 'reset" role="application">' + headerHtml + '<div id="' + id + '-body" class="' + self$$1.bodyClasses + '">' + html + '</div>' + footerHtml + '</div>' + '</div>'; |
|
3966 }, |
|
3967 fullscreen: function (state) { |
|
3968 var self$$1 = this; |
|
3969 var documentElement = document.documentElement; |
|
3970 var slowRendering; |
|
3971 var prefix = self$$1.classPrefix; |
|
3972 var layoutRect; |
|
3973 if (state !== self$$1._fullscreen) { |
|
3974 global$7(window).on('resize', function () { |
|
3975 var time; |
|
3976 if (self$$1._fullscreen) { |
|
3977 if (!slowRendering) { |
|
3978 time = new Date().getTime(); |
|
3979 var rect = funcs.getWindowSize(); |
|
3980 self$$1.moveTo(0, 0).resizeTo(rect.w, rect.h); |
|
3981 if (new Date().getTime() - time > 50) { |
|
3982 slowRendering = true; |
|
3983 } |
|
3984 } else { |
|
3985 if (!self$$1._timer) { |
|
3986 self$$1._timer = global$3.setTimeout(function () { |
|
3987 var rect = funcs.getWindowSize(); |
|
3988 self$$1.moveTo(0, 0).resizeTo(rect.w, rect.h); |
|
3989 self$$1._timer = 0; |
|
3990 }, 50); |
|
3991 } |
|
3992 } |
|
3993 } |
|
3994 }); |
|
3995 layoutRect = self$$1.layoutRect(); |
|
3996 self$$1._fullscreen = state; |
|
3997 if (!state) { |
|
3998 self$$1.borderBox = $_4kbuyt18pjjgwek1w.parseBox(self$$1.settings.border); |
|
3999 self$$1.getEl('head').style.display = ''; |
|
4000 layoutRect.deltaH += layoutRect.headerH; |
|
4001 global$7([ |
|
4002 documentElement, |
|
4003 document.body |
|
4004 ]).removeClass(prefix + 'fullscreen'); |
|
4005 self$$1.classes.remove('fullscreen'); |
|
4006 self$$1.moveTo(self$$1._initial.x, self$$1._initial.y).resizeTo(self$$1._initial.w, self$$1._initial.h); |
|
4007 } else { |
|
4008 self$$1._initial = { |
|
4009 x: layoutRect.x, |
|
4010 y: layoutRect.y, |
|
4011 w: layoutRect.w, |
|
4012 h: layoutRect.h |
|
4013 }; |
|
4014 self$$1.borderBox = $_4kbuyt18pjjgwek1w.parseBox('0'); |
|
4015 self$$1.getEl('head').style.display = 'none'; |
|
4016 layoutRect.deltaH -= layoutRect.headerH + 2; |
|
4017 global$7([ |
|
4018 documentElement, |
|
4019 document.body |
|
4020 ]).addClass(prefix + 'fullscreen'); |
|
4021 self$$1.classes.add('fullscreen'); |
|
4022 var rect = funcs.getWindowSize(); |
|
4023 self$$1.moveTo(0, 0).resizeTo(rect.w, rect.h); |
|
4024 } |
|
4025 } |
|
4026 return self$$1.reflow(); |
|
4027 }, |
|
4028 postRender: function () { |
|
4029 var self$$1 = this; |
|
4030 var startPos; |
|
4031 setTimeout(function () { |
|
4032 self$$1.classes.add('in'); |
|
4033 self$$1.fire('open'); |
|
4034 }, 0); |
|
4035 self$$1._super(); |
|
4036 if (self$$1.statusbar) { |
|
4037 self$$1.statusbar.postRender(); |
|
4038 } |
|
4039 self$$1.focus(); |
|
4040 this.dragHelper = new DragHelper(self$$1._id + '-dragh', { |
|
4041 start: function () { |
|
4042 startPos = { |
|
4043 x: self$$1.layoutRect().x, |
|
4044 y: self$$1.layoutRect().y |
|
4045 }; |
|
4046 }, |
|
4047 drag: function (e) { |
|
4048 self$$1.moveTo(startPos.x + e.deltaX, startPos.y + e.deltaY); |
|
4049 } |
|
4050 }); |
|
4051 self$$1.on('submit', function (e) { |
|
4052 if (!e.isDefaultPrevented()) { |
|
4053 self$$1.close(); |
|
4054 } |
|
4055 }); |
|
4056 windows.push(self$$1); |
|
4057 toggleFullScreenState(true); |
|
4058 }, |
|
4059 submit: function () { |
|
4060 return this.fire('submit', { data: this.toJSON() }); |
|
4061 }, |
|
4062 remove: function () { |
|
4063 var self$$1 = this; |
|
4064 var i; |
|
4065 self$$1.dragHelper.destroy(); |
|
4066 self$$1._super(); |
|
4067 if (self$$1.statusbar) { |
|
4068 this.statusbar.remove(); |
|
4069 } |
|
4070 toggleBodyFullScreenClasses(self$$1.classPrefix, false); |
|
4071 i = windows.length; |
|
4072 while (i--) { |
|
4073 if (windows[i] === self$$1) { |
|
4074 windows.splice(i, 1); |
|
4075 } |
|
4076 } |
|
4077 toggleFullScreenState(windows.length > 0); |
|
4078 }, |
|
4079 getContentWindow: function () { |
|
4080 var ifr = this.getEl().getElementsByTagName('iframe')[0]; |
|
4081 return ifr ? ifr.contentWindow : null; |
|
4082 } |
|
4083 }); |
|
4084 handleWindowResize(); |
|
4085 |
|
4086 var MessageBox = Window$$1.extend({ |
|
4087 init: function (settings) { |
|
4088 settings = { |
|
4089 border: 1, |
|
4090 padding: 20, |
|
4091 layout: 'flex', |
|
4092 pack: 'center', |
|
4093 align: 'center', |
|
4094 containerCls: 'panel', |
|
4095 autoScroll: true, |
|
4096 buttons: { |
|
4097 type: 'button', |
|
4098 text: 'Ok', |
|
4099 action: 'ok' |
|
4100 }, |
|
4101 items: { |
|
4102 type: 'label', |
|
4103 multiline: true, |
|
4104 maxWidth: 500, |
|
4105 maxHeight: 200 |
|
4106 } |
|
4107 }; |
|
4108 this._super(settings); |
|
4109 }, |
|
4110 Statics: { |
|
4111 OK: 1, |
|
4112 OK_CANCEL: 2, |
|
4113 YES_NO: 3, |
|
4114 YES_NO_CANCEL: 4, |
|
4115 msgBox: function (settings) { |
|
4116 var buttons; |
|
4117 var callback = settings.callback || function () { |
|
4118 }; |
|
4119 function createButton(text, status$$1, primary) { |
|
4120 return { |
|
4121 type: 'button', |
|
4122 text: text, |
|
4123 subtype: primary ? 'primary' : '', |
|
4124 onClick: function (e) { |
|
4125 e.control.parents()[1].close(); |
|
4126 callback(status$$1); |
|
4127 } |
|
4128 }; |
|
4129 } |
|
4130 switch (settings.buttons) { |
|
4131 case MessageBox.OK_CANCEL: |
|
4132 buttons = [ |
|
4133 createButton('Ok', true, true), |
|
4134 createButton('Cancel', false) |
|
4135 ]; |
|
4136 break; |
|
4137 case MessageBox.YES_NO: |
|
4138 case MessageBox.YES_NO_CANCEL: |
|
4139 buttons = [ |
|
4140 createButton('Yes', 1, true), |
|
4141 createButton('No', 0) |
|
4142 ]; |
|
4143 if (settings.buttons === MessageBox.YES_NO_CANCEL) { |
|
4144 buttons.push(createButton('Cancel', -1)); |
|
4145 } |
|
4146 break; |
|
4147 default: |
|
4148 buttons = [createButton('Ok', true, true)]; |
|
4149 break; |
|
4150 } |
|
4151 return new Window$$1({ |
|
4152 padding: 20, |
|
4153 x: settings.x, |
|
4154 y: settings.y, |
|
4155 minWidth: 300, |
|
4156 minHeight: 100, |
|
4157 layout: 'flex', |
|
4158 pack: 'center', |
|
4159 align: 'center', |
|
4160 buttons: buttons, |
|
4161 title: settings.title, |
|
4162 role: 'alertdialog', |
|
4163 items: { |
|
4164 type: 'label', |
|
4165 multiline: true, |
|
4166 maxWidth: 500, |
|
4167 maxHeight: 200, |
|
4168 text: settings.text |
|
4169 }, |
|
4170 onPostRender: function () { |
|
4171 this.aria('describedby', this.items()[0]._id); |
|
4172 }, |
|
4173 onClose: settings.onClose, |
|
4174 onCancel: function () { |
|
4175 callback(false); |
|
4176 } |
|
4177 }).renderTo(document.body).reflow(); |
|
4178 }, |
|
4179 alert: function (settings, callback) { |
|
4180 if (typeof settings === 'string') { |
|
4181 settings = { text: settings }; |
|
4182 } |
|
4183 settings.callback = callback; |
|
4184 return MessageBox.msgBox(settings); |
|
4185 }, |
|
4186 confirm: function (settings, callback) { |
|
4187 if (typeof settings === 'string') { |
|
4188 settings = { text: settings }; |
|
4189 } |
|
4190 settings.callback = callback; |
|
4191 settings.buttons = MessageBox.OK_CANCEL; |
|
4192 return MessageBox.msgBox(settings); |
|
4193 } |
|
4194 } |
|
4195 }); |
|
4196 |
|
4197 function WindowManagerImpl (editor) { |
|
4198 var open$$1 = function (args, params, closeCallback) { |
|
4199 var win; |
|
4200 args.title = args.title || ' '; |
|
4201 args.url = args.url || args.file; |
|
4202 if (args.url) { |
|
4203 args.width = parseInt(args.width || 320, 10); |
|
4204 args.height = parseInt(args.height || 240, 10); |
|
4205 } |
|
4206 if (args.body) { |
|
4207 args.items = { |
|
4208 defaults: args.defaults, |
|
4209 type: args.bodyType || 'form', |
|
4210 items: args.body, |
|
4211 data: args.data, |
|
4212 callbacks: args.commands |
|
4213 }; |
|
4214 } |
|
4215 if (!args.url && !args.buttons) { |
|
4216 args.buttons = [ |
|
4217 { |
|
4218 text: 'Ok', |
|
4219 subtype: 'primary', |
|
4220 onclick: function () { |
|
4221 win.find('form')[0].submit(); |
|
4222 } |
|
4223 }, |
|
4224 { |
|
4225 text: 'Cancel', |
|
4226 onclick: function () { |
|
4227 win.close(); |
|
4228 } |
|
4229 } |
|
4230 ]; |
|
4231 } |
|
4232 win = new Window$$1(args); |
|
4233 win.on('close', function () { |
|
4234 closeCallback(win); |
|
4235 }); |
|
4236 if (args.data) { |
|
4237 win.on('postRender', function () { |
|
4238 this.find('*').each(function (ctrl) { |
|
4239 var name$$1 = ctrl.name(); |
|
4240 if (name$$1 in args.data) { |
|
4241 ctrl.value(args.data[name$$1]); |
|
4242 } |
|
4243 }); |
|
4244 }); |
|
4245 } |
|
4246 win.features = args || {}; |
|
4247 win.params = params || {}; |
|
4248 win = win.renderTo(document.body).reflow(); |
|
4249 return win; |
|
4250 }; |
|
4251 var alert$$1 = function (message, choiceCallback, closeCallback) { |
|
4252 var win; |
|
4253 win = MessageBox.alert(message, function () { |
|
4254 choiceCallback(); |
|
4255 }); |
|
4256 win.on('close', function () { |
|
4257 closeCallback(win); |
|
4258 }); |
|
4259 return win; |
|
4260 }; |
|
4261 var confirm$$1 = function (message, choiceCallback, closeCallback) { |
|
4262 var win; |
|
4263 win = MessageBox.confirm(message, function (state) { |
|
4264 choiceCallback(state); |
|
4265 }); |
|
4266 win.on('close', function () { |
|
4267 closeCallback(win); |
|
4268 }); |
|
4269 return win; |
|
4270 }; |
|
4271 var close$$1 = function (window$$1) { |
|
4272 window$$1.close(); |
|
4273 }; |
|
4274 var getParams = function (window$$1) { |
|
4275 return window$$1.params; |
|
4276 }; |
|
4277 var setParams = function (window$$1, params) { |
|
4278 window$$1.params = params; |
|
4279 }; |
|
4280 return { |
|
4281 open: open$$1, |
|
4282 alert: alert$$1, |
|
4283 confirm: confirm$$1, |
|
4284 close: close$$1, |
|
4285 getParams: getParams, |
|
4286 setParams: setParams |
|
4287 }; |
|
4288 } |
|
4289 |
|
4290 var get = function (editor, panel) { |
|
4291 var renderUI = function () { |
|
4292 return $_b0wxh217tjjgwejyx.renderUI(editor, panel); |
|
4293 }; |
|
4294 return { |
|
4295 renderUI: renderUI, |
|
4296 getNotificationManagerImpl: function () { |
|
4297 return NotificationManagerImpl(editor); |
|
4298 }, |
|
4299 getWindowManagerImpl: function () { |
|
4300 return WindowManagerImpl(editor); |
|
4301 } |
|
4302 }; |
|
4303 }; |
|
4304 var $_7y4x3k17sjjgwejyw = { get: get }; |
|
4305 |
|
4306 var Global = typeof window !== 'undefined' ? window : Function('return this;')(); |
|
4307 |
|
4308 var path = function (parts, scope) { |
|
4309 var o = scope !== undefined && scope !== null ? scope : Global; |
|
4310 for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) |
|
4311 o = o[parts[i]]; |
|
4312 return o; |
|
4313 }; |
|
4314 var resolve = function (p, scope) { |
|
4315 var parts = p.split('.'); |
|
4316 return path(parts, scope); |
|
4317 }; |
|
4318 |
|
4319 var unsafe = function (name, scope) { |
|
4320 return resolve(name, scope); |
|
4321 }; |
|
4322 var getOrDie = function (name, scope) { |
|
4323 var actual = unsafe(name, scope); |
|
4324 if (actual === undefined || actual === null) |
|
4325 throw name + ' not available on this browser'; |
|
4326 return actual; |
|
4327 }; |
|
4328 var $_8wnjhx19gjjgwek54 = { getOrDie: getOrDie }; |
|
4329 |
|
4330 function FileReader () { |
|
4331 var f = $_8wnjhx19gjjgwek54.getOrDie('FileReader'); |
|
4332 return new f(); |
|
4333 } |
|
4334 |
|
4335 var global$12 = tinymce.util.Tools.resolve('tinymce.util.Promise'); |
|
4336 |
|
4337 var blobToBase64 = function (blob) { |
|
4338 return new global$12(function (resolve) { |
|
4339 var reader = new FileReader(); |
|
4340 reader.onloadend = function () { |
|
4341 resolve(reader.result.split(',')[1]); |
|
4342 }; |
|
4343 reader.readAsDataURL(blob); |
|
4344 }); |
|
4345 }; |
|
4346 var $_c292419ejjgwek4z = { blobToBase64: blobToBase64 }; |
|
4347 |
|
4348 var pickFile = function () { |
|
4349 return new global$12(function (resolve) { |
|
4350 var fileInput; |
|
4351 fileInput = document.createElement('input'); |
|
4352 fileInput.type = 'file'; |
|
4353 fileInput.style.position = 'fixed'; |
|
4354 fileInput.style.left = 0; |
|
4355 fileInput.style.top = 0; |
|
4356 fileInput.style.opacity = 0.001; |
|
4357 document.body.appendChild(fileInput); |
|
4358 fileInput.onchange = function (e) { |
|
4359 resolve(Array.prototype.slice.call(e.target.files)); |
|
4360 }; |
|
4361 fileInput.click(); |
|
4362 fileInput.parentNode.removeChild(fileInput); |
|
4363 }); |
|
4364 }; |
|
4365 var $_edjfwb19kjjgwek5a = { pickFile: pickFile }; |
|
4366 |
|
4367 var count$1 = 0; |
|
4368 var seed = function () { |
|
4369 var rnd = function () { |
|
4370 return Math.round(Math.random() * 4294967295).toString(36); |
|
4371 }; |
|
4372 return 's' + Date.now().toString(36) + rnd() + rnd() + rnd(); |
|
4373 }; |
|
4374 var uuid = function (prefix) { |
|
4375 return prefix + count$1++ + seed(); |
|
4376 }; |
|
4377 var $_49gxzf19mjjgwek5f = { uuid: uuid }; |
|
4378 |
|
4379 var create$1 = function (dom, rng) { |
|
4380 var bookmark = {}; |
|
4381 function setupEndPoint(start) { |
|
4382 var offsetNode, container, offset; |
|
4383 container = rng[start ? 'startContainer' : 'endContainer']; |
|
4384 offset = rng[start ? 'startOffset' : 'endOffset']; |
|
4385 if (container.nodeType === 1) { |
|
4386 offsetNode = dom.create('span', { 'data-mce-type': 'bookmark' }); |
|
4387 if (container.hasChildNodes()) { |
|
4388 offset = Math.min(offset, container.childNodes.length - 1); |
|
4389 if (start) { |
|
4390 container.insertBefore(offsetNode, container.childNodes[offset]); |
|
4391 } else { |
|
4392 dom.insertAfter(offsetNode, container.childNodes[offset]); |
|
4393 } |
|
4394 } else { |
|
4395 container.appendChild(offsetNode); |
|
4396 } |
|
4397 container = offsetNode; |
|
4398 offset = 0; |
|
4399 } |
|
4400 bookmark[start ? 'startContainer' : 'endContainer'] = container; |
|
4401 bookmark[start ? 'startOffset' : 'endOffset'] = offset; |
|
4402 } |
|
4403 setupEndPoint(true); |
|
4404 if (!rng.collapsed) { |
|
4405 setupEndPoint(); |
|
4406 } |
|
4407 return bookmark; |
|
4408 }; |
|
4409 var resolve$1 = function (dom, bookmark) { |
|
4410 function restoreEndPoint(start) { |
|
4411 var container, offset, node; |
|
4412 function nodeIndex(container) { |
|
4413 var node = container.parentNode.firstChild, idx = 0; |
|
4414 while (node) { |
|
4415 if (node === container) { |
|
4416 return idx; |
|
4417 } |
|
4418 if (node.nodeType !== 1 || node.getAttribute('data-mce-type') !== 'bookmark') { |
|
4419 idx++; |
|
4420 } |
|
4421 node = node.nextSibling; |
|
4422 } |
|
4423 return -1; |
|
4424 } |
|
4425 container = node = bookmark[start ? 'startContainer' : 'endContainer']; |
|
4426 offset = bookmark[start ? 'startOffset' : 'endOffset']; |
|
4427 if (!container) { |
|
4428 return; |
|
4429 } |
|
4430 if (container.nodeType === 1) { |
|
4431 offset = nodeIndex(container); |
|
4432 container = container.parentNode; |
|
4433 dom.remove(node); |
|
4434 } |
|
4435 bookmark[start ? 'startContainer' : 'endContainer'] = container; |
|
4436 bookmark[start ? 'startOffset' : 'endOffset'] = offset; |
|
4437 } |
|
4438 restoreEndPoint(true); |
|
4439 restoreEndPoint(); |
|
4440 var rng = dom.createRng(); |
|
4441 rng.setStart(bookmark.startContainer, bookmark.startOffset); |
|
4442 if (bookmark.endContainer) { |
|
4443 rng.setEnd(bookmark.endContainer, bookmark.endOffset); |
|
4444 } |
|
4445 return rng; |
|
4446 }; |
|
4447 var $_3b24e19ojjgwek5i = { |
|
4448 create: create$1, |
|
4449 resolve: resolve$1 |
|
4450 }; |
|
4451 |
|
4452 var global$13 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker'); |
|
4453 |
|
4454 var global$14 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils'); |
|
4455 |
|
4456 var getSelectedElements = function (rootElm, startNode, endNode) { |
|
4457 var walker, node; |
|
4458 var elms = []; |
|
4459 walker = new global$13(startNode, rootElm); |
|
4460 for (node = startNode; node; node = walker.next()) { |
|
4461 if (node.nodeType === 1) { |
|
4462 elms.push(node); |
|
4463 } |
|
4464 if (node === endNode) { |
|
4465 break; |
|
4466 } |
|
4467 } |
|
4468 return elms; |
|
4469 }; |
|
4470 var unwrapElements = function (editor, elms) { |
|
4471 var bookmark, dom, selection; |
|
4472 dom = editor.dom; |
|
4473 selection = editor.selection; |
|
4474 bookmark = $_3b24e19ojjgwek5i.create(dom, selection.getRng()); |
|
4475 global$4.each(elms, function (elm) { |
|
4476 editor.dom.remove(elm, true); |
|
4477 }); |
|
4478 selection.setRng($_3b24e19ojjgwek5i.resolve(dom, bookmark)); |
|
4479 }; |
|
4480 var isLink = function (elm) { |
|
4481 return elm.nodeName === 'A' && elm.hasAttribute('href'); |
|
4482 }; |
|
4483 var getParentAnchorOrSelf = function (dom, elm) { |
|
4484 var anchorElm = dom.getParent(elm, isLink); |
|
4485 return anchorElm ? anchorElm : elm; |
|
4486 }; |
|
4487 var getSelectedAnchors = function (editor) { |
|
4488 var startElm, endElm, rootElm, anchorElms, selection, dom, rng; |
|
4489 selection = editor.selection; |
|
4490 dom = editor.dom; |
|
4491 rng = selection.getRng(); |
|
4492 startElm = getParentAnchorOrSelf(dom, global$14.getNode(rng.startContainer, rng.startOffset)); |
|
4493 endElm = global$14.getNode(rng.endContainer, rng.endOffset); |
|
4494 rootElm = editor.getBody(); |
|
4495 anchorElms = global$4.grep(getSelectedElements(rootElm, startElm, endElm), isLink); |
|
4496 return anchorElms; |
|
4497 }; |
|
4498 var unlinkSelection = function (editor) { |
|
4499 unwrapElements(editor, getSelectedAnchors(editor)); |
|
4500 }; |
|
4501 var $_aunbnv19njjgwek5g = { unlinkSelection: unlinkSelection }; |
|
4502 |
|
4503 var createTableHtml = function (cols, rows) { |
|
4504 var x, y, html; |
|
4505 html = '<table data-mce-id="mce" style="width: 100%">'; |
|
4506 html += '<tbody>'; |
|
4507 for (y = 0; y < rows; y++) { |
|
4508 html += '<tr>'; |
|
4509 for (x = 0; x < cols; x++) { |
|
4510 html += '<td><br></td>'; |
|
4511 } |
|
4512 html += '</tr>'; |
|
4513 } |
|
4514 html += '</tbody>'; |
|
4515 html += '</table>'; |
|
4516 return html; |
|
4517 }; |
|
4518 var getInsertedElement = function (editor) { |
|
4519 var elms = editor.dom.select('*[data-mce-id]'); |
|
4520 return elms[0]; |
|
4521 }; |
|
4522 var insertTableHtml = function (editor, cols, rows) { |
|
4523 editor.undoManager.transact(function () { |
|
4524 var tableElm, cellElm; |
|
4525 editor.insertContent(createTableHtml(cols, rows)); |
|
4526 tableElm = getInsertedElement(editor); |
|
4527 tableElm.removeAttribute('data-mce-id'); |
|
4528 cellElm = editor.dom.select('td,th', tableElm); |
|
4529 editor.selection.setCursorLocation(cellElm[0], 0); |
|
4530 }); |
|
4531 }; |
|
4532 var insertTable = function (editor, cols, rows) { |
|
4533 editor.plugins.table ? editor.plugins.table.insertTable(cols, rows) : insertTableHtml(editor, cols, rows); |
|
4534 }; |
|
4535 var formatBlock = function (editor, formatName) { |
|
4536 editor.execCommand('FormatBlock', false, formatName); |
|
4537 }; |
|
4538 var insertBlob = function (editor, base64, blob) { |
|
4539 var blobCache, blobInfo; |
|
4540 blobCache = editor.editorUpload.blobCache; |
|
4541 blobInfo = blobCache.create($_49gxzf19mjjgwek5f.uuid('mceu'), blob, base64); |
|
4542 blobCache.add(blobInfo); |
|
4543 editor.insertContent(editor.dom.createHTML('img', { src: blobInfo.blobUri() })); |
|
4544 }; |
|
4545 var collapseSelectionToEnd = function (editor) { |
|
4546 editor.selection.collapse(false); |
|
4547 }; |
|
4548 var unlink = function (editor) { |
|
4549 editor.focus(); |
|
4550 $_aunbnv19njjgwek5g.unlinkSelection(editor); |
|
4551 collapseSelectionToEnd(editor); |
|
4552 }; |
|
4553 var changeHref = function (editor, elm, url) { |
|
4554 editor.focus(); |
|
4555 editor.dom.setAttrib(elm, 'href', url); |
|
4556 collapseSelectionToEnd(editor); |
|
4557 }; |
|
4558 var insertLink = function (editor, url) { |
|
4559 editor.execCommand('mceInsertLink', false, { href: url }); |
|
4560 collapseSelectionToEnd(editor); |
|
4561 }; |
|
4562 var updateOrInsertLink = function (editor, url) { |
|
4563 var elm = editor.dom.getParent(editor.selection.getStart(), 'a[href]'); |
|
4564 elm ? changeHref(editor, elm, url) : insertLink(editor, url); |
|
4565 }; |
|
4566 var createLink = function (editor, url) { |
|
4567 url.trim().length === 0 ? unlink(editor) : updateOrInsertLink(editor, url); |
|
4568 }; |
|
4569 var $_elxm3u19ljjgwek5d = { |
|
4570 insertTable: insertTable, |
|
4571 formatBlock: formatBlock, |
|
4572 insertBlob: insertBlob, |
|
4573 createLink: createLink, |
|
4574 unlink: unlink |
|
4575 }; |
|
4576 |
|
4577 var addHeaderButtons = function (editor) { |
|
4578 var formatBlock = function (name) { |
|
4579 return function () { |
|
4580 $_elxm3u19ljjgwek5d.formatBlock(editor, name); |
|
4581 }; |
|
4582 }; |
|
4583 for (var i = 1; i < 6; i++) { |
|
4584 var name = 'h' + i; |
|
4585 editor.addButton(name, { |
|
4586 text: name.toUpperCase(), |
|
4587 tooltip: 'Heading ' + i, |
|
4588 stateSelector: name, |
|
4589 onclick: formatBlock(name), |
|
4590 onPostRender: function () { |
|
4591 var span = this.getEl().firstChild.firstChild; |
|
4592 span.style.fontWeight = 'bold'; |
|
4593 } |
|
4594 }); |
|
4595 } |
|
4596 }; |
|
4597 var addToEditor = function (editor, panel) { |
|
4598 editor.addButton('quicklink', { |
|
4599 icon: 'link', |
|
4600 tooltip: 'Insert/Edit link', |
|
4601 stateSelector: 'a[href]', |
|
4602 onclick: function () { |
|
4603 panel.showForm(editor, 'quicklink'); |
|
4604 } |
|
4605 }); |
|
4606 editor.addButton('quickimage', { |
|
4607 icon: 'image', |
|
4608 tooltip: 'Insert image', |
|
4609 onclick: function () { |
|
4610 $_edjfwb19kjjgwek5a.pickFile().then(function (files) { |
|
4611 var blob = files[0]; |
|
4612 $_c292419ejjgwek4z.blobToBase64(blob).then(function (base64) { |
|
4613 $_elxm3u19ljjgwek5d.insertBlob(editor, base64, blob); |
|
4614 }); |
|
4615 }); |
|
4616 } |
|
4617 }); |
|
4618 editor.addButton('quicktable', { |
|
4619 icon: 'table', |
|
4620 tooltip: 'Insert table', |
|
4621 onclick: function () { |
|
4622 panel.hide(); |
|
4623 $_elxm3u19ljjgwek5d.insertTable(editor, 2, 2); |
|
4624 } |
|
4625 }); |
|
4626 addHeaderButtons(editor); |
|
4627 }; |
|
4628 var $_epdxt419djjgwek4l = { addToEditor: addToEditor }; |
|
4629 |
|
4630 var getUiContainerDelta$1 = function () { |
|
4631 var uiContainer = global$1.container; |
|
4632 if (uiContainer && global$2.DOM.getStyle(uiContainer, 'position', true) !== 'static') { |
|
4633 var containerPos = global$2.DOM.getPos(uiContainer); |
|
4634 var dx = containerPos.x - uiContainer.scrollLeft; |
|
4635 var dy = containerPos.y - uiContainer.scrollTop; |
|
4636 return Option.some({ |
|
4637 x: dx, |
|
4638 y: dy |
|
4639 }); |
|
4640 } else { |
|
4641 return Option.none(); |
|
4642 } |
|
4643 }; |
|
4644 var $_9hbv4x19sjjgwek5q = { getUiContainerDelta: getUiContainerDelta$1 }; |
|
4645 |
|
4646 var isDomainLike = function (href) { |
|
4647 return /^www\.|\.(com|org|edu|gov|uk|net|ca|de|jp|fr|au|us|ru|ch|it|nl|se|no|es|mil)$/i.test(href.trim()); |
|
4648 }; |
|
4649 var isAbsolute = function (href) { |
|
4650 return /^https?:\/\//.test(href.trim()); |
|
4651 }; |
|
4652 var $_5y05uk19ujjgwek5w = { |
|
4653 isDomainLike: isDomainLike, |
|
4654 isAbsolute: isAbsolute |
|
4655 }; |
|
4656 |
|
4657 var focusFirstTextBox = function (form) { |
|
4658 form.find('textbox').eq(0).each(function (ctrl) { |
|
4659 ctrl.focus(); |
|
4660 }); |
|
4661 }; |
|
4662 var createForm = function (name, spec) { |
|
4663 var form = global$11.create(global$4.extend({ |
|
4664 type: 'form', |
|
4665 layout: 'flex', |
|
4666 direction: 'row', |
|
4667 padding: 5, |
|
4668 name: name, |
|
4669 spacing: 3 |
|
4670 }, spec)); |
|
4671 form.on('show', function () { |
|
4672 focusFirstTextBox(form); |
|
4673 }); |
|
4674 return form; |
|
4675 }; |
|
4676 var toggleVisibility = function (ctrl, state) { |
|
4677 return state ? ctrl.show() : ctrl.hide(); |
|
4678 }; |
|
4679 var askAboutPrefix = function (editor, href) { |
|
4680 return new global$12(function (resolve) { |
|
4681 editor.windowManager.confirm('The URL you entered seems to be an external link. Do you want to add the required http:// prefix?', function (result) { |
|
4682 var output = result === true ? 'http://' + href : href; |
|
4683 resolve(output); |
|
4684 }); |
|
4685 }); |
|
4686 }; |
|
4687 var convertLinkToAbsolute = function (editor, href) { |
|
4688 return !$_5y05uk19ujjgwek5w.isAbsolute(href) && $_5y05uk19ujjgwek5w.isDomainLike(href) ? askAboutPrefix(editor, href) : global$12.resolve(href); |
|
4689 }; |
|
4690 var createQuickLinkForm = function (editor, hide) { |
|
4691 var attachState = {}; |
|
4692 var unlink = function () { |
|
4693 editor.focus(); |
|
4694 $_elxm3u19ljjgwek5d.unlink(editor); |
|
4695 hide(); |
|
4696 }; |
|
4697 var onChangeHandler = function (e) { |
|
4698 var meta = e.meta; |
|
4699 if (meta && meta.attach) { |
|
4700 attachState = { |
|
4701 href: this.value(), |
|
4702 attach: meta.attach |
|
4703 }; |
|
4704 } |
|
4705 }; |
|
4706 var onShowHandler = function (e) { |
|
4707 if (e.control === this) { |
|
4708 var elm = void 0, linkurl = ''; |
|
4709 elm = editor.dom.getParent(editor.selection.getStart(), 'a[href]'); |
|
4710 if (elm) { |
|
4711 linkurl = editor.dom.getAttrib(elm, 'href'); |
|
4712 } |
|
4713 this.fromJSON({ linkurl: linkurl }); |
|
4714 toggleVisibility(this.find('#unlink'), elm); |
|
4715 this.find('#linkurl')[0].focus(); |
|
4716 } |
|
4717 }; |
|
4718 return createForm('quicklink', { |
|
4719 items: [ |
|
4720 { |
|
4721 type: 'button', |
|
4722 name: 'unlink', |
|
4723 icon: 'unlink', |
|
4724 onclick: unlink, |
|
4725 tooltip: 'Remove link' |
|
4726 }, |
|
4727 { |
|
4728 type: 'filepicker', |
|
4729 name: 'linkurl', |
|
4730 placeholder: 'Paste or type a link', |
|
4731 filetype: 'file', |
|
4732 onchange: onChangeHandler |
|
4733 }, |
|
4734 { |
|
4735 type: 'button', |
|
4736 icon: 'checkmark', |
|
4737 subtype: 'primary', |
|
4738 tooltip: 'Ok', |
|
4739 onclick: 'submit' |
|
4740 } |
|
4741 ], |
|
4742 onshow: onShowHandler, |
|
4743 onsubmit: function (e) { |
|
4744 convertLinkToAbsolute(editor, e.data.linkurl).then(function (url) { |
|
4745 editor.undoManager.transact(function () { |
|
4746 if (url === attachState.href) { |
|
4747 attachState.attach(); |
|
4748 attachState = {}; |
|
4749 } |
|
4750 $_elxm3u19ljjgwek5d.createLink(editor, url); |
|
4751 }); |
|
4752 hide(); |
|
4753 }); |
|
4754 } |
|
4755 }); |
|
4756 }; |
|
4757 var $_amewps19tjjgwek5t = { createQuickLinkForm: createQuickLinkForm }; |
|
4758 |
|
4759 var getSelectorStateResult = function (itemName, item) { |
|
4760 var result = function (selector, handler) { |
|
4761 return { |
|
4762 selector: selector, |
|
4763 handler: handler |
|
4764 }; |
|
4765 }; |
|
4766 var activeHandler = function (state) { |
|
4767 item.active(state); |
|
4768 }; |
|
4769 var disabledHandler = function (state) { |
|
4770 item.disabled(state); |
|
4771 }; |
|
4772 if (item.settings.stateSelector) { |
|
4773 return result(item.settings.stateSelector, activeHandler); |
|
4774 } |
|
4775 if (item.settings.disabledStateSelector) { |
|
4776 return result(item.settings.disabledStateSelector, disabledHandler); |
|
4777 } |
|
4778 return null; |
|
4779 }; |
|
4780 var bindSelectorChanged = function (editor, itemName, item) { |
|
4781 return function () { |
|
4782 var result = getSelectorStateResult(itemName, item); |
|
4783 if (result !== null) { |
|
4784 editor.selection.selectorChanged(result.selector, result.handler); |
|
4785 } |
|
4786 }; |
|
4787 }; |
|
4788 var itemsToArray$1 = function (items) { |
|
4789 if ($_e4npq318ajjgwejzo.isArray(items)) { |
|
4790 return items; |
|
4791 } else if ($_e4npq318ajjgwejzo.isString(items)) { |
|
4792 return items.split(/[ ,]/); |
|
4793 } |
|
4794 return []; |
|
4795 }; |
|
4796 var create$2 = function (editor, name, items) { |
|
4797 var toolbarItems = []; |
|
4798 var buttonGroup; |
|
4799 if (!items) { |
|
4800 return; |
|
4801 } |
|
4802 global$4.each(itemsToArray$1(items), function (item) { |
|
4803 if (item === '|') { |
|
4804 buttonGroup = null; |
|
4805 } else { |
|
4806 if (editor.buttons[item]) { |
|
4807 if (!buttonGroup) { |
|
4808 buttonGroup = { |
|
4809 type: 'buttongroup', |
|
4810 items: [] |
|
4811 }; |
|
4812 toolbarItems.push(buttonGroup); |
|
4813 } |
|
4814 var button = editor.buttons[item]; |
|
4815 if ($_e4npq318ajjgwejzo.isFunction(button)) { |
|
4816 button = button(); |
|
4817 } |
|
4818 button.type = button.type || 'button'; |
|
4819 button = global$11.create(button); |
|
4820 button.on('postRender', bindSelectorChanged(editor, item, button)); |
|
4821 buttonGroup.items.push(button); |
|
4822 } |
|
4823 } |
|
4824 }); |
|
4825 return global$11.create({ |
|
4826 type: 'toolbar', |
|
4827 layout: 'flow', |
|
4828 name: name, |
|
4829 items: toolbarItems |
|
4830 }); |
|
4831 }; |
|
4832 var $_797pa819vjjgwek5x = { create: create$2 }; |
|
4833 |
|
4834 var create$3 = function () { |
|
4835 var panel, currentRect; |
|
4836 var createToolbars = function (editor, toolbars) { |
|
4837 return global$4.map(toolbars, function (toolbar) { |
|
4838 return $_797pa819vjjgwek5x.create(editor, toolbar.id, toolbar.items); |
|
4839 }); |
|
4840 }; |
|
4841 var hasToolbarItems = function (toolbar) { |
|
4842 return toolbar.items().length > 0; |
|
4843 }; |
|
4844 var create = function (editor, toolbars) { |
|
4845 var items = createToolbars(editor, toolbars).concat([ |
|
4846 $_797pa819vjjgwek5x.create(editor, 'text', $_4j2h42187jjgwejzk.getTextSelectionToolbarItems(editor)), |
|
4847 $_797pa819vjjgwek5x.create(editor, 'insert', $_4j2h42187jjgwejzk.getInsertToolbarItems(editor)), |
|
4848 $_amewps19tjjgwek5t.createQuickLinkForm(editor, hide) |
|
4849 ]); |
|
4850 return global$11.create({ |
|
4851 type: 'floatpanel', |
|
4852 role: 'dialog', |
|
4853 classes: 'tinymce tinymce-inline arrow', |
|
4854 ariaLabel: 'Inline toolbar', |
|
4855 layout: 'flex', |
|
4856 direction: 'column', |
|
4857 align: 'stretch', |
|
4858 autohide: false, |
|
4859 autofix: true, |
|
4860 fixed: true, |
|
4861 border: 1, |
|
4862 items: global$4.grep(items, hasToolbarItems), |
|
4863 oncancel: function () { |
|
4864 editor.focus(); |
|
4865 } |
|
4866 }); |
|
4867 }; |
|
4868 var showPanel = function (panel) { |
|
4869 if (panel) { |
|
4870 panel.show(); |
|
4871 } |
|
4872 }; |
|
4873 var movePanelTo = function (panel, pos) { |
|
4874 panel.moveTo(pos.x, pos.y); |
|
4875 }; |
|
4876 var togglePositionClass = function (panel, relPos) { |
|
4877 relPos = relPos ? relPos.substr(0, 2) : ''; |
|
4878 global$4.each({ |
|
4879 t: 'down', |
|
4880 b: 'up', |
|
4881 c: 'center' |
|
4882 }, function (cls, pos) { |
|
4883 panel.classes.toggle('arrow-' + cls, pos === relPos.substr(0, 1)); |
|
4884 }); |
|
4885 if (relPos === 'cr') { |
|
4886 panel.classes.toggle('arrow-left', true); |
|
4887 panel.classes.toggle('arrow-right', false); |
|
4888 } else if (relPos === 'cl') { |
|
4889 panel.classes.toggle('arrow-left', true); |
|
4890 panel.classes.toggle('arrow-right', true); |
|
4891 } else { |
|
4892 global$4.each({ |
|
4893 l: 'left', |
|
4894 r: 'right' |
|
4895 }, function (cls, pos) { |
|
4896 panel.classes.toggle('arrow-' + cls, pos === relPos.substr(1, 1)); |
|
4897 }); |
|
4898 } |
|
4899 }; |
|
4900 var showToolbar = function (panel, id) { |
|
4901 var toolbars = panel.items().filter('#' + id); |
|
4902 if (toolbars.length > 0) { |
|
4903 toolbars[0].show(); |
|
4904 panel.reflow(); |
|
4905 return true; |
|
4906 } |
|
4907 return false; |
|
4908 }; |
|
4909 var repositionPanelAt = function (panel, id, editor, targetRect) { |
|
4910 var contentAreaRect, panelRect, result, userConstainHandler; |
|
4911 userConstainHandler = $_4j2h42187jjgwejzk.getPositionHandler(editor); |
|
4912 contentAreaRect = $_51qgo2180jjgwejzb.getContentAreaRect(editor); |
|
4913 panelRect = global$2.DOM.getRect(panel.getEl()); |
|
4914 if (id === 'insert') { |
|
4915 result = $_gir42l18bjjgwejzq.calcInsert(targetRect, contentAreaRect, panelRect); |
|
4916 } else { |
|
4917 result = $_gir42l18bjjgwejzq.calc(targetRect, contentAreaRect, panelRect); |
|
4918 } |
|
4919 if (result) { |
|
4920 var delta = $_9hbv4x19sjjgwek5q.getUiContainerDelta().getOr({ |
|
4921 x: 0, |
|
4922 y: 0 |
|
4923 }); |
|
4924 var transposedPanelRect = { |
|
4925 x: result.rect.x - delta.x, |
|
4926 y: result.rect.y - delta.y, |
|
4927 w: result.rect.w, |
|
4928 h: result.rect.h |
|
4929 }; |
|
4930 currentRect = targetRect; |
|
4931 movePanelTo(panel, $_gir42l18bjjgwejzq.userConstrain(userConstainHandler, targetRect, contentAreaRect, transposedPanelRect)); |
|
4932 togglePositionClass(panel, result.position); |
|
4933 return true; |
|
4934 } else { |
|
4935 return false; |
|
4936 } |
|
4937 }; |
|
4938 var showPanelAt = function (panel, id, editor, targetRect) { |
|
4939 showPanel(panel); |
|
4940 panel.items().hide(); |
|
4941 if (!showToolbar(panel, id)) { |
|
4942 hide(); |
|
4943 return; |
|
4944 } |
|
4945 if (repositionPanelAt(panel, id, editor, targetRect) === false) { |
|
4946 hide(); |
|
4947 } |
|
4948 }; |
|
4949 var hasFormVisible = function () { |
|
4950 return panel.items().filter('form:visible').length > 0; |
|
4951 }; |
|
4952 var showForm = function (editor, id) { |
|
4953 if (panel) { |
|
4954 panel.items().hide(); |
|
4955 if (!showToolbar(panel, id)) { |
|
4956 hide(); |
|
4957 return; |
|
4958 } |
|
4959 var contentAreaRect = void 0, panelRect = void 0, result = void 0, userConstainHandler = void 0; |
|
4960 showPanel(panel); |
|
4961 panel.items().hide(); |
|
4962 showToolbar(panel, id); |
|
4963 userConstainHandler = $_4j2h42187jjgwejzk.getPositionHandler(editor); |
|
4964 contentAreaRect = $_51qgo2180jjgwejzb.getContentAreaRect(editor); |
|
4965 panelRect = global$2.DOM.getRect(panel.getEl()); |
|
4966 result = $_gir42l18bjjgwejzq.calc(currentRect, contentAreaRect, panelRect); |
|
4967 if (result) { |
|
4968 panelRect = result.rect; |
|
4969 movePanelTo(panel, $_gir42l18bjjgwejzq.userConstrain(userConstainHandler, currentRect, contentAreaRect, panelRect)); |
|
4970 togglePositionClass(panel, result.position); |
|
4971 } |
|
4972 } |
|
4973 }; |
|
4974 var show = function (editor, id, targetRect, toolbars) { |
|
4975 if (!panel) { |
|
4976 $_77u64d186jjgwejzi.fireBeforeRenderUI(editor); |
|
4977 panel = create(editor, toolbars); |
|
4978 panel.renderTo().reflow().moveTo(targetRect.x, targetRect.y); |
|
4979 editor.nodeChanged(); |
|
4980 } |
|
4981 showPanelAt(panel, id, editor, targetRect); |
|
4982 }; |
|
4983 var reposition = function (editor, id, targetRect) { |
|
4984 if (panel) { |
|
4985 repositionPanelAt(panel, id, editor, targetRect); |
|
4986 } |
|
4987 }; |
|
4988 var hide = function () { |
|
4989 if (panel) { |
|
4990 panel.hide(); |
|
4991 } |
|
4992 }; |
|
4993 var focus = function () { |
|
4994 if (panel) { |
|
4995 panel.find('toolbar:visible').eq(0).each(function (item) { |
|
4996 item.focus(true); |
|
4997 }); |
|
4998 } |
|
4999 }; |
|
5000 var remove = function () { |
|
5001 if (panel) { |
|
5002 panel.remove(); |
|
5003 panel = null; |
|
5004 } |
|
5005 }; |
|
5006 var inForm = function () { |
|
5007 return panel && panel.visible() && hasFormVisible(); |
|
5008 }; |
|
5009 return { |
|
5010 show: show, |
|
5011 showForm: showForm, |
|
5012 reposition: reposition, |
|
5013 inForm: inForm, |
|
5014 hide: hide, |
|
5015 focus: focus, |
|
5016 remove: remove |
|
5017 }; |
|
5018 }; |
|
5019 |
|
5020 var Layout$1 = global$8.extend({ |
|
5021 Defaults: { |
|
5022 firstControlClass: 'first', |
|
5023 lastControlClass: 'last' |
|
5024 }, |
|
5025 init: function (settings) { |
|
5026 this.settings = global$4.extend({}, this.Defaults, settings); |
|
5027 }, |
|
5028 preRender: function (container) { |
|
5029 container.bodyClasses.add(this.settings.containerClass); |
|
5030 }, |
|
5031 applyClasses: function (items) { |
|
5032 var self = this; |
|
5033 var settings = self.settings; |
|
5034 var firstClass, lastClass, firstItem, lastItem; |
|
5035 firstClass = settings.firstControlClass; |
|
5036 lastClass = settings.lastControlClass; |
|
5037 items.each(function (item) { |
|
5038 item.classes.remove(firstClass).remove(lastClass).add(settings.controlClass); |
|
5039 if (item.visible()) { |
|
5040 if (!firstItem) { |
|
5041 firstItem = item; |
|
5042 } |
|
5043 lastItem = item; |
|
5044 } |
|
5045 }); |
|
5046 if (firstItem) { |
|
5047 firstItem.classes.add(firstClass); |
|
5048 } |
|
5049 if (lastItem) { |
|
5050 lastItem.classes.add(lastClass); |
|
5051 } |
|
5052 }, |
|
5053 renderHtml: function (container) { |
|
5054 var self = this; |
|
5055 var html = ''; |
|
5056 self.applyClasses(container.items()); |
|
5057 container.items().each(function (item) { |
|
5058 html += item.renderHtml(); |
|
5059 }); |
|
5060 return html; |
|
5061 }, |
|
5062 recalc: function () { |
|
5063 }, |
|
5064 postRender: function () { |
|
5065 }, |
|
5066 isNative: function () { |
|
5067 return false; |
|
5068 } |
|
5069 }); |
|
5070 |
|
5071 var AbsoluteLayout = Layout$1.extend({ |
|
5072 Defaults: { |
|
5073 containerClass: 'abs-layout', |
|
5074 controlClass: 'abs-layout-item' |
|
5075 }, |
|
5076 recalc: function (container) { |
|
5077 container.items().filter(':visible').each(function (ctrl) { |
|
5078 var settings = ctrl.settings; |
|
5079 ctrl.layoutRect({ |
|
5080 x: settings.x, |
|
5081 y: settings.y, |
|
5082 w: settings.w, |
|
5083 h: settings.h |
|
5084 }); |
|
5085 if (ctrl.recalc) { |
|
5086 ctrl.recalc(); |
|
5087 } |
|
5088 }); |
|
5089 }, |
|
5090 renderHtml: function (container) { |
|
5091 return '<div id="' + container._id + '-absend" class="' + container.classPrefix + 'abs-end"></div>' + this._super(container); |
|
5092 } |
|
5093 }); |
|
5094 |
|
5095 var Button = Widget.extend({ |
|
5096 Defaults: { |
|
5097 classes: 'widget btn', |
|
5098 role: 'button' |
|
5099 }, |
|
5100 init: function (settings) { |
|
5101 var self$$1 = this; |
|
5102 var size; |
|
5103 self$$1._super(settings); |
|
5104 settings = self$$1.settings; |
|
5105 size = self$$1.settings.size; |
|
5106 self$$1.on('click mousedown', function (e) { |
|
5107 e.preventDefault(); |
|
5108 }); |
|
5109 self$$1.on('touchstart', function (e) { |
|
5110 self$$1.fire('click', e); |
|
5111 e.preventDefault(); |
|
5112 }); |
|
5113 if (settings.subtype) { |
|
5114 self$$1.classes.add(settings.subtype); |
|
5115 } |
|
5116 if (size) { |
|
5117 self$$1.classes.add('btn-' + size); |
|
5118 } |
|
5119 if (settings.icon) { |
|
5120 self$$1.icon(settings.icon); |
|
5121 } |
|
5122 }, |
|
5123 icon: function (icon) { |
|
5124 if (!arguments.length) { |
|
5125 return this.state.get('icon'); |
|
5126 } |
|
5127 this.state.set('icon', icon); |
|
5128 return this; |
|
5129 }, |
|
5130 repaint: function () { |
|
5131 var btnElm = this.getEl().firstChild; |
|
5132 var btnStyle; |
|
5133 if (btnElm) { |
|
5134 btnStyle = btnElm.style; |
|
5135 btnStyle.width = btnStyle.height = '100%'; |
|
5136 } |
|
5137 this._super(); |
|
5138 }, |
|
5139 renderHtml: function () { |
|
5140 var self$$1 = this, id = self$$1._id, prefix = self$$1.classPrefix; |
|
5141 var icon = self$$1.state.get('icon'), image; |
|
5142 var text = self$$1.state.get('text'); |
|
5143 var textHtml = ''; |
|
5144 var ariaPressed; |
|
5145 var settings = self$$1.settings; |
|
5146 image = settings.image; |
|
5147 if (image) { |
|
5148 icon = 'none'; |
|
5149 if (typeof image !== 'string') { |
|
5150 image = window.getSelection ? image[0] : image[1]; |
|
5151 } |
|
5152 image = ' style="background-image: url(\'' + image + '\')"'; |
|
5153 } else { |
|
5154 image = ''; |
|
5155 } |
|
5156 if (text) { |
|
5157 self$$1.classes.add('btn-has-text'); |
|
5158 textHtml = '<span class="' + prefix + 'txt">' + self$$1.encode(text) + '</span>'; |
|
5159 } |
|
5160 icon = icon ? prefix + 'ico ' + prefix + 'i-' + icon : ''; |
|
5161 ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed="' + settings.active + '"' : ''; |
|
5162 return '<div id="' + id + '" class="' + self$$1.classes + '" tabindex="-1"' + ariaPressed + '>' + '<button id="' + id + '-button" role="presentation" type="button" tabindex="-1">' + (icon ? '<i class="' + icon + '"' + image + '></i>' : '') + textHtml + '</button>' + '</div>'; |
|
5163 }, |
|
5164 bindStates: function () { |
|
5165 var self$$1 = this, $ = self$$1.$, textCls = self$$1.classPrefix + 'txt'; |
|
5166 function setButtonText(text) { |
|
5167 var $span = $('span.' + textCls, self$$1.getEl()); |
|
5168 if (text) { |
|
5169 if (!$span[0]) { |
|
5170 $('button:first', self$$1.getEl()).append('<span class="' + textCls + '"></span>'); |
|
5171 $span = $('span.' + textCls, self$$1.getEl()); |
|
5172 } |
|
5173 $span.html(self$$1.encode(text)); |
|
5174 } else { |
|
5175 $span.remove(); |
|
5176 } |
|
5177 self$$1.classes.toggle('btn-has-text', !!text); |
|
5178 } |
|
5179 self$$1.state.on('change:text', function (e) { |
|
5180 setButtonText(e.value); |
|
5181 }); |
|
5182 self$$1.state.on('change:icon', function (e) { |
|
5183 var icon = e.value; |
|
5184 var prefix = self$$1.classPrefix; |
|
5185 self$$1.settings.icon = icon; |
|
5186 icon = icon ? prefix + 'ico ' + prefix + 'i-' + self$$1.settings.icon : ''; |
|
5187 var btnElm = self$$1.getEl().firstChild; |
|
5188 var iconElm = btnElm.getElementsByTagName('i')[0]; |
|
5189 if (icon) { |
|
5190 if (!iconElm || iconElm !== btnElm.firstChild) { |
|
5191 iconElm = document.createElement('i'); |
|
5192 btnElm.insertBefore(iconElm, btnElm.firstChild); |
|
5193 } |
|
5194 iconElm.className = icon; |
|
5195 } else if (iconElm) { |
|
5196 btnElm.removeChild(iconElm); |
|
5197 } |
|
5198 setButtonText(self$$1.state.get('text')); |
|
5199 }); |
|
5200 return self$$1._super(); |
|
5201 } |
|
5202 }); |
|
5203 |
|
5204 var BrowseButton = Button.extend({ |
|
5205 init: function (settings) { |
|
5206 var self = this; |
|
5207 settings = global$4.extend({ |
|
5208 text: 'Browse...', |
|
5209 multiple: false, |
|
5210 accept: null |
|
5211 }, settings); |
|
5212 self._super(settings); |
|
5213 self.classes.add('browsebutton'); |
|
5214 if (settings.multiple) { |
|
5215 self.classes.add('multiple'); |
|
5216 } |
|
5217 }, |
|
5218 postRender: function () { |
|
5219 var self = this; |
|
5220 var input = funcs.create('input', { |
|
5221 type: 'file', |
|
5222 id: self._id + '-browse', |
|
5223 accept: self.settings.accept |
|
5224 }); |
|
5225 self._super(); |
|
5226 global$7(input).on('change', function (e) { |
|
5227 var files = e.target.files; |
|
5228 self.value = function () { |
|
5229 if (!files.length) { |
|
5230 return null; |
|
5231 } else if (self.settings.multiple) { |
|
5232 return files; |
|
5233 } else { |
|
5234 return files[0]; |
|
5235 } |
|
5236 }; |
|
5237 e.preventDefault(); |
|
5238 if (files.length) { |
|
5239 self.fire('change', e); |
|
5240 } |
|
5241 }); |
|
5242 global$7(input).on('click', function (e) { |
|
5243 e.stopPropagation(); |
|
5244 }); |
|
5245 global$7(self.getEl('button')).on('click', function (e) { |
|
5246 e.stopPropagation(); |
|
5247 input.click(); |
|
5248 }); |
|
5249 self.getEl().appendChild(input); |
|
5250 }, |
|
5251 remove: function () { |
|
5252 global$7(this.getEl('button')).off(); |
|
5253 global$7(this.getEl('input')).off(); |
|
5254 this._super(); |
|
5255 } |
|
5256 }); |
|
5257 |
|
5258 var ButtonGroup = Container.extend({ |
|
5259 Defaults: { |
|
5260 defaultType: 'button', |
|
5261 role: 'group' |
|
5262 }, |
|
5263 renderHtml: function () { |
|
5264 var self = this, layout = self._layout; |
|
5265 self.classes.add('btn-group'); |
|
5266 self.preRender(); |
|
5267 layout.preRender(self); |
|
5268 return '<div id="' + self._id + '" class="' + self.classes + '">' + '<div id="' + self._id + '-body">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</div>'; |
|
5269 } |
|
5270 }); |
|
5271 |
|
5272 var Checkbox = Widget.extend({ |
|
5273 Defaults: { |
|
5274 classes: 'checkbox', |
|
5275 role: 'checkbox', |
|
5276 checked: false |
|
5277 }, |
|
5278 init: function (settings) { |
|
5279 var self$$1 = this; |
|
5280 self$$1._super(settings); |
|
5281 self$$1.on('click mousedown', function (e) { |
|
5282 e.preventDefault(); |
|
5283 }); |
|
5284 self$$1.on('click', function (e) { |
|
5285 e.preventDefault(); |
|
5286 if (!self$$1.disabled()) { |
|
5287 self$$1.checked(!self$$1.checked()); |
|
5288 } |
|
5289 }); |
|
5290 self$$1.checked(self$$1.settings.checked); |
|
5291 }, |
|
5292 checked: function (state) { |
|
5293 if (!arguments.length) { |
|
5294 return this.state.get('checked'); |
|
5295 } |
|
5296 this.state.set('checked', state); |
|
5297 return this; |
|
5298 }, |
|
5299 value: function (state) { |
|
5300 if (!arguments.length) { |
|
5301 return this.checked(); |
|
5302 } |
|
5303 return this.checked(state); |
|
5304 }, |
|
5305 renderHtml: function () { |
|
5306 var self$$1 = this, id = self$$1._id, prefix = self$$1.classPrefix; |
|
5307 return '<div id="' + id + '" class="' + self$$1.classes + '" unselectable="on" aria-labelledby="' + id + '-al" tabindex="-1">' + '<i class="' + prefix + 'ico ' + prefix + 'i-checkbox"></i>' + '<span id="' + id + '-al" class="' + prefix + 'label">' + self$$1.encode(self$$1.state.get('text')) + '</span>' + '</div>'; |
|
5308 }, |
|
5309 bindStates: function () { |
|
5310 var self$$1 = this; |
|
5311 function checked(state) { |
|
5312 self$$1.classes.toggle('checked', state); |
|
5313 self$$1.aria('checked', state); |
|
5314 } |
|
5315 self$$1.state.on('change:text', function (e) { |
|
5316 self$$1.getEl('al').firstChild.data = self$$1.translate(e.value); |
|
5317 }); |
|
5318 self$$1.state.on('change:checked change:value', function (e) { |
|
5319 self$$1.fire('change'); |
|
5320 checked(e.value); |
|
5321 }); |
|
5322 self$$1.state.on('change:icon', function (e) { |
|
5323 var icon = e.value; |
|
5324 var prefix = self$$1.classPrefix; |
|
5325 if (typeof icon === 'undefined') { |
|
5326 return self$$1.settings.icon; |
|
5327 } |
|
5328 self$$1.settings.icon = icon; |
|
5329 icon = icon ? prefix + 'ico ' + prefix + 'i-' + self$$1.settings.icon : ''; |
|
5330 var btnElm = self$$1.getEl().firstChild; |
|
5331 var iconElm = btnElm.getElementsByTagName('i')[0]; |
|
5332 if (icon) { |
|
5333 if (!iconElm || iconElm !== btnElm.firstChild) { |
|
5334 iconElm = document.createElement('i'); |
|
5335 btnElm.insertBefore(iconElm, btnElm.firstChild); |
|
5336 } |
|
5337 iconElm.className = icon; |
|
5338 } else if (iconElm) { |
|
5339 btnElm.removeChild(iconElm); |
|
5340 } |
|
5341 }); |
|
5342 if (self$$1.state.get('checked')) { |
|
5343 checked(true); |
|
5344 } |
|
5345 return self$$1._super(); |
|
5346 } |
|
5347 }); |
|
5348 |
|
5349 var global$15 = tinymce.util.Tools.resolve('tinymce.util.VK'); |
|
5350 |
|
5351 var ComboBox = Widget.extend({ |
|
5352 init: function (settings) { |
|
5353 var self$$1 = this; |
|
5354 self$$1._super(settings); |
|
5355 settings = self$$1.settings; |
|
5356 self$$1.classes.add('combobox'); |
|
5357 self$$1.subinput = true; |
|
5358 self$$1.ariaTarget = 'inp'; |
|
5359 settings.menu = settings.menu || settings.values; |
|
5360 if (settings.menu) { |
|
5361 settings.icon = 'caret'; |
|
5362 } |
|
5363 self$$1.on('click', function (e) { |
|
5364 var elm = e.target; |
|
5365 var root = self$$1.getEl(); |
|
5366 if (!global$7.contains(root, elm) && elm !== root) { |
|
5367 return; |
|
5368 } |
|
5369 while (elm && elm !== root) { |
|
5370 if (elm.id && elm.id.indexOf('-open') !== -1) { |
|
5371 self$$1.fire('action'); |
|
5372 if (settings.menu) { |
|
5373 self$$1.showMenu(); |
|
5374 if (e.aria) { |
|
5375 self$$1.menu.items()[0].focus(); |
|
5376 } |
|
5377 } |
|
5378 } |
|
5379 elm = elm.parentNode; |
|
5380 } |
|
5381 }); |
|
5382 self$$1.on('keydown', function (e) { |
|
5383 var rootControl; |
|
5384 if (e.keyCode === 13 && e.target.nodeName === 'INPUT') { |
|
5385 e.preventDefault(); |
|
5386 self$$1.parents().reverse().each(function (ctrl) { |
|
5387 if (ctrl.toJSON) { |
|
5388 rootControl = ctrl; |
|
5389 return false; |
|
5390 } |
|
5391 }); |
|
5392 self$$1.fire('submit', { data: rootControl.toJSON() }); |
|
5393 } |
|
5394 }); |
|
5395 self$$1.on('keyup', function (e) { |
|
5396 if (e.target.nodeName === 'INPUT') { |
|
5397 var oldValue = self$$1.state.get('value'); |
|
5398 var newValue = e.target.value; |
|
5399 if (newValue !== oldValue) { |
|
5400 self$$1.state.set('value', newValue); |
|
5401 self$$1.fire('autocomplete', e); |
|
5402 } |
|
5403 } |
|
5404 }); |
|
5405 self$$1.on('mouseover', function (e) { |
|
5406 var tooltip = self$$1.tooltip().moveTo(-65535); |
|
5407 if (self$$1.statusLevel() && e.target.className.indexOf(self$$1.classPrefix + 'status') !== -1) { |
|
5408 var statusMessage = self$$1.statusMessage() || 'Ok'; |
|
5409 var rel = tooltip.text(statusMessage).show().testMoveRel(e.target, [ |
|
5410 'bc-tc', |
|
5411 'bc-tl', |
|
5412 'bc-tr' |
|
5413 ]); |
|
5414 tooltip.classes.toggle('tooltip-n', rel === 'bc-tc'); |
|
5415 tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl'); |
|
5416 tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr'); |
|
5417 tooltip.moveRel(e.target, rel); |
|
5418 } |
|
5419 }); |
|
5420 }, |
|
5421 statusLevel: function (value) { |
|
5422 if (arguments.length > 0) { |
|
5423 this.state.set('statusLevel', value); |
|
5424 } |
|
5425 return this.state.get('statusLevel'); |
|
5426 }, |
|
5427 statusMessage: function (value) { |
|
5428 if (arguments.length > 0) { |
|
5429 this.state.set('statusMessage', value); |
|
5430 } |
|
5431 return this.state.get('statusMessage'); |
|
5432 }, |
|
5433 showMenu: function () { |
|
5434 var self$$1 = this; |
|
5435 var settings = self$$1.settings; |
|
5436 var menu; |
|
5437 if (!self$$1.menu) { |
|
5438 menu = settings.menu || []; |
|
5439 if (menu.length) { |
|
5440 menu = { |
|
5441 type: 'menu', |
|
5442 items: menu |
|
5443 }; |
|
5444 } else { |
|
5445 menu.type = menu.type || 'menu'; |
|
5446 } |
|
5447 self$$1.menu = global$11.create(menu).parent(self$$1).renderTo(self$$1.getContainerElm()); |
|
5448 self$$1.fire('createmenu'); |
|
5449 self$$1.menu.reflow(); |
|
5450 self$$1.menu.on('cancel', function (e) { |
|
5451 if (e.control === self$$1.menu) { |
|
5452 self$$1.focus(); |
|
5453 } |
|
5454 }); |
|
5455 self$$1.menu.on('show hide', function (e) { |
|
5456 e.control.items().each(function (ctrl) { |
|
5457 ctrl.active(ctrl.value() === self$$1.value()); |
|
5458 }); |
|
5459 }).fire('show'); |
|
5460 self$$1.menu.on('select', function (e) { |
|
5461 self$$1.value(e.control.value()); |
|
5462 }); |
|
5463 self$$1.on('focusin', function (e) { |
|
5464 if (e.target.tagName.toUpperCase() === 'INPUT') { |
|
5465 self$$1.menu.hide(); |
|
5466 } |
|
5467 }); |
|
5468 self$$1.aria('expanded', true); |
|
5469 } |
|
5470 self$$1.menu.show(); |
|
5471 self$$1.menu.layoutRect({ w: self$$1.layoutRect().w }); |
|
5472 self$$1.menu.moveRel(self$$1.getEl(), self$$1.isRtl() ? [ |
|
5473 'br-tr', |
|
5474 'tr-br' |
|
5475 ] : [ |
|
5476 'bl-tl', |
|
5477 'tl-bl' |
|
5478 ]); |
|
5479 }, |
|
5480 focus: function () { |
|
5481 this.getEl('inp').focus(); |
|
5482 }, |
|
5483 repaint: function () { |
|
5484 var self$$1 = this, elm = self$$1.getEl(), openElm = self$$1.getEl('open'), rect = self$$1.layoutRect(); |
|
5485 var width, lineHeight, innerPadding = 0; |
|
5486 var inputElm = elm.firstChild; |
|
5487 if (self$$1.statusLevel() && self$$1.statusLevel() !== 'none') { |
|
5488 innerPadding = parseInt(funcs.getRuntimeStyle(inputElm, 'padding-right'), 10) - parseInt(funcs.getRuntimeStyle(inputElm, 'padding-left'), 10); |
|
5489 } |
|
5490 if (openElm) { |
|
5491 width = rect.w - funcs.getSize(openElm).width - 10; |
|
5492 } else { |
|
5493 width = rect.w - 10; |
|
5494 } |
|
5495 var doc = document; |
|
5496 if (doc.all && (!doc.documentMode || doc.documentMode <= 8)) { |
|
5497 lineHeight = self$$1.layoutRect().h - 2 + 'px'; |
|
5498 } |
|
5499 global$7(inputElm).css({ |
|
5500 width: width - innerPadding, |
|
5501 lineHeight: lineHeight |
|
5502 }); |
|
5503 self$$1._super(); |
|
5504 return self$$1; |
|
5505 }, |
|
5506 postRender: function () { |
|
5507 var self$$1 = this; |
|
5508 global$7(this.getEl('inp')).on('change', function (e) { |
|
5509 self$$1.state.set('value', e.target.value); |
|
5510 self$$1.fire('change', e); |
|
5511 }); |
|
5512 return self$$1._super(); |
|
5513 }, |
|
5514 renderHtml: function () { |
|
5515 var self$$1 = this, id = self$$1._id, settings = self$$1.settings, prefix = self$$1.classPrefix; |
|
5516 var value = self$$1.state.get('value') || ''; |
|
5517 var icon, text, openBtnHtml = '', extraAttrs = '', statusHtml = ''; |
|
5518 if ('spellcheck' in settings) { |
|
5519 extraAttrs += ' spellcheck="' + settings.spellcheck + '"'; |
|
5520 } |
|
5521 if (settings.maxLength) { |
|
5522 extraAttrs += ' maxlength="' + settings.maxLength + '"'; |
|
5523 } |
|
5524 if (settings.size) { |
|
5525 extraAttrs += ' size="' + settings.size + '"'; |
|
5526 } |
|
5527 if (settings.subtype) { |
|
5528 extraAttrs += ' type="' + settings.subtype + '"'; |
|
5529 } |
|
5530 statusHtml = '<i id="' + id + '-status" class="mce-status mce-ico" style="display: none"></i>'; |
|
5531 if (self$$1.disabled()) { |
|
5532 extraAttrs += ' disabled="disabled"'; |
|
5533 } |
|
5534 icon = settings.icon; |
|
5535 if (icon && icon !== 'caret') { |
|
5536 icon = prefix + 'ico ' + prefix + 'i-' + settings.icon; |
|
5537 } |
|
5538 text = self$$1.state.get('text'); |
|
5539 if (icon || text) { |
|
5540 openBtnHtml = '<div id="' + id + '-open" class="' + prefix + 'btn ' + prefix + 'open" tabIndex="-1" role="button">' + '<button id="' + id + '-action" type="button" hidefocus="1" tabindex="-1">' + (icon !== 'caret' ? '<i class="' + icon + '"></i>' : '<i class="' + prefix + 'caret"></i>') + (text ? (icon ? ' ' : '') + text : '') + '</button>' + '</div>'; |
|
5541 self$$1.classes.add('has-open'); |
|
5542 } |
|
5543 return '<div id="' + id + '" class="' + self$$1.classes + '">' + '<input id="' + id + '-inp" class="' + prefix + 'textbox" value="' + self$$1.encode(value, false) + '" hidefocus="1"' + extraAttrs + ' placeholder="' + self$$1.encode(settings.placeholder) + '" />' + statusHtml + openBtnHtml + '</div>'; |
|
5544 }, |
|
5545 value: function (value) { |
|
5546 if (arguments.length) { |
|
5547 this.state.set('value', value); |
|
5548 return this; |
|
5549 } |
|
5550 if (this.state.get('rendered')) { |
|
5551 this.state.set('value', this.getEl('inp').value); |
|
5552 } |
|
5553 return this.state.get('value'); |
|
5554 }, |
|
5555 showAutoComplete: function (items, term) { |
|
5556 var self$$1 = this; |
|
5557 if (items.length === 0) { |
|
5558 self$$1.hideMenu(); |
|
5559 return; |
|
5560 } |
|
5561 var insert = function (value, title) { |
|
5562 return function () { |
|
5563 self$$1.fire('selectitem', { |
|
5564 title: title, |
|
5565 value: value |
|
5566 }); |
|
5567 }; |
|
5568 }; |
|
5569 if (self$$1.menu) { |
|
5570 self$$1.menu.items().remove(); |
|
5571 } else { |
|
5572 self$$1.menu = global$11.create({ |
|
5573 type: 'menu', |
|
5574 classes: 'combobox-menu', |
|
5575 layout: 'flow' |
|
5576 }).parent(self$$1).renderTo(); |
|
5577 } |
|
5578 global$4.each(items, function (item) { |
|
5579 self$$1.menu.add({ |
|
5580 text: item.title, |
|
5581 url: item.previewUrl, |
|
5582 match: term, |
|
5583 classes: 'menu-item-ellipsis', |
|
5584 onclick: insert(item.value, item.title) |
|
5585 }); |
|
5586 }); |
|
5587 self$$1.menu.renderNew(); |
|
5588 self$$1.hideMenu(); |
|
5589 self$$1.menu.on('cancel', function (e) { |
|
5590 if (e.control.parent() === self$$1.menu) { |
|
5591 e.stopPropagation(); |
|
5592 self$$1.focus(); |
|
5593 self$$1.hideMenu(); |
|
5594 } |
|
5595 }); |
|
5596 self$$1.menu.on('select', function () { |
|
5597 self$$1.focus(); |
|
5598 }); |
|
5599 var maxW = self$$1.layoutRect().w; |
|
5600 self$$1.menu.layoutRect({ |
|
5601 w: maxW, |
|
5602 minW: 0, |
|
5603 maxW: maxW |
|
5604 }); |
|
5605 self$$1.menu.repaint(); |
|
5606 self$$1.menu.reflow(); |
|
5607 self$$1.menu.show(); |
|
5608 self$$1.menu.moveRel(self$$1.getEl(), self$$1.isRtl() ? [ |
|
5609 'br-tr', |
|
5610 'tr-br' |
|
5611 ] : [ |
|
5612 'bl-tl', |
|
5613 'tl-bl' |
|
5614 ]); |
|
5615 }, |
|
5616 hideMenu: function () { |
|
5617 if (this.menu) { |
|
5618 this.menu.hide(); |
|
5619 } |
|
5620 }, |
|
5621 bindStates: function () { |
|
5622 var self$$1 = this; |
|
5623 self$$1.state.on('change:value', function (e) { |
|
5624 if (self$$1.getEl('inp').value !== e.value) { |
|
5625 self$$1.getEl('inp').value = e.value; |
|
5626 } |
|
5627 }); |
|
5628 self$$1.state.on('change:disabled', function (e) { |
|
5629 self$$1.getEl('inp').disabled = e.value; |
|
5630 }); |
|
5631 self$$1.state.on('change:statusLevel', function (e) { |
|
5632 var statusIconElm = self$$1.getEl('status'); |
|
5633 var prefix = self$$1.classPrefix, value = e.value; |
|
5634 funcs.css(statusIconElm, 'display', value === 'none' ? 'none' : ''); |
|
5635 funcs.toggleClass(statusIconElm, prefix + 'i-checkmark', value === 'ok'); |
|
5636 funcs.toggleClass(statusIconElm, prefix + 'i-warning', value === 'warn'); |
|
5637 funcs.toggleClass(statusIconElm, prefix + 'i-error', value === 'error'); |
|
5638 self$$1.classes.toggle('has-status', value !== 'none'); |
|
5639 self$$1.repaint(); |
|
5640 }); |
|
5641 funcs.on(self$$1.getEl('status'), 'mouseleave', function () { |
|
5642 self$$1.tooltip().hide(); |
|
5643 }); |
|
5644 self$$1.on('cancel', function (e) { |
|
5645 if (self$$1.menu && self$$1.menu.visible()) { |
|
5646 e.stopPropagation(); |
|
5647 self$$1.hideMenu(); |
|
5648 } |
|
5649 }); |
|
5650 var focusIdx = function (idx, menu) { |
|
5651 if (menu && menu.items().length > 0) { |
|
5652 menu.items().eq(idx)[0].focus(); |
|
5653 } |
|
5654 }; |
|
5655 self$$1.on('keydown', function (e) { |
|
5656 var keyCode = e.keyCode; |
|
5657 if (e.target.nodeName === 'INPUT') { |
|
5658 if (keyCode === global$15.DOWN) { |
|
5659 e.preventDefault(); |
|
5660 self$$1.fire('autocomplete'); |
|
5661 focusIdx(0, self$$1.menu); |
|
5662 } else if (keyCode === global$15.UP) { |
|
5663 e.preventDefault(); |
|
5664 focusIdx(-1, self$$1.menu); |
|
5665 } |
|
5666 } |
|
5667 }); |
|
5668 return self$$1._super(); |
|
5669 }, |
|
5670 remove: function () { |
|
5671 global$7(this.getEl('inp')).off(); |
|
5672 if (this.menu) { |
|
5673 this.menu.remove(); |
|
5674 } |
|
5675 this._super(); |
|
5676 } |
|
5677 }); |
|
5678 |
|
5679 var ColorBox = ComboBox.extend({ |
|
5680 init: function (settings) { |
|
5681 var self = this; |
|
5682 settings.spellcheck = false; |
|
5683 if (settings.onaction) { |
|
5684 settings.icon = 'none'; |
|
5685 } |
|
5686 self._super(settings); |
|
5687 self.classes.add('colorbox'); |
|
5688 self.on('change keyup postrender', function () { |
|
5689 self.repaintColor(self.value()); |
|
5690 }); |
|
5691 }, |
|
5692 repaintColor: function (value) { |
|
5693 var openElm = this.getEl('open'); |
|
5694 var elm = openElm ? openElm.getElementsByTagName('i')[0] : null; |
|
5695 if (elm) { |
|
5696 try { |
|
5697 elm.style.background = value; |
|
5698 } catch (ex) { |
|
5699 } |
|
5700 } |
|
5701 }, |
|
5702 bindStates: function () { |
|
5703 var self = this; |
|
5704 self.state.on('change:value', function (e) { |
|
5705 if (self.state.get('rendered')) { |
|
5706 self.repaintColor(e.value); |
|
5707 } |
|
5708 }); |
|
5709 return self._super(); |
|
5710 } |
|
5711 }); |
|
5712 |
|
5713 var PanelButton = Button.extend({ |
|
5714 showPanel: function () { |
|
5715 var self = this, settings = self.settings; |
|
5716 self.classes.add('opened'); |
|
5717 if (!self.panel) { |
|
5718 var panelSettings = settings.panel; |
|
5719 if (panelSettings.type) { |
|
5720 panelSettings = { |
|
5721 layout: 'grid', |
|
5722 items: panelSettings |
|
5723 }; |
|
5724 } |
|
5725 panelSettings.role = panelSettings.role || 'dialog'; |
|
5726 panelSettings.popover = true; |
|
5727 panelSettings.autohide = true; |
|
5728 panelSettings.ariaRoot = true; |
|
5729 self.panel = new FloatPanel(panelSettings).on('hide', function () { |
|
5730 self.classes.remove('opened'); |
|
5731 }).on('cancel', function (e) { |
|
5732 e.stopPropagation(); |
|
5733 self.focus(); |
|
5734 self.hidePanel(); |
|
5735 }).parent(self).renderTo(self.getContainerElm()); |
|
5736 self.panel.fire('show'); |
|
5737 self.panel.reflow(); |
|
5738 } else { |
|
5739 self.panel.show(); |
|
5740 } |
|
5741 var rtlRels = [ |
|
5742 'bc-tc', |
|
5743 'bc-tl', |
|
5744 'bc-tr' |
|
5745 ]; |
|
5746 var ltrRels = [ |
|
5747 'bc-tc', |
|
5748 'bc-tr', |
|
5749 'bc-tl', |
|
5750 'tc-bc', |
|
5751 'tc-br', |
|
5752 'tc-bl' |
|
5753 ]; |
|
5754 var rel = self.panel.testMoveRel(self.getEl(), settings.popoverAlign || (self.isRtl() ? rtlRels : ltrRels)); |
|
5755 self.panel.classes.toggle('start', rel.substr(-1) === 'l'); |
|
5756 self.panel.classes.toggle('end', rel.substr(-1) === 'r'); |
|
5757 var isTop = rel.substr(0, 1) === 't'; |
|
5758 self.panel.classes.toggle('bottom', !isTop); |
|
5759 self.panel.classes.toggle('top', isTop); |
|
5760 self.panel.moveRel(self.getEl(), rel); |
|
5761 }, |
|
5762 hidePanel: function () { |
|
5763 var self = this; |
|
5764 if (self.panel) { |
|
5765 self.panel.hide(); |
|
5766 } |
|
5767 }, |
|
5768 postRender: function () { |
|
5769 var self = this; |
|
5770 self.aria('haspopup', true); |
|
5771 self.on('click', function (e) { |
|
5772 if (e.control === self) { |
|
5773 if (self.panel && self.panel.visible()) { |
|
5774 self.hidePanel(); |
|
5775 } else { |
|
5776 self.showPanel(); |
|
5777 self.panel.focus(!!e.aria); |
|
5778 } |
|
5779 } |
|
5780 }); |
|
5781 return self._super(); |
|
5782 }, |
|
5783 remove: function () { |
|
5784 if (this.panel) { |
|
5785 this.panel.remove(); |
|
5786 this.panel = null; |
|
5787 } |
|
5788 return this._super(); |
|
5789 } |
|
5790 }); |
|
5791 |
|
5792 var DOM = global$2.DOM; |
|
5793 var ColorButton = PanelButton.extend({ |
|
5794 init: function (settings) { |
|
5795 this._super(settings); |
|
5796 this.classes.add('splitbtn'); |
|
5797 this.classes.add('colorbutton'); |
|
5798 }, |
|
5799 color: function (color) { |
|
5800 if (color) { |
|
5801 this._color = color; |
|
5802 this.getEl('preview').style.backgroundColor = color; |
|
5803 return this; |
|
5804 } |
|
5805 return this._color; |
|
5806 }, |
|
5807 resetColor: function () { |
|
5808 this._color = null; |
|
5809 this.getEl('preview').style.backgroundColor = null; |
|
5810 return this; |
|
5811 }, |
|
5812 renderHtml: function () { |
|
5813 var self = this, id = self._id, prefix = self.classPrefix, text = self.state.get('text'); |
|
5814 var icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : ''; |
|
5815 var image = self.settings.image ? ' style="background-image: url(\'' + self.settings.image + '\')"' : ''; |
|
5816 var textHtml = ''; |
|
5817 if (text) { |
|
5818 self.classes.add('btn-has-text'); |
|
5819 textHtml = '<span class="' + prefix + 'txt">' + self.encode(text) + '</span>'; |
|
5820 } |
|
5821 return '<div id="' + id + '" class="' + self.classes + '" role="button" tabindex="-1" aria-haspopup="true">' + '<button role="presentation" hidefocus="1" type="button" tabindex="-1">' + (icon ? '<i class="' + icon + '"' + image + '></i>' : '') + '<span id="' + id + '-preview" class="' + prefix + 'preview"></span>' + textHtml + '</button>' + '<button type="button" class="' + prefix + 'open" hidefocus="1" tabindex="-1">' + ' <i class="' + prefix + 'caret"></i>' + '</button>' + '</div>'; |
|
5822 }, |
|
5823 postRender: function () { |
|
5824 var self = this, onClickHandler = self.settings.onclick; |
|
5825 self.on('click', function (e) { |
|
5826 if (e.aria && e.aria.key === 'down') { |
|
5827 return; |
|
5828 } |
|
5829 if (e.control === self && !DOM.getParent(e.target, '.' + self.classPrefix + 'open')) { |
|
5830 e.stopImmediatePropagation(); |
|
5831 onClickHandler.call(self, e); |
|
5832 } |
|
5833 }); |
|
5834 delete self.settings.onclick; |
|
5835 return self._super(); |
|
5836 } |
|
5837 }); |
|
5838 |
|
5839 var global$16 = tinymce.util.Tools.resolve('tinymce.util.Color'); |
|
5840 |
|
5841 var ColorPicker = Widget.extend({ |
|
5842 Defaults: { classes: 'widget colorpicker' }, |
|
5843 init: function (settings) { |
|
5844 this._super(settings); |
|
5845 }, |
|
5846 postRender: function () { |
|
5847 var self = this; |
|
5848 var color = self.color(); |
|
5849 var hsv, hueRootElm, huePointElm, svRootElm, svPointElm; |
|
5850 hueRootElm = self.getEl('h'); |
|
5851 huePointElm = self.getEl('hp'); |
|
5852 svRootElm = self.getEl('sv'); |
|
5853 svPointElm = self.getEl('svp'); |
|
5854 function getPos(elm, event) { |
|
5855 var pos = funcs.getPos(elm); |
|
5856 var x, y; |
|
5857 x = event.pageX - pos.x; |
|
5858 y = event.pageY - pos.y; |
|
5859 x = Math.max(0, Math.min(x / elm.clientWidth, 1)); |
|
5860 y = Math.max(0, Math.min(y / elm.clientHeight, 1)); |
|
5861 return { |
|
5862 x: x, |
|
5863 y: y |
|
5864 }; |
|
5865 } |
|
5866 function updateColor(hsv, hueUpdate) { |
|
5867 var hue = (360 - hsv.h) / 360; |
|
5868 funcs.css(huePointElm, { top: hue * 100 + '%' }); |
|
5869 if (!hueUpdate) { |
|
5870 funcs.css(svPointElm, { |
|
5871 left: hsv.s + '%', |
|
5872 top: 100 - hsv.v + '%' |
|
5873 }); |
|
5874 } |
|
5875 svRootElm.style.background = global$16({ |
|
5876 s: 100, |
|
5877 v: 100, |
|
5878 h: hsv.h |
|
5879 }).toHex(); |
|
5880 self.color().parse({ |
|
5881 s: hsv.s, |
|
5882 v: hsv.v, |
|
5883 h: hsv.h |
|
5884 }); |
|
5885 } |
|
5886 function updateSaturationAndValue(e) { |
|
5887 var pos; |
|
5888 pos = getPos(svRootElm, e); |
|
5889 hsv.s = pos.x * 100; |
|
5890 hsv.v = (1 - pos.y) * 100; |
|
5891 updateColor(hsv); |
|
5892 self.fire('change'); |
|
5893 } |
|
5894 function updateHue(e) { |
|
5895 var pos; |
|
5896 pos = getPos(hueRootElm, e); |
|
5897 hsv = color.toHsv(); |
|
5898 hsv.h = (1 - pos.y) * 360; |
|
5899 updateColor(hsv, true); |
|
5900 self.fire('change'); |
|
5901 } |
|
5902 self._repaint = function () { |
|
5903 hsv = color.toHsv(); |
|
5904 updateColor(hsv); |
|
5905 }; |
|
5906 self._super(); |
|
5907 self._svdraghelper = new DragHelper(self._id + '-sv', { |
|
5908 start: updateSaturationAndValue, |
|
5909 drag: updateSaturationAndValue |
|
5910 }); |
|
5911 self._hdraghelper = new DragHelper(self._id + '-h', { |
|
5912 start: updateHue, |
|
5913 drag: updateHue |
|
5914 }); |
|
5915 self._repaint(); |
|
5916 }, |
|
5917 rgb: function () { |
|
5918 return this.color().toRgb(); |
|
5919 }, |
|
5920 value: function (value) { |
|
5921 var self = this; |
|
5922 if (arguments.length) { |
|
5923 self.color().parse(value); |
|
5924 if (self._rendered) { |
|
5925 self._repaint(); |
|
5926 } |
|
5927 } else { |
|
5928 return self.color().toHex(); |
|
5929 } |
|
5930 }, |
|
5931 color: function () { |
|
5932 if (!this._color) { |
|
5933 this._color = global$16(); |
|
5934 } |
|
5935 return this._color; |
|
5936 }, |
|
5937 renderHtml: function () { |
|
5938 var self = this; |
|
5939 var id = self._id; |
|
5940 var prefix = self.classPrefix; |
|
5941 var hueHtml; |
|
5942 var stops = '#ff0000,#ff0080,#ff00ff,#8000ff,#0000ff,#0080ff,#00ffff,#00ff80,#00ff00,#80ff00,#ffff00,#ff8000,#ff0000'; |
|
5943 function getOldIeFallbackHtml() { |
|
5944 var i, l, html = '', gradientPrefix, stopsList; |
|
5945 gradientPrefix = 'filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='; |
|
5946 stopsList = stops.split(','); |
|
5947 for (i = 0, l = stopsList.length - 1; i < l; i++) { |
|
5948 html += '<div class="' + prefix + 'colorpicker-h-chunk" style="' + 'height:' + 100 / l + '%;' + gradientPrefix + stopsList[i] + ',endColorstr=' + stopsList[i + 1] + ');' + '-ms-' + gradientPrefix + stopsList[i] + ',endColorstr=' + stopsList[i + 1] + ')' + '"></div>'; |
|
5949 } |
|
5950 return html; |
|
5951 } |
|
5952 var gradientCssText = 'background: -ms-linear-gradient(top,' + stops + ');' + 'background: linear-gradient(to bottom,' + stops + ');'; |
|
5953 hueHtml = '<div id="' + id + '-h" class="' + prefix + 'colorpicker-h" style="' + gradientCssText + '">' + getOldIeFallbackHtml() + '<div id="' + id + '-hp" class="' + prefix + 'colorpicker-h-marker"></div>' + '</div>'; |
|
5954 return '<div id="' + id + '" class="' + self.classes + '">' + '<div id="' + id + '-sv" class="' + prefix + 'colorpicker-sv">' + '<div class="' + prefix + 'colorpicker-overlay1">' + '<div class="' + prefix + 'colorpicker-overlay2">' + '<div id="' + id + '-svp" class="' + prefix + 'colorpicker-selector1">' + '<div class="' + prefix + 'colorpicker-selector2"></div>' + '</div>' + '</div>' + '</div>' + '</div>' + hueHtml + '</div>'; |
|
5955 } |
|
5956 }); |
|
5957 |
|
5958 var DropZone = Widget.extend({ |
|
5959 init: function (settings) { |
|
5960 var self = this; |
|
5961 settings = global$4.extend({ |
|
5962 height: 100, |
|
5963 text: 'Drop an image here', |
|
5964 multiple: false, |
|
5965 accept: null |
|
5966 }, settings); |
|
5967 self._super(settings); |
|
5968 self.classes.add('dropzone'); |
|
5969 if (settings.multiple) { |
|
5970 self.classes.add('multiple'); |
|
5971 } |
|
5972 }, |
|
5973 renderHtml: function () { |
|
5974 var self = this; |
|
5975 var attrs, elm; |
|
5976 var cfg = self.settings; |
|
5977 attrs = { |
|
5978 id: self._id, |
|
5979 hidefocus: '1' |
|
5980 }; |
|
5981 elm = funcs.create('div', attrs, '<span>' + this.translate(cfg.text) + '</span>'); |
|
5982 if (cfg.height) { |
|
5983 funcs.css(elm, 'height', cfg.height + 'px'); |
|
5984 } |
|
5985 if (cfg.width) { |
|
5986 funcs.css(elm, 'width', cfg.width + 'px'); |
|
5987 } |
|
5988 elm.className = self.classes; |
|
5989 return elm.outerHTML; |
|
5990 }, |
|
5991 postRender: function () { |
|
5992 var self = this; |
|
5993 var toggleDragClass = function (e) { |
|
5994 e.preventDefault(); |
|
5995 self.classes.toggle('dragenter'); |
|
5996 self.getEl().className = self.classes; |
|
5997 }; |
|
5998 var filter = function (files) { |
|
5999 var accept = self.settings.accept; |
|
6000 if (typeof accept !== 'string') { |
|
6001 return files; |
|
6002 } |
|
6003 var re = new RegExp('(' + accept.split(/\s*,\s*/).join('|') + ')$', 'i'); |
|
6004 return global$4.grep(files, function (file) { |
|
6005 return re.test(file.name); |
|
6006 }); |
|
6007 }; |
|
6008 self._super(); |
|
6009 self.$el.on('dragover', function (e) { |
|
6010 e.preventDefault(); |
|
6011 }); |
|
6012 self.$el.on('dragenter', toggleDragClass); |
|
6013 self.$el.on('dragleave', toggleDragClass); |
|
6014 self.$el.on('drop', function (e) { |
|
6015 e.preventDefault(); |
|
6016 if (self.state.get('disabled')) { |
|
6017 return; |
|
6018 } |
|
6019 var files = filter(e.dataTransfer.files); |
|
6020 self.value = function () { |
|
6021 if (!files.length) { |
|
6022 return null; |
|
6023 } else if (self.settings.multiple) { |
|
6024 return files; |
|
6025 } else { |
|
6026 return files[0]; |
|
6027 } |
|
6028 }; |
|
6029 if (files.length) { |
|
6030 self.fire('change', e); |
|
6031 } |
|
6032 }); |
|
6033 }, |
|
6034 remove: function () { |
|
6035 this.$el.off(); |
|
6036 this._super(); |
|
6037 } |
|
6038 }); |
|
6039 |
|
6040 var Path = Widget.extend({ |
|
6041 init: function (settings) { |
|
6042 var self = this; |
|
6043 if (!settings.delimiter) { |
|
6044 settings.delimiter = '\xBB'; |
|
6045 } |
|
6046 self._super(settings); |
|
6047 self.classes.add('path'); |
|
6048 self.canFocus = true; |
|
6049 self.on('click', function (e) { |
|
6050 var index; |
|
6051 var target = e.target; |
|
6052 if (index = target.getAttribute('data-index')) { |
|
6053 self.fire('select', { |
|
6054 value: self.row()[index], |
|
6055 index: index |
|
6056 }); |
|
6057 } |
|
6058 }); |
|
6059 self.row(self.settings.row); |
|
6060 }, |
|
6061 focus: function () { |
|
6062 var self = this; |
|
6063 self.getEl().firstChild.focus(); |
|
6064 return self; |
|
6065 }, |
|
6066 row: function (row) { |
|
6067 if (!arguments.length) { |
|
6068 return this.state.get('row'); |
|
6069 } |
|
6070 this.state.set('row', row); |
|
6071 return this; |
|
6072 }, |
|
6073 renderHtml: function () { |
|
6074 var self = this; |
|
6075 return '<div id="' + self._id + '" class="' + self.classes + '">' + self._getDataPathHtml(self.state.get('row')) + '</div>'; |
|
6076 }, |
|
6077 bindStates: function () { |
|
6078 var self = this; |
|
6079 self.state.on('change:row', function (e) { |
|
6080 self.innerHtml(self._getDataPathHtml(e.value)); |
|
6081 }); |
|
6082 return self._super(); |
|
6083 }, |
|
6084 _getDataPathHtml: function (data) { |
|
6085 var self = this; |
|
6086 var parts = data || []; |
|
6087 var i, l, html = ''; |
|
6088 var prefix = self.classPrefix; |
|
6089 for (i = 0, l = parts.length; i < l; i++) { |
|
6090 html += (i > 0 ? '<div class="' + prefix + 'divider" aria-hidden="true"> ' + self.settings.delimiter + ' </div>' : '') + '<div role="button" class="' + prefix + 'path-item' + (i === l - 1 ? ' ' + prefix + 'last' : '') + '" data-index="' + i + '" tabindex="-1" id="' + self._id + '-' + i + '" aria-level="' + (i + 1) + '">' + parts[i].name + '</div>'; |
|
6091 } |
|
6092 if (!html) { |
|
6093 html = '<div class="' + prefix + 'path-item">\xA0</div>'; |
|
6094 } |
|
6095 return html; |
|
6096 } |
|
6097 }); |
|
6098 |
|
6099 var ElementPath = Path.extend({ |
|
6100 postRender: function () { |
|
6101 var self = this, editor = self.settings.editor; |
|
6102 function isHidden(elm) { |
|
6103 if (elm.nodeType === 1) { |
|
6104 if (elm.nodeName === 'BR' || !!elm.getAttribute('data-mce-bogus')) { |
|
6105 return true; |
|
6106 } |
|
6107 if (elm.getAttribute('data-mce-type') === 'bookmark') { |
|
6108 return true; |
|
6109 } |
|
6110 } |
|
6111 return false; |
|
6112 } |
|
6113 if (editor.settings.elementpath !== false) { |
|
6114 self.on('select', function (e) { |
|
6115 editor.focus(); |
|
6116 editor.selection.select(this.row()[e.index].element); |
|
6117 editor.nodeChanged(); |
|
6118 }); |
|
6119 editor.on('nodeChange', function (e) { |
|
6120 var outParents = []; |
|
6121 var parents = e.parents; |
|
6122 var i = parents.length; |
|
6123 while (i--) { |
|
6124 if (parents[i].nodeType === 1 && !isHidden(parents[i])) { |
|
6125 var args = editor.fire('ResolveName', { |
|
6126 name: parents[i].nodeName.toLowerCase(), |
|
6127 target: parents[i] |
|
6128 }); |
|
6129 if (!args.isDefaultPrevented()) { |
|
6130 outParents.push({ |
|
6131 name: args.name, |
|
6132 element: parents[i] |
|
6133 }); |
|
6134 } |
|
6135 if (args.isPropagationStopped()) { |
|
6136 break; |
|
6137 } |
|
6138 } |
|
6139 } |
|
6140 self.row(outParents); |
|
6141 }); |
|
6142 } |
|
6143 return self._super(); |
|
6144 } |
|
6145 }); |
|
6146 |
|
6147 var FormItem = Container.extend({ |
|
6148 Defaults: { |
|
6149 layout: 'flex', |
|
6150 align: 'center', |
|
6151 defaults: { flex: 1 } |
|
6152 }, |
|
6153 renderHtml: function () { |
|
6154 var self = this, layout = self._layout, prefix = self.classPrefix; |
|
6155 self.classes.add('formitem'); |
|
6156 layout.preRender(self); |
|
6157 return '<div id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1">' + (self.settings.title ? '<div id="' + self._id + '-title" class="' + prefix + 'title">' + self.settings.title + '</div>' : '') + '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</div>'; |
|
6158 } |
|
6159 }); |
|
6160 |
|
6161 var Form = Container.extend({ |
|
6162 Defaults: { |
|
6163 containerCls: 'form', |
|
6164 layout: 'flex', |
|
6165 direction: 'column', |
|
6166 align: 'stretch', |
|
6167 flex: 1, |
|
6168 padding: 15, |
|
6169 labelGap: 30, |
|
6170 spacing: 10, |
|
6171 callbacks: { |
|
6172 submit: function () { |
|
6173 this.submit(); |
|
6174 } |
|
6175 } |
|
6176 }, |
|
6177 preRender: function () { |
|
6178 var self = this, items = self.items(); |
|
6179 if (!self.settings.formItemDefaults) { |
|
6180 self.settings.formItemDefaults = { |
|
6181 layout: 'flex', |
|
6182 autoResize: 'overflow', |
|
6183 defaults: { flex: 1 } |
|
6184 }; |
|
6185 } |
|
6186 items.each(function (ctrl) { |
|
6187 var formItem; |
|
6188 var label = ctrl.settings.label; |
|
6189 if (label) { |
|
6190 formItem = new FormItem(global$4.extend({ |
|
6191 items: { |
|
6192 type: 'label', |
|
6193 id: ctrl._id + '-l', |
|
6194 text: label, |
|
6195 flex: 0, |
|
6196 forId: ctrl._id, |
|
6197 disabled: ctrl.disabled() |
|
6198 } |
|
6199 }, self.settings.formItemDefaults)); |
|
6200 formItem.type = 'formitem'; |
|
6201 ctrl.aria('labelledby', ctrl._id + '-l'); |
|
6202 if (typeof ctrl.settings.flex === 'undefined') { |
|
6203 ctrl.settings.flex = 1; |
|
6204 } |
|
6205 self.replace(ctrl, formItem); |
|
6206 formItem.add(ctrl); |
|
6207 } |
|
6208 }); |
|
6209 }, |
|
6210 submit: function () { |
|
6211 return this.fire('submit', { data: this.toJSON() }); |
|
6212 }, |
|
6213 postRender: function () { |
|
6214 var self = this; |
|
6215 self._super(); |
|
6216 self.fromJSON(self.settings.data); |
|
6217 }, |
|
6218 bindStates: function () { |
|
6219 var self = this; |
|
6220 self._super(); |
|
6221 function recalcLabels() { |
|
6222 var maxLabelWidth = 0; |
|
6223 var labels = []; |
|
6224 var i, labelGap, items; |
|
6225 if (self.settings.labelGapCalc === false) { |
|
6226 return; |
|
6227 } |
|
6228 if (self.settings.labelGapCalc === 'children') { |
|
6229 items = self.find('formitem'); |
|
6230 } else { |
|
6231 items = self.items(); |
|
6232 } |
|
6233 items.filter('formitem').each(function (item) { |
|
6234 var labelCtrl = item.items()[0], labelWidth = labelCtrl.getEl().clientWidth; |
|
6235 maxLabelWidth = labelWidth > maxLabelWidth ? labelWidth : maxLabelWidth; |
|
6236 labels.push(labelCtrl); |
|
6237 }); |
|
6238 labelGap = self.settings.labelGap || 0; |
|
6239 i = labels.length; |
|
6240 while (i--) { |
|
6241 labels[i].settings.minWidth = maxLabelWidth + labelGap; |
|
6242 } |
|
6243 } |
|
6244 self.on('show', recalcLabels); |
|
6245 recalcLabels(); |
|
6246 } |
|
6247 }); |
|
6248 |
|
6249 var FieldSet = Form.extend({ |
|
6250 Defaults: { |
|
6251 containerCls: 'fieldset', |
|
6252 layout: 'flex', |
|
6253 direction: 'column', |
|
6254 align: 'stretch', |
|
6255 flex: 1, |
|
6256 padding: '25 15 5 15', |
|
6257 labelGap: 30, |
|
6258 spacing: 10, |
|
6259 border: 1 |
|
6260 }, |
|
6261 renderHtml: function () { |
|
6262 var self = this, layout = self._layout, prefix = self.classPrefix; |
|
6263 self.preRender(); |
|
6264 layout.preRender(self); |
|
6265 return '<fieldset id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1">' + (self.settings.title ? '<legend id="' + self._id + '-title" class="' + prefix + 'fieldset-title">' + self.settings.title + '</legend>' : '') + '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</fieldset>'; |
|
6266 } |
|
6267 }); |
|
6268 |
|
6269 var unique$1 = 0; |
|
6270 var generate = function (prefix) { |
|
6271 var date = new Date(); |
|
6272 var time = date.getTime(); |
|
6273 var random = Math.floor(Math.random() * 1000000000); |
|
6274 unique$1++; |
|
6275 return prefix + '_' + random + unique$1 + String(time); |
|
6276 }; |
|
6277 |
|
6278 var fromHtml = function (html, scope) { |
|
6279 var doc = scope || document; |
|
6280 var div = doc.createElement('div'); |
|
6281 div.innerHTML = html; |
|
6282 if (!div.hasChildNodes() || div.childNodes.length > 1) { |
|
6283 console.error('HTML does not have a single root node', html); |
|
6284 throw 'HTML must have a single root node'; |
|
6285 } |
|
6286 return fromDom(div.childNodes[0]); |
|
6287 }; |
|
6288 var fromTag = function (tag, scope) { |
|
6289 var doc = scope || document; |
|
6290 var node = doc.createElement(tag); |
|
6291 return fromDom(node); |
|
6292 }; |
|
6293 var fromText = function (text, scope) { |
|
6294 var doc = scope || document; |
|
6295 var node = doc.createTextNode(text); |
|
6296 return fromDom(node); |
|
6297 }; |
|
6298 var fromDom = function (node) { |
|
6299 if (node === null || node === undefined) |
|
6300 throw new Error('Node cannot be null or undefined'); |
|
6301 return { dom: constant(node) }; |
|
6302 }; |
|
6303 var fromPoint = function (docElm, x, y) { |
|
6304 var doc = docElm.dom(); |
|
6305 return Option.from(doc.elementFromPoint(x, y)).map(fromDom); |
|
6306 }; |
|
6307 var Element$$1 = { |
|
6308 fromHtml: fromHtml, |
|
6309 fromTag: fromTag, |
|
6310 fromText: fromText, |
|
6311 fromDom: fromDom, |
|
6312 fromPoint: fromPoint |
|
6313 }; |
|
6314 |
|
6315 var cached = function (f) { |
|
6316 var called = false; |
|
6317 var r; |
|
6318 return function () { |
|
6319 var args = []; |
|
6320 for (var _i = 0; _i < arguments.length; _i++) { |
|
6321 args[_i] = arguments[_i]; |
|
6322 } |
|
6323 if (!called) { |
|
6324 called = true; |
|
6325 r = f.apply(null, args); |
|
6326 } |
|
6327 return r; |
|
6328 }; |
|
6329 }; |
|
6330 |
|
6331 var $_2jrgnk1apjjgwek8y = { |
|
6332 ATTRIBUTE: Node.ATTRIBUTE_NODE, |
|
6333 CDATA_SECTION: Node.CDATA_SECTION_NODE, |
|
6334 COMMENT: Node.COMMENT_NODE, |
|
6335 DOCUMENT: Node.DOCUMENT_NODE, |
|
6336 DOCUMENT_TYPE: Node.DOCUMENT_TYPE_NODE, |
|
6337 DOCUMENT_FRAGMENT: Node.DOCUMENT_FRAGMENT_NODE, |
|
6338 ELEMENT: Node.ELEMENT_NODE, |
|
6339 TEXT: Node.TEXT_NODE, |
|
6340 PROCESSING_INSTRUCTION: Node.PROCESSING_INSTRUCTION_NODE, |
|
6341 ENTITY_REFERENCE: Node.ENTITY_REFERENCE_NODE, |
|
6342 ENTITY: Node.ENTITY_NODE, |
|
6343 NOTATION: Node.NOTATION_NODE |
|
6344 }; |
|
6345 |
|
6346 var name = function (element) { |
|
6347 var r = element.dom().nodeName; |
|
6348 return r.toLowerCase(); |
|
6349 }; |
|
6350 var type = function (element) { |
|
6351 return element.dom().nodeType; |
|
6352 }; |
|
6353 var value = function (element) { |
|
6354 return element.dom().nodeValue; |
|
6355 }; |
|
6356 var isType$2 = function (t) { |
|
6357 return function (element) { |
|
6358 return type(element) === t; |
|
6359 }; |
|
6360 }; |
|
6361 var isComment = function (element) { |
|
6362 return type(element) === $_2jrgnk1apjjgwek8y.COMMENT || name(element) === '#comment'; |
|
6363 }; |
|
6364 var isElement = isType$2($_2jrgnk1apjjgwek8y.ELEMENT); |
|
6365 var isText = isType$2($_2jrgnk1apjjgwek8y.TEXT); |
|
6366 var isDocument = isType$2($_2jrgnk1apjjgwek8y.DOCUMENT); |
|
6367 var $_fv3as1aojjgwek8x = { |
|
6368 name: name, |
|
6369 type: type, |
|
6370 value: value, |
|
6371 isElement: isElement, |
|
6372 isText: isText, |
|
6373 isDocument: isDocument, |
|
6374 isComment: isComment |
|
6375 }; |
|
6376 |
|
6377 var inBody = function (element) { |
|
6378 var dom = $_fv3as1aojjgwek8x.isText(element) ? element.dom().parentNode : element.dom(); |
|
6379 return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom); |
|
6380 }; |
|
6381 var body = cached(function () { |
|
6382 return getBody(Element$$1.fromDom(document)); |
|
6383 }); |
|
6384 var getBody = function (doc) { |
|
6385 var body = doc.dom().body; |
|
6386 if (body === null || body === undefined) |
|
6387 throw 'Body is not available yet'; |
|
6388 return Element$$1.fromDom(body); |
|
6389 }; |
|
6390 var $_d2glpe1amjjgwek8t = { |
|
6391 body: body, |
|
6392 getBody: getBody, |
|
6393 inBody: inBody |
|
6394 }; |
|
6395 |
|
6396 var Immutable = function () { |
|
6397 var fields = []; |
|
6398 for (var _i = 0; _i < arguments.length; _i++) { |
|
6399 fields[_i] = arguments[_i]; |
|
6400 } |
|
6401 return function () { |
|
6402 var values = []; |
|
6403 for (var _i = 0; _i < arguments.length; _i++) { |
|
6404 values[_i] = arguments[_i]; |
|
6405 } |
|
6406 if (fields.length !== values.length) { |
|
6407 throw new Error('Wrong number of arguments to struct. Expected "[' + fields.length + ']", got ' + values.length + ' arguments'); |
|
6408 } |
|
6409 var struct = {}; |
|
6410 each(fields, function (name, i) { |
|
6411 struct[name] = constant(values[i]); |
|
6412 }); |
|
6413 return struct; |
|
6414 }; |
|
6415 }; |
|
6416 |
|
6417 var toArray = function (target, f) { |
|
6418 var r = []; |
|
6419 var recurse = function (e) { |
|
6420 r.push(e); |
|
6421 return f(e); |
|
6422 }; |
|
6423 var cur = f(target); |
|
6424 do { |
|
6425 cur = cur.bind(recurse); |
|
6426 } while (cur.isSome()); |
|
6427 return r; |
|
6428 }; |
|
6429 var $_607sf01awjjgweka0 = { toArray: toArray }; |
|
6430 |
|
6431 var node = function () { |
|
6432 var f = $_8wnjhx19gjjgwek54.getOrDie('Node'); |
|
6433 return f; |
|
6434 }; |
|
6435 var compareDocumentPosition = function (a, b, match) { |
|
6436 return (a.compareDocumentPosition(b) & match) !== 0; |
|
6437 }; |
|
6438 var documentPositionPreceding = function (a, b) { |
|
6439 return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING); |
|
6440 }; |
|
6441 var documentPositionContainedBy = function (a, b) { |
|
6442 return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY); |
|
6443 }; |
|
6444 var $_d0o64o1ayjjgwekaa = { |
|
6445 documentPositionPreceding: documentPositionPreceding, |
|
6446 documentPositionContainedBy: documentPositionContainedBy |
|
6447 }; |
|
6448 |
|
6449 var firstMatch = function (regexes, s) { |
|
6450 for (var i = 0; i < regexes.length; i++) { |
|
6451 var x = regexes[i]; |
|
6452 if (x.test(s)) |
|
6453 return x; |
|
6454 } |
|
6455 return undefined; |
|
6456 }; |
|
6457 var find$2 = function (regexes, agent) { |
|
6458 var r = firstMatch(regexes, agent); |
|
6459 if (!r) |
|
6460 return { |
|
6461 major: 0, |
|
6462 minor: 0 |
|
6463 }; |
|
6464 var group = function (i) { |
|
6465 return Number(agent.replace(r, '$' + i)); |
|
6466 }; |
|
6467 return nu(group(1), group(2)); |
|
6468 }; |
|
6469 var detect = function (versionRegexes, agent) { |
|
6470 var cleanedAgent = String(agent).toLowerCase(); |
|
6471 if (versionRegexes.length === 0) |
|
6472 return unknown(); |
|
6473 return find$2(versionRegexes, cleanedAgent); |
|
6474 }; |
|
6475 var unknown = function () { |
|
6476 return nu(0, 0); |
|
6477 }; |
|
6478 var nu = function (major, minor) { |
|
6479 return { |
|
6480 major: major, |
|
6481 minor: minor |
|
6482 }; |
|
6483 }; |
|
6484 var $_bhlk9t1b2jjgwekaq = { |
|
6485 nu: nu, |
|
6486 detect: detect, |
|
6487 unknown: unknown |
|
6488 }; |
|
6489 |
|
6490 var edge = 'Edge'; |
|
6491 var chrome = 'Chrome'; |
|
6492 var ie = 'IE'; |
|
6493 var opera = 'Opera'; |
|
6494 var firefox = 'Firefox'; |
|
6495 var safari = 'Safari'; |
|
6496 var isBrowser = function (name, current) { |
|
6497 return function () { |
|
6498 return current === name; |
|
6499 }; |
|
6500 }; |
|
6501 var unknown$1 = function () { |
|
6502 return nu$1({ |
|
6503 current: undefined, |
|
6504 version: $_bhlk9t1b2jjgwekaq.unknown() |
|
6505 }); |
|
6506 }; |
|
6507 var nu$1 = function (info) { |
|
6508 var current = info.current; |
|
6509 var version = info.version; |
|
6510 return { |
|
6511 current: current, |
|
6512 version: version, |
|
6513 isEdge: isBrowser(edge, current), |
|
6514 isChrome: isBrowser(chrome, current), |
|
6515 isIE: isBrowser(ie, current), |
|
6516 isOpera: isBrowser(opera, current), |
|
6517 isFirefox: isBrowser(firefox, current), |
|
6518 isSafari: isBrowser(safari, current) |
|
6519 }; |
|
6520 }; |
|
6521 var $_3j4jht1b1jjgwekal = { |
|
6522 unknown: unknown$1, |
|
6523 nu: nu$1, |
|
6524 edge: constant(edge), |
|
6525 chrome: constant(chrome), |
|
6526 ie: constant(ie), |
|
6527 opera: constant(opera), |
|
6528 firefox: constant(firefox), |
|
6529 safari: constant(safari) |
|
6530 }; |
|
6531 |
|
6532 var windows$1 = 'Windows'; |
|
6533 var ios = 'iOS'; |
|
6534 var android = 'Android'; |
|
6535 var linux = 'Linux'; |
|
6536 var osx = 'OSX'; |
|
6537 var solaris = 'Solaris'; |
|
6538 var freebsd = 'FreeBSD'; |
|
6539 var isOS = function (name, current) { |
|
6540 return function () { |
|
6541 return current === name; |
|
6542 }; |
|
6543 }; |
|
6544 var unknown$2 = function () { |
|
6545 return nu$2({ |
|
6546 current: undefined, |
|
6547 version: $_bhlk9t1b2jjgwekaq.unknown() |
|
6548 }); |
|
6549 }; |
|
6550 var nu$2 = function (info) { |
|
6551 var current = info.current; |
|
6552 var version = info.version; |
|
6553 return { |
|
6554 current: current, |
|
6555 version: version, |
|
6556 isWindows: isOS(windows$1, current), |
|
6557 isiOS: isOS(ios, current), |
|
6558 isAndroid: isOS(android, current), |
|
6559 isOSX: isOS(osx, current), |
|
6560 isLinux: isOS(linux, current), |
|
6561 isSolaris: isOS(solaris, current), |
|
6562 isFreeBSD: isOS(freebsd, current) |
|
6563 }; |
|
6564 }; |
|
6565 var $_7je60a1b3jjgwekar = { |
|
6566 unknown: unknown$2, |
|
6567 nu: nu$2, |
|
6568 windows: constant(windows$1), |
|
6569 ios: constant(ios), |
|
6570 android: constant(android), |
|
6571 linux: constant(linux), |
|
6572 osx: constant(osx), |
|
6573 solaris: constant(solaris), |
|
6574 freebsd: constant(freebsd) |
|
6575 }; |
|
6576 |
|
6577 function DeviceType (os, browser, userAgent) { |
|
6578 var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true; |
|
6579 var isiPhone = os.isiOS() && !isiPad; |
|
6580 var isAndroid3 = os.isAndroid() && os.version.major === 3; |
|
6581 var isAndroid4 = os.isAndroid() && os.version.major === 4; |
|
6582 var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true; |
|
6583 var isTouch = os.isiOS() || os.isAndroid(); |
|
6584 var isPhone = isTouch && !isTablet; |
|
6585 var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false; |
|
6586 return { |
|
6587 isiPad: constant(isiPad), |
|
6588 isiPhone: constant(isiPhone), |
|
6589 isTablet: constant(isTablet), |
|
6590 isPhone: constant(isPhone), |
|
6591 isTouch: constant(isTouch), |
|
6592 isAndroid: os.isAndroid, |
|
6593 isiOS: os.isiOS, |
|
6594 isWebView: constant(iOSwebview) |
|
6595 }; |
|
6596 } |
|
6597 |
|
6598 var detect$1 = function (candidates, userAgent) { |
|
6599 var agent = String(userAgent).toLowerCase(); |
|
6600 return find(candidates, function (candidate) { |
|
6601 return candidate.search(agent); |
|
6602 }); |
|
6603 }; |
|
6604 var detectBrowser = function (browsers, userAgent) { |
|
6605 return detect$1(browsers, userAgent).map(function (browser) { |
|
6606 var version = $_bhlk9t1b2jjgwekaq.detect(browser.versionRegexes, userAgent); |
|
6607 return { |
|
6608 current: browser.name, |
|
6609 version: version |
|
6610 }; |
|
6611 }); |
|
6612 }; |
|
6613 var detectOs = function (oses, userAgent) { |
|
6614 return detect$1(oses, userAgent).map(function (os) { |
|
6615 var version = $_bhlk9t1b2jjgwekaq.detect(os.versionRegexes, userAgent); |
|
6616 return { |
|
6617 current: os.name, |
|
6618 version: version |
|
6619 }; |
|
6620 }); |
|
6621 }; |
|
6622 var $_1uo66k1b5jjgwekb9 = { |
|
6623 detectBrowser: detectBrowser, |
|
6624 detectOs: detectOs |
|
6625 }; |
|
6626 |
|
6627 var contains$1 = function (str, substr) { |
|
6628 return str.indexOf(substr) !== -1; |
|
6629 }; |
|
6630 |
|
6631 var normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/; |
|
6632 var checkContains = function (target) { |
|
6633 return function (uastring) { |
|
6634 return contains$1(uastring, target); |
|
6635 }; |
|
6636 }; |
|
6637 var browsers = [ |
|
6638 { |
|
6639 name: 'Edge', |
|
6640 versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/], |
|
6641 search: function (uastring) { |
|
6642 var monstrosity = contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit'); |
|
6643 return monstrosity; |
|
6644 } |
|
6645 }, |
|
6646 { |
|
6647 name: 'Chrome', |
|
6648 versionRegexes: [ |
|
6649 /.*?chrome\/([0-9]+)\.([0-9]+).*/, |
|
6650 normalVersionRegex |
|
6651 ], |
|
6652 search: function (uastring) { |
|
6653 return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe'); |
|
6654 } |
|
6655 }, |
|
6656 { |
|
6657 name: 'IE', |
|
6658 versionRegexes: [ |
|
6659 /.*?msie\ ?([0-9]+)\.([0-9]+).*/, |
|
6660 /.*?rv:([0-9]+)\.([0-9]+).*/ |
|
6661 ], |
|
6662 search: function (uastring) { |
|
6663 return contains$1(uastring, 'msie') || contains$1(uastring, 'trident'); |
|
6664 } |
|
6665 }, |
|
6666 { |
|
6667 name: 'Opera', |
|
6668 versionRegexes: [ |
|
6669 normalVersionRegex, |
|
6670 /.*?opera\/([0-9]+)\.([0-9]+).*/ |
|
6671 ], |
|
6672 search: checkContains('opera') |
|
6673 }, |
|
6674 { |
|
6675 name: 'Firefox', |
|
6676 versionRegexes: [/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/], |
|
6677 search: checkContains('firefox') |
|
6678 }, |
|
6679 { |
|
6680 name: 'Safari', |
|
6681 versionRegexes: [ |
|
6682 normalVersionRegex, |
|
6683 /.*?cpu os ([0-9]+)_([0-9]+).*/ |
|
6684 ], |
|
6685 search: function (uastring) { |
|
6686 return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit'); |
|
6687 } |
|
6688 } |
|
6689 ]; |
|
6690 var oses = [ |
|
6691 { |
|
6692 name: 'Windows', |
|
6693 search: checkContains('win'), |
|
6694 versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/] |
|
6695 }, |
|
6696 { |
|
6697 name: 'iOS', |
|
6698 search: function (uastring) { |
|
6699 return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad'); |
|
6700 }, |
|
6701 versionRegexes: [ |
|
6702 /.*?version\/\ ?([0-9]+)\.([0-9]+).*/, |
|
6703 /.*cpu os ([0-9]+)_([0-9]+).*/, |
|
6704 /.*cpu iphone os ([0-9]+)_([0-9]+).*/ |
|
6705 ] |
|
6706 }, |
|
6707 { |
|
6708 name: 'Android', |
|
6709 search: checkContains('android'), |
|
6710 versionRegexes: [/.*?android\ ?([0-9]+)\.([0-9]+).*/] |
|
6711 }, |
|
6712 { |
|
6713 name: 'OSX', |
|
6714 search: checkContains('os x'), |
|
6715 versionRegexes: [/.*?os\ x\ ?([0-9]+)_([0-9]+).*/] |
|
6716 }, |
|
6717 { |
|
6718 name: 'Linux', |
|
6719 search: checkContains('linux'), |
|
6720 versionRegexes: [] |
|
6721 }, |
|
6722 { |
|
6723 name: 'Solaris', |
|
6724 search: checkContains('sunos'), |
|
6725 versionRegexes: [] |
|
6726 }, |
|
6727 { |
|
6728 name: 'FreeBSD', |
|
6729 search: checkContains('freebsd'), |
|
6730 versionRegexes: [] |
|
6731 } |
|
6732 ]; |
|
6733 var $_4f7v971b6jjgwekbd = { |
|
6734 browsers: constant(browsers), |
|
6735 oses: constant(oses) |
|
6736 }; |
|
6737 |
|
6738 var detect$2 = function (userAgent) { |
|
6739 var browsers = $_4f7v971b6jjgwekbd.browsers(); |
|
6740 var oses = $_4f7v971b6jjgwekbd.oses(); |
|
6741 var browser = $_1uo66k1b5jjgwekb9.detectBrowser(browsers, userAgent).fold($_3j4jht1b1jjgwekal.unknown, $_3j4jht1b1jjgwekal.nu); |
|
6742 var os = $_1uo66k1b5jjgwekb9.detectOs(oses, userAgent).fold($_7je60a1b3jjgwekar.unknown, $_7je60a1b3jjgwekar.nu); |
|
6743 var deviceType = DeviceType(os, browser, userAgent); |
|
6744 return { |
|
6745 browser: browser, |
|
6746 os: os, |
|
6747 deviceType: deviceType |
|
6748 }; |
|
6749 }; |
|
6750 var $_d71emz1b0jjgwekak = { detect: detect$2 }; |
|
6751 |
|
6752 var detect$3 = cached(function () { |
|
6753 var userAgent = navigator.userAgent; |
|
6754 return $_d71emz1b0jjgwekak.detect(userAgent); |
|
6755 }); |
|
6756 var $_9xrxmy1azjjgwekac = { detect: detect$3 }; |
|
6757 |
|
6758 var ELEMENT = $_2jrgnk1apjjgwek8y.ELEMENT; |
|
6759 var DOCUMENT = $_2jrgnk1apjjgwek8y.DOCUMENT; |
|
6760 var is = function (element, selector) { |
|
6761 var elem = element.dom(); |
|
6762 if (elem.nodeType !== ELEMENT) |
|
6763 return false; |
|
6764 else if (elem.matches !== undefined) |
|
6765 return elem.matches(selector); |
|
6766 else if (elem.msMatchesSelector !== undefined) |
|
6767 return elem.msMatchesSelector(selector); |
|
6768 else if (elem.webkitMatchesSelector !== undefined) |
|
6769 return elem.webkitMatchesSelector(selector); |
|
6770 else if (elem.mozMatchesSelector !== undefined) |
|
6771 return elem.mozMatchesSelector(selector); |
|
6772 else |
|
6773 throw new Error('Browser lacks native selectors'); |
|
6774 }; |
|
6775 var bypassSelector = function (dom) { |
|
6776 return dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT || dom.childElementCount === 0; |
|
6777 }; |
|
6778 var all = function (selector, scope) { |
|
6779 var base = scope === undefined ? document : scope.dom(); |
|
6780 return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element$$1.fromDom); |
|
6781 }; |
|
6782 var one = function (selector, scope) { |
|
6783 var base = scope === undefined ? document : scope.dom(); |
|
6784 return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element$$1.fromDom); |
|
6785 }; |
|
6786 var $_e63uk51bajjgwekbq = { |
|
6787 all: all, |
|
6788 is: is, |
|
6789 one: one |
|
6790 }; |
|
6791 |
|
6792 var eq = function (e1, e2) { |
|
6793 return e1.dom() === e2.dom(); |
|
6794 }; |
|
6795 var isEqualNode = function (e1, e2) { |
|
6796 return e1.dom().isEqualNode(e2.dom()); |
|
6797 }; |
|
6798 var member = function (element, elements) { |
|
6799 return exists(elements, curry(eq, element)); |
|
6800 }; |
|
6801 var regularContains = function (e1, e2) { |
|
6802 var d1 = e1.dom(), d2 = e2.dom(); |
|
6803 return d1 === d2 ? false : d1.contains(d2); |
|
6804 }; |
|
6805 var ieContains = function (e1, e2) { |
|
6806 return $_d0o64o1ayjjgwekaa.documentPositionContainedBy(e1.dom(), e2.dom()); |
|
6807 }; |
|
6808 var browser = $_9xrxmy1azjjgwekac.detect().browser; |
|
6809 var contains$2 = browser.isIE() ? ieContains : regularContains; |
|
6810 var $_36s5ie1axjjgweka1 = { |
|
6811 eq: eq, |
|
6812 isEqualNode: isEqualNode, |
|
6813 member: member, |
|
6814 contains: contains$2, |
|
6815 is: $_e63uk51bajjgwekbq.is |
|
6816 }; |
|
6817 |
|
6818 var owner = function (element) { |
|
6819 return Element$$1.fromDom(element.dom().ownerDocument); |
|
6820 }; |
|
6821 var documentElement = function (element) { |
|
6822 return Element$$1.fromDom(element.dom().ownerDocument.documentElement); |
|
6823 }; |
|
6824 var defaultView = function (element) { |
|
6825 var el = element.dom(); |
|
6826 var defaultView = el.ownerDocument.defaultView; |
|
6827 return Element$$1.fromDom(defaultView); |
|
6828 }; |
|
6829 var parent$1 = function (element) { |
|
6830 var dom = element.dom(); |
|
6831 return Option.from(dom.parentNode).map(Element$$1.fromDom); |
|
6832 }; |
|
6833 var findIndex$1 = function (element) { |
|
6834 return parent$1(element).bind(function (p) { |
|
6835 var kin = children(p); |
|
6836 return findIndex(kin, function (elem) { |
|
6837 return $_36s5ie1axjjgweka1.eq(element, elem); |
|
6838 }); |
|
6839 }); |
|
6840 }; |
|
6841 var parents = function (element, isRoot) { |
|
6842 var stop = isFunction$1(isRoot) ? isRoot : constant(false); |
|
6843 var dom = element.dom(); |
|
6844 var ret = []; |
|
6845 while (dom.parentNode !== null && dom.parentNode !== undefined) { |
|
6846 var rawParent = dom.parentNode; |
|
6847 var parent = Element$$1.fromDom(rawParent); |
|
6848 ret.push(parent); |
|
6849 if (stop(parent) === true) |
|
6850 break; |
|
6851 else |
|
6852 dom = rawParent; |
|
6853 } |
|
6854 return ret; |
|
6855 }; |
|
6856 var siblings = function (element) { |
|
6857 var filterSelf = function (elements) { |
|
6858 return filter(elements, function (x) { |
|
6859 return !$_36s5ie1axjjgweka1.eq(element, x); |
|
6860 }); |
|
6861 }; |
|
6862 return parent$1(element).map(children).map(filterSelf).getOr([]); |
|
6863 }; |
|
6864 var offsetParent = function (element) { |
|
6865 var dom = element.dom(); |
|
6866 return Option.from(dom.offsetParent).map(Element$$1.fromDom); |
|
6867 }; |
|
6868 var prevSibling = function (element) { |
|
6869 var dom = element.dom(); |
|
6870 return Option.from(dom.previousSibling).map(Element$$1.fromDom); |
|
6871 }; |
|
6872 var nextSibling = function (element) { |
|
6873 var dom = element.dom(); |
|
6874 return Option.from(dom.nextSibling).map(Element$$1.fromDom); |
|
6875 }; |
|
6876 var prevSiblings = function (element) { |
|
6877 return reverse($_607sf01awjjgweka0.toArray(element, prevSibling)); |
|
6878 }; |
|
6879 var nextSiblings = function (element) { |
|
6880 return $_607sf01awjjgweka0.toArray(element, nextSibling); |
|
6881 }; |
|
6882 var children = function (element) { |
|
6883 var dom = element.dom(); |
|
6884 return map(dom.childNodes, Element$$1.fromDom); |
|
6885 }; |
|
6886 var child = function (element, index) { |
|
6887 var children = element.dom().childNodes; |
|
6888 return Option.from(children[index]).map(Element$$1.fromDom); |
|
6889 }; |
|
6890 var firstChild = function (element) { |
|
6891 return child(element, 0); |
|
6892 }; |
|
6893 var lastChild = function (element) { |
|
6894 return child(element, element.dom().childNodes.length - 1); |
|
6895 }; |
|
6896 var childNodesCount = function (element) { |
|
6897 return element.dom().childNodes.length; |
|
6898 }; |
|
6899 var hasChildNodes = function (element) { |
|
6900 return element.dom().hasChildNodes(); |
|
6901 }; |
|
6902 var spot = Immutable('element', 'offset'); |
|
6903 var leaf = function (element, offset) { |
|
6904 var cs = children(element); |
|
6905 return cs.length > 0 && offset < cs.length ? spot(cs[offset], 0) : spot(element, offset); |
|
6906 }; |
|
6907 var $_fk3hdw1aqjjgwek91 = { |
|
6908 owner: owner, |
|
6909 defaultView: defaultView, |
|
6910 documentElement: documentElement, |
|
6911 parent: parent$1, |
|
6912 findIndex: findIndex$1, |
|
6913 parents: parents, |
|
6914 siblings: siblings, |
|
6915 prevSibling: prevSibling, |
|
6916 offsetParent: offsetParent, |
|
6917 prevSiblings: prevSiblings, |
|
6918 nextSibling: nextSibling, |
|
6919 nextSiblings: nextSiblings, |
|
6920 children: children, |
|
6921 child: child, |
|
6922 firstChild: firstChild, |
|
6923 lastChild: lastChild, |
|
6924 childNodesCount: childNodesCount, |
|
6925 hasChildNodes: hasChildNodes, |
|
6926 leaf: leaf |
|
6927 }; |
|
6928 |
|
6929 var all$1 = function (predicate) { |
|
6930 return descendants($_d2glpe1amjjgwek8t.body(), predicate); |
|
6931 }; |
|
6932 var ancestors = function (scope, predicate, isRoot) { |
|
6933 return filter($_fk3hdw1aqjjgwek91.parents(scope, isRoot), predicate); |
|
6934 }; |
|
6935 var siblings$1 = function (scope, predicate) { |
|
6936 return filter($_fk3hdw1aqjjgwek91.siblings(scope), predicate); |
|
6937 }; |
|
6938 var children$1 = function (scope, predicate) { |
|
6939 return filter($_fk3hdw1aqjjgwek91.children(scope), predicate); |
|
6940 }; |
|
6941 var descendants = function (scope, predicate) { |
|
6942 var result = []; |
|
6943 each($_fk3hdw1aqjjgwek91.children(scope), function (x) { |
|
6944 if (predicate(x)) { |
|
6945 result = result.concat([x]); |
|
6946 } |
|
6947 result = result.concat(descendants(x, predicate)); |
|
6948 }); |
|
6949 return result; |
|
6950 }; |
|
6951 var $_4re57m1aljjgwek8p = { |
|
6952 all: all$1, |
|
6953 ancestors: ancestors, |
|
6954 siblings: siblings$1, |
|
6955 children: children$1, |
|
6956 descendants: descendants |
|
6957 }; |
|
6958 |
|
6959 var all$2 = function (selector) { |
|
6960 return $_e63uk51bajjgwekbq.all(selector); |
|
6961 }; |
|
6962 var ancestors$1 = function (scope, selector, isRoot) { |
|
6963 return $_4re57m1aljjgwek8p.ancestors(scope, function (e) { |
|
6964 return $_e63uk51bajjgwekbq.is(e, selector); |
|
6965 }, isRoot); |
|
6966 }; |
|
6967 var siblings$2 = function (scope, selector) { |
|
6968 return $_4re57m1aljjgwek8p.siblings(scope, function (e) { |
|
6969 return $_e63uk51bajjgwekbq.is(e, selector); |
|
6970 }); |
|
6971 }; |
|
6972 var children$2 = function (scope, selector) { |
|
6973 return $_4re57m1aljjgwek8p.children(scope, function (e) { |
|
6974 return $_e63uk51bajjgwekbq.is(e, selector); |
|
6975 }); |
|
6976 }; |
|
6977 var descendants$1 = function (scope, selector) { |
|
6978 return $_e63uk51bajjgwekbq.all(selector, scope); |
|
6979 }; |
|
6980 var $_1jc9su1akjjgwek8o = { |
|
6981 all: all$2, |
|
6982 ancestors: ancestors$1, |
|
6983 siblings: siblings$2, |
|
6984 children: children$2, |
|
6985 descendants: descendants$1 |
|
6986 }; |
|
6987 |
|
6988 var trim$1 = global$4.trim; |
|
6989 var hasContentEditableState = function (value) { |
|
6990 return function (node) { |
|
6991 if (node && node.nodeType === 1) { |
|
6992 if (node.contentEditable === value) { |
|
6993 return true; |
|
6994 } |
|
6995 if (node.getAttribute('data-mce-contenteditable') === value) { |
|
6996 return true; |
|
6997 } |
|
6998 } |
|
6999 return false; |
|
7000 }; |
|
7001 }; |
|
7002 var isContentEditableTrue = hasContentEditableState('true'); |
|
7003 var isContentEditableFalse = hasContentEditableState('false'); |
|
7004 var create$4 = function (type, title, url, level, attach) { |
|
7005 return { |
|
7006 type: type, |
|
7007 title: title, |
|
7008 url: url, |
|
7009 level: level, |
|
7010 attach: attach |
|
7011 }; |
|
7012 }; |
|
7013 var isChildOfContentEditableTrue = function (node) { |
|
7014 while (node = node.parentNode) { |
|
7015 var value = node.contentEditable; |
|
7016 if (value && value !== 'inherit') { |
|
7017 return isContentEditableTrue(node); |
|
7018 } |
|
7019 } |
|
7020 return false; |
|
7021 }; |
|
7022 var select = function (selector, root) { |
|
7023 return map($_1jc9su1akjjgwek8o.descendants(Element$$1.fromDom(root), selector), function (element) { |
|
7024 return element.dom(); |
|
7025 }); |
|
7026 }; |
|
7027 var getElementText = function (elm) { |
|
7028 return elm.innerText || elm.textContent; |
|
7029 }; |
|
7030 var getOrGenerateId = function (elm) { |
|
7031 return elm.id ? elm.id : generate('h'); |
|
7032 }; |
|
7033 var isAnchor = function (elm) { |
|
7034 return elm && elm.nodeName === 'A' && (elm.id || elm.name); |
|
7035 }; |
|
7036 var isValidAnchor = function (elm) { |
|
7037 return isAnchor(elm) && isEditable(elm); |
|
7038 }; |
|
7039 var isHeader = function (elm) { |
|
7040 return elm && /^(H[1-6])$/.test(elm.nodeName); |
|
7041 }; |
|
7042 var isEditable = function (elm) { |
|
7043 return isChildOfContentEditableTrue(elm) && !isContentEditableFalse(elm); |
|
7044 }; |
|
7045 var isValidHeader = function (elm) { |
|
7046 return isHeader(elm) && isEditable(elm); |
|
7047 }; |
|
7048 var getLevel = function (elm) { |
|
7049 return isHeader(elm) ? parseInt(elm.nodeName.substr(1), 10) : 0; |
|
7050 }; |
|
7051 var headerTarget = function (elm) { |
|
7052 var headerId = getOrGenerateId(elm); |
|
7053 var attach = function () { |
|
7054 elm.id = headerId; |
|
7055 }; |
|
7056 return create$4('header', getElementText(elm), '#' + headerId, getLevel(elm), attach); |
|
7057 }; |
|
7058 var anchorTarget = function (elm) { |
|
7059 var anchorId = elm.id || elm.name; |
|
7060 var anchorText = getElementText(elm); |
|
7061 return create$4('anchor', anchorText ? anchorText : '#' + anchorId, '#' + anchorId, 0, noop); |
|
7062 }; |
|
7063 var getHeaderTargets = function (elms) { |
|
7064 return map(filter(elms, isValidHeader), headerTarget); |
|
7065 }; |
|
7066 var getAnchorTargets = function (elms) { |
|
7067 return map(filter(elms, isValidAnchor), anchorTarget); |
|
7068 }; |
|
7069 var getTargetElements = function (elm) { |
|
7070 var elms = select('h1,h2,h3,h4,h5,h6,a:not([href])', elm); |
|
7071 return elms; |
|
7072 }; |
|
7073 var hasTitle = function (target) { |
|
7074 return trim$1(target.title).length > 0; |
|
7075 }; |
|
7076 var find$3 = function (elm) { |
|
7077 var elms = getTargetElements(elm); |
|
7078 return filter(getHeaderTargets(elms).concat(getAnchorTargets(elms)), hasTitle); |
|
7079 }; |
|
7080 var $_5ia43q1ahjjgwek7u = { find: find$3 }; |
|
7081 |
|
7082 var getActiveEditor = function () { |
|
7083 return window.tinymce ? window.tinymce.activeEditor : global$5.activeEditor; |
|
7084 }; |
|
7085 var history = {}; |
|
7086 var HISTORY_LENGTH = 5; |
|
7087 var clearHistory = function () { |
|
7088 history = {}; |
|
7089 }; |
|
7090 var toMenuItem = function (target) { |
|
7091 return { |
|
7092 title: target.title, |
|
7093 value: { |
|
7094 title: { raw: target.title }, |
|
7095 url: target.url, |
|
7096 attach: target.attach |
|
7097 } |
|
7098 }; |
|
7099 }; |
|
7100 var toMenuItems = function (targets) { |
|
7101 return global$4.map(targets, toMenuItem); |
|
7102 }; |
|
7103 var staticMenuItem = function (title, url) { |
|
7104 return { |
|
7105 title: title, |
|
7106 value: { |
|
7107 title: title, |
|
7108 url: url, |
|
7109 attach: noop |
|
7110 } |
|
7111 }; |
|
7112 }; |
|
7113 var isUniqueUrl = function (url, targets) { |
|
7114 var foundTarget = exists(targets, function (target) { |
|
7115 return target.url === url; |
|
7116 }); |
|
7117 return !foundTarget; |
|
7118 }; |
|
7119 var getSetting = function (editorSettings, name, defaultValue) { |
|
7120 var value = name in editorSettings ? editorSettings[name] : defaultValue; |
|
7121 return value === false ? null : value; |
|
7122 }; |
|
7123 var createMenuItems = function (term, targets, fileType, editorSettings) { |
|
7124 var separator = { title: '-' }; |
|
7125 var fromHistoryMenuItems = function (history) { |
|
7126 var historyItems = history.hasOwnProperty(fileType) ? history[fileType] : []; |
|
7127 var uniqueHistory = filter(historyItems, function (url) { |
|
7128 return isUniqueUrl(url, targets); |
|
7129 }); |
|
7130 return global$4.map(uniqueHistory, function (url) { |
|
7131 return { |
|
7132 title: url, |
|
7133 value: { |
|
7134 title: url, |
|
7135 url: url, |
|
7136 attach: noop |
|
7137 } |
|
7138 }; |
|
7139 }); |
|
7140 }; |
|
7141 var fromMenuItems = function (type) { |
|
7142 var filteredTargets = filter(targets, function (target) { |
|
7143 return target.type === type; |
|
7144 }); |
|
7145 return toMenuItems(filteredTargets); |
|
7146 }; |
|
7147 var anchorMenuItems = function () { |
|
7148 var anchorMenuItems = fromMenuItems('anchor'); |
|
7149 var topAnchor = getSetting(editorSettings, 'anchor_top', '#top'); |
|
7150 var bottomAchor = getSetting(editorSettings, 'anchor_bottom', '#bottom'); |
|
7151 if (topAnchor !== null) { |
|
7152 anchorMenuItems.unshift(staticMenuItem('<top>', topAnchor)); |
|
7153 } |
|
7154 if (bottomAchor !== null) { |
|
7155 anchorMenuItems.push(staticMenuItem('<bottom>', bottomAchor)); |
|
7156 } |
|
7157 return anchorMenuItems; |
|
7158 }; |
|
7159 var join = function (items) { |
|
7160 return foldl(items, function (a, b) { |
|
7161 var bothEmpty = a.length === 0 || b.length === 0; |
|
7162 return bothEmpty ? a.concat(b) : a.concat(separator, b); |
|
7163 }, []); |
|
7164 }; |
|
7165 if (editorSettings.typeahead_urls === false) { |
|
7166 return []; |
|
7167 } |
|
7168 return fileType === 'file' ? join([ |
|
7169 filterByQuery(term, fromHistoryMenuItems(history)), |
|
7170 filterByQuery(term, fromMenuItems('header')), |
|
7171 filterByQuery(term, anchorMenuItems()) |
|
7172 ]) : filterByQuery(term, fromHistoryMenuItems(history)); |
|
7173 }; |
|
7174 var addToHistory = function (url, fileType) { |
|
7175 var items = history[fileType]; |
|
7176 if (!/^https?/.test(url)) { |
|
7177 return; |
|
7178 } |
|
7179 if (items) { |
|
7180 if (indexOf(items, url).isNone()) { |
|
7181 history[fileType] = items.slice(0, HISTORY_LENGTH).concat(url); |
|
7182 } |
|
7183 } else { |
|
7184 history[fileType] = [url]; |
|
7185 } |
|
7186 }; |
|
7187 var filterByQuery = function (term, menuItems) { |
|
7188 var lowerCaseTerm = term.toLowerCase(); |
|
7189 var result = global$4.grep(menuItems, function (item) { |
|
7190 return item.title.toLowerCase().indexOf(lowerCaseTerm) !== -1; |
|
7191 }); |
|
7192 return result.length === 1 && result[0].title === term ? [] : result; |
|
7193 }; |
|
7194 var getTitle = function (linkDetails) { |
|
7195 var title = linkDetails.title; |
|
7196 return title.raw ? title.raw : title; |
|
7197 }; |
|
7198 var setupAutoCompleteHandler = function (ctrl, editorSettings, bodyElm, fileType) { |
|
7199 var autocomplete = function (term) { |
|
7200 var linkTargets = $_5ia43q1ahjjgwek7u.find(bodyElm); |
|
7201 var menuItems = createMenuItems(term, linkTargets, fileType, editorSettings); |
|
7202 ctrl.showAutoComplete(menuItems, term); |
|
7203 }; |
|
7204 ctrl.on('autocomplete', function () { |
|
7205 autocomplete(ctrl.value()); |
|
7206 }); |
|
7207 ctrl.on('selectitem', function (e) { |
|
7208 var linkDetails = e.value; |
|
7209 ctrl.value(linkDetails.url); |
|
7210 var title = getTitle(linkDetails); |
|
7211 if (fileType === 'image') { |
|
7212 ctrl.fire('change', { |
|
7213 meta: { |
|
7214 alt: title, |
|
7215 attach: linkDetails.attach |
|
7216 } |
|
7217 }); |
|
7218 } else { |
|
7219 ctrl.fire('change', { |
|
7220 meta: { |
|
7221 text: title, |
|
7222 attach: linkDetails.attach |
|
7223 } |
|
7224 }); |
|
7225 } |
|
7226 ctrl.focus(); |
|
7227 }); |
|
7228 ctrl.on('click', function (e) { |
|
7229 if (ctrl.value().length === 0 && e.target.nodeName === 'INPUT') { |
|
7230 autocomplete(''); |
|
7231 } |
|
7232 }); |
|
7233 ctrl.on('PostRender', function () { |
|
7234 ctrl.getRoot().on('submit', function (e) { |
|
7235 if (!e.isDefaultPrevented()) { |
|
7236 addToHistory(ctrl.value(), fileType); |
|
7237 } |
|
7238 }); |
|
7239 }); |
|
7240 }; |
|
7241 var statusToUiState = function (result) { |
|
7242 var status = result.status, message = result.message; |
|
7243 if (status === 'valid') { |
|
7244 return { |
|
7245 status: 'ok', |
|
7246 message: message |
|
7247 }; |
|
7248 } else if (status === 'unknown') { |
|
7249 return { |
|
7250 status: 'warn', |
|
7251 message: message |
|
7252 }; |
|
7253 } else if (status === 'invalid') { |
|
7254 return { |
|
7255 status: 'warn', |
|
7256 message: message |
|
7257 }; |
|
7258 } else { |
|
7259 return { |
|
7260 status: 'none', |
|
7261 message: '' |
|
7262 }; |
|
7263 } |
|
7264 }; |
|
7265 var setupLinkValidatorHandler = function (ctrl, editorSettings, fileType) { |
|
7266 var validatorHandler = editorSettings.filepicker_validator_handler; |
|
7267 if (validatorHandler) { |
|
7268 var validateUrl_1 = function (url) { |
|
7269 if (url.length === 0) { |
|
7270 ctrl.statusLevel('none'); |
|
7271 return; |
|
7272 } |
|
7273 validatorHandler({ |
|
7274 url: url, |
|
7275 type: fileType |
|
7276 }, function (result) { |
|
7277 var uiState = statusToUiState(result); |
|
7278 ctrl.statusMessage(uiState.message); |
|
7279 ctrl.statusLevel(uiState.status); |
|
7280 }); |
|
7281 }; |
|
7282 ctrl.state.on('change:value', function (e) { |
|
7283 validateUrl_1(e.value); |
|
7284 }); |
|
7285 } |
|
7286 }; |
|
7287 var FilePicker = ComboBox.extend({ |
|
7288 Statics: { clearHistory: clearHistory }, |
|
7289 init: function (settings) { |
|
7290 var self = this, editor = getActiveEditor(), editorSettings = editor.settings; |
|
7291 var actionCallback, fileBrowserCallback, fileBrowserCallbackTypes; |
|
7292 var fileType = settings.filetype; |
|
7293 settings.spellcheck = false; |
|
7294 fileBrowserCallbackTypes = editorSettings.file_picker_types || editorSettings.file_browser_callback_types; |
|
7295 if (fileBrowserCallbackTypes) { |
|
7296 fileBrowserCallbackTypes = global$4.makeMap(fileBrowserCallbackTypes, /[, ]/); |
|
7297 } |
|
7298 if (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType]) { |
|
7299 fileBrowserCallback = editorSettings.file_picker_callback; |
|
7300 if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) { |
|
7301 actionCallback = function () { |
|
7302 var meta = self.fire('beforecall').meta; |
|
7303 meta = global$4.extend({ filetype: fileType }, meta); |
|
7304 fileBrowserCallback.call(editor, function (value, meta) { |
|
7305 self.value(value).fire('change', { meta: meta }); |
|
7306 }, self.value(), meta); |
|
7307 }; |
|
7308 } else { |
|
7309 fileBrowserCallback = editorSettings.file_browser_callback; |
|
7310 if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) { |
|
7311 actionCallback = function () { |
|
7312 fileBrowserCallback(self.getEl('inp').id, self.value(), fileType, window); |
|
7313 }; |
|
7314 } |
|
7315 } |
|
7316 } |
|
7317 if (actionCallback) { |
|
7318 settings.icon = 'browse'; |
|
7319 settings.onaction = actionCallback; |
|
7320 } |
|
7321 self._super(settings); |
|
7322 self.classes.add('filepicker'); |
|
7323 setupAutoCompleteHandler(self, editorSettings, editor.getBody(), fileType); |
|
7324 setupLinkValidatorHandler(self, editorSettings, fileType); |
|
7325 } |
|
7326 }); |
|
7327 |
|
7328 var FitLayout = AbsoluteLayout.extend({ |
|
7329 recalc: function (container) { |
|
7330 var contLayoutRect = container.layoutRect(), paddingBox = container.paddingBox; |
|
7331 container.items().filter(':visible').each(function (ctrl) { |
|
7332 ctrl.layoutRect({ |
|
7333 x: paddingBox.left, |
|
7334 y: paddingBox.top, |
|
7335 w: contLayoutRect.innerW - paddingBox.right - paddingBox.left, |
|
7336 h: contLayoutRect.innerH - paddingBox.top - paddingBox.bottom |
|
7337 }); |
|
7338 if (ctrl.recalc) { |
|
7339 ctrl.recalc(); |
|
7340 } |
|
7341 }); |
|
7342 } |
|
7343 }); |
|
7344 |
|
7345 var FlexLayout = AbsoluteLayout.extend({ |
|
7346 recalc: function (container) { |
|
7347 var i, l, items, contLayoutRect, contPaddingBox, contSettings, align, pack, spacing, totalFlex, availableSpace, direction; |
|
7348 var ctrl, ctrlLayoutRect, ctrlSettings, flex; |
|
7349 var maxSizeItems = []; |
|
7350 var size, maxSize, ratio, rect, pos, maxAlignEndPos; |
|
7351 var sizeName, minSizeName, posName, maxSizeName, beforeName, innerSizeName, deltaSizeName, contentSizeName; |
|
7352 var alignAxisName, alignInnerSizeName, alignSizeName, alignMinSizeName, alignBeforeName, alignAfterName; |
|
7353 var alignDeltaSizeName, alignContentSizeName; |
|
7354 var max = Math.max, min = Math.min; |
|
7355 items = container.items().filter(':visible'); |
|
7356 contLayoutRect = container.layoutRect(); |
|
7357 contPaddingBox = container.paddingBox; |
|
7358 contSettings = container.settings; |
|
7359 direction = container.isRtl() ? contSettings.direction || 'row-reversed' : contSettings.direction; |
|
7360 align = contSettings.align; |
|
7361 pack = container.isRtl() ? contSettings.pack || 'end' : contSettings.pack; |
|
7362 spacing = contSettings.spacing || 0; |
|
7363 if (direction === 'row-reversed' || direction === 'column-reverse') { |
|
7364 items = items.set(items.toArray().reverse()); |
|
7365 direction = direction.split('-')[0]; |
|
7366 } |
|
7367 if (direction === 'column') { |
|
7368 posName = 'y'; |
|
7369 sizeName = 'h'; |
|
7370 minSizeName = 'minH'; |
|
7371 maxSizeName = 'maxH'; |
|
7372 innerSizeName = 'innerH'; |
|
7373 beforeName = 'top'; |
|
7374 deltaSizeName = 'deltaH'; |
|
7375 contentSizeName = 'contentH'; |
|
7376 alignBeforeName = 'left'; |
|
7377 alignSizeName = 'w'; |
|
7378 alignAxisName = 'x'; |
|
7379 alignInnerSizeName = 'innerW'; |
|
7380 alignMinSizeName = 'minW'; |
|
7381 alignAfterName = 'right'; |
|
7382 alignDeltaSizeName = 'deltaW'; |
|
7383 alignContentSizeName = 'contentW'; |
|
7384 } else { |
|
7385 posName = 'x'; |
|
7386 sizeName = 'w'; |
|
7387 minSizeName = 'minW'; |
|
7388 maxSizeName = 'maxW'; |
|
7389 innerSizeName = 'innerW'; |
|
7390 beforeName = 'left'; |
|
7391 deltaSizeName = 'deltaW'; |
|
7392 contentSizeName = 'contentW'; |
|
7393 alignBeforeName = 'top'; |
|
7394 alignSizeName = 'h'; |
|
7395 alignAxisName = 'y'; |
|
7396 alignInnerSizeName = 'innerH'; |
|
7397 alignMinSizeName = 'minH'; |
|
7398 alignAfterName = 'bottom'; |
|
7399 alignDeltaSizeName = 'deltaH'; |
|
7400 alignContentSizeName = 'contentH'; |
|
7401 } |
|
7402 availableSpace = contLayoutRect[innerSizeName] - contPaddingBox[beforeName] - contPaddingBox[beforeName]; |
|
7403 maxAlignEndPos = totalFlex = 0; |
|
7404 for (i = 0, l = items.length; i < l; i++) { |
|
7405 ctrl = items[i]; |
|
7406 ctrlLayoutRect = ctrl.layoutRect(); |
|
7407 ctrlSettings = ctrl.settings; |
|
7408 flex = ctrlSettings.flex; |
|
7409 availableSpace -= i < l - 1 ? spacing : 0; |
|
7410 if (flex > 0) { |
|
7411 totalFlex += flex; |
|
7412 if (ctrlLayoutRect[maxSizeName]) { |
|
7413 maxSizeItems.push(ctrl); |
|
7414 } |
|
7415 ctrlLayoutRect.flex = flex; |
|
7416 } |
|
7417 availableSpace -= ctrlLayoutRect[minSizeName]; |
|
7418 size = contPaddingBox[alignBeforeName] + ctrlLayoutRect[alignMinSizeName] + contPaddingBox[alignAfterName]; |
|
7419 if (size > maxAlignEndPos) { |
|
7420 maxAlignEndPos = size; |
|
7421 } |
|
7422 } |
|
7423 rect = {}; |
|
7424 if (availableSpace < 0) { |
|
7425 rect[minSizeName] = contLayoutRect[minSizeName] - availableSpace + contLayoutRect[deltaSizeName]; |
|
7426 } else { |
|
7427 rect[minSizeName] = contLayoutRect[innerSizeName] - availableSpace + contLayoutRect[deltaSizeName]; |
|
7428 } |
|
7429 rect[alignMinSizeName] = maxAlignEndPos + contLayoutRect[alignDeltaSizeName]; |
|
7430 rect[contentSizeName] = contLayoutRect[innerSizeName] - availableSpace; |
|
7431 rect[alignContentSizeName] = maxAlignEndPos; |
|
7432 rect.minW = min(rect.minW, contLayoutRect.maxW); |
|
7433 rect.minH = min(rect.minH, contLayoutRect.maxH); |
|
7434 rect.minW = max(rect.minW, contLayoutRect.startMinWidth); |
|
7435 rect.minH = max(rect.minH, contLayoutRect.startMinHeight); |
|
7436 if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) { |
|
7437 rect.w = rect.minW; |
|
7438 rect.h = rect.minH; |
|
7439 container.layoutRect(rect); |
|
7440 this.recalc(container); |
|
7441 if (container._lastRect === null) { |
|
7442 var parentCtrl = container.parent(); |
|
7443 if (parentCtrl) { |
|
7444 parentCtrl._lastRect = null; |
|
7445 parentCtrl.recalc(); |
|
7446 } |
|
7447 } |
|
7448 return; |
|
7449 } |
|
7450 ratio = availableSpace / totalFlex; |
|
7451 for (i = 0, l = maxSizeItems.length; i < l; i++) { |
|
7452 ctrl = maxSizeItems[i]; |
|
7453 ctrlLayoutRect = ctrl.layoutRect(); |
|
7454 maxSize = ctrlLayoutRect[maxSizeName]; |
|
7455 size = ctrlLayoutRect[minSizeName] + ctrlLayoutRect.flex * ratio; |
|
7456 if (size > maxSize) { |
|
7457 availableSpace -= ctrlLayoutRect[maxSizeName] - ctrlLayoutRect[minSizeName]; |
|
7458 totalFlex -= ctrlLayoutRect.flex; |
|
7459 ctrlLayoutRect.flex = 0; |
|
7460 ctrlLayoutRect.maxFlexSize = maxSize; |
|
7461 } else { |
|
7462 ctrlLayoutRect.maxFlexSize = 0; |
|
7463 } |
|
7464 } |
|
7465 ratio = availableSpace / totalFlex; |
|
7466 pos = contPaddingBox[beforeName]; |
|
7467 rect = {}; |
|
7468 if (totalFlex === 0) { |
|
7469 if (pack === 'end') { |
|
7470 pos = availableSpace + contPaddingBox[beforeName]; |
|
7471 } else if (pack === 'center') { |
|
7472 pos = Math.round(contLayoutRect[innerSizeName] / 2 - (contLayoutRect[innerSizeName] - availableSpace) / 2) + contPaddingBox[beforeName]; |
|
7473 if (pos < 0) { |
|
7474 pos = contPaddingBox[beforeName]; |
|
7475 } |
|
7476 } else if (pack === 'justify') { |
|
7477 pos = contPaddingBox[beforeName]; |
|
7478 spacing = Math.floor(availableSpace / (items.length - 1)); |
|
7479 } |
|
7480 } |
|
7481 rect[alignAxisName] = contPaddingBox[alignBeforeName]; |
|
7482 for (i = 0, l = items.length; i < l; i++) { |
|
7483 ctrl = items[i]; |
|
7484 ctrlLayoutRect = ctrl.layoutRect(); |
|
7485 size = ctrlLayoutRect.maxFlexSize || ctrlLayoutRect[minSizeName]; |
|
7486 if (align === 'center') { |
|
7487 rect[alignAxisName] = Math.round(contLayoutRect[alignInnerSizeName] / 2 - ctrlLayoutRect[alignSizeName] / 2); |
|
7488 } else if (align === 'stretch') { |
|
7489 rect[alignSizeName] = max(ctrlLayoutRect[alignMinSizeName] || 0, contLayoutRect[alignInnerSizeName] - contPaddingBox[alignBeforeName] - contPaddingBox[alignAfterName]); |
|
7490 rect[alignAxisName] = contPaddingBox[alignBeforeName]; |
|
7491 } else if (align === 'end') { |
|
7492 rect[alignAxisName] = contLayoutRect[alignInnerSizeName] - ctrlLayoutRect[alignSizeName] - contPaddingBox.top; |
|
7493 } |
|
7494 if (ctrlLayoutRect.flex > 0) { |
|
7495 size += ctrlLayoutRect.flex * ratio; |
|
7496 } |
|
7497 rect[sizeName] = size; |
|
7498 rect[posName] = pos; |
|
7499 ctrl.layoutRect(rect); |
|
7500 if (ctrl.recalc) { |
|
7501 ctrl.recalc(); |
|
7502 } |
|
7503 pos += size + spacing; |
|
7504 } |
|
7505 } |
|
7506 }); |
|
7507 |
|
7508 var FlowLayout = Layout$1.extend({ |
|
7509 Defaults: { |
|
7510 containerClass: 'flow-layout', |
|
7511 controlClass: 'flow-layout-item', |
|
7512 endClass: 'break' |
|
7513 }, |
|
7514 recalc: function (container) { |
|
7515 container.items().filter(':visible').each(function (ctrl) { |
|
7516 if (ctrl.recalc) { |
|
7517 ctrl.recalc(); |
|
7518 } |
|
7519 }); |
|
7520 }, |
|
7521 isNative: function () { |
|
7522 return true; |
|
7523 } |
|
7524 }); |
|
7525 |
|
7526 function ClosestOrAncestor (is, ancestor, scope, a, isRoot) { |
|
7527 return is(scope, a) ? Option.some(scope) : isFunction$1(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot); |
|
7528 } |
|
7529 |
|
7530 var first$1 = function (predicate) { |
|
7531 return descendant($_d2glpe1amjjgwek8t.body(), predicate); |
|
7532 }; |
|
7533 var ancestor = function (scope, predicate, isRoot) { |
|
7534 var element = scope.dom(); |
|
7535 var stop = isFunction$1(isRoot) ? isRoot : constant(false); |
|
7536 while (element.parentNode) { |
|
7537 element = element.parentNode; |
|
7538 var el = Element$$1.fromDom(element); |
|
7539 if (predicate(el)) |
|
7540 return Option.some(el); |
|
7541 else if (stop(el)) |
|
7542 break; |
|
7543 } |
|
7544 return Option.none(); |
|
7545 }; |
|
7546 var closest = function (scope, predicate, isRoot) { |
|
7547 var is = function (scope) { |
|
7548 return predicate(scope); |
|
7549 }; |
|
7550 return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot); |
|
7551 }; |
|
7552 var sibling = function (scope, predicate) { |
|
7553 var element = scope.dom(); |
|
7554 if (!element.parentNode) |
|
7555 return Option.none(); |
|
7556 return child$1(Element$$1.fromDom(element.parentNode), function (x) { |
|
7557 return !$_36s5ie1axjjgweka1.eq(scope, x) && predicate(x); |
|
7558 }); |
|
7559 }; |
|
7560 var child$1 = function (scope, predicate) { |
|
7561 var result = find(scope.dom().childNodes, compose(predicate, Element$$1.fromDom)); |
|
7562 return result.map(Element$$1.fromDom); |
|
7563 }; |
|
7564 var descendant = function (scope, predicate) { |
|
7565 var descend = function (node) { |
|
7566 for (var i = 0; i < node.childNodes.length; i++) { |
|
7567 if (predicate(Element$$1.fromDom(node.childNodes[i]))) |
|
7568 return Option.some(Element$$1.fromDom(node.childNodes[i])); |
|
7569 var res = descend(node.childNodes[i]); |
|
7570 if (res.isSome()) |
|
7571 return res; |
|
7572 } |
|
7573 return Option.none(); |
|
7574 }; |
|
7575 return descend(scope.dom()); |
|
7576 }; |
|
7577 var $_df9cwz1bgjjgwekcd = { |
|
7578 first: first$1, |
|
7579 ancestor: ancestor, |
|
7580 closest: closest, |
|
7581 sibling: sibling, |
|
7582 child: child$1, |
|
7583 descendant: descendant |
|
7584 }; |
|
7585 |
|
7586 var first$2 = function (selector) { |
|
7587 return $_e63uk51bajjgwekbq.one(selector); |
|
7588 }; |
|
7589 var ancestor$1 = function (scope, selector, isRoot) { |
|
7590 return $_df9cwz1bgjjgwekcd.ancestor(scope, function (e) { |
|
7591 return $_e63uk51bajjgwekbq.is(e, selector); |
|
7592 }, isRoot); |
|
7593 }; |
|
7594 var sibling$1 = function (scope, selector) { |
|
7595 return $_df9cwz1bgjjgwekcd.sibling(scope, function (e) { |
|
7596 return $_e63uk51bajjgwekbq.is(e, selector); |
|
7597 }); |
|
7598 }; |
|
7599 var child$2 = function (scope, selector) { |
|
7600 return $_df9cwz1bgjjgwekcd.child(scope, function (e) { |
|
7601 return $_e63uk51bajjgwekbq.is(e, selector); |
|
7602 }); |
|
7603 }; |
|
7604 var descendant$1 = function (scope, selector) { |
|
7605 return $_e63uk51bajjgwekbq.one(selector, scope); |
|
7606 }; |
|
7607 var closest$1 = function (scope, selector, isRoot) { |
|
7608 return ClosestOrAncestor($_e63uk51bajjgwekbq.is, ancestor$1, scope, selector, isRoot); |
|
7609 }; |
|
7610 var $_6nlstg1bfjjgwekcb = { |
|
7611 first: first$2, |
|
7612 ancestor: ancestor$1, |
|
7613 sibling: sibling$1, |
|
7614 child: child$2, |
|
7615 descendant: descendant$1, |
|
7616 closest: closest$1 |
|
7617 }; |
|
7618 |
|
7619 var toggleFormat = function (editor, fmt) { |
|
7620 return function () { |
|
7621 editor.execCommand('mceToggleFormat', false, fmt); |
|
7622 }; |
|
7623 }; |
|
7624 var addFormatChangedListener = function (editor, name, changed) { |
|
7625 var handler = function (state) { |
|
7626 changed(state, name); |
|
7627 }; |
|
7628 if (editor.formatter) { |
|
7629 editor.formatter.formatChanged(name, handler); |
|
7630 } else { |
|
7631 editor.on('init', function () { |
|
7632 editor.formatter.formatChanged(name, handler); |
|
7633 }); |
|
7634 } |
|
7635 }; |
|
7636 var postRenderFormatToggle = function (editor, name) { |
|
7637 return function (e) { |
|
7638 addFormatChangedListener(editor, name, function (state) { |
|
7639 e.control.active(state); |
|
7640 }); |
|
7641 }; |
|
7642 }; |
|
7643 |
|
7644 var register = function (editor) { |
|
7645 var alignFormats = [ |
|
7646 'alignleft', |
|
7647 'aligncenter', |
|
7648 'alignright', |
|
7649 'alignjustify' |
|
7650 ]; |
|
7651 var defaultAlign = 'alignleft'; |
|
7652 var alignMenuItems = [ |
|
7653 { |
|
7654 text: 'Left', |
|
7655 icon: 'alignleft', |
|
7656 onclick: toggleFormat(editor, 'alignleft') |
|
7657 }, |
|
7658 { |
|
7659 text: 'Center', |
|
7660 icon: 'aligncenter', |
|
7661 onclick: toggleFormat(editor, 'aligncenter') |
|
7662 }, |
|
7663 { |
|
7664 text: 'Right', |
|
7665 icon: 'alignright', |
|
7666 onclick: toggleFormat(editor, 'alignright') |
|
7667 }, |
|
7668 { |
|
7669 text: 'Justify', |
|
7670 icon: 'alignjustify', |
|
7671 onclick: toggleFormat(editor, 'alignjustify') |
|
7672 } |
|
7673 ]; |
|
7674 editor.addMenuItem('align', { |
|
7675 text: 'Align', |
|
7676 menu: alignMenuItems |
|
7677 }); |
|
7678 editor.addButton('align', { |
|
7679 type: 'menubutton', |
|
7680 icon: defaultAlign, |
|
7681 menu: alignMenuItems, |
|
7682 onShowMenu: function (e) { |
|
7683 var menu = e.control.menu; |
|
7684 global$4.each(alignFormats, function (formatName, idx) { |
|
7685 menu.items().eq(idx).each(function (item) { |
|
7686 return item.active(editor.formatter.match(formatName)); |
|
7687 }); |
|
7688 }); |
|
7689 }, |
|
7690 onPostRender: function (e) { |
|
7691 var ctrl = e.control; |
|
7692 global$4.each(alignFormats, function (formatName, idx) { |
|
7693 addFormatChangedListener(editor, formatName, function (state) { |
|
7694 ctrl.icon(defaultAlign); |
|
7695 if (state) { |
|
7696 ctrl.icon(formatName); |
|
7697 } |
|
7698 }); |
|
7699 }); |
|
7700 } |
|
7701 }); |
|
7702 global$4.each({ |
|
7703 alignleft: [ |
|
7704 'Align left', |
|
7705 'JustifyLeft' |
|
7706 ], |
|
7707 aligncenter: [ |
|
7708 'Align center', |
|
7709 'JustifyCenter' |
|
7710 ], |
|
7711 alignright: [ |
|
7712 'Align right', |
|
7713 'JustifyRight' |
|
7714 ], |
|
7715 alignjustify: [ |
|
7716 'Justify', |
|
7717 'JustifyFull' |
|
7718 ], |
|
7719 alignnone: [ |
|
7720 'No alignment', |
|
7721 'JustifyNone' |
|
7722 ] |
|
7723 }, function (item, name) { |
|
7724 editor.addButton(name, { |
|
7725 active: false, |
|
7726 tooltip: item[0], |
|
7727 cmd: item[1], |
|
7728 onPostRender: postRenderFormatToggle(editor, name) |
|
7729 }); |
|
7730 }); |
|
7731 }; |
|
7732 var $_7uh4c31bijjgwekcw = { register: register }; |
|
7733 |
|
7734 var getFirstFont = function (fontFamily) { |
|
7735 return fontFamily ? fontFamily.split(',')[0] : ''; |
|
7736 }; |
|
7737 var findMatchingValue = function (items, fontFamily) { |
|
7738 var font = fontFamily ? fontFamily.toLowerCase() : ''; |
|
7739 var value; |
|
7740 global$4.each(items, function (item) { |
|
7741 if (item.value.toLowerCase() === font) { |
|
7742 value = item.value; |
|
7743 } |
|
7744 }); |
|
7745 global$4.each(items, function (item) { |
|
7746 if (!value && getFirstFont(item.value).toLowerCase() === getFirstFont(font).toLowerCase()) { |
|
7747 value = item.value; |
|
7748 } |
|
7749 }); |
|
7750 return value; |
|
7751 }; |
|
7752 var createFontNameListBoxChangeHandler = function (editor, items) { |
|
7753 return function () { |
|
7754 var self = this; |
|
7755 self.state.set('value', null); |
|
7756 editor.on('init nodeChange', function (e) { |
|
7757 var fontFamily = editor.queryCommandValue('FontName'); |
|
7758 var match = findMatchingValue(items, fontFamily); |
|
7759 self.value(match ? match : null); |
|
7760 if (!match && fontFamily) { |
|
7761 self.text(getFirstFont(fontFamily)); |
|
7762 } |
|
7763 }); |
|
7764 }; |
|
7765 }; |
|
7766 var createFormats = function (formats) { |
|
7767 formats = formats.replace(/;$/, '').split(';'); |
|
7768 var i = formats.length; |
|
7769 while (i--) { |
|
7770 formats[i] = formats[i].split('='); |
|
7771 } |
|
7772 return formats; |
|
7773 }; |
|
7774 var getFontItems = function (editor) { |
|
7775 var defaultFontsFormats = 'Andale Mono=andale mono,monospace;' + 'Arial=arial,helvetica,sans-serif;' + 'Arial Black=arial black,sans-serif;' + 'Book Antiqua=book antiqua,palatino,serif;' + 'Comic Sans MS=comic sans ms,sans-serif;' + 'Courier New=courier new,courier,monospace;' + 'Georgia=georgia,palatino,serif;' + 'Helvetica=helvetica,arial,sans-serif;' + 'Impact=impact,sans-serif;' + 'Symbol=symbol;' + 'Tahoma=tahoma,arial,helvetica,sans-serif;' + 'Terminal=terminal,monaco,monospace;' + 'Times New Roman=times new roman,times,serif;' + 'Trebuchet MS=trebuchet ms,geneva,sans-serif;' + 'Verdana=verdana,geneva,sans-serif;' + 'Webdings=webdings;' + 'Wingdings=wingdings,zapf dingbats'; |
|
7776 var fonts = createFormats(editor.settings.font_formats || defaultFontsFormats); |
|
7777 return global$4.map(fonts, function (font) { |
|
7778 return { |
|
7779 text: { raw: font[0] }, |
|
7780 value: font[1], |
|
7781 textStyle: font[1].indexOf('dings') === -1 ? 'font-family:' + font[1] : '' |
|
7782 }; |
|
7783 }); |
|
7784 }; |
|
7785 var registerButtons = function (editor) { |
|
7786 editor.addButton('fontselect', function () { |
|
7787 var items = getFontItems(editor); |
|
7788 return { |
|
7789 type: 'listbox', |
|
7790 text: 'Font Family', |
|
7791 tooltip: 'Font Family', |
|
7792 values: items, |
|
7793 fixedWidth: true, |
|
7794 onPostRender: createFontNameListBoxChangeHandler(editor, items), |
|
7795 onselect: function (e) { |
|
7796 if (e.control.settings.value) { |
|
7797 editor.execCommand('FontName', false, e.control.settings.value); |
|
7798 } |
|
7799 } |
|
7800 }; |
|
7801 }); |
|
7802 }; |
|
7803 var register$1 = function (editor) { |
|
7804 registerButtons(editor); |
|
7805 }; |
|
7806 var $_2g5ce1bkjjgwekcz = { register: register$1 }; |
|
7807 |
|
7808 var round = function (number, precision) { |
|
7809 var factor = Math.pow(10, precision); |
|
7810 return Math.round(number * factor) / factor; |
|
7811 }; |
|
7812 var toPt = function (fontSize, precision) { |
|
7813 if (/[0-9.]+px$/.test(fontSize)) { |
|
7814 return round(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt'; |
|
7815 } |
|
7816 return fontSize; |
|
7817 }; |
|
7818 var findMatchingValue$1 = function (items, pt, px) { |
|
7819 var value; |
|
7820 global$4.each(items, function (item) { |
|
7821 if (item.value === px) { |
|
7822 value = px; |
|
7823 } else if (item.value === pt) { |
|
7824 value = pt; |
|
7825 } |
|
7826 }); |
|
7827 return value; |
|
7828 }; |
|
7829 var createFontSizeListBoxChangeHandler = function (editor, items) { |
|
7830 return function () { |
|
7831 var self = this; |
|
7832 editor.on('init nodeChange', function (e) { |
|
7833 var px, pt, precision, match; |
|
7834 px = editor.queryCommandValue('FontSize'); |
|
7835 if (px) { |
|
7836 for (precision = 3; !match && precision >= 0; precision--) { |
|
7837 pt = toPt(px, precision); |
|
7838 match = findMatchingValue$1(items, pt, px); |
|
7839 } |
|
7840 } |
|
7841 self.value(match ? match : null); |
|
7842 if (!match) { |
|
7843 self.text(pt); |
|
7844 } |
|
7845 }); |
|
7846 }; |
|
7847 }; |
|
7848 var getFontSizeItems = function (editor) { |
|
7849 var defaultFontsizeFormats = '8pt 10pt 12pt 14pt 18pt 24pt 36pt'; |
|
7850 var fontsizeFormats = editor.settings.fontsize_formats || defaultFontsizeFormats; |
|
7851 return global$4.map(fontsizeFormats.split(' '), function (item) { |
|
7852 var text = item, value = item; |
|
7853 var values = item.split('='); |
|
7854 if (values.length > 1) { |
|
7855 text = values[0]; |
|
7856 value = values[1]; |
|
7857 } |
|
7858 return { |
|
7859 text: text, |
|
7860 value: value |
|
7861 }; |
|
7862 }); |
|
7863 }; |
|
7864 var registerButtons$1 = function (editor) { |
|
7865 editor.addButton('fontsizeselect', function () { |
|
7866 var items = getFontSizeItems(editor); |
|
7867 return { |
|
7868 type: 'listbox', |
|
7869 text: 'Font Sizes', |
|
7870 tooltip: 'Font Sizes', |
|
7871 values: items, |
|
7872 fixedWidth: true, |
|
7873 onPostRender: createFontSizeListBoxChangeHandler(editor, items), |
|
7874 onclick: function (e) { |
|
7875 if (e.control.settings.value) { |
|
7876 editor.execCommand('FontSize', false, e.control.settings.value); |
|
7877 } |
|
7878 } |
|
7879 }; |
|
7880 }); |
|
7881 }; |
|
7882 var register$2 = function (editor) { |
|
7883 registerButtons$1(editor); |
|
7884 }; |
|
7885 var $_b15nsk1bljjgwekd9 = { register: register$2 }; |
|
7886 |
|
7887 var hideMenuObjects = function (editor, menu) { |
|
7888 var count = menu.length; |
|
7889 global$4.each(menu, function (item) { |
|
7890 if (item.menu) { |
|
7891 item.hidden = hideMenuObjects(editor, item.menu) === 0; |
|
7892 } |
|
7893 var formatName = item.format; |
|
7894 if (formatName) { |
|
7895 item.hidden = !editor.formatter.canApply(formatName); |
|
7896 } |
|
7897 if (item.hidden) { |
|
7898 count--; |
|
7899 } |
|
7900 }); |
|
7901 return count; |
|
7902 }; |
|
7903 var hideFormatMenuItems = function (editor, menu) { |
|
7904 var count = menu.items().length; |
|
7905 menu.items().each(function (item) { |
|
7906 if (item.menu) { |
|
7907 item.visible(hideFormatMenuItems(editor, item.menu) > 0); |
|
7908 } |
|
7909 if (!item.menu && item.settings.menu) { |
|
7910 item.visible(hideMenuObjects(editor, item.settings.menu) > 0); |
|
7911 } |
|
7912 var formatName = item.settings.format; |
|
7913 if (formatName) { |
|
7914 item.visible(editor.formatter.canApply(formatName)); |
|
7915 } |
|
7916 if (!item.visible()) { |
|
7917 count--; |
|
7918 } |
|
7919 }); |
|
7920 return count; |
|
7921 }; |
|
7922 var createFormatMenu = function (editor) { |
|
7923 var count = 0; |
|
7924 var newFormats = []; |
|
7925 var defaultStyleFormats = [ |
|
7926 { |
|
7927 title: 'Headings', |
|
7928 items: [ |
|
7929 { |
|
7930 title: 'Heading 1', |
|
7931 format: 'h1' |
|
7932 }, |
|
7933 { |
|
7934 title: 'Heading 2', |
|
7935 format: 'h2' |
|
7936 }, |
|
7937 { |
|
7938 title: 'Heading 3', |
|
7939 format: 'h3' |
|
7940 }, |
|
7941 { |
|
7942 title: 'Heading 4', |
|
7943 format: 'h4' |
|
7944 }, |
|
7945 { |
|
7946 title: 'Heading 5', |
|
7947 format: 'h5' |
|
7948 }, |
|
7949 { |
|
7950 title: 'Heading 6', |
|
7951 format: 'h6' |
|
7952 } |
|
7953 ] |
|
7954 }, |
|
7955 { |
|
7956 title: 'Inline', |
|
7957 items: [ |
|
7958 { |
|
7959 title: 'Bold', |
|
7960 icon: 'bold', |
|
7961 format: 'bold' |
|
7962 }, |
|
7963 { |
|
7964 title: 'Italic', |
|
7965 icon: 'italic', |
|
7966 format: 'italic' |
|
7967 }, |
|
7968 { |
|
7969 title: 'Underline', |
|
7970 icon: 'underline', |
|
7971 format: 'underline' |
|
7972 }, |
|
7973 { |
|
7974 title: 'Strikethrough', |
|
7975 icon: 'strikethrough', |
|
7976 format: 'strikethrough' |
|
7977 }, |
|
7978 { |
|
7979 title: 'Superscript', |
|
7980 icon: 'superscript', |
|
7981 format: 'superscript' |
|
7982 }, |
|
7983 { |
|
7984 title: 'Subscript', |
|
7985 icon: 'subscript', |
|
7986 format: 'subscript' |
|
7987 }, |
|
7988 { |
|
7989 title: 'Code', |
|
7990 icon: 'code', |
|
7991 format: 'code' |
|
7992 } |
|
7993 ] |
|
7994 }, |
|
7995 { |
|
7996 title: 'Blocks', |
|
7997 items: [ |
|
7998 { |
|
7999 title: 'Paragraph', |
|
8000 format: 'p' |
|
8001 }, |
|
8002 { |
|
8003 title: 'Blockquote', |
|
8004 format: 'blockquote' |
|
8005 }, |
|
8006 { |
|
8007 title: 'Div', |
|
8008 format: 'div' |
|
8009 }, |
|
8010 { |
|
8011 title: 'Pre', |
|
8012 format: 'pre' |
|
8013 } |
|
8014 ] |
|
8015 }, |
|
8016 { |
|
8017 title: 'Alignment', |
|
8018 items: [ |
|
8019 { |
|
8020 title: 'Left', |
|
8021 icon: 'alignleft', |
|
8022 format: 'alignleft' |
|
8023 }, |
|
8024 { |
|
8025 title: 'Center', |
|
8026 icon: 'aligncenter', |
|
8027 format: 'aligncenter' |
|
8028 }, |
|
8029 { |
|
8030 title: 'Right', |
|
8031 icon: 'alignright', |
|
8032 format: 'alignright' |
|
8033 }, |
|
8034 { |
|
8035 title: 'Justify', |
|
8036 icon: 'alignjustify', |
|
8037 format: 'alignjustify' |
|
8038 } |
|
8039 ] |
|
8040 } |
|
8041 ]; |
|
8042 var createMenu = function (formats) { |
|
8043 var menu = []; |
|
8044 if (!formats) { |
|
8045 return; |
|
8046 } |
|
8047 global$4.each(formats, function (format) { |
|
8048 var menuItem = { |
|
8049 text: format.title, |
|
8050 icon: format.icon |
|
8051 }; |
|
8052 if (format.items) { |
|
8053 menuItem.menu = createMenu(format.items); |
|
8054 } else { |
|
8055 var formatName = format.format || 'custom' + count++; |
|
8056 if (!format.format) { |
|
8057 format.name = formatName; |
|
8058 newFormats.push(format); |
|
8059 } |
|
8060 menuItem.format = formatName; |
|
8061 menuItem.cmd = format.cmd; |
|
8062 } |
|
8063 menu.push(menuItem); |
|
8064 }); |
|
8065 return menu; |
|
8066 }; |
|
8067 var createStylesMenu = function () { |
|
8068 var menu; |
|
8069 if (editor.settings.style_formats_merge) { |
|
8070 if (editor.settings.style_formats) { |
|
8071 menu = createMenu(defaultStyleFormats.concat(editor.settings.style_formats)); |
|
8072 } else { |
|
8073 menu = createMenu(defaultStyleFormats); |
|
8074 } |
|
8075 } else { |
|
8076 menu = createMenu(editor.settings.style_formats || defaultStyleFormats); |
|
8077 } |
|
8078 return menu; |
|
8079 }; |
|
8080 editor.on('init', function () { |
|
8081 global$4.each(newFormats, function (format) { |
|
8082 editor.formatter.register(format.name, format); |
|
8083 }); |
|
8084 }); |
|
8085 return { |
|
8086 type: 'menu', |
|
8087 items: createStylesMenu(), |
|
8088 onPostRender: function (e) { |
|
8089 editor.fire('renderFormatsMenu', { control: e.control }); |
|
8090 }, |
|
8091 itemDefaults: { |
|
8092 preview: true, |
|
8093 textStyle: function () { |
|
8094 if (this.settings.format) { |
|
8095 return editor.formatter.getCssText(this.settings.format); |
|
8096 } |
|
8097 }, |
|
8098 onPostRender: function () { |
|
8099 var self = this; |
|
8100 self.parent().on('show', function () { |
|
8101 var formatName, command; |
|
8102 formatName = self.settings.format; |
|
8103 if (formatName) { |
|
8104 self.disabled(!editor.formatter.canApply(formatName)); |
|
8105 self.active(editor.formatter.match(formatName)); |
|
8106 } |
|
8107 command = self.settings.cmd; |
|
8108 if (command) { |
|
8109 self.active(editor.queryCommandState(command)); |
|
8110 } |
|
8111 }); |
|
8112 }, |
|
8113 onclick: function () { |
|
8114 if (this.settings.format) { |
|
8115 toggleFormat(editor, this.settings.format)(); |
|
8116 } |
|
8117 if (this.settings.cmd) { |
|
8118 editor.execCommand(this.settings.cmd); |
|
8119 } |
|
8120 } |
|
8121 } |
|
8122 }; |
|
8123 }; |
|
8124 var registerMenuItems = function (editor, formatMenu) { |
|
8125 editor.addMenuItem('formats', { |
|
8126 text: 'Formats', |
|
8127 menu: formatMenu |
|
8128 }); |
|
8129 }; |
|
8130 var registerButtons$2 = function (editor, formatMenu) { |
|
8131 editor.addButton('styleselect', { |
|
8132 type: 'menubutton', |
|
8133 text: 'Formats', |
|
8134 menu: formatMenu, |
|
8135 onShowMenu: function () { |
|
8136 if (editor.settings.style_formats_autohide) { |
|
8137 hideFormatMenuItems(editor, this.menu); |
|
8138 } |
|
8139 } |
|
8140 }); |
|
8141 }; |
|
8142 var register$3 = function (editor) { |
|
8143 var formatMenu = createFormatMenu(editor); |
|
8144 registerMenuItems(editor, formatMenu); |
|
8145 registerButtons$2(editor, formatMenu); |
|
8146 }; |
|
8147 var $_9qaa1r1bmjjgwekdc = { register: register$3 }; |
|
8148 |
|
8149 var defaultBlocks = 'Paragraph=p;' + 'Heading 1=h1;' + 'Heading 2=h2;' + 'Heading 3=h3;' + 'Heading 4=h4;' + 'Heading 5=h5;' + 'Heading 6=h6;' + 'Preformatted=pre'; |
|
8150 var createFormats$1 = function (formats) { |
|
8151 formats = formats.replace(/;$/, '').split(';'); |
|
8152 var i = formats.length; |
|
8153 while (i--) { |
|
8154 formats[i] = formats[i].split('='); |
|
8155 } |
|
8156 return formats; |
|
8157 }; |
|
8158 var createListBoxChangeHandler = function (editor, items, formatName) { |
|
8159 return function () { |
|
8160 var self = this; |
|
8161 editor.on('nodeChange', function (e) { |
|
8162 var formatter = editor.formatter; |
|
8163 var value = null; |
|
8164 global$4.each(e.parents, function (node) { |
|
8165 global$4.each(items, function (item) { |
|
8166 if (formatName) { |
|
8167 if (formatter.matchNode(node, formatName, { value: item.value })) { |
|
8168 value = item.value; |
|
8169 } |
|
8170 } else { |
|
8171 if (formatter.matchNode(node, item.value)) { |
|
8172 value = item.value; |
|
8173 } |
|
8174 } |
|
8175 if (value) { |
|
8176 return false; |
|
8177 } |
|
8178 }); |
|
8179 if (value) { |
|
8180 return false; |
|
8181 } |
|
8182 }); |
|
8183 self.value(value); |
|
8184 }); |
|
8185 }; |
|
8186 }; |
|
8187 var lazyFormatSelectBoxItems = function (editor, blocks) { |
|
8188 return function () { |
|
8189 var items = []; |
|
8190 global$4.each(blocks, function (block) { |
|
8191 items.push({ |
|
8192 text: block[0], |
|
8193 value: block[1], |
|
8194 textStyle: function () { |
|
8195 return editor.formatter.getCssText(block[1]); |
|
8196 } |
|
8197 }); |
|
8198 }); |
|
8199 return { |
|
8200 type: 'listbox', |
|
8201 text: blocks[0][0], |
|
8202 values: items, |
|
8203 fixedWidth: true, |
|
8204 onselect: function (e) { |
|
8205 if (e.control) { |
|
8206 var fmt = e.control.value(); |
|
8207 toggleFormat(editor, fmt)(); |
|
8208 } |
|
8209 }, |
|
8210 onPostRender: createListBoxChangeHandler(editor, items) |
|
8211 }; |
|
8212 }; |
|
8213 }; |
|
8214 var buildMenuItems = function (editor, blocks) { |
|
8215 return global$4.map(blocks, function (block) { |
|
8216 return { |
|
8217 text: block[0], |
|
8218 onclick: toggleFormat(editor, block[1]), |
|
8219 textStyle: function () { |
|
8220 return editor.formatter.getCssText(block[1]); |
|
8221 } |
|
8222 }; |
|
8223 }); |
|
8224 }; |
|
8225 var register$4 = function (editor) { |
|
8226 var blocks = createFormats$1(editor.settings.block_formats || defaultBlocks); |
|
8227 editor.addMenuItem('blockformats', { |
|
8228 text: 'Blocks', |
|
8229 menu: buildMenuItems(editor, blocks) |
|
8230 }); |
|
8231 editor.addButton('formatselect', lazyFormatSelectBoxItems(editor, blocks)); |
|
8232 }; |
|
8233 var $_a3xw9u1bnjjgwekdh = { register: register$4 }; |
|
8234 |
|
8235 var createCustomMenuItems = function (editor, names) { |
|
8236 var items, nameList; |
|
8237 if (typeof names === 'string') { |
|
8238 nameList = names.split(' '); |
|
8239 } else if (global$4.isArray(names)) { |
|
8240 return flatten$1(global$4.map(names, function (names) { |
|
8241 return createCustomMenuItems(editor, names); |
|
8242 })); |
|
8243 } |
|
8244 items = global$4.grep(nameList, function (name) { |
|
8245 return name === '|' || name in editor.menuItems; |
|
8246 }); |
|
8247 return global$4.map(items, function (name) { |
|
8248 return name === '|' ? { text: '-' } : editor.menuItems[name]; |
|
8249 }); |
|
8250 }; |
|
8251 var isSeparator = function (menuItem) { |
|
8252 return menuItem && menuItem.text === '-'; |
|
8253 }; |
|
8254 var trimMenuItems = function (menuItems) { |
|
8255 var menuItems2 = filter(menuItems, function (menuItem, i, menuItems) { |
|
8256 return !isSeparator(menuItem) || !isSeparator(menuItems[i - 1]); |
|
8257 }); |
|
8258 return filter(menuItems2, function (menuItem, i, menuItems) { |
|
8259 return !isSeparator(menuItem) || i > 0 && i < menuItems.length - 1; |
|
8260 }); |
|
8261 }; |
|
8262 var createContextMenuItems = function (editor, context) { |
|
8263 var outputMenuItems = [{ text: '-' }]; |
|
8264 var menuItems = global$4.grep(editor.menuItems, function (menuItem) { |
|
8265 return menuItem.context === context; |
|
8266 }); |
|
8267 global$4.each(menuItems, function (menuItem) { |
|
8268 if (menuItem.separator === 'before') { |
|
8269 outputMenuItems.push({ text: '|' }); |
|
8270 } |
|
8271 if (menuItem.prependToContext) { |
|
8272 outputMenuItems.unshift(menuItem); |
|
8273 } else { |
|
8274 outputMenuItems.push(menuItem); |
|
8275 } |
|
8276 if (menuItem.separator === 'after') { |
|
8277 outputMenuItems.push({ text: '|' }); |
|
8278 } |
|
8279 }); |
|
8280 return outputMenuItems; |
|
8281 }; |
|
8282 var createInsertMenu = function (editor) { |
|
8283 var insertButtonItems = editor.settings.insert_button_items; |
|
8284 if (insertButtonItems) { |
|
8285 return trimMenuItems(createCustomMenuItems(editor, insertButtonItems)); |
|
8286 } else { |
|
8287 return trimMenuItems(createContextMenuItems(editor, 'insert')); |
|
8288 } |
|
8289 }; |
|
8290 var registerButtons$3 = function (editor) { |
|
8291 editor.addButton('insert', { |
|
8292 type: 'menubutton', |
|
8293 icon: 'insert', |
|
8294 menu: [], |
|
8295 oncreatemenu: function () { |
|
8296 this.menu.add(createInsertMenu(editor)); |
|
8297 this.menu.renderNew(); |
|
8298 } |
|
8299 }); |
|
8300 }; |
|
8301 var register$5 = function (editor) { |
|
8302 registerButtons$3(editor); |
|
8303 }; |
|
8304 var $_dvqvtt1bojjgwekdj = { register: register$5 }; |
|
8305 |
|
8306 var registerFormatButtons = function (editor) { |
|
8307 global$4.each({ |
|
8308 bold: 'Bold', |
|
8309 italic: 'Italic', |
|
8310 underline: 'Underline', |
|
8311 strikethrough: 'Strikethrough', |
|
8312 subscript: 'Subscript', |
|
8313 superscript: 'Superscript' |
|
8314 }, function (text, name) { |
|
8315 editor.addButton(name, { |
|
8316 active: false, |
|
8317 tooltip: text, |
|
8318 onPostRender: postRenderFormatToggle(editor, name), |
|
8319 onclick: toggleFormat(editor, name) |
|
8320 }); |
|
8321 }); |
|
8322 }; |
|
8323 var registerCommandButtons = function (editor) { |
|
8324 global$4.each({ |
|
8325 outdent: [ |
|
8326 'Decrease indent', |
|
8327 'Outdent' |
|
8328 ], |
|
8329 indent: [ |
|
8330 'Increase indent', |
|
8331 'Indent' |
|
8332 ], |
|
8333 cut: [ |
|
8334 'Cut', |
|
8335 'Cut' |
|
8336 ], |
|
8337 copy: [ |
|
8338 'Copy', |
|
8339 'Copy' |
|
8340 ], |
|
8341 paste: [ |
|
8342 'Paste', |
|
8343 'Paste' |
|
8344 ], |
|
8345 help: [ |
|
8346 'Help', |
|
8347 'mceHelp' |
|
8348 ], |
|
8349 selectall: [ |
|
8350 'Select all', |
|
8351 'SelectAll' |
|
8352 ], |
|
8353 visualaid: [ |
|
8354 'Visual aids', |
|
8355 'mceToggleVisualAid' |
|
8356 ], |
|
8357 newdocument: [ |
|
8358 'New document', |
|
8359 'mceNewDocument' |
|
8360 ], |
|
8361 removeformat: [ |
|
8362 'Clear formatting', |
|
8363 'RemoveFormat' |
|
8364 ], |
|
8365 remove: [ |
|
8366 'Remove', |
|
8367 'Delete' |
|
8368 ] |
|
8369 }, function (item, name) { |
|
8370 editor.addButton(name, { |
|
8371 tooltip: item[0], |
|
8372 cmd: item[1] |
|
8373 }); |
|
8374 }); |
|
8375 }; |
|
8376 var registerCommandToggleButtons = function (editor) { |
|
8377 global$4.each({ |
|
8378 blockquote: [ |
|
8379 'Blockquote', |
|
8380 'mceBlockQuote' |
|
8381 ], |
|
8382 subscript: [ |
|
8383 'Subscript', |
|
8384 'Subscript' |
|
8385 ], |
|
8386 superscript: [ |
|
8387 'Superscript', |
|
8388 'Superscript' |
|
8389 ] |
|
8390 }, function (item, name) { |
|
8391 editor.addButton(name, { |
|
8392 active: false, |
|
8393 tooltip: item[0], |
|
8394 cmd: item[1], |
|
8395 onPostRender: postRenderFormatToggle(editor, name) |
|
8396 }); |
|
8397 }); |
|
8398 }; |
|
8399 var registerButtons$4 = function (editor) { |
|
8400 registerFormatButtons(editor); |
|
8401 registerCommandButtons(editor); |
|
8402 registerCommandToggleButtons(editor); |
|
8403 }; |
|
8404 var registerMenuItems$1 = function (editor) { |
|
8405 global$4.each({ |
|
8406 bold: [ |
|
8407 'Bold', |
|
8408 'Bold', |
|
8409 'Meta+B' |
|
8410 ], |
|
8411 italic: [ |
|
8412 'Italic', |
|
8413 'Italic', |
|
8414 'Meta+I' |
|
8415 ], |
|
8416 underline: [ |
|
8417 'Underline', |
|
8418 'Underline', |
|
8419 'Meta+U' |
|
8420 ], |
|
8421 strikethrough: [ |
|
8422 'Strikethrough', |
|
8423 'Strikethrough' |
|
8424 ], |
|
8425 subscript: [ |
|
8426 'Subscript', |
|
8427 'Subscript' |
|
8428 ], |
|
8429 superscript: [ |
|
8430 'Superscript', |
|
8431 'Superscript' |
|
8432 ], |
|
8433 removeformat: [ |
|
8434 'Clear formatting', |
|
8435 'RemoveFormat' |
|
8436 ], |
|
8437 newdocument: [ |
|
8438 'New document', |
|
8439 'mceNewDocument' |
|
8440 ], |
|
8441 cut: [ |
|
8442 'Cut', |
|
8443 'Cut', |
|
8444 'Meta+X' |
|
8445 ], |
|
8446 copy: [ |
|
8447 'Copy', |
|
8448 'Copy', |
|
8449 'Meta+C' |
|
8450 ], |
|
8451 paste: [ |
|
8452 'Paste', |
|
8453 'Paste', |
|
8454 'Meta+V' |
|
8455 ], |
|
8456 selectall: [ |
|
8457 'Select all', |
|
8458 'SelectAll', |
|
8459 'Meta+A' |
|
8460 ] |
|
8461 }, function (item, name) { |
|
8462 editor.addMenuItem(name, { |
|
8463 text: item[0], |
|
8464 icon: name, |
|
8465 shortcut: item[2], |
|
8466 cmd: item[1] |
|
8467 }); |
|
8468 }); |
|
8469 editor.addMenuItem('codeformat', { |
|
8470 text: 'Code', |
|
8471 icon: 'code', |
|
8472 onclick: toggleFormat(editor, 'code') |
|
8473 }); |
|
8474 }; |
|
8475 var register$6 = function (editor) { |
|
8476 registerButtons$4(editor); |
|
8477 registerMenuItems$1(editor); |
|
8478 }; |
|
8479 var $_2ywvy11bpjjgwekdn = { register: register$6 }; |
|
8480 |
|
8481 var toggleUndoRedoState = function (editor, type) { |
|
8482 return function () { |
|
8483 var self = this; |
|
8484 var checkState = function () { |
|
8485 var typeFn = type === 'redo' ? 'hasRedo' : 'hasUndo'; |
|
8486 return editor.undoManager ? editor.undoManager[typeFn]() : false; |
|
8487 }; |
|
8488 self.disabled(!checkState()); |
|
8489 editor.on('Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', function () { |
|
8490 self.disabled(editor.readonly || !checkState()); |
|
8491 }); |
|
8492 }; |
|
8493 }; |
|
8494 var registerMenuItems$2 = function (editor) { |
|
8495 editor.addMenuItem('undo', { |
|
8496 text: 'Undo', |
|
8497 icon: 'undo', |
|
8498 shortcut: 'Meta+Z', |
|
8499 onPostRender: toggleUndoRedoState(editor, 'undo'), |
|
8500 cmd: 'undo' |
|
8501 }); |
|
8502 editor.addMenuItem('redo', { |
|
8503 text: 'Redo', |
|
8504 icon: 'redo', |
|
8505 shortcut: 'Meta+Y', |
|
8506 onPostRender: toggleUndoRedoState(editor, 'redo'), |
|
8507 cmd: 'redo' |
|
8508 }); |
|
8509 }; |
|
8510 var registerButtons$5 = function (editor) { |
|
8511 editor.addButton('undo', { |
|
8512 tooltip: 'Undo', |
|
8513 onPostRender: toggleUndoRedoState(editor, 'undo'), |
|
8514 cmd: 'undo' |
|
8515 }); |
|
8516 editor.addButton('redo', { |
|
8517 tooltip: 'Redo', |
|
8518 onPostRender: toggleUndoRedoState(editor, 'redo'), |
|
8519 cmd: 'redo' |
|
8520 }); |
|
8521 }; |
|
8522 var register$7 = function (editor) { |
|
8523 registerMenuItems$2(editor); |
|
8524 registerButtons$5(editor); |
|
8525 }; |
|
8526 var $_5qfrkx1bqjjgwekdq = { register: register$7 }; |
|
8527 |
|
8528 var toggleVisualAidState = function (editor) { |
|
8529 return function () { |
|
8530 var self = this; |
|
8531 editor.on('VisualAid', function (e) { |
|
8532 self.active(e.hasVisual); |
|
8533 }); |
|
8534 self.active(editor.hasVisual); |
|
8535 }; |
|
8536 }; |
|
8537 var registerMenuItems$3 = function (editor) { |
|
8538 editor.addMenuItem('visualaid', { |
|
8539 text: 'Visual aids', |
|
8540 selectable: true, |
|
8541 onPostRender: toggleVisualAidState(editor), |
|
8542 cmd: 'mceToggleVisualAid' |
|
8543 }); |
|
8544 }; |
|
8545 var register$8 = function (editor) { |
|
8546 registerMenuItems$3(editor); |
|
8547 }; |
|
8548 var $_ebb6rc1brjjgwekdr = { register: register$8 }; |
|
8549 |
|
8550 var setupEnvironment = function () { |
|
8551 Widget.tooltips = !global$1.iOS; |
|
8552 Control$1.translate = function (text) { |
|
8553 return global$5.translate(text); |
|
8554 }; |
|
8555 }; |
|
8556 var setupUiContainer = function (editor) { |
|
8557 if (editor.settings.ui_container) { |
|
8558 global$1.container = $_6nlstg1bfjjgwekcb.descendant(Element$$1.fromDom(document.body), editor.settings.ui_container).fold(constant(null), function (elm) { |
|
8559 return elm.dom(); |
|
8560 }); |
|
8561 } |
|
8562 }; |
|
8563 var setupRtlMode = function (editor) { |
|
8564 if (editor.rtl) { |
|
8565 Control$1.rtl = true; |
|
8566 } |
|
8567 }; |
|
8568 var setupHideFloatPanels = function (editor) { |
|
8569 editor.on('mousedown', function () { |
|
8570 FloatPanel.hideAll(); |
|
8571 }); |
|
8572 }; |
|
8573 var setup = function (editor) { |
|
8574 setupRtlMode(editor); |
|
8575 setupHideFloatPanels(editor); |
|
8576 setupUiContainer(editor); |
|
8577 setupEnvironment(); |
|
8578 $_a3xw9u1bnjjgwekdh.register(editor); |
|
8579 $_7uh4c31bijjgwekcw.register(editor); |
|
8580 $_2ywvy11bpjjgwekdn.register(editor); |
|
8581 $_5qfrkx1bqjjgwekdq.register(editor); |
|
8582 $_b15nsk1bljjgwekd9.register(editor); |
|
8583 $_2g5ce1bkjjgwekcz.register(editor); |
|
8584 $_9qaa1r1bmjjgwekdc.register(editor); |
|
8585 $_ebb6rc1brjjgwekdr.register(editor); |
|
8586 $_dvqvtt1bojjgwekdj.register(editor); |
|
8587 }; |
|
8588 var $_gg6ikw1bejjgwekc5 = { setup: setup }; |
|
8589 |
|
8590 var GridLayout = AbsoluteLayout.extend({ |
|
8591 recalc: function (container) { |
|
8592 var settings, rows, cols, items, contLayoutRect, width, height, rect, ctrlLayoutRect, ctrl, x, y, posX, posY, ctrlSettings, contPaddingBox, align, spacingH, spacingV, alignH, alignV, maxX, maxY; |
|
8593 var colWidths = []; |
|
8594 var rowHeights = []; |
|
8595 var ctrlMinWidth, ctrlMinHeight, availableWidth, availableHeight, reverseRows, idx; |
|
8596 settings = container.settings; |
|
8597 items = container.items().filter(':visible'); |
|
8598 contLayoutRect = container.layoutRect(); |
|
8599 cols = settings.columns || Math.ceil(Math.sqrt(items.length)); |
|
8600 rows = Math.ceil(items.length / cols); |
|
8601 spacingH = settings.spacingH || settings.spacing || 0; |
|
8602 spacingV = settings.spacingV || settings.spacing || 0; |
|
8603 alignH = settings.alignH || settings.align; |
|
8604 alignV = settings.alignV || settings.align; |
|
8605 contPaddingBox = container.paddingBox; |
|
8606 reverseRows = 'reverseRows' in settings ? settings.reverseRows : container.isRtl(); |
|
8607 if (alignH && typeof alignH === 'string') { |
|
8608 alignH = [alignH]; |
|
8609 } |
|
8610 if (alignV && typeof alignV === 'string') { |
|
8611 alignV = [alignV]; |
|
8612 } |
|
8613 for (x = 0; x < cols; x++) { |
|
8614 colWidths.push(0); |
|
8615 } |
|
8616 for (y = 0; y < rows; y++) { |
|
8617 rowHeights.push(0); |
|
8618 } |
|
8619 for (y = 0; y < rows; y++) { |
|
8620 for (x = 0; x < cols; x++) { |
|
8621 ctrl = items[y * cols + x]; |
|
8622 if (!ctrl) { |
|
8623 break; |
|
8624 } |
|
8625 ctrlLayoutRect = ctrl.layoutRect(); |
|
8626 ctrlMinWidth = ctrlLayoutRect.minW; |
|
8627 ctrlMinHeight = ctrlLayoutRect.minH; |
|
8628 colWidths[x] = ctrlMinWidth > colWidths[x] ? ctrlMinWidth : colWidths[x]; |
|
8629 rowHeights[y] = ctrlMinHeight > rowHeights[y] ? ctrlMinHeight : rowHeights[y]; |
|
8630 } |
|
8631 } |
|
8632 availableWidth = contLayoutRect.innerW - contPaddingBox.left - contPaddingBox.right; |
|
8633 for (maxX = 0, x = 0; x < cols; x++) { |
|
8634 maxX += colWidths[x] + (x > 0 ? spacingH : 0); |
|
8635 availableWidth -= (x > 0 ? spacingH : 0) + colWidths[x]; |
|
8636 } |
|
8637 availableHeight = contLayoutRect.innerH - contPaddingBox.top - contPaddingBox.bottom; |
|
8638 for (maxY = 0, y = 0; y < rows; y++) { |
|
8639 maxY += rowHeights[y] + (y > 0 ? spacingV : 0); |
|
8640 availableHeight -= (y > 0 ? spacingV : 0) + rowHeights[y]; |
|
8641 } |
|
8642 maxX += contPaddingBox.left + contPaddingBox.right; |
|
8643 maxY += contPaddingBox.top + contPaddingBox.bottom; |
|
8644 rect = {}; |
|
8645 rect.minW = maxX + (contLayoutRect.w - contLayoutRect.innerW); |
|
8646 rect.minH = maxY + (contLayoutRect.h - contLayoutRect.innerH); |
|
8647 rect.contentW = rect.minW - contLayoutRect.deltaW; |
|
8648 rect.contentH = rect.minH - contLayoutRect.deltaH; |
|
8649 rect.minW = Math.min(rect.minW, contLayoutRect.maxW); |
|
8650 rect.minH = Math.min(rect.minH, contLayoutRect.maxH); |
|
8651 rect.minW = Math.max(rect.minW, contLayoutRect.startMinWidth); |
|
8652 rect.minH = Math.max(rect.minH, contLayoutRect.startMinHeight); |
|
8653 if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) { |
|
8654 rect.w = rect.minW; |
|
8655 rect.h = rect.minH; |
|
8656 container.layoutRect(rect); |
|
8657 this.recalc(container); |
|
8658 if (container._lastRect === null) { |
|
8659 var parentCtrl = container.parent(); |
|
8660 if (parentCtrl) { |
|
8661 parentCtrl._lastRect = null; |
|
8662 parentCtrl.recalc(); |
|
8663 } |
|
8664 } |
|
8665 return; |
|
8666 } |
|
8667 if (contLayoutRect.autoResize) { |
|
8668 rect = container.layoutRect(rect); |
|
8669 rect.contentW = rect.minW - contLayoutRect.deltaW; |
|
8670 rect.contentH = rect.minH - contLayoutRect.deltaH; |
|
8671 } |
|
8672 var flexV; |
|
8673 if (settings.packV === 'start') { |
|
8674 flexV = 0; |
|
8675 } else { |
|
8676 flexV = availableHeight > 0 ? Math.floor(availableHeight / rows) : 0; |
|
8677 } |
|
8678 var totalFlex = 0; |
|
8679 var flexWidths = settings.flexWidths; |
|
8680 if (flexWidths) { |
|
8681 for (x = 0; x < flexWidths.length; x++) { |
|
8682 totalFlex += flexWidths[x]; |
|
8683 } |
|
8684 } else { |
|
8685 totalFlex = cols; |
|
8686 } |
|
8687 var ratio = availableWidth / totalFlex; |
|
8688 for (x = 0; x < cols; x++) { |
|
8689 colWidths[x] += flexWidths ? flexWidths[x] * ratio : ratio; |
|
8690 } |
|
8691 posY = contPaddingBox.top; |
|
8692 for (y = 0; y < rows; y++) { |
|
8693 posX = contPaddingBox.left; |
|
8694 height = rowHeights[y] + flexV; |
|
8695 for (x = 0; x < cols; x++) { |
|
8696 if (reverseRows) { |
|
8697 idx = y * cols + cols - 1 - x; |
|
8698 } else { |
|
8699 idx = y * cols + x; |
|
8700 } |
|
8701 ctrl = items[idx]; |
|
8702 if (!ctrl) { |
|
8703 break; |
|
8704 } |
|
8705 ctrlSettings = ctrl.settings; |
|
8706 ctrlLayoutRect = ctrl.layoutRect(); |
|
8707 width = Math.max(colWidths[x], ctrlLayoutRect.startMinWidth); |
|
8708 ctrlLayoutRect.x = posX; |
|
8709 ctrlLayoutRect.y = posY; |
|
8710 align = ctrlSettings.alignH || (alignH ? alignH[x] || alignH[0] : null); |
|
8711 if (align === 'center') { |
|
8712 ctrlLayoutRect.x = posX + width / 2 - ctrlLayoutRect.w / 2; |
|
8713 } else if (align === 'right') { |
|
8714 ctrlLayoutRect.x = posX + width - ctrlLayoutRect.w; |
|
8715 } else if (align === 'stretch') { |
|
8716 ctrlLayoutRect.w = width; |
|
8717 } |
|
8718 align = ctrlSettings.alignV || (alignV ? alignV[x] || alignV[0] : null); |
|
8719 if (align === 'center') { |
|
8720 ctrlLayoutRect.y = posY + height / 2 - ctrlLayoutRect.h / 2; |
|
8721 } else if (align === 'bottom') { |
|
8722 ctrlLayoutRect.y = posY + height - ctrlLayoutRect.h; |
|
8723 } else if (align === 'stretch') { |
|
8724 ctrlLayoutRect.h = height; |
|
8725 } |
|
8726 ctrl.layoutRect(ctrlLayoutRect); |
|
8727 posX += width + spacingH; |
|
8728 if (ctrl.recalc) { |
|
8729 ctrl.recalc(); |
|
8730 } |
|
8731 } |
|
8732 posY += height + spacingV; |
|
8733 } |
|
8734 } |
|
8735 }); |
|
8736 |
|
8737 var Iframe = Widget.extend({ |
|
8738 renderHtml: function () { |
|
8739 var self = this; |
|
8740 self.classes.add('iframe'); |
|
8741 self.canFocus = false; |
|
8742 return '<iframe id="' + self._id + '" class="' + self.classes + '" tabindex="-1" src="' + (self.settings.url || 'javascript:\'\'') + '" frameborder="0"></iframe>'; |
|
8743 }, |
|
8744 src: function (src) { |
|
8745 this.getEl().src = src; |
|
8746 }, |
|
8747 html: function (html, callback) { |
|
8748 var self = this, body = this.getEl().contentWindow.document.body; |
|
8749 if (!body) { |
|
8750 global$3.setTimeout(function () { |
|
8751 self.html(html); |
|
8752 }); |
|
8753 } else { |
|
8754 body.innerHTML = html; |
|
8755 if (callback) { |
|
8756 callback(); |
|
8757 } |
|
8758 } |
|
8759 return this; |
|
8760 } |
|
8761 }); |
|
8762 |
|
8763 var InfoBox = Widget.extend({ |
|
8764 init: function (settings) { |
|
8765 var self = this; |
|
8766 self._super(settings); |
|
8767 self.classes.add('widget').add('infobox'); |
|
8768 self.canFocus = false; |
|
8769 }, |
|
8770 severity: function (level) { |
|
8771 this.classes.remove('error'); |
|
8772 this.classes.remove('warning'); |
|
8773 this.classes.remove('success'); |
|
8774 this.classes.add(level); |
|
8775 }, |
|
8776 help: function (state) { |
|
8777 this.state.set('help', state); |
|
8778 }, |
|
8779 renderHtml: function () { |
|
8780 var self = this, prefix = self.classPrefix; |
|
8781 return '<div id="' + self._id + '" class="' + self.classes + '">' + '<div id="' + self._id + '-body">' + self.encode(self.state.get('text')) + '<button role="button" tabindex="-1">' + '<i class="' + prefix + 'ico ' + prefix + 'i-help"></i>' + '</button>' + '</div>' + '</div>'; |
|
8782 }, |
|
8783 bindStates: function () { |
|
8784 var self = this; |
|
8785 self.state.on('change:text', function (e) { |
|
8786 self.getEl('body').firstChild.data = self.encode(e.value); |
|
8787 if (self.state.get('rendered')) { |
|
8788 self.updateLayoutRect(); |
|
8789 } |
|
8790 }); |
|
8791 self.state.on('change:help', function (e) { |
|
8792 self.classes.toggle('has-help', e.value); |
|
8793 if (self.state.get('rendered')) { |
|
8794 self.updateLayoutRect(); |
|
8795 } |
|
8796 }); |
|
8797 return self._super(); |
|
8798 } |
|
8799 }); |
|
8800 |
|
8801 var Label = Widget.extend({ |
|
8802 init: function (settings) { |
|
8803 var self = this; |
|
8804 self._super(settings); |
|
8805 self.classes.add('widget').add('label'); |
|
8806 self.canFocus = false; |
|
8807 if (settings.multiline) { |
|
8808 self.classes.add('autoscroll'); |
|
8809 } |
|
8810 if (settings.strong) { |
|
8811 self.classes.add('strong'); |
|
8812 } |
|
8813 }, |
|
8814 initLayoutRect: function () { |
|
8815 var self = this, layoutRect = self._super(); |
|
8816 if (self.settings.multiline) { |
|
8817 var size = funcs.getSize(self.getEl()); |
|
8818 if (size.width > layoutRect.maxW) { |
|
8819 layoutRect.minW = layoutRect.maxW; |
|
8820 self.classes.add('multiline'); |
|
8821 } |
|
8822 self.getEl().style.width = layoutRect.minW + 'px'; |
|
8823 layoutRect.startMinH = layoutRect.h = layoutRect.minH = Math.min(layoutRect.maxH, funcs.getSize(self.getEl()).height); |
|
8824 } |
|
8825 return layoutRect; |
|
8826 }, |
|
8827 repaint: function () { |
|
8828 var self = this; |
|
8829 if (!self.settings.multiline) { |
|
8830 self.getEl().style.lineHeight = self.layoutRect().h + 'px'; |
|
8831 } |
|
8832 return self._super(); |
|
8833 }, |
|
8834 severity: function (level) { |
|
8835 this.classes.remove('error'); |
|
8836 this.classes.remove('warning'); |
|
8837 this.classes.remove('success'); |
|
8838 this.classes.add(level); |
|
8839 }, |
|
8840 renderHtml: function () { |
|
8841 var self = this; |
|
8842 var targetCtrl, forName, forId = self.settings.forId; |
|
8843 var text = self.settings.html ? self.settings.html : self.encode(self.state.get('text')); |
|
8844 if (!forId && (forName = self.settings.forName)) { |
|
8845 targetCtrl = self.getRoot().find('#' + forName)[0]; |
|
8846 if (targetCtrl) { |
|
8847 forId = targetCtrl._id; |
|
8848 } |
|
8849 } |
|
8850 if (forId) { |
|
8851 return '<label id="' + self._id + '" class="' + self.classes + '"' + (forId ? ' for="' + forId + '"' : '') + '>' + text + '</label>'; |
|
8852 } |
|
8853 return '<span id="' + self._id + '" class="' + self.classes + '">' + text + '</span>'; |
|
8854 }, |
|
8855 bindStates: function () { |
|
8856 var self = this; |
|
8857 self.state.on('change:text', function (e) { |
|
8858 self.innerHtml(self.encode(e.value)); |
|
8859 if (self.state.get('rendered')) { |
|
8860 self.updateLayoutRect(); |
|
8861 } |
|
8862 }); |
|
8863 return self._super(); |
|
8864 } |
|
8865 }); |
|
8866 |
|
8867 var Toolbar$1 = Container.extend({ |
|
8868 Defaults: { |
|
8869 role: 'toolbar', |
|
8870 layout: 'flow' |
|
8871 }, |
|
8872 init: function (settings) { |
|
8873 var self = this; |
|
8874 self._super(settings); |
|
8875 self.classes.add('toolbar'); |
|
8876 }, |
|
8877 postRender: function () { |
|
8878 var self = this; |
|
8879 self.items().each(function (ctrl) { |
|
8880 ctrl.classes.add('toolbar-item'); |
|
8881 }); |
|
8882 return self._super(); |
|
8883 } |
|
8884 }); |
|
8885 |
|
8886 var MenuBar = Toolbar$1.extend({ |
|
8887 Defaults: { |
|
8888 role: 'menubar', |
|
8889 containerCls: 'menubar', |
|
8890 ariaRoot: true, |
|
8891 defaults: { type: 'menubutton' } |
|
8892 } |
|
8893 }); |
|
8894 |
|
8895 function isChildOf$1(node, parent$$1) { |
|
8896 while (node) { |
|
8897 if (parent$$1 === node) { |
|
8898 return true; |
|
8899 } |
|
8900 node = node.parentNode; |
|
8901 } |
|
8902 return false; |
|
8903 } |
|
8904 var MenuButton = Button.extend({ |
|
8905 init: function (settings) { |
|
8906 var self$$1 = this; |
|
8907 self$$1._renderOpen = true; |
|
8908 self$$1._super(settings); |
|
8909 settings = self$$1.settings; |
|
8910 self$$1.classes.add('menubtn'); |
|
8911 if (settings.fixedWidth) { |
|
8912 self$$1.classes.add('fixed-width'); |
|
8913 } |
|
8914 self$$1.aria('haspopup', true); |
|
8915 self$$1.state.set('menu', settings.menu || self$$1.render()); |
|
8916 }, |
|
8917 showMenu: function (toggle) { |
|
8918 var self$$1 = this; |
|
8919 var menu; |
|
8920 if (self$$1.menu && self$$1.menu.visible() && toggle !== false) { |
|
8921 return self$$1.hideMenu(); |
|
8922 } |
|
8923 if (!self$$1.menu) { |
|
8924 menu = self$$1.state.get('menu') || []; |
|
8925 self$$1.classes.add('opened'); |
|
8926 if (menu.length) { |
|
8927 menu = { |
|
8928 type: 'menu', |
|
8929 animate: true, |
|
8930 items: menu |
|
8931 }; |
|
8932 } else { |
|
8933 menu.type = menu.type || 'menu'; |
|
8934 menu.animate = true; |
|
8935 } |
|
8936 if (!menu.renderTo) { |
|
8937 self$$1.menu = global$11.create(menu).parent(self$$1).renderTo(); |
|
8938 } else { |
|
8939 self$$1.menu = menu.parent(self$$1).show().renderTo(); |
|
8940 } |
|
8941 self$$1.fire('createmenu'); |
|
8942 self$$1.menu.reflow(); |
|
8943 self$$1.menu.on('cancel', function (e) { |
|
8944 if (e.control.parent() === self$$1.menu) { |
|
8945 e.stopPropagation(); |
|
8946 self$$1.focus(); |
|
8947 self$$1.hideMenu(); |
|
8948 } |
|
8949 }); |
|
8950 self$$1.menu.on('select', function () { |
|
8951 self$$1.focus(); |
|
8952 }); |
|
8953 self$$1.menu.on('show hide', function (e) { |
|
8954 if (e.control === self$$1.menu) { |
|
8955 self$$1.activeMenu(e.type === 'show'); |
|
8956 self$$1.classes.toggle('opened', e.type === 'show'); |
|
8957 } |
|
8958 self$$1.aria('expanded', e.type === 'show'); |
|
8959 }).fire('show'); |
|
8960 } |
|
8961 self$$1.menu.show(); |
|
8962 self$$1.menu.layoutRect({ w: self$$1.layoutRect().w }); |
|
8963 self$$1.menu.repaint(); |
|
8964 self$$1.menu.moveRel(self$$1.getEl(), self$$1.isRtl() ? [ |
|
8965 'br-tr', |
|
8966 'tr-br' |
|
8967 ] : [ |
|
8968 'bl-tl', |
|
8969 'tl-bl' |
|
8970 ]); |
|
8971 self$$1.fire('showmenu'); |
|
8972 }, |
|
8973 hideMenu: function () { |
|
8974 var self$$1 = this; |
|
8975 if (self$$1.menu) { |
|
8976 self$$1.menu.items().each(function (item) { |
|
8977 if (item.hideMenu) { |
|
8978 item.hideMenu(); |
|
8979 } |
|
8980 }); |
|
8981 self$$1.menu.hide(); |
|
8982 } |
|
8983 }, |
|
8984 activeMenu: function (state) { |
|
8985 this.classes.toggle('active', state); |
|
8986 }, |
|
8987 renderHtml: function () { |
|
8988 var self$$1 = this, id = self$$1._id, prefix = self$$1.classPrefix; |
|
8989 var icon = self$$1.settings.icon, image; |
|
8990 var text = self$$1.state.get('text'); |
|
8991 var textHtml = ''; |
|
8992 image = self$$1.settings.image; |
|
8993 if (image) { |
|
8994 icon = 'none'; |
|
8995 if (typeof image !== 'string') { |
|
8996 image = window.getSelection ? image[0] : image[1]; |
|
8997 } |
|
8998 image = ' style="background-image: url(\'' + image + '\')"'; |
|
8999 } else { |
|
9000 image = ''; |
|
9001 } |
|
9002 if (text) { |
|
9003 self$$1.classes.add('btn-has-text'); |
|
9004 textHtml = '<span class="' + prefix + 'txt">' + self$$1.encode(text) + '</span>'; |
|
9005 } |
|
9006 icon = self$$1.settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : ''; |
|
9007 self$$1.aria('role', self$$1.parent() instanceof MenuBar ? 'menuitem' : 'button'); |
|
9008 return '<div id="' + id + '" class="' + self$$1.classes + '" tabindex="-1" aria-labelledby="' + id + '">' + '<button id="' + id + '-open" role="presentation" type="button" tabindex="-1">' + (icon ? '<i class="' + icon + '"' + image + '></i>' : '') + textHtml + ' <i class="' + prefix + 'caret"></i>' + '</button>' + '</div>'; |
|
9009 }, |
|
9010 postRender: function () { |
|
9011 var self$$1 = this; |
|
9012 self$$1.on('click', function (e) { |
|
9013 if (e.control === self$$1 && isChildOf$1(e.target, self$$1.getEl())) { |
|
9014 self$$1.focus(); |
|
9015 self$$1.showMenu(!e.aria); |
|
9016 if (e.aria) { |
|
9017 self$$1.menu.items().filter(':visible')[0].focus(); |
|
9018 } |
|
9019 } |
|
9020 }); |
|
9021 self$$1.on('mouseenter', function (e) { |
|
9022 var overCtrl = e.control; |
|
9023 var parent$$1 = self$$1.parent(); |
|
9024 var hasVisibleSiblingMenu; |
|
9025 if (overCtrl && parent$$1 && overCtrl instanceof MenuButton && overCtrl.parent() === parent$$1) { |
|
9026 parent$$1.items().filter('MenuButton').each(function (ctrl) { |
|
9027 if (ctrl.hideMenu && ctrl !== overCtrl) { |
|
9028 if (ctrl.menu && ctrl.menu.visible()) { |
|
9029 hasVisibleSiblingMenu = true; |
|
9030 } |
|
9031 ctrl.hideMenu(); |
|
9032 } |
|
9033 }); |
|
9034 if (hasVisibleSiblingMenu) { |
|
9035 overCtrl.focus(); |
|
9036 overCtrl.showMenu(); |
|
9037 } |
|
9038 } |
|
9039 }); |
|
9040 return self$$1._super(); |
|
9041 }, |
|
9042 bindStates: function () { |
|
9043 var self$$1 = this; |
|
9044 self$$1.state.on('change:menu', function () { |
|
9045 if (self$$1.menu) { |
|
9046 self$$1.menu.remove(); |
|
9047 } |
|
9048 self$$1.menu = null; |
|
9049 }); |
|
9050 return self$$1._super(); |
|
9051 }, |
|
9052 remove: function () { |
|
9053 this._super(); |
|
9054 if (this.menu) { |
|
9055 this.menu.remove(); |
|
9056 } |
|
9057 } |
|
9058 }); |
|
9059 |
|
9060 function Throbber (elm, inline) { |
|
9061 var self = this; |
|
9062 var state; |
|
9063 var classPrefix = Control$1.classPrefix; |
|
9064 var timer; |
|
9065 self.show = function (time, callback) { |
|
9066 function render() { |
|
9067 if (state) { |
|
9068 global$7(elm).append('<div class="' + classPrefix + 'throbber' + (inline ? ' ' + classPrefix + 'throbber-inline' : '') + '"></div>'); |
|
9069 if (callback) { |
|
9070 callback(); |
|
9071 } |
|
9072 } |
|
9073 } |
|
9074 self.hide(); |
|
9075 state = true; |
|
9076 if (time) { |
|
9077 timer = global$3.setTimeout(render, time); |
|
9078 } else { |
|
9079 render(); |
|
9080 } |
|
9081 return self; |
|
9082 }; |
|
9083 self.hide = function () { |
|
9084 var child = elm.lastChild; |
|
9085 global$3.clearTimeout(timer); |
|
9086 if (child && child.className.indexOf('throbber') !== -1) { |
|
9087 child.parentNode.removeChild(child); |
|
9088 } |
|
9089 state = false; |
|
9090 return self; |
|
9091 }; |
|
9092 } |
|
9093 |
|
9094 var Menu = FloatPanel.extend({ |
|
9095 Defaults: { |
|
9096 defaultType: 'menuitem', |
|
9097 border: 1, |
|
9098 layout: 'stack', |
|
9099 role: 'application', |
|
9100 bodyRole: 'menu', |
|
9101 ariaRoot: true |
|
9102 }, |
|
9103 init: function (settings) { |
|
9104 var self = this; |
|
9105 settings.autohide = true; |
|
9106 settings.constrainToViewport = true; |
|
9107 if (typeof settings.items === 'function') { |
|
9108 settings.itemsFactory = settings.items; |
|
9109 settings.items = []; |
|
9110 } |
|
9111 if (settings.itemDefaults) { |
|
9112 var items = settings.items; |
|
9113 var i = items.length; |
|
9114 while (i--) { |
|
9115 items[i] = global$4.extend({}, settings.itemDefaults, items[i]); |
|
9116 } |
|
9117 } |
|
9118 self._super(settings); |
|
9119 self.classes.add('menu'); |
|
9120 if (settings.animate && global$1.ie !== 11) { |
|
9121 self.classes.add('animate'); |
|
9122 } |
|
9123 }, |
|
9124 repaint: function () { |
|
9125 this.classes.toggle('menu-align', true); |
|
9126 this._super(); |
|
9127 this.getEl().style.height = ''; |
|
9128 this.getEl('body').style.height = ''; |
|
9129 return this; |
|
9130 }, |
|
9131 cancel: function () { |
|
9132 var self = this; |
|
9133 self.hideAll(); |
|
9134 self.fire('select'); |
|
9135 }, |
|
9136 load: function () { |
|
9137 var self = this; |
|
9138 var time, factory; |
|
9139 function hideThrobber() { |
|
9140 if (self.throbber) { |
|
9141 self.throbber.hide(); |
|
9142 self.throbber = null; |
|
9143 } |
|
9144 } |
|
9145 factory = self.settings.itemsFactory; |
|
9146 if (!factory) { |
|
9147 return; |
|
9148 } |
|
9149 if (!self.throbber) { |
|
9150 self.throbber = new Throbber(self.getEl('body'), true); |
|
9151 if (self.items().length === 0) { |
|
9152 self.throbber.show(); |
|
9153 self.fire('loading'); |
|
9154 } else { |
|
9155 self.throbber.show(100, function () { |
|
9156 self.items().remove(); |
|
9157 self.fire('loading'); |
|
9158 }); |
|
9159 } |
|
9160 self.on('hide close', hideThrobber); |
|
9161 } |
|
9162 self.requestTime = time = new Date().getTime(); |
|
9163 self.settings.itemsFactory(function (items) { |
|
9164 if (items.length === 0) { |
|
9165 self.hide(); |
|
9166 return; |
|
9167 } |
|
9168 if (self.requestTime !== time) { |
|
9169 return; |
|
9170 } |
|
9171 self.getEl().style.width = ''; |
|
9172 self.getEl('body').style.width = ''; |
|
9173 hideThrobber(); |
|
9174 self.items().remove(); |
|
9175 self.getEl('body').innerHTML = ''; |
|
9176 self.add(items); |
|
9177 self.renderNew(); |
|
9178 self.fire('loaded'); |
|
9179 }); |
|
9180 }, |
|
9181 hideAll: function () { |
|
9182 var self = this; |
|
9183 this.find('menuitem').exec('hideMenu'); |
|
9184 return self._super(); |
|
9185 }, |
|
9186 preRender: function () { |
|
9187 var self = this; |
|
9188 self.items().each(function (ctrl) { |
|
9189 var settings = ctrl.settings; |
|
9190 if (settings.icon || settings.image || settings.selectable) { |
|
9191 self._hasIcons = true; |
|
9192 return false; |
|
9193 } |
|
9194 }); |
|
9195 if (self.settings.itemsFactory) { |
|
9196 self.on('postrender', function () { |
|
9197 if (self.settings.itemsFactory) { |
|
9198 self.load(); |
|
9199 } |
|
9200 }); |
|
9201 } |
|
9202 self.on('show hide', function (e) { |
|
9203 if (e.control === self) { |
|
9204 if (e.type === 'show') { |
|
9205 global$3.setTimeout(function () { |
|
9206 self.classes.add('in'); |
|
9207 }, 0); |
|
9208 } else { |
|
9209 self.classes.remove('in'); |
|
9210 } |
|
9211 } |
|
9212 }); |
|
9213 return self._super(); |
|
9214 } |
|
9215 }); |
|
9216 |
|
9217 var ListBox = MenuButton.extend({ |
|
9218 init: function (settings) { |
|
9219 var self = this; |
|
9220 var values, selected, selectedText, lastItemCtrl; |
|
9221 function setSelected(menuValues) { |
|
9222 for (var i = 0; i < menuValues.length; i++) { |
|
9223 selected = menuValues[i].selected || settings.value === menuValues[i].value; |
|
9224 if (selected) { |
|
9225 selectedText = selectedText || menuValues[i].text; |
|
9226 self.state.set('value', menuValues[i].value); |
|
9227 return true; |
|
9228 } |
|
9229 if (menuValues[i].menu) { |
|
9230 if (setSelected(menuValues[i].menu)) { |
|
9231 return true; |
|
9232 } |
|
9233 } |
|
9234 } |
|
9235 } |
|
9236 self._super(settings); |
|
9237 settings = self.settings; |
|
9238 self._values = values = settings.values; |
|
9239 if (values) { |
|
9240 if (typeof settings.value !== 'undefined') { |
|
9241 setSelected(values); |
|
9242 } |
|
9243 if (!selected && values.length > 0) { |
|
9244 selectedText = values[0].text; |
|
9245 self.state.set('value', values[0].value); |
|
9246 } |
|
9247 self.state.set('menu', values); |
|
9248 } |
|
9249 self.state.set('text', settings.text || selectedText); |
|
9250 self.classes.add('listbox'); |
|
9251 self.on('select', function (e) { |
|
9252 var ctrl = e.control; |
|
9253 if (lastItemCtrl) { |
|
9254 e.lastControl = lastItemCtrl; |
|
9255 } |
|
9256 if (settings.multiple) { |
|
9257 ctrl.active(!ctrl.active()); |
|
9258 } else { |
|
9259 self.value(e.control.value()); |
|
9260 } |
|
9261 lastItemCtrl = ctrl; |
|
9262 }); |
|
9263 }, |
|
9264 value: function (value) { |
|
9265 if (arguments.length === 0) { |
|
9266 return this.state.get('value'); |
|
9267 } |
|
9268 if (typeof value === 'undefined') { |
|
9269 return this; |
|
9270 } |
|
9271 if (this.settings.values) { |
|
9272 var matchingValues = global$4.grep(this.settings.values, function (a) { |
|
9273 return a.value === value; |
|
9274 }); |
|
9275 if (matchingValues.length > 0) { |
|
9276 this.state.set('value', value); |
|
9277 } else if (value === null) { |
|
9278 this.state.set('value', null); |
|
9279 } |
|
9280 } else { |
|
9281 this.state.set('value', value); |
|
9282 } |
|
9283 return this; |
|
9284 }, |
|
9285 bindStates: function () { |
|
9286 var self = this; |
|
9287 function activateMenuItemsByValue(menu, value) { |
|
9288 if (menu instanceof Menu) { |
|
9289 menu.items().each(function (ctrl) { |
|
9290 if (!ctrl.hasMenus()) { |
|
9291 ctrl.active(ctrl.value() === value); |
|
9292 } |
|
9293 }); |
|
9294 } |
|
9295 } |
|
9296 function getSelectedItem(menuValues, value) { |
|
9297 var selectedItem; |
|
9298 if (!menuValues) { |
|
9299 return; |
|
9300 } |
|
9301 for (var i = 0; i < menuValues.length; i++) { |
|
9302 if (menuValues[i].value === value) { |
|
9303 return menuValues[i]; |
|
9304 } |
|
9305 if (menuValues[i].menu) { |
|
9306 selectedItem = getSelectedItem(menuValues[i].menu, value); |
|
9307 if (selectedItem) { |
|
9308 return selectedItem; |
|
9309 } |
|
9310 } |
|
9311 } |
|
9312 } |
|
9313 self.on('show', function (e) { |
|
9314 activateMenuItemsByValue(e.control, self.value()); |
|
9315 }); |
|
9316 self.state.on('change:value', function (e) { |
|
9317 var selectedItem = getSelectedItem(self.state.get('menu'), e.value); |
|
9318 if (selectedItem) { |
|
9319 self.text(selectedItem.text); |
|
9320 } else { |
|
9321 self.text(self.settings.text); |
|
9322 } |
|
9323 }); |
|
9324 return self._super(); |
|
9325 } |
|
9326 }); |
|
9327 |
|
9328 var toggleTextStyle = function (ctrl, state) { |
|
9329 var textStyle = ctrl._textStyle; |
|
9330 if (textStyle) { |
|
9331 var textElm = ctrl.getEl('text'); |
|
9332 textElm.setAttribute('style', textStyle); |
|
9333 if (state) { |
|
9334 textElm.style.color = ''; |
|
9335 textElm.style.backgroundColor = ''; |
|
9336 } |
|
9337 } |
|
9338 }; |
|
9339 var MenuItem = Widget.extend({ |
|
9340 Defaults: { |
|
9341 border: 0, |
|
9342 role: 'menuitem' |
|
9343 }, |
|
9344 init: function (settings) { |
|
9345 var self = this; |
|
9346 var text; |
|
9347 self._super(settings); |
|
9348 settings = self.settings; |
|
9349 self.classes.add('menu-item'); |
|
9350 if (settings.menu) { |
|
9351 self.classes.add('menu-item-expand'); |
|
9352 } |
|
9353 if (settings.preview) { |
|
9354 self.classes.add('menu-item-preview'); |
|
9355 } |
|
9356 text = self.state.get('text'); |
|
9357 if (text === '-' || text === '|') { |
|
9358 self.classes.add('menu-item-sep'); |
|
9359 self.aria('role', 'separator'); |
|
9360 self.state.set('text', '-'); |
|
9361 } |
|
9362 if (settings.selectable) { |
|
9363 self.aria('role', 'menuitemcheckbox'); |
|
9364 self.classes.add('menu-item-checkbox'); |
|
9365 settings.icon = 'selected'; |
|
9366 } |
|
9367 if (!settings.preview && !settings.selectable) { |
|
9368 self.classes.add('menu-item-normal'); |
|
9369 } |
|
9370 self.on('mousedown', function (e) { |
|
9371 e.preventDefault(); |
|
9372 }); |
|
9373 if (settings.menu && !settings.ariaHideMenu) { |
|
9374 self.aria('haspopup', true); |
|
9375 } |
|
9376 }, |
|
9377 hasMenus: function () { |
|
9378 return !!this.settings.menu; |
|
9379 }, |
|
9380 showMenu: function () { |
|
9381 var self = this; |
|
9382 var settings = self.settings; |
|
9383 var menu; |
|
9384 var parent = self.parent(); |
|
9385 parent.items().each(function (ctrl) { |
|
9386 if (ctrl !== self) { |
|
9387 ctrl.hideMenu(); |
|
9388 } |
|
9389 }); |
|
9390 if (settings.menu) { |
|
9391 menu = self.menu; |
|
9392 if (!menu) { |
|
9393 menu = settings.menu; |
|
9394 if (menu.length) { |
5370 if (menu.length) { |
9395 menu = { |
5371 menu = { |
9396 type: 'menu', |
5372 type: 'menu', |
9397 items: menu |
5373 items: menu |
9398 }; |
5374 }; |
9399 } else { |
5375 } else { |
9400 menu.type = menu.type || 'menu'; |
5376 menu.type = menu.type || 'menu'; |
9401 } |
5377 } |
9402 if (parent.settings.itemDefaults) { |
5378 self.menu = global$b.create(menu).parent(self).renderTo(self.getContainerElm()); |
9403 menu.itemDefaults = parent.settings.itemDefaults; |
5379 self.fire('createmenu'); |
9404 } |
5380 self.menu.reflow(); |
9405 menu = self.menu = global$11.create(menu).parent(self).renderTo(); |
5381 self.menu.on('cancel', function (e) { |
9406 menu.reflow(); |
5382 if (e.control === self.menu) { |
9407 menu.on('cancel', function (e) { |
5383 self.focus(); |
|
5384 } |
|
5385 }); |
|
5386 self.menu.on('show hide', function (e) { |
|
5387 e.control.items().each(function (ctrl) { |
|
5388 ctrl.active(ctrl.value() === self.value()); |
|
5389 }); |
|
5390 }).fire('show'); |
|
5391 self.menu.on('select', function (e) { |
|
5392 self.value(e.control.value()); |
|
5393 }); |
|
5394 self.on('focusin', function (e) { |
|
5395 if (e.target.tagName.toUpperCase() === 'INPUT') { |
|
5396 self.menu.hide(); |
|
5397 } |
|
5398 }); |
|
5399 self.aria('expanded', true); |
|
5400 } |
|
5401 self.menu.show(); |
|
5402 self.menu.layoutRect({ w: self.layoutRect().w }); |
|
5403 self.menu.moveRel(self.getEl(), self.isRtl() ? [ |
|
5404 'br-tr', |
|
5405 'tr-br' |
|
5406 ] : [ |
|
5407 'bl-tl', |
|
5408 'tl-bl' |
|
5409 ]); |
|
5410 }, |
|
5411 focus: function () { |
|
5412 this.getEl('inp').focus(); |
|
5413 }, |
|
5414 repaint: function () { |
|
5415 var self = this, elm = self.getEl(), openElm = self.getEl('open'), rect = self.layoutRect(); |
|
5416 var width, lineHeight, innerPadding = 0; |
|
5417 var inputElm = elm.firstChild; |
|
5418 if (self.statusLevel() && self.statusLevel() !== 'none') { |
|
5419 innerPadding = parseInt(funcs.getRuntimeStyle(inputElm, 'padding-right'), 10) - parseInt(funcs.getRuntimeStyle(inputElm, 'padding-left'), 10); |
|
5420 } |
|
5421 if (openElm) { |
|
5422 width = rect.w - funcs.getSize(openElm).width - 10; |
|
5423 } else { |
|
5424 width = rect.w - 10; |
|
5425 } |
|
5426 var doc = domGlobals.document; |
|
5427 if (doc.all && (!doc.documentMode || doc.documentMode <= 8)) { |
|
5428 lineHeight = self.layoutRect().h - 2 + 'px'; |
|
5429 } |
|
5430 global$7(inputElm).css({ |
|
5431 width: width - innerPadding, |
|
5432 lineHeight: lineHeight |
|
5433 }); |
|
5434 self._super(); |
|
5435 return self; |
|
5436 }, |
|
5437 postRender: function () { |
|
5438 var self = this; |
|
5439 global$7(this.getEl('inp')).on('change', function (e) { |
|
5440 self.state.set('value', e.target.value); |
|
5441 self.fire('change', e); |
|
5442 }); |
|
5443 return self._super(); |
|
5444 }, |
|
5445 renderHtml: function () { |
|
5446 var self = this, id = self._id, settings = self.settings, prefix = self.classPrefix; |
|
5447 var value = self.state.get('value') || ''; |
|
5448 var icon, text, openBtnHtml = '', extraAttrs = '', statusHtml = ''; |
|
5449 if ('spellcheck' in settings) { |
|
5450 extraAttrs += ' spellcheck="' + settings.spellcheck + '"'; |
|
5451 } |
|
5452 if (settings.maxLength) { |
|
5453 extraAttrs += ' maxlength="' + settings.maxLength + '"'; |
|
5454 } |
|
5455 if (settings.size) { |
|
5456 extraAttrs += ' size="' + settings.size + '"'; |
|
5457 } |
|
5458 if (settings.subtype) { |
|
5459 extraAttrs += ' type="' + settings.subtype + '"'; |
|
5460 } |
|
5461 statusHtml = '<i id="' + id + '-status" class="mce-status mce-ico" style="display: none"></i>'; |
|
5462 if (self.disabled()) { |
|
5463 extraAttrs += ' disabled="disabled"'; |
|
5464 } |
|
5465 icon = settings.icon; |
|
5466 if (icon && icon !== 'caret') { |
|
5467 icon = prefix + 'ico ' + prefix + 'i-' + settings.icon; |
|
5468 } |
|
5469 text = self.state.get('text'); |
|
5470 if (icon || text) { |
|
5471 openBtnHtml = '<div id="' + id + '-open" class="' + prefix + 'btn ' + prefix + 'open" tabIndex="-1" role="button">' + '<button id="' + id + '-action" type="button" hidefocus="1" tabindex="-1">' + (icon !== 'caret' ? '<i class="' + icon + '"></i>' : '<i class="' + prefix + 'caret"></i>') + (text ? (icon ? ' ' : '') + text : '') + '</button>' + '</div>'; |
|
5472 self.classes.add('has-open'); |
|
5473 } |
|
5474 return '<div id="' + id + '" class="' + self.classes + '">' + '<input id="' + id + '-inp" class="' + prefix + 'textbox" value="' + self.encode(value, false) + '" hidefocus="1"' + extraAttrs + ' placeholder="' + self.encode(settings.placeholder) + '" />' + statusHtml + openBtnHtml + '</div>'; |
|
5475 }, |
|
5476 value: function (value) { |
|
5477 if (arguments.length) { |
|
5478 this.state.set('value', value); |
|
5479 return this; |
|
5480 } |
|
5481 if (this.state.get('rendered')) { |
|
5482 this.state.set('value', this.getEl('inp').value); |
|
5483 } |
|
5484 return this.state.get('value'); |
|
5485 }, |
|
5486 showAutoComplete: function (items, term) { |
|
5487 var self = this; |
|
5488 if (items.length === 0) { |
|
5489 self.hideMenu(); |
|
5490 return; |
|
5491 } |
|
5492 var insert = function (value, title) { |
|
5493 return function () { |
|
5494 self.fire('selectitem', { |
|
5495 title: title, |
|
5496 value: value |
|
5497 }); |
|
5498 }; |
|
5499 }; |
|
5500 if (self.menu) { |
|
5501 self.menu.items().remove(); |
|
5502 } else { |
|
5503 self.menu = global$b.create({ |
|
5504 type: 'menu', |
|
5505 classes: 'combobox-menu', |
|
5506 layout: 'flow' |
|
5507 }).parent(self).renderTo(); |
|
5508 } |
|
5509 global$4.each(items, function (item) { |
|
5510 self.menu.add({ |
|
5511 text: item.title, |
|
5512 url: item.previewUrl, |
|
5513 match: term, |
|
5514 classes: 'menu-item-ellipsis', |
|
5515 onclick: insert(item.value, item.title) |
|
5516 }); |
|
5517 }); |
|
5518 self.menu.renderNew(); |
|
5519 self.hideMenu(); |
|
5520 self.menu.on('cancel', function (e) { |
|
5521 if (e.control.parent() === self.menu) { |
9408 e.stopPropagation(); |
5522 e.stopPropagation(); |
9409 self.focus(); |
5523 self.focus(); |
9410 menu.hide(); |
5524 self.hideMenu(); |
|
5525 } |
|
5526 }); |
|
5527 self.menu.on('select', function () { |
|
5528 self.focus(); |
|
5529 }); |
|
5530 var maxW = self.layoutRect().w; |
|
5531 self.menu.layoutRect({ |
|
5532 w: maxW, |
|
5533 minW: 0, |
|
5534 maxW: maxW |
|
5535 }); |
|
5536 self.menu.repaint(); |
|
5537 self.menu.reflow(); |
|
5538 self.menu.show(); |
|
5539 self.menu.moveRel(self.getEl(), self.isRtl() ? [ |
|
5540 'br-tr', |
|
5541 'tr-br' |
|
5542 ] : [ |
|
5543 'bl-tl', |
|
5544 'tl-bl' |
|
5545 ]); |
|
5546 }, |
|
5547 hideMenu: function () { |
|
5548 if (this.menu) { |
|
5549 this.menu.hide(); |
|
5550 } |
|
5551 }, |
|
5552 bindStates: function () { |
|
5553 var self = this; |
|
5554 self.state.on('change:value', function (e) { |
|
5555 if (self.getEl('inp').value !== e.value) { |
|
5556 self.getEl('inp').value = e.value; |
|
5557 } |
|
5558 }); |
|
5559 self.state.on('change:disabled', function (e) { |
|
5560 self.getEl('inp').disabled = e.value; |
|
5561 }); |
|
5562 self.state.on('change:statusLevel', function (e) { |
|
5563 var statusIconElm = self.getEl('status'); |
|
5564 var prefix = self.classPrefix, value = e.value; |
|
5565 funcs.css(statusIconElm, 'display', value === 'none' ? 'none' : ''); |
|
5566 funcs.toggleClass(statusIconElm, prefix + 'i-checkmark', value === 'ok'); |
|
5567 funcs.toggleClass(statusIconElm, prefix + 'i-warning', value === 'warn'); |
|
5568 funcs.toggleClass(statusIconElm, prefix + 'i-error', value === 'error'); |
|
5569 self.classes.toggle('has-status', value !== 'none'); |
|
5570 self.repaint(); |
|
5571 }); |
|
5572 funcs.on(self.getEl('status'), 'mouseleave', function () { |
|
5573 self.tooltip().hide(); |
|
5574 }); |
|
5575 self.on('cancel', function (e) { |
|
5576 if (self.menu && self.menu.visible()) { |
|
5577 e.stopPropagation(); |
|
5578 self.hideMenu(); |
|
5579 } |
|
5580 }); |
|
5581 var focusIdx = function (idx, menu) { |
|
5582 if (menu && menu.items().length > 0) { |
|
5583 menu.items().eq(idx)[0].focus(); |
|
5584 } |
|
5585 }; |
|
5586 self.on('keydown', function (e) { |
|
5587 var keyCode = e.keyCode; |
|
5588 if (e.target.nodeName === 'INPUT') { |
|
5589 if (keyCode === global$f.DOWN) { |
|
5590 e.preventDefault(); |
|
5591 self.fire('autocomplete'); |
|
5592 focusIdx(0, self.menu); |
|
5593 } else if (keyCode === global$f.UP) { |
|
5594 e.preventDefault(); |
|
5595 focusIdx(-1, self.menu); |
|
5596 } |
|
5597 } |
|
5598 }); |
|
5599 return self._super(); |
|
5600 }, |
|
5601 remove: function () { |
|
5602 global$7(this.getEl('inp')).off(); |
|
5603 if (this.menu) { |
|
5604 this.menu.remove(); |
|
5605 } |
|
5606 this._super(); |
|
5607 } |
|
5608 }); |
|
5609 |
|
5610 var ColorBox = ComboBox.extend({ |
|
5611 init: function (settings) { |
|
5612 var self = this; |
|
5613 settings.spellcheck = false; |
|
5614 if (settings.onaction) { |
|
5615 settings.icon = 'none'; |
|
5616 } |
|
5617 self._super(settings); |
|
5618 self.classes.add('colorbox'); |
|
5619 self.on('change keyup postrender', function () { |
|
5620 self.repaintColor(self.value()); |
|
5621 }); |
|
5622 }, |
|
5623 repaintColor: function (value) { |
|
5624 var openElm = this.getEl('open'); |
|
5625 var elm = openElm ? openElm.getElementsByTagName('i')[0] : null; |
|
5626 if (elm) { |
|
5627 try { |
|
5628 elm.style.background = value; |
|
5629 } catch (ex) { |
|
5630 } |
|
5631 } |
|
5632 }, |
|
5633 bindStates: function () { |
|
5634 var self = this; |
|
5635 self.state.on('change:value', function (e) { |
|
5636 if (self.state.get('rendered')) { |
|
5637 self.repaintColor(e.value); |
|
5638 } |
|
5639 }); |
|
5640 return self._super(); |
|
5641 } |
|
5642 }); |
|
5643 |
|
5644 var PanelButton = Button.extend({ |
|
5645 showPanel: function () { |
|
5646 var self = this, settings = self.settings; |
|
5647 self.classes.add('opened'); |
|
5648 if (!self.panel) { |
|
5649 var panelSettings = settings.panel; |
|
5650 if (panelSettings.type) { |
|
5651 panelSettings = { |
|
5652 layout: 'grid', |
|
5653 items: panelSettings |
|
5654 }; |
|
5655 } |
|
5656 panelSettings.role = panelSettings.role || 'dialog'; |
|
5657 panelSettings.popover = true; |
|
5658 panelSettings.autohide = true; |
|
5659 panelSettings.ariaRoot = true; |
|
5660 self.panel = new FloatPanel(panelSettings).on('hide', function () { |
|
5661 self.classes.remove('opened'); |
|
5662 }).on('cancel', function (e) { |
|
5663 e.stopPropagation(); |
|
5664 self.focus(); |
|
5665 self.hidePanel(); |
|
5666 }).parent(self).renderTo(self.getContainerElm()); |
|
5667 self.panel.fire('show'); |
|
5668 self.panel.reflow(); |
|
5669 } else { |
|
5670 self.panel.show(); |
|
5671 } |
|
5672 var rtlRels = [ |
|
5673 'bc-tc', |
|
5674 'bc-tl', |
|
5675 'bc-tr' |
|
5676 ]; |
|
5677 var ltrRels = [ |
|
5678 'bc-tc', |
|
5679 'bc-tr', |
|
5680 'bc-tl', |
|
5681 'tc-bc', |
|
5682 'tc-br', |
|
5683 'tc-bl' |
|
5684 ]; |
|
5685 var rel = self.panel.testMoveRel(self.getEl(), settings.popoverAlign || (self.isRtl() ? rtlRels : ltrRels)); |
|
5686 self.panel.classes.toggle('start', rel.substr(-1) === 'l'); |
|
5687 self.panel.classes.toggle('end', rel.substr(-1) === 'r'); |
|
5688 var isTop = rel.substr(0, 1) === 't'; |
|
5689 self.panel.classes.toggle('bottom', !isTop); |
|
5690 self.panel.classes.toggle('top', isTop); |
|
5691 self.panel.moveRel(self.getEl(), rel); |
|
5692 }, |
|
5693 hidePanel: function () { |
|
5694 var self = this; |
|
5695 if (self.panel) { |
|
5696 self.panel.hide(); |
|
5697 } |
|
5698 }, |
|
5699 postRender: function () { |
|
5700 var self = this; |
|
5701 self.aria('haspopup', true); |
|
5702 self.on('click', function (e) { |
|
5703 if (e.control === self) { |
|
5704 if (self.panel && self.panel.visible()) { |
|
5705 self.hidePanel(); |
|
5706 } else { |
|
5707 self.showPanel(); |
|
5708 self.panel.focus(!!e.aria); |
|
5709 } |
|
5710 } |
|
5711 }); |
|
5712 return self._super(); |
|
5713 }, |
|
5714 remove: function () { |
|
5715 if (this.panel) { |
|
5716 this.panel.remove(); |
|
5717 this.panel = null; |
|
5718 } |
|
5719 return this._super(); |
|
5720 } |
|
5721 }); |
|
5722 |
|
5723 var DOM = global$2.DOM; |
|
5724 var ColorButton = PanelButton.extend({ |
|
5725 init: function (settings) { |
|
5726 this._super(settings); |
|
5727 this.classes.add('splitbtn'); |
|
5728 this.classes.add('colorbutton'); |
|
5729 }, |
|
5730 color: function (color) { |
|
5731 if (color) { |
|
5732 this._color = color; |
|
5733 this.getEl('preview').style.backgroundColor = color; |
|
5734 return this; |
|
5735 } |
|
5736 return this._color; |
|
5737 }, |
|
5738 resetColor: function () { |
|
5739 this._color = null; |
|
5740 this.getEl('preview').style.backgroundColor = null; |
|
5741 return this; |
|
5742 }, |
|
5743 renderHtml: function () { |
|
5744 var self = this, id = self._id, prefix = self.classPrefix, text = self.state.get('text'); |
|
5745 var icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : ''; |
|
5746 var image = self.settings.image ? ' style="background-image: url(\'' + self.settings.image + '\')"' : ''; |
|
5747 var textHtml = ''; |
|
5748 if (text) { |
|
5749 self.classes.add('btn-has-text'); |
|
5750 textHtml = '<span class="' + prefix + 'txt">' + self.encode(text) + '</span>'; |
|
5751 } |
|
5752 return '<div id="' + id + '" class="' + self.classes + '" role="button" tabindex="-1" aria-haspopup="true">' + '<button role="presentation" hidefocus="1" type="button" tabindex="-1">' + (icon ? '<i class="' + icon + '"' + image + '></i>' : '') + '<span id="' + id + '-preview" class="' + prefix + 'preview"></span>' + textHtml + '</button>' + '<button type="button" class="' + prefix + 'open" hidefocus="1" tabindex="-1">' + ' <i class="' + prefix + 'caret"></i>' + '</button>' + '</div>'; |
|
5753 }, |
|
5754 postRender: function () { |
|
5755 var self = this, onClickHandler = self.settings.onclick; |
|
5756 self.on('click', function (e) { |
|
5757 if (e.aria && e.aria.key === 'down') { |
|
5758 return; |
|
5759 } |
|
5760 if (e.control === self && !DOM.getParent(e.target, '.' + self.classPrefix + 'open')) { |
|
5761 e.stopImmediatePropagation(); |
|
5762 onClickHandler.call(self, e); |
|
5763 } |
|
5764 }); |
|
5765 delete self.settings.onclick; |
|
5766 return self._super(); |
|
5767 } |
|
5768 }); |
|
5769 |
|
5770 var global$g = tinymce.util.Tools.resolve('tinymce.util.Color'); |
|
5771 |
|
5772 var ColorPicker = Widget.extend({ |
|
5773 Defaults: { classes: 'widget colorpicker' }, |
|
5774 init: function (settings) { |
|
5775 this._super(settings); |
|
5776 }, |
|
5777 postRender: function () { |
|
5778 var self = this; |
|
5779 var color = self.color(); |
|
5780 var hsv, hueRootElm, huePointElm, svRootElm, svPointElm; |
|
5781 hueRootElm = self.getEl('h'); |
|
5782 huePointElm = self.getEl('hp'); |
|
5783 svRootElm = self.getEl('sv'); |
|
5784 svPointElm = self.getEl('svp'); |
|
5785 function getPos(elm, event) { |
|
5786 var pos = funcs.getPos(elm); |
|
5787 var x, y; |
|
5788 x = event.pageX - pos.x; |
|
5789 y = event.pageY - pos.y; |
|
5790 x = Math.max(0, Math.min(x / elm.clientWidth, 1)); |
|
5791 y = Math.max(0, Math.min(y / elm.clientHeight, 1)); |
|
5792 return { |
|
5793 x: x, |
|
5794 y: y |
|
5795 }; |
|
5796 } |
|
5797 function updateColor(hsv, hueUpdate) { |
|
5798 var hue = (360 - hsv.h) / 360; |
|
5799 funcs.css(huePointElm, { top: hue * 100 + '%' }); |
|
5800 if (!hueUpdate) { |
|
5801 funcs.css(svPointElm, { |
|
5802 left: hsv.s + '%', |
|
5803 top: 100 - hsv.v + '%' |
|
5804 }); |
|
5805 } |
|
5806 svRootElm.style.background = global$g({ |
|
5807 s: 100, |
|
5808 v: 100, |
|
5809 h: hsv.h |
|
5810 }).toHex(); |
|
5811 self.color().parse({ |
|
5812 s: hsv.s, |
|
5813 v: hsv.v, |
|
5814 h: hsv.h |
9411 }); |
5815 }); |
9412 menu.on('show hide', function (e) { |
5816 } |
9413 if (e.control.items) { |
5817 function updateSaturationAndValue(e) { |
9414 e.control.items().each(function (ctrl) { |
5818 var pos; |
9415 ctrl.active(ctrl.settings.selected); |
5819 pos = getPos(svRootElm, e); |
|
5820 hsv.s = pos.x * 100; |
|
5821 hsv.v = (1 - pos.y) * 100; |
|
5822 updateColor(hsv); |
|
5823 self.fire('change'); |
|
5824 } |
|
5825 function updateHue(e) { |
|
5826 var pos; |
|
5827 pos = getPos(hueRootElm, e); |
|
5828 hsv = color.toHsv(); |
|
5829 hsv.h = (1 - pos.y) * 360; |
|
5830 updateColor(hsv, true); |
|
5831 self.fire('change'); |
|
5832 } |
|
5833 self._repaint = function () { |
|
5834 hsv = color.toHsv(); |
|
5835 updateColor(hsv); |
|
5836 }; |
|
5837 self._super(); |
|
5838 self._svdraghelper = new DragHelper(self._id + '-sv', { |
|
5839 start: updateSaturationAndValue, |
|
5840 drag: updateSaturationAndValue |
|
5841 }); |
|
5842 self._hdraghelper = new DragHelper(self._id + '-h', { |
|
5843 start: updateHue, |
|
5844 drag: updateHue |
|
5845 }); |
|
5846 self._repaint(); |
|
5847 }, |
|
5848 rgb: function () { |
|
5849 return this.color().toRgb(); |
|
5850 }, |
|
5851 value: function (value) { |
|
5852 var self = this; |
|
5853 if (arguments.length) { |
|
5854 self.color().parse(value); |
|
5855 if (self._rendered) { |
|
5856 self._repaint(); |
|
5857 } |
|
5858 } else { |
|
5859 return self.color().toHex(); |
|
5860 } |
|
5861 }, |
|
5862 color: function () { |
|
5863 if (!this._color) { |
|
5864 this._color = global$g(); |
|
5865 } |
|
5866 return this._color; |
|
5867 }, |
|
5868 renderHtml: function () { |
|
5869 var self = this; |
|
5870 var id = self._id; |
|
5871 var prefix = self.classPrefix; |
|
5872 var hueHtml; |
|
5873 var stops = '#ff0000,#ff0080,#ff00ff,#8000ff,#0000ff,#0080ff,#00ffff,#00ff80,#00ff00,#80ff00,#ffff00,#ff8000,#ff0000'; |
|
5874 function getOldIeFallbackHtml() { |
|
5875 var i, l, html = '', gradientPrefix, stopsList; |
|
5876 gradientPrefix = 'filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='; |
|
5877 stopsList = stops.split(','); |
|
5878 for (i = 0, l = stopsList.length - 1; i < l; i++) { |
|
5879 html += '<div class="' + prefix + 'colorpicker-h-chunk" style="' + 'height:' + 100 / l + '%;' + gradientPrefix + stopsList[i] + ',endColorstr=' + stopsList[i + 1] + ');' + '-ms-' + gradientPrefix + stopsList[i] + ',endColorstr=' + stopsList[i + 1] + ')' + '"></div>'; |
|
5880 } |
|
5881 return html; |
|
5882 } |
|
5883 var gradientCssText = 'background: -ms-linear-gradient(top,' + stops + ');' + 'background: linear-gradient(to bottom,' + stops + ');'; |
|
5884 hueHtml = '<div id="' + id + '-h" class="' + prefix + 'colorpicker-h" style="' + gradientCssText + '">' + getOldIeFallbackHtml() + '<div id="' + id + '-hp" class="' + prefix + 'colorpicker-h-marker"></div>' + '</div>'; |
|
5885 return '<div id="' + id + '" class="' + self.classes + '">' + '<div id="' + id + '-sv" class="' + prefix + 'colorpicker-sv">' + '<div class="' + prefix + 'colorpicker-overlay1">' + '<div class="' + prefix + 'colorpicker-overlay2">' + '<div id="' + id + '-svp" class="' + prefix + 'colorpicker-selector1">' + '<div class="' + prefix + 'colorpicker-selector2"></div>' + '</div>' + '</div>' + '</div>' + '</div>' + hueHtml + '</div>'; |
|
5886 } |
|
5887 }); |
|
5888 |
|
5889 var DropZone = Widget.extend({ |
|
5890 init: function (settings) { |
|
5891 var self = this; |
|
5892 settings = global$4.extend({ |
|
5893 height: 100, |
|
5894 text: 'Drop an image here', |
|
5895 multiple: false, |
|
5896 accept: null |
|
5897 }, settings); |
|
5898 self._super(settings); |
|
5899 self.classes.add('dropzone'); |
|
5900 if (settings.multiple) { |
|
5901 self.classes.add('multiple'); |
|
5902 } |
|
5903 }, |
|
5904 renderHtml: function () { |
|
5905 var self = this; |
|
5906 var attrs, elm; |
|
5907 var cfg = self.settings; |
|
5908 attrs = { |
|
5909 id: self._id, |
|
5910 hidefocus: '1' |
|
5911 }; |
|
5912 elm = funcs.create('div', attrs, '<span>' + this.translate(cfg.text) + '</span>'); |
|
5913 if (cfg.height) { |
|
5914 funcs.css(elm, 'height', cfg.height + 'px'); |
|
5915 } |
|
5916 if (cfg.width) { |
|
5917 funcs.css(elm, 'width', cfg.width + 'px'); |
|
5918 } |
|
5919 elm.className = self.classes; |
|
5920 return elm.outerHTML; |
|
5921 }, |
|
5922 postRender: function () { |
|
5923 var self = this; |
|
5924 var toggleDragClass = function (e) { |
|
5925 e.preventDefault(); |
|
5926 self.classes.toggle('dragenter'); |
|
5927 self.getEl().className = self.classes; |
|
5928 }; |
|
5929 var filter = function (files) { |
|
5930 var accept = self.settings.accept; |
|
5931 if (typeof accept !== 'string') { |
|
5932 return files; |
|
5933 } |
|
5934 var re = new RegExp('(' + accept.split(/\s*,\s*/).join('|') + ')$', 'i'); |
|
5935 return global$4.grep(files, function (file) { |
|
5936 return re.test(file.name); |
|
5937 }); |
|
5938 }; |
|
5939 self._super(); |
|
5940 self.$el.on('dragover', function (e) { |
|
5941 e.preventDefault(); |
|
5942 }); |
|
5943 self.$el.on('dragenter', toggleDragClass); |
|
5944 self.$el.on('dragleave', toggleDragClass); |
|
5945 self.$el.on('drop', function (e) { |
|
5946 e.preventDefault(); |
|
5947 if (self.state.get('disabled')) { |
|
5948 return; |
|
5949 } |
|
5950 var files = filter(e.dataTransfer.files); |
|
5951 self.value = function () { |
|
5952 if (!files.length) { |
|
5953 return null; |
|
5954 } else if (self.settings.multiple) { |
|
5955 return files; |
|
5956 } else { |
|
5957 return files[0]; |
|
5958 } |
|
5959 }; |
|
5960 if (files.length) { |
|
5961 self.fire('change', e); |
|
5962 } |
|
5963 }); |
|
5964 }, |
|
5965 remove: function () { |
|
5966 this.$el.off(); |
|
5967 this._super(); |
|
5968 } |
|
5969 }); |
|
5970 |
|
5971 var Path = Widget.extend({ |
|
5972 init: function (settings) { |
|
5973 var self = this; |
|
5974 if (!settings.delimiter) { |
|
5975 settings.delimiter = '\xBB'; |
|
5976 } |
|
5977 self._super(settings); |
|
5978 self.classes.add('path'); |
|
5979 self.canFocus = true; |
|
5980 self.on('click', function (e) { |
|
5981 var index; |
|
5982 var target = e.target; |
|
5983 if (index = target.getAttribute('data-index')) { |
|
5984 self.fire('select', { |
|
5985 value: self.row()[index], |
|
5986 index: index |
|
5987 }); |
|
5988 } |
|
5989 }); |
|
5990 self.row(self.settings.row); |
|
5991 }, |
|
5992 focus: function () { |
|
5993 var self = this; |
|
5994 self.getEl().firstChild.focus(); |
|
5995 return self; |
|
5996 }, |
|
5997 row: function (row) { |
|
5998 if (!arguments.length) { |
|
5999 return this.state.get('row'); |
|
6000 } |
|
6001 this.state.set('row', row); |
|
6002 return this; |
|
6003 }, |
|
6004 renderHtml: function () { |
|
6005 var self = this; |
|
6006 return '<div id="' + self._id + '" class="' + self.classes + '">' + self._getDataPathHtml(self.state.get('row')) + '</div>'; |
|
6007 }, |
|
6008 bindStates: function () { |
|
6009 var self = this; |
|
6010 self.state.on('change:row', function (e) { |
|
6011 self.innerHtml(self._getDataPathHtml(e.value)); |
|
6012 }); |
|
6013 return self._super(); |
|
6014 }, |
|
6015 _getDataPathHtml: function (data) { |
|
6016 var self = this; |
|
6017 var parts = data || []; |
|
6018 var i, l, html = ''; |
|
6019 var prefix = self.classPrefix; |
|
6020 for (i = 0, l = parts.length; i < l; i++) { |
|
6021 html += (i > 0 ? '<div class="' + prefix + 'divider" aria-hidden="true"> ' + self.settings.delimiter + ' </div>' : '') + '<div role="button" class="' + prefix + 'path-item' + (i === l - 1 ? ' ' + prefix + 'last' : '') + '" data-index="' + i + '" tabindex="-1" id="' + self._id + '-' + i + '" aria-level="' + (i + 1) + '">' + parts[i].name + '</div>'; |
|
6022 } |
|
6023 if (!html) { |
|
6024 html = '<div class="' + prefix + 'path-item">\xA0</div>'; |
|
6025 } |
|
6026 return html; |
|
6027 } |
|
6028 }); |
|
6029 |
|
6030 var ElementPath = Path.extend({ |
|
6031 postRender: function () { |
|
6032 var self = this, editor = self.settings.editor; |
|
6033 function isHidden(elm) { |
|
6034 if (elm.nodeType === 1) { |
|
6035 if (elm.nodeName === 'BR' || !!elm.getAttribute('data-mce-bogus')) { |
|
6036 return true; |
|
6037 } |
|
6038 if (elm.getAttribute('data-mce-type') === 'bookmark') { |
|
6039 return true; |
|
6040 } |
|
6041 } |
|
6042 return false; |
|
6043 } |
|
6044 if (editor.settings.elementpath !== false) { |
|
6045 self.on('select', function (e) { |
|
6046 editor.focus(); |
|
6047 editor.selection.select(this.row()[e.index].element); |
|
6048 editor.nodeChanged(); |
|
6049 }); |
|
6050 editor.on('nodeChange', function (e) { |
|
6051 var outParents = []; |
|
6052 var parents = e.parents; |
|
6053 var i = parents.length; |
|
6054 while (i--) { |
|
6055 if (parents[i].nodeType === 1 && !isHidden(parents[i])) { |
|
6056 var args = editor.fire('ResolveName', { |
|
6057 name: parents[i].nodeName.toLowerCase(), |
|
6058 target: parents[i] |
|
6059 }); |
|
6060 if (!args.isDefaultPrevented()) { |
|
6061 outParents.push({ |
|
6062 name: args.name, |
|
6063 element: parents[i] |
|
6064 }); |
|
6065 } |
|
6066 if (args.isPropagationStopped()) { |
|
6067 break; |
|
6068 } |
|
6069 } |
|
6070 } |
|
6071 self.row(outParents); |
|
6072 }); |
|
6073 } |
|
6074 return self._super(); |
|
6075 } |
|
6076 }); |
|
6077 |
|
6078 var FormItem = Container.extend({ |
|
6079 Defaults: { |
|
6080 layout: 'flex', |
|
6081 align: 'center', |
|
6082 defaults: { flex: 1 } |
|
6083 }, |
|
6084 renderHtml: function () { |
|
6085 var self = this, layout = self._layout, prefix = self.classPrefix; |
|
6086 self.classes.add('formitem'); |
|
6087 layout.preRender(self); |
|
6088 return '<div id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1">' + (self.settings.title ? '<div id="' + self._id + '-title" class="' + prefix + 'title">' + self.settings.title + '</div>' : '') + '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</div>'; |
|
6089 } |
|
6090 }); |
|
6091 |
|
6092 var Form = Container.extend({ |
|
6093 Defaults: { |
|
6094 containerCls: 'form', |
|
6095 layout: 'flex', |
|
6096 direction: 'column', |
|
6097 align: 'stretch', |
|
6098 flex: 1, |
|
6099 padding: 15, |
|
6100 labelGap: 30, |
|
6101 spacing: 10, |
|
6102 callbacks: { |
|
6103 submit: function () { |
|
6104 this.submit(); |
|
6105 } |
|
6106 } |
|
6107 }, |
|
6108 preRender: function () { |
|
6109 var self = this, items = self.items(); |
|
6110 if (!self.settings.formItemDefaults) { |
|
6111 self.settings.formItemDefaults = { |
|
6112 layout: 'flex', |
|
6113 autoResize: 'overflow', |
|
6114 defaults: { flex: 1 } |
|
6115 }; |
|
6116 } |
|
6117 items.each(function (ctrl) { |
|
6118 var formItem; |
|
6119 var label = ctrl.settings.label; |
|
6120 if (label) { |
|
6121 formItem = new FormItem(global$4.extend({ |
|
6122 items: { |
|
6123 type: 'label', |
|
6124 id: ctrl._id + '-l', |
|
6125 text: label, |
|
6126 flex: 0, |
|
6127 forId: ctrl._id, |
|
6128 disabled: ctrl.disabled() |
|
6129 } |
|
6130 }, self.settings.formItemDefaults)); |
|
6131 formItem.type = 'formitem'; |
|
6132 ctrl.aria('labelledby', ctrl._id + '-l'); |
|
6133 if (typeof ctrl.settings.flex === 'undefined') { |
|
6134 ctrl.settings.flex = 1; |
|
6135 } |
|
6136 self.replace(ctrl, formItem); |
|
6137 formItem.add(ctrl); |
|
6138 } |
|
6139 }); |
|
6140 }, |
|
6141 submit: function () { |
|
6142 return this.fire('submit', { data: this.toJSON() }); |
|
6143 }, |
|
6144 postRender: function () { |
|
6145 var self = this; |
|
6146 self._super(); |
|
6147 self.fromJSON(self.settings.data); |
|
6148 }, |
|
6149 bindStates: function () { |
|
6150 var self = this; |
|
6151 self._super(); |
|
6152 function recalcLabels() { |
|
6153 var maxLabelWidth = 0; |
|
6154 var labels = []; |
|
6155 var i, labelGap, items; |
|
6156 if (self.settings.labelGapCalc === false) { |
|
6157 return; |
|
6158 } |
|
6159 if (self.settings.labelGapCalc === 'children') { |
|
6160 items = self.find('formitem'); |
|
6161 } else { |
|
6162 items = self.items(); |
|
6163 } |
|
6164 items.filter('formitem').each(function (item) { |
|
6165 var labelCtrl = item.items()[0], labelWidth = labelCtrl.getEl().clientWidth; |
|
6166 maxLabelWidth = labelWidth > maxLabelWidth ? labelWidth : maxLabelWidth; |
|
6167 labels.push(labelCtrl); |
|
6168 }); |
|
6169 labelGap = self.settings.labelGap || 0; |
|
6170 i = labels.length; |
|
6171 while (i--) { |
|
6172 labels[i].settings.minWidth = maxLabelWidth + labelGap; |
|
6173 } |
|
6174 } |
|
6175 self.on('show', recalcLabels); |
|
6176 recalcLabels(); |
|
6177 } |
|
6178 }); |
|
6179 |
|
6180 var FieldSet = Form.extend({ |
|
6181 Defaults: { |
|
6182 containerCls: 'fieldset', |
|
6183 layout: 'flex', |
|
6184 direction: 'column', |
|
6185 align: 'stretch', |
|
6186 flex: 1, |
|
6187 padding: '25 15 5 15', |
|
6188 labelGap: 30, |
|
6189 spacing: 10, |
|
6190 border: 1 |
|
6191 }, |
|
6192 renderHtml: function () { |
|
6193 var self = this, layout = self._layout, prefix = self.classPrefix; |
|
6194 self.preRender(); |
|
6195 layout.preRender(self); |
|
6196 return '<fieldset id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1">' + (self.settings.title ? '<legend id="' + self._id + '-title" class="' + prefix + 'fieldset-title">' + self.settings.title + '</legend>' : '') + '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</fieldset>'; |
|
6197 } |
|
6198 }); |
|
6199 |
|
6200 var unique$1 = 0; |
|
6201 var generate = function (prefix) { |
|
6202 var date = new Date(); |
|
6203 var time = date.getTime(); |
|
6204 var random = Math.floor(Math.random() * 1000000000); |
|
6205 unique$1++; |
|
6206 return prefix + '_' + random + unique$1 + String(time); |
|
6207 }; |
|
6208 |
|
6209 var fromHtml = function (html, scope) { |
|
6210 var doc = scope || domGlobals.document; |
|
6211 var div = doc.createElement('div'); |
|
6212 div.innerHTML = html; |
|
6213 if (!div.hasChildNodes() || div.childNodes.length > 1) { |
|
6214 domGlobals.console.error('HTML does not have a single root node', html); |
|
6215 throw new Error('HTML must have a single root node'); |
|
6216 } |
|
6217 return fromDom(div.childNodes[0]); |
|
6218 }; |
|
6219 var fromTag = function (tag, scope) { |
|
6220 var doc = scope || domGlobals.document; |
|
6221 var node = doc.createElement(tag); |
|
6222 return fromDom(node); |
|
6223 }; |
|
6224 var fromText = function (text, scope) { |
|
6225 var doc = scope || domGlobals.document; |
|
6226 var node = doc.createTextNode(text); |
|
6227 return fromDom(node); |
|
6228 }; |
|
6229 var fromDom = function (node) { |
|
6230 if (node === null || node === undefined) { |
|
6231 throw new Error('Node cannot be null or undefined'); |
|
6232 } |
|
6233 return { dom: constant(node) }; |
|
6234 }; |
|
6235 var fromPoint = function (docElm, x, y) { |
|
6236 var doc = docElm.dom(); |
|
6237 return Option.from(doc.elementFromPoint(x, y)).map(fromDom); |
|
6238 }; |
|
6239 var Element = { |
|
6240 fromHtml: fromHtml, |
|
6241 fromTag: fromTag, |
|
6242 fromText: fromText, |
|
6243 fromDom: fromDom, |
|
6244 fromPoint: fromPoint |
|
6245 }; |
|
6246 |
|
6247 var cached = function (f) { |
|
6248 var called = false; |
|
6249 var r; |
|
6250 return function () { |
|
6251 var args = []; |
|
6252 for (var _i = 0; _i < arguments.length; _i++) { |
|
6253 args[_i] = arguments[_i]; |
|
6254 } |
|
6255 if (!called) { |
|
6256 called = true; |
|
6257 r = f.apply(null, args); |
|
6258 } |
|
6259 return r; |
|
6260 }; |
|
6261 }; |
|
6262 |
|
6263 var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE; |
|
6264 var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE; |
|
6265 var COMMENT = domGlobals.Node.COMMENT_NODE; |
|
6266 var DOCUMENT = domGlobals.Node.DOCUMENT_NODE; |
|
6267 var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE; |
|
6268 var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE; |
|
6269 var ELEMENT = domGlobals.Node.ELEMENT_NODE; |
|
6270 var TEXT = domGlobals.Node.TEXT_NODE; |
|
6271 var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE; |
|
6272 var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE; |
|
6273 var ENTITY = domGlobals.Node.ENTITY_NODE; |
|
6274 var NOTATION = domGlobals.Node.NOTATION_NODE; |
|
6275 |
|
6276 var Immutable = function () { |
|
6277 var fields = []; |
|
6278 for (var _i = 0; _i < arguments.length; _i++) { |
|
6279 fields[_i] = arguments[_i]; |
|
6280 } |
|
6281 return function () { |
|
6282 var values = []; |
|
6283 for (var _i = 0; _i < arguments.length; _i++) { |
|
6284 values[_i] = arguments[_i]; |
|
6285 } |
|
6286 if (fields.length !== values.length) { |
|
6287 throw new Error('Wrong number of arguments to struct. Expected "[' + fields.length + ']", got ' + values.length + ' arguments'); |
|
6288 } |
|
6289 var struct = {}; |
|
6290 each(fields, function (name, i) { |
|
6291 struct[name] = constant(values[i]); |
|
6292 }); |
|
6293 return struct; |
|
6294 }; |
|
6295 }; |
|
6296 |
|
6297 var node = function () { |
|
6298 var f = Global$1.getOrDie('Node'); |
|
6299 return f; |
|
6300 }; |
|
6301 var compareDocumentPosition = function (a, b, match) { |
|
6302 return (a.compareDocumentPosition(b) & match) !== 0; |
|
6303 }; |
|
6304 var documentPositionPreceding = function (a, b) { |
|
6305 return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING); |
|
6306 }; |
|
6307 var documentPositionContainedBy = function (a, b) { |
|
6308 return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY); |
|
6309 }; |
|
6310 var Node = { |
|
6311 documentPositionPreceding: documentPositionPreceding, |
|
6312 documentPositionContainedBy: documentPositionContainedBy |
|
6313 }; |
|
6314 |
|
6315 var firstMatch = function (regexes, s) { |
|
6316 for (var i = 0; i < regexes.length; i++) { |
|
6317 var x = regexes[i]; |
|
6318 if (x.test(s)) |
|
6319 return x; |
|
6320 } |
|
6321 return undefined; |
|
6322 }; |
|
6323 var find$1 = function (regexes, agent) { |
|
6324 var r = firstMatch(regexes, agent); |
|
6325 if (!r) |
|
6326 return { |
|
6327 major: 0, |
|
6328 minor: 0 |
|
6329 }; |
|
6330 var group = function (i) { |
|
6331 return Number(agent.replace(r, '$' + i)); |
|
6332 }; |
|
6333 return nu(group(1), group(2)); |
|
6334 }; |
|
6335 var detect = function (versionRegexes, agent) { |
|
6336 var cleanedAgent = String(agent).toLowerCase(); |
|
6337 if (versionRegexes.length === 0) |
|
6338 return unknown(); |
|
6339 return find$1(versionRegexes, cleanedAgent); |
|
6340 }; |
|
6341 var unknown = function () { |
|
6342 return nu(0, 0); |
|
6343 }; |
|
6344 var nu = function (major, minor) { |
|
6345 return { |
|
6346 major: major, |
|
6347 minor: minor |
|
6348 }; |
|
6349 }; |
|
6350 var Version = { |
|
6351 nu: nu, |
|
6352 detect: detect, |
|
6353 unknown: unknown |
|
6354 }; |
|
6355 |
|
6356 var edge = 'Edge'; |
|
6357 var chrome = 'Chrome'; |
|
6358 var ie = 'IE'; |
|
6359 var opera = 'Opera'; |
|
6360 var firefox = 'Firefox'; |
|
6361 var safari = 'Safari'; |
|
6362 var isBrowser = function (name, current) { |
|
6363 return function () { |
|
6364 return current === name; |
|
6365 }; |
|
6366 }; |
|
6367 var unknown$1 = function () { |
|
6368 return nu$1({ |
|
6369 current: undefined, |
|
6370 version: Version.unknown() |
|
6371 }); |
|
6372 }; |
|
6373 var nu$1 = function (info) { |
|
6374 var current = info.current; |
|
6375 var version = info.version; |
|
6376 return { |
|
6377 current: current, |
|
6378 version: version, |
|
6379 isEdge: isBrowser(edge, current), |
|
6380 isChrome: isBrowser(chrome, current), |
|
6381 isIE: isBrowser(ie, current), |
|
6382 isOpera: isBrowser(opera, current), |
|
6383 isFirefox: isBrowser(firefox, current), |
|
6384 isSafari: isBrowser(safari, current) |
|
6385 }; |
|
6386 }; |
|
6387 var Browser = { |
|
6388 unknown: unknown$1, |
|
6389 nu: nu$1, |
|
6390 edge: constant(edge), |
|
6391 chrome: constant(chrome), |
|
6392 ie: constant(ie), |
|
6393 opera: constant(opera), |
|
6394 firefox: constant(firefox), |
|
6395 safari: constant(safari) |
|
6396 }; |
|
6397 |
|
6398 var windows$1 = 'Windows'; |
|
6399 var ios = 'iOS'; |
|
6400 var android = 'Android'; |
|
6401 var linux = 'Linux'; |
|
6402 var osx = 'OSX'; |
|
6403 var solaris = 'Solaris'; |
|
6404 var freebsd = 'FreeBSD'; |
|
6405 var isOS = function (name, current) { |
|
6406 return function () { |
|
6407 return current === name; |
|
6408 }; |
|
6409 }; |
|
6410 var unknown$2 = function () { |
|
6411 return nu$2({ |
|
6412 current: undefined, |
|
6413 version: Version.unknown() |
|
6414 }); |
|
6415 }; |
|
6416 var nu$2 = function (info) { |
|
6417 var current = info.current; |
|
6418 var version = info.version; |
|
6419 return { |
|
6420 current: current, |
|
6421 version: version, |
|
6422 isWindows: isOS(windows$1, current), |
|
6423 isiOS: isOS(ios, current), |
|
6424 isAndroid: isOS(android, current), |
|
6425 isOSX: isOS(osx, current), |
|
6426 isLinux: isOS(linux, current), |
|
6427 isSolaris: isOS(solaris, current), |
|
6428 isFreeBSD: isOS(freebsd, current) |
|
6429 }; |
|
6430 }; |
|
6431 var OperatingSystem = { |
|
6432 unknown: unknown$2, |
|
6433 nu: nu$2, |
|
6434 windows: constant(windows$1), |
|
6435 ios: constant(ios), |
|
6436 android: constant(android), |
|
6437 linux: constant(linux), |
|
6438 osx: constant(osx), |
|
6439 solaris: constant(solaris), |
|
6440 freebsd: constant(freebsd) |
|
6441 }; |
|
6442 |
|
6443 var DeviceType = function (os, browser, userAgent) { |
|
6444 var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true; |
|
6445 var isiPhone = os.isiOS() && !isiPad; |
|
6446 var isAndroid3 = os.isAndroid() && os.version.major === 3; |
|
6447 var isAndroid4 = os.isAndroid() && os.version.major === 4; |
|
6448 var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true; |
|
6449 var isTouch = os.isiOS() || os.isAndroid(); |
|
6450 var isPhone = isTouch && !isTablet; |
|
6451 var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false; |
|
6452 return { |
|
6453 isiPad: constant(isiPad), |
|
6454 isiPhone: constant(isiPhone), |
|
6455 isTablet: constant(isTablet), |
|
6456 isPhone: constant(isPhone), |
|
6457 isTouch: constant(isTouch), |
|
6458 isAndroid: os.isAndroid, |
|
6459 isiOS: os.isiOS, |
|
6460 isWebView: constant(iOSwebview) |
|
6461 }; |
|
6462 }; |
|
6463 |
|
6464 var detect$1 = function (candidates, userAgent) { |
|
6465 var agent = String(userAgent).toLowerCase(); |
|
6466 return find(candidates, function (candidate) { |
|
6467 return candidate.search(agent); |
|
6468 }); |
|
6469 }; |
|
6470 var detectBrowser = function (browsers, userAgent) { |
|
6471 return detect$1(browsers, userAgent).map(function (browser) { |
|
6472 var version = Version.detect(browser.versionRegexes, userAgent); |
|
6473 return { |
|
6474 current: browser.name, |
|
6475 version: version |
|
6476 }; |
|
6477 }); |
|
6478 }; |
|
6479 var detectOs = function (oses, userAgent) { |
|
6480 return detect$1(oses, userAgent).map(function (os) { |
|
6481 var version = Version.detect(os.versionRegexes, userAgent); |
|
6482 return { |
|
6483 current: os.name, |
|
6484 version: version |
|
6485 }; |
|
6486 }); |
|
6487 }; |
|
6488 var UaString = { |
|
6489 detectBrowser: detectBrowser, |
|
6490 detectOs: detectOs |
|
6491 }; |
|
6492 |
|
6493 var contains = function (str, substr) { |
|
6494 return str.indexOf(substr) !== -1; |
|
6495 }; |
|
6496 |
|
6497 var normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/; |
|
6498 var checkContains = function (target) { |
|
6499 return function (uastring) { |
|
6500 return contains(uastring, target); |
|
6501 }; |
|
6502 }; |
|
6503 var browsers = [ |
|
6504 { |
|
6505 name: 'Edge', |
|
6506 versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/], |
|
6507 search: function (uastring) { |
|
6508 var monstrosity = contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit'); |
|
6509 return monstrosity; |
|
6510 } |
|
6511 }, |
|
6512 { |
|
6513 name: 'Chrome', |
|
6514 versionRegexes: [ |
|
6515 /.*?chrome\/([0-9]+)\.([0-9]+).*/, |
|
6516 normalVersionRegex |
|
6517 ], |
|
6518 search: function (uastring) { |
|
6519 return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe'); |
|
6520 } |
|
6521 }, |
|
6522 { |
|
6523 name: 'IE', |
|
6524 versionRegexes: [ |
|
6525 /.*?msie\ ?([0-9]+)\.([0-9]+).*/, |
|
6526 /.*?rv:([0-9]+)\.([0-9]+).*/ |
|
6527 ], |
|
6528 search: function (uastring) { |
|
6529 return contains(uastring, 'msie') || contains(uastring, 'trident'); |
|
6530 } |
|
6531 }, |
|
6532 { |
|
6533 name: 'Opera', |
|
6534 versionRegexes: [ |
|
6535 normalVersionRegex, |
|
6536 /.*?opera\/([0-9]+)\.([0-9]+).*/ |
|
6537 ], |
|
6538 search: checkContains('opera') |
|
6539 }, |
|
6540 { |
|
6541 name: 'Firefox', |
|
6542 versionRegexes: [/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/], |
|
6543 search: checkContains('firefox') |
|
6544 }, |
|
6545 { |
|
6546 name: 'Safari', |
|
6547 versionRegexes: [ |
|
6548 normalVersionRegex, |
|
6549 /.*?cpu os ([0-9]+)_([0-9]+).*/ |
|
6550 ], |
|
6551 search: function (uastring) { |
|
6552 return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit'); |
|
6553 } |
|
6554 } |
|
6555 ]; |
|
6556 var oses = [ |
|
6557 { |
|
6558 name: 'Windows', |
|
6559 search: checkContains('win'), |
|
6560 versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/] |
|
6561 }, |
|
6562 { |
|
6563 name: 'iOS', |
|
6564 search: function (uastring) { |
|
6565 return contains(uastring, 'iphone') || contains(uastring, 'ipad'); |
|
6566 }, |
|
6567 versionRegexes: [ |
|
6568 /.*?version\/\ ?([0-9]+)\.([0-9]+).*/, |
|
6569 /.*cpu os ([0-9]+)_([0-9]+).*/, |
|
6570 /.*cpu iphone os ([0-9]+)_([0-9]+).*/ |
|
6571 ] |
|
6572 }, |
|
6573 { |
|
6574 name: 'Android', |
|
6575 search: checkContains('android'), |
|
6576 versionRegexes: [/.*?android\ ?([0-9]+)\.([0-9]+).*/] |
|
6577 }, |
|
6578 { |
|
6579 name: 'OSX', |
|
6580 search: checkContains('os x'), |
|
6581 versionRegexes: [/.*?os\ x\ ?([0-9]+)_([0-9]+).*/] |
|
6582 }, |
|
6583 { |
|
6584 name: 'Linux', |
|
6585 search: checkContains('linux'), |
|
6586 versionRegexes: [] |
|
6587 }, |
|
6588 { |
|
6589 name: 'Solaris', |
|
6590 search: checkContains('sunos'), |
|
6591 versionRegexes: [] |
|
6592 }, |
|
6593 { |
|
6594 name: 'FreeBSD', |
|
6595 search: checkContains('freebsd'), |
|
6596 versionRegexes: [] |
|
6597 } |
|
6598 ]; |
|
6599 var PlatformInfo = { |
|
6600 browsers: constant(browsers), |
|
6601 oses: constant(oses) |
|
6602 }; |
|
6603 |
|
6604 var detect$2 = function (userAgent) { |
|
6605 var browsers = PlatformInfo.browsers(); |
|
6606 var oses = PlatformInfo.oses(); |
|
6607 var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu); |
|
6608 var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu); |
|
6609 var deviceType = DeviceType(os, browser, userAgent); |
|
6610 return { |
|
6611 browser: browser, |
|
6612 os: os, |
|
6613 deviceType: deviceType |
|
6614 }; |
|
6615 }; |
|
6616 var PlatformDetection = { detect: detect$2 }; |
|
6617 |
|
6618 var detect$3 = cached(function () { |
|
6619 var userAgent = domGlobals.navigator.userAgent; |
|
6620 return PlatformDetection.detect(userAgent); |
|
6621 }); |
|
6622 var PlatformDetection$1 = { detect: detect$3 }; |
|
6623 |
|
6624 var ELEMENT$1 = ELEMENT; |
|
6625 var DOCUMENT$1 = DOCUMENT; |
|
6626 var bypassSelector = function (dom) { |
|
6627 return dom.nodeType !== ELEMENT$1 && dom.nodeType !== DOCUMENT$1 || dom.childElementCount === 0; |
|
6628 }; |
|
6629 var all = function (selector, scope) { |
|
6630 var base = scope === undefined ? domGlobals.document : scope.dom(); |
|
6631 return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element.fromDom); |
|
6632 }; |
|
6633 var one = function (selector, scope) { |
|
6634 var base = scope === undefined ? domGlobals.document : scope.dom(); |
|
6635 return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element.fromDom); |
|
6636 }; |
|
6637 |
|
6638 var regularContains = function (e1, e2) { |
|
6639 var d1 = e1.dom(); |
|
6640 var d2 = e2.dom(); |
|
6641 return d1 === d2 ? false : d1.contains(d2); |
|
6642 }; |
|
6643 var ieContains = function (e1, e2) { |
|
6644 return Node.documentPositionContainedBy(e1.dom(), e2.dom()); |
|
6645 }; |
|
6646 var browser = PlatformDetection$1.detect().browser; |
|
6647 var contains$1 = browser.isIE() ? ieContains : regularContains; |
|
6648 |
|
6649 var spot = Immutable('element', 'offset'); |
|
6650 |
|
6651 var descendants = function (scope, selector) { |
|
6652 return all(selector, scope); |
|
6653 }; |
|
6654 |
|
6655 var trim = global$4.trim; |
|
6656 var hasContentEditableState = function (value) { |
|
6657 return function (node) { |
|
6658 if (node && node.nodeType === 1) { |
|
6659 if (node.contentEditable === value) { |
|
6660 return true; |
|
6661 } |
|
6662 if (node.getAttribute('data-mce-contenteditable') === value) { |
|
6663 return true; |
|
6664 } |
|
6665 } |
|
6666 return false; |
|
6667 }; |
|
6668 }; |
|
6669 var isContentEditableTrue = hasContentEditableState('true'); |
|
6670 var isContentEditableFalse = hasContentEditableState('false'); |
|
6671 var create$4 = function (type, title, url, level, attach) { |
|
6672 return { |
|
6673 type: type, |
|
6674 title: title, |
|
6675 url: url, |
|
6676 level: level, |
|
6677 attach: attach |
|
6678 }; |
|
6679 }; |
|
6680 var isChildOfContentEditableTrue = function (node) { |
|
6681 while (node = node.parentNode) { |
|
6682 var value = node.contentEditable; |
|
6683 if (value && value !== 'inherit') { |
|
6684 return isContentEditableTrue(node); |
|
6685 } |
|
6686 } |
|
6687 return false; |
|
6688 }; |
|
6689 var select = function (selector, root) { |
|
6690 return map(descendants(Element.fromDom(root), selector), function (element) { |
|
6691 return element.dom(); |
|
6692 }); |
|
6693 }; |
|
6694 var getElementText = function (elm) { |
|
6695 return elm.innerText || elm.textContent; |
|
6696 }; |
|
6697 var getOrGenerateId = function (elm) { |
|
6698 return elm.id ? elm.id : generate('h'); |
|
6699 }; |
|
6700 var isAnchor = function (elm) { |
|
6701 return elm && elm.nodeName === 'A' && (elm.id || elm.name); |
|
6702 }; |
|
6703 var isValidAnchor = function (elm) { |
|
6704 return isAnchor(elm) && isEditable(elm); |
|
6705 }; |
|
6706 var isHeader = function (elm) { |
|
6707 return elm && /^(H[1-6])$/.test(elm.nodeName); |
|
6708 }; |
|
6709 var isEditable = function (elm) { |
|
6710 return isChildOfContentEditableTrue(elm) && !isContentEditableFalse(elm); |
|
6711 }; |
|
6712 var isValidHeader = function (elm) { |
|
6713 return isHeader(elm) && isEditable(elm); |
|
6714 }; |
|
6715 var getLevel = function (elm) { |
|
6716 return isHeader(elm) ? parseInt(elm.nodeName.substr(1), 10) : 0; |
|
6717 }; |
|
6718 var headerTarget = function (elm) { |
|
6719 var headerId = getOrGenerateId(elm); |
|
6720 var attach = function () { |
|
6721 elm.id = headerId; |
|
6722 }; |
|
6723 return create$4('header', getElementText(elm), '#' + headerId, getLevel(elm), attach); |
|
6724 }; |
|
6725 var anchorTarget = function (elm) { |
|
6726 var anchorId = elm.id || elm.name; |
|
6727 var anchorText = getElementText(elm); |
|
6728 return create$4('anchor', anchorText ? anchorText : '#' + anchorId, '#' + anchorId, 0, noop); |
|
6729 }; |
|
6730 var getHeaderTargets = function (elms) { |
|
6731 return map(filter(elms, isValidHeader), headerTarget); |
|
6732 }; |
|
6733 var getAnchorTargets = function (elms) { |
|
6734 return map(filter(elms, isValidAnchor), anchorTarget); |
|
6735 }; |
|
6736 var getTargetElements = function (elm) { |
|
6737 var elms = select('h1,h2,h3,h4,h5,h6,a:not([href])', elm); |
|
6738 return elms; |
|
6739 }; |
|
6740 var hasTitle = function (target) { |
|
6741 return trim(target.title).length > 0; |
|
6742 }; |
|
6743 var find$2 = function (elm) { |
|
6744 var elms = getTargetElements(elm); |
|
6745 return filter(getHeaderTargets(elms).concat(getAnchorTargets(elms)), hasTitle); |
|
6746 }; |
|
6747 var LinkTargets = { find: find$2 }; |
|
6748 |
|
6749 var getActiveEditor = function () { |
|
6750 return window.tinymce ? window.tinymce.activeEditor : global$5.activeEditor; |
|
6751 }; |
|
6752 var history = {}; |
|
6753 var HISTORY_LENGTH = 5; |
|
6754 var clearHistory = function () { |
|
6755 history = {}; |
|
6756 }; |
|
6757 var toMenuItem = function (target) { |
|
6758 return { |
|
6759 title: target.title, |
|
6760 value: { |
|
6761 title: { raw: target.title }, |
|
6762 url: target.url, |
|
6763 attach: target.attach |
|
6764 } |
|
6765 }; |
|
6766 }; |
|
6767 var toMenuItems = function (targets) { |
|
6768 return global$4.map(targets, toMenuItem); |
|
6769 }; |
|
6770 var staticMenuItem = function (title, url) { |
|
6771 return { |
|
6772 title: title, |
|
6773 value: { |
|
6774 title: title, |
|
6775 url: url, |
|
6776 attach: noop |
|
6777 } |
|
6778 }; |
|
6779 }; |
|
6780 var isUniqueUrl = function (url, targets) { |
|
6781 var foundTarget = exists(targets, function (target) { |
|
6782 return target.url === url; |
|
6783 }); |
|
6784 return !foundTarget; |
|
6785 }; |
|
6786 var getSetting = function (editorSettings, name, defaultValue) { |
|
6787 var value = name in editorSettings ? editorSettings[name] : defaultValue; |
|
6788 return value === false ? null : value; |
|
6789 }; |
|
6790 var createMenuItems = function (term, targets, fileType, editorSettings) { |
|
6791 var separator = { title: '-' }; |
|
6792 var fromHistoryMenuItems = function (history) { |
|
6793 var historyItems = history.hasOwnProperty(fileType) ? history[fileType] : []; |
|
6794 var uniqueHistory = filter(historyItems, function (url) { |
|
6795 return isUniqueUrl(url, targets); |
|
6796 }); |
|
6797 return global$4.map(uniqueHistory, function (url) { |
|
6798 return { |
|
6799 title: url, |
|
6800 value: { |
|
6801 title: url, |
|
6802 url: url, |
|
6803 attach: noop |
|
6804 } |
|
6805 }; |
|
6806 }); |
|
6807 }; |
|
6808 var fromMenuItems = function (type) { |
|
6809 var filteredTargets = filter(targets, function (target) { |
|
6810 return target.type === type; |
|
6811 }); |
|
6812 return toMenuItems(filteredTargets); |
|
6813 }; |
|
6814 var anchorMenuItems = function () { |
|
6815 var anchorMenuItems = fromMenuItems('anchor'); |
|
6816 var topAnchor = getSetting(editorSettings, 'anchor_top', '#top'); |
|
6817 var bottomAchor = getSetting(editorSettings, 'anchor_bottom', '#bottom'); |
|
6818 if (topAnchor !== null) { |
|
6819 anchorMenuItems.unshift(staticMenuItem('<top>', topAnchor)); |
|
6820 } |
|
6821 if (bottomAchor !== null) { |
|
6822 anchorMenuItems.push(staticMenuItem('<bottom>', bottomAchor)); |
|
6823 } |
|
6824 return anchorMenuItems; |
|
6825 }; |
|
6826 var join = function (items) { |
|
6827 return foldl(items, function (a, b) { |
|
6828 var bothEmpty = a.length === 0 || b.length === 0; |
|
6829 return bothEmpty ? a.concat(b) : a.concat(separator, b); |
|
6830 }, []); |
|
6831 }; |
|
6832 if (editorSettings.typeahead_urls === false) { |
|
6833 return []; |
|
6834 } |
|
6835 return fileType === 'file' ? join([ |
|
6836 filterByQuery(term, fromHistoryMenuItems(history)), |
|
6837 filterByQuery(term, fromMenuItems('header')), |
|
6838 filterByQuery(term, anchorMenuItems()) |
|
6839 ]) : filterByQuery(term, fromHistoryMenuItems(history)); |
|
6840 }; |
|
6841 var addToHistory = function (url, fileType) { |
|
6842 var items = history[fileType]; |
|
6843 if (!/^https?/.test(url)) { |
|
6844 return; |
|
6845 } |
|
6846 if (items) { |
|
6847 if (indexOf(items, url).isNone()) { |
|
6848 history[fileType] = items.slice(0, HISTORY_LENGTH).concat(url); |
|
6849 } |
|
6850 } else { |
|
6851 history[fileType] = [url]; |
|
6852 } |
|
6853 }; |
|
6854 var filterByQuery = function (term, menuItems) { |
|
6855 var lowerCaseTerm = term.toLowerCase(); |
|
6856 var result = global$4.grep(menuItems, function (item) { |
|
6857 return item.title.toLowerCase().indexOf(lowerCaseTerm) !== -1; |
|
6858 }); |
|
6859 return result.length === 1 && result[0].title === term ? [] : result; |
|
6860 }; |
|
6861 var getTitle = function (linkDetails) { |
|
6862 var title = linkDetails.title; |
|
6863 return title.raw ? title.raw : title; |
|
6864 }; |
|
6865 var setupAutoCompleteHandler = function (ctrl, editorSettings, bodyElm, fileType) { |
|
6866 var autocomplete = function (term) { |
|
6867 var linkTargets = LinkTargets.find(bodyElm); |
|
6868 var menuItems = createMenuItems(term, linkTargets, fileType, editorSettings); |
|
6869 ctrl.showAutoComplete(menuItems, term); |
|
6870 }; |
|
6871 ctrl.on('autocomplete', function () { |
|
6872 autocomplete(ctrl.value()); |
|
6873 }); |
|
6874 ctrl.on('selectitem', function (e) { |
|
6875 var linkDetails = e.value; |
|
6876 ctrl.value(linkDetails.url); |
|
6877 var title = getTitle(linkDetails); |
|
6878 if (fileType === 'image') { |
|
6879 ctrl.fire('change', { |
|
6880 meta: { |
|
6881 alt: title, |
|
6882 attach: linkDetails.attach |
|
6883 } |
|
6884 }); |
|
6885 } else { |
|
6886 ctrl.fire('change', { |
|
6887 meta: { |
|
6888 text: title, |
|
6889 attach: linkDetails.attach |
|
6890 } |
|
6891 }); |
|
6892 } |
|
6893 ctrl.focus(); |
|
6894 }); |
|
6895 ctrl.on('click', function (e) { |
|
6896 if (ctrl.value().length === 0 && e.target.nodeName === 'INPUT') { |
|
6897 autocomplete(''); |
|
6898 } |
|
6899 }); |
|
6900 ctrl.on('PostRender', function () { |
|
6901 ctrl.getRoot().on('submit', function (e) { |
|
6902 if (!e.isDefaultPrevented()) { |
|
6903 addToHistory(ctrl.value(), fileType); |
|
6904 } |
|
6905 }); |
|
6906 }); |
|
6907 }; |
|
6908 var statusToUiState = function (result) { |
|
6909 var status = result.status, message = result.message; |
|
6910 if (status === 'valid') { |
|
6911 return { |
|
6912 status: 'ok', |
|
6913 message: message |
|
6914 }; |
|
6915 } else if (status === 'unknown') { |
|
6916 return { |
|
6917 status: 'warn', |
|
6918 message: message |
|
6919 }; |
|
6920 } else if (status === 'invalid') { |
|
6921 return { |
|
6922 status: 'warn', |
|
6923 message: message |
|
6924 }; |
|
6925 } else { |
|
6926 return { |
|
6927 status: 'none', |
|
6928 message: '' |
|
6929 }; |
|
6930 } |
|
6931 }; |
|
6932 var setupLinkValidatorHandler = function (ctrl, editorSettings, fileType) { |
|
6933 var validatorHandler = editorSettings.filepicker_validator_handler; |
|
6934 if (validatorHandler) { |
|
6935 var validateUrl_1 = function (url) { |
|
6936 if (url.length === 0) { |
|
6937 ctrl.statusLevel('none'); |
|
6938 return; |
|
6939 } |
|
6940 validatorHandler({ |
|
6941 url: url, |
|
6942 type: fileType |
|
6943 }, function (result) { |
|
6944 var uiState = statusToUiState(result); |
|
6945 ctrl.statusMessage(uiState.message); |
|
6946 ctrl.statusLevel(uiState.status); |
|
6947 }); |
|
6948 }; |
|
6949 ctrl.state.on('change:value', function (e) { |
|
6950 validateUrl_1(e.value); |
|
6951 }); |
|
6952 } |
|
6953 }; |
|
6954 var FilePicker = ComboBox.extend({ |
|
6955 Statics: { clearHistory: clearHistory }, |
|
6956 init: function (settings) { |
|
6957 var self = this, editor = getActiveEditor(), editorSettings = editor.settings; |
|
6958 var actionCallback, fileBrowserCallback, fileBrowserCallbackTypes; |
|
6959 var fileType = settings.filetype; |
|
6960 settings.spellcheck = false; |
|
6961 fileBrowserCallbackTypes = editorSettings.file_picker_types || editorSettings.file_browser_callback_types; |
|
6962 if (fileBrowserCallbackTypes) { |
|
6963 fileBrowserCallbackTypes = global$4.makeMap(fileBrowserCallbackTypes, /[, ]/); |
|
6964 } |
|
6965 if (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType]) { |
|
6966 fileBrowserCallback = editorSettings.file_picker_callback; |
|
6967 if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) { |
|
6968 actionCallback = function () { |
|
6969 var meta = self.fire('beforecall').meta; |
|
6970 meta = global$4.extend({ filetype: fileType }, meta); |
|
6971 fileBrowserCallback.call(editor, function (value, meta) { |
|
6972 self.value(value).fire('change', { meta: meta }); |
|
6973 }, self.value(), meta); |
|
6974 }; |
|
6975 } else { |
|
6976 fileBrowserCallback = editorSettings.file_browser_callback; |
|
6977 if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) { |
|
6978 actionCallback = function () { |
|
6979 fileBrowserCallback(self.getEl('inp').id, self.value(), fileType, window); |
|
6980 }; |
|
6981 } |
|
6982 } |
|
6983 } |
|
6984 if (actionCallback) { |
|
6985 settings.icon = 'browse'; |
|
6986 settings.onaction = actionCallback; |
|
6987 } |
|
6988 self._super(settings); |
|
6989 self.classes.add('filepicker'); |
|
6990 setupAutoCompleteHandler(self, editorSettings, editor.getBody(), fileType); |
|
6991 setupLinkValidatorHandler(self, editorSettings, fileType); |
|
6992 } |
|
6993 }); |
|
6994 |
|
6995 var FitLayout = AbsoluteLayout.extend({ |
|
6996 recalc: function (container) { |
|
6997 var contLayoutRect = container.layoutRect(), paddingBox = container.paddingBox; |
|
6998 container.items().filter(':visible').each(function (ctrl) { |
|
6999 ctrl.layoutRect({ |
|
7000 x: paddingBox.left, |
|
7001 y: paddingBox.top, |
|
7002 w: contLayoutRect.innerW - paddingBox.right - paddingBox.left, |
|
7003 h: contLayoutRect.innerH - paddingBox.top - paddingBox.bottom |
|
7004 }); |
|
7005 if (ctrl.recalc) { |
|
7006 ctrl.recalc(); |
|
7007 } |
|
7008 }); |
|
7009 } |
|
7010 }); |
|
7011 |
|
7012 var FlexLayout = AbsoluteLayout.extend({ |
|
7013 recalc: function (container) { |
|
7014 var i, l, items, contLayoutRect, contPaddingBox, contSettings, align, pack, spacing, totalFlex, availableSpace, direction; |
|
7015 var ctrl, ctrlLayoutRect, ctrlSettings, flex; |
|
7016 var maxSizeItems = []; |
|
7017 var size, maxSize, ratio, rect, pos, maxAlignEndPos; |
|
7018 var sizeName, minSizeName, posName, maxSizeName, beforeName, innerSizeName, deltaSizeName, contentSizeName; |
|
7019 var alignAxisName, alignInnerSizeName, alignSizeName, alignMinSizeName, alignBeforeName, alignAfterName; |
|
7020 var alignDeltaSizeName, alignContentSizeName; |
|
7021 var max = Math.max, min = Math.min; |
|
7022 items = container.items().filter(':visible'); |
|
7023 contLayoutRect = container.layoutRect(); |
|
7024 contPaddingBox = container.paddingBox; |
|
7025 contSettings = container.settings; |
|
7026 direction = container.isRtl() ? contSettings.direction || 'row-reversed' : contSettings.direction; |
|
7027 align = contSettings.align; |
|
7028 pack = container.isRtl() ? contSettings.pack || 'end' : contSettings.pack; |
|
7029 spacing = contSettings.spacing || 0; |
|
7030 if (direction === 'row-reversed' || direction === 'column-reverse') { |
|
7031 items = items.set(items.toArray().reverse()); |
|
7032 direction = direction.split('-')[0]; |
|
7033 } |
|
7034 if (direction === 'column') { |
|
7035 posName = 'y'; |
|
7036 sizeName = 'h'; |
|
7037 minSizeName = 'minH'; |
|
7038 maxSizeName = 'maxH'; |
|
7039 innerSizeName = 'innerH'; |
|
7040 beforeName = 'top'; |
|
7041 deltaSizeName = 'deltaH'; |
|
7042 contentSizeName = 'contentH'; |
|
7043 alignBeforeName = 'left'; |
|
7044 alignSizeName = 'w'; |
|
7045 alignAxisName = 'x'; |
|
7046 alignInnerSizeName = 'innerW'; |
|
7047 alignMinSizeName = 'minW'; |
|
7048 alignAfterName = 'right'; |
|
7049 alignDeltaSizeName = 'deltaW'; |
|
7050 alignContentSizeName = 'contentW'; |
|
7051 } else { |
|
7052 posName = 'x'; |
|
7053 sizeName = 'w'; |
|
7054 minSizeName = 'minW'; |
|
7055 maxSizeName = 'maxW'; |
|
7056 innerSizeName = 'innerW'; |
|
7057 beforeName = 'left'; |
|
7058 deltaSizeName = 'deltaW'; |
|
7059 contentSizeName = 'contentW'; |
|
7060 alignBeforeName = 'top'; |
|
7061 alignSizeName = 'h'; |
|
7062 alignAxisName = 'y'; |
|
7063 alignInnerSizeName = 'innerH'; |
|
7064 alignMinSizeName = 'minH'; |
|
7065 alignAfterName = 'bottom'; |
|
7066 alignDeltaSizeName = 'deltaH'; |
|
7067 alignContentSizeName = 'contentH'; |
|
7068 } |
|
7069 availableSpace = contLayoutRect[innerSizeName] - contPaddingBox[beforeName] - contPaddingBox[beforeName]; |
|
7070 maxAlignEndPos = totalFlex = 0; |
|
7071 for (i = 0, l = items.length; i < l; i++) { |
|
7072 ctrl = items[i]; |
|
7073 ctrlLayoutRect = ctrl.layoutRect(); |
|
7074 ctrlSettings = ctrl.settings; |
|
7075 flex = ctrlSettings.flex; |
|
7076 availableSpace -= i < l - 1 ? spacing : 0; |
|
7077 if (flex > 0) { |
|
7078 totalFlex += flex; |
|
7079 if (ctrlLayoutRect[maxSizeName]) { |
|
7080 maxSizeItems.push(ctrl); |
|
7081 } |
|
7082 ctrlLayoutRect.flex = flex; |
|
7083 } |
|
7084 availableSpace -= ctrlLayoutRect[minSizeName]; |
|
7085 size = contPaddingBox[alignBeforeName] + ctrlLayoutRect[alignMinSizeName] + contPaddingBox[alignAfterName]; |
|
7086 if (size > maxAlignEndPos) { |
|
7087 maxAlignEndPos = size; |
|
7088 } |
|
7089 } |
|
7090 rect = {}; |
|
7091 if (availableSpace < 0) { |
|
7092 rect[minSizeName] = contLayoutRect[minSizeName] - availableSpace + contLayoutRect[deltaSizeName]; |
|
7093 } else { |
|
7094 rect[minSizeName] = contLayoutRect[innerSizeName] - availableSpace + contLayoutRect[deltaSizeName]; |
|
7095 } |
|
7096 rect[alignMinSizeName] = maxAlignEndPos + contLayoutRect[alignDeltaSizeName]; |
|
7097 rect[contentSizeName] = contLayoutRect[innerSizeName] - availableSpace; |
|
7098 rect[alignContentSizeName] = maxAlignEndPos; |
|
7099 rect.minW = min(rect.minW, contLayoutRect.maxW); |
|
7100 rect.minH = min(rect.minH, contLayoutRect.maxH); |
|
7101 rect.minW = max(rect.minW, contLayoutRect.startMinWidth); |
|
7102 rect.minH = max(rect.minH, contLayoutRect.startMinHeight); |
|
7103 if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) { |
|
7104 rect.w = rect.minW; |
|
7105 rect.h = rect.minH; |
|
7106 container.layoutRect(rect); |
|
7107 this.recalc(container); |
|
7108 if (container._lastRect === null) { |
|
7109 var parentCtrl = container.parent(); |
|
7110 if (parentCtrl) { |
|
7111 parentCtrl._lastRect = null; |
|
7112 parentCtrl.recalc(); |
|
7113 } |
|
7114 } |
|
7115 return; |
|
7116 } |
|
7117 ratio = availableSpace / totalFlex; |
|
7118 for (i = 0, l = maxSizeItems.length; i < l; i++) { |
|
7119 ctrl = maxSizeItems[i]; |
|
7120 ctrlLayoutRect = ctrl.layoutRect(); |
|
7121 maxSize = ctrlLayoutRect[maxSizeName]; |
|
7122 size = ctrlLayoutRect[minSizeName] + ctrlLayoutRect.flex * ratio; |
|
7123 if (size > maxSize) { |
|
7124 availableSpace -= ctrlLayoutRect[maxSizeName] - ctrlLayoutRect[minSizeName]; |
|
7125 totalFlex -= ctrlLayoutRect.flex; |
|
7126 ctrlLayoutRect.flex = 0; |
|
7127 ctrlLayoutRect.maxFlexSize = maxSize; |
|
7128 } else { |
|
7129 ctrlLayoutRect.maxFlexSize = 0; |
|
7130 } |
|
7131 } |
|
7132 ratio = availableSpace / totalFlex; |
|
7133 pos = contPaddingBox[beforeName]; |
|
7134 rect = {}; |
|
7135 if (totalFlex === 0) { |
|
7136 if (pack === 'end') { |
|
7137 pos = availableSpace + contPaddingBox[beforeName]; |
|
7138 } else if (pack === 'center') { |
|
7139 pos = Math.round(contLayoutRect[innerSizeName] / 2 - (contLayoutRect[innerSizeName] - availableSpace) / 2) + contPaddingBox[beforeName]; |
|
7140 if (pos < 0) { |
|
7141 pos = contPaddingBox[beforeName]; |
|
7142 } |
|
7143 } else if (pack === 'justify') { |
|
7144 pos = contPaddingBox[beforeName]; |
|
7145 spacing = Math.floor(availableSpace / (items.length - 1)); |
|
7146 } |
|
7147 } |
|
7148 rect[alignAxisName] = contPaddingBox[alignBeforeName]; |
|
7149 for (i = 0, l = items.length; i < l; i++) { |
|
7150 ctrl = items[i]; |
|
7151 ctrlLayoutRect = ctrl.layoutRect(); |
|
7152 size = ctrlLayoutRect.maxFlexSize || ctrlLayoutRect[minSizeName]; |
|
7153 if (align === 'center') { |
|
7154 rect[alignAxisName] = Math.round(contLayoutRect[alignInnerSizeName] / 2 - ctrlLayoutRect[alignSizeName] / 2); |
|
7155 } else if (align === 'stretch') { |
|
7156 rect[alignSizeName] = max(ctrlLayoutRect[alignMinSizeName] || 0, contLayoutRect[alignInnerSizeName] - contPaddingBox[alignBeforeName] - contPaddingBox[alignAfterName]); |
|
7157 rect[alignAxisName] = contPaddingBox[alignBeforeName]; |
|
7158 } else if (align === 'end') { |
|
7159 rect[alignAxisName] = contLayoutRect[alignInnerSizeName] - ctrlLayoutRect[alignSizeName] - contPaddingBox.top; |
|
7160 } |
|
7161 if (ctrlLayoutRect.flex > 0) { |
|
7162 size += ctrlLayoutRect.flex * ratio; |
|
7163 } |
|
7164 rect[sizeName] = size; |
|
7165 rect[posName] = pos; |
|
7166 ctrl.layoutRect(rect); |
|
7167 if (ctrl.recalc) { |
|
7168 ctrl.recalc(); |
|
7169 } |
|
7170 pos += size + spacing; |
|
7171 } |
|
7172 } |
|
7173 }); |
|
7174 |
|
7175 var FlowLayout = Layout$1.extend({ |
|
7176 Defaults: { |
|
7177 containerClass: 'flow-layout', |
|
7178 controlClass: 'flow-layout-item', |
|
7179 endClass: 'break' |
|
7180 }, |
|
7181 recalc: function (container) { |
|
7182 container.items().filter(':visible').each(function (ctrl) { |
|
7183 if (ctrl.recalc) { |
|
7184 ctrl.recalc(); |
|
7185 } |
|
7186 }); |
|
7187 }, |
|
7188 isNative: function () { |
|
7189 return true; |
|
7190 } |
|
7191 }); |
|
7192 |
|
7193 var descendant = function (scope, selector) { |
|
7194 return one(selector, scope); |
|
7195 }; |
|
7196 |
|
7197 var toggleFormat = function (editor, fmt) { |
|
7198 return function () { |
|
7199 editor.execCommand('mceToggleFormat', false, fmt); |
|
7200 }; |
|
7201 }; |
|
7202 var addFormatChangedListener = function (editor, name, changed) { |
|
7203 var handler = function (state) { |
|
7204 changed(state, name); |
|
7205 }; |
|
7206 if (editor.formatter) { |
|
7207 editor.formatter.formatChanged(name, handler); |
|
7208 } else { |
|
7209 editor.on('init', function () { |
|
7210 editor.formatter.formatChanged(name, handler); |
|
7211 }); |
|
7212 } |
|
7213 }; |
|
7214 var postRenderFormatToggle = function (editor, name) { |
|
7215 return function (e) { |
|
7216 addFormatChangedListener(editor, name, function (state) { |
|
7217 e.control.active(state); |
|
7218 }); |
|
7219 }; |
|
7220 }; |
|
7221 |
|
7222 var register = function (editor) { |
|
7223 var alignFormats = [ |
|
7224 'alignleft', |
|
7225 'aligncenter', |
|
7226 'alignright', |
|
7227 'alignjustify' |
|
7228 ]; |
|
7229 var defaultAlign = 'alignleft'; |
|
7230 var alignMenuItems = [ |
|
7231 { |
|
7232 text: 'Left', |
|
7233 icon: 'alignleft', |
|
7234 onclick: toggleFormat(editor, 'alignleft') |
|
7235 }, |
|
7236 { |
|
7237 text: 'Center', |
|
7238 icon: 'aligncenter', |
|
7239 onclick: toggleFormat(editor, 'aligncenter') |
|
7240 }, |
|
7241 { |
|
7242 text: 'Right', |
|
7243 icon: 'alignright', |
|
7244 onclick: toggleFormat(editor, 'alignright') |
|
7245 }, |
|
7246 { |
|
7247 text: 'Justify', |
|
7248 icon: 'alignjustify', |
|
7249 onclick: toggleFormat(editor, 'alignjustify') |
|
7250 } |
|
7251 ]; |
|
7252 editor.addMenuItem('align', { |
|
7253 text: 'Align', |
|
7254 menu: alignMenuItems |
|
7255 }); |
|
7256 editor.addButton('align', { |
|
7257 type: 'menubutton', |
|
7258 icon: defaultAlign, |
|
7259 menu: alignMenuItems, |
|
7260 onShowMenu: function (e) { |
|
7261 var menu = e.control.menu; |
|
7262 global$4.each(alignFormats, function (formatName, idx) { |
|
7263 menu.items().eq(idx).each(function (item) { |
|
7264 return item.active(editor.formatter.match(formatName)); |
|
7265 }); |
|
7266 }); |
|
7267 }, |
|
7268 onPostRender: function (e) { |
|
7269 var ctrl = e.control; |
|
7270 global$4.each(alignFormats, function (formatName, idx) { |
|
7271 addFormatChangedListener(editor, formatName, function (state) { |
|
7272 ctrl.icon(defaultAlign); |
|
7273 if (state) { |
|
7274 ctrl.icon(formatName); |
|
7275 } |
|
7276 }); |
|
7277 }); |
|
7278 } |
|
7279 }); |
|
7280 global$4.each({ |
|
7281 alignleft: [ |
|
7282 'Align left', |
|
7283 'JustifyLeft' |
|
7284 ], |
|
7285 aligncenter: [ |
|
7286 'Align center', |
|
7287 'JustifyCenter' |
|
7288 ], |
|
7289 alignright: [ |
|
7290 'Align right', |
|
7291 'JustifyRight' |
|
7292 ], |
|
7293 alignjustify: [ |
|
7294 'Justify', |
|
7295 'JustifyFull' |
|
7296 ], |
|
7297 alignnone: [ |
|
7298 'No alignment', |
|
7299 'JustifyNone' |
|
7300 ] |
|
7301 }, function (item, name) { |
|
7302 editor.addButton(name, { |
|
7303 active: false, |
|
7304 tooltip: item[0], |
|
7305 cmd: item[1], |
|
7306 onPostRender: postRenderFormatToggle(editor, name) |
|
7307 }); |
|
7308 }); |
|
7309 }; |
|
7310 var Align = { register: register }; |
|
7311 |
|
7312 var getFirstFont = function (fontFamily) { |
|
7313 return fontFamily ? fontFamily.split(',')[0] : ''; |
|
7314 }; |
|
7315 var findMatchingValue = function (items, fontFamily) { |
|
7316 var font = fontFamily ? fontFamily.toLowerCase() : ''; |
|
7317 var value; |
|
7318 global$4.each(items, function (item) { |
|
7319 if (item.value.toLowerCase() === font) { |
|
7320 value = item.value; |
|
7321 } |
|
7322 }); |
|
7323 global$4.each(items, function (item) { |
|
7324 if (!value && getFirstFont(item.value).toLowerCase() === getFirstFont(font).toLowerCase()) { |
|
7325 value = item.value; |
|
7326 } |
|
7327 }); |
|
7328 return value; |
|
7329 }; |
|
7330 var createFontNameListBoxChangeHandler = function (editor, items) { |
|
7331 return function () { |
|
7332 var self = this; |
|
7333 self.state.set('value', null); |
|
7334 editor.on('init nodeChange', function (e) { |
|
7335 var fontFamily = editor.queryCommandValue('FontName'); |
|
7336 var match = findMatchingValue(items, fontFamily); |
|
7337 self.value(match ? match : null); |
|
7338 if (!match && fontFamily) { |
|
7339 self.text(getFirstFont(fontFamily)); |
|
7340 } |
|
7341 }); |
|
7342 }; |
|
7343 }; |
|
7344 var createFormats = function (formats) { |
|
7345 formats = formats.replace(/;$/, '').split(';'); |
|
7346 var i = formats.length; |
|
7347 while (i--) { |
|
7348 formats[i] = formats[i].split('='); |
|
7349 } |
|
7350 return formats; |
|
7351 }; |
|
7352 var getFontItems = function (editor) { |
|
7353 var defaultFontsFormats = 'Andale Mono=andale mono,monospace;' + 'Arial=arial,helvetica,sans-serif;' + 'Arial Black=arial black,sans-serif;' + 'Book Antiqua=book antiqua,palatino,serif;' + 'Comic Sans MS=comic sans ms,sans-serif;' + 'Courier New=courier new,courier,monospace;' + 'Georgia=georgia,palatino,serif;' + 'Helvetica=helvetica,arial,sans-serif;' + 'Impact=impact,sans-serif;' + 'Symbol=symbol;' + 'Tahoma=tahoma,arial,helvetica,sans-serif;' + 'Terminal=terminal,monaco,monospace;' + 'Times New Roman=times new roman,times,serif;' + 'Trebuchet MS=trebuchet ms,geneva,sans-serif;' + 'Verdana=verdana,geneva,sans-serif;' + 'Webdings=webdings;' + 'Wingdings=wingdings,zapf dingbats'; |
|
7354 var fonts = createFormats(editor.settings.font_formats || defaultFontsFormats); |
|
7355 return global$4.map(fonts, function (font) { |
|
7356 return { |
|
7357 text: { raw: font[0] }, |
|
7358 value: font[1], |
|
7359 textStyle: font[1].indexOf('dings') === -1 ? 'font-family:' + font[1] : '' |
|
7360 }; |
|
7361 }); |
|
7362 }; |
|
7363 var registerButtons = function (editor) { |
|
7364 editor.addButton('fontselect', function () { |
|
7365 var items = getFontItems(editor); |
|
7366 return { |
|
7367 type: 'listbox', |
|
7368 text: 'Font Family', |
|
7369 tooltip: 'Font Family', |
|
7370 values: items, |
|
7371 fixedWidth: true, |
|
7372 onPostRender: createFontNameListBoxChangeHandler(editor, items), |
|
7373 onselect: function (e) { |
|
7374 if (e.control.settings.value) { |
|
7375 editor.execCommand('FontName', false, e.control.settings.value); |
|
7376 } |
|
7377 } |
|
7378 }; |
|
7379 }); |
|
7380 }; |
|
7381 var register$1 = function (editor) { |
|
7382 registerButtons(editor); |
|
7383 }; |
|
7384 var FontSelect = { register: register$1 }; |
|
7385 |
|
7386 var round = function (number, precision) { |
|
7387 var factor = Math.pow(10, precision); |
|
7388 return Math.round(number * factor) / factor; |
|
7389 }; |
|
7390 var toPt = function (fontSize, precision) { |
|
7391 if (/[0-9.]+px$/.test(fontSize)) { |
|
7392 return round(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt'; |
|
7393 } |
|
7394 return fontSize; |
|
7395 }; |
|
7396 var findMatchingValue$1 = function (items, pt, px) { |
|
7397 var value; |
|
7398 global$4.each(items, function (item) { |
|
7399 if (item.value === px) { |
|
7400 value = px; |
|
7401 } else if (item.value === pt) { |
|
7402 value = pt; |
|
7403 } |
|
7404 }); |
|
7405 return value; |
|
7406 }; |
|
7407 var createFontSizeListBoxChangeHandler = function (editor, items) { |
|
7408 return function () { |
|
7409 var self = this; |
|
7410 editor.on('init nodeChange', function (e) { |
|
7411 var px, pt, precision, match; |
|
7412 px = editor.queryCommandValue('FontSize'); |
|
7413 if (px) { |
|
7414 for (precision = 3; !match && precision >= 0; precision--) { |
|
7415 pt = toPt(px, precision); |
|
7416 match = findMatchingValue$1(items, pt, px); |
|
7417 } |
|
7418 } |
|
7419 self.value(match ? match : null); |
|
7420 if (!match) { |
|
7421 self.text(pt); |
|
7422 } |
|
7423 }); |
|
7424 }; |
|
7425 }; |
|
7426 var getFontSizeItems = function (editor) { |
|
7427 var defaultFontsizeFormats = '8pt 10pt 12pt 14pt 18pt 24pt 36pt'; |
|
7428 var fontsizeFormats = editor.settings.fontsize_formats || defaultFontsizeFormats; |
|
7429 return global$4.map(fontsizeFormats.split(' '), function (item) { |
|
7430 var text = item, value = item; |
|
7431 var values = item.split('='); |
|
7432 if (values.length > 1) { |
|
7433 text = values[0]; |
|
7434 value = values[1]; |
|
7435 } |
|
7436 return { |
|
7437 text: text, |
|
7438 value: value |
|
7439 }; |
|
7440 }); |
|
7441 }; |
|
7442 var registerButtons$1 = function (editor) { |
|
7443 editor.addButton('fontsizeselect', function () { |
|
7444 var items = getFontSizeItems(editor); |
|
7445 return { |
|
7446 type: 'listbox', |
|
7447 text: 'Font Sizes', |
|
7448 tooltip: 'Font Sizes', |
|
7449 values: items, |
|
7450 fixedWidth: true, |
|
7451 onPostRender: createFontSizeListBoxChangeHandler(editor, items), |
|
7452 onclick: function (e) { |
|
7453 if (e.control.settings.value) { |
|
7454 editor.execCommand('FontSize', false, e.control.settings.value); |
|
7455 } |
|
7456 } |
|
7457 }; |
|
7458 }); |
|
7459 }; |
|
7460 var register$2 = function (editor) { |
|
7461 registerButtons$1(editor); |
|
7462 }; |
|
7463 var FontSizeSelect = { register: register$2 }; |
|
7464 |
|
7465 var hideMenuObjects = function (editor, menu) { |
|
7466 var count = menu.length; |
|
7467 global$4.each(menu, function (item) { |
|
7468 if (item.menu) { |
|
7469 item.hidden = hideMenuObjects(editor, item.menu) === 0; |
|
7470 } |
|
7471 var formatName = item.format; |
|
7472 if (formatName) { |
|
7473 item.hidden = !editor.formatter.canApply(formatName); |
|
7474 } |
|
7475 if (item.hidden) { |
|
7476 count--; |
|
7477 } |
|
7478 }); |
|
7479 return count; |
|
7480 }; |
|
7481 var hideFormatMenuItems = function (editor, menu) { |
|
7482 var count = menu.items().length; |
|
7483 menu.items().each(function (item) { |
|
7484 if (item.menu) { |
|
7485 item.visible(hideFormatMenuItems(editor, item.menu) > 0); |
|
7486 } |
|
7487 if (!item.menu && item.settings.menu) { |
|
7488 item.visible(hideMenuObjects(editor, item.settings.menu) > 0); |
|
7489 } |
|
7490 var formatName = item.settings.format; |
|
7491 if (formatName) { |
|
7492 item.visible(editor.formatter.canApply(formatName)); |
|
7493 } |
|
7494 if (!item.visible()) { |
|
7495 count--; |
|
7496 } |
|
7497 }); |
|
7498 return count; |
|
7499 }; |
|
7500 var createFormatMenu = function (editor) { |
|
7501 var count = 0; |
|
7502 var newFormats = []; |
|
7503 var defaultStyleFormats = [ |
|
7504 { |
|
7505 title: 'Headings', |
|
7506 items: [ |
|
7507 { |
|
7508 title: 'Heading 1', |
|
7509 format: 'h1' |
|
7510 }, |
|
7511 { |
|
7512 title: 'Heading 2', |
|
7513 format: 'h2' |
|
7514 }, |
|
7515 { |
|
7516 title: 'Heading 3', |
|
7517 format: 'h3' |
|
7518 }, |
|
7519 { |
|
7520 title: 'Heading 4', |
|
7521 format: 'h4' |
|
7522 }, |
|
7523 { |
|
7524 title: 'Heading 5', |
|
7525 format: 'h5' |
|
7526 }, |
|
7527 { |
|
7528 title: 'Heading 6', |
|
7529 format: 'h6' |
|
7530 } |
|
7531 ] |
|
7532 }, |
|
7533 { |
|
7534 title: 'Inline', |
|
7535 items: [ |
|
7536 { |
|
7537 title: 'Bold', |
|
7538 icon: 'bold', |
|
7539 format: 'bold' |
|
7540 }, |
|
7541 { |
|
7542 title: 'Italic', |
|
7543 icon: 'italic', |
|
7544 format: 'italic' |
|
7545 }, |
|
7546 { |
|
7547 title: 'Underline', |
|
7548 icon: 'underline', |
|
7549 format: 'underline' |
|
7550 }, |
|
7551 { |
|
7552 title: 'Strikethrough', |
|
7553 icon: 'strikethrough', |
|
7554 format: 'strikethrough' |
|
7555 }, |
|
7556 { |
|
7557 title: 'Superscript', |
|
7558 icon: 'superscript', |
|
7559 format: 'superscript' |
|
7560 }, |
|
7561 { |
|
7562 title: 'Subscript', |
|
7563 icon: 'subscript', |
|
7564 format: 'subscript' |
|
7565 }, |
|
7566 { |
|
7567 title: 'Code', |
|
7568 icon: 'code', |
|
7569 format: 'code' |
|
7570 } |
|
7571 ] |
|
7572 }, |
|
7573 { |
|
7574 title: 'Blocks', |
|
7575 items: [ |
|
7576 { |
|
7577 title: 'Paragraph', |
|
7578 format: 'p' |
|
7579 }, |
|
7580 { |
|
7581 title: 'Blockquote', |
|
7582 format: 'blockquote' |
|
7583 }, |
|
7584 { |
|
7585 title: 'Div', |
|
7586 format: 'div' |
|
7587 }, |
|
7588 { |
|
7589 title: 'Pre', |
|
7590 format: 'pre' |
|
7591 } |
|
7592 ] |
|
7593 }, |
|
7594 { |
|
7595 title: 'Alignment', |
|
7596 items: [ |
|
7597 { |
|
7598 title: 'Left', |
|
7599 icon: 'alignleft', |
|
7600 format: 'alignleft' |
|
7601 }, |
|
7602 { |
|
7603 title: 'Center', |
|
7604 icon: 'aligncenter', |
|
7605 format: 'aligncenter' |
|
7606 }, |
|
7607 { |
|
7608 title: 'Right', |
|
7609 icon: 'alignright', |
|
7610 format: 'alignright' |
|
7611 }, |
|
7612 { |
|
7613 title: 'Justify', |
|
7614 icon: 'alignjustify', |
|
7615 format: 'alignjustify' |
|
7616 } |
|
7617 ] |
|
7618 } |
|
7619 ]; |
|
7620 var createMenu = function (formats) { |
|
7621 var menu = []; |
|
7622 if (!formats) { |
|
7623 return; |
|
7624 } |
|
7625 global$4.each(formats, function (format) { |
|
7626 var menuItem = { |
|
7627 text: format.title, |
|
7628 icon: format.icon |
|
7629 }; |
|
7630 if (format.items) { |
|
7631 menuItem.menu = createMenu(format.items); |
|
7632 } else { |
|
7633 var formatName = format.format || 'custom' + count++; |
|
7634 if (!format.format) { |
|
7635 format.name = formatName; |
|
7636 newFormats.push(format); |
|
7637 } |
|
7638 menuItem.format = formatName; |
|
7639 menuItem.cmd = format.cmd; |
|
7640 } |
|
7641 menu.push(menuItem); |
|
7642 }); |
|
7643 return menu; |
|
7644 }; |
|
7645 var createStylesMenu = function () { |
|
7646 var menu; |
|
7647 if (editor.settings.style_formats_merge) { |
|
7648 if (editor.settings.style_formats) { |
|
7649 menu = createMenu(defaultStyleFormats.concat(editor.settings.style_formats)); |
|
7650 } else { |
|
7651 menu = createMenu(defaultStyleFormats); |
|
7652 } |
|
7653 } else { |
|
7654 menu = createMenu(editor.settings.style_formats || defaultStyleFormats); |
|
7655 } |
|
7656 return menu; |
|
7657 }; |
|
7658 editor.on('init', function () { |
|
7659 global$4.each(newFormats, function (format) { |
|
7660 editor.formatter.register(format.name, format); |
|
7661 }); |
|
7662 }); |
|
7663 return { |
|
7664 type: 'menu', |
|
7665 items: createStylesMenu(), |
|
7666 onPostRender: function (e) { |
|
7667 editor.fire('renderFormatsMenu', { control: e.control }); |
|
7668 }, |
|
7669 itemDefaults: { |
|
7670 preview: true, |
|
7671 textStyle: function () { |
|
7672 if (this.settings.format) { |
|
7673 return editor.formatter.getCssText(this.settings.format); |
|
7674 } |
|
7675 }, |
|
7676 onPostRender: function () { |
|
7677 var self = this; |
|
7678 self.parent().on('show', function () { |
|
7679 var formatName, command; |
|
7680 formatName = self.settings.format; |
|
7681 if (formatName) { |
|
7682 self.disabled(!editor.formatter.canApply(formatName)); |
|
7683 self.active(editor.formatter.match(formatName)); |
|
7684 } |
|
7685 command = self.settings.cmd; |
|
7686 if (command) { |
|
7687 self.active(editor.queryCommandState(command)); |
|
7688 } |
|
7689 }); |
|
7690 }, |
|
7691 onclick: function () { |
|
7692 if (this.settings.format) { |
|
7693 toggleFormat(editor, this.settings.format)(); |
|
7694 } |
|
7695 if (this.settings.cmd) { |
|
7696 editor.execCommand(this.settings.cmd); |
|
7697 } |
|
7698 } |
|
7699 } |
|
7700 }; |
|
7701 }; |
|
7702 var registerMenuItems = function (editor, formatMenu) { |
|
7703 editor.addMenuItem('formats', { |
|
7704 text: 'Formats', |
|
7705 menu: formatMenu |
|
7706 }); |
|
7707 }; |
|
7708 var registerButtons$2 = function (editor, formatMenu) { |
|
7709 editor.addButton('styleselect', { |
|
7710 type: 'menubutton', |
|
7711 text: 'Formats', |
|
7712 menu: formatMenu, |
|
7713 onShowMenu: function () { |
|
7714 if (editor.settings.style_formats_autohide) { |
|
7715 hideFormatMenuItems(editor, this.menu); |
|
7716 } |
|
7717 } |
|
7718 }); |
|
7719 }; |
|
7720 var register$3 = function (editor) { |
|
7721 var formatMenu = createFormatMenu(editor); |
|
7722 registerMenuItems(editor, formatMenu); |
|
7723 registerButtons$2(editor, formatMenu); |
|
7724 }; |
|
7725 var Formats = { register: register$3 }; |
|
7726 |
|
7727 var defaultBlocks = 'Paragraph=p;' + 'Heading 1=h1;' + 'Heading 2=h2;' + 'Heading 3=h3;' + 'Heading 4=h4;' + 'Heading 5=h5;' + 'Heading 6=h6;' + 'Preformatted=pre'; |
|
7728 var createFormats$1 = function (formats) { |
|
7729 formats = formats.replace(/;$/, '').split(';'); |
|
7730 var i = formats.length; |
|
7731 while (i--) { |
|
7732 formats[i] = formats[i].split('='); |
|
7733 } |
|
7734 return formats; |
|
7735 }; |
|
7736 var createListBoxChangeHandler = function (editor, items, formatName) { |
|
7737 return function () { |
|
7738 var self = this; |
|
7739 editor.on('nodeChange', function (e) { |
|
7740 var formatter = editor.formatter; |
|
7741 var value = null; |
|
7742 global$4.each(e.parents, function (node) { |
|
7743 global$4.each(items, function (item) { |
|
7744 if (formatName) { |
|
7745 if (formatter.matchNode(node, formatName, { value: item.value })) { |
|
7746 value = item.value; |
|
7747 } |
|
7748 } else { |
|
7749 if (formatter.matchNode(node, item.value)) { |
|
7750 value = item.value; |
|
7751 } |
|
7752 } |
|
7753 if (value) { |
|
7754 return false; |
|
7755 } |
|
7756 }); |
|
7757 if (value) { |
|
7758 return false; |
|
7759 } |
|
7760 }); |
|
7761 self.value(value); |
|
7762 }); |
|
7763 }; |
|
7764 }; |
|
7765 var lazyFormatSelectBoxItems = function (editor, blocks) { |
|
7766 return function () { |
|
7767 var items = []; |
|
7768 global$4.each(blocks, function (block) { |
|
7769 items.push({ |
|
7770 text: block[0], |
|
7771 value: block[1], |
|
7772 textStyle: function () { |
|
7773 return editor.formatter.getCssText(block[1]); |
|
7774 } |
|
7775 }); |
|
7776 }); |
|
7777 return { |
|
7778 type: 'listbox', |
|
7779 text: blocks[0][0], |
|
7780 values: items, |
|
7781 fixedWidth: true, |
|
7782 onselect: function (e) { |
|
7783 if (e.control) { |
|
7784 var fmt = e.control.value(); |
|
7785 toggleFormat(editor, fmt)(); |
|
7786 } |
|
7787 }, |
|
7788 onPostRender: createListBoxChangeHandler(editor, items) |
|
7789 }; |
|
7790 }; |
|
7791 }; |
|
7792 var buildMenuItems = function (editor, blocks) { |
|
7793 return global$4.map(blocks, function (block) { |
|
7794 return { |
|
7795 text: block[0], |
|
7796 onclick: toggleFormat(editor, block[1]), |
|
7797 textStyle: function () { |
|
7798 return editor.formatter.getCssText(block[1]); |
|
7799 } |
|
7800 }; |
|
7801 }); |
|
7802 }; |
|
7803 var register$4 = function (editor) { |
|
7804 var blocks = createFormats$1(editor.settings.block_formats || defaultBlocks); |
|
7805 editor.addMenuItem('blockformats', { |
|
7806 text: 'Blocks', |
|
7807 menu: buildMenuItems(editor, blocks) |
|
7808 }); |
|
7809 editor.addButton('formatselect', lazyFormatSelectBoxItems(editor, blocks)); |
|
7810 }; |
|
7811 var FormatSelect = { register: register$4 }; |
|
7812 |
|
7813 var createCustomMenuItems = function (editor, names) { |
|
7814 var items, nameList; |
|
7815 if (typeof names === 'string') { |
|
7816 nameList = names.split(' '); |
|
7817 } else if (global$4.isArray(names)) { |
|
7818 return flatten$1(global$4.map(names, function (names) { |
|
7819 return createCustomMenuItems(editor, names); |
|
7820 })); |
|
7821 } |
|
7822 items = global$4.grep(nameList, function (name) { |
|
7823 return name === '|' || name in editor.menuItems; |
|
7824 }); |
|
7825 return global$4.map(items, function (name) { |
|
7826 return name === '|' ? { text: '-' } : editor.menuItems[name]; |
|
7827 }); |
|
7828 }; |
|
7829 var isSeparator = function (menuItem) { |
|
7830 return menuItem && menuItem.text === '-'; |
|
7831 }; |
|
7832 var trimMenuItems = function (menuItems) { |
|
7833 var menuItems2 = filter(menuItems, function (menuItem, i, menuItems) { |
|
7834 return !isSeparator(menuItem) || !isSeparator(menuItems[i - 1]); |
|
7835 }); |
|
7836 return filter(menuItems2, function (menuItem, i, menuItems) { |
|
7837 return !isSeparator(menuItem) || i > 0 && i < menuItems.length - 1; |
|
7838 }); |
|
7839 }; |
|
7840 var createContextMenuItems = function (editor, context) { |
|
7841 var outputMenuItems = [{ text: '-' }]; |
|
7842 var menuItems = global$4.grep(editor.menuItems, function (menuItem) { |
|
7843 return menuItem.context === context; |
|
7844 }); |
|
7845 global$4.each(menuItems, function (menuItem) { |
|
7846 if (menuItem.separator === 'before') { |
|
7847 outputMenuItems.push({ text: '|' }); |
|
7848 } |
|
7849 if (menuItem.prependToContext) { |
|
7850 outputMenuItems.unshift(menuItem); |
|
7851 } else { |
|
7852 outputMenuItems.push(menuItem); |
|
7853 } |
|
7854 if (menuItem.separator === 'after') { |
|
7855 outputMenuItems.push({ text: '|' }); |
|
7856 } |
|
7857 }); |
|
7858 return outputMenuItems; |
|
7859 }; |
|
7860 var createInsertMenu = function (editor) { |
|
7861 var insertButtonItems = editor.settings.insert_button_items; |
|
7862 if (insertButtonItems) { |
|
7863 return trimMenuItems(createCustomMenuItems(editor, insertButtonItems)); |
|
7864 } else { |
|
7865 return trimMenuItems(createContextMenuItems(editor, 'insert')); |
|
7866 } |
|
7867 }; |
|
7868 var registerButtons$3 = function (editor) { |
|
7869 editor.addButton('insert', { |
|
7870 type: 'menubutton', |
|
7871 icon: 'insert', |
|
7872 menu: [], |
|
7873 oncreatemenu: function () { |
|
7874 this.menu.add(createInsertMenu(editor)); |
|
7875 this.menu.renderNew(); |
|
7876 } |
|
7877 }); |
|
7878 }; |
|
7879 var register$5 = function (editor) { |
|
7880 registerButtons$3(editor); |
|
7881 }; |
|
7882 var InsertButton = { register: register$5 }; |
|
7883 |
|
7884 var registerFormatButtons = function (editor) { |
|
7885 global$4.each({ |
|
7886 bold: 'Bold', |
|
7887 italic: 'Italic', |
|
7888 underline: 'Underline', |
|
7889 strikethrough: 'Strikethrough', |
|
7890 subscript: 'Subscript', |
|
7891 superscript: 'Superscript' |
|
7892 }, function (text, name) { |
|
7893 editor.addButton(name, { |
|
7894 active: false, |
|
7895 tooltip: text, |
|
7896 onPostRender: postRenderFormatToggle(editor, name), |
|
7897 onclick: toggleFormat(editor, name) |
|
7898 }); |
|
7899 }); |
|
7900 }; |
|
7901 var registerCommandButtons = function (editor) { |
|
7902 global$4.each({ |
|
7903 outdent: [ |
|
7904 'Decrease indent', |
|
7905 'Outdent' |
|
7906 ], |
|
7907 indent: [ |
|
7908 'Increase indent', |
|
7909 'Indent' |
|
7910 ], |
|
7911 cut: [ |
|
7912 'Cut', |
|
7913 'Cut' |
|
7914 ], |
|
7915 copy: [ |
|
7916 'Copy', |
|
7917 'Copy' |
|
7918 ], |
|
7919 paste: [ |
|
7920 'Paste', |
|
7921 'Paste' |
|
7922 ], |
|
7923 help: [ |
|
7924 'Help', |
|
7925 'mceHelp' |
|
7926 ], |
|
7927 selectall: [ |
|
7928 'Select all', |
|
7929 'SelectAll' |
|
7930 ], |
|
7931 visualaid: [ |
|
7932 'Visual aids', |
|
7933 'mceToggleVisualAid' |
|
7934 ], |
|
7935 newdocument: [ |
|
7936 'New document', |
|
7937 'mceNewDocument' |
|
7938 ], |
|
7939 removeformat: [ |
|
7940 'Clear formatting', |
|
7941 'RemoveFormat' |
|
7942 ], |
|
7943 remove: [ |
|
7944 'Remove', |
|
7945 'Delete' |
|
7946 ] |
|
7947 }, function (item, name) { |
|
7948 editor.addButton(name, { |
|
7949 tooltip: item[0], |
|
7950 cmd: item[1] |
|
7951 }); |
|
7952 }); |
|
7953 }; |
|
7954 var registerCommandToggleButtons = function (editor) { |
|
7955 global$4.each({ |
|
7956 blockquote: [ |
|
7957 'Blockquote', |
|
7958 'mceBlockQuote' |
|
7959 ], |
|
7960 subscript: [ |
|
7961 'Subscript', |
|
7962 'Subscript' |
|
7963 ], |
|
7964 superscript: [ |
|
7965 'Superscript', |
|
7966 'Superscript' |
|
7967 ] |
|
7968 }, function (item, name) { |
|
7969 editor.addButton(name, { |
|
7970 active: false, |
|
7971 tooltip: item[0], |
|
7972 cmd: item[1], |
|
7973 onPostRender: postRenderFormatToggle(editor, name) |
|
7974 }); |
|
7975 }); |
|
7976 }; |
|
7977 var registerButtons$4 = function (editor) { |
|
7978 registerFormatButtons(editor); |
|
7979 registerCommandButtons(editor); |
|
7980 registerCommandToggleButtons(editor); |
|
7981 }; |
|
7982 var registerMenuItems$1 = function (editor) { |
|
7983 global$4.each({ |
|
7984 bold: [ |
|
7985 'Bold', |
|
7986 'Bold', |
|
7987 'Meta+B' |
|
7988 ], |
|
7989 italic: [ |
|
7990 'Italic', |
|
7991 'Italic', |
|
7992 'Meta+I' |
|
7993 ], |
|
7994 underline: [ |
|
7995 'Underline', |
|
7996 'Underline', |
|
7997 'Meta+U' |
|
7998 ], |
|
7999 strikethrough: [ |
|
8000 'Strikethrough', |
|
8001 'Strikethrough' |
|
8002 ], |
|
8003 subscript: [ |
|
8004 'Subscript', |
|
8005 'Subscript' |
|
8006 ], |
|
8007 superscript: [ |
|
8008 'Superscript', |
|
8009 'Superscript' |
|
8010 ], |
|
8011 removeformat: [ |
|
8012 'Clear formatting', |
|
8013 'RemoveFormat' |
|
8014 ], |
|
8015 newdocument: [ |
|
8016 'New document', |
|
8017 'mceNewDocument' |
|
8018 ], |
|
8019 cut: [ |
|
8020 'Cut', |
|
8021 'Cut', |
|
8022 'Meta+X' |
|
8023 ], |
|
8024 copy: [ |
|
8025 'Copy', |
|
8026 'Copy', |
|
8027 'Meta+C' |
|
8028 ], |
|
8029 paste: [ |
|
8030 'Paste', |
|
8031 'Paste', |
|
8032 'Meta+V' |
|
8033 ], |
|
8034 selectall: [ |
|
8035 'Select all', |
|
8036 'SelectAll', |
|
8037 'Meta+A' |
|
8038 ] |
|
8039 }, function (item, name) { |
|
8040 editor.addMenuItem(name, { |
|
8041 text: item[0], |
|
8042 icon: name, |
|
8043 shortcut: item[2], |
|
8044 cmd: item[1] |
|
8045 }); |
|
8046 }); |
|
8047 editor.addMenuItem('codeformat', { |
|
8048 text: 'Code', |
|
8049 icon: 'code', |
|
8050 onclick: toggleFormat(editor, 'code') |
|
8051 }); |
|
8052 }; |
|
8053 var register$6 = function (editor) { |
|
8054 registerButtons$4(editor); |
|
8055 registerMenuItems$1(editor); |
|
8056 }; |
|
8057 var SimpleControls = { register: register$6 }; |
|
8058 |
|
8059 var toggleUndoRedoState = function (editor, type) { |
|
8060 return function () { |
|
8061 var self = this; |
|
8062 var checkState = function () { |
|
8063 var typeFn = type === 'redo' ? 'hasRedo' : 'hasUndo'; |
|
8064 return editor.undoManager ? editor.undoManager[typeFn]() : false; |
|
8065 }; |
|
8066 self.disabled(!checkState()); |
|
8067 editor.on('Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', function () { |
|
8068 self.disabled(editor.readonly || !checkState()); |
|
8069 }); |
|
8070 }; |
|
8071 }; |
|
8072 var registerMenuItems$2 = function (editor) { |
|
8073 editor.addMenuItem('undo', { |
|
8074 text: 'Undo', |
|
8075 icon: 'undo', |
|
8076 shortcut: 'Meta+Z', |
|
8077 onPostRender: toggleUndoRedoState(editor, 'undo'), |
|
8078 cmd: 'undo' |
|
8079 }); |
|
8080 editor.addMenuItem('redo', { |
|
8081 text: 'Redo', |
|
8082 icon: 'redo', |
|
8083 shortcut: 'Meta+Y', |
|
8084 onPostRender: toggleUndoRedoState(editor, 'redo'), |
|
8085 cmd: 'redo' |
|
8086 }); |
|
8087 }; |
|
8088 var registerButtons$5 = function (editor) { |
|
8089 editor.addButton('undo', { |
|
8090 tooltip: 'Undo', |
|
8091 onPostRender: toggleUndoRedoState(editor, 'undo'), |
|
8092 cmd: 'undo' |
|
8093 }); |
|
8094 editor.addButton('redo', { |
|
8095 tooltip: 'Redo', |
|
8096 onPostRender: toggleUndoRedoState(editor, 'redo'), |
|
8097 cmd: 'redo' |
|
8098 }); |
|
8099 }; |
|
8100 var register$7 = function (editor) { |
|
8101 registerMenuItems$2(editor); |
|
8102 registerButtons$5(editor); |
|
8103 }; |
|
8104 var UndoRedo = { register: register$7 }; |
|
8105 |
|
8106 var toggleVisualAidState = function (editor) { |
|
8107 return function () { |
|
8108 var self = this; |
|
8109 editor.on('VisualAid', function (e) { |
|
8110 self.active(e.hasVisual); |
|
8111 }); |
|
8112 self.active(editor.hasVisual); |
|
8113 }; |
|
8114 }; |
|
8115 var registerMenuItems$3 = function (editor) { |
|
8116 editor.addMenuItem('visualaid', { |
|
8117 text: 'Visual aids', |
|
8118 selectable: true, |
|
8119 onPostRender: toggleVisualAidState(editor), |
|
8120 cmd: 'mceToggleVisualAid' |
|
8121 }); |
|
8122 }; |
|
8123 var register$8 = function (editor) { |
|
8124 registerMenuItems$3(editor); |
|
8125 }; |
|
8126 var VisualAid = { register: register$8 }; |
|
8127 |
|
8128 var setupEnvironment = function () { |
|
8129 Widget.tooltips = !global$1.iOS; |
|
8130 Control$1.translate = function (text) { |
|
8131 return global$5.translate(text); |
|
8132 }; |
|
8133 }; |
|
8134 var setupUiContainer = function (editor) { |
|
8135 if (editor.settings.ui_container) { |
|
8136 global$1.container = descendant(Element.fromDom(domGlobals.document.body), editor.settings.ui_container).fold(constant(null), function (elm) { |
|
8137 return elm.dom(); |
|
8138 }); |
|
8139 } |
|
8140 }; |
|
8141 var setupRtlMode = function (editor) { |
|
8142 if (editor.rtl) { |
|
8143 Control$1.rtl = true; |
|
8144 } |
|
8145 }; |
|
8146 var setupHideFloatPanels = function (editor) { |
|
8147 editor.on('mousedown progressstate', function () { |
|
8148 FloatPanel.hideAll(); |
|
8149 }); |
|
8150 }; |
|
8151 var setup = function (editor) { |
|
8152 setupRtlMode(editor); |
|
8153 setupHideFloatPanels(editor); |
|
8154 setupUiContainer(editor); |
|
8155 setupEnvironment(); |
|
8156 FormatSelect.register(editor); |
|
8157 Align.register(editor); |
|
8158 SimpleControls.register(editor); |
|
8159 UndoRedo.register(editor); |
|
8160 FontSizeSelect.register(editor); |
|
8161 FontSelect.register(editor); |
|
8162 Formats.register(editor); |
|
8163 VisualAid.register(editor); |
|
8164 InsertButton.register(editor); |
|
8165 }; |
|
8166 var FormatControls = { setup: setup }; |
|
8167 |
|
8168 var GridLayout = AbsoluteLayout.extend({ |
|
8169 recalc: function (container) { |
|
8170 var settings, rows, cols, items, contLayoutRect, width, height, rect, ctrlLayoutRect, ctrl, x, y, posX, posY, ctrlSettings, contPaddingBox, align, spacingH, spacingV, alignH, alignV, maxX, maxY; |
|
8171 var colWidths = []; |
|
8172 var rowHeights = []; |
|
8173 var ctrlMinWidth, ctrlMinHeight, availableWidth, availableHeight, reverseRows, idx; |
|
8174 settings = container.settings; |
|
8175 items = container.items().filter(':visible'); |
|
8176 contLayoutRect = container.layoutRect(); |
|
8177 cols = settings.columns || Math.ceil(Math.sqrt(items.length)); |
|
8178 rows = Math.ceil(items.length / cols); |
|
8179 spacingH = settings.spacingH || settings.spacing || 0; |
|
8180 spacingV = settings.spacingV || settings.spacing || 0; |
|
8181 alignH = settings.alignH || settings.align; |
|
8182 alignV = settings.alignV || settings.align; |
|
8183 contPaddingBox = container.paddingBox; |
|
8184 reverseRows = 'reverseRows' in settings ? settings.reverseRows : container.isRtl(); |
|
8185 if (alignH && typeof alignH === 'string') { |
|
8186 alignH = [alignH]; |
|
8187 } |
|
8188 if (alignV && typeof alignV === 'string') { |
|
8189 alignV = [alignV]; |
|
8190 } |
|
8191 for (x = 0; x < cols; x++) { |
|
8192 colWidths.push(0); |
|
8193 } |
|
8194 for (y = 0; y < rows; y++) { |
|
8195 rowHeights.push(0); |
|
8196 } |
|
8197 for (y = 0; y < rows; y++) { |
|
8198 for (x = 0; x < cols; x++) { |
|
8199 ctrl = items[y * cols + x]; |
|
8200 if (!ctrl) { |
|
8201 break; |
|
8202 } |
|
8203 ctrlLayoutRect = ctrl.layoutRect(); |
|
8204 ctrlMinWidth = ctrlLayoutRect.minW; |
|
8205 ctrlMinHeight = ctrlLayoutRect.minH; |
|
8206 colWidths[x] = ctrlMinWidth > colWidths[x] ? ctrlMinWidth : colWidths[x]; |
|
8207 rowHeights[y] = ctrlMinHeight > rowHeights[y] ? ctrlMinHeight : rowHeights[y]; |
|
8208 } |
|
8209 } |
|
8210 availableWidth = contLayoutRect.innerW - contPaddingBox.left - contPaddingBox.right; |
|
8211 for (maxX = 0, x = 0; x < cols; x++) { |
|
8212 maxX += colWidths[x] + (x > 0 ? spacingH : 0); |
|
8213 availableWidth -= (x > 0 ? spacingH : 0) + colWidths[x]; |
|
8214 } |
|
8215 availableHeight = contLayoutRect.innerH - contPaddingBox.top - contPaddingBox.bottom; |
|
8216 for (maxY = 0, y = 0; y < rows; y++) { |
|
8217 maxY += rowHeights[y] + (y > 0 ? spacingV : 0); |
|
8218 availableHeight -= (y > 0 ? spacingV : 0) + rowHeights[y]; |
|
8219 } |
|
8220 maxX += contPaddingBox.left + contPaddingBox.right; |
|
8221 maxY += contPaddingBox.top + contPaddingBox.bottom; |
|
8222 rect = {}; |
|
8223 rect.minW = maxX + (contLayoutRect.w - contLayoutRect.innerW); |
|
8224 rect.minH = maxY + (contLayoutRect.h - contLayoutRect.innerH); |
|
8225 rect.contentW = rect.minW - contLayoutRect.deltaW; |
|
8226 rect.contentH = rect.minH - contLayoutRect.deltaH; |
|
8227 rect.minW = Math.min(rect.minW, contLayoutRect.maxW); |
|
8228 rect.minH = Math.min(rect.minH, contLayoutRect.maxH); |
|
8229 rect.minW = Math.max(rect.minW, contLayoutRect.startMinWidth); |
|
8230 rect.minH = Math.max(rect.minH, contLayoutRect.startMinHeight); |
|
8231 if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) { |
|
8232 rect.w = rect.minW; |
|
8233 rect.h = rect.minH; |
|
8234 container.layoutRect(rect); |
|
8235 this.recalc(container); |
|
8236 if (container._lastRect === null) { |
|
8237 var parentCtrl = container.parent(); |
|
8238 if (parentCtrl) { |
|
8239 parentCtrl._lastRect = null; |
|
8240 parentCtrl.recalc(); |
|
8241 } |
|
8242 } |
|
8243 return; |
|
8244 } |
|
8245 if (contLayoutRect.autoResize) { |
|
8246 rect = container.layoutRect(rect); |
|
8247 rect.contentW = rect.minW - contLayoutRect.deltaW; |
|
8248 rect.contentH = rect.minH - contLayoutRect.deltaH; |
|
8249 } |
|
8250 var flexV; |
|
8251 if (settings.packV === 'start') { |
|
8252 flexV = 0; |
|
8253 } else { |
|
8254 flexV = availableHeight > 0 ? Math.floor(availableHeight / rows) : 0; |
|
8255 } |
|
8256 var totalFlex = 0; |
|
8257 var flexWidths = settings.flexWidths; |
|
8258 if (flexWidths) { |
|
8259 for (x = 0; x < flexWidths.length; x++) { |
|
8260 totalFlex += flexWidths[x]; |
|
8261 } |
|
8262 } else { |
|
8263 totalFlex = cols; |
|
8264 } |
|
8265 var ratio = availableWidth / totalFlex; |
|
8266 for (x = 0; x < cols; x++) { |
|
8267 colWidths[x] += flexWidths ? flexWidths[x] * ratio : ratio; |
|
8268 } |
|
8269 posY = contPaddingBox.top; |
|
8270 for (y = 0; y < rows; y++) { |
|
8271 posX = contPaddingBox.left; |
|
8272 height = rowHeights[y] + flexV; |
|
8273 for (x = 0; x < cols; x++) { |
|
8274 if (reverseRows) { |
|
8275 idx = y * cols + cols - 1 - x; |
|
8276 } else { |
|
8277 idx = y * cols + x; |
|
8278 } |
|
8279 ctrl = items[idx]; |
|
8280 if (!ctrl) { |
|
8281 break; |
|
8282 } |
|
8283 ctrlSettings = ctrl.settings; |
|
8284 ctrlLayoutRect = ctrl.layoutRect(); |
|
8285 width = Math.max(colWidths[x], ctrlLayoutRect.startMinWidth); |
|
8286 ctrlLayoutRect.x = posX; |
|
8287 ctrlLayoutRect.y = posY; |
|
8288 align = ctrlSettings.alignH || (alignH ? alignH[x] || alignH[0] : null); |
|
8289 if (align === 'center') { |
|
8290 ctrlLayoutRect.x = posX + width / 2 - ctrlLayoutRect.w / 2; |
|
8291 } else if (align === 'right') { |
|
8292 ctrlLayoutRect.x = posX + width - ctrlLayoutRect.w; |
|
8293 } else if (align === 'stretch') { |
|
8294 ctrlLayoutRect.w = width; |
|
8295 } |
|
8296 align = ctrlSettings.alignV || (alignV ? alignV[x] || alignV[0] : null); |
|
8297 if (align === 'center') { |
|
8298 ctrlLayoutRect.y = posY + height / 2 - ctrlLayoutRect.h / 2; |
|
8299 } else if (align === 'bottom') { |
|
8300 ctrlLayoutRect.y = posY + height - ctrlLayoutRect.h; |
|
8301 } else if (align === 'stretch') { |
|
8302 ctrlLayoutRect.h = height; |
|
8303 } |
|
8304 ctrl.layoutRect(ctrlLayoutRect); |
|
8305 posX += width + spacingH; |
|
8306 if (ctrl.recalc) { |
|
8307 ctrl.recalc(); |
|
8308 } |
|
8309 } |
|
8310 posY += height + spacingV; |
|
8311 } |
|
8312 } |
|
8313 }); |
|
8314 |
|
8315 var Iframe = Widget.extend({ |
|
8316 renderHtml: function () { |
|
8317 var self = this; |
|
8318 self.classes.add('iframe'); |
|
8319 self.canFocus = false; |
|
8320 return '<iframe id="' + self._id + '" class="' + self.classes + '" tabindex="-1" src="' + (self.settings.url || 'javascript:\'\'') + '" frameborder="0"></iframe>'; |
|
8321 }, |
|
8322 src: function (src) { |
|
8323 this.getEl().src = src; |
|
8324 }, |
|
8325 html: function (html, callback) { |
|
8326 var self = this, body = this.getEl().contentWindow.document.body; |
|
8327 if (!body) { |
|
8328 global$3.setTimeout(function () { |
|
8329 self.html(html); |
|
8330 }); |
|
8331 } else { |
|
8332 body.innerHTML = html; |
|
8333 if (callback) { |
|
8334 callback(); |
|
8335 } |
|
8336 } |
|
8337 return this; |
|
8338 } |
|
8339 }); |
|
8340 |
|
8341 var InfoBox = Widget.extend({ |
|
8342 init: function (settings) { |
|
8343 var self = this; |
|
8344 self._super(settings); |
|
8345 self.classes.add('widget').add('infobox'); |
|
8346 self.canFocus = false; |
|
8347 }, |
|
8348 severity: function (level) { |
|
8349 this.classes.remove('error'); |
|
8350 this.classes.remove('warning'); |
|
8351 this.classes.remove('success'); |
|
8352 this.classes.add(level); |
|
8353 }, |
|
8354 help: function (state) { |
|
8355 this.state.set('help', state); |
|
8356 }, |
|
8357 renderHtml: function () { |
|
8358 var self = this, prefix = self.classPrefix; |
|
8359 return '<div id="' + self._id + '" class="' + self.classes + '">' + '<div id="' + self._id + '-body">' + self.encode(self.state.get('text')) + '<button role="button" tabindex="-1">' + '<i class="' + prefix + 'ico ' + prefix + 'i-help"></i>' + '</button>' + '</div>' + '</div>'; |
|
8360 }, |
|
8361 bindStates: function () { |
|
8362 var self = this; |
|
8363 self.state.on('change:text', function (e) { |
|
8364 self.getEl('body').firstChild.data = self.encode(e.value); |
|
8365 if (self.state.get('rendered')) { |
|
8366 self.updateLayoutRect(); |
|
8367 } |
|
8368 }); |
|
8369 self.state.on('change:help', function (e) { |
|
8370 self.classes.toggle('has-help', e.value); |
|
8371 if (self.state.get('rendered')) { |
|
8372 self.updateLayoutRect(); |
|
8373 } |
|
8374 }); |
|
8375 return self._super(); |
|
8376 } |
|
8377 }); |
|
8378 |
|
8379 var Label = Widget.extend({ |
|
8380 init: function (settings) { |
|
8381 var self = this; |
|
8382 self._super(settings); |
|
8383 self.classes.add('widget').add('label'); |
|
8384 self.canFocus = false; |
|
8385 if (settings.multiline) { |
|
8386 self.classes.add('autoscroll'); |
|
8387 } |
|
8388 if (settings.strong) { |
|
8389 self.classes.add('strong'); |
|
8390 } |
|
8391 }, |
|
8392 initLayoutRect: function () { |
|
8393 var self = this, layoutRect = self._super(); |
|
8394 if (self.settings.multiline) { |
|
8395 var size = funcs.getSize(self.getEl()); |
|
8396 if (size.width > layoutRect.maxW) { |
|
8397 layoutRect.minW = layoutRect.maxW; |
|
8398 self.classes.add('multiline'); |
|
8399 } |
|
8400 self.getEl().style.width = layoutRect.minW + 'px'; |
|
8401 layoutRect.startMinH = layoutRect.h = layoutRect.minH = Math.min(layoutRect.maxH, funcs.getSize(self.getEl()).height); |
|
8402 } |
|
8403 return layoutRect; |
|
8404 }, |
|
8405 repaint: function () { |
|
8406 var self = this; |
|
8407 if (!self.settings.multiline) { |
|
8408 self.getEl().style.lineHeight = self.layoutRect().h + 'px'; |
|
8409 } |
|
8410 return self._super(); |
|
8411 }, |
|
8412 severity: function (level) { |
|
8413 this.classes.remove('error'); |
|
8414 this.classes.remove('warning'); |
|
8415 this.classes.remove('success'); |
|
8416 this.classes.add(level); |
|
8417 }, |
|
8418 renderHtml: function () { |
|
8419 var self = this; |
|
8420 var targetCtrl, forName, forId = self.settings.forId; |
|
8421 var text = self.settings.html ? self.settings.html : self.encode(self.state.get('text')); |
|
8422 if (!forId && (forName = self.settings.forName)) { |
|
8423 targetCtrl = self.getRoot().find('#' + forName)[0]; |
|
8424 if (targetCtrl) { |
|
8425 forId = targetCtrl._id; |
|
8426 } |
|
8427 } |
|
8428 if (forId) { |
|
8429 return '<label id="' + self._id + '" class="' + self.classes + '"' + (forId ? ' for="' + forId + '"' : '') + '>' + text + '</label>'; |
|
8430 } |
|
8431 return '<span id="' + self._id + '" class="' + self.classes + '">' + text + '</span>'; |
|
8432 }, |
|
8433 bindStates: function () { |
|
8434 var self = this; |
|
8435 self.state.on('change:text', function (e) { |
|
8436 self.innerHtml(self.encode(e.value)); |
|
8437 if (self.state.get('rendered')) { |
|
8438 self.updateLayoutRect(); |
|
8439 } |
|
8440 }); |
|
8441 return self._super(); |
|
8442 } |
|
8443 }); |
|
8444 |
|
8445 var Toolbar$1 = Container.extend({ |
|
8446 Defaults: { |
|
8447 role: 'toolbar', |
|
8448 layout: 'flow' |
|
8449 }, |
|
8450 init: function (settings) { |
|
8451 var self = this; |
|
8452 self._super(settings); |
|
8453 self.classes.add('toolbar'); |
|
8454 }, |
|
8455 postRender: function () { |
|
8456 var self = this; |
|
8457 self.items().each(function (ctrl) { |
|
8458 ctrl.classes.add('toolbar-item'); |
|
8459 }); |
|
8460 return self._super(); |
|
8461 } |
|
8462 }); |
|
8463 |
|
8464 var MenuBar = Toolbar$1.extend({ |
|
8465 Defaults: { |
|
8466 role: 'menubar', |
|
8467 containerCls: 'menubar', |
|
8468 ariaRoot: true, |
|
8469 defaults: { type: 'menubutton' } |
|
8470 } |
|
8471 }); |
|
8472 |
|
8473 function isChildOf$1(node, parent) { |
|
8474 while (node) { |
|
8475 if (parent === node) { |
|
8476 return true; |
|
8477 } |
|
8478 node = node.parentNode; |
|
8479 } |
|
8480 return false; |
|
8481 } |
|
8482 var MenuButton = Button.extend({ |
|
8483 init: function (settings) { |
|
8484 var self = this; |
|
8485 self._renderOpen = true; |
|
8486 self._super(settings); |
|
8487 settings = self.settings; |
|
8488 self.classes.add('menubtn'); |
|
8489 if (settings.fixedWidth) { |
|
8490 self.classes.add('fixed-width'); |
|
8491 } |
|
8492 self.aria('haspopup', true); |
|
8493 self.state.set('menu', settings.menu || self.render()); |
|
8494 }, |
|
8495 showMenu: function (toggle) { |
|
8496 var self = this; |
|
8497 var menu; |
|
8498 if (self.menu && self.menu.visible() && toggle !== false) { |
|
8499 return self.hideMenu(); |
|
8500 } |
|
8501 if (!self.menu) { |
|
8502 menu = self.state.get('menu') || []; |
|
8503 self.classes.add('opened'); |
|
8504 if (menu.length) { |
|
8505 menu = { |
|
8506 type: 'menu', |
|
8507 animate: true, |
|
8508 items: menu |
|
8509 }; |
|
8510 } else { |
|
8511 menu.type = menu.type || 'menu'; |
|
8512 menu.animate = true; |
|
8513 } |
|
8514 if (!menu.renderTo) { |
|
8515 self.menu = global$b.create(menu).parent(self).renderTo(); |
|
8516 } else { |
|
8517 self.menu = menu.parent(self).show().renderTo(); |
|
8518 } |
|
8519 self.fire('createmenu'); |
|
8520 self.menu.reflow(); |
|
8521 self.menu.on('cancel', function (e) { |
|
8522 if (e.control.parent() === self.menu) { |
|
8523 e.stopPropagation(); |
|
8524 self.focus(); |
|
8525 self.hideMenu(); |
|
8526 } |
|
8527 }); |
|
8528 self.menu.on('select', function () { |
|
8529 self.focus(); |
|
8530 }); |
|
8531 self.menu.on('show hide', function (e) { |
|
8532 if (e.type === 'hide' && e.control.parent() === self) { |
|
8533 self.classes.remove('opened-under'); |
|
8534 } |
|
8535 if (e.control === self.menu) { |
|
8536 self.activeMenu(e.type === 'show'); |
|
8537 self.classes.toggle('opened', e.type === 'show'); |
|
8538 } |
|
8539 self.aria('expanded', e.type === 'show'); |
|
8540 }).fire('show'); |
|
8541 } |
|
8542 self.menu.show(); |
|
8543 self.menu.layoutRect({ w: self.layoutRect().w }); |
|
8544 self.menu.repaint(); |
|
8545 self.menu.moveRel(self.getEl(), self.isRtl() ? [ |
|
8546 'br-tr', |
|
8547 'tr-br' |
|
8548 ] : [ |
|
8549 'bl-tl', |
|
8550 'tl-bl' |
|
8551 ]); |
|
8552 var menuLayoutRect = self.menu.layoutRect(); |
|
8553 var selfBottom = self.$el.offset().top + self.layoutRect().h; |
|
8554 if (selfBottom > menuLayoutRect.y && selfBottom < menuLayoutRect.y + menuLayoutRect.h) { |
|
8555 self.classes.add('opened-under'); |
|
8556 } |
|
8557 self.fire('showmenu'); |
|
8558 }, |
|
8559 hideMenu: function () { |
|
8560 var self = this; |
|
8561 if (self.menu) { |
|
8562 self.menu.items().each(function (item) { |
|
8563 if (item.hideMenu) { |
|
8564 item.hideMenu(); |
|
8565 } |
|
8566 }); |
|
8567 self.menu.hide(); |
|
8568 } |
|
8569 }, |
|
8570 activeMenu: function (state) { |
|
8571 this.classes.toggle('active', state); |
|
8572 }, |
|
8573 renderHtml: function () { |
|
8574 var self = this, id = self._id, prefix = self.classPrefix; |
|
8575 var icon = self.settings.icon, image; |
|
8576 var text = self.state.get('text'); |
|
8577 var textHtml = ''; |
|
8578 image = self.settings.image; |
|
8579 if (image) { |
|
8580 icon = 'none'; |
|
8581 if (typeof image !== 'string') { |
|
8582 image = domGlobals.window.getSelection ? image[0] : image[1]; |
|
8583 } |
|
8584 image = ' style="background-image: url(\'' + image + '\')"'; |
|
8585 } else { |
|
8586 image = ''; |
|
8587 } |
|
8588 if (text) { |
|
8589 self.classes.add('btn-has-text'); |
|
8590 textHtml = '<span class="' + prefix + 'txt">' + self.encode(text) + '</span>'; |
|
8591 } |
|
8592 icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : ''; |
|
8593 self.aria('role', self.parent() instanceof MenuBar ? 'menuitem' : 'button'); |
|
8594 return '<div id="' + id + '" class="' + self.classes + '" tabindex="-1" aria-labelledby="' + id + '">' + '<button id="' + id + '-open" role="presentation" type="button" tabindex="-1">' + (icon ? '<i class="' + icon + '"' + image + '></i>' : '') + textHtml + ' <i class="' + prefix + 'caret"></i>' + '</button>' + '</div>'; |
|
8595 }, |
|
8596 postRender: function () { |
|
8597 var self = this; |
|
8598 self.on('click', function (e) { |
|
8599 if (e.control === self && isChildOf$1(e.target, self.getEl())) { |
|
8600 self.focus(); |
|
8601 self.showMenu(!e.aria); |
|
8602 if (e.aria) { |
|
8603 self.menu.items().filter(':visible')[0].focus(); |
|
8604 } |
|
8605 } |
|
8606 }); |
|
8607 self.on('mouseenter', function (e) { |
|
8608 var overCtrl = e.control; |
|
8609 var parent = self.parent(); |
|
8610 var hasVisibleSiblingMenu; |
|
8611 if (overCtrl && parent && overCtrl instanceof MenuButton && overCtrl.parent() === parent) { |
|
8612 parent.items().filter('MenuButton').each(function (ctrl) { |
|
8613 if (ctrl.hideMenu && ctrl !== overCtrl) { |
|
8614 if (ctrl.menu && ctrl.menu.visible()) { |
|
8615 hasVisibleSiblingMenu = true; |
|
8616 } |
|
8617 ctrl.hideMenu(); |
|
8618 } |
|
8619 }); |
|
8620 if (hasVisibleSiblingMenu) { |
|
8621 overCtrl.focus(); |
|
8622 overCtrl.showMenu(); |
|
8623 } |
|
8624 } |
|
8625 }); |
|
8626 return self._super(); |
|
8627 }, |
|
8628 bindStates: function () { |
|
8629 var self = this; |
|
8630 self.state.on('change:menu', function () { |
|
8631 if (self.menu) { |
|
8632 self.menu.remove(); |
|
8633 } |
|
8634 self.menu = null; |
|
8635 }); |
|
8636 return self._super(); |
|
8637 }, |
|
8638 remove: function () { |
|
8639 this._super(); |
|
8640 if (this.menu) { |
|
8641 this.menu.remove(); |
|
8642 } |
|
8643 } |
|
8644 }); |
|
8645 |
|
8646 function Throbber (elm, inline) { |
|
8647 var self = this; |
|
8648 var state; |
|
8649 var classPrefix = Control$1.classPrefix; |
|
8650 var timer; |
|
8651 self.show = function (time, callback) { |
|
8652 function render() { |
|
8653 if (state) { |
|
8654 global$7(elm).append('<div class="' + classPrefix + 'throbber' + (inline ? ' ' + classPrefix + 'throbber-inline' : '') + '"></div>'); |
|
8655 if (callback) { |
|
8656 callback(); |
|
8657 } |
|
8658 } |
|
8659 } |
|
8660 self.hide(); |
|
8661 state = true; |
|
8662 if (time) { |
|
8663 timer = global$3.setTimeout(render, time); |
|
8664 } else { |
|
8665 render(); |
|
8666 } |
|
8667 return self; |
|
8668 }; |
|
8669 self.hide = function () { |
|
8670 var child = elm.lastChild; |
|
8671 global$3.clearTimeout(timer); |
|
8672 if (child && child.className.indexOf('throbber') !== -1) { |
|
8673 child.parentNode.removeChild(child); |
|
8674 } |
|
8675 state = false; |
|
8676 return self; |
|
8677 }; |
|
8678 } |
|
8679 |
|
8680 var Menu = FloatPanel.extend({ |
|
8681 Defaults: { |
|
8682 defaultType: 'menuitem', |
|
8683 border: 1, |
|
8684 layout: 'stack', |
|
8685 role: 'application', |
|
8686 bodyRole: 'menu', |
|
8687 ariaRoot: true |
|
8688 }, |
|
8689 init: function (settings) { |
|
8690 var self = this; |
|
8691 settings.autohide = true; |
|
8692 settings.constrainToViewport = true; |
|
8693 if (typeof settings.items === 'function') { |
|
8694 settings.itemsFactory = settings.items; |
|
8695 settings.items = []; |
|
8696 } |
|
8697 if (settings.itemDefaults) { |
|
8698 var items = settings.items; |
|
8699 var i = items.length; |
|
8700 while (i--) { |
|
8701 items[i] = global$4.extend({}, settings.itemDefaults, items[i]); |
|
8702 } |
|
8703 } |
|
8704 self._super(settings); |
|
8705 self.classes.add('menu'); |
|
8706 if (settings.animate && global$1.ie !== 11) { |
|
8707 self.classes.add('animate'); |
|
8708 } |
|
8709 }, |
|
8710 repaint: function () { |
|
8711 this.classes.toggle('menu-align', true); |
|
8712 this._super(); |
|
8713 this.getEl().style.height = ''; |
|
8714 this.getEl('body').style.height = ''; |
|
8715 return this; |
|
8716 }, |
|
8717 cancel: function () { |
|
8718 var self = this; |
|
8719 self.hideAll(); |
|
8720 self.fire('select'); |
|
8721 }, |
|
8722 load: function () { |
|
8723 var self = this; |
|
8724 var time, factory; |
|
8725 function hideThrobber() { |
|
8726 if (self.throbber) { |
|
8727 self.throbber.hide(); |
|
8728 self.throbber = null; |
|
8729 } |
|
8730 } |
|
8731 factory = self.settings.itemsFactory; |
|
8732 if (!factory) { |
|
8733 return; |
|
8734 } |
|
8735 if (!self.throbber) { |
|
8736 self.throbber = new Throbber(self.getEl('body'), true); |
|
8737 if (self.items().length === 0) { |
|
8738 self.throbber.show(); |
|
8739 self.fire('loading'); |
|
8740 } else { |
|
8741 self.throbber.show(100, function () { |
|
8742 self.items().remove(); |
|
8743 self.fire('loading'); |
|
8744 }); |
|
8745 } |
|
8746 self.on('hide close', hideThrobber); |
|
8747 } |
|
8748 self.requestTime = time = new Date().getTime(); |
|
8749 self.settings.itemsFactory(function (items) { |
|
8750 if (items.length === 0) { |
|
8751 self.hide(); |
|
8752 return; |
|
8753 } |
|
8754 if (self.requestTime !== time) { |
|
8755 return; |
|
8756 } |
|
8757 self.getEl().style.width = ''; |
|
8758 self.getEl('body').style.width = ''; |
|
8759 hideThrobber(); |
|
8760 self.items().remove(); |
|
8761 self.getEl('body').innerHTML = ''; |
|
8762 self.add(items); |
|
8763 self.renderNew(); |
|
8764 self.fire('loaded'); |
|
8765 }); |
|
8766 }, |
|
8767 hideAll: function () { |
|
8768 var self = this; |
|
8769 this.find('menuitem').exec('hideMenu'); |
|
8770 return self._super(); |
|
8771 }, |
|
8772 preRender: function () { |
|
8773 var self = this; |
|
8774 self.items().each(function (ctrl) { |
|
8775 var settings = ctrl.settings; |
|
8776 if (settings.icon || settings.image || settings.selectable) { |
|
8777 self._hasIcons = true; |
|
8778 return false; |
|
8779 } |
|
8780 }); |
|
8781 if (self.settings.itemsFactory) { |
|
8782 self.on('postrender', function () { |
|
8783 if (self.settings.itemsFactory) { |
|
8784 self.load(); |
|
8785 } |
|
8786 }); |
|
8787 } |
|
8788 self.on('show hide', function (e) { |
|
8789 if (e.control === self) { |
|
8790 if (e.type === 'show') { |
|
8791 global$3.setTimeout(function () { |
|
8792 self.classes.add('in'); |
|
8793 }, 0); |
|
8794 } else { |
|
8795 self.classes.remove('in'); |
|
8796 } |
|
8797 } |
|
8798 }); |
|
8799 return self._super(); |
|
8800 } |
|
8801 }); |
|
8802 |
|
8803 var ListBox = MenuButton.extend({ |
|
8804 init: function (settings) { |
|
8805 var self = this; |
|
8806 var values, selected, selectedText, lastItemCtrl; |
|
8807 function setSelected(menuValues) { |
|
8808 for (var i = 0; i < menuValues.length; i++) { |
|
8809 selected = menuValues[i].selected || settings.value === menuValues[i].value; |
|
8810 if (selected) { |
|
8811 selectedText = selectedText || menuValues[i].text; |
|
8812 self.state.set('value', menuValues[i].value); |
|
8813 return true; |
|
8814 } |
|
8815 if (menuValues[i].menu) { |
|
8816 if (setSelected(menuValues[i].menu)) { |
|
8817 return true; |
|
8818 } |
|
8819 } |
|
8820 } |
|
8821 } |
|
8822 self._super(settings); |
|
8823 settings = self.settings; |
|
8824 self._values = values = settings.values; |
|
8825 if (values) { |
|
8826 if (typeof settings.value !== 'undefined') { |
|
8827 setSelected(values); |
|
8828 } |
|
8829 if (!selected && values.length > 0) { |
|
8830 selectedText = values[0].text; |
|
8831 self.state.set('value', values[0].value); |
|
8832 } |
|
8833 self.state.set('menu', values); |
|
8834 } |
|
8835 self.state.set('text', settings.text || selectedText); |
|
8836 self.classes.add('listbox'); |
|
8837 self.on('select', function (e) { |
|
8838 var ctrl = e.control; |
|
8839 if (lastItemCtrl) { |
|
8840 e.lastControl = lastItemCtrl; |
|
8841 } |
|
8842 if (settings.multiple) { |
|
8843 ctrl.active(!ctrl.active()); |
|
8844 } else { |
|
8845 self.value(e.control.value()); |
|
8846 } |
|
8847 lastItemCtrl = ctrl; |
|
8848 }); |
|
8849 }, |
|
8850 value: function (value) { |
|
8851 if (arguments.length === 0) { |
|
8852 return this.state.get('value'); |
|
8853 } |
|
8854 if (typeof value === 'undefined') { |
|
8855 return this; |
|
8856 } |
|
8857 function valueExists(values) { |
|
8858 return exists(values, function (a) { |
|
8859 return a.menu ? valueExists(a.menu) : a.value === value; |
|
8860 }); |
|
8861 } |
|
8862 if (this.settings.values) { |
|
8863 if (valueExists(this.settings.values)) { |
|
8864 this.state.set('value', value); |
|
8865 } else if (value === null) { |
|
8866 this.state.set('value', null); |
|
8867 } |
|
8868 } else { |
|
8869 this.state.set('value', value); |
|
8870 } |
|
8871 return this; |
|
8872 }, |
|
8873 bindStates: function () { |
|
8874 var self = this; |
|
8875 function activateMenuItemsByValue(menu, value) { |
|
8876 if (menu instanceof Menu) { |
|
8877 menu.items().each(function (ctrl) { |
|
8878 if (!ctrl.hasMenus()) { |
|
8879 ctrl.active(ctrl.value() === value); |
|
8880 } |
|
8881 }); |
|
8882 } |
|
8883 } |
|
8884 function getSelectedItem(menuValues, value) { |
|
8885 var selectedItem; |
|
8886 if (!menuValues) { |
|
8887 return; |
|
8888 } |
|
8889 for (var i = 0; i < menuValues.length; i++) { |
|
8890 if (menuValues[i].value === value) { |
|
8891 return menuValues[i]; |
|
8892 } |
|
8893 if (menuValues[i].menu) { |
|
8894 selectedItem = getSelectedItem(menuValues[i].menu, value); |
|
8895 if (selectedItem) { |
|
8896 return selectedItem; |
|
8897 } |
|
8898 } |
|
8899 } |
|
8900 } |
|
8901 self.on('show', function (e) { |
|
8902 activateMenuItemsByValue(e.control, self.value()); |
|
8903 }); |
|
8904 self.state.on('change:value', function (e) { |
|
8905 var selectedItem = getSelectedItem(self.state.get('menu'), e.value); |
|
8906 if (selectedItem) { |
|
8907 self.text(selectedItem.text); |
|
8908 } else { |
|
8909 self.text(self.settings.text); |
|
8910 } |
|
8911 }); |
|
8912 return self._super(); |
|
8913 } |
|
8914 }); |
|
8915 |
|
8916 var toggleTextStyle = function (ctrl, state) { |
|
8917 var textStyle = ctrl._textStyle; |
|
8918 if (textStyle) { |
|
8919 var textElm = ctrl.getEl('text'); |
|
8920 textElm.setAttribute('style', textStyle); |
|
8921 if (state) { |
|
8922 textElm.style.color = ''; |
|
8923 textElm.style.backgroundColor = ''; |
|
8924 } |
|
8925 } |
|
8926 }; |
|
8927 var MenuItem = Widget.extend({ |
|
8928 Defaults: { |
|
8929 border: 0, |
|
8930 role: 'menuitem' |
|
8931 }, |
|
8932 init: function (settings) { |
|
8933 var self = this; |
|
8934 var text; |
|
8935 self._super(settings); |
|
8936 settings = self.settings; |
|
8937 self.classes.add('menu-item'); |
|
8938 if (settings.menu) { |
|
8939 self.classes.add('menu-item-expand'); |
|
8940 } |
|
8941 if (settings.preview) { |
|
8942 self.classes.add('menu-item-preview'); |
|
8943 } |
|
8944 text = self.state.get('text'); |
|
8945 if (text === '-' || text === '|') { |
|
8946 self.classes.add('menu-item-sep'); |
|
8947 self.aria('role', 'separator'); |
|
8948 self.state.set('text', '-'); |
|
8949 } |
|
8950 if (settings.selectable) { |
|
8951 self.aria('role', 'menuitemcheckbox'); |
|
8952 self.classes.add('menu-item-checkbox'); |
|
8953 settings.icon = 'selected'; |
|
8954 } |
|
8955 if (!settings.preview && !settings.selectable) { |
|
8956 self.classes.add('menu-item-normal'); |
|
8957 } |
|
8958 self.on('mousedown', function (e) { |
|
8959 e.preventDefault(); |
|
8960 }); |
|
8961 if (settings.menu && !settings.ariaHideMenu) { |
|
8962 self.aria('haspopup', true); |
|
8963 } |
|
8964 }, |
|
8965 hasMenus: function () { |
|
8966 return !!this.settings.menu; |
|
8967 }, |
|
8968 showMenu: function () { |
|
8969 var self = this; |
|
8970 var settings = self.settings; |
|
8971 var menu; |
|
8972 var parent = self.parent(); |
|
8973 parent.items().each(function (ctrl) { |
|
8974 if (ctrl !== self) { |
|
8975 ctrl.hideMenu(); |
|
8976 } |
|
8977 }); |
|
8978 if (settings.menu) { |
|
8979 menu = self.menu; |
|
8980 if (!menu) { |
|
8981 menu = settings.menu; |
|
8982 if (menu.length) { |
|
8983 menu = { |
|
8984 type: 'menu', |
|
8985 items: menu |
|
8986 }; |
|
8987 } else { |
|
8988 menu.type = menu.type || 'menu'; |
|
8989 } |
|
8990 if (parent.settings.itemDefaults) { |
|
8991 menu.itemDefaults = parent.settings.itemDefaults; |
|
8992 } |
|
8993 menu = self.menu = global$b.create(menu).parent(self).renderTo(); |
|
8994 menu.reflow(); |
|
8995 menu.on('cancel', function (e) { |
|
8996 e.stopPropagation(); |
|
8997 self.focus(); |
|
8998 menu.hide(); |
|
8999 }); |
|
9000 menu.on('show hide', function (e) { |
|
9001 if (e.control.items) { |
|
9002 e.control.items().each(function (ctrl) { |
|
9003 ctrl.active(ctrl.settings.selected); |
|
9004 }); |
|
9005 } |
|
9006 }).fire('show'); |
|
9007 menu.on('hide', function (e) { |
|
9008 if (e.control === menu) { |
|
9009 self.classes.remove('selected'); |
|
9010 } |
|
9011 }); |
|
9012 menu.submenu = true; |
|
9013 } else { |
|
9014 menu.show(); |
|
9015 } |
|
9016 menu._parentMenu = parent; |
|
9017 menu.classes.add('menu-sub'); |
|
9018 var rel = menu.testMoveRel(self.getEl(), self.isRtl() ? [ |
|
9019 'tl-tr', |
|
9020 'bl-br', |
|
9021 'tr-tl', |
|
9022 'br-bl' |
|
9023 ] : [ |
|
9024 'tr-tl', |
|
9025 'br-bl', |
|
9026 'tl-tr', |
|
9027 'bl-br' |
|
9028 ]); |
|
9029 menu.moveRel(self.getEl(), rel); |
|
9030 menu.rel = rel; |
|
9031 rel = 'menu-sub-' + rel; |
|
9032 menu.classes.remove(menu._lastRel).add(rel); |
|
9033 menu._lastRel = rel; |
|
9034 self.classes.add('selected'); |
|
9035 self.aria('expanded', true); |
|
9036 } |
|
9037 }, |
|
9038 hideMenu: function () { |
|
9039 var self = this; |
|
9040 if (self.menu) { |
|
9041 self.menu.items().each(function (item) { |
|
9042 if (item.hideMenu) { |
|
9043 item.hideMenu(); |
|
9044 } |
|
9045 }); |
|
9046 self.menu.hide(); |
|
9047 self.aria('expanded', false); |
|
9048 } |
|
9049 return self; |
|
9050 }, |
|
9051 renderHtml: function () { |
|
9052 var self = this; |
|
9053 var id = self._id; |
|
9054 var settings = self.settings; |
|
9055 var prefix = self.classPrefix; |
|
9056 var text = self.state.get('text'); |
|
9057 var icon = self.settings.icon, image = '', shortcut = settings.shortcut; |
|
9058 var url = self.encode(settings.url), iconHtml = ''; |
|
9059 function convertShortcut(shortcut) { |
|
9060 var i, value, replace = {}; |
|
9061 if (global$1.mac) { |
|
9062 replace = { |
|
9063 alt: '⌥', |
|
9064 ctrl: '⌘', |
|
9065 shift: '⇧', |
|
9066 meta: '⌘' |
|
9067 }; |
|
9068 } else { |
|
9069 replace = { meta: 'Ctrl' }; |
|
9070 } |
|
9071 shortcut = shortcut.split('+'); |
|
9072 for (i = 0; i < shortcut.length; i++) { |
|
9073 value = replace[shortcut[i].toLowerCase()]; |
|
9074 if (value) { |
|
9075 shortcut[i] = value; |
|
9076 } |
|
9077 } |
|
9078 return shortcut.join('+'); |
|
9079 } |
|
9080 function escapeRegExp(str) { |
|
9081 return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); |
|
9082 } |
|
9083 function markMatches(text) { |
|
9084 var match = settings.match || ''; |
|
9085 return match ? text.replace(new RegExp(escapeRegExp(match), 'gi'), function (match) { |
|
9086 return '!mce~match[' + match + ']mce~match!'; |
|
9087 }) : text; |
|
9088 } |
|
9089 function boldMatches(text) { |
|
9090 return text.replace(new RegExp(escapeRegExp('!mce~match['), 'g'), '<b>').replace(new RegExp(escapeRegExp(']mce~match!'), 'g'), '</b>'); |
|
9091 } |
|
9092 if (icon) { |
|
9093 self.parent().classes.add('menu-has-icons'); |
|
9094 } |
|
9095 if (settings.image) { |
|
9096 image = ' style="background-image: url(\'' + settings.image + '\')"'; |
|
9097 } |
|
9098 if (shortcut) { |
|
9099 shortcut = convertShortcut(shortcut); |
|
9100 } |
|
9101 icon = prefix + 'ico ' + prefix + 'i-' + (self.settings.icon || 'none'); |
|
9102 iconHtml = text !== '-' ? '<i class="' + icon + '"' + image + '></i>\xA0' : ''; |
|
9103 text = boldMatches(self.encode(markMatches(text))); |
|
9104 url = boldMatches(self.encode(markMatches(url))); |
|
9105 return '<div id="' + id + '" class="' + self.classes + '" tabindex="-1">' + iconHtml + (text !== '-' ? '<span id="' + id + '-text" class="' + prefix + 'text">' + text + '</span>' : '') + (shortcut ? '<div id="' + id + '-shortcut" class="' + prefix + 'menu-shortcut">' + shortcut + '</div>' : '') + (settings.menu ? '<div class="' + prefix + 'caret"></div>' : '') + (url ? '<div class="' + prefix + 'menu-item-link">' + url + '</div>' : '') + '</div>'; |
|
9106 }, |
|
9107 postRender: function () { |
|
9108 var self = this, settings = self.settings; |
|
9109 var textStyle = settings.textStyle; |
|
9110 if (typeof textStyle === 'function') { |
|
9111 textStyle = textStyle.call(this); |
|
9112 } |
|
9113 if (textStyle) { |
|
9114 var textElm = self.getEl('text'); |
|
9115 if (textElm) { |
|
9116 textElm.setAttribute('style', textStyle); |
|
9117 self._textStyle = textStyle; |
|
9118 } |
|
9119 } |
|
9120 self.on('mouseenter click', function (e) { |
|
9121 if (e.control === self) { |
|
9122 if (!settings.menu && e.type === 'click') { |
|
9123 self.fire('select'); |
|
9124 global$3.requestAnimationFrame(function () { |
|
9125 self.parent().hideAll(); |
9416 }); |
9126 }); |
9417 } |
9127 } else { |
9418 }).fire('show'); |
9128 self.showMenu(); |
9419 menu.on('hide', function (e) { |
9129 if (e.aria) { |
9420 if (e.control === menu) { |
9130 self.menu.focus(true); |
9421 self.classes.remove('selected'); |
9131 } |
9422 } |
9132 } |
9423 }); |
9133 } |
9424 menu.submenu = true; |
9134 }); |
9425 } else { |
9135 self._super(); |
9426 menu.show(); |
9136 return self; |
9427 } |
9137 }, |
9428 menu._parentMenu = parent; |
9138 hover: function () { |
9429 menu.classes.add('menu-sub'); |
9139 var self = this; |
9430 var rel = menu.testMoveRel(self.getEl(), self.isRtl() ? [ |
9140 self.parent().items().each(function (ctrl) { |
9431 'tl-tr', |
9141 ctrl.classes.remove('selected'); |
9432 'bl-br', |
9142 }); |
9433 'tr-tl', |
9143 self.classes.toggle('selected', true); |
9434 'br-bl' |
9144 return self; |
9435 ] : [ |
9145 }, |
9436 'tr-tl', |
9146 active: function (state) { |
9437 'br-bl', |
9147 toggleTextStyle(this, state); |
9438 'tl-tr', |
9148 if (typeof state !== 'undefined') { |
9439 'bl-br' |
9149 this.aria('checked', state); |
9440 ]); |
9150 } |
9441 menu.moveRel(self.getEl(), rel); |
9151 return this._super(state); |
9442 menu.rel = rel; |
9152 }, |
9443 rel = 'menu-sub-' + rel; |
9153 remove: function () { |
9444 menu.classes.remove(menu._lastRel).add(rel); |
9154 this._super(); |
9445 menu._lastRel = rel; |
9155 if (this.menu) { |
9446 self.classes.add('selected'); |
9156 this.menu.remove(); |
9447 self.aria('expanded', true); |
9157 } |
9448 } |
9158 } |
9449 }, |
9159 }); |
9450 hideMenu: function () { |
9160 |
9451 var self = this; |
9161 var Radio = Checkbox.extend({ |
9452 if (self.menu) { |
9162 Defaults: { |
9453 self.menu.items().each(function (item) { |
9163 classes: 'radio', |
9454 if (item.hideMenu) { |
9164 role: 'radio' |
9455 item.hideMenu(); |
9165 } |
9456 } |
9166 }); |
9457 }); |
9167 |
9458 self.menu.hide(); |
9168 var ResizeHandle = Widget.extend({ |
9459 self.aria('expanded', false); |
9169 renderHtml: function () { |
9460 } |
9170 var self = this, prefix = self.classPrefix; |
9461 return self; |
9171 self.classes.add('resizehandle'); |
9462 }, |
9172 if (self.settings.direction === 'both') { |
9463 renderHtml: function () { |
9173 self.classes.add('resizehandle-both'); |
9464 var self = this; |
9174 } |
9465 var id = self._id; |
9175 self.canFocus = false; |
9466 var settings = self.settings; |
9176 return '<div id="' + self._id + '" class="' + self.classes + '">' + '<i class="' + prefix + 'ico ' + prefix + 'i-resize"></i>' + '</div>'; |
9467 var prefix = self.classPrefix; |
9177 }, |
9468 var text = self.state.get('text'); |
9178 postRender: function () { |
9469 var icon = self.settings.icon, image = '', shortcut = settings.shortcut; |
9179 var self = this; |
9470 var url = self.encode(settings.url), iconHtml = ''; |
9180 self._super(); |
9471 function convertShortcut(shortcut) { |
9181 self.resizeDragHelper = new DragHelper(this._id, { |
9472 var i, value, replace = {}; |
9182 start: function () { |
9473 if (global$1.mac) { |
9183 self.fire('ResizeStart'); |
9474 replace = { |
|
9475 alt: '⌥', |
|
9476 ctrl: '⌘', |
|
9477 shift: '⇧', |
|
9478 meta: '⌘' |
|
9479 }; |
|
9480 } else { |
|
9481 replace = { meta: 'Ctrl' }; |
|
9482 } |
|
9483 shortcut = shortcut.split('+'); |
|
9484 for (i = 0; i < shortcut.length; i++) { |
|
9485 value = replace[shortcut[i].toLowerCase()]; |
|
9486 if (value) { |
|
9487 shortcut[i] = value; |
|
9488 } |
|
9489 } |
|
9490 return shortcut.join('+'); |
|
9491 } |
|
9492 function escapeRegExp(str) { |
|
9493 return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); |
|
9494 } |
|
9495 function markMatches(text) { |
|
9496 var match = settings.match || ''; |
|
9497 return match ? text.replace(new RegExp(escapeRegExp(match), 'gi'), function (match) { |
|
9498 return '!mce~match[' + match + ']mce~match!'; |
|
9499 }) : text; |
|
9500 } |
|
9501 function boldMatches(text) { |
|
9502 return text.replace(new RegExp(escapeRegExp('!mce~match['), 'g'), '<b>').replace(new RegExp(escapeRegExp(']mce~match!'), 'g'), '</b>'); |
|
9503 } |
|
9504 if (icon) { |
|
9505 self.parent().classes.add('menu-has-icons'); |
|
9506 } |
|
9507 if (settings.image) { |
|
9508 image = ' style="background-image: url(\'' + settings.image + '\')"'; |
|
9509 } |
|
9510 if (shortcut) { |
|
9511 shortcut = convertShortcut(shortcut); |
|
9512 } |
|
9513 icon = prefix + 'ico ' + prefix + 'i-' + (self.settings.icon || 'none'); |
|
9514 iconHtml = text !== '-' ? '<i class="' + icon + '"' + image + '></i>\xA0' : ''; |
|
9515 text = boldMatches(self.encode(markMatches(text))); |
|
9516 url = boldMatches(self.encode(markMatches(url))); |
|
9517 return '<div id="' + id + '" class="' + self.classes + '" tabindex="-1">' + iconHtml + (text !== '-' ? '<span id="' + id + '-text" class="' + prefix + 'text">' + text + '</span>' : '') + (shortcut ? '<div id="' + id + '-shortcut" class="' + prefix + 'menu-shortcut">' + shortcut + '</div>' : '') + (settings.menu ? '<div class="' + prefix + 'caret"></div>' : '') + (url ? '<div class="' + prefix + 'menu-item-link">' + url + '</div>' : '') + '</div>'; |
|
9518 }, |
|
9519 postRender: function () { |
|
9520 var self = this, settings = self.settings; |
|
9521 var textStyle = settings.textStyle; |
|
9522 if (typeof textStyle === 'function') { |
|
9523 textStyle = textStyle.call(this); |
|
9524 } |
|
9525 if (textStyle) { |
|
9526 var textElm = self.getEl('text'); |
|
9527 if (textElm) { |
|
9528 textElm.setAttribute('style', textStyle); |
|
9529 self._textStyle = textStyle; |
|
9530 } |
|
9531 } |
|
9532 self.on('mouseenter click', function (e) { |
|
9533 if (e.control === self) { |
|
9534 if (!settings.menu && e.type === 'click') { |
|
9535 self.fire('select'); |
|
9536 global$3.requestAnimationFrame(function () { |
|
9537 self.parent().hideAll(); |
|
9538 }); |
|
9539 } else { |
|
9540 self.showMenu(); |
|
9541 if (e.aria) { |
|
9542 self.menu.focus(true); |
|
9543 } |
|
9544 } |
|
9545 } |
|
9546 }); |
|
9547 self._super(); |
|
9548 return self; |
|
9549 }, |
|
9550 hover: function () { |
|
9551 var self = this; |
|
9552 self.parent().items().each(function (ctrl) { |
|
9553 ctrl.classes.remove('selected'); |
|
9554 }); |
|
9555 self.classes.toggle('selected', true); |
|
9556 return self; |
|
9557 }, |
|
9558 active: function (state) { |
|
9559 toggleTextStyle(this, state); |
|
9560 if (typeof state !== 'undefined') { |
|
9561 this.aria('checked', state); |
|
9562 } |
|
9563 return this._super(state); |
|
9564 }, |
|
9565 remove: function () { |
|
9566 this._super(); |
|
9567 if (this.menu) { |
|
9568 this.menu.remove(); |
|
9569 } |
|
9570 } |
|
9571 }); |
|
9572 |
|
9573 var Radio = Checkbox.extend({ |
|
9574 Defaults: { |
|
9575 classes: 'radio', |
|
9576 role: 'radio' |
|
9577 } |
|
9578 }); |
|
9579 |
|
9580 var ResizeHandle = Widget.extend({ |
|
9581 renderHtml: function () { |
|
9582 var self = this, prefix = self.classPrefix; |
|
9583 self.classes.add('resizehandle'); |
|
9584 if (self.settings.direction === 'both') { |
|
9585 self.classes.add('resizehandle-both'); |
|
9586 } |
|
9587 self.canFocus = false; |
|
9588 return '<div id="' + self._id + '" class="' + self.classes + '">' + '<i class="' + prefix + 'ico ' + prefix + 'i-resize"></i>' + '</div>'; |
|
9589 }, |
|
9590 postRender: function () { |
|
9591 var self = this; |
|
9592 self._super(); |
|
9593 self.resizeDragHelper = new DragHelper(this._id, { |
|
9594 start: function () { |
|
9595 self.fire('ResizeStart'); |
|
9596 }, |
|
9597 drag: function (e) { |
|
9598 if (self.settings.direction !== 'both') { |
|
9599 e.deltaX = 0; |
|
9600 } |
|
9601 self.fire('Resize', e); |
|
9602 }, |
|
9603 stop: function () { |
|
9604 self.fire('ResizeEnd'); |
|
9605 } |
|
9606 }); |
|
9607 }, |
|
9608 remove: function () { |
|
9609 if (this.resizeDragHelper) { |
|
9610 this.resizeDragHelper.destroy(); |
|
9611 } |
|
9612 return this._super(); |
|
9613 } |
|
9614 }); |
|
9615 |
|
9616 function createOptions(options) { |
|
9617 var strOptions = ''; |
|
9618 if (options) { |
|
9619 for (var i = 0; i < options.length; i++) { |
|
9620 strOptions += '<option value="' + options[i] + '">' + options[i] + '</option>'; |
|
9621 } |
|
9622 } |
|
9623 return strOptions; |
|
9624 } |
|
9625 var SelectBox = Widget.extend({ |
|
9626 Defaults: { |
|
9627 classes: 'selectbox', |
|
9628 role: 'selectbox', |
|
9629 options: [] |
|
9630 }, |
|
9631 init: function (settings) { |
|
9632 var self = this; |
|
9633 self._super(settings); |
|
9634 if (self.settings.size) { |
|
9635 self.size = self.settings.size; |
|
9636 } |
|
9637 if (self.settings.options) { |
|
9638 self._options = self.settings.options; |
|
9639 } |
|
9640 self.on('keydown', function (e) { |
|
9641 var rootControl; |
|
9642 if (e.keyCode === 13) { |
|
9643 e.preventDefault(); |
|
9644 self.parents().reverse().each(function (ctrl) { |
|
9645 if (ctrl.toJSON) { |
|
9646 rootControl = ctrl; |
|
9647 return false; |
|
9648 } |
|
9649 }); |
|
9650 self.fire('submit', { data: rootControl.toJSON() }); |
|
9651 } |
|
9652 }); |
|
9653 }, |
|
9654 options: function (state) { |
|
9655 if (!arguments.length) { |
|
9656 return this.state.get('options'); |
|
9657 } |
|
9658 this.state.set('options', state); |
|
9659 return this; |
|
9660 }, |
|
9661 renderHtml: function () { |
|
9662 var self = this; |
|
9663 var options, size = ''; |
|
9664 options = createOptions(self._options); |
|
9665 if (self.size) { |
|
9666 size = ' size = "' + self.size + '"'; |
|
9667 } |
|
9668 return '<select id="' + self._id + '" class="' + self.classes + '"' + size + '>' + options + '</select>'; |
|
9669 }, |
|
9670 bindStates: function () { |
|
9671 var self = this; |
|
9672 self.state.on('change:options', function (e) { |
|
9673 self.getEl().innerHTML = createOptions(e.value); |
|
9674 }); |
|
9675 return self._super(); |
|
9676 } |
|
9677 }); |
|
9678 |
|
9679 function constrain(value, minVal, maxVal) { |
|
9680 if (value < minVal) { |
|
9681 value = minVal; |
|
9682 } |
|
9683 if (value > maxVal) { |
|
9684 value = maxVal; |
|
9685 } |
|
9686 return value; |
|
9687 } |
|
9688 function setAriaProp(el, name, value) { |
|
9689 el.setAttribute('aria-' + name, value); |
|
9690 } |
|
9691 function updateSliderHandle(ctrl, value) { |
|
9692 var maxHandlePos, shortSizeName, sizeName, stylePosName, styleValue, handleEl; |
|
9693 if (ctrl.settings.orientation === 'v') { |
|
9694 stylePosName = 'top'; |
|
9695 sizeName = 'height'; |
|
9696 shortSizeName = 'h'; |
|
9697 } else { |
|
9698 stylePosName = 'left'; |
|
9699 sizeName = 'width'; |
|
9700 shortSizeName = 'w'; |
|
9701 } |
|
9702 handleEl = ctrl.getEl('handle'); |
|
9703 maxHandlePos = (ctrl.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName]; |
|
9704 styleValue = maxHandlePos * ((value - ctrl._minValue) / (ctrl._maxValue - ctrl._minValue)) + 'px'; |
|
9705 handleEl.style[stylePosName] = styleValue; |
|
9706 handleEl.style.height = ctrl.layoutRect().h + 'px'; |
|
9707 setAriaProp(handleEl, 'valuenow', value); |
|
9708 setAriaProp(handleEl, 'valuetext', '' + ctrl.settings.previewFilter(value)); |
|
9709 setAriaProp(handleEl, 'valuemin', ctrl._minValue); |
|
9710 setAriaProp(handleEl, 'valuemax', ctrl._maxValue); |
|
9711 } |
|
9712 var Slider = Widget.extend({ |
|
9713 init: function (settings) { |
|
9714 var self = this; |
|
9715 if (!settings.previewFilter) { |
|
9716 settings.previewFilter = function (value) { |
|
9717 return Math.round(value * 100) / 100; |
|
9718 }; |
|
9719 } |
|
9720 self._super(settings); |
|
9721 self.classes.add('slider'); |
|
9722 if (settings.orientation === 'v') { |
|
9723 self.classes.add('vertical'); |
|
9724 } |
|
9725 self._minValue = isNumber$1(settings.minValue) ? settings.minValue : 0; |
|
9726 self._maxValue = isNumber$1(settings.maxValue) ? settings.maxValue : 100; |
|
9727 self._initValue = self.state.get('value'); |
|
9728 }, |
|
9729 renderHtml: function () { |
|
9730 var self = this, id = self._id, prefix = self.classPrefix; |
|
9731 return '<div id="' + id + '" class="' + self.classes + '">' + '<div id="' + id + '-handle" class="' + prefix + 'slider-handle" role="slider" tabindex="-1"></div>' + '</div>'; |
|
9732 }, |
|
9733 reset: function () { |
|
9734 this.value(this._initValue).repaint(); |
|
9735 }, |
|
9736 postRender: function () { |
|
9737 var self = this; |
|
9738 var minValue, maxValue, screenCordName, stylePosName, sizeName, shortSizeName; |
|
9739 function toFraction(min, max, val) { |
|
9740 return (val + min) / (max - min); |
|
9741 } |
|
9742 function fromFraction(min, max, val) { |
|
9743 return val * (max - min) - min; |
|
9744 } |
|
9745 function handleKeyboard(minValue, maxValue) { |
|
9746 function alter(delta) { |
|
9747 var value; |
|
9748 value = self.value(); |
|
9749 value = fromFraction(minValue, maxValue, toFraction(minValue, maxValue, value) + delta * 0.05); |
|
9750 value = constrain(value, minValue, maxValue); |
|
9751 self.value(value); |
|
9752 self.fire('dragstart', { value: value }); |
|
9753 self.fire('drag', { value: value }); |
|
9754 self.fire('dragend', { value: value }); |
|
9755 } |
|
9756 self.on('keydown', function (e) { |
|
9757 switch (e.keyCode) { |
|
9758 case 37: |
|
9759 case 38: |
|
9760 alter(-1); |
|
9761 break; |
|
9762 case 39: |
|
9763 case 40: |
|
9764 alter(1); |
|
9765 break; |
|
9766 } |
|
9767 }); |
|
9768 } |
|
9769 function handleDrag(minValue, maxValue, handleEl) { |
|
9770 var startPos, startHandlePos, maxHandlePos, handlePos, value; |
|
9771 self._dragHelper = new DragHelper(self._id, { |
|
9772 handle: self._id + '-handle', |
|
9773 start: function (e) { |
|
9774 startPos = e[screenCordName]; |
|
9775 startHandlePos = parseInt(self.getEl('handle').style[stylePosName], 10); |
|
9776 maxHandlePos = (self.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName]; |
|
9777 self.fire('dragstart', { value: value }); |
|
9778 }, |
9184 }, |
9779 drag: function (e) { |
9185 drag: function (e) { |
9780 var delta = e[screenCordName] - startPos; |
9186 if (self.settings.direction !== 'both') { |
9781 handlePos = constrain(startHandlePos + delta, 0, maxHandlePos); |
9187 e.deltaX = 0; |
9782 handleEl.style[stylePosName] = handlePos + 'px'; |
9188 } |
9783 value = minValue + handlePos / maxHandlePos * (maxValue - minValue); |
9189 self.fire('Resize', e); |
9784 self.value(value); |
|
9785 self.tooltip().text('' + self.settings.previewFilter(value)).show().moveRel(handleEl, 'bc tc'); |
|
9786 self.fire('drag', { value: value }); |
|
9787 }, |
9190 }, |
9788 stop: function () { |
9191 stop: function () { |
9789 self.tooltip().hide(); |
9192 self.fire('ResizeEnd'); |
9790 self.fire('dragend', { value: value }); |
9193 } |
9791 } |
9194 }); |
9792 }); |
9195 }, |
9793 } |
9196 remove: function () { |
9794 minValue = self._minValue; |
9197 if (this.resizeDragHelper) { |
9795 maxValue = self._maxValue; |
9198 this.resizeDragHelper.destroy(); |
9796 if (self.settings.orientation === 'v') { |
9199 } |
9797 screenCordName = 'screenY'; |
9200 return this._super(); |
9798 stylePosName = 'top'; |
9201 } |
9799 sizeName = 'height'; |
9202 }); |
9800 shortSizeName = 'h'; |
9203 |
9801 } else { |
9204 function createOptions(options) { |
9802 screenCordName = 'screenX'; |
9205 var strOptions = ''; |
9803 stylePosName = 'left'; |
9206 if (options) { |
9804 sizeName = 'width'; |
9207 for (var i = 0; i < options.length; i++) { |
9805 shortSizeName = 'w'; |
9208 strOptions += '<option value="' + options[i] + '">' + options[i] + '</option>'; |
9806 } |
9209 } |
9807 self._super(); |
9210 } |
9808 handleKeyboard(minValue, maxValue); |
9211 return strOptions; |
9809 handleDrag(minValue, maxValue, self.getEl('handle')); |
|
9810 }, |
|
9811 repaint: function () { |
|
9812 this._super(); |
|
9813 updateSliderHandle(this, this.value()); |
|
9814 }, |
|
9815 bindStates: function () { |
|
9816 var self = this; |
|
9817 self.state.on('change:value', function (e) { |
|
9818 updateSliderHandle(self, e.value); |
|
9819 }); |
|
9820 return self._super(); |
|
9821 } |
9212 } |
9822 }); |
9213 var SelectBox = Widget.extend({ |
9823 |
9214 Defaults: { |
9824 var Spacer = Widget.extend({ |
9215 classes: 'selectbox', |
9825 renderHtml: function () { |
9216 role: 'selectbox', |
9826 var self = this; |
9217 options: [] |
9827 self.classes.add('spacer'); |
9218 }, |
9828 self.canFocus = false; |
9219 init: function (settings) { |
9829 return '<div id="' + self._id + '" class="' + self.classes + '"></div>'; |
9220 var self = this; |
9830 } |
9221 self._super(settings); |
9831 }); |
9222 if (self.settings.size) { |
9832 |
9223 self.size = self.settings.size; |
9833 var SplitButton = MenuButton.extend({ |
9224 } |
9834 Defaults: { |
9225 if (self.settings.options) { |
9835 classes: 'widget btn splitbtn', |
9226 self._options = self.settings.options; |
9836 role: 'button' |
9227 } |
9837 }, |
9228 self.on('keydown', function (e) { |
9838 repaint: function () { |
|
9839 var self$$1 = this; |
|
9840 var elm = self$$1.getEl(); |
|
9841 var rect = self$$1.layoutRect(); |
|
9842 var mainButtonElm, menuButtonElm; |
|
9843 self$$1._super(); |
|
9844 mainButtonElm = elm.firstChild; |
|
9845 menuButtonElm = elm.lastChild; |
|
9846 global$7(mainButtonElm).css({ |
|
9847 width: rect.w - funcs.getSize(menuButtonElm).width, |
|
9848 height: rect.h - 2 |
|
9849 }); |
|
9850 global$7(menuButtonElm).css({ height: rect.h - 2 }); |
|
9851 return self$$1; |
|
9852 }, |
|
9853 activeMenu: function (state) { |
|
9854 var self$$1 = this; |
|
9855 global$7(self$$1.getEl().lastChild).toggleClass(self$$1.classPrefix + 'active', state); |
|
9856 }, |
|
9857 renderHtml: function () { |
|
9858 var self$$1 = this; |
|
9859 var id = self$$1._id; |
|
9860 var prefix = self$$1.classPrefix; |
|
9861 var image; |
|
9862 var icon = self$$1.state.get('icon'); |
|
9863 var text = self$$1.state.get('text'); |
|
9864 var settings = self$$1.settings; |
|
9865 var textHtml = '', ariaPressed; |
|
9866 image = settings.image; |
|
9867 if (image) { |
|
9868 icon = 'none'; |
|
9869 if (typeof image !== 'string') { |
|
9870 image = window.getSelection ? image[0] : image[1]; |
|
9871 } |
|
9872 image = ' style="background-image: url(\'' + image + '\')"'; |
|
9873 } else { |
|
9874 image = ''; |
|
9875 } |
|
9876 icon = settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : ''; |
|
9877 if (text) { |
|
9878 self$$1.classes.add('btn-has-text'); |
|
9879 textHtml = '<span class="' + prefix + 'txt">' + self$$1.encode(text) + '</span>'; |
|
9880 } |
|
9881 ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed="' + settings.active + '"' : ''; |
|
9882 return '<div id="' + id + '" class="' + self$$1.classes + '" role="button"' + ariaPressed + ' tabindex="-1">' + '<button type="button" hidefocus="1" tabindex="-1">' + (icon ? '<i class="' + icon + '"' + image + '></i>' : '') + textHtml + '</button>' + '<button type="button" class="' + prefix + 'open" hidefocus="1" tabindex="-1">' + (self$$1._menuBtnText ? (icon ? '\xA0' : '') + self$$1._menuBtnText : '') + ' <i class="' + prefix + 'caret"></i>' + '</button>' + '</div>'; |
|
9883 }, |
|
9884 postRender: function () { |
|
9885 var self$$1 = this, onClickHandler = self$$1.settings.onclick; |
|
9886 self$$1.on('click', function (e) { |
|
9887 var node = e.target; |
|
9888 if (e.control === this) { |
|
9889 while (node) { |
|
9890 if (e.aria && e.aria.key !== 'down' || node.nodeName === 'BUTTON' && node.className.indexOf('open') === -1) { |
|
9891 e.stopImmediatePropagation(); |
|
9892 if (onClickHandler) { |
|
9893 onClickHandler.call(this, e); |
|
9894 } |
|
9895 return; |
|
9896 } |
|
9897 node = node.parentNode; |
|
9898 } |
|
9899 } |
|
9900 }); |
|
9901 delete self$$1.settings.onclick; |
|
9902 return self$$1._super(); |
|
9903 } |
|
9904 }); |
|
9905 |
|
9906 var StackLayout = FlowLayout.extend({ |
|
9907 Defaults: { |
|
9908 containerClass: 'stack-layout', |
|
9909 controlClass: 'stack-layout-item', |
|
9910 endClass: 'break' |
|
9911 }, |
|
9912 isNative: function () { |
|
9913 return true; |
|
9914 } |
|
9915 }); |
|
9916 |
|
9917 var TabPanel = Panel.extend({ |
|
9918 Defaults: { |
|
9919 layout: 'absolute', |
|
9920 defaults: { type: 'panel' } |
|
9921 }, |
|
9922 activateTab: function (idx) { |
|
9923 var activeTabElm; |
|
9924 if (this.activeTabId) { |
|
9925 activeTabElm = this.getEl(this.activeTabId); |
|
9926 global$7(activeTabElm).removeClass(this.classPrefix + 'active'); |
|
9927 activeTabElm.setAttribute('aria-selected', 'false'); |
|
9928 } |
|
9929 this.activeTabId = 't' + idx; |
|
9930 activeTabElm = this.getEl('t' + idx); |
|
9931 activeTabElm.setAttribute('aria-selected', 'true'); |
|
9932 global$7(activeTabElm).addClass(this.classPrefix + 'active'); |
|
9933 this.items()[idx].show().fire('showtab'); |
|
9934 this.reflow(); |
|
9935 this.items().each(function (item, i) { |
|
9936 if (idx !== i) { |
|
9937 item.hide(); |
|
9938 } |
|
9939 }); |
|
9940 }, |
|
9941 renderHtml: function () { |
|
9942 var self = this; |
|
9943 var layout = self._layout; |
|
9944 var tabsHtml = ''; |
|
9945 var prefix = self.classPrefix; |
|
9946 self.preRender(); |
|
9947 layout.preRender(self); |
|
9948 self.items().each(function (ctrl, i) { |
|
9949 var id = self._id + '-t' + i; |
|
9950 ctrl.aria('role', 'tabpanel'); |
|
9951 ctrl.aria('labelledby', id); |
|
9952 tabsHtml += '<div id="' + id + '" class="' + prefix + 'tab" ' + 'unselectable="on" role="tab" aria-controls="' + ctrl._id + '" aria-selected="false" tabIndex="-1">' + self.encode(ctrl.settings.title) + '</div>'; |
|
9953 }); |
|
9954 return '<div id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1">' + '<div id="' + self._id + '-head" class="' + prefix + 'tabs" role="tablist">' + tabsHtml + '</div>' + '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + layout.renderHtml(self) + '</div>' + '</div>'; |
|
9955 }, |
|
9956 postRender: function () { |
|
9957 var self = this; |
|
9958 self._super(); |
|
9959 self.settings.activeTab = self.settings.activeTab || 0; |
|
9960 self.activateTab(self.settings.activeTab); |
|
9961 this.on('click', function (e) { |
|
9962 var targetParent = e.target.parentNode; |
|
9963 if (targetParent && targetParent.id === self._id + '-head') { |
|
9964 var i = targetParent.childNodes.length; |
|
9965 while (i--) { |
|
9966 if (targetParent.childNodes[i] === e.target) { |
|
9967 self.activateTab(i); |
|
9968 } |
|
9969 } |
|
9970 } |
|
9971 }); |
|
9972 }, |
|
9973 initLayoutRect: function () { |
|
9974 var self = this; |
|
9975 var rect, minW, minH; |
|
9976 minW = funcs.getSize(self.getEl('head')).width; |
|
9977 minW = minW < 0 ? 0 : minW; |
|
9978 minH = 0; |
|
9979 self.items().each(function (item) { |
|
9980 minW = Math.max(minW, item.layoutRect().minW); |
|
9981 minH = Math.max(minH, item.layoutRect().minH); |
|
9982 }); |
|
9983 self.items().each(function (ctrl) { |
|
9984 ctrl.settings.x = 0; |
|
9985 ctrl.settings.y = 0; |
|
9986 ctrl.settings.w = minW; |
|
9987 ctrl.settings.h = minH; |
|
9988 ctrl.layoutRect({ |
|
9989 x: 0, |
|
9990 y: 0, |
|
9991 w: minW, |
|
9992 h: minH |
|
9993 }); |
|
9994 }); |
|
9995 var headH = funcs.getSize(self.getEl('head')).height; |
|
9996 self.settings.minWidth = minW; |
|
9997 self.settings.minHeight = minH + headH; |
|
9998 rect = self._super(); |
|
9999 rect.deltaH += headH; |
|
10000 rect.innerH = rect.h - rect.deltaH; |
|
10001 return rect; |
|
10002 } |
|
10003 }); |
|
10004 |
|
10005 var TextBox = Widget.extend({ |
|
10006 init: function (settings) { |
|
10007 var self$$1 = this; |
|
10008 self$$1._super(settings); |
|
10009 self$$1.classes.add('textbox'); |
|
10010 if (settings.multiline) { |
|
10011 self$$1.classes.add('multiline'); |
|
10012 } else { |
|
10013 self$$1.on('keydown', function (e) { |
|
10014 var rootControl; |
9229 var rootControl; |
10015 if (e.keyCode === 13) { |
9230 if (e.keyCode === 13) { |
10016 e.preventDefault(); |
9231 e.preventDefault(); |
10017 self$$1.parents().reverse().each(function (ctrl) { |
9232 self.parents().reverse().each(function (ctrl) { |
10018 if (ctrl.toJSON) { |
9233 if (ctrl.toJSON) { |
10019 rootControl = ctrl; |
9234 rootControl = ctrl; |
10020 return false; |
9235 return false; |
10021 } |
9236 } |
10022 }); |
9237 }); |
10023 self$$1.fire('submit', { data: rootControl.toJSON() }); |
9238 self.fire('submit', { data: rootControl.toJSON() }); |
10024 } |
9239 } |
10025 }); |
9240 }); |
10026 self$$1.on('keyup', function (e) { |
9241 }, |
10027 self$$1.state.set('value', e.target.value); |
9242 options: function (state) { |
10028 }); |
9243 if (!arguments.length) { |
10029 } |
9244 return this.state.get('options'); |
10030 }, |
9245 } |
10031 repaint: function () { |
9246 this.state.set('options', state); |
10032 var self$$1 = this; |
9247 return this; |
10033 var style, rect, borderBox, borderW, borderH = 0, lastRepaintRect; |
9248 }, |
10034 style = self$$1.getEl().style; |
9249 renderHtml: function () { |
10035 rect = self$$1._layoutRect; |
9250 var self = this; |
10036 lastRepaintRect = self$$1._lastRepaintRect || {}; |
9251 var options, size = ''; |
10037 var doc = document; |
9252 options = createOptions(self._options); |
10038 if (!self$$1.settings.multiline && doc.all && (!doc.documentMode || doc.documentMode <= 8)) { |
9253 if (self.size) { |
10039 style.lineHeight = rect.h - borderH + 'px'; |
9254 size = ' size = "' + self.size + '"'; |
10040 } |
9255 } |
10041 borderBox = self$$1.borderBox; |
9256 return '<select id="' + self._id + '" class="' + self.classes + '"' + size + '>' + options + '</select>'; |
10042 borderW = borderBox.left + borderBox.right + 8; |
9257 }, |
10043 borderH = borderBox.top + borderBox.bottom + (self$$1.settings.multiline ? 8 : 0); |
9258 bindStates: function () { |
10044 if (rect.x !== lastRepaintRect.x) { |
9259 var self = this; |
10045 style.left = rect.x + 'px'; |
9260 self.state.on('change:options', function (e) { |
10046 lastRepaintRect.x = rect.x; |
9261 self.getEl().innerHTML = createOptions(e.value); |
10047 } |
9262 }); |
10048 if (rect.y !== lastRepaintRect.y) { |
9263 return self._super(); |
10049 style.top = rect.y + 'px'; |
9264 } |
10050 lastRepaintRect.y = rect.y; |
9265 }); |
10051 } |
9266 |
10052 if (rect.w !== lastRepaintRect.w) { |
9267 function constrain(value, minVal, maxVal) { |
10053 style.width = rect.w - borderW + 'px'; |
9268 if (value < minVal) { |
10054 lastRepaintRect.w = rect.w; |
9269 value = minVal; |
10055 } |
9270 } |
10056 if (rect.h !== lastRepaintRect.h) { |
9271 if (value > maxVal) { |
10057 style.height = rect.h - borderH + 'px'; |
9272 value = maxVal; |
10058 lastRepaintRect.h = rect.h; |
9273 } |
10059 } |
9274 return value; |
10060 self$$1._lastRepaintRect = lastRepaintRect; |
9275 } |
10061 self$$1.fire('repaint', {}, false); |
9276 function setAriaProp(el, name, value) { |
10062 return self$$1; |
9277 el.setAttribute('aria-' + name, value); |
10063 }, |
9278 } |
10064 renderHtml: function () { |
9279 function updateSliderHandle(ctrl, value) { |
10065 var self$$1 = this; |
9280 var maxHandlePos, shortSizeName, sizeName, stylePosName, styleValue, handleEl; |
10066 var settings = self$$1.settings; |
9281 if (ctrl.settings.orientation === 'v') { |
10067 var attrs, elm; |
9282 stylePosName = 'top'; |
10068 attrs = { |
9283 sizeName = 'height'; |
10069 id: self$$1._id, |
9284 shortSizeName = 'h'; |
10070 hidefocus: '1' |
9285 } else { |
10071 }; |
9286 stylePosName = 'left'; |
10072 global$4.each([ |
9287 sizeName = 'width'; |
10073 'rows', |
9288 shortSizeName = 'w'; |
10074 'spellcheck', |
9289 } |
10075 'maxLength', |
9290 handleEl = ctrl.getEl('handle'); |
10076 'size', |
9291 maxHandlePos = (ctrl.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName]; |
10077 'readonly', |
9292 styleValue = maxHandlePos * ((value - ctrl._minValue) / (ctrl._maxValue - ctrl._minValue)) + 'px'; |
10078 'min', |
9293 handleEl.style[stylePosName] = styleValue; |
10079 'max', |
9294 handleEl.style.height = ctrl.layoutRect().h + 'px'; |
10080 'step', |
9295 setAriaProp(handleEl, 'valuenow', value); |
10081 'list', |
9296 setAriaProp(handleEl, 'valuetext', '' + ctrl.settings.previewFilter(value)); |
10082 'pattern', |
9297 setAriaProp(handleEl, 'valuemin', ctrl._minValue); |
10083 'placeholder', |
9298 setAriaProp(handleEl, 'valuemax', ctrl._maxValue); |
10084 'required', |
9299 } |
10085 'multiple' |
9300 var Slider = Widget.extend({ |
10086 ], function (name$$1) { |
9301 init: function (settings) { |
10087 attrs[name$$1] = settings[name$$1]; |
9302 var self = this; |
|
9303 if (!settings.previewFilter) { |
|
9304 settings.previewFilter = function (value) { |
|
9305 return Math.round(value * 100) / 100; |
|
9306 }; |
|
9307 } |
|
9308 self._super(settings); |
|
9309 self.classes.add('slider'); |
|
9310 if (settings.orientation === 'v') { |
|
9311 self.classes.add('vertical'); |
|
9312 } |
|
9313 self._minValue = isNumber$1(settings.minValue) ? settings.minValue : 0; |
|
9314 self._maxValue = isNumber$1(settings.maxValue) ? settings.maxValue : 100; |
|
9315 self._initValue = self.state.get('value'); |
|
9316 }, |
|
9317 renderHtml: function () { |
|
9318 var self = this, id = self._id, prefix = self.classPrefix; |
|
9319 return '<div id="' + id + '" class="' + self.classes + '">' + '<div id="' + id + '-handle" class="' + prefix + 'slider-handle" role="slider" tabindex="-1"></div>' + '</div>'; |
|
9320 }, |
|
9321 reset: function () { |
|
9322 this.value(this._initValue).repaint(); |
|
9323 }, |
|
9324 postRender: function () { |
|
9325 var self = this; |
|
9326 var minValue, maxValue, screenCordName, stylePosName, sizeName, shortSizeName; |
|
9327 function toFraction(min, max, val) { |
|
9328 return (val + min) / (max - min); |
|
9329 } |
|
9330 function fromFraction(min, max, val) { |
|
9331 return val * (max - min) - min; |
|
9332 } |
|
9333 function handleKeyboard(minValue, maxValue) { |
|
9334 function alter(delta) { |
|
9335 var value; |
|
9336 value = self.value(); |
|
9337 value = fromFraction(minValue, maxValue, toFraction(minValue, maxValue, value) + delta * 0.05); |
|
9338 value = constrain(value, minValue, maxValue); |
|
9339 self.value(value); |
|
9340 self.fire('dragstart', { value: value }); |
|
9341 self.fire('drag', { value: value }); |
|
9342 self.fire('dragend', { value: value }); |
|
9343 } |
|
9344 self.on('keydown', function (e) { |
|
9345 switch (e.keyCode) { |
|
9346 case 37: |
|
9347 case 38: |
|
9348 alter(-1); |
|
9349 break; |
|
9350 case 39: |
|
9351 case 40: |
|
9352 alter(1); |
|
9353 break; |
|
9354 } |
|
9355 }); |
|
9356 } |
|
9357 function handleDrag(minValue, maxValue, handleEl) { |
|
9358 var startPos, startHandlePos, maxHandlePos, handlePos, value; |
|
9359 self._dragHelper = new DragHelper(self._id, { |
|
9360 handle: self._id + '-handle', |
|
9361 start: function (e) { |
|
9362 startPos = e[screenCordName]; |
|
9363 startHandlePos = parseInt(self.getEl('handle').style[stylePosName], 10); |
|
9364 maxHandlePos = (self.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName]; |
|
9365 self.fire('dragstart', { value: value }); |
|
9366 }, |
|
9367 drag: function (e) { |
|
9368 var delta = e[screenCordName] - startPos; |
|
9369 handlePos = constrain(startHandlePos + delta, 0, maxHandlePos); |
|
9370 handleEl.style[stylePosName] = handlePos + 'px'; |
|
9371 value = minValue + handlePos / maxHandlePos * (maxValue - minValue); |
|
9372 self.value(value); |
|
9373 self.tooltip().text('' + self.settings.previewFilter(value)).show().moveRel(handleEl, 'bc tc'); |
|
9374 self.fire('drag', { value: value }); |
|
9375 }, |
|
9376 stop: function () { |
|
9377 self.tooltip().hide(); |
|
9378 self.fire('dragend', { value: value }); |
|
9379 } |
|
9380 }); |
|
9381 } |
|
9382 minValue = self._minValue; |
|
9383 maxValue = self._maxValue; |
|
9384 if (self.settings.orientation === 'v') { |
|
9385 screenCordName = 'screenY'; |
|
9386 stylePosName = 'top'; |
|
9387 sizeName = 'height'; |
|
9388 shortSizeName = 'h'; |
|
9389 } else { |
|
9390 screenCordName = 'screenX'; |
|
9391 stylePosName = 'left'; |
|
9392 sizeName = 'width'; |
|
9393 shortSizeName = 'w'; |
|
9394 } |
|
9395 self._super(); |
|
9396 handleKeyboard(minValue, maxValue); |
|
9397 handleDrag(minValue, maxValue, self.getEl('handle')); |
|
9398 }, |
|
9399 repaint: function () { |
|
9400 this._super(); |
|
9401 updateSliderHandle(this, this.value()); |
|
9402 }, |
|
9403 bindStates: function () { |
|
9404 var self = this; |
|
9405 self.state.on('change:value', function (e) { |
|
9406 updateSliderHandle(self, e.value); |
|
9407 }); |
|
9408 return self._super(); |
|
9409 } |
|
9410 }); |
|
9411 |
|
9412 var Spacer = Widget.extend({ |
|
9413 renderHtml: function () { |
|
9414 var self = this; |
|
9415 self.classes.add('spacer'); |
|
9416 self.canFocus = false; |
|
9417 return '<div id="' + self._id + '" class="' + self.classes + '"></div>'; |
|
9418 } |
|
9419 }); |
|
9420 |
|
9421 var SplitButton = MenuButton.extend({ |
|
9422 Defaults: { |
|
9423 classes: 'widget btn splitbtn', |
|
9424 role: 'button' |
|
9425 }, |
|
9426 repaint: function () { |
|
9427 var self = this; |
|
9428 var elm = self.getEl(); |
|
9429 var rect = self.layoutRect(); |
|
9430 var mainButtonElm, menuButtonElm; |
|
9431 self._super(); |
|
9432 mainButtonElm = elm.firstChild; |
|
9433 menuButtonElm = elm.lastChild; |
|
9434 global$7(mainButtonElm).css({ |
|
9435 width: rect.w - funcs.getSize(menuButtonElm).width, |
|
9436 height: rect.h - 2 |
|
9437 }); |
|
9438 global$7(menuButtonElm).css({ height: rect.h - 2 }); |
|
9439 return self; |
|
9440 }, |
|
9441 activeMenu: function (state) { |
|
9442 var self = this; |
|
9443 global$7(self.getEl().lastChild).toggleClass(self.classPrefix + 'active', state); |
|
9444 }, |
|
9445 renderHtml: function () { |
|
9446 var self = this; |
|
9447 var id = self._id; |
|
9448 var prefix = self.classPrefix; |
|
9449 var image; |
|
9450 var icon = self.state.get('icon'); |
|
9451 var text = self.state.get('text'); |
|
9452 var settings = self.settings; |
|
9453 var textHtml = '', ariaPressed; |
|
9454 image = settings.image; |
|
9455 if (image) { |
|
9456 icon = 'none'; |
|
9457 if (typeof image !== 'string') { |
|
9458 image = domGlobals.window.getSelection ? image[0] : image[1]; |
|
9459 } |
|
9460 image = ' style="background-image: url(\'' + image + '\')"'; |
|
9461 } else { |
|
9462 image = ''; |
|
9463 } |
|
9464 icon = settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : ''; |
|
9465 if (text) { |
|
9466 self.classes.add('btn-has-text'); |
|
9467 textHtml = '<span class="' + prefix + 'txt">' + self.encode(text) + '</span>'; |
|
9468 } |
|
9469 ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed="' + settings.active + '"' : ''; |
|
9470 return '<div id="' + id + '" class="' + self.classes + '" role="button"' + ariaPressed + ' tabindex="-1">' + '<button type="button" hidefocus="1" tabindex="-1">' + (icon ? '<i class="' + icon + '"' + image + '></i>' : '') + textHtml + '</button>' + '<button type="button" class="' + prefix + 'open" hidefocus="1" tabindex="-1">' + (self._menuBtnText ? (icon ? '\xA0' : '') + self._menuBtnText : '') + ' <i class="' + prefix + 'caret"></i>' + '</button>' + '</div>'; |
|
9471 }, |
|
9472 postRender: function () { |
|
9473 var self = this, onClickHandler = self.settings.onclick; |
|
9474 self.on('click', function (e) { |
|
9475 var node = e.target; |
|
9476 if (e.control === this) { |
|
9477 while (node) { |
|
9478 if (e.aria && e.aria.key !== 'down' || node.nodeName === 'BUTTON' && node.className.indexOf('open') === -1) { |
|
9479 e.stopImmediatePropagation(); |
|
9480 if (onClickHandler) { |
|
9481 onClickHandler.call(this, e); |
|
9482 } |
|
9483 return; |
|
9484 } |
|
9485 node = node.parentNode; |
|
9486 } |
|
9487 } |
|
9488 }); |
|
9489 delete self.settings.onclick; |
|
9490 return self._super(); |
|
9491 } |
|
9492 }); |
|
9493 |
|
9494 var StackLayout = FlowLayout.extend({ |
|
9495 Defaults: { |
|
9496 containerClass: 'stack-layout', |
|
9497 controlClass: 'stack-layout-item', |
|
9498 endClass: 'break' |
|
9499 }, |
|
9500 isNative: function () { |
|
9501 return true; |
|
9502 } |
|
9503 }); |
|
9504 |
|
9505 var TabPanel = Panel.extend({ |
|
9506 Defaults: { |
|
9507 layout: 'absolute', |
|
9508 defaults: { type: 'panel' } |
|
9509 }, |
|
9510 activateTab: function (idx) { |
|
9511 var activeTabElm; |
|
9512 if (this.activeTabId) { |
|
9513 activeTabElm = this.getEl(this.activeTabId); |
|
9514 global$7(activeTabElm).removeClass(this.classPrefix + 'active'); |
|
9515 activeTabElm.setAttribute('aria-selected', 'false'); |
|
9516 } |
|
9517 this.activeTabId = 't' + idx; |
|
9518 activeTabElm = this.getEl('t' + idx); |
|
9519 activeTabElm.setAttribute('aria-selected', 'true'); |
|
9520 global$7(activeTabElm).addClass(this.classPrefix + 'active'); |
|
9521 this.items()[idx].show().fire('showtab'); |
|
9522 this.reflow(); |
|
9523 this.items().each(function (item, i) { |
|
9524 if (idx !== i) { |
|
9525 item.hide(); |
|
9526 } |
|
9527 }); |
|
9528 }, |
|
9529 renderHtml: function () { |
|
9530 var self = this; |
|
9531 var layout = self._layout; |
|
9532 var tabsHtml = ''; |
|
9533 var prefix = self.classPrefix; |
|
9534 self.preRender(); |
|
9535 layout.preRender(self); |
|
9536 self.items().each(function (ctrl, i) { |
|
9537 var id = self._id + '-t' + i; |
|
9538 ctrl.aria('role', 'tabpanel'); |
|
9539 ctrl.aria('labelledby', id); |
|
9540 tabsHtml += '<div id="' + id + '" class="' + prefix + 'tab" ' + 'unselectable="on" role="tab" aria-controls="' + ctrl._id + '" aria-selected="false" tabIndex="-1">' + self.encode(ctrl.settings.title) + '</div>'; |
|
9541 }); |
|
9542 return '<div id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1">' + '<div id="' + self._id + '-head" class="' + prefix + 'tabs" role="tablist">' + tabsHtml + '</div>' + '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + layout.renderHtml(self) + '</div>' + '</div>'; |
|
9543 }, |
|
9544 postRender: function () { |
|
9545 var self = this; |
|
9546 self._super(); |
|
9547 self.settings.activeTab = self.settings.activeTab || 0; |
|
9548 self.activateTab(self.settings.activeTab); |
|
9549 this.on('click', function (e) { |
|
9550 var targetParent = e.target.parentNode; |
|
9551 if (targetParent && targetParent.id === self._id + '-head') { |
|
9552 var i = targetParent.childNodes.length; |
|
9553 while (i--) { |
|
9554 if (targetParent.childNodes[i] === e.target) { |
|
9555 self.activateTab(i); |
|
9556 } |
|
9557 } |
|
9558 } |
|
9559 }); |
|
9560 }, |
|
9561 initLayoutRect: function () { |
|
9562 var self = this; |
|
9563 var rect, minW, minH; |
|
9564 minW = funcs.getSize(self.getEl('head')).width; |
|
9565 minW = minW < 0 ? 0 : minW; |
|
9566 minH = 0; |
|
9567 self.items().each(function (item) { |
|
9568 minW = Math.max(minW, item.layoutRect().minW); |
|
9569 minH = Math.max(minH, item.layoutRect().minH); |
|
9570 }); |
|
9571 self.items().each(function (ctrl) { |
|
9572 ctrl.settings.x = 0; |
|
9573 ctrl.settings.y = 0; |
|
9574 ctrl.settings.w = minW; |
|
9575 ctrl.settings.h = minH; |
|
9576 ctrl.layoutRect({ |
|
9577 x: 0, |
|
9578 y: 0, |
|
9579 w: minW, |
|
9580 h: minH |
|
9581 }); |
|
9582 }); |
|
9583 var headH = funcs.getSize(self.getEl('head')).height; |
|
9584 self.settings.minWidth = minW; |
|
9585 self.settings.minHeight = minH + headH; |
|
9586 rect = self._super(); |
|
9587 rect.deltaH += headH; |
|
9588 rect.innerH = rect.h - rect.deltaH; |
|
9589 return rect; |
|
9590 } |
|
9591 }); |
|
9592 |
|
9593 var TextBox = Widget.extend({ |
|
9594 init: function (settings) { |
|
9595 var self = this; |
|
9596 self._super(settings); |
|
9597 self.classes.add('textbox'); |
|
9598 if (settings.multiline) { |
|
9599 self.classes.add('multiline'); |
|
9600 } else { |
|
9601 self.on('keydown', function (e) { |
|
9602 var rootControl; |
|
9603 if (e.keyCode === 13) { |
|
9604 e.preventDefault(); |
|
9605 self.parents().reverse().each(function (ctrl) { |
|
9606 if (ctrl.toJSON) { |
|
9607 rootControl = ctrl; |
|
9608 return false; |
|
9609 } |
|
9610 }); |
|
9611 self.fire('submit', { data: rootControl.toJSON() }); |
|
9612 } |
|
9613 }); |
|
9614 self.on('keyup', function (e) { |
|
9615 self.state.set('value', e.target.value); |
|
9616 }); |
|
9617 } |
|
9618 }, |
|
9619 repaint: function () { |
|
9620 var self = this; |
|
9621 var style, rect, borderBox, borderW, borderH = 0, lastRepaintRect; |
|
9622 style = self.getEl().style; |
|
9623 rect = self._layoutRect; |
|
9624 lastRepaintRect = self._lastRepaintRect || {}; |
|
9625 var doc = domGlobals.document; |
|
9626 if (!self.settings.multiline && doc.all && (!doc.documentMode || doc.documentMode <= 8)) { |
|
9627 style.lineHeight = rect.h - borderH + 'px'; |
|
9628 } |
|
9629 borderBox = self.borderBox; |
|
9630 borderW = borderBox.left + borderBox.right + 8; |
|
9631 borderH = borderBox.top + borderBox.bottom + (self.settings.multiline ? 8 : 0); |
|
9632 if (rect.x !== lastRepaintRect.x) { |
|
9633 style.left = rect.x + 'px'; |
|
9634 lastRepaintRect.x = rect.x; |
|
9635 } |
|
9636 if (rect.y !== lastRepaintRect.y) { |
|
9637 style.top = rect.y + 'px'; |
|
9638 lastRepaintRect.y = rect.y; |
|
9639 } |
|
9640 if (rect.w !== lastRepaintRect.w) { |
|
9641 style.width = rect.w - borderW + 'px'; |
|
9642 lastRepaintRect.w = rect.w; |
|
9643 } |
|
9644 if (rect.h !== lastRepaintRect.h) { |
|
9645 style.height = rect.h - borderH + 'px'; |
|
9646 lastRepaintRect.h = rect.h; |
|
9647 } |
|
9648 self._lastRepaintRect = lastRepaintRect; |
|
9649 self.fire('repaint', {}, false); |
|
9650 return self; |
|
9651 }, |
|
9652 renderHtml: function () { |
|
9653 var self = this; |
|
9654 var settings = self.settings; |
|
9655 var attrs, elm; |
|
9656 attrs = { |
|
9657 id: self._id, |
|
9658 hidefocus: '1' |
|
9659 }; |
|
9660 global$4.each([ |
|
9661 'rows', |
|
9662 'spellcheck', |
|
9663 'maxLength', |
|
9664 'size', |
|
9665 'readonly', |
|
9666 'min', |
|
9667 'max', |
|
9668 'step', |
|
9669 'list', |
|
9670 'pattern', |
|
9671 'placeholder', |
|
9672 'required', |
|
9673 'multiple' |
|
9674 ], function (name) { |
|
9675 attrs[name] = settings[name]; |
|
9676 }); |
|
9677 if (self.disabled()) { |
|
9678 attrs.disabled = 'disabled'; |
|
9679 } |
|
9680 if (settings.subtype) { |
|
9681 attrs.type = settings.subtype; |
|
9682 } |
|
9683 elm = funcs.create(settings.multiline ? 'textarea' : 'input', attrs); |
|
9684 elm.value = self.state.get('value'); |
|
9685 elm.className = self.classes.toString(); |
|
9686 return elm.outerHTML; |
|
9687 }, |
|
9688 value: function (value) { |
|
9689 if (arguments.length) { |
|
9690 this.state.set('value', value); |
|
9691 return this; |
|
9692 } |
|
9693 if (this.state.get('rendered')) { |
|
9694 this.state.set('value', this.getEl().value); |
|
9695 } |
|
9696 return this.state.get('value'); |
|
9697 }, |
|
9698 postRender: function () { |
|
9699 var self = this; |
|
9700 self.getEl().value = self.state.get('value'); |
|
9701 self._super(); |
|
9702 self.$el.on('change', function (e) { |
|
9703 self.state.set('value', e.target.value); |
|
9704 self.fire('change', e); |
|
9705 }); |
|
9706 }, |
|
9707 bindStates: function () { |
|
9708 var self = this; |
|
9709 self.state.on('change:value', function (e) { |
|
9710 if (self.getEl().value !== e.value) { |
|
9711 self.getEl().value = e.value; |
|
9712 } |
|
9713 }); |
|
9714 self.state.on('change:disabled', function (e) { |
|
9715 self.getEl().disabled = e.value; |
|
9716 }); |
|
9717 return self._super(); |
|
9718 }, |
|
9719 remove: function () { |
|
9720 this.$el.off(); |
|
9721 this._super(); |
|
9722 } |
|
9723 }); |
|
9724 |
|
9725 var getApi = function () { |
|
9726 return { |
|
9727 Selector: Selector, |
|
9728 Collection: Collection$2, |
|
9729 ReflowQueue: ReflowQueue, |
|
9730 Control: Control$1, |
|
9731 Factory: global$b, |
|
9732 KeyboardNavigation: KeyboardNavigation, |
|
9733 Container: Container, |
|
9734 DragHelper: DragHelper, |
|
9735 Scrollable: Scrollable, |
|
9736 Panel: Panel, |
|
9737 Movable: Movable, |
|
9738 Resizable: Resizable, |
|
9739 FloatPanel: FloatPanel, |
|
9740 Window: Window, |
|
9741 MessageBox: MessageBox, |
|
9742 Tooltip: Tooltip, |
|
9743 Widget: Widget, |
|
9744 Progress: Progress, |
|
9745 Notification: Notification, |
|
9746 Layout: Layout$1, |
|
9747 AbsoluteLayout: AbsoluteLayout, |
|
9748 Button: Button, |
|
9749 ButtonGroup: ButtonGroup, |
|
9750 Checkbox: Checkbox, |
|
9751 ComboBox: ComboBox, |
|
9752 ColorBox: ColorBox, |
|
9753 PanelButton: PanelButton, |
|
9754 ColorButton: ColorButton, |
|
9755 ColorPicker: ColorPicker, |
|
9756 Path: Path, |
|
9757 ElementPath: ElementPath, |
|
9758 FormItem: FormItem, |
|
9759 Form: Form, |
|
9760 FieldSet: FieldSet, |
|
9761 FilePicker: FilePicker, |
|
9762 FitLayout: FitLayout, |
|
9763 FlexLayout: FlexLayout, |
|
9764 FlowLayout: FlowLayout, |
|
9765 FormatControls: FormatControls, |
|
9766 GridLayout: GridLayout, |
|
9767 Iframe: Iframe, |
|
9768 InfoBox: InfoBox, |
|
9769 Label: Label, |
|
9770 Toolbar: Toolbar$1, |
|
9771 MenuBar: MenuBar, |
|
9772 MenuButton: MenuButton, |
|
9773 MenuItem: MenuItem, |
|
9774 Throbber: Throbber, |
|
9775 Menu: Menu, |
|
9776 ListBox: ListBox, |
|
9777 Radio: Radio, |
|
9778 ResizeHandle: ResizeHandle, |
|
9779 SelectBox: SelectBox, |
|
9780 Slider: Slider, |
|
9781 Spacer: Spacer, |
|
9782 SplitButton: SplitButton, |
|
9783 StackLayout: StackLayout, |
|
9784 TabPanel: TabPanel, |
|
9785 TextBox: TextBox, |
|
9786 DropZone: DropZone, |
|
9787 BrowseButton: BrowseButton |
|
9788 }; |
|
9789 }; |
|
9790 var appendTo = function (target) { |
|
9791 if (target.ui) { |
|
9792 global$4.each(getApi(), function (ref, key) { |
|
9793 target.ui[key] = ref; |
|
9794 }); |
|
9795 } else { |
|
9796 target.ui = getApi(); |
|
9797 } |
|
9798 }; |
|
9799 var registerToFactory = function () { |
|
9800 global$4.each(getApi(), function (ref, key) { |
|
9801 global$b.add(key, ref); |
10088 }); |
9802 }); |
10089 if (self$$1.disabled()) { |
9803 }; |
10090 attrs.disabled = 'disabled'; |
9804 var Api = { |
10091 } |
9805 appendTo: appendTo, |
10092 if (settings.subtype) { |
9806 registerToFactory: registerToFactory |
10093 attrs.type = settings.subtype; |
9807 }; |
10094 } |
9808 |
10095 elm = funcs.create(settings.multiline ? 'textarea' : 'input', attrs); |
9809 Api.registerToFactory(); |
10096 elm.value = self$$1.state.get('value'); |
9810 Api.appendTo(window.tinymce ? window.tinymce : {}); |
10097 elm.className = self$$1.classes.toString(); |
9811 global.add('inlite', function (editor) { |
10098 return elm.outerHTML; |
9812 var panel = create$3(); |
10099 }, |
9813 FormatControls.setup(editor); |
10100 value: function (value) { |
9814 Buttons.addToEditor(editor, panel); |
10101 if (arguments.length) { |
9815 return ThemeApi.get(editor, panel); |
10102 this.state.set('value', value); |
9816 }); |
10103 return this; |
9817 function Theme () { |
10104 } |
|
10105 if (this.state.get('rendered')) { |
|
10106 this.state.set('value', this.getEl().value); |
|
10107 } |
|
10108 return this.state.get('value'); |
|
10109 }, |
|
10110 postRender: function () { |
|
10111 var self$$1 = this; |
|
10112 self$$1.getEl().value = self$$1.state.get('value'); |
|
10113 self$$1._super(); |
|
10114 self$$1.$el.on('change', function (e) { |
|
10115 self$$1.state.set('value', e.target.value); |
|
10116 self$$1.fire('change', e); |
|
10117 }); |
|
10118 }, |
|
10119 bindStates: function () { |
|
10120 var self$$1 = this; |
|
10121 self$$1.state.on('change:value', function (e) { |
|
10122 if (self$$1.getEl().value !== e.value) { |
|
10123 self$$1.getEl().value = e.value; |
|
10124 } |
|
10125 }); |
|
10126 self$$1.state.on('change:disabled', function (e) { |
|
10127 self$$1.getEl().disabled = e.value; |
|
10128 }); |
|
10129 return self$$1._super(); |
|
10130 }, |
|
10131 remove: function () { |
|
10132 this.$el.off(); |
|
10133 this._super(); |
|
10134 } |
9818 } |
10135 }); |
9819 |
10136 |
9820 return Theme; |
10137 var getApi = function () { |
9821 |
10138 return { |
9822 }(window)); |
10139 Selector: Selector, |
|
10140 Collection: Collection$2, |
|
10141 ReflowQueue: $_cqjgb518wjjgwek2f, |
|
10142 Control: Control$1, |
|
10143 Factory: global$11, |
|
10144 KeyboardNavigation: KeyboardNavigation, |
|
10145 Container: Container, |
|
10146 DragHelper: DragHelper, |
|
10147 Scrollable: $_8woeth19ajjgwek4b, |
|
10148 Panel: Panel, |
|
10149 Movable: $_8zu82i18yjjgwek2l, |
|
10150 Resizable: $_20hy1119bjjgwek4f, |
|
10151 FloatPanel: FloatPanel, |
|
10152 Window: Window$$1, |
|
10153 MessageBox: MessageBox, |
|
10154 Tooltip: Tooltip, |
|
10155 Widget: Widget, |
|
10156 Progress: Progress, |
|
10157 Notification: Notification, |
|
10158 Layout: Layout$1, |
|
10159 AbsoluteLayout: AbsoluteLayout, |
|
10160 Button: Button, |
|
10161 ButtonGroup: ButtonGroup, |
|
10162 Checkbox: Checkbox, |
|
10163 ComboBox: ComboBox, |
|
10164 ColorBox: ColorBox, |
|
10165 PanelButton: PanelButton, |
|
10166 ColorButton: ColorButton, |
|
10167 ColorPicker: ColorPicker, |
|
10168 Path: Path, |
|
10169 ElementPath: ElementPath, |
|
10170 FormItem: FormItem, |
|
10171 Form: Form, |
|
10172 FieldSet: FieldSet, |
|
10173 FilePicker: FilePicker, |
|
10174 FitLayout: FitLayout, |
|
10175 FlexLayout: FlexLayout, |
|
10176 FlowLayout: FlowLayout, |
|
10177 FormatControls: $_gg6ikw1bejjgwekc5, |
|
10178 GridLayout: GridLayout, |
|
10179 Iframe: Iframe, |
|
10180 InfoBox: InfoBox, |
|
10181 Label: Label, |
|
10182 Toolbar: Toolbar$1, |
|
10183 MenuBar: MenuBar, |
|
10184 MenuButton: MenuButton, |
|
10185 MenuItem: MenuItem, |
|
10186 Throbber: Throbber, |
|
10187 Menu: Menu, |
|
10188 ListBox: ListBox, |
|
10189 Radio: Radio, |
|
10190 ResizeHandle: ResizeHandle, |
|
10191 SelectBox: SelectBox, |
|
10192 Slider: Slider, |
|
10193 Spacer: Spacer, |
|
10194 SplitButton: SplitButton, |
|
10195 StackLayout: StackLayout, |
|
10196 TabPanel: TabPanel, |
|
10197 TextBox: TextBox, |
|
10198 DropZone: DropZone, |
|
10199 BrowseButton: BrowseButton |
|
10200 }; |
|
10201 }; |
|
10202 var appendTo = function (target) { |
|
10203 if (target.ui) { |
|
10204 global$4.each(getApi(), function (ref, key) { |
|
10205 target.ui[key] = ref; |
|
10206 }); |
|
10207 } else { |
|
10208 target.ui = getApi(); |
|
10209 } |
|
10210 }; |
|
10211 var registerToFactory = function () { |
|
10212 global$4.each(getApi(), function (ref, key) { |
|
10213 global$11.add(key, ref); |
|
10214 }); |
|
10215 }; |
|
10216 var Api = { |
|
10217 appendTo: appendTo, |
|
10218 registerToFactory: registerToFactory |
|
10219 }; |
|
10220 |
|
10221 Api.registerToFactory(); |
|
10222 Api.appendTo(window.tinymce ? window.tinymce : {}); |
|
10223 global.add('inlite', function (editor) { |
|
10224 var panel = create$3(); |
|
10225 $_gg6ikw1bejjgwekc5.setup(editor); |
|
10226 $_epdxt419djjgwek4l.addToEditor(editor, panel); |
|
10227 return $_7y4x3k17sjjgwejyw.get(editor, panel); |
|
10228 }); |
|
10229 function Theme () { |
|
10230 } |
|
10231 |
|
10232 return Theme; |
|
10233 |
|
10234 }()); |
|
10235 })(); |
9823 })(); |