123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488 |
- /**
- * Copyright (c) Tiny Technologies, Inc. All rights reserved.
- * Licensed under the LGPL or a commercial license.
- * For LGPL see License.txt in the project root for license information.
- * For commercial licenses see https://www.tiny.cloud/
- *
- * Version: 5.0.7 (2019-06-05)
- */
- (function () {
- var directionality = (function (domGlobals) {
- 'use strict';
- var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
- var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');
- var setDir = function (editor, dir) {
- var dom = editor.dom;
- var curDir;
- var blocks = editor.selection.getSelectedBlocks();
- if (blocks.length) {
- curDir = dom.getAttrib(blocks[0], 'dir');
- global$1.each(blocks, function (block) {
- if (!dom.getParent(block.parentNode, '*[dir="' + dir + '"]', dom.getRoot())) {
- dom.setAttrib(block, 'dir', curDir !== dir ? dir : null);
- }
- });
- editor.nodeChanged();
- }
- };
- var Direction = { setDir: setDir };
- var register = function (editor) {
- editor.addCommand('mceDirectionLTR', function () {
- Direction.setDir(editor, 'ltr');
- });
- editor.addCommand('mceDirectionRTL', function () {
- Direction.setDir(editor, 'rtl');
- });
- };
- var Commands = { register: register };
- var constant = function (value) {
- return function () {
- return value;
- };
- };
- 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 = function (thunk) {
- return thunk();
- };
- var id = function (n) {
- return n;
- };
- var noop = 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,
- getOrDie: function (msg) {
- throw new Error(msg || 'error: getOrDie called on none.');
- },
- getOrNull: nul,
- getOrUndefined: undef,
- or: id,
- orThunk: call,
- map: none,
- ap: none,
- each: noop,
- 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 fromHtml = function (html, scope) {
- var doc = scope || domGlobals.document;
- var div = doc.createElement('div');
- div.innerHTML = html;
- if (!div.hasChildNodes() || div.childNodes.length > 1) {
- domGlobals.console.error('HTML does not have a single root node', html);
- throw new Error('HTML must have a single root node');
- }
- return fromDom(div.childNodes[0]);
- };
- var fromTag = function (tag, scope) {
- var doc = scope || domGlobals.document;
- var node = doc.createElement(tag);
- return fromDom(node);
- };
- var fromText = function (text, scope) {
- var doc = scope || domGlobals.document;
- var node = doc.createTextNode(text);
- return fromDom(node);
- };
- var fromDom = function (node) {
- if (node === null || node === undefined) {
- throw new Error('Node cannot be null or undefined');
- }
- return { dom: constant(node) };
- };
- var fromPoint = function (docElm, x, y) {
- var doc = docElm.dom();
- return Option.from(doc.elementFromPoint(x, y)).map(fromDom);
- };
- var Element = {
- fromHtml: fromHtml,
- fromTag: fromTag,
- fromText: fromText,
- fromDom: fromDom,
- fromPoint: fromPoint
- };
- 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 = function (type) {
- return function (value) {
- return typeOf(value) === type;
- };
- };
- var isString = isType('string');
- var isBoolean = isType('boolean');
- var isFunction = isType('function');
- var isNumber = isType('number');
- var slice = Array.prototype.slice;
- var each = function (xs, f) {
- for (var i = 0, len = xs.length; i < len; i++) {
- var x = xs[i];
- f(x, i, xs);
- }
- };
- var from$1 = isFunction(Array.from) ? Array.from : function (x) {
- return slice.call(x);
- };
- var keys = Object.keys;
- var each$1 = function (obj, f) {
- var props = keys(obj);
- for (var k = 0, len = props.length; k < len; k++) {
- var i = props[k];
- var x = obj[i];
- f(x, i, obj);
- }
- };
- var trim = function (str) {
- return str.replace(/^\s+|\s+$/g, '');
- };
- var isSupported = function (dom) {
- return dom.style !== undefined;
- };
- var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;
- var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;
- var COMMENT = domGlobals.Node.COMMENT_NODE;
- var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;
- var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;
- var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;
- var ELEMENT = domGlobals.Node.ELEMENT_NODE;
- var TEXT = domGlobals.Node.TEXT_NODE;
- var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;
- var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;
- var ENTITY = domGlobals.Node.ENTITY_NODE;
- var NOTATION = domGlobals.Node.NOTATION_NODE;
- var type = function (element) {
- return element.dom().nodeType;
- };
- var isType$1 = function (t) {
- return function (element) {
- return type(element) === t;
- };
- };
- var isElement = isType$1(ELEMENT);
- var isText = isType$1(TEXT);
- var inBody = function (element) {
- var dom = isText(element) ? element.dom().parentNode : element.dom();
- return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);
- };
- var rawSet = function (dom, key, value) {
- if (isString(value) || isBoolean(value) || isNumber(value)) {
- dom.setAttribute(key, value + '');
- } else {
- domGlobals.console.error('Invalid call to Attr.set. Key ', key, ':: Value ', value, ':: Element ', dom);
- throw new Error('Attribute value was not simple');
- }
- };
- var set = function (element, key, value) {
- rawSet(element.dom(), key, value);
- };
- var get = function (element, key) {
- var v = element.dom().getAttribute(key);
- return v === null ? undefined : v;
- };
- var has = function (element, key) {
- var dom = element.dom();
- return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;
- };
- var remove = function (element, key) {
- element.dom().removeAttribute(key);
- };
- var internalSet = function (dom, property, value) {
- if (!isString(value)) {
- domGlobals.console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);
- throw new Error('CSS value must be a string: ' + value);
- }
- if (isSupported(dom)) {
- dom.style.setProperty(property, value);
- }
- };
- var internalRemove = function (dom, property) {
- if (isSupported(dom)) {
- dom.style.removeProperty(property);
- }
- };
- var set$1 = function (element, property, value) {
- var dom = element.dom();
- internalSet(dom, property, value);
- };
- var setAll = function (element, css) {
- var dom = element.dom();
- each$1(css, function (v, k) {
- internalSet(dom, k, v);
- });
- };
- var setOptions = function (element, css) {
- var dom = element.dom();
- each$1(css, function (v, k) {
- v.fold(function () {
- internalRemove(dom, k);
- }, function (value) {
- internalSet(dom, k, value);
- });
- });
- };
- var get$1 = function (element, property) {
- var dom = element.dom();
- var styles = domGlobals.window.getComputedStyle(dom);
- var r = styles.getPropertyValue(property);
- var v = r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;
- return v === null ? undefined : v;
- };
- var getUnsafeProperty = function (dom, property) {
- return isSupported(dom) ? dom.style.getPropertyValue(property) : '';
- };
- var getRaw = function (element, property) {
- var dom = element.dom();
- var raw = getUnsafeProperty(dom, property);
- return Option.from(raw).filter(function (r) {
- return r.length > 0;
- });
- };
- var getAllRaw = function (element) {
- var css = {};
- var dom = element.dom();
- if (isSupported(dom)) {
- for (var i = 0; i < dom.style.length; i++) {
- var ruleName = dom.style.item(i);
- css[ruleName] = dom.style[ruleName];
- }
- }
- return css;
- };
- var isValidValue = function (tag, property, value) {
- var element = Element.fromTag(tag);
- set$1(element, property, value);
- var style = getRaw(element, property);
- return style.isSome();
- };
- var remove$1 = function (element, property) {
- var dom = element.dom();
- internalRemove(dom, property);
- if (has(element, 'style') && trim(get(element, 'style')) === '') {
- remove(element, 'style');
- }
- };
- var preserve = function (element, f) {
- var oldStyles = get(element, 'style');
- var result = f(element);
- var restore = oldStyles === undefined ? remove : set;
- restore(element, 'style', oldStyles);
- return result;
- };
- var copy = function (source, target) {
- var sourceDom = source.dom();
- var targetDom = target.dom();
- if (isSupported(sourceDom) && isSupported(targetDom)) {
- targetDom.style.cssText = sourceDom.style.cssText;
- }
- };
- var reflow = function (e) {
- return e.dom().offsetWidth;
- };
- var transferOne = function (source, destination, style) {
- getRaw(source, style).each(function (value) {
- if (getRaw(destination, style).isNone()) {
- set$1(destination, style, value);
- }
- });
- };
- var transfer = function (source, destination, styles) {
- if (!isElement(source) || !isElement(destination)) {
- return;
- }
- each(styles, function (style) {
- transferOne(source, destination, style);
- });
- };
- var Css = /*#__PURE__*/Object.freeze({
- copy: copy,
- set: set$1,
- preserve: preserve,
- setAll: setAll,
- setOptions: setOptions,
- remove: remove$1,
- get: get$1,
- getRaw: getRaw,
- getAllRaw: getAllRaw,
- isValidValue: isValidValue,
- reflow: reflow,
- transfer: transfer
- });
- var getDirection = function (element) {
- return get$1(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';
- };
- var getNodeChangeHandler = function (editor, dir) {
- return function (api) {
- var nodeChangeHandler = function (e) {
- var element = Element.fromDom(e.element);
- api.setActive(getDirection(element) === dir);
- };
- editor.on('NodeChange', nodeChangeHandler);
- return function () {
- return editor.off('NodeChange', nodeChangeHandler);
- };
- };
- };
- var register$1 = function (editor) {
- editor.ui.registry.addToggleButton('ltr', {
- tooltip: 'Left to right',
- icon: 'ltr',
- onAction: function () {
- return editor.execCommand('mceDirectionLTR');
- },
- onSetup: getNodeChangeHandler(editor, 'ltr')
- });
- editor.ui.registry.addToggleButton('rtl', {
- tooltip: 'Right to left',
- icon: 'rtl',
- onAction: function () {
- return editor.execCommand('mceDirectionRTL');
- },
- onSetup: getNodeChangeHandler(editor, 'rtl')
- });
- };
- var Buttons = { register: register$1 };
- global.add('directionality', function (editor) {
- Commands.register(editor);
- Buttons.register(editor);
- });
- function Plugin () {
- }
- return Plugin;
- }(window));
- })();
|