yy-form-making
Version:
1,763 lines (1,695 loc) • 318 kB
JavaScript
(function () {
var inlite = (function () {
'use strict';
var global = tinymce.util.Tools.resolve('tinymce.ThemeManager');
var global$1 = tinymce.util.Tools.resolve('tinymce.Env');
var global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
var global$3 = tinymce.util.Tools.resolve('tinymce.util.Delay');
var flatten = function (arr) {
return arr.reduce(function (results, item) {
return Array.isArray(item) ? results.concat(flatten(item)) : results.concat(item);
}, []);
};
var $_g0v1s917zjnlpb9f4 = { flatten: flatten };
var result = function (id, rect) {
return {
id: id,
rect: rect
};
};
var match = function (editor, matchers) {
for (var i = 0; i < matchers.length; i++) {
var f = matchers[i];
var result_1 = f(editor);
if (result_1) {
return result_1;
}
}
return null;
};
var $_800pcq181jnlpb9f7 = {
match: match,
result: result
};
var fromClientRect = function (clientRect) {
return {
x: clientRect.left,
y: clientRect.top,
w: clientRect.width,
h: clientRect.height
};
};
var toClientRect = function (geomRect) {
return {
left: geomRect.x,
top: geomRect.y,
width: geomRect.w,
height: geomRect.h,
right: geomRect.x + geomRect.w,
bottom: geomRect.y + geomRect.h
};
};
var $_ek0w81183jnlpb9f9 = {
fromClientRect: fromClientRect,
toClientRect: toClientRect
};
var toAbsolute = function (rect) {
var vp = global$2.DOM.getViewPort();
return {
x: rect.x + vp.x,
y: rect.y + vp.y,
w: rect.w,
h: rect.h
};
};
var measureElement = function (elm) {
var clientRect = elm.getBoundingClientRect();
return toAbsolute({
x: clientRect.left,
y: clientRect.top,
w: Math.max(elm.clientWidth, elm.offsetWidth),
h: Math.max(elm.clientHeight, elm.offsetHeight)
});
};
var getElementRect = function (editor, elm) {
return measureElement(elm);
};
var getPageAreaRect = function (editor) {
return measureElement(editor.getElement().ownerDocument.body);
};
var getContentAreaRect = function (editor) {
return measureElement(editor.getContentAreaContainer() || editor.getBody());
};
var getSelectionRect = function (editor) {
var clientRect = editor.selection.getBoundingClientRect();
return clientRect ? toAbsolute($_ek0w81183jnlpb9f9.fromClientRect(clientRect)) : null;
};
var $_f9q9d182jnlpb9f8 = {
getElementRect: getElementRect,
getPageAreaRect: getPageAreaRect,
getContentAreaRect: getContentAreaRect,
getSelectionRect: getSelectionRect
};
var element = function (element, predicateIds) {
return function (editor) {
for (var i = 0; i < predicateIds.length; i++) {
if (predicateIds[i].predicate(element)) {
var result = $_800pcq181jnlpb9f7.result(predicateIds[i].id, $_f9q9d182jnlpb9f8.getElementRect(editor, element));
return result;
}
}
return null;
};
};
var parent = function (elements, predicateIds) {
return function (editor) {
for (var i = 0; i < elements.length; i++) {
for (var x = 0; x < predicateIds.length; x++) {
if (predicateIds[x].predicate(elements[i])) {
return $_800pcq181jnlpb9f7.result(predicateIds[x].id, $_f9q9d182jnlpb9f8.getElementRect(editor, elements[i]));
}
}
}
return null;
};
};
var $_2yam1d180jnlpb9f5 = {
element: element,
parent: parent
};
var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools');
var create = function (id, predicate) {
return {
id: id,
predicate: predicate
};
};
var fromContextToolbars = function (toolbars) {
return global$4.map(toolbars, function (toolbar) {
return create(toolbar.id, toolbar.predicate);
});
};
var $_47e772184jnlpb9fb = {
create: create,
fromContextToolbars: fromContextToolbars
};
var textSelection = function (id) {
return function (editor) {
if (!editor.selection.isCollapsed()) {
var result = $_800pcq181jnlpb9f7.result(id, $_f9q9d182jnlpb9f8.getSelectionRect(editor));
return result;
}
return null;
};
};
var emptyTextBlock = function (elements, id) {
return function (editor) {
var i;
var textBlockElementsMap = editor.schema.getTextBlockElements();
for (i = 0; i < elements.length; i++) {
if (elements[i].nodeName === 'TABLE') {
return null;
}
}
for (i = 0; i < elements.length; i++) {
if (elements[i].nodeName in textBlockElementsMap) {
if (editor.dom.isEmpty(elements[i])) {
return $_800pcq181jnlpb9f7.result(id, $_f9q9d182jnlpb9f8.getSelectionRect(editor));
}
return null;
}
}
return null;
};
};
var $_bcakpn186jnlpb9fc = {
textSelection: textSelection,
emptyTextBlock: emptyTextBlock
};
var fireSkinLoaded = function (editor) {
editor.fire('SkinLoaded');
};
var fireBeforeRenderUI = function (editor) {
return editor.fire('BeforeRenderUI');
};
var $_3u73qy188jnlpb9ff = {
fireSkinLoaded: fireSkinLoaded,
fireBeforeRenderUI: fireBeforeRenderUI
};
var global$5 = tinymce.util.Tools.resolve('tinymce.EditorManager');
var isType = function (type) {
return function (value) {
return typeof value === type;
};
};
var isArray = function (value) {
return Array.isArray(value);
};
var isNull = function (value) {
return value === null;
};
var isObject = function (predicate) {
return function (value) {
return !isNull(value) && !isArray(value) && predicate(value);
};
};
var isString = function (value) {
return isType('string')(value);
};
var isNumber = function (value) {
return isType('number')(value);
};
var isFunction = function (value) {
return isType('function')(value);
};
var isBoolean = function (value) {
return isType('boolean')(value);
};
var $_iftpu18cjnlpb9fl = {
isString: isString,
isNumber: isNumber,
isBoolean: isBoolean,
isFunction: isFunction,
isObject: isObject(isType('object')),
isNull: isNull,
isArray: isArray
};
var validDefaultOrDie = function (value, predicate) {
if (predicate(value)) {
return true;
}
throw new Error('Default value doesn\'t match requested type.');
};
var getByTypeOr = function (predicate) {
return function (editor, name, defaultValue) {
var settings = editor.settings;
validDefaultOrDie(defaultValue, predicate);
return name in settings && predicate(settings[name]) ? settings[name] : defaultValue;
};
};
var splitNoEmpty = function (str, delim) {
return str.split(delim).filter(function (item) {
return item.length > 0;
});
};
var itemsToArray = function (value, defaultValue) {
var stringToItemsArray = function (value) {
return typeof value === 'string' ? splitNoEmpty(value, /[ ,]/) : value;
};
var boolToItemsArray = function (value, defaultValue) {
return value === false ? [] : defaultValue;
};
if ($_iftpu18cjnlpb9fl.isArray(value)) {
return value;
} else if ($_iftpu18cjnlpb9fl.isString(value)) {
return stringToItemsArray(value);
} else if ($_iftpu18cjnlpb9fl.isBoolean(value)) {
return boolToItemsArray(value, defaultValue);
}
return defaultValue;
};
var getToolbarItemsOr = function (predicate) {
return function (editor, name, defaultValue) {
var value = name in editor.settings ? editor.settings[name] : defaultValue;
validDefaultOrDie(defaultValue, predicate);
return itemsToArray(value, defaultValue);
};
};
var $_eds8zp18bjnlpb9fj = {
getStringOr: getByTypeOr($_iftpu18cjnlpb9fl.isString),
getBoolOr: getByTypeOr($_iftpu18cjnlpb9fl.isBoolean),
getNumberOr: getByTypeOr($_iftpu18cjnlpb9fl.isNumber),
getHandlerOr: getByTypeOr($_iftpu18cjnlpb9fl.isFunction),
getToolbarItemsOr: getToolbarItemsOr($_iftpu18cjnlpb9fl.isArray)
};
var global$6 = tinymce.util.Tools.resolve('tinymce.geom.Rect');
var result$1 = function (rect, position) {
return {
rect: rect,
position: position
};
};
var moveTo = function (rect, toRect) {
return {
x: toRect.x,
y: toRect.y,
w: rect.w,
h: rect.h
};
};
var calcByPositions = function (testPositions1, testPositions2, targetRect, contentAreaRect, panelRect) {
var relPos, relRect, outputPanelRect;
var paddedContentRect = {
x: contentAreaRect.x,
y: contentAreaRect.y,
w: contentAreaRect.w + (contentAreaRect.w < panelRect.w + targetRect.w ? panelRect.w : 0),
h: contentAreaRect.h + (contentAreaRect.h < panelRect.h + targetRect.h ? panelRect.h : 0)
};
relPos = global$6.findBestRelativePosition(panelRect, targetRect, paddedContentRect, testPositions1);
targetRect = global$6.clamp(targetRect, paddedContentRect);
if (relPos) {
relRect = global$6.relativePosition(panelRect, targetRect, relPos);
outputPanelRect = moveTo(panelRect, relRect);
return result$1(outputPanelRect, relPos);
}
targetRect = global$6.intersect(paddedContentRect, targetRect);
if (targetRect) {
relPos = global$6.findBestRelativePosition(panelRect, targetRect, paddedContentRect, testPositions2);
if (relPos) {
relRect = global$6.relativePosition(panelRect, targetRect, relPos);
outputPanelRect = moveTo(panelRect, relRect);
return result$1(outputPanelRect, relPos);
}
outputPanelRect = moveTo(panelRect, targetRect);
return result$1(outputPanelRect, relPos);
}
return null;
};
var calcInsert = function (targetRect, contentAreaRect, panelRect) {
return calcByPositions([
'cr-cl',
'cl-cr'
], [
'bc-tc',
'bl-tl',
'br-tr'
], targetRect, contentAreaRect, panelRect);
};
var calc = function (targetRect, contentAreaRect, panelRect) {
return calcByPositions([
'tc-bc',
'bc-tc',
'tl-bl',
'bl-tl',
'tr-br',
'br-tr',
'cr-cl',
'cl-cr'
], [
'bc-tc',
'bl-tl',
'br-tr',
'cr-cl'
], targetRect, contentAreaRect, panelRect);
};
var userConstrain = function (handler, targetRect, contentAreaRect, panelRect) {
var userConstrainedPanelRect;
if (typeof handler === 'function') {
userConstrainedPanelRect = handler({
elementRect: $_ek0w81183jnlpb9f9.toClientRect(targetRect),
contentAreaRect: $_ek0w81183jnlpb9f9.toClientRect(contentAreaRect),
panelRect: $_ek0w81183jnlpb9f9.toClientRect(panelRect)
});
return $_ek0w81183jnlpb9f9.fromClientRect(userConstrainedPanelRect);
}
return panelRect;
};
var defaultHandler = function (rects) {
return rects.panelRect;
};
var $_2uy0ji18djnlpb9fm = {
calcInsert: calcInsert,
calc: calc,
userConstrain: userConstrain,
defaultHandler: defaultHandler
};
var toAbsoluteUrl = function (editor, url) {
return editor.documentBaseURI.toAbsolute(url);
};
var urlFromName = function (name) {
var prefix = global$5.baseURL + '/skins/';
return name ? prefix + name : prefix + 'lightgray';
};
var getTextSelectionToolbarItems = function (editor) {
return $_eds8zp18bjnlpb9fj.getToolbarItemsOr(editor, 'selection_toolbar', [
'bold',
'italic',
'|',
'quicklink',
'h2',
'h3',
'blockquote'
]);
};
var getInsertToolbarItems = function (editor) {
return $_eds8zp18bjnlpb9fj.getToolbarItemsOr(editor, 'insert_toolbar', [
'quickimage',
'quicktable'
]);
};
var getPositionHandler = function (editor) {
return $_eds8zp18bjnlpb9fj.getHandlerOr(editor, 'inline_toolbar_position_handler', $_2uy0ji18djnlpb9fm.defaultHandler);
};
var getSkinUrl = function (editor) {
var settings = editor.settings;
return settings.skin_url ? toAbsoluteUrl(editor, settings.skin_url) : urlFromName(settings.skin);
};
var isSkinDisabled = function (editor) {
return editor.settings.skin === false;
};
var $_944bid189jnlpb9fh = {
getTextSelectionToolbarItems: getTextSelectionToolbarItems,
getInsertToolbarItems: getInsertToolbarItems,
getPositionHandler: getPositionHandler,
getSkinUrl: getSkinUrl,
isSkinDisabled: isSkinDisabled
};
var fireSkinLoaded$1 = function (editor, callback) {
var done = function () {
editor._skinLoaded = true;
$_3u73qy188jnlpb9ff.fireSkinLoaded(editor);
callback();
};
if (editor.initialized) {
done();
} else {
editor.on('init', done);
}
};
var load = function (editor, callback) {
var skinUrl = $_944bid189jnlpb9fh.getSkinUrl(editor);
var done = function () {
fireSkinLoaded$1(editor, callback);
};
if ($_944bid189jnlpb9fh.isSkinDisabled(editor)) {
done();
} else {
global$2.DOM.styleSheetLoader.load(skinUrl + '/skin.min.css', done);
editor.contentCSS.push(skinUrl + '/content.inline.min.css');
}
};
var $_8ss1rb187jnlpb9fe = { load: load };
var getSelectionElements = function (editor) {
var node = editor.selection.getNode();
var elms = editor.dom.getParents(node, '*');
return elms;
};
var createToolbar = function (editor, selector, id, items) {
var selectorPredicate = function (elm) {
return editor.dom.is(elm, selector);
};
return {
predicate: selectorPredicate,
id: id,
items: items
};
};
var getToolbars = function (editor) {
var contextToolbars = editor.contextToolbars;
return $_g0v1s917zjnlpb9f4.flatten([
contextToolbars ? contextToolbars : [],
createToolbar(editor, 'img', 'image', 'alignleft aligncenter alignright')
]);
};
var findMatchResult = function (editor, toolbars) {
var result, elements, contextToolbarsPredicateIds;
elements = getSelectionElements(editor);
contextToolbarsPredicateIds = $_47e772184jnlpb9fb.fromContextToolbars(toolbars);
result = $_800pcq181jnlpb9f7.match(editor, [
$_2yam1d180jnlpb9f5.element(elements[0], contextToolbarsPredicateIds),
$_bcakpn186jnlpb9fc.textSelection('text'),
$_bcakpn186jnlpb9fc.emptyTextBlock(elements, 'insert'),
$_2yam1d180jnlpb9f5.parent(elements, contextToolbarsPredicateIds)
]);
return result && result.rect ? result : null;
};
var editorHasFocus = function (editor) {
return document.activeElement === editor.getBody();
};
var togglePanel = function (editor, panel) {
var toggle = function () {
var toolbars = getToolbars(editor);
var result = findMatchResult(editor, toolbars);
if (result) {
panel.show(editor, result.id, result.rect, toolbars);
} else {
panel.hide();
}
};
return function () {
if (!editor.removed && editorHasFocus(editor)) {
toggle();
}
};
};
var repositionPanel = function (editor, panel) {
return function () {
var toolbars = getToolbars(editor);
var result = findMatchResult(editor, toolbars);
if (result) {
panel.reposition(editor, result.id, result.rect);
}
};
};
var ignoreWhenFormIsVisible = function (editor, panel, f) {
return function () {
if (!editor.removed && !panel.inForm()) {
f();
}
};
};
var bindContextualToolbarsEvents = function (editor, panel) {
var throttledTogglePanel = global$3.throttle(togglePanel(editor, panel), 0);
var throttledTogglePanelWhenNotInForm = global$3.throttle(ignoreWhenFormIsVisible(editor, panel, togglePanel(editor, panel)), 0);
var reposition = repositionPanel(editor, panel);
editor.on('blur hide ObjectResizeStart', panel.hide);
editor.on('click', throttledTogglePanel);
editor.on('nodeChange mouseup', throttledTogglePanelWhenNotInForm);
editor.on('ResizeEditor keyup', throttledTogglePanel);
editor.on('ResizeWindow', reposition);
global$2.DOM.bind(global$1.container, 'scroll', reposition);
editor.on('remove', function () {
global$2.DOM.unbind(global$1.container, 'scroll', reposition);
panel.remove();
});
editor.shortcuts.add('Alt+F10,F10', '', panel.focus);
};
var overrideLinkShortcut = function (editor, panel) {
editor.shortcuts.remove('meta+k');
editor.shortcuts.add('meta+k', '', function () {
var toolbars = getToolbars(editor);
var result = $_800pcq181jnlpb9f7.match(editor, [$_bcakpn186jnlpb9fc.textSelection('quicklink')]);
if (result) {
panel.show(editor, result.id, result.rect, toolbars);
}
});
};
var renderInlineUI = function (editor, panel) {
$_8ss1rb187jnlpb9fe.load(editor, function () {
bindContextualToolbarsEvents(editor, panel);
overrideLinkShortcut(editor, panel);
});
return {};
};
var fail = function (message) {
throw new Error(message);
};
var renderUI = function (editor, panel) {
return editor.inline ? renderInlineUI(editor, panel) : fail('inlite theme only supports inline mode.');
};
var $_3wech617vjnlpb9ez = { renderUI: renderUI };
var noop = function () {
var x = [];
for (var _i = 0; _i < arguments.length; _i++) {
x[_i] = arguments[_i];
}
};
var compose = function (fa, fb) {
return function () {
var x = [];
for (var _i = 0; _i < arguments.length; _i++) {
x[_i] = arguments[_i];
}
return fa(fb.apply(null, arguments));
};
};
var constant = function (value) {
return function () {
return value;
};
};
var curry = function (f) {
var x = [];
for (var _i = 1; _i < arguments.length; _i++) {
x[_i - 1] = arguments[_i];
}
var args = new Array(arguments.length - 1);
for (var i = 1; i < arguments.length; i++)
args[i - 1] = arguments[i];
return function () {
var x = [];
for (var _i = 0; _i < arguments.length; _i++) {
x[_i] = arguments[_i];
}
var newArgs = new Array(arguments.length);
for (var j = 0; j < newArgs.length; j++)
newArgs[j] = arguments[j];
var all = args.concat(newArgs);
return f.apply(null, all);
};
};
var never = constant(false);
var always = constant(true);
var never$1 = never;
var always$1 = always;
var none = function () {
return NONE;
};
var NONE = function () {
var eq = function (o) {
return o.isNone();
};
var call$$1 = function (thunk) {
return thunk();
};
var id = function (n) {
return n;
};
var noop$$1 = function () {
};
var nul = function () {
return null;
};
var undef = function () {
return undefined;
};
var me = {
fold: function (n, s) {
return n();
},
is: never$1,
isSome: never$1,
isNone: always$1,
getOr: id,
getOrThunk: call$$1,
getOrDie: function (msg) {
throw new Error(msg || 'error: getOrDie called on none.');
},
getOrNull: nul,
getOrUndefined: undef,
or: id,
orThunk: call$$1,
map: none,
ap: none,
each: noop$$1,
bind: none,
flatten: none,
exists: never$1,
forall: always$1,
filter: none,
equals: eq,
equals_: eq,
toArray: function () {
return [];
},
toString: constant('none()')
};
if (Object.freeze)
Object.freeze(me);
return me;
}();
var some = function (a) {
var constant_a = function () {
return a;
};
var self = function () {
return me;
};
var map = function (f) {
return some(f(a));
};
var bind = function (f) {
return f(a);
};
var me = {
fold: function (n, s) {
return s(a);
},
is: function (v) {
return a === v;
},
isSome: always$1,
isNone: never$1,
getOr: constant_a,
getOrThunk: constant_a,
getOrDie: constant_a,
getOrNull: constant_a,
getOrUndefined: constant_a,
or: self,
orThunk: self,
map: map,
ap: function (optfab) {
return optfab.fold(none, function (fab) {
return some(fab(a));
});
},
each: function (f) {
f(a);
},
bind: bind,
flatten: constant_a,
exists: bind,
forall: bind,
filter: function (f) {
return f(a) ? me : NONE;
},
equals: function (o) {
return o.is(a);
},
equals_: function (o, elementEq) {
return o.fold(never$1, function (b) {
return elementEq(a, b);
});
},
toArray: function () {
return [a];
},
toString: function () {
return 'some(' + a + ')';
}
};
return me;
};
var from = function (value) {
return value === null || value === undefined ? NONE : some(value);
};
var Option = {
some: some,
none: none,
from: from
};
var typeOf = function (x) {
if (x === null)
return 'null';
var t = typeof x;
if (t === 'object' && Array.prototype.isPrototypeOf(x))
return 'array';
if (t === 'object' && String.prototype.isPrototypeOf(x))
return 'string';
return t;
};
var isType$1 = function (type) {
return function (value) {
return typeOf(value) === type;
};
};
var isFunction$1 = isType$1('function');
var isNumber$1 = isType$1('number');
var rawIndexOf = function () {
var pIndexOf = Array.prototype.indexOf;
var fastIndex = function (xs, x) {
return pIndexOf.call(xs, x);
};
var slowIndex = function (xs, x) {
return slowIndexOf(xs, x);
};
return pIndexOf === undefined ? slowIndex : fastIndex;
}();
var indexOf = function (xs, x) {
var r = rawIndexOf(xs, x);
return r === -1 ? Option.none() : Option.some(r);
};
var exists = function (xs, pred) {
return findIndex(xs, pred).isSome();
};
var map = function (xs, f) {
var len = xs.length;
var r = new Array(len);
for (var i = 0; i < len; i++) {
var x = xs[i];
r[i] = f(x, i, xs);
}
return r;
};
var each = function (xs, f) {
for (var i = 0, len = xs.length; i < len; i++) {
var x = xs[i];
f(x, i, xs);
}
};
var filter = function (xs, pred) {
var r = [];
for (var i = 0, len = xs.length; i < len; i++) {
var x = xs[i];
if (pred(x, i, xs)) {
r.push(x);
}
}
return r;
};
var foldl = function (xs, f, acc) {
each(xs, function (x) {
acc = f(acc, x);
});
return acc;
};
var find = function (xs, pred) {
for (var i = 0, len = xs.length; i < len; i++) {
var x = xs[i];
if (pred(x, i, xs)) {
return Option.some(x);
}
}
return Option.none();
};
var findIndex = function (xs, pred) {
for (var i = 0, len = xs.length; i < len; i++) {
var x = xs[i];
if (pred(x, i, xs)) {
return Option.some(i);
}
}
return Option.none();
};
var slowIndexOf = function (xs, x) {
for (var i = 0, len = xs.length; i < len; ++i) {
if (xs[i] === x) {
return i;
}
}
return -1;
};
var push = Array.prototype.push;
var flatten$1 = function (xs) {
var r = [];
for (var i = 0, len = xs.length; i < len; ++i) {
if (!Array.prototype.isPrototypeOf(xs[i]))
throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);
push.apply(r, xs[i]);
}
return r;
};
var slice = Array.prototype.slice;
var reverse = function (xs) {
var r = slice.call(xs, 0);
r.reverse();
return r;
};
var from$1 = isFunction$1(Array.from) ? Array.from : function (x) {
return slice.call(x);
};
var count = 0;
var funcs = {
id: function () {
return 'mceu_' + count++;
},
create: function (name$$1, attrs, children) {
var elm = document.createElement(name$$1);
global$2.DOM.setAttribs(elm, attrs);
if (typeof children === 'string') {
elm.innerHTML = children;
} else {
global$4.each(children, function (child) {
if (child.nodeType) {
elm.appendChild(child);
}
});
}
return elm;
},
createFragment: function (html) {
return global$2.DOM.createFragment(html);
},
getWindowSize: function () {
return global$2.DOM.getViewPort();
},
getSize: function (elm) {
var width, height;
if (elm.getBoundingClientRect) {
var rect = elm.getBoundingClientRect();
width = Math.max(rect.width || rect.right - rect.left, elm.offsetWidth);
height = Math.max(rect.height || rect.bottom - rect.bottom, elm.offsetHeight);
} else {
width = elm.offsetWidth;
height = elm.offsetHeight;
}
return {
width: width,
height: height
};
},
getPos: function (elm, root) {
return global$2.DOM.getPos(elm, root || funcs.getContainer());
},
getContainer: function () {
return global$1.container ? global$1.container : document.body;
},
getViewPort: function (win) {
return global$2.DOM.getViewPort(win);
},
get: function (id) {
return document.getElementById(id);
},
addClass: function (elm, cls) {
return global$2.DOM.addClass(elm, cls);
},
removeClass: function (elm, cls) {
return global$2.DOM.removeClass(elm, cls);
},
hasClass: function (elm, cls) {
return global$2.DOM.hasClass(elm, cls);
},
toggleClass: function (elm, cls, state) {
return global$2.DOM.toggleClass(elm, cls, state);
},
css: function (elm, name$$1, value) {
return global$2.DOM.setStyle(elm, name$$1, value);
},
getRuntimeStyle: function (elm, name$$1) {
return global$2.DOM.getStyle(elm, name$$1, true);
},
on: function (target, name$$1, callback, scope) {
return global$2.DOM.bind(target, name$$1, callback, scope);
},
off: function (target, name$$1, callback) {
return global$2.DOM.unbind(target, name$$1, callback);
},
fire: function (target, name$$1, args) {
return global$2.DOM.fire(target, name$$1, args);
},
innerHtml: function (elm, html) {
global$2.DOM.setHTML(elm, html);
}
};
var global$7 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');
var global$8 = tinymce.util.Tools.resolve('tinymce.util.Class');
var global$9 = tinymce.util.Tools.resolve('tinymce.util.EventDispatcher');
var $_f2efut18rjnlpb9nb = {
parseBox: function (value) {
var len;
var radix = 10;
if (!value) {
return;
}
if (typeof value === 'number') {
value = value || 0;
return {
top: value,
left: value,
bottom: value,
right: value
};
}
value = value.split(' ');
len = value.length;
if (len === 1) {
value[1] = value[2] = value[3] = value[0];
} else if (len === 2) {
value[2] = value[0];
value[3] = value[1];
} else if (len === 3) {
value[3] = value[1];
}
return {
top: parseInt(value[0], radix) || 0,
right: parseInt(value[1], radix) || 0,
bottom: parseInt(value[2], radix) || 0,
left: parseInt(value[3], radix) || 0
};
},
measureBox: function (elm, prefix) {
function getStyle(name) {
var defaultView = elm.ownerDocument.defaultView;
if (defaultView) {
var computedStyle = defaultView.getComputedStyle(elm, null);
if (computedStyle) {
name = name.replace(/[A-Z]/g, function (a) {
return '-' + a;
});
return computedStyle.getPropertyValue(name);
} else {
return null;
}
}
return elm.currentStyle[name];
}
function getSide(name) {
var val = parseFloat(getStyle(name));
return isNaN(val) ? 0 : val;
}
return {
top: getSide(prefix + 'TopWidth'),
right: getSide(prefix + 'RightWidth'),
bottom: getSide(prefix + 'BottomWidth'),
left: getSide(prefix + 'LeftWidth')
};
}
};
function noop$1() {
}
function ClassList(onchange) {
this.cls = [];
this.cls._map = {};
this.onchange = onchange || noop$1;
this.prefix = '';
}
global$4.extend(ClassList.prototype, {
add: function (cls) {
if (cls && !this.contains(cls)) {
this.cls._map[cls] = true;
this.cls.push(cls);
this._change();
}
return this;
},
remove: function (cls) {
if (this.contains(cls)) {
var i = void 0;
for (i = 0; i < this.cls.length; i++) {
if (this.cls[i] === cls) {
break;
}
}
this.cls.splice(i, 1);
delete this.cls._map[cls];
this._change();
}
return this;
},
toggle: function (cls, state) {
var curState = this.contains(cls);
if (curState !== state) {
if (curState) {
this.remove(cls);
} else {
this.add(cls);
}
this._change();
}
return this;
},
contains: function (cls) {
return !!this.cls._map[cls];
},
_change: function () {
delete this.clsValue;
this.onchange.call(this);
}
});
ClassList.prototype.toString = function () {
var value;
if (this.clsValue) {
return this.clsValue;
}
value = '';
for (var i = 0; i < this.cls.length; i++) {
if (i > 0) {
value += ' ';
}
value += this.prefix + this.cls[i];
}
return value;
};
function unique(array) {
var uniqueItems = [];
var i = array.length, item;
while (i--) {
item = array[i];
if (!item.__checked) {
uniqueItems.push(item);
item.__checked = 1;
}
}
i = uniqueItems.length;
while (i--) {
delete uniqueItems[i].__checked;
}
return uniqueItems;
}
var expression = /^([\w\\*]+)?(?:#([\w\-\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i;
var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g;
var whiteSpace = /^\s*|\s*$/g;
var Collection;
var Selector = global$8.extend({
init: function (selector) {
var match = this.match;
function compileNameFilter(name) {
if (name) {
name = name.toLowerCase();
return function (item) {
return name === '*' || item.type === name;
};
}
}
function compileIdFilter(id) {
if (id) {
return function (item) {
return item._name === id;
};
}
}
function compileClassesFilter(classes) {
if (classes) {
classes = classes.split('.');
return function (item) {
var i = classes.length;
while (i--) {
if (!item.classes.contains(classes[i])) {
return false;
}
}
return true;
};
}
}
function compileAttrFilter(name, cmp, check) {
if (name) {
return function (item) {
var value = item[name] ? item[name]() : '';
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;
};
}
}
function compilePsuedoFilter(name) {
var notSelectors;
if (name) {
name = /(?:not\((.+)\))|(.+)/i.exec(name);
if (!name[1]) {
name = name[2];
return function (item, index, length) {
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;
};
}
notSelectors = parseChunks(name[1], []);
return function (item) {
return !match(item, notSelectors);
};
}
}
function compile(selector, filters, direct) {
var parts;
function add(filter) {
if (filter) {
filters.push(filter);
}
}
parts = expression.exec(selector.replace(whiteSpace, ''));
add(compileNameFilter(parts[1]));
add(compileIdFilter(parts[2]));
add(compileClassesFilter(parts[3]));
add(compileAttrFilter(parts[4], parts[5], parts[6]));
add(compilePsuedoFilter(parts[7]));
filters.pseudo = !!parts[7];
filters.direct = direct;
return filters;
}
function parseChunks(selector, selectors) {
var parts = [];
var extra, matches, i;
do {
chunker.exec('');
matches = chunker.exec(selector);
if (matches) {
selector = matches[3];
parts.push(matches[1]);
if (matches[2]) {
extra = matches[3];
break;
}
}
} while (matches);
if (extra) {
parseChunks(extra, selectors);
}
selector = [];
for (i = 0; i < parts.length; i++) {
if (parts[i] !== '>') {
selector.push(compile(parts[i], [], parts[i - 1] === '>'));
}
}
selectors.push(selector);
return selectors;
}
this._selectors = parseChunks(selector, []);
},
match: function (control, selectors) {
var i, l, si, sl, selector, fi, fl, filters, index, length, siblings, count, item;
selectors = selectors || this._selectors;
for (i = 0, l = selectors.length; i < l; i++) {
selector = selectors[i];
sl = selector.length;
item = control;
count = 0;
for (si = sl - 1; si >= 0; si--) {
filters = selector[si];
while (item) {
if (filters.pseudo) {
siblings = item.parent().items();
index = length = siblings.length;
while (index--) {
if (siblings[index] === item) {
break;
}
}
}
for (fi = 0, fl = filters.length; fi < fl; fi++) {
if (!filters[fi](item, index, length)) {
fi = fl + 1;
break;
}
}
if (fi === fl) {
count++;
break;
} else {
if (si === sl - 1) {
break;
}
}
item = item.parent();
}
}
if (count === sl) {
return true;
}
}
return false;
},
find: function (container) {
var matches = [], i, l;
var selectors = this._selectors;
function collect(items, selector, index) {
var i, l, fi, fl, item;
var filters = selector[index];
for (i = 0, l = items.length; i < l; i++) {
item = items[i];
for (fi = 0, fl = filters.length; fi < fl; fi++) {
if (!filters[fi](item, i, l)) {
fi = fl + 1;
break;
}
}
if (fi === fl) {
if (index === selector.length - 1) {
matches.push(item);
} else {
if (item.items) {
collect(item.items(), selector, index + 1);
}
}
} else if (filters.direct) {
return;
}
if (item.items) {
collect(item.items(), selector, index);
}
}
}
if (container.items) {
for (i = 0, l = selectors.length; i < l; i++) {
collect(container.items(), selectors[i], 0);
}
if (l > 1) {
matches = unique(matches);
}
}
if (!Collection) {
Collection = Selector.Collection;
}
return new Collection(matches);
}
});
var Collection$1;
var proto;
var push$1 = Array.prototype.push;
var slice$1 = Array.prototype.slice;
proto = {
length: 0,
init: function (items) {
if (items) {
this.add(items);
}
},
add: function (items) {
var self = this;
if (!global$4.isArray(items)) {
if (items instanceof Collection$1) {
self.add(items.toArray());
} else {
push$1.call(self, items);
}
} else {
push$1.apply(self, items);
}
return self;
},
set: function (items) {
var self = this;
var len = self.length;
var i;
self.length = 0;
self.add(items);
for (i = self.length; i < len; i++) {
delete self[i];
}
return self;
},
filter: function (selector) {
var self = this;
var i, l;
var matches = [];
var item, match;
if (typeof selector === 'string') {
selector = new Selector(selector);
match = function (item) {
return selector.match(item);
};
} else {
match = selector;
}
for (i = 0, l = self.length; i < l; i++) {
item = self[i];
if (match(item)) {
matches.push(item);
}
}
return new Collection$1(matches);
},
slice: function () {
return new Collection$1(slice$1.apply(this, arguments));
},
eq: function (index) {
return index === -1 ? this.slice(index) : this.slice(index, +index + 1);
},
each: function (callback) {
global$4.each(this, callback);
return this;
},
toArray: function () {
return global$4.toArray(this);
},
indexOf: function (ctrl) {
var self = this;
var i = self.length;
while (i--) {
if (self[i] === ctrl) {
break;
}
}
return i;
},
reverse: function () {
return new Collection$1(global$4.toArray(this).reverse());
},
hasClass: function (cls) {
return this[0] ? this[0].classes.contains(cls) : false;
},
prop: function (name, value) {
var self = this;
var item;
if (value !== undefined) {
self.each(function (item) {
if (item[name]) {
item[name](value);
}
});
return self;
}
item = self[0];
if (item && item[name]) {
return item[name]();
}
},
exec: function (name) {
var self = this, args = global$4.toArray(arguments).slice(1);
self.each(function (item) {
if (item[name]) {
item[name].apply(item, args);
}
});
return self;
},
remove: function () {
var i = this.length;
while (i--) {
this[i].remove();
}
return this;
},
addClass: function (cls) {
return this.each(function (item) {
item.classes.add(cls);
});
},
removeClass: function (cls) {
return this.each(function (item) {
item.classes.remove(cls);
});
}
};
global$4.each('fire on off show hide append prepend before after reflow'.split(' '), function (name) {
proto[name] = function () {
var args = global$4.toArray(arguments);
this.each(function (ctrl) {
if (name in ctrl) {
ctrl[name].apply(ctrl, args);
}
});
return this;
};
});
global$4.each('text name disabled active selected checked visible parent value data'.split(' '), function (name) {
proto[name] = function (value) {
return this.prop(name, value);
};
});
Collection$1 = global$8.extend(proto);
Selector.Collection = Collection$1;
var Collection$2 = Collection$1;
var Binding = function (settings) {
this.create = settings.create;
};
Binding.create = function (model, name) {
return new Binding({
create: function (otherModel, otherName) {
var bindings;
var fromSelfToOther = function (e) {
otherModel.set(otherName, e.value);
};
var fromOtherToSelf = function (e) {
model.set(name, e.value);
};
otherModel.on('change:' + otherName, fromOtherToSelf);
model.on('change:' + name, fromSelfToOther);
bindings = otherModel._bindings;
if (!bindings) {
bindings = otherModel._bindings = [];
otherModel.on('destroy', function () {
var i = bindings.length;
while (i--) {
bindings[i]();
}
});
}
bindings.push(function () {
model.off('change:' + name, fromSelfToOther);
});
return model.get(name);
}
});
};
var global$10 = tinymce.util.Tools.resolve('tinymce.util.Observable');
function isNode(node) {
return node.nodeType > 0;
}
function isEqual(a, b) {
var k, checked;
if (a === b) {
return true;
}
if (a === null || b === null) {
return a === b;
}
if (typeof a !== 'object' || typeof b !== 'object') {
return a === b;
}
if (global$4.isArray(b)) {
if (a.length !== b.length) {
return false;
}
k = a.length;
while (k--) {
if (!isEqual(a[k], b[k])) {
return false;
}
}
}
if (isNode(a) || isNode(b)) {
return a === b;
}
checked = {};
for (k in b) {
if (!isEqual(a[k], b[k])) {
return false;
}
checked[k] = true;
}
for (k in a) {
if (!checked[k] && !isEqual(a[k], b[k])) {
return false;
}
}
return true;
}
var ObservableObject = global$8.extend({
Mixins: [global$10],
init: function (data) {
var name, value;
data = data || {};
for (name in data) {
value = data[name];
if (value instanceof Binding) {
data[name] = value.create(this, name);
}
}
this.data = data;
},
set: function (name, value) {
var key, args;
var oldValue = this.data[name];
if (value instanceof Binding) {
value = value.create(this, name);
}
if (typeof name === 'object') {
for (key in name) {
this.set(key, name[key]);
}
return this;
}
if (!isEqual(oldValue, value)) {
this.data[name] = value;
args = {
target: this,
name: name,
value: value,
oldValue: oldValue
};
this.fire('change:' + name, args);
this.fire('change', args);
}
return this;
},
get: function (name) {
return this.data[name];
},
has: function (name) {
return name in this.data;
},
bind: function (name) {
return Binding.create(this, name);
},
destroy: function () {
this.fire('destroy');
}
});
var dirtyCtrls = {};
var animationFrameRequested;
var $_oxj0818yjnlpb9nw = {
add: function (ctrl) {
var parent$$1 = ctrl.parent();
if (parent$$1) {
if (!parent$$1._layout || parent$$1._layout.isNative()) {
return;
}
if (!dirtyCtrls[parent$$1._id]) {
dirtyCtrls[parent$$1._id] = parent$$1;
}
if (!animationFrameRequested) {
animationFrameRequested = true;
global$3.requestAnimationFrame(function () {
var id, ctrl;
animationFrameRequested = false;
for (id in dirtyCtrls) {
ctrl = dirtyCtrls[id];
if (ctrl.state.get('rendered')) {
ctrl.reflow();
}
}
dirtyCtrls = {};
}, document.body);
}
}
},
remove: function (ctrl) {
if (dirtyCtrls[ctrl._id]) {
delete dirtyCtrls[ctrl._id];
}
}
};
var getUiContainerDelta = function (ctrl) {
var uiContainer = getUiContainer(ctrl);
if (uiContainer && global$2.DOM.getStyle(uiContainer, 'position', true) !== 'static') {
var containerPos = global$2.DOM.getPos(uiContainer);
var dx = uiContainer.scrollLeft - containerPos.x;
var dy = uiContainer.scrollTop - containerPos.y;
return Option.some({
x: dx,
y: dy
});
} else {
return Option.none();
}
};
var setUiContainer = function (editor, ctrl) {
var uiContainer = global$2.DOM.select(editor.settings.ui_container)[0];
ctrl.getRoot().uiContainer = uiContainer;
};
var getUiContainer = function (ctrl) {
return ctrl ? ctrl.getRoot().uiContainer : null;
};
var inheritUiContainer = function (fromCtrl, toCtrl) {
return toCtrl.uiContainer = getUiContainer(fromCtrl);
};
var $_5zalyo18zjnlpb9ny = {
getUiContainerDelta: getUiContainerDelta,
setUiContainer: setUiContainer,
getUiContainer: getUiContainer,
inheritUiContainer: inheritUiContainer
};
var hasMouseWheelEventSupport = 'onmousewheel' in document;
var hasWheelEventSupport = false;
var classPrefix = 'mce-';
var Control;
var idCounter = 0;
var proto$1 = {
Statics: { classPrefix: classPrefix },
isRtl: function () {
return Control.rtl;
},
classPrefix: classPrefix,
init: function (settings) {
var self$$1 = this;
var classes, defaultClasses;
function applyClasses(classes) {
var i;
classes = classes.split(' ');
for (i = 0; i < classes.length; i++) {
self$$1.classes.add(classes[i]);
}
}
self$$1.settings = settings = global$4.extend({}, self$$1.Defaults, settings);
self$$1._id = settings.id || 'mceu_' + idCounter++;
self$$1._aria = { role: settings.role };
self$$1._elmCache = {};
self$$1.$ = global$7;
self$$1.state = new ObservableObject({
visible: true,
active: false,
disabled: false,
value: ''
});
self$$1.data = new ObservableObject(settings.data);
self$$1.classes = new ClassList(function () {
if (self$$1.state.get('rendered')) {
self$$1.getEl().className = this.toString();
}
});
self$$1.classes.prefix = self$$1.classPrefix;
classes = settings.classes;
if (classes) {
if (self$$1.Defaults) {
defaultClasses = self$$1.Defaults.classes;
if (defaultClasses && classes !== defaultClasses) {
applyClasses(defaultClasses);
}
}
applyClasses(classes);
}
global$4.each('title text name visible disabled active value'.split(' '), function (name$$1) {
if (name$$1 in settings) {
self$$1[name$$1](settings[name$$1]);
}
});
self$$1.on('click', function () {
if (self$$1.disabled()) {
return false;
}
});
self$$1.settings = settings;
self$$1.borderBox = $_f2efut18rjnlpb9nb.parseBox(settings.border);
self$$1.paddingBox = $_f2efut18rjnlpb9nb.parseBox(settings.padding);
self$$1.marginBox = $_f2efut18rjnlpb9nb.parseBox(settings.margin);
if (settings.hidden) {
self$$1.hide();
}
},
Properties: 'parent,name',
getContainerElm: function () {
var uiContainer = $_5zalyo18zjnlpb9ny.getUiContainer(this);
return uiContainer ? uiContainer : funcs.getContainer();
},
getParentCtrl: function (elm) {
var ctrl;
var lookup = this.getRoot().controlIdLookup;
while (elm && lookup) {
ctrl = lookup[elm.id];
if (ctrl) {
break;
}
elm = elm.parentNode;
}
return ctrl;
},
initLayoutRect: function () {
var self$$1 = this;
var settings = self$$1.settings;
var borderBox, layoutRect;
var elm = self$$1.getEl();
var width, height, minWidth, minHeight, autoResize;
var startMinWidth, startMinHeight, initialSize;
borderBox = self$$1.borderBox = self$$1.borderBox || $_f2efut18rjnlpb9nb.measureBox(elm, 'border');
self$$1.paddingBox = self$$1.paddingBox || $_f2efut18rjnlpb9nb.measureBox(elm, 'padding');
self$$1.marginBox = self$$1.marginBox || $_f2efut18rjnlpb9nb.measureBox(elm, 'margin');
initialSize = funcs.getSize(elm);
startMinWidth = settings.minWidth;
startMinHeight = settings.minHeight;
minWidth = startMinWidth || initialSize.width;
minHeight = startMinHeight || initialSize.height;
width = settings.width;
height = settings.height;
autoResize = settings.autoResize;
autoResize = typeof autoResize !== 'undefined' ? autoResize : !width && !height;
width = width || minWidth;
height = height || minHeight;
var deltaW = borderBox.left + borderBox.right;
var deltaH = borderBox.top + borderBox.bottom;
var maxW = settings.maxWidth || 65535;
var maxH = settings.maxHeight || 65535;
self$$1._layoutRect = layoutRect = {
x: settings.x || 0,
y: settings.y || 0,
w: width,
h: height,
deltaW: deltaW,
deltaH: deltaH,
contentW: width - deltaW,
contentH: height - deltaH,
innerW: width - deltaW,
innerH: height - deltaH,
startMinWidth: startMinWidth || 0,
startMinHeight: startMinHeight || 0,
minW: Math.min(minWidth, maxW),
minH: Math.min(minHeight, maxH),
maxW: maxW,
maxH: maxH,
autoResize