{"version":3,"sources":["webpack:////home/angular/project/~/script-loader/addScript.js","webpack:////home/angular/project/~/tinymce/plugins/link/plugin.js?93ec","webpack:////home/angular/project/~/tinymce/plugins/paste/plugin.js?c81b","webpack:////home/angular/project/~/tinymce/plugins/table/plugin.js?0575","webpack:////home/angular/project/~/tinymce/themes/modern/theme.js?5240","webpack:////home/angular/project/~/tinymce/tinymce.js?c397","webpack:////home/angular/project/~/tinymce/plugins/link/plugin.js","webpack:////home/angular/project/~/tinymce/plugins/paste/plugin.js","webpack:////home/angular/project/~/tinymce/plugins/table/plugin.js","webpack:////home/angular/project/~/tinymce/themes/modern/theme.js","webpack:////home/angular/project/~/tinymce/tinymce.js"],"names":[],"mappings":"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","file":"scripts.bundle.js","sourcesContent":["/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\nmodule.exports = function(src) {\n\tfunction log(error) {\n\t\t(typeof console !== \"undefined\")\n\t\t&& (console.error || console.log)(\"[Script Loader]\", error);\n\t}\n\n\t// Check for IE =< 8\n\tfunction isIE() {\n\t\treturn typeof attachEvent !== \"undefined\" && typeof addEventListener === \"undefined\";\n\t}\n\n\ttry {\n\t\tif (typeof execScript !== \"undefined\" && isIE()) {\n\t\t\texecScript(src);\n\t\t} else if (typeof eval !== \"undefined\") {\n\t\t\teval.call(null, src);\n\t\t} else {\n\t\t\tlog(\"EvalError: No eval function available\");\n\t\t}\n\t} catch (error) {\n\t\tlog(error);\n\t}\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /home/angular/project/~/script-loader/addScript.js\n// module id = 134\n// module chunks = 1","require(\"!!/home/angular/project/node_modules/script-loader/addScript.js\")(require(\"!!/home/angular/project/node_modules/raw-loader/index.js!/home/angular/project/node_modules/tinymce/plugins/link/plugin.js\"))\n\n\n//////////////////\n// WEBPACK FOOTER\n// /home/angular/project/~/tinymce/plugins/link/plugin.js\n// module id = 473\n// module chunks = 1","require(\"!!/home/angular/project/node_modules/script-loader/addScript.js\")(require(\"!!/home/angular/project/node_modules/raw-loader/index.js!/home/angular/project/node_modules/tinymce/plugins/paste/plugin.js\"))\n\n\n//////////////////\n// WEBPACK FOOTER\n// /home/angular/project/~/tinymce/plugins/paste/plugin.js\n// module id = 474\n// module chunks = 1","require(\"!!/home/angular/project/node_modules/script-loader/addScript.js\")(require(\"!!/home/angular/project/node_modules/raw-loader/index.js!/home/angular/project/node_modules/tinymce/plugins/table/plugin.js\"))\n\n\n//////////////////\n// WEBPACK FOOTER\n// /home/angular/project/~/tinymce/plugins/table/plugin.js\n// module id = 475\n// module chunks = 1","require(\"!!/home/angular/project/node_modules/script-loader/addScript.js\")(require(\"!!/home/angular/project/node_modules/raw-loader/index.js!/home/angular/project/node_modules/tinymce/themes/modern/theme.js\"))\n\n\n//////////////////\n// WEBPACK FOOTER\n// /home/angular/project/~/tinymce/themes/modern/theme.js\n// module id = 476\n// module chunks = 1","require(\"!!/home/angular/project/node_modules/script-loader/addScript.js\")(require(\"!!/home/angular/project/node_modules/raw-loader/index.js!/home/angular/project/node_modules/tinymce/tinymce.js\"))\n\n\n//////////////////\n// WEBPACK FOOTER\n// /home/angular/project/~/tinymce/tinymce.js\n// module id = 477\n// module chunks = 1","module.exports = \"(function () {\\nvar link = (function (domGlobals) {\\n    'use strict';\\n\\n    var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\\n\\n    var global$1 = tinymce.util.Tools.resolve('tinymce.util.VK');\\n\\n    var assumeExternalTargets = function (editorSettings) {\\n      return typeof editorSettings.link_assume_external_targets === 'boolean' ? editorSettings.link_assume_external_targets : false;\\n    };\\n    var hasContextToolbar = function (editorSettings) {\\n      return typeof editorSettings.link_context_toolbar === 'boolean' ? editorSettings.link_context_toolbar : false;\\n    };\\n    var getLinkList = function (editorSettings) {\\n      return editorSettings.link_list;\\n    };\\n    var hasDefaultLinkTarget = function (editorSettings) {\\n      return typeof editorSettings.default_link_target === 'string';\\n    };\\n    var getDefaultLinkTarget = function (editorSettings) {\\n      return editorSettings.default_link_target;\\n    };\\n    var getTargetList = function (editorSettings) {\\n      return editorSettings.target_list;\\n    };\\n    var setTargetList = function (editor, list) {\\n      editor.settings.target_list = list;\\n    };\\n    var shouldShowTargetList = function (editorSettings) {\\n      return getTargetList(editorSettings) !== false;\\n    };\\n    var getRelList = function (editorSettings) {\\n      return editorSettings.rel_list;\\n    };\\n    var hasRelList = function (editorSettings) {\\n      return getRelList(editorSettings) !== undefined;\\n    };\\n    var getLinkClassList = function (editorSettings) {\\n      return editorSettings.link_class_list;\\n    };\\n    var hasLinkClassList = function (editorSettings) {\\n      return getLinkClassList(editorSettings) !== undefined;\\n    };\\n    var shouldShowLinkTitle = function (editorSettings) {\\n      return editorSettings.link_title !== false;\\n    };\\n    var allowUnsafeLinkTarget = function (editorSettings) {\\n      return typeof editorSettings.allow_unsafe_link_target === 'boolean' ? editorSettings.allow_unsafe_link_target : false;\\n    };\\n    var Settings = {\\n      assumeExternalTargets: assumeExternalTargets,\\n      hasContextToolbar: hasContextToolbar,\\n      getLinkList: getLinkList,\\n      hasDefaultLinkTarget: hasDefaultLinkTarget,\\n      getDefaultLinkTarget: getDefaultLinkTarget,\\n      getTargetList: getTargetList,\\n      setTargetList: setTargetList,\\n      shouldShowTargetList: shouldShowTargetList,\\n      getRelList: getRelList,\\n      hasRelList: hasRelList,\\n      getLinkClassList: getLinkClassList,\\n      hasLinkClassList: hasLinkClassList,\\n      shouldShowLinkTitle: shouldShowLinkTitle,\\n      allowUnsafeLinkTarget: allowUnsafeLinkTarget\\n    };\\n\\n    var global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\\n\\n    var global$3 = tinymce.util.Tools.resolve('tinymce.Env');\\n\\n    var appendClickRemove = function (link, evt) {\\n      domGlobals.document.body.appendChild(link);\\n      link.dispatchEvent(evt);\\n      domGlobals.document.body.removeChild(link);\\n    };\\n    var open = function (url) {\\n      if (!global$3.ie || global$3.ie > 10) {\\n        var link = domGlobals.document.createElement('a');\\n        link.target = '_blank';\\n        link.href = url;\\n        link.rel = 'noreferrer noopener';\\n        var evt = domGlobals.document.createEvent('MouseEvents');\\n        evt.initMouseEvent('click', true, true, domGlobals.window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\\n        appendClickRemove(link, evt);\\n      } else {\\n        var win = domGlobals.window.open('', '_blank');\\n        if (win) {\\n          win.opener = null;\\n          var doc = win.document;\\n          doc.open();\\n          doc.write('<meta http-equiv=\\\"refresh\\\" content=\\\"0; url=' + global$2.DOM.encode(url) + '\\\">');\\n          doc.close();\\n        }\\n      }\\n    };\\n    var OpenUrl = { open: open };\\n\\n    var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools');\\n\\n    var toggleTargetRules = function (rel, isUnsafe) {\\n      var rules = ['noopener'];\\n      var newRel = rel ? rel.split(/\\\\s+/) : [];\\n      var toString = function (rel) {\\n        return global$4.trim(rel.sort().join(' '));\\n      };\\n      var addTargetRules = function (rel) {\\n        rel = removeTargetRules(rel);\\n        return rel.length ? rel.concat(rules) : rules;\\n      };\\n      var removeTargetRules = function (rel) {\\n        return rel.filter(function (val) {\\n          return global$4.inArray(rules, val) === -1;\\n        });\\n      };\\n      newRel = isUnsafe ? addTargetRules(newRel) : removeTargetRules(newRel);\\n      return newRel.length ? toString(newRel) : null;\\n    };\\n    var trimCaretContainers = function (text) {\\n      return text.replace(/\\\\uFEFF/g, '');\\n    };\\n    var getAnchorElement = function (editor, selectedElm) {\\n      selectedElm = selectedElm || editor.selection.getNode();\\n      if (isImageFigure(selectedElm)) {\\n        return editor.dom.select('a[href]', selectedElm)[0];\\n      } else {\\n        return editor.dom.getParent(selectedElm, 'a[href]');\\n      }\\n    };\\n    var getAnchorText = function (selection, anchorElm) {\\n      var text = anchorElm ? anchorElm.innerText || anchorElm.textContent : selection.getContent({ format: 'text' });\\n      return trimCaretContainers(text);\\n    };\\n    var isLink = function (elm) {\\n      return elm && elm.nodeName === 'A' && elm.href;\\n    };\\n    var hasLinks = function (elements) {\\n      return global$4.grep(elements, isLink).length > 0;\\n    };\\n    var isOnlyTextSelected = function (html) {\\n      if (/</.test(html) && (!/^<a [^>]+>[^<]+<\\\\/a>$/.test(html) || html.indexOf('href=') === -1)) {\\n        return false;\\n      }\\n      return true;\\n    };\\n    var isImageFigure = function (node) {\\n      return node && node.nodeName === 'FIGURE' && /\\\\bimage\\\\b/i.test(node.className);\\n    };\\n    var link = function (editor, attachState) {\\n      return function (data) {\\n        editor.undoManager.transact(function () {\\n          var selectedElm = editor.selection.getNode();\\n          var anchorElm = getAnchorElement(editor, selectedElm);\\n          var linkAttrs = {\\n            href: data.href,\\n            target: data.target ? data.target : null,\\n            rel: data.rel ? data.rel : null,\\n            class: data.class ? data.class : null,\\n            title: data.title ? data.title : null\\n          };\\n          if (!Settings.hasRelList(editor.settings) && Settings.allowUnsafeLinkTarget(editor.settings) === false) {\\n            linkAttrs.rel = toggleTargetRules(linkAttrs.rel, linkAttrs.target === '_blank');\\n          }\\n          if (data.href === attachState.href) {\\n            attachState.attach();\\n            attachState = {};\\n          }\\n          if (anchorElm) {\\n            editor.focus();\\n            if (data.hasOwnProperty('text')) {\\n              if ('innerText' in anchorElm) {\\n                anchorElm.innerText = data.text;\\n              } else {\\n                anchorElm.textContent = data.text;\\n              }\\n            }\\n            editor.dom.setAttribs(anchorElm, linkAttrs);\\n            editor.selection.select(anchorElm);\\n            editor.undoManager.add();\\n          } else {\\n            if (isImageFigure(selectedElm)) {\\n              linkImageFigure(editor, selectedElm, linkAttrs);\\n            } else if (data.hasOwnProperty('text')) {\\n              editor.insertContent(editor.dom.createHTML('a', linkAttrs, editor.dom.encode(data.text)));\\n            } else {\\n              editor.execCommand('mceInsertLink', false, linkAttrs);\\n            }\\n          }\\n        });\\n      };\\n    };\\n    var unlink = function (editor) {\\n      return function () {\\n        editor.undoManager.transact(function () {\\n          var node = editor.selection.getNode();\\n          if (isImageFigure(node)) {\\n            unlinkImageFigure(editor, node);\\n          } else {\\n            editor.execCommand('unlink');\\n          }\\n        });\\n      };\\n    };\\n    var unlinkImageFigure = function (editor, fig) {\\n      var a, img;\\n      img = editor.dom.select('img', fig)[0];\\n      if (img) {\\n        a = editor.dom.getParents(img, 'a[href]', fig)[0];\\n        if (a) {\\n          a.parentNode.insertBefore(img, a);\\n          editor.dom.remove(a);\\n        }\\n      }\\n    };\\n    var linkImageFigure = function (editor, fig, attrs) {\\n      var a, img;\\n      img = editor.dom.select('img', fig)[0];\\n      if (img) {\\n        a = editor.dom.create('a', attrs);\\n        img.parentNode.insertBefore(a, img);\\n        a.appendChild(img);\\n      }\\n    };\\n    var Utils = {\\n      link: link,\\n      unlink: unlink,\\n      isLink: isLink,\\n      hasLinks: hasLinks,\\n      isOnlyTextSelected: isOnlyTextSelected,\\n      getAnchorElement: getAnchorElement,\\n      getAnchorText: getAnchorText,\\n      toggleTargetRules: toggleTargetRules\\n    };\\n\\n    var global$5 = tinymce.util.Tools.resolve('tinymce.util.Delay');\\n\\n    var global$6 = tinymce.util.Tools.resolve('tinymce.util.XHR');\\n\\n    var attachState = {};\\n    var createLinkList = function (editor, callback) {\\n      var linkList = Settings.getLinkList(editor.settings);\\n      if (typeof linkList === 'string') {\\n        global$6.send({\\n          url: linkList,\\n          success: function (text) {\\n            callback(editor, JSON.parse(text));\\n          }\\n        });\\n      } else if (typeof linkList === 'function') {\\n        linkList(function (list) {\\n          callback(editor, list);\\n        });\\n      } else {\\n        callback(editor, linkList);\\n      }\\n    };\\n    var buildListItems = function (inputList, itemCallback, startItems) {\\n      var appendItems = function (values, output) {\\n        output = output || [];\\n        global$4.each(values, function (item) {\\n          var menuItem = { text: item.text || item.title };\\n          if (item.menu) {\\n            menuItem.menu = appendItems(item.menu);\\n          } else {\\n            menuItem.value = item.value;\\n            if (itemCallback) {\\n              itemCallback(menuItem);\\n            }\\n          }\\n          output.push(menuItem);\\n        });\\n        return output;\\n      };\\n      return appendItems(inputList, startItems || []);\\n    };\\n    var delayedConfirm = function (editor, message, callback) {\\n      var rng = editor.selection.getRng();\\n      global$5.setEditorTimeout(editor, function () {\\n        editor.windowManager.confirm(message, function (state) {\\n          editor.selection.setRng(rng);\\n          callback(state);\\n        });\\n      });\\n    };\\n    var showDialog = function (editor, linkList) {\\n      var data = {};\\n      var selection = editor.selection;\\n      var dom = editor.dom;\\n      var anchorElm, initialText;\\n      var win, onlyText, textListCtrl, linkListCtrl, relListCtrl, targetListCtrl, classListCtrl, linkTitleCtrl, value;\\n      var linkListChangeHandler = function (e) {\\n        var textCtrl = win.find('#text');\\n        if (!textCtrl.value() || e.lastControl && textCtrl.value() === e.lastControl.text()) {\\n          textCtrl.value(e.control.text());\\n        }\\n        win.find('#href').value(e.control.value());\\n      };\\n      var buildAnchorListControl = function (url) {\\n        var anchorList = [];\\n        global$4.each(editor.dom.select('a:not([href])'), function (anchor) {\\n          var id = anchor.name || anchor.id;\\n          if (id) {\\n            anchorList.push({\\n              text: id,\\n              value: '#' + id,\\n              selected: url.indexOf('#' + id) !== -1\\n            });\\n          }\\n        });\\n        if (anchorList.length) {\\n          anchorList.unshift({\\n            text: 'None',\\n            value: ''\\n          });\\n          return {\\n            name: 'anchor',\\n            type: 'listbox',\\n            label: 'Anchors',\\n            values: anchorList,\\n            onselect: linkListChangeHandler\\n          };\\n        }\\n      };\\n      var updateText = function () {\\n        if (!initialText && onlyText && !data.text) {\\n          this.parent().parent().find('#text')[0].value(this.value());\\n        }\\n      };\\n      var urlChange = function (e) {\\n        var meta = e.meta || {};\\n        if (linkListCtrl) {\\n          linkListCtrl.value(editor.convertURL(this.value(), 'href'));\\n        }\\n        global$4.each(e.meta, function (value, key) {\\n          var inp = win.find('#' + key);\\n          if (key === 'text') {\\n            if (initialText.length === 0) {\\n              inp.value(value);\\n              data.text = value;\\n            }\\n          } else {\\n            inp.value(value);\\n          }\\n        });\\n        if (meta.attach) {\\n          attachState = {\\n            href: this.value(),\\n            attach: meta.attach\\n          };\\n        }\\n        if (!meta.text) {\\n          updateText.call(this);\\n        }\\n      };\\n      var onBeforeCall = function (e) {\\n        e.meta = win.toJSON();\\n      };\\n      onlyText = Utils.isOnlyTextSelected(selection.getContent());\\n      anchorElm = Utils.getAnchorElement(editor);\\n      data.text = initialText = Utils.getAnchorText(editor.selection, anchorElm);\\n      data.href = anchorElm ? dom.getAttrib(anchorElm, 'href') : '';\\n      if (anchorElm) {\\n        data.target = dom.getAttrib(anchorElm, 'target');\\n      } else if (Settings.hasDefaultLinkTarget(editor.settings)) {\\n        data.target = Settings.getDefaultLinkTarget(editor.settings);\\n      }\\n      if (value = dom.getAttrib(anchorElm, 'rel')) {\\n        data.rel = value;\\n      }\\n      if (value = dom.getAttrib(anchorElm, 'class')) {\\n        data.class = value;\\n      }\\n      if (value = dom.getAttrib(anchorElm, 'title')) {\\n        data.title = value;\\n      }\\n      if (onlyText) {\\n        textListCtrl = {\\n          name: 'text',\\n          type: 'textbox',\\n          size: 40,\\n          label: 'Text to display',\\n          onchange: function () {\\n            data.text = this.value();\\n          }\\n        };\\n      }\\n      if (linkList) {\\n        linkListCtrl = {\\n          type: 'listbox',\\n          label: 'Link list',\\n          values: buildListItems(linkList, function (item) {\\n            item.value = editor.convertURL(item.value || item.url, 'href');\\n          }, [{\\n              text: 'None',\\n              value: ''\\n            }]),\\n          onselect: linkListChangeHandler,\\n          value: editor.convertURL(data.href, 'href'),\\n          onPostRender: function () {\\n            linkListCtrl = this;\\n          }\\n        };\\n      }\\n      if (Settings.shouldShowTargetList(editor.settings)) {\\n        if (Settings.getTargetList(editor.settings) === undefined) {\\n          Settings.setTargetList(editor, [\\n            {\\n              text: 'None',\\n              value: ''\\n            },\\n            {\\n              text: 'New window',\\n              value: '_blank'\\n            }\\n          ]);\\n        }\\n        targetListCtrl = {\\n          name: 'target',\\n          type: 'listbox',\\n          label: 'Target',\\n          values: buildListItems(Settings.getTargetList(editor.settings))\\n        };\\n      }\\n      if (Settings.hasRelList(editor.settings)) {\\n        relListCtrl = {\\n          name: 'rel',\\n          type: 'listbox',\\n          label: 'Rel',\\n          values: buildListItems(Settings.getRelList(editor.settings), function (item) {\\n            if (Settings.allowUnsafeLinkTarget(editor.settings) === false) {\\n              item.value = Utils.toggleTargetRules(item.value, data.target === '_blank');\\n            }\\n          })\\n        };\\n      }\\n      if (Settings.hasLinkClassList(editor.settings)) {\\n        classListCtrl = {\\n          name: 'class',\\n          type: 'listbox',\\n          label: 'Class',\\n          values: buildListItems(Settings.getLinkClassList(editor.settings), function (item) {\\n            if (item.value) {\\n              item.textStyle = function () {\\n                return editor.formatter.getCssText({\\n                  inline: 'a',\\n                  classes: [item.value]\\n                });\\n              };\\n            }\\n          })\\n        };\\n      }\\n      if (Settings.shouldShowLinkTitle(editor.settings)) {\\n        linkTitleCtrl = {\\n          name: 'title',\\n          type: 'textbox',\\n          label: 'Title',\\n          value: data.title\\n        };\\n      }\\n      win = editor.windowManager.open({\\n        title: 'Insert link',\\n        data: data,\\n        body: [\\n          {\\n            name: 'href',\\n            type: 'filepicker',\\n            filetype: 'file',\\n            size: 40,\\n            autofocus: true,\\n            label: 'Url',\\n            onchange: urlChange,\\n            onkeyup: updateText,\\n            onpaste: updateText,\\n            onbeforecall: onBeforeCall\\n          },\\n          textListCtrl,\\n          linkTitleCtrl,\\n          buildAnchorListControl(data.href),\\n          linkListCtrl,\\n          relListCtrl,\\n          targetListCtrl,\\n          classListCtrl\\n        ],\\n        onSubmit: function (e) {\\n          var assumeExternalTargets = Settings.assumeExternalTargets(editor.settings);\\n          var insertLink = Utils.link(editor, attachState);\\n          var removeLink = Utils.unlink(editor);\\n          var resultData = global$4.extend({}, data, e.data);\\n          var href = resultData.href;\\n          if (!href) {\\n            removeLink();\\n            return;\\n          }\\n          if (!onlyText || resultData.text === initialText) {\\n            delete resultData.text;\\n          }\\n          if (href.indexOf('@') > 0 && href.indexOf('//') === -1 && href.indexOf('mailto:') === -1) {\\n            delayedConfirm(editor, 'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?', function (state) {\\n              if (state) {\\n                resultData.href = 'mailto:' + href;\\n              }\\n              insertLink(resultData);\\n            });\\n            return;\\n          }\\n          if (assumeExternalTargets === true && !/^\\\\w+:/i.test(href) || assumeExternalTargets === false && /^\\\\s*www[\\\\.|\\\\d\\\\.]/i.test(href)) {\\n            delayedConfirm(editor, 'The URL you entered seems to be an external link. Do you want to add the required http:// prefix?', function (state) {\\n              if (state) {\\n                resultData.href = 'http://' + href;\\n              }\\n              insertLink(resultData);\\n            });\\n            return;\\n          }\\n          insertLink(resultData);\\n        }\\n      });\\n    };\\n    var open$1 = function (editor) {\\n      createLinkList(editor, showDialog);\\n    };\\n    var Dialog = { open: open$1 };\\n\\n    var getLink = function (editor, elm) {\\n      return editor.dom.getParent(elm, 'a[href]');\\n    };\\n    var getSelectedLink = function (editor) {\\n      return getLink(editor, editor.selection.getStart());\\n    };\\n    var getHref = function (elm) {\\n      var href = elm.getAttribute('data-mce-href');\\n      return href ? href : elm.getAttribute('href');\\n    };\\n    var isContextMenuVisible = function (editor) {\\n      var contextmenu = editor.plugins.contextmenu;\\n      return contextmenu ? contextmenu.isContextMenuVisible() : false;\\n    };\\n    var hasOnlyAltModifier = function (e) {\\n      return e.altKey === true && e.shiftKey === false && e.ctrlKey === false && e.metaKey === false;\\n    };\\n    var gotoLink = function (editor, a) {\\n      if (a) {\\n        var href = getHref(a);\\n        if (/^#/.test(href)) {\\n          var targetEl = editor.$(href);\\n          if (targetEl.length) {\\n            editor.selection.scrollIntoView(targetEl[0], true);\\n          }\\n        } else {\\n          OpenUrl.open(a.href);\\n        }\\n      }\\n    };\\n    var openDialog = function (editor) {\\n      return function () {\\n        Dialog.open(editor);\\n      };\\n    };\\n    var gotoSelectedLink = function (editor) {\\n      return function () {\\n        gotoLink(editor, getSelectedLink(editor));\\n      };\\n    };\\n    var leftClickedOnAHref = function (editor) {\\n      return function (elm) {\\n        var sel, rng, node;\\n        if (Settings.hasContextToolbar(editor.settings) && !isContextMenuVisible(editor) && Utils.isLink(elm)) {\\n          sel = editor.selection;\\n          rng = sel.getRng();\\n          node = rng.startContainer;\\n          if (node.nodeType === 3 && sel.isCollapsed() && rng.startOffset > 0 && rng.startOffset < node.data.length) {\\n            return true;\\n          }\\n        }\\n        return false;\\n      };\\n    };\\n    var setupGotoLinks = function (editor) {\\n      editor.on('click', function (e) {\\n        var link = getLink(editor, e.target);\\n        if (link && global$1.metaKeyPressed(e)) {\\n          e.preventDefault();\\n          gotoLink(editor, link);\\n        }\\n      });\\n      editor.on('keydown', function (e) {\\n        var link = getSelectedLink(editor);\\n        if (link && e.keyCode === 13 && hasOnlyAltModifier(e)) {\\n          e.preventDefault();\\n          gotoLink(editor, link);\\n        }\\n      });\\n    };\\n    var toggleActiveState = function (editor) {\\n      return function () {\\n        var self = this;\\n        editor.on('nodechange', function (e) {\\n          self.active(!editor.readonly && !!Utils.getAnchorElement(editor, e.element));\\n        });\\n      };\\n    };\\n    var toggleViewLinkState = function (editor) {\\n      return function () {\\n        var self = this;\\n        var toggleVisibility = function (e) {\\n          if (Utils.hasLinks(e.parents)) {\\n            self.show();\\n          } else {\\n            self.hide();\\n          }\\n        };\\n        if (!Utils.hasLinks(editor.dom.getParents(editor.selection.getStart()))) {\\n          self.hide();\\n        }\\n        editor.on('nodechange', toggleVisibility);\\n        self.on('remove', function () {\\n          editor.off('nodechange', toggleVisibility);\\n        });\\n      };\\n    };\\n    var Actions = {\\n      openDialog: openDialog,\\n      gotoSelectedLink: gotoSelectedLink,\\n      leftClickedOnAHref: leftClickedOnAHref,\\n      setupGotoLinks: setupGotoLinks,\\n      toggleActiveState: toggleActiveState,\\n      toggleViewLinkState: toggleViewLinkState\\n    };\\n\\n    var register = function (editor) {\\n      editor.addCommand('mceLink', Actions.openDialog(editor));\\n    };\\n    var Commands = { register: register };\\n\\n    var setup = function (editor) {\\n      editor.addShortcut('Meta+K', '', Actions.openDialog(editor));\\n    };\\n    var Keyboard = { setup: setup };\\n\\n    var setupButtons = function (editor) {\\n      editor.addButton('link', {\\n        active: false,\\n        icon: 'link',\\n        tooltip: 'Insert/edit link',\\n        onclick: Actions.openDialog(editor),\\n        onpostrender: Actions.toggleActiveState(editor)\\n      });\\n      editor.addButton('unlink', {\\n        active: false,\\n        icon: 'unlink',\\n        tooltip: 'Remove link',\\n        onclick: Utils.unlink(editor),\\n        onpostrender: Actions.toggleActiveState(editor)\\n      });\\n      if (editor.addContextToolbar) {\\n        editor.addButton('openlink', {\\n          icon: 'newtab',\\n          tooltip: 'Open link',\\n          onclick: Actions.gotoSelectedLink(editor)\\n        });\\n      }\\n    };\\n    var setupMenuItems = function (editor) {\\n      editor.addMenuItem('openlink', {\\n        text: 'Open link',\\n        icon: 'newtab',\\n        onclick: Actions.gotoSelectedLink(editor),\\n        onPostRender: Actions.toggleViewLinkState(editor),\\n        prependToContext: true\\n      });\\n      editor.addMenuItem('link', {\\n        icon: 'link',\\n        text: 'Link',\\n        shortcut: 'Meta+K',\\n        onclick: Actions.openDialog(editor),\\n        stateSelector: 'a[href]',\\n        context: 'insert',\\n        prependToContext: true\\n      });\\n      editor.addMenuItem('unlink', {\\n        icon: 'unlink',\\n        text: 'Remove link',\\n        onclick: Utils.unlink(editor),\\n        stateSelector: 'a[href]'\\n      });\\n    };\\n    var setupContextToolbars = function (editor) {\\n      if (editor.addContextToolbar) {\\n        editor.addContextToolbar(Actions.leftClickedOnAHref(editor), 'openlink | link unlink');\\n      }\\n    };\\n    var Controls = {\\n      setupButtons: setupButtons,\\n      setupMenuItems: setupMenuItems,\\n      setupContextToolbars: setupContextToolbars\\n    };\\n\\n    global.add('link', function (editor) {\\n      Controls.setupButtons(editor);\\n      Controls.setupMenuItems(editor);\\n      Controls.setupContextToolbars(editor);\\n      Actions.setupGotoLinks(editor);\\n      Commands.register(editor);\\n      Keyboard.setup(editor);\\n    });\\n    function Plugin () {\\n    }\\n\\n    return Plugin;\\n\\n}(window));\\n})();\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// /home/angular/project/~/raw-loader!/home/angular/project/~/tinymce/plugins/link/plugin.js\n// module id = 772\n// module chunks = 1","module.exports = \"(function () {\\nvar paste = (function (domGlobals) {\\n    'use strict';\\n\\n    var Cell = function (initial) {\\n      var value = initial;\\n      var get = function () {\\n        return value;\\n      };\\n      var set = function (v) {\\n        value = v;\\n      };\\n      var clone = function () {\\n        return Cell(get());\\n      };\\n      return {\\n        get: get,\\n        set: set,\\n        clone: clone\\n      };\\n    };\\n\\n    var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\\n\\n    var hasProPlugin = function (editor) {\\n      if (/(^|[ ,])powerpaste([, ]|$)/.test(editor.settings.plugins) && global$1.get('powerpaste')) {\\n        if (typeof domGlobals.window.console !== 'undefined' && domGlobals.window.console.log) {\\n          domGlobals.window.console.log('PowerPaste is incompatible with Paste plugin! Remove \\\\'paste\\\\' from the \\\\'plugins\\\\' option.');\\n        }\\n        return true;\\n      } else {\\n        return false;\\n      }\\n    };\\n    var DetectProPlugin = { hasProPlugin: hasProPlugin };\\n\\n    var get = function (clipboard, quirks) {\\n      return {\\n        clipboard: clipboard,\\n        quirks: quirks\\n      };\\n    };\\n    var Api = { get: get };\\n\\n    var firePastePreProcess = function (editor, html, internal, isWordHtml) {\\n      return editor.fire('PastePreProcess', {\\n        content: html,\\n        internal: internal,\\n        wordContent: isWordHtml\\n      });\\n    };\\n    var firePastePostProcess = function (editor, node, internal, isWordHtml) {\\n      return editor.fire('PastePostProcess', {\\n        node: node,\\n        internal: internal,\\n        wordContent: isWordHtml\\n      });\\n    };\\n    var firePastePlainTextToggle = function (editor, state) {\\n      return editor.fire('PastePlainTextToggle', { state: state });\\n    };\\n    var firePaste = function (editor, ieFake) {\\n      return editor.fire('paste', { ieFake: ieFake });\\n    };\\n    var Events = {\\n      firePastePreProcess: firePastePreProcess,\\n      firePastePostProcess: firePastePostProcess,\\n      firePastePlainTextToggle: firePastePlainTextToggle,\\n      firePaste: firePaste\\n    };\\n\\n    var shouldPlainTextInform = function (editor) {\\n      return editor.getParam('paste_plaintext_inform', true);\\n    };\\n    var shouldBlockDrop = function (editor) {\\n      return editor.getParam('paste_block_drop', false);\\n    };\\n    var shouldPasteDataImages = function (editor) {\\n      return editor.getParam('paste_data_images', false);\\n    };\\n    var shouldFilterDrop = function (editor) {\\n      return editor.getParam('paste_filter_drop', true);\\n    };\\n    var getPreProcess = function (editor) {\\n      return editor.getParam('paste_preprocess');\\n    };\\n    var getPostProcess = function (editor) {\\n      return editor.getParam('paste_postprocess');\\n    };\\n    var getWebkitStyles = function (editor) {\\n      return editor.getParam('paste_webkit_styles');\\n    };\\n    var shouldRemoveWebKitStyles = function (editor) {\\n      return editor.getParam('paste_remove_styles_if_webkit', true);\\n    };\\n    var shouldMergeFormats = function (editor) {\\n      return editor.getParam('paste_merge_formats', true);\\n    };\\n    var isSmartPasteEnabled = function (editor) {\\n      return editor.getParam('smart_paste', true);\\n    };\\n    var isPasteAsTextEnabled = function (editor) {\\n      return editor.getParam('paste_as_text', false);\\n    };\\n    var getRetainStyleProps = function (editor) {\\n      return editor.getParam('paste_retain_style_properties');\\n    };\\n    var getWordValidElements = function (editor) {\\n      var defaultValidElements = '-strong/b,-em/i,-u,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,' + '-p/div,-a[href|name],sub,sup,strike,br,del,table[width],tr,' + 'td[colspan|rowspan|width],th[colspan|rowspan|width],thead,tfoot,tbody';\\n      return editor.getParam('paste_word_valid_elements', defaultValidElements);\\n    };\\n    var shouldConvertWordFakeLists = function (editor) {\\n      return editor.getParam('paste_convert_word_fake_lists', true);\\n    };\\n    var shouldUseDefaultFilters = function (editor) {\\n      return editor.getParam('paste_enable_default_filters', true);\\n    };\\n    var Settings = {\\n      shouldPlainTextInform: shouldPlainTextInform,\\n      shouldBlockDrop: shouldBlockDrop,\\n      shouldPasteDataImages: shouldPasteDataImages,\\n      shouldFilterDrop: shouldFilterDrop,\\n      getPreProcess: getPreProcess,\\n      getPostProcess: getPostProcess,\\n      getWebkitStyles: getWebkitStyles,\\n      shouldRemoveWebKitStyles: shouldRemoveWebKitStyles,\\n      shouldMergeFormats: shouldMergeFormats,\\n      isSmartPasteEnabled: isSmartPasteEnabled,\\n      isPasteAsTextEnabled: isPasteAsTextEnabled,\\n      getRetainStyleProps: getRetainStyleProps,\\n      getWordValidElements: getWordValidElements,\\n      shouldConvertWordFakeLists: shouldConvertWordFakeLists,\\n      shouldUseDefaultFilters: shouldUseDefaultFilters\\n    };\\n\\n    var shouldInformUserAboutPlainText = function (editor, userIsInformedState) {\\n      return userIsInformedState.get() === false && Settings.shouldPlainTextInform(editor);\\n    };\\n    var displayNotification = function (editor, message) {\\n      editor.notificationManager.open({\\n        text: editor.translate(message),\\n        type: 'info'\\n      });\\n    };\\n    var togglePlainTextPaste = function (editor, clipboard, userIsInformedState) {\\n      if (clipboard.pasteFormat.get() === 'text') {\\n        clipboard.pasteFormat.set('html');\\n        Events.firePastePlainTextToggle(editor, false);\\n      } else {\\n        clipboard.pasteFormat.set('text');\\n        Events.firePastePlainTextToggle(editor, true);\\n        if (shouldInformUserAboutPlainText(editor, userIsInformedState)) {\\n          displayNotification(editor, 'Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.');\\n          userIsInformedState.set(true);\\n        }\\n      }\\n      editor.focus();\\n    };\\n    var Actions = { togglePlainTextPaste: togglePlainTextPaste };\\n\\n    var register = function (editor, clipboard, userIsInformedState) {\\n      editor.addCommand('mceTogglePlainTextPaste', function () {\\n        Actions.togglePlainTextPaste(editor, clipboard, userIsInformedState);\\n      });\\n      editor.addCommand('mceInsertClipboardContent', function (ui, value) {\\n        if (value.content) {\\n          clipboard.pasteHtml(value.content, value.internal);\\n        }\\n        if (value.text) {\\n          clipboard.pasteText(value.text);\\n        }\\n      });\\n    };\\n    var Commands = { register: register };\\n\\n    var global$2 = tinymce.util.Tools.resolve('tinymce.Env');\\n\\n    var global$3 = tinymce.util.Tools.resolve('tinymce.util.Delay');\\n\\n    var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools');\\n\\n    var global$5 = tinymce.util.Tools.resolve('tinymce.util.VK');\\n\\n    var internalMimeType = 'x-tinymce/html';\\n    var internalMark = '<!-- ' + internalMimeType + ' -->';\\n    var mark = function (html) {\\n      return internalMark + html;\\n    };\\n    var unmark = function (html) {\\n      return html.replace(internalMark, '');\\n    };\\n    var isMarked = function (html) {\\n      return html.indexOf(internalMark) !== -1;\\n    };\\n    var InternalHtml = {\\n      mark: mark,\\n      unmark: unmark,\\n      isMarked: isMarked,\\n      internalHtmlMime: function () {\\n        return internalMimeType;\\n      }\\n    };\\n\\n    var global$6 = tinymce.util.Tools.resolve('tinymce.html.Entities');\\n\\n    var isPlainText = function (text) {\\n      return !/<(?:\\\\/?(?!(?:div|p|br|span)>)\\\\w+|(?:(?!(?:span style=\\\"white-space:\\\\s?pre;?\\\">)|br\\\\s?\\\\/>))\\\\w+\\\\s[^>]+)>/i.test(text);\\n    };\\n    var toBRs = function (text) {\\n      return text.replace(/\\\\r?\\\\n/g, '<br>');\\n    };\\n    var openContainer = function (rootTag, rootAttrs) {\\n      var key;\\n      var attrs = [];\\n      var tag = '<' + rootTag;\\n      if (typeof rootAttrs === 'object') {\\n        for (key in rootAttrs) {\\n          if (rootAttrs.hasOwnProperty(key)) {\\n            attrs.push(key + '=\\\"' + global$6.encodeAllRaw(rootAttrs[key]) + '\\\"');\\n          }\\n        }\\n        if (attrs.length) {\\n          tag += ' ' + attrs.join(' ');\\n        }\\n      }\\n      return tag + '>';\\n    };\\n    var toBlockElements = function (text, rootTag, rootAttrs) {\\n      var blocks = text.split(/\\\\n\\\\n/);\\n      var tagOpen = openContainer(rootTag, rootAttrs);\\n      var tagClose = '</' + rootTag + '>';\\n      var paragraphs = global$4.map(blocks, function (p) {\\n        return p.split(/\\\\n/).join('<br />');\\n      });\\n      var stitch = function (p) {\\n        return tagOpen + p + tagClose;\\n      };\\n      return paragraphs.length === 1 ? paragraphs[0] : global$4.map(paragraphs, stitch).join('');\\n    };\\n    var convert = function (text, rootTag, rootAttrs) {\\n      return rootTag ? toBlockElements(text, rootTag, rootAttrs) : toBRs(text);\\n    };\\n    var Newlines = {\\n      isPlainText: isPlainText,\\n      convert: convert,\\n      toBRs: toBRs,\\n      toBlockElements: toBlockElements\\n    };\\n\\n    var global$7 = tinymce.util.Tools.resolve('tinymce.html.DomParser');\\n\\n    var global$8 = tinymce.util.Tools.resolve('tinymce.html.Serializer');\\n\\n    var global$9 = tinymce.util.Tools.resolve('tinymce.html.Node');\\n\\n    var global$a = tinymce.util.Tools.resolve('tinymce.html.Schema');\\n\\n    function filter(content, items) {\\n      global$4.each(items, function (v) {\\n        if (v.constructor === RegExp) {\\n          content = content.replace(v, '');\\n        } else {\\n          content = content.replace(v[0], v[1]);\\n        }\\n      });\\n      return content;\\n    }\\n    function innerText(html) {\\n      var schema = global$a();\\n      var domParser = global$7({}, schema);\\n      var text = '';\\n      var shortEndedElements = schema.getShortEndedElements();\\n      var ignoreElements = global$4.makeMap('script noscript style textarea video audio iframe object', ' ');\\n      var blockElements = schema.getBlockElements();\\n      function walk(node) {\\n        var name = node.name, currentNode = node;\\n        if (name === 'br') {\\n          text += '\\\\n';\\n          return;\\n        }\\n        if (name === 'wbr') {\\n          return;\\n        }\\n        if (shortEndedElements[name]) {\\n          text += ' ';\\n        }\\n        if (ignoreElements[name]) {\\n          text += ' ';\\n          return;\\n        }\\n        if (node.type === 3) {\\n          text += node.value;\\n        }\\n        if (!node.shortEnded) {\\n          if (node = node.firstChild) {\\n            do {\\n              walk(node);\\n            } while (node = node.next);\\n          }\\n        }\\n        if (blockElements[name] && currentNode.next) {\\n          text += '\\\\n';\\n          if (name === 'p') {\\n            text += '\\\\n';\\n          }\\n        }\\n      }\\n      html = filter(html, [/<!\\\\[[^\\\\]]+\\\\]>/g]);\\n      walk(domParser.parse(html));\\n      return text;\\n    }\\n    function trimHtml(html) {\\n      function trimSpaces(all, s1, s2) {\\n        if (!s1 && !s2) {\\n          return ' ';\\n        }\\n        return '\\\\xA0';\\n      }\\n      html = filter(html, [\\n        /^[\\\\s\\\\S]*<body[^>]*>\\\\s*|\\\\s*<\\\\/body[^>]*>[\\\\s\\\\S]*$/ig,\\n        /<!--StartFragment-->|<!--EndFragment-->/g,\\n        [\\n          /( ?)<span class=\\\"Apple-converted-space\\\">\\\\u00a0<\\\\/span>( ?)/g,\\n          trimSpaces\\n        ],\\n        /<br class=\\\"Apple-interchange-newline\\\">/g,\\n        /<br>$/i\\n      ]);\\n      return html;\\n    }\\n    function createIdGenerator(prefix) {\\n      var count = 0;\\n      return function () {\\n        return prefix + count++;\\n      };\\n    }\\n    var isMsEdge = function () {\\n      return domGlobals.navigator.userAgent.indexOf(' Edge/') !== -1;\\n    };\\n    var Utils = {\\n      filter: filter,\\n      innerText: innerText,\\n      trimHtml: trimHtml,\\n      createIdGenerator: createIdGenerator,\\n      isMsEdge: isMsEdge\\n    };\\n\\n    function isWordContent(content) {\\n      return /<font face=\\\"Times New Roman\\\"|class=\\\"?Mso|style=\\\"[^\\\"]*\\\\bmso-|style='[^'']*\\\\bmso-|w:WordDocument/i.test(content) || /class=\\\"OutlineElement/.test(content) || /id=\\\"?docs\\\\-internal\\\\-guid\\\\-/.test(content);\\n    }\\n    function isNumericList(text) {\\n      var found, patterns;\\n      patterns = [\\n        /^[IVXLMCD]{1,2}\\\\.[ \\\\u00a0]/,\\n        /^[ivxlmcd]{1,2}\\\\.[ \\\\u00a0]/,\\n        /^[a-z]{1,2}[\\\\.\\\\)][ \\\\u00a0]/,\\n        /^[A-Z]{1,2}[\\\\.\\\\)][ \\\\u00a0]/,\\n        /^[0-9]+\\\\.[ \\\\u00a0]/,\\n        /^[\\\\u3007\\\\u4e00\\\\u4e8c\\\\u4e09\\\\u56db\\\\u4e94\\\\u516d\\\\u4e03\\\\u516b\\\\u4e5d]+\\\\.[ \\\\u00a0]/,\\n        /^[\\\\u58f1\\\\u5f10\\\\u53c2\\\\u56db\\\\u4f0d\\\\u516d\\\\u4e03\\\\u516b\\\\u4e5d\\\\u62fe]+\\\\.[ \\\\u00a0]/\\n      ];\\n      text = text.replace(/^[\\\\u00a0 ]+/, '');\\n      global$4.each(patterns, function (pattern) {\\n        if (pattern.test(text)) {\\n          found = true;\\n          return false;\\n        }\\n      });\\n      return found;\\n    }\\n    function isBulletList(text) {\\n      return /^[\\\\s\\\\u00a0]*[\\\\u2022\\\\u00b7\\\\u00a7\\\\u25CF]\\\\s*/.test(text);\\n    }\\n    function convertFakeListsToProperLists(node) {\\n      var currentListNode, prevListNode, lastLevel = 1;\\n      function getText(node) {\\n        var txt = '';\\n        if (node.type === 3) {\\n          return node.value;\\n        }\\n        if (node = node.firstChild) {\\n          do {\\n            txt += getText(node);\\n          } while (node = node.next);\\n        }\\n        return txt;\\n      }\\n      function trimListStart(node, regExp) {\\n        if (node.type === 3) {\\n          if (regExp.test(node.value)) {\\n            node.value = node.value.replace(regExp, '');\\n            return false;\\n          }\\n        }\\n        if (node = node.firstChild) {\\n          do {\\n            if (!trimListStart(node, regExp)) {\\n              return false;\\n            }\\n          } while (node = node.next);\\n        }\\n        return true;\\n      }\\n      function removeIgnoredNodes(node) {\\n        if (node._listIgnore) {\\n          node.remove();\\n          return;\\n        }\\n        if (node = node.firstChild) {\\n          do {\\n            removeIgnoredNodes(node);\\n          } while (node = node.next);\\n        }\\n      }\\n      function convertParagraphToLi(paragraphNode, listName, start) {\\n        var level = paragraphNode._listLevel || lastLevel;\\n        if (level !== lastLevel) {\\n          if (level < lastLevel) {\\n            if (currentListNode) {\\n              currentListNode = currentListNode.parent.parent;\\n            }\\n          } else {\\n            prevListNode = currentListNode;\\n            currentListNode = null;\\n          }\\n        }\\n        if (!currentListNode || currentListNode.name !== listName) {\\n          prevListNode = prevListNode || currentListNode;\\n          currentListNode = new global$9(listName, 1);\\n          if (start > 1) {\\n            currentListNode.attr('start', '' + start);\\n          }\\n          paragraphNode.wrap(currentListNode);\\n        } else {\\n          currentListNode.append(paragraphNode);\\n        }\\n        paragraphNode.name = 'li';\\n        if (level > lastLevel && prevListNode) {\\n          prevListNode.lastChild.append(currentListNode);\\n        }\\n        lastLevel = level;\\n        removeIgnoredNodes(paragraphNode);\\n        trimListStart(paragraphNode, /^\\\\u00a0+/);\\n        trimListStart(paragraphNode, /^\\\\s*([\\\\u2022\\\\u00b7\\\\u00a7\\\\u25CF]|\\\\w+\\\\.)/);\\n        trimListStart(paragraphNode, /^\\\\u00a0+/);\\n      }\\n      var elements = [];\\n      var child = node.firstChild;\\n      while (typeof child !== 'undefined' && child !== null) {\\n        elements.push(child);\\n        child = child.walk();\\n        if (child !== null) {\\n          while (typeof child !== 'undefined' && child.parent !== node) {\\n            child = child.walk();\\n          }\\n        }\\n      }\\n      for (var i = 0; i < elements.length; i++) {\\n        node = elements[i];\\n        if (node.name === 'p' && node.firstChild) {\\n          var nodeText = getText(node);\\n          if (isBulletList(nodeText)) {\\n            convertParagraphToLi(node, 'ul');\\n            continue;\\n          }\\n          if (isNumericList(nodeText)) {\\n            var matches = /([0-9]+)\\\\./.exec(nodeText);\\n            var start = 1;\\n            if (matches) {\\n              start = parseInt(matches[1], 10);\\n            }\\n            convertParagraphToLi(node, 'ol', start);\\n            continue;\\n          }\\n          if (node._listLevel) {\\n            convertParagraphToLi(node, 'ul', 1);\\n            continue;\\n          }\\n          currentListNode = null;\\n        } else {\\n          prevListNode = currentListNode;\\n          currentListNode = null;\\n        }\\n      }\\n    }\\n    function filterStyles(editor, validStyles, node, styleValue) {\\n      var outputStyles = {}, matches;\\n      var styles = editor.dom.parseStyle(styleValue);\\n      global$4.each(styles, function (value, name) {\\n        switch (name) {\\n        case 'mso-list':\\n          matches = /\\\\w+ \\\\w+([0-9]+)/i.exec(styleValue);\\n          if (matches) {\\n            node._listLevel = parseInt(matches[1], 10);\\n          }\\n          if (/Ignore/i.test(value) && node.firstChild) {\\n            node._listIgnore = true;\\n            node.firstChild._listIgnore = true;\\n          }\\n          break;\\n        case 'horiz-align':\\n          name = 'text-align';\\n          break;\\n        case 'vert-align':\\n          name = 'vertical-align';\\n          break;\\n        case 'font-color':\\n        case 'mso-foreground':\\n          name = 'color';\\n          break;\\n        case 'mso-background':\\n        case 'mso-highlight':\\n          name = 'background';\\n          break;\\n        case 'font-weight':\\n        case 'font-style':\\n          if (value !== 'normal') {\\n            outputStyles[name] = value;\\n          }\\n          return;\\n        case 'mso-element':\\n          if (/^(comment|comment-list)$/i.test(value)) {\\n            node.remove();\\n            return;\\n          }\\n          break;\\n        }\\n        if (name.indexOf('mso-comment') === 0) {\\n          node.remove();\\n          return;\\n        }\\n        if (name.indexOf('mso-') === 0) {\\n          return;\\n        }\\n        if (Settings.getRetainStyleProps(editor) === 'all' || validStyles && validStyles[name]) {\\n          outputStyles[name] = value;\\n        }\\n      });\\n      if (/(bold)/i.test(outputStyles['font-weight'])) {\\n        delete outputStyles['font-weight'];\\n        node.wrap(new global$9('b', 1));\\n      }\\n      if (/(italic)/i.test(outputStyles['font-style'])) {\\n        delete outputStyles['font-style'];\\n        node.wrap(new global$9('i', 1));\\n      }\\n      outputStyles = editor.dom.serializeStyle(outputStyles, node.name);\\n      if (outputStyles) {\\n        return outputStyles;\\n      }\\n      return null;\\n    }\\n    var filterWordContent = function (editor, content) {\\n      var retainStyleProperties, validStyles;\\n      retainStyleProperties = Settings.getRetainStyleProps(editor);\\n      if (retainStyleProperties) {\\n        validStyles = global$4.makeMap(retainStyleProperties.split(/[, ]/));\\n      }\\n      content = Utils.filter(content, [\\n        /<br class=\\\"?Apple-interchange-newline\\\"?>/gi,\\n        /<b[^>]+id=\\\"?docs-internal-[^>]*>/gi,\\n        /<!--[\\\\s\\\\S]+?-->/gi,\\n        /<(!|script[^>]*>.*?<\\\\/script(?=[>\\\\s])|\\\\/?(\\\\?xml(:\\\\w+)?|img|meta|link|style|\\\\w:\\\\w+)(?=[\\\\s\\\\/>]))[^>]*>/gi,\\n        [\\n          /<(\\\\/?)s>/gi,\\n          '<$1strike>'\\n        ],\\n        [\\n          /&nbsp;/gi,\\n          '\\\\xA0'\\n        ],\\n        [\\n          /<span\\\\s+style\\\\s*=\\\\s*\\\"\\\\s*mso-spacerun\\\\s*:\\\\s*yes\\\\s*;?\\\\s*\\\"\\\\s*>([\\\\s\\\\u00a0]*)<\\\\/span>/gi,\\n          function (str, spaces) {\\n            return spaces.length > 0 ? spaces.replace(/./, ' ').slice(Math.floor(spaces.length / 2)).split('').join('\\\\xA0') : '';\\n          }\\n        ]\\n      ]);\\n      var validElements = Settings.getWordValidElements(editor);\\n      var schema = global$a({\\n        valid_elements: validElements,\\n        valid_children: '-li[p]'\\n      });\\n      global$4.each(schema.elements, function (rule) {\\n        if (!rule.attributes.class) {\\n          rule.attributes.class = {};\\n          rule.attributesOrder.push('class');\\n        }\\n        if (!rule.attributes.style) {\\n          rule.attributes.style = {};\\n          rule.attributesOrder.push('style');\\n        }\\n      });\\n      var domParser = global$7({}, schema);\\n      domParser.addAttributeFilter('style', function (nodes) {\\n        var i = nodes.length, node;\\n        while (i--) {\\n          node = nodes[i];\\n          node.attr('style', filterStyles(editor, validStyles, node, node.attr('style')));\\n          if (node.name === 'span' && node.parent && !node.attributes.length) {\\n            node.unwrap();\\n          }\\n        }\\n      });\\n      domParser.addAttributeFilter('class', function (nodes) {\\n        var i = nodes.length, node, className;\\n        while (i--) {\\n          node = nodes[i];\\n          className = node.attr('class');\\n          if (/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(className)) {\\n            node.remove();\\n          }\\n          node.attr('class', null);\\n        }\\n      });\\n      domParser.addNodeFilter('del', function (nodes) {\\n        var i = nodes.length;\\n        while (i--) {\\n          nodes[i].remove();\\n        }\\n      });\\n      domParser.addNodeFilter('a', function (nodes) {\\n        var i = nodes.length, node, href, name;\\n        while (i--) {\\n          node = nodes[i];\\n          href = node.attr('href');\\n          name = node.attr('name');\\n          if (href && href.indexOf('#_msocom_') !== -1) {\\n            node.remove();\\n            continue;\\n          }\\n          if (href && href.indexOf('file://') === 0) {\\n            href = href.split('#')[1];\\n            if (href) {\\n              href = '#' + href;\\n            }\\n          }\\n          if (!href && !name) {\\n            node.unwrap();\\n          } else {\\n            if (name && !/^_?(?:toc|edn|ftn)/i.test(name)) {\\n              node.unwrap();\\n              continue;\\n            }\\n            node.attr({\\n              href: href,\\n              name: name\\n            });\\n          }\\n        }\\n      });\\n      var rootNode = domParser.parse(content);\\n      if (Settings.shouldConvertWordFakeLists(editor)) {\\n        convertFakeListsToProperLists(rootNode);\\n      }\\n      content = global$8({ validate: editor.settings.validate }, schema).serialize(rootNode);\\n      return content;\\n    };\\n    var preProcess = function (editor, content) {\\n      return Settings.shouldUseDefaultFilters(editor) ? filterWordContent(editor, content) : content;\\n    };\\n    var WordFilter = {\\n      preProcess: preProcess,\\n      isWordContent: isWordContent\\n    };\\n\\n    var preProcess$1 = function (editor, html) {\\n      var parser = global$7({}, editor.schema);\\n      parser.addNodeFilter('meta', function (nodes) {\\n        global$4.each(nodes, function (node) {\\n          return node.remove();\\n        });\\n      });\\n      var fragment = parser.parse(html, {\\n        forced_root_block: false,\\n        isRootContent: true\\n      });\\n      return global$8({ validate: editor.settings.validate }, editor.schema).serialize(fragment);\\n    };\\n    var processResult = function (content, cancelled) {\\n      return {\\n        content: content,\\n        cancelled: cancelled\\n      };\\n    };\\n    var postProcessFilter = function (editor, html, internal, isWordHtml) {\\n      var tempBody = editor.dom.create('div', { style: 'display:none' }, html);\\n      var postProcessArgs = Events.firePastePostProcess(editor, tempBody, internal, isWordHtml);\\n      return processResult(postProcessArgs.node.innerHTML, postProcessArgs.isDefaultPrevented());\\n    };\\n    var filterContent = function (editor, content, internal, isWordHtml) {\\n      var preProcessArgs = Events.firePastePreProcess(editor, content, internal, isWordHtml);\\n      var filteredContent = preProcess$1(editor, preProcessArgs.content);\\n      if (editor.hasEventListeners('PastePostProcess') && !preProcessArgs.isDefaultPrevented()) {\\n        return postProcessFilter(editor, filteredContent, internal, isWordHtml);\\n      } else {\\n        return processResult(filteredContent, preProcessArgs.isDefaultPrevented());\\n      }\\n    };\\n    var process = function (editor, html, internal) {\\n      var isWordHtml = WordFilter.isWordContent(html);\\n      var content = isWordHtml ? WordFilter.preProcess(editor, html) : html;\\n      return filterContent(editor, content, internal, isWordHtml);\\n    };\\n    var ProcessFilters = { process: process };\\n\\n    var pasteHtml = function (editor, html) {\\n      editor.insertContent(html, {\\n        merge: Settings.shouldMergeFormats(editor),\\n        paste: true\\n      });\\n      return true;\\n    };\\n    var isAbsoluteUrl = function (url) {\\n      return /^https?:\\\\/\\\\/[\\\\w\\\\?\\\\-\\\\/+=.&%@~#]+$/i.test(url);\\n    };\\n    var isImageUrl = function (url) {\\n      return isAbsoluteUrl(url) && /.(gif|jpe?g|png)$/.test(url);\\n    };\\n    var createImage = function (editor, url, pasteHtmlFn) {\\n      editor.undoManager.extra(function () {\\n        pasteHtmlFn(editor, url);\\n      }, function () {\\n        editor.insertContent('<img src=\\\"' + url + '\\\">');\\n      });\\n      return true;\\n    };\\n    var createLink = function (editor, url, pasteHtmlFn) {\\n      editor.undoManager.extra(function () {\\n        pasteHtmlFn(editor, url);\\n      }, function () {\\n        editor.execCommand('mceInsertLink', false, url);\\n      });\\n      return true;\\n    };\\n    var linkSelection = function (editor, html, pasteHtmlFn) {\\n      return editor.selection.isCollapsed() === false && isAbsoluteUrl(html) ? createLink(editor, html, pasteHtmlFn) : false;\\n    };\\n    var insertImage = function (editor, html, pasteHtmlFn) {\\n      return isImageUrl(html) ? createImage(editor, html, pasteHtmlFn) : false;\\n    };\\n    var smartInsertContent = function (editor, html) {\\n      global$4.each([\\n        linkSelection,\\n        insertImage,\\n        pasteHtml\\n      ], function (action) {\\n        return action(editor, html, pasteHtml) !== true;\\n      });\\n    };\\n    var insertContent = function (editor, html) {\\n      if (Settings.isSmartPasteEnabled(editor) === false) {\\n        pasteHtml(editor, html);\\n      } else {\\n        smartInsertContent(editor, html);\\n      }\\n    };\\n    var SmartPaste = {\\n      isImageUrl: isImageUrl,\\n      isAbsoluteUrl: isAbsoluteUrl,\\n      insertContent: insertContent\\n    };\\n\\n    var noop = function () {\\n    };\\n    var constant = function (value) {\\n      return function () {\\n        return value;\\n      };\\n    };\\n    function curry(fn) {\\n      var initialArgs = [];\\n      for (var _i = 1; _i < arguments.length; _i++) {\\n        initialArgs[_i - 1] = arguments[_i];\\n      }\\n      return function () {\\n        var restArgs = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n          restArgs[_i] = arguments[_i];\\n        }\\n        var all = initialArgs.concat(restArgs);\\n        return fn.apply(null, all);\\n      };\\n    }\\n    var never = constant(false);\\n    var always = constant(true);\\n\\n    var none = function () {\\n      return NONE;\\n    };\\n    var NONE = function () {\\n      var eq = function (o) {\\n        return o.isNone();\\n      };\\n      var call = function (thunk) {\\n        return thunk();\\n      };\\n      var id = function (n) {\\n        return n;\\n      };\\n      var me = {\\n        fold: function (n, s) {\\n          return n();\\n        },\\n        is: never,\\n        isSome: never,\\n        isNone: always,\\n        getOr: id,\\n        getOrThunk: call,\\n        getOrDie: function (msg) {\\n          throw new Error(msg || 'error: getOrDie called on none.');\\n        },\\n        getOrNull: constant(null),\\n        getOrUndefined: constant(undefined),\\n        or: id,\\n        orThunk: call,\\n        map: none,\\n        each: noop,\\n        bind: none,\\n        exists: never,\\n        forall: always,\\n        filter: none,\\n        equals: eq,\\n        equals_: eq,\\n        toArray: function () {\\n          return [];\\n        },\\n        toString: constant('none()')\\n      };\\n      if (Object.freeze) {\\n        Object.freeze(me);\\n      }\\n      return me;\\n    }();\\n    var some = function (a) {\\n      var constant_a = constant(a);\\n      var self = function () {\\n        return me;\\n      };\\n      var bind = function (f) {\\n        return f(a);\\n      };\\n      var me = {\\n        fold: function (n, s) {\\n          return s(a);\\n        },\\n        is: function (v) {\\n          return a === v;\\n        },\\n        isSome: always,\\n        isNone: never,\\n        getOr: constant_a,\\n        getOrThunk: constant_a,\\n        getOrDie: constant_a,\\n        getOrNull: constant_a,\\n        getOrUndefined: constant_a,\\n        or: self,\\n        orThunk: self,\\n        map: function (f) {\\n          return some(f(a));\\n        },\\n        each: function (f) {\\n          f(a);\\n        },\\n        bind: bind,\\n        exists: bind,\\n        forall: bind,\\n        filter: function (f) {\\n          return f(a) ? me : NONE;\\n        },\\n        toArray: function () {\\n          return [a];\\n        },\\n        toString: function () {\\n          return 'some(' + a + ')';\\n        },\\n        equals: function (o) {\\n          return o.is(a);\\n        },\\n        equals_: function (o, elementEq) {\\n          return o.fold(never, function (b) {\\n            return elementEq(a, b);\\n          });\\n        }\\n      };\\n      return me;\\n    };\\n    var from = function (value) {\\n      return value === null || value === undefined ? NONE : some(value);\\n    };\\n    var Option = {\\n      some: some,\\n      none: none,\\n      from: from\\n    };\\n\\n    var typeOf = function (x) {\\n      if (x === null) {\\n        return 'null';\\n      }\\n      var t = typeof x;\\n      if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\\n        return 'array';\\n      }\\n      if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\\n        return 'string';\\n      }\\n      return t;\\n    };\\n    var isType = function (type) {\\n      return function (value) {\\n        return typeOf(value) === type;\\n      };\\n    };\\n    var isFunction = isType('function');\\n\\n    var nativeSlice = Array.prototype.slice;\\n    var map = function (xs, f) {\\n      var len = xs.length;\\n      var r = new Array(len);\\n      for (var i = 0; i < len; i++) {\\n        var x = xs[i];\\n        r[i] = f(x, i);\\n      }\\n      return r;\\n    };\\n    var each = function (xs, f) {\\n      for (var i = 0, len = xs.length; i < len; i++) {\\n        var x = xs[i];\\n        f(x, i);\\n      }\\n    };\\n    var filter$1 = function (xs, pred) {\\n      var r = [];\\n      for (var i = 0, len = xs.length; i < len; i++) {\\n        var x = xs[i];\\n        if (pred(x, i)) {\\n          r.push(x);\\n        }\\n      }\\n      return r;\\n    };\\n    var from$1 = isFunction(Array.from) ? Array.from : function (x) {\\n      return nativeSlice.call(x);\\n    };\\n\\n    var exports$1 = {}, module = { exports: exports$1 };\\n    (function (define, exports, module, require) {\\n      (function (f) {\\n        if (typeof exports === 'object' && typeof module !== 'undefined') {\\n          module.exports = f();\\n        } else if (typeof define === 'function' && define.amd) {\\n          define([], f);\\n        } else {\\n          var g;\\n          if (typeof window !== 'undefined') {\\n            g = window;\\n          } else if (typeof global !== 'undefined') {\\n            g = global;\\n          } else if (typeof self !== 'undefined') {\\n            g = self;\\n          } else {\\n            g = this;\\n          }\\n          g.EphoxContactWrapper = f();\\n        }\\n      }(function () {\\n        return function () {\\n          function r(e, n, t) {\\n            function o(i, f) {\\n              if (!n[i]) {\\n                if (!e[i]) {\\n                  var c = 'function' == typeof require && require;\\n                  if (!f && c)\\n                    return c(i, !0);\\n                  if (u)\\n                    return u(i, !0);\\n                  var a = new Error('Cannot find module \\\\'' + i + '\\\\'');\\n                  throw a.code = 'MODULE_NOT_FOUND', a;\\n                }\\n                var p = n[i] = { exports: {} };\\n                e[i][0].call(p.exports, function (r) {\\n                  var n = e[i][1][r];\\n                  return o(n || r);\\n                }, p, p.exports, r, e, n, t);\\n              }\\n              return n[i].exports;\\n            }\\n            for (var u = 'function' == typeof require && require, i = 0; i < t.length; i++)\\n              o(t[i]);\\n            return o;\\n          }\\n          return r;\\n        }()({\\n          1: [\\n            function (require, module, exports) {\\n              var process = module.exports = {};\\n              var cachedSetTimeout;\\n              var cachedClearTimeout;\\n              function defaultSetTimout() {\\n                throw new Error('setTimeout has not been defined');\\n              }\\n              function defaultClearTimeout() {\\n                throw new Error('clearTimeout has not been defined');\\n              }\\n              (function () {\\n                try {\\n                  if (typeof setTimeout === 'function') {\\n                    cachedSetTimeout = setTimeout;\\n                  } else {\\n                    cachedSetTimeout = defaultSetTimout;\\n                  }\\n                } catch (e) {\\n                  cachedSetTimeout = defaultSetTimout;\\n                }\\n                try {\\n                  if (typeof clearTimeout === 'function') {\\n                    cachedClearTimeout = clearTimeout;\\n                  } else {\\n                    cachedClearTimeout = defaultClearTimeout;\\n                  }\\n                } catch (e) {\\n                  cachedClearTimeout = defaultClearTimeout;\\n                }\\n              }());\\n              function runTimeout(fun) {\\n                if (cachedSetTimeout === setTimeout) {\\n                  return setTimeout(fun, 0);\\n                }\\n                if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\\n                  cachedSetTimeout = setTimeout;\\n                  return setTimeout(fun, 0);\\n                }\\n                try {\\n                  return cachedSetTimeout(fun, 0);\\n                } catch (e) {\\n                  try {\\n                    return cachedSetTimeout.call(null, fun, 0);\\n                  } catch (e) {\\n                    return cachedSetTimeout.call(this, fun, 0);\\n                  }\\n                }\\n              }\\n              function runClearTimeout(marker) {\\n                if (cachedClearTimeout === clearTimeout) {\\n                  return clearTimeout(marker);\\n                }\\n                if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\\n                  cachedClearTimeout = clearTimeout;\\n                  return clearTimeout(marker);\\n                }\\n                try {\\n                  return cachedClearTimeout(marker);\\n                } catch (e) {\\n                  try {\\n                    return cachedClearTimeout.call(null, marker);\\n                  } catch (e) {\\n                    return cachedClearTimeout.call(this, marker);\\n                  }\\n                }\\n              }\\n              var queue = [];\\n              var draining = false;\\n              var currentQueue;\\n              var queueIndex = -1;\\n              function cleanUpNextTick() {\\n                if (!draining || !currentQueue) {\\n                  return;\\n                }\\n                draining = false;\\n                if (currentQueue.length) {\\n                  queue = currentQueue.concat(queue);\\n                } else {\\n                  queueIndex = -1;\\n                }\\n                if (queue.length) {\\n                  drainQueue();\\n                }\\n              }\\n              function drainQueue() {\\n                if (draining) {\\n                  return;\\n                }\\n                var timeout = runTimeout(cleanUpNextTick);\\n                draining = true;\\n                var len = queue.length;\\n                while (len) {\\n                  currentQueue = queue;\\n                  queue = [];\\n                  while (++queueIndex < len) {\\n                    if (currentQueue) {\\n                      currentQueue[queueIndex].run();\\n                    }\\n                  }\\n                  queueIndex = -1;\\n                  len = queue.length;\\n                }\\n                currentQueue = null;\\n                draining = false;\\n                runClearTimeout(timeout);\\n              }\\n              process.nextTick = function (fun) {\\n                var args = new Array(arguments.length - 1);\\n                if (arguments.length > 1) {\\n                  for (var i = 1; i < arguments.length; i++) {\\n                    args[i - 1] = arguments[i];\\n                  }\\n                }\\n                queue.push(new Item(fun, args));\\n                if (queue.length === 1 && !draining) {\\n                  runTimeout(drainQueue);\\n                }\\n              };\\n              function Item(fun, array) {\\n                this.fun = fun;\\n                this.array = array;\\n              }\\n              Item.prototype.run = function () {\\n                this.fun.apply(null, this.array);\\n              };\\n              process.title = 'browser';\\n              process.browser = true;\\n              process.env = {};\\n              process.argv = [];\\n              process.version = '';\\n              process.versions = {};\\n              function noop() {\\n              }\\n              process.on = noop;\\n              process.addListener = noop;\\n              process.once = noop;\\n              process.off = noop;\\n              process.removeListener = noop;\\n              process.removeAllListeners = noop;\\n              process.emit = noop;\\n              process.prependListener = noop;\\n              process.prependOnceListener = noop;\\n              process.listeners = function (name) {\\n                return [];\\n              };\\n              process.binding = function (name) {\\n                throw new Error('process.binding is not supported');\\n              };\\n              process.cwd = function () {\\n                return '/';\\n              };\\n              process.chdir = function (dir) {\\n                throw new Error('process.chdir is not supported');\\n              };\\n              process.umask = function () {\\n                return 0;\\n              };\\n            },\\n            {}\\n          ],\\n          2: [\\n            function (require, module, exports) {\\n              (function (setImmediate) {\\n                (function (root) {\\n                  var setTimeoutFunc = setTimeout;\\n                  function noop() {\\n                  }\\n                  function bind(fn, thisArg) {\\n                    return function () {\\n                      fn.apply(thisArg, arguments);\\n                    };\\n                  }\\n                  function Promise(fn) {\\n                    if (typeof this !== 'object')\\n                      throw new TypeError('Promises must be constructed via new');\\n                    if (typeof fn !== 'function')\\n                      throw new TypeError('not a function');\\n                    this._state = 0;\\n                    this._handled = false;\\n                    this._value = undefined;\\n                    this._deferreds = [];\\n                    doResolve(fn, this);\\n                  }\\n                  function handle(self, deferred) {\\n                    while (self._state === 3) {\\n                      self = self._value;\\n                    }\\n                    if (self._state === 0) {\\n                      self._deferreds.push(deferred);\\n                      return;\\n                    }\\n                    self._handled = true;\\n                    Promise._immediateFn(function () {\\n                      var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\\n                      if (cb === null) {\\n                        (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\\n                        return;\\n                      }\\n                      var ret;\\n                      try {\\n                        ret = cb(self._value);\\n                      } catch (e) {\\n                        reject(deferred.promise, e);\\n                        return;\\n                      }\\n                      resolve(deferred.promise, ret);\\n                    });\\n                  }\\n                  function resolve(self, newValue) {\\n                    try {\\n                      if (newValue === self)\\n                        throw new TypeError('A promise cannot be resolved with itself.');\\n                      if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\\n                        var then = newValue.then;\\n                        if (newValue instanceof Promise) {\\n                          self._state = 3;\\n                          self._value = newValue;\\n                          finale(self);\\n                          return;\\n                        } else if (typeof then === 'function') {\\n                          doResolve(bind(then, newValue), self);\\n                          return;\\n                        }\\n                      }\\n                      self._state = 1;\\n                      self._value = newValue;\\n                      finale(self);\\n                    } catch (e) {\\n                      reject(self, e);\\n                    }\\n                  }\\n                  function reject(self, newValue) {\\n                    self._state = 2;\\n                    self._value = newValue;\\n                    finale(self);\\n                  }\\n                  function finale(self) {\\n                    if (self._state === 2 && self._deferreds.length === 0) {\\n                      Promise._immediateFn(function () {\\n                        if (!self._handled) {\\n                          Promise._unhandledRejectionFn(self._value);\\n                        }\\n                      });\\n                    }\\n                    for (var i = 0, len = self._deferreds.length; i < len; i++) {\\n                      handle(self, self._deferreds[i]);\\n                    }\\n                    self._deferreds = null;\\n                  }\\n                  function Handler(onFulfilled, onRejected, promise) {\\n                    this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\\n                    this.onRejected = typeof onRejected === 'function' ? onRejected : null;\\n                    this.promise = promise;\\n                  }\\n                  function doResolve(fn, self) {\\n                    var done = false;\\n                    try {\\n                      fn(function (value) {\\n                        if (done)\\n                          return;\\n                        done = true;\\n                        resolve(self, value);\\n                      }, function (reason) {\\n                        if (done)\\n                          return;\\n                        done = true;\\n                        reject(self, reason);\\n                      });\\n                    } catch (ex) {\\n                      if (done)\\n                        return;\\n                      done = true;\\n                      reject(self, ex);\\n                    }\\n                  }\\n                  Promise.prototype['catch'] = function (onRejected) {\\n                    return this.then(null, onRejected);\\n                  };\\n                  Promise.prototype.then = function (onFulfilled, onRejected) {\\n                    var prom = new this.constructor(noop);\\n                    handle(this, new Handler(onFulfilled, onRejected, prom));\\n                    return prom;\\n                  };\\n                  Promise.all = function (arr) {\\n                    var args = Array.prototype.slice.call(arr);\\n                    return new Promise(function (resolve, reject) {\\n                      if (args.length === 0)\\n                        return resolve([]);\\n                      var remaining = args.length;\\n                      function res(i, val) {\\n                        try {\\n                          if (val && (typeof val === 'object' || typeof val === 'function')) {\\n                            var then = val.then;\\n                            if (typeof then === 'function') {\\n                              then.call(val, function (val) {\\n                                res(i, val);\\n                              }, reject);\\n                              return;\\n                            }\\n                          }\\n                          args[i] = val;\\n                          if (--remaining === 0) {\\n                            resolve(args);\\n                          }\\n                        } catch (ex) {\\n                          reject(ex);\\n                        }\\n                      }\\n                      for (var i = 0; i < args.length; i++) {\\n                        res(i, args[i]);\\n                      }\\n                    });\\n                  };\\n                  Promise.resolve = function (value) {\\n                    if (value && typeof value === 'object' && value.constructor === Promise) {\\n                      return value;\\n                    }\\n                    return new Promise(function (resolve) {\\n                      resolve(value);\\n                    });\\n                  };\\n                  Promise.reject = function (value) {\\n                    return new Promise(function (resolve, reject) {\\n                      reject(value);\\n                    });\\n                  };\\n                  Promise.race = function (values) {\\n                    return new Promise(function (resolve, reject) {\\n                      for (var i = 0, len = values.length; i < len; i++) {\\n                        values[i].then(resolve, reject);\\n                      }\\n                    });\\n                  };\\n                  Promise._immediateFn = typeof setImmediate === 'function' ? function (fn) {\\n                    setImmediate(fn);\\n                  } : function (fn) {\\n                    setTimeoutFunc(fn, 0);\\n                  };\\n                  Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\\n                    if (typeof console !== 'undefined' && console) {\\n                      console.warn('Possible Unhandled Promise Rejection:', err);\\n                    }\\n                  };\\n                  Promise._setImmediateFn = function _setImmediateFn(fn) {\\n                    Promise._immediateFn = fn;\\n                  };\\n                  Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) {\\n                    Promise._unhandledRejectionFn = fn;\\n                  };\\n                  if (typeof module !== 'undefined' && module.exports) {\\n                    module.exports = Promise;\\n                  } else if (!root.Promise) {\\n                    root.Promise = Promise;\\n                  }\\n                }(this));\\n              }.call(this, require('timers').setImmediate));\\n            },\\n            { 'timers': 3 }\\n          ],\\n          3: [\\n            function (require, module, exports) {\\n              (function (setImmediate, clearImmediate) {\\n                var nextTick = require('process/browser.js').nextTick;\\n                var apply = Function.prototype.apply;\\n                var slice = Array.prototype.slice;\\n                var immediateIds = {};\\n                var nextImmediateId = 0;\\n                exports.setTimeout = function () {\\n                  return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\\n                };\\n                exports.setInterval = function () {\\n                  return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\\n                };\\n                exports.clearTimeout = exports.clearInterval = function (timeout) {\\n                  timeout.close();\\n                };\\n                function Timeout(id, clearFn) {\\n                  this._id = id;\\n                  this._clearFn = clearFn;\\n                }\\n                Timeout.prototype.unref = Timeout.prototype.ref = function () {\\n                };\\n                Timeout.prototype.close = function () {\\n                  this._clearFn.call(window, this._id);\\n                };\\n                exports.enroll = function (item, msecs) {\\n                  clearTimeout(item._idleTimeoutId);\\n                  item._idleTimeout = msecs;\\n                };\\n                exports.unenroll = function (item) {\\n                  clearTimeout(item._idleTimeoutId);\\n                  item._idleTimeout = -1;\\n                };\\n                exports._unrefActive = exports.active = function (item) {\\n                  clearTimeout(item._idleTimeoutId);\\n                  var msecs = item._idleTimeout;\\n                  if (msecs >= 0) {\\n                    item._idleTimeoutId = setTimeout(function onTimeout() {\\n                      if (item._onTimeout)\\n                        item._onTimeout();\\n                    }, msecs);\\n                  }\\n                };\\n                exports.setImmediate = typeof setImmediate === 'function' ? setImmediate : function (fn) {\\n                  var id = nextImmediateId++;\\n                  var args = arguments.length < 2 ? false : slice.call(arguments, 1);\\n                  immediateIds[id] = true;\\n                  nextTick(function onNextTick() {\\n                    if (immediateIds[id]) {\\n                      if (args) {\\n                        fn.apply(null, args);\\n                      } else {\\n                        fn.call(null);\\n                      }\\n                      exports.clearImmediate(id);\\n                    }\\n                  });\\n                  return id;\\n                };\\n                exports.clearImmediate = typeof clearImmediate === 'function' ? clearImmediate : function (id) {\\n                  delete immediateIds[id];\\n                };\\n              }.call(this, require('timers').setImmediate, require('timers').clearImmediate));\\n            },\\n            {\\n              'process/browser.js': 1,\\n              'timers': 3\\n            }\\n          ],\\n          4: [\\n            function (require, module, exports) {\\n              var promisePolyfill = require('promise-polyfill');\\n              var Global = function () {\\n                if (typeof window !== 'undefined') {\\n                  return window;\\n                } else {\\n                  return Function('return this;')();\\n                }\\n              }();\\n              module.exports = { boltExport: Global.Promise || promisePolyfill };\\n            },\\n            { 'promise-polyfill': 2 }\\n          ]\\n        }, {}, [4])(4);\\n      }));\\n    }(undefined, exports$1, module, undefined));\\n    var Promise = module.exports.boltExport;\\n\\n    var nu = function (baseFn) {\\n      var data = Option.none();\\n      var callbacks = [];\\n      var map = function (f) {\\n        return nu(function (nCallback) {\\n          get(function (data) {\\n            nCallback(f(data));\\n          });\\n        });\\n      };\\n      var get = function (nCallback) {\\n        if (isReady()) {\\n          call(nCallback);\\n        } else {\\n          callbacks.push(nCallback);\\n        }\\n      };\\n      var set = function (x) {\\n        data = Option.some(x);\\n        run(callbacks);\\n        callbacks = [];\\n      };\\n      var isReady = function () {\\n        return data.isSome();\\n      };\\n      var run = function (cbs) {\\n        each(cbs, call);\\n      };\\n      var call = function (cb) {\\n        data.each(function (x) {\\n          domGlobals.setTimeout(function () {\\n            cb(x);\\n          }, 0);\\n        });\\n      };\\n      baseFn(set);\\n      return {\\n        get: get,\\n        map: map,\\n        isReady: isReady\\n      };\\n    };\\n    var pure = function (a) {\\n      return nu(function (callback) {\\n        callback(a);\\n      });\\n    };\\n    var LazyValue = {\\n      nu: nu,\\n      pure: pure\\n    };\\n\\n    var errorReporter = function (err) {\\n      domGlobals.setTimeout(function () {\\n        throw err;\\n      }, 0);\\n    };\\n    var make = function (run) {\\n      var get = function (callback) {\\n        run().then(callback, errorReporter);\\n      };\\n      var map = function (fab) {\\n        return make(function () {\\n          return run().then(fab);\\n        });\\n      };\\n      var bind = function (aFutureB) {\\n        return make(function () {\\n          return run().then(function (v) {\\n            return aFutureB(v).toPromise();\\n          });\\n        });\\n      };\\n      var anonBind = function (futureB) {\\n        return make(function () {\\n          return run().then(function () {\\n            return futureB.toPromise();\\n          });\\n        });\\n      };\\n      var toLazy = function () {\\n        return LazyValue.nu(get);\\n      };\\n      var toCached = function () {\\n        var cache = null;\\n        return make(function () {\\n          if (cache === null) {\\n            cache = run();\\n          }\\n          return cache;\\n        });\\n      };\\n      var toPromise = run;\\n      return {\\n        map: map,\\n        bind: bind,\\n        anonBind: anonBind,\\n        toLazy: toLazy,\\n        toCached: toCached,\\n        toPromise: toPromise,\\n        get: get\\n      };\\n    };\\n    var nu$1 = function (baseFn) {\\n      return make(function () {\\n        return new Promise(baseFn);\\n      });\\n    };\\n    var pure$1 = function (a) {\\n      return make(function () {\\n        return Promise.resolve(a);\\n      });\\n    };\\n    var Future = {\\n      nu: nu$1,\\n      pure: pure$1\\n    };\\n\\n    var par = function (asyncValues, nu) {\\n      return nu(function (callback) {\\n        var r = [];\\n        var count = 0;\\n        var cb = function (i) {\\n          return function (value) {\\n            r[i] = value;\\n            count++;\\n            if (count >= asyncValues.length) {\\n              callback(r);\\n            }\\n          };\\n        };\\n        if (asyncValues.length === 0) {\\n          callback([]);\\n        } else {\\n          each(asyncValues, function (asyncValue, i) {\\n            asyncValue.get(cb(i));\\n          });\\n        }\\n      });\\n    };\\n\\n    var par$1 = function (futures) {\\n      return par(futures, Future.nu);\\n    };\\n    var traverse = function (array, fn) {\\n      return par$1(map(array, fn));\\n    };\\n    var mapM = traverse;\\n\\n    var value = function () {\\n      var subject = Cell(Option.none());\\n      var clear = function () {\\n        subject.set(Option.none());\\n      };\\n      var set = function (s) {\\n        subject.set(Option.some(s));\\n      };\\n      var on = function (f) {\\n        subject.get().each(f);\\n      };\\n      var isSet = function () {\\n        return subject.get().isSome();\\n      };\\n      return {\\n        clear: clear,\\n        set: set,\\n        isSet: isSet,\\n        on: on\\n      };\\n    };\\n\\n    var pasteHtml$1 = function (editor, html, internalFlag) {\\n      var internal = internalFlag ? internalFlag : InternalHtml.isMarked(html);\\n      var args = ProcessFilters.process(editor, InternalHtml.unmark(html), internal);\\n      if (args.cancelled === false) {\\n        SmartPaste.insertContent(editor, args.content);\\n      }\\n    };\\n    var pasteText = function (editor, text) {\\n      text = editor.dom.encode(text).replace(/\\\\r\\\\n/g, '\\\\n');\\n      text = Newlines.convert(text, editor.settings.forced_root_block, editor.settings.forced_root_block_attrs);\\n      pasteHtml$1(editor, text, false);\\n    };\\n    var getDataTransferItems = function (dataTransfer) {\\n      var items = {};\\n      var mceInternalUrlPrefix = 'data:text/mce-internal,';\\n      if (dataTransfer) {\\n        if (dataTransfer.getData) {\\n          var legacyText = dataTransfer.getData('Text');\\n          if (legacyText && legacyText.length > 0) {\\n            if (legacyText.indexOf(mceInternalUrlPrefix) === -1) {\\n              items['text/plain'] = legacyText;\\n            }\\n          }\\n        }\\n        if (dataTransfer.types) {\\n          for (var i = 0; i < dataTransfer.types.length; i++) {\\n            var contentType = dataTransfer.types[i];\\n            try {\\n              items[contentType] = dataTransfer.getData(contentType);\\n            } catch (ex) {\\n              items[contentType] = '';\\n            }\\n          }\\n        }\\n      }\\n      return items;\\n    };\\n    var getClipboardContent = function (editor, clipboardEvent) {\\n      var content = getDataTransferItems(clipboardEvent.clipboardData || editor.getDoc().dataTransfer);\\n      return Utils.isMsEdge() ? global$4.extend(content, { 'text/html': '' }) : content;\\n    };\\n    var hasContentType = function (clipboardContent, mimeType) {\\n      return mimeType in clipboardContent && clipboardContent[mimeType].length > 0;\\n    };\\n    var hasHtmlOrText = function (content) {\\n      return hasContentType(content, 'text/html') || hasContentType(content, 'text/plain');\\n    };\\n    var getBase64FromUri = function (uri) {\\n      var idx;\\n      idx = uri.indexOf(',');\\n      if (idx !== -1) {\\n        return uri.substr(idx + 1);\\n      }\\n      return null;\\n    };\\n    var isValidDataUriImage = function (settings, imgElm) {\\n      return settings.images_dataimg_filter ? settings.images_dataimg_filter(imgElm) : true;\\n    };\\n    var extractFilename = function (editor, str) {\\n      var m = str.match(/([\\\\s\\\\S]+?)\\\\.(?:jpeg|jpg|png|gif)$/i);\\n      return m ? editor.dom.encode(m[1]) : null;\\n    };\\n    var uniqueId = Utils.createIdGenerator('mceclip');\\n    var pasteImage = function (editor, imageItem) {\\n      var base64 = getBase64FromUri(imageItem.uri);\\n      var id = uniqueId();\\n      var name = editor.settings.images_reuse_filename && imageItem.blob.name ? extractFilename(editor, imageItem.blob.name) : id;\\n      var img = new domGlobals.Image();\\n      img.src = imageItem.uri;\\n      if (isValidDataUriImage(editor.settings, img)) {\\n        var blobCache = editor.editorUpload.blobCache;\\n        var blobInfo = void 0, existingBlobInfo = void 0;\\n        existingBlobInfo = blobCache.findFirst(function (cachedBlobInfo) {\\n          return cachedBlobInfo.base64() === base64;\\n        });\\n        if (!existingBlobInfo) {\\n          blobInfo = blobCache.create(id, imageItem.blob, base64, name);\\n          blobCache.add(blobInfo);\\n        } else {\\n          blobInfo = existingBlobInfo;\\n        }\\n        pasteHtml$1(editor, '<img src=\\\"' + blobInfo.blobUri() + '\\\">', false);\\n      } else {\\n        pasteHtml$1(editor, '<img src=\\\"' + imageItem.uri + '\\\">', false);\\n      }\\n    };\\n    var isClipboardEvent = function (event) {\\n      return event.type === 'paste';\\n    };\\n    var readBlobsAsDataUris = function (items) {\\n      return mapM(items, function (item) {\\n        return Future.nu(function (resolve) {\\n          var blob = item.getAsFile ? item.getAsFile() : item;\\n          var reader = new window.FileReader();\\n          reader.onload = function () {\\n            resolve({\\n              blob: blob,\\n              uri: reader.result\\n            });\\n          };\\n          reader.readAsDataURL(blob);\\n        });\\n      });\\n    };\\n    var getImagesFromDataTransfer = function (dataTransfer) {\\n      var items = dataTransfer.items ? map(from$1(dataTransfer.items), function (item) {\\n        return item.getAsFile();\\n      }) : [];\\n      var files = dataTransfer.files ? from$1(dataTransfer.files) : [];\\n      var images = filter$1(items.length > 0 ? items : files, function (file) {\\n        return /^image\\\\/(jpeg|png|gif|bmp)$/.test(file.type);\\n      });\\n      return images;\\n    };\\n    var pasteImageData = function (editor, e, rng) {\\n      var dataTransfer = isClipboardEvent(e) ? e.clipboardData : e.dataTransfer;\\n      if (editor.settings.paste_data_images && dataTransfer) {\\n        var images = getImagesFromDataTransfer(dataTransfer);\\n        if (images.length > 0) {\\n          e.preventDefault();\\n          readBlobsAsDataUris(images).get(function (blobResults) {\\n            if (rng) {\\n              editor.selection.setRng(rng);\\n            }\\n            each(blobResults, function (result) {\\n              pasteImage(editor, result);\\n            });\\n          });\\n          return true;\\n        }\\n      }\\n      return false;\\n    };\\n    var isBrokenAndroidClipboardEvent = function (e) {\\n      var clipboardData = e.clipboardData;\\n      return domGlobals.navigator.userAgent.indexOf('Android') !== -1 && clipboardData && clipboardData.items && clipboardData.items.length === 0;\\n    };\\n    var isKeyboardPasteEvent = function (e) {\\n      return global$5.metaKeyPressed(e) && e.keyCode === 86 || e.shiftKey && e.keyCode === 45;\\n    };\\n    var registerEventHandlers = function (editor, pasteBin, pasteFormat) {\\n      var keyboardPasteEvent = value();\\n      var keyboardPastePlainTextState;\\n      editor.on('keydown', function (e) {\\n        function removePasteBinOnKeyUp(e) {\\n          if (isKeyboardPasteEvent(e) && !e.isDefaultPrevented()) {\\n            pasteBin.remove();\\n          }\\n        }\\n        if (isKeyboardPasteEvent(e) && !e.isDefaultPrevented()) {\\n          keyboardPastePlainTextState = e.shiftKey && e.keyCode === 86;\\n          if (keyboardPastePlainTextState && global$2.webkit && domGlobals.navigator.userAgent.indexOf('Version/') !== -1) {\\n            return;\\n          }\\n          e.stopImmediatePropagation();\\n          keyboardPasteEvent.set(e);\\n          window.setTimeout(function () {\\n            keyboardPasteEvent.clear();\\n          }, 100);\\n          if (global$2.ie && keyboardPastePlainTextState) {\\n            e.preventDefault();\\n            Events.firePaste(editor, true);\\n            return;\\n          }\\n          pasteBin.remove();\\n          pasteBin.create();\\n          editor.once('keyup', removePasteBinOnKeyUp);\\n          editor.once('paste', function () {\\n            editor.off('keyup', removePasteBinOnKeyUp);\\n          });\\n        }\\n      });\\n      function insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode, internal) {\\n        var content, isPlainTextHtml;\\n        if (hasContentType(clipboardContent, 'text/html')) {\\n          content = clipboardContent['text/html'];\\n        } else {\\n          content = pasteBin.getHtml();\\n          internal = internal ? internal : InternalHtml.isMarked(content);\\n          if (pasteBin.isDefaultContent(content)) {\\n            plainTextMode = true;\\n          }\\n        }\\n        content = Utils.trimHtml(content);\\n        pasteBin.remove();\\n        isPlainTextHtml = internal === false && Newlines.isPlainText(content);\\n        if (!content.length || isPlainTextHtml) {\\n          plainTextMode = true;\\n        }\\n        if (plainTextMode) {\\n          if (hasContentType(clipboardContent, 'text/plain') && isPlainTextHtml) {\\n            content = clipboardContent['text/plain'];\\n          } else {\\n            content = Utils.innerText(content);\\n          }\\n        }\\n        if (pasteBin.isDefaultContent(content)) {\\n          if (!isKeyBoardPaste) {\\n            editor.windowManager.alert('Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents.');\\n          }\\n          return;\\n        }\\n        if (plainTextMode) {\\n          pasteText(editor, content);\\n        } else {\\n          pasteHtml$1(editor, content, internal);\\n        }\\n      }\\n      var getLastRng = function () {\\n        return pasteBin.getLastRng() || editor.selection.getRng();\\n      };\\n      editor.on('paste', function (e) {\\n        var isKeyBoardPaste = keyboardPasteEvent.isSet();\\n        var clipboardContent = getClipboardContent(editor, e);\\n        var plainTextMode = pasteFormat.get() === 'text' || keyboardPastePlainTextState;\\n        var internal = hasContentType(clipboardContent, InternalHtml.internalHtmlMime());\\n        keyboardPastePlainTextState = false;\\n        if (e.isDefaultPrevented() || isBrokenAndroidClipboardEvent(e)) {\\n          pasteBin.remove();\\n          return;\\n        }\\n        if (!hasHtmlOrText(clipboardContent) && pasteImageData(editor, e, getLastRng())) {\\n          pasteBin.remove();\\n          return;\\n        }\\n        if (!isKeyBoardPaste) {\\n          e.preventDefault();\\n        }\\n        if (global$2.ie && (!isKeyBoardPaste || e.ieFake) && !hasContentType(clipboardContent, 'text/html')) {\\n          pasteBin.create();\\n          editor.dom.bind(pasteBin.getEl(), 'paste', function (e) {\\n            e.stopPropagation();\\n          });\\n          editor.getDoc().execCommand('Paste', false, null);\\n          clipboardContent['text/html'] = pasteBin.getHtml();\\n        }\\n        if (hasContentType(clipboardContent, 'text/html')) {\\n          e.preventDefault();\\n          if (!internal) {\\n            internal = InternalHtml.isMarked(clipboardContent['text/html']);\\n          }\\n          insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode, internal);\\n        } else {\\n          global$3.setEditorTimeout(editor, function () {\\n            insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode, internal);\\n          }, 0);\\n        }\\n      });\\n    };\\n    var registerEventsAndFilters = function (editor, pasteBin, pasteFormat) {\\n      registerEventHandlers(editor, pasteBin, pasteFormat);\\n      var src;\\n      editor.parser.addNodeFilter('img', function (nodes, name, args) {\\n        var isPasteInsert = function (args) {\\n          return args.data && args.data.paste === true;\\n        };\\n        var remove = function (node) {\\n          if (!node.attr('data-mce-object') && src !== global$2.transparentSrc) {\\n            node.remove();\\n          }\\n        };\\n        var isWebKitFakeUrl = function (src) {\\n          return src.indexOf('webkit-fake-url') === 0;\\n        };\\n        var isDataUri = function (src) {\\n          return src.indexOf('data:') === 0;\\n        };\\n        if (!editor.settings.paste_data_images && isPasteInsert(args)) {\\n          var i = nodes.length;\\n          while (i--) {\\n            src = nodes[i].attributes.map.src;\\n            if (!src) {\\n              continue;\\n            }\\n            if (isWebKitFakeUrl(src)) {\\n              remove(nodes[i]);\\n            } else if (!editor.settings.allow_html_data_urls && isDataUri(src)) {\\n              remove(nodes[i]);\\n            }\\n          }\\n        }\\n      });\\n    };\\n\\n    var getPasteBinParent = function (editor) {\\n      return global$2.ie && editor.inline ? domGlobals.document.body : editor.getBody();\\n    };\\n    var isExternalPasteBin = function (editor) {\\n      return getPasteBinParent(editor) !== editor.getBody();\\n    };\\n    var delegatePasteEvents = function (editor, pasteBinElm, pasteBinDefaultContent) {\\n      if (isExternalPasteBin(editor)) {\\n        editor.dom.bind(pasteBinElm, 'paste keyup', function (e) {\\n          if (!isDefault(editor, pasteBinDefaultContent)) {\\n            editor.fire('paste');\\n          }\\n        });\\n      }\\n    };\\n    var create = function (editor, lastRngCell, pasteBinDefaultContent) {\\n      var dom = editor.dom, body = editor.getBody();\\n      var pasteBinElm;\\n      lastRngCell.set(editor.selection.getRng());\\n      pasteBinElm = editor.dom.add(getPasteBinParent(editor), 'div', {\\n        'id': 'mcepastebin',\\n        'class': 'mce-pastebin',\\n        'contentEditable': true,\\n        'data-mce-bogus': 'all',\\n        'style': 'position: fixed; top: 50%; width: 10px; height: 10px; overflow: hidden; opacity: 0'\\n      }, pasteBinDefaultContent);\\n      if (global$2.ie || global$2.gecko) {\\n        dom.setStyle(pasteBinElm, 'left', dom.getStyle(body, 'direction', true) === 'rtl' ? 65535 : -65535);\\n      }\\n      dom.bind(pasteBinElm, 'beforedeactivate focusin focusout', function (e) {\\n        e.stopPropagation();\\n      });\\n      delegatePasteEvents(editor, pasteBinElm, pasteBinDefaultContent);\\n      pasteBinElm.focus();\\n      editor.selection.select(pasteBinElm, true);\\n    };\\n    var remove = function (editor, lastRngCell) {\\n      if (getEl(editor)) {\\n        var pasteBinClone = void 0;\\n        var lastRng = lastRngCell.get();\\n        while (pasteBinClone = editor.dom.get('mcepastebin')) {\\n          editor.dom.remove(pasteBinClone);\\n          editor.dom.unbind(pasteBinClone);\\n        }\\n        if (lastRng) {\\n          editor.selection.setRng(lastRng);\\n        }\\n      }\\n      lastRngCell.set(null);\\n    };\\n    var getEl = function (editor) {\\n      return editor.dom.get('mcepastebin');\\n    };\\n    var getHtml = function (editor) {\\n      var pasteBinElm, pasteBinClones, i, dirtyWrappers, cleanWrapper;\\n      var copyAndRemove = function (toElm, fromElm) {\\n        toElm.appendChild(fromElm);\\n        editor.dom.remove(fromElm, true);\\n      };\\n      pasteBinClones = global$4.grep(getPasteBinParent(editor).childNodes, function (elm) {\\n        return elm.id === 'mcepastebin';\\n      });\\n      pasteBinElm = pasteBinClones.shift();\\n      global$4.each(pasteBinClones, function (pasteBinClone) {\\n        copyAndRemove(pasteBinElm, pasteBinClone);\\n      });\\n      dirtyWrappers = editor.dom.select('div[id=mcepastebin]', pasteBinElm);\\n      for (i = dirtyWrappers.length - 1; i >= 0; i--) {\\n        cleanWrapper = editor.dom.create('div');\\n        pasteBinElm.insertBefore(cleanWrapper, dirtyWrappers[i]);\\n        copyAndRemove(cleanWrapper, dirtyWrappers[i]);\\n      }\\n      return pasteBinElm ? pasteBinElm.innerHTML : '';\\n    };\\n    var getLastRng = function (lastRng) {\\n      return lastRng.get();\\n    };\\n    var isDefaultContent = function (pasteBinDefaultContent, content) {\\n      return content === pasteBinDefaultContent;\\n    };\\n    var isPasteBin = function (elm) {\\n      return elm && elm.id === 'mcepastebin';\\n    };\\n    var isDefault = function (editor, pasteBinDefaultContent) {\\n      var pasteBinElm = getEl(editor);\\n      return isPasteBin(pasteBinElm) && isDefaultContent(pasteBinDefaultContent, pasteBinElm.innerHTML);\\n    };\\n    var PasteBin = function (editor) {\\n      var lastRng = Cell(null);\\n      var pasteBinDefaultContent = '%MCEPASTEBIN%';\\n      return {\\n        create: function () {\\n          return create(editor, lastRng, pasteBinDefaultContent);\\n        },\\n        remove: function () {\\n          return remove(editor, lastRng);\\n        },\\n        getEl: function () {\\n          return getEl(editor);\\n        },\\n        getHtml: function () {\\n          return getHtml(editor);\\n        },\\n        getLastRng: function () {\\n          return getLastRng(lastRng);\\n        },\\n        isDefault: function () {\\n          return isDefault(editor, pasteBinDefaultContent);\\n        },\\n        isDefaultContent: function (content) {\\n          return isDefaultContent(pasteBinDefaultContent, content);\\n        }\\n      };\\n    };\\n\\n    var Clipboard = function (editor, pasteFormat) {\\n      var pasteBin = PasteBin(editor);\\n      editor.on('preInit', function () {\\n        return registerEventsAndFilters(editor, pasteBin, pasteFormat);\\n      });\\n      return {\\n        pasteFormat: pasteFormat,\\n        pasteHtml: function (html, internalFlag) {\\n          return pasteHtml$1(editor, html, internalFlag);\\n        },\\n        pasteText: function (text) {\\n          return pasteText(editor, text);\\n        },\\n        pasteImageData: function (e, rng) {\\n          return pasteImageData(editor, e, rng);\\n        },\\n        getDataTransferItems: getDataTransferItems,\\n        hasHtmlOrText: hasHtmlOrText,\\n        hasContentType: hasContentType\\n      };\\n    };\\n\\n    var noop$1 = function () {\\n    };\\n    var hasWorkingClipboardApi = function (clipboardData) {\\n      return global$2.iOS === false && clipboardData !== undefined && typeof clipboardData.setData === 'function' && Utils.isMsEdge() !== true;\\n    };\\n    var setHtml5Clipboard = function (clipboardData, html, text) {\\n      if (hasWorkingClipboardApi(clipboardData)) {\\n        try {\\n          clipboardData.clearData();\\n          clipboardData.setData('text/html', html);\\n          clipboardData.setData('text/plain', text);\\n          clipboardData.setData(InternalHtml.internalHtmlMime(), html);\\n          return true;\\n        } catch (e) {\\n          return false;\\n        }\\n      } else {\\n        return false;\\n      }\\n    };\\n    var setClipboardData = function (evt, data, fallback, done) {\\n      if (setHtml5Clipboard(evt.clipboardData, data.html, data.text)) {\\n        evt.preventDefault();\\n        done();\\n      } else {\\n        fallback(data.html, done);\\n      }\\n    };\\n    var fallback = function (editor) {\\n      return function (html, done) {\\n        var markedHtml = InternalHtml.mark(html);\\n        var outer = editor.dom.create('div', {\\n          'contenteditable': 'false',\\n          'data-mce-bogus': 'all'\\n        });\\n        var inner = editor.dom.create('div', { contenteditable: 'true' }, markedHtml);\\n        editor.dom.setStyles(outer, {\\n          position: 'fixed',\\n          top: '0',\\n          left: '-3000px',\\n          width: '1000px',\\n          overflow: 'hidden'\\n        });\\n        outer.appendChild(inner);\\n        editor.dom.add(editor.getBody(), outer);\\n        var range = editor.selection.getRng();\\n        inner.focus();\\n        var offscreenRange = editor.dom.createRng();\\n        offscreenRange.selectNodeContents(inner);\\n        editor.selection.setRng(offscreenRange);\\n        setTimeout(function () {\\n          editor.selection.setRng(range);\\n          outer.parentNode.removeChild(outer);\\n          done();\\n        }, 0);\\n      };\\n    };\\n    var getData = function (editor) {\\n      return {\\n        html: editor.selection.getContent({ contextual: true }),\\n        text: editor.selection.getContent({ format: 'text' })\\n      };\\n    };\\n    var isTableSelection = function (editor) {\\n      return !!editor.dom.getParent(editor.selection.getStart(), 'td[data-mce-selected],th[data-mce-selected]', editor.getBody());\\n    };\\n    var hasSelectedContent = function (editor) {\\n      return !editor.selection.isCollapsed() || isTableSelection(editor);\\n    };\\n    var cut = function (editor) {\\n      return function (evt) {\\n        if (hasSelectedContent(editor)) {\\n          setClipboardData(evt, getData(editor), fallback(editor), function () {\\n            setTimeout(function () {\\n              editor.execCommand('Delete');\\n            }, 0);\\n          });\\n        }\\n      };\\n    };\\n    var copy = function (editor) {\\n      return function (evt) {\\n        if (hasSelectedContent(editor)) {\\n          setClipboardData(evt, getData(editor), fallback(editor), noop$1);\\n        }\\n      };\\n    };\\n    var register$1 = function (editor) {\\n      editor.on('cut', cut(editor));\\n      editor.on('copy', copy(editor));\\n    };\\n    var CutCopy = { register: register$1 };\\n\\n    var global$b = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');\\n\\n    var getCaretRangeFromEvent = function (editor, e) {\\n      return global$b.getCaretRangeFromPoint(e.clientX, e.clientY, editor.getDoc());\\n    };\\n    var isPlainTextFileUrl = function (content) {\\n      var plainTextContent = content['text/plain'];\\n      return plainTextContent ? plainTextContent.indexOf('file://') === 0 : false;\\n    };\\n    var setFocusedRange = function (editor, rng) {\\n      editor.focus();\\n      editor.selection.setRng(rng);\\n    };\\n    var setup = function (editor, clipboard, draggingInternallyState) {\\n      if (Settings.shouldBlockDrop(editor)) {\\n        editor.on('dragend dragover draggesture dragdrop drop drag', function (e) {\\n          e.preventDefault();\\n          e.stopPropagation();\\n        });\\n      }\\n      if (!Settings.shouldPasteDataImages(editor)) {\\n        editor.on('drop', function (e) {\\n          var dataTransfer = e.dataTransfer;\\n          if (dataTransfer && dataTransfer.files && dataTransfer.files.length > 0) {\\n            e.preventDefault();\\n          }\\n        });\\n      }\\n      editor.on('drop', function (e) {\\n        var dropContent, rng;\\n        rng = getCaretRangeFromEvent(editor, e);\\n        if (e.isDefaultPrevented() || draggingInternallyState.get()) {\\n          return;\\n        }\\n        dropContent = clipboard.getDataTransferItems(e.dataTransfer);\\n        var internal = clipboard.hasContentType(dropContent, InternalHtml.internalHtmlMime());\\n        if ((!clipboard.hasHtmlOrText(dropContent) || isPlainTextFileUrl(dropContent)) && clipboard.pasteImageData(e, rng)) {\\n          return;\\n        }\\n        if (rng && Settings.shouldFilterDrop(editor)) {\\n          var content_1 = dropContent['mce-internal'] || dropContent['text/html'] || dropContent['text/plain'];\\n          if (content_1) {\\n            e.preventDefault();\\n            global$3.setEditorTimeout(editor, function () {\\n              editor.undoManager.transact(function () {\\n                if (dropContent['mce-internal']) {\\n                  editor.execCommand('Delete');\\n                }\\n                setFocusedRange(editor, rng);\\n                content_1 = Utils.trimHtml(content_1);\\n                if (!dropContent['text/html']) {\\n                  clipboard.pasteText(content_1);\\n                } else {\\n                  clipboard.pasteHtml(content_1, internal);\\n                }\\n              });\\n            });\\n          }\\n        }\\n      });\\n      editor.on('dragstart', function (e) {\\n        draggingInternallyState.set(true);\\n      });\\n      editor.on('dragover dragend', function (e) {\\n        if (Settings.shouldPasteDataImages(editor) && draggingInternallyState.get() === false) {\\n          e.preventDefault();\\n          setFocusedRange(editor, getCaretRangeFromEvent(editor, e));\\n        }\\n        if (e.type === 'dragend') {\\n          draggingInternallyState.set(false);\\n        }\\n      });\\n    };\\n    var DragDrop = { setup: setup };\\n\\n    var setup$1 = function (editor) {\\n      var plugin = editor.plugins.paste;\\n      var preProcess = Settings.getPreProcess(editor);\\n      if (preProcess) {\\n        editor.on('PastePreProcess', function (e) {\\n          preProcess.call(plugin, plugin, e);\\n        });\\n      }\\n      var postProcess = Settings.getPostProcess(editor);\\n      if (postProcess) {\\n        editor.on('PastePostProcess', function (e) {\\n          postProcess.call(plugin, plugin, e);\\n        });\\n      }\\n    };\\n    var PrePostProcess = { setup: setup$1 };\\n\\n    function addPreProcessFilter(editor, filterFunc) {\\n      editor.on('PastePreProcess', function (e) {\\n        e.content = filterFunc(editor, e.content, e.internal, e.wordContent);\\n      });\\n    }\\n    function addPostProcessFilter(editor, filterFunc) {\\n      editor.on('PastePostProcess', function (e) {\\n        filterFunc(editor, e.node);\\n      });\\n    }\\n    function removeExplorerBrElementsAfterBlocks(editor, html) {\\n      if (!WordFilter.isWordContent(html)) {\\n        return html;\\n      }\\n      var blockElements = [];\\n      global$4.each(editor.schema.getBlockElements(), function (block, blockName) {\\n        blockElements.push(blockName);\\n      });\\n      var explorerBlocksRegExp = new RegExp('(?:<br>&nbsp;[\\\\\\\\s\\\\\\\\r\\\\\\\\n]+|<br>)*(<\\\\\\\\/?(' + blockElements.join('|') + ')[^>]*>)(?:<br>&nbsp;[\\\\\\\\s\\\\\\\\r\\\\\\\\n]+|<br>)*', 'g');\\n      html = Utils.filter(html, [[\\n          explorerBlocksRegExp,\\n          '$1'\\n        ]]);\\n      html = Utils.filter(html, [\\n        [\\n          /<br><br>/g,\\n          '<BR><BR>'\\n        ],\\n        [\\n          /<br>/g,\\n          ' '\\n        ],\\n        [\\n          /<BR><BR>/g,\\n          '<br>'\\n        ]\\n      ]);\\n      return html;\\n    }\\n    function removeWebKitStyles(editor, content, internal, isWordHtml) {\\n      if (isWordHtml || internal) {\\n        return content;\\n      }\\n      var webKitStylesSetting = Settings.getWebkitStyles(editor);\\n      var webKitStyles;\\n      if (Settings.shouldRemoveWebKitStyles(editor) === false || webKitStylesSetting === 'all') {\\n        return content;\\n      }\\n      if (webKitStylesSetting) {\\n        webKitStyles = webKitStylesSetting.split(/[, ]/);\\n      }\\n      if (webKitStyles) {\\n        var dom_1 = editor.dom, node_1 = editor.selection.getNode();\\n        content = content.replace(/(<[^>]+) style=\\\"([^\\\"]*)\\\"([^>]*>)/gi, function (all, before, value, after) {\\n          var inputStyles = dom_1.parseStyle(dom_1.decode(value));\\n          var outputStyles = {};\\n          if (webKitStyles === 'none') {\\n            return before + after;\\n          }\\n          for (var i = 0; i < webKitStyles.length; i++) {\\n            var inputValue = inputStyles[webKitStyles[i]], currentValue = dom_1.getStyle(node_1, webKitStyles[i], true);\\n            if (/color/.test(webKitStyles[i])) {\\n              inputValue = dom_1.toHex(inputValue);\\n              currentValue = dom_1.toHex(currentValue);\\n            }\\n            if (currentValue !== inputValue) {\\n              outputStyles[webKitStyles[i]] = inputValue;\\n            }\\n          }\\n          outputStyles = dom_1.serializeStyle(outputStyles, 'span');\\n          if (outputStyles) {\\n            return before + ' style=\\\"' + outputStyles + '\\\"' + after;\\n          }\\n          return before + after;\\n        });\\n      } else {\\n        content = content.replace(/(<[^>]+) style=\\\"([^\\\"]*)\\\"([^>]*>)/gi, '$1$3');\\n      }\\n      content = content.replace(/(<[^>]+) data-mce-style=\\\"([^\\\"]+)\\\"([^>]*>)/gi, function (all, before, value, after) {\\n        return before + ' style=\\\"' + value + '\\\"' + after;\\n      });\\n      return content;\\n    }\\n    function removeUnderlineAndFontInAnchor(editor, root) {\\n      editor.$('a', root).find('font,u').each(function (i, node) {\\n        editor.dom.remove(node, true);\\n      });\\n    }\\n    var setup$2 = function (editor) {\\n      if (global$2.webkit) {\\n        addPreProcessFilter(editor, removeWebKitStyles);\\n      }\\n      if (global$2.ie) {\\n        addPreProcessFilter(editor, removeExplorerBrElementsAfterBlocks);\\n        addPostProcessFilter(editor, removeUnderlineAndFontInAnchor);\\n      }\\n    };\\n    var Quirks = { setup: setup$2 };\\n\\n    var stateChange = function (editor, clipboard, e) {\\n      var ctrl = e.control;\\n      ctrl.active(clipboard.pasteFormat.get() === 'text');\\n      editor.on('PastePlainTextToggle', function (e) {\\n        ctrl.active(e.state);\\n      });\\n    };\\n    var register$2 = function (editor, clipboard) {\\n      var postRender = curry(stateChange, editor, clipboard);\\n      editor.addButton('pastetext', {\\n        active: false,\\n        icon: 'pastetext',\\n        tooltip: 'Paste as text',\\n        cmd: 'mceTogglePlainTextPaste',\\n        onPostRender: postRender\\n      });\\n      editor.addMenuItem('pastetext', {\\n        text: 'Paste as text',\\n        selectable: true,\\n        active: clipboard.pasteFormat,\\n        cmd: 'mceTogglePlainTextPaste',\\n        onPostRender: postRender\\n      });\\n    };\\n    var Buttons = { register: register$2 };\\n\\n    global$1.add('paste', function (editor) {\\n      if (DetectProPlugin.hasProPlugin(editor) === false) {\\n        var userIsInformedState = Cell(false);\\n        var draggingInternallyState = Cell(false);\\n        var pasteFormat = Cell(Settings.isPasteAsTextEnabled(editor) ? 'text' : 'html');\\n        var clipboard = Clipboard(editor, pasteFormat);\\n        var quirks = Quirks.setup(editor);\\n        Buttons.register(editor, clipboard);\\n        Commands.register(editor, clipboard, userIsInformedState);\\n        PrePostProcess.setup(editor);\\n        CutCopy.register(editor);\\n        DragDrop.setup(editor, clipboard, draggingInternallyState);\\n        return Api.get(clipboard, quirks);\\n      }\\n    });\\n    function Plugin () {\\n    }\\n\\n    return Plugin;\\n\\n}(window));\\n})();\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// /home/angular/project/~/raw-loader!/home/angular/project/~/tinymce/plugins/paste/plugin.js\n// module id = 773\n// module chunks = 1","module.exports = \"(function () {\\nvar table = (function (domGlobals) {\\n    'use strict';\\n\\n    var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\\n\\n    var noop = function () {\\n    };\\n    var compose = function (fa, fb) {\\n      return function () {\\n        var args = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n          args[_i] = arguments[_i];\\n        }\\n        return fa(fb.apply(null, args));\\n      };\\n    };\\n    var constant = function (value) {\\n      return function () {\\n        return value;\\n      };\\n    };\\n    var identity = function (x) {\\n      return x;\\n    };\\n    function curry(fn) {\\n      var initialArgs = [];\\n      for (var _i = 1; _i < arguments.length; _i++) {\\n        initialArgs[_i - 1] = arguments[_i];\\n      }\\n      return function () {\\n        var restArgs = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n          restArgs[_i] = arguments[_i];\\n        }\\n        var all = initialArgs.concat(restArgs);\\n        return fn.apply(null, all);\\n      };\\n    }\\n    var not = function (f) {\\n      return function () {\\n        var args = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n          args[_i] = arguments[_i];\\n        }\\n        return !f.apply(null, args);\\n      };\\n    };\\n    var die = function (msg) {\\n      return function () {\\n        throw new Error(msg);\\n      };\\n    };\\n    var never = constant(false);\\n    var always = constant(true);\\n\\n    var none = function () {\\n      return NONE;\\n    };\\n    var NONE = function () {\\n      var eq = function (o) {\\n        return o.isNone();\\n      };\\n      var call = function (thunk) {\\n        return thunk();\\n      };\\n      var id = function (n) {\\n        return n;\\n      };\\n      var me = {\\n        fold: function (n, s) {\\n          return n();\\n        },\\n        is: never,\\n        isSome: never,\\n        isNone: always,\\n        getOr: id,\\n        getOrThunk: call,\\n        getOrDie: function (msg) {\\n          throw new Error(msg || 'error: getOrDie called on none.');\\n        },\\n        getOrNull: constant(null),\\n        getOrUndefined: constant(undefined),\\n        or: id,\\n        orThunk: call,\\n        map: none,\\n        each: noop,\\n        bind: none,\\n        exists: never,\\n        forall: always,\\n        filter: none,\\n        equals: eq,\\n        equals_: eq,\\n        toArray: function () {\\n          return [];\\n        },\\n        toString: constant('none()')\\n      };\\n      if (Object.freeze) {\\n        Object.freeze(me);\\n      }\\n      return me;\\n    }();\\n    var some = function (a) {\\n      var constant_a = constant(a);\\n      var self = function () {\\n        return me;\\n      };\\n      var bind = function (f) {\\n        return f(a);\\n      };\\n      var me = {\\n        fold: function (n, s) {\\n          return s(a);\\n        },\\n        is: function (v) {\\n          return a === v;\\n        },\\n        isSome: always,\\n        isNone: never,\\n        getOr: constant_a,\\n        getOrThunk: constant_a,\\n        getOrDie: constant_a,\\n        getOrNull: constant_a,\\n        getOrUndefined: constant_a,\\n        or: self,\\n        orThunk: self,\\n        map: function (f) {\\n          return some(f(a));\\n        },\\n        each: function (f) {\\n          f(a);\\n        },\\n        bind: bind,\\n        exists: bind,\\n        forall: bind,\\n        filter: function (f) {\\n          return f(a) ? me : NONE;\\n        },\\n        toArray: function () {\\n          return [a];\\n        },\\n        toString: function () {\\n          return 'some(' + a + ')';\\n        },\\n        equals: function (o) {\\n          return o.is(a);\\n        },\\n        equals_: function (o, elementEq) {\\n          return o.fold(never, function (b) {\\n            return elementEq(a, b);\\n          });\\n        }\\n      };\\n      return me;\\n    };\\n    var from = function (value) {\\n      return value === null || value === undefined ? NONE : some(value);\\n    };\\n    var Option = {\\n      some: some,\\n      none: none,\\n      from: from\\n    };\\n\\n    var typeOf = function (x) {\\n      if (x === null) {\\n        return 'null';\\n      }\\n      var t = typeof x;\\n      if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\\n        return 'array';\\n      }\\n      if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\\n        return 'string';\\n      }\\n      return t;\\n    };\\n    var isType = function (type) {\\n      return function (value) {\\n        return typeOf(value) === type;\\n      };\\n    };\\n    var isString = isType('string');\\n    var isArray = isType('array');\\n    var isBoolean = isType('boolean');\\n    var isFunction = isType('function');\\n    var isNumber = isType('number');\\n\\n    var nativeSlice = Array.prototype.slice;\\n    var nativeIndexOf = Array.prototype.indexOf;\\n    var nativePush = Array.prototype.push;\\n    var rawIndexOf = function (ts, t) {\\n      return nativeIndexOf.call(ts, t);\\n    };\\n    var contains = function (xs, x) {\\n      return rawIndexOf(xs, x) > -1;\\n    };\\n    var exists = function (xs, pred) {\\n      for (var i = 0, len = xs.length; i < len; i++) {\\n        var x = xs[i];\\n        if (pred(x, i)) {\\n          return true;\\n        }\\n      }\\n      return false;\\n    };\\n    var map = function (xs, f) {\\n      var len = xs.length;\\n      var r = new Array(len);\\n      for (var i = 0; i < len; i++) {\\n        var x = xs[i];\\n        r[i] = f(x, i);\\n      }\\n      return r;\\n    };\\n    var each = function (xs, f) {\\n      for (var i = 0, len = xs.length; i < len; i++) {\\n        var x = xs[i];\\n        f(x, i);\\n      }\\n    };\\n    var eachr = function (xs, f) {\\n      for (var i = xs.length - 1; i >= 0; i--) {\\n        var x = xs[i];\\n        f(x, i);\\n      }\\n    };\\n    var filter = function (xs, pred) {\\n      var r = [];\\n      for (var i = 0, len = xs.length; i < len; i++) {\\n        var x = xs[i];\\n        if (pred(x, i)) {\\n          r.push(x);\\n        }\\n      }\\n      return r;\\n    };\\n    var foldr = function (xs, f, acc) {\\n      eachr(xs, function (x) {\\n        acc = f(acc, x);\\n      });\\n      return acc;\\n    };\\n    var foldl = function (xs, f, acc) {\\n      each(xs, function (x) {\\n        acc = f(acc, x);\\n      });\\n      return acc;\\n    };\\n    var find = function (xs, pred) {\\n      for (var i = 0, len = xs.length; i < len; i++) {\\n        var x = xs[i];\\n        if (pred(x, i)) {\\n          return Option.some(x);\\n        }\\n      }\\n      return Option.none();\\n    };\\n    var findIndex = function (xs, pred) {\\n      for (var i = 0, len = xs.length; i < len; i++) {\\n        var x = xs[i];\\n        if (pred(x, i)) {\\n          return Option.some(i);\\n        }\\n      }\\n      return Option.none();\\n    };\\n    var flatten = function (xs) {\\n      var r = [];\\n      for (var i = 0, len = xs.length; i < len; ++i) {\\n        if (!isArray(xs[i])) {\\n          throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\\n        }\\n        nativePush.apply(r, xs[i]);\\n      }\\n      return r;\\n    };\\n    var bind = function (xs, f) {\\n      var output = map(xs, f);\\n      return flatten(output);\\n    };\\n    var forall = function (xs, pred) {\\n      for (var i = 0, len = xs.length; i < len; ++i) {\\n        var x = xs[i];\\n        if (pred(x, i) !== true) {\\n          return false;\\n        }\\n      }\\n      return true;\\n    };\\n    var reverse = function (xs) {\\n      var r = nativeSlice.call(xs, 0);\\n      r.reverse();\\n      return r;\\n    };\\n    var last = function (xs) {\\n      return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);\\n    };\\n    var from$1 = isFunction(Array.from) ? Array.from : function (x) {\\n      return nativeSlice.call(x);\\n    };\\n\\n    var keys = Object.keys;\\n    var each$1 = function (obj, f) {\\n      var props = keys(obj);\\n      for (var k = 0, len = props.length; k < len; k++) {\\n        var i = props[k];\\n        var x = obj[i];\\n        f(x, i);\\n      }\\n    };\\n    var map$1 = function (obj, f) {\\n      return tupleMap(obj, function (x, i) {\\n        return {\\n          k: i,\\n          v: f(x, i)\\n        };\\n      });\\n    };\\n    var tupleMap = function (obj, f) {\\n      var r = {};\\n      each$1(obj, function (x, i) {\\n        var tuple = f(x, i);\\n        r[tuple.k] = tuple.v;\\n      });\\n      return r;\\n    };\\n\\n    var Immutable = function () {\\n      var fields = [];\\n      for (var _i = 0; _i < arguments.length; _i++) {\\n        fields[_i] = arguments[_i];\\n      }\\n      return function () {\\n        var values = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n          values[_i] = arguments[_i];\\n        }\\n        if (fields.length !== values.length) {\\n          throw new Error('Wrong number of arguments to struct. Expected \\\"[' + fields.length + ']\\\", got ' + values.length + ' arguments');\\n        }\\n        var struct = {};\\n        each(fields, function (name, i) {\\n          struct[name] = constant(values[i]);\\n        });\\n        return struct;\\n      };\\n    };\\n\\n    var sort = function (arr) {\\n      return arr.slice(0).sort();\\n    };\\n    var reqMessage = function (required, keys) {\\n      throw new Error('All required keys (' + sort(required).join(', ') + ') were not specified. Specified keys were: ' + sort(keys).join(', ') + '.');\\n    };\\n    var unsuppMessage = function (unsupported) {\\n      throw new Error('Unsupported keys for object: ' + sort(unsupported).join(', '));\\n    };\\n    var validateStrArr = function (label, array) {\\n      if (!isArray(array)) {\\n        throw new Error('The ' + label + ' fields must be an array. Was: ' + array + '.');\\n      }\\n      each(array, function (a) {\\n        if (!isString(a)) {\\n          throw new Error('The value ' + a + ' in the ' + label + ' fields was not a string.');\\n        }\\n      });\\n    };\\n    var invalidTypeMessage = function (incorrect, type) {\\n      throw new Error('All values need to be of type: ' + type + '. Keys (' + sort(incorrect).join(', ') + ') were not.');\\n    };\\n    var checkDupes = function (everything) {\\n      var sorted = sort(everything);\\n      var dupe = find(sorted, function (s, i) {\\n        return i < sorted.length - 1 && s === sorted[i + 1];\\n      });\\n      dupe.each(function (d) {\\n        throw new Error('The field: ' + d + ' occurs more than once in the combined fields: [' + sorted.join(', ') + '].');\\n      });\\n    };\\n\\n    var MixedBag = function (required, optional) {\\n      var everything = required.concat(optional);\\n      if (everything.length === 0) {\\n        throw new Error('You must specify at least one required or optional field.');\\n      }\\n      validateStrArr('required', required);\\n      validateStrArr('optional', optional);\\n      checkDupes(everything);\\n      return function (obj) {\\n        var keys$1 = keys(obj);\\n        var allReqd = forall(required, function (req) {\\n          return contains(keys$1, req);\\n        });\\n        if (!allReqd) {\\n          reqMessage(required, keys$1);\\n        }\\n        var unsupported = filter(keys$1, function (key) {\\n          return !contains(everything, key);\\n        });\\n        if (unsupported.length > 0) {\\n          unsuppMessage(unsupported);\\n        }\\n        var r = {};\\n        each(required, function (req) {\\n          r[req] = constant(obj[req]);\\n        });\\n        each(optional, function (opt) {\\n          r[opt] = constant(Object.prototype.hasOwnProperty.call(obj, opt) ? Option.some(obj[opt]) : Option.none());\\n        });\\n        return r;\\n      };\\n    };\\n\\n    var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;\\n    var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;\\n    var COMMENT = domGlobals.Node.COMMENT_NODE;\\n    var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;\\n    var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;\\n    var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;\\n    var ELEMENT = domGlobals.Node.ELEMENT_NODE;\\n    var TEXT = domGlobals.Node.TEXT_NODE;\\n    var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;\\n    var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;\\n    var ENTITY = domGlobals.Node.ENTITY_NODE;\\n    var NOTATION = domGlobals.Node.NOTATION_NODE;\\n\\n    var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\\n\\n    var path = function (parts, scope) {\\n      var o = scope !== undefined && scope !== null ? scope : Global;\\n      for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\\n        o = o[parts[i]];\\n      }\\n      return o;\\n    };\\n    var resolve = function (p, scope) {\\n      var parts = p.split('.');\\n      return path(parts, scope);\\n    };\\n\\n    var unsafe = function (name, scope) {\\n      return resolve(name, scope);\\n    };\\n    var getOrDie = function (name, scope) {\\n      var actual = unsafe(name, scope);\\n      if (actual === undefined || actual === null) {\\n        throw new Error(name + ' not available on this browser');\\n      }\\n      return actual;\\n    };\\n    var Global$1 = { getOrDie: getOrDie };\\n\\n    var name = function (element) {\\n      var r = element.dom().nodeName;\\n      return r.toLowerCase();\\n    };\\n    var type = function (element) {\\n      return element.dom().nodeType;\\n    };\\n    var isType$1 = function (t) {\\n      return function (element) {\\n        return type(element) === t;\\n      };\\n    };\\n    var isComment = function (element) {\\n      return type(element) === COMMENT || name(element) === '#comment';\\n    };\\n    var isElement = isType$1(ELEMENT);\\n    var isText = isType$1(TEXT);\\n\\n    var rawSet = function (dom, key, value) {\\n      if (isString(value) || isBoolean(value) || isNumber(value)) {\\n        dom.setAttribute(key, value + '');\\n      } else {\\n        domGlobals.console.error('Invalid call to Attr.set. Key ', key, ':: Value ', value, ':: Element ', dom);\\n        throw new Error('Attribute value was not simple');\\n      }\\n    };\\n    var set = function (element, key, value) {\\n      rawSet(element.dom(), key, value);\\n    };\\n    var setAll = function (element, attrs) {\\n      var dom = element.dom();\\n      each$1(attrs, function (v, k) {\\n        rawSet(dom, k, v);\\n      });\\n    };\\n    var get = function (element, key) {\\n      var v = element.dom().getAttribute(key);\\n      return v === null ? undefined : v;\\n    };\\n    var has = function (element, key) {\\n      var dom = element.dom();\\n      return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;\\n    };\\n    var remove = function (element, key) {\\n      element.dom().removeAttribute(key);\\n    };\\n    var clone = function (element) {\\n      return foldl(element.dom().attributes, function (acc, attr) {\\n        acc[attr.name] = attr.value;\\n        return acc;\\n      }, {});\\n    };\\n\\n    var checkRange = function (str, substr, start) {\\n      if (substr === '') {\\n        return true;\\n      }\\n      if (str.length < substr.length) {\\n        return false;\\n      }\\n      var x = str.substr(start, start + substr.length);\\n      return x === substr;\\n    };\\n    var contains$1 = function (str, substr) {\\n      return str.indexOf(substr) !== -1;\\n    };\\n    var endsWith = function (str, suffix) {\\n      return checkRange(str, suffix, str.length - suffix.length);\\n    };\\n    var trim = function (str) {\\n      return str.replace(/^\\\\s+|\\\\s+$/g, '');\\n    };\\n\\n    var isSupported = function (dom) {\\n      return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\\n    };\\n\\n    var cached = function (f) {\\n      var called = false;\\n      var r;\\n      return function () {\\n        var args = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n          args[_i] = arguments[_i];\\n        }\\n        if (!called) {\\n          called = true;\\n          r = f.apply(null, args);\\n        }\\n        return r;\\n      };\\n    };\\n\\n    var fromHtml = function (html, scope) {\\n      var doc = scope || domGlobals.document;\\n      var div = doc.createElement('div');\\n      div.innerHTML = html;\\n      if (!div.hasChildNodes() || div.childNodes.length > 1) {\\n        domGlobals.console.error('HTML does not have a single root node', html);\\n        throw new Error('HTML must have a single root node');\\n      }\\n      return fromDom(div.childNodes[0]);\\n    };\\n    var fromTag = function (tag, scope) {\\n      var doc = scope || domGlobals.document;\\n      var node = doc.createElement(tag);\\n      return fromDom(node);\\n    };\\n    var fromText = function (text, scope) {\\n      var doc = scope || domGlobals.document;\\n      var node = doc.createTextNode(text);\\n      return fromDom(node);\\n    };\\n    var fromDom = function (node) {\\n      if (node === null || node === undefined) {\\n        throw new Error('Node cannot be null or undefined');\\n      }\\n      return { dom: constant(node) };\\n    };\\n    var fromPoint = function (docElm, x, y) {\\n      var doc = docElm.dom();\\n      return Option.from(doc.elementFromPoint(x, y)).map(fromDom);\\n    };\\n    var Element = {\\n      fromHtml: fromHtml,\\n      fromTag: fromTag,\\n      fromText: fromText,\\n      fromDom: fromDom,\\n      fromPoint: fromPoint\\n    };\\n\\n    var inBody = function (element) {\\n      var dom = isText(element) ? element.dom().parentNode : element.dom();\\n      return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);\\n    };\\n    var body = cached(function () {\\n      return getBody(Element.fromDom(domGlobals.document));\\n    });\\n    var getBody = function (doc) {\\n      var b = doc.dom().body;\\n      if (b === null || b === undefined) {\\n        throw new Error('Body is not available yet');\\n      }\\n      return Element.fromDom(b);\\n    };\\n\\n    var internalSet = function (dom, property, value) {\\n      if (!isString(value)) {\\n        domGlobals.console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\\n        throw new Error('CSS value must be a string: ' + value);\\n      }\\n      if (isSupported(dom)) {\\n        dom.style.setProperty(property, value);\\n      }\\n    };\\n    var internalRemove = function (dom, property) {\\n      if (isSupported(dom)) {\\n        dom.style.removeProperty(property);\\n      }\\n    };\\n    var set$1 = function (element, property, value) {\\n      var dom = element.dom();\\n      internalSet(dom, property, value);\\n    };\\n    var setAll$1 = function (element, css) {\\n      var dom = element.dom();\\n      each$1(css, function (v, k) {\\n        internalSet(dom, k, v);\\n      });\\n    };\\n    var get$1 = function (element, property) {\\n      var dom = element.dom();\\n      var styles = domGlobals.window.getComputedStyle(dom);\\n      var r = styles.getPropertyValue(property);\\n      var v = r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\\n      return v === null ? undefined : v;\\n    };\\n    var getUnsafeProperty = function (dom, property) {\\n      return isSupported(dom) ? dom.style.getPropertyValue(property) : '';\\n    };\\n    var getRaw = function (element, property) {\\n      var dom = element.dom();\\n      var raw = getUnsafeProperty(dom, property);\\n      return Option.from(raw).filter(function (r) {\\n        return r.length > 0;\\n      });\\n    };\\n    var remove$1 = function (element, property) {\\n      var dom = element.dom();\\n      internalRemove(dom, property);\\n      if (has(element, 'style') && trim(get(element, 'style')) === '') {\\n        remove(element, 'style');\\n      }\\n    };\\n    var copy = function (source, target) {\\n      var sourceDom = source.dom();\\n      var targetDom = target.dom();\\n      if (isSupported(sourceDom) && isSupported(targetDom)) {\\n        targetDom.style.cssText = sourceDom.style.cssText;\\n      }\\n    };\\n\\n    var node = function () {\\n      var f = Global$1.getOrDie('Node');\\n      return f;\\n    };\\n    var compareDocumentPosition = function (a, b, match) {\\n      return (a.compareDocumentPosition(b) & match) !== 0;\\n    };\\n    var documentPositionPreceding = function (a, b) {\\n      return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);\\n    };\\n    var documentPositionContainedBy = function (a, b) {\\n      return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);\\n    };\\n    var Node = {\\n      documentPositionPreceding: documentPositionPreceding,\\n      documentPositionContainedBy: documentPositionContainedBy\\n    };\\n\\n    var firstMatch = function (regexes, s) {\\n      for (var i = 0; i < regexes.length; i++) {\\n        var x = regexes[i];\\n        if (x.test(s)) {\\n          return x;\\n        }\\n      }\\n      return undefined;\\n    };\\n    var find$1 = function (regexes, agent) {\\n      var r = firstMatch(regexes, agent);\\n      if (!r) {\\n        return {\\n          major: 0,\\n          minor: 0\\n        };\\n      }\\n      var group = function (i) {\\n        return Number(agent.replace(r, '$' + i));\\n      };\\n      return nu(group(1), group(2));\\n    };\\n    var detect = function (versionRegexes, agent) {\\n      var cleanedAgent = String(agent).toLowerCase();\\n      if (versionRegexes.length === 0) {\\n        return unknown();\\n      }\\n      return find$1(versionRegexes, cleanedAgent);\\n    };\\n    var unknown = function () {\\n      return nu(0, 0);\\n    };\\n    var nu = function (major, minor) {\\n      return {\\n        major: major,\\n        minor: minor\\n      };\\n    };\\n    var Version = {\\n      nu: nu,\\n      detect: detect,\\n      unknown: unknown\\n    };\\n\\n    var edge = 'Edge';\\n    var chrome = 'Chrome';\\n    var ie = 'IE';\\n    var opera = 'Opera';\\n    var firefox = 'Firefox';\\n    var safari = 'Safari';\\n    var isBrowser = function (name, current) {\\n      return function () {\\n        return current === name;\\n      };\\n    };\\n    var unknown$1 = function () {\\n      return nu$1({\\n        current: undefined,\\n        version: Version.unknown()\\n      });\\n    };\\n    var nu$1 = function (info) {\\n      var current = info.current;\\n      var version = info.version;\\n      return {\\n        current: current,\\n        version: version,\\n        isEdge: isBrowser(edge, current),\\n        isChrome: isBrowser(chrome, current),\\n        isIE: isBrowser(ie, current),\\n        isOpera: isBrowser(opera, current),\\n        isFirefox: isBrowser(firefox, current),\\n        isSafari: isBrowser(safari, current)\\n      };\\n    };\\n    var Browser = {\\n      unknown: unknown$1,\\n      nu: nu$1,\\n      edge: constant(edge),\\n      chrome: constant(chrome),\\n      ie: constant(ie),\\n      opera: constant(opera),\\n      firefox: constant(firefox),\\n      safari: constant(safari)\\n    };\\n\\n    var windows = 'Windows';\\n    var ios = 'iOS';\\n    var android = 'Android';\\n    var linux = 'Linux';\\n    var osx = 'OSX';\\n    var solaris = 'Solaris';\\n    var freebsd = 'FreeBSD';\\n    var isOS = function (name, current) {\\n      return function () {\\n        return current === name;\\n      };\\n    };\\n    var unknown$2 = function () {\\n      return nu$2({\\n        current: undefined,\\n        version: Version.unknown()\\n      });\\n    };\\n    var nu$2 = function (info) {\\n      var current = info.current;\\n      var version = info.version;\\n      return {\\n        current: current,\\n        version: version,\\n        isWindows: isOS(windows, current),\\n        isiOS: isOS(ios, current),\\n        isAndroid: isOS(android, current),\\n        isOSX: isOS(osx, current),\\n        isLinux: isOS(linux, current),\\n        isSolaris: isOS(solaris, current),\\n        isFreeBSD: isOS(freebsd, current)\\n      };\\n    };\\n    var OperatingSystem = {\\n      unknown: unknown$2,\\n      nu: nu$2,\\n      windows: constant(windows),\\n      ios: constant(ios),\\n      android: constant(android),\\n      linux: constant(linux),\\n      osx: constant(osx),\\n      solaris: constant(solaris),\\n      freebsd: constant(freebsd)\\n    };\\n\\n    var DeviceType = function (os, browser, userAgent) {\\n      var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\\n      var isiPhone = os.isiOS() && !isiPad;\\n      var isAndroid3 = os.isAndroid() && os.version.major === 3;\\n      var isAndroid4 = os.isAndroid() && os.version.major === 4;\\n      var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;\\n      var isTouch = os.isiOS() || os.isAndroid();\\n      var isPhone = isTouch && !isTablet;\\n      var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\\n      return {\\n        isiPad: constant(isiPad),\\n        isiPhone: constant(isiPhone),\\n        isTablet: constant(isTablet),\\n        isPhone: constant(isPhone),\\n        isTouch: constant(isTouch),\\n        isAndroid: os.isAndroid,\\n        isiOS: os.isiOS,\\n        isWebView: constant(iOSwebview)\\n      };\\n    };\\n\\n    var detect$1 = function (candidates, userAgent) {\\n      var agent = String(userAgent).toLowerCase();\\n      return find(candidates, function (candidate) {\\n        return candidate.search(agent);\\n      });\\n    };\\n    var detectBrowser = function (browsers, userAgent) {\\n      return detect$1(browsers, userAgent).map(function (browser) {\\n        var version = Version.detect(browser.versionRegexes, userAgent);\\n        return {\\n          current: browser.name,\\n          version: version\\n        };\\n      });\\n    };\\n    var detectOs = function (oses, userAgent) {\\n      return detect$1(oses, userAgent).map(function (os) {\\n        var version = Version.detect(os.versionRegexes, userAgent);\\n        return {\\n          current: os.name,\\n          version: version\\n        };\\n      });\\n    };\\n    var UaString = {\\n      detectBrowser: detectBrowser,\\n      detectOs: detectOs\\n    };\\n\\n    var normalVersionRegex = /.*?version\\\\/\\\\ ?([0-9]+)\\\\.([0-9]+).*/;\\n    var checkContains = function (target) {\\n      return function (uastring) {\\n        return contains$1(uastring, target);\\n      };\\n    };\\n    var browsers = [\\n      {\\n        name: 'Edge',\\n        versionRegexes: [/.*?edge\\\\/ ?([0-9]+)\\\\.([0-9]+)$/],\\n        search: function (uastring) {\\n          return contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit');\\n        }\\n      },\\n      {\\n        name: 'Chrome',\\n        versionRegexes: [\\n          /.*?chrome\\\\/([0-9]+)\\\\.([0-9]+).*/,\\n          normalVersionRegex\\n        ],\\n        search: function (uastring) {\\n          return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe');\\n        }\\n      },\\n      {\\n        name: 'IE',\\n        versionRegexes: [\\n          /.*?msie\\\\ ?([0-9]+)\\\\.([0-9]+).*/,\\n          /.*?rv:([0-9]+)\\\\.([0-9]+).*/\\n        ],\\n        search: function (uastring) {\\n          return contains$1(uastring, 'msie') || contains$1(uastring, 'trident');\\n        }\\n      },\\n      {\\n        name: 'Opera',\\n        versionRegexes: [\\n          normalVersionRegex,\\n          /.*?opera\\\\/([0-9]+)\\\\.([0-9]+).*/\\n        ],\\n        search: checkContains('opera')\\n      },\\n      {\\n        name: 'Firefox',\\n        versionRegexes: [/.*?firefox\\\\/\\\\ ?([0-9]+)\\\\.([0-9]+).*/],\\n        search: checkContains('firefox')\\n      },\\n      {\\n        name: 'Safari',\\n        versionRegexes: [\\n          normalVersionRegex,\\n          /.*?cpu os ([0-9]+)_([0-9]+).*/\\n        ],\\n        search: function (uastring) {\\n          return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');\\n        }\\n      }\\n    ];\\n    var oses = [\\n      {\\n        name: 'Windows',\\n        search: checkContains('win'),\\n        versionRegexes: [/.*?windows\\\\ nt\\\\ ?([0-9]+)\\\\.([0-9]+).*/]\\n      },\\n      {\\n        name: 'iOS',\\n        search: function (uastring) {\\n          return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad');\\n        },\\n        versionRegexes: [\\n          /.*?version\\\\/\\\\ ?([0-9]+)\\\\.([0-9]+).*/,\\n          /.*cpu os ([0-9]+)_([0-9]+).*/,\\n          /.*cpu iphone os ([0-9]+)_([0-9]+).*/\\n        ]\\n      },\\n      {\\n        name: 'Android',\\n        search: checkContains('android'),\\n        versionRegexes: [/.*?android\\\\ ?([0-9]+)\\\\.([0-9]+).*/]\\n      },\\n      {\\n        name: 'OSX',\\n        search: checkContains('os x'),\\n        versionRegexes: [/.*?os\\\\ x\\\\ ?([0-9]+)_([0-9]+).*/]\\n      },\\n      {\\n        name: 'Linux',\\n        search: checkContains('linux'),\\n        versionRegexes: []\\n      },\\n      {\\n        name: 'Solaris',\\n        search: checkContains('sunos'),\\n        versionRegexes: []\\n      },\\n      {\\n        name: 'FreeBSD',\\n        search: checkContains('freebsd'),\\n        versionRegexes: []\\n      }\\n    ];\\n    var PlatformInfo = {\\n      browsers: constant(browsers),\\n      oses: constant(oses)\\n    };\\n\\n    var detect$2 = function (userAgent) {\\n      var browsers = PlatformInfo.browsers();\\n      var oses = PlatformInfo.oses();\\n      var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);\\n      var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\\n      var deviceType = DeviceType(os, browser, userAgent);\\n      return {\\n        browser: browser,\\n        os: os,\\n        deviceType: deviceType\\n      };\\n    };\\n    var PlatformDetection = { detect: detect$2 };\\n\\n    var detect$3 = cached(function () {\\n      var userAgent = domGlobals.navigator.userAgent;\\n      return PlatformDetection.detect(userAgent);\\n    });\\n    var PlatformDetection$1 = { detect: detect$3 };\\n\\n    var ELEMENT$1 = ELEMENT;\\n    var DOCUMENT$1 = DOCUMENT;\\n    var is = function (element, selector) {\\n      var dom = element.dom();\\n      if (dom.nodeType !== ELEMENT$1) {\\n        return false;\\n      } else {\\n        var elem = dom;\\n        if (elem.matches !== undefined) {\\n          return elem.matches(selector);\\n        } else if (elem.msMatchesSelector !== undefined) {\\n          return elem.msMatchesSelector(selector);\\n        } else if (elem.webkitMatchesSelector !== undefined) {\\n          return elem.webkitMatchesSelector(selector);\\n        } else if (elem.mozMatchesSelector !== undefined) {\\n          return elem.mozMatchesSelector(selector);\\n        } else {\\n          throw new Error('Browser lacks native selectors');\\n        }\\n      }\\n    };\\n    var bypassSelector = function (dom) {\\n      return dom.nodeType !== ELEMENT$1 && dom.nodeType !== DOCUMENT$1 || dom.childElementCount === 0;\\n    };\\n    var all = function (selector, scope) {\\n      var base = scope === undefined ? domGlobals.document : scope.dom();\\n      return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element.fromDom);\\n    };\\n    var one = function (selector, scope) {\\n      var base = scope === undefined ? domGlobals.document : scope.dom();\\n      return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element.fromDom);\\n    };\\n\\n    var eq = function (e1, e2) {\\n      return e1.dom() === e2.dom();\\n    };\\n    var regularContains = function (e1, e2) {\\n      var d1 = e1.dom();\\n      var d2 = e2.dom();\\n      return d1 === d2 ? false : d1.contains(d2);\\n    };\\n    var ieContains = function (e1, e2) {\\n      return Node.documentPositionContainedBy(e1.dom(), e2.dom());\\n    };\\n    var browser = PlatformDetection$1.detect().browser;\\n    var contains$2 = browser.isIE() ? ieContains : regularContains;\\n    var is$1 = is;\\n\\n    var owner = function (element) {\\n      return Element.fromDom(element.dom().ownerDocument);\\n    };\\n    var defaultView = function (element) {\\n      return Element.fromDom(element.dom().ownerDocument.defaultView);\\n    };\\n    var parent = function (element) {\\n      return Option.from(element.dom().parentNode).map(Element.fromDom);\\n    };\\n    var parents = function (element, isRoot) {\\n      var stop = isFunction(isRoot) ? isRoot : never;\\n      var dom = element.dom();\\n      var ret = [];\\n      while (dom.parentNode !== null && dom.parentNode !== undefined) {\\n        var rawParent = dom.parentNode;\\n        var p = Element.fromDom(rawParent);\\n        ret.push(p);\\n        if (stop(p) === true) {\\n          break;\\n        } else {\\n          dom = rawParent;\\n        }\\n      }\\n      return ret;\\n    };\\n    var prevSibling = function (element) {\\n      return Option.from(element.dom().previousSibling).map(Element.fromDom);\\n    };\\n    var nextSibling = function (element) {\\n      return Option.from(element.dom().nextSibling).map(Element.fromDom);\\n    };\\n    var children = function (element) {\\n      return map(element.dom().childNodes, Element.fromDom);\\n    };\\n    var child = function (element, index) {\\n      var cs = element.dom().childNodes;\\n      return Option.from(cs[index]).map(Element.fromDom);\\n    };\\n    var firstChild = function (element) {\\n      return child(element, 0);\\n    };\\n    var spot = Immutable('element', 'offset');\\n\\n    var before = function (marker, element) {\\n      var parent$1 = parent(marker);\\n      parent$1.each(function (v) {\\n        v.dom().insertBefore(element.dom(), marker.dom());\\n      });\\n    };\\n    var after = function (marker, element) {\\n      var sibling = nextSibling(marker);\\n      sibling.fold(function () {\\n        var parent$1 = parent(marker);\\n        parent$1.each(function (v) {\\n          append(v, element);\\n        });\\n      }, function (v) {\\n        before(v, element);\\n      });\\n    };\\n    var prepend = function (parent, element) {\\n      var firstChild$1 = firstChild(parent);\\n      firstChild$1.fold(function () {\\n        append(parent, element);\\n      }, function (v) {\\n        parent.dom().insertBefore(element.dom(), v.dom());\\n      });\\n    };\\n    var append = function (parent, element) {\\n      parent.dom().appendChild(element.dom());\\n    };\\n    var wrap = function (element, wrapper) {\\n      before(element, wrapper);\\n      append(wrapper, element);\\n    };\\n\\n    var before$1 = function (marker, elements) {\\n      each(elements, function (x) {\\n        before(marker, x);\\n      });\\n    };\\n    var after$1 = function (marker, elements) {\\n      each(elements, function (x, i) {\\n        var e = i === 0 ? marker : elements[i - 1];\\n        after(e, x);\\n      });\\n    };\\n    var append$1 = function (parent, elements) {\\n      each(elements, function (x) {\\n        append(parent, x);\\n      });\\n    };\\n\\n    var empty = function (element) {\\n      element.dom().textContent = '';\\n      each(children(element), function (rogue) {\\n        remove$2(rogue);\\n      });\\n    };\\n    var remove$2 = function (element) {\\n      var dom = element.dom();\\n      if (dom.parentNode !== null) {\\n        dom.parentNode.removeChild(dom);\\n      }\\n    };\\n    var unwrap = function (wrapper) {\\n      var children$1 = children(wrapper);\\n      if (children$1.length > 0) {\\n        before$1(wrapper, children$1);\\n      }\\n      remove$2(wrapper);\\n    };\\n\\n    var dimension = Immutable('width', 'height');\\n    var dimensions = Immutable('width', 'height');\\n    var grid = Immutable('rows', 'columns');\\n    var address = Immutable('row', 'column');\\n    var coords = Immutable('x', 'y');\\n    var detail = Immutable('element', 'rowspan', 'colspan');\\n    var detailnew = Immutable('element', 'rowspan', 'colspan', 'isNew');\\n    var extended = Immutable('element', 'rowspan', 'colspan', 'row', 'column');\\n    var rowdata = Immutable('element', 'cells', 'section');\\n    var elementnew = Immutable('element', 'isNew');\\n    var rowdatanew = Immutable('element', 'cells', 'section', 'isNew');\\n    var rowcells = Immutable('cells', 'section');\\n    var rowdetails = Immutable('details', 'section');\\n    var bounds = Immutable('startRow', 'startCol', 'finishRow', 'finishCol');\\n\\n    var ancestors = function (scope, predicate, isRoot) {\\n      return filter(parents(scope, isRoot), predicate);\\n    };\\n    var children$1 = function (scope, predicate) {\\n      return filter(children(scope), predicate);\\n    };\\n    var descendants = function (scope, predicate) {\\n      var result = [];\\n      each(children(scope), function (x) {\\n        if (predicate(x)) {\\n          result = result.concat([x]);\\n        }\\n        result = result.concat(descendants(x, predicate));\\n      });\\n      return result;\\n    };\\n\\n    var ancestors$1 = function (scope, selector, isRoot) {\\n      return ancestors(scope, function (e) {\\n        return is(e, selector);\\n      }, isRoot);\\n    };\\n    var children$2 = function (scope, selector) {\\n      return children$1(scope, function (e) {\\n        return is(e, selector);\\n      });\\n    };\\n    var descendants$1 = function (scope, selector) {\\n      return all(selector, scope);\\n    };\\n\\n    function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {\\n      return is(scope, a) ? Option.some(scope) : isFunction(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot);\\n    }\\n\\n    var ancestor = function (scope, predicate, isRoot) {\\n      var element = scope.dom();\\n      var stop = isFunction(isRoot) ? isRoot : constant(false);\\n      while (element.parentNode) {\\n        element = element.parentNode;\\n        var el = Element.fromDom(element);\\n        if (predicate(el)) {\\n          return Option.some(el);\\n        } else if (stop(el)) {\\n          break;\\n        }\\n      }\\n      return Option.none();\\n    };\\n    var closest = function (scope, predicate, isRoot) {\\n      var is = function (s, test) {\\n        return test(s);\\n      };\\n      return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);\\n    };\\n    var child$1 = function (scope, predicate) {\\n      var pred = function (node) {\\n        return predicate(Element.fromDom(node));\\n      };\\n      var result = find(scope.dom().childNodes, pred);\\n      return result.map(Element.fromDom);\\n    };\\n    var descendant = function (scope, predicate) {\\n      var descend = function (node) {\\n        for (var i = 0; i < node.childNodes.length; i++) {\\n          var child_1 = Element.fromDom(node.childNodes[i]);\\n          if (predicate(child_1)) {\\n            return Option.some(child_1);\\n          }\\n          var res = descend(node.childNodes[i]);\\n          if (res.isSome()) {\\n            return res;\\n          }\\n        }\\n        return Option.none();\\n      };\\n      return descend(scope.dom());\\n    };\\n\\n    var ancestor$1 = function (scope, selector, isRoot) {\\n      return ancestor(scope, function (e) {\\n        return is(e, selector);\\n      }, isRoot);\\n    };\\n    var child$2 = function (scope, selector) {\\n      return child$1(scope, function (e) {\\n        return is(e, selector);\\n      });\\n    };\\n    var descendant$1 = function (scope, selector) {\\n      return one(selector, scope);\\n    };\\n    var closest$1 = function (scope, selector, isRoot) {\\n      return ClosestOrAncestor(is, ancestor$1, scope, selector, isRoot);\\n    };\\n\\n    var firstLayer = function (scope, selector) {\\n      return filterFirstLayer(scope, selector, constant(true));\\n    };\\n    var filterFirstLayer = function (scope, selector, predicate) {\\n      return bind(children(scope), function (x) {\\n        return is(x, selector) ? predicate(x) ? [x] : [] : filterFirstLayer(x, selector, predicate);\\n      });\\n    };\\n    var LayerSelector = {\\n      firstLayer: firstLayer,\\n      filterFirstLayer: filterFirstLayer\\n    };\\n\\n    var lookup = function (tags, element, isRoot) {\\n      if (isRoot === void 0) {\\n        isRoot = never;\\n      }\\n      if (isRoot(element)) {\\n        return Option.none();\\n      }\\n      if (contains(tags, name(element))) {\\n        return Option.some(element);\\n      }\\n      var isRootOrUpperTable = function (elm) {\\n        return is(elm, 'table') || isRoot(elm);\\n      };\\n      return ancestor$1(element, tags.join(','), isRootOrUpperTable);\\n    };\\n    var cell = function (element, isRoot) {\\n      return lookup([\\n        'td',\\n        'th'\\n      ], element, isRoot);\\n    };\\n    var cells = function (ancestor) {\\n      return LayerSelector.firstLayer(ancestor, 'th,td');\\n    };\\n    var notCell = function (element, isRoot) {\\n      return lookup([\\n        'caption',\\n        'tr',\\n        'tbody',\\n        'tfoot',\\n        'thead'\\n      ], element, isRoot);\\n    };\\n    var neighbours = function (selector, element) {\\n      return parent(element).map(function (parent) {\\n        return children$2(parent, selector);\\n      });\\n    };\\n    var neighbourCells = curry(neighbours, 'th,td');\\n    var neighbourRows = curry(neighbours, 'tr');\\n    var firstCell = function (ancestor) {\\n      return descendant$1(ancestor, 'th,td');\\n    };\\n    var table = function (element, isRoot) {\\n      return closest$1(element, 'table', isRoot);\\n    };\\n    var row = function (element, isRoot) {\\n      return lookup(['tr'], element, isRoot);\\n    };\\n    var rows = function (ancestor) {\\n      return LayerSelector.firstLayer(ancestor, 'tr');\\n    };\\n    var attr = function (element, property) {\\n      return parseInt(get(element, property), 10);\\n    };\\n    var grid$1 = function (element, rowProp, colProp) {\\n      var rowsCount = attr(element, rowProp);\\n      var cols = attr(element, colProp);\\n      return grid(rowsCount, cols);\\n    };\\n    var TableLookup = {\\n      cell: cell,\\n      firstCell: firstCell,\\n      cells: cells,\\n      neighbourCells: neighbourCells,\\n      table: table,\\n      row: row,\\n      rows: rows,\\n      notCell: notCell,\\n      neighbourRows: neighbourRows,\\n      attr: attr,\\n      grid: grid$1\\n    };\\n\\n    var fromTable = function (table) {\\n      var rows = TableLookup.rows(table);\\n      return map(rows, function (row) {\\n        var element = row;\\n        var parent$1 = parent(element);\\n        var parentSection = parent$1.map(function (p) {\\n          var parentName = name(p);\\n          return parentName === 'tfoot' || parentName === 'thead' || parentName === 'tbody' ? parentName : 'tbody';\\n        }).getOr('tbody');\\n        var cells = map(TableLookup.cells(row), function (cell) {\\n          var rowspan = has(cell, 'rowspan') ? parseInt(get(cell, 'rowspan'), 10) : 1;\\n          var colspan = has(cell, 'colspan') ? parseInt(get(cell, 'colspan'), 10) : 1;\\n          return detail(cell, rowspan, colspan);\\n        });\\n        return rowdata(element, cells, parentSection);\\n      });\\n    };\\n    var fromPastedRows = function (rows, example) {\\n      return map(rows, function (row) {\\n        var cells = map(TableLookup.cells(row), function (cell) {\\n          var rowspan = has(cell, 'rowspan') ? parseInt(get(cell, 'rowspan'), 10) : 1;\\n          var colspan = has(cell, 'colspan') ? parseInt(get(cell, 'colspan'), 10) : 1;\\n          return detail(cell, rowspan, colspan);\\n        });\\n        return rowdata(row, cells, example.section());\\n      });\\n    };\\n    var DetailsList = {\\n      fromTable: fromTable,\\n      fromPastedRows: fromPastedRows\\n    };\\n\\n    var key = function (row, column) {\\n      return row + ',' + column;\\n    };\\n    var getAt = function (warehouse, row, column) {\\n      var raw = warehouse.access()[key(row, column)];\\n      return raw !== undefined ? Option.some(raw) : Option.none();\\n    };\\n    var findItem = function (warehouse, item, comparator) {\\n      var filtered = filterItems(warehouse, function (detail) {\\n        return comparator(item, detail.element());\\n      });\\n      return filtered.length > 0 ? Option.some(filtered[0]) : Option.none();\\n    };\\n    var filterItems = function (warehouse, predicate) {\\n      var all = bind(warehouse.all(), function (r) {\\n        return r.cells();\\n      });\\n      return filter(all, predicate);\\n    };\\n    var generate = function (list) {\\n      var access = {};\\n      var cells = [];\\n      var maxRows = list.length;\\n      var maxColumns = 0;\\n      each(list, function (details, r) {\\n        var currentRow = [];\\n        each(details.cells(), function (detail) {\\n          var start = 0;\\n          while (access[key(r, start)] !== undefined) {\\n            start++;\\n          }\\n          var current = extended(detail.element(), detail.rowspan(), detail.colspan(), r, start);\\n          for (var i = 0; i < detail.colspan(); i++) {\\n            for (var j = 0; j < detail.rowspan(); j++) {\\n              var cr = r + j;\\n              var cc = start + i;\\n              var newpos = key(cr, cc);\\n              access[newpos] = current;\\n              maxColumns = Math.max(maxColumns, cc + 1);\\n            }\\n          }\\n          currentRow.push(current);\\n        });\\n        cells.push(rowdata(details.element(), currentRow, details.section()));\\n      });\\n      var grid$1 = grid(maxRows, maxColumns);\\n      return {\\n        grid: constant(grid$1),\\n        access: constant(access),\\n        all: constant(cells)\\n      };\\n    };\\n    var justCells = function (warehouse) {\\n      var rows = map(warehouse.all(), function (w) {\\n        return w.cells();\\n      });\\n      return flatten(rows);\\n    };\\n    var Warehouse = {\\n      generate: generate,\\n      getAt: getAt,\\n      findItem: findItem,\\n      filterItems: filterItems,\\n      justCells: justCells\\n    };\\n\\n    var statsStruct = Immutable('minRow', 'minCol', 'maxRow', 'maxCol');\\n    var findSelectedStats = function (house, isSelected) {\\n      var totalColumns = house.grid().columns();\\n      var totalRows = house.grid().rows();\\n      var minRow = totalRows;\\n      var minCol = totalColumns;\\n      var maxRow = 0;\\n      var maxCol = 0;\\n      each$1(house.access(), function (detail) {\\n        if (isSelected(detail)) {\\n          var startRow = detail.row();\\n          var endRow = startRow + detail.rowspan() - 1;\\n          var startCol = detail.column();\\n          var endCol = startCol + detail.colspan() - 1;\\n          if (startRow < minRow) {\\n            minRow = startRow;\\n          } else if (endRow > maxRow) {\\n            maxRow = endRow;\\n          }\\n          if (startCol < minCol) {\\n            minCol = startCol;\\n          } else if (endCol > maxCol) {\\n            maxCol = endCol;\\n          }\\n        }\\n      });\\n      return statsStruct(minRow, minCol, maxRow, maxCol);\\n    };\\n    var makeCell = function (list, seenSelected, rowIndex) {\\n      var row = list[rowIndex].element();\\n      var td = Element.fromTag('td');\\n      append(td, Element.fromTag('br'));\\n      var f = seenSelected ? append : prepend;\\n      f(row, td);\\n    };\\n    var fillInGaps = function (list, house, stats, isSelected) {\\n      var totalColumns = house.grid().columns();\\n      var totalRows = house.grid().rows();\\n      for (var i = 0; i < totalRows; i++) {\\n        var seenSelected = false;\\n        for (var j = 0; j < totalColumns; j++) {\\n          if (!(i < stats.minRow() || i > stats.maxRow() || j < stats.minCol() || j > stats.maxCol())) {\\n            var needCell = Warehouse.getAt(house, i, j).filter(isSelected).isNone();\\n            if (needCell) {\\n              makeCell(list, seenSelected, i);\\n            } else {\\n              seenSelected = true;\\n            }\\n          }\\n        }\\n      }\\n    };\\n    var clean = function (table, stats) {\\n      var emptyRows = filter(LayerSelector.firstLayer(table, 'tr'), function (row) {\\n        return row.dom().childElementCount === 0;\\n      });\\n      each(emptyRows, remove$2);\\n      if (stats.minCol() === stats.maxCol() || stats.minRow() === stats.maxRow()) {\\n        each(LayerSelector.firstLayer(table, 'th,td'), function (cell) {\\n          remove(cell, 'rowspan');\\n          remove(cell, 'colspan');\\n        });\\n      }\\n      remove(table, 'width');\\n      remove(table, 'height');\\n      remove$1(table, 'width');\\n      remove$1(table, 'height');\\n    };\\n    var extract = function (table, selectedSelector) {\\n      var isSelected = function (detail) {\\n        return is(detail.element(), selectedSelector);\\n      };\\n      var list = DetailsList.fromTable(table);\\n      var house = Warehouse.generate(list);\\n      var stats = findSelectedStats(house, isSelected);\\n      var selector = 'th:not(' + selectedSelector + ')' + ',td:not(' + selectedSelector + ')';\\n      var unselectedCells = LayerSelector.filterFirstLayer(table, 'th,td', function (cell) {\\n        return is(cell, selector);\\n      });\\n      each(unselectedCells, remove$2);\\n      fillInGaps(list, house, stats, isSelected);\\n      clean(table, stats);\\n      return table;\\n    };\\n    var CopySelected = { extract: extract };\\n\\n    function NodeValue (is, name) {\\n      var get = function (element) {\\n        if (!is(element)) {\\n          throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\\n        }\\n        return getOption(element).getOr('');\\n      };\\n      var getOption = function (element) {\\n        return is(element) ? Option.from(element.dom().nodeValue) : Option.none();\\n      };\\n      var set = function (element, value) {\\n        if (!is(element)) {\\n          throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\\n        }\\n        element.dom().nodeValue = value;\\n      };\\n      return {\\n        get: get,\\n        getOption: getOption,\\n        set: set\\n      };\\n    }\\n\\n    var api = NodeValue(isText, 'text');\\n    var get$2 = function (element) {\\n      return api.get(element);\\n    };\\n    var getOption = function (element) {\\n      return api.getOption(element);\\n    };\\n    var set$2 = function (element, value) {\\n      api.set(element, value);\\n    };\\n\\n    var getEnd = function (element) {\\n      return name(element) === 'img' ? 1 : getOption(element).fold(function () {\\n        return children(element).length;\\n      }, function (v) {\\n        return v.length;\\n      });\\n    };\\n    var NBSP = '\\\\xA0';\\n    var isTextNodeWithCursorPosition = function (el) {\\n      return getOption(el).filter(function (text) {\\n        return text.trim().length !== 0 || text.indexOf(NBSP) > -1;\\n      }).isSome();\\n    };\\n    var elementsWithCursorPosition = [\\n      'img',\\n      'br'\\n    ];\\n    var isCursorPosition = function (elem) {\\n      var hasCursorPosition = isTextNodeWithCursorPosition(elem);\\n      return hasCursorPosition || contains(elementsWithCursorPosition, name(elem));\\n    };\\n\\n    var first = function (element) {\\n      return descendant(element, isCursorPosition);\\n    };\\n    var last$1 = function (element) {\\n      return descendantRtl(element, isCursorPosition);\\n    };\\n    var descendantRtl = function (scope, predicate) {\\n      var descend = function (element) {\\n        var children$1 = children(element);\\n        for (var i = children$1.length - 1; i >= 0; i--) {\\n          var child = children$1[i];\\n          if (predicate(child)) {\\n            return Option.some(child);\\n          }\\n          var res = descend(child);\\n          if (res.isSome()) {\\n            return res;\\n          }\\n        }\\n        return Option.none();\\n      };\\n      return descend(scope);\\n    };\\n\\n    var clone$1 = function (original, isDeep) {\\n      return Element.fromDom(original.dom().cloneNode(isDeep));\\n    };\\n    var shallow = function (original) {\\n      return clone$1(original, false);\\n    };\\n    var deep = function (original) {\\n      return clone$1(original, true);\\n    };\\n    var shallowAs = function (original, tag) {\\n      var nu = Element.fromTag(tag);\\n      var attributes = clone(original);\\n      setAll(nu, attributes);\\n      return nu;\\n    };\\n    var copy$1 = function (original, tag) {\\n      var nu = shallowAs(original, tag);\\n      var cloneChildren = children(deep(original));\\n      append$1(nu, cloneChildren);\\n      return nu;\\n    };\\n\\n    var createCell = function () {\\n      var td = Element.fromTag('td');\\n      append(td, Element.fromTag('br'));\\n      return td;\\n    };\\n    var replace = function (cell, tag, attrs) {\\n      var replica = copy$1(cell, tag);\\n      each$1(attrs, function (v, k) {\\n        if (v === null) {\\n          remove(replica, k);\\n        } else {\\n          set(replica, k, v);\\n        }\\n      });\\n      return replica;\\n    };\\n    var pasteReplace = function (cell) {\\n      return cell;\\n    };\\n    var newRow = function (doc) {\\n      return function () {\\n        return Element.fromTag('tr', doc.dom());\\n      };\\n    };\\n    var cloneFormats = function (oldCell, newCell, formats) {\\n      var first$1 = first(oldCell);\\n      return first$1.map(function (firstText) {\\n        var formatSelector = formats.join(',');\\n        var parents = ancestors$1(firstText, formatSelector, function (element) {\\n          return eq(element, oldCell);\\n        });\\n        return foldr(parents, function (last, parent) {\\n          var clonedFormat = shallow(parent);\\n          remove(clonedFormat, 'contenteditable');\\n          append(last, clonedFormat);\\n          return clonedFormat;\\n        }, newCell);\\n      }).getOr(newCell);\\n    };\\n    var cellOperations = function (mutate, doc, formatsToClone) {\\n      var newCell = function (prev) {\\n        var docu = owner(prev.element());\\n        var td = Element.fromTag(name(prev.element()), docu.dom());\\n        var formats = formatsToClone.getOr([\\n          'strong',\\n          'em',\\n          'b',\\n          'i',\\n          'span',\\n          'font',\\n          'h1',\\n          'h2',\\n          'h3',\\n          'h4',\\n          'h5',\\n          'h6',\\n          'p',\\n          'div'\\n        ]);\\n        var lastNode = formats.length > 0 ? cloneFormats(prev.element(), td, formats) : td;\\n        append(lastNode, Element.fromTag('br'));\\n        copy(prev.element(), td);\\n        remove$1(td, 'height');\\n        if (prev.colspan() !== 1) {\\n          remove$1(prev.element(), 'width');\\n        }\\n        mutate(prev.element(), td);\\n        return td;\\n      };\\n      return {\\n        row: newRow(doc),\\n        cell: newCell,\\n        replace: replace,\\n        gap: createCell\\n      };\\n    };\\n    var paste = function (doc) {\\n      return {\\n        row: newRow(doc),\\n        cell: createCell,\\n        replace: pasteReplace,\\n        gap: createCell\\n      };\\n    };\\n    var TableFill = {\\n      cellOperations: cellOperations,\\n      paste: paste\\n    };\\n\\n    var fromHtml$1 = function (html, scope) {\\n      var doc = scope || domGlobals.document;\\n      var div = doc.createElement('div');\\n      div.innerHTML = html;\\n      return children(Element.fromDom(div));\\n    };\\n\\n    var inSelection = function (bounds, detail) {\\n      var leftEdge = detail.column();\\n      var rightEdge = detail.column() + detail.colspan() - 1;\\n      var topEdge = detail.row();\\n      var bottomEdge = detail.row() + detail.rowspan() - 1;\\n      return leftEdge <= bounds.finishCol() && rightEdge >= bounds.startCol() && (topEdge <= bounds.finishRow() && bottomEdge >= bounds.startRow());\\n    };\\n    var isWithin = function (bounds, detail) {\\n      return detail.column() >= bounds.startCol() && detail.column() + detail.colspan() - 1 <= bounds.finishCol() && detail.row() >= bounds.startRow() && detail.row() + detail.rowspan() - 1 <= bounds.finishRow();\\n    };\\n    var isRectangular = function (warehouse, bounds) {\\n      var isRect = true;\\n      var detailIsWithin = curry(isWithin, bounds);\\n      for (var i = bounds.startRow(); i <= bounds.finishRow(); i++) {\\n        for (var j = bounds.startCol(); j <= bounds.finishCol(); j++) {\\n          isRect = isRect && Warehouse.getAt(warehouse, i, j).exists(detailIsWithin);\\n        }\\n      }\\n      return isRect ? Option.some(bounds) : Option.none();\\n    };\\n    var CellBounds = {\\n      inSelection: inSelection,\\n      isWithin: isWithin,\\n      isRectangular: isRectangular\\n    };\\n\\n    var getBounds = function (detailA, detailB) {\\n      return bounds(Math.min(detailA.row(), detailB.row()), Math.min(detailA.column(), detailB.column()), Math.max(detailA.row() + detailA.rowspan() - 1, detailB.row() + detailB.rowspan() - 1), Math.max(detailA.column() + detailA.colspan() - 1, detailB.column() + detailB.colspan() - 1));\\n    };\\n    var getAnyBox = function (warehouse, startCell, finishCell) {\\n      var startCoords = Warehouse.findItem(warehouse, startCell, eq);\\n      var finishCoords = Warehouse.findItem(warehouse, finishCell, eq);\\n      return startCoords.bind(function (sc) {\\n        return finishCoords.map(function (fc) {\\n          return getBounds(sc, fc);\\n        });\\n      });\\n    };\\n    var getBox = function (warehouse, startCell, finishCell) {\\n      return getAnyBox(warehouse, startCell, finishCell).bind(function (bounds) {\\n        return CellBounds.isRectangular(warehouse, bounds);\\n      });\\n    };\\n    var CellGroup = {\\n      getAnyBox: getAnyBox,\\n      getBox: getBox\\n    };\\n\\n    var moveBy = function (warehouse, cell, row, column) {\\n      return Warehouse.findItem(warehouse, cell, eq).bind(function (detail) {\\n        var startRow = row > 0 ? detail.row() + detail.rowspan() - 1 : detail.row();\\n        var startCol = column > 0 ? detail.column() + detail.colspan() - 1 : detail.column();\\n        var dest = Warehouse.getAt(warehouse, startRow + row, startCol + column);\\n        return dest.map(function (d) {\\n          return d.element();\\n        });\\n      });\\n    };\\n    var intercepts = function (warehouse, start, finish) {\\n      return CellGroup.getAnyBox(warehouse, start, finish).map(function (bounds) {\\n        var inside = Warehouse.filterItems(warehouse, curry(CellBounds.inSelection, bounds));\\n        return map(inside, function (detail) {\\n          return detail.element();\\n        });\\n      });\\n    };\\n    var parentCell = function (warehouse, innerCell) {\\n      var isContainedBy = function (c1, c2) {\\n        return contains$2(c2, c1);\\n      };\\n      return Warehouse.findItem(warehouse, innerCell, isContainedBy).map(function (detail) {\\n        return detail.element();\\n      });\\n    };\\n    var CellFinder = {\\n      moveBy: moveBy,\\n      intercepts: intercepts,\\n      parentCell: parentCell\\n    };\\n\\n    var moveBy$1 = function (cell, deltaRow, deltaColumn) {\\n      return TableLookup.table(cell).bind(function (table) {\\n        var warehouse = getWarehouse(table);\\n        return CellFinder.moveBy(warehouse, cell, deltaRow, deltaColumn);\\n      });\\n    };\\n    var intercepts$1 = function (table, first, last) {\\n      var warehouse = getWarehouse(table);\\n      return CellFinder.intercepts(warehouse, first, last);\\n    };\\n    var nestedIntercepts = function (table, first, firstTable, last, lastTable) {\\n      var warehouse = getWarehouse(table);\\n      var optStartCell = eq(table, firstTable) ? Option.some(first) : CellFinder.parentCell(warehouse, first);\\n      var optLastCell = eq(table, lastTable) ? Option.some(last) : CellFinder.parentCell(warehouse, last);\\n      return optStartCell.bind(function (startCell) {\\n        return optLastCell.bind(function (lastCell) {\\n          return CellFinder.intercepts(warehouse, startCell, lastCell);\\n        });\\n      });\\n    };\\n    var getBox$1 = function (table, first, last) {\\n      var warehouse = getWarehouse(table);\\n      return CellGroup.getBox(warehouse, first, last);\\n    };\\n    var getWarehouse = function (table) {\\n      var list = DetailsList.fromTable(table);\\n      return Warehouse.generate(list);\\n    };\\n    var TablePositions = {\\n      moveBy: moveBy$1,\\n      intercepts: intercepts$1,\\n      nestedIntercepts: nestedIntercepts,\\n      getBox: getBox$1\\n    };\\n\\n    var TagBoundaries = [\\n      'body',\\n      'p',\\n      'div',\\n      'article',\\n      'aside',\\n      'figcaption',\\n      'figure',\\n      'footer',\\n      'header',\\n      'nav',\\n      'section',\\n      'ol',\\n      'ul',\\n      'li',\\n      'table',\\n      'thead',\\n      'tbody',\\n      'tfoot',\\n      'caption',\\n      'tr',\\n      'td',\\n      'th',\\n      'h1',\\n      'h2',\\n      'h3',\\n      'h4',\\n      'h5',\\n      'h6',\\n      'blockquote',\\n      'pre',\\n      'address'\\n    ];\\n\\n    function DomUniverse () {\\n      var clone$1 = function (element) {\\n        return Element.fromDom(element.dom().cloneNode(false));\\n      };\\n      var document = function (element) {\\n        return element.dom().ownerDocument;\\n      };\\n      var isBoundary = function (element) {\\n        if (!isElement(element)) {\\n          return false;\\n        }\\n        if (name(element) === 'body') {\\n          return true;\\n        }\\n        return contains(TagBoundaries, name(element));\\n      };\\n      var isEmptyTag = function (element) {\\n        if (!isElement(element)) {\\n          return false;\\n        }\\n        return contains([\\n          'br',\\n          'img',\\n          'hr',\\n          'input'\\n        ], name(element));\\n      };\\n      var comparePosition = function (element, other) {\\n        return element.dom().compareDocumentPosition(other.dom());\\n      };\\n      var copyAttributesTo = function (source, destination) {\\n        var as = clone(source);\\n        setAll(destination, as);\\n      };\\n      return {\\n        up: constant({\\n          selector: ancestor$1,\\n          closest: closest$1,\\n          predicate: ancestor,\\n          all: parents\\n        }),\\n        down: constant({\\n          selector: descendants$1,\\n          predicate: descendants\\n        }),\\n        styles: constant({\\n          get: get$1,\\n          getRaw: getRaw,\\n          set: set$1,\\n          remove: remove$1\\n        }),\\n        attrs: constant({\\n          get: get,\\n          set: set,\\n          remove: remove,\\n          copyTo: copyAttributesTo\\n        }),\\n        insert: constant({\\n          before: before,\\n          after: after,\\n          afterAll: after$1,\\n          append: append,\\n          appendAll: append$1,\\n          prepend: prepend,\\n          wrap: wrap\\n        }),\\n        remove: constant({\\n          unwrap: unwrap,\\n          remove: remove$2\\n        }),\\n        create: constant({\\n          nu: Element.fromTag,\\n          clone: clone$1,\\n          text: Element.fromText\\n        }),\\n        query: constant({\\n          comparePosition: comparePosition,\\n          prevSibling: prevSibling,\\n          nextSibling: nextSibling\\n        }),\\n        property: constant({\\n          children: children,\\n          name: name,\\n          parent: parent,\\n          document: document,\\n          isText: isText,\\n          isComment: isComment,\\n          isElement: isElement,\\n          getText: get$2,\\n          setText: set$2,\\n          isBoundary: isBoundary,\\n          isEmptyTag: isEmptyTag\\n        }),\\n        eq: eq,\\n        is: is$1\\n      };\\n    }\\n\\n    var leftRight = Immutable('left', 'right');\\n    var brokenPath = Immutable('first', 'second', 'splits');\\n    var bisect = function (universe, parent, child) {\\n      var children = universe.property().children(parent);\\n      var index = findIndex(children, curry(universe.eq, child));\\n      return index.map(function (ind) {\\n        return {\\n          before: constant(children.slice(0, ind)),\\n          after: constant(children.slice(ind + 1))\\n        };\\n      });\\n    };\\n    var breakToRight = function (universe, parent, child) {\\n      return bisect(universe, parent, child).map(function (parts) {\\n        var second = universe.create().clone(parent);\\n        universe.insert().appendAll(second, parts.after());\\n        universe.insert().after(parent, second);\\n        return leftRight(parent, second);\\n      });\\n    };\\n    var breakToLeft = function (universe, parent, child) {\\n      return bisect(universe, parent, child).map(function (parts) {\\n        var prior = universe.create().clone(parent);\\n        universe.insert().appendAll(prior, parts.before().concat([child]));\\n        universe.insert().appendAll(parent, parts.after());\\n        universe.insert().before(parent, prior);\\n        return leftRight(prior, parent);\\n      });\\n    };\\n    var breakPath = function (universe, item, isTop, breaker) {\\n      var next = function (child, group, splits) {\\n        var fallback = brokenPath(child, Option.none(), splits);\\n        if (isTop(child)) {\\n          return brokenPath(child, group, splits);\\n        } else {\\n          return universe.property().parent(child).bind(function (parent) {\\n            return breaker(universe, parent, child).map(function (breakage) {\\n              var extra = [{\\n                  first: breakage.left,\\n                  second: breakage.right\\n                }];\\n              var nextChild = isTop(parent) ? parent : breakage.left();\\n              return next(nextChild, Option.some(breakage.right()), splits.concat(extra));\\n            });\\n          }).getOr(fallback);\\n        }\\n      };\\n      return next(item, Option.none(), []);\\n    };\\n\\n    var all$1 = function (universe, look, elements, f) {\\n      var head = elements[0];\\n      var tail = elements.slice(1);\\n      return f(universe, look, head, tail);\\n    };\\n    var oneAll = function (universe, look, elements) {\\n      return elements.length > 0 ? all$1(universe, look, elements, unsafeOne) : Option.none();\\n    };\\n    var unsafeOne = function (universe, look, head, tail) {\\n      var start = look(universe, head);\\n      return foldr(tail, function (b, a) {\\n        var current = look(universe, a);\\n        return commonElement(universe, b, current);\\n      }, start);\\n    };\\n    var commonElement = function (universe, start, end) {\\n      return start.bind(function (s) {\\n        return end.filter(curry(universe.eq, s));\\n      });\\n    };\\n\\n    var eq$1 = function (universe, item) {\\n      return curry(universe.eq, item);\\n    };\\n    var unsafeSubset = function (universe, common, ps1, ps2) {\\n      var children = universe.property().children(common);\\n      if (universe.eq(common, ps1[0])) {\\n        return Option.some([ps1[0]]);\\n      }\\n      if (universe.eq(common, ps2[0])) {\\n        return Option.some([ps2[0]]);\\n      }\\n      var finder = function (ps) {\\n        var topDown = reverse(ps);\\n        var index = findIndex(topDown, eq$1(universe, common)).getOr(-1);\\n        var item = index < topDown.length - 1 ? topDown[index + 1] : topDown[index];\\n        return findIndex(children, eq$1(universe, item));\\n      };\\n      var startIndex = finder(ps1);\\n      var endIndex = finder(ps2);\\n      return startIndex.bind(function (sIndex) {\\n        return endIndex.map(function (eIndex) {\\n          var first = Math.min(sIndex, eIndex);\\n          var last = Math.max(sIndex, eIndex);\\n          return children.slice(first, last + 1);\\n        });\\n      });\\n    };\\n    var ancestors$2 = function (universe, start, end, isRoot) {\\n      if (isRoot === void 0) {\\n        isRoot = never;\\n      }\\n      var ps1 = [start].concat(universe.up().all(start));\\n      var ps2 = [end].concat(universe.up().all(end));\\n      var prune = function (path) {\\n        var index = findIndex(path, isRoot);\\n        return index.fold(function () {\\n          return path;\\n        }, function (ind) {\\n          return path.slice(0, ind + 1);\\n        });\\n      };\\n      var pruned1 = prune(ps1);\\n      var pruned2 = prune(ps2);\\n      var shared = find(pruned1, function (x) {\\n        return exists(pruned2, eq$1(universe, x));\\n      });\\n      return {\\n        firstpath: constant(pruned1),\\n        secondpath: constant(pruned2),\\n        shared: constant(shared)\\n      };\\n    };\\n    var subset = function (universe, start, end) {\\n      var ancs = ancestors$2(universe, start, end);\\n      return ancs.shared().bind(function (shared) {\\n        return unsafeSubset(universe, shared, ancs.firstpath(), ancs.secondpath());\\n      });\\n    };\\n    var SubsetFn = {\\n      subset: subset,\\n      ancestors: ancestors$2\\n    };\\n\\n    var sharedOne = oneAll;\\n    var subset$1 = SubsetFn.subset;\\n    var ancestors$3 = SubsetFn.ancestors;\\n    var breakToLeft$1 = breakToLeft;\\n    var breakToRight$1 = breakToRight;\\n    var breakPath$1 = breakPath;\\n    var Parent = {\\n      sharedOne: sharedOne,\\n      subset: subset$1,\\n      ancestors: ancestors$3,\\n      breakToLeft: breakToLeft$1,\\n      breakToRight: breakToRight$1,\\n      breakPath: breakPath$1\\n    };\\n\\n    var universe = DomUniverse();\\n    var sharedOne$1 = function (look, elements) {\\n      return Parent.sharedOne(universe, function (_universe, element) {\\n        return look(element);\\n      }, elements);\\n    };\\n    var subset$2 = function (start, finish) {\\n      return Parent.subset(universe, start, finish);\\n    };\\n    var ancestors$4 = function (start, finish, isRoot) {\\n      return Parent.ancestors(universe, start, finish, isRoot);\\n    };\\n    var breakToLeft$2 = function (parent, child) {\\n      return Parent.breakToLeft(universe, parent, child);\\n    };\\n    var breakToRight$2 = function (parent, child) {\\n      return Parent.breakToRight(universe, parent, child);\\n    };\\n    var breakPath$2 = function (child, isTop, breaker) {\\n      return Parent.breakPath(universe, child, isTop, function (u, p, c) {\\n        return breaker(p, c);\\n      });\\n    };\\n    var DomParent = {\\n      sharedOne: sharedOne$1,\\n      subset: subset$2,\\n      ancestors: ancestors$4,\\n      breakToLeft: breakToLeft$2,\\n      breakToRight: breakToRight$2,\\n      breakPath: breakPath$2\\n    };\\n\\n    var create = MixedBag([\\n      'boxes',\\n      'start',\\n      'finish'\\n    ], []);\\n    var Identified = { create: create };\\n\\n    var lookupTable = function (container) {\\n      return ancestor$1(container, 'table');\\n    };\\n    var identify = function (start, finish, isRoot) {\\n      var getIsRoot = function (rootTable) {\\n        return function (element) {\\n          return isRoot !== undefined && isRoot(element) || eq(element, rootTable);\\n        };\\n      };\\n      if (eq(start, finish)) {\\n        return Option.some(Identified.create({\\n          boxes: Option.some([start]),\\n          start: start,\\n          finish: finish\\n        }));\\n      } else {\\n        return lookupTable(start).bind(function (startTable) {\\n          return lookupTable(finish).bind(function (finishTable) {\\n            if (eq(startTable, finishTable)) {\\n              return Option.some(Identified.create({\\n                boxes: TablePositions.intercepts(startTable, start, finish),\\n                start: start,\\n                finish: finish\\n              }));\\n            } else if (contains$2(startTable, finishTable)) {\\n              var ancestorCells = ancestors$1(finish, 'td,th', getIsRoot(startTable));\\n              var finishCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : finish;\\n              return Option.some(Identified.create({\\n                boxes: TablePositions.nestedIntercepts(startTable, start, startTable, finish, finishTable),\\n                start: start,\\n                finish: finishCell\\n              }));\\n            } else if (contains$2(finishTable, startTable)) {\\n              var ancestorCells = ancestors$1(start, 'td,th', getIsRoot(finishTable));\\n              var startCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : start;\\n              return Option.some(Identified.create({\\n                boxes: TablePositions.nestedIntercepts(finishTable, start, startTable, finish, finishTable),\\n                start: start,\\n                finish: startCell\\n              }));\\n            } else {\\n              return DomParent.ancestors(start, finish).shared().bind(function (lca) {\\n                return closest$1(lca, 'table', isRoot).bind(function (lcaTable) {\\n                  var finishAncestorCells = ancestors$1(finish, 'td,th', getIsRoot(lcaTable));\\n                  var finishCell = finishAncestorCells.length > 0 ? finishAncestorCells[finishAncestorCells.length - 1] : finish;\\n                  var startAncestorCells = ancestors$1(start, 'td,th', getIsRoot(lcaTable));\\n                  var startCell = startAncestorCells.length > 0 ? startAncestorCells[startAncestorCells.length - 1] : start;\\n                  return Option.some(Identified.create({\\n                    boxes: TablePositions.nestedIntercepts(lcaTable, start, startTable, finish, finishTable),\\n                    start: startCell,\\n                    finish: finishCell\\n                  }));\\n                });\\n              });\\n            }\\n          });\\n        });\\n      }\\n    };\\n    var retrieve = function (container, selector) {\\n      var sels = descendants$1(container, selector);\\n      return sels.length > 0 ? Option.some(sels) : Option.none();\\n    };\\n    var getLast = function (boxes, lastSelectedSelector) {\\n      return find(boxes, function (box) {\\n        return is(box, lastSelectedSelector);\\n      });\\n    };\\n    var getEdges = function (container, firstSelectedSelector, lastSelectedSelector) {\\n      return descendant$1(container, firstSelectedSelector).bind(function (first) {\\n        return descendant$1(container, lastSelectedSelector).bind(function (last) {\\n          return DomParent.sharedOne(lookupTable, [\\n            first,\\n            last\\n          ]).map(function (tbl) {\\n            return {\\n              first: constant(first),\\n              last: constant(last),\\n              table: constant(tbl)\\n            };\\n          });\\n        });\\n      });\\n    };\\n    var expandTo = function (finish, firstSelectedSelector) {\\n      return ancestor$1(finish, 'table').bind(function (table) {\\n        return descendant$1(table, firstSelectedSelector).bind(function (start) {\\n          return identify(start, finish).bind(function (identified) {\\n            return identified.boxes().map(function (boxes) {\\n              return {\\n                boxes: constant(boxes),\\n                start: constant(identified.start()),\\n                finish: constant(identified.finish())\\n              };\\n            });\\n          });\\n        });\\n      });\\n    };\\n    var shiftSelection = function (boxes, deltaRow, deltaColumn, firstSelectedSelector, lastSelectedSelector) {\\n      return getLast(boxes, lastSelectedSelector).bind(function (last) {\\n        return TablePositions.moveBy(last, deltaRow, deltaColumn).bind(function (finish) {\\n          return expandTo(finish, firstSelectedSelector);\\n        });\\n      });\\n    };\\n    var CellSelection = {\\n      identify: identify,\\n      retrieve: retrieve,\\n      shiftSelection: shiftSelection,\\n      getEdges: getEdges\\n    };\\n\\n    var retrieve$1 = function (container, selector) {\\n      return CellSelection.retrieve(container, selector);\\n    };\\n    var retrieveBox = function (container, firstSelectedSelector, lastSelectedSelector) {\\n      return CellSelection.getEdges(container, firstSelectedSelector, lastSelectedSelector).bind(function (edges) {\\n        var isRoot = function (ancestor) {\\n          return eq(container, ancestor);\\n        };\\n        var firstAncestor = ancestor$1(edges.first(), 'thead,tfoot,tbody,table', isRoot);\\n        var lastAncestor = ancestor$1(edges.last(), 'thead,tfoot,tbody,table', isRoot);\\n        return firstAncestor.bind(function (fA) {\\n          return lastAncestor.bind(function (lA) {\\n            return eq(fA, lA) ? TablePositions.getBox(edges.table(), edges.first(), edges.last()) : Option.none();\\n          });\\n        });\\n      });\\n    };\\n    var TableSelection = {\\n      retrieve: retrieve$1,\\n      retrieveBox: retrieveBox\\n    };\\n\\n    var selected = 'data-mce-selected';\\n    var selectedSelector = 'td[' + selected + '],th[' + selected + ']';\\n    var attributeSelector = '[' + selected + ']';\\n    var firstSelected = 'data-mce-first-selected';\\n    var firstSelectedSelector = 'td[' + firstSelected + '],th[' + firstSelected + ']';\\n    var lastSelected = 'data-mce-last-selected';\\n    var lastSelectedSelector = 'td[' + lastSelected + '],th[' + lastSelected + ']';\\n    var Ephemera = {\\n      selected: constant(selected),\\n      selectedSelector: constant(selectedSelector),\\n      attributeSelector: constant(attributeSelector),\\n      firstSelected: constant(firstSelected),\\n      firstSelectedSelector: constant(firstSelectedSelector),\\n      lastSelected: constant(lastSelected),\\n      lastSelectedSelector: constant(lastSelectedSelector)\\n    };\\n\\n    var generate$1 = function (cases) {\\n      if (!isArray(cases)) {\\n        throw new Error('cases must be an array');\\n      }\\n      if (cases.length === 0) {\\n        throw new Error('there must be at least one case');\\n      }\\n      var constructors = [];\\n      var adt = {};\\n      each(cases, function (acase, count) {\\n        var keys$1 = keys(acase);\\n        if (keys$1.length !== 1) {\\n          throw new Error('one and only one name per case');\\n        }\\n        var key = keys$1[0];\\n        var value = acase[key];\\n        if (adt[key] !== undefined) {\\n          throw new Error('duplicate key detected:' + key);\\n        } else if (key === 'cata') {\\n          throw new Error('cannot have a case named cata (sorry)');\\n        } else if (!isArray(value)) {\\n          throw new Error('case arguments must be an array');\\n        }\\n        constructors.push(key);\\n        adt[key] = function () {\\n          var argLength = arguments.length;\\n          if (argLength !== value.length) {\\n            throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\\n          }\\n          var args = new Array(argLength);\\n          for (var i = 0; i < args.length; i++) {\\n            args[i] = arguments[i];\\n          }\\n          var match = function (branches) {\\n            var branchKeys = keys(branches);\\n            if (constructors.length !== branchKeys.length) {\\n              throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\\\nActual: ' + branchKeys.join(','));\\n            }\\n            var allReqd = forall(constructors, function (reqKey) {\\n              return contains(branchKeys, reqKey);\\n            });\\n            if (!allReqd) {\\n              throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\\\nRequired: ' + constructors.join(', '));\\n            }\\n            return branches[key].apply(null, args);\\n          };\\n          return {\\n            fold: function () {\\n              if (arguments.length !== cases.length) {\\n                throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + arguments.length);\\n              }\\n              var target = arguments[count];\\n              return target.apply(null, args);\\n            },\\n            match: match,\\n            log: function (label) {\\n              domGlobals.console.log(label, {\\n                constructors: constructors,\\n                constructor: key,\\n                params: args\\n              });\\n            }\\n          };\\n        };\\n      });\\n      return adt;\\n    };\\n    var Adt = { generate: generate$1 };\\n\\n    var type$1 = Adt.generate([\\n      { none: [] },\\n      { multiple: ['elements'] },\\n      { single: ['selection'] }\\n    ]);\\n    var cata = function (subject, onNone, onMultiple, onSingle) {\\n      return subject.fold(onNone, onMultiple, onSingle);\\n    };\\n    var SelectionTypes = {\\n      cata: cata,\\n      none: type$1.none,\\n      multiple: type$1.multiple,\\n      single: type$1.single\\n    };\\n\\n    var selection = function (cell, selections) {\\n      return SelectionTypes.cata(selections.get(), constant([]), identity, constant([cell]));\\n    };\\n    var unmergable = function (cell, selections) {\\n      var hasSpan = function (elem) {\\n        return has(elem, 'rowspan') && parseInt(get(elem, 'rowspan'), 10) > 1 || has(elem, 'colspan') && parseInt(get(elem, 'colspan'), 10) > 1;\\n      };\\n      var candidates = selection(cell, selections);\\n      return candidates.length > 0 && forall(candidates, hasSpan) ? Option.some(candidates) : Option.none();\\n    };\\n    var mergable = function (table, selections) {\\n      return SelectionTypes.cata(selections.get(), Option.none, function (cells, _env) {\\n        if (cells.length === 0) {\\n          return Option.none();\\n        }\\n        return TableSelection.retrieveBox(table, Ephemera.firstSelectedSelector(), Ephemera.lastSelectedSelector()).bind(function (bounds) {\\n          return cells.length > 1 ? Option.some({\\n            bounds: constant(bounds),\\n            cells: constant(cells)\\n          }) : Option.none();\\n        });\\n      }, Option.none);\\n    };\\n    var CellOperations = {\\n      mergable: mergable,\\n      unmergable: unmergable,\\n      selection: selection\\n    };\\n\\n    var noMenu = function (cell) {\\n      return {\\n        element: constant(cell),\\n        mergable: Option.none,\\n        unmergable: Option.none,\\n        selection: constant([cell])\\n      };\\n    };\\n    var forMenu = function (selections, table, cell) {\\n      return {\\n        element: constant(cell),\\n        mergable: constant(CellOperations.mergable(table, selections)),\\n        unmergable: constant(CellOperations.unmergable(cell, selections)),\\n        selection: constant(CellOperations.selection(cell, selections))\\n      };\\n    };\\n    var notCell$1 = function (element) {\\n      return noMenu(element);\\n    };\\n    var paste$1 = Immutable('element', 'clipboard', 'generators');\\n    var pasteRows = function (selections, table, cell, clipboard, generators) {\\n      return {\\n        element: constant(cell),\\n        mergable: Option.none,\\n        unmergable: Option.none,\\n        selection: constant(CellOperations.selection(cell, selections)),\\n        clipboard: constant(clipboard),\\n        generators: constant(generators)\\n      };\\n    };\\n    var TableTargets = {\\n      noMenu: noMenu,\\n      forMenu: forMenu,\\n      notCell: notCell$1,\\n      paste: paste$1,\\n      pasteRows: pasteRows\\n    };\\n\\n    var extractSelected = function (cells) {\\n      return TableLookup.table(cells[0]).map(deep).map(function (replica) {\\n        return [CopySelected.extract(replica, Ephemera.attributeSelector())];\\n      });\\n    };\\n    var serializeElements = function (editor, elements) {\\n      return map(elements, function (elm) {\\n        return editor.selection.serializer.serialize(elm.dom(), {});\\n      }).join('');\\n    };\\n    var getTextContent = function (elements) {\\n      return map(elements, function (element) {\\n        return element.dom().innerText;\\n      }).join('');\\n    };\\n    var registerEvents = function (editor, selections, actions, cellSelection) {\\n      editor.on('BeforeGetContent', function (e) {\\n        var multiCellContext = function (cells) {\\n          e.preventDefault();\\n          extractSelected(cells).each(function (elements) {\\n            e.content = e.format === 'text' ? getTextContent(elements) : serializeElements(editor, elements);\\n          });\\n        };\\n        if (e.selection === true) {\\n          SelectionTypes.cata(selections.get(), noop, multiCellContext, noop);\\n        }\\n      });\\n      editor.on('BeforeSetContent', function (e) {\\n        if (e.selection === true && e.paste === true) {\\n          var cellOpt = Option.from(editor.dom.getParent(editor.selection.getStart(), 'th,td'));\\n          cellOpt.each(function (domCell) {\\n            var cell = Element.fromDom(domCell);\\n            TableLookup.table(cell).each(function (table) {\\n              var elements = filter(fromHtml$1(e.content), function (content) {\\n                return name(content) !== 'meta';\\n              });\\n              if (elements.length === 1 && name(elements[0]) === 'table') {\\n                e.preventDefault();\\n                var doc = Element.fromDom(editor.getDoc());\\n                var generators = TableFill.paste(doc);\\n                var targets = TableTargets.paste(cell, elements[0], generators);\\n                actions.pasteCells(table, targets).each(function (rng) {\\n                  editor.selection.setRng(rng);\\n                  editor.focus();\\n                  cellSelection.clear(table);\\n                });\\n              }\\n            });\\n          });\\n        }\\n      });\\n    };\\n    var Clipboard = { registerEvents: registerEvents };\\n\\n    function Dimension (name, getOffset) {\\n      var set = function (element, h) {\\n        if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\\n          throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\\n        }\\n        var dom = element.dom();\\n        if (isSupported(dom)) {\\n          dom.style[name] = h + 'px';\\n        }\\n      };\\n      var get = function (element) {\\n        var r = getOffset(element);\\n        if (r <= 0 || r === null) {\\n          var css = get$1(element, name);\\n          return parseFloat(css) || 0;\\n        }\\n        return r;\\n      };\\n      var getOuter = get;\\n      var aggregate = function (element, properties) {\\n        return foldl(properties, function (acc, property) {\\n          var val = get$1(element, property);\\n          var value = val === undefined ? 0 : parseInt(val, 10);\\n          return isNaN(value) ? acc : acc + value;\\n        }, 0);\\n      };\\n      var max = function (element, value, properties) {\\n        var cumulativeInclusions = aggregate(element, properties);\\n        var absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\\n        return absoluteMax;\\n      };\\n      return {\\n        set: set,\\n        get: get,\\n        getOuter: getOuter,\\n        aggregate: aggregate,\\n        max: max\\n      };\\n    }\\n\\n    var api$1 = Dimension('height', function (element) {\\n      var dom = element.dom();\\n      return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\\n    });\\n    var get$3 = function (element) {\\n      return api$1.get(element);\\n    };\\n    var getOuter = function (element) {\\n      return api$1.getOuter(element);\\n    };\\n\\n    var api$2 = Dimension('width', function (element) {\\n      return element.dom().offsetWidth;\\n    });\\n    var get$4 = function (element) {\\n      return api$2.get(element);\\n    };\\n    var getOuter$1 = function (element) {\\n      return api$2.getOuter(element);\\n    };\\n\\n    var platform = PlatformDetection$1.detect();\\n    var needManualCalc = function () {\\n      return platform.browser.isIE() || platform.browser.isEdge();\\n    };\\n    var toNumber = function (px, fallback) {\\n      var num = parseFloat(px);\\n      return isNaN(num) ? fallback : num;\\n    };\\n    var getProp = function (elm, name, fallback) {\\n      return toNumber(get$1(elm, name), fallback);\\n    };\\n    var getCalculatedHeight = function (cell) {\\n      var paddingTop = getProp(cell, 'padding-top', 0);\\n      var paddingBottom = getProp(cell, 'padding-bottom', 0);\\n      var borderTop = getProp(cell, 'border-top-width', 0);\\n      var borderBottom = getProp(cell, 'border-bottom-width', 0);\\n      var height = cell.dom().getBoundingClientRect().height;\\n      var boxSizing = get$1(cell, 'box-sizing');\\n      var borders = borderTop + borderBottom;\\n      return boxSizing === 'border-box' ? height : height - paddingTop - paddingBottom - borders;\\n    };\\n    var getWidth = function (cell) {\\n      return getProp(cell, 'width', get$4(cell));\\n    };\\n    var getHeight = function (cell) {\\n      return needManualCalc() ? getCalculatedHeight(cell) : getProp(cell, 'height', get$3(cell));\\n    };\\n    var RuntimeSize = {\\n      getWidth: getWidth,\\n      getHeight: getHeight\\n    };\\n\\n    var genericSizeRegex = /(\\\\d+(\\\\.\\\\d+)?)(\\\\w|%)*/;\\n    var percentageBasedSizeRegex = /(\\\\d+(\\\\.\\\\d+)?)%/;\\n    var pixelBasedSizeRegex = /(\\\\d+(\\\\.\\\\d+)?)px|em/;\\n    var setPixelWidth = function (cell, amount) {\\n      set$1(cell, 'width', amount + 'px');\\n    };\\n    var setPercentageWidth = function (cell, amount) {\\n      set$1(cell, 'width', amount + '%');\\n    };\\n    var setHeight = function (cell, amount) {\\n      set$1(cell, 'height', amount + 'px');\\n    };\\n    var getHeightValue = function (cell) {\\n      return getRaw(cell, 'height').getOrThunk(function () {\\n        return RuntimeSize.getHeight(cell) + 'px';\\n      });\\n    };\\n    var convert = function (cell, number, getter, setter) {\\n      var newSize = TableLookup.table(cell).map(function (table) {\\n        var total = getter(table);\\n        return Math.floor(number / 100 * total);\\n      }).getOr(number);\\n      setter(cell, newSize);\\n      return newSize;\\n    };\\n    var normalizePixelSize = function (value, cell, getter, setter) {\\n      var number = parseInt(value, 10);\\n      return endsWith(value, '%') && name(cell) !== 'table' ? convert(cell, number, getter, setter) : number;\\n    };\\n    var getTotalHeight = function (cell) {\\n      var value = getHeightValue(cell);\\n      if (!value) {\\n        return get$3(cell);\\n      }\\n      return normalizePixelSize(value, cell, get$3, setHeight);\\n    };\\n    var get$5 = function (cell, type, f) {\\n      var v = f(cell);\\n      var span = getSpan(cell, type);\\n      return v / span;\\n    };\\n    var getSpan = function (cell, type) {\\n      return has(cell, type) ? parseInt(get(cell, type), 10) : 1;\\n    };\\n    var getRawWidth = function (element) {\\n      var cssWidth = getRaw(element, 'width');\\n      return cssWidth.fold(function () {\\n        return Option.from(get(element, 'width'));\\n      }, function (width) {\\n        return Option.some(width);\\n      });\\n    };\\n    var normalizePercentageWidth = function (cellWidth, tableSize) {\\n      return cellWidth / tableSize.pixelWidth() * 100;\\n    };\\n    var choosePercentageSize = function (element, width, tableSize) {\\n      var percentMatch = percentageBasedSizeRegex.exec(width);\\n      if (percentMatch !== null) {\\n        return parseFloat(percentMatch[1]);\\n      } else {\\n        var intWidth = get$4(element);\\n        return normalizePercentageWidth(intWidth, tableSize);\\n      }\\n    };\\n    var getPercentageWidth = function (cell, tableSize) {\\n      var width = getRawWidth(cell);\\n      return width.fold(function () {\\n        var intWidth = get$4(cell);\\n        return normalizePercentageWidth(intWidth, tableSize);\\n      }, function (w) {\\n        return choosePercentageSize(cell, w, tableSize);\\n      });\\n    };\\n    var normalizePixelWidth = function (cellWidth, tableSize) {\\n      return cellWidth / 100 * tableSize.pixelWidth();\\n    };\\n    var choosePixelSize = function (element, width, tableSize) {\\n      var pixelMatch = pixelBasedSizeRegex.exec(width);\\n      if (pixelMatch !== null) {\\n        return parseInt(pixelMatch[1], 10);\\n      }\\n      var percentMatch = percentageBasedSizeRegex.exec(width);\\n      if (percentMatch !== null) {\\n        var floatWidth = parseFloat(percentMatch[1]);\\n        return normalizePixelWidth(floatWidth, tableSize);\\n      }\\n      return get$4(element);\\n    };\\n    var getPixelWidth = function (cell, tableSize) {\\n      var width = getRawWidth(cell);\\n      return width.fold(function () {\\n        return get$4(cell);\\n      }, function (w) {\\n        return choosePixelSize(cell, w, tableSize);\\n      });\\n    };\\n    var getHeight$1 = function (cell) {\\n      return get$5(cell, 'rowspan', getTotalHeight);\\n    };\\n    var getGenericWidth = function (cell) {\\n      var width = getRawWidth(cell);\\n      return width.bind(function (w) {\\n        var match = genericSizeRegex.exec(w);\\n        if (match !== null) {\\n          return Option.some({\\n            width: constant(parseFloat(match[1])),\\n            unit: constant(match[3])\\n          });\\n        } else {\\n          return Option.none();\\n        }\\n      });\\n    };\\n    var setGenericWidth = function (cell, amount, unit) {\\n      set$1(cell, 'width', amount + unit);\\n    };\\n    var Sizes = {\\n      percentageBasedSizeRegex: constant(percentageBasedSizeRegex),\\n      pixelBasedSizeRegex: constant(pixelBasedSizeRegex),\\n      setPixelWidth: setPixelWidth,\\n      setPercentageWidth: setPercentageWidth,\\n      setHeight: setHeight,\\n      getPixelWidth: getPixelWidth,\\n      getPercentageWidth: getPercentageWidth,\\n      getGenericWidth: getGenericWidth,\\n      setGenericWidth: setGenericWidth,\\n      getHeight: getHeight$1,\\n      getRawWidth: getRawWidth\\n    };\\n\\n    var halve = function (main, other) {\\n      var width = Sizes.getGenericWidth(main);\\n      width.each(function (w) {\\n        var newWidth = w.width() / 2;\\n        Sizes.setGenericWidth(main, newWidth, w.unit());\\n        Sizes.setGenericWidth(other, newWidth, w.unit());\\n      });\\n    };\\n    var CellMutations = { halve: halve };\\n\\n    var r = function (left, top) {\\n      var translate = function (x, y) {\\n        return r(left + x, top + y);\\n      };\\n      return {\\n        left: constant(left),\\n        top: constant(top),\\n        translate: translate\\n      };\\n    };\\n    var Position = r;\\n\\n    var boxPosition = function (dom) {\\n      var box = dom.getBoundingClientRect();\\n      return Position(box.left, box.top);\\n    };\\n    var firstDefinedOrZero = function (a, b) {\\n      return a !== undefined ? a : b !== undefined ? b : 0;\\n    };\\n    var absolute = function (element) {\\n      var doc = element.dom().ownerDocument;\\n      var body = doc.body;\\n      var win = doc.defaultView;\\n      var html = doc.documentElement;\\n      var scrollTop = firstDefinedOrZero(win.pageYOffset, html.scrollTop);\\n      var scrollLeft = firstDefinedOrZero(win.pageXOffset, html.scrollLeft);\\n      var clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\\n      var clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\\n      return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\\n    };\\n    var viewport = function (element) {\\n      var dom = element.dom();\\n      var doc = dom.ownerDocument;\\n      var body = doc.body;\\n      if (body === dom) {\\n        return Position(body.offsetLeft, body.offsetTop);\\n      }\\n      if (!inBody(element)) {\\n        return Position(0, 0);\\n      }\\n      return boxPosition(dom);\\n    };\\n\\n    var rowInfo = Immutable('row', 'y');\\n    var colInfo = Immutable('col', 'x');\\n    var rtlEdge = function (cell) {\\n      var pos = absolute(cell);\\n      return pos.left() + getOuter$1(cell);\\n    };\\n    var ltrEdge = function (cell) {\\n      return absolute(cell).left();\\n    };\\n    var getLeftEdge = function (index, cell) {\\n      return colInfo(index, ltrEdge(cell));\\n    };\\n    var getRightEdge = function (index, cell) {\\n      return colInfo(index, rtlEdge(cell));\\n    };\\n    var getTop = function (cell) {\\n      return absolute(cell).top();\\n    };\\n    var getTopEdge = function (index, cell) {\\n      return rowInfo(index, getTop(cell));\\n    };\\n    var getBottomEdge = function (index, cell) {\\n      return rowInfo(index, getTop(cell) + getOuter(cell));\\n    };\\n    var findPositions = function (getInnerEdge, getOuterEdge, array) {\\n      if (array.length === 0) {\\n        return [];\\n      }\\n      var lines = map(array.slice(1), function (cellOption, index) {\\n        return cellOption.map(function (cell) {\\n          return getInnerEdge(index, cell);\\n        });\\n      });\\n      var lastLine = array[array.length - 1].map(function (cell) {\\n        return getOuterEdge(array.length - 1, cell);\\n      });\\n      return lines.concat([lastLine]);\\n    };\\n    var negate = function (step) {\\n      return -step;\\n    };\\n    var height = {\\n      delta: identity,\\n      positions: function (optElements) {\\n        return findPositions(getTopEdge, getBottomEdge, optElements);\\n      },\\n      edge: getTop\\n    };\\n    var ltr = {\\n      delta: identity,\\n      edge: ltrEdge,\\n      positions: function (optElements) {\\n        return findPositions(getLeftEdge, getRightEdge, optElements);\\n      }\\n    };\\n    var rtl = {\\n      delta: negate,\\n      edge: rtlEdge,\\n      positions: function (optElements) {\\n        return findPositions(getRightEdge, getLeftEdge, optElements);\\n      }\\n    };\\n    var BarPositions = {\\n      height: height,\\n      rtl: rtl,\\n      ltr: ltr\\n    };\\n\\n    var ResizeDirection = {\\n      ltr: BarPositions.ltr,\\n      rtl: BarPositions.rtl\\n    };\\n\\n    function TableDirection (directionAt) {\\n      var auto = function (table) {\\n        return directionAt(table).isRtl() ? ResizeDirection.rtl : ResizeDirection.ltr;\\n      };\\n      var delta = function (amount, table) {\\n        return auto(table).delta(amount, table);\\n      };\\n      var positions = function (cols, table) {\\n        return auto(table).positions(cols, table);\\n      };\\n      var edge = function (cell) {\\n        return auto(cell).edge(cell);\\n      };\\n      return {\\n        delta: delta,\\n        edge: edge,\\n        positions: positions\\n      };\\n    }\\n\\n    var getGridSize = function (table) {\\n      var input = DetailsList.fromTable(table);\\n      var warehouse = Warehouse.generate(input);\\n      return warehouse.grid();\\n    };\\n    var TableGridSize = { getGridSize: getGridSize };\\n\\n    var __assign = function () {\\n      __assign = Object.assign || function __assign(t) {\\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\\n          s = arguments[i];\\n          for (var p in s)\\n            if (Object.prototype.hasOwnProperty.call(s, p))\\n              t[p] = s[p];\\n        }\\n        return t;\\n      };\\n      return __assign.apply(this, arguments);\\n    };\\n\\n    var cat = function (arr) {\\n      var r = [];\\n      var push = function (x) {\\n        r.push(x);\\n      };\\n      for (var i = 0; i < arr.length; i++) {\\n        arr[i].each(push);\\n      }\\n      return r;\\n    };\\n    var findMap = function (arr, f) {\\n      for (var i = 0; i < arr.length; i++) {\\n        var r = f(arr[i], i);\\n        if (r.isSome()) {\\n          return r;\\n        }\\n      }\\n      return Option.none();\\n    };\\n\\n    var setIfNot = function (element, property, value, ignore) {\\n      if (value === ignore) {\\n        remove(element, property);\\n      } else {\\n        set(element, property, value);\\n      }\\n    };\\n    var render = function (table, grid) {\\n      var newRows = [];\\n      var newCells = [];\\n      var renderSection = function (gridSection, sectionName) {\\n        var section = child$2(table, sectionName).getOrThunk(function () {\\n          var tb = Element.fromTag(sectionName, owner(table).dom());\\n          append(table, tb);\\n          return tb;\\n        });\\n        empty(section);\\n        var rows = map(gridSection, function (row) {\\n          if (row.isNew()) {\\n            newRows.push(row.element());\\n          }\\n          var tr = row.element();\\n          empty(tr);\\n          each(row.cells(), function (cell) {\\n            if (cell.isNew()) {\\n              newCells.push(cell.element());\\n            }\\n            setIfNot(cell.element(), 'colspan', cell.colspan(), 1);\\n            setIfNot(cell.element(), 'rowspan', cell.rowspan(), 1);\\n            append(tr, cell.element());\\n          });\\n          return tr;\\n        });\\n        append$1(section, rows);\\n      };\\n      var removeSection = function (sectionName) {\\n        child$2(table, sectionName).each(remove$2);\\n      };\\n      var renderOrRemoveSection = function (gridSection, sectionName) {\\n        if (gridSection.length > 0) {\\n          renderSection(gridSection, sectionName);\\n        } else {\\n          removeSection(sectionName);\\n        }\\n      };\\n      var headSection = [];\\n      var bodySection = [];\\n      var footSection = [];\\n      each(grid, function (row) {\\n        switch (row.section()) {\\n        case 'thead':\\n          headSection.push(row);\\n          break;\\n        case 'tbody':\\n          bodySection.push(row);\\n          break;\\n        case 'tfoot':\\n          footSection.push(row);\\n          break;\\n        }\\n      });\\n      renderOrRemoveSection(headSection, 'thead');\\n      renderOrRemoveSection(bodySection, 'tbody');\\n      renderOrRemoveSection(footSection, 'tfoot');\\n      return {\\n        newRows: constant(newRows),\\n        newCells: constant(newCells)\\n      };\\n    };\\n    var copy$2 = function (grid) {\\n      var rows = map(grid, function (row) {\\n        var tr = shallow(row.element());\\n        each(row.cells(), function (cell) {\\n          var clonedCell = deep(cell.element());\\n          setIfNot(clonedCell, 'colspan', cell.colspan(), 1);\\n          setIfNot(clonedCell, 'rowspan', cell.rowspan(), 1);\\n          append(tr, clonedCell);\\n        });\\n        return tr;\\n      });\\n      return rows;\\n    };\\n    var Redraw = {\\n      render: render,\\n      copy: copy$2\\n    };\\n\\n    var read = function (element, attr) {\\n      var value = get(element, attr);\\n      return value === undefined || value === '' ? [] : value.split(' ');\\n    };\\n    var add = function (element, attr, id) {\\n      var old = read(element, attr);\\n      var nu = old.concat([id]);\\n      set(element, attr, nu.join(' '));\\n      return true;\\n    };\\n    var remove$3 = function (element, attr, id) {\\n      var nu = filter(read(element, attr), function (v) {\\n        return v !== id;\\n      });\\n      if (nu.length > 0) {\\n        set(element, attr, nu.join(' '));\\n      } else {\\n        remove(element, attr);\\n      }\\n      return false;\\n    };\\n\\n    var supports = function (element) {\\n      return element.dom().classList !== undefined;\\n    };\\n    var get$6 = function (element) {\\n      return read(element, 'class');\\n    };\\n    var add$1 = function (element, clazz) {\\n      return add(element, 'class', clazz);\\n    };\\n    var remove$4 = function (element, clazz) {\\n      return remove$3(element, 'class', clazz);\\n    };\\n\\n    var add$2 = function (element, clazz) {\\n      if (supports(element)) {\\n        element.dom().classList.add(clazz);\\n      } else {\\n        add$1(element, clazz);\\n      }\\n    };\\n    var cleanClass = function (element) {\\n      var classList = supports(element) ? element.dom().classList : get$6(element);\\n      if (classList.length === 0) {\\n        remove(element, 'class');\\n      }\\n    };\\n    var remove$5 = function (element, clazz) {\\n      if (supports(element)) {\\n        var classList = element.dom().classList;\\n        classList.remove(clazz);\\n      } else {\\n        remove$4(element, clazz);\\n      }\\n      cleanClass(element);\\n    };\\n    var has$1 = function (element, clazz) {\\n      return supports(element) && element.dom().classList.contains(clazz);\\n    };\\n\\n    var repeat = function (repititions, f) {\\n      var r = [];\\n      for (var i = 0; i < repititions; i++) {\\n        r.push(f(i));\\n      }\\n      return r;\\n    };\\n    var range = function (start, end) {\\n      var r = [];\\n      for (var i = start; i < end; i++) {\\n        r.push(i);\\n      }\\n      return r;\\n    };\\n    var deduce = function (xs, index) {\\n      if (index < 0 || index >= xs.length - 1) {\\n        return Option.none();\\n      }\\n      var current = xs[index].fold(function () {\\n        var rest = reverse(xs.slice(0, index));\\n        return findMap(rest, function (a, i) {\\n          return a.map(function (aa) {\\n            return {\\n              value: aa,\\n              delta: i + 1\\n            };\\n          });\\n        });\\n      }, function (c) {\\n        return Option.some({\\n          value: c,\\n          delta: 0\\n        });\\n      });\\n      var next = xs[index + 1].fold(function () {\\n        var rest = xs.slice(index + 1);\\n        return findMap(rest, function (a, i) {\\n          return a.map(function (aa) {\\n            return {\\n              value: aa,\\n              delta: i + 1\\n            };\\n          });\\n        });\\n      }, function (n) {\\n        return Option.some({\\n          value: n,\\n          delta: 1\\n        });\\n      });\\n      return current.bind(function (c) {\\n        return next.map(function (n) {\\n          var extras = n.delta + c.delta;\\n          return Math.abs(n.value - c.value) / extras;\\n        });\\n      });\\n    };\\n\\n    var columns = function (warehouse) {\\n      var grid = warehouse.grid();\\n      var cols = range(0, grid.columns());\\n      var rowsArr = range(0, grid.rows());\\n      return map(cols, function (col) {\\n        var getBlock = function () {\\n          return bind(rowsArr, function (r) {\\n            return Warehouse.getAt(warehouse, r, col).filter(function (detail) {\\n              return detail.column() === col;\\n            }).fold(constant([]), function (detail) {\\n              return [detail];\\n            });\\n          });\\n        };\\n        var isSingle = function (detail) {\\n          return detail.colspan() === 1;\\n        };\\n        var getFallback = function () {\\n          return Warehouse.getAt(warehouse, 0, col);\\n        };\\n        return decide(getBlock, isSingle, getFallback);\\n      });\\n    };\\n    var decide = function (getBlock, isSingle, getFallback) {\\n      var inBlock = getBlock();\\n      var singleInBlock = find(inBlock, isSingle);\\n      var detailOption = singleInBlock.orThunk(function () {\\n        return Option.from(inBlock[0]).orThunk(getFallback);\\n      });\\n      return detailOption.map(function (detail) {\\n        return detail.element();\\n      });\\n    };\\n    var rows$1 = function (warehouse) {\\n      var grid = warehouse.grid();\\n      var rowsArr = range(0, grid.rows());\\n      var cols = range(0, grid.columns());\\n      return map(rowsArr, function (row) {\\n        var getBlock = function () {\\n          return bind(cols, function (c) {\\n            return Warehouse.getAt(warehouse, row, c).filter(function (detail) {\\n              return detail.row() === row;\\n            }).fold(constant([]), function (detail) {\\n              return [detail];\\n            });\\n          });\\n        };\\n        var isSingle = function (detail) {\\n          return detail.rowspan() === 1;\\n        };\\n        var getFallback = function () {\\n          return Warehouse.getAt(warehouse, row, 0);\\n        };\\n        return decide(getBlock, isSingle, getFallback);\\n      });\\n    };\\n    var Blocks = {\\n      columns: columns,\\n      rows: rows$1\\n    };\\n\\n    var css = function (namespace) {\\n      var dashNamespace = namespace.replace(/\\\\./g, '-');\\n      var resolve = function (str) {\\n        return dashNamespace + '-' + str;\\n      };\\n      return { resolve: resolve };\\n    };\\n\\n    var styles = css('ephox-snooker');\\n    var Styles = { resolve: styles.resolve };\\n\\n    var col = function (column, x, y, w, h) {\\n      var blocker = Element.fromTag('div');\\n      setAll$1(blocker, {\\n        position: 'absolute',\\n        left: x - w / 2 + 'px',\\n        top: y + 'px',\\n        height: h + 'px',\\n        width: w + 'px'\\n      });\\n      setAll(blocker, {\\n        'data-column': column,\\n        'role': 'presentation'\\n      });\\n      return blocker;\\n    };\\n    var row$1 = function (r, x, y, w, h) {\\n      var blocker = Element.fromTag('div');\\n      setAll$1(blocker, {\\n        position: 'absolute',\\n        left: x + 'px',\\n        top: y - h / 2 + 'px',\\n        height: h + 'px',\\n        width: w + 'px'\\n      });\\n      setAll(blocker, {\\n        'data-row': r,\\n        'role': 'presentation'\\n      });\\n      return blocker;\\n    };\\n    var Bar = {\\n      col: col,\\n      row: row$1\\n    };\\n\\n    var resizeBar = Styles.resolve('resizer-bar');\\n    var resizeRowBar = Styles.resolve('resizer-rows');\\n    var resizeColBar = Styles.resolve('resizer-cols');\\n    var BAR_THICKNESS = 7;\\n    var destroy = function (wire) {\\n      var previous = descendants$1(wire.parent(), '.' + resizeBar);\\n      each(previous, remove$2);\\n    };\\n    var drawBar = function (wire, positions, create) {\\n      var origin = wire.origin();\\n      each(positions, function (cpOption, i) {\\n        cpOption.each(function (cp) {\\n          var bar = create(origin, cp);\\n          add$2(bar, resizeBar);\\n          append(wire.parent(), bar);\\n        });\\n      });\\n    };\\n    var refreshCol = function (wire, colPositions, position, tableHeight) {\\n      drawBar(wire, colPositions, function (origin, cp) {\\n        var colBar = Bar.col(cp.col(), cp.x() - origin.left(), position.top() - origin.top(), BAR_THICKNESS, tableHeight);\\n        add$2(colBar, resizeColBar);\\n        return colBar;\\n      });\\n    };\\n    var refreshRow = function (wire, rowPositions, position, tableWidth) {\\n      drawBar(wire, rowPositions, function (origin, cp) {\\n        var rowBar = Bar.row(cp.row(), position.left() - origin.left(), cp.y() - origin.top(), tableWidth, BAR_THICKNESS);\\n        add$2(rowBar, resizeRowBar);\\n        return rowBar;\\n      });\\n    };\\n    var refreshGrid = function (wire, table, rows, cols, hdirection, vdirection) {\\n      var position = absolute(table);\\n      var rowPositions = rows.length > 0 ? hdirection.positions(rows, table) : [];\\n      refreshRow(wire, rowPositions, position, getOuter$1(table));\\n      var colPositions = cols.length > 0 ? vdirection.positions(cols, table) : [];\\n      refreshCol(wire, colPositions, position, getOuter(table));\\n    };\\n    var refresh = function (wire, table, hdirection, vdirection) {\\n      destroy(wire);\\n      var list = DetailsList.fromTable(table);\\n      var warehouse = Warehouse.generate(list);\\n      var rows = Blocks.rows(warehouse);\\n      var cols = Blocks.columns(warehouse);\\n      refreshGrid(wire, table, rows, cols, hdirection, vdirection);\\n    };\\n    var each$2 = function (wire, f) {\\n      var bars = descendants$1(wire.parent(), '.' + resizeBar);\\n      each(bars, f);\\n    };\\n    var hide = function (wire) {\\n      each$2(wire, function (bar) {\\n        set$1(bar, 'display', 'none');\\n      });\\n    };\\n    var show = function (wire) {\\n      each$2(wire, function (bar) {\\n        set$1(bar, 'display', 'block');\\n      });\\n    };\\n    var isRowBar = function (element) {\\n      return has$1(element, resizeRowBar);\\n    };\\n    var isColBar = function (element) {\\n      return has$1(element, resizeColBar);\\n    };\\n    var Bars = {\\n      refresh: refresh,\\n      hide: hide,\\n      show: show,\\n      destroy: destroy,\\n      isRowBar: isRowBar,\\n      isColBar: isColBar\\n    };\\n\\n    var addCell = function (gridRow, index, cell) {\\n      var cells = gridRow.cells();\\n      var before = cells.slice(0, index);\\n      var after = cells.slice(index);\\n      var newCells = before.concat([cell]).concat(after);\\n      return setCells(gridRow, newCells);\\n    };\\n    var mutateCell = function (gridRow, index, cell) {\\n      var cells = gridRow.cells();\\n      cells[index] = cell;\\n    };\\n    var setCells = function (gridRow, cells) {\\n      return rowcells(cells, gridRow.section());\\n    };\\n    var mapCells = function (gridRow, f) {\\n      var cells = gridRow.cells();\\n      var r = map(cells, f);\\n      return rowcells(r, gridRow.section());\\n    };\\n    var getCell = function (gridRow, index) {\\n      return gridRow.cells()[index];\\n    };\\n    var getCellElement = function (gridRow, index) {\\n      return getCell(gridRow, index).element();\\n    };\\n    var cellLength = function (gridRow) {\\n      return gridRow.cells().length;\\n    };\\n    var GridRow = {\\n      addCell: addCell,\\n      setCells: setCells,\\n      mutateCell: mutateCell,\\n      getCell: getCell,\\n      getCellElement: getCellElement,\\n      mapCells: mapCells,\\n      cellLength: cellLength\\n    };\\n\\n    var getColumn = function (grid, index) {\\n      return map(grid, function (row) {\\n        return GridRow.getCell(row, index);\\n      });\\n    };\\n    var getRow = function (grid, index) {\\n      return grid[index];\\n    };\\n    var findDiff = function (xs, comp) {\\n      if (xs.length === 0) {\\n        return 0;\\n      }\\n      var first = xs[0];\\n      var index = findIndex(xs, function (x) {\\n        return !comp(first.element(), x.element());\\n      });\\n      return index.fold(function () {\\n        return xs.length;\\n      }, function (ind) {\\n        return ind;\\n      });\\n    };\\n    var subgrid = function (grid, row, column, comparator) {\\n      var restOfRow = getRow(grid, row).cells().slice(column);\\n      var endColIndex = findDiff(restOfRow, comparator);\\n      var restOfColumn = getColumn(grid, column).slice(row);\\n      var endRowIndex = findDiff(restOfColumn, comparator);\\n      return {\\n        colspan: constant(endColIndex),\\n        rowspan: constant(endRowIndex)\\n      };\\n    };\\n    var TableGrid = { subgrid: subgrid };\\n\\n    var toDetails = function (grid, comparator) {\\n      var seen = map(grid, function (row, ri) {\\n        return map(row.cells(), function (col, ci) {\\n          return false;\\n        });\\n      });\\n      var updateSeen = function (ri, ci, rowspan, colspan) {\\n        for (var r = ri; r < ri + rowspan; r++) {\\n          for (var c = ci; c < ci + colspan; c++) {\\n            seen[r][c] = true;\\n          }\\n        }\\n      };\\n      return map(grid, function (row, ri) {\\n        var details = bind(row.cells(), function (cell, ci) {\\n          if (seen[ri][ci] === false) {\\n            var result = TableGrid.subgrid(grid, ri, ci, comparator);\\n            updateSeen(ri, ci, result.rowspan(), result.colspan());\\n            return [detailnew(cell.element(), result.rowspan(), result.colspan(), cell.isNew())];\\n          } else {\\n            return [];\\n          }\\n        });\\n        return rowdetails(details, row.section());\\n      });\\n    };\\n    var toGrid = function (warehouse, generators, isNew) {\\n      var grid = [];\\n      for (var i = 0; i < warehouse.grid().rows(); i++) {\\n        var rowCells = [];\\n        for (var j = 0; j < warehouse.grid().columns(); j++) {\\n          var element = Warehouse.getAt(warehouse, i, j).map(function (item) {\\n            return elementnew(item.element(), isNew);\\n          }).getOrThunk(function () {\\n            return elementnew(generators.gap(), true);\\n          });\\n          rowCells.push(element);\\n        }\\n        var row = rowcells(rowCells, warehouse.all()[i].section());\\n        grid.push(row);\\n      }\\n      return grid;\\n    };\\n    var Transitions = {\\n      toDetails: toDetails,\\n      toGrid: toGrid\\n    };\\n\\n    var fromWarehouse = function (warehouse, generators) {\\n      return Transitions.toGrid(warehouse, generators, false);\\n    };\\n    var deriveRows = function (rendered, generators) {\\n      var findRow = function (details) {\\n        var rowOfCells = findMap(details, function (detail) {\\n          return parent(detail.element()).map(function (row) {\\n            var isNew = parent(row).isNone();\\n            return elementnew(row, isNew);\\n          });\\n        });\\n        return rowOfCells.getOrThunk(function () {\\n          return elementnew(generators.row(), true);\\n        });\\n      };\\n      return map(rendered, function (details) {\\n        var row = findRow(details.details());\\n        return rowdatanew(row.element(), details.details(), details.section(), row.isNew());\\n      });\\n    };\\n    var toDetailList = function (grid, generators) {\\n      var rendered = Transitions.toDetails(grid, eq);\\n      return deriveRows(rendered, generators);\\n    };\\n    var findInWarehouse = function (warehouse, element) {\\n      var all = flatten(map(warehouse.all(), function (r) {\\n        return r.cells();\\n      }));\\n      return find(all, function (e) {\\n        return eq(element, e.element());\\n      });\\n    };\\n    var run = function (operation, extract, adjustment, postAction, genWrappers) {\\n      return function (wire, table, target, generators, direction) {\\n        var input = DetailsList.fromTable(table);\\n        var warehouse = Warehouse.generate(input);\\n        var output = extract(warehouse, target).map(function (info) {\\n          var model = fromWarehouse(warehouse, generators);\\n          var result = operation(model, info, eq, genWrappers(generators));\\n          var grid = toDetailList(result.grid(), generators);\\n          return {\\n            grid: constant(grid),\\n            cursor: result.cursor\\n          };\\n        });\\n        return output.fold(function () {\\n          return Option.none();\\n        }, function (out) {\\n          var newElements = Redraw.render(table, out.grid());\\n          adjustment(table, out.grid(), direction);\\n          postAction(table);\\n          Bars.refresh(wire, table, BarPositions.height, direction);\\n          return Option.some({\\n            cursor: out.cursor,\\n            newRows: newElements.newRows,\\n            newCells: newElements.newCells\\n          });\\n        });\\n      };\\n    };\\n    var onCell = function (warehouse, target) {\\n      return TableLookup.cell(target.element()).bind(function (cell) {\\n        return findInWarehouse(warehouse, cell);\\n      });\\n    };\\n    var onPaste = function (warehouse, target) {\\n      return TableLookup.cell(target.element()).bind(function (cell) {\\n        return findInWarehouse(warehouse, cell).map(function (details) {\\n          var value = __assign(__assign({}, details), {\\n            generators: target.generators,\\n            clipboard: target.clipboard\\n          });\\n          return value;\\n        });\\n      });\\n    };\\n    var onPasteRows = function (warehouse, target) {\\n      var details = map(target.selection(), function (cell) {\\n        return TableLookup.cell(cell).bind(function (lc) {\\n          return findInWarehouse(warehouse, lc);\\n        });\\n      });\\n      var cells = cat(details);\\n      return cells.length > 0 ? Option.some({\\n        cells: cells,\\n        generators: target.generators,\\n        clipboard: target.clipboard\\n      }) : Option.none();\\n    };\\n    var onMergable = function (_warehouse, target) {\\n      return target.mergable();\\n    };\\n    var onUnmergable = function (_warehouse, target) {\\n      return target.unmergable();\\n    };\\n    var onCells = function (warehouse, target) {\\n      var details = map(target.selection(), function (cell) {\\n        return TableLookup.cell(cell).bind(function (lc) {\\n          return findInWarehouse(warehouse, lc);\\n        });\\n      });\\n      var cells = cat(details);\\n      return cells.length > 0 ? Option.some(cells) : Option.none();\\n    };\\n\\n    var value = function (o) {\\n      var is = function (v) {\\n        return o === v;\\n      };\\n      var or = function (opt) {\\n        return value(o);\\n      };\\n      var orThunk = function (f) {\\n        return value(o);\\n      };\\n      var map = function (f) {\\n        return value(f(o));\\n      };\\n      var mapError = function (f) {\\n        return value(o);\\n      };\\n      var each = function (f) {\\n        f(o);\\n      };\\n      var bind = function (f) {\\n        return f(o);\\n      };\\n      var fold = function (_, onValue) {\\n        return onValue(o);\\n      };\\n      var exists = function (f) {\\n        return f(o);\\n      };\\n      var forall = function (f) {\\n        return f(o);\\n      };\\n      var toOption = function () {\\n        return Option.some(o);\\n      };\\n      return {\\n        is: is,\\n        isValue: always,\\n        isError: never,\\n        getOr: constant(o),\\n        getOrThunk: constant(o),\\n        getOrDie: constant(o),\\n        or: or,\\n        orThunk: orThunk,\\n        fold: fold,\\n        map: map,\\n        mapError: mapError,\\n        each: each,\\n        bind: bind,\\n        exists: exists,\\n        forall: forall,\\n        toOption: toOption\\n      };\\n    };\\n    var error = function (message) {\\n      var getOrThunk = function (f) {\\n        return f();\\n      };\\n      var getOrDie = function () {\\n        return die(String(message))();\\n      };\\n      var or = function (opt) {\\n        return opt;\\n      };\\n      var orThunk = function (f) {\\n        return f();\\n      };\\n      var map = function (f) {\\n        return error(message);\\n      };\\n      var mapError = function (f) {\\n        return error(f(message));\\n      };\\n      var bind = function (f) {\\n        return error(message);\\n      };\\n      var fold = function (onError, _) {\\n        return onError(message);\\n      };\\n      return {\\n        is: never,\\n        isValue: never,\\n        isError: always,\\n        getOr: identity,\\n        getOrThunk: getOrThunk,\\n        getOrDie: getOrDie,\\n        or: or,\\n        orThunk: orThunk,\\n        fold: fold,\\n        map: map,\\n        mapError: mapError,\\n        each: noop,\\n        bind: bind,\\n        exists: never,\\n        forall: always,\\n        toOption: Option.none\\n      };\\n    };\\n    var fromOption = function (opt, err) {\\n      return opt.fold(function () {\\n        return error(err);\\n      }, value);\\n    };\\n    var Result = {\\n      value: value,\\n      error: error,\\n      fromOption: fromOption\\n    };\\n\\n    var measure = function (startAddress, gridA, gridB) {\\n      if (startAddress.row() >= gridA.length || startAddress.column() > GridRow.cellLength(gridA[0])) {\\n        return Result.error('invalid start address out of table bounds, row: ' + startAddress.row() + ', column: ' + startAddress.column());\\n      }\\n      var rowRemainder = gridA.slice(startAddress.row());\\n      var colRemainder = rowRemainder[0].cells().slice(startAddress.column());\\n      var colRequired = GridRow.cellLength(gridB[0]);\\n      var rowRequired = gridB.length;\\n      return Result.value({\\n        rowDelta: constant(rowRemainder.length - rowRequired),\\n        colDelta: constant(colRemainder.length - colRequired)\\n      });\\n    };\\n    var measureWidth = function (gridA, gridB) {\\n      var colLengthA = GridRow.cellLength(gridA[0]);\\n      var colLengthB = GridRow.cellLength(gridB[0]);\\n      return {\\n        rowDelta: constant(0),\\n        colDelta: constant(colLengthA - colLengthB)\\n      };\\n    };\\n    var fill = function (cells, generator) {\\n      return map(cells, function () {\\n        return elementnew(generator.cell(), true);\\n      });\\n    };\\n    var rowFill = function (grid, amount, generator) {\\n      return grid.concat(repeat(amount, function (_row) {\\n        return GridRow.setCells(grid[grid.length - 1], fill(grid[grid.length - 1].cells(), generator));\\n      }));\\n    };\\n    var colFill = function (grid, amount, generator) {\\n      return map(grid, function (row) {\\n        return GridRow.setCells(row, row.cells().concat(fill(range(0, amount), generator)));\\n      });\\n    };\\n    var tailor = function (gridA, delta, generator) {\\n      var fillCols = delta.colDelta() < 0 ? colFill : identity;\\n      var fillRows = delta.rowDelta() < 0 ? rowFill : identity;\\n      var modifiedCols = fillCols(gridA, Math.abs(delta.colDelta()), generator);\\n      var tailoredGrid = fillRows(modifiedCols, Math.abs(delta.rowDelta()), generator);\\n      return tailoredGrid;\\n    };\\n    var Fitment = {\\n      measure: measure,\\n      measureWidth: measureWidth,\\n      tailor: tailor\\n    };\\n\\n    var merge = function (grid, bounds, comparator, substitution) {\\n      if (grid.length === 0) {\\n        return grid;\\n      }\\n      for (var i = bounds.startRow(); i <= bounds.finishRow(); i++) {\\n        for (var j = bounds.startCol(); j <= bounds.finishCol(); j++) {\\n          GridRow.mutateCell(grid[i], j, elementnew(substitution(), false));\\n        }\\n      }\\n      return grid;\\n    };\\n    var unmerge = function (grid, target, comparator, substitution) {\\n      var first = true;\\n      for (var i = 0; i < grid.length; i++) {\\n        for (var j = 0; j < GridRow.cellLength(grid[0]); j++) {\\n          var current = GridRow.getCellElement(grid[i], j);\\n          var isToReplace = comparator(current, target);\\n          if (isToReplace === true && first === false) {\\n            GridRow.mutateCell(grid[i], j, elementnew(substitution(), true));\\n          } else if (isToReplace === true) {\\n            first = false;\\n          }\\n        }\\n      }\\n      return grid;\\n    };\\n    var uniqueCells = function (row, comparator) {\\n      return foldl(row, function (rest, cell) {\\n        return exists(rest, function (currentCell) {\\n          return comparator(currentCell.element(), cell.element());\\n        }) ? rest : rest.concat([cell]);\\n      }, []);\\n    };\\n    var splitRows = function (grid, index, comparator, substitution) {\\n      if (index > 0 && index < grid.length) {\\n        var rowPrevCells = grid[index - 1].cells();\\n        var cells = uniqueCells(rowPrevCells, comparator);\\n        each(cells, function (cell) {\\n          var replacement = Option.none();\\n          var _loop_1 = function (i) {\\n            var _loop_2 = function (j) {\\n              var current = grid[i].cells()[j];\\n              var isToReplace = comparator(current.element(), cell.element());\\n              if (isToReplace) {\\n                if (replacement.isNone()) {\\n                  replacement = Option.some(substitution());\\n                }\\n                replacement.each(function (sub) {\\n                  GridRow.mutateCell(grid[i], j, elementnew(sub, true));\\n                });\\n              }\\n            };\\n            for (var j = 0; j < GridRow.cellLength(grid[0]); j++) {\\n              _loop_2(j);\\n            }\\n          };\\n          for (var i = index; i < grid.length; i++) {\\n            _loop_1(i);\\n          }\\n        });\\n      }\\n      return grid;\\n    };\\n    var MergingOperations = {\\n      merge: merge,\\n      unmerge: unmerge,\\n      splitRows: splitRows\\n    };\\n\\n    var isSpanning = function (grid, row, col, comparator) {\\n      var candidate = GridRow.getCell(grid[row], col);\\n      var matching = curry(comparator, candidate.element());\\n      var currentRow = grid[row];\\n      return grid.length > 1 && GridRow.cellLength(currentRow) > 1 && (col > 0 && matching(GridRow.getCellElement(currentRow, col - 1)) || col < currentRow.cells().length - 1 && matching(GridRow.getCellElement(currentRow, col + 1)) || row > 0 && matching(GridRow.getCellElement(grid[row - 1], col)) || row < grid.length - 1 && matching(GridRow.getCellElement(grid[row + 1], col)));\\n    };\\n    var mergeTables = function (startAddress, gridA, gridB, generator, comparator) {\\n      var startRow = startAddress.row();\\n      var startCol = startAddress.column();\\n      var mergeHeight = gridB.length;\\n      var mergeWidth = GridRow.cellLength(gridB[0]);\\n      var endRow = startRow + mergeHeight;\\n      var endCol = startCol + mergeWidth;\\n      for (var r = startRow; r < endRow; r++) {\\n        for (var c = startCol; c < endCol; c++) {\\n          if (isSpanning(gridA, r, c, comparator)) {\\n            MergingOperations.unmerge(gridA, GridRow.getCellElement(gridA[r], c), comparator, generator.cell);\\n          }\\n          var newCell = GridRow.getCellElement(gridB[r - startRow], c - startCol);\\n          var replacement = generator.replace(newCell);\\n          GridRow.mutateCell(gridA[r], c, elementnew(replacement, true));\\n        }\\n      }\\n      return gridA;\\n    };\\n    var merge$1 = function (startAddress, gridA, gridB, generator, comparator) {\\n      var result = Fitment.measure(startAddress, gridA, gridB);\\n      return result.map(function (delta) {\\n        var fittedGrid = Fitment.tailor(gridA, delta, generator);\\n        return mergeTables(startAddress, fittedGrid, gridB, generator, comparator);\\n      });\\n    };\\n    var insert = function (index, gridA, gridB, generator, comparator) {\\n      MergingOperations.splitRows(gridA, index, comparator, generator.cell);\\n      var delta = Fitment.measureWidth(gridB, gridA);\\n      var fittedNewGrid = Fitment.tailor(gridB, delta, generator);\\n      var secondDelta = Fitment.measureWidth(gridA, fittedNewGrid);\\n      var fittedOldGrid = Fitment.tailor(gridA, secondDelta, generator);\\n      return fittedOldGrid.slice(0, index).concat(fittedNewGrid).concat(fittedOldGrid.slice(index, fittedOldGrid.length));\\n    };\\n    var TableMerge = {\\n      merge: merge$1,\\n      insert: insert\\n    };\\n\\n    var insertRowAt = function (grid, index, example, comparator, substitution) {\\n      var before = grid.slice(0, index);\\n      var after = grid.slice(index);\\n      var between = GridRow.mapCells(grid[example], function (ex, c) {\\n        var withinSpan = index > 0 && index < grid.length && comparator(GridRow.getCellElement(grid[index - 1], c), GridRow.getCellElement(grid[index], c));\\n        var ret = withinSpan ? GridRow.getCell(grid[index], c) : elementnew(substitution(ex.element(), comparator), true);\\n        return ret;\\n      });\\n      return before.concat([between]).concat(after);\\n    };\\n    var insertColumnAt = function (grid, index, example, comparator, substitution) {\\n      return map(grid, function (row) {\\n        var withinSpan = index > 0 && index < GridRow.cellLength(row) && comparator(GridRow.getCellElement(row, index - 1), GridRow.getCellElement(row, index));\\n        var sub = withinSpan ? GridRow.getCell(row, index) : elementnew(substitution(GridRow.getCellElement(row, example), comparator), true);\\n        return GridRow.addCell(row, index, sub);\\n      });\\n    };\\n    var splitCellIntoColumns = function (grid, exampleRow, exampleCol, comparator, substitution) {\\n      var index = exampleCol + 1;\\n      return map(grid, function (row, i) {\\n        var isTargetCell = i === exampleRow;\\n        var sub = isTargetCell ? elementnew(substitution(GridRow.getCellElement(row, exampleCol), comparator), true) : GridRow.getCell(row, exampleCol);\\n        return GridRow.addCell(row, index, sub);\\n      });\\n    };\\n    var splitCellIntoRows = function (grid, exampleRow, exampleCol, comparator, substitution) {\\n      var index = exampleRow + 1;\\n      var before = grid.slice(0, index);\\n      var after = grid.slice(index);\\n      var between = GridRow.mapCells(grid[exampleRow], function (ex, i) {\\n        var isTargetCell = i === exampleCol;\\n        return isTargetCell ? elementnew(substitution(ex.element(), comparator), true) : ex;\\n      });\\n      return before.concat([between]).concat(after);\\n    };\\n    var deleteColumnsAt = function (grid, start, finish) {\\n      var rows = map(grid, function (row) {\\n        var cells = row.cells().slice(0, start).concat(row.cells().slice(finish + 1));\\n        return rowcells(cells, row.section());\\n      });\\n      return filter(rows, function (row) {\\n        return row.cells().length > 0;\\n      });\\n    };\\n    var deleteRowsAt = function (grid, start, finish) {\\n      return grid.slice(0, start).concat(grid.slice(finish + 1));\\n    };\\n    var ModificationOperations = {\\n      insertRowAt: insertRowAt,\\n      insertColumnAt: insertColumnAt,\\n      splitCellIntoColumns: splitCellIntoColumns,\\n      splitCellIntoRows: splitCellIntoRows,\\n      deleteRowsAt: deleteRowsAt,\\n      deleteColumnsAt: deleteColumnsAt\\n    };\\n\\n    var replaceIn = function (grid, targets, comparator, substitution) {\\n      var isTarget = function (cell) {\\n        return exists(targets, function (target) {\\n          return comparator(cell.element(), target.element());\\n        });\\n      };\\n      return map(grid, function (row) {\\n        return GridRow.mapCells(row, function (cell) {\\n          return isTarget(cell) ? elementnew(substitution(cell.element(), comparator), true) : cell;\\n        });\\n      });\\n    };\\n    var notStartRow = function (grid, rowIndex, colIndex, comparator) {\\n      return GridRow.getCellElement(grid[rowIndex], colIndex) !== undefined && (rowIndex > 0 && comparator(GridRow.getCellElement(grid[rowIndex - 1], colIndex), GridRow.getCellElement(grid[rowIndex], colIndex)));\\n    };\\n    var notStartColumn = function (row, index, comparator) {\\n      return index > 0 && comparator(GridRow.getCellElement(row, index - 1), GridRow.getCellElement(row, index));\\n    };\\n    var replaceColumn = function (grid, index, comparator, substitution) {\\n      var targets = bind(grid, function (row, i) {\\n        var alreadyAdded = notStartRow(grid, i, index, comparator) || notStartColumn(row, index, comparator);\\n        return alreadyAdded ? [] : [GridRow.getCell(row, index)];\\n      });\\n      return replaceIn(grid, targets, comparator, substitution);\\n    };\\n    var replaceRow = function (grid, index, comparator, substitution) {\\n      var targetRow = grid[index];\\n      var targets = bind(targetRow.cells(), function (item, i) {\\n        var alreadyAdded = notStartRow(grid, index, i, comparator) || notStartColumn(targetRow, i, comparator);\\n        return alreadyAdded ? [] : [item];\\n      });\\n      return replaceIn(grid, targets, comparator, substitution);\\n    };\\n    var TransformOperations = {\\n      replaceColumn: replaceColumn,\\n      replaceRow: replaceRow\\n    };\\n\\n    var adt = Adt.generate([\\n      { none: [] },\\n      { only: ['index'] },\\n      {\\n        left: [\\n          'index',\\n          'next'\\n        ]\\n      },\\n      {\\n        middle: [\\n          'prev',\\n          'index',\\n          'next'\\n        ]\\n      },\\n      {\\n        right: [\\n          'prev',\\n          'index'\\n        ]\\n      }\\n    ]);\\n    var ColumnContext = __assign({}, adt);\\n\\n    var neighbours$1 = function (input, index) {\\n      if (input.length === 0) {\\n        return ColumnContext.none();\\n      }\\n      if (input.length === 1) {\\n        return ColumnContext.only(0);\\n      }\\n      if (index === 0) {\\n        return ColumnContext.left(0, 1);\\n      }\\n      if (index === input.length - 1) {\\n        return ColumnContext.right(index - 1, index);\\n      }\\n      if (index > 0 && index < input.length - 1) {\\n        return ColumnContext.middle(index - 1, index, index + 1);\\n      }\\n      return ColumnContext.none();\\n    };\\n    var determine = function (input, column, step, tableSize) {\\n      var result = input.slice(0);\\n      var context = neighbours$1(input, column);\\n      var zero = function (array) {\\n        return map(array, constant(0));\\n      };\\n      var onNone = constant(zero(result));\\n      var onOnly = function (index) {\\n        return tableSize.singleColumnWidth(result[index], step);\\n      };\\n      var onChange = function (index, next) {\\n        if (step >= 0) {\\n          var newNext = Math.max(tableSize.minCellWidth(), result[next] - step);\\n          return zero(result.slice(0, index)).concat([\\n            step,\\n            newNext - result[next]\\n          ]).concat(zero(result.slice(next + 1)));\\n        } else {\\n          var newThis = Math.max(tableSize.minCellWidth(), result[index] + step);\\n          var diffx = result[index] - newThis;\\n          return zero(result.slice(0, index)).concat([\\n            newThis - result[index],\\n            diffx\\n          ]).concat(zero(result.slice(next + 1)));\\n        }\\n      };\\n      var onLeft = onChange;\\n      var onMiddle = function (_prev, index, next) {\\n        return onChange(index, next);\\n      };\\n      var onRight = function (_prev, index) {\\n        if (step >= 0) {\\n          return zero(result.slice(0, index)).concat([step]);\\n        } else {\\n          var size = Math.max(tableSize.minCellWidth(), result[index] + step);\\n          return zero(result.slice(0, index)).concat([size - result[index]]);\\n        }\\n      };\\n      return context.fold(onNone, onOnly, onLeft, onMiddle, onRight);\\n    };\\n    var Deltas = { determine: determine };\\n\\n    var getSpan$1 = function (cell, type) {\\n      return has(cell, type) && parseInt(get(cell, type), 10) > 1;\\n    };\\n    var hasColspan = function (cell) {\\n      return getSpan$1(cell, 'colspan');\\n    };\\n    var hasRowspan = function (cell) {\\n      return getSpan$1(cell, 'rowspan');\\n    };\\n    var getInt = function (element, property) {\\n      return parseInt(get$1(element, property), 10);\\n    };\\n    var CellUtils = {\\n      hasColspan: hasColspan,\\n      hasRowspan: hasRowspan,\\n      minWidth: constant(10),\\n      minHeight: constant(10),\\n      getInt: getInt\\n    };\\n\\n    var getRaw$1 = function (cell, property, getter) {\\n      return getRaw(cell, property).fold(function () {\\n        return getter(cell) + 'px';\\n      }, function (raw) {\\n        return raw;\\n      });\\n    };\\n    var getRawW = function (cell, tableSize) {\\n      return getRaw$1(cell, 'width', function (e) {\\n        return Sizes.getPixelWidth(e, tableSize);\\n      });\\n    };\\n    var getRawH = function (cell) {\\n      return getRaw$1(cell, 'height', Sizes.getHeight);\\n    };\\n    var getWidthFrom = function (warehouse, direction, getWidth, fallback, tableSize) {\\n      var columns = Blocks.columns(warehouse);\\n      var backups = map(columns, function (cellOption) {\\n        return cellOption.map(direction.edge);\\n      });\\n      return map(columns, function (cellOption, c) {\\n        var columnCell = cellOption.filter(not(CellUtils.hasColspan));\\n        return columnCell.fold(function () {\\n          var deduced = deduce(backups, c);\\n          return fallback(deduced);\\n        }, function (cell) {\\n          return getWidth(cell, tableSize);\\n        });\\n      });\\n    };\\n    var getDeduced = function (deduced) {\\n      return deduced.map(function (d) {\\n        return d + 'px';\\n      }).getOr('');\\n    };\\n    var getRawWidths = function (warehouse, direction, tableSize) {\\n      return getWidthFrom(warehouse, direction, getRawW, getDeduced, tableSize);\\n    };\\n    var getPercentageWidths = function (warehouse, direction, tableSize) {\\n      return getWidthFrom(warehouse, direction, Sizes.getPercentageWidth, function (deduced) {\\n        return deduced.fold(function () {\\n          return tableSize.minCellWidth();\\n        }, function (cellWidth) {\\n          return cellWidth / tableSize.pixelWidth() * 100;\\n        });\\n      }, tableSize);\\n    };\\n    var getPixelWidths = function (warehouse, direction, tableSize) {\\n      return getWidthFrom(warehouse, direction, Sizes.getPixelWidth, function (deduced) {\\n        return deduced.getOrThunk(tableSize.minCellWidth);\\n      }, tableSize);\\n    };\\n    var getHeightFrom = function (warehouse, direction, getHeight, fallback) {\\n      var rows = Blocks.rows(warehouse);\\n      var backups = map(rows, function (cellOption) {\\n        return cellOption.map(direction.edge);\\n      });\\n      return map(rows, function (cellOption, c) {\\n        var rowCell = cellOption.filter(not(CellUtils.hasRowspan));\\n        return rowCell.fold(function () {\\n          var deduced = deduce(backups, c);\\n          return fallback(deduced);\\n        }, function (cell) {\\n          return getHeight(cell);\\n        });\\n      });\\n    };\\n    var getPixelHeights = function (warehouse, direction) {\\n      return getHeightFrom(warehouse, direction, Sizes.getHeight, function (deduced) {\\n        return deduced.getOrThunk(CellUtils.minHeight);\\n      });\\n    };\\n    var getRawHeights = function (warehouse, direction) {\\n      return getHeightFrom(warehouse, direction, getRawH, getDeduced);\\n    };\\n    var ColumnSizes = {\\n      getRawWidths: getRawWidths,\\n      getPixelWidths: getPixelWidths,\\n      getPercentageWidths: getPercentageWidths,\\n      getPixelHeights: getPixelHeights,\\n      getRawHeights: getRawHeights\\n    };\\n\\n    var total = function (start, end, measures) {\\n      var r = 0;\\n      for (var i = start; i < end; i++) {\\n        r += measures[i] !== undefined ? measures[i] : 0;\\n      }\\n      return r;\\n    };\\n    var recalculateWidth = function (warehouse, widths) {\\n      var all = Warehouse.justCells(warehouse);\\n      return map(all, function (cell) {\\n        var width = total(cell.column(), cell.column() + cell.colspan(), widths);\\n        return {\\n          element: cell.element,\\n          width: constant(width),\\n          colspan: cell.colspan\\n        };\\n      });\\n    };\\n    var recalculateHeight = function (warehouse, heights) {\\n      var all = Warehouse.justCells(warehouse);\\n      return map(all, function (cell) {\\n        var height = total(cell.row(), cell.row() + cell.rowspan(), heights);\\n        return {\\n          element: cell.element,\\n          height: constant(height),\\n          rowspan: cell.rowspan\\n        };\\n      });\\n    };\\n    var matchRowHeight = function (warehouse, heights) {\\n      return map(warehouse.all(), function (row, i) {\\n        return {\\n          element: row.element,\\n          height: constant(heights[i])\\n        };\\n      });\\n    };\\n    var Recalculations = {\\n      recalculateWidth: recalculateWidth,\\n      recalculateHeight: recalculateHeight,\\n      matchRowHeight: matchRowHeight\\n    };\\n\\n    var percentageSize = function (width, element) {\\n      var floatWidth = parseFloat(width);\\n      var pixelWidth = get$4(element);\\n      var getCellDelta = function (delta) {\\n        return delta / pixelWidth * 100;\\n      };\\n      var singleColumnWidth = function (w, _delta) {\\n        return [100 - w];\\n      };\\n      var minCellWidth = function () {\\n        return CellUtils.minWidth() / pixelWidth * 100;\\n      };\\n      var setTableWidth = function (table, _newWidths, delta) {\\n        var ratio = delta / 100;\\n        var change = ratio * floatWidth;\\n        Sizes.setPercentageWidth(table, floatWidth + change);\\n      };\\n      return {\\n        width: constant(floatWidth),\\n        pixelWidth: constant(pixelWidth),\\n        getWidths: ColumnSizes.getPercentageWidths,\\n        getCellDelta: getCellDelta,\\n        singleColumnWidth: singleColumnWidth,\\n        minCellWidth: minCellWidth,\\n        setElementWidth: Sizes.setPercentageWidth,\\n        setTableWidth: setTableWidth\\n      };\\n    };\\n    var pixelSize = function (width) {\\n      var getCellDelta = identity;\\n      var singleColumnWidth = function (w, delta) {\\n        var newNext = Math.max(CellUtils.minWidth(), w + delta);\\n        return [newNext - w];\\n      };\\n      var setTableWidth = function (table, newWidths, _delta) {\\n        var total = foldr(newWidths, function (b, a) {\\n          return b + a;\\n        }, 0);\\n        Sizes.setPixelWidth(table, total);\\n      };\\n      return {\\n        width: constant(width),\\n        pixelWidth: constant(width),\\n        getWidths: ColumnSizes.getPixelWidths,\\n        getCellDelta: getCellDelta,\\n        singleColumnWidth: singleColumnWidth,\\n        minCellWidth: CellUtils.minWidth,\\n        setElementWidth: Sizes.setPixelWidth,\\n        setTableWidth: setTableWidth\\n      };\\n    };\\n    var chooseSize = function (element, width) {\\n      var percentMatch = Sizes.percentageBasedSizeRegex().exec(width);\\n      if (percentMatch !== null) {\\n        return percentageSize(percentMatch[1], element);\\n      }\\n      var pixelMatch = Sizes.pixelBasedSizeRegex().exec(width);\\n      if (pixelMatch !== null) {\\n        var intWidth = parseInt(pixelMatch[1], 10);\\n        return pixelSize(intWidth);\\n      }\\n      var fallbackWidth = get$4(element);\\n      return pixelSize(fallbackWidth);\\n    };\\n    var getTableSize = function (element) {\\n      var width = Sizes.getRawWidth(element);\\n      return width.fold(function () {\\n        var fallbackWidth = get$4(element);\\n        return pixelSize(fallbackWidth);\\n      }, function (w) {\\n        return chooseSize(element, w);\\n      });\\n    };\\n    var TableSize = { getTableSize: getTableSize };\\n\\n    var getWarehouse$1 = function (list) {\\n      return Warehouse.generate(list);\\n    };\\n    var sumUp = function (newSize) {\\n      return foldr(newSize, function (b, a) {\\n        return b + a;\\n      }, 0);\\n    };\\n    var getTableWarehouse = function (table) {\\n      var list = DetailsList.fromTable(table);\\n      return getWarehouse$1(list);\\n    };\\n    var adjustWidth = function (table, delta, index, direction) {\\n      var tableSize = TableSize.getTableSize(table);\\n      var step = tableSize.getCellDelta(delta);\\n      var warehouse = getTableWarehouse(table);\\n      var widths = tableSize.getWidths(warehouse, direction, tableSize);\\n      var deltas = Deltas.determine(widths, index, step, tableSize);\\n      var newWidths = map(deltas, function (dx, i) {\\n        return dx + widths[i];\\n      });\\n      var newSizes = Recalculations.recalculateWidth(warehouse, newWidths);\\n      each(newSizes, function (cell) {\\n        tableSize.setElementWidth(cell.element(), cell.width());\\n      });\\n      if (index === warehouse.grid().columns() - 1) {\\n        tableSize.setTableWidth(table, newWidths, step);\\n      }\\n    };\\n    var adjustHeight = function (table, delta, index, direction) {\\n      var warehouse = getTableWarehouse(table);\\n      var heights = ColumnSizes.getPixelHeights(warehouse, direction);\\n      var newHeights = map(heights, function (dy, i) {\\n        return index === i ? Math.max(delta + dy, CellUtils.minHeight()) : dy;\\n      });\\n      var newCellSizes = Recalculations.recalculateHeight(warehouse, newHeights);\\n      var newRowSizes = Recalculations.matchRowHeight(warehouse, newHeights);\\n      each(newRowSizes, function (row) {\\n        Sizes.setHeight(row.element(), row.height());\\n      });\\n      each(newCellSizes, function (cell) {\\n        Sizes.setHeight(cell.element(), cell.height());\\n      });\\n      var total = sumUp(newHeights);\\n      Sizes.setHeight(table, total);\\n    };\\n    var adjustWidthTo = function (table, list, direction) {\\n      var tableSize = TableSize.getTableSize(table);\\n      var warehouse = getWarehouse$1(list);\\n      var widths = tableSize.getWidths(warehouse, direction, tableSize);\\n      var newSizes = Recalculations.recalculateWidth(warehouse, widths);\\n      each(newSizes, function (cell) {\\n        tableSize.setElementWidth(cell.element(), cell.width());\\n      });\\n      if (newSizes.length > 0) {\\n        tableSize.setTableWidth(table, widths, tableSize.getCellDelta(0));\\n      }\\n    };\\n    var Adjustments = {\\n      adjustWidth: adjustWidth,\\n      adjustHeight: adjustHeight,\\n      adjustWidthTo: adjustWidthTo\\n    };\\n\\n    var Cell = function (initial) {\\n      var value = initial;\\n      var get = function () {\\n        return value;\\n      };\\n      var set = function (v) {\\n        value = v;\\n      };\\n      var clone = function () {\\n        return Cell(get());\\n      };\\n      return {\\n        get: get,\\n        set: set,\\n        clone: clone\\n      };\\n    };\\n\\n    var base = function (handleUnsupported, required) {\\n      return baseWith(handleUnsupported, required, {\\n        validate: isFunction,\\n        label: 'function'\\n      });\\n    };\\n    var baseWith = function (handleUnsupported, required, pred) {\\n      if (required.length === 0) {\\n        throw new Error('You must specify at least one required field.');\\n      }\\n      validateStrArr('required', required);\\n      checkDupes(required);\\n      return function (obj) {\\n        var keys$1 = keys(obj);\\n        var allReqd = forall(required, function (req) {\\n          return contains(keys$1, req);\\n        });\\n        if (!allReqd) {\\n          reqMessage(required, keys$1);\\n        }\\n        handleUnsupported(required, keys$1);\\n        var invalidKeys = filter(required, function (key) {\\n          return !pred.validate(obj[key], key);\\n        });\\n        if (invalidKeys.length > 0) {\\n          invalidTypeMessage(invalidKeys, pred.label);\\n        }\\n        return obj;\\n      };\\n    };\\n    var handleExact = function (required, keys) {\\n      var unsupported = filter(keys, function (key) {\\n        return !contains(required, key);\\n      });\\n      if (unsupported.length > 0) {\\n        unsuppMessage(unsupported);\\n      }\\n    };\\n    var exactly = function (required) {\\n      return base(handleExact, required);\\n    };\\n\\n    var verifyGenerators = exactly([\\n      'cell',\\n      'row',\\n      'replace',\\n      'gap'\\n    ]);\\n    var elementToData = function (element) {\\n      var colspan = has(element, 'colspan') ? parseInt(get(element, 'colspan'), 10) : 1;\\n      var rowspan = has(element, 'rowspan') ? parseInt(get(element, 'rowspan'), 10) : 1;\\n      return {\\n        element: constant(element),\\n        colspan: constant(colspan),\\n        rowspan: constant(rowspan)\\n      };\\n    };\\n    var modification = function (generators, toData) {\\n      if (toData === void 0) {\\n        toData = elementToData;\\n      }\\n      verifyGenerators(generators);\\n      var position = Cell(Option.none());\\n      var nu = function (data) {\\n        return generators.cell(data);\\n      };\\n      var nuFrom = function (element) {\\n        var data = toData(element);\\n        return nu(data);\\n      };\\n      var add = function (element) {\\n        var replacement = nuFrom(element);\\n        if (position.get().isNone()) {\\n          position.set(Option.some(replacement));\\n        }\\n        recent = Option.some({\\n          item: element,\\n          replacement: replacement\\n        });\\n        return replacement;\\n      };\\n      var recent = Option.none();\\n      var getOrInit = function (element, comparator) {\\n        return recent.fold(function () {\\n          return add(element);\\n        }, function (p) {\\n          return comparator(element, p.item) ? p.replacement : add(element);\\n        });\\n      };\\n      return {\\n        getOrInit: getOrInit,\\n        cursor: position.get\\n      };\\n    };\\n    var transform = function (scope, tag) {\\n      return function (generators) {\\n        var position = Cell(Option.none());\\n        verifyGenerators(generators);\\n        var list = [];\\n        var find$1 = function (element, comparator) {\\n          return find(list, function (x) {\\n            return comparator(x.item, element);\\n          });\\n        };\\n        var makeNew = function (element) {\\n          var attrs = { scope: scope };\\n          var cell = generators.replace(element, tag, attrs);\\n          list.push({\\n            item: element,\\n            sub: cell\\n          });\\n          if (position.get().isNone()) {\\n            position.set(Option.some(cell));\\n          }\\n          return cell;\\n        };\\n        var replaceOrInit = function (element, comparator) {\\n          return find$1(element, comparator).fold(function () {\\n            return makeNew(element);\\n          }, function (p) {\\n            return comparator(element, p.item) ? p.sub : makeNew(element);\\n          });\\n        };\\n        return {\\n          replaceOrInit: replaceOrInit,\\n          cursor: position.get\\n        };\\n      };\\n    };\\n    var merging = function (generators) {\\n      verifyGenerators(generators);\\n      var position = Cell(Option.none());\\n      var combine = function (cell) {\\n        if (position.get().isNone()) {\\n          position.set(Option.some(cell));\\n        }\\n        return function () {\\n          var raw = generators.cell({\\n            element: constant(cell),\\n            colspan: constant(1),\\n            rowspan: constant(1)\\n          });\\n          remove$1(raw, 'width');\\n          remove$1(cell, 'width');\\n          return raw;\\n        };\\n      };\\n      return {\\n        combine: combine,\\n        cursor: position.get\\n      };\\n    };\\n    var Generators = {\\n      modification: modification,\\n      transform: transform,\\n      merging: merging\\n    };\\n\\n    var blockList = [\\n      'body',\\n      'p',\\n      'div',\\n      'article',\\n      'aside',\\n      'figcaption',\\n      'figure',\\n      'footer',\\n      'header',\\n      'nav',\\n      'section',\\n      'ol',\\n      'ul',\\n      'table',\\n      'thead',\\n      'tfoot',\\n      'tbody',\\n      'caption',\\n      'tr',\\n      'td',\\n      'th',\\n      'h1',\\n      'h2',\\n      'h3',\\n      'h4',\\n      'h5',\\n      'h6',\\n      'blockquote',\\n      'pre',\\n      'address'\\n    ];\\n    var isList = function (universe, item) {\\n      var tagName = universe.property().name(item);\\n      return contains([\\n        'ol',\\n        'ul'\\n      ], tagName);\\n    };\\n    var isBlock = function (universe, item) {\\n      var tagName = universe.property().name(item);\\n      return contains(blockList, tagName);\\n    };\\n    var isFormatting = function (universe, item) {\\n      var tagName = universe.property().name(item);\\n      return contains([\\n        'address',\\n        'pre',\\n        'p',\\n        'h1',\\n        'h2',\\n        'h3',\\n        'h4',\\n        'h5',\\n        'h6'\\n      ], tagName);\\n    };\\n    var isHeading = function (universe, item) {\\n      var tagName = universe.property().name(item);\\n      return contains([\\n        'h1',\\n        'h2',\\n        'h3',\\n        'h4',\\n        'h5',\\n        'h6'\\n      ], tagName);\\n    };\\n    var isContainer = function (universe, item) {\\n      return contains([\\n        'div',\\n        'li',\\n        'td',\\n        'th',\\n        'blockquote',\\n        'body',\\n        'caption'\\n      ], universe.property().name(item));\\n    };\\n    var isEmptyTag = function (universe, item) {\\n      return contains([\\n        'br',\\n        'img',\\n        'hr',\\n        'input'\\n      ], universe.property().name(item));\\n    };\\n    var isFrame = function (universe, item) {\\n      return universe.property().name(item) === 'iframe';\\n    };\\n    var isInline = function (universe, item) {\\n      return !(isBlock(universe, item) || isEmptyTag(universe, item)) && universe.property().name(item) !== 'li';\\n    };\\n    var Structure = {\\n      isBlock: isBlock,\\n      isList: isList,\\n      isFormatting: isFormatting,\\n      isHeading: isHeading,\\n      isContainer: isContainer,\\n      isEmptyTag: isEmptyTag,\\n      isFrame: isFrame,\\n      isInline: isInline\\n    };\\n\\n    var universe$1 = DomUniverse();\\n    var isBlock$1 = function (element) {\\n      return Structure.isBlock(universe$1, element);\\n    };\\n    var isList$1 = function (element) {\\n      return Structure.isList(universe$1, element);\\n    };\\n    var isFormatting$1 = function (element) {\\n      return Structure.isFormatting(universe$1, element);\\n    };\\n    var isHeading$1 = function (element) {\\n      return Structure.isHeading(universe$1, element);\\n    };\\n    var isContainer$1 = function (element) {\\n      return Structure.isContainer(universe$1, element);\\n    };\\n    var isEmptyTag$1 = function (element) {\\n      return Structure.isEmptyTag(universe$1, element);\\n    };\\n    var isFrame$1 = function (element) {\\n      return Structure.isFrame(universe$1, element);\\n    };\\n    var isInline$1 = function (element) {\\n      return Structure.isInline(universe$1, element);\\n    };\\n    var DomStructure = {\\n      isBlock: isBlock$1,\\n      isList: isList$1,\\n      isFormatting: isFormatting$1,\\n      isHeading: isHeading$1,\\n      isContainer: isContainer$1,\\n      isEmptyTag: isEmptyTag$1,\\n      isFrame: isFrame$1,\\n      isInline: isInline$1\\n    };\\n\\n    var merge$2 = function (cells) {\\n      var isBr = function (el) {\\n        return name(el) === 'br';\\n      };\\n      var advancedBr = function (children) {\\n        return forall(children, function (c) {\\n          return isBr(c) || isText(c) && get$2(c).trim().length === 0;\\n        });\\n      };\\n      var isListItem = function (el) {\\n        return name(el) === 'li' || ancestor(el, DomStructure.isList).isSome();\\n      };\\n      var siblingIsBlock = function (el) {\\n        return nextSibling(el).map(function (rightSibling) {\\n          if (DomStructure.isBlock(rightSibling)) {\\n            return true;\\n          }\\n          if (DomStructure.isEmptyTag(rightSibling)) {\\n            return name(rightSibling) === 'img' ? false : true;\\n          }\\n          return false;\\n        }).getOr(false);\\n      };\\n      var markCell = function (cell) {\\n        return last$1(cell).bind(function (rightEdge) {\\n          var rightSiblingIsBlock = siblingIsBlock(rightEdge);\\n          return parent(rightEdge).map(function (parent) {\\n            return rightSiblingIsBlock === true || isListItem(parent) || isBr(rightEdge) || DomStructure.isBlock(parent) && !eq(cell, parent) ? [] : [Element.fromTag('br')];\\n          });\\n        }).getOr([]);\\n      };\\n      var markContent = function () {\\n        var content = bind(cells, function (cell) {\\n          var children$1 = children(cell);\\n          return advancedBr(children$1) ? [] : children$1.concat(markCell(cell));\\n        });\\n        return content.length === 0 ? [Element.fromTag('br')] : content;\\n      };\\n      var contents = markContent();\\n      empty(cells[0]);\\n      append$1(cells[0], contents);\\n    };\\n    var TableContent = { merge: merge$2 };\\n\\n    var prune = function (table) {\\n      var cells = TableLookup.cells(table);\\n      if (cells.length === 0) {\\n        remove$2(table);\\n      }\\n    };\\n    var outcome = Immutable('grid', 'cursor');\\n    var elementFromGrid = function (grid, row, column) {\\n      return findIn(grid, row, column).orThunk(function () {\\n        return findIn(grid, 0, 0);\\n      });\\n    };\\n    var findIn = function (grid, row, column) {\\n      return Option.from(grid[row]).bind(function (r) {\\n        return Option.from(r.cells()[column]).bind(function (c) {\\n          return Option.from(c.element());\\n        });\\n      });\\n    };\\n    var bundle = function (grid, row, column) {\\n      return outcome(grid, findIn(grid, row, column));\\n    };\\n    var uniqueRows = function (details) {\\n      return foldl(details, function (rest, detail) {\\n        return exists(rest, function (currentDetail) {\\n          return currentDetail.row() === detail.row();\\n        }) ? rest : rest.concat([detail]);\\n      }, []).sort(function (detailA, detailB) {\\n        return detailA.row() - detailB.row();\\n      });\\n    };\\n    var uniqueColumns = function (details) {\\n      return foldl(details, function (rest, detail) {\\n        return exists(rest, function (currentDetail) {\\n          return currentDetail.column() === detail.column();\\n        }) ? rest : rest.concat([detail]);\\n      }, []).sort(function (detailA, detailB) {\\n        return detailA.column() - detailB.column();\\n      });\\n    };\\n    var insertRowBefore = function (grid, detail, comparator, genWrappers) {\\n      var example = detail.row();\\n      var targetIndex = detail.row();\\n      var newGrid = ModificationOperations.insertRowAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\\n      return bundle(newGrid, targetIndex, detail.column());\\n    };\\n    var insertRowsBefore = function (grid, details, comparator, genWrappers) {\\n      var example = details[0].row();\\n      var targetIndex = details[0].row();\\n      var rows = uniqueRows(details);\\n      var newGrid = foldl(rows, function (newG, _row) {\\n        return ModificationOperations.insertRowAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\\n      }, grid);\\n      return bundle(newGrid, targetIndex, details[0].column());\\n    };\\n    var insertRowAfter = function (grid, detail, comparator, genWrappers) {\\n      var example = detail.row();\\n      var targetIndex = detail.row() + detail.rowspan();\\n      var newGrid = ModificationOperations.insertRowAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\\n      return bundle(newGrid, targetIndex, detail.column());\\n    };\\n    var insertRowsAfter = function (grid, details, comparator, genWrappers) {\\n      var rows = uniqueRows(details);\\n      var example = rows[rows.length - 1].row();\\n      var targetIndex = rows[rows.length - 1].row() + rows[rows.length - 1].rowspan();\\n      var newGrid = foldl(rows, function (newG, _row) {\\n        return ModificationOperations.insertRowAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\\n      }, grid);\\n      return bundle(newGrid, targetIndex, details[0].column());\\n    };\\n    var insertColumnBefore = function (grid, detail, comparator, genWrappers) {\\n      var example = detail.column();\\n      var targetIndex = detail.column();\\n      var newGrid = ModificationOperations.insertColumnAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\\n      return bundle(newGrid, detail.row(), targetIndex);\\n    };\\n    var insertColumnsBefore = function (grid, details, comparator, genWrappers) {\\n      var columns = uniqueColumns(details);\\n      var example = columns[0].column();\\n      var targetIndex = columns[0].column();\\n      var newGrid = foldl(columns, function (newG, _row) {\\n        return ModificationOperations.insertColumnAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\\n      }, grid);\\n      return bundle(newGrid, details[0].row(), targetIndex);\\n    };\\n    var insertColumnAfter = function (grid, detail, comparator, genWrappers) {\\n      var example = detail.column();\\n      var targetIndex = detail.column() + detail.colspan();\\n      var newGrid = ModificationOperations.insertColumnAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\\n      return bundle(newGrid, detail.row(), targetIndex);\\n    };\\n    var insertColumnsAfter = function (grid, details, comparator, genWrappers) {\\n      var example = details[details.length - 1].column();\\n      var targetIndex = details[details.length - 1].column() + details[details.length - 1].colspan();\\n      var columns = uniqueColumns(details);\\n      var newGrid = foldl(columns, function (newG, _row) {\\n        return ModificationOperations.insertColumnAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\\n      }, grid);\\n      return bundle(newGrid, details[0].row(), targetIndex);\\n    };\\n    var makeRowHeader = function (grid, detail, comparator, genWrappers) {\\n      var newGrid = TransformOperations.replaceRow(grid, detail.row(), comparator, genWrappers.replaceOrInit);\\n      return bundle(newGrid, detail.row(), detail.column());\\n    };\\n    var makeColumnHeader = function (grid, detail, comparator, genWrappers) {\\n      var newGrid = TransformOperations.replaceColumn(grid, detail.column(), comparator, genWrappers.replaceOrInit);\\n      return bundle(newGrid, detail.row(), detail.column());\\n    };\\n    var unmakeRowHeader = function (grid, detail, comparator, genWrappers) {\\n      var newGrid = TransformOperations.replaceRow(grid, detail.row(), comparator, genWrappers.replaceOrInit);\\n      return bundle(newGrid, detail.row(), detail.column());\\n    };\\n    var unmakeColumnHeader = function (grid, detail, comparator, genWrappers) {\\n      var newGrid = TransformOperations.replaceColumn(grid, detail.column(), comparator, genWrappers.replaceOrInit);\\n      return bundle(newGrid, detail.row(), detail.column());\\n    };\\n    var splitCellIntoColumns$1 = function (grid, detail, comparator, genWrappers) {\\n      var newGrid = ModificationOperations.splitCellIntoColumns(grid, detail.row(), detail.column(), comparator, genWrappers.getOrInit);\\n      return bundle(newGrid, detail.row(), detail.column());\\n    };\\n    var splitCellIntoRows$1 = function (grid, detail, comparator, genWrappers) {\\n      var newGrid = ModificationOperations.splitCellIntoRows(grid, detail.row(), detail.column(), comparator, genWrappers.getOrInit);\\n      return bundle(newGrid, detail.row(), detail.column());\\n    };\\n    var eraseColumns = function (grid, details, _comparator, _genWrappers) {\\n      var columns = uniqueColumns(details);\\n      var newGrid = ModificationOperations.deleteColumnsAt(grid, columns[0].column(), columns[columns.length - 1].column());\\n      var cursor = elementFromGrid(newGrid, details[0].row(), details[0].column());\\n      return outcome(newGrid, cursor);\\n    };\\n    var eraseRows = function (grid, details, _comparator, _genWrappers) {\\n      var rows = uniqueRows(details);\\n      var newGrid = ModificationOperations.deleteRowsAt(grid, rows[0].row(), rows[rows.length - 1].row());\\n      var cursor = elementFromGrid(newGrid, details[0].row(), details[0].column());\\n      return outcome(newGrid, cursor);\\n    };\\n    var mergeCells = function (grid, mergable, comparator, _genWrappers) {\\n      var cells = mergable.cells();\\n      TableContent.merge(cells);\\n      var newGrid = MergingOperations.merge(grid, mergable.bounds(), comparator, constant(cells[0]));\\n      return outcome(newGrid, Option.from(cells[0]));\\n    };\\n    var unmergeCells = function (grid, unmergable, comparator, genWrappers) {\\n      var newGrid = foldr(unmergable, function (b, cell) {\\n        return MergingOperations.unmerge(b, cell, comparator, genWrappers.combine(cell));\\n      }, grid);\\n      return outcome(newGrid, Option.from(unmergable[0]));\\n    };\\n    var pasteCells = function (grid, pasteDetails, comparator, _genWrappers) {\\n      var gridify = function (table, generators) {\\n        var list = DetailsList.fromTable(table);\\n        var wh = Warehouse.generate(list);\\n        return Transitions.toGrid(wh, generators, true);\\n      };\\n      var gridB = gridify(pasteDetails.clipboard(), pasteDetails.generators());\\n      var startAddress = address(pasteDetails.row(), pasteDetails.column());\\n      var mergedGrid = TableMerge.merge(startAddress, grid, gridB, pasteDetails.generators(), comparator);\\n      return mergedGrid.fold(function () {\\n        return outcome(grid, Option.some(pasteDetails.element()));\\n      }, function (nuGrid) {\\n        var cursor = elementFromGrid(nuGrid, pasteDetails.row(), pasteDetails.column());\\n        return outcome(nuGrid, cursor);\\n      });\\n    };\\n    var gridifyRows = function (rows, generators, example) {\\n      var pasteDetails = DetailsList.fromPastedRows(rows, example);\\n      var wh = Warehouse.generate(pasteDetails);\\n      return Transitions.toGrid(wh, generators, true);\\n    };\\n    var pasteRowsBefore = function (grid, pasteDetails, comparator, _genWrappers) {\\n      var example = grid[pasteDetails.cells[0].row()];\\n      var index = pasteDetails.cells[0].row();\\n      var gridB = gridifyRows(pasteDetails.clipboard(), pasteDetails.generators(), example);\\n      var mergedGrid = TableMerge.insert(index, grid, gridB, pasteDetails.generators(), comparator);\\n      var cursor = elementFromGrid(mergedGrid, pasteDetails.cells[0].row(), pasteDetails.cells[0].column());\\n      return outcome(mergedGrid, cursor);\\n    };\\n    var pasteRowsAfter = function (grid, pasteDetails, comparator, _genWrappers) {\\n      var example = grid[pasteDetails.cells[0].row()];\\n      var index = pasteDetails.cells[pasteDetails.cells.length - 1].row() + pasteDetails.cells[pasteDetails.cells.length - 1].rowspan();\\n      var gridB = gridifyRows(pasteDetails.clipboard(), pasteDetails.generators(), example);\\n      var mergedGrid = TableMerge.insert(index, grid, gridB, pasteDetails.generators(), comparator);\\n      var cursor = elementFromGrid(mergedGrid, pasteDetails.cells[0].row(), pasteDetails.cells[0].column());\\n      return outcome(mergedGrid, cursor);\\n    };\\n    var resize = Adjustments.adjustWidthTo;\\n    var TableOperations = {\\n      insertRowBefore: run(insertRowBefore, onCell, noop, noop, Generators.modification),\\n      insertRowsBefore: run(insertRowsBefore, onCells, noop, noop, Generators.modification),\\n      insertRowAfter: run(insertRowAfter, onCell, noop, noop, Generators.modification),\\n      insertRowsAfter: run(insertRowsAfter, onCells, noop, noop, Generators.modification),\\n      insertColumnBefore: run(insertColumnBefore, onCell, resize, noop, Generators.modification),\\n      insertColumnsBefore: run(insertColumnsBefore, onCells, resize, noop, Generators.modification),\\n      insertColumnAfter: run(insertColumnAfter, onCell, resize, noop, Generators.modification),\\n      insertColumnsAfter: run(insertColumnsAfter, onCells, resize, noop, Generators.modification),\\n      splitCellIntoColumns: run(splitCellIntoColumns$1, onCell, resize, noop, Generators.modification),\\n      splitCellIntoRows: run(splitCellIntoRows$1, onCell, noop, noop, Generators.modification),\\n      eraseColumns: run(eraseColumns, onCells, resize, prune, Generators.modification),\\n      eraseRows: run(eraseRows, onCells, noop, prune, Generators.modification),\\n      makeColumnHeader: run(makeColumnHeader, onCell, noop, noop, Generators.transform('row', 'th')),\\n      unmakeColumnHeader: run(unmakeColumnHeader, onCell, noop, noop, Generators.transform(null, 'td')),\\n      makeRowHeader: run(makeRowHeader, onCell, noop, noop, Generators.transform('col', 'th')),\\n      unmakeRowHeader: run(unmakeRowHeader, onCell, noop, noop, Generators.transform(null, 'td')),\\n      mergeCells: run(mergeCells, onMergable, noop, noop, Generators.merging),\\n      unmergeCells: run(unmergeCells, onUnmergable, resize, noop, Generators.merging),\\n      pasteCells: run(pasteCells, onPaste, resize, noop, Generators.modification),\\n      pasteRowsBefore: run(pasteRowsBefore, onPasteRows, noop, noop, Generators.modification),\\n      pasteRowsAfter: run(pasteRowsAfter, onPasteRows, noop, noop, Generators.modification)\\n    };\\n\\n    var getBody$1 = function (editor) {\\n      return Element.fromDom(editor.getBody());\\n    };\\n    var getPixelWidth$1 = function (elm) {\\n      return elm.getBoundingClientRect().width;\\n    };\\n    var getPixelHeight = function (elm) {\\n      return elm.getBoundingClientRect().height;\\n    };\\n    var getIsRoot = function (editor) {\\n      return function (element) {\\n        return eq(element, getBody$1(editor));\\n      };\\n    };\\n    var removePxSuffix = function (size) {\\n      return size ? size.replace(/px$/, '') : '';\\n    };\\n    var addSizeSuffix = function (size) {\\n      if (/^[0-9]+$/.test(size)) {\\n        size += 'px';\\n      }\\n      return size;\\n    };\\n    var removeDataStyle = function (table) {\\n      var dataStyleCells = descendants$1(table, 'td[data-mce-style],th[data-mce-style]');\\n      remove(table, 'data-mce-style');\\n      each(dataStyleCells, function (cell) {\\n        remove(cell, 'data-mce-style');\\n      });\\n    };\\n\\n    var getDirection = function (element) {\\n      return get$1(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';\\n    };\\n\\n    var ltr$1 = { isRtl: constant(false) };\\n    var rtl$1 = { isRtl: constant(true) };\\n    var directionAt = function (element) {\\n      var dir = getDirection(element);\\n      return dir === 'rtl' ? rtl$1 : ltr$1;\\n    };\\n    var Direction = { directionAt: directionAt };\\n\\n    var defaultTableToolbar = [\\n      'tableprops',\\n      'tabledelete',\\n      '|',\\n      'tableinsertrowbefore',\\n      'tableinsertrowafter',\\n      'tabledeleterow',\\n      '|',\\n      'tableinsertcolbefore',\\n      'tableinsertcolafter',\\n      'tabledeletecol'\\n    ];\\n    var defaultStyles = {\\n      'border-collapse': 'collapse',\\n      'width': '100%'\\n    };\\n    var defaultAttributes = { border: '1' };\\n    var getDefaultAttributes = function (editor) {\\n      return editor.getParam('table_default_attributes', defaultAttributes, 'object');\\n    };\\n    var getDefaultStyles = function (editor) {\\n      return editor.getParam('table_default_styles', defaultStyles, 'object');\\n    };\\n    var hasTableResizeBars = function (editor) {\\n      return editor.getParam('table_resize_bars', true, 'boolean');\\n    };\\n    var hasTabNavigation = function (editor) {\\n      return editor.getParam('table_tab_navigation', true, 'boolean');\\n    };\\n    var hasAdvancedCellTab = function (editor) {\\n      return editor.getParam('table_cell_advtab', true, 'boolean');\\n    };\\n    var hasAdvancedRowTab = function (editor) {\\n      return editor.getParam('table_row_advtab', true, 'boolean');\\n    };\\n    var hasAdvancedTableTab = function (editor) {\\n      return editor.getParam('table_advtab', true, 'boolean');\\n    };\\n    var hasAppearanceOptions = function (editor) {\\n      return editor.getParam('table_appearance_options', true, 'boolean');\\n    };\\n    var hasTableGrid = function (editor) {\\n      return editor.getParam('table_grid', true, 'boolean');\\n    };\\n    var shouldStyleWithCss = function (editor) {\\n      return editor.getParam('table_style_by_css', false, 'boolean');\\n    };\\n    var getCellClassList = function (editor) {\\n      return editor.getParam('table_cell_class_list', [], 'array');\\n    };\\n    var getRowClassList = function (editor) {\\n      return editor.getParam('table_row_class_list', [], 'array');\\n    };\\n    var getTableClassList = function (editor) {\\n      return editor.getParam('table_class_list', [], 'array');\\n    };\\n    var getColorPickerCallback = function (editor) {\\n      return editor.getParam('color_picker_callback');\\n    };\\n    var isPixelsForced = function (editor) {\\n      return editor.getParam('table_responsive_width') === false;\\n    };\\n    var getCloneElements = function (editor) {\\n      var cloneElements = editor.getParam('table_clone_elements');\\n      if (isString(cloneElements)) {\\n        return Option.some(cloneElements.split(/[ ,]/));\\n      } else if (Array.isArray(cloneElements)) {\\n        return Option.some(cloneElements);\\n      } else {\\n        return Option.none();\\n      }\\n    };\\n    var hasObjectResizing = function (editor) {\\n      var objectResizing = editor.getParam('object_resizing', true);\\n      return objectResizing === 'table' || objectResizing;\\n    };\\n    var getToolbar = function (editor) {\\n      var toolbar = editor.getParam('table_toolbar', defaultTableToolbar);\\n      if (toolbar === '' || toolbar === false) {\\n        return [];\\n      } else if (isString(toolbar)) {\\n        return toolbar.split(/[ ,]/);\\n      } else if (isArray(toolbar)) {\\n        return toolbar;\\n      } else {\\n        return [];\\n      }\\n    };\\n\\n    var fireNewRow = function (editor, row) {\\n      return editor.fire('newrow', { node: row });\\n    };\\n    var fireNewCell = function (editor, cell) {\\n      return editor.fire('newcell', { node: cell });\\n    };\\n    var fireObjectResizeStart = function (editor, target, width, height) {\\n      editor.fire('ObjectResizeStart', {\\n        target: target,\\n        width: width,\\n        height: height\\n      });\\n    };\\n    var fireObjectResized = function (editor, target, width, height) {\\n      editor.fire('ObjectResized', {\\n        target: target,\\n        width: width,\\n        height: height\\n      });\\n    };\\n\\n    var TableActions = function (editor, lazyWire) {\\n      var isTableBody = function (editor) {\\n        return name(getBody$1(editor)) === 'table';\\n      };\\n      var lastRowGuard = function (table) {\\n        var size = TableGridSize.getGridSize(table);\\n        return isTableBody(editor) === false || size.rows() > 1;\\n      };\\n      var lastColumnGuard = function (table) {\\n        var size = TableGridSize.getGridSize(table);\\n        return isTableBody(editor) === false || size.columns() > 1;\\n      };\\n      var cloneFormats = getCloneElements(editor);\\n      var execute = function (operation, guard, mutate, lazyWire) {\\n        return function (table, target) {\\n          removeDataStyle(table);\\n          var wire = lazyWire();\\n          var doc = Element.fromDom(editor.getDoc());\\n          var direction = TableDirection(Direction.directionAt);\\n          var generators = TableFill.cellOperations(mutate, doc, cloneFormats);\\n          return guard(table) ? operation(wire, table, target, generators, direction).bind(function (result) {\\n            each(result.newRows(), function (row) {\\n              fireNewRow(editor, row.dom());\\n            });\\n            each(result.newCells(), function (cell) {\\n              fireNewCell(editor, cell.dom());\\n            });\\n            return result.cursor().map(function (cell) {\\n              var rng = editor.dom.createRng();\\n              rng.setStart(cell.dom(), 0);\\n              rng.setEnd(cell.dom(), 0);\\n              return rng;\\n            });\\n          }) : Option.none();\\n        };\\n      };\\n      var deleteRow = execute(TableOperations.eraseRows, lastRowGuard, noop, lazyWire);\\n      var deleteColumn = execute(TableOperations.eraseColumns, lastColumnGuard, noop, lazyWire);\\n      var insertRowsBefore = execute(TableOperations.insertRowsBefore, always, noop, lazyWire);\\n      var insertRowsAfter = execute(TableOperations.insertRowsAfter, always, noop, lazyWire);\\n      var insertColumnsBefore = execute(TableOperations.insertColumnsBefore, always, CellMutations.halve, lazyWire);\\n      var insertColumnsAfter = execute(TableOperations.insertColumnsAfter, always, CellMutations.halve, lazyWire);\\n      var mergeCells = execute(TableOperations.mergeCells, always, noop, lazyWire);\\n      var unmergeCells = execute(TableOperations.unmergeCells, always, noop, lazyWire);\\n      var pasteRowsBefore = execute(TableOperations.pasteRowsBefore, always, noop, lazyWire);\\n      var pasteRowsAfter = execute(TableOperations.pasteRowsAfter, always, noop, lazyWire);\\n      var pasteCells = execute(TableOperations.pasteCells, always, noop, lazyWire);\\n      return {\\n        deleteRow: deleteRow,\\n        deleteColumn: deleteColumn,\\n        insertRowsBefore: insertRowsBefore,\\n        insertRowsAfter: insertRowsAfter,\\n        insertColumnsBefore: insertColumnsBefore,\\n        insertColumnsAfter: insertColumnsAfter,\\n        mergeCells: mergeCells,\\n        unmergeCells: unmergeCells,\\n        pasteRowsBefore: pasteRowsBefore,\\n        pasteRowsAfter: pasteRowsAfter,\\n        pasteCells: pasteCells\\n      };\\n    };\\n\\n    var copyRows = function (table, target, generators) {\\n      var list = DetailsList.fromTable(table);\\n      var house = Warehouse.generate(list);\\n      var details = onCells(house, target);\\n      return details.map(function (selectedCells) {\\n        var grid = Transitions.toGrid(house, generators, false);\\n        var slicedGrid = grid.slice(selectedCells[0].row(), selectedCells[selectedCells.length - 1].row() + selectedCells[selectedCells.length - 1].rowspan());\\n        var slicedDetails = toDetailList(slicedGrid, generators);\\n        return Redraw.copy(slicedDetails);\\n      });\\n    };\\n    var CopyRows = { copyRows: copyRows };\\n\\n    var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\\n\\n    var getTDTHOverallStyle = function (dom, elm, name) {\\n      var cells = dom.select('td,th', elm);\\n      var firstChildStyle;\\n      var checkChildren = function (firstChildStyle, elms) {\\n        for (var i = 0; i < elms.length; i++) {\\n          var currentStyle = dom.getStyle(elms[i], name);\\n          if (typeof firstChildStyle === 'undefined') {\\n            firstChildStyle = currentStyle;\\n          }\\n          if (firstChildStyle !== currentStyle) {\\n            return '';\\n          }\\n        }\\n        return firstChildStyle;\\n      };\\n      firstChildStyle = checkChildren(firstChildStyle, cells);\\n      return firstChildStyle;\\n    };\\n    var applyAlign = function (editor, elm, name) {\\n      if (name) {\\n        editor.formatter.apply('align' + name, {}, elm);\\n      }\\n    };\\n    var applyVAlign = function (editor, elm, name) {\\n      if (name) {\\n        editor.formatter.apply('valign' + name, {}, elm);\\n      }\\n    };\\n    var unApplyAlign = function (editor, elm) {\\n      global$1.each('left center right'.split(' '), function (name) {\\n        editor.formatter.remove('align' + name, {}, elm);\\n      });\\n    };\\n    var unApplyVAlign = function (editor, elm) {\\n      global$1.each('top middle bottom'.split(' '), function (name) {\\n        editor.formatter.remove('valign' + name, {}, elm);\\n      });\\n    };\\n    var Styles$1 = {\\n      applyAlign: applyAlign,\\n      applyVAlign: applyVAlign,\\n      unApplyAlign: unApplyAlign,\\n      unApplyVAlign: unApplyVAlign,\\n      getTDTHOverallStyle: getTDTHOverallStyle\\n    };\\n\\n    var buildListItems = function (inputList, itemCallback, startItems) {\\n      var appendItems = function (values, output) {\\n        output = output || [];\\n        global$1.each(values, function (item) {\\n          var menuItem = { text: item.text || item.title };\\n          if (item.menu) {\\n            menuItem.menu = appendItems(item.menu);\\n          } else {\\n            menuItem.value = item.value;\\n            if (itemCallback) {\\n              itemCallback(menuItem);\\n            }\\n          }\\n          output.push(menuItem);\\n        });\\n        return output;\\n      };\\n      return appendItems(inputList, startItems || []);\\n    };\\n    function styleFieldHasFocus(e) {\\n      return e.control.rootControl.find('#style')[0].getEl().isEqualNode(domGlobals.document.activeElement);\\n    }\\n    var syncAdvancedStyleFields = function (editor, evt) {\\n      if (styleFieldHasFocus(evt)) {\\n        updateAdvancedFields(editor, evt);\\n      } else {\\n        updateStyleField(editor, evt);\\n      }\\n    };\\n    var updateStyleField = function (editor, evt) {\\n      var dom = editor.dom;\\n      var rootControl = evt.control.rootControl;\\n      var data = rootControl.toJSON();\\n      var css = dom.parseStyle(data.style);\\n      css['border-style'] = data.borderStyle;\\n      css['border-color'] = data.borderColor;\\n      css['background-color'] = data.backgroundColor;\\n      css.width = data.width ? addSizeSuffix(data.width) : '';\\n      css.height = data.height ? addSizeSuffix(data.height) : '';\\n      rootControl.find('#style').value(dom.serializeStyle(dom.parseStyle(dom.serializeStyle(css))));\\n    };\\n    var updateAdvancedFields = function (editor, evt) {\\n      var dom = editor.dom;\\n      var rootControl = evt.control.rootControl;\\n      var data = rootControl.toJSON();\\n      var css = dom.parseStyle(data.style);\\n      rootControl.find('#borderStyle').value(css['border-style'] || '');\\n      rootControl.find('#borderColor').value(css['border-color'] || '');\\n      rootControl.find('#backgroundColor').value(css['background-color'] || '');\\n      rootControl.find('#width').value(css.width || '');\\n      rootControl.find('#height').value(css.height || '');\\n    };\\n    var extractAdvancedStyles = function (dom, elm) {\\n      var css = dom.parseStyle(dom.getAttrib(elm, 'style'));\\n      var data = {};\\n      if (css['border-style']) {\\n        data.borderStyle = css['border-style'];\\n      }\\n      if (css['border-color']) {\\n        data.borderColor = css['border-color'];\\n      }\\n      if (css['background-color']) {\\n        data.backgroundColor = css['background-color'];\\n      }\\n      data.style = dom.serializeStyle(css);\\n      return data;\\n    };\\n    var createStyleForm = function (editor) {\\n      var createColorPickAction = function () {\\n        var colorPickerCallback = getColorPickerCallback(editor);\\n        if (colorPickerCallback) {\\n          return function (evt) {\\n            return colorPickerCallback.call(editor, function (value) {\\n              evt.control.value(value).fire('change');\\n            }, evt.control.value());\\n          };\\n        }\\n      };\\n      return {\\n        title: 'Advanced',\\n        type: 'form',\\n        defaults: { onchange: curry(updateStyleField, editor) },\\n        items: [\\n          {\\n            label: 'Style',\\n            name: 'style',\\n            type: 'textbox',\\n            onchange: curry(updateAdvancedFields, editor)\\n          },\\n          {\\n            type: 'form',\\n            padding: 0,\\n            formItemDefaults: {\\n              layout: 'grid',\\n              alignH: [\\n                'start',\\n                'right'\\n              ]\\n            },\\n            defaults: { size: 7 },\\n            items: [\\n              {\\n                label: 'Border style',\\n                type: 'listbox',\\n                name: 'borderStyle',\\n                width: 90,\\n                onselect: curry(updateStyleField, editor),\\n                values: [\\n                  {\\n                    text: 'Select...',\\n                    value: ''\\n                  },\\n                  {\\n                    text: 'Solid',\\n                    value: 'solid'\\n                  },\\n                  {\\n                    text: 'Dotted',\\n                    value: 'dotted'\\n                  },\\n                  {\\n                    text: 'Dashed',\\n                    value: 'dashed'\\n                  },\\n                  {\\n                    text: 'Double',\\n                    value: 'double'\\n                  },\\n                  {\\n                    text: 'Groove',\\n                    value: 'groove'\\n                  },\\n                  {\\n                    text: 'Ridge',\\n                    value: 'ridge'\\n                  },\\n                  {\\n                    text: 'Inset',\\n                    value: 'inset'\\n                  },\\n                  {\\n                    text: 'Outset',\\n                    value: 'outset'\\n                  },\\n                  {\\n                    text: 'None',\\n                    value: 'none'\\n                  },\\n                  {\\n                    text: 'Hidden',\\n                    value: 'hidden'\\n                  }\\n                ]\\n              },\\n              {\\n                label: 'Border color',\\n                type: 'colorbox',\\n                name: 'borderColor',\\n                onaction: createColorPickAction()\\n              },\\n              {\\n                label: 'Background color',\\n                type: 'colorbox',\\n                name: 'backgroundColor',\\n                onaction: createColorPickAction()\\n              }\\n            ]\\n          }\\n        ]\\n      };\\n    };\\n    var Helpers = {\\n      createStyleForm: createStyleForm,\\n      buildListItems: buildListItems,\\n      updateStyleField: updateStyleField,\\n      extractAdvancedStyles: extractAdvancedStyles,\\n      updateAdvancedFields: updateAdvancedFields,\\n      syncAdvancedStyleFields: syncAdvancedStyleFields\\n    };\\n\\n    var updateStyles = function (elm, cssText) {\\n      delete elm.dataset.mceStyle;\\n      elm.style.cssText += ';' + cssText;\\n    };\\n    var extractDataFromElement = function (editor, elm) {\\n      var dom = editor.dom;\\n      var data = {\\n        width: dom.getStyle(elm, 'width') || dom.getAttrib(elm, 'width'),\\n        height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),\\n        scope: dom.getAttrib(elm, 'scope'),\\n        class: dom.getAttrib(elm, 'class'),\\n        type: elm.nodeName.toLowerCase(),\\n        style: '',\\n        align: '',\\n        valign: ''\\n      };\\n      global$1.each('left center right'.split(' '), function (name) {\\n        if (editor.formatter.matchNode(elm, 'align' + name)) {\\n          data.align = name;\\n        }\\n      });\\n      global$1.each('top middle bottom'.split(' '), function (name) {\\n        if (editor.formatter.matchNode(elm, 'valign' + name)) {\\n          data.valign = name;\\n        }\\n      });\\n      if (hasAdvancedCellTab(editor)) {\\n        global$1.extend(data, Helpers.extractAdvancedStyles(dom, elm));\\n      }\\n      return data;\\n    };\\n    var onSubmitCellForm = function (editor, cells, evt) {\\n      var dom = editor.dom;\\n      var data;\\n      function setAttrib(elm, name, value) {\\n        if (cells.length === 1 || value) {\\n          dom.setAttrib(elm, name, value);\\n        }\\n      }\\n      function setStyle(elm, name, value) {\\n        if (cells.length === 1 || value) {\\n          dom.setStyle(elm, name, value);\\n        }\\n      }\\n      if (hasAdvancedCellTab(editor)) {\\n        Helpers.syncAdvancedStyleFields(editor, evt);\\n      }\\n      data = evt.control.rootControl.toJSON();\\n      editor.undoManager.transact(function () {\\n        global$1.each(cells, function (cellElm) {\\n          setAttrib(cellElm, 'scope', data.scope);\\n          if (cells.length === 1) {\\n            setAttrib(cellElm, 'style', data.style);\\n          } else {\\n            updateStyles(cellElm, data.style);\\n          }\\n          setAttrib(cellElm, 'class', data.class);\\n          setStyle(cellElm, 'width', addSizeSuffix(data.width));\\n          setStyle(cellElm, 'height', addSizeSuffix(data.height));\\n          if (data.type && cellElm.nodeName.toLowerCase() !== data.type) {\\n            cellElm = dom.rename(cellElm, data.type);\\n          }\\n          if (cells.length === 1) {\\n            Styles$1.unApplyAlign(editor, cellElm);\\n            Styles$1.unApplyVAlign(editor, cellElm);\\n          }\\n          if (data.align) {\\n            Styles$1.applyAlign(editor, cellElm, data.align);\\n          }\\n          if (data.valign) {\\n            Styles$1.applyVAlign(editor, cellElm, data.valign);\\n          }\\n        });\\n        editor.focus();\\n      });\\n    };\\n    var open = function (editor) {\\n      var cellElm, data, classListCtrl, cells = [];\\n      cells = editor.dom.select('td[data-mce-selected],th[data-mce-selected]');\\n      cellElm = editor.dom.getParent(editor.selection.getStart(), 'td,th');\\n      if (!cells.length && cellElm) {\\n        cells.push(cellElm);\\n      }\\n      cellElm = cellElm || cells[0];\\n      if (!cellElm) {\\n        return;\\n      }\\n      if (cells.length > 1) {\\n        data = {\\n          width: '',\\n          height: '',\\n          scope: '',\\n          class: '',\\n          align: '',\\n          valign: '',\\n          style: '',\\n          type: cellElm.nodeName.toLowerCase()\\n        };\\n      } else {\\n        data = extractDataFromElement(editor, cellElm);\\n      }\\n      if (getCellClassList(editor).length > 0) {\\n        classListCtrl = {\\n          name: 'class',\\n          type: 'listbox',\\n          label: 'Class',\\n          values: Helpers.buildListItems(getCellClassList(editor), function (item) {\\n            if (item.value) {\\n              item.textStyle = function () {\\n                return editor.formatter.getCssText({\\n                  block: 'td',\\n                  classes: [item.value]\\n                });\\n              };\\n            }\\n          })\\n        };\\n      }\\n      var generalCellForm = {\\n        type: 'form',\\n        layout: 'flex',\\n        direction: 'column',\\n        labelGapCalc: 'children',\\n        padding: 0,\\n        items: [\\n          {\\n            type: 'form',\\n            layout: 'grid',\\n            columns: 2,\\n            labelGapCalc: false,\\n            padding: 0,\\n            defaults: {\\n              type: 'textbox',\\n              maxWidth: 50\\n            },\\n            items: [\\n              {\\n                label: 'Width',\\n                name: 'width',\\n                onchange: curry(Helpers.updateStyleField, editor)\\n              },\\n              {\\n                label: 'Height',\\n                name: 'height',\\n                onchange: curry(Helpers.updateStyleField, editor)\\n              },\\n              {\\n                label: 'Cell type',\\n                name: 'type',\\n                type: 'listbox',\\n                text: 'None',\\n                minWidth: 90,\\n                maxWidth: null,\\n                values: [\\n                  {\\n                    text: 'Cell',\\n                    value: 'td'\\n                  },\\n                  {\\n                    text: 'Header cell',\\n                    value: 'th'\\n                  }\\n                ]\\n              },\\n              {\\n                label: 'Scope',\\n                name: 'scope',\\n                type: 'listbox',\\n                text: 'None',\\n                minWidth: 90,\\n                maxWidth: null,\\n                values: [\\n                  {\\n                    text: 'None',\\n                    value: ''\\n                  },\\n                  {\\n                    text: 'Row',\\n                    value: 'row'\\n                  },\\n                  {\\n                    text: 'Column',\\n                    value: 'col'\\n                  },\\n                  {\\n                    text: 'Row group',\\n                    value: 'rowgroup'\\n                  },\\n                  {\\n                    text: 'Column group',\\n                    value: 'colgroup'\\n                  }\\n                ]\\n              },\\n              {\\n                label: 'H Align',\\n                name: 'align',\\n                type: 'listbox',\\n                text: 'None',\\n                minWidth: 90,\\n                maxWidth: null,\\n                values: [\\n                  {\\n                    text: 'None',\\n                    value: ''\\n                  },\\n                  {\\n                    text: 'Left',\\n                    value: 'left'\\n                  },\\n                  {\\n                    text: 'Center',\\n                    value: 'center'\\n                  },\\n                  {\\n                    text: 'Right',\\n                    value: 'right'\\n                  }\\n                ]\\n              },\\n              {\\n                label: 'V Align',\\n                name: 'valign',\\n                type: 'listbox',\\n                text: 'None',\\n                minWidth: 90,\\n                maxWidth: null,\\n                values: [\\n                  {\\n                    text: 'None',\\n                    value: ''\\n                  },\\n                  {\\n                    text: 'Top',\\n                    value: 'top'\\n                  },\\n                  {\\n                    text: 'Middle',\\n                    value: 'middle'\\n                  },\\n                  {\\n                    text: 'Bottom',\\n                    value: 'bottom'\\n                  }\\n                ]\\n              }\\n            ]\\n          },\\n          classListCtrl\\n        ]\\n      };\\n      if (hasAdvancedCellTab(editor)) {\\n        editor.windowManager.open({\\n          title: 'Cell properties',\\n          bodyType: 'tabpanel',\\n          data: data,\\n          body: [\\n            {\\n              title: 'General',\\n              type: 'form',\\n              items: generalCellForm\\n            },\\n            Helpers.createStyleForm(editor)\\n          ],\\n          onsubmit: curry(onSubmitCellForm, editor, cells)\\n        });\\n      } else {\\n        editor.windowManager.open({\\n          title: 'Cell properties',\\n          data: data,\\n          body: generalCellForm,\\n          onsubmit: curry(onSubmitCellForm, editor, cells)\\n        });\\n      }\\n    };\\n    var CellDialog = { open: open };\\n\\n    var extractDataFromElement$1 = function (editor, elm) {\\n      var dom = editor.dom;\\n      var data = {\\n        height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),\\n        scope: dom.getAttrib(elm, 'scope'),\\n        class: dom.getAttrib(elm, 'class'),\\n        align: '',\\n        style: '',\\n        type: elm.parentNode.nodeName.toLowerCase()\\n      };\\n      global$1.each('left center right'.split(' '), function (name) {\\n        if (editor.formatter.matchNode(elm, 'align' + name)) {\\n          data.align = name;\\n        }\\n      });\\n      if (hasAdvancedRowTab(editor)) {\\n        global$1.extend(data, Helpers.extractAdvancedStyles(dom, elm));\\n      }\\n      return data;\\n    };\\n    var switchRowType = function (dom, rowElm, toType) {\\n      var tableElm = dom.getParent(rowElm, 'table');\\n      var oldParentElm = rowElm.parentNode;\\n      var parentElm = dom.select(toType, tableElm)[0];\\n      if (!parentElm) {\\n        parentElm = dom.create(toType);\\n        if (tableElm.firstChild) {\\n          if (tableElm.firstChild.nodeName === 'CAPTION') {\\n            dom.insertAfter(parentElm, tableElm.firstChild);\\n          } else {\\n            tableElm.insertBefore(parentElm, tableElm.firstChild);\\n          }\\n        } else {\\n          tableElm.appendChild(parentElm);\\n        }\\n      }\\n      parentElm.appendChild(rowElm);\\n      if (!oldParentElm.hasChildNodes()) {\\n        dom.remove(oldParentElm);\\n      }\\n    };\\n    function onSubmitRowForm(editor, rows, oldData, evt) {\\n      var dom = editor.dom;\\n      function setAttrib(elm, name, value) {\\n        if (rows.length === 1 || value) {\\n          dom.setAttrib(elm, name, value);\\n        }\\n      }\\n      function setStyle(elm, name, value) {\\n        if (rows.length === 1 || value) {\\n          dom.setStyle(elm, name, value);\\n        }\\n      }\\n      if (hasAdvancedRowTab(editor)) {\\n        Helpers.syncAdvancedStyleFields(editor, evt);\\n      }\\n      var data = evt.control.rootControl.toJSON();\\n      editor.undoManager.transact(function () {\\n        global$1.each(rows, function (rowElm) {\\n          setAttrib(rowElm, 'scope', data.scope);\\n          setAttrib(rowElm, 'style', data.style);\\n          setAttrib(rowElm, 'class', data.class);\\n          setStyle(rowElm, 'height', addSizeSuffix(data.height));\\n          if (data.type !== rowElm.parentNode.nodeName.toLowerCase()) {\\n            switchRowType(editor.dom, rowElm, data.type);\\n          }\\n          if (data.align !== oldData.align) {\\n            Styles$1.unApplyAlign(editor, rowElm);\\n            Styles$1.applyAlign(editor, rowElm, data.align);\\n          }\\n        });\\n        editor.focus();\\n      });\\n    }\\n    var open$1 = function (editor) {\\n      var dom = editor.dom;\\n      var tableElm, cellElm, rowElm, classListCtrl, data;\\n      var rows = [];\\n      var generalRowForm;\\n      tableElm = dom.getParent(editor.selection.getStart(), 'table');\\n      cellElm = dom.getParent(editor.selection.getStart(), 'td,th');\\n      global$1.each(tableElm.rows, function (row) {\\n        global$1.each(row.cells, function (cell) {\\n          if (dom.getAttrib(cell, 'data-mce-selected') || cell === cellElm) {\\n            rows.push(row);\\n            return false;\\n          }\\n        });\\n      });\\n      rowElm = rows[0];\\n      if (!rowElm) {\\n        return;\\n      }\\n      if (rows.length > 1) {\\n        data = {\\n          height: '',\\n          scope: '',\\n          style: '',\\n          class: '',\\n          align: '',\\n          type: rowElm.parentNode.nodeName.toLowerCase()\\n        };\\n      } else {\\n        data = extractDataFromElement$1(editor, rowElm);\\n      }\\n      if (getRowClassList(editor).length > 0) {\\n        classListCtrl = {\\n          name: 'class',\\n          type: 'listbox',\\n          label: 'Class',\\n          values: Helpers.buildListItems(getRowClassList(editor), function (item) {\\n            if (item.value) {\\n              item.textStyle = function () {\\n                return editor.formatter.getCssText({\\n                  block: 'tr',\\n                  classes: [item.value]\\n                });\\n              };\\n            }\\n          })\\n        };\\n      }\\n      generalRowForm = {\\n        type: 'form',\\n        columns: 2,\\n        padding: 0,\\n        defaults: { type: 'textbox' },\\n        items: [\\n          {\\n            type: 'listbox',\\n            name: 'type',\\n            label: 'Row type',\\n            text: 'Header',\\n            maxWidth: null,\\n            values: [\\n              {\\n                text: 'Header',\\n                value: 'thead'\\n              },\\n              {\\n                text: 'Body',\\n                value: 'tbody'\\n              },\\n              {\\n                text: 'Footer',\\n                value: 'tfoot'\\n              }\\n            ]\\n          },\\n          {\\n            type: 'listbox',\\n            name: 'align',\\n            label: 'Alignment',\\n            text: 'None',\\n            maxWidth: null,\\n            values: [\\n              {\\n                text: 'None',\\n                value: ''\\n              },\\n              {\\n                text: 'Left',\\n                value: 'left'\\n              },\\n              {\\n                text: 'Center',\\n                value: 'center'\\n              },\\n              {\\n                text: 'Right',\\n                value: 'right'\\n              }\\n            ]\\n          },\\n          {\\n            label: 'Height',\\n            name: 'height'\\n          },\\n          classListCtrl\\n        ]\\n      };\\n      if (hasAdvancedRowTab(editor)) {\\n        editor.windowManager.open({\\n          title: 'Row properties',\\n          data: data,\\n          bodyType: 'tabpanel',\\n          body: [\\n            {\\n              title: 'General',\\n              type: 'form',\\n              items: generalRowForm\\n            },\\n            Helpers.createStyleForm(editor)\\n          ],\\n          onsubmit: curry(onSubmitRowForm, editor, rows, data)\\n        });\\n      } else {\\n        editor.windowManager.open({\\n          title: 'Row properties',\\n          data: data,\\n          body: generalRowForm,\\n          onsubmit: curry(onSubmitRowForm, editor, rows, data)\\n        });\\n      }\\n    };\\n    var RowDialog = { open: open$1 };\\n\\n    var global$2 = tinymce.util.Tools.resolve('tinymce.Env');\\n\\n    var DefaultRenderOptions = {\\n      styles: {\\n        'border-collapse': 'collapse',\\n        'width': '100%'\\n      },\\n      attributes: { border: '1' },\\n      percentages: true\\n    };\\n    var makeTable = function () {\\n      return Element.fromTag('table');\\n    };\\n    var tableBody = function () {\\n      return Element.fromTag('tbody');\\n    };\\n    var tableRow = function () {\\n      return Element.fromTag('tr');\\n    };\\n    var tableHeaderCell = function () {\\n      return Element.fromTag('th');\\n    };\\n    var tableCell = function () {\\n      return Element.fromTag('td');\\n    };\\n    var render$1 = function (rows, columns, rowHeaders, columnHeaders, renderOpts) {\\n      if (renderOpts === void 0) {\\n        renderOpts = DefaultRenderOptions;\\n      }\\n      var table = makeTable();\\n      setAll$1(table, renderOpts.styles);\\n      setAll(table, renderOpts.attributes);\\n      var tbody = tableBody();\\n      append(table, tbody);\\n      var trs = [];\\n      for (var i = 0; i < rows; i++) {\\n        var tr = tableRow();\\n        for (var j = 0; j < columns; j++) {\\n          var td = i < rowHeaders || j < columnHeaders ? tableHeaderCell() : tableCell();\\n          if (j < columnHeaders) {\\n            set(td, 'scope', 'row');\\n          }\\n          if (i < rowHeaders) {\\n            set(td, 'scope', 'col');\\n          }\\n          append(td, Element.fromTag('br'));\\n          if (renderOpts.percentages) {\\n            set$1(td, 'width', 100 / columns + '%');\\n          }\\n          append(tr, td);\\n        }\\n        trs.push(tr);\\n      }\\n      append$1(tbody, trs);\\n      return table;\\n    };\\n\\n    var get$7 = function (element) {\\n      return element.dom().innerHTML;\\n    };\\n    var getOuter$2 = function (element) {\\n      var container = Element.fromTag('div');\\n      var clone = Element.fromDom(element.dom().cloneNode(true));\\n      append(container, clone);\\n      return get$7(container);\\n    };\\n\\n    var placeCaretInCell = function (editor, cell) {\\n      editor.selection.select(cell.dom(), true);\\n      editor.selection.collapse(true);\\n    };\\n    var selectFirstCellInTable = function (editor, tableElm) {\\n      descendant$1(tableElm, 'td,th').each(curry(placeCaretInCell, editor));\\n    };\\n    var fireEvents = function (editor, table) {\\n      each(descendants$1(table, 'tr'), function (row) {\\n        fireNewRow(editor, row.dom());\\n        each(descendants$1(row, 'th,td'), function (cell) {\\n          fireNewCell(editor, cell.dom());\\n        });\\n      });\\n    };\\n    var isPercentage = function (width) {\\n      return isString(width) && width.indexOf('%') !== -1;\\n    };\\n    var insert$1 = function (editor, columns, rows) {\\n      var defaultStyles = getDefaultStyles(editor);\\n      var options = {\\n        styles: defaultStyles,\\n        attributes: getDefaultAttributes(editor),\\n        percentages: isPercentage(defaultStyles.width) && !isPixelsForced(editor)\\n      };\\n      var table = render$1(rows, columns, 0, 0, options);\\n      set(table, 'data-mce-id', '__mce');\\n      var html = getOuter$2(table);\\n      editor.insertContent(html);\\n      return descendant$1(getBody$1(editor), 'table[data-mce-id=\\\"__mce\\\"]').map(function (table) {\\n        if (isPixelsForced(editor)) {\\n          set$1(table, 'width', get$1(table, 'width'));\\n        }\\n        remove(table, 'data-mce-id');\\n        fireEvents(editor, table);\\n        selectFirstCellInTable(editor, table);\\n        return table.dom();\\n      }).getOr(null);\\n    };\\n    var InsertTable = { insert: insert$1 };\\n\\n    function styleTDTH(dom, elm, name, value) {\\n      if (elm.tagName === 'TD' || elm.tagName === 'TH') {\\n        dom.setStyle(elm, name, value);\\n      } else {\\n        if (elm.children) {\\n          for (var i = 0; i < elm.children.length; i++) {\\n            styleTDTH(dom, elm.children[i], name, value);\\n          }\\n        }\\n      }\\n    }\\n    var extractDataFromElement$2 = function (editor, tableElm) {\\n      var dom = editor.dom;\\n      var data = {\\n        width: dom.getStyle(tableElm, 'width') || dom.getAttrib(tableElm, 'width'),\\n        height: dom.getStyle(tableElm, 'height') || dom.getAttrib(tableElm, 'height'),\\n        cellspacing: dom.getStyle(tableElm, 'border-spacing') || dom.getAttrib(tableElm, 'cellspacing'),\\n        cellpadding: dom.getAttrib(tableElm, 'data-mce-cell-padding') || dom.getAttrib(tableElm, 'cellpadding') || Styles$1.getTDTHOverallStyle(editor.dom, tableElm, 'padding'),\\n        border: dom.getAttrib(tableElm, 'data-mce-border') || dom.getAttrib(tableElm, 'border') || Styles$1.getTDTHOverallStyle(editor.dom, tableElm, 'border'),\\n        borderColor: dom.getAttrib(tableElm, 'data-mce-border-color'),\\n        caption: !!dom.select('caption', tableElm)[0],\\n        class: dom.getAttrib(tableElm, 'class')\\n      };\\n      global$1.each('left center right'.split(' '), function (name) {\\n        if (editor.formatter.matchNode(tableElm, 'align' + name)) {\\n          data.align = name;\\n        }\\n      });\\n      if (hasAdvancedTableTab(editor)) {\\n        global$1.extend(data, Helpers.extractAdvancedStyles(dom, tableElm));\\n      }\\n      return data;\\n    };\\n    var applyDataToElement = function (editor, tableElm, data) {\\n      var dom = editor.dom;\\n      var attrs = {};\\n      var styles = {};\\n      attrs.class = data.class;\\n      styles.height = addSizeSuffix(data.height);\\n      if (dom.getAttrib(tableElm, 'width') && !shouldStyleWithCss(editor)) {\\n        attrs.width = removePxSuffix(data.width);\\n      } else {\\n        styles.width = addSizeSuffix(data.width);\\n      }\\n      if (shouldStyleWithCss(editor)) {\\n        styles['border-width'] = addSizeSuffix(data.border);\\n        styles['border-spacing'] = addSizeSuffix(data.cellspacing);\\n        global$1.extend(attrs, {\\n          'data-mce-border-color': data.borderColor,\\n          'data-mce-cell-padding': data.cellpadding,\\n          'data-mce-border': data.border\\n        });\\n      } else {\\n        global$1.extend(attrs, {\\n          border: data.border,\\n          cellpadding: data.cellpadding,\\n          cellspacing: data.cellspacing\\n        });\\n      }\\n      if (shouldStyleWithCss(editor)) {\\n        if (tableElm.children) {\\n          for (var i = 0; i < tableElm.children.length; i++) {\\n            styleTDTH(dom, tableElm.children[i], {\\n              'border-width': addSizeSuffix(data.border),\\n              'border-color': data.borderColor,\\n              'padding': addSizeSuffix(data.cellpadding)\\n            });\\n          }\\n        }\\n      }\\n      if (data.style) {\\n        global$1.extend(styles, dom.parseStyle(data.style));\\n      } else {\\n        styles = global$1.extend({}, dom.parseStyle(dom.getAttrib(tableElm, 'style')), styles);\\n      }\\n      attrs.style = dom.serializeStyle(styles);\\n      dom.setAttribs(tableElm, attrs);\\n    };\\n    var onSubmitTableForm = function (editor, tableElm, evt) {\\n      var dom = editor.dom;\\n      var captionElm;\\n      var data;\\n      if (hasAdvancedTableTab(editor)) {\\n        Helpers.syncAdvancedStyleFields(editor, evt);\\n      }\\n      data = evt.control.rootControl.toJSON();\\n      if (data.class === false) {\\n        delete data.class;\\n      }\\n      editor.undoManager.transact(function () {\\n        if (!tableElm) {\\n          tableElm = InsertTable.insert(editor, data.cols || 1, data.rows || 1);\\n        }\\n        applyDataToElement(editor, tableElm, data);\\n        captionElm = dom.select('caption', tableElm)[0];\\n        if (captionElm && !data.caption) {\\n          dom.remove(captionElm);\\n        }\\n        if (!captionElm && data.caption) {\\n          captionElm = dom.create('caption');\\n          captionElm.innerHTML = !global$2.ie ? '<br data-mce-bogus=\\\"1\\\"/>' : '\\\\xA0';\\n          tableElm.insertBefore(captionElm, tableElm.firstChild);\\n        }\\n        Styles$1.unApplyAlign(editor, tableElm);\\n        if (data.align) {\\n          Styles$1.applyAlign(editor, tableElm, data.align);\\n        }\\n        editor.focus();\\n        editor.addVisual();\\n      });\\n    };\\n    var open$2 = function (editor, isProps) {\\n      var dom = editor.dom;\\n      var tableElm, colsCtrl, rowsCtrl, classListCtrl, data = {}, generalTableForm;\\n      if (isProps === true) {\\n        tableElm = dom.getParent(editor.selection.getStart(), 'table');\\n        if (tableElm) {\\n          data = extractDataFromElement$2(editor, tableElm);\\n        }\\n      } else {\\n        colsCtrl = {\\n          label: 'Cols',\\n          name: 'cols'\\n        };\\n        rowsCtrl = {\\n          label: 'Rows',\\n          name: 'rows'\\n        };\\n      }\\n      if (getTableClassList(editor).length > 0) {\\n        if (data.class) {\\n          data.class = data.class.replace(/\\\\s*mce\\\\-item\\\\-table\\\\s*/g, '');\\n        }\\n        classListCtrl = {\\n          name: 'class',\\n          type: 'listbox',\\n          label: 'Class',\\n          values: Helpers.buildListItems(getTableClassList(editor), function (item) {\\n            if (item.value) {\\n              item.textStyle = function () {\\n                return editor.formatter.getCssText({\\n                  block: 'table',\\n                  classes: [item.value]\\n                });\\n              };\\n            }\\n          })\\n        };\\n      }\\n      generalTableForm = {\\n        type: 'form',\\n        layout: 'flex',\\n        direction: 'column',\\n        labelGapCalc: 'children',\\n        padding: 0,\\n        items: [\\n          {\\n            type: 'form',\\n            labelGapCalc: false,\\n            padding: 0,\\n            layout: 'grid',\\n            columns: 2,\\n            defaults: {\\n              type: 'textbox',\\n              maxWidth: 50\\n            },\\n            items: hasAppearanceOptions(editor) ? [\\n              colsCtrl,\\n              rowsCtrl,\\n              {\\n                label: 'Width',\\n                name: 'width',\\n                onchange: curry(Helpers.updateStyleField, editor)\\n              },\\n              {\\n                label: 'Height',\\n                name: 'height',\\n                onchange: curry(Helpers.updateStyleField, editor)\\n              },\\n              {\\n                label: 'Cell spacing',\\n                name: 'cellspacing'\\n              },\\n              {\\n                label: 'Cell padding',\\n                name: 'cellpadding'\\n              },\\n              {\\n                label: 'Border',\\n                name: 'border'\\n              },\\n              {\\n                label: 'Caption',\\n                name: 'caption',\\n                type: 'checkbox'\\n              }\\n            ] : [\\n              colsCtrl,\\n              rowsCtrl,\\n              {\\n                label: 'Width',\\n                name: 'width',\\n                onchange: curry(Helpers.updateStyleField, editor)\\n              },\\n              {\\n                label: 'Height',\\n                name: 'height',\\n                onchange: curry(Helpers.updateStyleField, editor)\\n              }\\n            ]\\n          },\\n          {\\n            label: 'Alignment',\\n            name: 'align',\\n            type: 'listbox',\\n            text: 'None',\\n            values: [\\n              {\\n                text: 'None',\\n                value: ''\\n              },\\n              {\\n                text: 'Left',\\n                value: 'left'\\n              },\\n              {\\n                text: 'Center',\\n                value: 'center'\\n              },\\n              {\\n                text: 'Right',\\n                value: 'right'\\n              }\\n            ]\\n          },\\n          classListCtrl\\n        ]\\n      };\\n      if (hasAdvancedTableTab(editor)) {\\n        editor.windowManager.open({\\n          title: 'Table properties',\\n          data: data,\\n          bodyType: 'tabpanel',\\n          body: [\\n            {\\n              title: 'General',\\n              type: 'form',\\n              items: generalTableForm\\n            },\\n            Helpers.createStyleForm(editor)\\n          ],\\n          onsubmit: curry(onSubmitTableForm, editor, tableElm)\\n        });\\n      } else {\\n        editor.windowManager.open({\\n          title: 'Table properties',\\n          data: data,\\n          body: generalTableForm,\\n          onsubmit: curry(onSubmitTableForm, editor, tableElm)\\n        });\\n      }\\n    };\\n    var TableDialog = { open: open$2 };\\n\\n    var each$3 = global$1.each;\\n    var registerCommands = function (editor, actions, cellSelection, selections, clipboardRows) {\\n      var isRoot = getIsRoot(editor);\\n      var eraseTable = function () {\\n        getSelectionStartCell().orThunk(getSelectionStartCaption).each(function (cellOrCaption) {\\n          var table = TableLookup.table(cellOrCaption, isRoot);\\n          table.filter(not(isRoot)).each(function (table) {\\n            var cursor = Element.fromText('');\\n            after(table, cursor);\\n            remove$2(table);\\n            var rng = editor.dom.createRng();\\n            rng.setStart(cursor.dom(), 0);\\n            rng.setEnd(cursor.dom(), 0);\\n            editor.selection.setRng(rng);\\n          });\\n        });\\n      };\\n      var getSelectionStartFromSelector = function (selector) {\\n        return function () {\\n          return Option.from(editor.dom.getParent(editor.selection.getStart(), selector)).map(Element.fromDom);\\n        };\\n      };\\n      var getSelectionStartCaption = getSelectionStartFromSelector('caption');\\n      var getSelectionStartCell = getSelectionStartFromSelector('th,td');\\n      var getTableFromCell = function (cell) {\\n        return TableLookup.table(cell, isRoot);\\n      };\\n      var getSize = function (table) {\\n        return {\\n          width: getPixelWidth$1(table.dom()),\\n          height: getPixelWidth$1(table.dom())\\n        };\\n      };\\n      var resizeChange = function (editor, oldSize, table) {\\n        var newSize = getSize(table);\\n        if (oldSize.width !== newSize.width || oldSize.height !== newSize.height) {\\n          fireObjectResizeStart(editor, table.dom(), oldSize.width, oldSize.height);\\n          fireObjectResized(editor, table.dom(), newSize.width, newSize.height);\\n        }\\n      };\\n      var actOnSelection = function (execute) {\\n        getSelectionStartCell().each(function (cell) {\\n          getTableFromCell(cell).each(function (table) {\\n            var targets = TableTargets.forMenu(selections, table, cell);\\n            var beforeSize = getSize(table);\\n            execute(table, targets).each(function (rng) {\\n              resizeChange(editor, beforeSize, table);\\n              editor.selection.setRng(rng);\\n              editor.focus();\\n              cellSelection.clear(table);\\n              removeDataStyle(table);\\n            });\\n          });\\n        });\\n      };\\n      var copyRowSelection = function (execute) {\\n        return getSelectionStartCell().bind(function (cell) {\\n          return getTableFromCell(cell).bind(function (table) {\\n            var doc = Element.fromDom(editor.getDoc());\\n            var targets = TableTargets.forMenu(selections, table, cell);\\n            var generators = TableFill.cellOperations(noop, doc, Option.none());\\n            return CopyRows.copyRows(table, targets, generators);\\n          });\\n        });\\n      };\\n      var pasteOnSelection = function (execute) {\\n        clipboardRows.get().each(function (rows) {\\n          var clonedRows = map(rows, function (row) {\\n            return deep(row);\\n          });\\n          getSelectionStartCell().each(function (cell) {\\n            getTableFromCell(cell).each(function (table) {\\n              var doc = Element.fromDom(editor.getDoc());\\n              var generators = TableFill.paste(doc);\\n              var targets = TableTargets.pasteRows(selections, table, cell, clonedRows, generators);\\n              execute(table, targets).each(function (rng) {\\n                editor.selection.setRng(rng);\\n                editor.focus();\\n                cellSelection.clear(table);\\n              });\\n            });\\n          });\\n        });\\n      };\\n      each$3({\\n        mceTableSplitCells: function () {\\n          actOnSelection(actions.unmergeCells);\\n        },\\n        mceTableMergeCells: function () {\\n          actOnSelection(actions.mergeCells);\\n        },\\n        mceTableInsertRowBefore: function () {\\n          actOnSelection(actions.insertRowsBefore);\\n        },\\n        mceTableInsertRowAfter: function () {\\n          actOnSelection(actions.insertRowsAfter);\\n        },\\n        mceTableInsertColBefore: function () {\\n          actOnSelection(actions.insertColumnsBefore);\\n        },\\n        mceTableInsertColAfter: function () {\\n          actOnSelection(actions.insertColumnsAfter);\\n        },\\n        mceTableDeleteCol: function () {\\n          actOnSelection(actions.deleteColumn);\\n        },\\n        mceTableDeleteRow: function () {\\n          actOnSelection(actions.deleteRow);\\n        },\\n        mceTableCutRow: function (grid) {\\n          clipboardRows.set(copyRowSelection());\\n          actOnSelection(actions.deleteRow);\\n        },\\n        mceTableCopyRow: function (grid) {\\n          clipboardRows.set(copyRowSelection());\\n        },\\n        mceTablePasteRowBefore: function (grid) {\\n          pasteOnSelection(actions.pasteRowsBefore);\\n        },\\n        mceTablePasteRowAfter: function (grid) {\\n          pasteOnSelection(actions.pasteRowsAfter);\\n        },\\n        mceTableDelete: eraseTable\\n      }, function (func, name) {\\n        editor.addCommand(name, func);\\n      });\\n      each$3({\\n        mceInsertTable: curry(TableDialog.open, editor),\\n        mceTableProps: curry(TableDialog.open, editor, true),\\n        mceTableRowProps: curry(RowDialog.open, editor),\\n        mceTableCellProps: curry(CellDialog.open, editor)\\n      }, function (func, name) {\\n        editor.addCommand(name, function (ui, val) {\\n          func(val);\\n        });\\n      });\\n    };\\n    var Commands = { registerCommands: registerCommands };\\n\\n    var only = function (element) {\\n      var parent = Option.from(element.dom().documentElement).map(Element.fromDom).getOr(element);\\n      return {\\n        parent: constant(parent),\\n        view: constant(element),\\n        origin: constant(Position(0, 0))\\n      };\\n    };\\n    var detached = function (editable, chrome) {\\n      var origin = function () {\\n        return absolute(chrome);\\n      };\\n      return {\\n        parent: constant(chrome),\\n        view: constant(editable),\\n        origin: origin\\n      };\\n    };\\n    var body$1 = function (editable, chrome) {\\n      return {\\n        parent: constant(chrome),\\n        view: constant(editable),\\n        origin: constant(Position(0, 0))\\n      };\\n    };\\n    var ResizeWire = {\\n      only: only,\\n      detached: detached,\\n      body: body$1\\n    };\\n\\n    var Event = function (fields) {\\n      var struct = Immutable.apply(null, fields);\\n      var handlers = [];\\n      var bind = function (handler) {\\n        if (handler === undefined) {\\n          throw new Error('Event bind error: undefined handler');\\n        }\\n        handlers.push(handler);\\n      };\\n      var unbind = function (handler) {\\n        handlers = filter(handlers, function (h) {\\n          return h !== handler;\\n        });\\n      };\\n      var trigger = function () {\\n        var args = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n          args[_i] = arguments[_i];\\n        }\\n        var event = struct.apply(null, args);\\n        each(handlers, function (handler) {\\n          handler(event);\\n        });\\n      };\\n      return {\\n        bind: bind,\\n        unbind: unbind,\\n        trigger: trigger\\n      };\\n    };\\n\\n    var create$1 = function (typeDefs) {\\n      var registry = map$1(typeDefs, function (event) {\\n        return {\\n          bind: event.bind,\\n          unbind: event.unbind\\n        };\\n      });\\n      var trigger = map$1(typeDefs, function (event) {\\n        return event.trigger;\\n      });\\n      return {\\n        registry: registry,\\n        trigger: trigger\\n      };\\n    };\\n    var Events = { create: create$1 };\\n\\n    var mkEvent = function (target, x, y, stop, prevent, kill, raw) {\\n      return {\\n        target: constant(target),\\n        x: constant(x),\\n        y: constant(y),\\n        stop: stop,\\n        prevent: prevent,\\n        kill: kill,\\n        raw: constant(raw)\\n      };\\n    };\\n    var handle = function (filter, handler) {\\n      return function (rawEvent) {\\n        if (!filter(rawEvent)) {\\n          return;\\n        }\\n        var target = Element.fromDom(rawEvent.target);\\n        var stop = function () {\\n          rawEvent.stopPropagation();\\n        };\\n        var prevent = function () {\\n          rawEvent.preventDefault();\\n        };\\n        var kill = compose(prevent, stop);\\n        var evt = mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\\n        handler(evt);\\n      };\\n    };\\n    var binder = function (element, event, filter, handler, useCapture) {\\n      var wrapped = handle(filter, handler);\\n      element.dom().addEventListener(event, wrapped, useCapture);\\n      return { unbind: curry(unbind, element, event, wrapped, useCapture) };\\n    };\\n    var bind$1 = function (element, event, filter, handler) {\\n      return binder(element, event, filter, handler, false);\\n    };\\n    var unbind = function (element, event, handler, useCapture) {\\n      element.dom().removeEventListener(event, handler, useCapture);\\n    };\\n\\n    var filter$1 = constant(true);\\n    var bind$2 = function (element, event, handler) {\\n      return bind$1(element, event, filter$1, handler);\\n    };\\n\\n    var hasOwnProperty = Object.prototype.hasOwnProperty;\\n    var shallow$1 = function (old, nu) {\\n      return nu;\\n    };\\n    var baseMerge = function (merger) {\\n      return function () {\\n        var objects = new Array(arguments.length);\\n        for (var i = 0; i < objects.length; i++) {\\n          objects[i] = arguments[i];\\n        }\\n        if (objects.length === 0) {\\n          throw new Error('Can\\\\'t merge zero objects');\\n        }\\n        var ret = {};\\n        for (var j = 0; j < objects.length; j++) {\\n          var curObject = objects[j];\\n          for (var key in curObject) {\\n            if (hasOwnProperty.call(curObject, key)) {\\n              ret[key] = merger(ret[key], curObject[key]);\\n            }\\n          }\\n        }\\n        return ret;\\n      };\\n    };\\n    var merge$3 = baseMerge(shallow$1);\\n\\n    var styles$1 = css('ephox-dragster');\\n    var Styles$2 = { resolve: styles$1.resolve };\\n\\n    var Blocker = function (options) {\\n      var settings = merge$3({ layerClass: Styles$2.resolve('blocker') }, options);\\n      var div = Element.fromTag('div');\\n      set(div, 'role', 'presentation');\\n      setAll$1(div, {\\n        position: 'fixed',\\n        left: '0px',\\n        top: '0px',\\n        width: '100%',\\n        height: '100%'\\n      });\\n      add$2(div, Styles$2.resolve('blocker'));\\n      add$2(div, settings.layerClass);\\n      var element = function () {\\n        return div;\\n      };\\n      var destroy = function () {\\n        remove$2(div);\\n      };\\n      return {\\n        element: element,\\n        destroy: destroy\\n      };\\n    };\\n\\n    var DragMode = exactly([\\n      'compare',\\n      'extract',\\n      'mutate',\\n      'sink'\\n    ]);\\n    var DragSink = exactly([\\n      'element',\\n      'start',\\n      'stop',\\n      'destroy'\\n    ]);\\n    var DragApi = exactly([\\n      'forceDrop',\\n      'drop',\\n      'move',\\n      'delayDrop'\\n    ]);\\n\\n    var compare = function (old, nu) {\\n      return Position(nu.left() - old.left(), nu.top() - old.top());\\n    };\\n    var extract$1 = function (event) {\\n      return Option.some(Position(event.x(), event.y()));\\n    };\\n    var mutate = function (mutation, info) {\\n      mutation.mutate(info.left(), info.top());\\n    };\\n    var sink = function (dragApi, settings) {\\n      var blocker = Blocker(settings);\\n      var mdown = bind$2(blocker.element(), 'mousedown', dragApi.forceDrop);\\n      var mup = bind$2(blocker.element(), 'mouseup', dragApi.drop);\\n      var mmove = bind$2(blocker.element(), 'mousemove', dragApi.move);\\n      var mout = bind$2(blocker.element(), 'mouseout', dragApi.delayDrop);\\n      var destroy = function () {\\n        blocker.destroy();\\n        mup.unbind();\\n        mmove.unbind();\\n        mout.unbind();\\n        mdown.unbind();\\n      };\\n      var start = function (parent) {\\n        append(parent, blocker.element());\\n      };\\n      var stop = function () {\\n        remove$2(blocker.element());\\n      };\\n      return DragSink({\\n        element: blocker.element,\\n        start: start,\\n        stop: stop,\\n        destroy: destroy\\n      });\\n    };\\n    var MouseDrag = DragMode({\\n      compare: compare,\\n      extract: extract$1,\\n      sink: sink,\\n      mutate: mutate\\n    });\\n\\n    var last$2 = function (fn, rate) {\\n      var timer = null;\\n      var cancel = function () {\\n        if (timer !== null) {\\n          domGlobals.clearTimeout(timer);\\n          timer = null;\\n        }\\n      };\\n      var throttle = function () {\\n        var args = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n          args[_i] = arguments[_i];\\n        }\\n        if (timer !== null) {\\n          domGlobals.clearTimeout(timer);\\n        }\\n        timer = domGlobals.setTimeout(function () {\\n          fn.apply(null, args);\\n          timer = null;\\n        }, rate);\\n      };\\n      return {\\n        cancel: cancel,\\n        throttle: throttle\\n      };\\n    };\\n\\n    function InDrag () {\\n      var previous = Option.none();\\n      var reset = function () {\\n        previous = Option.none();\\n      };\\n      var update = function (mode, nu) {\\n        var result = previous.map(function (old) {\\n          return mode.compare(old, nu);\\n        });\\n        previous = Option.some(nu);\\n        return result;\\n      };\\n      var onEvent = function (event, mode) {\\n        var dataOption = mode.extract(event);\\n        dataOption.each(function (data) {\\n          var offset = update(mode, data);\\n          offset.each(function (d) {\\n            events.trigger.move(d);\\n          });\\n        });\\n      };\\n      var events = Events.create({ move: Event(['info']) });\\n      return {\\n        onEvent: onEvent,\\n        reset: reset,\\n        events: events.registry\\n      };\\n    }\\n\\n    function NoDrag () {\\n      return {\\n        onEvent: noop,\\n        reset: noop\\n      };\\n    }\\n\\n    function Movement () {\\n      var noDragState = NoDrag();\\n      var inDragState = InDrag();\\n      var dragState = noDragState;\\n      var on = function () {\\n        dragState.reset();\\n        dragState = inDragState;\\n      };\\n      var off = function () {\\n        dragState.reset();\\n        dragState = noDragState;\\n      };\\n      var onEvent = function (event, mode) {\\n        dragState.onEvent(event, mode);\\n      };\\n      var isOn = function () {\\n        return dragState === inDragState;\\n      };\\n      return {\\n        on: on,\\n        off: off,\\n        isOn: isOn,\\n        onEvent: onEvent,\\n        events: inDragState.events\\n      };\\n    }\\n\\n    var setup = function (mutation, mode, settings) {\\n      var active = false;\\n      var events = Events.create({\\n        start: Event([]),\\n        stop: Event([])\\n      });\\n      var movement = Movement();\\n      var drop = function () {\\n        sink.stop();\\n        if (movement.isOn()) {\\n          movement.off();\\n          events.trigger.stop();\\n        }\\n      };\\n      var throttledDrop = last$2(drop, 200);\\n      var go = function (parent) {\\n        sink.start(parent);\\n        movement.on();\\n        events.trigger.start();\\n      };\\n      var mousemove = function (event) {\\n        throttledDrop.cancel();\\n        movement.onEvent(event, mode);\\n      };\\n      movement.events.move.bind(function (event) {\\n        mode.mutate(mutation, event.info());\\n      });\\n      var on = function () {\\n        active = true;\\n      };\\n      var off = function () {\\n        active = false;\\n      };\\n      var runIfActive = function (f) {\\n        return function () {\\n          var args = [];\\n          for (var _i = 0; _i < arguments.length; _i++) {\\n            args[_i] = arguments[_i];\\n          }\\n          if (active) {\\n            f.apply(null, args);\\n          }\\n        };\\n      };\\n      var sink = mode.sink(DragApi({\\n        forceDrop: drop,\\n        drop: runIfActive(drop),\\n        move: runIfActive(mousemove),\\n        delayDrop: runIfActive(throttledDrop.throttle)\\n      }), settings);\\n      var destroy = function () {\\n        sink.destroy();\\n      };\\n      return {\\n        element: sink.element,\\n        go: go,\\n        on: on,\\n        off: off,\\n        destroy: destroy,\\n        events: events.registry\\n      };\\n    };\\n    var Dragging = { setup: setup };\\n\\n    var transform$1 = function (mutation, settings) {\\n      if (settings === void 0) {\\n        settings = {};\\n      }\\n      var mode = settings.mode !== undefined ? settings.mode : MouseDrag;\\n      return Dragging.setup(mutation, mode, settings);\\n    };\\n    var Dragger = { transform: transform$1 };\\n\\n    var Mutation = function () {\\n      var events = Events.create({\\n        drag: Event([\\n          'xDelta',\\n          'yDelta'\\n        ])\\n      });\\n      var mutate = function (x, y) {\\n        events.trigger.drag(x, y);\\n      };\\n      return {\\n        mutate: mutate,\\n        events: events.registry\\n      };\\n    };\\n\\n    var BarMutation = function () {\\n      var events = Events.create({\\n        drag: Event([\\n          'xDelta',\\n          'yDelta',\\n          'target'\\n        ])\\n      });\\n      var target = Option.none();\\n      var delegate = Mutation();\\n      delegate.events.drag.bind(function (event) {\\n        target.each(function (t) {\\n          events.trigger.drag(event.xDelta(), event.yDelta(), t);\\n        });\\n      });\\n      var assign = function (t) {\\n        target = Option.some(t);\\n      };\\n      var get = function () {\\n        return target;\\n      };\\n      return {\\n        assign: assign,\\n        get: get,\\n        mutate: delegate.mutate,\\n        events: events.registry\\n      };\\n    };\\n\\n    var isContentEditableTrue = function (elm) {\\n      return get(elm, 'contenteditable') === 'true';\\n    };\\n    var findClosestContentEditable = function (target, isRoot) {\\n      return closest$1(target, '[contenteditable]', isRoot);\\n    };\\n\\n    var resizeBarDragging = Styles.resolve('resizer-bar-dragging');\\n    var BarManager = function (wire, direction, hdirection) {\\n      var mutation = BarMutation();\\n      var resizing = Dragger.transform(mutation, {});\\n      var hoverTable = Option.none();\\n      var getResizer = function (element, type) {\\n        return Option.from(get(element, type));\\n      };\\n      mutation.events.drag.bind(function (event) {\\n        getResizer(event.target(), 'data-row').each(function (_dataRow) {\\n          var currentRow = CellUtils.getInt(event.target(), 'top');\\n          set$1(event.target(), 'top', currentRow + event.yDelta() + 'px');\\n        });\\n        getResizer(event.target(), 'data-column').each(function (_dataCol) {\\n          var currentCol = CellUtils.getInt(event.target(), 'left');\\n          set$1(event.target(), 'left', currentCol + event.xDelta() + 'px');\\n        });\\n      });\\n      var getDelta = function (target, dir) {\\n        var newX = CellUtils.getInt(target, dir);\\n        var oldX = parseInt(get(target, 'data-initial-' + dir), 10);\\n        return newX - oldX;\\n      };\\n      resizing.events.stop.bind(function () {\\n        mutation.get().each(function (target) {\\n          hoverTable.each(function (table) {\\n            getResizer(target, 'data-row').each(function (row) {\\n              var delta = getDelta(target, 'top');\\n              remove(target, 'data-initial-top');\\n              events.trigger.adjustHeight(table, delta, parseInt(row, 10));\\n            });\\n            getResizer(target, 'data-column').each(function (column) {\\n              var delta = getDelta(target, 'left');\\n              remove(target, 'data-initial-left');\\n              events.trigger.adjustWidth(table, delta, parseInt(column, 10));\\n            });\\n            Bars.refresh(wire, table, hdirection, direction);\\n          });\\n        });\\n      });\\n      var handler = function (target, dir) {\\n        events.trigger.startAdjust();\\n        mutation.assign(target);\\n        set(target, 'data-initial-' + dir, parseInt(get$1(target, dir), 10));\\n        add$2(target, resizeBarDragging);\\n        set$1(target, 'opacity', '0.2');\\n        resizing.go(wire.parent());\\n      };\\n      var mousedown = bind$2(wire.parent(), 'mousedown', function (event) {\\n        if (Bars.isRowBar(event.target())) {\\n          handler(event.target(), 'top');\\n        }\\n        if (Bars.isColBar(event.target())) {\\n          handler(event.target(), 'left');\\n        }\\n      });\\n      var isRoot = function (e) {\\n        return eq(e, wire.view());\\n      };\\n      var findClosestEditableTable = function (target) {\\n        return closest$1(target, 'table', isRoot).filter(function (table) {\\n          return findClosestContentEditable(table, isRoot).exists(isContentEditableTrue);\\n        });\\n      };\\n      var mouseover = bind$2(wire.view(), 'mouseover', function (event) {\\n        findClosestEditableTable(event.target()).fold(function () {\\n          if (inBody(event.target())) {\\n            Bars.destroy(wire);\\n          }\\n        }, function (table) {\\n          hoverTable = Option.some(table);\\n          Bars.refresh(wire, table, hdirection, direction);\\n        });\\n      });\\n      var destroy = function () {\\n        mousedown.unbind();\\n        mouseover.unbind();\\n        resizing.destroy();\\n        Bars.destroy(wire);\\n      };\\n      var refresh = function (tbl) {\\n        Bars.refresh(wire, tbl, hdirection, direction);\\n      };\\n      var events = Events.create({\\n        adjustHeight: Event([\\n          'table',\\n          'delta',\\n          'row'\\n        ]),\\n        adjustWidth: Event([\\n          'table',\\n          'delta',\\n          'column'\\n        ]),\\n        startAdjust: Event([])\\n      });\\n      return {\\n        destroy: destroy,\\n        refresh: refresh,\\n        on: resizing.on,\\n        off: resizing.off,\\n        hideBars: curry(Bars.hide, wire),\\n        showBars: curry(Bars.show, wire),\\n        events: events.registry\\n      };\\n    };\\n\\n    var create$2 = function (wire, vdirection) {\\n      var hdirection = BarPositions.height;\\n      var manager = BarManager(wire, vdirection, hdirection);\\n      var events = Events.create({\\n        beforeResize: Event(['table']),\\n        afterResize: Event(['table']),\\n        startDrag: Event([])\\n      });\\n      manager.events.adjustHeight.bind(function (event) {\\n        events.trigger.beforeResize(event.table());\\n        var delta = hdirection.delta(event.delta(), event.table());\\n        Adjustments.adjustHeight(event.table(), delta, event.row(), hdirection);\\n        events.trigger.afterResize(event.table());\\n      });\\n      manager.events.startAdjust.bind(function (event) {\\n        events.trigger.startDrag();\\n      });\\n      manager.events.adjustWidth.bind(function (event) {\\n        events.trigger.beforeResize(event.table());\\n        var delta = vdirection.delta(event.delta(), event.table());\\n        Adjustments.adjustWidth(event.table(), delta, event.column(), vdirection);\\n        events.trigger.afterResize(event.table());\\n      });\\n      return {\\n        on: manager.on,\\n        off: manager.off,\\n        hideBars: manager.hideBars,\\n        showBars: manager.showBars,\\n        destroy: manager.destroy,\\n        events: events.registry\\n      };\\n    };\\n    var TableResize = { create: create$2 };\\n\\n    var createContainer = function () {\\n      var container = Element.fromTag('div');\\n      setAll$1(container, {\\n        position: 'static',\\n        height: '0',\\n        width: '0',\\n        padding: '0',\\n        margin: '0',\\n        border: '0'\\n      });\\n      append(body(), container);\\n      return container;\\n    };\\n    var get$8 = function (editor, container) {\\n      return editor.inline ? ResizeWire.body(getBody$1(editor), createContainer()) : ResizeWire.only(Element.fromDom(editor.getDoc()));\\n    };\\n    var remove$6 = function (editor, wire) {\\n      if (editor.inline) {\\n        remove$2(wire.parent());\\n      }\\n    };\\n    var TableWire = {\\n      get: get$8,\\n      remove: remove$6\\n    };\\n\\n    var ResizeHandler = function (editor) {\\n      var selectionRng = Option.none();\\n      var resize = Option.none();\\n      var wire = Option.none();\\n      var percentageBasedSizeRegex = /(\\\\d+(\\\\.\\\\d+)?)%/;\\n      var startW, startRawW;\\n      var isTable = function (elm) {\\n        return elm.nodeName === 'TABLE';\\n      };\\n      var getRawWidth = function (elm) {\\n        return editor.dom.getStyle(elm, 'width') || editor.dom.getAttrib(elm, 'width');\\n      };\\n      var lazyResize = function () {\\n        return resize;\\n      };\\n      var lazyWire = function () {\\n        return wire.getOr(ResizeWire.only(Element.fromDom(editor.getBody())));\\n      };\\n      var destroy = function () {\\n        resize.each(function (sz) {\\n          sz.destroy();\\n        });\\n        wire.each(function (w) {\\n          TableWire.remove(editor, w);\\n        });\\n      };\\n      editor.on('init', function () {\\n        var direction = TableDirection(Direction.directionAt);\\n        var rawWire = TableWire.get(editor);\\n        wire = Option.some(rawWire);\\n        if (hasObjectResizing(editor) && hasTableResizeBars(editor)) {\\n          var sz = TableResize.create(rawWire, direction);\\n          sz.on();\\n          sz.events.startDrag.bind(function (event) {\\n            selectionRng = Option.some(editor.selection.getRng());\\n          });\\n          sz.events.beforeResize.bind(function (event) {\\n            var rawTable = event.table().dom();\\n            fireObjectResizeStart(editor, rawTable, getPixelWidth$1(rawTable), getPixelHeight(rawTable));\\n          });\\n          sz.events.afterResize.bind(function (event) {\\n            var table = event.table();\\n            var rawTable = table.dom();\\n            removeDataStyle(table);\\n            selectionRng.each(function (rng) {\\n              editor.selection.setRng(rng);\\n              editor.focus();\\n            });\\n            fireObjectResized(editor, rawTable, getPixelWidth$1(rawTable), getPixelHeight(rawTable));\\n            editor.undoManager.add();\\n          });\\n          resize = Option.some(sz);\\n        }\\n      });\\n      editor.on('ObjectResizeStart', function (e) {\\n        var targetElm = e.target;\\n        if (isTable(targetElm)) {\\n          startW = e.width;\\n          startRawW = getRawWidth(targetElm);\\n        }\\n      });\\n      editor.on('ObjectResized', function (e) {\\n        var targetElm = e.target;\\n        if (isTable(targetElm)) {\\n          var table = targetElm;\\n          if (percentageBasedSizeRegex.test(startRawW)) {\\n            var percentW = parseFloat(percentageBasedSizeRegex.exec(startRawW)[1]);\\n            var targetPercentW = e.width * percentW / startW;\\n            editor.dom.setStyle(table, 'width', targetPercentW + '%');\\n          } else {\\n            var newCellSizes_1 = [];\\n            global$1.each(table.rows, function (row) {\\n              global$1.each(row.cells, function (cell) {\\n                var width = editor.dom.getStyle(cell, 'width', true);\\n                newCellSizes_1.push({\\n                  cell: cell,\\n                  width: width\\n                });\\n              });\\n            });\\n            global$1.each(newCellSizes_1, function (newCellSize) {\\n              editor.dom.setStyle(newCellSize.cell, 'width', newCellSize.width);\\n              editor.dom.setAttrib(newCellSize.cell, 'width', null);\\n            });\\n          }\\n        }\\n      });\\n      return {\\n        lazyResize: lazyResize,\\n        lazyWire: lazyWire,\\n        destroy: destroy\\n      };\\n    };\\n\\n    var adt$1 = Adt.generate([\\n      { none: ['current'] },\\n      { first: ['current'] },\\n      {\\n        middle: [\\n          'current',\\n          'target'\\n        ]\\n      },\\n      { last: ['current'] }\\n    ]);\\n    var none$1 = function (current) {\\n      if (current === void 0) {\\n        current = undefined;\\n      }\\n      return adt$1.none(current);\\n    };\\n    var CellLocation = __assign(__assign({}, adt$1), { none: none$1 });\\n\\n    var detect$4 = function (current, isRoot) {\\n      return TableLookup.table(current, isRoot).bind(function (table) {\\n        var all = TableLookup.cells(table);\\n        var index = findIndex(all, function (x) {\\n          return eq(current, x);\\n        });\\n        return index.map(function (ind) {\\n          return {\\n            index: constant(ind),\\n            all: constant(all)\\n          };\\n        });\\n      });\\n    };\\n    var next = function (current, isRoot) {\\n      var detection = detect$4(current, isRoot);\\n      return detection.fold(function () {\\n        return CellLocation.none(current);\\n      }, function (info) {\\n        return info.index() + 1 < info.all().length ? CellLocation.middle(current, info.all()[info.index() + 1]) : CellLocation.last(current);\\n      });\\n    };\\n    var prev = function (current, isRoot) {\\n      var detection = detect$4(current, isRoot);\\n      return detection.fold(function () {\\n        return CellLocation.none();\\n      }, function (info) {\\n        return info.index() - 1 >= 0 ? CellLocation.middle(current, info.all()[info.index() - 1]) : CellLocation.first(current);\\n      });\\n    };\\n    var CellNavigation = {\\n      next: next,\\n      prev: prev\\n    };\\n\\n    var create$3 = Immutable('start', 'soffset', 'finish', 'foffset');\\n    var SimRange = { create: create$3 };\\n\\n    var adt$2 = Adt.generate([\\n      { before: ['element'] },\\n      {\\n        on: [\\n          'element',\\n          'offset'\\n        ]\\n      },\\n      { after: ['element'] }\\n    ]);\\n    var cata$1 = function (subject, onBefore, onOn, onAfter) {\\n      return subject.fold(onBefore, onOn, onAfter);\\n    };\\n    var getStart = function (situ) {\\n      return situ.fold(identity, identity, identity);\\n    };\\n    var before$2 = adt$2.before;\\n    var on = adt$2.on;\\n    var after$2 = adt$2.after;\\n    var Situ = {\\n      before: before$2,\\n      on: on,\\n      after: after$2,\\n      cata: cata$1,\\n      getStart: getStart\\n    };\\n\\n    var adt$3 = Adt.generate([\\n      { domRange: ['rng'] },\\n      {\\n        relative: [\\n          'startSitu',\\n          'finishSitu'\\n        ]\\n      },\\n      {\\n        exact: [\\n          'start',\\n          'soffset',\\n          'finish',\\n          'foffset'\\n        ]\\n      }\\n    ]);\\n    var exactFromRange = function (simRange) {\\n      return adt$3.exact(simRange.start(), simRange.soffset(), simRange.finish(), simRange.foffset());\\n    };\\n    var getStart$1 = function (selection) {\\n      return selection.match({\\n        domRange: function (rng) {\\n          return Element.fromDom(rng.startContainer);\\n        },\\n        relative: function (startSitu, finishSitu) {\\n          return Situ.getStart(startSitu);\\n        },\\n        exact: function (start, soffset, finish, foffset) {\\n          return start;\\n        }\\n      });\\n    };\\n    var domRange = adt$3.domRange;\\n    var relative = adt$3.relative;\\n    var exact = adt$3.exact;\\n    var getWin = function (selection) {\\n      var start = getStart$1(selection);\\n      return defaultView(start);\\n    };\\n    var range$1 = SimRange.create;\\n    var Selection = {\\n      domRange: domRange,\\n      relative: relative,\\n      exact: exact,\\n      exactFromRange: exactFromRange,\\n      getWin: getWin,\\n      range: range$1\\n    };\\n\\n    var selectNodeContents = function (win, element) {\\n      var rng = win.document.createRange();\\n      selectNodeContentsUsing(rng, element);\\n      return rng;\\n    };\\n    var selectNodeContentsUsing = function (rng, element) {\\n      rng.selectNodeContents(element.dom());\\n    };\\n    var setStart = function (rng, situ) {\\n      situ.fold(function (e) {\\n        rng.setStartBefore(e.dom());\\n      }, function (e, o) {\\n        rng.setStart(e.dom(), o);\\n      }, function (e) {\\n        rng.setStartAfter(e.dom());\\n      });\\n    };\\n    var setFinish = function (rng, situ) {\\n      situ.fold(function (e) {\\n        rng.setEndBefore(e.dom());\\n      }, function (e, o) {\\n        rng.setEnd(e.dom(), o);\\n      }, function (e) {\\n        rng.setEndAfter(e.dom());\\n      });\\n    };\\n    var relativeToNative = function (win, startSitu, finishSitu) {\\n      var range = win.document.createRange();\\n      setStart(range, startSitu);\\n      setFinish(range, finishSitu);\\n      return range;\\n    };\\n    var exactToNative = function (win, start, soffset, finish, foffset) {\\n      var rng = win.document.createRange();\\n      rng.setStart(start.dom(), soffset);\\n      rng.setEnd(finish.dom(), foffset);\\n      return rng;\\n    };\\n    var toRect = function (rect) {\\n      return {\\n        left: constant(rect.left),\\n        top: constant(rect.top),\\n        right: constant(rect.right),\\n        bottom: constant(rect.bottom),\\n        width: constant(rect.width),\\n        height: constant(rect.height)\\n      };\\n    };\\n    var getFirstRect = function (rng) {\\n      var rects = rng.getClientRects();\\n      var rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();\\n      return rect.width > 0 || rect.height > 0 ? Option.some(rect).map(toRect) : Option.none();\\n    };\\n\\n    var adt$4 = Adt.generate([\\n      {\\n        ltr: [\\n          'start',\\n          'soffset',\\n          'finish',\\n          'foffset'\\n        ]\\n      },\\n      {\\n        rtl: [\\n          'start',\\n          'soffset',\\n          'finish',\\n          'foffset'\\n        ]\\n      }\\n    ]);\\n    var fromRange = function (win, type, range) {\\n      return type(Element.fromDom(range.startContainer), range.startOffset, Element.fromDom(range.endContainer), range.endOffset);\\n    };\\n    var getRanges = function (win, selection) {\\n      return selection.match({\\n        domRange: function (rng) {\\n          return {\\n            ltr: constant(rng),\\n            rtl: Option.none\\n          };\\n        },\\n        relative: function (startSitu, finishSitu) {\\n          return {\\n            ltr: cached(function () {\\n              return relativeToNative(win, startSitu, finishSitu);\\n            }),\\n            rtl: cached(function () {\\n              return Option.some(relativeToNative(win, finishSitu, startSitu));\\n            })\\n          };\\n        },\\n        exact: function (start, soffset, finish, foffset) {\\n          return {\\n            ltr: cached(function () {\\n              return exactToNative(win, start, soffset, finish, foffset);\\n            }),\\n            rtl: cached(function () {\\n              return Option.some(exactToNative(win, finish, foffset, start, soffset));\\n            })\\n          };\\n        }\\n      });\\n    };\\n    var doDiagnose = function (win, ranges) {\\n      var rng = ranges.ltr();\\n      if (rng.collapsed) {\\n        var reversed = ranges.rtl().filter(function (rev) {\\n          return rev.collapsed === false;\\n        });\\n        return reversed.map(function (rev) {\\n          return adt$4.rtl(Element.fromDom(rev.endContainer), rev.endOffset, Element.fromDom(rev.startContainer), rev.startOffset);\\n        }).getOrThunk(function () {\\n          return fromRange(win, adt$4.ltr, rng);\\n        });\\n      } else {\\n        return fromRange(win, adt$4.ltr, rng);\\n      }\\n    };\\n    var diagnose = function (win, selection) {\\n      var ranges = getRanges(win, selection);\\n      return doDiagnose(win, ranges);\\n    };\\n    var asLtrRange = function (win, selection) {\\n      var diagnosis = diagnose(win, selection);\\n      return diagnosis.match({\\n        ltr: function (start, soffset, finish, foffset) {\\n          var rng = win.document.createRange();\\n          rng.setStart(start.dom(), soffset);\\n          rng.setEnd(finish.dom(), foffset);\\n          return rng;\\n        },\\n        rtl: function (start, soffset, finish, foffset) {\\n          var rng = win.document.createRange();\\n          rng.setStart(finish.dom(), foffset);\\n          rng.setEnd(start.dom(), soffset);\\n          return rng;\\n        }\\n      });\\n    };\\n\\n    var searchForPoint = function (rectForOffset, x, y, maxX, length) {\\n      if (length === 0) {\\n        return 0;\\n      } else if (x === maxX) {\\n        return length - 1;\\n      }\\n      var xDelta = maxX;\\n      for (var i = 1; i < length; i++) {\\n        var rect = rectForOffset(i);\\n        var curDeltaX = Math.abs(x - rect.left);\\n        if (y <= rect.bottom) {\\n          if (y < rect.top || curDeltaX > xDelta) {\\n            return i - 1;\\n          } else {\\n            xDelta = curDeltaX;\\n          }\\n        }\\n      }\\n      return 0;\\n    };\\n    var inRect = function (rect, x, y) {\\n      return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;\\n    };\\n\\n    var locateOffset = function (doc, textnode, x, y, rect) {\\n      var rangeForOffset = function (o) {\\n        var r = doc.dom().createRange();\\n        r.setStart(textnode.dom(), o);\\n        r.collapse(true);\\n        return r;\\n      };\\n      var rectForOffset = function (o) {\\n        var r = rangeForOffset(o);\\n        return r.getBoundingClientRect();\\n      };\\n      var length = get$2(textnode).length;\\n      var offset = searchForPoint(rectForOffset, x, y, rect.right, length);\\n      return rangeForOffset(offset);\\n    };\\n    var locate = function (doc, node, x, y) {\\n      var r = doc.dom().createRange();\\n      r.selectNode(node.dom());\\n      var rects = r.getClientRects();\\n      var foundRect = findMap(rects, function (rect) {\\n        return inRect(rect, x, y) ? Option.some(rect) : Option.none();\\n      });\\n      return foundRect.map(function (rect) {\\n        return locateOffset(doc, node, x, y, rect);\\n      });\\n    };\\n\\n    var searchInChildren = function (doc, node, x, y) {\\n      var r = doc.dom().createRange();\\n      var nodes = children(node);\\n      return findMap(nodes, function (n) {\\n        r.selectNode(n.dom());\\n        return inRect(r.getBoundingClientRect(), x, y) ? locateNode(doc, n, x, y) : Option.none();\\n      });\\n    };\\n    var locateNode = function (doc, node, x, y) {\\n      return isText(node) ? locate(doc, node, x, y) : searchInChildren(doc, node, x, y);\\n    };\\n    var locate$1 = function (doc, node, x, y) {\\n      var r = doc.dom().createRange();\\n      r.selectNode(node.dom());\\n      var rect = r.getBoundingClientRect();\\n      var boundedX = Math.max(rect.left, Math.min(rect.right, x));\\n      var boundedY = Math.max(rect.top, Math.min(rect.bottom, y));\\n      return locateNode(doc, node, boundedX, boundedY);\\n    };\\n\\n    var COLLAPSE_TO_LEFT = true;\\n    var COLLAPSE_TO_RIGHT = false;\\n    var getCollapseDirection = function (rect, x) {\\n      return x - rect.left < rect.right - x ? COLLAPSE_TO_LEFT : COLLAPSE_TO_RIGHT;\\n    };\\n    var createCollapsedNode = function (doc, target, collapseDirection) {\\n      var r = doc.dom().createRange();\\n      r.selectNode(target.dom());\\n      r.collapse(collapseDirection);\\n      return r;\\n    };\\n    var locateInElement = function (doc, node, x) {\\n      var cursorRange = doc.dom().createRange();\\n      cursorRange.selectNode(node.dom());\\n      var rect = cursorRange.getBoundingClientRect();\\n      var collapseDirection = getCollapseDirection(rect, x);\\n      var f = collapseDirection === COLLAPSE_TO_LEFT ? first : last$1;\\n      return f(node).map(function (target) {\\n        return createCollapsedNode(doc, target, collapseDirection);\\n      });\\n    };\\n    var locateInEmpty = function (doc, node, x) {\\n      var rect = node.dom().getBoundingClientRect();\\n      var collapseDirection = getCollapseDirection(rect, x);\\n      return Option.some(createCollapsedNode(doc, node, collapseDirection));\\n    };\\n    var search = function (doc, node, x) {\\n      var f = children(node).length === 0 ? locateInEmpty : locateInElement;\\n      return f(doc, node, x);\\n    };\\n\\n    var caretPositionFromPoint = function (doc, x, y) {\\n      return Option.from(doc.dom().caretPositionFromPoint(x, y)).bind(function (pos) {\\n        if (pos.offsetNode === null) {\\n          return Option.none();\\n        }\\n        var r = doc.dom().createRange();\\n        r.setStart(pos.offsetNode, pos.offset);\\n        r.collapse();\\n        return Option.some(r);\\n      });\\n    };\\n    var caretRangeFromPoint = function (doc, x, y) {\\n      return Option.from(doc.dom().caretRangeFromPoint(x, y));\\n    };\\n    var searchTextNodes = function (doc, node, x, y) {\\n      var r = doc.dom().createRange();\\n      r.selectNode(node.dom());\\n      var rect = r.getBoundingClientRect();\\n      var boundedX = Math.max(rect.left, Math.min(rect.right, x));\\n      var boundedY = Math.max(rect.top, Math.min(rect.bottom, y));\\n      return locate$1(doc, node, boundedX, boundedY);\\n    };\\n    var searchFromPoint = function (doc, x, y) {\\n      return Element.fromPoint(doc, x, y).bind(function (elem) {\\n        var fallback = function () {\\n          return search(doc, elem, x);\\n        };\\n        return children(elem).length === 0 ? fallback() : searchTextNodes(doc, elem, x, y).orThunk(fallback);\\n      });\\n    };\\n    var availableSearch = document.caretPositionFromPoint ? caretPositionFromPoint : document.caretRangeFromPoint ? caretRangeFromPoint : searchFromPoint;\\n    var fromPoint$1 = function (win, x, y) {\\n      var doc = Element.fromDom(win.document);\\n      return availableSearch(doc, x, y).map(function (rng) {\\n        return SimRange.create(Element.fromDom(rng.startContainer), rng.startOffset, Element.fromDom(rng.endContainer), rng.endOffset);\\n      });\\n    };\\n\\n    var beforeSpecial = function (element, offset) {\\n      var name$1 = name(element);\\n      if ('input' === name$1) {\\n        return Situ.after(element);\\n      } else if (!contains([\\n          'br',\\n          'img'\\n        ], name$1)) {\\n        return Situ.on(element, offset);\\n      } else {\\n        return offset === 0 ? Situ.before(element) : Situ.after(element);\\n      }\\n    };\\n    var preprocessRelative = function (startSitu, finishSitu) {\\n      var start = startSitu.fold(Situ.before, beforeSpecial, Situ.after);\\n      var finish = finishSitu.fold(Situ.before, beforeSpecial, Situ.after);\\n      return Selection.relative(start, finish);\\n    };\\n    var preprocessExact = function (start, soffset, finish, foffset) {\\n      var startSitu = beforeSpecial(start, soffset);\\n      var finishSitu = beforeSpecial(finish, foffset);\\n      return Selection.relative(startSitu, finishSitu);\\n    };\\n    var preprocess = function (selection) {\\n      return selection.match({\\n        domRange: function (rng) {\\n          var start = Element.fromDom(rng.startContainer);\\n          var finish = Element.fromDom(rng.endContainer);\\n          return preprocessExact(start, rng.startOffset, finish, rng.endOffset);\\n        },\\n        relative: preprocessRelative,\\n        exact: preprocessExact\\n      });\\n    };\\n\\n    var makeRange = function (start, soffset, finish, foffset) {\\n      var doc = owner(start);\\n      var rng = doc.dom().createRange();\\n      rng.setStart(start.dom(), soffset);\\n      rng.setEnd(finish.dom(), foffset);\\n      return rng;\\n    };\\n    var after$3 = function (start, soffset, finish, foffset) {\\n      var r = makeRange(start, soffset, finish, foffset);\\n      var same = eq(start, finish) && soffset === foffset;\\n      return r.collapsed && !same;\\n    };\\n\\n    var doSetNativeRange = function (win, rng) {\\n      Option.from(win.getSelection()).each(function (selection) {\\n        selection.removeAllRanges();\\n        selection.addRange(rng);\\n      });\\n    };\\n    var doSetRange = function (win, start, soffset, finish, foffset) {\\n      var rng = exactToNative(win, start, soffset, finish, foffset);\\n      doSetNativeRange(win, rng);\\n    };\\n    var setLegacyRtlRange = function (win, selection, start, soffset, finish, foffset) {\\n      selection.collapse(start.dom(), soffset);\\n      selection.extend(finish.dom(), foffset);\\n    };\\n    var setRangeFromRelative = function (win, relative) {\\n      return diagnose(win, relative).match({\\n        ltr: function (start, soffset, finish, foffset) {\\n          doSetRange(win, start, soffset, finish, foffset);\\n        },\\n        rtl: function (start, soffset, finish, foffset) {\\n          var selection = win.getSelection();\\n          if (selection.setBaseAndExtent) {\\n            selection.setBaseAndExtent(start.dom(), soffset, finish.dom(), foffset);\\n          } else if (selection.extend) {\\n            try {\\n              setLegacyRtlRange(win, selection, start, soffset, finish, foffset);\\n            } catch (e) {\\n              doSetRange(win, finish, foffset, start, soffset);\\n            }\\n          } else {\\n            doSetRange(win, finish, foffset, start, soffset);\\n          }\\n        }\\n      });\\n    };\\n    var setExact = function (win, start, soffset, finish, foffset) {\\n      var relative = preprocessExact(start, soffset, finish, foffset);\\n      setRangeFromRelative(win, relative);\\n    };\\n    var setRelative = function (win, startSitu, finishSitu) {\\n      var relative = preprocessRelative(startSitu, finishSitu);\\n      setRangeFromRelative(win, relative);\\n    };\\n    var toNative = function (selection) {\\n      var win = Selection.getWin(selection).dom();\\n      var getDomRange = function (start, soffset, finish, foffset) {\\n        return exactToNative(win, start, soffset, finish, foffset);\\n      };\\n      var filtered = preprocess(selection);\\n      return diagnose(win, filtered).match({\\n        ltr: getDomRange,\\n        rtl: getDomRange\\n      });\\n    };\\n    var readRange = function (selection) {\\n      if (selection.rangeCount > 0) {\\n        var firstRng = selection.getRangeAt(0);\\n        var lastRng = selection.getRangeAt(selection.rangeCount - 1);\\n        return Option.some(SimRange.create(Element.fromDom(firstRng.startContainer), firstRng.startOffset, Element.fromDom(lastRng.endContainer), lastRng.endOffset));\\n      } else {\\n        return Option.none();\\n      }\\n    };\\n    var doGetExact = function (selection) {\\n      var anchor = Element.fromDom(selection.anchorNode);\\n      var focus = Element.fromDom(selection.focusNode);\\n      return after$3(anchor, selection.anchorOffset, focus, selection.focusOffset) ? Option.some(SimRange.create(anchor, selection.anchorOffset, focus, selection.focusOffset)) : readRange(selection);\\n    };\\n    var setToElement = function (win, element) {\\n      var rng = selectNodeContents(win, element);\\n      doSetNativeRange(win, rng);\\n    };\\n    var getExact = function (win) {\\n      return Option.from(win.getSelection()).filter(function (sel) {\\n        return sel.rangeCount > 0;\\n      }).bind(doGetExact);\\n    };\\n    var get$9 = function (win) {\\n      return getExact(win).map(function (range) {\\n        return Selection.exact(range.start(), range.soffset(), range.finish(), range.foffset());\\n      });\\n    };\\n    var getFirstRect$1 = function (win, selection) {\\n      var rng = asLtrRange(win, selection);\\n      return getFirstRect(rng);\\n    };\\n    var getAtPoint = function (win, x, y) {\\n      return fromPoint$1(win, x, y);\\n    };\\n    var clear = function (win) {\\n      var selection = win.getSelection();\\n      selection.removeAllRanges();\\n    };\\n\\n    var global$3 = tinymce.util.Tools.resolve('tinymce.util.VK');\\n\\n    var forward = function (editor, isRoot, cell, lazyWire) {\\n      return go(editor, isRoot, CellNavigation.next(cell), lazyWire);\\n    };\\n    var backward = function (editor, isRoot, cell, lazyWire) {\\n      return go(editor, isRoot, CellNavigation.prev(cell), lazyWire);\\n    };\\n    var getCellFirstCursorPosition = function (editor, cell) {\\n      var selection = Selection.exact(cell, 0, cell, 0);\\n      return toNative(selection);\\n    };\\n    var getNewRowCursorPosition = function (editor, table) {\\n      var rows = descendants$1(table, 'tr');\\n      return last(rows).bind(function (last) {\\n        return descendant$1(last, 'td,th').map(function (first) {\\n          return getCellFirstCursorPosition(editor, first);\\n        });\\n      });\\n    };\\n    var go = function (editor, isRoot, cell, actions, lazyWire) {\\n      return cell.fold(Option.none, Option.none, function (current, next) {\\n        return first(next).map(function (cell) {\\n          return getCellFirstCursorPosition(editor, cell);\\n        });\\n      }, function (current) {\\n        return TableLookup.table(current, isRoot).bind(function (table) {\\n          var targets = TableTargets.noMenu(current);\\n          editor.undoManager.transact(function () {\\n            actions.insertRowsAfter(table, targets);\\n          });\\n          return getNewRowCursorPosition(editor, table);\\n        });\\n      });\\n    };\\n    var rootElements = [\\n      'table',\\n      'li',\\n      'dl'\\n    ];\\n    var handle$1 = function (event, editor, actions, lazyWire) {\\n      if (event.keyCode === global$3.TAB) {\\n        var body_1 = getBody$1(editor);\\n        var isRoot_1 = function (element) {\\n          var name$1 = name(element);\\n          return eq(element, body_1) || contains(rootElements, name$1);\\n        };\\n        var rng = editor.selection.getRng();\\n        if (rng.collapsed) {\\n          var start = Element.fromDom(rng.startContainer);\\n          TableLookup.cell(start, isRoot_1).each(function (cell) {\\n            event.preventDefault();\\n            var navigation = event.shiftKey ? backward : forward;\\n            var rng = navigation(editor, isRoot_1, cell, actions, lazyWire);\\n            rng.each(function (range) {\\n              editor.selection.setRng(range);\\n            });\\n          });\\n        }\\n      }\\n    };\\n    var TabContext = { handle: handle$1 };\\n\\n    var create$4 = Immutable('selection', 'kill');\\n    var Response = { create: create$4 };\\n\\n    var create$5 = function (start, soffset, finish, foffset) {\\n      return {\\n        start: constant(Situ.on(start, soffset)),\\n        finish: constant(Situ.on(finish, foffset))\\n      };\\n    };\\n    var Situs = { create: create$5 };\\n\\n    var convertToRange = function (win, selection) {\\n      var rng = asLtrRange(win, selection);\\n      return SimRange.create(Element.fromDom(rng.startContainer), rng.startOffset, Element.fromDom(rng.endContainer), rng.endOffset);\\n    };\\n    var makeSitus = Situs.create;\\n    var Util = {\\n      convertToRange: convertToRange,\\n      makeSitus: makeSitus\\n    };\\n\\n    var sync = function (container, isRoot, start, soffset, finish, foffset, selectRange) {\\n      if (!(eq(start, finish) && soffset === foffset)) {\\n        return closest$1(start, 'td,th', isRoot).bind(function (s) {\\n          return closest$1(finish, 'td,th', isRoot).bind(function (f) {\\n            return detect$5(container, isRoot, s, f, selectRange);\\n          });\\n        });\\n      } else {\\n        return Option.none();\\n      }\\n    };\\n    var detect$5 = function (container, isRoot, start, finish, selectRange) {\\n      if (!eq(start, finish)) {\\n        return CellSelection.identify(start, finish, isRoot).bind(function (cellSel) {\\n          var boxes = cellSel.boxes().getOr([]);\\n          if (boxes.length > 0) {\\n            selectRange(container, boxes, cellSel.start(), cellSel.finish());\\n            return Option.some(Response.create(Option.some(Util.makeSitus(start, 0, start, getEnd(start))), true));\\n          } else {\\n            return Option.none();\\n          }\\n        });\\n      } else {\\n        return Option.none();\\n      }\\n    };\\n    var update = function (rows, columns, container, selected, annotations) {\\n      var updateSelection = function (newSels) {\\n        annotations.clear(container);\\n        annotations.selectRange(container, newSels.boxes(), newSels.start(), newSels.finish());\\n        return newSels.boxes();\\n      };\\n      return CellSelection.shiftSelection(selected, rows, columns, annotations.firstSelectedSelector(), annotations.lastSelectedSelector()).map(updateSelection);\\n    };\\n    var KeySelection = {\\n      sync: sync,\\n      detect: detect$5,\\n      update: update\\n    };\\n\\n    var traverse = Immutable('item', 'mode');\\n    var backtrack = function (universe, item, _direction, transition) {\\n      if (transition === void 0) {\\n        transition = sidestep;\\n      }\\n      return universe.property().parent(item).map(function (p) {\\n        return traverse(p, transition);\\n      });\\n    };\\n    var sidestep = function (universe, item, direction, transition) {\\n      if (transition === void 0) {\\n        transition = advance;\\n      }\\n      return direction.sibling(universe, item).map(function (p) {\\n        return traverse(p, transition);\\n      });\\n    };\\n    var advance = function (universe, item, direction, transition) {\\n      if (transition === void 0) {\\n        transition = advance;\\n      }\\n      var children = universe.property().children(item);\\n      var result = direction.first(children);\\n      return result.map(function (r) {\\n        return traverse(r, transition);\\n      });\\n    };\\n    var successors = [\\n      {\\n        current: backtrack,\\n        next: sidestep,\\n        fallback: Option.none()\\n      },\\n      {\\n        current: sidestep,\\n        next: advance,\\n        fallback: Option.some(backtrack)\\n      },\\n      {\\n        current: advance,\\n        next: advance,\\n        fallback: Option.some(sidestep)\\n      }\\n    ];\\n    var go$1 = function (universe, item, mode, direction, rules) {\\n      if (rules === void 0) {\\n        rules = successors;\\n      }\\n      var ruleOpt = find(rules, function (succ) {\\n        return succ.current === mode;\\n      });\\n      return ruleOpt.bind(function (rule) {\\n        return rule.current(universe, item, direction, rule.next).orThunk(function () {\\n          return rule.fallback.bind(function (fb) {\\n            return go$1(universe, item, fb, direction);\\n          });\\n        });\\n      });\\n    };\\n\\n    var left = function () {\\n      var sibling = function (universe, item) {\\n        return universe.query().prevSibling(item);\\n      };\\n      var first = function (children) {\\n        return children.length > 0 ? Option.some(children[children.length - 1]) : Option.none();\\n      };\\n      return {\\n        sibling: sibling,\\n        first: first\\n      };\\n    };\\n    var right = function () {\\n      var sibling = function (universe, item) {\\n        return universe.query().nextSibling(item);\\n      };\\n      var first = function (children) {\\n        return children.length > 0 ? Option.some(children[0]) : Option.none();\\n      };\\n      return {\\n        sibling: sibling,\\n        first: first\\n      };\\n    };\\n    var Walkers = {\\n      left: left,\\n      right: right\\n    };\\n\\n    var hone = function (universe, item, predicate, mode, direction, isRoot) {\\n      var next = go$1(universe, item, mode, direction);\\n      return next.bind(function (n) {\\n        if (isRoot(n.item())) {\\n          return Option.none();\\n        } else {\\n          return predicate(n.item()) ? Option.some(n.item()) : hone(universe, n.item(), predicate, n.mode(), direction, isRoot);\\n        }\\n      });\\n    };\\n    var left$1 = function (universe, item, predicate, isRoot) {\\n      return hone(universe, item, predicate, sidestep, Walkers.left(), isRoot);\\n    };\\n    var right$1 = function (universe, item, predicate, isRoot) {\\n      return hone(universe, item, predicate, sidestep, Walkers.right(), isRoot);\\n    };\\n\\n    var isLeaf = function (universe) {\\n      return function (element) {\\n        return universe.property().children(element).length === 0;\\n      };\\n    };\\n    var before$3 = function (universe, item, isRoot) {\\n      return seekLeft(universe, item, isLeaf(universe), isRoot);\\n    };\\n    var after$4 = function (universe, item, isRoot) {\\n      return seekRight(universe, item, isLeaf(universe), isRoot);\\n    };\\n    var seekLeft = left$1;\\n    var seekRight = right$1;\\n\\n    var universe$2 = DomUniverse();\\n    var before$4 = function (element, isRoot) {\\n      return before$3(universe$2, element, isRoot);\\n    };\\n    var after$5 = function (element, isRoot) {\\n      return after$4(universe$2, element, isRoot);\\n    };\\n    var seekLeft$1 = function (element, predicate, isRoot) {\\n      return seekLeft(universe$2, element, predicate, isRoot);\\n    };\\n    var seekRight$1 = function (element, predicate, isRoot) {\\n      return seekRight(universe$2, element, predicate, isRoot);\\n    };\\n\\n    var ancestor$2 = function (scope, predicate, isRoot) {\\n      return ancestor(scope, predicate, isRoot).isSome();\\n    };\\n\\n    var point = Immutable('element', 'offset');\\n    var delta = Immutable('element', 'deltaOffset');\\n    var range$2 = Immutable('element', 'start', 'finish');\\n    var points = Immutable('begin', 'end');\\n    var text = Immutable('element', 'text');\\n\\n    var adt$5 = Adt.generate([\\n      { none: ['message'] },\\n      { success: [] },\\n      { failedUp: ['cell'] },\\n      { failedDown: ['cell'] }\\n    ]);\\n    var isOverlapping = function (bridge, before, after) {\\n      var beforeBounds = bridge.getRect(before);\\n      var afterBounds = bridge.getRect(after);\\n      return afterBounds.right > beforeBounds.left && afterBounds.left < beforeBounds.right;\\n    };\\n    var isRow = function (elem) {\\n      return closest$1(elem, 'tr');\\n    };\\n    var verify = function (bridge, before, beforeOffset, after, afterOffset, failure, isRoot) {\\n      return closest$1(after, 'td,th', isRoot).bind(function (afterCell) {\\n        return closest$1(before, 'td,th', isRoot).map(function (beforeCell) {\\n          if (!eq(afterCell, beforeCell)) {\\n            return DomParent.sharedOne(isRow, [\\n              afterCell,\\n              beforeCell\\n            ]).fold(function () {\\n              return isOverlapping(bridge, beforeCell, afterCell) ? adt$5.success() : failure(beforeCell);\\n            }, function (_sharedRow) {\\n              return failure(beforeCell);\\n            });\\n          } else {\\n            return eq(after, afterCell) && getEnd(afterCell) === afterOffset ? failure(beforeCell) : adt$5.none('in same cell');\\n          }\\n        });\\n      }).getOr(adt$5.none('default'));\\n    };\\n    var cata$2 = function (subject, onNone, onSuccess, onFailedUp, onFailedDown) {\\n      return subject.fold(onNone, onSuccess, onFailedUp, onFailedDown);\\n    };\\n    var BeforeAfter = __assign(__assign({}, adt$5), {\\n      verify: verify,\\n      cata: cata$2\\n    });\\n\\n    var inAncestor = Immutable('ancestor', 'descendants', 'element', 'index');\\n    var inParent = Immutable('parent', 'children', 'element', 'index');\\n    var indexInParent = function (element) {\\n      return parent(element).bind(function (parent) {\\n        var children$1 = children(parent);\\n        return indexOf(children$1, element).map(function (index) {\\n          return inParent(parent, children$1, element, index);\\n        });\\n      });\\n    };\\n    var indexOf = function (elements, element) {\\n      return findIndex(elements, curry(eq, element));\\n    };\\n\\n    var isBr = function (elem) {\\n      return name(elem) === 'br';\\n    };\\n    var gatherer = function (cand, gather, isRoot) {\\n      return gather(cand, isRoot).bind(function (target) {\\n        return isText(target) && get$2(target).trim().length === 0 ? gatherer(target, gather, isRoot) : Option.some(target);\\n      });\\n    };\\n    var handleBr = function (isRoot, element, direction) {\\n      return direction.traverse(element).orThunk(function () {\\n        return gatherer(element, direction.gather, isRoot);\\n      }).map(direction.relative);\\n    };\\n    var findBr = function (element, offset) {\\n      return child(element, offset).filter(isBr).orThunk(function () {\\n        return child(element, offset - 1).filter(isBr);\\n      });\\n    };\\n    var handleParent = function (isRoot, element, offset, direction) {\\n      return findBr(element, offset).bind(function (br) {\\n        return direction.traverse(br).fold(function () {\\n          return gatherer(br, direction.gather, isRoot).map(direction.relative);\\n        }, function (adjacent) {\\n          return indexInParent(adjacent).map(function (info) {\\n            return Situ.on(info.parent(), info.index());\\n          });\\n        });\\n      });\\n    };\\n    var tryBr = function (isRoot, element, offset, direction) {\\n      var target = isBr(element) ? handleBr(isRoot, element, direction) : handleParent(isRoot, element, offset, direction);\\n      return target.map(function (tgt) {\\n        return {\\n          start: constant(tgt),\\n          finish: constant(tgt)\\n        };\\n      });\\n    };\\n    var process = function (analysis) {\\n      return BeforeAfter.cata(analysis, function (message) {\\n        return Option.none();\\n      }, function () {\\n        return Option.none();\\n      }, function (cell) {\\n        return Option.some(point(cell, 0));\\n      }, function (cell) {\\n        return Option.some(point(cell, getEnd(cell)));\\n      });\\n    };\\n    var BrTags = {\\n      tryBr: tryBr,\\n      process: process\\n    };\\n\\n    var nu$3 = MixedBag([\\n      'left',\\n      'top',\\n      'right',\\n      'bottom'\\n    ], []);\\n    var moveDown = function (caret, amount) {\\n      return nu$3({\\n        left: caret.left(),\\n        top: caret.top() + amount,\\n        right: caret.right(),\\n        bottom: caret.bottom() + amount\\n      });\\n    };\\n    var moveUp = function (caret, amount) {\\n      return nu$3({\\n        left: caret.left(),\\n        top: caret.top() - amount,\\n        right: caret.right(),\\n        bottom: caret.bottom() - amount\\n      });\\n    };\\n    var moveBottomTo = function (caret, bottom) {\\n      var height = caret.bottom() - caret.top();\\n      return nu$3({\\n        left: caret.left(),\\n        top: bottom - height,\\n        right: caret.right(),\\n        bottom: bottom\\n      });\\n    };\\n    var moveTopTo = function (caret, top) {\\n      var height = caret.bottom() - caret.top();\\n      return nu$3({\\n        left: caret.left(),\\n        top: top,\\n        right: caret.right(),\\n        bottom: top + height\\n      });\\n    };\\n    var translate = function (caret, xDelta, yDelta) {\\n      return nu$3({\\n        left: caret.left() + xDelta,\\n        top: caret.top() + yDelta,\\n        right: caret.right() + xDelta,\\n        bottom: caret.bottom() + yDelta\\n      });\\n    };\\n    var getTop$1 = function (caret) {\\n      return caret.top();\\n    };\\n    var getBottom = function (caret) {\\n      return caret.bottom();\\n    };\\n    var toString = function (caret) {\\n      return '(' + caret.left() + ', ' + caret.top() + ') -> (' + caret.right() + ', ' + caret.bottom() + ')';\\n    };\\n    var Carets = {\\n      nu: nu$3,\\n      moveUp: moveUp,\\n      moveDown: moveDown,\\n      moveBottomTo: moveBottomTo,\\n      moveTopTo: moveTopTo,\\n      getTop: getTop$1,\\n      getBottom: getBottom,\\n      translate: translate,\\n      toString: toString\\n    };\\n\\n    var getPartialBox = function (bridge, element, offset) {\\n      if (offset >= 0 && offset < getEnd(element)) {\\n        return bridge.getRangedRect(element, offset, element, offset + 1);\\n      } else if (offset > 0) {\\n        return bridge.getRangedRect(element, offset - 1, element, offset);\\n      }\\n      return Option.none();\\n    };\\n    var toCaret = function (rect) {\\n      return Carets.nu({\\n        left: rect.left,\\n        top: rect.top,\\n        right: rect.right,\\n        bottom: rect.bottom\\n      });\\n    };\\n    var getElemBox = function (bridge, element) {\\n      return Option.some(bridge.getRect(element));\\n    };\\n    var getBoxAt = function (bridge, element, offset) {\\n      if (isElement(element)) {\\n        return getElemBox(bridge, element).map(toCaret);\\n      } else if (isText(element)) {\\n        return getPartialBox(bridge, element, offset).map(toCaret);\\n      } else {\\n        return Option.none();\\n      }\\n    };\\n    var getEntireBox = function (bridge, element) {\\n      if (isElement(element)) {\\n        return getElemBox(bridge, element).map(toCaret);\\n      } else if (isText(element)) {\\n        return bridge.getRangedRect(element, 0, element, getEnd(element)).map(toCaret);\\n      } else {\\n        return Option.none();\\n      }\\n    };\\n    var Rectangles = {\\n      getBoxAt: getBoxAt,\\n      getEntireBox: getEntireBox\\n    };\\n\\n    var JUMP_SIZE = 5;\\n    var NUM_RETRIES = 100;\\n    var adt$6 = Adt.generate([\\n      { none: [] },\\n      { retry: ['caret'] }\\n    ]);\\n    var isOutside = function (caret, box) {\\n      return caret.left() < box.left() || Math.abs(box.right() - caret.left()) < 1 || caret.left() > box.right();\\n    };\\n    var inOutsideBlock = function (bridge, element, caret) {\\n      return closest(element, DomStructure.isBlock).fold(constant(false), function (cell) {\\n        return Rectangles.getEntireBox(bridge, cell).exists(function (box) {\\n          return isOutside(caret, box);\\n        });\\n      });\\n    };\\n    var adjustDown = function (bridge, element, guessBox, original, caret) {\\n      var lowerCaret = Carets.moveDown(caret, JUMP_SIZE);\\n      if (Math.abs(guessBox.bottom() - original.bottom()) < 1) {\\n        return adt$6.retry(lowerCaret);\\n      } else if (guessBox.top() > caret.bottom()) {\\n        return adt$6.retry(lowerCaret);\\n      } else if (guessBox.top() === caret.bottom()) {\\n        return adt$6.retry(Carets.moveDown(caret, 1));\\n      } else {\\n        return inOutsideBlock(bridge, element, caret) ? adt$6.retry(Carets.translate(lowerCaret, JUMP_SIZE, 0)) : adt$6.none();\\n      }\\n    };\\n    var adjustUp = function (bridge, element, guessBox, original, caret) {\\n      var higherCaret = Carets.moveUp(caret, JUMP_SIZE);\\n      if (Math.abs(guessBox.top() - original.top()) < 1) {\\n        return adt$6.retry(higherCaret);\\n      } else if (guessBox.bottom() < caret.top()) {\\n        return adt$6.retry(higherCaret);\\n      } else if (guessBox.bottom() === caret.top()) {\\n        return adt$6.retry(Carets.moveUp(caret, 1));\\n      } else {\\n        return inOutsideBlock(bridge, element, caret) ? adt$6.retry(Carets.translate(higherCaret, JUMP_SIZE, 0)) : adt$6.none();\\n      }\\n    };\\n    var upMovement = {\\n      point: Carets.getTop,\\n      adjuster: adjustUp,\\n      move: Carets.moveUp,\\n      gather: before$4\\n    };\\n    var downMovement = {\\n      point: Carets.getBottom,\\n      adjuster: adjustDown,\\n      move: Carets.moveDown,\\n      gather: after$5\\n    };\\n    var isAtTable = function (bridge, x, y) {\\n      return bridge.elementFromPoint(x, y).filter(function (elm) {\\n        return name(elm) === 'table';\\n      }).isSome();\\n    };\\n    var adjustForTable = function (bridge, movement, original, caret, numRetries) {\\n      return adjustTil(bridge, movement, original, movement.move(caret, JUMP_SIZE), numRetries);\\n    };\\n    var adjustTil = function (bridge, movement, original, caret, numRetries) {\\n      if (numRetries === 0) {\\n        return Option.some(caret);\\n      }\\n      if (isAtTable(bridge, caret.left(), movement.point(caret))) {\\n        return adjustForTable(bridge, movement, original, caret, numRetries - 1);\\n      }\\n      return bridge.situsFromPoint(caret.left(), movement.point(caret)).bind(function (guess) {\\n        return guess.start().fold(Option.none, function (element) {\\n          return Rectangles.getEntireBox(bridge, element).bind(function (guessBox) {\\n            return movement.adjuster(bridge, element, guessBox, original, caret).fold(Option.none, function (newCaret) {\\n              return adjustTil(bridge, movement, original, newCaret, numRetries - 1);\\n            });\\n          }).orThunk(function () {\\n            return Option.some(caret);\\n          });\\n        }, Option.none);\\n      });\\n    };\\n    var ieTryDown = function (bridge, caret) {\\n      return bridge.situsFromPoint(caret.left(), caret.bottom() + JUMP_SIZE);\\n    };\\n    var ieTryUp = function (bridge, caret) {\\n      return bridge.situsFromPoint(caret.left(), caret.top() - JUMP_SIZE);\\n    };\\n    var checkScroll = function (movement, adjusted, bridge) {\\n      if (movement.point(adjusted) > bridge.getInnerHeight()) {\\n        return Option.some(movement.point(adjusted) - bridge.getInnerHeight());\\n      } else if (movement.point(adjusted) < 0) {\\n        return Option.some(-movement.point(adjusted));\\n      } else {\\n        return Option.none();\\n      }\\n    };\\n    var retry = function (movement, bridge, caret) {\\n      var moved = movement.move(caret, JUMP_SIZE);\\n      var adjusted = adjustTil(bridge, movement, caret, moved, NUM_RETRIES).getOr(moved);\\n      return checkScroll(movement, adjusted, bridge).fold(function () {\\n        return bridge.situsFromPoint(adjusted.left(), movement.point(adjusted));\\n      }, function (delta) {\\n        bridge.scrollBy(0, delta);\\n        return bridge.situsFromPoint(adjusted.left(), movement.point(adjusted) - delta);\\n      });\\n    };\\n    var Retries = {\\n      tryUp: curry(retry, upMovement),\\n      tryDown: curry(retry, downMovement),\\n      ieTryUp: ieTryUp,\\n      ieTryDown: ieTryDown,\\n      getJumpSize: constant(JUMP_SIZE)\\n    };\\n\\n    var MAX_RETRIES = 20;\\n    var platform$1 = PlatformDetection$1.detect();\\n    var findSpot = function (bridge, isRoot, direction) {\\n      return bridge.getSelection().bind(function (sel) {\\n        return BrTags.tryBr(isRoot, sel.finish(), sel.foffset(), direction).fold(function () {\\n          return Option.some(point(sel.finish(), sel.foffset()));\\n        }, function (brNeighbour) {\\n          var range = bridge.fromSitus(brNeighbour);\\n          var analysis = BeforeAfter.verify(bridge, sel.finish(), sel.foffset(), range.finish(), range.foffset(), direction.failure, isRoot);\\n          return BrTags.process(analysis);\\n        });\\n      });\\n    };\\n    var scan = function (bridge, isRoot, element, offset, direction, numRetries) {\\n      if (numRetries === 0) {\\n        return Option.none();\\n      }\\n      return tryCursor(bridge, isRoot, element, offset, direction).bind(function (situs) {\\n        var range = bridge.fromSitus(situs);\\n        var analysis = BeforeAfter.verify(bridge, element, offset, range.finish(), range.foffset(), direction.failure, isRoot);\\n        return BeforeAfter.cata(analysis, function () {\\n          return Option.none();\\n        }, function () {\\n          return Option.some(situs);\\n        }, function (cell) {\\n          if (eq(element, cell) && offset === 0) {\\n            return tryAgain(bridge, element, offset, Carets.moveUp, direction);\\n          } else {\\n            return scan(bridge, isRoot, cell, 0, direction, numRetries - 1);\\n          }\\n        }, function (cell) {\\n          if (eq(element, cell) && offset === getEnd(cell)) {\\n            return tryAgain(bridge, element, offset, Carets.moveDown, direction);\\n          } else {\\n            return scan(bridge, isRoot, cell, getEnd(cell), direction, numRetries - 1);\\n          }\\n        });\\n      });\\n    };\\n    var tryAgain = function (bridge, element, offset, move, direction) {\\n      return Rectangles.getBoxAt(bridge, element, offset).bind(function (box) {\\n        return tryAt(bridge, direction, move(box, Retries.getJumpSize()));\\n      });\\n    };\\n    var tryAt = function (bridge, direction, box) {\\n      if (platform$1.browser.isChrome() || platform$1.browser.isSafari() || platform$1.browser.isFirefox() || platform$1.browser.isEdge()) {\\n        return direction.otherRetry(bridge, box);\\n      } else if (platform$1.browser.isIE()) {\\n        return direction.ieRetry(bridge, box);\\n      } else {\\n        return Option.none();\\n      }\\n    };\\n    var tryCursor = function (bridge, isRoot, element, offset, direction) {\\n      return Rectangles.getBoxAt(bridge, element, offset).bind(function (box) {\\n        return tryAt(bridge, direction, box);\\n      });\\n    };\\n    var handle$2 = function (bridge, isRoot, direction) {\\n      return findSpot(bridge, isRoot, direction).bind(function (spot) {\\n        return scan(bridge, isRoot, spot.element(), spot.offset(), direction, MAX_RETRIES).map(bridge.fromSitus);\\n      });\\n    };\\n    var TableKeys = { handle: handle$2 };\\n\\n    var detection = PlatformDetection$1.detect();\\n    var inSameTable = function (elem, table) {\\n      return ancestor$2(elem, function (e) {\\n        return parent(e).exists(function (p) {\\n          return eq(p, table);\\n        });\\n      });\\n    };\\n    var simulate = function (bridge, isRoot, direction, initial, anchor) {\\n      return closest$1(initial, 'td,th', isRoot).bind(function (start) {\\n        return closest$1(start, 'table', isRoot).bind(function (table) {\\n          if (!inSameTable(anchor, table)) {\\n            return Option.none();\\n          }\\n          return TableKeys.handle(bridge, isRoot, direction).bind(function (range) {\\n            return closest$1(range.finish(), 'td,th', isRoot).map(function (finish) {\\n              return {\\n                start: constant(start),\\n                finish: constant(finish),\\n                range: constant(range)\\n              };\\n            });\\n          });\\n        });\\n      });\\n    };\\n    var navigate = function (bridge, isRoot, direction, initial, anchor, precheck) {\\n      if (detection.browser.isIE()) {\\n        return Option.none();\\n      } else {\\n        return precheck(initial, isRoot).orThunk(function () {\\n          return simulate(bridge, isRoot, direction, initial, anchor).map(function (info) {\\n            var range = info.range();\\n            return Response.create(Option.some(Util.makeSitus(range.start(), range.soffset(), range.finish(), range.foffset())), true);\\n          });\\n        });\\n      }\\n    };\\n    var firstUpCheck = function (initial, isRoot) {\\n      return closest$1(initial, 'tr', isRoot).bind(function (startRow) {\\n        return closest$1(startRow, 'table', isRoot).bind(function (table) {\\n          var rows = descendants$1(table, 'tr');\\n          if (eq(startRow, rows[0])) {\\n            return seekLeft$1(table, function (element) {\\n              return last$1(element).isSome();\\n            }, isRoot).map(function (last) {\\n              var lastOffset = getEnd(last);\\n              return Response.create(Option.some(Util.makeSitus(last, lastOffset, last, lastOffset)), true);\\n            });\\n          } else {\\n            return Option.none();\\n          }\\n        });\\n      });\\n    };\\n    var lastDownCheck = function (initial, isRoot) {\\n      return closest$1(initial, 'tr', isRoot).bind(function (startRow) {\\n        return closest$1(startRow, 'table', isRoot).bind(function (table) {\\n          var rows = descendants$1(table, 'tr');\\n          if (eq(startRow, rows[rows.length - 1])) {\\n            return seekRight$1(table, function (element) {\\n              return first(element).isSome();\\n            }, isRoot).map(function (first) {\\n              return Response.create(Option.some(Util.makeSitus(first, 0, first, 0)), true);\\n            });\\n          } else {\\n            return Option.none();\\n          }\\n        });\\n      });\\n    };\\n    var select = function (bridge, container, isRoot, direction, initial, anchor, selectRange) {\\n      return simulate(bridge, isRoot, direction, initial, anchor).bind(function (info) {\\n        return KeySelection.detect(container, isRoot, info.start(), info.finish(), selectRange);\\n      });\\n    };\\n    var VerticalMovement = {\\n      navigate: navigate,\\n      select: select,\\n      firstUpCheck: firstUpCheck,\\n      lastDownCheck: lastDownCheck\\n    };\\n\\n    var findCell = function (target, isRoot) {\\n      return closest$1(target, 'td,th', isRoot);\\n    };\\n    function MouseSelection (bridge, container, isRoot, annotations) {\\n      var cursor = Option.none();\\n      var clearState = function () {\\n        cursor = Option.none();\\n      };\\n      var mousedown = function (event) {\\n        annotations.clear(container);\\n        cursor = findCell(event.target(), isRoot);\\n      };\\n      var mouseover = function (event) {\\n        cursor.each(function (start) {\\n          annotations.clear(container);\\n          findCell(event.target(), isRoot).each(function (finish) {\\n            CellSelection.identify(start, finish, isRoot).each(function (cellSel) {\\n              var boxes = cellSel.boxes().getOr([]);\\n              if (boxes.length > 1 || boxes.length === 1 && !eq(start, finish)) {\\n                annotations.selectRange(container, boxes, cellSel.start(), cellSel.finish());\\n                bridge.selectContents(finish);\\n              }\\n            });\\n          });\\n        });\\n      };\\n      var mouseup = function (_event) {\\n        cursor.each(clearState);\\n      };\\n      return {\\n        mousedown: mousedown,\\n        mouseover: mouseover,\\n        mouseup: mouseup\\n      };\\n    }\\n\\n    var down = {\\n      traverse: nextSibling,\\n      gather: after$5,\\n      relative: Situ.before,\\n      otherRetry: Retries.tryDown,\\n      ieRetry: Retries.ieTryDown,\\n      failure: BeforeAfter.failedDown\\n    };\\n    var up = {\\n      traverse: prevSibling,\\n      gather: before$4,\\n      relative: Situ.before,\\n      otherRetry: Retries.tryUp,\\n      ieRetry: Retries.ieTryUp,\\n      failure: BeforeAfter.failedUp\\n    };\\n    var KeyDirection = {\\n      down: down,\\n      up: up\\n    };\\n\\n    var isKey = function (key) {\\n      return function (keycode) {\\n        return keycode === key;\\n      };\\n    };\\n    var isUp = isKey(38);\\n    var isDown = isKey(40);\\n    var isNavigation = function (keycode) {\\n      return keycode >= 37 && keycode <= 40;\\n    };\\n    var SelectionKeys = {\\n      ltr: {\\n        isBackward: isKey(37),\\n        isForward: isKey(39)\\n      },\\n      rtl: {\\n        isBackward: isKey(39),\\n        isForward: isKey(37)\\n      },\\n      isUp: isUp,\\n      isDown: isDown,\\n      isNavigation: isNavigation\\n    };\\n\\n    var toRaw = function (sr) {\\n      return {\\n        left: sr.left(),\\n        top: sr.top(),\\n        right: sr.right(),\\n        bottom: sr.bottom(),\\n        width: sr.width(),\\n        height: sr.height()\\n      };\\n    };\\n    var Rect = { toRaw: toRaw };\\n\\n    var isSafari = PlatformDetection$1.detect().browser.isSafari();\\n    var get$a = function (_DOC) {\\n      var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;\\n      var x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\\n      var y = doc.body.scrollTop || doc.documentElement.scrollTop;\\n      return Position(x, y);\\n    };\\n    var by = function (x, y, _DOC) {\\n      var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;\\n      var win = doc.defaultView;\\n      win.scrollBy(x, y);\\n    };\\n\\n    var WindowBridge = function (win) {\\n      var elementFromPoint = function (x, y) {\\n        return Element.fromPoint(Element.fromDom(win.document), x, y);\\n      };\\n      var getRect = function (element) {\\n        return element.dom().getBoundingClientRect();\\n      };\\n      var getRangedRect = function (start, soffset, finish, foffset) {\\n        var sel = Selection.exact(start, soffset, finish, foffset);\\n        return getFirstRect$1(win, sel).map(Rect.toRaw);\\n      };\\n      var getSelection = function () {\\n        return get$9(win).map(function (exactAdt) {\\n          return Util.convertToRange(win, exactAdt);\\n        });\\n      };\\n      var fromSitus = function (situs) {\\n        var relative = Selection.relative(situs.start(), situs.finish());\\n        return Util.convertToRange(win, relative);\\n      };\\n      var situsFromPoint = function (x, y) {\\n        return getAtPoint(win, x, y).map(function (exact) {\\n          return Situs.create(exact.start(), exact.soffset(), exact.finish(), exact.foffset());\\n        });\\n      };\\n      var clearSelection = function () {\\n        clear(win);\\n      };\\n      var selectContents = function (element) {\\n        setToElement(win, element);\\n      };\\n      var setSelection = function (sel) {\\n        setExact(win, sel.start(), sel.soffset(), sel.finish(), sel.foffset());\\n      };\\n      var setRelativeSelection = function (start, finish) {\\n        setRelative(win, start, finish);\\n      };\\n      var getInnerHeight = function () {\\n        return win.innerHeight;\\n      };\\n      var getScrollY = function () {\\n        var pos = get$a(Element.fromDom(win.document));\\n        return pos.top();\\n      };\\n      var scrollBy = function (x, y) {\\n        by(x, y, Element.fromDom(win.document));\\n      };\\n      return {\\n        elementFromPoint: elementFromPoint,\\n        getRect: getRect,\\n        getRangedRect: getRangedRect,\\n        getSelection: getSelection,\\n        fromSitus: fromSitus,\\n        situsFromPoint: situsFromPoint,\\n        clearSelection: clearSelection,\\n        setSelection: setSelection,\\n        setRelativeSelection: setRelativeSelection,\\n        selectContents: selectContents,\\n        getInnerHeight: getInnerHeight,\\n        getScrollY: getScrollY,\\n        scrollBy: scrollBy\\n      };\\n    };\\n\\n    var rc = Immutable('rows', 'cols');\\n    var mouse = function (win, container, isRoot, annotations) {\\n      var bridge = WindowBridge(win);\\n      var handlers = MouseSelection(bridge, container, isRoot, annotations);\\n      return {\\n        mousedown: handlers.mousedown,\\n        mouseover: handlers.mouseover,\\n        mouseup: handlers.mouseup\\n      };\\n    };\\n    var keyboard = function (win, container, isRoot, annotations) {\\n      var bridge = WindowBridge(win);\\n      var clearToNavigate = function () {\\n        annotations.clear(container);\\n        return Option.none();\\n      };\\n      var keydown = function (event, start, soffset, finish, foffset, direction) {\\n        var realEvent = event.raw();\\n        var keycode = realEvent.which;\\n        var shiftKey = realEvent.shiftKey === true;\\n        var handler = CellSelection.retrieve(container, annotations.selectedSelector()).fold(function () {\\n          if (SelectionKeys.isDown(keycode) && shiftKey) {\\n            return curry(VerticalMovement.select, bridge, container, isRoot, KeyDirection.down, finish, start, annotations.selectRange);\\n          } else if (SelectionKeys.isUp(keycode) && shiftKey) {\\n            return curry(VerticalMovement.select, bridge, container, isRoot, KeyDirection.up, finish, start, annotations.selectRange);\\n          } else if (SelectionKeys.isDown(keycode)) {\\n            return curry(VerticalMovement.navigate, bridge, isRoot, KeyDirection.down, finish, start, VerticalMovement.lastDownCheck);\\n          } else if (SelectionKeys.isUp(keycode)) {\\n            return curry(VerticalMovement.navigate, bridge, isRoot, KeyDirection.up, finish, start, VerticalMovement.firstUpCheck);\\n          } else {\\n            return Option.none;\\n          }\\n        }, function (selected) {\\n          var update = function (attempts) {\\n            return function () {\\n              var navigation = findMap(attempts, function (delta) {\\n                return KeySelection.update(delta.rows(), delta.cols(), container, selected, annotations);\\n              });\\n              return navigation.fold(function () {\\n                return CellSelection.getEdges(container, annotations.firstSelectedSelector(), annotations.lastSelectedSelector()).map(function (edges) {\\n                  var relative = SelectionKeys.isDown(keycode) || direction.isForward(keycode) ? Situ.after : Situ.before;\\n                  bridge.setRelativeSelection(Situ.on(edges.first(), 0), relative(edges.table()));\\n                  annotations.clear(container);\\n                  return Response.create(Option.none(), true);\\n                });\\n              }, function (_) {\\n                return Option.some(Response.create(Option.none(), true));\\n              });\\n            };\\n          };\\n          if (SelectionKeys.isDown(keycode) && shiftKey) {\\n            return update([rc(+1, 0)]);\\n          } else if (SelectionKeys.isUp(keycode) && shiftKey) {\\n            return update([rc(-1, 0)]);\\n          } else if (direction.isBackward(keycode) && shiftKey) {\\n            return update([\\n              rc(0, -1),\\n              rc(-1, 0)\\n            ]);\\n          } else if (direction.isForward(keycode) && shiftKey) {\\n            return update([\\n              rc(0, +1),\\n              rc(+1, 0)\\n            ]);\\n          } else if (SelectionKeys.isNavigation(keycode) && shiftKey === false) {\\n            return clearToNavigate;\\n          } else {\\n            return Option.none;\\n          }\\n        });\\n        return handler();\\n      };\\n      var keyup = function (event, start, soffset, finish, foffset) {\\n        return CellSelection.retrieve(container, annotations.selectedSelector()).fold(function () {\\n          var realEvent = event.raw();\\n          var keycode = realEvent.which;\\n          var shiftKey = realEvent.shiftKey === true;\\n          if (shiftKey === false) {\\n            return Option.none();\\n          }\\n          if (SelectionKeys.isNavigation(keycode)) {\\n            return KeySelection.sync(container, isRoot, start, soffset, finish, foffset, annotations.selectRange);\\n          } else {\\n            return Option.none();\\n          }\\n        }, Option.none);\\n      };\\n      return {\\n        keydown: keydown,\\n        keyup: keyup\\n      };\\n    };\\n    var InputHandlers = {\\n      mouse: mouse,\\n      keyboard: keyboard\\n    };\\n\\n    var remove$7 = function (element, classes) {\\n      each(classes, function (x) {\\n        remove$5(element, x);\\n      });\\n    };\\n\\n    var addClass = function (clazz) {\\n      return function (element) {\\n        add$2(element, clazz);\\n      };\\n    };\\n    var removeClasses = function (classes) {\\n      return function (element) {\\n        remove$7(element, classes);\\n      };\\n    };\\n\\n    var byClass = function (ephemera) {\\n      var addSelectionClass = addClass(ephemera.selected());\\n      var removeSelectionClasses = removeClasses([\\n        ephemera.selected(),\\n        ephemera.lastSelected(),\\n        ephemera.firstSelected()\\n      ]);\\n      var clear = function (container) {\\n        var sels = descendants$1(container, ephemera.selectedSelector());\\n        each(sels, removeSelectionClasses);\\n      };\\n      var selectRange = function (container, cells, start, finish) {\\n        clear(container);\\n        each(cells, addSelectionClass);\\n        add$2(start, ephemera.firstSelected());\\n        add$2(finish, ephemera.lastSelected());\\n      };\\n      return {\\n        clear: clear,\\n        selectRange: selectRange,\\n        selectedSelector: ephemera.selectedSelector,\\n        firstSelectedSelector: ephemera.firstSelectedSelector,\\n        lastSelectedSelector: ephemera.lastSelectedSelector\\n      };\\n    };\\n    var byAttr = function (ephemera) {\\n      var removeSelectionAttributes = function (element) {\\n        remove(element, ephemera.selected());\\n        remove(element, ephemera.firstSelected());\\n        remove(element, ephemera.lastSelected());\\n      };\\n      var addSelectionAttribute = function (element) {\\n        set(element, ephemera.selected(), '1');\\n      };\\n      var clear = function (container) {\\n        var sels = descendants$1(container, ephemera.selectedSelector());\\n        each(sels, removeSelectionAttributes);\\n      };\\n      var selectRange = function (container, cells, start, finish) {\\n        clear(container);\\n        each(cells, addSelectionAttribute);\\n        set(start, ephemera.firstSelected(), '1');\\n        set(finish, ephemera.lastSelected(), '1');\\n      };\\n      return {\\n        clear: clear,\\n        selectRange: selectRange,\\n        selectedSelector: ephemera.selectedSelector,\\n        firstSelectedSelector: ephemera.firstSelectedSelector,\\n        lastSelectedSelector: ephemera.lastSelectedSelector\\n      };\\n    };\\n    var SelectionAnnotation = {\\n      byClass: byClass,\\n      byAttr: byAttr\\n    };\\n\\n    var hasInternalTarget = function (e) {\\n      return has$1(Element.fromDom(e.target), 'ephox-snooker-resizer-bar') === false;\\n    };\\n    function CellSelection$1 (editor, lazyResize) {\\n      var handlerStruct = MixedBag([\\n        'mousedown',\\n        'mouseover',\\n        'mouseup',\\n        'keyup',\\n        'keydown'\\n      ], []);\\n      var handlers = Option.none();\\n      var annotations = SelectionAnnotation.byAttr(Ephemera);\\n      editor.on('init', function (e) {\\n        var win = editor.getWin();\\n        var body = getBody$1(editor);\\n        var isRoot = getIsRoot(editor);\\n        var syncSelection = function () {\\n          var sel = editor.selection;\\n          var start = Element.fromDom(sel.getStart());\\n          var end = Element.fromDom(sel.getEnd());\\n          var shared = DomParent.sharedOne(TableLookup.table, [\\n            start,\\n            end\\n          ]);\\n          shared.fold(function () {\\n            annotations.clear(body);\\n          }, noop);\\n        };\\n        var mouseHandlers = InputHandlers.mouse(win, body, isRoot, annotations);\\n        var keyHandlers = InputHandlers.keyboard(win, body, isRoot, annotations);\\n        var hasShiftKey = function (event) {\\n          return event.raw().shiftKey === true;\\n        };\\n        var handleResponse = function (event, response) {\\n          if (!hasShiftKey(event)) {\\n            return;\\n          }\\n          if (response.kill()) {\\n            event.kill();\\n          }\\n          response.selection().each(function (ns) {\\n            var relative = Selection.relative(ns.start(), ns.finish());\\n            var rng = asLtrRange(win, relative);\\n            editor.selection.setRng(rng);\\n          });\\n        };\\n        var keyup = function (event) {\\n          var wrappedEvent = wrapEvent(event);\\n          if (wrappedEvent.raw().shiftKey && SelectionKeys.isNavigation(wrappedEvent.raw().which)) {\\n            var rng = editor.selection.getRng();\\n            var start = Element.fromDom(rng.startContainer);\\n            var end = Element.fromDom(rng.endContainer);\\n            keyHandlers.keyup(wrappedEvent, start, rng.startOffset, end, rng.endOffset).each(function (response) {\\n              handleResponse(wrappedEvent, response);\\n            });\\n          }\\n        };\\n        var keydown = function (event) {\\n          var wrappedEvent = wrapEvent(event);\\n          lazyResize().each(function (resize) {\\n            resize.hideBars();\\n          });\\n          var rng = editor.selection.getRng();\\n          var startContainer = Element.fromDom(editor.selection.getStart());\\n          var start = Element.fromDom(rng.startContainer);\\n          var end = Element.fromDom(rng.endContainer);\\n          var direction = Direction.directionAt(startContainer).isRtl() ? SelectionKeys.rtl : SelectionKeys.ltr;\\n          keyHandlers.keydown(wrappedEvent, start, rng.startOffset, end, rng.endOffset, direction).each(function (response) {\\n            handleResponse(wrappedEvent, response);\\n          });\\n          lazyResize().each(function (resize) {\\n            resize.showBars();\\n          });\\n        };\\n        var isMouseEvent = function (event) {\\n          return event.hasOwnProperty('x') && event.hasOwnProperty('y');\\n        };\\n        var wrapEvent = function (event) {\\n          var target = Element.fromDom(event.target);\\n          var stop = function () {\\n            event.stopPropagation();\\n          };\\n          var prevent = function () {\\n            event.preventDefault();\\n          };\\n          var kill = compose(prevent, stop);\\n          return {\\n            target: constant(target),\\n            x: constant(isMouseEvent(event) ? event.x : null),\\n            y: constant(isMouseEvent(event) ? event.y : null),\\n            stop: stop,\\n            prevent: prevent,\\n            kill: kill,\\n            raw: constant(event)\\n          };\\n        };\\n        var isLeftMouse = function (raw) {\\n          return raw.button === 0;\\n        };\\n        var isLeftButtonPressed = function (raw) {\\n          if (raw.buttons === undefined) {\\n            return true;\\n          }\\n          if (global$2.ie && global$2.ie >= 12 && raw.buttons === 0) {\\n            return true;\\n          }\\n          return (raw.buttons & 1) !== 0;\\n        };\\n        var mouseDown = function (e) {\\n          if (isLeftMouse(e) && hasInternalTarget(e)) {\\n            mouseHandlers.mousedown(wrapEvent(e));\\n          }\\n        };\\n        var mouseOver = function (e) {\\n          if (isLeftButtonPressed(e) && hasInternalTarget(e)) {\\n            mouseHandlers.mouseover(wrapEvent(e));\\n          }\\n        };\\n        var mouseUp = function (e) {\\n          if (isLeftMouse(e) && hasInternalTarget(e)) {\\n            mouseHandlers.mouseup(wrapEvent(e));\\n          }\\n        };\\n        editor.on('mousedown', mouseDown);\\n        editor.on('mouseover', mouseOver);\\n        editor.on('mouseup', mouseUp);\\n        editor.on('keyup', keyup);\\n        editor.on('keydown', keydown);\\n        editor.on('nodechange', syncSelection);\\n        handlers = Option.some(handlerStruct({\\n          mousedown: mouseDown,\\n          mouseover: mouseOver,\\n          mouseup: mouseUp,\\n          keyup: keyup,\\n          keydown: keydown\\n        }));\\n      });\\n      var destroy = function () {\\n        handlers.each(function (handlers) {\\n        });\\n      };\\n      return {\\n        clear: annotations.clear,\\n        destroy: destroy\\n      };\\n    }\\n\\n    var Selections = function (editor) {\\n      var get = function () {\\n        var body = getBody$1(editor);\\n        return TableSelection.retrieve(body, Ephemera.selectedSelector()).fold(function () {\\n          if (editor.selection.getStart() === undefined) {\\n            return SelectionTypes.none();\\n          } else {\\n            return SelectionTypes.single(editor.selection);\\n          }\\n        }, function (cells) {\\n          return SelectionTypes.multiple(cells);\\n        });\\n      };\\n      return { get: get };\\n    };\\n\\n    var each$4 = global$1.each;\\n    var addButtons = function (editor) {\\n      var menuItems = [];\\n      each$4('inserttable tableprops deletetable | cell row column'.split(' '), function (name) {\\n        if (name === '|') {\\n          menuItems.push({ text: '-' });\\n        } else {\\n          menuItems.push(editor.menuItems[name]);\\n        }\\n      });\\n      editor.addButton('table', {\\n        type: 'menubutton',\\n        title: 'Table',\\n        menu: menuItems\\n      });\\n      function cmd(command) {\\n        return function () {\\n          editor.execCommand(command);\\n        };\\n      }\\n      editor.addButton('tableprops', {\\n        title: 'Table properties',\\n        onclick: cmd('mceTableProps'),\\n        icon: 'table'\\n      });\\n      editor.addButton('tabledelete', {\\n        title: 'Delete table',\\n        onclick: cmd('mceTableDelete')\\n      });\\n      editor.addButton('tablecellprops', {\\n        title: 'Cell properties',\\n        onclick: cmd('mceTableCellProps')\\n      });\\n      editor.addButton('tablemergecells', {\\n        title: 'Merge cells',\\n        onclick: cmd('mceTableMergeCells')\\n      });\\n      editor.addButton('tablesplitcells', {\\n        title: 'Split cell',\\n        onclick: cmd('mceTableSplitCells')\\n      });\\n      editor.addButton('tableinsertrowbefore', {\\n        title: 'Insert row before',\\n        onclick: cmd('mceTableInsertRowBefore')\\n      });\\n      editor.addButton('tableinsertrowafter', {\\n        title: 'Insert row after',\\n        onclick: cmd('mceTableInsertRowAfter')\\n      });\\n      editor.addButton('tabledeleterow', {\\n        title: 'Delete row',\\n        onclick: cmd('mceTableDeleteRow')\\n      });\\n      editor.addButton('tablerowprops', {\\n        title: 'Row properties',\\n        onclick: cmd('mceTableRowProps')\\n      });\\n      editor.addButton('tablecutrow', {\\n        title: 'Cut row',\\n        onclick: cmd('mceTableCutRow')\\n      });\\n      editor.addButton('tablecopyrow', {\\n        title: 'Copy row',\\n        onclick: cmd('mceTableCopyRow')\\n      });\\n      editor.addButton('tablepasterowbefore', {\\n        title: 'Paste row before',\\n        onclick: cmd('mceTablePasteRowBefore')\\n      });\\n      editor.addButton('tablepasterowafter', {\\n        title: 'Paste row after',\\n        onclick: cmd('mceTablePasteRowAfter')\\n      });\\n      editor.addButton('tableinsertcolbefore', {\\n        title: 'Insert column before',\\n        onclick: cmd('mceTableInsertColBefore')\\n      });\\n      editor.addButton('tableinsertcolafter', {\\n        title: 'Insert column after',\\n        onclick: cmd('mceTableInsertColAfter')\\n      });\\n      editor.addButton('tabledeletecol', {\\n        title: 'Delete column',\\n        onclick: cmd('mceTableDeleteCol')\\n      });\\n    };\\n    var addToolbars = function (editor) {\\n      var isTable = function (table) {\\n        var selectorMatched = editor.dom.is(table, 'table') && editor.getBody().contains(table);\\n        return selectorMatched;\\n      };\\n      var toolbar = getToolbar(editor);\\n      if (toolbar.length > 0) {\\n        editor.addContextToolbar(isTable, toolbar.join(' '));\\n      }\\n    };\\n    var Buttons = {\\n      addButtons: addButtons,\\n      addToolbars: addToolbars\\n    };\\n\\n    var addMenuItems = function (editor, selections) {\\n      var targets = Option.none();\\n      var tableCtrls = [];\\n      var cellCtrls = [];\\n      var mergeCtrls = [];\\n      var unmergeCtrls = [];\\n      var noTargetDisable = function (ctrl) {\\n        ctrl.disabled(true);\\n      };\\n      var ctrlEnable = function (ctrl) {\\n        ctrl.disabled(false);\\n      };\\n      var pushTable = function () {\\n        var self = this;\\n        tableCtrls.push(self);\\n        targets.fold(function () {\\n          noTargetDisable(self);\\n        }, function (targets) {\\n          ctrlEnable(self);\\n        });\\n      };\\n      var pushCell = function () {\\n        var self = this;\\n        cellCtrls.push(self);\\n        targets.fold(function () {\\n          noTargetDisable(self);\\n        }, function (targets) {\\n          ctrlEnable(self);\\n        });\\n      };\\n      var pushMerge = function () {\\n        var self = this;\\n        mergeCtrls.push(self);\\n        targets.fold(function () {\\n          noTargetDisable(self);\\n        }, function (targets) {\\n          self.disabled(targets.mergable().isNone());\\n        });\\n      };\\n      var pushUnmerge = function () {\\n        var self = this;\\n        unmergeCtrls.push(self);\\n        targets.fold(function () {\\n          noTargetDisable(self);\\n        }, function (targets) {\\n          self.disabled(targets.unmergable().isNone());\\n        });\\n      };\\n      var setDisabledCtrls = function () {\\n        targets.fold(function () {\\n          each(tableCtrls, noTargetDisable);\\n          each(cellCtrls, noTargetDisable);\\n          each(mergeCtrls, noTargetDisable);\\n          each(unmergeCtrls, noTargetDisable);\\n        }, function (targets) {\\n          each(tableCtrls, ctrlEnable);\\n          each(cellCtrls, ctrlEnable);\\n          each(mergeCtrls, function (mergeCtrl) {\\n            mergeCtrl.disabled(targets.mergable().isNone());\\n          });\\n          each(unmergeCtrls, function (unmergeCtrl) {\\n            unmergeCtrl.disabled(targets.unmergable().isNone());\\n          });\\n        });\\n      };\\n      editor.on('init', function () {\\n        editor.on('nodechange', function (e) {\\n          var cellOpt = Option.from(editor.dom.getParent(editor.selection.getStart(), 'th,td'));\\n          targets = cellOpt.bind(function (cellDom) {\\n            var cell = Element.fromDom(cellDom);\\n            var table = TableLookup.table(cell);\\n            return table.map(function (table) {\\n              return TableTargets.forMenu(selections, table, cell);\\n            });\\n          });\\n          setDisabledCtrls();\\n        });\\n      });\\n      var generateTableGrid = function () {\\n        var html = '';\\n        html = '<table role=\\\"grid\\\" class=\\\"mce-grid mce-grid-border\\\" aria-readonly=\\\"true\\\">';\\n        for (var y = 0; y < 10; y++) {\\n          html += '<tr>';\\n          for (var x = 0; x < 10; x++) {\\n            html += '<td role=\\\"gridcell\\\" tabindex=\\\"-1\\\"><a id=\\\"mcegrid' + (y * 10 + x) + '\\\" href=\\\"#\\\" ' + 'data-mce-x=\\\"' + x + '\\\" data-mce-y=\\\"' + y + '\\\"></a></td>';\\n          }\\n          html += '</tr>';\\n        }\\n        html += '</table>';\\n        html += '<div class=\\\"mce-text-center\\\" role=\\\"presentation\\\">1 x 1</div>';\\n        return html;\\n      };\\n      var selectGrid = function (editor, tx, ty, control) {\\n        var table = control.getEl().getElementsByTagName('table')[0];\\n        var x, y, focusCell, cell, active;\\n        var rtl = control.isRtl() || control.parent().rel === 'tl-tr';\\n        table.nextSibling.innerHTML = tx + 1 + ' x ' + (ty + 1);\\n        if (rtl) {\\n          tx = 9 - tx;\\n        }\\n        for (y = 0; y < 10; y++) {\\n          for (x = 0; x < 10; x++) {\\n            cell = table.rows[y].childNodes[x].firstChild;\\n            active = (rtl ? x >= tx : x <= tx) && y <= ty;\\n            editor.dom.toggleClass(cell, 'mce-active', active);\\n            if (active) {\\n              focusCell = cell;\\n            }\\n          }\\n        }\\n        return focusCell.parentNode;\\n      };\\n      var insertTable = hasTableGrid(editor) === false ? {\\n        text: 'Table',\\n        icon: 'table',\\n        context: 'table',\\n        onclick: cmd('mceInsertTable')\\n      } : {\\n        text: 'Table',\\n        icon: 'table',\\n        context: 'table',\\n        ariaHideMenu: true,\\n        onclick: function (e) {\\n          if (e.aria) {\\n            this.parent().hideAll();\\n            e.stopImmediatePropagation();\\n            editor.execCommand('mceInsertTable');\\n          }\\n        },\\n        onshow: function () {\\n          selectGrid(editor, 0, 0, this.menu.items()[0]);\\n        },\\n        onhide: function () {\\n          var elements = this.menu.items()[0].getEl().getElementsByTagName('a');\\n          editor.dom.removeClass(elements, 'mce-active');\\n          editor.dom.addClass(elements[0], 'mce-active');\\n        },\\n        menu: [{\\n            type: 'container',\\n            html: generateTableGrid(),\\n            onPostRender: function () {\\n              this.lastX = this.lastY = 0;\\n            },\\n            onmousemove: function (e) {\\n              var target = e.target;\\n              var x, y;\\n              if (target.tagName.toUpperCase() === 'A') {\\n                x = parseInt(target.getAttribute('data-mce-x'), 10);\\n                y = parseInt(target.getAttribute('data-mce-y'), 10);\\n                if (this.isRtl() || this.parent().rel === 'tl-tr') {\\n                  x = 9 - x;\\n                }\\n                if (x !== this.lastX || y !== this.lastY) {\\n                  selectGrid(editor, x, y, e.control);\\n                  this.lastX = x;\\n                  this.lastY = y;\\n                }\\n              }\\n            },\\n            onclick: function (e) {\\n              var self = this;\\n              if (e.target.tagName.toUpperCase() === 'A') {\\n                e.preventDefault();\\n                e.stopPropagation();\\n                self.parent().cancel();\\n                editor.undoManager.transact(function () {\\n                  InsertTable.insert(editor, self.lastX + 1, self.lastY + 1);\\n                });\\n                editor.addVisual();\\n              }\\n            }\\n          }]\\n      };\\n      function cmd(command) {\\n        return function () {\\n          editor.execCommand(command);\\n        };\\n      }\\n      var tableProperties = {\\n        text: 'Table properties',\\n        context: 'table',\\n        onPostRender: pushTable,\\n        onclick: cmd('mceTableProps')\\n      };\\n      var deleteTable = {\\n        text: 'Delete table',\\n        context: 'table',\\n        onPostRender: pushTable,\\n        cmd: 'mceTableDelete'\\n      };\\n      var row = {\\n        text: 'Row',\\n        context: 'table',\\n        menu: [\\n          {\\n            text: 'Insert row before',\\n            onclick: cmd('mceTableInsertRowBefore'),\\n            onPostRender: pushCell\\n          },\\n          {\\n            text: 'Insert row after',\\n            onclick: cmd('mceTableInsertRowAfter'),\\n            onPostRender: pushCell\\n          },\\n          {\\n            text: 'Delete row',\\n            onclick: cmd('mceTableDeleteRow'),\\n            onPostRender: pushCell\\n          },\\n          {\\n            text: 'Row properties',\\n            onclick: cmd('mceTableRowProps'),\\n            onPostRender: pushCell\\n          },\\n          { text: '-' },\\n          {\\n            text: 'Cut row',\\n            onclick: cmd('mceTableCutRow'),\\n            onPostRender: pushCell\\n          },\\n          {\\n            text: 'Copy row',\\n            onclick: cmd('mceTableCopyRow'),\\n            onPostRender: pushCell\\n          },\\n          {\\n            text: 'Paste row before',\\n            onclick: cmd('mceTablePasteRowBefore'),\\n            onPostRender: pushCell\\n          },\\n          {\\n            text: 'Paste row after',\\n            onclick: cmd('mceTablePasteRowAfter'),\\n            onPostRender: pushCell\\n          }\\n        ]\\n      };\\n      var column = {\\n        text: 'Column',\\n        context: 'table',\\n        menu: [\\n          {\\n            text: 'Insert column before',\\n            onclick: cmd('mceTableInsertColBefore'),\\n            onPostRender: pushCell\\n          },\\n          {\\n            text: 'Insert column after',\\n            onclick: cmd('mceTableInsertColAfter'),\\n            onPostRender: pushCell\\n          },\\n          {\\n            text: 'Delete column',\\n            onclick: cmd('mceTableDeleteCol'),\\n            onPostRender: pushCell\\n          }\\n        ]\\n      };\\n      var cell = {\\n        separator: 'before',\\n        text: 'Cell',\\n        context: 'table',\\n        menu: [\\n          {\\n            text: 'Cell properties',\\n            onclick: cmd('mceTableCellProps'),\\n            onPostRender: pushCell\\n          },\\n          {\\n            text: 'Merge cells',\\n            onclick: cmd('mceTableMergeCells'),\\n            onPostRender: pushMerge\\n          },\\n          {\\n            text: 'Split cell',\\n            onclick: cmd('mceTableSplitCells'),\\n            onPostRender: pushUnmerge\\n          }\\n        ]\\n      };\\n      editor.addMenuItem('inserttable', insertTable);\\n      editor.addMenuItem('tableprops', tableProperties);\\n      editor.addMenuItem('deletetable', deleteTable);\\n      editor.addMenuItem('row', row);\\n      editor.addMenuItem('column', column);\\n      editor.addMenuItem('cell', cell);\\n    };\\n    var MenuItems = { addMenuItems: addMenuItems };\\n\\n    var getClipboardRows = function (clipboardRows) {\\n      return clipboardRows.get().fold(function () {\\n        return;\\n      }, function (rows) {\\n        return map(rows, function (row) {\\n          return row.dom();\\n        });\\n      });\\n    };\\n    var setClipboardRows = function (rows, clipboardRows) {\\n      var sugarRows = map(rows, Element.fromDom);\\n      clipboardRows.set(Option.from(sugarRows));\\n    };\\n    var getApi = function (editor, clipboardRows) {\\n      return {\\n        insertTable: function (columns, rows) {\\n          return InsertTable.insert(editor, columns, rows);\\n        },\\n        setClipboardRows: function (rows) {\\n          return setClipboardRows(rows, clipboardRows);\\n        },\\n        getClipboardRows: function () {\\n          return getClipboardRows(clipboardRows);\\n        }\\n      };\\n    };\\n\\n    function Plugin(editor) {\\n      var resizeHandler = ResizeHandler(editor);\\n      var cellSelection = CellSelection$1(editor, resizeHandler.lazyResize);\\n      var actions = TableActions(editor, resizeHandler.lazyWire);\\n      var selections = Selections(editor);\\n      var clipboardRows = Cell(Option.none());\\n      Commands.registerCommands(editor, actions, cellSelection, selections, clipboardRows);\\n      Clipboard.registerEvents(editor, selections, actions, cellSelection);\\n      MenuItems.addMenuItems(editor, selections);\\n      Buttons.addButtons(editor);\\n      Buttons.addToolbars(editor);\\n      editor.on('PreInit', function () {\\n        editor.serializer.addTempAttr(Ephemera.firstSelected());\\n        editor.serializer.addTempAttr(Ephemera.lastSelected());\\n      });\\n      if (hasTabNavigation(editor)) {\\n        editor.on('keydown', function (e) {\\n          TabContext.handle(e, editor, actions, resizeHandler.lazyWire);\\n        });\\n      }\\n      editor.on('remove', function () {\\n        resizeHandler.destroy();\\n        cellSelection.destroy();\\n      });\\n      return getApi(editor, clipboardRows);\\n    }\\n    global.add('table', Plugin);\\n    function Plugin$1 () {\\n    }\\n\\n    return Plugin$1;\\n\\n}(window));\\n})();\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// /home/angular/project/~/raw-loader!/home/angular/project/~/tinymce/plugins/table/plugin.js\n// module id = 774\n// module chunks = 1","module.exports = \"(function () {\\nvar modern = (function (domGlobals) {\\n    'use strict';\\n\\n    var global = tinymce.util.Tools.resolve('tinymce.ThemeManager');\\n\\n    var global$1 = tinymce.util.Tools.resolve('tinymce.EditorManager');\\n\\n    var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\\n\\n    var isBrandingEnabled = function (editor) {\\n      return editor.getParam('branding', true, 'boolean');\\n    };\\n    var hasMenubar = function (editor) {\\n      return getMenubar(editor) !== false;\\n    };\\n    var getMenubar = function (editor) {\\n      return editor.getParam('menubar');\\n    };\\n    var hasStatusbar = function (editor) {\\n      return editor.getParam('statusbar', true, 'boolean');\\n    };\\n    var getToolbarSize = function (editor) {\\n      return editor.getParam('toolbar_items_size');\\n    };\\n    var isReadOnly = function (editor) {\\n      return editor.getParam('readonly', false, 'boolean');\\n    };\\n    var getFixedToolbarContainer = function (editor) {\\n      return editor.getParam('fixed_toolbar_container');\\n    };\\n    var getInlineToolbarPositionHandler = function (editor) {\\n      return editor.getParam('inline_toolbar_position_handler');\\n    };\\n    var getMenu = function (editor) {\\n      return editor.getParam('menu');\\n    };\\n    var getRemovedMenuItems = function (editor) {\\n      return editor.getParam('removed_menuitems', '');\\n    };\\n    var getMinWidth = function (editor) {\\n      return editor.getParam('min_width', 100, 'number');\\n    };\\n    var getMinHeight = function (editor) {\\n      return editor.getParam('min_height', 100, 'number');\\n    };\\n    var getMaxWidth = function (editor) {\\n      return editor.getParam('max_width', 65535, 'number');\\n    };\\n    var getMaxHeight = function (editor) {\\n      return editor.getParam('max_height', 65535, 'number');\\n    };\\n    var isSkinDisabled = function (editor) {\\n      return editor.settings.skin === false;\\n    };\\n    var isInline = function (editor) {\\n      return editor.getParam('inline', false, 'boolean');\\n    };\\n    var getResize = function (editor) {\\n      var resize = editor.getParam('resize', 'vertical');\\n      if (resize === false) {\\n        return 'none';\\n      } else if (resize === 'both') {\\n        return 'both';\\n      } else {\\n        return 'vertical';\\n      }\\n    };\\n    var getSkinUrl = function (editor) {\\n      var settings = editor.settings;\\n      var skin = settings.skin;\\n      var skinUrl = settings.skin_url;\\n      if (skin !== false) {\\n        var skinName = skin ? skin : 'lightgray';\\n        if (skinUrl) {\\n          skinUrl = editor.documentBaseURI.toAbsolute(skinUrl);\\n        } else {\\n          skinUrl = global$1.baseURL + '/skins/' + skinName;\\n        }\\n      }\\n      return skinUrl;\\n    };\\n    var getIndexedToolbars = function (settings, defaultToolbar) {\\n      var toolbars = [];\\n      for (var i = 1; i < 10; i++) {\\n        var toolbar = settings['toolbar' + i];\\n        if (!toolbar) {\\n          break;\\n        }\\n        toolbars.push(toolbar);\\n      }\\n      var mainToolbar = settings.toolbar ? [settings.toolbar] : [defaultToolbar];\\n      return toolbars.length > 0 ? toolbars : mainToolbar;\\n    };\\n    var getToolbars = function (editor) {\\n      var toolbar = editor.getParam('toolbar');\\n      var defaultToolbar = 'undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image';\\n      if (toolbar === false) {\\n        return [];\\n      } else if (global$2.isArray(toolbar)) {\\n        return global$2.grep(toolbar, function (toolbar) {\\n          return toolbar.length > 0;\\n        });\\n      } else {\\n        return getIndexedToolbars(editor.settings, defaultToolbar);\\n      }\\n    };\\n\\n    var global$3 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\\n\\n    var global$4 = tinymce.util.Tools.resolve('tinymce.ui.Factory');\\n\\n    var global$5 = tinymce.util.Tools.resolve('tinymce.util.I18n');\\n\\n    var fireSkinLoaded = function (editor) {\\n      return editor.fire('SkinLoaded');\\n    };\\n    var fireResizeEditor = function (editor) {\\n      return editor.fire('ResizeEditor');\\n    };\\n    var fireBeforeRenderUI = function (editor) {\\n      return editor.fire('BeforeRenderUI');\\n    };\\n    var Events = {\\n      fireSkinLoaded: fireSkinLoaded,\\n      fireResizeEditor: fireResizeEditor,\\n      fireBeforeRenderUI: fireBeforeRenderUI\\n    };\\n\\n    var focus = function (panel, type) {\\n      return function () {\\n        var item = panel.find(type)[0];\\n        if (item) {\\n          item.focus(true);\\n        }\\n      };\\n    };\\n    var addKeys = function (editor, panel) {\\n      editor.shortcuts.add('Alt+F9', '', focus(panel, 'menubar'));\\n      editor.shortcuts.add('Alt+F10,F10', '', focus(panel, 'toolbar'));\\n      editor.shortcuts.add('Alt+F11', '', focus(panel, 'elementpath'));\\n      panel.on('cancel', function () {\\n        editor.focus();\\n      });\\n    };\\n    var A11y = { addKeys: addKeys };\\n\\n    var global$6 = tinymce.util.Tools.resolve('tinymce.geom.Rect');\\n\\n    var global$7 = tinymce.util.Tools.resolve('tinymce.util.Delay');\\n\\n    var noop = function () {\\n    };\\n    var constant = function (value) {\\n      return function () {\\n        return value;\\n      };\\n    };\\n    var never = constant(false);\\n    var always = constant(true);\\n\\n    var none = function () {\\n      return NONE;\\n    };\\n    var NONE = function () {\\n      var eq = function (o) {\\n        return o.isNone();\\n      };\\n      var call = function (thunk) {\\n        return thunk();\\n      };\\n      var id = function (n) {\\n        return n;\\n      };\\n      var me = {\\n        fold: function (n, s) {\\n          return n();\\n        },\\n        is: never,\\n        isSome: never,\\n        isNone: always,\\n        getOr: id,\\n        getOrThunk: call,\\n        getOrDie: function (msg) {\\n          throw new Error(msg || 'error: getOrDie called on none.');\\n        },\\n        getOrNull: constant(null),\\n        getOrUndefined: constant(undefined),\\n        or: id,\\n        orThunk: call,\\n        map: none,\\n        each: noop,\\n        bind: none,\\n        exists: never,\\n        forall: always,\\n        filter: none,\\n        equals: eq,\\n        equals_: eq,\\n        toArray: function () {\\n          return [];\\n        },\\n        toString: constant('none()')\\n      };\\n      if (Object.freeze) {\\n        Object.freeze(me);\\n      }\\n      return me;\\n    }();\\n    var some = function (a) {\\n      var constant_a = constant(a);\\n      var self = function () {\\n        return me;\\n      };\\n      var bind = function (f) {\\n        return f(a);\\n      };\\n      var me = {\\n        fold: function (n, s) {\\n          return s(a);\\n        },\\n        is: function (v) {\\n          return a === v;\\n        },\\n        isSome: always,\\n        isNone: never,\\n        getOr: constant_a,\\n        getOrThunk: constant_a,\\n        getOrDie: constant_a,\\n        getOrNull: constant_a,\\n        getOrUndefined: constant_a,\\n        or: self,\\n        orThunk: self,\\n        map: function (f) {\\n          return some(f(a));\\n        },\\n        each: function (f) {\\n          f(a);\\n        },\\n        bind: bind,\\n        exists: bind,\\n        forall: bind,\\n        filter: function (f) {\\n          return f(a) ? me : NONE;\\n        },\\n        toArray: function () {\\n          return [a];\\n        },\\n        toString: function () {\\n          return 'some(' + a + ')';\\n        },\\n        equals: function (o) {\\n          return o.is(a);\\n        },\\n        equals_: function (o, elementEq) {\\n          return o.fold(never, function (b) {\\n            return elementEq(a, b);\\n          });\\n        }\\n      };\\n      return me;\\n    };\\n    var from = function (value) {\\n      return value === null || value === undefined ? NONE : some(value);\\n    };\\n    var Option = {\\n      some: some,\\n      none: none,\\n      from: from\\n    };\\n\\n    var getUiContainerDelta = function (ctrl) {\\n      var uiContainer = getUiContainer(ctrl);\\n      if (uiContainer && global$3.DOM.getStyle(uiContainer, 'position', true) !== 'static') {\\n        var containerPos = global$3.DOM.getPos(uiContainer);\\n        var dx = uiContainer.scrollLeft - containerPos.x;\\n        var dy = uiContainer.scrollTop - containerPos.y;\\n        return Option.some({\\n          x: dx,\\n          y: dy\\n        });\\n      } else {\\n        return Option.none();\\n      }\\n    };\\n    var setUiContainer = function (editor, ctrl) {\\n      var uiContainer = global$3.DOM.select(editor.settings.ui_container)[0];\\n      ctrl.getRoot().uiContainer = uiContainer;\\n    };\\n    var getUiContainer = function (ctrl) {\\n      return ctrl ? ctrl.getRoot().uiContainer : null;\\n    };\\n    var inheritUiContainer = function (fromCtrl, toCtrl) {\\n      return toCtrl.uiContainer = getUiContainer(fromCtrl);\\n    };\\n    var UiContainer = {\\n      getUiContainerDelta: getUiContainerDelta,\\n      setUiContainer: setUiContainer,\\n      getUiContainer: getUiContainer,\\n      inheritUiContainer: inheritUiContainer\\n    };\\n\\n    var createToolbar = function (editor, items, size) {\\n      var toolbarItems = [];\\n      var buttonGroup;\\n      if (!items) {\\n        return;\\n      }\\n      global$2.each(items.split(/[ ,]/), function (item) {\\n        var itemName;\\n        var bindSelectorChanged = function () {\\n          var selection = editor.selection;\\n          if (item.settings.stateSelector) {\\n            selection.selectorChanged(item.settings.stateSelector, function (state) {\\n              item.active(state);\\n            }, true);\\n          }\\n          if (item.settings.disabledStateSelector) {\\n            selection.selectorChanged(item.settings.disabledStateSelector, function (state) {\\n              item.disabled(state);\\n            });\\n          }\\n        };\\n        if (item === '|') {\\n          buttonGroup = null;\\n        } else {\\n          if (!buttonGroup) {\\n            buttonGroup = {\\n              type: 'buttongroup',\\n              items: []\\n            };\\n            toolbarItems.push(buttonGroup);\\n          }\\n          if (editor.buttons[item]) {\\n            itemName = item;\\n            item = editor.buttons[itemName];\\n            if (typeof item === 'function') {\\n              item = item();\\n            }\\n            item.type = item.type || 'button';\\n            item.size = size;\\n            item = global$4.create(item);\\n            buttonGroup.items.push(item);\\n            if (editor.initialized) {\\n              bindSelectorChanged();\\n            } else {\\n              editor.on('init', bindSelectorChanged);\\n            }\\n          }\\n        }\\n      });\\n      return {\\n        type: 'toolbar',\\n        layout: 'flow',\\n        items: toolbarItems\\n      };\\n    };\\n    var createToolbars = function (editor, size) {\\n      var toolbars = [];\\n      var addToolbar = function (items) {\\n        if (items) {\\n          toolbars.push(createToolbar(editor, items, size));\\n        }\\n      };\\n      global$2.each(getToolbars(editor), function (toolbar) {\\n        addToolbar(toolbar);\\n      });\\n      if (toolbars.length) {\\n        return {\\n          type: 'panel',\\n          layout: 'stack',\\n          classes: 'toolbar-grp',\\n          ariaRoot: true,\\n          ariaRemember: true,\\n          items: toolbars\\n        };\\n      }\\n    };\\n    var Toolbar = {\\n      createToolbar: createToolbar,\\n      createToolbars: createToolbars\\n    };\\n\\n    var DOM = global$3.DOM;\\n    var toClientRect = function (geomRect) {\\n      return {\\n        left: geomRect.x,\\n        top: geomRect.y,\\n        width: geomRect.w,\\n        height: geomRect.h,\\n        right: geomRect.x + geomRect.w,\\n        bottom: geomRect.y + geomRect.h\\n      };\\n    };\\n    var hideAllFloatingPanels = function (editor) {\\n      global$2.each(editor.contextToolbars, function (toolbar) {\\n        if (toolbar.panel) {\\n          toolbar.panel.hide();\\n        }\\n      });\\n    };\\n    var movePanelTo = function (panel, pos) {\\n      panel.moveTo(pos.left, pos.top);\\n    };\\n    var togglePositionClass = function (panel, relPos, predicate) {\\n      relPos = relPos ? relPos.substr(0, 2) : '';\\n      global$2.each({\\n        t: 'down',\\n        b: 'up'\\n      }, function (cls, pos) {\\n        panel.classes.toggle('arrow-' + cls, predicate(pos, relPos.substr(0, 1)));\\n      });\\n      global$2.each({\\n        l: 'left',\\n        r: 'right'\\n      }, function (cls, pos) {\\n        panel.classes.toggle('arrow-' + cls, predicate(pos, relPos.substr(1, 1)));\\n      });\\n    };\\n    var userConstrain = function (handler, x, y, elementRect, contentAreaRect, panelRect) {\\n      panelRect = toClientRect({\\n        x: x,\\n        y: y,\\n        w: panelRect.w,\\n        h: panelRect.h\\n      });\\n      if (handler) {\\n        panelRect = handler({\\n          elementRect: toClientRect(elementRect),\\n          contentAreaRect: toClientRect(contentAreaRect),\\n          panelRect: panelRect\\n        });\\n      }\\n      return panelRect;\\n    };\\n    var addContextualToolbars = function (editor) {\\n      var scrollContainer;\\n      var getContextToolbars = function () {\\n        return editor.contextToolbars || [];\\n      };\\n      var getElementRect = function (elm) {\\n        var pos, targetRect, root;\\n        pos = DOM.getPos(editor.getContentAreaContainer());\\n        targetRect = editor.dom.getRect(elm);\\n        root = editor.dom.getRoot();\\n        if (root.nodeName === 'BODY') {\\n          targetRect.x -= root.ownerDocument.documentElement.scrollLeft || root.scrollLeft;\\n          targetRect.y -= root.ownerDocument.documentElement.scrollTop || root.scrollTop;\\n        }\\n        targetRect.x += pos.x;\\n        targetRect.y += pos.y;\\n        return targetRect;\\n      };\\n      var reposition = function (match, shouldShow) {\\n        var relPos, panelRect, elementRect, contentAreaRect, panel, relRect, testPositions, smallElementWidthThreshold;\\n        var handler = getInlineToolbarPositionHandler(editor);\\n        if (editor.removed) {\\n          return;\\n        }\\n        if (!match || !match.toolbar.panel) {\\n          hideAllFloatingPanels(editor);\\n          return;\\n        }\\n        testPositions = [\\n          'bc-tc',\\n          'tc-bc',\\n          'tl-bl',\\n          'bl-tl',\\n          'tr-br',\\n          'br-tr'\\n        ];\\n        panel = match.toolbar.panel;\\n        if (shouldShow) {\\n          panel.show();\\n        }\\n        elementRect = getElementRect(match.element);\\n        panelRect = DOM.getRect(panel.getEl());\\n        contentAreaRect = DOM.getRect(editor.getContentAreaContainer() || editor.getBody());\\n        var delta = UiContainer.getUiContainerDelta(panel).getOr({\\n          x: 0,\\n          y: 0\\n        });\\n        elementRect.x += delta.x;\\n        elementRect.y += delta.y;\\n        panelRect.x += delta.x;\\n        panelRect.y += delta.y;\\n        contentAreaRect.x += delta.x;\\n        contentAreaRect.y += delta.y;\\n        smallElementWidthThreshold = 25;\\n        if (DOM.getStyle(match.element, 'display', true) !== 'inline') {\\n          var clientRect = match.element.getBoundingClientRect();\\n          elementRect.w = clientRect.width;\\n          elementRect.h = clientRect.height;\\n        }\\n        if (!editor.inline) {\\n          contentAreaRect.w = editor.getDoc().documentElement.offsetWidth;\\n        }\\n        if (editor.selection.controlSelection.isResizable(match.element) && elementRect.w < smallElementWidthThreshold) {\\n          elementRect = global$6.inflate(elementRect, 0, 8);\\n        }\\n        relPos = global$6.findBestRelativePosition(panelRect, elementRect, contentAreaRect, testPositions);\\n        elementRect = global$6.clamp(elementRect, contentAreaRect);\\n        if (relPos) {\\n          relRect = global$6.relativePosition(panelRect, elementRect, relPos);\\n          movePanelTo(panel, userConstrain(handler, relRect.x, relRect.y, elementRect, contentAreaRect, panelRect));\\n        } else {\\n          contentAreaRect.h += panelRect.h;\\n          elementRect = global$6.intersect(contentAreaRect, elementRect);\\n          if (elementRect) {\\n            relPos = global$6.findBestRelativePosition(panelRect, elementRect, contentAreaRect, [\\n              'bc-tc',\\n              'bl-tl',\\n              'br-tr'\\n            ]);\\n            if (relPos) {\\n              relRect = global$6.relativePosition(panelRect, elementRect, relPos);\\n              movePanelTo(panel, userConstrain(handler, relRect.x, relRect.y, elementRect, contentAreaRect, panelRect));\\n            } else {\\n              movePanelTo(panel, userConstrain(handler, elementRect.x, elementRect.y, elementRect, contentAreaRect, panelRect));\\n            }\\n          } else {\\n            panel.hide();\\n          }\\n        }\\n        togglePositionClass(panel, relPos, function (pos1, pos2) {\\n          return pos1 === pos2;\\n        });\\n      };\\n      var repositionHandler = function (show) {\\n        return function () {\\n          var execute = function () {\\n            if (editor.selection) {\\n              reposition(findFrontMostMatch(editor.selection.getNode()), show);\\n            }\\n          };\\n          global$7.requestAnimationFrame(execute);\\n        };\\n      };\\n      var bindScrollEvent = function (panel) {\\n        if (!scrollContainer) {\\n          var reposition_1 = repositionHandler(true);\\n          var uiContainer_1 = UiContainer.getUiContainer(panel);\\n          scrollContainer = editor.selection.getScrollContainer() || editor.getWin();\\n          DOM.bind(scrollContainer, 'scroll', reposition_1);\\n          DOM.bind(uiContainer_1, 'scroll', reposition_1);\\n          editor.on('remove', function () {\\n            DOM.unbind(scrollContainer, 'scroll', reposition_1);\\n            DOM.unbind(uiContainer_1, 'scroll', reposition_1);\\n          });\\n        }\\n      };\\n      var showContextToolbar = function (match) {\\n        var panel;\\n        if (match.toolbar.panel) {\\n          match.toolbar.panel.show();\\n          reposition(match);\\n          return;\\n        }\\n        panel = global$4.create({\\n          type: 'floatpanel',\\n          role: 'dialog',\\n          classes: 'tinymce tinymce-inline arrow',\\n          ariaLabel: 'Inline toolbar',\\n          layout: 'flex',\\n          direction: 'column',\\n          align: 'stretch',\\n          autohide: false,\\n          autofix: true,\\n          fixed: true,\\n          border: 1,\\n          items: Toolbar.createToolbar(editor, match.toolbar.items),\\n          oncancel: function () {\\n            editor.focus();\\n          }\\n        });\\n        UiContainer.setUiContainer(editor, panel);\\n        bindScrollEvent(panel);\\n        match.toolbar.panel = panel;\\n        panel.renderTo().reflow();\\n        reposition(match);\\n      };\\n      var hideAllContextToolbars = function () {\\n        global$2.each(getContextToolbars(), function (toolbar) {\\n          if (toolbar.panel) {\\n            toolbar.panel.hide();\\n          }\\n        });\\n      };\\n      var findFrontMostMatch = function (targetElm) {\\n        var i, y, parentsAndSelf;\\n        var toolbars = getContextToolbars();\\n        parentsAndSelf = editor.$(targetElm).parents().add(targetElm);\\n        for (i = parentsAndSelf.length - 1; i >= 0; i--) {\\n          for (y = toolbars.length - 1; y >= 0; y--) {\\n            if (toolbars[y].predicate(parentsAndSelf[i])) {\\n              return {\\n                toolbar: toolbars[y],\\n                element: parentsAndSelf[i]\\n              };\\n            }\\n          }\\n        }\\n        return null;\\n      };\\n      editor.on('click keyup setContent ObjectResized', function (e) {\\n        if (e.type === 'setcontent' && !e.selection) {\\n          return;\\n        }\\n        global$7.setEditorTimeout(editor, function () {\\n          var match;\\n          match = findFrontMostMatch(editor.selection.getNode());\\n          if (match) {\\n            hideAllContextToolbars();\\n            showContextToolbar(match);\\n          } else {\\n            hideAllContextToolbars();\\n          }\\n        });\\n      });\\n      editor.on('blur hide contextmenu', hideAllContextToolbars);\\n      editor.on('ObjectResizeStart', function () {\\n        var match = findFrontMostMatch(editor.selection.getNode());\\n        if (match && match.toolbar.panel) {\\n          match.toolbar.panel.hide();\\n        }\\n      });\\n      editor.on('ResizeEditor ResizeWindow', repositionHandler(true));\\n      editor.on('nodeChange', repositionHandler(false));\\n      editor.on('remove', function () {\\n        global$2.each(getContextToolbars(), function (toolbar) {\\n          if (toolbar.panel) {\\n            toolbar.panel.remove();\\n          }\\n        });\\n        editor.contextToolbars = {};\\n      });\\n      editor.shortcuts.add('ctrl+F9', '', function () {\\n        var match = findFrontMostMatch(editor.selection.getNode());\\n        if (match && match.toolbar.panel) {\\n          match.toolbar.panel.items()[0].focus();\\n        }\\n      });\\n    };\\n    var ContextToolbars = { addContextualToolbars: addContextualToolbars };\\n\\n    var typeOf = function (x) {\\n      if (x === null) {\\n        return 'null';\\n      }\\n      var t = typeof x;\\n      if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\\n        return 'array';\\n      }\\n      if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\\n        return 'string';\\n      }\\n      return t;\\n    };\\n    var isType = function (type) {\\n      return function (value) {\\n        return typeOf(value) === type;\\n      };\\n    };\\n    var isArray = isType('array');\\n    var isFunction = isType('function');\\n    var isNumber = isType('number');\\n\\n    var nativeSlice = Array.prototype.slice;\\n    var nativeIndexOf = Array.prototype.indexOf;\\n    var nativePush = Array.prototype.push;\\n    var rawIndexOf = function (ts, t) {\\n      return nativeIndexOf.call(ts, t);\\n    };\\n    var indexOf = function (xs, x) {\\n      var r = rawIndexOf(xs, x);\\n      return r === -1 ? Option.none() : Option.some(r);\\n    };\\n    var exists = function (xs, pred) {\\n      for (var i = 0, len = xs.length; i < len; i++) {\\n        var x = xs[i];\\n        if (pred(x, i)) {\\n          return true;\\n        }\\n      }\\n      return false;\\n    };\\n    var map = function (xs, f) {\\n      var len = xs.length;\\n      var r = new Array(len);\\n      for (var i = 0; i < len; i++) {\\n        var x = xs[i];\\n        r[i] = f(x, i);\\n      }\\n      return r;\\n    };\\n    var each = function (xs, f) {\\n      for (var i = 0, len = xs.length; i < len; i++) {\\n        var x = xs[i];\\n        f(x, i);\\n      }\\n    };\\n    var filter = function (xs, pred) {\\n      var r = [];\\n      for (var i = 0, len = xs.length; i < len; i++) {\\n        var x = xs[i];\\n        if (pred(x, i)) {\\n          r.push(x);\\n        }\\n      }\\n      return r;\\n    };\\n    var foldl = function (xs, f, acc) {\\n      each(xs, function (x) {\\n        acc = f(acc, x);\\n      });\\n      return acc;\\n    };\\n    var find = function (xs, pred) {\\n      for (var i = 0, len = xs.length; i < len; i++) {\\n        var x = xs[i];\\n        if (pred(x, i)) {\\n          return Option.some(x);\\n        }\\n      }\\n      return Option.none();\\n    };\\n    var findIndex = function (xs, pred) {\\n      for (var i = 0, len = xs.length; i < len; i++) {\\n        var x = xs[i];\\n        if (pred(x, i)) {\\n          return Option.some(i);\\n        }\\n      }\\n      return Option.none();\\n    };\\n    var flatten = function (xs) {\\n      var r = [];\\n      for (var i = 0, len = xs.length; i < len; ++i) {\\n        if (!isArray(xs[i])) {\\n          throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\\n        }\\n        nativePush.apply(r, xs[i]);\\n      }\\n      return r;\\n    };\\n    var from$1 = isFunction(Array.from) ? Array.from : function (x) {\\n      return nativeSlice.call(x);\\n    };\\n\\n    var defaultMenus = {\\n      file: {\\n        title: 'File',\\n        items: 'newdocument restoredraft | preview | print'\\n      },\\n      edit: {\\n        title: 'Edit',\\n        items: 'undo redo | cut copy paste pastetext | selectall'\\n      },\\n      view: {\\n        title: 'View',\\n        items: 'code | visualaid visualchars visualblocks | spellchecker | preview fullscreen'\\n      },\\n      insert: {\\n        title: 'Insert',\\n        items: 'image link media template codesample inserttable | charmap hr | pagebreak nonbreaking anchor toc | insertdatetime'\\n      },\\n      format: {\\n        title: 'Format',\\n        items: 'bold italic underline strikethrough superscript subscript codeformat | blockformats align | removeformat'\\n      },\\n      tools: {\\n        title: 'Tools',\\n        items: 'spellchecker spellcheckerlanguage | a11ycheck code'\\n      },\\n      table: { title: 'Table' },\\n      help: { title: 'Help' }\\n    };\\n    var delimiterMenuNamePair = function () {\\n      return {\\n        name: '|',\\n        item: { text: '|' }\\n      };\\n    };\\n    var createMenuNameItemPair = function (name, item) {\\n      var menuItem = item ? {\\n        name: name,\\n        item: item\\n      } : null;\\n      return name === '|' ? delimiterMenuNamePair() : menuItem;\\n    };\\n    var hasItemName = function (namedMenuItems, name) {\\n      return findIndex(namedMenuItems, function (namedMenuItem) {\\n        return namedMenuItem.name === name;\\n      }).isSome();\\n    };\\n    var isSeparator = function (namedMenuItem) {\\n      return namedMenuItem && namedMenuItem.item.text === '|';\\n    };\\n    var cleanupMenu = function (namedMenuItems, removedMenuItems) {\\n      var menuItemsPass1 = filter(namedMenuItems, function (namedMenuItem) {\\n        return removedMenuItems.hasOwnProperty(namedMenuItem.name) === false;\\n      });\\n      var menuItemsPass2 = filter(menuItemsPass1, function (namedMenuItem, i) {\\n        return !isSeparator(namedMenuItem) || !isSeparator(menuItemsPass1[i - 1]);\\n      });\\n      return filter(menuItemsPass2, function (namedMenuItem, i) {\\n        return !isSeparator(namedMenuItem) || i > 0 && i < menuItemsPass2.length - 1;\\n      });\\n    };\\n    var createMenu = function (editorMenuItems, menus, removedMenuItems, context) {\\n      var menuButton, menu, namedMenuItems, isUserDefined;\\n      if (menus) {\\n        menu = menus[context];\\n        isUserDefined = true;\\n      } else {\\n        menu = defaultMenus[context];\\n      }\\n      if (menu) {\\n        menuButton = { text: menu.title };\\n        namedMenuItems = [];\\n        global$2.each((menu.items || '').split(/[ ,]/), function (name) {\\n          var namedMenuItem = createMenuNameItemPair(name, editorMenuItems[name]);\\n          if (namedMenuItem) {\\n            namedMenuItems.push(namedMenuItem);\\n          }\\n        });\\n        if (!isUserDefined) {\\n          global$2.each(editorMenuItems, function (item, name) {\\n            if (item.context === context && !hasItemName(namedMenuItems, name)) {\\n              if (item.separator === 'before') {\\n                namedMenuItems.push(delimiterMenuNamePair());\\n              }\\n              if (item.prependToContext) {\\n                namedMenuItems.unshift(createMenuNameItemPair(name, item));\\n              } else {\\n                namedMenuItems.push(createMenuNameItemPair(name, item));\\n              }\\n              if (item.separator === 'after') {\\n                namedMenuItems.push(delimiterMenuNamePair());\\n              }\\n            }\\n          });\\n        }\\n        menuButton.menu = map(cleanupMenu(namedMenuItems, removedMenuItems), function (menuItem) {\\n          return menuItem.item;\\n        });\\n        if (!menuButton.menu.length) {\\n          return null;\\n        }\\n      }\\n      return menuButton;\\n    };\\n    var getDefaultMenubar = function (editor) {\\n      var name;\\n      var defaultMenuBar = [];\\n      var menu = getMenu(editor);\\n      if (menu) {\\n        for (name in menu) {\\n          defaultMenuBar.push(name);\\n        }\\n      } else {\\n        for (name in defaultMenus) {\\n          defaultMenuBar.push(name);\\n        }\\n      }\\n      return defaultMenuBar;\\n    };\\n    var createMenuButtons = function (editor) {\\n      var menuButtons = [];\\n      var defaultMenuBar = getDefaultMenubar(editor);\\n      var removedMenuItems = global$2.makeMap(getRemovedMenuItems(editor).split(/[ ,]/));\\n      var menubar = getMenubar(editor);\\n      var enabledMenuNames = typeof menubar === 'string' ? menubar.split(/[ ,]/) : defaultMenuBar;\\n      for (var i = 0; i < enabledMenuNames.length; i++) {\\n        var menuItems = enabledMenuNames[i];\\n        var menu = createMenu(editor.menuItems, getMenu(editor), removedMenuItems, menuItems);\\n        if (menu) {\\n          menuButtons.push(menu);\\n        }\\n      }\\n      return menuButtons;\\n    };\\n    var Menubar = { createMenuButtons: createMenuButtons };\\n\\n    var DOM$1 = global$3.DOM;\\n    var getSize = function (elm) {\\n      return {\\n        width: elm.clientWidth,\\n        height: elm.clientHeight\\n      };\\n    };\\n    var resizeTo = function (editor, width, height) {\\n      var containerElm, iframeElm, containerSize, iframeSize;\\n      containerElm = editor.getContainer();\\n      iframeElm = editor.getContentAreaContainer().firstChild;\\n      containerSize = getSize(containerElm);\\n      iframeSize = getSize(iframeElm);\\n      if (width !== null) {\\n        width = Math.max(getMinWidth(editor), width);\\n        width = Math.min(getMaxWidth(editor), width);\\n        DOM$1.setStyle(containerElm, 'width', width + (containerSize.width - iframeSize.width));\\n        DOM$1.setStyle(iframeElm, 'width', width);\\n      }\\n      height = Math.max(getMinHeight(editor), height);\\n      height = Math.min(getMaxHeight(editor), height);\\n      DOM$1.setStyle(iframeElm, 'height', height);\\n      Events.fireResizeEditor(editor);\\n    };\\n    var resizeBy = function (editor, dw, dh) {\\n      var elm = editor.getContentAreaContainer();\\n      resizeTo(editor, elm.clientWidth + dw, elm.clientHeight + dh);\\n    };\\n    var Resize = {\\n      resizeTo: resizeTo,\\n      resizeBy: resizeBy\\n    };\\n\\n    var global$8 = tinymce.util.Tools.resolve('tinymce.Env');\\n\\n    var api = function (elm) {\\n      return {\\n        element: function () {\\n          return elm;\\n        }\\n      };\\n    };\\n    var trigger = function (sidebar, panel, callbackName) {\\n      var callback = sidebar.settings[callbackName];\\n      if (callback) {\\n        callback(api(panel.getEl('body')));\\n      }\\n    };\\n    var hidePanels = function (name, container, sidebars) {\\n      global$2.each(sidebars, function (sidebar) {\\n        var panel = container.items().filter('#' + sidebar.name)[0];\\n        if (panel && panel.visible() && sidebar.name !== name) {\\n          trigger(sidebar, panel, 'onhide');\\n          panel.visible(false);\\n        }\\n      });\\n    };\\n    var deactivateButtons = function (toolbar) {\\n      toolbar.items().each(function (ctrl) {\\n        ctrl.active(false);\\n      });\\n    };\\n    var findSidebar = function (sidebars, name) {\\n      return global$2.grep(sidebars, function (sidebar) {\\n        return sidebar.name === name;\\n      })[0];\\n    };\\n    var showPanel = function (editor, name, sidebars) {\\n      return function (e) {\\n        var btnCtrl = e.control;\\n        var container = btnCtrl.parents().filter('panel')[0];\\n        var panel = container.find('#' + name)[0];\\n        var sidebar = findSidebar(sidebars, name);\\n        hidePanels(name, container, sidebars);\\n        deactivateButtons(btnCtrl.parent());\\n        if (panel && panel.visible()) {\\n          trigger(sidebar, panel, 'onhide');\\n          panel.hide();\\n          btnCtrl.active(false);\\n        } else {\\n          if (panel) {\\n            panel.show();\\n            trigger(sidebar, panel, 'onshow');\\n          } else {\\n            panel = global$4.create({\\n              type: 'container',\\n              name: name,\\n              layout: 'stack',\\n              classes: 'sidebar-panel',\\n              html: ''\\n            });\\n            container.prepend(panel);\\n            trigger(sidebar, panel, 'onrender');\\n            trigger(sidebar, panel, 'onshow');\\n          }\\n          btnCtrl.active(true);\\n        }\\n        Events.fireResizeEditor(editor);\\n      };\\n    };\\n    var isModernBrowser = function () {\\n      return !global$8.ie || global$8.ie >= 11;\\n    };\\n    var hasSidebar = function (editor) {\\n      return isModernBrowser() && editor.sidebars ? editor.sidebars.length > 0 : false;\\n    };\\n    var createSidebar = function (editor) {\\n      var buttons = global$2.map(editor.sidebars, function (sidebar) {\\n        var settings = sidebar.settings;\\n        return {\\n          type: 'button',\\n          icon: settings.icon,\\n          image: settings.image,\\n          tooltip: settings.tooltip,\\n          onclick: showPanel(editor, sidebar.name, editor.sidebars)\\n        };\\n      });\\n      return {\\n        type: 'panel',\\n        name: 'sidebar',\\n        layout: 'stack',\\n        classes: 'sidebar',\\n        items: [{\\n            type: 'toolbar',\\n            layout: 'stack',\\n            classes: 'sidebar-toolbar',\\n            items: buttons\\n          }]\\n      };\\n    };\\n    var Sidebar = {\\n      hasSidebar: hasSidebar,\\n      createSidebar: createSidebar\\n    };\\n\\n    var fireSkinLoaded$1 = function (editor) {\\n      var done = function () {\\n        editor._skinLoaded = true;\\n        Events.fireSkinLoaded(editor);\\n      };\\n      return function () {\\n        if (editor.initialized) {\\n          done();\\n        } else {\\n          editor.on('init', done);\\n        }\\n      };\\n    };\\n    var SkinLoaded = { fireSkinLoaded: fireSkinLoaded$1 };\\n\\n    var DOM$2 = global$3.DOM;\\n    var switchMode = function (panel) {\\n      return function (e) {\\n        panel.find('*').disabled(e.mode === 'readonly');\\n      };\\n    };\\n    var editArea = function (border) {\\n      return {\\n        type: 'panel',\\n        name: 'iframe',\\n        layout: 'stack',\\n        classes: 'edit-area',\\n        border: border,\\n        html: ''\\n      };\\n    };\\n    var editAreaContainer = function (editor) {\\n      return {\\n        type: 'panel',\\n        layout: 'stack',\\n        classes: 'edit-aria-container',\\n        border: '1 0 0 0',\\n        items: [\\n          editArea('0'),\\n          Sidebar.createSidebar(editor)\\n        ]\\n      };\\n    };\\n    var render = function (editor, theme, args) {\\n      var panel, resizeHandleCtrl, startSize;\\n      if (isSkinDisabled(editor) === false && args.skinUiCss) {\\n        DOM$2.styleSheetLoader.load(args.skinUiCss, SkinLoaded.fireSkinLoaded(editor));\\n      } else {\\n        SkinLoaded.fireSkinLoaded(editor)();\\n      }\\n      panel = theme.panel = global$4.create({\\n        type: 'panel',\\n        role: 'application',\\n        classes: 'tinymce',\\n        style: 'visibility: hidden',\\n        layout: 'stack',\\n        border: 1,\\n        items: [\\n          {\\n            type: 'container',\\n            classes: 'top-part',\\n            items: [\\n              hasMenubar(editor) === false ? null : {\\n                type: 'menubar',\\n                border: '0 0 1 0',\\n                items: Menubar.createMenuButtons(editor)\\n              },\\n              Toolbar.createToolbars(editor, getToolbarSize(editor))\\n            ]\\n          },\\n          Sidebar.hasSidebar(editor) ? editAreaContainer(editor) : editArea('1 0 0 0')\\n        ]\\n      });\\n      UiContainer.setUiContainer(editor, panel);\\n      if (getResize(editor) !== 'none') {\\n        resizeHandleCtrl = {\\n          type: 'resizehandle',\\n          direction: getResize(editor),\\n          onResizeStart: function () {\\n            var elm = editor.getContentAreaContainer().firstChild;\\n            startSize = {\\n              width: elm.clientWidth,\\n              height: elm.clientHeight\\n            };\\n          },\\n          onResize: function (e) {\\n            if (getResize(editor) === 'both') {\\n              Resize.resizeTo(editor, startSize.width + e.deltaX, startSize.height + e.deltaY);\\n            } else {\\n              Resize.resizeTo(editor, null, startSize.height + e.deltaY);\\n            }\\n          }\\n        };\\n      }\\n      if (hasStatusbar(editor)) {\\n        var linkHtml = '<a href=\\\"https://www.tiny.cloud/?utm_campaign=editor_referral&amp;utm_medium=poweredby&amp;utm_source=tinymce\\\" rel=\\\"noopener\\\" target=\\\"_blank\\\" role=\\\"presentation\\\" tabindex=\\\"-1\\\">Tiny</a>';\\n        var html = global$5.translate([\\n          'Powered by {0}',\\n          linkHtml\\n        ]);\\n        var brandingLabel = isBrandingEnabled(editor) ? {\\n          type: 'label',\\n          classes: 'branding',\\n          html: ' ' + html\\n        } : null;\\n        panel.add({\\n          type: 'panel',\\n          name: 'statusbar',\\n          classes: 'statusbar',\\n          layout: 'flow',\\n          border: '1 0 0 0',\\n          ariaRoot: true,\\n          items: [\\n            {\\n              type: 'elementpath',\\n              editor: editor\\n            },\\n            resizeHandleCtrl,\\n            brandingLabel\\n          ]\\n        });\\n      }\\n      Events.fireBeforeRenderUI(editor);\\n      editor.on('SwitchMode', switchMode(panel));\\n      panel.renderBefore(args.targetNode).reflow();\\n      if (isReadOnly(editor)) {\\n        editor.setMode('readonly');\\n      }\\n      if (args.width) {\\n        DOM$2.setStyle(panel.getEl(), 'width', args.width);\\n      }\\n      editor.on('remove', function () {\\n        panel.remove();\\n        panel = null;\\n      });\\n      A11y.addKeys(editor, panel);\\n      ContextToolbars.addContextualToolbars(editor);\\n      return {\\n        iframeContainer: panel.find('#iframe')[0].getEl(),\\n        editorContainer: panel.getEl()\\n      };\\n    };\\n    var Iframe = { render: render };\\n\\n    var global$9 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');\\n\\n    var count = 0;\\n    var funcs = {\\n      id: function () {\\n        return 'mceu_' + count++;\\n      },\\n      create: function (name, attrs, children) {\\n        var elm = domGlobals.document.createElement(name);\\n        global$3.DOM.setAttribs(elm, attrs);\\n        if (typeof children === 'string') {\\n          elm.innerHTML = children;\\n        } else {\\n          global$2.each(children, function (child) {\\n            if (child.nodeType) {\\n              elm.appendChild(child);\\n            }\\n          });\\n        }\\n        return elm;\\n      },\\n      createFragment: function (html) {\\n        return global$3.DOM.createFragment(html);\\n      },\\n      getWindowSize: function () {\\n        return global$3.DOM.getViewPort();\\n      },\\n      getSize: function (elm) {\\n        var width, height;\\n        if (elm.getBoundingClientRect) {\\n          var rect = elm.getBoundingClientRect();\\n          width = Math.max(rect.width || rect.right - rect.left, elm.offsetWidth);\\n          height = Math.max(rect.height || rect.bottom - rect.bottom, elm.offsetHeight);\\n        } else {\\n          width = elm.offsetWidth;\\n          height = elm.offsetHeight;\\n        }\\n        return {\\n          width: width,\\n          height: height\\n        };\\n      },\\n      getPos: function (elm, root) {\\n        return global$3.DOM.getPos(elm, root || funcs.getContainer());\\n      },\\n      getContainer: function () {\\n        return global$8.container ? global$8.container : domGlobals.document.body;\\n      },\\n      getViewPort: function (win) {\\n        return global$3.DOM.getViewPort(win);\\n      },\\n      get: function (id) {\\n        return domGlobals.document.getElementById(id);\\n      },\\n      addClass: function (elm, cls) {\\n        return global$3.DOM.addClass(elm, cls);\\n      },\\n      removeClass: function (elm, cls) {\\n        return global$3.DOM.removeClass(elm, cls);\\n      },\\n      hasClass: function (elm, cls) {\\n        return global$3.DOM.hasClass(elm, cls);\\n      },\\n      toggleClass: function (elm, cls, state) {\\n        return global$3.DOM.toggleClass(elm, cls, state);\\n      },\\n      css: function (elm, name, value) {\\n        return global$3.DOM.setStyle(elm, name, value);\\n      },\\n      getRuntimeStyle: function (elm, name) {\\n        return global$3.DOM.getStyle(elm, name, true);\\n      },\\n      on: function (target, name, callback, scope) {\\n        return global$3.DOM.bind(target, name, callback, scope);\\n      },\\n      off: function (target, name, callback) {\\n        return global$3.DOM.unbind(target, name, callback);\\n      },\\n      fire: function (target, name, args) {\\n        return global$3.DOM.fire(target, name, args);\\n      },\\n      innerHtml: function (elm, html) {\\n        global$3.DOM.setHTML(elm, html);\\n      }\\n    };\\n\\n    var isStatic = function (elm) {\\n      return funcs.getRuntimeStyle(elm, 'position') === 'static';\\n    };\\n    var isFixed = function (ctrl) {\\n      return ctrl.state.get('fixed');\\n    };\\n    function calculateRelativePosition(ctrl, targetElm, rel) {\\n      var ctrlElm, pos, x, y, selfW, selfH, targetW, targetH, viewport, size;\\n      viewport = getWindowViewPort();\\n      pos = funcs.getPos(targetElm, UiContainer.getUiContainer(ctrl));\\n      x = pos.x;\\n      y = pos.y;\\n      if (isFixed(ctrl) && isStatic(domGlobals.document.body)) {\\n        x -= viewport.x;\\n        y -= viewport.y;\\n      }\\n      ctrlElm = ctrl.getEl();\\n      size = funcs.getSize(ctrlElm);\\n      selfW = size.width;\\n      selfH = size.height;\\n      size = funcs.getSize(targetElm);\\n      targetW = size.width;\\n      targetH = size.height;\\n      rel = (rel || '').split('');\\n      if (rel[0] === 'b') {\\n        y += targetH;\\n      }\\n      if (rel[1] === 'r') {\\n        x += targetW;\\n      }\\n      if (rel[0] === 'c') {\\n        y += Math.round(targetH / 2);\\n      }\\n      if (rel[1] === 'c') {\\n        x += Math.round(targetW / 2);\\n      }\\n      if (rel[3] === 'b') {\\n        y -= selfH;\\n      }\\n      if (rel[4] === 'r') {\\n        x -= selfW;\\n      }\\n      if (rel[3] === 'c') {\\n        y -= Math.round(selfH / 2);\\n      }\\n      if (rel[4] === 'c') {\\n        x -= Math.round(selfW / 2);\\n      }\\n      return {\\n        x: x,\\n        y: y,\\n        w: selfW,\\n        h: selfH\\n      };\\n    }\\n    var getUiContainerViewPort = function (customUiContainer) {\\n      return {\\n        x: 0,\\n        y: 0,\\n        w: customUiContainer.scrollWidth - 1,\\n        h: customUiContainer.scrollHeight - 1\\n      };\\n    };\\n    var getWindowViewPort = function () {\\n      var win = domGlobals.window;\\n      var x = Math.max(win.pageXOffset, domGlobals.document.body.scrollLeft, domGlobals.document.documentElement.scrollLeft);\\n      var y = Math.max(win.pageYOffset, domGlobals.document.body.scrollTop, domGlobals.document.documentElement.scrollTop);\\n      var w = win.innerWidth || domGlobals.document.documentElement.clientWidth;\\n      var h = win.innerHeight || domGlobals.document.documentElement.clientHeight;\\n      return {\\n        x: x,\\n        y: y,\\n        w: w,\\n        h: h\\n      };\\n    };\\n    var getViewPortRect = function (ctrl) {\\n      var customUiContainer = UiContainer.getUiContainer(ctrl);\\n      return customUiContainer && !isFixed(ctrl) ? getUiContainerViewPort(customUiContainer) : getWindowViewPort();\\n    };\\n    var Movable = {\\n      testMoveRel: function (elm, rels) {\\n        var viewPortRect = getViewPortRect(this);\\n        for (var i = 0; i < rels.length; i++) {\\n          var pos = calculateRelativePosition(this, elm, rels[i]);\\n          if (isFixed(this)) {\\n            if (pos.x > 0 && pos.x + pos.w < viewPortRect.w && pos.y > 0 && pos.y + pos.h < viewPortRect.h) {\\n              return rels[i];\\n            }\\n          } else {\\n            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) {\\n              return rels[i];\\n            }\\n          }\\n        }\\n        return rels[0];\\n      },\\n      moveRel: function (elm, rel) {\\n        if (typeof rel !== 'string') {\\n          rel = this.testMoveRel(elm, rel);\\n        }\\n        var pos = calculateRelativePosition(this, elm, rel);\\n        return this.moveTo(pos.x, pos.y);\\n      },\\n      moveBy: function (dx, dy) {\\n        var self = this, rect = self.layoutRect();\\n        self.moveTo(rect.x + dx, rect.y + dy);\\n        return self;\\n      },\\n      moveTo: function (x, y) {\\n        var self = this;\\n        function constrain(value, max, size) {\\n          if (value < 0) {\\n            return 0;\\n          }\\n          if (value + size > max) {\\n            value = max - size;\\n            return value < 0 ? 0 : value;\\n          }\\n          return value;\\n        }\\n        if (self.settings.constrainToViewport) {\\n          var viewPortRect = getViewPortRect(this);\\n          var layoutRect = self.layoutRect();\\n          x = constrain(x, viewPortRect.w + viewPortRect.x, layoutRect.w);\\n          y = constrain(y, viewPortRect.h + viewPortRect.y, layoutRect.h);\\n        }\\n        var uiContainer = UiContainer.getUiContainer(self);\\n        if (uiContainer && isStatic(uiContainer) && !isFixed(self)) {\\n          x -= uiContainer.scrollLeft;\\n          y -= uiContainer.scrollTop;\\n        }\\n        if (uiContainer) {\\n          x += 1;\\n          y += 1;\\n        }\\n        if (self.state.get('rendered')) {\\n          self.layoutRect({\\n            x: x,\\n            y: y\\n          }).repaint();\\n        } else {\\n          self.settings.x = x;\\n          self.settings.y = y;\\n        }\\n        self.fire('move', {\\n          x: x,\\n          y: y\\n        });\\n        return self;\\n      }\\n    };\\n\\n    var global$a = tinymce.util.Tools.resolve('tinymce.util.Class');\\n\\n    var global$b = tinymce.util.Tools.resolve('tinymce.util.EventDispatcher');\\n\\n    var BoxUtils = {\\n      parseBox: function (value) {\\n        var len;\\n        var radix = 10;\\n        if (!value) {\\n          return;\\n        }\\n        if (typeof value === 'number') {\\n          value = value || 0;\\n          return {\\n            top: value,\\n            left: value,\\n            bottom: value,\\n            right: value\\n          };\\n        }\\n        value = value.split(' ');\\n        len = value.length;\\n        if (len === 1) {\\n          value[1] = value[2] = value[3] = value[0];\\n        } else if (len === 2) {\\n          value[2] = value[0];\\n          value[3] = value[1];\\n        } else if (len === 3) {\\n          value[3] = value[1];\\n        }\\n        return {\\n          top: parseInt(value[0], radix) || 0,\\n          right: parseInt(value[1], radix) || 0,\\n          bottom: parseInt(value[2], radix) || 0,\\n          left: parseInt(value[3], radix) || 0\\n        };\\n      },\\n      measureBox: function (elm, prefix) {\\n        function getStyle(name) {\\n          var defaultView = elm.ownerDocument.defaultView;\\n          if (defaultView) {\\n            var computedStyle = defaultView.getComputedStyle(elm, null);\\n            if (computedStyle) {\\n              name = name.replace(/[A-Z]/g, function (a) {\\n                return '-' + a;\\n              });\\n              return computedStyle.getPropertyValue(name);\\n            } else {\\n              return null;\\n            }\\n          }\\n          return elm.currentStyle[name];\\n        }\\n        function getSide(name) {\\n          var val = parseFloat(getStyle(name));\\n          return isNaN(val) ? 0 : val;\\n        }\\n        return {\\n          top: getSide(prefix + 'TopWidth'),\\n          right: getSide(prefix + 'RightWidth'),\\n          bottom: getSide(prefix + 'BottomWidth'),\\n          left: getSide(prefix + 'LeftWidth')\\n        };\\n      }\\n    };\\n\\n    function noop$1() {\\n    }\\n    function ClassList(onchange) {\\n      this.cls = [];\\n      this.cls._map = {};\\n      this.onchange = onchange || noop$1;\\n      this.prefix = '';\\n    }\\n    global$2.extend(ClassList.prototype, {\\n      add: function (cls) {\\n        if (cls && !this.contains(cls)) {\\n          this.cls._map[cls] = true;\\n          this.cls.push(cls);\\n          this._change();\\n        }\\n        return this;\\n      },\\n      remove: function (cls) {\\n        if (this.contains(cls)) {\\n          var i = void 0;\\n          for (i = 0; i < this.cls.length; i++) {\\n            if (this.cls[i] === cls) {\\n              break;\\n            }\\n          }\\n          this.cls.splice(i, 1);\\n          delete this.cls._map[cls];\\n          this._change();\\n        }\\n        return this;\\n      },\\n      toggle: function (cls, state) {\\n        var curState = this.contains(cls);\\n        if (curState !== state) {\\n          if (curState) {\\n            this.remove(cls);\\n          } else {\\n            this.add(cls);\\n          }\\n          this._change();\\n        }\\n        return this;\\n      },\\n      contains: function (cls) {\\n        return !!this.cls._map[cls];\\n      },\\n      _change: function () {\\n        delete this.clsValue;\\n        this.onchange.call(this);\\n      }\\n    });\\n    ClassList.prototype.toString = function () {\\n      var value;\\n      if (this.clsValue) {\\n        return this.clsValue;\\n      }\\n      value = '';\\n      for (var i = 0; i < this.cls.length; i++) {\\n        if (i > 0) {\\n          value += ' ';\\n        }\\n        value += this.prefix + this.cls[i];\\n      }\\n      return value;\\n    };\\n\\n    function unique(array) {\\n      var uniqueItems = [];\\n      var i = array.length, item;\\n      while (i--) {\\n        item = array[i];\\n        if (!item.__checked) {\\n          uniqueItems.push(item);\\n          item.__checked = 1;\\n        }\\n      }\\n      i = uniqueItems.length;\\n      while (i--) {\\n        delete uniqueItems[i].__checked;\\n      }\\n      return uniqueItems;\\n    }\\n    var expression = /^([\\\\w\\\\\\\\*]+)?(?:#([\\\\w\\\\-\\\\\\\\]+))?(?:\\\\.([\\\\w\\\\\\\\\\\\.]+))?(?:\\\\[\\\\@?([\\\\w\\\\\\\\]+)([\\\\^\\\\$\\\\*!~]?=)([\\\\w\\\\\\\\]+)\\\\])?(?:\\\\:(.+))?/i;\\n    var chunker = /((?:\\\\((?:\\\\([^()]+\\\\)|[^()]+)+\\\\)|\\\\[(?:\\\\[[^\\\\[\\\\]]*\\\\]|['\\\"][^'\\\"]*['\\\"]|[^\\\\[\\\\]'\\\"]+)+\\\\]|\\\\\\\\.|[^ >+~,(\\\\[\\\\\\\\]+)+|[>+~])(\\\\s*,\\\\s*)?((?:.|\\\\r|\\\\n)*)/g;\\n    var whiteSpace = /^\\\\s*|\\\\s*$/g;\\n    var Collection;\\n    var Selector = global$a.extend({\\n      init: function (selector) {\\n        var match = this.match;\\n        function compileNameFilter(name) {\\n          if (name) {\\n            name = name.toLowerCase();\\n            return function (item) {\\n              return name === '*' || item.type === name;\\n            };\\n          }\\n        }\\n        function compileIdFilter(id) {\\n          if (id) {\\n            return function (item) {\\n              return item._name === id;\\n            };\\n          }\\n        }\\n        function compileClassesFilter(classes) {\\n          if (classes) {\\n            classes = classes.split('.');\\n            return function (item) {\\n              var i = classes.length;\\n              while (i--) {\\n                if (!item.classes.contains(classes[i])) {\\n                  return false;\\n                }\\n              }\\n              return true;\\n            };\\n          }\\n        }\\n        function compileAttrFilter(name, cmp, check) {\\n          if (name) {\\n            return function (item) {\\n              var value = item[name] ? item[name]() : '';\\n              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;\\n            };\\n          }\\n        }\\n        function compilePsuedoFilter(name) {\\n          var notSelectors;\\n          if (name) {\\n            name = /(?:not\\\\((.+)\\\\))|(.+)/i.exec(name);\\n            if (!name[1]) {\\n              name = name[2];\\n              return function (item, index, length) {\\n                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;\\n              };\\n            }\\n            notSelectors = parseChunks(name[1], []);\\n            return function (item) {\\n              return !match(item, notSelectors);\\n            };\\n          }\\n        }\\n        function compile(selector, filters, direct) {\\n          var parts;\\n          function add(filter) {\\n            if (filter) {\\n              filters.push(filter);\\n            }\\n          }\\n          parts = expression.exec(selector.replace(whiteSpace, ''));\\n          add(compileNameFilter(parts[1]));\\n          add(compileIdFilter(parts[2]));\\n          add(compileClassesFilter(parts[3]));\\n          add(compileAttrFilter(parts[4], parts[5], parts[6]));\\n          add(compilePsuedoFilter(parts[7]));\\n          filters.pseudo = !!parts[7];\\n          filters.direct = direct;\\n          return filters;\\n        }\\n        function parseChunks(selector, selectors) {\\n          var parts = [];\\n          var extra, matches, i;\\n          do {\\n            chunker.exec('');\\n            matches = chunker.exec(selector);\\n            if (matches) {\\n              selector = matches[3];\\n              parts.push(matches[1]);\\n              if (matches[2]) {\\n                extra = matches[3];\\n                break;\\n              }\\n            }\\n          } while (matches);\\n          if (extra) {\\n            parseChunks(extra, selectors);\\n          }\\n          selector = [];\\n          for (i = 0; i < parts.length; i++) {\\n            if (parts[i] !== '>') {\\n              selector.push(compile(parts[i], [], parts[i - 1] === '>'));\\n            }\\n          }\\n          selectors.push(selector);\\n          return selectors;\\n        }\\n        this._selectors = parseChunks(selector, []);\\n      },\\n      match: function (control, selectors) {\\n        var i, l, si, sl, selector, fi, fl, filters, index, length, siblings, count, item;\\n        selectors = selectors || this._selectors;\\n        for (i = 0, l = selectors.length; i < l; i++) {\\n          selector = selectors[i];\\n          sl = selector.length;\\n          item = control;\\n          count = 0;\\n          for (si = sl - 1; si >= 0; si--) {\\n            filters = selector[si];\\n            while (item) {\\n              if (filters.pseudo) {\\n                siblings = item.parent().items();\\n                index = length = siblings.length;\\n                while (index--) {\\n                  if (siblings[index] === item) {\\n                    break;\\n                  }\\n                }\\n              }\\n              for (fi = 0, fl = filters.length; fi < fl; fi++) {\\n                if (!filters[fi](item, index, length)) {\\n                  fi = fl + 1;\\n                  break;\\n                }\\n              }\\n              if (fi === fl) {\\n                count++;\\n                break;\\n              } else {\\n                if (si === sl - 1) {\\n                  break;\\n                }\\n              }\\n              item = item.parent();\\n            }\\n          }\\n          if (count === sl) {\\n            return true;\\n          }\\n        }\\n        return false;\\n      },\\n      find: function (container) {\\n        var matches = [], i, l;\\n        var selectors = this._selectors;\\n        function collect(items, selector, index) {\\n          var i, l, fi, fl, item;\\n          var filters = selector[index];\\n          for (i = 0, l = items.length; i < l; i++) {\\n            item = items[i];\\n            for (fi = 0, fl = filters.length; fi < fl; fi++) {\\n              if (!filters[fi](item, i, l)) {\\n                fi = fl + 1;\\n                break;\\n              }\\n            }\\n            if (fi === fl) {\\n              if (index === selector.length - 1) {\\n                matches.push(item);\\n              } else {\\n                if (item.items) {\\n                  collect(item.items(), selector, index + 1);\\n                }\\n              }\\n            } else if (filters.direct) {\\n              return;\\n            }\\n            if (item.items) {\\n              collect(item.items(), selector, index);\\n            }\\n          }\\n        }\\n        if (container.items) {\\n          for (i = 0, l = selectors.length; i < l; i++) {\\n            collect(container.items(), selectors[i], 0);\\n          }\\n          if (l > 1) {\\n            matches = unique(matches);\\n          }\\n        }\\n        if (!Collection) {\\n          Collection = Selector.Collection;\\n        }\\n        return new Collection(matches);\\n      }\\n    });\\n\\n    var Collection$1, proto;\\n    var push = Array.prototype.push, slice = Array.prototype.slice;\\n    proto = {\\n      length: 0,\\n      init: function (items) {\\n        if (items) {\\n          this.add(items);\\n        }\\n      },\\n      add: function (items) {\\n        var self = this;\\n        if (!global$2.isArray(items)) {\\n          if (items instanceof Collection$1) {\\n            self.add(items.toArray());\\n          } else {\\n            push.call(self, items);\\n          }\\n        } else {\\n          push.apply(self, items);\\n        }\\n        return self;\\n      },\\n      set: function (items) {\\n        var self = this;\\n        var len = self.length;\\n        var i;\\n        self.length = 0;\\n        self.add(items);\\n        for (i = self.length; i < len; i++) {\\n          delete self[i];\\n        }\\n        return self;\\n      },\\n      filter: function (selector) {\\n        var self = this;\\n        var i, l;\\n        var matches = [];\\n        var item, match;\\n        if (typeof selector === 'string') {\\n          selector = new Selector(selector);\\n          match = function (item) {\\n            return selector.match(item);\\n          };\\n        } else {\\n          match = selector;\\n        }\\n        for (i = 0, l = self.length; i < l; i++) {\\n          item = self[i];\\n          if (match(item)) {\\n            matches.push(item);\\n          }\\n        }\\n        return new Collection$1(matches);\\n      },\\n      slice: function () {\\n        return new Collection$1(slice.apply(this, arguments));\\n      },\\n      eq: function (index) {\\n        return index === -1 ? this.slice(index) : this.slice(index, +index + 1);\\n      },\\n      each: function (callback) {\\n        global$2.each(this, callback);\\n        return this;\\n      },\\n      toArray: function () {\\n        return global$2.toArray(this);\\n      },\\n      indexOf: function (ctrl) {\\n        var self = this;\\n        var i = self.length;\\n        while (i--) {\\n          if (self[i] === ctrl) {\\n            break;\\n          }\\n        }\\n        return i;\\n      },\\n      reverse: function () {\\n        return new Collection$1(global$2.toArray(this).reverse());\\n      },\\n      hasClass: function (cls) {\\n        return this[0] ? this[0].classes.contains(cls) : false;\\n      },\\n      prop: function (name, value) {\\n        var self = this;\\n        var item;\\n        if (value !== undefined) {\\n          self.each(function (item) {\\n            if (item[name]) {\\n              item[name](value);\\n            }\\n          });\\n          return self;\\n        }\\n        item = self[0];\\n        if (item && item[name]) {\\n          return item[name]();\\n        }\\n      },\\n      exec: function (name) {\\n        var self = this, args = global$2.toArray(arguments).slice(1);\\n        self.each(function (item) {\\n          if (item[name]) {\\n            item[name].apply(item, args);\\n          }\\n        });\\n        return self;\\n      },\\n      remove: function () {\\n        var i = this.length;\\n        while (i--) {\\n          this[i].remove();\\n        }\\n        return this;\\n      },\\n      addClass: function (cls) {\\n        return this.each(function (item) {\\n          item.classes.add(cls);\\n        });\\n      },\\n      removeClass: function (cls) {\\n        return this.each(function (item) {\\n          item.classes.remove(cls);\\n        });\\n      }\\n    };\\n    global$2.each('fire on off show hide append prepend before after reflow'.split(' '), function (name) {\\n      proto[name] = function () {\\n        var args = global$2.toArray(arguments);\\n        this.each(function (ctrl) {\\n          if (name in ctrl) {\\n            ctrl[name].apply(ctrl, args);\\n          }\\n        });\\n        return this;\\n      };\\n    });\\n    global$2.each('text name disabled active selected checked visible parent value data'.split(' '), function (name) {\\n      proto[name] = function (value) {\\n        return this.prop(name, value);\\n      };\\n    });\\n    Collection$1 = global$a.extend(proto);\\n    Selector.Collection = Collection$1;\\n    var Collection$2 = Collection$1;\\n\\n    var Binding = function (settings) {\\n      this.create = settings.create;\\n    };\\n    Binding.create = function (model, name) {\\n      return new Binding({\\n        create: function (otherModel, otherName) {\\n          var bindings;\\n          var fromSelfToOther = function (e) {\\n            otherModel.set(otherName, e.value);\\n          };\\n          var fromOtherToSelf = function (e) {\\n            model.set(name, e.value);\\n          };\\n          otherModel.on('change:' + otherName, fromOtherToSelf);\\n          model.on('change:' + name, fromSelfToOther);\\n          bindings = otherModel._bindings;\\n          if (!bindings) {\\n            bindings = otherModel._bindings = [];\\n            otherModel.on('destroy', function () {\\n              var i = bindings.length;\\n              while (i--) {\\n                bindings[i]();\\n              }\\n            });\\n          }\\n          bindings.push(function () {\\n            model.off('change:' + name, fromSelfToOther);\\n          });\\n          return model.get(name);\\n        }\\n      });\\n    };\\n\\n    var global$c = tinymce.util.Tools.resolve('tinymce.util.Observable');\\n\\n    function isNode(node) {\\n      return node.nodeType > 0;\\n    }\\n    function isEqual(a, b) {\\n      var k, checked;\\n      if (a === b) {\\n        return true;\\n      }\\n      if (a === null || b === null) {\\n        return a === b;\\n      }\\n      if (typeof a !== 'object' || typeof b !== 'object') {\\n        return a === b;\\n      }\\n      if (global$2.isArray(b)) {\\n        if (a.length !== b.length) {\\n          return false;\\n        }\\n        k = a.length;\\n        while (k--) {\\n          if (!isEqual(a[k], b[k])) {\\n            return false;\\n          }\\n        }\\n      }\\n      if (isNode(a) || isNode(b)) {\\n        return a === b;\\n      }\\n      checked = {};\\n      for (k in b) {\\n        if (!isEqual(a[k], b[k])) {\\n          return false;\\n        }\\n        checked[k] = true;\\n      }\\n      for (k in a) {\\n        if (!checked[k] && !isEqual(a[k], b[k])) {\\n          return false;\\n        }\\n      }\\n      return true;\\n    }\\n    var ObservableObject = global$a.extend({\\n      Mixins: [global$c],\\n      init: function (data) {\\n        var name, value;\\n        data = data || {};\\n        for (name in data) {\\n          value = data[name];\\n          if (value instanceof Binding) {\\n            data[name] = value.create(this, name);\\n          }\\n        }\\n        this.data = data;\\n      },\\n      set: function (name, value) {\\n        var key, args;\\n        var oldValue = this.data[name];\\n        if (value instanceof Binding) {\\n          value = value.create(this, name);\\n        }\\n        if (typeof name === 'object') {\\n          for (key in name) {\\n            this.set(key, name[key]);\\n          }\\n          return this;\\n        }\\n        if (!isEqual(oldValue, value)) {\\n          this.data[name] = value;\\n          args = {\\n            target: this,\\n            name: name,\\n            value: value,\\n            oldValue: oldValue\\n          };\\n          this.fire('change:' + name, args);\\n          this.fire('change', args);\\n        }\\n        return this;\\n      },\\n      get: function (name) {\\n        return this.data[name];\\n      },\\n      has: function (name) {\\n        return name in this.data;\\n      },\\n      bind: function (name) {\\n        return Binding.create(this, name);\\n      },\\n      destroy: function () {\\n        this.fire('destroy');\\n      }\\n    });\\n\\n    var dirtyCtrls = {}, animationFrameRequested;\\n    var ReflowQueue = {\\n      add: function (ctrl) {\\n        var parent = ctrl.parent();\\n        if (parent) {\\n          if (!parent._layout || parent._layout.isNative()) {\\n            return;\\n          }\\n          if (!dirtyCtrls[parent._id]) {\\n            dirtyCtrls[parent._id] = parent;\\n          }\\n          if (!animationFrameRequested) {\\n            animationFrameRequested = true;\\n            global$7.requestAnimationFrame(function () {\\n              var id, ctrl;\\n              animationFrameRequested = false;\\n              for (id in dirtyCtrls) {\\n                ctrl = dirtyCtrls[id];\\n                if (ctrl.state.get('rendered')) {\\n                  ctrl.reflow();\\n                }\\n              }\\n              dirtyCtrls = {};\\n            }, domGlobals.document.body);\\n          }\\n        }\\n      },\\n      remove: function (ctrl) {\\n        if (dirtyCtrls[ctrl._id]) {\\n          delete dirtyCtrls[ctrl._id];\\n        }\\n      }\\n    };\\n\\n    var hasMouseWheelEventSupport = 'onmousewheel' in domGlobals.document;\\n    var hasWheelEventSupport = false;\\n    var classPrefix = 'mce-';\\n    var Control, idCounter = 0;\\n    var proto$1 = {\\n      Statics: { classPrefix: classPrefix },\\n      isRtl: function () {\\n        return Control.rtl;\\n      },\\n      classPrefix: classPrefix,\\n      init: function (settings) {\\n        var self = this;\\n        var classes, defaultClasses;\\n        function applyClasses(classes) {\\n          var i;\\n          classes = classes.split(' ');\\n          for (i = 0; i < classes.length; i++) {\\n            self.classes.add(classes[i]);\\n          }\\n        }\\n        self.settings = settings = global$2.extend({}, self.Defaults, settings);\\n        self._id = settings.id || 'mceu_' + idCounter++;\\n        self._aria = { role: settings.role };\\n        self._elmCache = {};\\n        self.$ = global$9;\\n        self.state = new ObservableObject({\\n          visible: true,\\n          active: false,\\n          disabled: false,\\n          value: ''\\n        });\\n        self.data = new ObservableObject(settings.data);\\n        self.classes = new ClassList(function () {\\n          if (self.state.get('rendered')) {\\n            self.getEl().className = this.toString();\\n          }\\n        });\\n        self.classes.prefix = self.classPrefix;\\n        classes = settings.classes;\\n        if (classes) {\\n          if (self.Defaults) {\\n            defaultClasses = self.Defaults.classes;\\n            if (defaultClasses && classes !== defaultClasses) {\\n              applyClasses(defaultClasses);\\n            }\\n          }\\n          applyClasses(classes);\\n        }\\n        global$2.each('title text name visible disabled active value'.split(' '), function (name) {\\n          if (name in settings) {\\n            self[name](settings[name]);\\n          }\\n        });\\n        self.on('click', function () {\\n          if (self.disabled()) {\\n            return false;\\n          }\\n        });\\n        self.settings = settings;\\n        self.borderBox = BoxUtils.parseBox(settings.border);\\n        self.paddingBox = BoxUtils.parseBox(settings.padding);\\n        self.marginBox = BoxUtils.parseBox(settings.margin);\\n        if (settings.hidden) {\\n          self.hide();\\n        }\\n      },\\n      Properties: 'parent,name',\\n      getContainerElm: function () {\\n        var uiContainer = UiContainer.getUiContainer(this);\\n        return uiContainer ? uiContainer : funcs.getContainer();\\n      },\\n      getParentCtrl: function (elm) {\\n        var ctrl;\\n        var lookup = this.getRoot().controlIdLookup;\\n        while (elm && lookup) {\\n          ctrl = lookup[elm.id];\\n          if (ctrl) {\\n            break;\\n          }\\n          elm = elm.parentNode;\\n        }\\n        return ctrl;\\n      },\\n      initLayoutRect: function () {\\n        var self = this;\\n        var settings = self.settings;\\n        var borderBox, layoutRect;\\n        var elm = self.getEl();\\n        var width, height, minWidth, minHeight, autoResize;\\n        var startMinWidth, startMinHeight, initialSize;\\n        borderBox = self.borderBox = self.borderBox || BoxUtils.measureBox(elm, 'border');\\n        self.paddingBox = self.paddingBox || BoxUtils.measureBox(elm, 'padding');\\n        self.marginBox = self.marginBox || BoxUtils.measureBox(elm, 'margin');\\n        initialSize = funcs.getSize(elm);\\n        startMinWidth = settings.minWidth;\\n        startMinHeight = settings.minHeight;\\n        minWidth = startMinWidth || initialSize.width;\\n        minHeight = startMinHeight || initialSize.height;\\n        width = settings.width;\\n        height = settings.height;\\n        autoResize = settings.autoResize;\\n        autoResize = typeof autoResize !== 'undefined' ? autoResize : !width && !height;\\n        width = width || minWidth;\\n        height = height || minHeight;\\n        var deltaW = borderBox.left + borderBox.right;\\n        var deltaH = borderBox.top + borderBox.bottom;\\n        var maxW = settings.maxWidth || 65535;\\n        var maxH = settings.maxHeight || 65535;\\n        self._layoutRect = layoutRect = {\\n          x: settings.x || 0,\\n          y: settings.y || 0,\\n          w: width,\\n          h: height,\\n          deltaW: deltaW,\\n          deltaH: deltaH,\\n          contentW: width - deltaW,\\n          contentH: height - deltaH,\\n          innerW: width - deltaW,\\n          innerH: height - deltaH,\\n          startMinWidth: startMinWidth || 0,\\n          startMinHeight: startMinHeight || 0,\\n          minW: Math.min(minWidth, maxW),\\n          minH: Math.min(minHeight, maxH),\\n          maxW: maxW,\\n          maxH: maxH,\\n          autoResize: autoResize,\\n          scrollW: 0\\n        };\\n        self._lastLayoutRect = {};\\n        return layoutRect;\\n      },\\n      layoutRect: function (newRect) {\\n        var self = this;\\n        var curRect = self._layoutRect, lastLayoutRect, size, deltaWidth, deltaHeight, repaintControls;\\n        if (!curRect) {\\n          curRect = self.initLayoutRect();\\n        }\\n        if (newRect) {\\n          deltaWidth = curRect.deltaW;\\n          deltaHeight = curRect.deltaH;\\n          if (newRect.x !== undefined) {\\n            curRect.x = newRect.x;\\n          }\\n          if (newRect.y !== undefined) {\\n            curRect.y = newRect.y;\\n          }\\n          if (newRect.minW !== undefined) {\\n            curRect.minW = newRect.minW;\\n          }\\n          if (newRect.minH !== undefined) {\\n            curRect.minH = newRect.minH;\\n          }\\n          size = newRect.w;\\n          if (size !== undefined) {\\n            size = size < curRect.minW ? curRect.minW : size;\\n            size = size > curRect.maxW ? curRect.maxW : size;\\n            curRect.w = size;\\n            curRect.innerW = size - deltaWidth;\\n          }\\n          size = newRect.h;\\n          if (size !== undefined) {\\n            size = size < curRect.minH ? curRect.minH : size;\\n            size = size > curRect.maxH ? curRect.maxH : size;\\n            curRect.h = size;\\n            curRect.innerH = size - deltaHeight;\\n          }\\n          size = newRect.innerW;\\n          if (size !== undefined) {\\n            size = size < curRect.minW - deltaWidth ? curRect.minW - deltaWidth : size;\\n            size = size > curRect.maxW - deltaWidth ? curRect.maxW - deltaWidth : size;\\n            curRect.innerW = size;\\n            curRect.w = size + deltaWidth;\\n          }\\n          size = newRect.innerH;\\n          if (size !== undefined) {\\n            size = size < curRect.minH - deltaHeight ? curRect.minH - deltaHeight : size;\\n            size = size > curRect.maxH - deltaHeight ? curRect.maxH - deltaHeight : size;\\n            curRect.innerH = size;\\n            curRect.h = size + deltaHeight;\\n          }\\n          if (newRect.contentW !== undefined) {\\n            curRect.contentW = newRect.contentW;\\n          }\\n          if (newRect.contentH !== undefined) {\\n            curRect.contentH = newRect.contentH;\\n          }\\n          lastLayoutRect = self._lastLayoutRect;\\n          if (lastLayoutRect.x !== curRect.x || lastLayoutRect.y !== curRect.y || lastLayoutRect.w !== curRect.w || lastLayoutRect.h !== curRect.h) {\\n            repaintControls = Control.repaintControls;\\n            if (repaintControls) {\\n              if (repaintControls.map && !repaintControls.map[self._id]) {\\n                repaintControls.push(self);\\n                repaintControls.map[self._id] = true;\\n              }\\n            }\\n            lastLayoutRect.x = curRect.x;\\n            lastLayoutRect.y = curRect.y;\\n            lastLayoutRect.w = curRect.w;\\n            lastLayoutRect.h = curRect.h;\\n          }\\n          return self;\\n        }\\n        return curRect;\\n      },\\n      repaint: function () {\\n        var self = this;\\n        var style, bodyStyle, bodyElm, rect, borderBox;\\n        var borderW, borderH, lastRepaintRect, round, value;\\n        round = !domGlobals.document.createRange ? Math.round : function (value) {\\n          return value;\\n        };\\n        style = self.getEl().style;\\n        rect = self._layoutRect;\\n        lastRepaintRect = self._lastRepaintRect || {};\\n        borderBox = self.borderBox;\\n        borderW = borderBox.left + borderBox.right;\\n        borderH = borderBox.top + borderBox.bottom;\\n        if (rect.x !== lastRepaintRect.x) {\\n          style.left = round(rect.x) + 'px';\\n          lastRepaintRect.x = rect.x;\\n        }\\n        if (rect.y !== lastRepaintRect.y) {\\n          style.top = round(rect.y) + 'px';\\n          lastRepaintRect.y = rect.y;\\n        }\\n        if (rect.w !== lastRepaintRect.w) {\\n          value = round(rect.w - borderW);\\n          style.width = (value >= 0 ? value : 0) + 'px';\\n          lastRepaintRect.w = rect.w;\\n        }\\n        if (rect.h !== lastRepaintRect.h) {\\n          value = round(rect.h - borderH);\\n          style.height = (value >= 0 ? value : 0) + 'px';\\n          lastRepaintRect.h = rect.h;\\n        }\\n        if (self._hasBody && rect.innerW !== lastRepaintRect.innerW) {\\n          value = round(rect.innerW);\\n          bodyElm = self.getEl('body');\\n          if (bodyElm) {\\n            bodyStyle = bodyElm.style;\\n            bodyStyle.width = (value >= 0 ? value : 0) + 'px';\\n          }\\n          lastRepaintRect.innerW = rect.innerW;\\n        }\\n        if (self._hasBody && rect.innerH !== lastRepaintRect.innerH) {\\n          value = round(rect.innerH);\\n          bodyElm = bodyElm || self.getEl('body');\\n          if (bodyElm) {\\n            bodyStyle = bodyStyle || bodyElm.style;\\n            bodyStyle.height = (value >= 0 ? value : 0) + 'px';\\n          }\\n          lastRepaintRect.innerH = rect.innerH;\\n        }\\n        self._lastRepaintRect = lastRepaintRect;\\n        self.fire('repaint', {}, false);\\n      },\\n      updateLayoutRect: function () {\\n        var self = this;\\n        self.parent()._lastRect = null;\\n        funcs.css(self.getEl(), {\\n          width: '',\\n          height: ''\\n        });\\n        self._layoutRect = self._lastRepaintRect = self._lastLayoutRect = null;\\n        self.initLayoutRect();\\n      },\\n      on: function (name, callback) {\\n        var self = this;\\n        function resolveCallbackName(name) {\\n          var callback, scope;\\n          if (typeof name !== 'string') {\\n            return name;\\n          }\\n          return function (e) {\\n            if (!callback) {\\n              self.parentsAndSelf().each(function (ctrl) {\\n                var callbacks = ctrl.settings.callbacks;\\n                if (callbacks && (callback = callbacks[name])) {\\n                  scope = ctrl;\\n                  return false;\\n                }\\n              });\\n            }\\n            if (!callback) {\\n              e.action = name;\\n              this.fire('execute', e);\\n              return;\\n            }\\n            return callback.call(scope, e);\\n          };\\n        }\\n        getEventDispatcher(self).on(name, resolveCallbackName(callback));\\n        return self;\\n      },\\n      off: function (name, callback) {\\n        getEventDispatcher(this).off(name, callback);\\n        return this;\\n      },\\n      fire: function (name, args, bubble) {\\n        var self = this;\\n        args = args || {};\\n        if (!args.control) {\\n          args.control = self;\\n        }\\n        args = getEventDispatcher(self).fire(name, args);\\n        if (bubble !== false && self.parent) {\\n          var parent = self.parent();\\n          while (parent && !args.isPropagationStopped()) {\\n            parent.fire(name, args, false);\\n            parent = parent.parent();\\n          }\\n        }\\n        return args;\\n      },\\n      hasEventListeners: function (name) {\\n        return getEventDispatcher(this).has(name);\\n      },\\n      parents: function (selector) {\\n        var self = this;\\n        var ctrl, parents = new Collection$2();\\n        for (ctrl = self.parent(); ctrl; ctrl = ctrl.parent()) {\\n          parents.add(ctrl);\\n        }\\n        if (selector) {\\n          parents = parents.filter(selector);\\n        }\\n        return parents;\\n      },\\n      parentsAndSelf: function (selector) {\\n        return new Collection$2(this).add(this.parents(selector));\\n      },\\n      next: function () {\\n        var parentControls = this.parent().items();\\n        return parentControls[parentControls.indexOf(this) + 1];\\n      },\\n      prev: function () {\\n        var parentControls = this.parent().items();\\n        return parentControls[parentControls.indexOf(this) - 1];\\n      },\\n      innerHtml: function (html) {\\n        this.$el.html(html);\\n        return this;\\n      },\\n      getEl: function (suffix) {\\n        var id = suffix ? this._id + '-' + suffix : this._id;\\n        if (!this._elmCache[id]) {\\n          this._elmCache[id] = global$9('#' + id)[0];\\n        }\\n        return this._elmCache[id];\\n      },\\n      show: function () {\\n        return this.visible(true);\\n      },\\n      hide: function () {\\n        return this.visible(false);\\n      },\\n      focus: function () {\\n        try {\\n          this.getEl().focus();\\n        } catch (ex) {\\n        }\\n        return this;\\n      },\\n      blur: function () {\\n        this.getEl().blur();\\n        return this;\\n      },\\n      aria: function (name, value) {\\n        var self = this, elm = self.getEl(self.ariaTarget);\\n        if (typeof value === 'undefined') {\\n          return self._aria[name];\\n        }\\n        self._aria[name] = value;\\n        if (self.state.get('rendered')) {\\n          elm.setAttribute(name === 'role' ? name : 'aria-' + name, value);\\n        }\\n        return self;\\n      },\\n      encode: function (text, translate) {\\n        if (translate !== false) {\\n          text = this.translate(text);\\n        }\\n        return (text || '').replace(/[&<>\\\"]/g, function (match) {\\n          return '&#' + match.charCodeAt(0) + ';';\\n        });\\n      },\\n      translate: function (text) {\\n        return Control.translate ? Control.translate(text) : text;\\n      },\\n      before: function (items) {\\n        var self = this, parent = self.parent();\\n        if (parent) {\\n          parent.insert(items, parent.items().indexOf(self), true);\\n        }\\n        return self;\\n      },\\n      after: function (items) {\\n        var self = this, parent = self.parent();\\n        if (parent) {\\n          parent.insert(items, parent.items().indexOf(self));\\n        }\\n        return self;\\n      },\\n      remove: function () {\\n        var self = this;\\n        var elm = self.getEl();\\n        var parent = self.parent();\\n        var newItems, i;\\n        if (self.items) {\\n          var controls = self.items().toArray();\\n          i = controls.length;\\n          while (i--) {\\n            controls[i].remove();\\n          }\\n        }\\n        if (parent && parent.items) {\\n          newItems = [];\\n          parent.items().each(function (item) {\\n            if (item !== self) {\\n              newItems.push(item);\\n            }\\n          });\\n          parent.items().set(newItems);\\n          parent._lastRect = null;\\n        }\\n        if (self._eventsRoot && self._eventsRoot === self) {\\n          global$9(elm).off();\\n        }\\n        var lookup = self.getRoot().controlIdLookup;\\n        if (lookup) {\\n          delete lookup[self._id];\\n        }\\n        if (elm && elm.parentNode) {\\n          elm.parentNode.removeChild(elm);\\n        }\\n        self.state.set('rendered', false);\\n        self.state.destroy();\\n        self.fire('remove');\\n        return self;\\n      },\\n      renderBefore: function (elm) {\\n        global$9(elm).before(this.renderHtml());\\n        this.postRender();\\n        return this;\\n      },\\n      renderTo: function (elm) {\\n        global$9(elm || this.getContainerElm()).append(this.renderHtml());\\n        this.postRender();\\n        return this;\\n      },\\n      preRender: function () {\\n      },\\n      render: function () {\\n      },\\n      renderHtml: function () {\\n        return '<div id=\\\"' + this._id + '\\\" class=\\\"' + this.classes + '\\\"></div>';\\n      },\\n      postRender: function () {\\n        var self = this;\\n        var settings = self.settings;\\n        var elm, box, parent, name, parentEventsRoot;\\n        self.$el = global$9(self.getEl());\\n        self.state.set('rendered', true);\\n        for (name in settings) {\\n          if (name.indexOf('on') === 0) {\\n            self.on(name.substr(2), settings[name]);\\n          }\\n        }\\n        if (self._eventsRoot) {\\n          for (parent = self.parent(); !parentEventsRoot && parent; parent = parent.parent()) {\\n            parentEventsRoot = parent._eventsRoot;\\n          }\\n          if (parentEventsRoot) {\\n            for (name in parentEventsRoot._nativeEvents) {\\n              self._nativeEvents[name] = true;\\n            }\\n          }\\n        }\\n        bindPendingEvents(self);\\n        if (settings.style) {\\n          elm = self.getEl();\\n          if (elm) {\\n            elm.setAttribute('style', settings.style);\\n            elm.style.cssText = settings.style;\\n          }\\n        }\\n        if (self.settings.border) {\\n          box = self.borderBox;\\n          self.$el.css({\\n            'border-top-width': box.top,\\n            'border-right-width': box.right,\\n            'border-bottom-width': box.bottom,\\n            'border-left-width': box.left\\n          });\\n        }\\n        var root = self.getRoot();\\n        if (!root.controlIdLookup) {\\n          root.controlIdLookup = {};\\n        }\\n        root.controlIdLookup[self._id] = self;\\n        for (var key in self._aria) {\\n          self.aria(key, self._aria[key]);\\n        }\\n        if (self.state.get('visible') === false) {\\n          self.getEl().style.display = 'none';\\n        }\\n        self.bindStates();\\n        self.state.on('change:visible', function (e) {\\n          var state = e.value;\\n          var parentCtrl;\\n          if (self.state.get('rendered')) {\\n            self.getEl().style.display = state === false ? 'none' : '';\\n            self.getEl().getBoundingClientRect();\\n          }\\n          parentCtrl = self.parent();\\n          if (parentCtrl) {\\n            parentCtrl._lastRect = null;\\n          }\\n          self.fire(state ? 'show' : 'hide');\\n          ReflowQueue.add(self);\\n        });\\n        self.fire('postrender', {}, false);\\n      },\\n      bindStates: function () {\\n      },\\n      scrollIntoView: function (align) {\\n        function getOffset(elm, rootElm) {\\n          var x, y, parent = elm;\\n          x = y = 0;\\n          while (parent && parent !== rootElm && parent.nodeType) {\\n            x += parent.offsetLeft || 0;\\n            y += parent.offsetTop || 0;\\n            parent = parent.offsetParent;\\n          }\\n          return {\\n            x: x,\\n            y: y\\n          };\\n        }\\n        var elm = this.getEl(), parentElm = elm.parentNode;\\n        var x, y, width, height, parentWidth, parentHeight;\\n        var pos = getOffset(elm, parentElm);\\n        x = pos.x;\\n        y = pos.y;\\n        width = elm.offsetWidth;\\n        height = elm.offsetHeight;\\n        parentWidth = parentElm.clientWidth;\\n        parentHeight = parentElm.clientHeight;\\n        if (align === 'end') {\\n          x -= parentWidth - width;\\n          y -= parentHeight - height;\\n        } else if (align === 'center') {\\n          x -= parentWidth / 2 - width / 2;\\n          y -= parentHeight / 2 - height / 2;\\n        }\\n        parentElm.scrollLeft = x;\\n        parentElm.scrollTop = y;\\n        return this;\\n      },\\n      getRoot: function () {\\n        var ctrl = this, rootControl;\\n        var parents = [];\\n        while (ctrl) {\\n          if (ctrl.rootControl) {\\n            rootControl = ctrl.rootControl;\\n            break;\\n          }\\n          parents.push(ctrl);\\n          rootControl = ctrl;\\n          ctrl = ctrl.parent();\\n        }\\n        if (!rootControl) {\\n          rootControl = this;\\n        }\\n        var i = parents.length;\\n        while (i--) {\\n          parents[i].rootControl = rootControl;\\n        }\\n        return rootControl;\\n      },\\n      reflow: function () {\\n        ReflowQueue.remove(this);\\n        var parent = this.parent();\\n        if (parent && parent._layout && !parent._layout.isNative()) {\\n          parent.reflow();\\n        }\\n        return this;\\n      }\\n    };\\n    global$2.each('text title visible disabled active value'.split(' '), function (name) {\\n      proto$1[name] = function (value) {\\n        if (arguments.length === 0) {\\n          return this.state.get(name);\\n        }\\n        if (typeof value !== 'undefined') {\\n          this.state.set(name, value);\\n        }\\n        return this;\\n      };\\n    });\\n    Control = global$a.extend(proto$1);\\n    function getEventDispatcher(obj) {\\n      if (!obj._eventDispatcher) {\\n        obj._eventDispatcher = new global$b({\\n          scope: obj,\\n          toggleEvent: function (name, state) {\\n            if (state && global$b.isNative(name)) {\\n              if (!obj._nativeEvents) {\\n                obj._nativeEvents = {};\\n              }\\n              obj._nativeEvents[name] = true;\\n              if (obj.state.get('rendered')) {\\n                bindPendingEvents(obj);\\n              }\\n            }\\n          }\\n        });\\n      }\\n      return obj._eventDispatcher;\\n    }\\n    function bindPendingEvents(eventCtrl) {\\n      var i, l, parents, eventRootCtrl, nativeEvents, name;\\n      function delegate(e) {\\n        var control = eventCtrl.getParentCtrl(e.target);\\n        if (control) {\\n          control.fire(e.type, e);\\n        }\\n      }\\n      function mouseLeaveHandler() {\\n        var ctrl = eventRootCtrl._lastHoverCtrl;\\n        if (ctrl) {\\n          ctrl.fire('mouseleave', { target: ctrl.getEl() });\\n          ctrl.parents().each(function (ctrl) {\\n            ctrl.fire('mouseleave', { target: ctrl.getEl() });\\n          });\\n          eventRootCtrl._lastHoverCtrl = null;\\n        }\\n      }\\n      function mouseEnterHandler(e) {\\n        var ctrl = eventCtrl.getParentCtrl(e.target), lastCtrl = eventRootCtrl._lastHoverCtrl, idx = 0, i, parents, lastParents;\\n        if (ctrl !== lastCtrl) {\\n          eventRootCtrl._lastHoverCtrl = ctrl;\\n          parents = ctrl.parents().toArray().reverse();\\n          parents.push(ctrl);\\n          if (lastCtrl) {\\n            lastParents = lastCtrl.parents().toArray().reverse();\\n            lastParents.push(lastCtrl);\\n            for (idx = 0; idx < lastParents.length; idx++) {\\n              if (parents[idx] !== lastParents[idx]) {\\n                break;\\n              }\\n            }\\n            for (i = lastParents.length - 1; i >= idx; i--) {\\n              lastCtrl = lastParents[i];\\n              lastCtrl.fire('mouseleave', { target: lastCtrl.getEl() });\\n            }\\n          }\\n          for (i = idx; i < parents.length; i++) {\\n            ctrl = parents[i];\\n            ctrl.fire('mouseenter', { target: ctrl.getEl() });\\n          }\\n        }\\n      }\\n      function fixWheelEvent(e) {\\n        e.preventDefault();\\n        if (e.type === 'mousewheel') {\\n          e.deltaY = -1 / 40 * e.wheelDelta;\\n          if (e.wheelDeltaX) {\\n            e.deltaX = -1 / 40 * e.wheelDeltaX;\\n          }\\n        } else {\\n          e.deltaX = 0;\\n          e.deltaY = e.detail;\\n        }\\n        e = eventCtrl.fire('wheel', e);\\n      }\\n      nativeEvents = eventCtrl._nativeEvents;\\n      if (nativeEvents) {\\n        parents = eventCtrl.parents().toArray();\\n        parents.unshift(eventCtrl);\\n        for (i = 0, l = parents.length; !eventRootCtrl && i < l; i++) {\\n          eventRootCtrl = parents[i]._eventsRoot;\\n        }\\n        if (!eventRootCtrl) {\\n          eventRootCtrl = parents[parents.length - 1] || eventCtrl;\\n        }\\n        eventCtrl._eventsRoot = eventRootCtrl;\\n        for (l = i, i = 0; i < l; i++) {\\n          parents[i]._eventsRoot = eventRootCtrl;\\n        }\\n        var eventRootDelegates = eventRootCtrl._delegates;\\n        if (!eventRootDelegates) {\\n          eventRootDelegates = eventRootCtrl._delegates = {};\\n        }\\n        for (name in nativeEvents) {\\n          if (!nativeEvents) {\\n            return false;\\n          }\\n          if (name === 'wheel' && !hasWheelEventSupport) {\\n            if (hasMouseWheelEventSupport) {\\n              global$9(eventCtrl.getEl()).on('mousewheel', fixWheelEvent);\\n            } else {\\n              global$9(eventCtrl.getEl()).on('DOMMouseScroll', fixWheelEvent);\\n            }\\n            continue;\\n          }\\n          if (name === 'mouseenter' || name === 'mouseleave') {\\n            if (!eventRootCtrl._hasMouseEnter) {\\n              global$9(eventRootCtrl.getEl()).on('mouseleave', mouseLeaveHandler).on('mouseover', mouseEnterHandler);\\n              eventRootCtrl._hasMouseEnter = 1;\\n            }\\n          } else if (!eventRootDelegates[name]) {\\n            global$9(eventRootCtrl.getEl()).on(name, delegate);\\n            eventRootDelegates[name] = true;\\n          }\\n          nativeEvents[name] = false;\\n        }\\n      }\\n    }\\n    var Control$1 = Control;\\n\\n    var hasTabstopData = function (elm) {\\n      return elm.getAttribute('data-mce-tabstop') ? true : false;\\n    };\\n    function KeyboardNavigation (settings) {\\n      var root = settings.root;\\n      var focusedElement, focusedControl;\\n      function isElement(node) {\\n        return node && node.nodeType === 1;\\n      }\\n      try {\\n        focusedElement = domGlobals.document.activeElement;\\n      } catch (ex) {\\n        focusedElement = domGlobals.document.body;\\n      }\\n      focusedControl = root.getParentCtrl(focusedElement);\\n      function getRole(elm) {\\n        elm = elm || focusedElement;\\n        if (isElement(elm)) {\\n          return elm.getAttribute('role');\\n        }\\n        return null;\\n      }\\n      function getParentRole(elm) {\\n        var role, parent = elm || focusedElement;\\n        while (parent = parent.parentNode) {\\n          if (role = getRole(parent)) {\\n            return role;\\n          }\\n        }\\n      }\\n      function getAriaProp(name) {\\n        var elm = focusedElement;\\n        if (isElement(elm)) {\\n          return elm.getAttribute('aria-' + name);\\n        }\\n      }\\n      function isTextInputElement(elm) {\\n        var tagName = elm.tagName.toUpperCase();\\n        return tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT';\\n      }\\n      function canFocus(elm) {\\n        if (isTextInputElement(elm) && !elm.hidden) {\\n          return true;\\n        }\\n        if (hasTabstopData(elm)) {\\n          return true;\\n        }\\n        if (/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell|slider)$/.test(getRole(elm))) {\\n          return true;\\n        }\\n        return false;\\n      }\\n      function getFocusElements(elm) {\\n        var elements = [];\\n        function collect(elm) {\\n          if (elm.nodeType !== 1 || elm.style.display === 'none' || elm.disabled) {\\n            return;\\n          }\\n          if (canFocus(elm)) {\\n            elements.push(elm);\\n          }\\n          for (var i = 0; i < elm.childNodes.length; i++) {\\n            collect(elm.childNodes[i]);\\n          }\\n        }\\n        collect(elm || root.getEl());\\n        return elements;\\n      }\\n      function getNavigationRoot(targetControl) {\\n        var navigationRoot, controls;\\n        targetControl = targetControl || focusedControl;\\n        controls = targetControl.parents().toArray();\\n        controls.unshift(targetControl);\\n        for (var i = 0; i < controls.length; i++) {\\n          navigationRoot = controls[i];\\n          if (navigationRoot.settings.ariaRoot) {\\n            break;\\n          }\\n        }\\n        return navigationRoot;\\n      }\\n      function focusFirst(targetControl) {\\n        var navigationRoot = getNavigationRoot(targetControl);\\n        var focusElements = getFocusElements(navigationRoot.getEl());\\n        if (navigationRoot.settings.ariaRemember && 'lastAriaIndex' in navigationRoot) {\\n          moveFocusToIndex(navigationRoot.lastAriaIndex, focusElements);\\n        } else {\\n          moveFocusToIndex(0, focusElements);\\n        }\\n      }\\n      function moveFocusToIndex(idx, elements) {\\n        if (idx < 0) {\\n          idx = elements.length - 1;\\n        } else if (idx >= elements.length) {\\n          idx = 0;\\n        }\\n        if (elements[idx]) {\\n          elements[idx].focus();\\n        }\\n        return idx;\\n      }\\n      function moveFocus(dir, elements) {\\n        var idx = -1;\\n        var navigationRoot = getNavigationRoot();\\n        elements = elements || getFocusElements(navigationRoot.getEl());\\n        for (var i = 0; i < elements.length; i++) {\\n          if (elements[i] === focusedElement) {\\n            idx = i;\\n          }\\n        }\\n        idx += dir;\\n        navigationRoot.lastAriaIndex = moveFocusToIndex(idx, elements);\\n      }\\n      function left() {\\n        var parentRole = getParentRole();\\n        if (parentRole === 'tablist') {\\n          moveFocus(-1, getFocusElements(focusedElement.parentNode));\\n        } else if (focusedControl.parent().submenu) {\\n          cancel();\\n        } else {\\n          moveFocus(-1);\\n        }\\n      }\\n      function right() {\\n        var role = getRole(), parentRole = getParentRole();\\n        if (parentRole === 'tablist') {\\n          moveFocus(1, getFocusElements(focusedElement.parentNode));\\n        } else if (role === 'menuitem' && parentRole === 'menu' && getAriaProp('haspopup')) {\\n          enter();\\n        } else {\\n          moveFocus(1);\\n        }\\n      }\\n      function up() {\\n        moveFocus(-1);\\n      }\\n      function down() {\\n        var role = getRole(), parentRole = getParentRole();\\n        if (role === 'menuitem' && parentRole === 'menubar') {\\n          enter();\\n        } else if (role === 'button' && getAriaProp('haspopup')) {\\n          enter({ key: 'down' });\\n        } else {\\n          moveFocus(1);\\n        }\\n      }\\n      function tab(e) {\\n        var parentRole = getParentRole();\\n        if (parentRole === 'tablist') {\\n          var elm = getFocusElements(focusedControl.getEl('body'))[0];\\n          if (elm) {\\n            elm.focus();\\n          }\\n        } else {\\n          moveFocus(e.shiftKey ? -1 : 1);\\n        }\\n      }\\n      function cancel() {\\n        focusedControl.fire('cancel');\\n      }\\n      function enter(aria) {\\n        aria = aria || {};\\n        focusedControl.fire('click', {\\n          target: focusedElement,\\n          aria: aria\\n        });\\n      }\\n      root.on('keydown', function (e) {\\n        function handleNonTabOrEscEvent(e, handler) {\\n          if (isTextInputElement(focusedElement) || hasTabstopData(focusedElement)) {\\n            return;\\n          }\\n          if (getRole(focusedElement) === 'slider') {\\n            return;\\n          }\\n          if (handler(e) !== false) {\\n            e.preventDefault();\\n          }\\n        }\\n        if (e.isDefaultPrevented()) {\\n          return;\\n        }\\n        switch (e.keyCode) {\\n        case 37:\\n          handleNonTabOrEscEvent(e, left);\\n          break;\\n        case 39:\\n          handleNonTabOrEscEvent(e, right);\\n          break;\\n        case 38:\\n          handleNonTabOrEscEvent(e, up);\\n          break;\\n        case 40:\\n          handleNonTabOrEscEvent(e, down);\\n          break;\\n        case 27:\\n          cancel();\\n          break;\\n        case 14:\\n        case 13:\\n        case 32:\\n          handleNonTabOrEscEvent(e, enter);\\n          break;\\n        case 9:\\n          tab(e);\\n          e.preventDefault();\\n          break;\\n        }\\n      });\\n      root.on('focusin', function (e) {\\n        focusedElement = e.target;\\n        focusedControl = e.control;\\n      });\\n      return { focusFirst: focusFirst };\\n    }\\n\\n    var selectorCache = {};\\n    var Container = Control$1.extend({\\n      init: function (settings) {\\n        var self = this;\\n        self._super(settings);\\n        settings = self.settings;\\n        if (settings.fixed) {\\n          self.state.set('fixed', true);\\n        }\\n        self._items = new Collection$2();\\n        if (self.isRtl()) {\\n          self.classes.add('rtl');\\n        }\\n        self.bodyClasses = new ClassList(function () {\\n          if (self.state.get('rendered')) {\\n            self.getEl('body').className = this.toString();\\n          }\\n        });\\n        self.bodyClasses.prefix = self.classPrefix;\\n        self.classes.add('container');\\n        self.bodyClasses.add('container-body');\\n        if (settings.containerCls) {\\n          self.classes.add(settings.containerCls);\\n        }\\n        self._layout = global$4.create((settings.layout || '') + 'layout');\\n        if (self.settings.items) {\\n          self.add(self.settings.items);\\n        } else {\\n          self.add(self.render());\\n        }\\n        self._hasBody = true;\\n      },\\n      items: function () {\\n        return this._items;\\n      },\\n      find: function (selector) {\\n        selector = selectorCache[selector] = selectorCache[selector] || new Selector(selector);\\n        return selector.find(this);\\n      },\\n      add: function (items) {\\n        var self = this;\\n        self.items().add(self.create(items)).parent(self);\\n        return self;\\n      },\\n      focus: function (keyboard) {\\n        var self = this;\\n        var focusCtrl, keyboardNav, items;\\n        if (keyboard) {\\n          keyboardNav = self.keyboardNav || self.parents().eq(-1)[0].keyboardNav;\\n          if (keyboardNav) {\\n            keyboardNav.focusFirst(self);\\n            return;\\n          }\\n        }\\n        items = self.find('*');\\n        if (self.statusbar) {\\n          items.add(self.statusbar.items());\\n        }\\n        items.each(function (ctrl) {\\n          if (ctrl.settings.autofocus) {\\n            focusCtrl = null;\\n            return false;\\n          }\\n          if (ctrl.canFocus) {\\n            focusCtrl = focusCtrl || ctrl;\\n          }\\n        });\\n        if (focusCtrl) {\\n          focusCtrl.focus();\\n        }\\n        return self;\\n      },\\n      replace: function (oldItem, newItem) {\\n        var ctrlElm;\\n        var items = this.items();\\n        var i = items.length;\\n        while (i--) {\\n          if (items[i] === oldItem) {\\n            items[i] = newItem;\\n            break;\\n          }\\n        }\\n        if (i >= 0) {\\n          ctrlElm = newItem.getEl();\\n          if (ctrlElm) {\\n            ctrlElm.parentNode.removeChild(ctrlElm);\\n          }\\n          ctrlElm = oldItem.getEl();\\n          if (ctrlElm) {\\n            ctrlElm.parentNode.removeChild(ctrlElm);\\n          }\\n        }\\n        newItem.parent(this);\\n      },\\n      create: function (items) {\\n        var self = this;\\n        var settings;\\n        var ctrlItems = [];\\n        if (!global$2.isArray(items)) {\\n          items = [items];\\n        }\\n        global$2.each(items, function (item) {\\n          if (item) {\\n            if (!(item instanceof Control$1)) {\\n              if (typeof item === 'string') {\\n                item = { type: item };\\n              }\\n              settings = global$2.extend({}, self.settings.defaults, item);\\n              item.type = settings.type = settings.type || item.type || self.settings.defaultType || (settings.defaults ? settings.defaults.type : null);\\n              item = global$4.create(settings);\\n            }\\n            ctrlItems.push(item);\\n          }\\n        });\\n        return ctrlItems;\\n      },\\n      renderNew: function () {\\n        var self = this;\\n        self.items().each(function (ctrl, index) {\\n          var containerElm;\\n          ctrl.parent(self);\\n          if (!ctrl.state.get('rendered')) {\\n            containerElm = self.getEl('body');\\n            if (containerElm.hasChildNodes() && index <= containerElm.childNodes.length - 1) {\\n              global$9(containerElm.childNodes[index]).before(ctrl.renderHtml());\\n            } else {\\n              global$9(containerElm).append(ctrl.renderHtml());\\n            }\\n            ctrl.postRender();\\n            ReflowQueue.add(ctrl);\\n          }\\n        });\\n        self._layout.applyClasses(self.items().filter(':visible'));\\n        self._lastRect = null;\\n        return self;\\n      },\\n      append: function (items) {\\n        return this.add(items).renderNew();\\n      },\\n      prepend: function (items) {\\n        var self = this;\\n        self.items().set(self.create(items).concat(self.items().toArray()));\\n        return self.renderNew();\\n      },\\n      insert: function (items, index, before) {\\n        var self = this;\\n        var curItems, beforeItems, afterItems;\\n        items = self.create(items);\\n        curItems = self.items();\\n        if (!before && index < curItems.length - 1) {\\n          index += 1;\\n        }\\n        if (index >= 0 && index < curItems.length) {\\n          beforeItems = curItems.slice(0, index).toArray();\\n          afterItems = curItems.slice(index).toArray();\\n          curItems.set(beforeItems.concat(items, afterItems));\\n        }\\n        return self.renderNew();\\n      },\\n      fromJSON: function (data) {\\n        var self = this;\\n        for (var name in data) {\\n          self.find('#' + name).value(data[name]);\\n        }\\n        return self;\\n      },\\n      toJSON: function () {\\n        var self = this, data = {};\\n        self.find('*').each(function (ctrl) {\\n          var name = ctrl.name(), value = ctrl.value();\\n          if (name && typeof value !== 'undefined') {\\n            data[name] = value;\\n          }\\n        });\\n        return data;\\n      },\\n      renderHtml: function () {\\n        var self = this, layout = self._layout, role = this.settings.role;\\n        self.preRender();\\n        layout.preRender(self);\\n        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>';\\n      },\\n      postRender: function () {\\n        var self = this;\\n        var box;\\n        self.items().exec('postRender');\\n        self._super();\\n        self._layout.postRender(self);\\n        self.state.set('rendered', true);\\n        if (self.settings.style) {\\n          self.$el.css(self.settings.style);\\n        }\\n        if (self.settings.border) {\\n          box = self.borderBox;\\n          self.$el.css({\\n            'border-top-width': box.top,\\n            'border-right-width': box.right,\\n            'border-bottom-width': box.bottom,\\n            'border-left-width': box.left\\n          });\\n        }\\n        if (!self.parent()) {\\n          self.keyboardNav = KeyboardNavigation({ root: self });\\n        }\\n        return self;\\n      },\\n      initLayoutRect: function () {\\n        var self = this, layoutRect = self._super();\\n        self._layout.recalc(self);\\n        return layoutRect;\\n      },\\n      recalc: function () {\\n        var self = this;\\n        var rect = self._layoutRect;\\n        var lastRect = self._lastRect;\\n        if (!lastRect || lastRect.w !== rect.w || lastRect.h !== rect.h) {\\n          self._layout.recalc(self);\\n          rect = self.layoutRect();\\n          self._lastRect = {\\n            x: rect.x,\\n            y: rect.y,\\n            w: rect.w,\\n            h: rect.h\\n          };\\n          return true;\\n        }\\n      },\\n      reflow: function () {\\n        var i;\\n        ReflowQueue.remove(this);\\n        if (this.visible()) {\\n          Control$1.repaintControls = [];\\n          Control$1.repaintControls.map = {};\\n          this.recalc();\\n          i = Control$1.repaintControls.length;\\n          while (i--) {\\n            Control$1.repaintControls[i].repaint();\\n          }\\n          if (this.settings.layout !== 'flow' && this.settings.layout !== 'stack') {\\n            this.repaint();\\n          }\\n          Control$1.repaintControls = [];\\n        }\\n        return this;\\n      }\\n    });\\n\\n    function getDocumentSize(doc) {\\n      var documentElement, body, scrollWidth, clientWidth;\\n      var offsetWidth, scrollHeight, clientHeight, offsetHeight;\\n      var max = Math.max;\\n      documentElement = doc.documentElement;\\n      body = doc.body;\\n      scrollWidth = max(documentElement.scrollWidth, body.scrollWidth);\\n      clientWidth = max(documentElement.clientWidth, body.clientWidth);\\n      offsetWidth = max(documentElement.offsetWidth, body.offsetWidth);\\n      scrollHeight = max(documentElement.scrollHeight, body.scrollHeight);\\n      clientHeight = max(documentElement.clientHeight, body.clientHeight);\\n      offsetHeight = max(documentElement.offsetHeight, body.offsetHeight);\\n      return {\\n        width: scrollWidth < offsetWidth ? clientWidth : scrollWidth,\\n        height: scrollHeight < offsetHeight ? clientHeight : scrollHeight\\n      };\\n    }\\n    function updateWithTouchData(e) {\\n      var keys, i;\\n      if (e.changedTouches) {\\n        keys = 'screenX screenY pageX pageY clientX clientY'.split(' ');\\n        for (i = 0; i < keys.length; i++) {\\n          e[keys[i]] = e.changedTouches[0][keys[i]];\\n        }\\n      }\\n    }\\n    function DragHelper (id, settings) {\\n      var $eventOverlay;\\n      var doc = settings.document || domGlobals.document;\\n      var downButton;\\n      var start, stop, drag, startX, startY;\\n      settings = settings || {};\\n      var handleElement = doc.getElementById(settings.handle || id);\\n      start = function (e) {\\n        var docSize = getDocumentSize(doc);\\n        var handleElm, cursor;\\n        updateWithTouchData(e);\\n        e.preventDefault();\\n        downButton = e.button;\\n        handleElm = handleElement;\\n        startX = e.screenX;\\n        startY = e.screenY;\\n        if (domGlobals.window.getComputedStyle) {\\n          cursor = domGlobals.window.getComputedStyle(handleElm, null).getPropertyValue('cursor');\\n        } else {\\n          cursor = handleElm.runtimeStyle.cursor;\\n        }\\n        $eventOverlay = global$9('<div></div>').css({\\n          position: 'absolute',\\n          top: 0,\\n          left: 0,\\n          width: docSize.width,\\n          height: docSize.height,\\n          zIndex: 2147483647,\\n          opacity: 0.0001,\\n          cursor: cursor\\n        }).appendTo(doc.body);\\n        global$9(doc).on('mousemove touchmove', drag).on('mouseup touchend', stop);\\n        settings.start(e);\\n      };\\n      drag = function (e) {\\n        updateWithTouchData(e);\\n        if (e.button !== downButton) {\\n          return stop(e);\\n        }\\n        e.deltaX = e.screenX - startX;\\n        e.deltaY = e.screenY - startY;\\n        e.preventDefault();\\n        settings.drag(e);\\n      };\\n      stop = function (e) {\\n        updateWithTouchData(e);\\n        global$9(doc).off('mousemove touchmove', drag).off('mouseup touchend', stop);\\n        $eventOverlay.remove();\\n        if (settings.stop) {\\n          settings.stop(e);\\n        }\\n      };\\n      this.destroy = function () {\\n        global$9(handleElement).off();\\n      };\\n      global$9(handleElement).on('mousedown touchstart', start);\\n    }\\n\\n    var Scrollable = {\\n      init: function () {\\n        var self = this;\\n        self.on('repaint', self.renderScroll);\\n      },\\n      renderScroll: function () {\\n        var self = this, margin = 2;\\n        function repaintScroll() {\\n          var hasScrollH, hasScrollV, bodyElm;\\n          function repaintAxis(axisName, posName, sizeName, contentSizeName, hasScroll, ax) {\\n            var containerElm, scrollBarElm, scrollThumbElm;\\n            var containerSize, scrollSize, ratio, rect;\\n            var posNameLower, sizeNameLower;\\n            scrollBarElm = self.getEl('scroll' + axisName);\\n            if (scrollBarElm) {\\n              posNameLower = posName.toLowerCase();\\n              sizeNameLower = sizeName.toLowerCase();\\n              global$9(self.getEl('absend')).css(posNameLower, self.layoutRect()[contentSizeName] - 1);\\n              if (!hasScroll) {\\n                global$9(scrollBarElm).css('display', 'none');\\n                return;\\n              }\\n              global$9(scrollBarElm).css('display', 'block');\\n              containerElm = self.getEl('body');\\n              scrollThumbElm = self.getEl('scroll' + axisName + 't');\\n              containerSize = containerElm['client' + sizeName] - margin * 2;\\n              containerSize -= hasScrollH && hasScrollV ? scrollBarElm['client' + ax] : 0;\\n              scrollSize = containerElm['scroll' + sizeName];\\n              ratio = containerSize / scrollSize;\\n              rect = {};\\n              rect[posNameLower] = containerElm['offset' + posName] + margin;\\n              rect[sizeNameLower] = containerSize;\\n              global$9(scrollBarElm).css(rect);\\n              rect = {};\\n              rect[posNameLower] = containerElm['scroll' + posName] * ratio;\\n              rect[sizeNameLower] = containerSize * ratio;\\n              global$9(scrollThumbElm).css(rect);\\n            }\\n          }\\n          bodyElm = self.getEl('body');\\n          hasScrollH = bodyElm.scrollWidth > bodyElm.clientWidth;\\n          hasScrollV = bodyElm.scrollHeight > bodyElm.clientHeight;\\n          repaintAxis('h', 'Left', 'Width', 'contentW', hasScrollH, 'Height');\\n          repaintAxis('v', 'Top', 'Height', 'contentH', hasScrollV, 'Width');\\n        }\\n        function addScroll() {\\n          function addScrollAxis(axisName, posName, sizeName, deltaPosName, ax) {\\n            var scrollStart;\\n            var axisId = self._id + '-scroll' + axisName, prefix = self.classPrefix;\\n            global$9(self.getEl()).append('<div id=\\\"' + axisId + '\\\" class=\\\"' + prefix + 'scrollbar ' + prefix + 'scrollbar-' + axisName + '\\\">' + '<div id=\\\"' + axisId + 't\\\" class=\\\"' + prefix + 'scrollbar-thumb\\\"></div>' + '</div>');\\n            self.draghelper = new DragHelper(axisId + 't', {\\n              start: function () {\\n                scrollStart = self.getEl('body')['scroll' + posName];\\n                global$9('#' + axisId).addClass(prefix + 'active');\\n              },\\n              drag: function (e) {\\n                var ratio, hasScrollH, hasScrollV, containerSize;\\n                var layoutRect = self.layoutRect();\\n                hasScrollH = layoutRect.contentW > layoutRect.innerW;\\n                hasScrollV = layoutRect.contentH > layoutRect.innerH;\\n                containerSize = self.getEl('body')['client' + sizeName] - margin * 2;\\n                containerSize -= hasScrollH && hasScrollV ? self.getEl('scroll' + axisName)['client' + ax] : 0;\\n                ratio = containerSize / self.getEl('body')['scroll' + sizeName];\\n                self.getEl('body')['scroll' + posName] = scrollStart + e['delta' + deltaPosName] / ratio;\\n              },\\n              stop: function () {\\n                global$9('#' + axisId).removeClass(prefix + 'active');\\n              }\\n            });\\n          }\\n          self.classes.add('scroll');\\n          addScrollAxis('v', 'Top', 'Height', 'Y', 'Width');\\n          addScrollAxis('h', 'Left', 'Width', 'X', 'Height');\\n        }\\n        if (self.settings.autoScroll) {\\n          if (!self._hasScroll) {\\n            self._hasScroll = true;\\n            addScroll();\\n            self.on('wheel', function (e) {\\n              var bodyEl = self.getEl('body');\\n              bodyEl.scrollLeft += (e.deltaX || 0) * 10;\\n              bodyEl.scrollTop += e.deltaY * 10;\\n              repaintScroll();\\n            });\\n            global$9(self.getEl('body')).on('scroll', repaintScroll);\\n          }\\n          repaintScroll();\\n        }\\n      }\\n    };\\n\\n    var Panel = Container.extend({\\n      Defaults: {\\n        layout: 'fit',\\n        containerCls: 'panel'\\n      },\\n      Mixins: [Scrollable],\\n      renderHtml: function () {\\n        var self = this;\\n        var layout = self._layout;\\n        var innerHtml = self.settings.html;\\n        self.preRender();\\n        layout.preRender(self);\\n        if (typeof innerHtml === 'undefined') {\\n          innerHtml = '<div id=\\\"' + self._id + '-body\\\" class=\\\"' + self.bodyClasses + '\\\">' + layout.renderHtml(self) + '</div>';\\n        } else {\\n          if (typeof innerHtml === 'function') {\\n            innerHtml = innerHtml.call(self);\\n          }\\n          self._hasBody = false;\\n        }\\n        return '<div id=\\\"' + self._id + '\\\" class=\\\"' + self.classes + '\\\" hidefocus=\\\"1\\\" tabindex=\\\"-1\\\" role=\\\"group\\\">' + (self._preBodyHtml || '') + innerHtml + '</div>';\\n      }\\n    });\\n\\n    var Resizable = {\\n      resizeToContent: function () {\\n        this._layoutRect.autoResize = true;\\n        this._lastRect = null;\\n        this.reflow();\\n      },\\n      resizeTo: function (w, h) {\\n        if (w <= 1 || h <= 1) {\\n          var rect = funcs.getWindowSize();\\n          w = w <= 1 ? w * rect.w : w;\\n          h = h <= 1 ? h * rect.h : h;\\n        }\\n        this._layoutRect.autoResize = false;\\n        return this.layoutRect({\\n          minW: w,\\n          minH: h,\\n          w: w,\\n          h: h\\n        }).reflow();\\n      },\\n      resizeBy: function (dw, dh) {\\n        var self = this, rect = self.layoutRect();\\n        return self.resizeTo(rect.w + dw, rect.h + dh);\\n      }\\n    };\\n\\n    var documentClickHandler, documentScrollHandler, windowResizeHandler;\\n    var visiblePanels = [];\\n    var zOrder = [];\\n    var hasModal;\\n    function isChildOf(ctrl, parent) {\\n      while (ctrl) {\\n        if (ctrl === parent) {\\n          return true;\\n        }\\n        ctrl = ctrl.parent();\\n      }\\n    }\\n    function skipOrHidePanels(e) {\\n      var i = visiblePanels.length;\\n      while (i--) {\\n        var panel = visiblePanels[i], clickCtrl = panel.getParentCtrl(e.target);\\n        if (panel.settings.autohide) {\\n          if (clickCtrl) {\\n            if (isChildOf(clickCtrl, panel) || panel.parent() === clickCtrl) {\\n              continue;\\n            }\\n          }\\n          e = panel.fire('autohide', { target: e.target });\\n          if (!e.isDefaultPrevented()) {\\n            panel.hide();\\n          }\\n        }\\n      }\\n    }\\n    function bindDocumentClickHandler() {\\n      if (!documentClickHandler) {\\n        documentClickHandler = function (e) {\\n          if (e.button === 2) {\\n            return;\\n          }\\n          skipOrHidePanels(e);\\n        };\\n        global$9(domGlobals.document).on('click touchstart', documentClickHandler);\\n      }\\n    }\\n    function bindDocumentScrollHandler() {\\n      if (!documentScrollHandler) {\\n        documentScrollHandler = function () {\\n          var i;\\n          i = visiblePanels.length;\\n          while (i--) {\\n            repositionPanel(visiblePanels[i]);\\n          }\\n        };\\n        global$9(domGlobals.window).on('scroll', documentScrollHandler);\\n      }\\n    }\\n    function bindWindowResizeHandler() {\\n      if (!windowResizeHandler) {\\n        var docElm_1 = domGlobals.document.documentElement;\\n        var clientWidth_1 = docElm_1.clientWidth, clientHeight_1 = docElm_1.clientHeight;\\n        windowResizeHandler = function () {\\n          if (!domGlobals.document.all || clientWidth_1 !== docElm_1.clientWidth || clientHeight_1 !== docElm_1.clientHeight) {\\n            clientWidth_1 = docElm_1.clientWidth;\\n            clientHeight_1 = docElm_1.clientHeight;\\n            FloatPanel.hideAll();\\n          }\\n        };\\n        global$9(domGlobals.window).on('resize', windowResizeHandler);\\n      }\\n    }\\n    function repositionPanel(panel) {\\n      var scrollY = funcs.getViewPort().y;\\n      function toggleFixedChildPanels(fixed, deltaY) {\\n        var parent;\\n        for (var i = 0; i < visiblePanels.length; i++) {\\n          if (visiblePanels[i] !== panel) {\\n            parent = visiblePanels[i].parent();\\n            while (parent && (parent = parent.parent())) {\\n              if (parent === panel) {\\n                visiblePanels[i].fixed(fixed).moveBy(0, deltaY).repaint();\\n              }\\n            }\\n          }\\n        }\\n      }\\n      if (panel.settings.autofix) {\\n        if (!panel.state.get('fixed')) {\\n          panel._autoFixY = panel.layoutRect().y;\\n          if (panel._autoFixY < scrollY) {\\n            panel.fixed(true).layoutRect({ y: 0 }).repaint();\\n            toggleFixedChildPanels(true, scrollY - panel._autoFixY);\\n          }\\n        } else {\\n          if (panel._autoFixY > scrollY) {\\n            panel.fixed(false).layoutRect({ y: panel._autoFixY }).repaint();\\n            toggleFixedChildPanels(false, panel._autoFixY - scrollY);\\n          }\\n        }\\n      }\\n    }\\n    function addRemove(add, ctrl) {\\n      var i, zIndex = FloatPanel.zIndex || 65535, topModal;\\n      if (add) {\\n        zOrder.push(ctrl);\\n      } else {\\n        i = zOrder.length;\\n        while (i--) {\\n          if (zOrder[i] === ctrl) {\\n            zOrder.splice(i, 1);\\n          }\\n        }\\n      }\\n      if (zOrder.length) {\\n        for (i = 0; i < zOrder.length; i++) {\\n          if (zOrder[i].modal) {\\n            zIndex++;\\n            topModal = zOrder[i];\\n          }\\n          zOrder[i].getEl().style.zIndex = zIndex;\\n          zOrder[i].zIndex = zIndex;\\n          zIndex++;\\n        }\\n      }\\n      var modalBlockEl = global$9('#' + ctrl.classPrefix + 'modal-block', ctrl.getContainerElm())[0];\\n      if (topModal) {\\n        global$9(modalBlockEl).css('z-index', topModal.zIndex - 1);\\n      } else if (modalBlockEl) {\\n        modalBlockEl.parentNode.removeChild(modalBlockEl);\\n        hasModal = false;\\n      }\\n      FloatPanel.currentZIndex = zIndex;\\n    }\\n    var FloatPanel = Panel.extend({\\n      Mixins: [\\n        Movable,\\n        Resizable\\n      ],\\n      init: function (settings) {\\n        var self = this;\\n        self._super(settings);\\n        self._eventsRoot = self;\\n        self.classes.add('floatpanel');\\n        if (settings.autohide) {\\n          bindDocumentClickHandler();\\n          bindWindowResizeHandler();\\n          visiblePanels.push(self);\\n        }\\n        if (settings.autofix) {\\n          bindDocumentScrollHandler();\\n          self.on('move', function () {\\n            repositionPanel(this);\\n          });\\n        }\\n        self.on('postrender show', function (e) {\\n          if (e.control === self) {\\n            var $modalBlockEl_1;\\n            var prefix_1 = self.classPrefix;\\n            if (self.modal && !hasModal) {\\n              $modalBlockEl_1 = global$9('#' + prefix_1 + 'modal-block', self.getContainerElm());\\n              if (!$modalBlockEl_1[0]) {\\n                $modalBlockEl_1 = global$9('<div id=\\\"' + prefix_1 + 'modal-block\\\" class=\\\"' + prefix_1 + 'reset ' + prefix_1 + 'fade\\\"></div>').appendTo(self.getContainerElm());\\n              }\\n              global$7.setTimeout(function () {\\n                $modalBlockEl_1.addClass(prefix_1 + 'in');\\n                global$9(self.getEl()).addClass(prefix_1 + 'in');\\n              });\\n              hasModal = true;\\n            }\\n            addRemove(true, self);\\n          }\\n        });\\n        self.on('show', function () {\\n          self.parents().each(function (ctrl) {\\n            if (ctrl.state.get('fixed')) {\\n              self.fixed(true);\\n              return false;\\n            }\\n          });\\n        });\\n        if (settings.popover) {\\n          self._preBodyHtml = '<div class=\\\"' + self.classPrefix + 'arrow\\\"></div>';\\n          self.classes.add('popover').add('bottom').add(self.isRtl() ? 'end' : 'start');\\n        }\\n        self.aria('label', settings.ariaLabel);\\n        self.aria('labelledby', self._id);\\n        self.aria('describedby', self.describedBy || self._id + '-none');\\n      },\\n      fixed: function (state) {\\n        var self = this;\\n        if (self.state.get('fixed') !== state) {\\n          if (self.state.get('rendered')) {\\n            var viewport = funcs.getViewPort();\\n            if (state) {\\n              self.layoutRect().y -= viewport.y;\\n            } else {\\n              self.layoutRect().y += viewport.y;\\n            }\\n          }\\n          self.classes.toggle('fixed', state);\\n          self.state.set('fixed', state);\\n        }\\n        return self;\\n      },\\n      show: function () {\\n        var self = this;\\n        var i;\\n        var state = self._super();\\n        i = visiblePanels.length;\\n        while (i--) {\\n          if (visiblePanels[i] === self) {\\n            break;\\n          }\\n        }\\n        if (i === -1) {\\n          visiblePanels.push(self);\\n        }\\n        return state;\\n      },\\n      hide: function () {\\n        removeVisiblePanel(this);\\n        addRemove(false, this);\\n        return this._super();\\n      },\\n      hideAll: function () {\\n        FloatPanel.hideAll();\\n      },\\n      close: function () {\\n        var self = this;\\n        if (!self.fire('close').isDefaultPrevented()) {\\n          self.remove();\\n          addRemove(false, self);\\n        }\\n        return self;\\n      },\\n      remove: function () {\\n        removeVisiblePanel(this);\\n        this._super();\\n      },\\n      postRender: function () {\\n        var self = this;\\n        if (self.settings.bodyRole) {\\n          this.getEl('body').setAttribute('role', self.settings.bodyRole);\\n        }\\n        return self._super();\\n      }\\n    });\\n    FloatPanel.hideAll = function () {\\n      var i = visiblePanels.length;\\n      while (i--) {\\n        var panel = visiblePanels[i];\\n        if (panel && panel.settings.autohide) {\\n          panel.hide();\\n          visiblePanels.splice(i, 1);\\n        }\\n      }\\n    };\\n    function removeVisiblePanel(panel) {\\n      var i;\\n      i = visiblePanels.length;\\n      while (i--) {\\n        if (visiblePanels[i] === panel) {\\n          visiblePanels.splice(i, 1);\\n        }\\n      }\\n      i = zOrder.length;\\n      while (i--) {\\n        if (zOrder[i] === panel) {\\n          zOrder.splice(i, 1);\\n        }\\n      }\\n    }\\n\\n    var isFixed$1 = function (inlineToolbarContainer, editor) {\\n      return !!(inlineToolbarContainer && !editor.settings.ui_container);\\n    };\\n    var render$1 = function (editor, theme, args) {\\n      var panel, inlineToolbarContainer;\\n      var DOM = global$3.DOM;\\n      var fixedToolbarContainer = getFixedToolbarContainer(editor);\\n      if (fixedToolbarContainer) {\\n        inlineToolbarContainer = DOM.select(fixedToolbarContainer)[0];\\n      }\\n      var reposition = function () {\\n        if (panel && panel.moveRel && panel.visible() && !panel._fixed) {\\n          var scrollContainer = editor.selection.getScrollContainer(), body = editor.getBody();\\n          var deltaX = 0, deltaY = 0;\\n          if (scrollContainer) {\\n            var bodyPos = DOM.getPos(body), scrollContainerPos = DOM.getPos(scrollContainer);\\n            deltaX = Math.max(0, scrollContainerPos.x - bodyPos.x);\\n            deltaY = Math.max(0, scrollContainerPos.y - bodyPos.y);\\n          }\\n          panel.fixed(false).moveRel(body, editor.rtl ? [\\n            'tr-br',\\n            'br-tr'\\n          ] : [\\n            'tl-bl',\\n            'bl-tl',\\n            'tr-br'\\n          ]).moveBy(deltaX, deltaY);\\n        }\\n      };\\n      var show = function () {\\n        if (panel) {\\n          panel.show();\\n          reposition();\\n          DOM.addClass(editor.getBody(), 'mce-edit-focus');\\n        }\\n      };\\n      var hide = function () {\\n        if (panel) {\\n          panel.hide();\\n          FloatPanel.hideAll();\\n          DOM.removeClass(editor.getBody(), 'mce-edit-focus');\\n        }\\n      };\\n      var render = function () {\\n        if (panel) {\\n          if (!panel.visible()) {\\n            show();\\n          }\\n          return;\\n        }\\n        panel = theme.panel = global$4.create({\\n          type: inlineToolbarContainer ? 'panel' : 'floatpanel',\\n          role: 'application',\\n          classes: 'tinymce tinymce-inline',\\n          layout: 'flex',\\n          direction: 'column',\\n          align: 'stretch',\\n          autohide: false,\\n          autofix: true,\\n          fixed: isFixed$1(inlineToolbarContainer, editor),\\n          border: 1,\\n          items: [\\n            hasMenubar(editor) === false ? null : {\\n              type: 'menubar',\\n              border: '0 0 1 0',\\n              items: Menubar.createMenuButtons(editor)\\n            },\\n            Toolbar.createToolbars(editor, getToolbarSize(editor))\\n          ]\\n        });\\n        UiContainer.setUiContainer(editor, panel);\\n        Events.fireBeforeRenderUI(editor);\\n        if (inlineToolbarContainer) {\\n          panel.renderTo(inlineToolbarContainer).reflow();\\n        } else {\\n          panel.renderTo().reflow();\\n        }\\n        A11y.addKeys(editor, panel);\\n        show();\\n        ContextToolbars.addContextualToolbars(editor);\\n        editor.on('nodeChange', reposition);\\n        editor.on('ResizeWindow', reposition);\\n        editor.on('activate', show);\\n        editor.on('deactivate', hide);\\n        editor.nodeChanged();\\n      };\\n      editor.settings.content_editable = true;\\n      editor.on('focus', function () {\\n        if (isSkinDisabled(editor) === false && args.skinUiCss) {\\n          DOM.styleSheetLoader.load(args.skinUiCss, render, render);\\n        } else {\\n          render();\\n        }\\n      });\\n      editor.on('blur hide', hide);\\n      editor.on('remove', function () {\\n        if (panel) {\\n          panel.remove();\\n          panel = null;\\n        }\\n      });\\n      if (isSkinDisabled(editor) === false && args.skinUiCss) {\\n        DOM.styleSheetLoader.load(args.skinUiCss, SkinLoaded.fireSkinLoaded(editor));\\n      } else {\\n        SkinLoaded.fireSkinLoaded(editor)();\\n      }\\n      return {};\\n    };\\n    var Inline = { render: render$1 };\\n\\n    function Throbber (elm, inline) {\\n      var self = this;\\n      var state;\\n      var classPrefix = Control$1.classPrefix;\\n      var timer;\\n      self.show = function (time, callback) {\\n        function render() {\\n          if (state) {\\n            global$9(elm).append('<div class=\\\"' + classPrefix + 'throbber' + (inline ? ' ' + classPrefix + 'throbber-inline' : '') + '\\\"></div>');\\n            if (callback) {\\n              callback();\\n            }\\n          }\\n        }\\n        self.hide();\\n        state = true;\\n        if (time) {\\n          timer = global$7.setTimeout(render, time);\\n        } else {\\n          render();\\n        }\\n        return self;\\n      };\\n      self.hide = function () {\\n        var child = elm.lastChild;\\n        global$7.clearTimeout(timer);\\n        if (child && child.className.indexOf('throbber') !== -1) {\\n          child.parentNode.removeChild(child);\\n        }\\n        state = false;\\n        return self;\\n      };\\n    }\\n\\n    var setup = function (editor, theme) {\\n      var throbber;\\n      editor.on('ProgressState', function (e) {\\n        throbber = throbber || new Throbber(theme.panel.getEl('body'));\\n        if (e.state) {\\n          throbber.show(e.time);\\n        } else {\\n          throbber.hide();\\n        }\\n      });\\n    };\\n    var ProgressState = { setup: setup };\\n\\n    var renderUI = function (editor, theme, args) {\\n      var skinUrl = getSkinUrl(editor);\\n      if (skinUrl) {\\n        args.skinUiCss = skinUrl + '/skin.min.css';\\n        editor.contentCSS.push(skinUrl + '/content' + (editor.inline ? '.inline' : '') + '.min.css');\\n      }\\n      ProgressState.setup(editor, theme);\\n      return isInline(editor) ? Inline.render(editor, theme, args) : Iframe.render(editor, theme, args);\\n    };\\n    var Render = { renderUI: renderUI };\\n\\n    var Tooltip = Control$1.extend({\\n      Mixins: [Movable],\\n      Defaults: { classes: 'widget tooltip tooltip-n' },\\n      renderHtml: function () {\\n        var self = this, prefix = self.classPrefix;\\n        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>';\\n      },\\n      bindStates: function () {\\n        var self = this;\\n        self.state.on('change:text', function (e) {\\n          self.getEl().lastChild.innerHTML = self.encode(e.value);\\n        });\\n        return self._super();\\n      },\\n      repaint: function () {\\n        var self = this;\\n        var style, rect;\\n        style = self.getEl().style;\\n        rect = self._layoutRect;\\n        style.left = rect.x + 'px';\\n        style.top = rect.y + 'px';\\n        style.zIndex = 65535 + 65535;\\n      }\\n    });\\n\\n    var Widget = Control$1.extend({\\n      init: function (settings) {\\n        var self = this;\\n        self._super(settings);\\n        settings = self.settings;\\n        self.canFocus = true;\\n        if (settings.tooltip && Widget.tooltips !== false) {\\n          self.on('mouseenter', function (e) {\\n            var tooltip = self.tooltip().moveTo(-65535);\\n            if (e.control === self) {\\n              var rel = tooltip.text(settings.tooltip).show().testMoveRel(self.getEl(), [\\n                'bc-tc',\\n                'bc-tl',\\n                'bc-tr'\\n              ]);\\n              tooltip.classes.toggle('tooltip-n', rel === 'bc-tc');\\n              tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl');\\n              tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr');\\n              tooltip.moveRel(self.getEl(), rel);\\n            } else {\\n              tooltip.hide();\\n            }\\n          });\\n          self.on('mouseleave mousedown click', function () {\\n            self.tooltip().remove();\\n            self._tooltip = null;\\n          });\\n        }\\n        self.aria('label', settings.ariaLabel || settings.tooltip);\\n      },\\n      tooltip: function () {\\n        if (!this._tooltip) {\\n          this._tooltip = new Tooltip({ type: 'tooltip' });\\n          UiContainer.inheritUiContainer(this, this._tooltip);\\n          this._tooltip.renderTo();\\n        }\\n        return this._tooltip;\\n      },\\n      postRender: function () {\\n        var self = this, settings = self.settings;\\n        self._super();\\n        if (!self.parent() && (settings.width || settings.height)) {\\n          self.initLayoutRect();\\n          self.repaint();\\n        }\\n        if (settings.autofocus) {\\n          self.focus();\\n        }\\n      },\\n      bindStates: function () {\\n        var self = this;\\n        function disable(state) {\\n          self.aria('disabled', state);\\n          self.classes.toggle('disabled', state);\\n        }\\n        function active(state) {\\n          self.aria('pressed', state);\\n          self.classes.toggle('active', state);\\n        }\\n        self.state.on('change:disabled', function (e) {\\n          disable(e.value);\\n        });\\n        self.state.on('change:active', function (e) {\\n          active(e.value);\\n        });\\n        if (self.state.get('disabled')) {\\n          disable(true);\\n        }\\n        if (self.state.get('active')) {\\n          active(true);\\n        }\\n        return self._super();\\n      },\\n      remove: function () {\\n        this._super();\\n        if (this._tooltip) {\\n          this._tooltip.remove();\\n          this._tooltip = null;\\n        }\\n      }\\n    });\\n\\n    var Progress = Widget.extend({\\n      Defaults: { value: 0 },\\n      init: function (settings) {\\n        var self = this;\\n        self._super(settings);\\n        self.classes.add('progress');\\n        if (!self.settings.filter) {\\n          self.settings.filter = function (value) {\\n            return Math.round(value);\\n          };\\n        }\\n      },\\n      renderHtml: function () {\\n        var self = this, id = self._id, prefix = this.classPrefix;\\n        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>';\\n      },\\n      postRender: function () {\\n        var self = this;\\n        self._super();\\n        self.value(self.settings.value);\\n        return self;\\n      },\\n      bindStates: function () {\\n        var self = this;\\n        function setValue(value) {\\n          value = self.settings.filter(value);\\n          self.getEl().lastChild.innerHTML = value + '%';\\n          self.getEl().firstChild.firstChild.style.width = value + '%';\\n        }\\n        self.state.on('change:value', function (e) {\\n          setValue(e.value);\\n        });\\n        setValue(self.state.get('value'));\\n        return self._super();\\n      }\\n    });\\n\\n    var updateLiveRegion = function (ctx, text) {\\n      ctx.getEl().lastChild.textContent = text + (ctx.progressBar ? ' ' + ctx.progressBar.value() + '%' : '');\\n    };\\n    var Notification = Control$1.extend({\\n      Mixins: [Movable],\\n      Defaults: { classes: 'widget notification' },\\n      init: function (settings) {\\n        var self = this;\\n        self._super(settings);\\n        self.maxWidth = settings.maxWidth;\\n        if (settings.text) {\\n          self.text(settings.text);\\n        }\\n        if (settings.icon) {\\n          self.icon = settings.icon;\\n        }\\n        if (settings.color) {\\n          self.color = settings.color;\\n        }\\n        if (settings.type) {\\n          self.classes.add('notification-' + settings.type);\\n        }\\n        if (settings.timeout && (settings.timeout < 0 || settings.timeout > 0) && !settings.closeButton) {\\n          self.closeButton = false;\\n        } else {\\n          self.classes.add('has-close');\\n          self.closeButton = true;\\n        }\\n        if (settings.progressBar) {\\n          self.progressBar = new Progress();\\n        }\\n        self.on('click', function (e) {\\n          if (e.target.className.indexOf(self.classPrefix + 'close') !== -1) {\\n            self.close();\\n          }\\n        });\\n      },\\n      renderHtml: function () {\\n        var self = this;\\n        var prefix = self.classPrefix;\\n        var icon = '', closeButton = '', progressBar = '', notificationStyle = '';\\n        if (self.icon) {\\n          icon = '<i class=\\\"' + prefix + 'ico' + ' ' + prefix + 'i-' + self.icon + '\\\"></i>';\\n        }\\n        notificationStyle = ' style=\\\"max-width: ' + self.maxWidth + 'px;' + (self.color ? 'background-color: ' + self.color + ';\\\"' : '\\\"');\\n        if (self.closeButton) {\\n          closeButton = '<button type=\\\"button\\\" class=\\\"' + prefix + 'close\\\" aria-hidden=\\\"true\\\">\\\\xD7</button>';\\n        }\\n        if (self.progressBar) {\\n          progressBar = self.progressBar.renderHtml();\\n        }\\n        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>';\\n      },\\n      postRender: function () {\\n        var self = this;\\n        global$7.setTimeout(function () {\\n          self.$el.addClass(self.classPrefix + 'in');\\n          updateLiveRegion(self, self.state.get('text'));\\n        }, 100);\\n        return self._super();\\n      },\\n      bindStates: function () {\\n        var self = this;\\n        self.state.on('change:text', function (e) {\\n          self.getEl().firstChild.innerHTML = e.value;\\n          updateLiveRegion(self, e.value);\\n        });\\n        if (self.progressBar) {\\n          self.progressBar.bindStates();\\n          self.progressBar.state.on('change:value', function (e) {\\n            updateLiveRegion(self, self.state.get('text'));\\n          });\\n        }\\n        return self._super();\\n      },\\n      close: function () {\\n        var self = this;\\n        if (!self.fire('close').isDefaultPrevented()) {\\n          self.remove();\\n        }\\n        return self;\\n      },\\n      repaint: function () {\\n        var self = this;\\n        var style, rect;\\n        style = self.getEl().style;\\n        rect = self._layoutRect;\\n        style.left = rect.x + 'px';\\n        style.top = rect.y + 'px';\\n        style.zIndex = 65535 - 1;\\n      }\\n    });\\n\\n    function NotificationManagerImpl (editor) {\\n      var getEditorContainer = function (editor) {\\n        return editor.inline ? editor.getElement() : editor.getContentAreaContainer();\\n      };\\n      var getContainerWidth = function () {\\n        var container = getEditorContainer(editor);\\n        return funcs.getSize(container).width;\\n      };\\n      var prePositionNotifications = function (notifications) {\\n        each(notifications, function (notification) {\\n          notification.moveTo(0, 0);\\n        });\\n      };\\n      var positionNotifications = function (notifications) {\\n        if (notifications.length > 0) {\\n          var firstItem = notifications.slice(0, 1)[0];\\n          var container = getEditorContainer(editor);\\n          firstItem.moveRel(container, 'tc-tc');\\n          each(notifications, function (notification, index) {\\n            if (index > 0) {\\n              notification.moveRel(notifications[index - 1].getEl(), 'bc-tc');\\n            }\\n          });\\n        }\\n      };\\n      var reposition = function (notifications) {\\n        prePositionNotifications(notifications);\\n        positionNotifications(notifications);\\n      };\\n      var open = function (args, closeCallback) {\\n        var extendedArgs = global$2.extend(args, { maxWidth: getContainerWidth() });\\n        var notif = new Notification(extendedArgs);\\n        notif.args = extendedArgs;\\n        if (extendedArgs.timeout > 0) {\\n          notif.timer = setTimeout(function () {\\n            notif.close();\\n            closeCallback();\\n          }, extendedArgs.timeout);\\n        }\\n        notif.on('close', function () {\\n          closeCallback();\\n        });\\n        notif.renderTo();\\n        return notif;\\n      };\\n      var close = function (notification) {\\n        notification.close();\\n      };\\n      var getArgs = function (notification) {\\n        return notification.args;\\n      };\\n      return {\\n        open: open,\\n        close: close,\\n        reposition: reposition,\\n        getArgs: getArgs\\n      };\\n    }\\n\\n    var windows = [];\\n    var oldMetaValue = '';\\n    function toggleFullScreenState(state) {\\n      var noScaleMetaValue = 'width=device-width,initial-scale=1.0,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0';\\n      var viewport = global$9('meta[name=viewport]')[0], contentValue;\\n      if (global$8.overrideViewPort === false) {\\n        return;\\n      }\\n      if (!viewport) {\\n        viewport = domGlobals.document.createElement('meta');\\n        viewport.setAttribute('name', 'viewport');\\n        domGlobals.document.getElementsByTagName('head')[0].appendChild(viewport);\\n      }\\n      contentValue = viewport.getAttribute('content');\\n      if (contentValue && typeof oldMetaValue !== 'undefined') {\\n        oldMetaValue = contentValue;\\n      }\\n      viewport.setAttribute('content', state ? noScaleMetaValue : oldMetaValue);\\n    }\\n    function toggleBodyFullScreenClasses(classPrefix, state) {\\n      if (checkFullscreenWindows() && state === false) {\\n        global$9([\\n          domGlobals.document.documentElement,\\n          domGlobals.document.body\\n        ]).removeClass(classPrefix + 'fullscreen');\\n      }\\n    }\\n    function checkFullscreenWindows() {\\n      for (var i = 0; i < windows.length; i++) {\\n        if (windows[i]._fullscreen) {\\n          return true;\\n        }\\n      }\\n      return false;\\n    }\\n    function handleWindowResize() {\\n      if (!global$8.desktop) {\\n        var lastSize_1 = {\\n          w: domGlobals.window.innerWidth,\\n          h: domGlobals.window.innerHeight\\n        };\\n        global$7.setInterval(function () {\\n          var w = domGlobals.window.innerWidth, h = domGlobals.window.innerHeight;\\n          if (lastSize_1.w !== w || lastSize_1.h !== h) {\\n            lastSize_1 = {\\n              w: w,\\n              h: h\\n            };\\n            global$9(domGlobals.window).trigger('resize');\\n          }\\n        }, 100);\\n      }\\n      function reposition() {\\n        var i;\\n        var rect = funcs.getWindowSize();\\n        var layoutRect;\\n        for (i = 0; i < windows.length; i++) {\\n          layoutRect = windows[i].layoutRect();\\n          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));\\n        }\\n      }\\n      global$9(domGlobals.window).on('resize', reposition);\\n    }\\n    var Window = FloatPanel.extend({\\n      modal: true,\\n      Defaults: {\\n        border: 1,\\n        layout: 'flex',\\n        containerCls: 'panel',\\n        role: 'dialog',\\n        callbacks: {\\n          submit: function () {\\n            this.fire('submit', { data: this.toJSON() });\\n          },\\n          close: function () {\\n            this.close();\\n          }\\n        }\\n      },\\n      init: function (settings) {\\n        var self = this;\\n        self._super(settings);\\n        if (self.isRtl()) {\\n          self.classes.add('rtl');\\n        }\\n        self.classes.add('window');\\n        self.bodyClasses.add('window-body');\\n        self.state.set('fixed', true);\\n        if (settings.buttons) {\\n          self.statusbar = new Panel({\\n            layout: 'flex',\\n            border: '1 0 0 0',\\n            spacing: 3,\\n            padding: 10,\\n            align: 'center',\\n            pack: self.isRtl() ? 'start' : 'end',\\n            defaults: { type: 'button' },\\n            items: settings.buttons\\n          });\\n          self.statusbar.classes.add('foot');\\n          self.statusbar.parent(self);\\n        }\\n        self.on('click', function (e) {\\n          var closeClass = self.classPrefix + 'close';\\n          if (funcs.hasClass(e.target, closeClass) || funcs.hasClass(e.target.parentNode, closeClass)) {\\n            self.close();\\n          }\\n        });\\n        self.on('cancel', function () {\\n          self.close();\\n        });\\n        self.on('move', function (e) {\\n          if (e.control === self) {\\n            FloatPanel.hideAll();\\n          }\\n        });\\n        self.aria('describedby', self.describedBy || self._id + '-none');\\n        self.aria('label', settings.title);\\n        self._fullscreen = false;\\n      },\\n      recalc: function () {\\n        var self = this;\\n        var statusbar = self.statusbar;\\n        var layoutRect, width, x, needsRecalc;\\n        if (self._fullscreen) {\\n          self.layoutRect(funcs.getWindowSize());\\n          self.layoutRect().contentH = self.layoutRect().innerH;\\n        }\\n        self._super();\\n        layoutRect = self.layoutRect();\\n        if (self.settings.title && !self._fullscreen) {\\n          width = layoutRect.headerW;\\n          if (width > layoutRect.w) {\\n            x = layoutRect.x - Math.max(0, width / 2);\\n            self.layoutRect({\\n              w: width,\\n              x: x\\n            });\\n            needsRecalc = true;\\n          }\\n        }\\n        if (statusbar) {\\n          statusbar.layoutRect({ w: self.layoutRect().innerW }).recalc();\\n          width = statusbar.layoutRect().minW + layoutRect.deltaW;\\n          if (width > layoutRect.w) {\\n            x = layoutRect.x - Math.max(0, width - layoutRect.w);\\n            self.layoutRect({\\n              w: width,\\n              x: x\\n            });\\n            needsRecalc = true;\\n          }\\n        }\\n        if (needsRecalc) {\\n          self.recalc();\\n        }\\n      },\\n      initLayoutRect: function () {\\n        var self = this;\\n        var layoutRect = self._super();\\n        var deltaH = 0, headEl;\\n        if (self.settings.title && !self._fullscreen) {\\n          headEl = self.getEl('head');\\n          var size = funcs.getSize(headEl);\\n          layoutRect.headerW = size.width;\\n          layoutRect.headerH = size.height;\\n          deltaH += layoutRect.headerH;\\n        }\\n        if (self.statusbar) {\\n          deltaH += self.statusbar.layoutRect().h;\\n        }\\n        layoutRect.deltaH += deltaH;\\n        layoutRect.minH += deltaH;\\n        layoutRect.h += deltaH;\\n        var rect = funcs.getWindowSize();\\n        layoutRect.x = self.settings.x || Math.max(0, rect.w / 2 - layoutRect.w / 2);\\n        layoutRect.y = self.settings.y || Math.max(0, rect.h / 2 - layoutRect.h / 2);\\n        return layoutRect;\\n      },\\n      renderHtml: function () {\\n        var self = this, layout = self._layout, id = self._id, prefix = self.classPrefix;\\n        var settings = self.settings;\\n        var headerHtml = '', footerHtml = '', html = settings.html;\\n        self.preRender();\\n        layout.preRender(self);\\n        if (settings.title) {\\n          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>';\\n        }\\n        if (settings.url) {\\n          html = '<iframe src=\\\"' + settings.url + '\\\" tabindex=\\\"-1\\\"></iframe>';\\n        }\\n        if (typeof html === 'undefined') {\\n          html = layout.renderHtml(self);\\n        }\\n        if (self.statusbar) {\\n          footerHtml = self.statusbar.renderHtml();\\n        }\\n        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>';\\n      },\\n      fullscreen: function (state) {\\n        var self = this;\\n        var documentElement = domGlobals.document.documentElement;\\n        var slowRendering;\\n        var prefix = self.classPrefix;\\n        var layoutRect;\\n        if (state !== self._fullscreen) {\\n          global$9(domGlobals.window).on('resize', function () {\\n            var time;\\n            if (self._fullscreen) {\\n              if (!slowRendering) {\\n                time = new Date().getTime();\\n                var rect = funcs.getWindowSize();\\n                self.moveTo(0, 0).resizeTo(rect.w, rect.h);\\n                if (new Date().getTime() - time > 50) {\\n                  slowRendering = true;\\n                }\\n              } else {\\n                if (!self._timer) {\\n                  self._timer = global$7.setTimeout(function () {\\n                    var rect = funcs.getWindowSize();\\n                    self.moveTo(0, 0).resizeTo(rect.w, rect.h);\\n                    self._timer = 0;\\n                  }, 50);\\n                }\\n              }\\n            }\\n          });\\n          layoutRect = self.layoutRect();\\n          self._fullscreen = state;\\n          if (!state) {\\n            self.borderBox = BoxUtils.parseBox(self.settings.border);\\n            self.getEl('head').style.display = '';\\n            layoutRect.deltaH += layoutRect.headerH;\\n            global$9([\\n              documentElement,\\n              domGlobals.document.body\\n            ]).removeClass(prefix + 'fullscreen');\\n            self.classes.remove('fullscreen');\\n            self.moveTo(self._initial.x, self._initial.y).resizeTo(self._initial.w, self._initial.h);\\n          } else {\\n            self._initial = {\\n              x: layoutRect.x,\\n              y: layoutRect.y,\\n              w: layoutRect.w,\\n              h: layoutRect.h\\n            };\\n            self.borderBox = BoxUtils.parseBox('0');\\n            self.getEl('head').style.display = 'none';\\n            layoutRect.deltaH -= layoutRect.headerH + 2;\\n            global$9([\\n              documentElement,\\n              domGlobals.document.body\\n            ]).addClass(prefix + 'fullscreen');\\n            self.classes.add('fullscreen');\\n            var rect = funcs.getWindowSize();\\n            self.moveTo(0, 0).resizeTo(rect.w, rect.h);\\n          }\\n        }\\n        return self.reflow();\\n      },\\n      postRender: function () {\\n        var self = this;\\n        var startPos;\\n        setTimeout(function () {\\n          self.classes.add('in');\\n          self.fire('open');\\n        }, 0);\\n        self._super();\\n        if (self.statusbar) {\\n          self.statusbar.postRender();\\n        }\\n        self.focus();\\n        this.dragHelper = new DragHelper(self._id + '-dragh', {\\n          start: function () {\\n            startPos = {\\n              x: self.layoutRect().x,\\n              y: self.layoutRect().y\\n            };\\n          },\\n          drag: function (e) {\\n            self.moveTo(startPos.x + e.deltaX, startPos.y + e.deltaY);\\n          }\\n        });\\n        self.on('submit', function (e) {\\n          if (!e.isDefaultPrevented()) {\\n            self.close();\\n          }\\n        });\\n        windows.push(self);\\n        toggleFullScreenState(true);\\n      },\\n      submit: function () {\\n        return this.fire('submit', { data: this.toJSON() });\\n      },\\n      remove: function () {\\n        var self = this;\\n        var i;\\n        self.dragHelper.destroy();\\n        self._super();\\n        if (self.statusbar) {\\n          this.statusbar.remove();\\n        }\\n        toggleBodyFullScreenClasses(self.classPrefix, false);\\n        i = windows.length;\\n        while (i--) {\\n          if (windows[i] === self) {\\n            windows.splice(i, 1);\\n          }\\n        }\\n        toggleFullScreenState(windows.length > 0);\\n      },\\n      getContentWindow: function () {\\n        var ifr = this.getEl().getElementsByTagName('iframe')[0];\\n        return ifr ? ifr.contentWindow : null;\\n      }\\n    });\\n    handleWindowResize();\\n\\n    var MessageBox = Window.extend({\\n      init: function (settings) {\\n        settings = {\\n          border: 1,\\n          padding: 20,\\n          layout: 'flex',\\n          pack: 'center',\\n          align: 'center',\\n          containerCls: 'panel',\\n          autoScroll: true,\\n          buttons: {\\n            type: 'button',\\n            text: 'Ok',\\n            action: 'ok'\\n          },\\n          items: {\\n            type: 'label',\\n            multiline: true,\\n            maxWidth: 500,\\n            maxHeight: 200\\n          }\\n        };\\n        this._super(settings);\\n      },\\n      Statics: {\\n        OK: 1,\\n        OK_CANCEL: 2,\\n        YES_NO: 3,\\n        YES_NO_CANCEL: 4,\\n        msgBox: function (settings) {\\n          var buttons;\\n          var callback = settings.callback || function () {\\n          };\\n          function createButton(text, status, primary) {\\n            return {\\n              type: 'button',\\n              text: text,\\n              subtype: primary ? 'primary' : '',\\n              onClick: function (e) {\\n                e.control.parents()[1].close();\\n                callback(status);\\n              }\\n            };\\n          }\\n          switch (settings.buttons) {\\n          case MessageBox.OK_CANCEL:\\n            buttons = [\\n              createButton('Ok', true, true),\\n              createButton('Cancel', false)\\n            ];\\n            break;\\n          case MessageBox.YES_NO:\\n          case MessageBox.YES_NO_CANCEL:\\n            buttons = [\\n              createButton('Yes', 1, true),\\n              createButton('No', 0)\\n            ];\\n            if (settings.buttons === MessageBox.YES_NO_CANCEL) {\\n              buttons.push(createButton('Cancel', -1));\\n            }\\n            break;\\n          default:\\n            buttons = [createButton('Ok', true, true)];\\n            break;\\n          }\\n          return new Window({\\n            padding: 20,\\n            x: settings.x,\\n            y: settings.y,\\n            minWidth: 300,\\n            minHeight: 100,\\n            layout: 'flex',\\n            pack: 'center',\\n            align: 'center',\\n            buttons: buttons,\\n            title: settings.title,\\n            role: 'alertdialog',\\n            items: {\\n              type: 'label',\\n              multiline: true,\\n              maxWidth: 500,\\n              maxHeight: 200,\\n              text: settings.text\\n            },\\n            onPostRender: function () {\\n              this.aria('describedby', this.items()[0]._id);\\n            },\\n            onClose: settings.onClose,\\n            onCancel: function () {\\n              callback(false);\\n            }\\n          }).renderTo(domGlobals.document.body).reflow();\\n        },\\n        alert: function (settings, callback) {\\n          if (typeof settings === 'string') {\\n            settings = { text: settings };\\n          }\\n          settings.callback = callback;\\n          return MessageBox.msgBox(settings);\\n        },\\n        confirm: function (settings, callback) {\\n          if (typeof settings === 'string') {\\n            settings = { text: settings };\\n          }\\n          settings.callback = callback;\\n          settings.buttons = MessageBox.OK_CANCEL;\\n          return MessageBox.msgBox(settings);\\n        }\\n      }\\n    });\\n\\n    function WindowManagerImpl (editor) {\\n      var open = function (args, params, closeCallback) {\\n        var win;\\n        args.title = args.title || ' ';\\n        args.url = args.url || args.file;\\n        if (args.url) {\\n          args.width = parseInt(args.width || 320, 10);\\n          args.height = parseInt(args.height || 240, 10);\\n        }\\n        if (args.body) {\\n          args.items = {\\n            defaults: args.defaults,\\n            type: args.bodyType || 'form',\\n            items: args.body,\\n            data: args.data,\\n            callbacks: args.commands\\n          };\\n        }\\n        if (!args.url && !args.buttons) {\\n          args.buttons = [\\n            {\\n              text: 'Ok',\\n              subtype: 'primary',\\n              onclick: function () {\\n                win.find('form')[0].submit();\\n              }\\n            },\\n            {\\n              text: 'Cancel',\\n              onclick: function () {\\n                win.close();\\n              }\\n            }\\n          ];\\n        }\\n        win = new Window(args);\\n        win.on('close', function () {\\n          closeCallback(win);\\n        });\\n        if (args.data) {\\n          win.on('postRender', function () {\\n            this.find('*').each(function (ctrl) {\\n              var name = ctrl.name();\\n              if (name in args.data) {\\n                ctrl.value(args.data[name]);\\n              }\\n            });\\n          });\\n        }\\n        win.features = args || {};\\n        win.params = params || {};\\n        win = win.renderTo(domGlobals.document.body).reflow();\\n        return win;\\n      };\\n      var alert = function (message, choiceCallback, closeCallback) {\\n        var win;\\n        win = MessageBox.alert(message, function () {\\n          choiceCallback();\\n        });\\n        win.on('close', function () {\\n          closeCallback(win);\\n        });\\n        return win;\\n      };\\n      var confirm = function (message, choiceCallback, closeCallback) {\\n        var win;\\n        win = MessageBox.confirm(message, function (state) {\\n          choiceCallback(state);\\n        });\\n        win.on('close', function () {\\n          closeCallback(win);\\n        });\\n        return win;\\n      };\\n      var close = function (window) {\\n        window.close();\\n      };\\n      var getParams = function (window) {\\n        return window.params;\\n      };\\n      var setParams = function (window, params) {\\n        window.params = params;\\n      };\\n      return {\\n        open: open,\\n        alert: alert,\\n        confirm: confirm,\\n        close: close,\\n        getParams: getParams,\\n        setParams: setParams\\n      };\\n    }\\n\\n    var get = function (editor) {\\n      var renderUI = function (args) {\\n        return Render.renderUI(editor, this, args);\\n      };\\n      var resizeTo = function (w, h) {\\n        return Resize.resizeTo(editor, w, h);\\n      };\\n      var resizeBy = function (dw, dh) {\\n        return Resize.resizeBy(editor, dw, dh);\\n      };\\n      var getNotificationManagerImpl = function () {\\n        return NotificationManagerImpl(editor);\\n      };\\n      var getWindowManagerImpl = function () {\\n        return WindowManagerImpl();\\n      };\\n      return {\\n        renderUI: renderUI,\\n        resizeTo: resizeTo,\\n        resizeBy: resizeBy,\\n        getNotificationManagerImpl: getNotificationManagerImpl,\\n        getWindowManagerImpl: getWindowManagerImpl\\n      };\\n    };\\n    var ThemeApi = { get: get };\\n\\n    var Layout = global$a.extend({\\n      Defaults: {\\n        firstControlClass: 'first',\\n        lastControlClass: 'last'\\n      },\\n      init: function (settings) {\\n        this.settings = global$2.extend({}, this.Defaults, settings);\\n      },\\n      preRender: function (container) {\\n        container.bodyClasses.add(this.settings.containerClass);\\n      },\\n      applyClasses: function (items) {\\n        var self = this;\\n        var settings = self.settings;\\n        var firstClass, lastClass, firstItem, lastItem;\\n        firstClass = settings.firstControlClass;\\n        lastClass = settings.lastControlClass;\\n        items.each(function (item) {\\n          item.classes.remove(firstClass).remove(lastClass).add(settings.controlClass);\\n          if (item.visible()) {\\n            if (!firstItem) {\\n              firstItem = item;\\n            }\\n            lastItem = item;\\n          }\\n        });\\n        if (firstItem) {\\n          firstItem.classes.add(firstClass);\\n        }\\n        if (lastItem) {\\n          lastItem.classes.add(lastClass);\\n        }\\n      },\\n      renderHtml: function (container) {\\n        var self = this;\\n        var html = '';\\n        self.applyClasses(container.items());\\n        container.items().each(function (item) {\\n          html += item.renderHtml();\\n        });\\n        return html;\\n      },\\n      recalc: function () {\\n      },\\n      postRender: function () {\\n      },\\n      isNative: function () {\\n        return false;\\n      }\\n    });\\n\\n    var AbsoluteLayout = Layout.extend({\\n      Defaults: {\\n        containerClass: 'abs-layout',\\n        controlClass: 'abs-layout-item'\\n      },\\n      recalc: function (container) {\\n        container.items().filter(':visible').each(function (ctrl) {\\n          var settings = ctrl.settings;\\n          ctrl.layoutRect({\\n            x: settings.x,\\n            y: settings.y,\\n            w: settings.w,\\n            h: settings.h\\n          });\\n          if (ctrl.recalc) {\\n            ctrl.recalc();\\n          }\\n        });\\n      },\\n      renderHtml: function (container) {\\n        return '<div id=\\\"' + container._id + '-absend\\\" class=\\\"' + container.classPrefix + 'abs-end\\\"></div>' + this._super(container);\\n      }\\n    });\\n\\n    var Button = Widget.extend({\\n      Defaults: {\\n        classes: 'widget btn',\\n        role: 'button'\\n      },\\n      init: function (settings) {\\n        var self = this;\\n        var size;\\n        self._super(settings);\\n        settings = self.settings;\\n        size = self.settings.size;\\n        self.on('click mousedown', function (e) {\\n          e.preventDefault();\\n        });\\n        self.on('touchstart', function (e) {\\n          self.fire('click', e);\\n          e.preventDefault();\\n        });\\n        if (settings.subtype) {\\n          self.classes.add(settings.subtype);\\n        }\\n        if (size) {\\n          self.classes.add('btn-' + size);\\n        }\\n        if (settings.icon) {\\n          self.icon(settings.icon);\\n        }\\n      },\\n      icon: function (icon) {\\n        if (!arguments.length) {\\n          return this.state.get('icon');\\n        }\\n        this.state.set('icon', icon);\\n        return this;\\n      },\\n      repaint: function () {\\n        var btnElm = this.getEl().firstChild;\\n        var btnStyle;\\n        if (btnElm) {\\n          btnStyle = btnElm.style;\\n          btnStyle.width = btnStyle.height = '100%';\\n        }\\n        this._super();\\n      },\\n      renderHtml: function () {\\n        var self = this, id = self._id, prefix = self.classPrefix;\\n        var icon = self.state.get('icon'), image;\\n        var text = self.state.get('text');\\n        var textHtml = '';\\n        var ariaPressed;\\n        var settings = self.settings;\\n        image = settings.image;\\n        if (image) {\\n          icon = 'none';\\n          if (typeof image !== 'string') {\\n            image = domGlobals.window.getSelection ? image[0] : image[1];\\n          }\\n          image = ' style=\\\"background-image: url(\\\\'' + image + '\\\\')\\\"';\\n        } else {\\n          image = '';\\n        }\\n        if (text) {\\n          self.classes.add('btn-has-text');\\n          textHtml = '<span class=\\\"' + prefix + 'txt\\\">' + self.encode(text) + '</span>';\\n        }\\n        icon = icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';\\n        ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed=\\\"' + settings.active + '\\\"' : '';\\n        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>';\\n      },\\n      bindStates: function () {\\n        var self = this, $ = self.$, textCls = self.classPrefix + 'txt';\\n        function setButtonText(text) {\\n          var $span = $('span.' + textCls, self.getEl());\\n          if (text) {\\n            if (!$span[0]) {\\n              $('button:first', self.getEl()).append('<span class=\\\"' + textCls + '\\\"></span>');\\n              $span = $('span.' + textCls, self.getEl());\\n            }\\n            $span.html(self.encode(text));\\n          } else {\\n            $span.remove();\\n          }\\n          self.classes.toggle('btn-has-text', !!text);\\n        }\\n        self.state.on('change:text', function (e) {\\n          setButtonText(e.value);\\n        });\\n        self.state.on('change:icon', function (e) {\\n          var icon = e.value;\\n          var prefix = self.classPrefix;\\n          self.settings.icon = icon;\\n          icon = icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';\\n          var btnElm = self.getEl().firstChild;\\n          var iconElm = btnElm.getElementsByTagName('i')[0];\\n          if (icon) {\\n            if (!iconElm || iconElm !== btnElm.firstChild) {\\n              iconElm = domGlobals.document.createElement('i');\\n              btnElm.insertBefore(iconElm, btnElm.firstChild);\\n            }\\n            iconElm.className = icon;\\n          } else if (iconElm) {\\n            btnElm.removeChild(iconElm);\\n          }\\n          setButtonText(self.state.get('text'));\\n        });\\n        return self._super();\\n      }\\n    });\\n\\n    var BrowseButton = Button.extend({\\n      init: function (settings) {\\n        var self = this;\\n        settings = global$2.extend({\\n          text: 'Browse...',\\n          multiple: false,\\n          accept: null\\n        }, settings);\\n        self._super(settings);\\n        self.classes.add('browsebutton');\\n        if (settings.multiple) {\\n          self.classes.add('multiple');\\n        }\\n      },\\n      postRender: function () {\\n        var self = this;\\n        var input = funcs.create('input', {\\n          type: 'file',\\n          id: self._id + '-browse',\\n          accept: self.settings.accept\\n        });\\n        self._super();\\n        global$9(input).on('change', function (e) {\\n          var files = e.target.files;\\n          self.value = function () {\\n            if (!files.length) {\\n              return null;\\n            } else if (self.settings.multiple) {\\n              return files;\\n            } else {\\n              return files[0];\\n            }\\n          };\\n          e.preventDefault();\\n          if (files.length) {\\n            self.fire('change', e);\\n          }\\n        });\\n        global$9(input).on('click', function (e) {\\n          e.stopPropagation();\\n        });\\n        global$9(self.getEl('button')).on('click touchstart', function (e) {\\n          e.stopPropagation();\\n          input.click();\\n          e.preventDefault();\\n        });\\n        self.getEl().appendChild(input);\\n      },\\n      remove: function () {\\n        global$9(this.getEl('button')).off();\\n        global$9(this.getEl('input')).off();\\n        this._super();\\n      }\\n    });\\n\\n    var ButtonGroup = Container.extend({\\n      Defaults: {\\n        defaultType: 'button',\\n        role: 'group'\\n      },\\n      renderHtml: function () {\\n        var self = this, layout = self._layout;\\n        self.classes.add('btn-group');\\n        self.preRender();\\n        layout.preRender(self);\\n        return '<div id=\\\"' + self._id + '\\\" class=\\\"' + self.classes + '\\\">' + '<div id=\\\"' + self._id + '-body\\\">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</div>';\\n      }\\n    });\\n\\n    var Checkbox = Widget.extend({\\n      Defaults: {\\n        classes: 'checkbox',\\n        role: 'checkbox',\\n        checked: false\\n      },\\n      init: function (settings) {\\n        var self = this;\\n        self._super(settings);\\n        self.on('click mousedown', function (e) {\\n          e.preventDefault();\\n        });\\n        self.on('click', function (e) {\\n          e.preventDefault();\\n          if (!self.disabled()) {\\n            self.checked(!self.checked());\\n          }\\n        });\\n        self.checked(self.settings.checked);\\n      },\\n      checked: function (state) {\\n        if (!arguments.length) {\\n          return this.state.get('checked');\\n        }\\n        this.state.set('checked', state);\\n        return this;\\n      },\\n      value: function (state) {\\n        if (!arguments.length) {\\n          return this.checked();\\n        }\\n        return this.checked(state);\\n      },\\n      renderHtml: function () {\\n        var self = this, id = self._id, prefix = self.classPrefix;\\n        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>';\\n      },\\n      bindStates: function () {\\n        var self = this;\\n        function checked(state) {\\n          self.classes.toggle('checked', state);\\n          self.aria('checked', state);\\n        }\\n        self.state.on('change:text', function (e) {\\n          self.getEl('al').firstChild.data = self.translate(e.value);\\n        });\\n        self.state.on('change:checked change:value', function (e) {\\n          self.fire('change');\\n          checked(e.value);\\n        });\\n        self.state.on('change:icon', function (e) {\\n          var icon = e.value;\\n          var prefix = self.classPrefix;\\n          if (typeof icon === 'undefined') {\\n            return self.settings.icon;\\n          }\\n          self.settings.icon = icon;\\n          icon = icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';\\n          var btnElm = self.getEl().firstChild;\\n          var iconElm = btnElm.getElementsByTagName('i')[0];\\n          if (icon) {\\n            if (!iconElm || iconElm !== btnElm.firstChild) {\\n              iconElm = domGlobals.document.createElement('i');\\n              btnElm.insertBefore(iconElm, btnElm.firstChild);\\n            }\\n            iconElm.className = icon;\\n          } else if (iconElm) {\\n            btnElm.removeChild(iconElm);\\n          }\\n        });\\n        if (self.state.get('checked')) {\\n          checked(true);\\n        }\\n        return self._super();\\n      }\\n    });\\n\\n    var global$d = tinymce.util.Tools.resolve('tinymce.util.VK');\\n\\n    var ComboBox = Widget.extend({\\n      init: function (settings) {\\n        var self = this;\\n        self._super(settings);\\n        settings = self.settings;\\n        self.classes.add('combobox');\\n        self.subinput = true;\\n        self.ariaTarget = 'inp';\\n        settings.menu = settings.menu || settings.values;\\n        if (settings.menu) {\\n          settings.icon = 'caret';\\n        }\\n        self.on('click', function (e) {\\n          var elm = e.target;\\n          var root = self.getEl();\\n          if (!global$9.contains(root, elm) && elm !== root) {\\n            return;\\n          }\\n          while (elm && elm !== root) {\\n            if (elm.id && elm.id.indexOf('-open') !== -1) {\\n              self.fire('action');\\n              if (settings.menu) {\\n                self.showMenu();\\n                if (e.aria) {\\n                  self.menu.items()[0].focus();\\n                }\\n              }\\n            }\\n            elm = elm.parentNode;\\n          }\\n        });\\n        self.on('keydown', function (e) {\\n          var rootControl;\\n          if (e.keyCode === 13 && e.target.nodeName === 'INPUT') {\\n            e.preventDefault();\\n            self.parents().reverse().each(function (ctrl) {\\n              if (ctrl.toJSON) {\\n                rootControl = ctrl;\\n                return false;\\n              }\\n            });\\n            self.fire('submit', { data: rootControl.toJSON() });\\n          }\\n        });\\n        self.on('keyup', function (e) {\\n          if (e.target.nodeName === 'INPUT') {\\n            var oldValue = self.state.get('value');\\n            var newValue = e.target.value;\\n            if (newValue !== oldValue) {\\n              self.state.set('value', newValue);\\n              self.fire('autocomplete', e);\\n            }\\n          }\\n        });\\n        self.on('mouseover', function (e) {\\n          var tooltip = self.tooltip().moveTo(-65535);\\n          if (self.statusLevel() && e.target.className.indexOf(self.classPrefix + 'status') !== -1) {\\n            var statusMessage = self.statusMessage() || 'Ok';\\n            var rel = tooltip.text(statusMessage).show().testMoveRel(e.target, [\\n              'bc-tc',\\n              'bc-tl',\\n              'bc-tr'\\n            ]);\\n            tooltip.classes.toggle('tooltip-n', rel === 'bc-tc');\\n            tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl');\\n            tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr');\\n            tooltip.moveRel(e.target, rel);\\n          }\\n        });\\n      },\\n      statusLevel: function (value) {\\n        if (arguments.length > 0) {\\n          this.state.set('statusLevel', value);\\n        }\\n        return this.state.get('statusLevel');\\n      },\\n      statusMessage: function (value) {\\n        if (arguments.length > 0) {\\n          this.state.set('statusMessage', value);\\n        }\\n        return this.state.get('statusMessage');\\n      },\\n      showMenu: function () {\\n        var self = this;\\n        var settings = self.settings;\\n        var menu;\\n        if (!self.menu) {\\n          menu = settings.menu || [];\\n          if (menu.length) {\\n            menu = {\\n              type: 'menu',\\n              items: menu\\n            };\\n          } else {\\n            menu.type = menu.type || 'menu';\\n          }\\n          self.menu = global$4.create(menu).parent(self).renderTo(self.getContainerElm());\\n          self.fire('createmenu');\\n          self.menu.reflow();\\n          self.menu.on('cancel', function (e) {\\n            if (e.control === self.menu) {\\n              self.focus();\\n            }\\n          });\\n          self.menu.on('show hide', function (e) {\\n            e.control.items().each(function (ctrl) {\\n              ctrl.active(ctrl.value() === self.value());\\n            });\\n          }).fire('show');\\n          self.menu.on('select', function (e) {\\n            self.value(e.control.value());\\n          });\\n          self.on('focusin', function (e) {\\n            if (e.target.tagName.toUpperCase() === 'INPUT') {\\n              self.menu.hide();\\n            }\\n          });\\n          self.aria('expanded', true);\\n        }\\n        self.menu.show();\\n        self.menu.layoutRect({ w: self.layoutRect().w });\\n        self.menu.moveRel(self.getEl(), self.isRtl() ? [\\n          'br-tr',\\n          'tr-br'\\n        ] : [\\n          'bl-tl',\\n          'tl-bl'\\n        ]);\\n      },\\n      focus: function () {\\n        this.getEl('inp').focus();\\n      },\\n      repaint: function () {\\n        var self = this, elm = self.getEl(), openElm = self.getEl('open'), rect = self.layoutRect();\\n        var width, lineHeight, innerPadding = 0;\\n        var inputElm = elm.firstChild;\\n        if (self.statusLevel() && self.statusLevel() !== 'none') {\\n          innerPadding = parseInt(funcs.getRuntimeStyle(inputElm, 'padding-right'), 10) - parseInt(funcs.getRuntimeStyle(inputElm, 'padding-left'), 10);\\n        }\\n        if (openElm) {\\n          width = rect.w - funcs.getSize(openElm).width - 10;\\n        } else {\\n          width = rect.w - 10;\\n        }\\n        var doc = domGlobals.document;\\n        if (doc.all && (!doc.documentMode || doc.documentMode <= 8)) {\\n          lineHeight = self.layoutRect().h - 2 + 'px';\\n        }\\n        global$9(inputElm).css({\\n          width: width - innerPadding,\\n          lineHeight: lineHeight\\n        });\\n        self._super();\\n        return self;\\n      },\\n      postRender: function () {\\n        var self = this;\\n        global$9(this.getEl('inp')).on('change', function (e) {\\n          self.state.set('value', e.target.value);\\n          self.fire('change', e);\\n        });\\n        return self._super();\\n      },\\n      renderHtml: function () {\\n        var self = this, id = self._id, settings = self.settings, prefix = self.classPrefix;\\n        var value = self.state.get('value') || '';\\n        var icon, text, openBtnHtml = '', extraAttrs = '', statusHtml = '';\\n        if ('spellcheck' in settings) {\\n          extraAttrs += ' spellcheck=\\\"' + settings.spellcheck + '\\\"';\\n        }\\n        if (settings.maxLength) {\\n          extraAttrs += ' maxlength=\\\"' + settings.maxLength + '\\\"';\\n        }\\n        if (settings.size) {\\n          extraAttrs += ' size=\\\"' + settings.size + '\\\"';\\n        }\\n        if (settings.subtype) {\\n          extraAttrs += ' type=\\\"' + settings.subtype + '\\\"';\\n        }\\n        statusHtml = '<i id=\\\"' + id + '-status\\\" class=\\\"mce-status mce-ico\\\" style=\\\"display: none\\\"></i>';\\n        if (self.disabled()) {\\n          extraAttrs += ' disabled=\\\"disabled\\\"';\\n        }\\n        icon = settings.icon;\\n        if (icon && icon !== 'caret') {\\n          icon = prefix + 'ico ' + prefix + 'i-' + settings.icon;\\n        }\\n        text = self.state.get('text');\\n        if (icon || text) {\\n          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>';\\n          self.classes.add('has-open');\\n        }\\n        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>';\\n      },\\n      value: function (value) {\\n        if (arguments.length) {\\n          this.state.set('value', value);\\n          return this;\\n        }\\n        if (this.state.get('rendered')) {\\n          this.state.set('value', this.getEl('inp').value);\\n        }\\n        return this.state.get('value');\\n      },\\n      showAutoComplete: function (items, term) {\\n        var self = this;\\n        if (items.length === 0) {\\n          self.hideMenu();\\n          return;\\n        }\\n        var insert = function (value, title) {\\n          return function () {\\n            self.fire('selectitem', {\\n              title: title,\\n              value: value\\n            });\\n          };\\n        };\\n        if (self.menu) {\\n          self.menu.items().remove();\\n        } else {\\n          self.menu = global$4.create({\\n            type: 'menu',\\n            classes: 'combobox-menu',\\n            layout: 'flow'\\n          }).parent(self).renderTo();\\n        }\\n        global$2.each(items, function (item) {\\n          self.menu.add({\\n            text: item.title,\\n            url: item.previewUrl,\\n            match: term,\\n            classes: 'menu-item-ellipsis',\\n            onclick: insert(item.value, item.title)\\n          });\\n        });\\n        self.menu.renderNew();\\n        self.hideMenu();\\n        self.menu.on('cancel', function (e) {\\n          if (e.control.parent() === self.menu) {\\n            e.stopPropagation();\\n            self.focus();\\n            self.hideMenu();\\n          }\\n        });\\n        self.menu.on('select', function () {\\n          self.focus();\\n        });\\n        var maxW = self.layoutRect().w;\\n        self.menu.layoutRect({\\n          w: maxW,\\n          minW: 0,\\n          maxW: maxW\\n        });\\n        self.menu.repaint();\\n        self.menu.reflow();\\n        self.menu.show();\\n        self.menu.moveRel(self.getEl(), self.isRtl() ? [\\n          'br-tr',\\n          'tr-br'\\n        ] : [\\n          'bl-tl',\\n          'tl-bl'\\n        ]);\\n      },\\n      hideMenu: function () {\\n        if (this.menu) {\\n          this.menu.hide();\\n        }\\n      },\\n      bindStates: function () {\\n        var self = this;\\n        self.state.on('change:value', function (e) {\\n          if (self.getEl('inp').value !== e.value) {\\n            self.getEl('inp').value = e.value;\\n          }\\n        });\\n        self.state.on('change:disabled', function (e) {\\n          self.getEl('inp').disabled = e.value;\\n        });\\n        self.state.on('change:statusLevel', function (e) {\\n          var statusIconElm = self.getEl('status');\\n          var prefix = self.classPrefix, value = e.value;\\n          funcs.css(statusIconElm, 'display', value === 'none' ? 'none' : '');\\n          funcs.toggleClass(statusIconElm, prefix + 'i-checkmark', value === 'ok');\\n          funcs.toggleClass(statusIconElm, prefix + 'i-warning', value === 'warn');\\n          funcs.toggleClass(statusIconElm, prefix + 'i-error', value === 'error');\\n          self.classes.toggle('has-status', value !== 'none');\\n          self.repaint();\\n        });\\n        funcs.on(self.getEl('status'), 'mouseleave', function () {\\n          self.tooltip().hide();\\n        });\\n        self.on('cancel', function (e) {\\n          if (self.menu && self.menu.visible()) {\\n            e.stopPropagation();\\n            self.hideMenu();\\n          }\\n        });\\n        var focusIdx = function (idx, menu) {\\n          if (menu && menu.items().length > 0) {\\n            menu.items().eq(idx)[0].focus();\\n          }\\n        };\\n        self.on('keydown', function (e) {\\n          var keyCode = e.keyCode;\\n          if (e.target.nodeName === 'INPUT') {\\n            if (keyCode === global$d.DOWN) {\\n              e.preventDefault();\\n              self.fire('autocomplete');\\n              focusIdx(0, self.menu);\\n            } else if (keyCode === global$d.UP) {\\n              e.preventDefault();\\n              focusIdx(-1, self.menu);\\n            }\\n          }\\n        });\\n        return self._super();\\n      },\\n      remove: function () {\\n        global$9(this.getEl('inp')).off();\\n        if (this.menu) {\\n          this.menu.remove();\\n        }\\n        this._super();\\n      }\\n    });\\n\\n    var ColorBox = ComboBox.extend({\\n      init: function (settings) {\\n        var self = this;\\n        settings.spellcheck = false;\\n        if (settings.onaction) {\\n          settings.icon = 'none';\\n        }\\n        self._super(settings);\\n        self.classes.add('colorbox');\\n        self.on('change keyup postrender', function () {\\n          self.repaintColor(self.value());\\n        });\\n      },\\n      repaintColor: function (value) {\\n        var openElm = this.getEl('open');\\n        var elm = openElm ? openElm.getElementsByTagName('i')[0] : null;\\n        if (elm) {\\n          try {\\n            elm.style.background = value;\\n          } catch (ex) {\\n          }\\n        }\\n      },\\n      bindStates: function () {\\n        var self = this;\\n        self.state.on('change:value', function (e) {\\n          if (self.state.get('rendered')) {\\n            self.repaintColor(e.value);\\n          }\\n        });\\n        return self._super();\\n      }\\n    });\\n\\n    var PanelButton = Button.extend({\\n      showPanel: function () {\\n        var self = this, settings = self.settings;\\n        self.classes.add('opened');\\n        if (!self.panel) {\\n          var panelSettings = settings.panel;\\n          if (panelSettings.type) {\\n            panelSettings = {\\n              layout: 'grid',\\n              items: panelSettings\\n            };\\n          }\\n          panelSettings.role = panelSettings.role || 'dialog';\\n          panelSettings.popover = true;\\n          panelSettings.autohide = true;\\n          panelSettings.ariaRoot = true;\\n          self.panel = new FloatPanel(panelSettings).on('hide', function () {\\n            self.classes.remove('opened');\\n          }).on('cancel', function (e) {\\n            e.stopPropagation();\\n            self.focus();\\n            self.hidePanel();\\n          }).parent(self).renderTo(self.getContainerElm());\\n          self.panel.fire('show');\\n          self.panel.reflow();\\n        } else {\\n          self.panel.show();\\n        }\\n        var rtlRels = [\\n          'bc-tc',\\n          'bc-tl',\\n          'bc-tr'\\n        ];\\n        var ltrRels = [\\n          'bc-tc',\\n          'bc-tr',\\n          'bc-tl',\\n          'tc-bc',\\n          'tc-br',\\n          'tc-bl'\\n        ];\\n        var rel = self.panel.testMoveRel(self.getEl(), settings.popoverAlign || (self.isRtl() ? rtlRels : ltrRels));\\n        self.panel.classes.toggle('start', rel.substr(-1) === 'l');\\n        self.panel.classes.toggle('end', rel.substr(-1) === 'r');\\n        var isTop = rel.substr(0, 1) === 't';\\n        self.panel.classes.toggle('bottom', !isTop);\\n        self.panel.classes.toggle('top', isTop);\\n        self.panel.moveRel(self.getEl(), rel);\\n      },\\n      hidePanel: function () {\\n        var self = this;\\n        if (self.panel) {\\n          self.panel.hide();\\n        }\\n      },\\n      postRender: function () {\\n        var self = this;\\n        self.aria('haspopup', true);\\n        self.on('click', function (e) {\\n          if (e.control === self) {\\n            if (self.panel && self.panel.visible()) {\\n              self.hidePanel();\\n            } else {\\n              self.showPanel();\\n              self.panel.focus(!!e.aria);\\n            }\\n          }\\n        });\\n        return self._super();\\n      },\\n      remove: function () {\\n        if (this.panel) {\\n          this.panel.remove();\\n          this.panel = null;\\n        }\\n        return this._super();\\n      }\\n    });\\n\\n    var DOM$3 = global$3.DOM;\\n    var ColorButton = PanelButton.extend({\\n      init: function (settings) {\\n        this._super(settings);\\n        this.classes.add('splitbtn');\\n        this.classes.add('colorbutton');\\n      },\\n      color: function (color) {\\n        if (color) {\\n          this._color = color;\\n          this.getEl('preview').style.backgroundColor = color;\\n          return this;\\n        }\\n        return this._color;\\n      },\\n      resetColor: function () {\\n        this._color = null;\\n        this.getEl('preview').style.backgroundColor = null;\\n        return this;\\n      },\\n      renderHtml: function () {\\n        var self = this, id = self._id, prefix = self.classPrefix, text = self.state.get('text');\\n        var icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';\\n        var image = self.settings.image ? ' style=\\\"background-image: url(\\\\'' + self.settings.image + '\\\\')\\\"' : '';\\n        var textHtml = '';\\n        if (text) {\\n          self.classes.add('btn-has-text');\\n          textHtml = '<span class=\\\"' + prefix + 'txt\\\">' + self.encode(text) + '</span>';\\n        }\\n        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>';\\n      },\\n      postRender: function () {\\n        var self = this, onClickHandler = self.settings.onclick;\\n        self.on('click', function (e) {\\n          if (e.aria && e.aria.key === 'down') {\\n            return;\\n          }\\n          if (e.control === self && !DOM$3.getParent(e.target, '.' + self.classPrefix + 'open')) {\\n            e.stopImmediatePropagation();\\n            onClickHandler.call(self, e);\\n          }\\n        });\\n        delete self.settings.onclick;\\n        return self._super();\\n      }\\n    });\\n\\n    var global$e = tinymce.util.Tools.resolve('tinymce.util.Color');\\n\\n    var ColorPicker = Widget.extend({\\n      Defaults: { classes: 'widget colorpicker' },\\n      init: function (settings) {\\n        this._super(settings);\\n      },\\n      postRender: function () {\\n        var self = this;\\n        var color = self.color();\\n        var hsv, hueRootElm, huePointElm, svRootElm, svPointElm;\\n        hueRootElm = self.getEl('h');\\n        huePointElm = self.getEl('hp');\\n        svRootElm = self.getEl('sv');\\n        svPointElm = self.getEl('svp');\\n        function getPos(elm, event) {\\n          var pos = funcs.getPos(elm);\\n          var x, y;\\n          x = event.pageX - pos.x;\\n          y = event.pageY - pos.y;\\n          x = Math.max(0, Math.min(x / elm.clientWidth, 1));\\n          y = Math.max(0, Math.min(y / elm.clientHeight, 1));\\n          return {\\n            x: x,\\n            y: y\\n          };\\n        }\\n        function updateColor(hsv, hueUpdate) {\\n          var hue = (360 - hsv.h) / 360;\\n          funcs.css(huePointElm, { top: hue * 100 + '%' });\\n          if (!hueUpdate) {\\n            funcs.css(svPointElm, {\\n              left: hsv.s + '%',\\n              top: 100 - hsv.v + '%'\\n            });\\n          }\\n          svRootElm.style.background = global$e({\\n            s: 100,\\n            v: 100,\\n            h: hsv.h\\n          }).toHex();\\n          self.color().parse({\\n            s: hsv.s,\\n            v: hsv.v,\\n            h: hsv.h\\n          });\\n        }\\n        function updateSaturationAndValue(e) {\\n          var pos;\\n          pos = getPos(svRootElm, e);\\n          hsv.s = pos.x * 100;\\n          hsv.v = (1 - pos.y) * 100;\\n          updateColor(hsv);\\n          self.fire('change');\\n        }\\n        function updateHue(e) {\\n          var pos;\\n          pos = getPos(hueRootElm, e);\\n          hsv = color.toHsv();\\n          hsv.h = (1 - pos.y) * 360;\\n          updateColor(hsv, true);\\n          self.fire('change');\\n        }\\n        self._repaint = function () {\\n          hsv = color.toHsv();\\n          updateColor(hsv);\\n        };\\n        self._super();\\n        self._svdraghelper = new DragHelper(self._id + '-sv', {\\n          start: updateSaturationAndValue,\\n          drag: updateSaturationAndValue\\n        });\\n        self._hdraghelper = new DragHelper(self._id + '-h', {\\n          start: updateHue,\\n          drag: updateHue\\n        });\\n        self._repaint();\\n      },\\n      rgb: function () {\\n        return this.color().toRgb();\\n      },\\n      value: function (value) {\\n        var self = this;\\n        if (arguments.length) {\\n          self.color().parse(value);\\n          if (self._rendered) {\\n            self._repaint();\\n          }\\n        } else {\\n          return self.color().toHex();\\n        }\\n      },\\n      color: function () {\\n        if (!this._color) {\\n          this._color = global$e();\\n        }\\n        return this._color;\\n      },\\n      renderHtml: function () {\\n        var self = this;\\n        var id = self._id;\\n        var prefix = self.classPrefix;\\n        var hueHtml;\\n        var stops = '#ff0000,#ff0080,#ff00ff,#8000ff,#0000ff,#0080ff,#00ffff,#00ff80,#00ff00,#80ff00,#ffff00,#ff8000,#ff0000';\\n        function getOldIeFallbackHtml() {\\n          var i, l, html = '', gradientPrefix, stopsList;\\n          gradientPrefix = 'filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=';\\n          stopsList = stops.split(',');\\n          for (i = 0, l = stopsList.length - 1; i < l; i++) {\\n            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>';\\n          }\\n          return html;\\n        }\\n        var gradientCssText = 'background: -ms-linear-gradient(top,' + stops + ');' + 'background: linear-gradient(to bottom,' + stops + ');';\\n        hueHtml = '<div id=\\\"' + id + '-h\\\" class=\\\"' + prefix + 'colorpicker-h\\\" style=\\\"' + gradientCssText + '\\\">' + getOldIeFallbackHtml() + '<div id=\\\"' + id + '-hp\\\" class=\\\"' + prefix + 'colorpicker-h-marker\\\"></div>' + '</div>';\\n        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>';\\n      }\\n    });\\n\\n    var DropZone = Widget.extend({\\n      init: function (settings) {\\n        var self = this;\\n        settings = global$2.extend({\\n          height: 100,\\n          text: 'Drop an image here',\\n          multiple: false,\\n          accept: null\\n        }, settings);\\n        self._super(settings);\\n        self.classes.add('dropzone');\\n        if (settings.multiple) {\\n          self.classes.add('multiple');\\n        }\\n      },\\n      renderHtml: function () {\\n        var self = this;\\n        var attrs, elm;\\n        var cfg = self.settings;\\n        attrs = {\\n          id: self._id,\\n          hidefocus: '1'\\n        };\\n        elm = funcs.create('div', attrs, '<span>' + this.translate(cfg.text) + '</span>');\\n        if (cfg.height) {\\n          funcs.css(elm, 'height', cfg.height + 'px');\\n        }\\n        if (cfg.width) {\\n          funcs.css(elm, 'width', cfg.width + 'px');\\n        }\\n        elm.className = self.classes;\\n        return elm.outerHTML;\\n      },\\n      postRender: function () {\\n        var self = this;\\n        var toggleDragClass = function (e) {\\n          e.preventDefault();\\n          self.classes.toggle('dragenter');\\n          self.getEl().className = self.classes;\\n        };\\n        var filter = function (files) {\\n          var accept = self.settings.accept;\\n          if (typeof accept !== 'string') {\\n            return files;\\n          }\\n          var re = new RegExp('(' + accept.split(/\\\\s*,\\\\s*/).join('|') + ')$', 'i');\\n          return global$2.grep(files, function (file) {\\n            return re.test(file.name);\\n          });\\n        };\\n        self._super();\\n        self.$el.on('dragover', function (e) {\\n          e.preventDefault();\\n        });\\n        self.$el.on('dragenter', toggleDragClass);\\n        self.$el.on('dragleave', toggleDragClass);\\n        self.$el.on('drop', function (e) {\\n          e.preventDefault();\\n          if (self.state.get('disabled')) {\\n            return;\\n          }\\n          var files = filter(e.dataTransfer.files);\\n          self.value = function () {\\n            if (!files.length) {\\n              return null;\\n            } else if (self.settings.multiple) {\\n              return files;\\n            } else {\\n              return files[0];\\n            }\\n          };\\n          if (files.length) {\\n            self.fire('change', e);\\n          }\\n        });\\n      },\\n      remove: function () {\\n        this.$el.off();\\n        this._super();\\n      }\\n    });\\n\\n    var Path = Widget.extend({\\n      init: function (settings) {\\n        var self = this;\\n        if (!settings.delimiter) {\\n          settings.delimiter = '\\\\xBB';\\n        }\\n        self._super(settings);\\n        self.classes.add('path');\\n        self.canFocus = true;\\n        self.on('click', function (e) {\\n          var index;\\n          var target = e.target;\\n          if (index = target.getAttribute('data-index')) {\\n            self.fire('select', {\\n              value: self.row()[index],\\n              index: index\\n            });\\n          }\\n        });\\n        self.row(self.settings.row);\\n      },\\n      focus: function () {\\n        var self = this;\\n        self.getEl().firstChild.focus();\\n        return self;\\n      },\\n      row: function (row) {\\n        if (!arguments.length) {\\n          return this.state.get('row');\\n        }\\n        this.state.set('row', row);\\n        return this;\\n      },\\n      renderHtml: function () {\\n        var self = this;\\n        return '<div id=\\\"' + self._id + '\\\" class=\\\"' + self.classes + '\\\">' + self._getDataPathHtml(self.state.get('row')) + '</div>';\\n      },\\n      bindStates: function () {\\n        var self = this;\\n        self.state.on('change:row', function (e) {\\n          self.innerHtml(self._getDataPathHtml(e.value));\\n        });\\n        return self._super();\\n      },\\n      _getDataPathHtml: function (data) {\\n        var self = this;\\n        var parts = data || [];\\n        var i, l, html = '';\\n        var prefix = self.classPrefix;\\n        for (i = 0, l = parts.length; i < l; i++) {\\n          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>';\\n        }\\n        if (!html) {\\n          html = '<div class=\\\"' + prefix + 'path-item\\\">\\\\xA0</div>';\\n        }\\n        return html;\\n      }\\n    });\\n\\n    var ElementPath = Path.extend({\\n      postRender: function () {\\n        var self = this, editor = self.settings.editor;\\n        function isHidden(elm) {\\n          if (elm.nodeType === 1) {\\n            if (elm.nodeName === 'BR' || !!elm.getAttribute('data-mce-bogus')) {\\n              return true;\\n            }\\n            if (elm.getAttribute('data-mce-type') === 'bookmark') {\\n              return true;\\n            }\\n          }\\n          return false;\\n        }\\n        if (editor.settings.elementpath !== false) {\\n          self.on('select', function (e) {\\n            editor.focus();\\n            editor.selection.select(this.row()[e.index].element);\\n            editor.nodeChanged();\\n          });\\n          editor.on('nodeChange', function (e) {\\n            var outParents = [];\\n            var parents = e.parents;\\n            var i = parents.length;\\n            while (i--) {\\n              if (parents[i].nodeType === 1 && !isHidden(parents[i])) {\\n                var args = editor.fire('ResolveName', {\\n                  name: parents[i].nodeName.toLowerCase(),\\n                  target: parents[i]\\n                });\\n                if (!args.isDefaultPrevented()) {\\n                  outParents.push({\\n                    name: args.name,\\n                    element: parents[i]\\n                  });\\n                }\\n                if (args.isPropagationStopped()) {\\n                  break;\\n                }\\n              }\\n            }\\n            self.row(outParents);\\n          });\\n        }\\n        return self._super();\\n      }\\n    });\\n\\n    var FormItem = Container.extend({\\n      Defaults: {\\n        layout: 'flex',\\n        align: 'center',\\n        defaults: { flex: 1 }\\n      },\\n      renderHtml: function () {\\n        var self = this, layout = self._layout, prefix = self.classPrefix;\\n        self.classes.add('formitem');\\n        layout.preRender(self);\\n        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>';\\n      }\\n    });\\n\\n    var Form = Container.extend({\\n      Defaults: {\\n        containerCls: 'form',\\n        layout: 'flex',\\n        direction: 'column',\\n        align: 'stretch',\\n        flex: 1,\\n        padding: 15,\\n        labelGap: 30,\\n        spacing: 10,\\n        callbacks: {\\n          submit: function () {\\n            this.submit();\\n          }\\n        }\\n      },\\n      preRender: function () {\\n        var self = this, items = self.items();\\n        if (!self.settings.formItemDefaults) {\\n          self.settings.formItemDefaults = {\\n            layout: 'flex',\\n            autoResize: 'overflow',\\n            defaults: { flex: 1 }\\n          };\\n        }\\n        items.each(function (ctrl) {\\n          var formItem;\\n          var label = ctrl.settings.label;\\n          if (label) {\\n            formItem = new FormItem(global$2.extend({\\n              items: {\\n                type: 'label',\\n                id: ctrl._id + '-l',\\n                text: label,\\n                flex: 0,\\n                forId: ctrl._id,\\n                disabled: ctrl.disabled()\\n              }\\n            }, self.settings.formItemDefaults));\\n            formItem.type = 'formitem';\\n            ctrl.aria('labelledby', ctrl._id + '-l');\\n            if (typeof ctrl.settings.flex === 'undefined') {\\n              ctrl.settings.flex = 1;\\n            }\\n            self.replace(ctrl, formItem);\\n            formItem.add(ctrl);\\n          }\\n        });\\n      },\\n      submit: function () {\\n        return this.fire('submit', { data: this.toJSON() });\\n      },\\n      postRender: function () {\\n        var self = this;\\n        self._super();\\n        self.fromJSON(self.settings.data);\\n      },\\n      bindStates: function () {\\n        var self = this;\\n        self._super();\\n        function recalcLabels() {\\n          var maxLabelWidth = 0;\\n          var labels = [];\\n          var i, labelGap, items;\\n          if (self.settings.labelGapCalc === false) {\\n            return;\\n          }\\n          if (self.settings.labelGapCalc === 'children') {\\n            items = self.find('formitem');\\n          } else {\\n            items = self.items();\\n          }\\n          items.filter('formitem').each(function (item) {\\n            var labelCtrl = item.items()[0], labelWidth = labelCtrl.getEl().clientWidth;\\n            maxLabelWidth = labelWidth > maxLabelWidth ? labelWidth : maxLabelWidth;\\n            labels.push(labelCtrl);\\n          });\\n          labelGap = self.settings.labelGap || 0;\\n          i = labels.length;\\n          while (i--) {\\n            labels[i].settings.minWidth = maxLabelWidth + labelGap;\\n          }\\n        }\\n        self.on('show', recalcLabels);\\n        recalcLabels();\\n      }\\n    });\\n\\n    var FieldSet = Form.extend({\\n      Defaults: {\\n        containerCls: 'fieldset',\\n        layout: 'flex',\\n        direction: 'column',\\n        align: 'stretch',\\n        flex: 1,\\n        padding: '25 15 5 15',\\n        labelGap: 30,\\n        spacing: 10,\\n        border: 1\\n      },\\n      renderHtml: function () {\\n        var self = this, layout = self._layout, prefix = self.classPrefix;\\n        self.preRender();\\n        layout.preRender(self);\\n        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>';\\n      }\\n    });\\n\\n    var unique$1 = 0;\\n    var generate = function (prefix) {\\n      var date = new Date();\\n      var time = date.getTime();\\n      var random = Math.floor(Math.random() * 1000000000);\\n      unique$1++;\\n      return prefix + '_' + random + unique$1 + String(time);\\n    };\\n\\n    var fromHtml = function (html, scope) {\\n      var doc = scope || domGlobals.document;\\n      var div = doc.createElement('div');\\n      div.innerHTML = html;\\n      if (!div.hasChildNodes() || div.childNodes.length > 1) {\\n        domGlobals.console.error('HTML does not have a single root node', html);\\n        throw new Error('HTML must have a single root node');\\n      }\\n      return fromDom(div.childNodes[0]);\\n    };\\n    var fromTag = function (tag, scope) {\\n      var doc = scope || domGlobals.document;\\n      var node = doc.createElement(tag);\\n      return fromDom(node);\\n    };\\n    var fromText = function (text, scope) {\\n      var doc = scope || domGlobals.document;\\n      var node = doc.createTextNode(text);\\n      return fromDom(node);\\n    };\\n    var fromDom = function (node) {\\n      if (node === null || node === undefined) {\\n        throw new Error('Node cannot be null or undefined');\\n      }\\n      return { dom: constant(node) };\\n    };\\n    var fromPoint = function (docElm, x, y) {\\n      var doc = docElm.dom();\\n      return Option.from(doc.elementFromPoint(x, y)).map(fromDom);\\n    };\\n    var Element = {\\n      fromHtml: fromHtml,\\n      fromTag: fromTag,\\n      fromText: fromText,\\n      fromDom: fromDom,\\n      fromPoint: fromPoint\\n    };\\n\\n    var cached = function (f) {\\n      var called = false;\\n      var r;\\n      return function () {\\n        var args = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n          args[_i] = arguments[_i];\\n        }\\n        if (!called) {\\n          called = true;\\n          r = f.apply(null, args);\\n        }\\n        return r;\\n      };\\n    };\\n\\n    var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;\\n    var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;\\n    var COMMENT = domGlobals.Node.COMMENT_NODE;\\n    var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;\\n    var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;\\n    var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;\\n    var ELEMENT = domGlobals.Node.ELEMENT_NODE;\\n    var TEXT = domGlobals.Node.TEXT_NODE;\\n    var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;\\n    var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;\\n    var ENTITY = domGlobals.Node.ENTITY_NODE;\\n    var NOTATION = domGlobals.Node.NOTATION_NODE;\\n\\n    var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\\n\\n    var path = function (parts, scope) {\\n      var o = scope !== undefined && scope !== null ? scope : Global;\\n      for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\\n        o = o[parts[i]];\\n      }\\n      return o;\\n    };\\n    var resolve = function (p, scope) {\\n      var parts = p.split('.');\\n      return path(parts, scope);\\n    };\\n\\n    var unsafe = function (name, scope) {\\n      return resolve(name, scope);\\n    };\\n    var getOrDie = function (name, scope) {\\n      var actual = unsafe(name, scope);\\n      if (actual === undefined || actual === null) {\\n        throw new Error(name + ' not available on this browser');\\n      }\\n      return actual;\\n    };\\n    var Global$1 = { getOrDie: getOrDie };\\n\\n    var Immutable = function () {\\n      var fields = [];\\n      for (var _i = 0; _i < arguments.length; _i++) {\\n        fields[_i] = arguments[_i];\\n      }\\n      return function () {\\n        var values = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n          values[_i] = arguments[_i];\\n        }\\n        if (fields.length !== values.length) {\\n          throw new Error('Wrong number of arguments to struct. Expected \\\"[' + fields.length + ']\\\", got ' + values.length + ' arguments');\\n        }\\n        var struct = {};\\n        each(fields, function (name, i) {\\n          struct[name] = constant(values[i]);\\n        });\\n        return struct;\\n      };\\n    };\\n\\n    var node = function () {\\n      var f = Global$1.getOrDie('Node');\\n      return f;\\n    };\\n    var compareDocumentPosition = function (a, b, match) {\\n      return (a.compareDocumentPosition(b) & match) !== 0;\\n    };\\n    var documentPositionPreceding = function (a, b) {\\n      return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);\\n    };\\n    var documentPositionContainedBy = function (a, b) {\\n      return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);\\n    };\\n    var Node = {\\n      documentPositionPreceding: documentPositionPreceding,\\n      documentPositionContainedBy: documentPositionContainedBy\\n    };\\n\\n    var firstMatch = function (regexes, s) {\\n      for (var i = 0; i < regexes.length; i++) {\\n        var x = regexes[i];\\n        if (x.test(s)) {\\n          return x;\\n        }\\n      }\\n      return undefined;\\n    };\\n    var find$1 = function (regexes, agent) {\\n      var r = firstMatch(regexes, agent);\\n      if (!r) {\\n        return {\\n          major: 0,\\n          minor: 0\\n        };\\n      }\\n      var group = function (i) {\\n        return Number(agent.replace(r, '$' + i));\\n      };\\n      return nu(group(1), group(2));\\n    };\\n    var detect = function (versionRegexes, agent) {\\n      var cleanedAgent = String(agent).toLowerCase();\\n      if (versionRegexes.length === 0) {\\n        return unknown();\\n      }\\n      return find$1(versionRegexes, cleanedAgent);\\n    };\\n    var unknown = function () {\\n      return nu(0, 0);\\n    };\\n    var nu = function (major, minor) {\\n      return {\\n        major: major,\\n        minor: minor\\n      };\\n    };\\n    var Version = {\\n      nu: nu,\\n      detect: detect,\\n      unknown: unknown\\n    };\\n\\n    var edge = 'Edge';\\n    var chrome = 'Chrome';\\n    var ie = 'IE';\\n    var opera = 'Opera';\\n    var firefox = 'Firefox';\\n    var safari = 'Safari';\\n    var isBrowser = function (name, current) {\\n      return function () {\\n        return current === name;\\n      };\\n    };\\n    var unknown$1 = function () {\\n      return nu$1({\\n        current: undefined,\\n        version: Version.unknown()\\n      });\\n    };\\n    var nu$1 = function (info) {\\n      var current = info.current;\\n      var version = info.version;\\n      return {\\n        current: current,\\n        version: version,\\n        isEdge: isBrowser(edge, current),\\n        isChrome: isBrowser(chrome, current),\\n        isIE: isBrowser(ie, current),\\n        isOpera: isBrowser(opera, current),\\n        isFirefox: isBrowser(firefox, current),\\n        isSafari: isBrowser(safari, current)\\n      };\\n    };\\n    var Browser = {\\n      unknown: unknown$1,\\n      nu: nu$1,\\n      edge: constant(edge),\\n      chrome: constant(chrome),\\n      ie: constant(ie),\\n      opera: constant(opera),\\n      firefox: constant(firefox),\\n      safari: constant(safari)\\n    };\\n\\n    var windows$1 = 'Windows';\\n    var ios = 'iOS';\\n    var android = 'Android';\\n    var linux = 'Linux';\\n    var osx = 'OSX';\\n    var solaris = 'Solaris';\\n    var freebsd = 'FreeBSD';\\n    var isOS = function (name, current) {\\n      return function () {\\n        return current === name;\\n      };\\n    };\\n    var unknown$2 = function () {\\n      return nu$2({\\n        current: undefined,\\n        version: Version.unknown()\\n      });\\n    };\\n    var nu$2 = function (info) {\\n      var current = info.current;\\n      var version = info.version;\\n      return {\\n        current: current,\\n        version: version,\\n        isWindows: isOS(windows$1, current),\\n        isiOS: isOS(ios, current),\\n        isAndroid: isOS(android, current),\\n        isOSX: isOS(osx, current),\\n        isLinux: isOS(linux, current),\\n        isSolaris: isOS(solaris, current),\\n        isFreeBSD: isOS(freebsd, current)\\n      };\\n    };\\n    var OperatingSystem = {\\n      unknown: unknown$2,\\n      nu: nu$2,\\n      windows: constant(windows$1),\\n      ios: constant(ios),\\n      android: constant(android),\\n      linux: constant(linux),\\n      osx: constant(osx),\\n      solaris: constant(solaris),\\n      freebsd: constant(freebsd)\\n    };\\n\\n    var DeviceType = function (os, browser, userAgent) {\\n      var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\\n      var isiPhone = os.isiOS() && !isiPad;\\n      var isAndroid3 = os.isAndroid() && os.version.major === 3;\\n      var isAndroid4 = os.isAndroid() && os.version.major === 4;\\n      var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;\\n      var isTouch = os.isiOS() || os.isAndroid();\\n      var isPhone = isTouch && !isTablet;\\n      var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\\n      return {\\n        isiPad: constant(isiPad),\\n        isiPhone: constant(isiPhone),\\n        isTablet: constant(isTablet),\\n        isPhone: constant(isPhone),\\n        isTouch: constant(isTouch),\\n        isAndroid: os.isAndroid,\\n        isiOS: os.isiOS,\\n        isWebView: constant(iOSwebview)\\n      };\\n    };\\n\\n    var detect$1 = function (candidates, userAgent) {\\n      var agent = String(userAgent).toLowerCase();\\n      return find(candidates, function (candidate) {\\n        return candidate.search(agent);\\n      });\\n    };\\n    var detectBrowser = function (browsers, userAgent) {\\n      return detect$1(browsers, userAgent).map(function (browser) {\\n        var version = Version.detect(browser.versionRegexes, userAgent);\\n        return {\\n          current: browser.name,\\n          version: version\\n        };\\n      });\\n    };\\n    var detectOs = function (oses, userAgent) {\\n      return detect$1(oses, userAgent).map(function (os) {\\n        var version = Version.detect(os.versionRegexes, userAgent);\\n        return {\\n          current: os.name,\\n          version: version\\n        };\\n      });\\n    };\\n    var UaString = {\\n      detectBrowser: detectBrowser,\\n      detectOs: detectOs\\n    };\\n\\n    var contains = function (str, substr) {\\n      return str.indexOf(substr) !== -1;\\n    };\\n\\n    var normalVersionRegex = /.*?version\\\\/\\\\ ?([0-9]+)\\\\.([0-9]+).*/;\\n    var checkContains = function (target) {\\n      return function (uastring) {\\n        return contains(uastring, target);\\n      };\\n    };\\n    var browsers = [\\n      {\\n        name: 'Edge',\\n        versionRegexes: [/.*?edge\\\\/ ?([0-9]+)\\\\.([0-9]+)$/],\\n        search: function (uastring) {\\n          return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit');\\n        }\\n      },\\n      {\\n        name: 'Chrome',\\n        versionRegexes: [\\n          /.*?chrome\\\\/([0-9]+)\\\\.([0-9]+).*/,\\n          normalVersionRegex\\n        ],\\n        search: function (uastring) {\\n          return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe');\\n        }\\n      },\\n      {\\n        name: 'IE',\\n        versionRegexes: [\\n          /.*?msie\\\\ ?([0-9]+)\\\\.([0-9]+).*/,\\n          /.*?rv:([0-9]+)\\\\.([0-9]+).*/\\n        ],\\n        search: function (uastring) {\\n          return contains(uastring, 'msie') || contains(uastring, 'trident');\\n        }\\n      },\\n      {\\n        name: 'Opera',\\n        versionRegexes: [\\n          normalVersionRegex,\\n          /.*?opera\\\\/([0-9]+)\\\\.([0-9]+).*/\\n        ],\\n        search: checkContains('opera')\\n      },\\n      {\\n        name: 'Firefox',\\n        versionRegexes: [/.*?firefox\\\\/\\\\ ?([0-9]+)\\\\.([0-9]+).*/],\\n        search: checkContains('firefox')\\n      },\\n      {\\n        name: 'Safari',\\n        versionRegexes: [\\n          normalVersionRegex,\\n          /.*?cpu os ([0-9]+)_([0-9]+).*/\\n        ],\\n        search: function (uastring) {\\n          return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit');\\n        }\\n      }\\n    ];\\n    var oses = [\\n      {\\n        name: 'Windows',\\n        search: checkContains('win'),\\n        versionRegexes: [/.*?windows\\\\ nt\\\\ ?([0-9]+)\\\\.([0-9]+).*/]\\n      },\\n      {\\n        name: 'iOS',\\n        search: function (uastring) {\\n          return contains(uastring, 'iphone') || contains(uastring, 'ipad');\\n        },\\n        versionRegexes: [\\n          /.*?version\\\\/\\\\ ?([0-9]+)\\\\.([0-9]+).*/,\\n          /.*cpu os ([0-9]+)_([0-9]+).*/,\\n          /.*cpu iphone os ([0-9]+)_([0-9]+).*/\\n        ]\\n      },\\n      {\\n        name: 'Android',\\n        search: checkContains('android'),\\n        versionRegexes: [/.*?android\\\\ ?([0-9]+)\\\\.([0-9]+).*/]\\n      },\\n      {\\n        name: 'OSX',\\n        search: checkContains('os x'),\\n        versionRegexes: [/.*?os\\\\ x\\\\ ?([0-9]+)_([0-9]+).*/]\\n      },\\n      {\\n        name: 'Linux',\\n        search: checkContains('linux'),\\n        versionRegexes: []\\n      },\\n      {\\n        name: 'Solaris',\\n        search: checkContains('sunos'),\\n        versionRegexes: []\\n      },\\n      {\\n        name: 'FreeBSD',\\n        search: checkContains('freebsd'),\\n        versionRegexes: []\\n      }\\n    ];\\n    var PlatformInfo = {\\n      browsers: constant(browsers),\\n      oses: constant(oses)\\n    };\\n\\n    var detect$2 = function (userAgent) {\\n      var browsers = PlatformInfo.browsers();\\n      var oses = PlatformInfo.oses();\\n      var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);\\n      var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\\n      var deviceType = DeviceType(os, browser, userAgent);\\n      return {\\n        browser: browser,\\n        os: os,\\n        deviceType: deviceType\\n      };\\n    };\\n    var PlatformDetection = { detect: detect$2 };\\n\\n    var detect$3 = cached(function () {\\n      var userAgent = domGlobals.navigator.userAgent;\\n      return PlatformDetection.detect(userAgent);\\n    });\\n    var PlatformDetection$1 = { detect: detect$3 };\\n\\n    var ELEMENT$1 = ELEMENT;\\n    var DOCUMENT$1 = DOCUMENT;\\n    var bypassSelector = function (dom) {\\n      return dom.nodeType !== ELEMENT$1 && dom.nodeType !== DOCUMENT$1 || dom.childElementCount === 0;\\n    };\\n    var all = function (selector, scope) {\\n      var base = scope === undefined ? domGlobals.document : scope.dom();\\n      return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element.fromDom);\\n    };\\n    var one = function (selector, scope) {\\n      var base = scope === undefined ? domGlobals.document : scope.dom();\\n      return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element.fromDom);\\n    };\\n\\n    var regularContains = function (e1, e2) {\\n      var d1 = e1.dom();\\n      var d2 = e2.dom();\\n      return d1 === d2 ? false : d1.contains(d2);\\n    };\\n    var ieContains = function (e1, e2) {\\n      return Node.documentPositionContainedBy(e1.dom(), e2.dom());\\n    };\\n    var browser = PlatformDetection$1.detect().browser;\\n    var contains$1 = browser.isIE() ? ieContains : regularContains;\\n\\n    var spot = Immutable('element', 'offset');\\n\\n    var descendants = function (scope, selector) {\\n      return all(selector, scope);\\n    };\\n\\n    var trim = global$2.trim;\\n    var hasContentEditableState = function (value) {\\n      return function (node) {\\n        if (node && node.nodeType === 1) {\\n          if (node.contentEditable === value) {\\n            return true;\\n          }\\n          if (node.getAttribute('data-mce-contenteditable') === value) {\\n            return true;\\n          }\\n        }\\n        return false;\\n      };\\n    };\\n    var isContentEditableTrue = hasContentEditableState('true');\\n    var isContentEditableFalse = hasContentEditableState('false');\\n    var create = function (type, title, url, level, attach) {\\n      return {\\n        type: type,\\n        title: title,\\n        url: url,\\n        level: level,\\n        attach: attach\\n      };\\n    };\\n    var isChildOfContentEditableTrue = function (node) {\\n      while (node = node.parentNode) {\\n        var value = node.contentEditable;\\n        if (value && value !== 'inherit') {\\n          return isContentEditableTrue(node);\\n        }\\n      }\\n      return false;\\n    };\\n    var select = function (selector, root) {\\n      return map(descendants(Element.fromDom(root), selector), function (element) {\\n        return element.dom();\\n      });\\n    };\\n    var getElementText = function (elm) {\\n      return elm.innerText || elm.textContent;\\n    };\\n    var getOrGenerateId = function (elm) {\\n      return elm.id ? elm.id : generate('h');\\n    };\\n    var isAnchor = function (elm) {\\n      return elm && elm.nodeName === 'A' && (elm.id || elm.name);\\n    };\\n    var isValidAnchor = function (elm) {\\n      return isAnchor(elm) && isEditable(elm);\\n    };\\n    var isHeader = function (elm) {\\n      return elm && /^(H[1-6])$/.test(elm.nodeName);\\n    };\\n    var isEditable = function (elm) {\\n      return isChildOfContentEditableTrue(elm) && !isContentEditableFalse(elm);\\n    };\\n    var isValidHeader = function (elm) {\\n      return isHeader(elm) && isEditable(elm);\\n    };\\n    var getLevel = function (elm) {\\n      return isHeader(elm) ? parseInt(elm.nodeName.substr(1), 10) : 0;\\n    };\\n    var headerTarget = function (elm) {\\n      var headerId = getOrGenerateId(elm);\\n      var attach = function () {\\n        elm.id = headerId;\\n      };\\n      return create('header', getElementText(elm), '#' + headerId, getLevel(elm), attach);\\n    };\\n    var anchorTarget = function (elm) {\\n      var anchorId = elm.id || elm.name;\\n      var anchorText = getElementText(elm);\\n      return create('anchor', anchorText ? anchorText : '#' + anchorId, '#' + anchorId, 0, noop);\\n    };\\n    var getHeaderTargets = function (elms) {\\n      return map(filter(elms, isValidHeader), headerTarget);\\n    };\\n    var getAnchorTargets = function (elms) {\\n      return map(filter(elms, isValidAnchor), anchorTarget);\\n    };\\n    var getTargetElements = function (elm) {\\n      var elms = select('h1,h2,h3,h4,h5,h6,a:not([href])', elm);\\n      return elms;\\n    };\\n    var hasTitle = function (target) {\\n      return trim(target.title).length > 0;\\n    };\\n    var find$2 = function (elm) {\\n      var elms = getTargetElements(elm);\\n      return filter(getHeaderTargets(elms).concat(getAnchorTargets(elms)), hasTitle);\\n    };\\n    var LinkTargets = { find: find$2 };\\n\\n    var getActiveEditor = function () {\\n      return window.tinymce ? window.tinymce.activeEditor : global$1.activeEditor;\\n    };\\n    var history = {};\\n    var HISTORY_LENGTH = 5;\\n    var clearHistory = function () {\\n      history = {};\\n    };\\n    var toMenuItem = function (target) {\\n      return {\\n        title: target.title,\\n        value: {\\n          title: { raw: target.title },\\n          url: target.url,\\n          attach: target.attach\\n        }\\n      };\\n    };\\n    var toMenuItems = function (targets) {\\n      return global$2.map(targets, toMenuItem);\\n    };\\n    var staticMenuItem = function (title, url) {\\n      return {\\n        title: title,\\n        value: {\\n          title: title,\\n          url: url,\\n          attach: noop\\n        }\\n      };\\n    };\\n    var isUniqueUrl = function (url, targets) {\\n      var foundTarget = exists(targets, function (target) {\\n        return target.url === url;\\n      });\\n      return !foundTarget;\\n    };\\n    var getSetting = function (editorSettings, name, defaultValue) {\\n      var value = name in editorSettings ? editorSettings[name] : defaultValue;\\n      return value === false ? null : value;\\n    };\\n    var createMenuItems = function (term, targets, fileType, editorSettings) {\\n      var separator = { title: '-' };\\n      var fromHistoryMenuItems = function (history) {\\n        var historyItems = history.hasOwnProperty(fileType) ? history[fileType] : [];\\n        var uniqueHistory = filter(historyItems, function (url) {\\n          return isUniqueUrl(url, targets);\\n        });\\n        return global$2.map(uniqueHistory, function (url) {\\n          return {\\n            title: url,\\n            value: {\\n              title: url,\\n              url: url,\\n              attach: noop\\n            }\\n          };\\n        });\\n      };\\n      var fromMenuItems = function (type) {\\n        var filteredTargets = filter(targets, function (target) {\\n          return target.type === type;\\n        });\\n        return toMenuItems(filteredTargets);\\n      };\\n      var anchorMenuItems = function () {\\n        var anchorMenuItems = fromMenuItems('anchor');\\n        var topAnchor = getSetting(editorSettings, 'anchor_top', '#top');\\n        var bottomAchor = getSetting(editorSettings, 'anchor_bottom', '#bottom');\\n        if (topAnchor !== null) {\\n          anchorMenuItems.unshift(staticMenuItem('<top>', topAnchor));\\n        }\\n        if (bottomAchor !== null) {\\n          anchorMenuItems.push(staticMenuItem('<bottom>', bottomAchor));\\n        }\\n        return anchorMenuItems;\\n      };\\n      var join = function (items) {\\n        return foldl(items, function (a, b) {\\n          var bothEmpty = a.length === 0 || b.length === 0;\\n          return bothEmpty ? a.concat(b) : a.concat(separator, b);\\n        }, []);\\n      };\\n      if (editorSettings.typeahead_urls === false) {\\n        return [];\\n      }\\n      return fileType === 'file' ? join([\\n        filterByQuery(term, fromHistoryMenuItems(history)),\\n        filterByQuery(term, fromMenuItems('header')),\\n        filterByQuery(term, anchorMenuItems())\\n      ]) : filterByQuery(term, fromHistoryMenuItems(history));\\n    };\\n    var addToHistory = function (url, fileType) {\\n      var items = history[fileType];\\n      if (!/^https?/.test(url)) {\\n        return;\\n      }\\n      if (items) {\\n        if (indexOf(items, url).isNone()) {\\n          history[fileType] = items.slice(0, HISTORY_LENGTH).concat(url);\\n        }\\n      } else {\\n        history[fileType] = [url];\\n      }\\n    };\\n    var filterByQuery = function (term, menuItems) {\\n      var lowerCaseTerm = term.toLowerCase();\\n      var result = global$2.grep(menuItems, function (item) {\\n        return item.title.toLowerCase().indexOf(lowerCaseTerm) !== -1;\\n      });\\n      return result.length === 1 && result[0].title === term ? [] : result;\\n    };\\n    var getTitle = function (linkDetails) {\\n      var title = linkDetails.title;\\n      return title.raw ? title.raw : title;\\n    };\\n    var setupAutoCompleteHandler = function (ctrl, editorSettings, bodyElm, fileType) {\\n      var autocomplete = function (term) {\\n        var linkTargets = LinkTargets.find(bodyElm);\\n        var menuItems = createMenuItems(term, linkTargets, fileType, editorSettings);\\n        ctrl.showAutoComplete(menuItems, term);\\n      };\\n      ctrl.on('autocomplete', function () {\\n        autocomplete(ctrl.value());\\n      });\\n      ctrl.on('selectitem', function (e) {\\n        var linkDetails = e.value;\\n        ctrl.value(linkDetails.url);\\n        var title = getTitle(linkDetails);\\n        if (fileType === 'image') {\\n          ctrl.fire('change', {\\n            meta: {\\n              alt: title,\\n              attach: linkDetails.attach\\n            }\\n          });\\n        } else {\\n          ctrl.fire('change', {\\n            meta: {\\n              text: title,\\n              attach: linkDetails.attach\\n            }\\n          });\\n        }\\n        ctrl.focus();\\n      });\\n      ctrl.on('click', function (e) {\\n        if (ctrl.value().length === 0 && e.target.nodeName === 'INPUT') {\\n          autocomplete('');\\n        }\\n      });\\n      ctrl.on('PostRender', function () {\\n        ctrl.getRoot().on('submit', function (e) {\\n          if (!e.isDefaultPrevented()) {\\n            addToHistory(ctrl.value(), fileType);\\n          }\\n        });\\n      });\\n    };\\n    var statusToUiState = function (result) {\\n      var status = result.status, message = result.message;\\n      if (status === 'valid') {\\n        return {\\n          status: 'ok',\\n          message: message\\n        };\\n      } else if (status === 'unknown') {\\n        return {\\n          status: 'warn',\\n          message: message\\n        };\\n      } else if (status === 'invalid') {\\n        return {\\n          status: 'warn',\\n          message: message\\n        };\\n      } else {\\n        return {\\n          status: 'none',\\n          message: ''\\n        };\\n      }\\n    };\\n    var setupLinkValidatorHandler = function (ctrl, editorSettings, fileType) {\\n      var validatorHandler = editorSettings.filepicker_validator_handler;\\n      if (validatorHandler) {\\n        var validateUrl_1 = function (url) {\\n          if (url.length === 0) {\\n            ctrl.statusLevel('none');\\n            return;\\n          }\\n          validatorHandler({\\n            url: url,\\n            type: fileType\\n          }, function (result) {\\n            var uiState = statusToUiState(result);\\n            ctrl.statusMessage(uiState.message);\\n            ctrl.statusLevel(uiState.status);\\n          });\\n        };\\n        ctrl.state.on('change:value', function (e) {\\n          validateUrl_1(e.value);\\n        });\\n      }\\n    };\\n    var FilePicker = ComboBox.extend({\\n      Statics: { clearHistory: clearHistory },\\n      init: function (settings) {\\n        var self = this, editor = getActiveEditor(), editorSettings = editor.settings;\\n        var actionCallback, fileBrowserCallback, fileBrowserCallbackTypes;\\n        var fileType = settings.filetype;\\n        settings.spellcheck = false;\\n        fileBrowserCallbackTypes = editorSettings.file_picker_types || editorSettings.file_browser_callback_types;\\n        if (fileBrowserCallbackTypes) {\\n          fileBrowserCallbackTypes = global$2.makeMap(fileBrowserCallbackTypes, /[, ]/);\\n        }\\n        if (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType]) {\\n          fileBrowserCallback = editorSettings.file_picker_callback;\\n          if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) {\\n            actionCallback = function () {\\n              var meta = self.fire('beforecall').meta;\\n              meta = global$2.extend({ filetype: fileType }, meta);\\n              fileBrowserCallback.call(editor, function (value, meta) {\\n                self.value(value).fire('change', { meta: meta });\\n              }, self.value(), meta);\\n            };\\n          } else {\\n            fileBrowserCallback = editorSettings.file_browser_callback;\\n            if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) {\\n              actionCallback = function () {\\n                fileBrowserCallback(self.getEl('inp').id, self.value(), fileType, window);\\n              };\\n            }\\n          }\\n        }\\n        if (actionCallback) {\\n          settings.icon = 'browse';\\n          settings.onaction = actionCallback;\\n        }\\n        self._super(settings);\\n        self.classes.add('filepicker');\\n        setupAutoCompleteHandler(self, editorSettings, editor.getBody(), fileType);\\n        setupLinkValidatorHandler(self, editorSettings, fileType);\\n      }\\n    });\\n\\n    var FitLayout = AbsoluteLayout.extend({\\n      recalc: function (container) {\\n        var contLayoutRect = container.layoutRect(), paddingBox = container.paddingBox;\\n        container.items().filter(':visible').each(function (ctrl) {\\n          ctrl.layoutRect({\\n            x: paddingBox.left,\\n            y: paddingBox.top,\\n            w: contLayoutRect.innerW - paddingBox.right - paddingBox.left,\\n            h: contLayoutRect.innerH - paddingBox.top - paddingBox.bottom\\n          });\\n          if (ctrl.recalc) {\\n            ctrl.recalc();\\n          }\\n        });\\n      }\\n    });\\n\\n    var FlexLayout = AbsoluteLayout.extend({\\n      recalc: function (container) {\\n        var i, l, items, contLayoutRect, contPaddingBox, contSettings, align, pack, spacing, totalFlex, availableSpace, direction;\\n        var ctrl, ctrlLayoutRect, ctrlSettings, flex;\\n        var maxSizeItems = [];\\n        var size, maxSize, ratio, rect, pos, maxAlignEndPos;\\n        var sizeName, minSizeName, posName, maxSizeName, beforeName, innerSizeName, deltaSizeName, contentSizeName;\\n        var alignAxisName, alignInnerSizeName, alignSizeName, alignMinSizeName, alignBeforeName, alignAfterName;\\n        var alignDeltaSizeName, alignContentSizeName;\\n        var max = Math.max, min = Math.min;\\n        items = container.items().filter(':visible');\\n        contLayoutRect = container.layoutRect();\\n        contPaddingBox = container.paddingBox;\\n        contSettings = container.settings;\\n        direction = container.isRtl() ? contSettings.direction || 'row-reversed' : contSettings.direction;\\n        align = contSettings.align;\\n        pack = container.isRtl() ? contSettings.pack || 'end' : contSettings.pack;\\n        spacing = contSettings.spacing || 0;\\n        if (direction === 'row-reversed' || direction === 'column-reverse') {\\n          items = items.set(items.toArray().reverse());\\n          direction = direction.split('-')[0];\\n        }\\n        if (direction === 'column') {\\n          posName = 'y';\\n          sizeName = 'h';\\n          minSizeName = 'minH';\\n          maxSizeName = 'maxH';\\n          innerSizeName = 'innerH';\\n          beforeName = 'top';\\n          deltaSizeName = 'deltaH';\\n          contentSizeName = 'contentH';\\n          alignBeforeName = 'left';\\n          alignSizeName = 'w';\\n          alignAxisName = 'x';\\n          alignInnerSizeName = 'innerW';\\n          alignMinSizeName = 'minW';\\n          alignAfterName = 'right';\\n          alignDeltaSizeName = 'deltaW';\\n          alignContentSizeName = 'contentW';\\n        } else {\\n          posName = 'x';\\n          sizeName = 'w';\\n          minSizeName = 'minW';\\n          maxSizeName = 'maxW';\\n          innerSizeName = 'innerW';\\n          beforeName = 'left';\\n          deltaSizeName = 'deltaW';\\n          contentSizeName = 'contentW';\\n          alignBeforeName = 'top';\\n          alignSizeName = 'h';\\n          alignAxisName = 'y';\\n          alignInnerSizeName = 'innerH';\\n          alignMinSizeName = 'minH';\\n          alignAfterName = 'bottom';\\n          alignDeltaSizeName = 'deltaH';\\n          alignContentSizeName = 'contentH';\\n        }\\n        availableSpace = contLayoutRect[innerSizeName] - contPaddingBox[beforeName] - contPaddingBox[beforeName];\\n        maxAlignEndPos = totalFlex = 0;\\n        for (i = 0, l = items.length; i < l; i++) {\\n          ctrl = items[i];\\n          ctrlLayoutRect = ctrl.layoutRect();\\n          ctrlSettings = ctrl.settings;\\n          flex = ctrlSettings.flex;\\n          availableSpace -= i < l - 1 ? spacing : 0;\\n          if (flex > 0) {\\n            totalFlex += flex;\\n            if (ctrlLayoutRect[maxSizeName]) {\\n              maxSizeItems.push(ctrl);\\n            }\\n            ctrlLayoutRect.flex = flex;\\n          }\\n          availableSpace -= ctrlLayoutRect[minSizeName];\\n          size = contPaddingBox[alignBeforeName] + ctrlLayoutRect[alignMinSizeName] + contPaddingBox[alignAfterName];\\n          if (size > maxAlignEndPos) {\\n            maxAlignEndPos = size;\\n          }\\n        }\\n        rect = {};\\n        if (availableSpace < 0) {\\n          rect[minSizeName] = contLayoutRect[minSizeName] - availableSpace + contLayoutRect[deltaSizeName];\\n        } else {\\n          rect[minSizeName] = contLayoutRect[innerSizeName] - availableSpace + contLayoutRect[deltaSizeName];\\n        }\\n        rect[alignMinSizeName] = maxAlignEndPos + contLayoutRect[alignDeltaSizeName];\\n        rect[contentSizeName] = contLayoutRect[innerSizeName] - availableSpace;\\n        rect[alignContentSizeName] = maxAlignEndPos;\\n        rect.minW = min(rect.minW, contLayoutRect.maxW);\\n        rect.minH = min(rect.minH, contLayoutRect.maxH);\\n        rect.minW = max(rect.minW, contLayoutRect.startMinWidth);\\n        rect.minH = max(rect.minH, contLayoutRect.startMinHeight);\\n        if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) {\\n          rect.w = rect.minW;\\n          rect.h = rect.minH;\\n          container.layoutRect(rect);\\n          this.recalc(container);\\n          if (container._lastRect === null) {\\n            var parentCtrl = container.parent();\\n            if (parentCtrl) {\\n              parentCtrl._lastRect = null;\\n              parentCtrl.recalc();\\n            }\\n          }\\n          return;\\n        }\\n        ratio = availableSpace / totalFlex;\\n        for (i = 0, l = maxSizeItems.length; i < l; i++) {\\n          ctrl = maxSizeItems[i];\\n          ctrlLayoutRect = ctrl.layoutRect();\\n          maxSize = ctrlLayoutRect[maxSizeName];\\n          size = ctrlLayoutRect[minSizeName] + ctrlLayoutRect.flex * ratio;\\n          if (size > maxSize) {\\n            availableSpace -= ctrlLayoutRect[maxSizeName] - ctrlLayoutRect[minSizeName];\\n            totalFlex -= ctrlLayoutRect.flex;\\n            ctrlLayoutRect.flex = 0;\\n            ctrlLayoutRect.maxFlexSize = maxSize;\\n          } else {\\n            ctrlLayoutRect.maxFlexSize = 0;\\n          }\\n        }\\n        ratio = availableSpace / totalFlex;\\n        pos = contPaddingBox[beforeName];\\n        rect = {};\\n        if (totalFlex === 0) {\\n          if (pack === 'end') {\\n            pos = availableSpace + contPaddingBox[beforeName];\\n          } else if (pack === 'center') {\\n            pos = Math.round(contLayoutRect[innerSizeName] / 2 - (contLayoutRect[innerSizeName] - availableSpace) / 2) + contPaddingBox[beforeName];\\n            if (pos < 0) {\\n              pos = contPaddingBox[beforeName];\\n            }\\n          } else if (pack === 'justify') {\\n            pos = contPaddingBox[beforeName];\\n            spacing = Math.floor(availableSpace / (items.length - 1));\\n          }\\n        }\\n        rect[alignAxisName] = contPaddingBox[alignBeforeName];\\n        for (i = 0, l = items.length; i < l; i++) {\\n          ctrl = items[i];\\n          ctrlLayoutRect = ctrl.layoutRect();\\n          size = ctrlLayoutRect.maxFlexSize || ctrlLayoutRect[minSizeName];\\n          if (align === 'center') {\\n            rect[alignAxisName] = Math.round(contLayoutRect[alignInnerSizeName] / 2 - ctrlLayoutRect[alignSizeName] / 2);\\n          } else if (align === 'stretch') {\\n            rect[alignSizeName] = max(ctrlLayoutRect[alignMinSizeName] || 0, contLayoutRect[alignInnerSizeName] - contPaddingBox[alignBeforeName] - contPaddingBox[alignAfterName]);\\n            rect[alignAxisName] = contPaddingBox[alignBeforeName];\\n          } else if (align === 'end') {\\n            rect[alignAxisName] = contLayoutRect[alignInnerSizeName] - ctrlLayoutRect[alignSizeName] - contPaddingBox.top;\\n          }\\n          if (ctrlLayoutRect.flex > 0) {\\n            size += ctrlLayoutRect.flex * ratio;\\n          }\\n          rect[sizeName] = size;\\n          rect[posName] = pos;\\n          ctrl.layoutRect(rect);\\n          if (ctrl.recalc) {\\n            ctrl.recalc();\\n          }\\n          pos += size + spacing;\\n        }\\n      }\\n    });\\n\\n    var FlowLayout = Layout.extend({\\n      Defaults: {\\n        containerClass: 'flow-layout',\\n        controlClass: 'flow-layout-item',\\n        endClass: 'break'\\n      },\\n      recalc: function (container) {\\n        container.items().filter(':visible').each(function (ctrl) {\\n          if (ctrl.recalc) {\\n            ctrl.recalc();\\n          }\\n        });\\n      },\\n      isNative: function () {\\n        return true;\\n      }\\n    });\\n\\n    var descendant = function (scope, selector) {\\n      return one(selector, scope);\\n    };\\n\\n    var toggleFormat = function (editor, fmt) {\\n      return function () {\\n        editor.execCommand('mceToggleFormat', false, fmt);\\n      };\\n    };\\n    var addFormatChangedListener = function (editor, name, changed) {\\n      var handler = function (state) {\\n        changed(state, name);\\n      };\\n      if (editor.formatter) {\\n        editor.formatter.formatChanged(name, handler);\\n      } else {\\n        editor.on('init', function () {\\n          editor.formatter.formatChanged(name, handler);\\n        });\\n      }\\n    };\\n    var postRenderFormatToggle = function (editor, name) {\\n      return function (e) {\\n        addFormatChangedListener(editor, name, function (state) {\\n          e.control.active(state);\\n        });\\n      };\\n    };\\n\\n    var register = function (editor) {\\n      var alignFormats = [\\n        'alignleft',\\n        'aligncenter',\\n        'alignright',\\n        'alignjustify'\\n      ];\\n      var defaultAlign = 'alignleft';\\n      var alignMenuItems = [\\n        {\\n          text: 'Left',\\n          icon: 'alignleft',\\n          onclick: toggleFormat(editor, 'alignleft')\\n        },\\n        {\\n          text: 'Center',\\n          icon: 'aligncenter',\\n          onclick: toggleFormat(editor, 'aligncenter')\\n        },\\n        {\\n          text: 'Right',\\n          icon: 'alignright',\\n          onclick: toggleFormat(editor, 'alignright')\\n        },\\n        {\\n          text: 'Justify',\\n          icon: 'alignjustify',\\n          onclick: toggleFormat(editor, 'alignjustify')\\n        }\\n      ];\\n      editor.addMenuItem('align', {\\n        text: 'Align',\\n        menu: alignMenuItems\\n      });\\n      editor.addButton('align', {\\n        type: 'menubutton',\\n        icon: defaultAlign,\\n        menu: alignMenuItems,\\n        onShowMenu: function (e) {\\n          var menu = e.control.menu;\\n          global$2.each(alignFormats, function (formatName, idx) {\\n            menu.items().eq(idx).each(function (item) {\\n              return item.active(editor.formatter.match(formatName));\\n            });\\n          });\\n        },\\n        onPostRender: function (e) {\\n          var ctrl = e.control;\\n          global$2.each(alignFormats, function (formatName, idx) {\\n            addFormatChangedListener(editor, formatName, function (state) {\\n              ctrl.icon(defaultAlign);\\n              if (state) {\\n                ctrl.icon(formatName);\\n              }\\n            });\\n          });\\n        }\\n      });\\n      global$2.each({\\n        alignleft: [\\n          'Align left',\\n          'JustifyLeft'\\n        ],\\n        aligncenter: [\\n          'Align center',\\n          'JustifyCenter'\\n        ],\\n        alignright: [\\n          'Align right',\\n          'JustifyRight'\\n        ],\\n        alignjustify: [\\n          'Justify',\\n          'JustifyFull'\\n        ],\\n        alignnone: [\\n          'No alignment',\\n          'JustifyNone'\\n        ]\\n      }, function (item, name) {\\n        editor.addButton(name, {\\n          active: false,\\n          tooltip: item[0],\\n          cmd: item[1],\\n          onPostRender: postRenderFormatToggle(editor, name)\\n        });\\n      });\\n    };\\n    var Align = { register: register };\\n\\n    var getFirstFont = function (fontFamily) {\\n      return fontFamily ? fontFamily.split(',')[0] : '';\\n    };\\n    var findMatchingValue = function (items, fontFamily) {\\n      var font = fontFamily ? fontFamily.toLowerCase() : '';\\n      var value;\\n      global$2.each(items, function (item) {\\n        if (item.value.toLowerCase() === font) {\\n          value = item.value;\\n        }\\n      });\\n      global$2.each(items, function (item) {\\n        if (!value && getFirstFont(item.value).toLowerCase() === getFirstFont(font).toLowerCase()) {\\n          value = item.value;\\n        }\\n      });\\n      return value;\\n    };\\n    var createFontNameListBoxChangeHandler = function (editor, items) {\\n      return function () {\\n        var self = this;\\n        self.state.set('value', null);\\n        editor.on('init nodeChange', function (e) {\\n          var fontFamily = editor.queryCommandValue('FontName');\\n          var match = findMatchingValue(items, fontFamily);\\n          self.value(match ? match : null);\\n          if (!match && fontFamily) {\\n            self.text(getFirstFont(fontFamily));\\n          }\\n        });\\n      };\\n    };\\n    var createFormats = function (formats) {\\n      formats = formats.replace(/;$/, '').split(';');\\n      var i = formats.length;\\n      while (i--) {\\n        formats[i] = formats[i].split('=');\\n      }\\n      return formats;\\n    };\\n    var getFontItems = function (editor) {\\n      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';\\n      var fonts = createFormats(editor.settings.font_formats || defaultFontsFormats);\\n      return global$2.map(fonts, function (font) {\\n        return {\\n          text: { raw: font[0] },\\n          value: font[1],\\n          textStyle: font[1].indexOf('dings') === -1 ? 'font-family:' + font[1] : ''\\n        };\\n      });\\n    };\\n    var registerButtons = function (editor) {\\n      editor.addButton('fontselect', function () {\\n        var items = getFontItems(editor);\\n        return {\\n          type: 'listbox',\\n          text: 'Font Family',\\n          tooltip: 'Font Family',\\n          values: items,\\n          fixedWidth: true,\\n          onPostRender: createFontNameListBoxChangeHandler(editor, items),\\n          onselect: function (e) {\\n            if (e.control.settings.value) {\\n              editor.execCommand('FontName', false, e.control.settings.value);\\n            }\\n          }\\n        };\\n      });\\n    };\\n    var register$1 = function (editor) {\\n      registerButtons(editor);\\n    };\\n    var FontSelect = { register: register$1 };\\n\\n    var round = function (number, precision) {\\n      var factor = Math.pow(10, precision);\\n      return Math.round(number * factor) / factor;\\n    };\\n    var toPt = function (fontSize, precision) {\\n      if (/[0-9.]+px$/.test(fontSize)) {\\n        return round(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';\\n      }\\n      return fontSize;\\n    };\\n    var findMatchingValue$1 = function (items, pt, px) {\\n      var value;\\n      global$2.each(items, function (item) {\\n        if (item.value === px) {\\n          value = px;\\n        } else if (item.value === pt) {\\n          value = pt;\\n        }\\n      });\\n      return value;\\n    };\\n    var createFontSizeListBoxChangeHandler = function (editor, items) {\\n      return function () {\\n        var self = this;\\n        editor.on('init nodeChange', function (e) {\\n          var px, pt, precision, match;\\n          px = editor.queryCommandValue('FontSize');\\n          if (px) {\\n            for (precision = 3; !match && precision >= 0; precision--) {\\n              pt = toPt(px, precision);\\n              match = findMatchingValue$1(items, pt, px);\\n            }\\n          }\\n          self.value(match ? match : null);\\n          if (!match) {\\n            self.text(pt);\\n          }\\n        });\\n      };\\n    };\\n    var getFontSizeItems = function (editor) {\\n      var defaultFontsizeFormats = '8pt 10pt 12pt 14pt 18pt 24pt 36pt';\\n      var fontsizeFormats = editor.settings.fontsize_formats || defaultFontsizeFormats;\\n      return global$2.map(fontsizeFormats.split(' '), function (item) {\\n        var text = item, value = item;\\n        var values = item.split('=');\\n        if (values.length > 1) {\\n          text = values[0];\\n          value = values[1];\\n        }\\n        return {\\n          text: text,\\n          value: value\\n        };\\n      });\\n    };\\n    var registerButtons$1 = function (editor) {\\n      editor.addButton('fontsizeselect', function () {\\n        var items = getFontSizeItems(editor);\\n        return {\\n          type: 'listbox',\\n          text: 'Font Sizes',\\n          tooltip: 'Font Sizes',\\n          values: items,\\n          fixedWidth: true,\\n          onPostRender: createFontSizeListBoxChangeHandler(editor, items),\\n          onclick: function (e) {\\n            if (e.control.settings.value) {\\n              editor.execCommand('FontSize', false, e.control.settings.value);\\n            }\\n          }\\n        };\\n      });\\n    };\\n    var register$2 = function (editor) {\\n      registerButtons$1(editor);\\n    };\\n    var FontSizeSelect = { register: register$2 };\\n\\n    var hideMenuObjects = function (editor, menu) {\\n      var count = menu.length;\\n      global$2.each(menu, function (item) {\\n        if (item.menu) {\\n          item.hidden = hideMenuObjects(editor, item.menu) === 0;\\n        }\\n        var formatName = item.format;\\n        if (formatName) {\\n          item.hidden = !editor.formatter.canApply(formatName);\\n        }\\n        if (item.hidden) {\\n          count--;\\n        }\\n      });\\n      return count;\\n    };\\n    var hideFormatMenuItems = function (editor, menu) {\\n      var count = menu.items().length;\\n      menu.items().each(function (item) {\\n        if (item.menu) {\\n          item.visible(hideFormatMenuItems(editor, item.menu) > 0);\\n        }\\n        if (!item.menu && item.settings.menu) {\\n          item.visible(hideMenuObjects(editor, item.settings.menu) > 0);\\n        }\\n        var formatName = item.settings.format;\\n        if (formatName) {\\n          item.visible(editor.formatter.canApply(formatName));\\n        }\\n        if (!item.visible()) {\\n          count--;\\n        }\\n      });\\n      return count;\\n    };\\n    var createFormatMenu = function (editor) {\\n      var count = 0;\\n      var newFormats = [];\\n      var defaultStyleFormats = [\\n        {\\n          title: 'Headings',\\n          items: [\\n            {\\n              title: 'Heading 1',\\n              format: 'h1'\\n            },\\n            {\\n              title: 'Heading 2',\\n              format: 'h2'\\n            },\\n            {\\n              title: 'Heading 3',\\n              format: 'h3'\\n            },\\n            {\\n              title: 'Heading 4',\\n              format: 'h4'\\n            },\\n            {\\n              title: 'Heading 5',\\n              format: 'h5'\\n            },\\n            {\\n              title: 'Heading 6',\\n              format: 'h6'\\n            }\\n          ]\\n        },\\n        {\\n          title: 'Inline',\\n          items: [\\n            {\\n              title: 'Bold',\\n              icon: 'bold',\\n              format: 'bold'\\n            },\\n            {\\n              title: 'Italic',\\n              icon: 'italic',\\n              format: 'italic'\\n            },\\n            {\\n              title: 'Underline',\\n              icon: 'underline',\\n              format: 'underline'\\n            },\\n            {\\n              title: 'Strikethrough',\\n              icon: 'strikethrough',\\n              format: 'strikethrough'\\n            },\\n            {\\n              title: 'Superscript',\\n              icon: 'superscript',\\n              format: 'superscript'\\n            },\\n            {\\n              title: 'Subscript',\\n              icon: 'subscript',\\n              format: 'subscript'\\n            },\\n            {\\n              title: 'Code',\\n              icon: 'code',\\n              format: 'code'\\n            }\\n          ]\\n        },\\n        {\\n          title: 'Blocks',\\n          items: [\\n            {\\n              title: 'Paragraph',\\n              format: 'p'\\n            },\\n            {\\n              title: 'Blockquote',\\n              format: 'blockquote'\\n            },\\n            {\\n              title: 'Div',\\n              format: 'div'\\n            },\\n            {\\n              title: 'Pre',\\n              format: 'pre'\\n            }\\n          ]\\n        },\\n        {\\n          title: 'Alignment',\\n          items: [\\n            {\\n              title: 'Left',\\n              icon: 'alignleft',\\n              format: 'alignleft'\\n            },\\n            {\\n              title: 'Center',\\n              icon: 'aligncenter',\\n              format: 'aligncenter'\\n            },\\n            {\\n              title: 'Right',\\n              icon: 'alignright',\\n              format: 'alignright'\\n            },\\n            {\\n              title: 'Justify',\\n              icon: 'alignjustify',\\n              format: 'alignjustify'\\n            }\\n          ]\\n        }\\n      ];\\n      var createMenu = function (formats) {\\n        var menu = [];\\n        if (!formats) {\\n          return;\\n        }\\n        global$2.each(formats, function (format) {\\n          var menuItem = {\\n            text: format.title,\\n            icon: format.icon\\n          };\\n          if (format.items) {\\n            menuItem.menu = createMenu(format.items);\\n          } else {\\n            var formatName = format.format || 'custom' + count++;\\n            if (!format.format) {\\n              format.name = formatName;\\n              newFormats.push(format);\\n            }\\n            menuItem.format = formatName;\\n            menuItem.cmd = format.cmd;\\n          }\\n          menu.push(menuItem);\\n        });\\n        return menu;\\n      };\\n      var createStylesMenu = function () {\\n        var menu;\\n        if (editor.settings.style_formats_merge) {\\n          if (editor.settings.style_formats) {\\n            menu = createMenu(defaultStyleFormats.concat(editor.settings.style_formats));\\n          } else {\\n            menu = createMenu(defaultStyleFormats);\\n          }\\n        } else {\\n          menu = createMenu(editor.settings.style_formats || defaultStyleFormats);\\n        }\\n        return menu;\\n      };\\n      editor.on('init', function () {\\n        global$2.each(newFormats, function (format) {\\n          editor.formatter.register(format.name, format);\\n        });\\n      });\\n      return {\\n        type: 'menu',\\n        items: createStylesMenu(),\\n        onPostRender: function (e) {\\n          editor.fire('renderFormatsMenu', { control: e.control });\\n        },\\n        itemDefaults: {\\n          preview: true,\\n          textStyle: function () {\\n            if (this.settings.format) {\\n              return editor.formatter.getCssText(this.settings.format);\\n            }\\n          },\\n          onPostRender: function () {\\n            var self = this;\\n            self.parent().on('show', function () {\\n              var formatName, command;\\n              formatName = self.settings.format;\\n              if (formatName) {\\n                self.disabled(!editor.formatter.canApply(formatName));\\n                self.active(editor.formatter.match(formatName));\\n              }\\n              command = self.settings.cmd;\\n              if (command) {\\n                self.active(editor.queryCommandState(command));\\n              }\\n            });\\n          },\\n          onclick: function () {\\n            if (this.settings.format) {\\n              toggleFormat(editor, this.settings.format)();\\n            }\\n            if (this.settings.cmd) {\\n              editor.execCommand(this.settings.cmd);\\n            }\\n          }\\n        }\\n      };\\n    };\\n    var registerMenuItems = function (editor, formatMenu) {\\n      editor.addMenuItem('formats', {\\n        text: 'Formats',\\n        menu: formatMenu\\n      });\\n    };\\n    var registerButtons$2 = function (editor, formatMenu) {\\n      editor.addButton('styleselect', {\\n        type: 'menubutton',\\n        text: 'Formats',\\n        menu: formatMenu,\\n        onShowMenu: function () {\\n          if (editor.settings.style_formats_autohide) {\\n            hideFormatMenuItems(editor, this.menu);\\n          }\\n        }\\n      });\\n    };\\n    var register$3 = function (editor) {\\n      var formatMenu = createFormatMenu(editor);\\n      registerMenuItems(editor, formatMenu);\\n      registerButtons$2(editor, formatMenu);\\n    };\\n    var Formats = { register: register$3 };\\n\\n    var defaultBlocks = 'Paragraph=p;' + 'Heading 1=h1;' + 'Heading 2=h2;' + 'Heading 3=h3;' + 'Heading 4=h4;' + 'Heading 5=h5;' + 'Heading 6=h6;' + 'Preformatted=pre';\\n    var createFormats$1 = function (formats) {\\n      formats = formats.replace(/;$/, '').split(';');\\n      var i = formats.length;\\n      while (i--) {\\n        formats[i] = formats[i].split('=');\\n      }\\n      return formats;\\n    };\\n    var createListBoxChangeHandler = function (editor, items, formatName) {\\n      return function () {\\n        var self = this;\\n        editor.on('nodeChange', function (e) {\\n          var formatter = editor.formatter;\\n          var value = null;\\n          global$2.each(e.parents, function (node) {\\n            global$2.each(items, function (item) {\\n              if (formatName) {\\n                if (formatter.matchNode(node, formatName, { value: item.value })) {\\n                  value = item.value;\\n                }\\n              } else {\\n                if (formatter.matchNode(node, item.value)) {\\n                  value = item.value;\\n                }\\n              }\\n              if (value) {\\n                return false;\\n              }\\n            });\\n            if (value) {\\n              return false;\\n            }\\n          });\\n          self.value(value);\\n        });\\n      };\\n    };\\n    var lazyFormatSelectBoxItems = function (editor, blocks) {\\n      return function () {\\n        var items = [];\\n        global$2.each(blocks, function (block) {\\n          items.push({\\n            text: block[0],\\n            value: block[1],\\n            textStyle: function () {\\n              return editor.formatter.getCssText(block[1]);\\n            }\\n          });\\n        });\\n        return {\\n          type: 'listbox',\\n          text: blocks[0][0],\\n          values: items,\\n          fixedWidth: true,\\n          onselect: function (e) {\\n            if (e.control) {\\n              var fmt = e.control.value();\\n              toggleFormat(editor, fmt)();\\n            }\\n          },\\n          onPostRender: createListBoxChangeHandler(editor, items)\\n        };\\n      };\\n    };\\n    var buildMenuItems = function (editor, blocks) {\\n      return global$2.map(blocks, function (block) {\\n        return {\\n          text: block[0],\\n          onclick: toggleFormat(editor, block[1]),\\n          textStyle: function () {\\n            return editor.formatter.getCssText(block[1]);\\n          }\\n        };\\n      });\\n    };\\n    var register$4 = function (editor) {\\n      var blocks = createFormats$1(editor.settings.block_formats || defaultBlocks);\\n      editor.addMenuItem('blockformats', {\\n        text: 'Blocks',\\n        menu: buildMenuItems(editor, blocks)\\n      });\\n      editor.addButton('formatselect', lazyFormatSelectBoxItems(editor, blocks));\\n    };\\n    var FormatSelect = { register: register$4 };\\n\\n    var createCustomMenuItems = function (editor, names) {\\n      var items, nameList;\\n      if (typeof names === 'string') {\\n        nameList = names.split(' ');\\n      } else if (global$2.isArray(names)) {\\n        return flatten(global$2.map(names, function (names) {\\n          return createCustomMenuItems(editor, names);\\n        }));\\n      }\\n      items = global$2.grep(nameList, function (name) {\\n        return name === '|' || name in editor.menuItems;\\n      });\\n      return global$2.map(items, function (name) {\\n        return name === '|' ? { text: '-' } : editor.menuItems[name];\\n      });\\n    };\\n    var isSeparator$1 = function (menuItem) {\\n      return menuItem && menuItem.text === '-';\\n    };\\n    var trimMenuItems = function (menuItems) {\\n      var menuItems2 = filter(menuItems, function (menuItem, i) {\\n        return !isSeparator$1(menuItem) || !isSeparator$1(menuItems[i - 1]);\\n      });\\n      return filter(menuItems2, function (menuItem, i) {\\n        return !isSeparator$1(menuItem) || i > 0 && i < menuItems2.length - 1;\\n      });\\n    };\\n    var createContextMenuItems = function (editor, context) {\\n      var outputMenuItems = [{ text: '-' }];\\n      var menuItems = global$2.grep(editor.menuItems, function (menuItem) {\\n        return menuItem.context === context;\\n      });\\n      global$2.each(menuItems, function (menuItem) {\\n        if (menuItem.separator === 'before') {\\n          outputMenuItems.push({ text: '|' });\\n        }\\n        if (menuItem.prependToContext) {\\n          outputMenuItems.unshift(menuItem);\\n        } else {\\n          outputMenuItems.push(menuItem);\\n        }\\n        if (menuItem.separator === 'after') {\\n          outputMenuItems.push({ text: '|' });\\n        }\\n      });\\n      return outputMenuItems;\\n    };\\n    var createInsertMenu = function (editor) {\\n      var insertButtonItems = editor.settings.insert_button_items;\\n      if (insertButtonItems) {\\n        return trimMenuItems(createCustomMenuItems(editor, insertButtonItems));\\n      } else {\\n        return trimMenuItems(createContextMenuItems(editor, 'insert'));\\n      }\\n    };\\n    var registerButtons$3 = function (editor) {\\n      editor.addButton('insert', {\\n        type: 'menubutton',\\n        icon: 'insert',\\n        menu: [],\\n        oncreatemenu: function () {\\n          this.menu.add(createInsertMenu(editor));\\n          this.menu.renderNew();\\n        }\\n      });\\n    };\\n    var register$5 = function (editor) {\\n      registerButtons$3(editor);\\n    };\\n    var InsertButton = { register: register$5 };\\n\\n    var registerFormatButtons = function (editor) {\\n      global$2.each({\\n        bold: 'Bold',\\n        italic: 'Italic',\\n        underline: 'Underline',\\n        strikethrough: 'Strikethrough',\\n        subscript: 'Subscript',\\n        superscript: 'Superscript'\\n      }, function (text, name) {\\n        editor.addButton(name, {\\n          active: false,\\n          tooltip: text,\\n          onPostRender: postRenderFormatToggle(editor, name),\\n          onclick: toggleFormat(editor, name)\\n        });\\n      });\\n    };\\n    var registerCommandButtons = function (editor) {\\n      global$2.each({\\n        outdent: [\\n          'Decrease indent',\\n          'Outdent'\\n        ],\\n        indent: [\\n          'Increase indent',\\n          'Indent'\\n        ],\\n        cut: [\\n          'Cut',\\n          'Cut'\\n        ],\\n        copy: [\\n          'Copy',\\n          'Copy'\\n        ],\\n        paste: [\\n          'Paste',\\n          'Paste'\\n        ],\\n        help: [\\n          'Help',\\n          'mceHelp'\\n        ],\\n        selectall: [\\n          'Select all',\\n          'SelectAll'\\n        ],\\n        visualaid: [\\n          'Visual aids',\\n          'mceToggleVisualAid'\\n        ],\\n        newdocument: [\\n          'New document',\\n          'mceNewDocument'\\n        ],\\n        removeformat: [\\n          'Clear formatting',\\n          'RemoveFormat'\\n        ],\\n        remove: [\\n          'Remove',\\n          'Delete'\\n        ]\\n      }, function (item, name) {\\n        editor.addButton(name, {\\n          tooltip: item[0],\\n          cmd: item[1]\\n        });\\n      });\\n    };\\n    var registerCommandToggleButtons = function (editor) {\\n      global$2.each({\\n        blockquote: [\\n          'Blockquote',\\n          'mceBlockQuote'\\n        ],\\n        subscript: [\\n          'Subscript',\\n          'Subscript'\\n        ],\\n        superscript: [\\n          'Superscript',\\n          'Superscript'\\n        ]\\n      }, function (item, name) {\\n        editor.addButton(name, {\\n          active: false,\\n          tooltip: item[0],\\n          cmd: item[1],\\n          onPostRender: postRenderFormatToggle(editor, name)\\n        });\\n      });\\n    };\\n    var registerButtons$4 = function (editor) {\\n      registerFormatButtons(editor);\\n      registerCommandButtons(editor);\\n      registerCommandToggleButtons(editor);\\n    };\\n    var registerMenuItems$1 = function (editor) {\\n      global$2.each({\\n        bold: [\\n          'Bold',\\n          'Bold',\\n          'Meta+B'\\n        ],\\n        italic: [\\n          'Italic',\\n          'Italic',\\n          'Meta+I'\\n        ],\\n        underline: [\\n          'Underline',\\n          'Underline',\\n          'Meta+U'\\n        ],\\n        strikethrough: [\\n          'Strikethrough',\\n          'Strikethrough'\\n        ],\\n        subscript: [\\n          'Subscript',\\n          'Subscript'\\n        ],\\n        superscript: [\\n          'Superscript',\\n          'Superscript'\\n        ],\\n        removeformat: [\\n          'Clear formatting',\\n          'RemoveFormat'\\n        ],\\n        newdocument: [\\n          'New document',\\n          'mceNewDocument'\\n        ],\\n        cut: [\\n          'Cut',\\n          'Cut',\\n          'Meta+X'\\n        ],\\n        copy: [\\n          'Copy',\\n          'Copy',\\n          'Meta+C'\\n        ],\\n        paste: [\\n          'Paste',\\n          'Paste',\\n          'Meta+V'\\n        ],\\n        selectall: [\\n          'Select all',\\n          'SelectAll',\\n          'Meta+A'\\n        ]\\n      }, function (item, name) {\\n        editor.addMenuItem(name, {\\n          text: item[0],\\n          icon: name,\\n          shortcut: item[2],\\n          cmd: item[1]\\n        });\\n      });\\n      editor.addMenuItem('codeformat', {\\n        text: 'Code',\\n        icon: 'code',\\n        onclick: toggleFormat(editor, 'code')\\n      });\\n    };\\n    var register$6 = function (editor) {\\n      registerButtons$4(editor);\\n      registerMenuItems$1(editor);\\n    };\\n    var SimpleControls = { register: register$6 };\\n\\n    var toggleUndoRedoState = function (editor, type) {\\n      return function () {\\n        var self = this;\\n        var checkState = function () {\\n          var typeFn = type === 'redo' ? 'hasRedo' : 'hasUndo';\\n          return editor.undoManager ? editor.undoManager[typeFn]() : false;\\n        };\\n        self.disabled(!checkState());\\n        editor.on('Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', function () {\\n          self.disabled(editor.readonly || !checkState());\\n        });\\n      };\\n    };\\n    var registerMenuItems$2 = function (editor) {\\n      editor.addMenuItem('undo', {\\n        text: 'Undo',\\n        icon: 'undo',\\n        shortcut: 'Meta+Z',\\n        onPostRender: toggleUndoRedoState(editor, 'undo'),\\n        cmd: 'undo'\\n      });\\n      editor.addMenuItem('redo', {\\n        text: 'Redo',\\n        icon: 'redo',\\n        shortcut: 'Meta+Y',\\n        onPostRender: toggleUndoRedoState(editor, 'redo'),\\n        cmd: 'redo'\\n      });\\n    };\\n    var registerButtons$5 = function (editor) {\\n      editor.addButton('undo', {\\n        tooltip: 'Undo',\\n        onPostRender: toggleUndoRedoState(editor, 'undo'),\\n        cmd: 'undo'\\n      });\\n      editor.addButton('redo', {\\n        tooltip: 'Redo',\\n        onPostRender: toggleUndoRedoState(editor, 'redo'),\\n        cmd: 'redo'\\n      });\\n    };\\n    var register$7 = function (editor) {\\n      registerMenuItems$2(editor);\\n      registerButtons$5(editor);\\n    };\\n    var UndoRedo = { register: register$7 };\\n\\n    var toggleVisualAidState = function (editor) {\\n      return function () {\\n        var self = this;\\n        editor.on('VisualAid', function (e) {\\n          self.active(e.hasVisual);\\n        });\\n        self.active(editor.hasVisual);\\n      };\\n    };\\n    var registerMenuItems$3 = function (editor) {\\n      editor.addMenuItem('visualaid', {\\n        text: 'Visual aids',\\n        selectable: true,\\n        onPostRender: toggleVisualAidState(editor),\\n        cmd: 'mceToggleVisualAid'\\n      });\\n    };\\n    var register$8 = function (editor) {\\n      registerMenuItems$3(editor);\\n    };\\n    var VisualAid = { register: register$8 };\\n\\n    var setupEnvironment = function () {\\n      Widget.tooltips = !global$8.iOS;\\n      Control$1.translate = function (text) {\\n        return global$1.translate(text);\\n      };\\n    };\\n    var setupUiContainer = function (editor) {\\n      if (editor.settings.ui_container) {\\n        global$8.container = descendant(Element.fromDom(domGlobals.document.body), editor.settings.ui_container).fold(constant(null), function (elm) {\\n          return elm.dom();\\n        });\\n      }\\n    };\\n    var setupRtlMode = function (editor) {\\n      if (editor.rtl) {\\n        Control$1.rtl = true;\\n      }\\n    };\\n    var setupHideFloatPanels = function (editor) {\\n      editor.on('mousedown progressstate', function () {\\n        FloatPanel.hideAll();\\n      });\\n    };\\n    var setup$1 = function (editor) {\\n      setupRtlMode(editor);\\n      setupHideFloatPanels(editor);\\n      setupUiContainer(editor);\\n      setupEnvironment();\\n      FormatSelect.register(editor);\\n      Align.register(editor);\\n      SimpleControls.register(editor);\\n      UndoRedo.register(editor);\\n      FontSizeSelect.register(editor);\\n      FontSelect.register(editor);\\n      Formats.register(editor);\\n      VisualAid.register(editor);\\n      InsertButton.register(editor);\\n    };\\n    var FormatControls = { setup: setup$1 };\\n\\n    var GridLayout = AbsoluteLayout.extend({\\n      recalc: function (container) {\\n        var settings, rows, cols, items, contLayoutRect, width, height, rect, ctrlLayoutRect, ctrl, x, y, posX, posY, ctrlSettings, contPaddingBox, align, spacingH, spacingV, alignH, alignV, maxX, maxY;\\n        var colWidths = [];\\n        var rowHeights = [];\\n        var ctrlMinWidth, ctrlMinHeight, availableWidth, availableHeight, reverseRows, idx;\\n        settings = container.settings;\\n        items = container.items().filter(':visible');\\n        contLayoutRect = container.layoutRect();\\n        cols = settings.columns || Math.ceil(Math.sqrt(items.length));\\n        rows = Math.ceil(items.length / cols);\\n        spacingH = settings.spacingH || settings.spacing || 0;\\n        spacingV = settings.spacingV || settings.spacing || 0;\\n        alignH = settings.alignH || settings.align;\\n        alignV = settings.alignV || settings.align;\\n        contPaddingBox = container.paddingBox;\\n        reverseRows = 'reverseRows' in settings ? settings.reverseRows : container.isRtl();\\n        if (alignH && typeof alignH === 'string') {\\n          alignH = [alignH];\\n        }\\n        if (alignV && typeof alignV === 'string') {\\n          alignV = [alignV];\\n        }\\n        for (x = 0; x < cols; x++) {\\n          colWidths.push(0);\\n        }\\n        for (y = 0; y < rows; y++) {\\n          rowHeights.push(0);\\n        }\\n        for (y = 0; y < rows; y++) {\\n          for (x = 0; x < cols; x++) {\\n            ctrl = items[y * cols + x];\\n            if (!ctrl) {\\n              break;\\n            }\\n            ctrlLayoutRect = ctrl.layoutRect();\\n            ctrlMinWidth = ctrlLayoutRect.minW;\\n            ctrlMinHeight = ctrlLayoutRect.minH;\\n            colWidths[x] = ctrlMinWidth > colWidths[x] ? ctrlMinWidth : colWidths[x];\\n            rowHeights[y] = ctrlMinHeight > rowHeights[y] ? ctrlMinHeight : rowHeights[y];\\n          }\\n        }\\n        availableWidth = contLayoutRect.innerW - contPaddingBox.left - contPaddingBox.right;\\n        for (maxX = 0, x = 0; x < cols; x++) {\\n          maxX += colWidths[x] + (x > 0 ? spacingH : 0);\\n          availableWidth -= (x > 0 ? spacingH : 0) + colWidths[x];\\n        }\\n        availableHeight = contLayoutRect.innerH - contPaddingBox.top - contPaddingBox.bottom;\\n        for (maxY = 0, y = 0; y < rows; y++) {\\n          maxY += rowHeights[y] + (y > 0 ? spacingV : 0);\\n          availableHeight -= (y > 0 ? spacingV : 0) + rowHeights[y];\\n        }\\n        maxX += contPaddingBox.left + contPaddingBox.right;\\n        maxY += contPaddingBox.top + contPaddingBox.bottom;\\n        rect = {};\\n        rect.minW = maxX + (contLayoutRect.w - contLayoutRect.innerW);\\n        rect.minH = maxY + (contLayoutRect.h - contLayoutRect.innerH);\\n        rect.contentW = rect.minW - contLayoutRect.deltaW;\\n        rect.contentH = rect.minH - contLayoutRect.deltaH;\\n        rect.minW = Math.min(rect.minW, contLayoutRect.maxW);\\n        rect.minH = Math.min(rect.minH, contLayoutRect.maxH);\\n        rect.minW = Math.max(rect.minW, contLayoutRect.startMinWidth);\\n        rect.minH = Math.max(rect.minH, contLayoutRect.startMinHeight);\\n        if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) {\\n          rect.w = rect.minW;\\n          rect.h = rect.minH;\\n          container.layoutRect(rect);\\n          this.recalc(container);\\n          if (container._lastRect === null) {\\n            var parentCtrl = container.parent();\\n            if (parentCtrl) {\\n              parentCtrl._lastRect = null;\\n              parentCtrl.recalc();\\n            }\\n          }\\n          return;\\n        }\\n        if (contLayoutRect.autoResize) {\\n          rect = container.layoutRect(rect);\\n          rect.contentW = rect.minW - contLayoutRect.deltaW;\\n          rect.contentH = rect.minH - contLayoutRect.deltaH;\\n        }\\n        var flexV;\\n        if (settings.packV === 'start') {\\n          flexV = 0;\\n        } else {\\n          flexV = availableHeight > 0 ? Math.floor(availableHeight / rows) : 0;\\n        }\\n        var totalFlex = 0;\\n        var flexWidths = settings.flexWidths;\\n        if (flexWidths) {\\n          for (x = 0; x < flexWidths.length; x++) {\\n            totalFlex += flexWidths[x];\\n          }\\n        } else {\\n          totalFlex = cols;\\n        }\\n        var ratio = availableWidth / totalFlex;\\n        for (x = 0; x < cols; x++) {\\n          colWidths[x] += flexWidths ? flexWidths[x] * ratio : ratio;\\n        }\\n        posY = contPaddingBox.top;\\n        for (y = 0; y < rows; y++) {\\n          posX = contPaddingBox.left;\\n          height = rowHeights[y] + flexV;\\n          for (x = 0; x < cols; x++) {\\n            if (reverseRows) {\\n              idx = y * cols + cols - 1 - x;\\n            } else {\\n              idx = y * cols + x;\\n            }\\n            ctrl = items[idx];\\n            if (!ctrl) {\\n              break;\\n            }\\n            ctrlSettings = ctrl.settings;\\n            ctrlLayoutRect = ctrl.layoutRect();\\n            width = Math.max(colWidths[x], ctrlLayoutRect.startMinWidth);\\n            ctrlLayoutRect.x = posX;\\n            ctrlLayoutRect.y = posY;\\n            align = ctrlSettings.alignH || (alignH ? alignH[x] || alignH[0] : null);\\n            if (align === 'center') {\\n              ctrlLayoutRect.x = posX + width / 2 - ctrlLayoutRect.w / 2;\\n            } else if (align === 'right') {\\n              ctrlLayoutRect.x = posX + width - ctrlLayoutRect.w;\\n            } else if (align === 'stretch') {\\n              ctrlLayoutRect.w = width;\\n            }\\n            align = ctrlSettings.alignV || (alignV ? alignV[x] || alignV[0] : null);\\n            if (align === 'center') {\\n              ctrlLayoutRect.y = posY + height / 2 - ctrlLayoutRect.h / 2;\\n            } else if (align === 'bottom') {\\n              ctrlLayoutRect.y = posY + height - ctrlLayoutRect.h;\\n            } else if (align === 'stretch') {\\n              ctrlLayoutRect.h = height;\\n            }\\n            ctrl.layoutRect(ctrlLayoutRect);\\n            posX += width + spacingH;\\n            if (ctrl.recalc) {\\n              ctrl.recalc();\\n            }\\n          }\\n          posY += height + spacingV;\\n        }\\n      }\\n    });\\n\\n    var Iframe$1 = Widget.extend({\\n      renderHtml: function () {\\n        var self = this;\\n        self.classes.add('iframe');\\n        self.canFocus = false;\\n        return '<iframe id=\\\"' + self._id + '\\\" class=\\\"' + self.classes + '\\\" tabindex=\\\"-1\\\" src=\\\"' + (self.settings.url || 'javascript:\\\\'\\\\'') + '\\\" frameborder=\\\"0\\\"></iframe>';\\n      },\\n      src: function (src) {\\n        this.getEl().src = src;\\n      },\\n      html: function (html, callback) {\\n        var self = this, body = this.getEl().contentWindow.document.body;\\n        if (!body) {\\n          global$7.setTimeout(function () {\\n            self.html(html);\\n          });\\n        } else {\\n          body.innerHTML = html;\\n          if (callback) {\\n            callback();\\n          }\\n        }\\n        return this;\\n      }\\n    });\\n\\n    var InfoBox = Widget.extend({\\n      init: function (settings) {\\n        var self = this;\\n        self._super(settings);\\n        self.classes.add('widget').add('infobox');\\n        self.canFocus = false;\\n      },\\n      severity: function (level) {\\n        this.classes.remove('error');\\n        this.classes.remove('warning');\\n        this.classes.remove('success');\\n        this.classes.add(level);\\n      },\\n      help: function (state) {\\n        this.state.set('help', state);\\n      },\\n      renderHtml: function () {\\n        var self = this, prefix = self.classPrefix;\\n        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>';\\n      },\\n      bindStates: function () {\\n        var self = this;\\n        self.state.on('change:text', function (e) {\\n          self.getEl('body').firstChild.data = self.encode(e.value);\\n          if (self.state.get('rendered')) {\\n            self.updateLayoutRect();\\n          }\\n        });\\n        self.state.on('change:help', function (e) {\\n          self.classes.toggle('has-help', e.value);\\n          if (self.state.get('rendered')) {\\n            self.updateLayoutRect();\\n          }\\n        });\\n        return self._super();\\n      }\\n    });\\n\\n    var Label = Widget.extend({\\n      init: function (settings) {\\n        var self = this;\\n        self._super(settings);\\n        self.classes.add('widget').add('label');\\n        self.canFocus = false;\\n        if (settings.multiline) {\\n          self.classes.add('autoscroll');\\n        }\\n        if (settings.strong) {\\n          self.classes.add('strong');\\n        }\\n      },\\n      initLayoutRect: function () {\\n        var self = this, layoutRect = self._super();\\n        if (self.settings.multiline) {\\n          var size = funcs.getSize(self.getEl());\\n          if (size.width > layoutRect.maxW) {\\n            layoutRect.minW = layoutRect.maxW;\\n            self.classes.add('multiline');\\n          }\\n          self.getEl().style.width = layoutRect.minW + 'px';\\n          layoutRect.startMinH = layoutRect.h = layoutRect.minH = Math.min(layoutRect.maxH, funcs.getSize(self.getEl()).height);\\n        }\\n        return layoutRect;\\n      },\\n      repaint: function () {\\n        var self = this;\\n        if (!self.settings.multiline) {\\n          self.getEl().style.lineHeight = self.layoutRect().h + 'px';\\n        }\\n        return self._super();\\n      },\\n      severity: function (level) {\\n        this.classes.remove('error');\\n        this.classes.remove('warning');\\n        this.classes.remove('success');\\n        this.classes.add(level);\\n      },\\n      renderHtml: function () {\\n        var self = this;\\n        var targetCtrl, forName, forId = self.settings.forId;\\n        var text = self.settings.html ? self.settings.html : self.encode(self.state.get('text'));\\n        if (!forId && (forName = self.settings.forName)) {\\n          targetCtrl = self.getRoot().find('#' + forName)[0];\\n          if (targetCtrl) {\\n            forId = targetCtrl._id;\\n          }\\n        }\\n        if (forId) {\\n          return '<label id=\\\"' + self._id + '\\\" class=\\\"' + self.classes + '\\\"' + (forId ? ' for=\\\"' + forId + '\\\"' : '') + '>' + text + '</label>';\\n        }\\n        return '<span id=\\\"' + self._id + '\\\" class=\\\"' + self.classes + '\\\">' + text + '</span>';\\n      },\\n      bindStates: function () {\\n        var self = this;\\n        self.state.on('change:text', function (e) {\\n          self.innerHtml(self.encode(e.value));\\n          if (self.state.get('rendered')) {\\n            self.updateLayoutRect();\\n          }\\n        });\\n        return self._super();\\n      }\\n    });\\n\\n    var Toolbar$1 = Container.extend({\\n      Defaults: {\\n        role: 'toolbar',\\n        layout: 'flow'\\n      },\\n      init: function (settings) {\\n        var self = this;\\n        self._super(settings);\\n        self.classes.add('toolbar');\\n      },\\n      postRender: function () {\\n        var self = this;\\n        self.items().each(function (ctrl) {\\n          ctrl.classes.add('toolbar-item');\\n        });\\n        return self._super();\\n      }\\n    });\\n\\n    var MenuBar = Toolbar$1.extend({\\n      Defaults: {\\n        role: 'menubar',\\n        containerCls: 'menubar',\\n        ariaRoot: true,\\n        defaults: { type: 'menubutton' }\\n      }\\n    });\\n\\n    function isChildOf$1(node, parent) {\\n      while (node) {\\n        if (parent === node) {\\n          return true;\\n        }\\n        node = node.parentNode;\\n      }\\n      return false;\\n    }\\n    var MenuButton = Button.extend({\\n      init: function (settings) {\\n        var self = this;\\n        self._renderOpen = true;\\n        self._super(settings);\\n        settings = self.settings;\\n        self.classes.add('menubtn');\\n        if (settings.fixedWidth) {\\n          self.classes.add('fixed-width');\\n        }\\n        self.aria('haspopup', true);\\n        self.state.set('menu', settings.menu || self.render());\\n      },\\n      showMenu: function (toggle) {\\n        var self = this;\\n        var menu;\\n        if (self.menu && self.menu.visible() && toggle !== false) {\\n          return self.hideMenu();\\n        }\\n        if (!self.menu) {\\n          menu = self.state.get('menu') || [];\\n          self.classes.add('opened');\\n          if (menu.length) {\\n            menu = {\\n              type: 'menu',\\n              animate: true,\\n              items: menu\\n            };\\n          } else {\\n            menu.type = menu.type || 'menu';\\n            menu.animate = true;\\n          }\\n          if (!menu.renderTo) {\\n            self.menu = global$4.create(menu).parent(self).renderTo();\\n          } else {\\n            self.menu = menu.parent(self).show().renderTo();\\n          }\\n          self.fire('createmenu');\\n          self.menu.reflow();\\n          self.menu.on('cancel', function (e) {\\n            if (e.control.parent() === self.menu) {\\n              e.stopPropagation();\\n              self.focus();\\n              self.hideMenu();\\n            }\\n          });\\n          self.menu.on('select', function () {\\n            self.focus();\\n          });\\n          self.menu.on('show hide', function (e) {\\n            if (e.type === 'hide' && e.control.parent() === self) {\\n              self.classes.remove('opened-under');\\n            }\\n            if (e.control === self.menu) {\\n              self.activeMenu(e.type === 'show');\\n              self.classes.toggle('opened', e.type === 'show');\\n            }\\n            self.aria('expanded', e.type === 'show');\\n          }).fire('show');\\n        }\\n        self.menu.show();\\n        self.menu.layoutRect({ w: self.layoutRect().w });\\n        self.menu.repaint();\\n        self.menu.moveRel(self.getEl(), self.isRtl() ? [\\n          'br-tr',\\n          'tr-br'\\n        ] : [\\n          'bl-tl',\\n          'tl-bl'\\n        ]);\\n        var menuLayoutRect = self.menu.layoutRect();\\n        var selfBottom = self.$el.offset().top + self.layoutRect().h;\\n        if (selfBottom > menuLayoutRect.y && selfBottom < menuLayoutRect.y + menuLayoutRect.h) {\\n          self.classes.add('opened-under');\\n        }\\n        self.fire('showmenu');\\n      },\\n      hideMenu: function () {\\n        var self = this;\\n        if (self.menu) {\\n          self.menu.items().each(function (item) {\\n            if (item.hideMenu) {\\n              item.hideMenu();\\n            }\\n          });\\n          self.menu.hide();\\n        }\\n      },\\n      activeMenu: function (state) {\\n        this.classes.toggle('active', state);\\n      },\\n      renderHtml: function () {\\n        var self = this, id = self._id, prefix = self.classPrefix;\\n        var icon = self.settings.icon, image;\\n        var text = self.state.get('text');\\n        var textHtml = '';\\n        image = self.settings.image;\\n        if (image) {\\n          icon = 'none';\\n          if (typeof image !== 'string') {\\n            image = domGlobals.window.getSelection ? image[0] : image[1];\\n          }\\n          image = ' style=\\\"background-image: url(\\\\'' + image + '\\\\')\\\"';\\n        } else {\\n          image = '';\\n        }\\n        if (text) {\\n          self.classes.add('btn-has-text');\\n          textHtml = '<span class=\\\"' + prefix + 'txt\\\">' + self.encode(text) + '</span>';\\n        }\\n        icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';\\n        self.aria('role', self.parent() instanceof MenuBar ? 'menuitem' : 'button');\\n        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>';\\n      },\\n      postRender: function () {\\n        var self = this;\\n        self.on('click', function (e) {\\n          if (e.control === self && isChildOf$1(e.target, self.getEl())) {\\n            self.focus();\\n            self.showMenu(!e.aria);\\n            if (e.aria) {\\n              self.menu.items().filter(':visible')[0].focus();\\n            }\\n          }\\n        });\\n        self.on('mouseenter', function (e) {\\n          var overCtrl = e.control;\\n          var parent = self.parent();\\n          var hasVisibleSiblingMenu;\\n          if (overCtrl && parent && overCtrl instanceof MenuButton && overCtrl.parent() === parent) {\\n            parent.items().filter('MenuButton').each(function (ctrl) {\\n              if (ctrl.hideMenu && ctrl !== overCtrl) {\\n                if (ctrl.menu && ctrl.menu.visible()) {\\n                  hasVisibleSiblingMenu = true;\\n                }\\n                ctrl.hideMenu();\\n              }\\n            });\\n            if (hasVisibleSiblingMenu) {\\n              overCtrl.focus();\\n              overCtrl.showMenu();\\n            }\\n          }\\n        });\\n        return self._super();\\n      },\\n      bindStates: function () {\\n        var self = this;\\n        self.state.on('change:menu', function () {\\n          if (self.menu) {\\n            self.menu.remove();\\n          }\\n          self.menu = null;\\n        });\\n        return self._super();\\n      },\\n      remove: function () {\\n        this._super();\\n        if (this.menu) {\\n          this.menu.remove();\\n        }\\n      }\\n    });\\n\\n    var Menu = FloatPanel.extend({\\n      Defaults: {\\n        defaultType: 'menuitem',\\n        border: 1,\\n        layout: 'stack',\\n        role: 'application',\\n        bodyRole: 'menu',\\n        ariaRoot: true\\n      },\\n      init: function (settings) {\\n        var self = this;\\n        settings.autohide = true;\\n        settings.constrainToViewport = true;\\n        if (typeof settings.items === 'function') {\\n          settings.itemsFactory = settings.items;\\n          settings.items = [];\\n        }\\n        if (settings.itemDefaults) {\\n          var items = settings.items;\\n          var i = items.length;\\n          while (i--) {\\n            items[i] = global$2.extend({}, settings.itemDefaults, items[i]);\\n          }\\n        }\\n        self._super(settings);\\n        self.classes.add('menu');\\n        if (settings.animate && global$8.ie !== 11) {\\n          self.classes.add('animate');\\n        }\\n      },\\n      repaint: function () {\\n        this.classes.toggle('menu-align', true);\\n        this._super();\\n        this.getEl().style.height = '';\\n        this.getEl('body').style.height = '';\\n        return this;\\n      },\\n      cancel: function () {\\n        var self = this;\\n        self.hideAll();\\n        self.fire('select');\\n      },\\n      load: function () {\\n        var self = this;\\n        var time, factory;\\n        function hideThrobber() {\\n          if (self.throbber) {\\n            self.throbber.hide();\\n            self.throbber = null;\\n          }\\n        }\\n        factory = self.settings.itemsFactory;\\n        if (!factory) {\\n          return;\\n        }\\n        if (!self.throbber) {\\n          self.throbber = new Throbber(self.getEl('body'), true);\\n          if (self.items().length === 0) {\\n            self.throbber.show();\\n            self.fire('loading');\\n          } else {\\n            self.throbber.show(100, function () {\\n              self.items().remove();\\n              self.fire('loading');\\n            });\\n          }\\n          self.on('hide close', hideThrobber);\\n        }\\n        self.requestTime = time = new Date().getTime();\\n        self.settings.itemsFactory(function (items) {\\n          if (items.length === 0) {\\n            self.hide();\\n            return;\\n          }\\n          if (self.requestTime !== time) {\\n            return;\\n          }\\n          self.getEl().style.width = '';\\n          self.getEl('body').style.width = '';\\n          hideThrobber();\\n          self.items().remove();\\n          self.getEl('body').innerHTML = '';\\n          self.add(items);\\n          self.renderNew();\\n          self.fire('loaded');\\n        });\\n      },\\n      hideAll: function () {\\n        var self = this;\\n        this.find('menuitem').exec('hideMenu');\\n        return self._super();\\n      },\\n      preRender: function () {\\n        var self = this;\\n        self.items().each(function (ctrl) {\\n          var settings = ctrl.settings;\\n          if (settings.icon || settings.image || settings.selectable) {\\n            self._hasIcons = true;\\n            return false;\\n          }\\n        });\\n        if (self.settings.itemsFactory) {\\n          self.on('postrender', function () {\\n            if (self.settings.itemsFactory) {\\n              self.load();\\n            }\\n          });\\n        }\\n        self.on('show hide', function (e) {\\n          if (e.control === self) {\\n            if (e.type === 'show') {\\n              global$7.setTimeout(function () {\\n                self.classes.add('in');\\n              }, 0);\\n            } else {\\n              self.classes.remove('in');\\n            }\\n          }\\n        });\\n        return self._super();\\n      }\\n    });\\n\\n    var ListBox = MenuButton.extend({\\n      init: function (settings) {\\n        var self = this;\\n        var values, selected, selectedText, lastItemCtrl;\\n        function setSelected(menuValues) {\\n          for (var i = 0; i < menuValues.length; i++) {\\n            selected = menuValues[i].selected || settings.value === menuValues[i].value;\\n            if (selected) {\\n              selectedText = selectedText || menuValues[i].text;\\n              self.state.set('value', menuValues[i].value);\\n              return true;\\n            }\\n            if (menuValues[i].menu) {\\n              if (setSelected(menuValues[i].menu)) {\\n                return true;\\n              }\\n            }\\n          }\\n        }\\n        self._super(settings);\\n        settings = self.settings;\\n        self._values = values = settings.values;\\n        if (values) {\\n          if (typeof settings.value !== 'undefined') {\\n            setSelected(values);\\n          }\\n          if (!selected && values.length > 0) {\\n            selectedText = values[0].text;\\n            self.state.set('value', values[0].value);\\n          }\\n          self.state.set('menu', values);\\n        }\\n        self.state.set('text', settings.text || selectedText);\\n        self.classes.add('listbox');\\n        self.on('select', function (e) {\\n          var ctrl = e.control;\\n          if (lastItemCtrl) {\\n            e.lastControl = lastItemCtrl;\\n          }\\n          if (settings.multiple) {\\n            ctrl.active(!ctrl.active());\\n          } else {\\n            self.value(e.control.value());\\n          }\\n          lastItemCtrl = ctrl;\\n        });\\n      },\\n      value: function (value) {\\n        if (arguments.length === 0) {\\n          return this.state.get('value');\\n        }\\n        if (typeof value === 'undefined') {\\n          return this;\\n        }\\n        function valueExists(values) {\\n          return exists(values, function (a) {\\n            return a.menu ? valueExists(a.menu) : a.value === value;\\n          });\\n        }\\n        if (this.settings.values) {\\n          if (valueExists(this.settings.values)) {\\n            this.state.set('value', value);\\n          } else if (value === null) {\\n            this.state.set('value', null);\\n          }\\n        } else {\\n          this.state.set('value', value);\\n        }\\n        return this;\\n      },\\n      bindStates: function () {\\n        var self = this;\\n        function activateMenuItemsByValue(menu, value) {\\n          if (menu instanceof Menu) {\\n            menu.items().each(function (ctrl) {\\n              if (!ctrl.hasMenus()) {\\n                ctrl.active(ctrl.value() === value);\\n              }\\n            });\\n          }\\n        }\\n        function getSelectedItem(menuValues, value) {\\n          var selectedItem;\\n          if (!menuValues) {\\n            return;\\n          }\\n          for (var i = 0; i < menuValues.length; i++) {\\n            if (menuValues[i].value === value) {\\n              return menuValues[i];\\n            }\\n            if (menuValues[i].menu) {\\n              selectedItem = getSelectedItem(menuValues[i].menu, value);\\n              if (selectedItem) {\\n                return selectedItem;\\n              }\\n            }\\n          }\\n        }\\n        self.on('show', function (e) {\\n          activateMenuItemsByValue(e.control, self.value());\\n        });\\n        self.state.on('change:value', function (e) {\\n          var selectedItem = getSelectedItem(self.state.get('menu'), e.value);\\n          if (selectedItem) {\\n            self.text(selectedItem.text);\\n          } else {\\n            self.text(self.settings.text);\\n          }\\n        });\\n        return self._super();\\n      }\\n    });\\n\\n    var toggleTextStyle = function (ctrl, state) {\\n      var textStyle = ctrl._textStyle;\\n      if (textStyle) {\\n        var textElm = ctrl.getEl('text');\\n        textElm.setAttribute('style', textStyle);\\n        if (state) {\\n          textElm.style.color = '';\\n          textElm.style.backgroundColor = '';\\n        }\\n      }\\n    };\\n    var MenuItem = Widget.extend({\\n      Defaults: {\\n        border: 0,\\n        role: 'menuitem'\\n      },\\n      init: function (settings) {\\n        var self = this;\\n        var text;\\n        self._super(settings);\\n        settings = self.settings;\\n        self.classes.add('menu-item');\\n        if (settings.menu) {\\n          self.classes.add('menu-item-expand');\\n        }\\n        if (settings.preview) {\\n          self.classes.add('menu-item-preview');\\n        }\\n        text = self.state.get('text');\\n        if (text === '-' || text === '|') {\\n          self.classes.add('menu-item-sep');\\n          self.aria('role', 'separator');\\n          self.state.set('text', '-');\\n        }\\n        if (settings.selectable) {\\n          self.aria('role', 'menuitemcheckbox');\\n          self.classes.add('menu-item-checkbox');\\n          settings.icon = 'selected';\\n        }\\n        if (!settings.preview && !settings.selectable) {\\n          self.classes.add('menu-item-normal');\\n        }\\n        self.on('mousedown', function (e) {\\n          e.preventDefault();\\n        });\\n        if (settings.menu && !settings.ariaHideMenu) {\\n          self.aria('haspopup', true);\\n        }\\n      },\\n      hasMenus: function () {\\n        return !!this.settings.menu;\\n      },\\n      showMenu: function () {\\n        var self = this;\\n        var settings = self.settings;\\n        var menu;\\n        var parent = self.parent();\\n        parent.items().each(function (ctrl) {\\n          if (ctrl !== self) {\\n            ctrl.hideMenu();\\n          }\\n        });\\n        if (settings.menu) {\\n          menu = self.menu;\\n          if (!menu) {\\n            menu = settings.menu;\\n            if (menu.length) {\\n              menu = {\\n                type: 'menu',\\n                items: menu\\n              };\\n            } else {\\n              menu.type = menu.type || 'menu';\\n            }\\n            if (parent.settings.itemDefaults) {\\n              menu.itemDefaults = parent.settings.itemDefaults;\\n            }\\n            menu = self.menu = global$4.create(menu).parent(self).renderTo();\\n            menu.reflow();\\n            menu.on('cancel', function (e) {\\n              e.stopPropagation();\\n              self.focus();\\n              menu.hide();\\n            });\\n            menu.on('show hide', function (e) {\\n              if (e.control.items) {\\n                e.control.items().each(function (ctrl) {\\n                  ctrl.active(ctrl.settings.selected);\\n                });\\n              }\\n            }).fire('show');\\n            menu.on('hide', function (e) {\\n              if (e.control === menu) {\\n                self.classes.remove('selected');\\n              }\\n            });\\n            menu.submenu = true;\\n          } else {\\n            menu.show();\\n          }\\n          menu._parentMenu = parent;\\n          menu.classes.add('menu-sub');\\n          var rel = menu.testMoveRel(self.getEl(), self.isRtl() ? [\\n            'tl-tr',\\n            'bl-br',\\n            'tr-tl',\\n            'br-bl'\\n          ] : [\\n            'tr-tl',\\n            'br-bl',\\n            'tl-tr',\\n            'bl-br'\\n          ]);\\n          menu.moveRel(self.getEl(), rel);\\n          menu.rel = rel;\\n          rel = 'menu-sub-' + rel;\\n          menu.classes.remove(menu._lastRel).add(rel);\\n          menu._lastRel = rel;\\n          self.classes.add('selected');\\n          self.aria('expanded', true);\\n        }\\n      },\\n      hideMenu: function () {\\n        var self = this;\\n        if (self.menu) {\\n          self.menu.items().each(function (item) {\\n            if (item.hideMenu) {\\n              item.hideMenu();\\n            }\\n          });\\n          self.menu.hide();\\n          self.aria('expanded', false);\\n        }\\n        return self;\\n      },\\n      renderHtml: function () {\\n        var self = this;\\n        var id = self._id;\\n        var settings = self.settings;\\n        var prefix = self.classPrefix;\\n        var text = self.state.get('text');\\n        var icon = self.settings.icon, image = '', shortcut = settings.shortcut;\\n        var url = self.encode(settings.url), iconHtml = '';\\n        function convertShortcut(shortcut) {\\n          var i, value, replace = {};\\n          if (global$8.mac) {\\n            replace = {\\n              alt: '&#x2325;',\\n              ctrl: '&#x2318;',\\n              shift: '&#x21E7;',\\n              meta: '&#x2318;'\\n            };\\n          } else {\\n            replace = { meta: 'Ctrl' };\\n          }\\n          shortcut = shortcut.split('+');\\n          for (i = 0; i < shortcut.length; i++) {\\n            value = replace[shortcut[i].toLowerCase()];\\n            if (value) {\\n              shortcut[i] = value;\\n            }\\n          }\\n          return shortcut.join('+');\\n        }\\n        function escapeRegExp(str) {\\n          return str.replace(/[.*+?^${}()|[\\\\]\\\\\\\\]/g, '\\\\\\\\$&');\\n        }\\n        function markMatches(text) {\\n          var match = settings.match || '';\\n          return match ? text.replace(new RegExp(escapeRegExp(match), 'gi'), function (match) {\\n            return '!mce~match[' + match + ']mce~match!';\\n          }) : text;\\n        }\\n        function boldMatches(text) {\\n          return text.replace(new RegExp(escapeRegExp('!mce~match['), 'g'), '<b>').replace(new RegExp(escapeRegExp(']mce~match!'), 'g'), '</b>');\\n        }\\n        if (icon) {\\n          self.parent().classes.add('menu-has-icons');\\n        }\\n        if (settings.image) {\\n          image = ' style=\\\"background-image: url(\\\\'' + settings.image + '\\\\')\\\"';\\n        }\\n        if (shortcut) {\\n          shortcut = convertShortcut(shortcut);\\n        }\\n        icon = prefix + 'ico ' + prefix + 'i-' + (self.settings.icon || 'none');\\n        iconHtml = text !== '-' ? '<i class=\\\"' + icon + '\\\"' + image + '></i>\\\\xA0' : '';\\n        text = boldMatches(self.encode(markMatches(text)));\\n        url = boldMatches(self.encode(markMatches(url)));\\n        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>';\\n      },\\n      postRender: function () {\\n        var self = this, settings = self.settings;\\n        var textStyle = settings.textStyle;\\n        if (typeof textStyle === 'function') {\\n          textStyle = textStyle.call(this);\\n        }\\n        if (textStyle) {\\n          var textElm = self.getEl('text');\\n          if (textElm) {\\n            textElm.setAttribute('style', textStyle);\\n            self._textStyle = textStyle;\\n          }\\n        }\\n        self.on('mouseenter click', function (e) {\\n          if (e.control === self) {\\n            if (!settings.menu && e.type === 'click') {\\n              self.fire('select');\\n              global$7.requestAnimationFrame(function () {\\n                self.parent().hideAll();\\n              });\\n            } else {\\n              self.showMenu();\\n              if (e.aria) {\\n                self.menu.focus(true);\\n              }\\n            }\\n          }\\n        });\\n        self._super();\\n        return self;\\n      },\\n      hover: function () {\\n        var self = this;\\n        self.parent().items().each(function (ctrl) {\\n          ctrl.classes.remove('selected');\\n        });\\n        self.classes.toggle('selected', true);\\n        return self;\\n      },\\n      active: function (state) {\\n        toggleTextStyle(this, state);\\n        if (typeof state !== 'undefined') {\\n          this.aria('checked', state);\\n        }\\n        return this._super(state);\\n      },\\n      remove: function () {\\n        this._super();\\n        if (this.menu) {\\n          this.menu.remove();\\n        }\\n      }\\n    });\\n\\n    var Radio = Checkbox.extend({\\n      Defaults: {\\n        classes: 'radio',\\n        role: 'radio'\\n      }\\n    });\\n\\n    var ResizeHandle = Widget.extend({\\n      renderHtml: function () {\\n        var self = this, prefix = self.classPrefix;\\n        self.classes.add('resizehandle');\\n        if (self.settings.direction === 'both') {\\n          self.classes.add('resizehandle-both');\\n        }\\n        self.canFocus = false;\\n        return '<div id=\\\"' + self._id + '\\\" class=\\\"' + self.classes + '\\\">' + '<i class=\\\"' + prefix + 'ico ' + prefix + 'i-resize\\\"></i>' + '</div>';\\n      },\\n      postRender: function () {\\n        var self = this;\\n        self._super();\\n        self.resizeDragHelper = new DragHelper(this._id, {\\n          start: function () {\\n            self.fire('ResizeStart');\\n          },\\n          drag: function (e) {\\n            if (self.settings.direction !== 'both') {\\n              e.deltaX = 0;\\n            }\\n            self.fire('Resize', e);\\n          },\\n          stop: function () {\\n            self.fire('ResizeEnd');\\n          }\\n        });\\n      },\\n      remove: function () {\\n        if (this.resizeDragHelper) {\\n          this.resizeDragHelper.destroy();\\n        }\\n        return this._super();\\n      }\\n    });\\n\\n    function createOptions(options) {\\n      var strOptions = '';\\n      if (options) {\\n        for (var i = 0; i < options.length; i++) {\\n          strOptions += '<option value=\\\"' + options[i] + '\\\">' + options[i] + '</option>';\\n        }\\n      }\\n      return strOptions;\\n    }\\n    var SelectBox = Widget.extend({\\n      Defaults: {\\n        classes: 'selectbox',\\n        role: 'selectbox',\\n        options: []\\n      },\\n      init: function (settings) {\\n        var self = this;\\n        self._super(settings);\\n        if (self.settings.size) {\\n          self.size = self.settings.size;\\n        }\\n        if (self.settings.options) {\\n          self._options = self.settings.options;\\n        }\\n        self.on('keydown', function (e) {\\n          var rootControl;\\n          if (e.keyCode === 13) {\\n            e.preventDefault();\\n            self.parents().reverse().each(function (ctrl) {\\n              if (ctrl.toJSON) {\\n                rootControl = ctrl;\\n                return false;\\n              }\\n            });\\n            self.fire('submit', { data: rootControl.toJSON() });\\n          }\\n        });\\n      },\\n      options: function (state) {\\n        if (!arguments.length) {\\n          return this.state.get('options');\\n        }\\n        this.state.set('options', state);\\n        return this;\\n      },\\n      renderHtml: function () {\\n        var self = this;\\n        var options, size = '';\\n        options = createOptions(self._options);\\n        if (self.size) {\\n          size = ' size = \\\"' + self.size + '\\\"';\\n        }\\n        return '<select id=\\\"' + self._id + '\\\" class=\\\"' + self.classes + '\\\"' + size + '>' + options + '</select>';\\n      },\\n      bindStates: function () {\\n        var self = this;\\n        self.state.on('change:options', function (e) {\\n          self.getEl().innerHTML = createOptions(e.value);\\n        });\\n        return self._super();\\n      }\\n    });\\n\\n    function constrain(value, minVal, maxVal) {\\n      if (value < minVal) {\\n        value = minVal;\\n      }\\n      if (value > maxVal) {\\n        value = maxVal;\\n      }\\n      return value;\\n    }\\n    function setAriaProp(el, name, value) {\\n      el.setAttribute('aria-' + name, value);\\n    }\\n    function updateSliderHandle(ctrl, value) {\\n      var maxHandlePos, shortSizeName, sizeName, stylePosName, styleValue, handleEl;\\n      if (ctrl.settings.orientation === 'v') {\\n        stylePosName = 'top';\\n        sizeName = 'height';\\n        shortSizeName = 'h';\\n      } else {\\n        stylePosName = 'left';\\n        sizeName = 'width';\\n        shortSizeName = 'w';\\n      }\\n      handleEl = ctrl.getEl('handle');\\n      maxHandlePos = (ctrl.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName];\\n      styleValue = maxHandlePos * ((value - ctrl._minValue) / (ctrl._maxValue - ctrl._minValue)) + 'px';\\n      handleEl.style[stylePosName] = styleValue;\\n      handleEl.style.height = ctrl.layoutRect().h + 'px';\\n      setAriaProp(handleEl, 'valuenow', value);\\n      setAriaProp(handleEl, 'valuetext', '' + ctrl.settings.previewFilter(value));\\n      setAriaProp(handleEl, 'valuemin', ctrl._minValue);\\n      setAriaProp(handleEl, 'valuemax', ctrl._maxValue);\\n    }\\n    var Slider = Widget.extend({\\n      init: function (settings) {\\n        var self = this;\\n        if (!settings.previewFilter) {\\n          settings.previewFilter = function (value) {\\n            return Math.round(value * 100) / 100;\\n          };\\n        }\\n        self._super(settings);\\n        self.classes.add('slider');\\n        if (settings.orientation === 'v') {\\n          self.classes.add('vertical');\\n        }\\n        self._minValue = isNumber(settings.minValue) ? settings.minValue : 0;\\n        self._maxValue = isNumber(settings.maxValue) ? settings.maxValue : 100;\\n        self._initValue = self.state.get('value');\\n      },\\n      renderHtml: function () {\\n        var self = this, id = self._id, prefix = self.classPrefix;\\n        return '<div id=\\\"' + id + '\\\" class=\\\"' + self.classes + '\\\">' + '<div id=\\\"' + id + '-handle\\\" class=\\\"' + prefix + 'slider-handle\\\" role=\\\"slider\\\" tabindex=\\\"-1\\\"></div>' + '</div>';\\n      },\\n      reset: function () {\\n        this.value(this._initValue).repaint();\\n      },\\n      postRender: function () {\\n        var self = this;\\n        var minValue, maxValue, screenCordName, stylePosName, sizeName, shortSizeName;\\n        function toFraction(min, max, val) {\\n          return (val + min) / (max - min);\\n        }\\n        function fromFraction(min, max, val) {\\n          return val * (max - min) - min;\\n        }\\n        function handleKeyboard(minValue, maxValue) {\\n          function alter(delta) {\\n            var value;\\n            value = self.value();\\n            value = fromFraction(minValue, maxValue, toFraction(minValue, maxValue, value) + delta * 0.05);\\n            value = constrain(value, minValue, maxValue);\\n            self.value(value);\\n            self.fire('dragstart', { value: value });\\n            self.fire('drag', { value: value });\\n            self.fire('dragend', { value: value });\\n          }\\n          self.on('keydown', function (e) {\\n            switch (e.keyCode) {\\n            case 37:\\n            case 38:\\n              alter(-1);\\n              break;\\n            case 39:\\n            case 40:\\n              alter(1);\\n              break;\\n            }\\n          });\\n        }\\n        function handleDrag(minValue, maxValue, handleEl) {\\n          var startPos, startHandlePos, maxHandlePos, handlePos, value;\\n          self._dragHelper = new DragHelper(self._id, {\\n            handle: self._id + '-handle',\\n            start: function (e) {\\n              startPos = e[screenCordName];\\n              startHandlePos = parseInt(self.getEl('handle').style[stylePosName], 10);\\n              maxHandlePos = (self.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName];\\n              self.fire('dragstart', { value: value });\\n            },\\n            drag: function (e) {\\n              var delta = e[screenCordName] - startPos;\\n              handlePos = constrain(startHandlePos + delta, 0, maxHandlePos);\\n              handleEl.style[stylePosName] = handlePos + 'px';\\n              value = minValue + handlePos / maxHandlePos * (maxValue - minValue);\\n              self.value(value);\\n              self.tooltip().text('' + self.settings.previewFilter(value)).show().moveRel(handleEl, 'bc tc');\\n              self.fire('drag', { value: value });\\n            },\\n            stop: function () {\\n              self.tooltip().hide();\\n              self.fire('dragend', { value: value });\\n            }\\n          });\\n        }\\n        minValue = self._minValue;\\n        maxValue = self._maxValue;\\n        if (self.settings.orientation === 'v') {\\n          screenCordName = 'screenY';\\n          stylePosName = 'top';\\n          sizeName = 'height';\\n          shortSizeName = 'h';\\n        } else {\\n          screenCordName = 'screenX';\\n          stylePosName = 'left';\\n          sizeName = 'width';\\n          shortSizeName = 'w';\\n        }\\n        self._super();\\n        handleKeyboard(minValue, maxValue);\\n        handleDrag(minValue, maxValue, self.getEl('handle'));\\n      },\\n      repaint: function () {\\n        this._super();\\n        updateSliderHandle(this, this.value());\\n      },\\n      bindStates: function () {\\n        var self = this;\\n        self.state.on('change:value', function (e) {\\n          updateSliderHandle(self, e.value);\\n        });\\n        return self._super();\\n      }\\n    });\\n\\n    var Spacer = Widget.extend({\\n      renderHtml: function () {\\n        var self = this;\\n        self.classes.add('spacer');\\n        self.canFocus = false;\\n        return '<div id=\\\"' + self._id + '\\\" class=\\\"' + self.classes + '\\\"></div>';\\n      }\\n    });\\n\\n    var SplitButton = MenuButton.extend({\\n      Defaults: {\\n        classes: 'widget btn splitbtn',\\n        role: 'button'\\n      },\\n      repaint: function () {\\n        var self = this;\\n        var elm = self.getEl();\\n        var rect = self.layoutRect();\\n        var mainButtonElm, menuButtonElm;\\n        self._super();\\n        mainButtonElm = elm.firstChild;\\n        menuButtonElm = elm.lastChild;\\n        global$9(mainButtonElm).css({\\n          width: rect.w - funcs.getSize(menuButtonElm).width,\\n          height: rect.h - 2\\n        });\\n        global$9(menuButtonElm).css({ height: rect.h - 2 });\\n        return self;\\n      },\\n      activeMenu: function (state) {\\n        var self = this;\\n        global$9(self.getEl().lastChild).toggleClass(self.classPrefix + 'active', state);\\n      },\\n      renderHtml: function () {\\n        var self = this;\\n        var id = self._id;\\n        var prefix = self.classPrefix;\\n        var image;\\n        var icon = self.state.get('icon');\\n        var text = self.state.get('text');\\n        var settings = self.settings;\\n        var textHtml = '', ariaPressed;\\n        image = settings.image;\\n        if (image) {\\n          icon = 'none';\\n          if (typeof image !== 'string') {\\n            image = domGlobals.window.getSelection ? image[0] : image[1];\\n          }\\n          image = ' style=\\\"background-image: url(\\\\'' + image + '\\\\')\\\"';\\n        } else {\\n          image = '';\\n        }\\n        icon = settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';\\n        if (text) {\\n          self.classes.add('btn-has-text');\\n          textHtml = '<span class=\\\"' + prefix + 'txt\\\">' + self.encode(text) + '</span>';\\n        }\\n        ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed=\\\"' + settings.active + '\\\"' : '';\\n        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>';\\n      },\\n      postRender: function () {\\n        var self = this, onClickHandler = self.settings.onclick;\\n        self.on('click', function (e) {\\n          var node = e.target;\\n          if (e.control === this) {\\n            while (node) {\\n              if (e.aria && e.aria.key !== 'down' || node.nodeName === 'BUTTON' && node.className.indexOf('open') === -1) {\\n                e.stopImmediatePropagation();\\n                if (onClickHandler) {\\n                  onClickHandler.call(this, e);\\n                }\\n                return;\\n              }\\n              node = node.parentNode;\\n            }\\n          }\\n        });\\n        delete self.settings.onclick;\\n        return self._super();\\n      }\\n    });\\n\\n    var StackLayout = FlowLayout.extend({\\n      Defaults: {\\n        containerClass: 'stack-layout',\\n        controlClass: 'stack-layout-item',\\n        endClass: 'break'\\n      },\\n      isNative: function () {\\n        return true;\\n      }\\n    });\\n\\n    var TabPanel = Panel.extend({\\n      Defaults: {\\n        layout: 'absolute',\\n        defaults: { type: 'panel' }\\n      },\\n      activateTab: function (idx) {\\n        var activeTabElm;\\n        if (this.activeTabId) {\\n          activeTabElm = this.getEl(this.activeTabId);\\n          global$9(activeTabElm).removeClass(this.classPrefix + 'active');\\n          activeTabElm.setAttribute('aria-selected', 'false');\\n        }\\n        this.activeTabId = 't' + idx;\\n        activeTabElm = this.getEl('t' + idx);\\n        activeTabElm.setAttribute('aria-selected', 'true');\\n        global$9(activeTabElm).addClass(this.classPrefix + 'active');\\n        this.items()[idx].show().fire('showtab');\\n        this.reflow();\\n        this.items().each(function (item, i) {\\n          if (idx !== i) {\\n            item.hide();\\n          }\\n        });\\n      },\\n      renderHtml: function () {\\n        var self = this;\\n        var layout = self._layout;\\n        var tabsHtml = '';\\n        var prefix = self.classPrefix;\\n        self.preRender();\\n        layout.preRender(self);\\n        self.items().each(function (ctrl, i) {\\n          var id = self._id + '-t' + i;\\n          ctrl.aria('role', 'tabpanel');\\n          ctrl.aria('labelledby', id);\\n          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>';\\n        });\\n        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>';\\n      },\\n      postRender: function () {\\n        var self = this;\\n        self._super();\\n        self.settings.activeTab = self.settings.activeTab || 0;\\n        self.activateTab(self.settings.activeTab);\\n        this.on('click', function (e) {\\n          var targetParent = e.target.parentNode;\\n          if (targetParent && targetParent.id === self._id + '-head') {\\n            var i = targetParent.childNodes.length;\\n            while (i--) {\\n              if (targetParent.childNodes[i] === e.target) {\\n                self.activateTab(i);\\n              }\\n            }\\n          }\\n        });\\n      },\\n      initLayoutRect: function () {\\n        var self = this;\\n        var rect, minW, minH;\\n        minW = funcs.getSize(self.getEl('head')).width;\\n        minW = minW < 0 ? 0 : minW;\\n        minH = 0;\\n        self.items().each(function (item) {\\n          minW = Math.max(minW, item.layoutRect().minW);\\n          minH = Math.max(minH, item.layoutRect().minH);\\n        });\\n        self.items().each(function (ctrl) {\\n          ctrl.settings.x = 0;\\n          ctrl.settings.y = 0;\\n          ctrl.settings.w = minW;\\n          ctrl.settings.h = minH;\\n          ctrl.layoutRect({\\n            x: 0,\\n            y: 0,\\n            w: minW,\\n            h: minH\\n          });\\n        });\\n        var headH = funcs.getSize(self.getEl('head')).height;\\n        self.settings.minWidth = minW;\\n        self.settings.minHeight = minH + headH;\\n        rect = self._super();\\n        rect.deltaH += headH;\\n        rect.innerH = rect.h - rect.deltaH;\\n        return rect;\\n      }\\n    });\\n\\n    var TextBox = Widget.extend({\\n      init: function (settings) {\\n        var self = this;\\n        self._super(settings);\\n        self.classes.add('textbox');\\n        if (settings.multiline) {\\n          self.classes.add('multiline');\\n        } else {\\n          self.on('keydown', function (e) {\\n            var rootControl;\\n            if (e.keyCode === 13) {\\n              e.preventDefault();\\n              self.parents().reverse().each(function (ctrl) {\\n                if (ctrl.toJSON) {\\n                  rootControl = ctrl;\\n                  return false;\\n                }\\n              });\\n              self.fire('submit', { data: rootControl.toJSON() });\\n            }\\n          });\\n          self.on('keyup', function (e) {\\n            self.state.set('value', e.target.value);\\n          });\\n        }\\n      },\\n      repaint: function () {\\n        var self = this;\\n        var style, rect, borderBox, borderW, borderH = 0, lastRepaintRect;\\n        style = self.getEl().style;\\n        rect = self._layoutRect;\\n        lastRepaintRect = self._lastRepaintRect || {};\\n        var doc = domGlobals.document;\\n        if (!self.settings.multiline && doc.all && (!doc.documentMode || doc.documentMode <= 8)) {\\n          style.lineHeight = rect.h - borderH + 'px';\\n        }\\n        borderBox = self.borderBox;\\n        borderW = borderBox.left + borderBox.right + 8;\\n        borderH = borderBox.top + borderBox.bottom + (self.settings.multiline ? 8 : 0);\\n        if (rect.x !== lastRepaintRect.x) {\\n          style.left = rect.x + 'px';\\n          lastRepaintRect.x = rect.x;\\n        }\\n        if (rect.y !== lastRepaintRect.y) {\\n          style.top = rect.y + 'px';\\n          lastRepaintRect.y = rect.y;\\n        }\\n        if (rect.w !== lastRepaintRect.w) {\\n          style.width = rect.w - borderW + 'px';\\n          lastRepaintRect.w = rect.w;\\n        }\\n        if (rect.h !== lastRepaintRect.h) {\\n          style.height = rect.h - borderH + 'px';\\n          lastRepaintRect.h = rect.h;\\n        }\\n        self._lastRepaintRect = lastRepaintRect;\\n        self.fire('repaint', {}, false);\\n        return self;\\n      },\\n      renderHtml: function () {\\n        var self = this;\\n        var settings = self.settings;\\n        var attrs, elm;\\n        attrs = {\\n          id: self._id,\\n          hidefocus: '1'\\n        };\\n        global$2.each([\\n          'rows',\\n          'spellcheck',\\n          'maxLength',\\n          'size',\\n          'readonly',\\n          'min',\\n          'max',\\n          'step',\\n          'list',\\n          'pattern',\\n          'placeholder',\\n          'required',\\n          'multiple'\\n        ], function (name) {\\n          attrs[name] = settings[name];\\n        });\\n        if (self.disabled()) {\\n          attrs.disabled = 'disabled';\\n        }\\n        if (settings.subtype) {\\n          attrs.type = settings.subtype;\\n        }\\n        elm = funcs.create(settings.multiline ? 'textarea' : 'input', attrs);\\n        elm.value = self.state.get('value');\\n        elm.className = self.classes.toString();\\n        return elm.outerHTML;\\n      },\\n      value: function (value) {\\n        if (arguments.length) {\\n          this.state.set('value', value);\\n          return this;\\n        }\\n        if (this.state.get('rendered')) {\\n          this.state.set('value', this.getEl().value);\\n        }\\n        return this.state.get('value');\\n      },\\n      postRender: function () {\\n        var self = this;\\n        self.getEl().value = self.state.get('value');\\n        self._super();\\n        self.$el.on('change', function (e) {\\n          self.state.set('value', e.target.value);\\n          self.fire('change', e);\\n        });\\n      },\\n      bindStates: function () {\\n        var self = this;\\n        self.state.on('change:value', function (e) {\\n          if (self.getEl().value !== e.value) {\\n            self.getEl().value = e.value;\\n          }\\n        });\\n        self.state.on('change:disabled', function (e) {\\n          self.getEl().disabled = e.value;\\n        });\\n        return self._super();\\n      },\\n      remove: function () {\\n        this.$el.off();\\n        this._super();\\n      }\\n    });\\n\\n    var getApi = function () {\\n      return {\\n        Selector: Selector,\\n        Collection: Collection$2,\\n        ReflowQueue: ReflowQueue,\\n        Control: Control$1,\\n        Factory: global$4,\\n        KeyboardNavigation: KeyboardNavigation,\\n        Container: Container,\\n        DragHelper: DragHelper,\\n        Scrollable: Scrollable,\\n        Panel: Panel,\\n        Movable: Movable,\\n        Resizable: Resizable,\\n        FloatPanel: FloatPanel,\\n        Window: Window,\\n        MessageBox: MessageBox,\\n        Tooltip: Tooltip,\\n        Widget: Widget,\\n        Progress: Progress,\\n        Notification: Notification,\\n        Layout: Layout,\\n        AbsoluteLayout: AbsoluteLayout,\\n        Button: Button,\\n        ButtonGroup: ButtonGroup,\\n        Checkbox: Checkbox,\\n        ComboBox: ComboBox,\\n        ColorBox: ColorBox,\\n        PanelButton: PanelButton,\\n        ColorButton: ColorButton,\\n        ColorPicker: ColorPicker,\\n        Path: Path,\\n        ElementPath: ElementPath,\\n        FormItem: FormItem,\\n        Form: Form,\\n        FieldSet: FieldSet,\\n        FilePicker: FilePicker,\\n        FitLayout: FitLayout,\\n        FlexLayout: FlexLayout,\\n        FlowLayout: FlowLayout,\\n        FormatControls: FormatControls,\\n        GridLayout: GridLayout,\\n        Iframe: Iframe$1,\\n        InfoBox: InfoBox,\\n        Label: Label,\\n        Toolbar: Toolbar$1,\\n        MenuBar: MenuBar,\\n        MenuButton: MenuButton,\\n        MenuItem: MenuItem,\\n        Throbber: Throbber,\\n        Menu: Menu,\\n        ListBox: ListBox,\\n        Radio: Radio,\\n        ResizeHandle: ResizeHandle,\\n        SelectBox: SelectBox,\\n        Slider: Slider,\\n        Spacer: Spacer,\\n        SplitButton: SplitButton,\\n        StackLayout: StackLayout,\\n        TabPanel: TabPanel,\\n        TextBox: TextBox,\\n        DropZone: DropZone,\\n        BrowseButton: BrowseButton\\n      };\\n    };\\n    var appendTo = function (target) {\\n      if (target.ui) {\\n        global$2.each(getApi(), function (ref, key) {\\n          target.ui[key] = ref;\\n        });\\n      } else {\\n        target.ui = getApi();\\n      }\\n    };\\n    var registerToFactory = function () {\\n      global$2.each(getApi(), function (ref, key) {\\n        global$4.add(key, ref);\\n      });\\n    };\\n    var Api = {\\n      appendTo: appendTo,\\n      registerToFactory: registerToFactory\\n    };\\n\\n    Api.registerToFactory();\\n    Api.appendTo(window.tinymce ? window.tinymce : {});\\n    global.add('modern', function (editor) {\\n      FormatControls.setup(editor);\\n      return ThemeApi.get(editor);\\n    });\\n    function Theme () {\\n    }\\n\\n    return Theme;\\n\\n}(window));\\n})();\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// /home/angular/project/~/raw-loader!/home/angular/project/~/tinymce/themes/modern/theme.js\n// module id = 775\n// module chunks = 1","module.exports = \"// 4.9.11 (2020-07-13)\\n(function () {\\n(function (domGlobals) {\\n    'use strict';\\n\\n    var noop = function () {\\n    };\\n    var compose = function (fa, fb) {\\n      return function () {\\n        var args = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n          args[_i] = arguments[_i];\\n        }\\n        return fa(fb.apply(null, args));\\n      };\\n    };\\n    var constant = function (value) {\\n      return function () {\\n        return value;\\n      };\\n    };\\n    var identity = function (x) {\\n      return x;\\n    };\\n    function curry(fn) {\\n      var initialArgs = [];\\n      for (var _i = 1; _i < arguments.length; _i++) {\\n        initialArgs[_i - 1] = arguments[_i];\\n      }\\n      return function () {\\n        var restArgs = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n          restArgs[_i] = arguments[_i];\\n        }\\n        var all = initialArgs.concat(restArgs);\\n        return fn.apply(null, all);\\n      };\\n    }\\n    var not = function (f) {\\n      return function () {\\n        var args = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n          args[_i] = arguments[_i];\\n        }\\n        return !f.apply(null, args);\\n      };\\n    };\\n    var die = function (msg) {\\n      return function () {\\n        throw new Error(msg);\\n      };\\n    };\\n    var never = constant(false);\\n    var always = constant(true);\\n\\n    var none = function () {\\n      return NONE;\\n    };\\n    var NONE = function () {\\n      var eq = function (o) {\\n        return o.isNone();\\n      };\\n      var call = function (thunk) {\\n        return thunk();\\n      };\\n      var id = function (n) {\\n        return n;\\n      };\\n      var me = {\\n        fold: function (n, s) {\\n          return n();\\n        },\\n        is: never,\\n        isSome: never,\\n        isNone: always,\\n        getOr: id,\\n        getOrThunk: call,\\n        getOrDie: function (msg) {\\n          throw new Error(msg || 'error: getOrDie called on none.');\\n        },\\n        getOrNull: constant(null),\\n        getOrUndefined: constant(undefined),\\n        or: id,\\n        orThunk: call,\\n        map: none,\\n        each: noop,\\n        bind: none,\\n        exists: never,\\n        forall: always,\\n        filter: none,\\n        equals: eq,\\n        equals_: eq,\\n        toArray: function () {\\n          return [];\\n        },\\n        toString: constant('none()')\\n      };\\n      if (Object.freeze) {\\n        Object.freeze(me);\\n      }\\n      return me;\\n    }();\\n    var some = function (a) {\\n      var constant_a = constant(a);\\n      var self = function () {\\n        return me;\\n      };\\n      var bind = function (f) {\\n        return f(a);\\n      };\\n      var me = {\\n        fold: function (n, s) {\\n          return s(a);\\n        },\\n        is: function (v) {\\n          return a === v;\\n        },\\n        isSome: always,\\n        isNone: never,\\n        getOr: constant_a,\\n        getOrThunk: constant_a,\\n        getOrDie: constant_a,\\n        getOrNull: constant_a,\\n        getOrUndefined: constant_a,\\n        or: self,\\n        orThunk: self,\\n        map: function (f) {\\n          return some(f(a));\\n        },\\n        each: function (f) {\\n          f(a);\\n        },\\n        bind: bind,\\n        exists: bind,\\n        forall: bind,\\n        filter: function (f) {\\n          return f(a) ? me : NONE;\\n        },\\n        toArray: function () {\\n          return [a];\\n        },\\n        toString: function () {\\n          return 'some(' + a + ')';\\n        },\\n        equals: function (o) {\\n          return o.is(a);\\n        },\\n        equals_: function (o, elementEq) {\\n          return o.fold(never, function (b) {\\n            return elementEq(a, b);\\n          });\\n        }\\n      };\\n      return me;\\n    };\\n    var from = function (value) {\\n      return value === null || value === undefined ? NONE : some(value);\\n    };\\n    var Option = {\\n      some: some,\\n      none: none,\\n      from: from\\n    };\\n\\n    var typeOf = function (x) {\\n      if (x === null) {\\n        return 'null';\\n      }\\n      var t = typeof x;\\n      if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\\n        return 'array';\\n      }\\n      if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\\n        return 'string';\\n      }\\n      return t;\\n    };\\n    var isType = function (type) {\\n      return function (value) {\\n        return typeOf(value) === type;\\n      };\\n    };\\n    var isString = isType('string');\\n    var isObject = isType('object');\\n    var isArray = isType('array');\\n    var isNull = isType('null');\\n    var isBoolean = isType('boolean');\\n    var isFunction = isType('function');\\n    var isNumber = isType('number');\\n\\n    var nativeSlice = Array.prototype.slice;\\n    var nativeIndexOf = Array.prototype.indexOf;\\n    var nativePush = Array.prototype.push;\\n    var rawIndexOf = function (ts, t) {\\n      return nativeIndexOf.call(ts, t);\\n    };\\n    var indexOf = function (xs, x) {\\n      var r = rawIndexOf(xs, x);\\n      return r === -1 ? Option.none() : Option.some(r);\\n    };\\n    var contains = function (xs, x) {\\n      return rawIndexOf(xs, x) > -1;\\n    };\\n    var exists = function (xs, pred) {\\n      for (var i = 0, len = xs.length; i < len; i++) {\\n        var x = xs[i];\\n        if (pred(x, i)) {\\n          return true;\\n        }\\n      }\\n      return false;\\n    };\\n    var map = function (xs, f) {\\n      var len = xs.length;\\n      var r = new Array(len);\\n      for (var i = 0; i < len; i++) {\\n        var x = xs[i];\\n        r[i] = f(x, i);\\n      }\\n      return r;\\n    };\\n    var each = function (xs, f) {\\n      for (var i = 0, len = xs.length; i < len; i++) {\\n        var x = xs[i];\\n        f(x, i);\\n      }\\n    };\\n    var eachr = function (xs, f) {\\n      for (var i = xs.length - 1; i >= 0; i--) {\\n        var x = xs[i];\\n        f(x, i);\\n      }\\n    };\\n    var partition = function (xs, pred) {\\n      var pass = [];\\n      var fail = [];\\n      for (var i = 0, len = xs.length; i < len; i++) {\\n        var x = xs[i];\\n        var arr = pred(x, i) ? pass : fail;\\n        arr.push(x);\\n      }\\n      return {\\n        pass: pass,\\n        fail: fail\\n      };\\n    };\\n    var filter = function (xs, pred) {\\n      var r = [];\\n      for (var i = 0, len = xs.length; i < len; i++) {\\n        var x = xs[i];\\n        if (pred(x, i)) {\\n          r.push(x);\\n        }\\n      }\\n      return r;\\n    };\\n    var foldr = function (xs, f, acc) {\\n      eachr(xs, function (x) {\\n        acc = f(acc, x);\\n      });\\n      return acc;\\n    };\\n    var foldl = function (xs, f, acc) {\\n      each(xs, function (x) {\\n        acc = f(acc, x);\\n      });\\n      return acc;\\n    };\\n    var find = function (xs, pred) {\\n      for (var i = 0, len = xs.length; i < len; i++) {\\n        var x = xs[i];\\n        if (pred(x, i)) {\\n          return Option.some(x);\\n        }\\n      }\\n      return Option.none();\\n    };\\n    var findIndex = function (xs, pred) {\\n      for (var i = 0, len = xs.length; i < len; i++) {\\n        var x = xs[i];\\n        if (pred(x, i)) {\\n          return Option.some(i);\\n        }\\n      }\\n      return Option.none();\\n    };\\n    var flatten = function (xs) {\\n      var r = [];\\n      for (var i = 0, len = xs.length; i < len; ++i) {\\n        if (!isArray(xs[i])) {\\n          throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\\n        }\\n        nativePush.apply(r, xs[i]);\\n      }\\n      return r;\\n    };\\n    var bind = function (xs, f) {\\n      var output = map(xs, f);\\n      return flatten(output);\\n    };\\n    var forall = function (xs, pred) {\\n      for (var i = 0, len = xs.length; i < len; ++i) {\\n        var x = xs[i];\\n        if (pred(x, i) !== true) {\\n          return false;\\n        }\\n      }\\n      return true;\\n    };\\n    var reverse = function (xs) {\\n      var r = nativeSlice.call(xs, 0);\\n      r.reverse();\\n      return r;\\n    };\\n    var difference = function (a1, a2) {\\n      return filter(a1, function (x) {\\n        return !contains(a2, x);\\n      });\\n    };\\n    var mapToObject = function (xs, f) {\\n      var r = {};\\n      for (var i = 0, len = xs.length; i < len; i++) {\\n        var x = xs[i];\\n        r[String(x)] = f(x, i);\\n      }\\n      return r;\\n    };\\n    var sort = function (xs, comparator) {\\n      var copy = nativeSlice.call(xs, 0);\\n      copy.sort(comparator);\\n      return copy;\\n    };\\n    var head = function (xs) {\\n      return xs.length === 0 ? Option.none() : Option.some(xs[0]);\\n    };\\n    var last = function (xs) {\\n      return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);\\n    };\\n    var from$1 = isFunction(Array.from) ? Array.from : function (x) {\\n      return nativeSlice.call(x);\\n    };\\n\\n    var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\\n\\n    var path = function (parts, scope) {\\n      var o = scope !== undefined && scope !== null ? scope : Global;\\n      for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\\n        o = o[parts[i]];\\n      }\\n      return o;\\n    };\\n    var resolve = function (p, scope) {\\n      var parts = p.split('.');\\n      return path(parts, scope);\\n    };\\n\\n    var unsafe = function (name, scope) {\\n      return resolve(name, scope);\\n    };\\n    var getOrDie = function (name, scope) {\\n      var actual = unsafe(name, scope);\\n      if (actual === undefined || actual === null) {\\n        throw new Error(name + ' not available on this browser');\\n      }\\n      return actual;\\n    };\\n    var Global$1 = { getOrDie: getOrDie };\\n\\n    var url = function () {\\n      return Global$1.getOrDie('URL');\\n    };\\n    var createObjectURL = function (blob) {\\n      return url().createObjectURL(blob);\\n    };\\n    var revokeObjectURL = function (u) {\\n      url().revokeObjectURL(u);\\n    };\\n    var URL = {\\n      createObjectURL: createObjectURL,\\n      revokeObjectURL: revokeObjectURL\\n    };\\n\\n    var nav = domGlobals.navigator, userAgent = nav.userAgent;\\n    var opera, webkit, ie, ie11, ie12, gecko, mac, iDevice, android, fileApi, phone, tablet, windowsPhone;\\n    var matchMediaQuery = function (query) {\\n      return 'matchMedia' in domGlobals.window ? domGlobals.matchMedia(query).matches : false;\\n    };\\n    opera = false;\\n    android = /Android/.test(userAgent);\\n    webkit = /WebKit/.test(userAgent);\\n    ie = !webkit && !opera && /MSIE/gi.test(userAgent) && /Explorer/gi.test(nav.appName);\\n    ie = ie && /MSIE (\\\\w+)\\\\./.exec(userAgent)[1];\\n    ie11 = userAgent.indexOf('Trident/') !== -1 && (userAgent.indexOf('rv:') !== -1 || nav.appName.indexOf('Netscape') !== -1) ? 11 : false;\\n    ie12 = userAgent.indexOf('Edge/') !== -1 && !ie && !ie11 ? 12 : false;\\n    ie = ie || ie11 || ie12;\\n    gecko = !webkit && !ie11 && /Gecko/.test(userAgent);\\n    mac = userAgent.indexOf('Mac') !== -1;\\n    iDevice = /(iPad|iPhone)/.test(userAgent);\\n    fileApi = 'FormData' in domGlobals.window && 'FileReader' in domGlobals.window && 'URL' in domGlobals.window && !!URL.createObjectURL;\\n    phone = matchMediaQuery('only screen and (max-device-width: 480px)') && (android || iDevice);\\n    tablet = matchMediaQuery('only screen and (min-width: 800px)') && (android || iDevice);\\n    windowsPhone = userAgent.indexOf('Windows Phone') !== -1;\\n    if (ie12) {\\n      webkit = false;\\n    }\\n    var contentEditable = !iDevice || fileApi || parseInt(userAgent.match(/AppleWebKit\\\\/(\\\\d*)/)[1], 10) >= 534;\\n    var Env = {\\n      opera: opera,\\n      webkit: webkit,\\n      ie: ie,\\n      gecko: gecko,\\n      mac: mac,\\n      iOS: iDevice,\\n      android: android,\\n      contentEditable: contentEditable,\\n      transparentSrc: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',\\n      caretAfter: ie !== 8,\\n      range: domGlobals.window.getSelection && 'Range' in domGlobals.window,\\n      documentMode: ie && !ie12 ? domGlobals.document.documentMode || 7 : 10,\\n      fileApi: fileApi,\\n      ceFalse: ie === false || ie > 8,\\n      cacheSuffix: null,\\n      container: null,\\n      overrideViewPort: null,\\n      experimentalShadowDom: false,\\n      canHaveCSP: ie === false || ie > 11,\\n      desktop: !phone && !tablet,\\n      windowsPhone: windowsPhone\\n    };\\n\\n    var promise = function () {\\n      function bind(fn, thisArg) {\\n        return function () {\\n          fn.apply(thisArg, arguments);\\n        };\\n      }\\n      var isArray = Array.isArray || function (value) {\\n        return Object.prototype.toString.call(value) === '[object Array]';\\n      };\\n      var Promise = function (fn) {\\n        if (typeof this !== 'object') {\\n          throw new TypeError('Promises must be constructed via new');\\n        }\\n        if (typeof fn !== 'function') {\\n          throw new TypeError('not a function');\\n        }\\n        this._state = null;\\n        this._value = null;\\n        this._deferreds = [];\\n        doResolve(fn, bind(resolve, this), bind(reject, this));\\n      };\\n      var asap = Promise.immediateFn || typeof setImmediate === 'function' && setImmediate || function (fn) {\\n        setTimeout(fn, 1);\\n      };\\n      function handle(deferred) {\\n        var me = this;\\n        if (this._state === null) {\\n          this._deferreds.push(deferred);\\n          return;\\n        }\\n        asap(function () {\\n          var cb = me._state ? deferred.onFulfilled : deferred.onRejected;\\n          if (cb === null) {\\n            (me._state ? deferred.resolve : deferred.reject)(me._value);\\n            return;\\n          }\\n          var ret;\\n          try {\\n            ret = cb(me._value);\\n          } catch (e) {\\n            deferred.reject(e);\\n            return;\\n          }\\n          deferred.resolve(ret);\\n        });\\n      }\\n      function resolve(newValue) {\\n        try {\\n          if (newValue === this) {\\n            throw new TypeError('A promise cannot be resolved with itself.');\\n          }\\n          if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\\n            var then = newValue.then;\\n            if (typeof then === 'function') {\\n              doResolve(bind(then, newValue), bind(resolve, this), bind(reject, this));\\n              return;\\n            }\\n          }\\n          this._state = true;\\n          this._value = newValue;\\n          finale.call(this);\\n        } catch (e) {\\n          reject.call(this, e);\\n        }\\n      }\\n      function reject(newValue) {\\n        this._state = false;\\n        this._value = newValue;\\n        finale.call(this);\\n      }\\n      function finale() {\\n        for (var i = 0, len = this._deferreds.length; i < len; i++) {\\n          handle.call(this, this._deferreds[i]);\\n        }\\n        this._deferreds = null;\\n      }\\n      function Handler(onFulfilled, onRejected, resolve, reject) {\\n        this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\\n        this.onRejected = typeof onRejected === 'function' ? onRejected : null;\\n        this.resolve = resolve;\\n        this.reject = reject;\\n      }\\n      function doResolve(fn, onFulfilled, onRejected) {\\n        var done = false;\\n        try {\\n          fn(function (value) {\\n            if (done) {\\n              return;\\n            }\\n            done = true;\\n            onFulfilled(value);\\n          }, function (reason) {\\n            if (done) {\\n              return;\\n            }\\n            done = true;\\n            onRejected(reason);\\n          });\\n        } catch (ex) {\\n          if (done) {\\n            return;\\n          }\\n          done = true;\\n          onRejected(ex);\\n        }\\n      }\\n      Promise.prototype.catch = function (onRejected) {\\n        return this.then(null, onRejected);\\n      };\\n      Promise.prototype.then = function (onFulfilled, onRejected) {\\n        var me = this;\\n        return new Promise(function (resolve, reject) {\\n          handle.call(me, new Handler(onFulfilled, onRejected, resolve, reject));\\n        });\\n      };\\n      Promise.all = function () {\\n        var args = Array.prototype.slice.call(arguments.length === 1 && isArray(arguments[0]) ? arguments[0] : arguments);\\n        return new Promise(function (resolve, reject) {\\n          if (args.length === 0) {\\n            return resolve([]);\\n          }\\n          var remaining = args.length;\\n          function res(i, val) {\\n            try {\\n              if (val && (typeof val === 'object' || typeof val === 'function')) {\\n                var then = val.then;\\n                if (typeof then === 'function') {\\n                  then.call(val, function (val) {\\n                    res(i, val);\\n                  }, reject);\\n                  return;\\n                }\\n              }\\n              args[i] = val;\\n              if (--remaining === 0) {\\n                resolve(args);\\n              }\\n            } catch (ex) {\\n              reject(ex);\\n            }\\n          }\\n          for (var i = 0; i < args.length; i++) {\\n            res(i, args[i]);\\n          }\\n        });\\n      };\\n      Promise.resolve = function (value) {\\n        if (value && typeof value === 'object' && value.constructor === Promise) {\\n          return value;\\n        }\\n        return new Promise(function (resolve) {\\n          resolve(value);\\n        });\\n      };\\n      Promise.reject = function (value) {\\n        return new Promise(function (resolve, reject) {\\n          reject(value);\\n        });\\n      };\\n      Promise.race = function (values) {\\n        return new Promise(function (resolve, reject) {\\n          for (var i = 0, len = values.length; i < len; i++) {\\n            values[i].then(resolve, reject);\\n          }\\n        });\\n      };\\n      return Promise;\\n    };\\n    var promiseObj = window.Promise ? window.Promise : promise();\\n\\n    var requestAnimationFramePromise;\\n    var requestAnimationFrame = function (callback, element) {\\n      var i, requestAnimationFrameFunc = domGlobals.window.requestAnimationFrame;\\n      var vendors = [\\n        'ms',\\n        'moz',\\n        'webkit'\\n      ];\\n      var featurefill = function (callback) {\\n        domGlobals.window.setTimeout(callback, 0);\\n      };\\n      for (i = 0; i < vendors.length && !requestAnimationFrameFunc; i++) {\\n        requestAnimationFrameFunc = domGlobals.window[vendors[i] + 'RequestAnimationFrame'];\\n      }\\n      if (!requestAnimationFrameFunc) {\\n        requestAnimationFrameFunc = featurefill;\\n      }\\n      requestAnimationFrameFunc(callback, element);\\n    };\\n    var wrappedSetTimeout = function (callback, time) {\\n      if (typeof time !== 'number') {\\n        time = 0;\\n      }\\n      return setTimeout(callback, time);\\n    };\\n    var wrappedSetInterval = function (callback, time) {\\n      if (typeof time !== 'number') {\\n        time = 1;\\n      }\\n      return setInterval(callback, time);\\n    };\\n    var wrappedClearTimeout = function (id) {\\n      return clearTimeout(id);\\n    };\\n    var wrappedClearInterval = function (id) {\\n      return clearInterval(id);\\n    };\\n    var debounce = function (callback, time) {\\n      var timer, func;\\n      func = function () {\\n        var args = arguments;\\n        clearTimeout(timer);\\n        timer = wrappedSetTimeout(function () {\\n          callback.apply(this, args);\\n        }, time);\\n      };\\n      func.stop = function () {\\n        clearTimeout(timer);\\n      };\\n      return func;\\n    };\\n    var Delay = {\\n      requestAnimationFrame: function (callback, element) {\\n        if (requestAnimationFramePromise) {\\n          requestAnimationFramePromise.then(callback);\\n          return;\\n        }\\n        requestAnimationFramePromise = new promiseObj(function (resolve) {\\n          if (!element) {\\n            element = domGlobals.document.body;\\n          }\\n          requestAnimationFrame(resolve, element);\\n        }).then(callback);\\n      },\\n      setTimeout: wrappedSetTimeout,\\n      setInterval: wrappedSetInterval,\\n      setEditorTimeout: function (editor, callback, time) {\\n        return wrappedSetTimeout(function () {\\n          if (!editor.removed) {\\n            callback();\\n          }\\n        }, time);\\n      },\\n      setEditorInterval: function (editor, callback, time) {\\n        var timer;\\n        timer = wrappedSetInterval(function () {\\n          if (!editor.removed) {\\n            callback();\\n          } else {\\n            clearInterval(timer);\\n          }\\n        }, time);\\n        return timer;\\n      },\\n      debounce: debounce,\\n      throttle: debounce,\\n      clearInterval: wrappedClearInterval,\\n      clearTimeout: wrappedClearTimeout\\n    };\\n\\n    var eventExpandoPrefix = 'mce-data-';\\n    var mouseEventRe = /^(?:mouse|contextmenu)|click/;\\n    var deprecated = {\\n      keyLocation: 1,\\n      layerX: 1,\\n      layerY: 1,\\n      returnValue: 1,\\n      webkitMovementX: 1,\\n      webkitMovementY: 1,\\n      keyIdentifier: 1\\n    };\\n    var hasIsDefaultPrevented = function (event) {\\n      return event.isDefaultPrevented === returnTrue || event.isDefaultPrevented === returnFalse;\\n    };\\n    var returnFalse = function () {\\n      return false;\\n    };\\n    var returnTrue = function () {\\n      return true;\\n    };\\n    var addEvent = function (target, name, callback, capture) {\\n      if (target.addEventListener) {\\n        target.addEventListener(name, callback, capture || false);\\n      } else if (target.attachEvent) {\\n        target.attachEvent('on' + name, callback);\\n      }\\n    };\\n    var removeEvent = function (target, name, callback, capture) {\\n      if (target.removeEventListener) {\\n        target.removeEventListener(name, callback, capture || false);\\n      } else if (target.detachEvent) {\\n        target.detachEvent('on' + name, callback);\\n      }\\n    };\\n    var getTargetFromShadowDom = function (event, defaultTarget) {\\n      if (event.composedPath) {\\n        var composedPath = event.composedPath();\\n        if (composedPath && composedPath.length > 0) {\\n          return composedPath[0];\\n        }\\n      }\\n      return defaultTarget;\\n    };\\n    var fix = function (originalEvent, data) {\\n      var name;\\n      var event = data || {};\\n      for (name in originalEvent) {\\n        if (!deprecated[name]) {\\n          event[name] = originalEvent[name];\\n        }\\n      }\\n      if (!event.target) {\\n        event.target = event.srcElement || domGlobals.document;\\n      }\\n      if (Env.experimentalShadowDom) {\\n        event.target = getTargetFromShadowDom(originalEvent, event.target);\\n      }\\n      if (originalEvent && mouseEventRe.test(originalEvent.type) && originalEvent.pageX === undefined && originalEvent.clientX !== undefined) {\\n        var eventDoc = event.target.ownerDocument || domGlobals.document;\\n        var doc = eventDoc.documentElement;\\n        var body = eventDoc.body;\\n        event.pageX = originalEvent.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);\\n        event.pageY = originalEvent.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);\\n      }\\n      event.preventDefault = function () {\\n        event.isDefaultPrevented = returnTrue;\\n        if (originalEvent) {\\n          if (originalEvent.preventDefault) {\\n            originalEvent.preventDefault();\\n          } else {\\n            originalEvent.returnValue = false;\\n          }\\n        }\\n      };\\n      event.stopPropagation = function () {\\n        event.isPropagationStopped = returnTrue;\\n        if (originalEvent) {\\n          if (originalEvent.stopPropagation) {\\n            originalEvent.stopPropagation();\\n          } else {\\n            originalEvent.cancelBubble = true;\\n          }\\n        }\\n      };\\n      event.stopImmediatePropagation = function () {\\n        event.isImmediatePropagationStopped = returnTrue;\\n        event.stopPropagation();\\n      };\\n      if (hasIsDefaultPrevented(event) === false) {\\n        event.isDefaultPrevented = returnFalse;\\n        event.isPropagationStopped = returnFalse;\\n        event.isImmediatePropagationStopped = returnFalse;\\n      }\\n      if (typeof event.metaKey === 'undefined') {\\n        event.metaKey = false;\\n      }\\n      return event;\\n    };\\n    var bindOnReady = function (win, callback, eventUtils) {\\n      var doc = win.document, event = { type: 'ready' };\\n      if (eventUtils.domLoaded) {\\n        callback(event);\\n        return;\\n      }\\n      var isDocReady = function () {\\n        return doc.readyState === 'complete' || doc.readyState === 'interactive' && doc.body;\\n      };\\n      var readyHandler = function () {\\n        if (!eventUtils.domLoaded) {\\n          eventUtils.domLoaded = true;\\n          callback(event);\\n        }\\n      };\\n      var waitForDomLoaded = function () {\\n        if (isDocReady()) {\\n          removeEvent(doc, 'readystatechange', waitForDomLoaded);\\n          readyHandler();\\n        }\\n      };\\n      var tryScroll = function () {\\n        try {\\n          doc.documentElement.doScroll('left');\\n        } catch (ex) {\\n          Delay.setTimeout(tryScroll);\\n          return;\\n        }\\n        readyHandler();\\n      };\\n      if (doc.addEventListener && !(Env.ie && Env.ie < 11)) {\\n        if (isDocReady()) {\\n          readyHandler();\\n        } else {\\n          addEvent(win, 'DOMContentLoaded', readyHandler);\\n        }\\n      } else {\\n        addEvent(doc, 'readystatechange', waitForDomLoaded);\\n        if (doc.documentElement.doScroll && win.self === win.top) {\\n          tryScroll();\\n        }\\n      }\\n      addEvent(win, 'load', readyHandler);\\n    };\\n    var EventUtils = function () {\\n      var self = this;\\n      var events = {}, count, expando, hasFocusIn, hasMouseEnterLeave, mouseEnterLeave;\\n      expando = eventExpandoPrefix + (+new Date()).toString(32);\\n      hasMouseEnterLeave = 'onmouseenter' in domGlobals.document.documentElement;\\n      hasFocusIn = 'onfocusin' in domGlobals.document.documentElement;\\n      mouseEnterLeave = {\\n        mouseenter: 'mouseover',\\n        mouseleave: 'mouseout'\\n      };\\n      count = 1;\\n      self.domLoaded = false;\\n      self.events = events;\\n      var executeHandlers = function (evt, id) {\\n        var callbackList, i, l, callback;\\n        var container = events[id];\\n        callbackList = container && container[evt.type];\\n        if (callbackList) {\\n          for (i = 0, l = callbackList.length; i < l; i++) {\\n            callback = callbackList[i];\\n            if (callback && callback.func.call(callback.scope, evt) === false) {\\n              evt.preventDefault();\\n            }\\n            if (evt.isImmediatePropagationStopped()) {\\n              return;\\n            }\\n          }\\n        }\\n      };\\n      self.bind = function (target, names, callback, scope) {\\n        var id, callbackList, i, name, fakeName, nativeHandler, capture;\\n        var win = domGlobals.window;\\n        var defaultNativeHandler = function (evt) {\\n          executeHandlers(fix(evt || win.event), id);\\n        };\\n        if (!target || target.nodeType === 3 || target.nodeType === 8) {\\n          return;\\n        }\\n        if (!target[expando]) {\\n          id = count++;\\n          target[expando] = id;\\n          events[id] = {};\\n        } else {\\n          id = target[expando];\\n        }\\n        scope = scope || target;\\n        names = names.split(' ');\\n        i = names.length;\\n        while (i--) {\\n          name = names[i];\\n          nativeHandler = defaultNativeHandler;\\n          fakeName = capture = false;\\n          if (name === 'DOMContentLoaded') {\\n            name = 'ready';\\n          }\\n          if (self.domLoaded && name === 'ready' && target.readyState === 'complete') {\\n            callback.call(scope, fix({ type: name }));\\n            continue;\\n          }\\n          if (!hasMouseEnterLeave) {\\n            fakeName = mouseEnterLeave[name];\\n            if (fakeName) {\\n              nativeHandler = function (evt) {\\n                var current, related;\\n                current = evt.currentTarget;\\n                related = evt.relatedTarget;\\n                if (related && current.contains) {\\n                  related = current.contains(related);\\n                } else {\\n                  while (related && related !== current) {\\n                    related = related.parentNode;\\n                  }\\n                }\\n                if (!related) {\\n                  evt = fix(evt || win.event);\\n                  evt.type = evt.type === 'mouseout' ? 'mouseleave' : 'mouseenter';\\n                  evt.target = current;\\n                  executeHandlers(evt, id);\\n                }\\n              };\\n            }\\n          }\\n          if (!hasFocusIn && (name === 'focusin' || name === 'focusout')) {\\n            capture = true;\\n            fakeName = name === 'focusin' ? 'focus' : 'blur';\\n            nativeHandler = function (evt) {\\n              evt = fix(evt || win.event);\\n              evt.type = evt.type === 'focus' ? 'focusin' : 'focusout';\\n              executeHandlers(evt, id);\\n            };\\n          }\\n          callbackList = events[id][name];\\n          if (!callbackList) {\\n            events[id][name] = callbackList = [{\\n                func: callback,\\n                scope: scope\\n              }];\\n            callbackList.fakeName = fakeName;\\n            callbackList.capture = capture;\\n            callbackList.nativeHandler = nativeHandler;\\n            if (name === 'ready') {\\n              bindOnReady(target, nativeHandler, self);\\n            } else {\\n              addEvent(target, fakeName || name, nativeHandler, capture);\\n            }\\n          } else {\\n            if (name === 'ready' && self.domLoaded) {\\n              callback({ type: name });\\n            } else {\\n              callbackList.push({\\n                func: callback,\\n                scope: scope\\n              });\\n            }\\n          }\\n        }\\n        target = callbackList = 0;\\n        return callback;\\n      };\\n      self.unbind = function (target, names, callback) {\\n        var id, callbackList, i, ci, name, eventMap;\\n        if (!target || target.nodeType === 3 || target.nodeType === 8) {\\n          return self;\\n        }\\n        id = target[expando];\\n        if (id) {\\n          eventMap = events[id];\\n          if (names) {\\n            names = names.split(' ');\\n            i = names.length;\\n            while (i--) {\\n              name = names[i];\\n              callbackList = eventMap[name];\\n              if (callbackList) {\\n                if (callback) {\\n                  ci = callbackList.length;\\n                  while (ci--) {\\n                    if (callbackList[ci].func === callback) {\\n                      var nativeHandler = callbackList.nativeHandler;\\n                      var fakeName = callbackList.fakeName, capture = callbackList.capture;\\n                      callbackList = callbackList.slice(0, ci).concat(callbackList.slice(ci + 1));\\n                      callbackList.nativeHandler = nativeHandler;\\n                      callbackList.fakeName = fakeName;\\n                      callbackList.capture = capture;\\n                      eventMap[name] = callbackList;\\n                    }\\n                  }\\n                }\\n                if (!callback || callbackList.length === 0) {\\n                  delete eventMap[name];\\n                  removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\\n                }\\n              }\\n            }\\n          } else {\\n            for (name in eventMap) {\\n              callbackList = eventMap[name];\\n              removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\\n            }\\n            eventMap = {};\\n          }\\n          for (name in eventMap) {\\n            return self;\\n          }\\n          delete events[id];\\n          try {\\n            delete target[expando];\\n          } catch (ex) {\\n            target[expando] = null;\\n          }\\n        }\\n        return self;\\n      };\\n      self.fire = function (target, name, args) {\\n        var id;\\n        if (!target || target.nodeType === 3 || target.nodeType === 8) {\\n          return self;\\n        }\\n        args = fix(null, args);\\n        args.type = name;\\n        args.target = target;\\n        do {\\n          id = target[expando];\\n          if (id) {\\n            executeHandlers(args, id);\\n          }\\n          target = target.parentNode || target.ownerDocument || target.defaultView || target.parentWindow;\\n        } while (target && !args.isPropagationStopped());\\n        return self;\\n      };\\n      self.clean = function (target) {\\n        var i, children;\\n        var unbind = self.unbind;\\n        if (!target || target.nodeType === 3 || target.nodeType === 8) {\\n          return self;\\n        }\\n        if (target[expando]) {\\n          unbind(target);\\n        }\\n        if (!target.getElementsByTagName) {\\n          target = target.document;\\n        }\\n        if (target && target.getElementsByTagName) {\\n          unbind(target);\\n          children = target.getElementsByTagName('*');\\n          i = children.length;\\n          while (i--) {\\n            target = children[i];\\n            if (target[expando]) {\\n              unbind(target);\\n            }\\n          }\\n        }\\n        return self;\\n      };\\n      self.destroy = function () {\\n        events = {};\\n      };\\n      self.cancel = function (e) {\\n        if (e) {\\n          e.preventDefault();\\n          e.stopImmediatePropagation();\\n        }\\n        return false;\\n      };\\n    };\\n    EventUtils.Event = new EventUtils();\\n    EventUtils.Event.bind(domGlobals.window, 'ready', function () {\\n    });\\n\\n    var i, support, Expr, getText, isXML, tokenize, compile, select, outermostContext, sortInput, hasDuplicate, setDocument, document, docElem, documentIsHTML, rbuggyQSA, rbuggyMatches, matches, contains$1, expando = 'sizzle' + -new Date(), preferredDoc = domGlobals.window.document, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), sortOrder = function (a, b) {\\n        if (a === b) {\\n          hasDuplicate = true;\\n        }\\n        return 0;\\n      }, strundefined = typeof undefined, MAX_NEGATIVE = 1 << 31, hasOwn = {}.hasOwnProperty, arr = [], pop = arr.pop, push_native = arr.push, push = arr.push, slice = arr.slice, indexOf$1 = arr.indexOf || function (elem) {\\n        var i = 0, len = this.length;\\n        for (; i < len; i++) {\\n          if (this[i] === elem) {\\n            return i;\\n          }\\n        }\\n        return -1;\\n      }, booleans = 'checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped', whitespace = '[\\\\\\\\x20\\\\\\\\t\\\\\\\\r\\\\\\\\n\\\\\\\\f]', identifier = '(?:\\\\\\\\\\\\\\\\.|[\\\\\\\\w-]|[^\\\\\\\\x00-\\\\\\\\xa0])+', attributes = '\\\\\\\\[' + whitespace + '*(' + identifier + ')(?:' + whitespace + '*([*^$|!~]?=)' + whitespace + '*(?:\\\\'((?:\\\\\\\\\\\\\\\\.|[^\\\\\\\\\\\\\\\\\\\\'])*)\\\\'|\\\"((?:\\\\\\\\\\\\\\\\.|[^\\\\\\\\\\\\\\\\\\\"])*)\\\"|(' + identifier + '))|)' + whitespace + '*\\\\\\\\]', pseudos = ':(' + identifier + ')(?:\\\\\\\\((' + '(\\\\'((?:\\\\\\\\\\\\\\\\.|[^\\\\\\\\\\\\\\\\\\\\'])*)\\\\'|\\\"((?:\\\\\\\\\\\\\\\\.|[^\\\\\\\\\\\\\\\\\\\"])*)\\\")|' + '((?:\\\\\\\\\\\\\\\\.|[^\\\\\\\\\\\\\\\\()[\\\\\\\\]]|' + attributes + ')*)|' + '.*' + ')\\\\\\\\)|)', rtrim = new RegExp('^' + whitespace + '+|((?:^|[^\\\\\\\\\\\\\\\\])(?:\\\\\\\\\\\\\\\\.)*)' + whitespace + '+$', 'g'), rcomma = new RegExp('^' + whitespace + '*,' + whitespace + '*'), rcombinators = new RegExp('^' + whitespace + '*([>+~]|' + whitespace + ')' + whitespace + '*'), rattributeQuotes = new RegExp('=' + whitespace + '*([^\\\\\\\\]\\\\'\\\"]*?)' + whitespace + '*\\\\\\\\]', 'g'), rpseudo = new RegExp(pseudos), ridentifier = new RegExp('^' + identifier + '$'), matchExpr = {\\n        ID: new RegExp('^#(' + identifier + ')'),\\n        CLASS: new RegExp('^\\\\\\\\.(' + identifier + ')'),\\n        TAG: new RegExp('^(' + identifier + '|[*])'),\\n        ATTR: new RegExp('^' + attributes),\\n        PSEUDO: new RegExp('^' + pseudos),\\n        CHILD: new RegExp('^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\\\\\(' + whitespace + '*(even|odd|(([+-]|)(\\\\\\\\d*)n|)' + whitespace + '*(?:([+-]|)' + whitespace + '*(\\\\\\\\d+)|))' + whitespace + '*\\\\\\\\)|)', 'i'),\\n        bool: new RegExp('^(?:' + booleans + ')$', 'i'),\\n        needsContext: new RegExp('^' + whitespace + '*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\\\\\(' + whitespace + '*((?:-\\\\\\\\d)?\\\\\\\\d*)' + whitespace + '*\\\\\\\\)|)(?=[^-]|$)', 'i')\\n      }, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\\\\d$/i, rnative = /^[^{]+\\\\{\\\\s*\\\\[native \\\\w/, rquickExpr = /^(?:#([\\\\w-]+)|(\\\\w+)|\\\\.([\\\\w-]+))$/, rsibling = /[+~]/, rescape = /'|\\\\\\\\/g, runescape = new RegExp('\\\\\\\\\\\\\\\\([\\\\\\\\da-f]{1,6}' + whitespace + '?|(' + whitespace + ')|.)', 'ig'), funescape = function (_, escaped, escapedWhitespace) {\\n        var high = '0x' + escaped - 65536;\\n        return high !== high || escapedWhitespace ? escaped : high < 0 ? String.fromCharCode(high + 65536) : String.fromCharCode(high >> 10 | 55296, high & 1023 | 56320);\\n      };\\n    try {\\n      push.apply(arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes);\\n      arr[preferredDoc.childNodes.length].nodeType;\\n    } catch (e) {\\n      push = {\\n        apply: arr.length ? function (target, els) {\\n          push_native.apply(target, slice.call(els));\\n        } : function (target, els) {\\n          var j = target.length, i = 0;\\n          while (target[j++] = els[i++]) {\\n          }\\n          target.length = j - 1;\\n        }\\n      };\\n    }\\n    var Sizzle = function (selector, context, results, seed) {\\n      var match, elem, m, nodeType, i, groups, old, nid, newContext, newSelector;\\n      if ((context ? context.ownerDocument || context : preferredDoc) !== document) {\\n        setDocument(context);\\n      }\\n      context = context || document;\\n      results = results || [];\\n      if (!selector || typeof selector !== 'string') {\\n        return results;\\n      }\\n      if ((nodeType = context.nodeType) !== 1 && nodeType !== 9) {\\n        return [];\\n      }\\n      if (documentIsHTML && !seed) {\\n        if (match = rquickExpr.exec(selector)) {\\n          if (m = match[1]) {\\n            if (nodeType === 9) {\\n              elem = context.getElementById(m);\\n              if (elem && elem.parentNode) {\\n                if (elem.id === m) {\\n                  results.push(elem);\\n                  return results;\\n                }\\n              } else {\\n                return results;\\n              }\\n            } else {\\n              if (context.ownerDocument && (elem = context.ownerDocument.getElementById(m)) && contains$1(context, elem) && elem.id === m) {\\n                results.push(elem);\\n                return results;\\n              }\\n            }\\n          } else if (match[2]) {\\n            push.apply(results, context.getElementsByTagName(selector));\\n            return results;\\n          } else if ((m = match[3]) && support.getElementsByClassName) {\\n            push.apply(results, context.getElementsByClassName(m));\\n            return results;\\n          }\\n        }\\n        if (support.qsa && (!rbuggyQSA || !rbuggyQSA.test(selector))) {\\n          nid = old = expando;\\n          newContext = context;\\n          newSelector = nodeType === 9 && selector;\\n          if (nodeType === 1 && context.nodeName.toLowerCase() !== 'object') {\\n            groups = tokenize(selector);\\n            if (old = context.getAttribute('id')) {\\n              nid = old.replace(rescape, '\\\\\\\\$&');\\n            } else {\\n              context.setAttribute('id', nid);\\n            }\\n            nid = '[id=\\\\'' + nid + '\\\\'] ';\\n            i = groups.length;\\n            while (i--) {\\n              groups[i] = nid + toSelector(groups[i]);\\n            }\\n            newContext = rsibling.test(selector) && testContext(context.parentNode) || context;\\n            newSelector = groups.join(',');\\n          }\\n          if (newSelector) {\\n            try {\\n              push.apply(results, newContext.querySelectorAll(newSelector));\\n              return results;\\n            } catch (qsaError) {\\n            } finally {\\n              if (!old) {\\n                context.removeAttribute('id');\\n              }\\n            }\\n          }\\n        }\\n      }\\n      return select(selector.replace(rtrim, '$1'), context, results, seed);\\n    };\\n    function createCache() {\\n      var keys = [];\\n      function cache(key, value) {\\n        if (keys.push(key + ' ') > Expr.cacheLength) {\\n          delete cache[keys.shift()];\\n        }\\n        return cache[key + ' '] = value;\\n      }\\n      return cache;\\n    }\\n    function markFunction(fn) {\\n      fn[expando] = true;\\n      return fn;\\n    }\\n    function siblingCheck(a, b) {\\n      var cur = b && a, diff = cur && a.nodeType === 1 && b.nodeType === 1 && (~b.sourceIndex || MAX_NEGATIVE) - (~a.sourceIndex || MAX_NEGATIVE);\\n      if (diff) {\\n        return diff;\\n      }\\n      if (cur) {\\n        while (cur = cur.nextSibling) {\\n          if (cur === b) {\\n            return -1;\\n          }\\n        }\\n      }\\n      return a ? 1 : -1;\\n    }\\n    function createInputPseudo(type) {\\n      return function (elem) {\\n        var name = elem.nodeName.toLowerCase();\\n        return name === 'input' && elem.type === type;\\n      };\\n    }\\n    function createButtonPseudo(type) {\\n      return function (elem) {\\n        var name = elem.nodeName.toLowerCase();\\n        return (name === 'input' || name === 'button') && elem.type === type;\\n      };\\n    }\\n    function createPositionalPseudo(fn) {\\n      return markFunction(function (argument) {\\n        argument = +argument;\\n        return markFunction(function (seed, matches) {\\n          var j, matchIndexes = fn([], seed.length, argument), i = matchIndexes.length;\\n          while (i--) {\\n            if (seed[j = matchIndexes[i]]) {\\n              seed[j] = !(matches[j] = seed[j]);\\n            }\\n          }\\n        });\\n      });\\n    }\\n    function testContext(context) {\\n      return context && typeof context.getElementsByTagName !== strundefined && context;\\n    }\\n    support = Sizzle.support = {};\\n    isXML = Sizzle.isXML = function (elem) {\\n      var documentElement = elem && (elem.ownerDocument || elem).documentElement;\\n      return documentElement ? documentElement.nodeName !== 'HTML' : false;\\n    };\\n    setDocument = Sizzle.setDocument = function (node) {\\n      var hasCompare, doc = node ? node.ownerDocument || node : preferredDoc, parent = doc.defaultView;\\n      function getTop(win) {\\n        try {\\n          return win.top;\\n        } catch (ex) {\\n        }\\n        return null;\\n      }\\n      if (doc === document || doc.nodeType !== 9 || !doc.documentElement) {\\n        return document;\\n      }\\n      document = doc;\\n      docElem = doc.documentElement;\\n      documentIsHTML = !isXML(doc);\\n      if (parent && parent !== getTop(parent)) {\\n        if (parent.addEventListener) {\\n          parent.addEventListener('unload', function () {\\n            setDocument();\\n          }, false);\\n        } else if (parent.attachEvent) {\\n          parent.attachEvent('onunload', function () {\\n            setDocument();\\n          });\\n        }\\n      }\\n      support.attributes = true;\\n      support.getElementsByTagName = true;\\n      support.getElementsByClassName = rnative.test(doc.getElementsByClassName);\\n      support.getById = true;\\n      Expr.find.ID = function (id, context) {\\n        if (typeof context.getElementById !== strundefined && documentIsHTML) {\\n          var m = context.getElementById(id);\\n          return m && m.parentNode ? [m] : [];\\n        }\\n      };\\n      Expr.filter.ID = function (id) {\\n        var attrId = id.replace(runescape, funescape);\\n        return function (elem) {\\n          return elem.getAttribute('id') === attrId;\\n        };\\n      };\\n      Expr.find.TAG = support.getElementsByTagName ? function (tag, context) {\\n        if (typeof context.getElementsByTagName !== strundefined) {\\n          return context.getElementsByTagName(tag);\\n        }\\n      } : function (tag, context) {\\n        var elem, tmp = [], i = 0, results = context.getElementsByTagName(tag);\\n        if (tag === '*') {\\n          while (elem = results[i++]) {\\n            if (elem.nodeType === 1) {\\n              tmp.push(elem);\\n            }\\n          }\\n          return tmp;\\n        }\\n        return results;\\n      };\\n      Expr.find.CLASS = support.getElementsByClassName && function (className, context) {\\n        if (documentIsHTML) {\\n          return context.getElementsByClassName(className);\\n        }\\n      };\\n      rbuggyMatches = [];\\n      rbuggyQSA = [];\\n      support.disconnectedMatch = true;\\n      rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join('|'));\\n      rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join('|'));\\n      hasCompare = rnative.test(docElem.compareDocumentPosition);\\n      contains$1 = hasCompare || rnative.test(docElem.contains) ? function (a, b) {\\n        var adown = a.nodeType === 9 ? a.documentElement : a, bup = b && b.parentNode;\\n        return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));\\n      } : function (a, b) {\\n        if (b) {\\n          while (b = b.parentNode) {\\n            if (b === a) {\\n              return true;\\n            }\\n          }\\n        }\\n        return false;\\n      };\\n      sortOrder = hasCompare ? function (a, b) {\\n        if (a === b) {\\n          hasDuplicate = true;\\n          return 0;\\n        }\\n        var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\\n        if (compare) {\\n          return compare;\\n        }\\n        compare = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1;\\n        if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) {\\n          if (a === doc || a.ownerDocument === preferredDoc && contains$1(preferredDoc, a)) {\\n            return -1;\\n          }\\n          if (b === doc || b.ownerDocument === preferredDoc && contains$1(preferredDoc, b)) {\\n            return 1;\\n          }\\n          return sortInput ? indexOf$1.call(sortInput, a) - indexOf$1.call(sortInput, b) : 0;\\n        }\\n        return compare & 4 ? -1 : 1;\\n      } : function (a, b) {\\n        if (a === b) {\\n          hasDuplicate = true;\\n          return 0;\\n        }\\n        var cur, i = 0, aup = a.parentNode, bup = b.parentNode, ap = [a], bp = [b];\\n        if (!aup || !bup) {\\n          return a === doc ? -1 : b === doc ? 1 : aup ? -1 : bup ? 1 : sortInput ? indexOf$1.call(sortInput, a) - indexOf$1.call(sortInput, b) : 0;\\n        } else if (aup === bup) {\\n          return siblingCheck(a, b);\\n        }\\n        cur = a;\\n        while (cur = cur.parentNode) {\\n          ap.unshift(cur);\\n        }\\n        cur = b;\\n        while (cur = cur.parentNode) {\\n          bp.unshift(cur);\\n        }\\n        while (ap[i] === bp[i]) {\\n          i++;\\n        }\\n        return i ? siblingCheck(ap[i], bp[i]) : ap[i] === preferredDoc ? -1 : bp[i] === preferredDoc ? 1 : 0;\\n      };\\n      return doc;\\n    };\\n    Sizzle.matches = function (expr, elements) {\\n      return Sizzle(expr, null, null, elements);\\n    };\\n    Sizzle.matchesSelector = function (elem, expr) {\\n      if ((elem.ownerDocument || elem) !== document) {\\n        setDocument(elem);\\n      }\\n      expr = expr.replace(rattributeQuotes, '=\\\\'$1\\\\']');\\n      if (support.matchesSelector && documentIsHTML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) {\\n        try {\\n          var ret = matches.call(elem, expr);\\n          if (ret || support.disconnectedMatch || elem.document && elem.document.nodeType !== 11) {\\n            return ret;\\n          }\\n        } catch (e) {\\n        }\\n      }\\n      return Sizzle(expr, document, null, [elem]).length > 0;\\n    };\\n    Sizzle.contains = function (context, elem) {\\n      if ((context.ownerDocument || context) !== document) {\\n        setDocument(context);\\n      }\\n      return contains$1(context, elem);\\n    };\\n    Sizzle.attr = function (elem, name) {\\n      if ((elem.ownerDocument || elem) !== document) {\\n        setDocument(elem);\\n      }\\n      var fn = Expr.attrHandle[name.toLowerCase()], val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined;\\n      return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\\n    };\\n    Sizzle.error = function (msg) {\\n      throw new Error('Syntax error, unrecognized expression: ' + msg);\\n    };\\n    Sizzle.uniqueSort = function (results) {\\n      var elem, duplicates = [], j = 0, i = 0;\\n      hasDuplicate = !support.detectDuplicates;\\n      sortInput = !support.sortStable && results.slice(0);\\n      results.sort(sortOrder);\\n      if (hasDuplicate) {\\n        while (elem = results[i++]) {\\n          if (elem === results[i]) {\\n            j = duplicates.push(i);\\n          }\\n        }\\n        while (j--) {\\n          results.splice(duplicates[j], 1);\\n        }\\n      }\\n      sortInput = null;\\n      return results;\\n    };\\n    getText = Sizzle.getText = function (elem) {\\n      var node, ret = '', i = 0, nodeType = elem.nodeType;\\n      if (!nodeType) {\\n        while (node = elem[i++]) {\\n          ret += getText(node);\\n        }\\n      } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\\n        if (typeof elem.textContent === 'string') {\\n          return elem.textContent;\\n        } else {\\n          for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\\n            ret += getText(elem);\\n          }\\n        }\\n      } else if (nodeType === 3 || nodeType === 4) {\\n        return elem.nodeValue;\\n      }\\n      return ret;\\n    };\\n    Expr = Sizzle.selectors = {\\n      cacheLength: 50,\\n      createPseudo: markFunction,\\n      match: matchExpr,\\n      attrHandle: {},\\n      find: {},\\n      relative: {\\n        '>': {\\n          dir: 'parentNode',\\n          first: true\\n        },\\n        ' ': { dir: 'parentNode' },\\n        '+': {\\n          dir: 'previousSibling',\\n          first: true\\n        },\\n        '~': { dir: 'previousSibling' }\\n      },\\n      preFilter: {\\n        ATTR: function (match) {\\n          match[1] = match[1].replace(runescape, funescape);\\n          match[3] = (match[3] || match[4] || match[5] || '').replace(runescape, funescape);\\n          if (match[2] === '~=') {\\n            match[3] = ' ' + match[3] + ' ';\\n          }\\n          return match.slice(0, 4);\\n        },\\n        CHILD: function (match) {\\n          match[1] = match[1].toLowerCase();\\n          if (match[1].slice(0, 3) === 'nth') {\\n            if (!match[3]) {\\n              Sizzle.error(match[0]);\\n            }\\n            match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === 'even' || match[3] === 'odd'));\\n            match[5] = +(match[7] + match[8] || match[3] === 'odd');\\n          } else if (match[3]) {\\n            Sizzle.error(match[0]);\\n          }\\n          return match;\\n        },\\n        PSEUDO: function (match) {\\n          var excess, unquoted = !match[6] && match[2];\\n          if (matchExpr.CHILD.test(match[0])) {\\n            return null;\\n          }\\n          if (match[3]) {\\n            match[2] = match[4] || match[5] || '';\\n          } else if (unquoted && rpseudo.test(unquoted) && (excess = tokenize(unquoted, true)) && (excess = unquoted.indexOf(')', unquoted.length - excess) - unquoted.length)) {\\n            match[0] = match[0].slice(0, excess);\\n            match[2] = unquoted.slice(0, excess);\\n          }\\n          return match.slice(0, 3);\\n        }\\n      },\\n      filter: {\\n        TAG: function (nodeNameSelector) {\\n          var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\\n          return nodeNameSelector === '*' ? function () {\\n            return true;\\n          } : function (elem) {\\n            return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\\n          };\\n        },\\n        CLASS: function (className) {\\n          var pattern = classCache[className + ' '];\\n          return pattern || (pattern = new RegExp('(^|' + whitespace + ')' + className + '(' + whitespace + '|$)')) && classCache(className, function (elem) {\\n            return pattern.test(typeof elem.className === 'string' && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute('class') || '');\\n          });\\n        },\\n        ATTR: function (name, operator, check) {\\n          return function (elem) {\\n            var result = Sizzle.attr(elem, name);\\n            if (result == null) {\\n              return operator === '!=';\\n            }\\n            if (!operator) {\\n              return true;\\n            }\\n            result += '';\\n            return operator === '=' ? result === check : operator === '!=' ? result !== check : operator === '^=' ? check && result.indexOf(check) === 0 : operator === '*=' ? check && result.indexOf(check) > -1 : operator === '$=' ? check && result.slice(-check.length) === check : operator === '~=' ? (' ' + result + ' ').indexOf(check) > -1 : operator === '|=' ? result === check || result.slice(0, check.length + 1) === check + '-' : false;\\n          };\\n        },\\n        CHILD: function (type, what, argument, first, last) {\\n          var simple = type.slice(0, 3) !== 'nth', forward = type.slice(-4) !== 'last', ofType = what === 'of-type';\\n          return first === 1 && last === 0 ? function (elem) {\\n            return !!elem.parentNode;\\n          } : function (elem, context, xml) {\\n            var cache, outerCache, node, diff, nodeIndex, start, dir = simple !== forward ? 'nextSibling' : 'previousSibling', parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType;\\n            if (parent) {\\n              if (simple) {\\n                while (dir) {\\n                  node = elem;\\n                  while (node = node[dir]) {\\n                    if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {\\n                      return false;\\n                    }\\n                  }\\n                  start = dir = type === 'only' && !start && 'nextSibling';\\n                }\\n                return true;\\n              }\\n              start = [forward ? parent.firstChild : parent.lastChild];\\n              if (forward && useCache) {\\n                outerCache = parent[expando] || (parent[expando] = {});\\n                cache = outerCache[type] || [];\\n                nodeIndex = cache[0] === dirruns && cache[1];\\n                diff = cache[0] === dirruns && cache[2];\\n                node = nodeIndex && parent.childNodes[nodeIndex];\\n                while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\\n                  if (node.nodeType === 1 && ++diff && node === elem) {\\n                    outerCache[type] = [\\n                      dirruns,\\n                      nodeIndex,\\n                      diff\\n                    ];\\n                    break;\\n                  }\\n                }\\n              } else if (useCache && (cache = (elem[expando] || (elem[expando] = {}))[type]) && cache[0] === dirruns) {\\n                diff = cache[1];\\n              } else {\\n                while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\\n                  if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) {\\n                    if (useCache) {\\n                      (node[expando] || (node[expando] = {}))[type] = [\\n                        dirruns,\\n                        diff\\n                      ];\\n                    }\\n                    if (node === elem) {\\n                      break;\\n                    }\\n                  }\\n                }\\n              }\\n              diff -= last;\\n              return diff === first || diff % first === 0 && diff / first >= 0;\\n            }\\n          };\\n        },\\n        PSEUDO: function (pseudo, argument) {\\n          var args, fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error('unsupported pseudo: ' + pseudo);\\n          if (fn[expando]) {\\n            return fn(argument);\\n          }\\n          if (fn.length > 1) {\\n            args = [\\n              pseudo,\\n              pseudo,\\n              '',\\n              argument\\n            ];\\n            return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) {\\n              var idx, matched = fn(seed, argument), i = matched.length;\\n              while (i--) {\\n                idx = indexOf$1.call(seed, matched[i]);\\n                seed[idx] = !(matches[idx] = matched[i]);\\n              }\\n            }) : function (elem) {\\n              return fn(elem, 0, args);\\n            };\\n          }\\n          return fn;\\n        }\\n      },\\n      pseudos: {\\n        not: markFunction(function (selector) {\\n          var input = [], results = [], matcher = compile(selector.replace(rtrim, '$1'));\\n          return matcher[expando] ? markFunction(function (seed, matches, context, xml) {\\n            var elem, unmatched = matcher(seed, null, xml, []), i = seed.length;\\n            while (i--) {\\n              if (elem = unmatched[i]) {\\n                seed[i] = !(matches[i] = elem);\\n              }\\n            }\\n          }) : function (elem, context, xml) {\\n            input[0] = elem;\\n            matcher(input, null, xml, results);\\n            return !results.pop();\\n          };\\n        }),\\n        has: markFunction(function (selector) {\\n          return function (elem) {\\n            return Sizzle(selector, elem).length > 0;\\n          };\\n        }),\\n        contains: markFunction(function (text) {\\n          text = text.replace(runescape, funescape);\\n          return function (elem) {\\n            return (elem.textContent || elem.innerText || getText(elem)).indexOf(text) > -1;\\n          };\\n        }),\\n        lang: markFunction(function (lang) {\\n          if (!ridentifier.test(lang || '')) {\\n            Sizzle.error('unsupported lang: ' + lang);\\n          }\\n          lang = lang.replace(runescape, funescape).toLowerCase();\\n          return function (elem) {\\n            var elemLang;\\n            do {\\n              if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute('xml:lang') || elem.getAttribute('lang')) {\\n                elemLang = elemLang.toLowerCase();\\n                return elemLang === lang || elemLang.indexOf(lang + '-') === 0;\\n              }\\n            } while ((elem = elem.parentNode) && elem.nodeType === 1);\\n            return false;\\n          };\\n        }),\\n        target: function (elem) {\\n          var hash = domGlobals.window.location && domGlobals.window.location.hash;\\n          return hash && hash.slice(1) === elem.id;\\n        },\\n        root: function (elem) {\\n          return elem === docElem;\\n        },\\n        focus: function (elem) {\\n          return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\\n        },\\n        enabled: function (elem) {\\n          return elem.disabled === false;\\n        },\\n        disabled: function (elem) {\\n          return elem.disabled === true;\\n        },\\n        checked: function (elem) {\\n          var nodeName = elem.nodeName.toLowerCase();\\n          return nodeName === 'input' && !!elem.checked || nodeName === 'option' && !!elem.selected;\\n        },\\n        selected: function (elem) {\\n          if (elem.parentNode) {\\n            elem.parentNode.selectedIndex;\\n          }\\n          return elem.selected === true;\\n        },\\n        empty: function (elem) {\\n          for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\\n            if (elem.nodeType < 6) {\\n              return false;\\n            }\\n          }\\n          return true;\\n        },\\n        parent: function (elem) {\\n          return !Expr.pseudos.empty(elem);\\n        },\\n        header: function (elem) {\\n          return rheader.test(elem.nodeName);\\n        },\\n        input: function (elem) {\\n          return rinputs.test(elem.nodeName);\\n        },\\n        button: function (elem) {\\n          var name = elem.nodeName.toLowerCase();\\n          return name === 'input' && elem.type === 'button' || name === 'button';\\n        },\\n        text: function (elem) {\\n          var attr;\\n          return elem.nodeName.toLowerCase() === 'input' && elem.type === 'text' && ((attr = elem.getAttribute('type')) == null || attr.toLowerCase() === 'text');\\n        },\\n        first: createPositionalPseudo(function () {\\n          return [0];\\n        }),\\n        last: createPositionalPseudo(function (matchIndexes, length) {\\n          return [length - 1];\\n        }),\\n        eq: createPositionalPseudo(function (matchIndexes, length, argument) {\\n          return [argument < 0 ? argument + length : argument];\\n        }),\\n        even: createPositionalPseudo(function (matchIndexes, length) {\\n          var i = 0;\\n          for (; i < length; i += 2) {\\n            matchIndexes.push(i);\\n          }\\n          return matchIndexes;\\n        }),\\n        odd: createPositionalPseudo(function (matchIndexes, length) {\\n          var i = 1;\\n          for (; i < length; i += 2) {\\n            matchIndexes.push(i);\\n          }\\n          return matchIndexes;\\n        }),\\n        lt: createPositionalPseudo(function (matchIndexes, length, argument) {\\n          var i = argument < 0 ? argument + length : argument;\\n          for (; --i >= 0;) {\\n            matchIndexes.push(i);\\n          }\\n          return matchIndexes;\\n        }),\\n        gt: createPositionalPseudo(function (matchIndexes, length, argument) {\\n          var i = argument < 0 ? argument + length : argument;\\n          for (; ++i < length;) {\\n            matchIndexes.push(i);\\n          }\\n          return matchIndexes;\\n        })\\n      }\\n    };\\n    Expr.pseudos.nth = Expr.pseudos.eq;\\n    for (i in {\\n        radio: true,\\n        checkbox: true,\\n        file: true,\\n        password: true,\\n        image: true\\n      }) {\\n      Expr.pseudos[i] = createInputPseudo(i);\\n    }\\n    for (i in {\\n        submit: true,\\n        reset: true\\n      }) {\\n      Expr.pseudos[i] = createButtonPseudo(i);\\n    }\\n    function setFilters() {\\n    }\\n    setFilters.prototype = Expr.filters = Expr.pseudos;\\n    Expr.setFilters = new setFilters();\\n    tokenize = Sizzle.tokenize = function (selector, parseOnly) {\\n      var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[selector + ' '];\\n      if (cached) {\\n        return parseOnly ? 0 : cached.slice(0);\\n      }\\n      soFar = selector;\\n      groups = [];\\n      preFilters = Expr.preFilter;\\n      while (soFar) {\\n        if (!matched || (match = rcomma.exec(soFar))) {\\n          if (match) {\\n            soFar = soFar.slice(match[0].length) || soFar;\\n          }\\n          groups.push(tokens = []);\\n        }\\n        matched = false;\\n        if (match = rcombinators.exec(soFar)) {\\n          matched = match.shift();\\n          tokens.push({\\n            value: matched,\\n            type: match[0].replace(rtrim, ' ')\\n          });\\n          soFar = soFar.slice(matched.length);\\n        }\\n        for (type in Expr.filter) {\\n          if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {\\n            matched = match.shift();\\n            tokens.push({\\n              value: matched,\\n              type: type,\\n              matches: match\\n            });\\n            soFar = soFar.slice(matched.length);\\n          }\\n        }\\n        if (!matched) {\\n          break;\\n        }\\n      }\\n      return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) : tokenCache(selector, groups).slice(0);\\n    };\\n    function toSelector(tokens) {\\n      var i = 0, len = tokens.length, selector = '';\\n      for (; i < len; i++) {\\n        selector += tokens[i].value;\\n      }\\n      return selector;\\n    }\\n    function addCombinator(matcher, combinator, base) {\\n      var dir = combinator.dir, checkNonElements = base && dir === 'parentNode', doneName = done++;\\n      return combinator.first ? function (elem, context, xml) {\\n        while (elem = elem[dir]) {\\n          if (elem.nodeType === 1 || checkNonElements) {\\n            return matcher(elem, context, xml);\\n          }\\n        }\\n      } : function (elem, context, xml) {\\n        var oldCache, outerCache, newCache = [\\n            dirruns,\\n            doneName\\n          ];\\n        if (xml) {\\n          while (elem = elem[dir]) {\\n            if (elem.nodeType === 1 || checkNonElements) {\\n              if (matcher(elem, context, xml)) {\\n                return true;\\n              }\\n            }\\n          }\\n        } else {\\n          while (elem = elem[dir]) {\\n            if (elem.nodeType === 1 || checkNonElements) {\\n              outerCache = elem[expando] || (elem[expando] = {});\\n              if ((oldCache = outerCache[dir]) && oldCache[0] === dirruns && oldCache[1] === doneName) {\\n                return newCache[2] = oldCache[2];\\n              } else {\\n                outerCache[dir] = newCache;\\n                if (newCache[2] = matcher(elem, context, xml)) {\\n                  return true;\\n                }\\n              }\\n            }\\n          }\\n        }\\n      };\\n    }\\n    function elementMatcher(matchers) {\\n      return matchers.length > 1 ? function (elem, context, xml) {\\n        var i = matchers.length;\\n        while (i--) {\\n          if (!matchers[i](elem, context, xml)) {\\n            return false;\\n          }\\n        }\\n        return true;\\n      } : matchers[0];\\n    }\\n    function multipleContexts(selector, contexts, results) {\\n      var i = 0, len = contexts.length;\\n      for (; i < len; i++) {\\n        Sizzle(selector, contexts[i], results);\\n      }\\n      return results;\\n    }\\n    function condense(unmatched, map, filter, context, xml) {\\n      var elem, newUnmatched = [], i = 0, len = unmatched.length, mapped = map != null;\\n      for (; i < len; i++) {\\n        if (elem = unmatched[i]) {\\n          if (!filter || filter(elem, context, xml)) {\\n            newUnmatched.push(elem);\\n            if (mapped) {\\n              map.push(i);\\n            }\\n          }\\n        }\\n      }\\n      return newUnmatched;\\n    }\\n    function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\\n      if (postFilter && !postFilter[expando]) {\\n        postFilter = setMatcher(postFilter);\\n      }\\n      if (postFinder && !postFinder[expando]) {\\n        postFinder = setMatcher(postFinder, postSelector);\\n      }\\n      return markFunction(function (seed, results, context, xml) {\\n        var temp, i, elem, preMap = [], postMap = [], preexisting = results.length, elems = seed || multipleContexts(selector || '*', context.nodeType ? [context] : context, []), matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems, matcherOut = matcher ? postFinder || (seed ? preFilter : preexisting || postFilter) ? [] : results : matcherIn;\\n        if (matcher) {\\n          matcher(matcherIn, matcherOut, context, xml);\\n        }\\n        if (postFilter) {\\n          temp = condense(matcherOut, postMap);\\n          postFilter(temp, [], context, xml);\\n          i = temp.length;\\n          while (i--) {\\n            if (elem = temp[i]) {\\n              matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\\n            }\\n          }\\n        }\\n        if (seed) {\\n          if (postFinder || preFilter) {\\n            if (postFinder) {\\n              temp = [];\\n              i = matcherOut.length;\\n              while (i--) {\\n                if (elem = matcherOut[i]) {\\n                  temp.push(matcherIn[i] = elem);\\n                }\\n              }\\n              postFinder(null, matcherOut = [], temp, xml);\\n            }\\n            i = matcherOut.length;\\n            while (i--) {\\n              if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf$1.call(seed, elem) : preMap[i]) > -1) {\\n                seed[temp] = !(results[temp] = elem);\\n              }\\n            }\\n          }\\n        } else {\\n          matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);\\n          if (postFinder) {\\n            postFinder(null, results, matcherOut, xml);\\n          } else {\\n            push.apply(results, matcherOut);\\n          }\\n        }\\n      });\\n    }\\n    function matcherFromTokens(tokens) {\\n      var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[tokens[0].type], implicitRelative = leadingRelative || Expr.relative[' '], i = leadingRelative ? 1 : 0, matchContext = addCombinator(function (elem) {\\n          return elem === checkContext;\\n        }, implicitRelative, true), matchAnyContext = addCombinator(function (elem) {\\n          return indexOf$1.call(checkContext, elem) > -1;\\n        }, implicitRelative, true), matchers = [function (elem, context, xml) {\\n            return !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));\\n          }];\\n      for (; i < len; i++) {\\n        if (matcher = Expr.relative[tokens[i].type]) {\\n          matchers = [addCombinator(elementMatcher(matchers), matcher)];\\n        } else {\\n          matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\\n          if (matcher[expando]) {\\n            j = ++i;\\n            for (; j < len; j++) {\\n              if (Expr.relative[tokens[j].type]) {\\n                break;\\n              }\\n            }\\n            return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector(tokens.slice(0, i - 1).concat({ value: tokens[i - 2].type === ' ' ? '*' : '' })).replace(rtrim, '$1'), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens));\\n          }\\n          matchers.push(matcher);\\n        }\\n      }\\n      return elementMatcher(matchers);\\n    }\\n    function matcherFromGroupMatchers(elementMatchers, setMatchers) {\\n      var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function (seed, context, xml, results, outermost) {\\n          var elem, j, matcher, matchedCount = 0, i = '0', unmatched = seed && [], setMatched = [], contextBackup = outermostContext, elems = seed || byElement && Expr.find.TAG('*', outermost), dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1, len = elems.length;\\n          if (outermost) {\\n            outermostContext = context !== document && context;\\n          }\\n          for (; i !== len && (elem = elems[i]) != null; i++) {\\n            if (byElement && elem) {\\n              j = 0;\\n              while (matcher = elementMatchers[j++]) {\\n                if (matcher(elem, context, xml)) {\\n                  results.push(elem);\\n                  break;\\n                }\\n              }\\n              if (outermost) {\\n                dirruns = dirrunsUnique;\\n              }\\n            }\\n            if (bySet) {\\n              if (elem = !matcher && elem) {\\n                matchedCount--;\\n              }\\n              if (seed) {\\n                unmatched.push(elem);\\n              }\\n            }\\n          }\\n          matchedCount += i;\\n          if (bySet && i !== matchedCount) {\\n            j = 0;\\n            while (matcher = setMatchers[j++]) {\\n              matcher(unmatched, setMatched, context, xml);\\n            }\\n            if (seed) {\\n              if (matchedCount > 0) {\\n                while (i--) {\\n                  if (!(unmatched[i] || setMatched[i])) {\\n                    setMatched[i] = pop.call(results);\\n                  }\\n                }\\n              }\\n              setMatched = condense(setMatched);\\n            }\\n            push.apply(results, setMatched);\\n            if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {\\n              Sizzle.uniqueSort(results);\\n            }\\n          }\\n          if (outermost) {\\n            dirruns = dirrunsUnique;\\n            outermostContext = contextBackup;\\n          }\\n          return unmatched;\\n        };\\n      return bySet ? markFunction(superMatcher) : superMatcher;\\n    }\\n    compile = Sizzle.compile = function (selector, match) {\\n      var i, setMatchers = [], elementMatchers = [], cached = compilerCache[selector + ' '];\\n      if (!cached) {\\n        if (!match) {\\n          match = tokenize(selector);\\n        }\\n        i = match.length;\\n        while (i--) {\\n          cached = matcherFromTokens(match[i]);\\n          if (cached[expando]) {\\n            setMatchers.push(cached);\\n          } else {\\n            elementMatchers.push(cached);\\n          }\\n        }\\n        cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers));\\n        cached.selector = selector;\\n      }\\n      return cached;\\n    };\\n    select = Sizzle.select = function (selector, context, results, seed) {\\n      var i, tokens, token, type, find, compiled = typeof selector === 'function' && selector, match = !seed && tokenize(selector = compiled.selector || selector);\\n      results = results || [];\\n      if (match.length === 1) {\\n        tokens = match[0] = match[0].slice(0);\\n        if (tokens.length > 2 && (token = tokens[0]).type === 'ID' && support.getById && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\\n          context = (Expr.find.ID(token.matches[0].replace(runescape, funescape), context) || [])[0];\\n          if (!context) {\\n            return results;\\n          } else if (compiled) {\\n            context = context.parentNode;\\n          }\\n          selector = selector.slice(tokens.shift().value.length);\\n        }\\n        i = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\\n        while (i--) {\\n          token = tokens[i];\\n          if (Expr.relative[type = token.type]) {\\n            break;\\n          }\\n          if (find = Expr.find[type]) {\\n            if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)) {\\n              tokens.splice(i, 1);\\n              selector = seed.length && toSelector(tokens);\\n              if (!selector) {\\n                push.apply(results, seed);\\n                return results;\\n              }\\n              break;\\n            }\\n          }\\n        }\\n      }\\n      (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, rsibling.test(selector) && testContext(context.parentNode) || context);\\n      return results;\\n    };\\n    support.sortStable = expando.split('').sort(sortOrder).join('') === expando;\\n    support.detectDuplicates = !!hasDuplicate;\\n    setDocument();\\n    support.sortDetached = true;\\n\\n    var isArray$1 = Array.isArray;\\n    var toArray = function (obj) {\\n      var array = obj, i, l;\\n      if (!isArray$1(obj)) {\\n        array = [];\\n        for (i = 0, l = obj.length; i < l; i++) {\\n          array[i] = obj[i];\\n        }\\n      }\\n      return array;\\n    };\\n    var each$1 = function (o, cb, s) {\\n      var n, l;\\n      if (!o) {\\n        return 0;\\n      }\\n      s = s || o;\\n      if (o.length !== undefined) {\\n        for (n = 0, l = o.length; n < l; n++) {\\n          if (cb.call(s, o[n], n, o) === false) {\\n            return 0;\\n          }\\n        }\\n      } else {\\n        for (n in o) {\\n          if (o.hasOwnProperty(n)) {\\n            if (cb.call(s, o[n], n, o) === false) {\\n              return 0;\\n            }\\n          }\\n        }\\n      }\\n      return 1;\\n    };\\n    var map$1 = function (array, callback) {\\n      var out = [];\\n      each$1(array, function (item, index) {\\n        out.push(callback(item, index, array));\\n      });\\n      return out;\\n    };\\n    var filter$1 = function (a, f) {\\n      var o = [];\\n      each$1(a, function (v, index) {\\n        if (!f || f(v, index, a)) {\\n          o.push(v);\\n        }\\n      });\\n      return o;\\n    };\\n    var indexOf$2 = function (a, v) {\\n      var i, l;\\n      if (a) {\\n        for (i = 0, l = a.length; i < l; i++) {\\n          if (a[i] === v) {\\n            return i;\\n          }\\n        }\\n      }\\n      return -1;\\n    };\\n    var reduce = function (collection, iteratee, accumulator, thisArg) {\\n      var i = 0;\\n      if (arguments.length < 3) {\\n        accumulator = collection[0];\\n      }\\n      for (; i < collection.length; i++) {\\n        accumulator = iteratee.call(thisArg, accumulator, collection[i], i);\\n      }\\n      return accumulator;\\n    };\\n    var findIndex$1 = function (array, predicate, thisArg) {\\n      var i, l;\\n      for (i = 0, l = array.length; i < l; i++) {\\n        if (predicate.call(thisArg, array[i], i, array)) {\\n          return i;\\n        }\\n      }\\n      return -1;\\n    };\\n    var find$1 = function (array, predicate, thisArg) {\\n      var idx = findIndex$1(array, predicate, thisArg);\\n      if (idx !== -1) {\\n        return array[idx];\\n      }\\n      return undefined;\\n    };\\n    var last$1 = function (collection) {\\n      return collection[collection.length - 1];\\n    };\\n    var ArrUtils = {\\n      isArray: isArray$1,\\n      toArray: toArray,\\n      each: each$1,\\n      map: map$1,\\n      filter: filter$1,\\n      indexOf: indexOf$2,\\n      reduce: reduce,\\n      findIndex: findIndex$1,\\n      find: find$1,\\n      last: last$1\\n    };\\n\\n    var whiteSpaceRegExp = /^\\\\s*|\\\\s*$/g;\\n    var trim = function (str) {\\n      return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp, '');\\n    };\\n    var is = function (obj, type) {\\n      if (!type) {\\n        return obj !== undefined;\\n      }\\n      if (type === 'array' && ArrUtils.isArray(obj)) {\\n        return true;\\n      }\\n      return typeof obj === type;\\n    };\\n    var makeMap = function (items, delim, map) {\\n      var i;\\n      items = items || [];\\n      delim = delim || ',';\\n      if (typeof items === 'string') {\\n        items = items.split(delim);\\n      }\\n      map = map || {};\\n      i = items.length;\\n      while (i--) {\\n        map[items[i]] = {};\\n      }\\n      return map;\\n    };\\n    var hasOwnProperty = function (obj, prop) {\\n      return Object.prototype.hasOwnProperty.call(obj, prop);\\n    };\\n    var create = function (s, p, root) {\\n      var self = this;\\n      var sp, ns, cn, scn, c, de = 0;\\n      s = /^((static) )?([\\\\w.]+)(:([\\\\w.]+))?/.exec(s);\\n      cn = s[3].match(/(^|\\\\.)(\\\\w+)$/i)[2];\\n      ns = self.createNS(s[3].replace(/\\\\.\\\\w+$/, ''), root);\\n      if (ns[cn]) {\\n        return;\\n      }\\n      if (s[2] === 'static') {\\n        ns[cn] = p;\\n        if (this.onCreate) {\\n          this.onCreate(s[2], s[3], ns[cn]);\\n        }\\n        return;\\n      }\\n      if (!p[cn]) {\\n        p[cn] = function () {\\n        };\\n        de = 1;\\n      }\\n      ns[cn] = p[cn];\\n      self.extend(ns[cn].prototype, p);\\n      if (s[5]) {\\n        sp = self.resolve(s[5]).prototype;\\n        scn = s[5].match(/\\\\.(\\\\w+)$/i)[1];\\n        c = ns[cn];\\n        if (de) {\\n          ns[cn] = function () {\\n            return sp[scn].apply(this, arguments);\\n          };\\n        } else {\\n          ns[cn] = function () {\\n            this.parent = sp[scn];\\n            return c.apply(this, arguments);\\n          };\\n        }\\n        ns[cn].prototype[cn] = ns[cn];\\n        self.each(sp, function (f, n) {\\n          ns[cn].prototype[n] = sp[n];\\n        });\\n        self.each(p, function (f, n) {\\n          if (sp[n]) {\\n            ns[cn].prototype[n] = function () {\\n              this.parent = sp[n];\\n              return f.apply(this, arguments);\\n            };\\n          } else {\\n            if (n !== cn) {\\n              ns[cn].prototype[n] = f;\\n            }\\n          }\\n        });\\n      }\\n      self.each(p.static, function (f, n) {\\n        ns[cn][n] = f;\\n      });\\n    };\\n    var extend = function (obj, ext) {\\n      var x = [];\\n      for (var _i = 2; _i < arguments.length; _i++) {\\n        x[_i - 2] = arguments[_i];\\n      }\\n      var i, l, name;\\n      var args = arguments;\\n      var value;\\n      for (i = 1, l = args.length; i < l; i++) {\\n        ext = args[i];\\n        for (name in ext) {\\n          if (ext.hasOwnProperty(name)) {\\n            value = ext[name];\\n            if (value !== undefined) {\\n              obj[name] = value;\\n            }\\n          }\\n        }\\n      }\\n      return obj;\\n    };\\n    var walk = function (o, f, n, s) {\\n      s = s || this;\\n      if (o) {\\n        if (n) {\\n          o = o[n];\\n        }\\n        ArrUtils.each(o, function (o, i) {\\n          if (f.call(s, o, i, n) === false) {\\n            return false;\\n          }\\n          walk(o, f, n, s);\\n        });\\n      }\\n    };\\n    var createNS = function (n, o) {\\n      var i, v;\\n      o = o || domGlobals.window;\\n      n = n.split('.');\\n      for (i = 0; i < n.length; i++) {\\n        v = n[i];\\n        if (!o[v]) {\\n          o[v] = {};\\n        }\\n        o = o[v];\\n      }\\n      return o;\\n    };\\n    var resolve$1 = function (n, o) {\\n      var i, l;\\n      o = o || domGlobals.window;\\n      n = n.split('.');\\n      for (i = 0, l = n.length; i < l; i++) {\\n        o = o[n[i]];\\n        if (!o) {\\n          break;\\n        }\\n      }\\n      return o;\\n    };\\n    var explode = function (s, d) {\\n      if (!s || is(s, 'array')) {\\n        return s;\\n      }\\n      return ArrUtils.map(s.split(d || ','), trim);\\n    };\\n    var _addCacheSuffix = function (url) {\\n      var cacheSuffix = Env.cacheSuffix;\\n      if (cacheSuffix) {\\n        url += (url.indexOf('?') === -1 ? '?' : '&') + cacheSuffix;\\n      }\\n      return url;\\n    };\\n    var Tools = {\\n      trim: trim,\\n      isArray: ArrUtils.isArray,\\n      is: is,\\n      toArray: ArrUtils.toArray,\\n      makeMap: makeMap,\\n      each: ArrUtils.each,\\n      map: ArrUtils.map,\\n      grep: ArrUtils.filter,\\n      inArray: ArrUtils.indexOf,\\n      hasOwn: hasOwnProperty,\\n      extend: extend,\\n      create: create,\\n      walk: walk,\\n      createNS: createNS,\\n      resolve: resolve$1,\\n      explode: explode,\\n      _addCacheSuffix: _addCacheSuffix\\n    };\\n\\n    var doc = domGlobals.document, push$1 = Array.prototype.push, slice$1 = Array.prototype.slice;\\n    var rquickExpr$1 = /^(?:[^#<]*(<[\\\\w\\\\W]+>)[^>]*$|#([\\\\w\\\\-]*)$)/;\\n    var Event = EventUtils.Event;\\n    var skipUniques = Tools.makeMap('children,contents,next,prev');\\n    var isDefined = function (obj) {\\n      return typeof obj !== 'undefined';\\n    };\\n    var isString$1 = function (obj) {\\n      return typeof obj === 'string';\\n    };\\n    var isWindow = function (obj) {\\n      return obj && obj === obj.window;\\n    };\\n    var createFragment = function (html, fragDoc) {\\n      var frag, node, container;\\n      fragDoc = fragDoc || doc;\\n      container = fragDoc.createElement('div');\\n      frag = fragDoc.createDocumentFragment();\\n      container.innerHTML = html;\\n      while (node = container.firstChild) {\\n        frag.appendChild(node);\\n      }\\n      return frag;\\n    };\\n    var domManipulate = function (targetNodes, sourceItem, callback, reverse) {\\n      var i;\\n      if (isString$1(sourceItem)) {\\n        sourceItem = createFragment(sourceItem, getElementDocument(targetNodes[0]));\\n      } else if (sourceItem.length && !sourceItem.nodeType) {\\n        sourceItem = DomQuery.makeArray(sourceItem);\\n        if (reverse) {\\n          for (i = sourceItem.length - 1; i >= 0; i--) {\\n            domManipulate(targetNodes, sourceItem[i], callback, reverse);\\n          }\\n        } else {\\n          for (i = 0; i < sourceItem.length; i++) {\\n            domManipulate(targetNodes, sourceItem[i], callback, reverse);\\n          }\\n        }\\n        return targetNodes;\\n      }\\n      if (sourceItem.nodeType) {\\n        i = targetNodes.length;\\n        while (i--) {\\n          callback.call(targetNodes[i], sourceItem);\\n        }\\n      }\\n      return targetNodes;\\n    };\\n    var hasClass = function (node, className) {\\n      return node && className && (' ' + node.className + ' ').indexOf(' ' + className + ' ') !== -1;\\n    };\\n    var wrap = function (elements, wrapper, all) {\\n      var lastParent, newWrapper;\\n      wrapper = DomQuery(wrapper)[0];\\n      elements.each(function () {\\n        var self = this;\\n        if (!all || lastParent !== self.parentNode) {\\n          lastParent = self.parentNode;\\n          newWrapper = wrapper.cloneNode(false);\\n          self.parentNode.insertBefore(newWrapper, self);\\n          newWrapper.appendChild(self);\\n        } else {\\n          newWrapper.appendChild(self);\\n        }\\n      });\\n      return elements;\\n    };\\n    var numericCssMap = Tools.makeMap('fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom', ' ');\\n    var booleanMap = Tools.makeMap('checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected', ' ');\\n    var propFix = {\\n      for: 'htmlFor',\\n      class: 'className',\\n      readonly: 'readOnly'\\n    };\\n    var cssFix = { float: 'cssFloat' };\\n    var attrHooks = {}, cssHooks = {};\\n    var DomQuery = function (selector, context) {\\n      return new DomQuery.fn.init(selector, context);\\n    };\\n    var inArray = function (item, array) {\\n      var i;\\n      if (array.indexOf) {\\n        return array.indexOf(item);\\n      }\\n      i = array.length;\\n      while (i--) {\\n        if (array[i] === item) {\\n          return i;\\n        }\\n      }\\n      return -1;\\n    };\\n    var whiteSpaceRegExp$1 = /^\\\\s*|\\\\s*$/g;\\n    var trim$1 = function (str) {\\n      return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp$1, '');\\n    };\\n    var each$2 = function (obj, callback) {\\n      var length, key, i, value;\\n      if (obj) {\\n        length = obj.length;\\n        if (length === undefined) {\\n          for (key in obj) {\\n            if (obj.hasOwnProperty(key)) {\\n              value = obj[key];\\n              if (callback.call(value, key, value) === false) {\\n                break;\\n              }\\n            }\\n          }\\n        } else {\\n          for (i = 0; i < length; i++) {\\n            value = obj[i];\\n            if (callback.call(value, i, value) === false) {\\n              break;\\n            }\\n          }\\n        }\\n      }\\n      return obj;\\n    };\\n    var grep = function (array, callback) {\\n      var out = [];\\n      each$2(array, function (i, item) {\\n        if (callback(item, i)) {\\n          out.push(item);\\n        }\\n      });\\n      return out;\\n    };\\n    var getElementDocument = function (element) {\\n      if (!element) {\\n        return doc;\\n      }\\n      if (element.nodeType === 9) {\\n        return element;\\n      }\\n      return element.ownerDocument;\\n    };\\n    DomQuery.fn = DomQuery.prototype = {\\n      constructor: DomQuery,\\n      selector: '',\\n      context: null,\\n      length: 0,\\n      init: function (selector, context) {\\n        var self = this;\\n        var match, node;\\n        if (!selector) {\\n          return self;\\n        }\\n        if (selector.nodeType) {\\n          self.context = self[0] = selector;\\n          self.length = 1;\\n          return self;\\n        }\\n        if (context && context.nodeType) {\\n          self.context = context;\\n        } else {\\n          if (context) {\\n            return DomQuery(selector).attr(context);\\n          }\\n          self.context = context = domGlobals.document;\\n        }\\n        if (isString$1(selector)) {\\n          self.selector = selector;\\n          if (selector.charAt(0) === '<' && selector.charAt(selector.length - 1) === '>' && selector.length >= 3) {\\n            match = [\\n              null,\\n              selector,\\n              null\\n            ];\\n          } else {\\n            match = rquickExpr$1.exec(selector);\\n          }\\n          if (match) {\\n            if (match[1]) {\\n              node = createFragment(selector, getElementDocument(context)).firstChild;\\n              while (node) {\\n                push$1.call(self, node);\\n                node = node.nextSibling;\\n              }\\n            } else {\\n              node = getElementDocument(context).getElementById(match[2]);\\n              if (!node) {\\n                return self;\\n              }\\n              if (node.id !== match[2]) {\\n                return self.find(selector);\\n              }\\n              self.length = 1;\\n              self[0] = node;\\n            }\\n          } else {\\n            return DomQuery(context).find(selector);\\n          }\\n        } else {\\n          this.add(selector, false);\\n        }\\n        return self;\\n      },\\n      toArray: function () {\\n        return Tools.toArray(this);\\n      },\\n      add: function (items, sort) {\\n        var self = this;\\n        var nodes, i;\\n        if (isString$1(items)) {\\n          return self.add(DomQuery(items));\\n        }\\n        if (sort !== false) {\\n          nodes = DomQuery.unique(self.toArray().concat(DomQuery.makeArray(items)));\\n          self.length = nodes.length;\\n          for (i = 0; i < nodes.length; i++) {\\n            self[i] = nodes[i];\\n          }\\n        } else {\\n          push$1.apply(self, DomQuery.makeArray(items));\\n        }\\n        return self;\\n      },\\n      attr: function (name, value) {\\n        var self = this;\\n        var hook;\\n        if (typeof name === 'object') {\\n          each$2(name, function (name, value) {\\n            self.attr(name, value);\\n          });\\n        } else if (isDefined(value)) {\\n          this.each(function () {\\n            var hook;\\n            if (this.nodeType === 1) {\\n              hook = attrHooks[name];\\n              if (hook && hook.set) {\\n                hook.set(this, value);\\n                return;\\n              }\\n              if (value === null) {\\n                this.removeAttribute(name, 2);\\n              } else {\\n                this.setAttribute(name, value, 2);\\n              }\\n            }\\n          });\\n        } else {\\n          if (self[0] && self[0].nodeType === 1) {\\n            hook = attrHooks[name];\\n            if (hook && hook.get) {\\n              return hook.get(self[0], name);\\n            }\\n            if (booleanMap[name]) {\\n              return self.prop(name) ? name : undefined;\\n            }\\n            value = self[0].getAttribute(name, 2);\\n            if (value === null) {\\n              value = undefined;\\n            }\\n          }\\n          return value;\\n        }\\n        return self;\\n      },\\n      removeAttr: function (name) {\\n        return this.attr(name, null);\\n      },\\n      prop: function (name, value) {\\n        var self = this;\\n        name = propFix[name] || name;\\n        if (typeof name === 'object') {\\n          each$2(name, function (name, value) {\\n            self.prop(name, value);\\n          });\\n        } else if (isDefined(value)) {\\n          this.each(function () {\\n            if (this.nodeType === 1) {\\n              this[name] = value;\\n            }\\n          });\\n        } else {\\n          if (self[0] && self[0].nodeType && name in self[0]) {\\n            return self[0][name];\\n          }\\n          return value;\\n        }\\n        return self;\\n      },\\n      css: function (name, value) {\\n        var self = this;\\n        var elm, hook;\\n        var camel = function (name) {\\n          return name.replace(/-(\\\\D)/g, function (a, b) {\\n            return b.toUpperCase();\\n          });\\n        };\\n        var dashed = function (name) {\\n          return name.replace(/[A-Z]/g, function (a) {\\n            return '-' + a;\\n          });\\n        };\\n        if (typeof name === 'object') {\\n          each$2(name, function (name, value) {\\n            self.css(name, value);\\n          });\\n        } else {\\n          if (isDefined(value)) {\\n            name = camel(name);\\n            if (typeof value === 'number' && !numericCssMap[name]) {\\n              value = value.toString() + 'px';\\n            }\\n            self.each(function () {\\n              var style = this.style;\\n              hook = cssHooks[name];\\n              if (hook && hook.set) {\\n                hook.set(this, value);\\n                return;\\n              }\\n              try {\\n                this.style[cssFix[name] || name] = value;\\n              } catch (ex) {\\n              }\\n              if (value === null || value === '') {\\n                if (style.removeProperty) {\\n                  style.removeProperty(dashed(name));\\n                } else {\\n                  style.removeAttribute(name);\\n                }\\n              }\\n            });\\n          } else {\\n            elm = self[0];\\n            hook = cssHooks[name];\\n            if (hook && hook.get) {\\n              return hook.get(elm);\\n            }\\n            if (elm.ownerDocument.defaultView) {\\n              try {\\n                return elm.ownerDocument.defaultView.getComputedStyle(elm, null).getPropertyValue(dashed(name));\\n              } catch (ex) {\\n                return undefined;\\n              }\\n            } else if (elm.currentStyle) {\\n              return elm.currentStyle[camel(name)];\\n            } else {\\n              return '';\\n            }\\n          }\\n        }\\n        return self;\\n      },\\n      remove: function () {\\n        var self = this;\\n        var node, i = this.length;\\n        while (i--) {\\n          node = self[i];\\n          Event.clean(node);\\n          if (node.parentNode) {\\n            node.parentNode.removeChild(node);\\n          }\\n        }\\n        return this;\\n      },\\n      empty: function () {\\n        var self = this;\\n        var node, i = this.length;\\n        while (i--) {\\n          node = self[i];\\n          while (node.firstChild) {\\n            node.removeChild(node.firstChild);\\n          }\\n        }\\n        return this;\\n      },\\n      html: function (value) {\\n        var self = this;\\n        var i;\\n        if (isDefined(value)) {\\n          i = self.length;\\n          try {\\n            while (i--) {\\n              self[i].innerHTML = value;\\n            }\\n          } catch (ex) {\\n            DomQuery(self[i]).empty().append(value);\\n          }\\n          return self;\\n        }\\n        return self[0] ? self[0].innerHTML : '';\\n      },\\n      text: function (value) {\\n        var self = this;\\n        var i;\\n        if (isDefined(value)) {\\n          i = self.length;\\n          while (i--) {\\n            if ('innerText' in self[i]) {\\n              self[i].innerText = value;\\n            } else {\\n              self[0].textContent = value;\\n            }\\n          }\\n          return self;\\n        }\\n        return self[0] ? self[0].innerText || self[0].textContent : '';\\n      },\\n      append: function () {\\n        return domManipulate(this, arguments, function (node) {\\n          if (this.nodeType === 1 || this.host && this.host.nodeType === 1) {\\n            this.appendChild(node);\\n          }\\n        });\\n      },\\n      prepend: function () {\\n        return domManipulate(this, arguments, function (node) {\\n          if (this.nodeType === 1 || this.host && this.host.nodeType === 1) {\\n            this.insertBefore(node, this.firstChild);\\n          }\\n        }, true);\\n      },\\n      before: function () {\\n        var self = this;\\n        if (self[0] && self[0].parentNode) {\\n          return domManipulate(self, arguments, function (node) {\\n            this.parentNode.insertBefore(node, this);\\n          });\\n        }\\n        return self;\\n      },\\n      after: function () {\\n        var self = this;\\n        if (self[0] && self[0].parentNode) {\\n          return domManipulate(self, arguments, function (node) {\\n            this.parentNode.insertBefore(node, this.nextSibling);\\n          }, true);\\n        }\\n        return self;\\n      },\\n      appendTo: function (val) {\\n        DomQuery(val).append(this);\\n        return this;\\n      },\\n      prependTo: function (val) {\\n        DomQuery(val).prepend(this);\\n        return this;\\n      },\\n      replaceWith: function (content) {\\n        return this.before(content).remove();\\n      },\\n      wrap: function (content) {\\n        return wrap(this, content);\\n      },\\n      wrapAll: function (content) {\\n        return wrap(this, content, true);\\n      },\\n      wrapInner: function (content) {\\n        this.each(function () {\\n          DomQuery(this).contents().wrapAll(content);\\n        });\\n        return this;\\n      },\\n      unwrap: function () {\\n        return this.parent().each(function () {\\n          DomQuery(this).replaceWith(this.childNodes);\\n        });\\n      },\\n      clone: function () {\\n        var result = [];\\n        this.each(function () {\\n          result.push(this.cloneNode(true));\\n        });\\n        return DomQuery(result);\\n      },\\n      addClass: function (className) {\\n        return this.toggleClass(className, true);\\n      },\\n      removeClass: function (className) {\\n        return this.toggleClass(className, false);\\n      },\\n      toggleClass: function (className, state) {\\n        var self = this;\\n        if (typeof className !== 'string') {\\n          return self;\\n        }\\n        if (className.indexOf(' ') !== -1) {\\n          each$2(className.split(' '), function () {\\n            self.toggleClass(this, state);\\n          });\\n        } else {\\n          self.each(function (index, node) {\\n            var existingClassName, classState;\\n            classState = hasClass(node, className);\\n            if (classState !== state) {\\n              existingClassName = node.className;\\n              if (classState) {\\n                node.className = trim$1((' ' + existingClassName + ' ').replace(' ' + className + ' ', ' '));\\n              } else {\\n                node.className += existingClassName ? ' ' + className : className;\\n              }\\n            }\\n          });\\n        }\\n        return self;\\n      },\\n      hasClass: function (className) {\\n        return hasClass(this[0], className);\\n      },\\n      each: function (callback) {\\n        return each$2(this, callback);\\n      },\\n      on: function (name, callback) {\\n        return this.each(function () {\\n          Event.bind(this, name, callback);\\n        });\\n      },\\n      off: function (name, callback) {\\n        return this.each(function () {\\n          Event.unbind(this, name, callback);\\n        });\\n      },\\n      trigger: function (name) {\\n        return this.each(function () {\\n          if (typeof name === 'object') {\\n            Event.fire(this, name.type, name);\\n          } else {\\n            Event.fire(this, name);\\n          }\\n        });\\n      },\\n      show: function () {\\n        return this.css('display', '');\\n      },\\n      hide: function () {\\n        return this.css('display', 'none');\\n      },\\n      slice: function () {\\n        return new DomQuery(slice$1.apply(this, arguments));\\n      },\\n      eq: function (index) {\\n        return index === -1 ? this.slice(index) : this.slice(index, +index + 1);\\n      },\\n      first: function () {\\n        return this.eq(0);\\n      },\\n      last: function () {\\n        return this.eq(-1);\\n      },\\n      find: function (selector) {\\n        var i, l;\\n        var ret = [];\\n        for (i = 0, l = this.length; i < l; i++) {\\n          DomQuery.find(selector, this[i], ret);\\n        }\\n        return DomQuery(ret);\\n      },\\n      filter: function (selector) {\\n        if (typeof selector === 'function') {\\n          return DomQuery(grep(this.toArray(), function (item, i) {\\n            return selector(i, item);\\n          }));\\n        }\\n        return DomQuery(DomQuery.filter(selector, this.toArray()));\\n      },\\n      closest: function (selector) {\\n        var result = [];\\n        if (selector instanceof DomQuery) {\\n          selector = selector[0];\\n        }\\n        this.each(function (i, node) {\\n          while (node) {\\n            if (typeof selector === 'string' && DomQuery(node).is(selector)) {\\n              result.push(node);\\n              break;\\n            } else if (node === selector) {\\n              result.push(node);\\n              break;\\n            }\\n            node = node.parentNode;\\n          }\\n        });\\n        return DomQuery(result);\\n      },\\n      offset: function (offset) {\\n        var elm, doc, docElm;\\n        var x = 0, y = 0, pos;\\n        if (!offset) {\\n          elm = this[0];\\n          if (elm) {\\n            doc = elm.ownerDocument;\\n            docElm = doc.documentElement;\\n            if (elm.getBoundingClientRect) {\\n              pos = elm.getBoundingClientRect();\\n              x = pos.left + (docElm.scrollLeft || doc.body.scrollLeft) - docElm.clientLeft;\\n              y = pos.top + (docElm.scrollTop || doc.body.scrollTop) - docElm.clientTop;\\n            }\\n          }\\n          return {\\n            left: x,\\n            top: y\\n          };\\n        }\\n        return this.css(offset);\\n      },\\n      push: push$1,\\n      sort: [].sort,\\n      splice: [].splice\\n    };\\n    Tools.extend(DomQuery, {\\n      extend: Tools.extend,\\n      makeArray: function (object) {\\n        if (isWindow(object) || object.nodeType) {\\n          return [object];\\n        }\\n        return Tools.toArray(object);\\n      },\\n      inArray: inArray,\\n      isArray: Tools.isArray,\\n      each: each$2,\\n      trim: trim$1,\\n      grep: grep,\\n      find: Sizzle,\\n      expr: Sizzle.selectors,\\n      unique: Sizzle.uniqueSort,\\n      text: Sizzle.getText,\\n      contains: Sizzle.contains,\\n      filter: function (expr, elems, not) {\\n        var i = elems.length;\\n        if (not) {\\n          expr = ':not(' + expr + ')';\\n        }\\n        while (i--) {\\n          if (elems[i].nodeType !== 1) {\\n            elems.splice(i, 1);\\n          }\\n        }\\n        if (elems.length === 1) {\\n          elems = DomQuery.find.matchesSelector(elems[0], expr) ? [elems[0]] : [];\\n        } else {\\n          elems = DomQuery.find.matches(expr, elems);\\n        }\\n        return elems;\\n      }\\n    });\\n    var dir = function (el, prop, until) {\\n      var matched = [];\\n      var cur = el[prop];\\n      if (typeof until !== 'string' && until instanceof DomQuery) {\\n        until = until[0];\\n      }\\n      while (cur && cur.nodeType !== 9) {\\n        if (until !== undefined) {\\n          if (cur === until) {\\n            break;\\n          }\\n          if (typeof until === 'string' && DomQuery(cur).is(until)) {\\n            break;\\n          }\\n        }\\n        if (cur.nodeType === 1) {\\n          matched.push(cur);\\n        }\\n        cur = cur[prop];\\n      }\\n      return matched;\\n    };\\n    var sibling = function (node, siblingName, nodeType, until) {\\n      var result = [];\\n      if (until instanceof DomQuery) {\\n        until = until[0];\\n      }\\n      for (; node; node = node[siblingName]) {\\n        if (nodeType && node.nodeType !== nodeType) {\\n          continue;\\n        }\\n        if (until !== undefined) {\\n          if (node === until) {\\n            break;\\n          }\\n          if (typeof until === 'string' && DomQuery(node).is(until)) {\\n            break;\\n          }\\n        }\\n        result.push(node);\\n      }\\n      return result;\\n    };\\n    var firstSibling = function (node, siblingName, nodeType) {\\n      for (node = node[siblingName]; node; node = node[siblingName]) {\\n        if (node.nodeType === nodeType) {\\n          return node;\\n        }\\n      }\\n      return null;\\n    };\\n    each$2({\\n      parent: function (node) {\\n        var parent = node.parentNode;\\n        return parent && parent.nodeType !== 11 ? parent : null;\\n      },\\n      parents: function (node) {\\n        return dir(node, 'parentNode');\\n      },\\n      next: function (node) {\\n        return firstSibling(node, 'nextSibling', 1);\\n      },\\n      prev: function (node) {\\n        return firstSibling(node, 'previousSibling', 1);\\n      },\\n      children: function (node) {\\n        return sibling(node.firstChild, 'nextSibling', 1);\\n      },\\n      contents: function (node) {\\n        return Tools.toArray((node.nodeName === 'iframe' ? node.contentDocument || node.contentWindow.document : node).childNodes);\\n      }\\n    }, function (name, fn) {\\n      DomQuery.fn[name] = function (selector) {\\n        var self = this;\\n        var result = [];\\n        self.each(function () {\\n          var nodes = fn.call(result, this, selector, result);\\n          if (nodes) {\\n            if (DomQuery.isArray(nodes)) {\\n              result.push.apply(result, nodes);\\n            } else {\\n              result.push(nodes);\\n            }\\n          }\\n        });\\n        if (this.length > 1) {\\n          if (!skipUniques[name]) {\\n            result = DomQuery.unique(result);\\n          }\\n          if (name.indexOf('parents') === 0) {\\n            result = result.reverse();\\n          }\\n        }\\n        result = DomQuery(result);\\n        if (selector) {\\n          return result.filter(selector);\\n        }\\n        return result;\\n      };\\n    });\\n    each$2({\\n      parentsUntil: function (node, until) {\\n        return dir(node, 'parentNode', until);\\n      },\\n      nextUntil: function (node, until) {\\n        return sibling(node, 'nextSibling', 1, until).slice(1);\\n      },\\n      prevUntil: function (node, until) {\\n        return sibling(node, 'previousSibling', 1, until).slice(1);\\n      }\\n    }, function (name, fn) {\\n      DomQuery.fn[name] = function (selector, filter) {\\n        var self = this;\\n        var result = [];\\n        self.each(function () {\\n          var nodes = fn.call(result, this, selector, result);\\n          if (nodes) {\\n            if (DomQuery.isArray(nodes)) {\\n              result.push.apply(result, nodes);\\n            } else {\\n              result.push(nodes);\\n            }\\n          }\\n        });\\n        if (this.length > 1) {\\n          result = DomQuery.unique(result);\\n          if (name.indexOf('parents') === 0 || name === 'prevUntil') {\\n            result = result.reverse();\\n          }\\n        }\\n        result = DomQuery(result);\\n        if (filter) {\\n          return result.filter(filter);\\n        }\\n        return result;\\n      };\\n    });\\n    DomQuery.fn.is = function (selector) {\\n      return !!selector && this.filter(selector).length > 0;\\n    };\\n    DomQuery.fn.init.prototype = DomQuery.fn;\\n    DomQuery.overrideDefaults = function (callback) {\\n      var defaults;\\n      var sub = function (selector, context) {\\n        defaults = defaults || callback();\\n        if (arguments.length === 0) {\\n          selector = defaults.element;\\n        }\\n        if (!context) {\\n          context = defaults.context;\\n        }\\n        return new sub.fn.init(selector, context);\\n      };\\n      DomQuery.extend(sub, this);\\n      return sub;\\n    };\\n    var appendHooks = function (targetHooks, prop, hooks) {\\n      each$2(hooks, function (name, func) {\\n        targetHooks[name] = targetHooks[name] || {};\\n        targetHooks[name][prop] = func;\\n      });\\n    };\\n    if (Env.ie && Env.ie < 8) {\\n      appendHooks(attrHooks, 'get', {\\n        maxlength: function (elm) {\\n          var value = elm.maxLength;\\n          if (value === 2147483647) {\\n            return undefined;\\n          }\\n          return value;\\n        },\\n        size: function (elm) {\\n          var value = elm.size;\\n          if (value === 20) {\\n            return undefined;\\n          }\\n          return value;\\n        },\\n        class: function (elm) {\\n          return elm.className;\\n        },\\n        style: function (elm) {\\n          var value = elm.style.cssText;\\n          if (value.length === 0) {\\n            return undefined;\\n          }\\n          return value;\\n        }\\n      });\\n      appendHooks(attrHooks, 'set', {\\n        class: function (elm, value) {\\n          elm.className = value;\\n        },\\n        style: function (elm, value) {\\n          elm.style.cssText = value;\\n        }\\n      });\\n    }\\n    if (Env.ie && Env.ie < 9) {\\n      cssFix.float = 'styleFloat';\\n      appendHooks(cssHooks, 'set', {\\n        opacity: function (elm, value) {\\n          var style = elm.style;\\n          if (value === null || value === '') {\\n            style.removeAttribute('filter');\\n          } else {\\n            style.zoom = 1;\\n            style.filter = 'alpha(opacity=' + value * 100 + ')';\\n          }\\n        }\\n      });\\n    }\\n    DomQuery.attrHooks = attrHooks;\\n    DomQuery.cssHooks = cssHooks;\\n\\n    var cached = function (f) {\\n      var called = false;\\n      var r;\\n      return function () {\\n        var args = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n          args[_i] = arguments[_i];\\n        }\\n        if (!called) {\\n          called = true;\\n          r = f.apply(null, args);\\n        }\\n        return r;\\n      };\\n    };\\n\\n    var firstMatch = function (regexes, s) {\\n      for (var i = 0; i < regexes.length; i++) {\\n        var x = regexes[i];\\n        if (x.test(s)) {\\n          return x;\\n        }\\n      }\\n      return undefined;\\n    };\\n    var find$2 = function (regexes, agent) {\\n      var r = firstMatch(regexes, agent);\\n      if (!r) {\\n        return {\\n          major: 0,\\n          minor: 0\\n        };\\n      }\\n      var group = function (i) {\\n        return Number(agent.replace(r, '$' + i));\\n      };\\n      return nu(group(1), group(2));\\n    };\\n    var detect = function (versionRegexes, agent) {\\n      var cleanedAgent = String(agent).toLowerCase();\\n      if (versionRegexes.length === 0) {\\n        return unknown();\\n      }\\n      return find$2(versionRegexes, cleanedAgent);\\n    };\\n    var unknown = function () {\\n      return nu(0, 0);\\n    };\\n    var nu = function (major, minor) {\\n      return {\\n        major: major,\\n        minor: minor\\n      };\\n    };\\n    var Version = {\\n      nu: nu,\\n      detect: detect,\\n      unknown: unknown\\n    };\\n\\n    var edge = 'Edge';\\n    var chrome = 'Chrome';\\n    var ie$1 = 'IE';\\n    var opera$1 = 'Opera';\\n    var firefox = 'Firefox';\\n    var safari = 'Safari';\\n    var isBrowser = function (name, current) {\\n      return function () {\\n        return current === name;\\n      };\\n    };\\n    var unknown$1 = function () {\\n      return nu$1({\\n        current: undefined,\\n        version: Version.unknown()\\n      });\\n    };\\n    var nu$1 = function (info) {\\n      var current = info.current;\\n      var version = info.version;\\n      return {\\n        current: current,\\n        version: version,\\n        isEdge: isBrowser(edge, current),\\n        isChrome: isBrowser(chrome, current),\\n        isIE: isBrowser(ie$1, current),\\n        isOpera: isBrowser(opera$1, current),\\n        isFirefox: isBrowser(firefox, current),\\n        isSafari: isBrowser(safari, current)\\n      };\\n    };\\n    var Browser = {\\n      unknown: unknown$1,\\n      nu: nu$1,\\n      edge: constant(edge),\\n      chrome: constant(chrome),\\n      ie: constant(ie$1),\\n      opera: constant(opera$1),\\n      firefox: constant(firefox),\\n      safari: constant(safari)\\n    };\\n\\n    var windows = 'Windows';\\n    var ios = 'iOS';\\n    var android$1 = 'Android';\\n    var linux = 'Linux';\\n    var osx = 'OSX';\\n    var solaris = 'Solaris';\\n    var freebsd = 'FreeBSD';\\n    var isOS = function (name, current) {\\n      return function () {\\n        return current === name;\\n      };\\n    };\\n    var unknown$2 = function () {\\n      return nu$2({\\n        current: undefined,\\n        version: Version.unknown()\\n      });\\n    };\\n    var nu$2 = function (info) {\\n      var current = info.current;\\n      var version = info.version;\\n      return {\\n        current: current,\\n        version: version,\\n        isWindows: isOS(windows, current),\\n        isiOS: isOS(ios, current),\\n        isAndroid: isOS(android$1, current),\\n        isOSX: isOS(osx, current),\\n        isLinux: isOS(linux, current),\\n        isSolaris: isOS(solaris, current),\\n        isFreeBSD: isOS(freebsd, current)\\n      };\\n    };\\n    var OperatingSystem = {\\n      unknown: unknown$2,\\n      nu: nu$2,\\n      windows: constant(windows),\\n      ios: constant(ios),\\n      android: constant(android$1),\\n      linux: constant(linux),\\n      osx: constant(osx),\\n      solaris: constant(solaris),\\n      freebsd: constant(freebsd)\\n    };\\n\\n    var DeviceType = function (os, browser, userAgent) {\\n      var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\\n      var isiPhone = os.isiOS() && !isiPad;\\n      var isAndroid3 = os.isAndroid() && os.version.major === 3;\\n      var isAndroid4 = os.isAndroid() && os.version.major === 4;\\n      var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;\\n      var isTouch = os.isiOS() || os.isAndroid();\\n      var isPhone = isTouch && !isTablet;\\n      var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\\n      return {\\n        isiPad: constant(isiPad),\\n        isiPhone: constant(isiPhone),\\n        isTablet: constant(isTablet),\\n        isPhone: constant(isPhone),\\n        isTouch: constant(isTouch),\\n        isAndroid: os.isAndroid,\\n        isiOS: os.isiOS,\\n        isWebView: constant(iOSwebview)\\n      };\\n    };\\n\\n    var detect$1 = function (candidates, userAgent) {\\n      var agent = String(userAgent).toLowerCase();\\n      return find(candidates, function (candidate) {\\n        return candidate.search(agent);\\n      });\\n    };\\n    var detectBrowser = function (browsers, userAgent) {\\n      return detect$1(browsers, userAgent).map(function (browser) {\\n        var version = Version.detect(browser.versionRegexes, userAgent);\\n        return {\\n          current: browser.name,\\n          version: version\\n        };\\n      });\\n    };\\n    var detectOs = function (oses, userAgent) {\\n      return detect$1(oses, userAgent).map(function (os) {\\n        var version = Version.detect(os.versionRegexes, userAgent);\\n        return {\\n          current: os.name,\\n          version: version\\n        };\\n      });\\n    };\\n    var UaString = {\\n      detectBrowser: detectBrowser,\\n      detectOs: detectOs\\n    };\\n\\n    var contains$2 = function (str, substr) {\\n      return str.indexOf(substr) !== -1;\\n    };\\n    var trim$2 = function (str) {\\n      return str.replace(/^\\\\s+|\\\\s+$/g, '');\\n    };\\n    var lTrim = function (str) {\\n      return str.replace(/^\\\\s+/g, '');\\n    };\\n    var rTrim = function (str) {\\n      return str.replace(/\\\\s+$/g, '');\\n    };\\n\\n    var normalVersionRegex = /.*?version\\\\/\\\\ ?([0-9]+)\\\\.([0-9]+).*/;\\n    var checkContains = function (target) {\\n      return function (uastring) {\\n        return contains$2(uastring, target);\\n      };\\n    };\\n    var browsers = [\\n      {\\n        name: 'Edge',\\n        versionRegexes: [/.*?edge\\\\/ ?([0-9]+)\\\\.([0-9]+)$/],\\n        search: function (uastring) {\\n          return contains$2(uastring, 'edge/') && contains$2(uastring, 'chrome') && contains$2(uastring, 'safari') && contains$2(uastring, 'applewebkit');\\n        }\\n      },\\n      {\\n        name: 'Chrome',\\n        versionRegexes: [\\n          /.*?chrome\\\\/([0-9]+)\\\\.([0-9]+).*/,\\n          normalVersionRegex\\n        ],\\n        search: function (uastring) {\\n          return contains$2(uastring, 'chrome') && !contains$2(uastring, 'chromeframe');\\n        }\\n      },\\n      {\\n        name: 'IE',\\n        versionRegexes: [\\n          /.*?msie\\\\ ?([0-9]+)\\\\.([0-9]+).*/,\\n          /.*?rv:([0-9]+)\\\\.([0-9]+).*/\\n        ],\\n        search: function (uastring) {\\n          return contains$2(uastring, 'msie') || contains$2(uastring, 'trident');\\n        }\\n      },\\n      {\\n        name: 'Opera',\\n        versionRegexes: [\\n          normalVersionRegex,\\n          /.*?opera\\\\/([0-9]+)\\\\.([0-9]+).*/\\n        ],\\n        search: checkContains('opera')\\n      },\\n      {\\n        name: 'Firefox',\\n        versionRegexes: [/.*?firefox\\\\/\\\\ ?([0-9]+)\\\\.([0-9]+).*/],\\n        search: checkContains('firefox')\\n      },\\n      {\\n        name: 'Safari',\\n        versionRegexes: [\\n          normalVersionRegex,\\n          /.*?cpu os ([0-9]+)_([0-9]+).*/\\n        ],\\n        search: function (uastring) {\\n          return (contains$2(uastring, 'safari') || contains$2(uastring, 'mobile/')) && contains$2(uastring, 'applewebkit');\\n        }\\n      }\\n    ];\\n    var oses = [\\n      {\\n        name: 'Windows',\\n        search: checkContains('win'),\\n        versionRegexes: [/.*?windows\\\\ nt\\\\ ?([0-9]+)\\\\.([0-9]+).*/]\\n      },\\n      {\\n        name: 'iOS',\\n        search: function (uastring) {\\n          return contains$2(uastring, 'iphone') || contains$2(uastring, 'ipad');\\n        },\\n        versionRegexes: [\\n          /.*?version\\\\/\\\\ ?([0-9]+)\\\\.([0-9]+).*/,\\n          /.*cpu os ([0-9]+)_([0-9]+).*/,\\n          /.*cpu iphone os ([0-9]+)_([0-9]+).*/\\n        ]\\n      },\\n      {\\n        name: 'Android',\\n        search: checkContains('android'),\\n        versionRegexes: [/.*?android\\\\ ?([0-9]+)\\\\.([0-9]+).*/]\\n      },\\n      {\\n        name: 'OSX',\\n        search: checkContains('os x'),\\n        versionRegexes: [/.*?os\\\\ x\\\\ ?([0-9]+)_([0-9]+).*/]\\n      },\\n      {\\n        name: 'Linux',\\n        search: checkContains('linux'),\\n        versionRegexes: []\\n      },\\n      {\\n        name: 'Solaris',\\n        search: checkContains('sunos'),\\n        versionRegexes: []\\n      },\\n      {\\n        name: 'FreeBSD',\\n        search: checkContains('freebsd'),\\n        versionRegexes: []\\n      }\\n    ];\\n    var PlatformInfo = {\\n      browsers: constant(browsers),\\n      oses: constant(oses)\\n    };\\n\\n    var detect$2 = function (userAgent) {\\n      var browsers = PlatformInfo.browsers();\\n      var oses = PlatformInfo.oses();\\n      var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);\\n      var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\\n      var deviceType = DeviceType(os, browser, userAgent);\\n      return {\\n        browser: browser,\\n        os: os,\\n        deviceType: deviceType\\n      };\\n    };\\n    var PlatformDetection = { detect: detect$2 };\\n\\n    var detect$3 = cached(function () {\\n      var userAgent = domGlobals.navigator.userAgent;\\n      return PlatformDetection.detect(userAgent);\\n    });\\n    var PlatformDetection$1 = { detect: detect$3 };\\n\\n    var fromHtml = function (html, scope) {\\n      var doc = scope || domGlobals.document;\\n      var div = doc.createElement('div');\\n      div.innerHTML = html;\\n      if (!div.hasChildNodes() || div.childNodes.length > 1) {\\n        domGlobals.console.error('HTML does not have a single root node', html);\\n        throw new Error('HTML must have a single root node');\\n      }\\n      return fromDom(div.childNodes[0]);\\n    };\\n    var fromTag = function (tag, scope) {\\n      var doc = scope || domGlobals.document;\\n      var node = doc.createElement(tag);\\n      return fromDom(node);\\n    };\\n    var fromText = function (text, scope) {\\n      var doc = scope || domGlobals.document;\\n      var node = doc.createTextNode(text);\\n      return fromDom(node);\\n    };\\n    var fromDom = function (node) {\\n      if (node === null || node === undefined) {\\n        throw new Error('Node cannot be null or undefined');\\n      }\\n      return { dom: constant(node) };\\n    };\\n    var fromPoint = function (docElm, x, y) {\\n      var doc = docElm.dom();\\n      return Option.from(doc.elementFromPoint(x, y)).map(fromDom);\\n    };\\n    var Element = {\\n      fromHtml: fromHtml,\\n      fromTag: fromTag,\\n      fromText: fromText,\\n      fromDom: fromDom,\\n      fromPoint: fromPoint\\n    };\\n\\n    var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;\\n    var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;\\n    var COMMENT = domGlobals.Node.COMMENT_NODE;\\n    var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;\\n    var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;\\n    var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;\\n    var ELEMENT = domGlobals.Node.ELEMENT_NODE;\\n    var TEXT = domGlobals.Node.TEXT_NODE;\\n    var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;\\n    var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;\\n    var ENTITY = domGlobals.Node.ENTITY_NODE;\\n    var NOTATION = domGlobals.Node.NOTATION_NODE;\\n\\n    var name = function (element) {\\n      var r = element.dom().nodeName;\\n      return r.toLowerCase();\\n    };\\n    var type = function (element) {\\n      return element.dom().nodeType;\\n    };\\n    var isType$1 = function (t) {\\n      return function (element) {\\n        return type(element) === t;\\n      };\\n    };\\n    var isElement = isType$1(ELEMENT);\\n    var isText = isType$1(TEXT);\\n\\n    var keys = Object.keys;\\n    var hasOwnProperty$1 = Object.hasOwnProperty;\\n    var each$3 = function (obj, f) {\\n      var props = keys(obj);\\n      for (var k = 0, len = props.length; k < len; k++) {\\n        var i = props[k];\\n        var x = obj[i];\\n        f(x, i);\\n      }\\n    };\\n    var map$2 = function (obj, f) {\\n      return tupleMap(obj, function (x, i) {\\n        return {\\n          k: i,\\n          v: f(x, i)\\n        };\\n      });\\n    };\\n    var tupleMap = function (obj, f) {\\n      var r = {};\\n      each$3(obj, function (x, i) {\\n        var tuple = f(x, i);\\n        r[tuple.k] = tuple.v;\\n      });\\n      return r;\\n    };\\n    var bifilter = function (obj, pred) {\\n      var t = {};\\n      var f = {};\\n      each$3(obj, function (x, i) {\\n        var branch = pred(x, i) ? t : f;\\n        branch[i] = x;\\n      });\\n      return {\\n        t: t,\\n        f: f\\n      };\\n    };\\n    var has = function (obj, key) {\\n      return hasOwnProperty$1.call(obj, key);\\n    };\\n\\n    var isSupported = function (dom) {\\n      return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\\n    };\\n\\n    var inBody = function (element) {\\n      var dom = isText(element) ? element.dom().parentNode : element.dom();\\n      return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);\\n    };\\n\\n    var rawSet = function (dom, key, value) {\\n      if (isString(value) || isBoolean(value) || isNumber(value)) {\\n        dom.setAttribute(key, value + '');\\n      } else {\\n        domGlobals.console.error('Invalid call to Attr.set. Key ', key, ':: Value ', value, ':: Element ', dom);\\n        throw new Error('Attribute value was not simple');\\n      }\\n    };\\n    var set = function (element, key, value) {\\n      rawSet(element.dom(), key, value);\\n    };\\n    var setAll = function (element, attrs) {\\n      var dom = element.dom();\\n      each$3(attrs, function (v, k) {\\n        rawSet(dom, k, v);\\n      });\\n    };\\n    var get = function (element, key) {\\n      var v = element.dom().getAttribute(key);\\n      return v === null ? undefined : v;\\n    };\\n    var has$1 = function (element, key) {\\n      var dom = element.dom();\\n      return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;\\n    };\\n    var remove = function (element, key) {\\n      element.dom().removeAttribute(key);\\n    };\\n\\n    var internalSet = function (dom, property, value) {\\n      if (!isString(value)) {\\n        domGlobals.console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\\n        throw new Error('CSS value must be a string: ' + value);\\n      }\\n      if (isSupported(dom)) {\\n        dom.style.setProperty(property, value);\\n      }\\n    };\\n    var setAll$1 = function (element, css) {\\n      var dom = element.dom();\\n      each$3(css, function (v, k) {\\n        internalSet(dom, k, v);\\n      });\\n    };\\n    var get$1 = function (element, property) {\\n      var dom = element.dom();\\n      var styles = domGlobals.window.getComputedStyle(dom);\\n      var r = styles.getPropertyValue(property);\\n      var v = r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\\n      return v === null ? undefined : v;\\n    };\\n    var getUnsafeProperty = function (dom, property) {\\n      return isSupported(dom) ? dom.style.getPropertyValue(property) : '';\\n    };\\n    var getRaw = function (element, property) {\\n      var dom = element.dom();\\n      var raw = getUnsafeProperty(dom, property);\\n      return Option.from(raw).filter(function (r) {\\n        return r.length > 0;\\n      });\\n    };\\n    var getAllRaw = function (element) {\\n      var css = {};\\n      var dom = element.dom();\\n      if (isSupported(dom)) {\\n        for (var i = 0; i < dom.style.length; i++) {\\n          var ruleName = dom.style.item(i);\\n          css[ruleName] = dom.style[ruleName];\\n        }\\n      }\\n      return css;\\n    };\\n\\n    var Immutable = function () {\\n      var fields = [];\\n      for (var _i = 0; _i < arguments.length; _i++) {\\n        fields[_i] = arguments[_i];\\n      }\\n      return function () {\\n        var values = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n          values[_i] = arguments[_i];\\n        }\\n        if (fields.length !== values.length) {\\n          throw new Error('Wrong number of arguments to struct. Expected \\\"[' + fields.length + ']\\\", got ' + values.length + ' arguments');\\n        }\\n        var struct = {};\\n        each(fields, function (name, i) {\\n          struct[name] = constant(values[i]);\\n        });\\n        return struct;\\n      };\\n    };\\n\\n    var toArray$1 = function (target, f) {\\n      var r = [];\\n      var recurse = function (e) {\\n        r.push(e);\\n        return f(e);\\n      };\\n      var cur = f(target);\\n      do {\\n        cur = cur.bind(recurse);\\n      } while (cur.isSome());\\n      return r;\\n    };\\n    var Recurse = { toArray: toArray$1 };\\n\\n    var node = function () {\\n      var f = Global$1.getOrDie('Node');\\n      return f;\\n    };\\n    var compareDocumentPosition = function (a, b, match) {\\n      return (a.compareDocumentPosition(b) & match) !== 0;\\n    };\\n    var documentPositionPreceding = function (a, b) {\\n      return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);\\n    };\\n    var documentPositionContainedBy = function (a, b) {\\n      return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);\\n    };\\n    var Node = {\\n      documentPositionPreceding: documentPositionPreceding,\\n      documentPositionContainedBy: documentPositionContainedBy\\n    };\\n\\n    var ELEMENT$1 = ELEMENT;\\n    var DOCUMENT$1 = DOCUMENT;\\n    var is$1 = function (element, selector) {\\n      var dom = element.dom();\\n      if (dom.nodeType !== ELEMENT$1) {\\n        return false;\\n      } else {\\n        var elem = dom;\\n        if (elem.matches !== undefined) {\\n          return elem.matches(selector);\\n        } else if (elem.msMatchesSelector !== undefined) {\\n          return elem.msMatchesSelector(selector);\\n        } else if (elem.webkitMatchesSelector !== undefined) {\\n          return elem.webkitMatchesSelector(selector);\\n        } else if (elem.mozMatchesSelector !== undefined) {\\n          return elem.mozMatchesSelector(selector);\\n        } else {\\n          throw new Error('Browser lacks native selectors');\\n        }\\n      }\\n    };\\n    var bypassSelector = function (dom) {\\n      return dom.nodeType !== ELEMENT$1 && dom.nodeType !== DOCUMENT$1 || dom.childElementCount === 0;\\n    };\\n    var all = function (selector, scope) {\\n      var base = scope === undefined ? domGlobals.document : scope.dom();\\n      return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element.fromDom);\\n    };\\n    var one = function (selector, scope) {\\n      var base = scope === undefined ? domGlobals.document : scope.dom();\\n      return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element.fromDom);\\n    };\\n\\n    var eq = function (e1, e2) {\\n      return e1.dom() === e2.dom();\\n    };\\n    var regularContains = function (e1, e2) {\\n      var d1 = e1.dom();\\n      var d2 = e2.dom();\\n      return d1 === d2 ? false : d1.contains(d2);\\n    };\\n    var ieContains = function (e1, e2) {\\n      return Node.documentPositionContainedBy(e1.dom(), e2.dom());\\n    };\\n    var browser = PlatformDetection$1.detect().browser;\\n    var contains$3 = browser.isIE() ? ieContains : regularContains;\\n\\n    var owner = function (element) {\\n      return Element.fromDom(element.dom().ownerDocument);\\n    };\\n    var documentElement = function (element) {\\n      return Element.fromDom(element.dom().ownerDocument.documentElement);\\n    };\\n    var defaultView = function (element) {\\n      return Element.fromDom(element.dom().ownerDocument.defaultView);\\n    };\\n    var parent = function (element) {\\n      return Option.from(element.dom().parentNode).map(Element.fromDom);\\n    };\\n    var parents = function (element, isRoot) {\\n      var stop = isFunction(isRoot) ? isRoot : never;\\n      var dom = element.dom();\\n      var ret = [];\\n      while (dom.parentNode !== null && dom.parentNode !== undefined) {\\n        var rawParent = dom.parentNode;\\n        var p = Element.fromDom(rawParent);\\n        ret.push(p);\\n        if (stop(p) === true) {\\n          break;\\n        } else {\\n          dom = rawParent;\\n        }\\n      }\\n      return ret;\\n    };\\n    var prevSibling = function (element) {\\n      return Option.from(element.dom().previousSibling).map(Element.fromDom);\\n    };\\n    var nextSibling = function (element) {\\n      return Option.from(element.dom().nextSibling).map(Element.fromDom);\\n    };\\n    var prevSiblings = function (element) {\\n      return reverse(Recurse.toArray(element, prevSibling));\\n    };\\n    var nextSiblings = function (element) {\\n      return Recurse.toArray(element, nextSibling);\\n    };\\n    var children = function (element) {\\n      return map(element.dom().childNodes, Element.fromDom);\\n    };\\n    var child = function (element, index) {\\n      var cs = element.dom().childNodes;\\n      return Option.from(cs[index]).map(Element.fromDom);\\n    };\\n    var firstChild = function (element) {\\n      return child(element, 0);\\n    };\\n    var lastChild = function (element) {\\n      return child(element, element.dom().childNodes.length - 1);\\n    };\\n    var childNodesCount = function (element) {\\n      return element.dom().childNodes.length;\\n    };\\n    var spot = Immutable('element', 'offset');\\n\\n    var browser$1 = PlatformDetection$1.detect().browser;\\n    var firstElement = function (nodes) {\\n      return find(nodes, isElement);\\n    };\\n    var getTableCaptionDeltaY = function (elm) {\\n      if (browser$1.isFirefox() && name(elm) === 'table') {\\n        return firstElement(children(elm)).filter(function (elm) {\\n          return name(elm) === 'caption';\\n        }).bind(function (caption) {\\n          return firstElement(nextSiblings(caption)).map(function (body) {\\n            var bodyTop = body.dom().offsetTop;\\n            var captionTop = caption.dom().offsetTop;\\n            var captionHeight = caption.dom().offsetHeight;\\n            return bodyTop <= captionTop ? -captionHeight : 0;\\n          });\\n        }).getOr(0);\\n      } else {\\n        return 0;\\n      }\\n    };\\n    var getPos = function (body, elm, rootElm) {\\n      var x = 0, y = 0, offsetParent;\\n      var doc = body.ownerDocument;\\n      var pos;\\n      rootElm = rootElm ? rootElm : body;\\n      if (elm) {\\n        if (rootElm === body && elm.getBoundingClientRect && get$1(Element.fromDom(body), 'position') === 'static') {\\n          pos = elm.getBoundingClientRect();\\n          x = pos.left + (doc.documentElement.scrollLeft || body.scrollLeft) - doc.documentElement.clientLeft;\\n          y = pos.top + (doc.documentElement.scrollTop || body.scrollTop) - doc.documentElement.clientTop;\\n          return {\\n            x: x,\\n            y: y\\n          };\\n        }\\n        offsetParent = elm;\\n        while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType) {\\n          x += offsetParent.offsetLeft || 0;\\n          y += offsetParent.offsetTop || 0;\\n          offsetParent = offsetParent.offsetParent;\\n        }\\n        offsetParent = elm.parentNode;\\n        while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType) {\\n          x -= offsetParent.scrollLeft || 0;\\n          y -= offsetParent.scrollTop || 0;\\n          offsetParent = offsetParent.parentNode;\\n        }\\n        y += getTableCaptionDeltaY(Element.fromDom(elm));\\n      }\\n      return {\\n        x: x,\\n        y: y\\n      };\\n    };\\n    var Position = { getPos: getPos };\\n\\n    var exports$1 = {}, module$1 = { exports: exports$1 };\\n    (function (define, exports, module, require) {\\n      (function (f) {\\n        if (typeof exports === 'object' && typeof module !== 'undefined') {\\n          module.exports = f();\\n        } else if (typeof define === 'function' && define.amd) {\\n          define([], f);\\n        } else {\\n          var g;\\n          if (typeof window !== 'undefined') {\\n            g = window;\\n          } else if (typeof global !== 'undefined') {\\n            g = global;\\n          } else if (typeof self !== 'undefined') {\\n            g = self;\\n          } else {\\n            g = this;\\n          }\\n          g.EphoxContactWrapper = f();\\n        }\\n      }(function () {\\n        return function () {\\n          function r(e, n, t) {\\n            function o(i, f) {\\n              if (!n[i]) {\\n                if (!e[i]) {\\n                  var c = 'function' == typeof require && require;\\n                  if (!f && c)\\n                    return c(i, !0);\\n                  if (u)\\n                    return u(i, !0);\\n                  var a = new Error('Cannot find module \\\\'' + i + '\\\\'');\\n                  throw a.code = 'MODULE_NOT_FOUND', a;\\n                }\\n                var p = n[i] = { exports: {} };\\n                e[i][0].call(p.exports, function (r) {\\n                  var n = e[i][1][r];\\n                  return o(n || r);\\n                }, p, p.exports, r, e, n, t);\\n              }\\n              return n[i].exports;\\n            }\\n            for (var u = 'function' == typeof require && require, i = 0; i < t.length; i++)\\n              o(t[i]);\\n            return o;\\n          }\\n          return r;\\n        }()({\\n          1: [\\n            function (require, module, exports) {\\n              var process = module.exports = {};\\n              var cachedSetTimeout;\\n              var cachedClearTimeout;\\n              function defaultSetTimout() {\\n                throw new Error('setTimeout has not been defined');\\n              }\\n              function defaultClearTimeout() {\\n                throw new Error('clearTimeout has not been defined');\\n              }\\n              (function () {\\n                try {\\n                  if (typeof setTimeout === 'function') {\\n                    cachedSetTimeout = setTimeout;\\n                  } else {\\n                    cachedSetTimeout = defaultSetTimout;\\n                  }\\n                } catch (e) {\\n                  cachedSetTimeout = defaultSetTimout;\\n                }\\n                try {\\n                  if (typeof clearTimeout === 'function') {\\n                    cachedClearTimeout = clearTimeout;\\n                  } else {\\n                    cachedClearTimeout = defaultClearTimeout;\\n                  }\\n                } catch (e) {\\n                  cachedClearTimeout = defaultClearTimeout;\\n                }\\n              }());\\n              function runTimeout(fun) {\\n                if (cachedSetTimeout === setTimeout) {\\n                  return setTimeout(fun, 0);\\n                }\\n                if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\\n                  cachedSetTimeout = setTimeout;\\n                  return setTimeout(fun, 0);\\n                }\\n                try {\\n                  return cachedSetTimeout(fun, 0);\\n                } catch (e) {\\n                  try {\\n                    return cachedSetTimeout.call(null, fun, 0);\\n                  } catch (e) {\\n                    return cachedSetTimeout.call(this, fun, 0);\\n                  }\\n                }\\n              }\\n              function runClearTimeout(marker) {\\n                if (cachedClearTimeout === clearTimeout) {\\n                  return clearTimeout(marker);\\n                }\\n                if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\\n                  cachedClearTimeout = clearTimeout;\\n                  return clearTimeout(marker);\\n                }\\n                try {\\n                  return cachedClearTimeout(marker);\\n                } catch (e) {\\n                  try {\\n                    return cachedClearTimeout.call(null, marker);\\n                  } catch (e) {\\n                    return cachedClearTimeout.call(this, marker);\\n                  }\\n                }\\n              }\\n              var queue = [];\\n              var draining = false;\\n              var currentQueue;\\n              var queueIndex = -1;\\n              function cleanUpNextTick() {\\n                if (!draining || !currentQueue) {\\n                  return;\\n                }\\n                draining = false;\\n                if (currentQueue.length) {\\n                  queue = currentQueue.concat(queue);\\n                } else {\\n                  queueIndex = -1;\\n                }\\n                if (queue.length) {\\n                  drainQueue();\\n                }\\n              }\\n              function drainQueue() {\\n                if (draining) {\\n                  return;\\n                }\\n                var timeout = runTimeout(cleanUpNextTick);\\n                draining = true;\\n                var len = queue.length;\\n                while (len) {\\n                  currentQueue = queue;\\n                  queue = [];\\n                  while (++queueIndex < len) {\\n                    if (currentQueue) {\\n                      currentQueue[queueIndex].run();\\n                    }\\n                  }\\n                  queueIndex = -1;\\n                  len = queue.length;\\n                }\\n                currentQueue = null;\\n                draining = false;\\n                runClearTimeout(timeout);\\n              }\\n              process.nextTick = function (fun) {\\n                var args = new Array(arguments.length - 1);\\n                if (arguments.length > 1) {\\n                  for (var i = 1; i < arguments.length; i++) {\\n                    args[i - 1] = arguments[i];\\n                  }\\n                }\\n                queue.push(new Item(fun, args));\\n                if (queue.length === 1 && !draining) {\\n                  runTimeout(drainQueue);\\n                }\\n              };\\n              function Item(fun, array) {\\n                this.fun = fun;\\n                this.array = array;\\n              }\\n              Item.prototype.run = function () {\\n                this.fun.apply(null, this.array);\\n              };\\n              process.title = 'browser';\\n              process.browser = true;\\n              process.env = {};\\n              process.argv = [];\\n              process.version = '';\\n              process.versions = {};\\n              function noop() {\\n              }\\n              process.on = noop;\\n              process.addListener = noop;\\n              process.once = noop;\\n              process.off = noop;\\n              process.removeListener = noop;\\n              process.removeAllListeners = noop;\\n              process.emit = noop;\\n              process.prependListener = noop;\\n              process.prependOnceListener = noop;\\n              process.listeners = function (name) {\\n                return [];\\n              };\\n              process.binding = function (name) {\\n                throw new Error('process.binding is not supported');\\n              };\\n              process.cwd = function () {\\n                return '/';\\n              };\\n              process.chdir = function (dir) {\\n                throw new Error('process.chdir is not supported');\\n              };\\n              process.umask = function () {\\n                return 0;\\n              };\\n            },\\n            {}\\n          ],\\n          2: [\\n            function (require, module, exports) {\\n              (function (setImmediate) {\\n                (function (root) {\\n                  var setTimeoutFunc = setTimeout;\\n                  function noop() {\\n                  }\\n                  function bind(fn, thisArg) {\\n                    return function () {\\n                      fn.apply(thisArg, arguments);\\n                    };\\n                  }\\n                  function Promise(fn) {\\n                    if (typeof this !== 'object')\\n                      throw new TypeError('Promises must be constructed via new');\\n                    if (typeof fn !== 'function')\\n                      throw new TypeError('not a function');\\n                    this._state = 0;\\n                    this._handled = false;\\n                    this._value = undefined;\\n                    this._deferreds = [];\\n                    doResolve(fn, this);\\n                  }\\n                  function handle(self, deferred) {\\n                    while (self._state === 3) {\\n                      self = self._value;\\n                    }\\n                    if (self._state === 0) {\\n                      self._deferreds.push(deferred);\\n                      return;\\n                    }\\n                    self._handled = true;\\n                    Promise._immediateFn(function () {\\n                      var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\\n                      if (cb === null) {\\n                        (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\\n                        return;\\n                      }\\n                      var ret;\\n                      try {\\n                        ret = cb(self._value);\\n                      } catch (e) {\\n                        reject(deferred.promise, e);\\n                        return;\\n                      }\\n                      resolve(deferred.promise, ret);\\n                    });\\n                  }\\n                  function resolve(self, newValue) {\\n                    try {\\n                      if (newValue === self)\\n                        throw new TypeError('A promise cannot be resolved with itself.');\\n                      if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\\n                        var then = newValue.then;\\n                        if (newValue instanceof Promise) {\\n                          self._state = 3;\\n                          self._value = newValue;\\n                          finale(self);\\n                          return;\\n                        } else if (typeof then === 'function') {\\n                          doResolve(bind(then, newValue), self);\\n                          return;\\n                        }\\n                      }\\n                      self._state = 1;\\n                      self._value = newValue;\\n                      finale(self);\\n                    } catch (e) {\\n                      reject(self, e);\\n                    }\\n                  }\\n                  function reject(self, newValue) {\\n                    self._state = 2;\\n                    self._value = newValue;\\n                    finale(self);\\n                  }\\n                  function finale(self) {\\n                    if (self._state === 2 && self._deferreds.length === 0) {\\n                      Promise._immediateFn(function () {\\n                        if (!self._handled) {\\n                          Promise._unhandledRejectionFn(self._value);\\n                        }\\n                      });\\n                    }\\n                    for (var i = 0, len = self._deferreds.length; i < len; i++) {\\n                      handle(self, self._deferreds[i]);\\n                    }\\n                    self._deferreds = null;\\n                  }\\n                  function Handler(onFulfilled, onRejected, promise) {\\n                    this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\\n                    this.onRejected = typeof onRejected === 'function' ? onRejected : null;\\n                    this.promise = promise;\\n                  }\\n                  function doResolve(fn, self) {\\n                    var done = false;\\n                    try {\\n                      fn(function (value) {\\n                        if (done)\\n                          return;\\n                        done = true;\\n                        resolve(self, value);\\n                      }, function (reason) {\\n                        if (done)\\n                          return;\\n                        done = true;\\n                        reject(self, reason);\\n                      });\\n                    } catch (ex) {\\n                      if (done)\\n                        return;\\n                      done = true;\\n                      reject(self, ex);\\n                    }\\n                  }\\n                  Promise.prototype['catch'] = function (onRejected) {\\n                    return this.then(null, onRejected);\\n                  };\\n                  Promise.prototype.then = function (onFulfilled, onRejected) {\\n                    var prom = new this.constructor(noop);\\n                    handle(this, new Handler(onFulfilled, onRejected, prom));\\n                    return prom;\\n                  };\\n                  Promise.all = function (arr) {\\n                    var args = Array.prototype.slice.call(arr);\\n                    return new Promise(function (resolve, reject) {\\n                      if (args.length === 0)\\n                        return resolve([]);\\n                      var remaining = args.length;\\n                      function res(i, val) {\\n                        try {\\n                          if (val && (typeof val === 'object' || typeof val === 'function')) {\\n                            var then = val.then;\\n                            if (typeof then === 'function') {\\n                              then.call(val, function (val) {\\n                                res(i, val);\\n                              }, reject);\\n                              return;\\n                            }\\n                          }\\n                          args[i] = val;\\n                          if (--remaining === 0) {\\n                            resolve(args);\\n                          }\\n                        } catch (ex) {\\n                          reject(ex);\\n                        }\\n                      }\\n                      for (var i = 0; i < args.length; i++) {\\n                        res(i, args[i]);\\n                      }\\n                    });\\n                  };\\n                  Promise.resolve = function (value) {\\n                    if (value && typeof value === 'object' && value.constructor === Promise) {\\n                      return value;\\n                    }\\n                    return new Promise(function (resolve) {\\n                      resolve(value);\\n                    });\\n                  };\\n                  Promise.reject = function (value) {\\n                    return new Promise(function (resolve, reject) {\\n                      reject(value);\\n                    });\\n                  };\\n                  Promise.race = function (values) {\\n                    return new Promise(function (resolve, reject) {\\n                      for (var i = 0, len = values.length; i < len; i++) {\\n                        values[i].then(resolve, reject);\\n                      }\\n                    });\\n                  };\\n                  Promise._immediateFn = typeof setImmediate === 'function' ? function (fn) {\\n                    setImmediate(fn);\\n                  } : function (fn) {\\n                    setTimeoutFunc(fn, 0);\\n                  };\\n                  Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\\n                    if (typeof console !== 'undefined' && console) {\\n                      console.warn('Possible Unhandled Promise Rejection:', err);\\n                    }\\n                  };\\n                  Promise._setImmediateFn = function _setImmediateFn(fn) {\\n                    Promise._immediateFn = fn;\\n                  };\\n                  Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) {\\n                    Promise._unhandledRejectionFn = fn;\\n                  };\\n                  if (typeof module !== 'undefined' && module.exports) {\\n                    module.exports = Promise;\\n                  } else if (!root.Promise) {\\n                    root.Promise = Promise;\\n                  }\\n                }(this));\\n              }.call(this, require('timers').setImmediate));\\n            },\\n            { 'timers': 3 }\\n          ],\\n          3: [\\n            function (require, module, exports) {\\n              (function (setImmediate, clearImmediate) {\\n                var nextTick = require('process/browser.js').nextTick;\\n                var apply = Function.prototype.apply;\\n                var slice = Array.prototype.slice;\\n                var immediateIds = {};\\n                var nextImmediateId = 0;\\n                exports.setTimeout = function () {\\n                  return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\\n                };\\n                exports.setInterval = function () {\\n                  return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\\n                };\\n                exports.clearTimeout = exports.clearInterval = function (timeout) {\\n                  timeout.close();\\n                };\\n                function Timeout(id, clearFn) {\\n                  this._id = id;\\n                  this._clearFn = clearFn;\\n                }\\n                Timeout.prototype.unref = Timeout.prototype.ref = function () {\\n                };\\n                Timeout.prototype.close = function () {\\n                  this._clearFn.call(window, this._id);\\n                };\\n                exports.enroll = function (item, msecs) {\\n                  clearTimeout(item._idleTimeoutId);\\n                  item._idleTimeout = msecs;\\n                };\\n                exports.unenroll = function (item) {\\n                  clearTimeout(item._idleTimeoutId);\\n                  item._idleTimeout = -1;\\n                };\\n                exports._unrefActive = exports.active = function (item) {\\n                  clearTimeout(item._idleTimeoutId);\\n                  var msecs = item._idleTimeout;\\n                  if (msecs >= 0) {\\n                    item._idleTimeoutId = setTimeout(function onTimeout() {\\n                      if (item._onTimeout)\\n                        item._onTimeout();\\n                    }, msecs);\\n                  }\\n                };\\n                exports.setImmediate = typeof setImmediate === 'function' ? setImmediate : function (fn) {\\n                  var id = nextImmediateId++;\\n                  var args = arguments.length < 2 ? false : slice.call(arguments, 1);\\n                  immediateIds[id] = true;\\n                  nextTick(function onNextTick() {\\n                    if (immediateIds[id]) {\\n                      if (args) {\\n                        fn.apply(null, args);\\n                      } else {\\n                        fn.call(null);\\n                      }\\n                      exports.clearImmediate(id);\\n                    }\\n                  });\\n                  return id;\\n                };\\n                exports.clearImmediate = typeof clearImmediate === 'function' ? clearImmediate : function (id) {\\n                  delete immediateIds[id];\\n                };\\n              }.call(this, require('timers').setImmediate, require('timers').clearImmediate));\\n            },\\n            {\\n              'process/browser.js': 1,\\n              'timers': 3\\n            }\\n          ],\\n          4: [\\n            function (require, module, exports) {\\n              var promisePolyfill = require('promise-polyfill');\\n              var Global = function () {\\n                if (typeof window !== 'undefined') {\\n                  return window;\\n                } else {\\n                  return Function('return this;')();\\n                }\\n              }();\\n              module.exports = { boltExport: Global.Promise || promisePolyfill };\\n            },\\n            { 'promise-polyfill': 2 }\\n          ]\\n        }, {}, [4])(4);\\n      }));\\n    }(undefined, exports$1, module$1, undefined));\\n    var Promise = module$1.exports.boltExport;\\n\\n    var nu$3 = function (baseFn) {\\n      var data = Option.none();\\n      var callbacks = [];\\n      var map = function (f) {\\n        return nu$3(function (nCallback) {\\n          get(function (data) {\\n            nCallback(f(data));\\n          });\\n        });\\n      };\\n      var get = function (nCallback) {\\n        if (isReady()) {\\n          call(nCallback);\\n        } else {\\n          callbacks.push(nCallback);\\n        }\\n      };\\n      var set = function (x) {\\n        data = Option.some(x);\\n        run(callbacks);\\n        callbacks = [];\\n      };\\n      var isReady = function () {\\n        return data.isSome();\\n      };\\n      var run = function (cbs) {\\n        each(cbs, call);\\n      };\\n      var call = function (cb) {\\n        data.each(function (x) {\\n          domGlobals.setTimeout(function () {\\n            cb(x);\\n          }, 0);\\n        });\\n      };\\n      baseFn(set);\\n      return {\\n        get: get,\\n        map: map,\\n        isReady: isReady\\n      };\\n    };\\n    var pure = function (a) {\\n      return nu$3(function (callback) {\\n        callback(a);\\n      });\\n    };\\n    var LazyValue = {\\n      nu: nu$3,\\n      pure: pure\\n    };\\n\\n    var errorReporter = function (err) {\\n      domGlobals.setTimeout(function () {\\n        throw err;\\n      }, 0);\\n    };\\n    var make = function (run) {\\n      var get = function (callback) {\\n        run().then(callback, errorReporter);\\n      };\\n      var map = function (fab) {\\n        return make(function () {\\n          return run().then(fab);\\n        });\\n      };\\n      var bind = function (aFutureB) {\\n        return make(function () {\\n          return run().then(function (v) {\\n            return aFutureB(v).toPromise();\\n          });\\n        });\\n      };\\n      var anonBind = function (futureB) {\\n        return make(function () {\\n          return run().then(function () {\\n            return futureB.toPromise();\\n          });\\n        });\\n      };\\n      var toLazy = function () {\\n        return LazyValue.nu(get);\\n      };\\n      var toCached = function () {\\n        var cache = null;\\n        return make(function () {\\n          if (cache === null) {\\n            cache = run();\\n          }\\n          return cache;\\n        });\\n      };\\n      var toPromise = run;\\n      return {\\n        map: map,\\n        bind: bind,\\n        anonBind: anonBind,\\n        toLazy: toLazy,\\n        toCached: toCached,\\n        toPromise: toPromise,\\n        get: get\\n      };\\n    };\\n    var nu$4 = function (baseFn) {\\n      return make(function () {\\n        return new Promise(baseFn);\\n      });\\n    };\\n    var pure$1 = function (a) {\\n      return make(function () {\\n        return Promise.resolve(a);\\n      });\\n    };\\n    var Future = {\\n      nu: nu$4,\\n      pure: pure$1\\n    };\\n\\n    var par = function (asyncValues, nu) {\\n      return nu(function (callback) {\\n        var r = [];\\n        var count = 0;\\n        var cb = function (i) {\\n          return function (value) {\\n            r[i] = value;\\n            count++;\\n            if (count >= asyncValues.length) {\\n              callback(r);\\n            }\\n          };\\n        };\\n        if (asyncValues.length === 0) {\\n          callback([]);\\n        } else {\\n          each(asyncValues, function (asyncValue, i) {\\n            asyncValue.get(cb(i));\\n          });\\n        }\\n      });\\n    };\\n\\n    var par$1 = function (futures) {\\n      return par(futures, Future.nu);\\n    };\\n\\n    var value = function (o) {\\n      var is = function (v) {\\n        return o === v;\\n      };\\n      var or = function (opt) {\\n        return value(o);\\n      };\\n      var orThunk = function (f) {\\n        return value(o);\\n      };\\n      var map = function (f) {\\n        return value(f(o));\\n      };\\n      var mapError = function (f) {\\n        return value(o);\\n      };\\n      var each = function (f) {\\n        f(o);\\n      };\\n      var bind = function (f) {\\n        return f(o);\\n      };\\n      var fold = function (_, onValue) {\\n        return onValue(o);\\n      };\\n      var exists = function (f) {\\n        return f(o);\\n      };\\n      var forall = function (f) {\\n        return f(o);\\n      };\\n      var toOption = function () {\\n        return Option.some(o);\\n      };\\n      return {\\n        is: is,\\n        isValue: always,\\n        isError: never,\\n        getOr: constant(o),\\n        getOrThunk: constant(o),\\n        getOrDie: constant(o),\\n        or: or,\\n        orThunk: orThunk,\\n        fold: fold,\\n        map: map,\\n        mapError: mapError,\\n        each: each,\\n        bind: bind,\\n        exists: exists,\\n        forall: forall,\\n        toOption: toOption\\n      };\\n    };\\n    var error = function (message) {\\n      var getOrThunk = function (f) {\\n        return f();\\n      };\\n      var getOrDie = function () {\\n        return die(String(message))();\\n      };\\n      var or = function (opt) {\\n        return opt;\\n      };\\n      var orThunk = function (f) {\\n        return f();\\n      };\\n      var map = function (f) {\\n        return error(message);\\n      };\\n      var mapError = function (f) {\\n        return error(f(message));\\n      };\\n      var bind = function (f) {\\n        return error(message);\\n      };\\n      var fold = function (onError, _) {\\n        return onError(message);\\n      };\\n      return {\\n        is: never,\\n        isValue: never,\\n        isError: always,\\n        getOr: identity,\\n        getOrThunk: getOrThunk,\\n        getOrDie: getOrDie,\\n        or: or,\\n        orThunk: orThunk,\\n        fold: fold,\\n        map: map,\\n        mapError: mapError,\\n        each: noop,\\n        bind: bind,\\n        exists: never,\\n        forall: always,\\n        toOption: Option.none\\n      };\\n    };\\n    var fromOption = function (opt, err) {\\n      return opt.fold(function () {\\n        return error(err);\\n      }, value);\\n    };\\n    var Result = {\\n      value: value,\\n      error: error,\\n      fromOption: fromOption\\n    };\\n\\n    function StyleSheetLoader(document, settings) {\\n      if (settings === void 0) {\\n        settings = {};\\n      }\\n      var idCount = 0;\\n      var loadedStates = {};\\n      var maxLoadTime;\\n      maxLoadTime = settings.maxLoadTime || 5000;\\n      var appendToHead = function (node) {\\n        document.getElementsByTagName('head')[0].appendChild(node);\\n      };\\n      var load = function (url, loadedCallback, errorCallback) {\\n        var link, style, startTime, state;\\n        var passed = function () {\\n          var callbacks = state.passed;\\n          var i = callbacks.length;\\n          while (i--) {\\n            callbacks[i]();\\n          }\\n          state.status = 2;\\n          state.passed = [];\\n          state.failed = [];\\n        };\\n        var failed = function () {\\n          var callbacks = state.failed;\\n          var i = callbacks.length;\\n          while (i--) {\\n            callbacks[i]();\\n          }\\n          state.status = 3;\\n          state.passed = [];\\n          state.failed = [];\\n        };\\n        var isOldWebKit = function () {\\n          var webKitChunks = domGlobals.navigator.userAgent.match(/WebKit\\\\/(\\\\d*)/);\\n          return !!(webKitChunks && parseInt(webKitChunks[1], 10) < 536);\\n        };\\n        var wait = function (testCallback, waitCallback) {\\n          if (!testCallback()) {\\n            if (new Date().getTime() - startTime < maxLoadTime) {\\n              Delay.setTimeout(waitCallback);\\n            } else {\\n              failed();\\n            }\\n          }\\n        };\\n        var waitForWebKitLinkLoaded = function () {\\n          wait(function () {\\n            var styleSheets = document.styleSheets;\\n            var styleSheet, i = styleSheets.length, owner;\\n            while (i--) {\\n              styleSheet = styleSheets[i];\\n              owner = styleSheet.ownerNode ? styleSheet.ownerNode : styleSheet.owningElement;\\n              if (owner && owner.id === link.id) {\\n                passed();\\n                return true;\\n              }\\n            }\\n          }, waitForWebKitLinkLoaded);\\n        };\\n        var waitForGeckoLinkLoaded = function () {\\n          wait(function () {\\n            try {\\n              var cssRules = style.sheet.cssRules;\\n              passed();\\n              return !!cssRules;\\n            } catch (ex) {\\n            }\\n          }, waitForGeckoLinkLoaded);\\n        };\\n        url = Tools._addCacheSuffix(url);\\n        if (!loadedStates[url]) {\\n          state = {\\n            passed: [],\\n            failed: []\\n          };\\n          loadedStates[url] = state;\\n        } else {\\n          state = loadedStates[url];\\n        }\\n        if (loadedCallback) {\\n          state.passed.push(loadedCallback);\\n        }\\n        if (errorCallback) {\\n          state.failed.push(errorCallback);\\n        }\\n        if (state.status === 1) {\\n          return;\\n        }\\n        if (state.status === 2) {\\n          passed();\\n          return;\\n        }\\n        if (state.status === 3) {\\n          failed();\\n          return;\\n        }\\n        state.status = 1;\\n        link = document.createElement('link');\\n        link.rel = 'stylesheet';\\n        link.type = 'text/css';\\n        link.id = 'u' + idCount++;\\n        link.async = false;\\n        link.defer = false;\\n        startTime = new Date().getTime();\\n        if (settings.contentCssCors) {\\n          link.crossOrigin = 'anonymous';\\n        }\\n        if ('onload' in link && !isOldWebKit()) {\\n          link.onload = waitForWebKitLinkLoaded;\\n          link.onerror = failed;\\n        } else {\\n          if (domGlobals.navigator.userAgent.indexOf('Firefox') > 0) {\\n            style = document.createElement('style');\\n            style.textContent = '@import \\\"' + url + '\\\"';\\n            waitForGeckoLinkLoaded();\\n            appendToHead(style);\\n            return;\\n          }\\n          waitForWebKitLinkLoaded();\\n        }\\n        appendToHead(link);\\n        link.href = url;\\n      };\\n      var loadF = function (url) {\\n        return Future.nu(function (resolve) {\\n          load(url, compose(resolve, constant(Result.value(url))), compose(resolve, constant(Result.error(url))));\\n        });\\n      };\\n      var unbox = function (result) {\\n        return result.fold(identity, identity);\\n      };\\n      var loadAll = function (urls, success, failure) {\\n        par$1(map(urls, loadF)).get(function (result) {\\n          var parts = partition(result, function (r) {\\n            return r.isValue();\\n          });\\n          if (parts.fail.length > 0) {\\n            failure(parts.fail.map(unbox));\\n          } else {\\n            success(parts.pass.map(unbox));\\n          }\\n        });\\n      };\\n      return {\\n        load: load,\\n        loadAll: loadAll\\n      };\\n    }\\n\\n    function TreeWalker (startNode, rootNode) {\\n      var node = startNode;\\n      var findSibling = function (node, startName, siblingName, shallow) {\\n        var sibling, parent;\\n        if (node) {\\n          if (!shallow && node[startName]) {\\n            return node[startName];\\n          }\\n          if (node !== rootNode) {\\n            sibling = node[siblingName];\\n            if (sibling) {\\n              return sibling;\\n            }\\n            for (parent = node.parentNode; parent && parent !== rootNode; parent = parent.parentNode) {\\n              sibling = parent[siblingName];\\n              if (sibling) {\\n                return sibling;\\n              }\\n            }\\n          }\\n        }\\n      };\\n      var findPreviousNode = function (node, startName, siblingName, shallow) {\\n        var sibling, parent, child;\\n        if (node) {\\n          sibling = node[siblingName];\\n          if (rootNode && sibling === rootNode) {\\n            return;\\n          }\\n          if (sibling) {\\n            if (!shallow) {\\n              for (child = sibling[startName]; child; child = child[startName]) {\\n                if (!child[startName]) {\\n                  return child;\\n                }\\n              }\\n            }\\n            return sibling;\\n          }\\n          parent = node.parentNode;\\n          if (parent && parent !== rootNode) {\\n            return parent;\\n          }\\n        }\\n      };\\n      this.current = function () {\\n        return node;\\n      };\\n      this.next = function (shallow) {\\n        node = findSibling(node, 'firstChild', 'nextSibling', shallow);\\n        return node;\\n      };\\n      this.prev = function (shallow) {\\n        node = findSibling(node, 'lastChild', 'previousSibling', shallow);\\n        return node;\\n      };\\n      this.prev2 = function (shallow) {\\n        node = findPreviousNode(node, 'lastChild', 'previousSibling', shallow);\\n        return node;\\n      };\\n    }\\n\\n    var blocks = [\\n      'article',\\n      'aside',\\n      'details',\\n      'div',\\n      'dt',\\n      'figcaption',\\n      'footer',\\n      'form',\\n      'fieldset',\\n      'header',\\n      'hgroup',\\n      'html',\\n      'main',\\n      'nav',\\n      'section',\\n      'summary',\\n      'body',\\n      'p',\\n      'dl',\\n      'multicol',\\n      'dd',\\n      'figure',\\n      'address',\\n      'center',\\n      'blockquote',\\n      'h1',\\n      'h2',\\n      'h3',\\n      'h4',\\n      'h5',\\n      'h6',\\n      'listing',\\n      'xmp',\\n      'pre',\\n      'plaintext',\\n      'menu',\\n      'dir',\\n      'ul',\\n      'ol',\\n      'li',\\n      'hr',\\n      'table',\\n      'tbody',\\n      'thead',\\n      'tfoot',\\n      'th',\\n      'tr',\\n      'td',\\n      'caption'\\n    ];\\n    var voids = [\\n      'area',\\n      'base',\\n      'basefont',\\n      'br',\\n      'col',\\n      'frame',\\n      'hr',\\n      'img',\\n      'input',\\n      'isindex',\\n      'link',\\n      'meta',\\n      'param',\\n      'embed',\\n      'source',\\n      'wbr',\\n      'track'\\n    ];\\n    var tableCells = [\\n      'td',\\n      'th'\\n    ];\\n    var tableSections = [\\n      'thead',\\n      'tbody',\\n      'tfoot'\\n    ];\\n    var textBlocks = [\\n      'h1',\\n      'h2',\\n      'h3',\\n      'h4',\\n      'h5',\\n      'h6',\\n      'p',\\n      'div',\\n      'address',\\n      'pre',\\n      'form',\\n      'blockquote',\\n      'center',\\n      'dir',\\n      'fieldset',\\n      'header',\\n      'footer',\\n      'article',\\n      'section',\\n      'hgroup',\\n      'aside',\\n      'nav',\\n      'figure'\\n    ];\\n    var headings = [\\n      'h1',\\n      'h2',\\n      'h3',\\n      'h4',\\n      'h5',\\n      'h6'\\n    ];\\n    var listItems = [\\n      'li',\\n      'dd',\\n      'dt'\\n    ];\\n    var lists = [\\n      'ul',\\n      'ol',\\n      'dl'\\n    ];\\n    var wsElements = [\\n      'pre',\\n      'script',\\n      'textarea',\\n      'style'\\n    ];\\n    var lazyLookup = function (items) {\\n      var lookup;\\n      return function (node) {\\n        lookup = lookup ? lookup : mapToObject(items, constant(true));\\n        return lookup.hasOwnProperty(name(node));\\n      };\\n    };\\n    var isHeading = lazyLookup(headings);\\n    var isBlock = lazyLookup(blocks);\\n    var isInline = function (node) {\\n      return isElement(node) && !isBlock(node);\\n    };\\n    var isBr = function (node) {\\n      return isElement(node) && name(node) === 'br';\\n    };\\n    var isTextBlock = lazyLookup(textBlocks);\\n    var isList = lazyLookup(lists);\\n    var isListItem = lazyLookup(listItems);\\n    var isVoid = lazyLookup(voids);\\n    var isTableSection = lazyLookup(tableSections);\\n    var isTableCell = lazyLookup(tableCells);\\n    var isWsPreserveElement = lazyLookup(wsElements);\\n\\n    var isNodeType = function (type) {\\n      return function (node) {\\n        return !!node && node.nodeType === type;\\n      };\\n    };\\n    var isRestrictedNode = function (node) {\\n      return !!node && !Object.getPrototypeOf(node);\\n    };\\n    var isElement$1 = isNodeType(1);\\n    var matchNodeNames = function (names) {\\n      var items = names.toLowerCase().split(' ');\\n      return function (node) {\\n        var i, name;\\n        if (node && node.nodeType) {\\n          name = node.nodeName.toLowerCase();\\n          for (i = 0; i < items.length; i++) {\\n            if (name === items[i]) {\\n              return true;\\n            }\\n          }\\n        }\\n        return false;\\n      };\\n    };\\n    var matchStyleValues = function (name, values) {\\n      var items = values.toLowerCase().split(' ');\\n      return function (node) {\\n        var i, cssValue;\\n        if (isElement$1(node)) {\\n          for (i = 0; i < items.length; i++) {\\n            var computed = node.ownerDocument.defaultView.getComputedStyle(node, null);\\n            cssValue = computed ? computed.getPropertyValue(name) : null;\\n            if (cssValue === items[i]) {\\n              return true;\\n            }\\n          }\\n        }\\n        return false;\\n      };\\n    };\\n    var hasPropValue = function (propName, propValue) {\\n      return function (node) {\\n        return isElement$1(node) && node[propName] === propValue;\\n      };\\n    };\\n    var hasAttribute = function (attrName, attrValue) {\\n      return function (node) {\\n        return isElement$1(node) && node.hasAttribute(attrName);\\n      };\\n    };\\n    var hasAttributeValue = function (attrName, attrValue) {\\n      return function (node) {\\n        return isElement$1(node) && node.getAttribute(attrName) === attrValue;\\n      };\\n    };\\n    var isBogus = function (node) {\\n      return isElement$1(node) && node.hasAttribute('data-mce-bogus');\\n    };\\n    var isBogusAll = function (node) {\\n      return isElement$1(node) && node.getAttribute('data-mce-bogus') === 'all';\\n    };\\n    var isTable = function (node) {\\n      return isElement$1(node) && node.tagName === 'TABLE';\\n    };\\n    var hasContentEditableState = function (value) {\\n      return function (node) {\\n        if (isElement$1(node)) {\\n          if (node.contentEditable === value) {\\n            return true;\\n          }\\n          if (node.getAttribute('data-mce-contenteditable') === value) {\\n            return true;\\n          }\\n        }\\n        return false;\\n      };\\n    };\\n    var isText$1 = isNodeType(3);\\n    var isComment = isNodeType(8);\\n    var isDocument = isNodeType(9);\\n    var isDocumentFragment = isNodeType(11);\\n    var isBr$1 = matchNodeNames('br');\\n    var isContentEditableTrue = hasContentEditableState('true');\\n    var isContentEditableFalse = hasContentEditableState('false');\\n    var NodeType = {\\n      isText: isText$1,\\n      isElement: isElement$1,\\n      isComment: isComment,\\n      isDocument: isDocument,\\n      isDocumentFragment: isDocumentFragment,\\n      isBr: isBr$1,\\n      isContentEditableTrue: isContentEditableTrue,\\n      isContentEditableFalse: isContentEditableFalse,\\n      isRestrictedNode: isRestrictedNode,\\n      matchNodeNames: matchNodeNames,\\n      hasPropValue: hasPropValue,\\n      hasAttribute: hasAttribute,\\n      hasAttributeValue: hasAttributeValue,\\n      matchStyleValues: matchStyleValues,\\n      isBogus: isBogus,\\n      isBogusAll: isBogusAll,\\n      isTable: isTable\\n    };\\n\\n    var surroundedBySpans = function (node) {\\n      var previousIsSpan = node.previousSibling && node.previousSibling.nodeName === 'SPAN';\\n      var nextIsSpan = node.nextSibling && node.nextSibling.nodeName === 'SPAN';\\n      return previousIsSpan && nextIsSpan;\\n    };\\n    var isBookmarkNode = function (node) {\\n      return node && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';\\n    };\\n    var trimNode = function (dom, node) {\\n      var i, children = node.childNodes;\\n      if (NodeType.isElement(node) && isBookmarkNode(node)) {\\n        return;\\n      }\\n      for (i = children.length - 1; i >= 0; i--) {\\n        trimNode(dom, children[i]);\\n      }\\n      if (NodeType.isDocument(node) === false) {\\n        if (NodeType.isText(node) && node.nodeValue.length > 0) {\\n          var trimmedLength = Tools.trim(node.nodeValue).length;\\n          if (dom.isBlock(node.parentNode) || trimmedLength > 0) {\\n            return;\\n          }\\n          if (trimmedLength === 0 && surroundedBySpans(node)) {\\n            return;\\n          }\\n        } else if (NodeType.isElement(node)) {\\n          children = node.childNodes;\\n          if (children.length === 1 && isBookmarkNode(children[0])) {\\n            node.parentNode.insertBefore(children[0], node);\\n          }\\n          if (children.length || isVoid(Element.fromDom(node))) {\\n            return;\\n          }\\n        }\\n        dom.remove(node);\\n      }\\n      return node;\\n    };\\n    var TrimNode = { trimNode: trimNode };\\n\\n    var makeMap$1 = Tools.makeMap;\\n    var namedEntities, baseEntities, reverseEntities;\\n    var attrsCharsRegExp = /[&<>\\\\\\\"\\\\u0060\\\\u007E-\\\\uD7FF\\\\uE000-\\\\uFFEF]|[\\\\uD800-\\\\uDBFF][\\\\uDC00-\\\\uDFFF]/g;\\n    var textCharsRegExp = /[<>&\\\\u007E-\\\\uD7FF\\\\uE000-\\\\uFFEF]|[\\\\uD800-\\\\uDBFF][\\\\uDC00-\\\\uDFFF]/g;\\n    var rawCharsRegExp = /[<>&\\\\\\\"\\\\']/g;\\n    var entityRegExp = /&#([a-z0-9]+);?|&([a-z0-9]+);/gi;\\n    var asciiMap = {\\n      128: '\\\\u20AC',\\n      130: '\\\\u201A',\\n      131: '\\\\u0192',\\n      132: '\\\\u201E',\\n      133: '\\\\u2026',\\n      134: '\\\\u2020',\\n      135: '\\\\u2021',\\n      136: '\\\\u02c6',\\n      137: '\\\\u2030',\\n      138: '\\\\u0160',\\n      139: '\\\\u2039',\\n      140: '\\\\u0152',\\n      142: '\\\\u017d',\\n      145: '\\\\u2018',\\n      146: '\\\\u2019',\\n      147: '\\\\u201C',\\n      148: '\\\\u201D',\\n      149: '\\\\u2022',\\n      150: '\\\\u2013',\\n      151: '\\\\u2014',\\n      152: '\\\\u02DC',\\n      153: '\\\\u2122',\\n      154: '\\\\u0161',\\n      155: '\\\\u203A',\\n      156: '\\\\u0153',\\n      158: '\\\\u017e',\\n      159: '\\\\u0178'\\n    };\\n    baseEntities = {\\n      '\\\"': '&quot;',\\n      '\\\\'': '&#39;',\\n      '<': '&lt;',\\n      '>': '&gt;',\\n      '&': '&amp;',\\n      '`': '&#96;'\\n    };\\n    reverseEntities = {\\n      '&lt;': '<',\\n      '&gt;': '>',\\n      '&amp;': '&',\\n      '&quot;': '\\\"',\\n      '&apos;': '\\\\''\\n    };\\n    var nativeDecode = function (text) {\\n      var elm;\\n      elm = Element.fromTag('div').dom();\\n      elm.innerHTML = text;\\n      return elm.textContent || elm.innerText || text;\\n    };\\n    var buildEntitiesLookup = function (items, radix) {\\n      var i, chr, entity;\\n      var lookup = {};\\n      if (items) {\\n        items = items.split(',');\\n        radix = radix || 10;\\n        for (i = 0; i < items.length; i += 2) {\\n          chr = String.fromCharCode(parseInt(items[i], radix));\\n          if (!baseEntities[chr]) {\\n            entity = '&' + items[i + 1] + ';';\\n            lookup[chr] = entity;\\n            lookup[entity] = chr;\\n          }\\n        }\\n        return lookup;\\n      }\\n    };\\n    namedEntities = buildEntitiesLookup('50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,' + '5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,' + '5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,' + '5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,' + '68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,' + '6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,' + '6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,' + '75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,' + '7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,' + '7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,' + 'sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,' + 'st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,' + 't9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,' + 'tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,' + 'u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,' + '81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,' + '8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,' + '8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,' + '8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,' + '8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,' + 'nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,' + 'rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,' + 'Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,' + '80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,' + '811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro', 32);\\n    var encodeRaw = function (text, attr) {\\n      return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\\n        return baseEntities[chr] || chr;\\n      });\\n    };\\n    var encodeAllRaw = function (text) {\\n      return ('' + text).replace(rawCharsRegExp, function (chr) {\\n        return baseEntities[chr] || chr;\\n      });\\n    };\\n    var encodeNumeric = function (text, attr) {\\n      return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\\n        if (chr.length > 1) {\\n          return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';';\\n        }\\n        return baseEntities[chr] || '&#' + chr.charCodeAt(0) + ';';\\n      });\\n    };\\n    var encodeNamed = function (text, attr, entities) {\\n      entities = entities || namedEntities;\\n      return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\\n        return baseEntities[chr] || entities[chr] || chr;\\n      });\\n    };\\n    var getEncodeFunc = function (name, entities) {\\n      var entitiesMap = buildEntitiesLookup(entities) || namedEntities;\\n      var encodeNamedAndNumeric = function (text, attr) {\\n        return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\\n          if (baseEntities[chr] !== undefined) {\\n            return baseEntities[chr];\\n          }\\n          if (entitiesMap[chr] !== undefined) {\\n            return entitiesMap[chr];\\n          }\\n          if (chr.length > 1) {\\n            return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';';\\n          }\\n          return '&#' + chr.charCodeAt(0) + ';';\\n        });\\n      };\\n      var encodeCustomNamed = function (text, attr) {\\n        return encodeNamed(text, attr, entitiesMap);\\n      };\\n      var nameMap = makeMap$1(name.replace(/\\\\+/g, ','));\\n      if (nameMap.named && nameMap.numeric) {\\n        return encodeNamedAndNumeric;\\n      }\\n      if (nameMap.named) {\\n        if (entities) {\\n          return encodeCustomNamed;\\n        }\\n        return encodeNamed;\\n      }\\n      if (nameMap.numeric) {\\n        return encodeNumeric;\\n      }\\n      return encodeRaw;\\n    };\\n    var decode = function (text) {\\n      return text.replace(entityRegExp, function (all, numeric) {\\n        if (numeric) {\\n          if (numeric.charAt(0).toLowerCase() === 'x') {\\n            numeric = parseInt(numeric.substr(1), 16);\\n          } else {\\n            numeric = parseInt(numeric, 10);\\n          }\\n          if (numeric > 65535) {\\n            numeric -= 65536;\\n            return String.fromCharCode(55296 + (numeric >> 10), 56320 + (numeric & 1023));\\n          }\\n          return asciiMap[numeric] || String.fromCharCode(numeric);\\n        }\\n        return reverseEntities[all] || namedEntities[all] || nativeDecode(all);\\n      });\\n    };\\n    var Entities = {\\n      encodeRaw: encodeRaw,\\n      encodeAllRaw: encodeAllRaw,\\n      encodeNumeric: encodeNumeric,\\n      encodeNamed: encodeNamed,\\n      getEncodeFunc: getEncodeFunc,\\n      decode: decode\\n    };\\n\\n    var mapCache = {}, dummyObj = {};\\n    var makeMap$2 = Tools.makeMap, each$4 = Tools.each, extend$1 = Tools.extend, explode$1 = Tools.explode, inArray$1 = Tools.inArray;\\n    var split = function (items, delim) {\\n      items = Tools.trim(items);\\n      return items ? items.split(delim || ' ') : [];\\n    };\\n    var compileSchema = function (type) {\\n      var schema = {};\\n      var globalAttributes, blockContent;\\n      var phrasingContent, flowContent, html4BlockContent, html4PhrasingContent;\\n      var add = function (name, attributes, children) {\\n        var ni, attributesOrder, element;\\n        var arrayToMap = function (array, obj) {\\n          var map = {};\\n          var i, l;\\n          for (i = 0, l = array.length; i < l; i++) {\\n            map[array[i]] = obj || {};\\n          }\\n          return map;\\n        };\\n        children = children || [];\\n        attributes = attributes || '';\\n        if (typeof children === 'string') {\\n          children = split(children);\\n        }\\n        name = split(name);\\n        ni = name.length;\\n        while (ni--) {\\n          attributesOrder = split([\\n            globalAttributes,\\n            attributes\\n          ].join(' '));\\n          element = {\\n            attributes: arrayToMap(attributesOrder),\\n            attributesOrder: attributesOrder,\\n            children: arrayToMap(children, dummyObj)\\n          };\\n          schema[name[ni]] = element;\\n        }\\n      };\\n      var addAttrs = function (name, attributes) {\\n        var ni, schemaItem, i, l;\\n        name = split(name);\\n        ni = name.length;\\n        attributes = split(attributes);\\n        while (ni--) {\\n          schemaItem = schema[name[ni]];\\n          for (i = 0, l = attributes.length; i < l; i++) {\\n            schemaItem.attributes[attributes[i]] = {};\\n            schemaItem.attributesOrder.push(attributes[i]);\\n          }\\n        }\\n      };\\n      if (mapCache[type]) {\\n        return mapCache[type];\\n      }\\n      globalAttributes = 'id accesskey class dir lang style tabindex title role';\\n      blockContent = 'address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul';\\n      phrasingContent = 'a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd ' + 'label map noscript object q s samp script select small span strong sub sup ' + 'textarea u var #text #comment';\\n      if (type !== 'html4') {\\n        globalAttributes += ' contenteditable contextmenu draggable dropzone ' + 'hidden spellcheck translate';\\n        blockContent += ' article aside details dialog figure main header footer hgroup section nav';\\n        phrasingContent += ' audio canvas command datalist mark meter output picture ' + 'progress time wbr video ruby bdi keygen';\\n      }\\n      if (type !== 'html5-strict') {\\n        globalAttributes += ' xml:lang';\\n        html4PhrasingContent = 'acronym applet basefont big font strike tt';\\n        phrasingContent = [\\n          phrasingContent,\\n          html4PhrasingContent\\n        ].join(' ');\\n        each$4(split(html4PhrasingContent), function (name) {\\n          add(name, '', phrasingContent);\\n        });\\n        html4BlockContent = 'center dir isindex noframes';\\n        blockContent = [\\n          blockContent,\\n          html4BlockContent\\n        ].join(' ');\\n        flowContent = [\\n          blockContent,\\n          phrasingContent\\n        ].join(' ');\\n        each$4(split(html4BlockContent), function (name) {\\n          add(name, '', flowContent);\\n        });\\n      }\\n      flowContent = flowContent || [\\n        blockContent,\\n        phrasingContent\\n      ].join(' ');\\n      add('html', 'manifest', 'head body');\\n      add('head', '', 'base command link meta noscript script style title');\\n      add('title hr noscript br');\\n      add('base', 'href target');\\n      add('link', 'href rel media hreflang type sizes hreflang');\\n      add('meta', 'name http-equiv content charset');\\n      add('style', 'media type scoped');\\n      add('script', 'src async defer type charset');\\n      add('body', 'onafterprint onbeforeprint onbeforeunload onblur onerror onfocus ' + 'onhashchange onload onmessage onoffline ononline onpagehide onpageshow ' + 'onpopstate onresize onscroll onstorage onunload', flowContent);\\n      add('address dt dd div caption', '', flowContent);\\n      add('h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn', '', phrasingContent);\\n      add('blockquote', 'cite', flowContent);\\n      add('ol', 'reversed start type', 'li');\\n      add('ul', '', 'li');\\n      add('li', 'value', flowContent);\\n      add('dl', '', 'dt dd');\\n      add('a', 'href target rel media hreflang type', phrasingContent);\\n      add('q', 'cite', phrasingContent);\\n      add('ins del', 'cite datetime', flowContent);\\n      add('img', 'src sizes srcset alt usemap ismap width height');\\n      add('iframe', 'src name width height', flowContent);\\n      add('embed', 'src type width height');\\n      add('object', 'data type typemustmatch name usemap form width height', [\\n        flowContent,\\n        'param'\\n      ].join(' '));\\n      add('param', 'name value');\\n      add('map', 'name', [\\n        flowContent,\\n        'area'\\n      ].join(' '));\\n      add('area', 'alt coords shape href target rel media hreflang type');\\n      add('table', 'border', 'caption colgroup thead tfoot tbody tr' + (type === 'html4' ? ' col' : ''));\\n      add('colgroup', 'span', 'col');\\n      add('col', 'span');\\n      add('tbody thead tfoot', '', 'tr');\\n      add('tr', '', 'td th');\\n      add('td', 'colspan rowspan headers', flowContent);\\n      add('th', 'colspan rowspan headers scope abbr', flowContent);\\n      add('form', 'accept-charset action autocomplete enctype method name novalidate target', flowContent);\\n      add('fieldset', 'disabled form name', [\\n        flowContent,\\n        'legend'\\n      ].join(' '));\\n      add('label', 'form for', phrasingContent);\\n      add('input', 'accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate ' + 'formtarget height list max maxlength min multiple name pattern readonly required size src step type value width');\\n      add('button', 'disabled form formaction formenctype formmethod formnovalidate formtarget name type value', type === 'html4' ? flowContent : phrasingContent);\\n      add('select', 'disabled form multiple name required size', 'option optgroup');\\n      add('optgroup', 'disabled label', 'option');\\n      add('option', 'disabled label selected value');\\n      add('textarea', 'cols dirname disabled form maxlength name readonly required rows wrap');\\n      add('menu', 'type label', [\\n        flowContent,\\n        'li'\\n      ].join(' '));\\n      add('noscript', '', flowContent);\\n      if (type !== 'html4') {\\n        add('wbr');\\n        add('ruby', '', [\\n          phrasingContent,\\n          'rt rp'\\n        ].join(' '));\\n        add('figcaption', '', flowContent);\\n        add('mark rt rp summary bdi', '', phrasingContent);\\n        add('canvas', 'width height', flowContent);\\n        add('video', 'src crossorigin poster preload autoplay mediagroup loop ' + 'muted controls width height buffered', [\\n          flowContent,\\n          'track source'\\n        ].join(' '));\\n        add('audio', 'src crossorigin preload autoplay mediagroup loop muted controls ' + 'buffered volume', [\\n          flowContent,\\n          'track source'\\n        ].join(' '));\\n        add('picture', '', 'img source');\\n        add('source', 'src srcset type media sizes');\\n        add('track', 'kind src srclang label default');\\n        add('datalist', '', [\\n          phrasingContent,\\n          'option'\\n        ].join(' '));\\n        add('article section nav aside main header footer', '', flowContent);\\n        add('hgroup', '', 'h1 h2 h3 h4 h5 h6');\\n        add('figure', '', [\\n          flowContent,\\n          'figcaption'\\n        ].join(' '));\\n        add('time', 'datetime', phrasingContent);\\n        add('dialog', 'open', flowContent);\\n        add('command', 'type label icon disabled checked radiogroup command');\\n        add('output', 'for form name', phrasingContent);\\n        add('progress', 'value max', phrasingContent);\\n        add('meter', 'value min max low high optimum', phrasingContent);\\n        add('details', 'open', [\\n          flowContent,\\n          'summary'\\n        ].join(' '));\\n        add('keygen', 'autofocus challenge disabled form keytype name');\\n      }\\n      if (type !== 'html5-strict') {\\n        addAttrs('script', 'language xml:space');\\n        addAttrs('style', 'xml:space');\\n        addAttrs('object', 'declare classid code codebase codetype archive standby align border hspace vspace');\\n        addAttrs('embed', 'align name hspace vspace');\\n        addAttrs('param', 'valuetype type');\\n        addAttrs('a', 'charset name rev shape coords');\\n        addAttrs('br', 'clear');\\n        addAttrs('applet', 'codebase archive code object alt name width height align hspace vspace');\\n        addAttrs('img', 'name longdesc align border hspace vspace');\\n        addAttrs('iframe', 'longdesc frameborder marginwidth marginheight scrolling align');\\n        addAttrs('font basefont', 'size color face');\\n        addAttrs('input', 'usemap align');\\n        addAttrs('select', 'onchange');\\n        addAttrs('textarea');\\n        addAttrs('h1 h2 h3 h4 h5 h6 div p legend caption', 'align');\\n        addAttrs('ul', 'type compact');\\n        addAttrs('li', 'type');\\n        addAttrs('ol dl menu dir', 'compact');\\n        addAttrs('pre', 'width xml:space');\\n        addAttrs('hr', 'align noshade size width');\\n        addAttrs('isindex', 'prompt');\\n        addAttrs('table', 'summary width frame rules cellspacing cellpadding align bgcolor');\\n        addAttrs('col', 'width align char charoff valign');\\n        addAttrs('colgroup', 'width align char charoff valign');\\n        addAttrs('thead', 'align char charoff valign');\\n        addAttrs('tr', 'align char charoff valign bgcolor');\\n        addAttrs('th', 'axis align char charoff valign nowrap bgcolor width height');\\n        addAttrs('form', 'accept');\\n        addAttrs('td', 'abbr axis scope align char charoff valign nowrap bgcolor width height');\\n        addAttrs('tfoot', 'align char charoff valign');\\n        addAttrs('tbody', 'align char charoff valign');\\n        addAttrs('area', 'nohref');\\n        addAttrs('body', 'background bgcolor text link vlink alink');\\n      }\\n      if (type !== 'html4') {\\n        addAttrs('input button select textarea', 'autofocus');\\n        addAttrs('input textarea', 'placeholder');\\n        addAttrs('a', 'download');\\n        addAttrs('link script img', 'crossorigin');\\n        addAttrs('iframe', 'sandbox seamless allowfullscreen');\\n      }\\n      each$4(split('a form meter progress dfn'), function (name) {\\n        if (schema[name]) {\\n          delete schema[name].children[name];\\n        }\\n      });\\n      delete schema.caption.children.table;\\n      delete schema.script;\\n      mapCache[type] = schema;\\n      return schema;\\n    };\\n    var compileElementMap = function (value, mode) {\\n      var styles;\\n      if (value) {\\n        styles = {};\\n        if (typeof value === 'string') {\\n          value = { '*': value };\\n        }\\n        each$4(value, function (value, key) {\\n          styles[key] = styles[key.toUpperCase()] = mode === 'map' ? makeMap$2(value, /[, ]/) : explode$1(value, /[, ]/);\\n        });\\n      }\\n      return styles;\\n    };\\n    function Schema(settings) {\\n      var elements = {};\\n      var children = {};\\n      var patternElements = [];\\n      var validStyles;\\n      var invalidStyles;\\n      var schemaItems;\\n      var whiteSpaceElementsMap, selfClosingElementsMap, shortEndedElementsMap, boolAttrMap, validClasses;\\n      var blockElementsMap, nonEmptyElementsMap, moveCaretBeforeOnEnterElementsMap, textBlockElementsMap, textInlineElementsMap;\\n      var customElementsMap = {}, specialElements = {};\\n      var createLookupTable = function (option, defaultValue, extendWith) {\\n        var value = settings[option];\\n        if (!value) {\\n          value = mapCache[option];\\n          if (!value) {\\n            value = makeMap$2(defaultValue, ' ', makeMap$2(defaultValue.toUpperCase(), ' '));\\n            value = extend$1(value, extendWith);\\n            mapCache[option] = value;\\n          }\\n        } else {\\n          value = makeMap$2(value, /[, ]/, makeMap$2(value.toUpperCase(), /[, ]/));\\n        }\\n        return value;\\n      };\\n      settings = settings || {};\\n      schemaItems = compileSchema(settings.schema);\\n      if (settings.verify_html === false) {\\n        settings.valid_elements = '*[*]';\\n      }\\n      validStyles = compileElementMap(settings.valid_styles);\\n      invalidStyles = compileElementMap(settings.invalid_styles, 'map');\\n      validClasses = compileElementMap(settings.valid_classes, 'map');\\n      whiteSpaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea video audio iframe object code');\\n      selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr');\\n      shortEndedElementsMap = createLookupTable('short_ended_elements', 'area base basefont br col frame hr img input isindex link ' + 'meta param embed source wbr track');\\n      boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize ' + 'noshade nowrap readonly selected autoplay loop controls');\\n      nonEmptyElementsMap = createLookupTable('non_empty_elements', 'td th iframe video audio object ' + 'script pre code', shortEndedElementsMap);\\n      moveCaretBeforeOnEnterElementsMap = createLookupTable('move_caret_before_on_enter_elements', 'table', nonEmptyElementsMap);\\n      textBlockElementsMap = createLookupTable('text_block_elements', 'h1 h2 h3 h4 h5 h6 p div address pre form ' + 'blockquote center dir fieldset header footer article section hgroup aside main nav figure');\\n      blockElementsMap = createLookupTable('block_elements', 'hr table tbody thead tfoot ' + 'th tr td li ol ul caption dl dt dd noscript menu isindex option ' + 'datalist select optgroup figcaption details summary', textBlockElementsMap);\\n      textInlineElementsMap = createLookupTable('text_inline_elements', 'span strong b em i font strike u var cite ' + 'dfn code mark q sup sub samp');\\n      each$4((settings.special || 'script noscript iframe noframes noembed title style textarea xmp').split(' '), function (name) {\\n        specialElements[name] = new RegExp('</' + name + '[^>]*>', 'gi');\\n      });\\n      var patternToRegExp = function (str) {\\n        return new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$');\\n      };\\n      var addValidElements = function (validElements) {\\n        var ei, el, ai, al, matches, element, attr, attrData, elementName, attrName, attrType, attributes, attributesOrder, prefix, outputName, globalAttributes, globalAttributesOrder, key, value;\\n        var elementRuleRegExp = /^([#+\\\\-])?([^\\\\[!\\\\/]+)(?:\\\\/([^\\\\[!]+))?(?:(!?)\\\\[([^\\\\]]+)\\\\])?$/, attrRuleRegExp = /^([!\\\\-])?(\\\\w+[\\\\\\\\:]:\\\\w+|[^=:<]+)?(?:([=:<])(.*))?$/, hasPatternsRegExp = /[*?+]/;\\n        if (validElements) {\\n          validElements = split(validElements, ',');\\n          if (elements['@']) {\\n            globalAttributes = elements['@'].attributes;\\n            globalAttributesOrder = elements['@'].attributesOrder;\\n          }\\n          for (ei = 0, el = validElements.length; ei < el; ei++) {\\n            matches = elementRuleRegExp.exec(validElements[ei]);\\n            if (matches) {\\n              prefix = matches[1];\\n              elementName = matches[2];\\n              outputName = matches[3];\\n              attrData = matches[5];\\n              attributes = {};\\n              attributesOrder = [];\\n              element = {\\n                attributes: attributes,\\n                attributesOrder: attributesOrder\\n              };\\n              if (prefix === '#') {\\n                element.paddEmpty = true;\\n              }\\n              if (prefix === '-') {\\n                element.removeEmpty = true;\\n              }\\n              if (matches[4] === '!') {\\n                element.removeEmptyAttrs = true;\\n              }\\n              if (globalAttributes) {\\n                for (key in globalAttributes) {\\n                  attributes[key] = globalAttributes[key];\\n                }\\n                attributesOrder.push.apply(attributesOrder, globalAttributesOrder);\\n              }\\n              if (attrData) {\\n                attrData = split(attrData, '|');\\n                for (ai = 0, al = attrData.length; ai < al; ai++) {\\n                  matches = attrRuleRegExp.exec(attrData[ai]);\\n                  if (matches) {\\n                    attr = {};\\n                    attrType = matches[1];\\n                    attrName = matches[2].replace(/[\\\\\\\\:]:/g, ':');\\n                    prefix = matches[3];\\n                    value = matches[4];\\n                    if (attrType === '!') {\\n                      element.attributesRequired = element.attributesRequired || [];\\n                      element.attributesRequired.push(attrName);\\n                      attr.required = true;\\n                    }\\n                    if (attrType === '-') {\\n                      delete attributes[attrName];\\n                      attributesOrder.splice(inArray$1(attributesOrder, attrName), 1);\\n                      continue;\\n                    }\\n                    if (prefix) {\\n                      if (prefix === '=') {\\n                        element.attributesDefault = element.attributesDefault || [];\\n                        element.attributesDefault.push({\\n                          name: attrName,\\n                          value: value\\n                        });\\n                        attr.defaultValue = value;\\n                      }\\n                      if (prefix === ':') {\\n                        element.attributesForced = element.attributesForced || [];\\n                        element.attributesForced.push({\\n                          name: attrName,\\n                          value: value\\n                        });\\n                        attr.forcedValue = value;\\n                      }\\n                      if (prefix === '<') {\\n                        attr.validValues = makeMap$2(value, '?');\\n                      }\\n                    }\\n                    if (hasPatternsRegExp.test(attrName)) {\\n                      element.attributePatterns = element.attributePatterns || [];\\n                      attr.pattern = patternToRegExp(attrName);\\n                      element.attributePatterns.push(attr);\\n                    } else {\\n                      if (!attributes[attrName]) {\\n                        attributesOrder.push(attrName);\\n                      }\\n                      attributes[attrName] = attr;\\n                    }\\n                  }\\n                }\\n              }\\n              if (!globalAttributes && elementName === '@') {\\n                globalAttributes = attributes;\\n                globalAttributesOrder = attributesOrder;\\n              }\\n              if (outputName) {\\n                element.outputName = elementName;\\n                elements[outputName] = element;\\n              }\\n              if (hasPatternsRegExp.test(elementName)) {\\n                element.pattern = patternToRegExp(elementName);\\n                patternElements.push(element);\\n              } else {\\n                elements[elementName] = element;\\n              }\\n            }\\n          }\\n        }\\n      };\\n      var setValidElements = function (validElements) {\\n        elements = {};\\n        patternElements = [];\\n        addValidElements(validElements);\\n        each$4(schemaItems, function (element, name) {\\n          children[name] = element.children;\\n        });\\n      };\\n      var addCustomElements = function (customElements) {\\n        var customElementRegExp = /^(~)?(.+)$/;\\n        if (customElements) {\\n          mapCache.text_block_elements = mapCache.block_elements = null;\\n          each$4(split(customElements, ','), function (rule) {\\n            var matches = customElementRegExp.exec(rule), inline = matches[1] === '~', cloneName = inline ? 'span' : 'div', name = matches[2];\\n            children[name] = children[cloneName];\\n            customElementsMap[name] = cloneName;\\n            if (!inline) {\\n              blockElementsMap[name.toUpperCase()] = {};\\n              blockElementsMap[name] = {};\\n            }\\n            if (!elements[name]) {\\n              var customRule = elements[cloneName];\\n              customRule = extend$1({}, customRule);\\n              delete customRule.removeEmptyAttrs;\\n              delete customRule.removeEmpty;\\n              elements[name] = customRule;\\n            }\\n            each$4(children, function (element, elmName) {\\n              if (element[cloneName]) {\\n                children[elmName] = element = extend$1({}, children[elmName]);\\n                element[name] = element[cloneName];\\n              }\\n            });\\n          });\\n        }\\n      };\\n      var addValidChildren = function (validChildren) {\\n        var childRuleRegExp = /^([+\\\\-]?)(\\\\w+)\\\\[([^\\\\]]+)\\\\]$/;\\n        mapCache[settings.schema] = null;\\n        if (validChildren) {\\n          each$4(split(validChildren, ','), function (rule) {\\n            var matches = childRuleRegExp.exec(rule);\\n            var parent, prefix;\\n            if (matches) {\\n              prefix = matches[1];\\n              if (prefix) {\\n                parent = children[matches[2]];\\n              } else {\\n                parent = children[matches[2]] = { '#comment': {} };\\n              }\\n              parent = children[matches[2]];\\n              each$4(split(matches[3], '|'), function (child) {\\n                if (prefix === '-') {\\n                  delete parent[child];\\n                } else {\\n                  parent[child] = {};\\n                }\\n              });\\n            }\\n          });\\n        }\\n      };\\n      var getElementRule = function (name) {\\n        var element = elements[name], i;\\n        if (element) {\\n          return element;\\n        }\\n        i = patternElements.length;\\n        while (i--) {\\n          element = patternElements[i];\\n          if (element.pattern.test(name)) {\\n            return element;\\n          }\\n        }\\n      };\\n      if (!settings.valid_elements) {\\n        each$4(schemaItems, function (element, name) {\\n          elements[name] = {\\n            attributes: element.attributes,\\n            attributesOrder: element.attributesOrder\\n          };\\n          children[name] = element.children;\\n        });\\n        if (settings.schema !== 'html5') {\\n          each$4(split('strong/b em/i'), function (item) {\\n            item = split(item, '/');\\n            elements[item[1]].outputName = item[0];\\n          });\\n        }\\n        each$4(split('ol ul sub sup blockquote span font a table tbody tr strong em b i'), function (name) {\\n          if (elements[name]) {\\n            elements[name].removeEmpty = true;\\n          }\\n        });\\n        each$4(split('p h1 h2 h3 h4 h5 h6 th td pre div address caption li'), function (name) {\\n          elements[name].paddEmpty = true;\\n        });\\n        each$4(split('span'), function (name) {\\n          elements[name].removeEmptyAttrs = true;\\n        });\\n      } else {\\n        setValidElements(settings.valid_elements);\\n      }\\n      addCustomElements(settings.custom_elements);\\n      addValidChildren(settings.valid_children);\\n      addValidElements(settings.extended_valid_elements);\\n      addValidChildren('+ol[ul|ol],+ul[ul|ol]');\\n      each$4({\\n        dd: 'dl',\\n        dt: 'dl',\\n        li: 'ul ol',\\n        td: 'tr',\\n        th: 'tr',\\n        tr: 'tbody thead tfoot',\\n        tbody: 'table',\\n        thead: 'table',\\n        tfoot: 'table',\\n        legend: 'fieldset',\\n        area: 'map',\\n        param: 'video audio object'\\n      }, function (parents, item) {\\n        if (elements[item]) {\\n          elements[item].parentsRequired = split(parents);\\n        }\\n      });\\n      if (settings.invalid_elements) {\\n        each$4(explode$1(settings.invalid_elements), function (item) {\\n          if (elements[item]) {\\n            delete elements[item];\\n          }\\n        });\\n      }\\n      if (!getElementRule('span')) {\\n        addValidElements('span[!data-mce-type|*]');\\n      }\\n      var getValidStyles = function () {\\n        return validStyles;\\n      };\\n      var getInvalidStyles = function () {\\n        return invalidStyles;\\n      };\\n      var getValidClasses = function () {\\n        return validClasses;\\n      };\\n      var getBoolAttrs = function () {\\n        return boolAttrMap;\\n      };\\n      var getBlockElements = function () {\\n        return blockElementsMap;\\n      };\\n      var getTextBlockElements = function () {\\n        return textBlockElementsMap;\\n      };\\n      var getTextInlineElements = function () {\\n        return textInlineElementsMap;\\n      };\\n      var getShortEndedElements = function () {\\n        return shortEndedElementsMap;\\n      };\\n      var getSelfClosingElements = function () {\\n        return selfClosingElementsMap;\\n      };\\n      var getNonEmptyElements = function () {\\n        return nonEmptyElementsMap;\\n      };\\n      var getMoveCaretBeforeOnEnterElements = function () {\\n        return moveCaretBeforeOnEnterElementsMap;\\n      };\\n      var getWhiteSpaceElements = function () {\\n        return whiteSpaceElementsMap;\\n      };\\n      var getSpecialElements = function () {\\n        return specialElements;\\n      };\\n      var isValidChild = function (name, child) {\\n        var parent = children[name.toLowerCase()];\\n        return !!(parent && parent[child.toLowerCase()]);\\n      };\\n      var isValid = function (name, attr) {\\n        var attrPatterns, i;\\n        var rule = getElementRule(name);\\n        if (rule) {\\n          if (attr) {\\n            if (rule.attributes[attr]) {\\n              return true;\\n            }\\n            attrPatterns = rule.attributePatterns;\\n            if (attrPatterns) {\\n              i = attrPatterns.length;\\n              while (i--) {\\n                if (attrPatterns[i].pattern.test(name)) {\\n                  return true;\\n                }\\n              }\\n            }\\n          } else {\\n            return true;\\n          }\\n        }\\n        return false;\\n      };\\n      var getCustomElements = function () {\\n        return customElementsMap;\\n      };\\n      return {\\n        children: children,\\n        elements: elements,\\n        getValidStyles: getValidStyles,\\n        getValidClasses: getValidClasses,\\n        getBlockElements: getBlockElements,\\n        getInvalidStyles: getInvalidStyles,\\n        getShortEndedElements: getShortEndedElements,\\n        getTextBlockElements: getTextBlockElements,\\n        getTextInlineElements: getTextInlineElements,\\n        getBoolAttrs: getBoolAttrs,\\n        getElementRule: getElementRule,\\n        getSelfClosingElements: getSelfClosingElements,\\n        getNonEmptyElements: getNonEmptyElements,\\n        getMoveCaretBeforeOnEnterElements: getMoveCaretBeforeOnEnterElements,\\n        getWhiteSpaceElements: getWhiteSpaceElements,\\n        getSpecialElements: getSpecialElements,\\n        isValidChild: isValidChild,\\n        isValid: isValid,\\n        getCustomElements: getCustomElements,\\n        addValidElements: addValidElements,\\n        setValidElements: setValidElements,\\n        addCustomElements: addCustomElements,\\n        addValidChildren: addValidChildren\\n      };\\n    }\\n\\n    var toHex = function (match, r, g, b) {\\n      var hex = function (val) {\\n        val = parseInt(val, 10).toString(16);\\n        return val.length > 1 ? val : '0' + val;\\n      };\\n      return '#' + hex(r) + hex(g) + hex(b);\\n    };\\n    function Styles(settings, schema) {\\n      var rgbRegExp = /rgb\\\\s*\\\\(\\\\s*([0-9]+)\\\\s*,\\\\s*([0-9]+)\\\\s*,\\\\s*([0-9]+)\\\\s*\\\\)/gi;\\n      var urlOrStrRegExp = /(?:url(?:(?:\\\\(\\\\s*\\\\\\\"([^\\\\\\\"]+)\\\\\\\"\\\\s*\\\\))|(?:\\\\(\\\\s*\\\\'([^\\\\']+)\\\\'\\\\s*\\\\))|(?:\\\\(\\\\s*([^)\\\\s]+)\\\\s*\\\\))))|(?:\\\\'([^\\\\']+)\\\\')|(?:\\\\\\\"([^\\\\\\\"]+)\\\\\\\")/gi;\\n      var styleRegExp = /\\\\s*([^:]+):\\\\s*([^;]+);?/g;\\n      var trimRightRegExp = /\\\\s+$/;\\n      var i;\\n      var encodingLookup = {};\\n      var encodingItems;\\n      var validStyles;\\n      var invalidStyles;\\n      var invisibleChar = '\\\\uFEFF';\\n      settings = settings || {};\\n      if (schema) {\\n        validStyles = schema.getValidStyles();\\n        invalidStyles = schema.getInvalidStyles();\\n      }\\n      encodingItems = ('\\\\\\\\\\\" \\\\\\\\\\\\' \\\\\\\\; \\\\\\\\: ; : ' + invisibleChar).split(' ');\\n      for (i = 0; i < encodingItems.length; i++) {\\n        encodingLookup[encodingItems[i]] = invisibleChar + i;\\n        encodingLookup[invisibleChar + i] = encodingItems[i];\\n      }\\n      return {\\n        toHex: function (color) {\\n          return color.replace(rgbRegExp, toHex);\\n        },\\n        parse: function (css) {\\n          var styles = {};\\n          var matches, name, value, isEncoded;\\n          var urlConverter = settings.url_converter;\\n          var urlConverterScope = settings.url_converter_scope || this;\\n          var compress = function (prefix, suffix, noJoin) {\\n            var top, right, bottom, left;\\n            top = styles[prefix + '-top' + suffix];\\n            if (!top) {\\n              return;\\n            }\\n            right = styles[prefix + '-right' + suffix];\\n            if (!right) {\\n              return;\\n            }\\n            bottom = styles[prefix + '-bottom' + suffix];\\n            if (!bottom) {\\n              return;\\n            }\\n            left = styles[prefix + '-left' + suffix];\\n            if (!left) {\\n              return;\\n            }\\n            var box = [\\n              top,\\n              right,\\n              bottom,\\n              left\\n            ];\\n            i = box.length - 1;\\n            while (i--) {\\n              if (box[i] !== box[i + 1]) {\\n                break;\\n              }\\n            }\\n            if (i > -1 && noJoin) {\\n              return;\\n            }\\n            styles[prefix + suffix] = i === -1 ? box[0] : box.join(' ');\\n            delete styles[prefix + '-top' + suffix];\\n            delete styles[prefix + '-right' + suffix];\\n            delete styles[prefix + '-bottom' + suffix];\\n            delete styles[prefix + '-left' + suffix];\\n          };\\n          var canCompress = function (key) {\\n            var value = styles[key], i;\\n            if (!value) {\\n              return;\\n            }\\n            value = value.split(' ');\\n            i = value.length;\\n            while (i--) {\\n              if (value[i] !== value[0]) {\\n                return false;\\n              }\\n            }\\n            styles[key] = value[0];\\n            return true;\\n          };\\n          var compress2 = function (target, a, b, c) {\\n            if (!canCompress(a)) {\\n              return;\\n            }\\n            if (!canCompress(b)) {\\n              return;\\n            }\\n            if (!canCompress(c)) {\\n              return;\\n            }\\n            styles[target] = styles[a] + ' ' + styles[b] + ' ' + styles[c];\\n            delete styles[a];\\n            delete styles[b];\\n            delete styles[c];\\n          };\\n          var encode = function (str) {\\n            isEncoded = true;\\n            return encodingLookup[str];\\n          };\\n          var decode = function (str, keepSlashes) {\\n            if (isEncoded) {\\n              str = str.replace(/\\\\uFEFF[0-9]/g, function (str) {\\n                return encodingLookup[str];\\n              });\\n            }\\n            if (!keepSlashes) {\\n              str = str.replace(/\\\\\\\\([\\\\'\\\\\\\";:])/g, '$1');\\n            }\\n            return str;\\n          };\\n          var decodeSingleHexSequence = function (escSeq) {\\n            return String.fromCharCode(parseInt(escSeq.slice(1), 16));\\n          };\\n          var decodeHexSequences = function (value) {\\n            return value.replace(/\\\\\\\\[0-9a-f]+/gi, decodeSingleHexSequence);\\n          };\\n          var processUrl = function (match, url, url2, url3, str, str2) {\\n            str = str || str2;\\n            if (str) {\\n              str = decode(str);\\n              return '\\\\'' + str.replace(/\\\\'/g, '\\\\\\\\\\\\'') + '\\\\'';\\n            }\\n            url = decode(url || url2 || url3);\\n            if (!settings.allow_script_urls) {\\n              var scriptUrl = url.replace(/[\\\\s\\\\r\\\\n]+/g, '');\\n              if (/(java|vb)script:/i.test(scriptUrl)) {\\n                return '';\\n              }\\n              if (!settings.allow_svg_data_urls && /^data:image\\\\/svg/i.test(scriptUrl)) {\\n                return '';\\n              }\\n            }\\n            if (urlConverter) {\\n              url = urlConverter.call(urlConverterScope, url, 'style');\\n            }\\n            return 'url(\\\\'' + url.replace(/\\\\'/g, '\\\\\\\\\\\\'') + '\\\\')';\\n          };\\n          if (css) {\\n            css = css.replace(/[\\\\u0000-\\\\u001F]/g, '');\\n            css = css.replace(/\\\\\\\\[\\\\\\\"\\\\';:\\\\uFEFF]/g, encode).replace(/\\\\\\\"[^\\\\\\\"]+\\\\\\\"|\\\\'[^\\\\']+\\\\'/g, function (str) {\\n              return str.replace(/[;:]/g, encode);\\n            });\\n            while (matches = styleRegExp.exec(css)) {\\n              styleRegExp.lastIndex = matches.index + matches[0].length;\\n              name = matches[1].replace(trimRightRegExp, '').toLowerCase();\\n              value = matches[2].replace(trimRightRegExp, '');\\n              if (name && value) {\\n                name = decodeHexSequences(name);\\n                value = decodeHexSequences(value);\\n                if (name.indexOf(invisibleChar) !== -1 || name.indexOf('\\\"') !== -1) {\\n                  continue;\\n                }\\n                if (!settings.allow_script_urls && (name === 'behavior' || /expression\\\\s*\\\\(|\\\\/\\\\*|\\\\*\\\\//.test(value))) {\\n                  continue;\\n                }\\n                if (name === 'font-weight' && value === '700') {\\n                  value = 'bold';\\n                } else if (name === 'color' || name === 'background-color') {\\n                  value = value.toLowerCase();\\n                }\\n                value = value.replace(rgbRegExp, toHex);\\n                value = value.replace(urlOrStrRegExp, processUrl);\\n                styles[name] = isEncoded ? decode(value, true) : value;\\n              }\\n            }\\n            compress('border', '', true);\\n            compress('border', '-width');\\n            compress('border', '-color');\\n            compress('border', '-style');\\n            compress('padding', '');\\n            compress('margin', '');\\n            compress2('border', 'border-width', 'border-style', 'border-color');\\n            if (styles.border === 'medium none') {\\n              delete styles.border;\\n            }\\n            if (styles['border-image'] === 'none') {\\n              delete styles['border-image'];\\n            }\\n          }\\n          return styles;\\n        },\\n        serialize: function (styles, elementName) {\\n          var css = '', name, value;\\n          var serializeStyles = function (name) {\\n            var styleList, i, l, value;\\n            styleList = validStyles[name];\\n            if (styleList) {\\n              for (i = 0, l = styleList.length; i < l; i++) {\\n                name = styleList[i];\\n                value = styles[name];\\n                if (value) {\\n                  css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\\n                }\\n              }\\n            }\\n          };\\n          var isValid = function (name, elementName) {\\n            var styleMap;\\n            styleMap = invalidStyles['*'];\\n            if (styleMap && styleMap[name]) {\\n              return false;\\n            }\\n            styleMap = invalidStyles[elementName];\\n            if (styleMap && styleMap[name]) {\\n              return false;\\n            }\\n            return true;\\n          };\\n          if (elementName && validStyles) {\\n            serializeStyles('*');\\n            serializeStyles(elementName);\\n          } else {\\n            for (name in styles) {\\n              value = styles[name];\\n              if (value && (!invalidStyles || isValid(name, elementName))) {\\n                css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\\n              }\\n            }\\n          }\\n          return css;\\n        }\\n      };\\n    }\\n\\n    var each$5 = Tools.each;\\n    var grep$1 = Tools.grep;\\n    var isIE = Env.ie;\\n    var simpleSelectorRe = /^([a-z0-9],?)+$/i;\\n    var whiteSpaceRegExp$2 = /^[ \\\\t\\\\r\\\\n]*$/;\\n    var setupAttrHooks = function (styles, settings, getContext) {\\n      var attrHooks = {};\\n      var keepValues = settings.keep_values;\\n      var keepUrlHook = {\\n        set: function ($elm, value, name) {\\n          if (settings.url_converter) {\\n            value = settings.url_converter.call(settings.url_converter_scope || getContext(), value, name, $elm[0]);\\n          }\\n          $elm.attr('data-mce-' + name, value).attr(name, value);\\n        },\\n        get: function ($elm, name) {\\n          return $elm.attr('data-mce-' + name) || $elm.attr(name);\\n        }\\n      };\\n      attrHooks = {\\n        style: {\\n          set: function ($elm, value) {\\n            if (value !== null && typeof value === 'object') {\\n              $elm.css(value);\\n              return;\\n            }\\n            if (keepValues) {\\n              $elm.attr('data-mce-style', value);\\n            }\\n            $elm.attr('style', value);\\n          },\\n          get: function ($elm) {\\n            var value = $elm.attr('data-mce-style') || $elm.attr('style');\\n            value = styles.serialize(styles.parse(value), $elm[0].nodeName);\\n            return value;\\n          }\\n        }\\n      };\\n      if (keepValues) {\\n        attrHooks.href = attrHooks.src = keepUrlHook;\\n      }\\n      return attrHooks;\\n    };\\n    var updateInternalStyleAttr = function (styles, $elm) {\\n      var rawValue = $elm.attr('style');\\n      var value = styles.serialize(styles.parse(rawValue), $elm[0].nodeName);\\n      if (!value) {\\n        value = null;\\n      }\\n      $elm.attr('data-mce-style', value);\\n    };\\n    var findNodeIndex = function (node, normalized) {\\n      var idx = 0, lastNodeType, nodeType;\\n      if (node) {\\n        for (lastNodeType = node.nodeType, node = node.previousSibling; node; node = node.previousSibling) {\\n          nodeType = node.nodeType;\\n          if (normalized && nodeType === 3) {\\n            if (nodeType === lastNodeType || !node.nodeValue.length) {\\n              continue;\\n            }\\n          }\\n          idx++;\\n          lastNodeType = nodeType;\\n        }\\n      }\\n      return idx;\\n    };\\n    function DOMUtils(doc, settings) {\\n      var _this = this;\\n      if (settings === void 0) {\\n        settings = {};\\n      }\\n      var attrHooks;\\n      var addedStyles = {};\\n      var win = domGlobals.window;\\n      var files = {};\\n      var counter = 0;\\n      var stdMode = true;\\n      var boxModel = true;\\n      var styleSheetLoader = StyleSheetLoader(doc, { contentCssCors: settings.contentCssCors });\\n      var boundEvents = [];\\n      var schema = settings.schema ? settings.schema : Schema({});\\n      var styles = Styles({\\n        url_converter: settings.url_converter,\\n        url_converter_scope: settings.url_converter_scope\\n      }, settings.schema);\\n      var events = settings.ownEvents ? new EventUtils(settings.proxy) : EventUtils.Event;\\n      var blockElementsMap = schema.getBlockElements();\\n      var $ = DomQuery.overrideDefaults(function () {\\n        return {\\n          context: doc,\\n          element: self.getRoot()\\n        };\\n      });\\n      var isBlock = function (node) {\\n        if (typeof node === 'string') {\\n          return !!blockElementsMap[node];\\n        } else if (node) {\\n          var type = node.nodeType;\\n          if (type) {\\n            return !!(type === 1 && blockElementsMap[node.nodeName]);\\n          }\\n        }\\n        return false;\\n      };\\n      var get = function (elm) {\\n        if (elm && doc && typeof elm === 'string') {\\n          var node = doc.getElementById(elm);\\n          if (node && node.id !== elm) {\\n            return doc.getElementsByName(elm)[1];\\n          } else {\\n            return node;\\n          }\\n        }\\n        return elm;\\n      };\\n      var $$ = function (elm) {\\n        if (typeof elm === 'string') {\\n          elm = get(elm);\\n        }\\n        return $(elm);\\n      };\\n      var getAttrib = function (elm, name, defaultVal) {\\n        var hook, value;\\n        var $elm = $$(elm);\\n        if ($elm.length) {\\n          hook = attrHooks[name];\\n          if (hook && hook.get) {\\n            value = hook.get($elm, name);\\n          } else {\\n            value = $elm.attr(name);\\n          }\\n        }\\n        if (typeof value === 'undefined') {\\n          value = defaultVal || '';\\n        }\\n        return value;\\n      };\\n      var getAttribs = function (elm) {\\n        var node = get(elm);\\n        if (!node) {\\n          return [];\\n        }\\n        return node.attributes;\\n      };\\n      var setAttrib = function (elm, name, value) {\\n        var originalValue, hook;\\n        if (value === '') {\\n          value = null;\\n        }\\n        var $elm = $$(elm);\\n        originalValue = $elm.attr(name);\\n        if (!$elm.length) {\\n          return;\\n        }\\n        hook = attrHooks[name];\\n        if (hook && hook.set) {\\n          hook.set($elm, value, name);\\n        } else {\\n          $elm.attr(name, value);\\n        }\\n        if (originalValue !== value && settings.onSetAttrib) {\\n          settings.onSetAttrib({\\n            attrElm: $elm,\\n            attrName: name,\\n            attrValue: value\\n          });\\n        }\\n      };\\n      var clone = function (node, deep) {\\n        if (!isIE || node.nodeType !== 1 || deep) {\\n          return node.cloneNode(deep);\\n        }\\n        if (!deep) {\\n          var clone_1 = doc.createElement(node.nodeName);\\n          each$5(getAttribs(node), function (attr) {\\n            setAttrib(clone_1, attr.nodeName, getAttrib(node, attr.nodeName));\\n          });\\n          return clone_1;\\n        }\\n        return null;\\n      };\\n      var getRoot = function () {\\n        return settings.root_element || doc.body;\\n      };\\n      var getViewPort = function (argWin) {\\n        var actWin = !argWin ? win : argWin;\\n        var doc = actWin.document;\\n        var rootElm =  doc.documentElement ;\\n        return {\\n          x: actWin.pageXOffset || rootElm.scrollLeft,\\n          y: actWin.pageYOffset || rootElm.scrollTop,\\n          w: actWin.innerWidth || rootElm.clientWidth,\\n          h: actWin.innerHeight || rootElm.clientHeight\\n        };\\n      };\\n      var getPos = function (elm, rootElm) {\\n        return Position.getPos(doc.body, get(elm), rootElm);\\n      };\\n      var setStyle = function (elm, name, value) {\\n        var $elm = $$(elm).css(name, value);\\n        if (settings.update_styles) {\\n          updateInternalStyleAttr(styles, $elm);\\n        }\\n      };\\n      var setStyles = function (elm, stylesArg) {\\n        var $elm = $$(elm).css(stylesArg);\\n        if (settings.update_styles) {\\n          updateInternalStyleAttr(styles, $elm);\\n        }\\n      };\\n      var getStyle = function (elm, name, computed) {\\n        var $elm = $$(elm);\\n        if (computed) {\\n          return $elm.css(name);\\n        }\\n        name = name.replace(/-(\\\\D)/g, function (a, b) {\\n          return b.toUpperCase();\\n        });\\n        if (name === 'float') {\\n          name = Env.ie && Env.ie < 12 ? 'styleFloat' : 'cssFloat';\\n        }\\n        return $elm[0] && $elm[0].style ? $elm[0].style[name] : undefined;\\n      };\\n      var getSize = function (elm) {\\n        var w, h;\\n        elm = get(elm);\\n        w = getStyle(elm, 'width');\\n        h = getStyle(elm, 'height');\\n        if (w.indexOf('px') === -1) {\\n          w = 0;\\n        }\\n        if (h.indexOf('px') === -1) {\\n          h = 0;\\n        }\\n        return {\\n          w: parseInt(w, 10) || elm.offsetWidth || elm.clientWidth,\\n          h: parseInt(h, 10) || elm.offsetHeight || elm.clientHeight\\n        };\\n      };\\n      var getRect = function (elm) {\\n        var pos, size;\\n        elm = get(elm);\\n        pos = getPos(elm);\\n        size = getSize(elm);\\n        return {\\n          x: pos.x,\\n          y: pos.y,\\n          w: size.w,\\n          h: size.h\\n        };\\n      };\\n      var is = function (elm, selector) {\\n        var i;\\n        if (!elm) {\\n          return false;\\n        }\\n        if (!Array.isArray(elm)) {\\n          if (selector === '*') {\\n            return elm.nodeType === 1;\\n          }\\n          if (simpleSelectorRe.test(selector)) {\\n            var selectors = selector.toLowerCase().split(/,/);\\n            var elmName = elm.nodeName.toLowerCase();\\n            for (i = selectors.length - 1; i >= 0; i--) {\\n              if (selectors[i] === elmName) {\\n                return true;\\n              }\\n            }\\n            return false;\\n          }\\n          if (elm.nodeType && elm.nodeType !== 1) {\\n            return false;\\n          }\\n        }\\n        var elms = !Array.isArray(elm) ? [elm] : elm;\\n        return Sizzle(selector, elms[0].ownerDocument || elms[0], null, elms).length > 0;\\n      };\\n      var getParents = function (elm, selector, root, collect) {\\n        var result = [];\\n        var selectorVal;\\n        var node = get(elm);\\n        collect = collect === undefined;\\n        root = root || (getRoot().nodeName !== 'BODY' ? getRoot().parentNode : null);\\n        if (Tools.is(selector, 'string')) {\\n          selectorVal = selector;\\n          if (selector === '*') {\\n            selector = function (node) {\\n              return node.nodeType === 1;\\n            };\\n          } else {\\n            selector = function (node) {\\n              return is(node, selectorVal);\\n            };\\n          }\\n        }\\n        while (node) {\\n          if (node === root || !node.nodeType || node.nodeType === 9) {\\n            break;\\n          }\\n          if (!selector || typeof selector === 'function' && selector(node)) {\\n            if (collect) {\\n              result.push(node);\\n            } else {\\n              return [node];\\n            }\\n          }\\n          node = node.parentNode;\\n        }\\n        return collect ? result : null;\\n      };\\n      var getParent = function (node, selector, root) {\\n        var parents = getParents(node, selector, root, false);\\n        return parents && parents.length > 0 ? parents[0] : null;\\n      };\\n      var _findSib = function (node, selector, name) {\\n        var func = selector;\\n        if (node) {\\n          if (typeof selector === 'string') {\\n            func = function (node) {\\n              return is(node, selector);\\n            };\\n          }\\n          for (node = node[name]; node; node = node[name]) {\\n            if (typeof func === 'function' && func(node)) {\\n              return node;\\n            }\\n          }\\n        }\\n        return null;\\n      };\\n      var getNext = function (node, selector) {\\n        return _findSib(node, selector, 'nextSibling');\\n      };\\n      var getPrev = function (node, selector) {\\n        return _findSib(node, selector, 'previousSibling');\\n      };\\n      var select = function (selector, scope) {\\n        return Sizzle(selector, get(scope) || settings.root_element || doc, []);\\n      };\\n      var run = function (elm, func, scope) {\\n        var result;\\n        var node = typeof elm === 'string' ? get(elm) : elm;\\n        if (!node) {\\n          return false;\\n        }\\n        if (Tools.isArray(node) && (node.length || node.length === 0)) {\\n          result = [];\\n          each$5(node, function (elm, i) {\\n            if (elm) {\\n              if (typeof elm === 'string') {\\n                elm = get(elm);\\n              }\\n              result.push(func.call(scope, elm, i));\\n            }\\n          });\\n          return result;\\n        }\\n        var context = scope ? scope : _this;\\n        return func.call(context, node);\\n      };\\n      var setAttribs = function (elm, attrs) {\\n        $$(elm).each(function (i, node) {\\n          each$5(attrs, function (value, name) {\\n            setAttrib(node, name, value);\\n          });\\n        });\\n      };\\n      var setHTML = function (elm, html) {\\n        var $elm = $$(elm);\\n        if (isIE) {\\n          $elm.each(function (i, target) {\\n            if (target.canHaveHTML === false) {\\n              return;\\n            }\\n            while (target.firstChild) {\\n              target.removeChild(target.firstChild);\\n            }\\n            try {\\n              target.innerHTML = '<br>' + html;\\n              target.removeChild(target.firstChild);\\n            } catch (ex) {\\n              DomQuery('<div></div>').html('<br>' + html).contents().slice(1).appendTo(target);\\n            }\\n            return html;\\n          });\\n        } else {\\n          $elm.html(html);\\n        }\\n      };\\n      var add = function (parentElm, name, attrs, html, create) {\\n        return run(parentElm, function (parentElm) {\\n          var newElm = typeof name === 'string' ? doc.createElement(name) : name;\\n          setAttribs(newElm, attrs);\\n          if (html) {\\n            if (typeof html !== 'string' && html.nodeType) {\\n              newElm.appendChild(html);\\n            } else if (typeof html === 'string') {\\n              setHTML(newElm, html);\\n            }\\n          }\\n          return !create ? parentElm.appendChild(newElm) : newElm;\\n        });\\n      };\\n      var create = function (name, attrs, html) {\\n        return add(doc.createElement(name), name, attrs, html, true);\\n      };\\n      var decode = Entities.decode;\\n      var encode = Entities.encodeAllRaw;\\n      var createHTML = function (name, attrs, html) {\\n        var outHtml = '', key;\\n        outHtml += '<' + name;\\n        for (key in attrs) {\\n          if (attrs.hasOwnProperty(key) && attrs[key] !== null && typeof attrs[key] !== 'undefined') {\\n            outHtml += ' ' + key + '=\\\"' + encode(attrs[key]) + '\\\"';\\n          }\\n        }\\n        if (typeof html !== 'undefined') {\\n          return outHtml + '>' + html + '</' + name + '>';\\n        }\\n        return outHtml + ' />';\\n      };\\n      var createFragment = function (html) {\\n        var node;\\n        var container = doc.createElement('div');\\n        var frag = doc.createDocumentFragment();\\n        frag.appendChild(container);\\n        if (html) {\\n          container.innerHTML = html;\\n        }\\n        while (node = container.firstChild) {\\n          frag.appendChild(node);\\n        }\\n        frag.removeChild(container);\\n        return frag;\\n      };\\n      var remove = function (node, keepChildren) {\\n        var $node = $$(node);\\n        if (keepChildren) {\\n          $node.each(function () {\\n            var child;\\n            while (child = this.firstChild) {\\n              if (child.nodeType === 3 && child.data.length === 0) {\\n                this.removeChild(child);\\n              } else {\\n                this.parentNode.insertBefore(child, this);\\n              }\\n            }\\n          }).remove();\\n        } else {\\n          $node.remove();\\n        }\\n        return $node.length > 1 ? $node.toArray() : $node[0];\\n      };\\n      var removeAllAttribs = function (e) {\\n        return run(e, function (e) {\\n          var i;\\n          var attrs = e.attributes;\\n          for (i = attrs.length - 1; i >= 0; i--) {\\n            e.removeAttributeNode(attrs.item(i));\\n          }\\n        });\\n      };\\n      var parseStyle = function (cssText) {\\n        return styles.parse(cssText);\\n      };\\n      var serializeStyle = function (stylesArg, name) {\\n        return styles.serialize(stylesArg, name);\\n      };\\n      var addStyle = function (cssText) {\\n        var head, styleElm;\\n        if (self !== DOMUtils.DOM && doc === domGlobals.document) {\\n          if (addedStyles[cssText]) {\\n            return;\\n          }\\n          addedStyles[cssText] = true;\\n        }\\n        styleElm = doc.getElementById('mceDefaultStyles');\\n        if (!styleElm) {\\n          styleElm = doc.createElement('style');\\n          styleElm.id = 'mceDefaultStyles';\\n          styleElm.type = 'text/css';\\n          head = doc.getElementsByTagName('head')[0];\\n          if (head.firstChild) {\\n            head.insertBefore(styleElm, head.firstChild);\\n          } else {\\n            head.appendChild(styleElm);\\n          }\\n        }\\n        if (styleElm.styleSheet) {\\n          styleElm.styleSheet.cssText += cssText;\\n        } else {\\n          styleElm.appendChild(doc.createTextNode(cssText));\\n        }\\n      };\\n      var loadCSS = function (url) {\\n        var head;\\n        if (self !== DOMUtils.DOM && doc === domGlobals.document) {\\n          DOMUtils.DOM.loadCSS(url);\\n          return;\\n        }\\n        if (!url) {\\n          url = '';\\n        }\\n        head = doc.getElementsByTagName('head')[0];\\n        each$5(url.split(','), function (url) {\\n          var link;\\n          url = Tools._addCacheSuffix(url);\\n          if (files[url]) {\\n            return;\\n          }\\n          files[url] = true;\\n          link = create('link', {\\n            rel: 'stylesheet',\\n            href: url\\n          });\\n          head.appendChild(link);\\n        });\\n      };\\n      var toggleClass = function (elm, cls, state) {\\n        $$(elm).toggleClass(cls, state).each(function () {\\n          if (this.className === '') {\\n            DomQuery(this).attr('class', null);\\n          }\\n        });\\n      };\\n      var addClass = function (elm, cls) {\\n        $$(elm).addClass(cls);\\n      };\\n      var removeClass = function (elm, cls) {\\n        toggleClass(elm, cls, false);\\n      };\\n      var hasClass = function (elm, cls) {\\n        return $$(elm).hasClass(cls);\\n      };\\n      var show = function (elm) {\\n        $$(elm).show();\\n      };\\n      var hide = function (elm) {\\n        $$(elm).hide();\\n      };\\n      var isHidden = function (elm) {\\n        return $$(elm).css('display') === 'none';\\n      };\\n      var uniqueId = function (prefix) {\\n        return (!prefix ? 'mce_' : prefix) + counter++;\\n      };\\n      var getOuterHTML = function (elm) {\\n        var node = typeof elm === 'string' ? get(elm) : elm;\\n        return NodeType.isElement(node) ? node.outerHTML : DomQuery('<div></div>').append(DomQuery(node).clone()).html();\\n      };\\n      var setOuterHTML = function (elm, html) {\\n        $$(elm).each(function () {\\n          try {\\n            if ('outerHTML' in this) {\\n              this.outerHTML = html;\\n              return;\\n            }\\n          } catch (ex) {\\n          }\\n          remove(DomQuery(this).html(html), true);\\n        });\\n      };\\n      var insertAfter = function (node, reference) {\\n        var referenceNode = get(reference);\\n        return run(node, function (node) {\\n          var parent, nextSibling;\\n          parent = referenceNode.parentNode;\\n          nextSibling = referenceNode.nextSibling;\\n          if (nextSibling) {\\n            parent.insertBefore(node, nextSibling);\\n          } else {\\n            parent.appendChild(node);\\n          }\\n          return node;\\n        });\\n      };\\n      var replace = function (newElm, oldElm, keepChildren) {\\n        return run(oldElm, function (oldElm) {\\n          if (Tools.is(oldElm, 'array')) {\\n            newElm = newElm.cloneNode(true);\\n          }\\n          if (keepChildren) {\\n            each$5(grep$1(oldElm.childNodes), function (node) {\\n              newElm.appendChild(node);\\n            });\\n          }\\n          return oldElm.parentNode.replaceChild(newElm, oldElm);\\n        });\\n      };\\n      var rename = function (elm, name) {\\n        var newElm;\\n        if (elm.nodeName !== name.toUpperCase()) {\\n          newElm = create(name);\\n          each$5(getAttribs(elm), function (attrNode) {\\n            setAttrib(newElm, attrNode.nodeName, getAttrib(elm, attrNode.nodeName));\\n          });\\n          replace(newElm, elm, true);\\n        }\\n        return newElm || elm;\\n      };\\n      var findCommonAncestor = function (a, b) {\\n        var ps = a, pe;\\n        while (ps) {\\n          pe = b;\\n          while (pe && ps !== pe) {\\n            pe = pe.parentNode;\\n          }\\n          if (ps === pe) {\\n            break;\\n          }\\n          ps = ps.parentNode;\\n        }\\n        if (!ps && a.ownerDocument) {\\n          return a.ownerDocument.documentElement;\\n        }\\n        return ps;\\n      };\\n      var toHex = function (rgbVal) {\\n        return styles.toHex(Tools.trim(rgbVal));\\n      };\\n      var isEmpty = function (node, elements) {\\n        var i, attributes, type, whitespace, walker, name, brCount = 0;\\n        node = node.firstChild;\\n        if (node) {\\n          walker = new TreeWalker(node, node.parentNode);\\n          elements = elements || (schema ? schema.getNonEmptyElements() : null);\\n          whitespace = schema ? schema.getWhiteSpaceElements() : {};\\n          do {\\n            type = node.nodeType;\\n            if (NodeType.isElement(node)) {\\n              var bogusVal = node.getAttribute('data-mce-bogus');\\n              if (bogusVal) {\\n                node = walker.next(bogusVal === 'all');\\n                continue;\\n              }\\n              name = node.nodeName.toLowerCase();\\n              if (elements && elements[name]) {\\n                if (name === 'br') {\\n                  brCount++;\\n                  node = walker.next();\\n                  continue;\\n                }\\n                return false;\\n              }\\n              attributes = getAttribs(node);\\n              i = attributes.length;\\n              while (i--) {\\n                name = attributes[i].nodeName;\\n                if (name === 'name' || name === 'data-mce-bookmark') {\\n                  return false;\\n                }\\n              }\\n            }\\n            if (type === 8) {\\n              return false;\\n            }\\n            if (type === 3 && !whiteSpaceRegExp$2.test(node.nodeValue)) {\\n              return false;\\n            }\\n            if (type === 3 && node.parentNode && whitespace[node.parentNode.nodeName] && whiteSpaceRegExp$2.test(node.nodeValue)) {\\n              return false;\\n            }\\n            node = walker.next();\\n          } while (node);\\n        }\\n        return brCount <= 1;\\n      };\\n      var createRng = function () {\\n        return doc.createRange();\\n      };\\n      var split = function (parentElm, splitElm, replacementElm) {\\n        var r = createRng(), bef, aft, pa;\\n        if (parentElm && splitElm) {\\n          r.setStart(parentElm.parentNode, findNodeIndex(parentElm));\\n          r.setEnd(splitElm.parentNode, findNodeIndex(splitElm));\\n          bef = r.extractContents();\\n          r = createRng();\\n          r.setStart(splitElm.parentNode, findNodeIndex(splitElm) + 1);\\n          r.setEnd(parentElm.parentNode, findNodeIndex(parentElm) + 1);\\n          aft = r.extractContents();\\n          pa = parentElm.parentNode;\\n          pa.insertBefore(TrimNode.trimNode(self, bef), parentElm);\\n          if (replacementElm) {\\n            pa.insertBefore(replacementElm, parentElm);\\n          } else {\\n            pa.insertBefore(splitElm, parentElm);\\n          }\\n          pa.insertBefore(TrimNode.trimNode(self, aft), parentElm);\\n          remove(parentElm);\\n          return replacementElm || splitElm;\\n        }\\n      };\\n      var bind = function (target, name, func, scope) {\\n        if (Tools.isArray(target)) {\\n          var i = target.length;\\n          while (i--) {\\n            target[i] = bind(target[i], name, func, scope);\\n          }\\n          return target;\\n        }\\n        if (settings.collect && (target === doc || target === win)) {\\n          boundEvents.push([\\n            target,\\n            name,\\n            func,\\n            scope\\n          ]);\\n        }\\n        return events.bind(target, name, func, scope || self);\\n      };\\n      var unbind = function (target, name, func) {\\n        var i;\\n        if (Tools.isArray(target)) {\\n          i = target.length;\\n          while (i--) {\\n            target[i] = unbind(target[i], name, func);\\n          }\\n          return target;\\n        }\\n        if (boundEvents && (target === doc || target === win)) {\\n          i = boundEvents.length;\\n          while (i--) {\\n            var item = boundEvents[i];\\n            if (target === item[0] && (!name || name === item[1]) && (!func || func === item[2])) {\\n              events.unbind(item[0], item[1], item[2]);\\n            }\\n          }\\n        }\\n        return events.unbind(target, name, func);\\n      };\\n      var fire = function (target, name, evt) {\\n        return events.fire(target, name, evt);\\n      };\\n      var getContentEditable = function (node) {\\n        if (node && NodeType.isElement(node)) {\\n          var contentEditable = node.getAttribute('data-mce-contenteditable');\\n          if (contentEditable && contentEditable !== 'inherit') {\\n            return contentEditable;\\n          }\\n          return node.contentEditable !== 'inherit' ? node.contentEditable : null;\\n        } else {\\n          return null;\\n        }\\n      };\\n      var getContentEditableParent = function (node) {\\n        var root = getRoot();\\n        var state = null;\\n        for (; node && node !== root; node = node.parentNode) {\\n          state = getContentEditable(node);\\n          if (state !== null) {\\n            break;\\n          }\\n        }\\n        return state;\\n      };\\n      var destroy = function () {\\n        if (boundEvents) {\\n          var i = boundEvents.length;\\n          while (i--) {\\n            var item = boundEvents[i];\\n            events.unbind(item[0], item[1], item[2]);\\n          }\\n        }\\n        if (Sizzle.setDocument) {\\n          Sizzle.setDocument();\\n        }\\n      };\\n      var isChildOf = function (node, parent) {\\n        while (node) {\\n          if (parent === node) {\\n            return true;\\n          }\\n          node = node.parentNode;\\n        }\\n        return false;\\n      };\\n      var dumpRng = function (r) {\\n        return 'startContainer: ' + r.startContainer.nodeName + ', startOffset: ' + r.startOffset + ', endContainer: ' + r.endContainer.nodeName + ', endOffset: ' + r.endOffset;\\n      };\\n      var self = {\\n        doc: doc,\\n        settings: settings,\\n        win: win,\\n        files: files,\\n        stdMode: stdMode,\\n        boxModel: boxModel,\\n        styleSheetLoader: styleSheetLoader,\\n        boundEvents: boundEvents,\\n        styles: styles,\\n        schema: schema,\\n        events: events,\\n        isBlock: isBlock,\\n        $: $,\\n        $$: $$,\\n        root: null,\\n        clone: clone,\\n        getRoot: getRoot,\\n        getViewPort: getViewPort,\\n        getRect: getRect,\\n        getSize: getSize,\\n        getParent: getParent,\\n        getParents: getParents,\\n        get: get,\\n        getNext: getNext,\\n        getPrev: getPrev,\\n        select: select,\\n        is: is,\\n        add: add,\\n        create: create,\\n        createHTML: createHTML,\\n        createFragment: createFragment,\\n        remove: remove,\\n        setStyle: setStyle,\\n        getStyle: getStyle,\\n        setStyles: setStyles,\\n        removeAllAttribs: removeAllAttribs,\\n        setAttrib: setAttrib,\\n        setAttribs: setAttribs,\\n        getAttrib: getAttrib,\\n        getPos: getPos,\\n        parseStyle: parseStyle,\\n        serializeStyle: serializeStyle,\\n        addStyle: addStyle,\\n        loadCSS: loadCSS,\\n        addClass: addClass,\\n        removeClass: removeClass,\\n        hasClass: hasClass,\\n        toggleClass: toggleClass,\\n        show: show,\\n        hide: hide,\\n        isHidden: isHidden,\\n        uniqueId: uniqueId,\\n        setHTML: setHTML,\\n        getOuterHTML: getOuterHTML,\\n        setOuterHTML: setOuterHTML,\\n        decode: decode,\\n        encode: encode,\\n        insertAfter: insertAfter,\\n        replace: replace,\\n        rename: rename,\\n        findCommonAncestor: findCommonAncestor,\\n        toHex: toHex,\\n        run: run,\\n        getAttribs: getAttribs,\\n        isEmpty: isEmpty,\\n        createRng: createRng,\\n        nodeIndex: findNodeIndex,\\n        split: split,\\n        bind: bind,\\n        unbind: unbind,\\n        fire: fire,\\n        getContentEditable: getContentEditable,\\n        getContentEditableParent: getContentEditableParent,\\n        destroy: destroy,\\n        isChildOf: isChildOf,\\n        dumpRng: dumpRng\\n      };\\n      attrHooks = setupAttrHooks(styles, settings, function () {\\n        return self;\\n      });\\n      return self;\\n    }\\n    (function (DOMUtils) {\\n      DOMUtils.DOM = DOMUtils(domGlobals.document);\\n      DOMUtils.nodeIndex = findNodeIndex;\\n    }(DOMUtils || (DOMUtils = {})));\\n    var DOMUtils$1 = DOMUtils;\\n\\n    var DOM = DOMUtils$1.DOM;\\n    var each$6 = Tools.each, grep$2 = Tools.grep;\\n    var isFunction$1 = function (f) {\\n      return typeof f === 'function';\\n    };\\n    var ScriptLoader = function () {\\n      var QUEUED = 0;\\n      var LOADING = 1;\\n      var LOADED = 2;\\n      var FAILED = 3;\\n      var states = {};\\n      var queue = [];\\n      var scriptLoadedCallbacks = {};\\n      var queueLoadedCallbacks = [];\\n      var loading = 0;\\n      var loadScript = function (url, success, failure) {\\n        var dom = DOM;\\n        var elm, id;\\n        var done = function () {\\n          dom.remove(id);\\n          if (elm) {\\n            elm.onreadystatechange = elm.onload = elm = null;\\n          }\\n          success();\\n        };\\n        var error = function () {\\n          if (isFunction$1(failure)) {\\n            failure();\\n          } else {\\n            if (typeof console !== 'undefined' && console.log) {\\n              console.log('Failed to load script: ' + url);\\n            }\\n          }\\n        };\\n        id = dom.uniqueId();\\n        elm = domGlobals.document.createElement('script');\\n        elm.id = id;\\n        elm.type = 'text/javascript';\\n        elm.src = Tools._addCacheSuffix(url);\\n        elm.onload = done;\\n        elm.onerror = error;\\n        (domGlobals.document.getElementsByTagName('head')[0] || domGlobals.document.body).appendChild(elm);\\n      };\\n      this.isDone = function (url) {\\n        return states[url] === LOADED;\\n      };\\n      this.markDone = function (url) {\\n        states[url] = LOADED;\\n      };\\n      this.add = this.load = function (url, success, scope, failure) {\\n        var state = states[url];\\n        if (state === undefined) {\\n          queue.push(url);\\n          states[url] = QUEUED;\\n        }\\n        if (success) {\\n          if (!scriptLoadedCallbacks[url]) {\\n            scriptLoadedCallbacks[url] = [];\\n          }\\n          scriptLoadedCallbacks[url].push({\\n            success: success,\\n            failure: failure,\\n            scope: scope || this\\n          });\\n        }\\n      };\\n      this.remove = function (url) {\\n        delete states[url];\\n        delete scriptLoadedCallbacks[url];\\n      };\\n      this.loadQueue = function (success, scope, failure) {\\n        this.loadScripts(queue, success, scope, failure);\\n      };\\n      this.loadScripts = function (scripts, success, scope, failure) {\\n        var loadScripts;\\n        var failures = [];\\n        var execCallbacks = function (name, url) {\\n          each$6(scriptLoadedCallbacks[url], function (callback) {\\n            if (isFunction$1(callback[name])) {\\n              callback[name].call(callback.scope);\\n            }\\n          });\\n          scriptLoadedCallbacks[url] = undefined;\\n        };\\n        queueLoadedCallbacks.push({\\n          success: success,\\n          failure: failure,\\n          scope: scope || this\\n        });\\n        loadScripts = function () {\\n          var loadingScripts = grep$2(scripts);\\n          scripts.length = 0;\\n          each$6(loadingScripts, function (url) {\\n            if (states[url] === LOADED) {\\n              execCallbacks('success', url);\\n              return;\\n            }\\n            if (states[url] === FAILED) {\\n              execCallbacks('failure', url);\\n              return;\\n            }\\n            if (states[url] !== LOADING) {\\n              states[url] = LOADING;\\n              loading++;\\n              loadScript(url, function () {\\n                states[url] = LOADED;\\n                loading--;\\n                execCallbacks('success', url);\\n                loadScripts();\\n              }, function () {\\n                states[url] = FAILED;\\n                loading--;\\n                failures.push(url);\\n                execCallbacks('failure', url);\\n                loadScripts();\\n              });\\n            }\\n          });\\n          if (!loading) {\\n            var notifyCallbacks = queueLoadedCallbacks.slice(0);\\n            queueLoadedCallbacks.length = 0;\\n            each$6(notifyCallbacks, function (callback) {\\n              if (failures.length === 0) {\\n                if (isFunction$1(callback.success)) {\\n                  callback.success.call(callback.scope);\\n                }\\n              } else {\\n                if (isFunction$1(callback.failure)) {\\n                  callback.failure.call(callback.scope, failures);\\n                }\\n              }\\n            });\\n          }\\n        };\\n        loadScripts();\\n      };\\n    };\\n    ScriptLoader.ScriptLoader = new ScriptLoader();\\n\\n    var each$7 = Tools.each;\\n    function AddOnManager() {\\n      var _this = this;\\n      var items = [];\\n      var urls = {};\\n      var lookup = {};\\n      var _listeners = [];\\n      var get = function (name) {\\n        if (lookup[name]) {\\n          return lookup[name].instance;\\n        }\\n        return undefined;\\n      };\\n      var dependencies = function (name) {\\n        var result;\\n        if (lookup[name]) {\\n          result = lookup[name].dependencies;\\n        }\\n        return result || [];\\n      };\\n      var requireLangPack = function (name, languages) {\\n        var language = AddOnManager.language;\\n        if (language && AddOnManager.languageLoad !== false) {\\n          if (languages) {\\n            languages = ',' + languages + ',';\\n            if (languages.indexOf(',' + language.substr(0, 2) + ',') !== -1) {\\n              language = language.substr(0, 2);\\n            } else if (languages.indexOf(',' + language + ',') === -1) {\\n              return;\\n            }\\n          }\\n          ScriptLoader.ScriptLoader.add(urls[name] + '/langs/' + language + '.js');\\n        }\\n      };\\n      var add = function (id, addOn, dependencies) {\\n        items.push(addOn);\\n        lookup[id] = {\\n          instance: addOn,\\n          dependencies: dependencies\\n        };\\n        var result = partition(_listeners, function (listener) {\\n          return listener.name === id;\\n        });\\n        _listeners = result.fail;\\n        each$7(result.pass, function (listener) {\\n          listener.callback();\\n        });\\n        return addOn;\\n      };\\n      var remove = function (name) {\\n        delete urls[name];\\n        delete lookup[name];\\n      };\\n      var createUrl = function (baseUrl, dep) {\\n        if (typeof dep === 'object') {\\n          return dep;\\n        }\\n        return typeof baseUrl === 'string' ? {\\n          prefix: '',\\n          resource: dep,\\n          suffix: ''\\n        } : {\\n          prefix: baseUrl.prefix,\\n          resource: dep,\\n          suffix: baseUrl.suffix\\n        };\\n      };\\n      var addComponents = function (pluginName, scripts) {\\n        var pluginUrl = _this.urls[pluginName];\\n        each$7(scripts, function (script) {\\n          ScriptLoader.ScriptLoader.add(pluginUrl + '/' + script);\\n        });\\n      };\\n      var loadDependencies = function (name, addOnUrl, success, scope) {\\n        var deps = dependencies(name);\\n        each$7(deps, function (dep) {\\n          var newUrl = createUrl(addOnUrl, dep);\\n          load(newUrl.resource, newUrl, undefined, undefined);\\n        });\\n        if (success) {\\n          if (scope) {\\n            success.call(scope);\\n          } else {\\n            success.call(ScriptLoader);\\n          }\\n        }\\n      };\\n      var load = function (name, addOnUrl, success, scope, failure) {\\n        if (urls[name]) {\\n          return;\\n        }\\n        var urlString = typeof addOnUrl === 'string' ? addOnUrl : addOnUrl.prefix + addOnUrl.resource + addOnUrl.suffix;\\n        if (urlString.indexOf('/') !== 0 && urlString.indexOf('://') === -1) {\\n          urlString = AddOnManager.baseURL + '/' + urlString;\\n        }\\n        urls[name] = urlString.substring(0, urlString.lastIndexOf('/'));\\n        if (lookup[name]) {\\n          loadDependencies(name, addOnUrl, success, scope);\\n        } else {\\n          ScriptLoader.ScriptLoader.add(urlString, function () {\\n            return loadDependencies(name, addOnUrl, success, scope);\\n          }, scope, failure);\\n        }\\n      };\\n      var waitFor = function (name, callback) {\\n        if (lookup.hasOwnProperty(name)) {\\n          callback();\\n        } else {\\n          _listeners.push({\\n            name: name,\\n            callback: callback\\n          });\\n        }\\n      };\\n      return {\\n        items: items,\\n        urls: urls,\\n        lookup: lookup,\\n        _listeners: _listeners,\\n        get: get,\\n        dependencies: dependencies,\\n        requireLangPack: requireLangPack,\\n        add: add,\\n        remove: remove,\\n        createUrl: createUrl,\\n        addComponents: addComponents,\\n        load: load,\\n        waitFor: waitFor\\n      };\\n    }\\n    (function (AddOnManager) {\\n      AddOnManager.PluginManager = AddOnManager();\\n      AddOnManager.ThemeManager = AddOnManager();\\n    }(AddOnManager || (AddOnManager = {})));\\n\\n    var before = function (marker, element) {\\n      var parent$1 = parent(marker);\\n      parent$1.each(function (v) {\\n        v.dom().insertBefore(element.dom(), marker.dom());\\n      });\\n    };\\n    var after = function (marker, element) {\\n      var sibling = nextSibling(marker);\\n      sibling.fold(function () {\\n        var parent$1 = parent(marker);\\n        parent$1.each(function (v) {\\n          append(v, element);\\n        });\\n      }, function (v) {\\n        before(v, element);\\n      });\\n    };\\n    var prepend = function (parent, element) {\\n      var firstChild$1 = firstChild(parent);\\n      firstChild$1.fold(function () {\\n        append(parent, element);\\n      }, function (v) {\\n        parent.dom().insertBefore(element.dom(), v.dom());\\n      });\\n    };\\n    var append = function (parent, element) {\\n      parent.dom().appendChild(element.dom());\\n    };\\n    var wrap$1 = function (element, wrapper) {\\n      before(element, wrapper);\\n      append(wrapper, element);\\n    };\\n\\n    var before$1 = function (marker, elements) {\\n      each(elements, function (x) {\\n        before(marker, x);\\n      });\\n    };\\n    var append$1 = function (parent, elements) {\\n      each(elements, function (x) {\\n        append(parent, x);\\n      });\\n    };\\n\\n    var empty = function (element) {\\n      element.dom().textContent = '';\\n      each(children(element), function (rogue) {\\n        remove$1(rogue);\\n      });\\n    };\\n    var remove$1 = function (element) {\\n      var dom = element.dom();\\n      if (dom.parentNode !== null) {\\n        dom.parentNode.removeChild(dom);\\n      }\\n    };\\n    var unwrap = function (wrapper) {\\n      var children$1 = children(wrapper);\\n      if (children$1.length > 0) {\\n        before$1(wrapper, children$1);\\n      }\\n      remove$1(wrapper);\\n    };\\n\\n    var first = function (fn, rate) {\\n      var timer = null;\\n      var cancel = function () {\\n        if (timer !== null) {\\n          domGlobals.clearTimeout(timer);\\n          timer = null;\\n        }\\n      };\\n      var throttle = function () {\\n        var args = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n          args[_i] = arguments[_i];\\n        }\\n        if (timer === null) {\\n          timer = domGlobals.setTimeout(function () {\\n            fn.apply(null, args);\\n            timer = null;\\n          }, rate);\\n        }\\n      };\\n      return {\\n        cancel: cancel,\\n        throttle: throttle\\n      };\\n    };\\n    var last$2 = function (fn, rate) {\\n      var timer = null;\\n      var cancel = function () {\\n        if (timer !== null) {\\n          domGlobals.clearTimeout(timer);\\n          timer = null;\\n        }\\n      };\\n      var throttle = function () {\\n        var args = [];\\n        for (var _i = 0; _i < arguments.length; _i++) {\\n          args[_i] = arguments[_i];\\n        }\\n        if (timer !== null) {\\n          domGlobals.clearTimeout(timer);\\n        }\\n        timer = domGlobals.setTimeout(function () {\\n          fn.apply(null, args);\\n          timer = null;\\n        }, rate);\\n      };\\n      return {\\n        cancel: cancel,\\n        throttle: throttle\\n      };\\n    };\\n\\n    var Cell = function (initial) {\\n      var value = initial;\\n      var get = function () {\\n        return value;\\n      };\\n      var set = function (v) {\\n        value = v;\\n      };\\n      var clone = function () {\\n        return Cell(get());\\n      };\\n      return {\\n        get: get,\\n        set: set,\\n        clone: clone\\n      };\\n    };\\n\\n    var read = function (element, attr) {\\n      var value = get(element, attr);\\n      return value === undefined || value === '' ? [] : value.split(' ');\\n    };\\n    var add = function (element, attr, id) {\\n      var old = read(element, attr);\\n      var nu = old.concat([id]);\\n      set(element, attr, nu.join(' '));\\n      return true;\\n    };\\n    var remove$2 = function (element, attr, id) {\\n      var nu = filter(read(element, attr), function (v) {\\n        return v !== id;\\n      });\\n      if (nu.length > 0) {\\n        set(element, attr, nu.join(' '));\\n      } else {\\n        remove(element, attr);\\n      }\\n      return false;\\n    };\\n\\n    var supports = function (element) {\\n      return element.dom().classList !== undefined;\\n    };\\n    var get$2 = function (element) {\\n      return read(element, 'class');\\n    };\\n    var add$1 = function (element, clazz) {\\n      return add(element, 'class', clazz);\\n    };\\n    var remove$3 = function (element, clazz) {\\n      return remove$2(element, 'class', clazz);\\n    };\\n\\n    var add$2 = function (element, clazz) {\\n      if (supports(element)) {\\n        element.dom().classList.add(clazz);\\n      } else {\\n        add$1(element, clazz);\\n      }\\n    };\\n    var cleanClass = function (element) {\\n      var classList = supports(element) ? element.dom().classList : get$2(element);\\n      if (classList.length === 0) {\\n        remove(element, 'class');\\n      }\\n    };\\n    var remove$4 = function (element, clazz) {\\n      if (supports(element)) {\\n        var classList = element.dom().classList;\\n        classList.remove(clazz);\\n      } else {\\n        remove$3(element, clazz);\\n      }\\n      cleanClass(element);\\n    };\\n    var has$2 = function (element, clazz) {\\n      return supports(element) && element.dom().classList.contains(clazz);\\n    };\\n\\n    var descendants = function (scope, predicate) {\\n      var result = [];\\n      each(children(scope), function (x) {\\n        if (predicate(x)) {\\n          result = result.concat([x]);\\n        }\\n        result = result.concat(descendants(x, predicate));\\n      });\\n      return result;\\n    };\\n\\n    var descendants$1 = function (scope, selector) {\\n      return all(selector, scope);\\n    };\\n\\n    function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {\\n      return is(scope, a) ? Option.some(scope) : isFunction(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot);\\n    }\\n\\n    var ancestor = function (scope, predicate, isRoot) {\\n      var element = scope.dom();\\n      var stop = isFunction(isRoot) ? isRoot : constant(false);\\n      while (element.parentNode) {\\n        element = element.parentNode;\\n        var el = Element.fromDom(element);\\n        if (predicate(el)) {\\n          return Option.some(el);\\n        } else if (stop(el)) {\\n          break;\\n        }\\n      }\\n      return Option.none();\\n    };\\n    var closest = function (scope, predicate, isRoot) {\\n      var is = function (s, test) {\\n        return test(s);\\n      };\\n      return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);\\n    };\\n\\n    var ancestor$1 = function (scope, selector, isRoot) {\\n      return ancestor(scope, function (e) {\\n        return is$1(e, selector);\\n      }, isRoot);\\n    };\\n    var descendant = function (scope, selector) {\\n      return one(selector, scope);\\n    };\\n    var closest$1 = function (scope, selector, isRoot) {\\n      return ClosestOrAncestor(is$1, ancestor$1, scope, selector, isRoot);\\n    };\\n\\n    var annotation = constant('mce-annotation');\\n    var dataAnnotation = constant('data-mce-annotation');\\n    var dataAnnotationId = constant('data-mce-annotation-uid');\\n\\n    var identify = function (editor, annotationName) {\\n      var rng = editor.selection.getRng();\\n      var start = Element.fromDom(rng.startContainer);\\n      var root = Element.fromDom(editor.getBody());\\n      var selector = annotationName.fold(function () {\\n        return '.' + annotation();\\n      }, function (an) {\\n        return '[' + dataAnnotation() + '=\\\"' + an + '\\\"]';\\n      });\\n      var newStart = child(start, rng.startOffset).getOr(start);\\n      var closest = closest$1(newStart, selector, function (n) {\\n        return eq(n, root);\\n      });\\n      var getAttr = function (c, property) {\\n        if (has$1(c, property)) {\\n          return Option.some(get(c, property));\\n        } else {\\n          return Option.none();\\n        }\\n      };\\n      return closest.bind(function (c) {\\n        return getAttr(c, '' + dataAnnotationId()).bind(function (uid) {\\n          return getAttr(c, '' + dataAnnotation()).map(function (name) {\\n            var elements = findMarkers(editor, uid);\\n            return {\\n              uid: uid,\\n              name: name,\\n              elements: elements\\n            };\\n          });\\n        });\\n      });\\n    };\\n    var isAnnotation = function (elem) {\\n      return isElement(elem) && has$2(elem, annotation());\\n    };\\n    var findMarkers = function (editor, uid) {\\n      var body = Element.fromDom(editor.getBody());\\n      return descendants$1(body, '[' + dataAnnotationId() + '=\\\"' + uid + '\\\"]');\\n    };\\n    var findAll = function (editor, name) {\\n      var body = Element.fromDom(editor.getBody());\\n      var markers = descendants$1(body, '[' + dataAnnotation() + '=\\\"' + name + '\\\"]');\\n      var directory = {};\\n      each(markers, function (m) {\\n        var uid = get(m, dataAnnotationId());\\n        var nodesAlready = directory.hasOwnProperty(uid) ? directory[uid] : [];\\n        directory[uid] = nodesAlready.concat([m]);\\n      });\\n      return directory;\\n    };\\n\\n    var setup = function (editor, registry) {\\n      var changeCallbacks = Cell({});\\n      var initData = function () {\\n        return {\\n          listeners: [],\\n          previous: Cell(Option.none())\\n        };\\n      };\\n      var withCallbacks = function (name, f) {\\n        updateCallbacks(name, function (data) {\\n          f(data);\\n          return data;\\n        });\\n      };\\n      var updateCallbacks = function (name, f) {\\n        var callbackMap = changeCallbacks.get();\\n        var data = callbackMap.hasOwnProperty(name) ? callbackMap[name] : initData();\\n        var outputData = f(data);\\n        callbackMap[name] = outputData;\\n        changeCallbacks.set(callbackMap);\\n      };\\n      var fireCallbacks = function (name, uid, elements) {\\n        withCallbacks(name, function (data) {\\n          each(data.listeners, function (f) {\\n            return f(true, name, {\\n              uid: uid,\\n              nodes: map(elements, function (elem) {\\n                return elem.dom();\\n              })\\n            });\\n          });\\n        });\\n      };\\n      var fireNoAnnotation = function (name) {\\n        withCallbacks(name, function (data) {\\n          each(data.listeners, function (f) {\\n            return f(false, name);\\n          });\\n        });\\n      };\\n      var onNodeChange = last$2(function () {\\n        var callbackMap = changeCallbacks.get();\\n        var annotations = sort(keys(callbackMap));\\n        each(annotations, function (name) {\\n          updateCallbacks(name, function (data) {\\n            var prev = data.previous.get();\\n            identify(editor, Option.some(name)).fold(function () {\\n              if (prev.isSome()) {\\n                fireNoAnnotation(name);\\n                data.previous.set(Option.none());\\n              }\\n            }, function (_a) {\\n              var uid = _a.uid, name = _a.name, elements = _a.elements;\\n              if (!prev.is(uid)) {\\n                fireCallbacks(name, uid, elements);\\n                data.previous.set(Option.some(uid));\\n              }\\n            });\\n            return {\\n              previous: data.previous,\\n              listeners: data.listeners\\n            };\\n          });\\n        });\\n      }, 30);\\n      editor.on('remove', function () {\\n        onNodeChange.cancel();\\n      });\\n      editor.on('nodeChange', function () {\\n        onNodeChange.throttle();\\n      });\\n      var addListener = function (name, f) {\\n        updateCallbacks(name, function (data) {\\n          return {\\n            previous: data.previous,\\n            listeners: data.listeners.concat([f])\\n          };\\n        });\\n      };\\n      return { addListener: addListener };\\n    };\\n\\n    var setup$1 = function (editor, registry) {\\n      var identifyParserNode = function (span) {\\n        var optAnnotation = Option.from(span.attributes.map[dataAnnotation()]);\\n        return optAnnotation.bind(registry.lookup);\\n      };\\n      editor.on('init', function () {\\n        editor.serializer.addNodeFilter('span', function (spans) {\\n          each(spans, function (span) {\\n            identifyParserNode(span).each(function (settings) {\\n              if (settings.persistent === false) {\\n                span.unwrap();\\n              }\\n            });\\n          });\\n        });\\n      });\\n    };\\n\\n    var create$1 = function () {\\n      var annotations = {};\\n      var register = function (name, settings) {\\n        annotations[name] = {\\n          name: name,\\n          settings: settings\\n        };\\n      };\\n      var lookup = function (name) {\\n        return annotations.hasOwnProperty(name) ? Option.from(annotations[name]).map(function (a) {\\n          return a.settings;\\n        }) : Option.none();\\n      };\\n      return {\\n        register: register,\\n        lookup: lookup\\n      };\\n    };\\n\\n    var __assign = function () {\\n      __assign = Object.assign || function __assign(t) {\\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\\n          s = arguments[i];\\n          for (var p in s)\\n            if (Object.prototype.hasOwnProperty.call(s, p))\\n              t[p] = s[p];\\n        }\\n        return t;\\n      };\\n      return __assign.apply(this, arguments);\\n    };\\n    function __rest(s, e) {\\n      var t = {};\\n      for (var p in s)\\n        if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\\n          t[p] = s[p];\\n      if (s != null && typeof Object.getOwnPropertySymbols === 'function')\\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\\n            t[p[i]] = s[p[i]];\\n        }\\n      return t;\\n    }\\n    function __spreadArrays() {\\n      for (var s = 0, i = 0, il = arguments.length; i < il; i++)\\n        s += arguments[i].length;\\n      for (var r = Array(s), k = 0, i = 0; i < il; i++)\\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\\n          r[k] = a[j];\\n      return r;\\n    }\\n\\n    var unique = 0;\\n    var generate = function (prefix) {\\n      var date = new Date();\\n      var time = date.getTime();\\n      var random = Math.floor(Math.random() * 1000000000);\\n      unique++;\\n      return prefix + '_' + random + unique + String(time);\\n    };\\n\\n    var add$3 = function (element, classes) {\\n      each(classes, function (x) {\\n        add$2(element, x);\\n      });\\n    };\\n\\n    var clone = function (original, isDeep) {\\n      return Element.fromDom(original.dom().cloneNode(isDeep));\\n    };\\n    var shallow = function (original) {\\n      return clone(original, false);\\n    };\\n    var deep = function (original) {\\n      return clone(original, true);\\n    };\\n\\n    var fromHtml$1 = function (html, scope) {\\n      var doc = scope || domGlobals.document;\\n      var div = doc.createElement('div');\\n      div.innerHTML = html;\\n      return children(Element.fromDom(div));\\n    };\\n\\n    var get$3 = function (element) {\\n      return element.dom().innerHTML;\\n    };\\n    var set$1 = function (element, content) {\\n      var owner$1 = owner(element);\\n      var docDom = owner$1.dom();\\n      var fragment = Element.fromDom(docDom.createDocumentFragment());\\n      var contentElements = fromHtml$1(content, docDom);\\n      append$1(fragment, contentElements);\\n      empty(element);\\n      append(element, fragment);\\n    };\\n\\n    var ZWSP = '\\\\uFEFF';\\n    var isZwsp = function (chr) {\\n      return chr === ZWSP;\\n    };\\n    var trim$3 = function (text) {\\n      return text.replace(new RegExp(ZWSP, 'g'), '');\\n    };\\n    var Zwsp = {\\n      isZwsp: isZwsp,\\n      ZWSP: ZWSP,\\n      trim: trim$3\\n    };\\n\\n    var isElement$2 = NodeType.isElement;\\n    var isText$2 = NodeType.isText;\\n    var isCaretContainerBlock = function (node) {\\n      if (isText$2(node)) {\\n        node = node.parentNode;\\n      }\\n      return isElement$2(node) && node.hasAttribute('data-mce-caret');\\n    };\\n    var isCaretContainerInline = function (node) {\\n      return isText$2(node) && Zwsp.isZwsp(node.data);\\n    };\\n    var isCaretContainer = function (node) {\\n      return isCaretContainerBlock(node) || isCaretContainerInline(node);\\n    };\\n    var hasContent = function (node) {\\n      return node.firstChild !== node.lastChild || !NodeType.isBr(node.firstChild);\\n    };\\n    var insertInline = function (node, before) {\\n      var doc, sibling, textNode, parentNode;\\n      doc = node.ownerDocument;\\n      textNode = doc.createTextNode(Zwsp.ZWSP);\\n      parentNode = node.parentNode;\\n      if (!before) {\\n        sibling = node.nextSibling;\\n        if (isText$2(sibling)) {\\n          if (isCaretContainer(sibling)) {\\n            return sibling;\\n          }\\n          if (startsWithCaretContainer(sibling)) {\\n            sibling.splitText(1);\\n            return sibling;\\n          }\\n        }\\n        if (node.nextSibling) {\\n          parentNode.insertBefore(textNode, node.nextSibling);\\n        } else {\\n          parentNode.appendChild(textNode);\\n        }\\n      } else {\\n        sibling = node.previousSibling;\\n        if (isText$2(sibling)) {\\n          if (isCaretContainer(sibling)) {\\n            return sibling;\\n          }\\n          if (endsWithCaretContainer(sibling)) {\\n            return sibling.splitText(sibling.data.length - 1);\\n          }\\n        }\\n        parentNode.insertBefore(textNode, node);\\n      }\\n      return textNode;\\n    };\\n    var isBeforeInline = function (pos) {\\n      var container = pos.container();\\n      if (!pos || !NodeType.isText(container)) {\\n        return false;\\n      }\\n      return container.data.charAt(pos.offset()) === Zwsp.ZWSP || pos.isAtStart() && isCaretContainerInline(container.previousSibling);\\n    };\\n    var isAfterInline = function (pos) {\\n      var container = pos.container();\\n      if (!pos || !NodeType.isText(container)) {\\n        return false;\\n      }\\n      return container.data.charAt(pos.offset() - 1) === Zwsp.ZWSP || pos.isAtEnd() && isCaretContainerInline(container.nextSibling);\\n    };\\n    var createBogusBr = function () {\\n      var br = domGlobals.document.createElement('br');\\n      br.setAttribute('data-mce-bogus', '1');\\n      return br;\\n    };\\n    var insertBlock = function (blockName, node, before) {\\n      var doc, blockNode, parentNode;\\n      doc = node.ownerDocument;\\n      blockNode = doc.createElement(blockName);\\n      blockNode.setAttribute('data-mce-caret', before ? 'before' : 'after');\\n      blockNode.setAttribute('data-mce-bogus', 'all');\\n      blockNode.appendChild(createBogusBr());\\n      parentNode = node.parentNode;\\n      if (!before) {\\n        if (node.nextSibling) {\\n          parentNode.insertBefore(blockNode, node.nextSibling);\\n        } else {\\n          parentNode.appendChild(blockNode);\\n        }\\n      } else {\\n        parentNode.insertBefore(blockNode, node);\\n      }\\n      return blockNode;\\n    };\\n    var startsWithCaretContainer = function (node) {\\n      return isText$2(node) && node.data[0] === Zwsp.ZWSP;\\n    };\\n    var endsWithCaretContainer = function (node) {\\n      return isText$2(node) && node.data[node.data.length - 1] === Zwsp.ZWSP;\\n    };\\n    var trimBogusBr = function (elm) {\\n      var brs = elm.getElementsByTagName('br');\\n      var lastBr = brs[brs.length - 1];\\n      if (NodeType.isBogus(lastBr)) {\\n        lastBr.parentNode.removeChild(lastBr);\\n      }\\n    };\\n    var showCaretContainerBlock = function (caretContainer) {\\n      if (caretContainer && caretContainer.hasAttribute('data-mce-caret')) {\\n        trimBogusBr(caretContainer);\\n        caretContainer.removeAttribute('data-mce-caret');\\n        caretContainer.removeAttribute('data-mce-bogus');\\n        caretContainer.removeAttribute('style');\\n        caretContainer.removeAttribute('_moz_abspos');\\n        return caretContainer;\\n      }\\n      return null;\\n    };\\n    var isRangeInCaretContainerBlock = function (range) {\\n      return isCaretContainerBlock(range.startContainer);\\n    };\\n\\n    var isContentEditableTrue$1 = NodeType.isContentEditableTrue;\\n    var isContentEditableFalse$1 = NodeType.isContentEditableFalse;\\n    var isBr$2 = NodeType.isBr;\\n    var isText$3 = NodeType.isText;\\n    var isInvalidTextElement = NodeType.matchNodeNames('script style textarea');\\n    var isAtomicInline = NodeType.matchNodeNames('img input textarea hr iframe video audio object');\\n    var isTable$1 = NodeType.matchNodeNames('table');\\n    var isCaretContainer$1 = isCaretContainer;\\n    var isCaretCandidate = function (node) {\\n      if (isCaretContainer$1(node)) {\\n        return false;\\n      }\\n      if (isText$3(node)) {\\n        if (isInvalidTextElement(node.parentNode)) {\\n          return false;\\n        }\\n        return true;\\n      }\\n      return isAtomicInline(node) || isBr$2(node) || isTable$1(node) || isNonUiContentEditableFalse(node);\\n    };\\n    var isUnselectable = function (node) {\\n      return NodeType.isElement(node) && node.getAttribute('unselectable') === 'true';\\n    };\\n    var isNonUiContentEditableFalse = function (node) {\\n      return isUnselectable(node) === false && isContentEditableFalse$1(node);\\n    };\\n    var isInEditable = function (node, root) {\\n      for (node = node.parentNode; node && node !== root; node = node.parentNode) {\\n        if (isNonUiContentEditableFalse(node)) {\\n          return false;\\n        }\\n        if (isContentEditableTrue$1(node)) {\\n          return true;\\n        }\\n      }\\n      return true;\\n    };\\n    var isAtomicContentEditableFalse = function (node) {\\n      if (!isNonUiContentEditableFalse(node)) {\\n        return false;\\n      }\\n      return foldl(from$1(node.getElementsByTagName('*')), function (result, elm) {\\n        return result || isContentEditableTrue$1(elm);\\n      }, false) !== true;\\n    };\\n    var isAtomic = function (node) {\\n      return isAtomicInline(node) || isAtomicContentEditableFalse(node);\\n    };\\n    var isEditableCaretCandidate = function (node, root) {\\n      return isCaretCandidate(node) && isInEditable(node, root);\\n    };\\n\\n    var round = Math.round;\\n    var clone$1 = function (rect) {\\n      if (!rect) {\\n        return {\\n          left: 0,\\n          top: 0,\\n          bottom: 0,\\n          right: 0,\\n          width: 0,\\n          height: 0\\n        };\\n      }\\n      return {\\n        left: round(rect.left),\\n        top: round(rect.top),\\n        bottom: round(rect.bottom),\\n        right: round(rect.right),\\n        width: round(rect.width),\\n        height: round(rect.height)\\n      };\\n    };\\n    var collapse = function (rect, toStart) {\\n      rect = clone$1(rect);\\n      if (toStart) {\\n        rect.right = rect.left;\\n      } else {\\n        rect.left = rect.left + rect.width;\\n        rect.right = rect.left;\\n      }\\n      rect.width = 0;\\n      return rect;\\n    };\\n    var isEqual = function (rect1, rect2) {\\n      return rect1.left === rect2.left && rect1.top === rect2.top && rect1.bottom === rect2.bottom && rect1.right === rect2.right;\\n    };\\n    var isValidOverflow = function (overflowY, rect1, rect2) {\\n      return overflowY >= 0 && overflowY <= Math.min(rect1.height, rect2.height) / 2;\\n    };\\n    var isAbove = function (rect1, rect2) {\\n      var halfHeight = Math.min(rect2.height / 2, rect1.height / 2);\\n      if (rect1.bottom - halfHeight < rect2.top) {\\n        return true;\\n      }\\n      if (rect1.top > rect2.bottom) {\\n        return false;\\n      }\\n      return isValidOverflow(rect2.top - rect1.bottom, rect1, rect2);\\n    };\\n    var isBelow = function (rect1, rect2) {\\n      if (rect1.top > rect2.bottom) {\\n        return true;\\n      }\\n      if (rect1.bottom < rect2.top) {\\n        return false;\\n      }\\n      return isValidOverflow(rect2.bottom - rect1.top, rect1, rect2);\\n    };\\n    var containsXY = function (rect, clientX, clientY) {\\n      return clientX >= rect.left && clientX <= rect.right && clientY >= rect.top && clientY <= rect.bottom;\\n    };\\n    var overflowX = function (outer, inner) {\\n      if (inner.left > outer.left && inner.right < outer.right) {\\n        return 0;\\n      } else {\\n        return inner.left < outer.left ? inner.left - outer.left : inner.right - outer.right;\\n      }\\n    };\\n    var overflowY = function (outer, inner) {\\n      if (inner.top > outer.top && inner.bottom < outer.bottom) {\\n        return 0;\\n      } else {\\n        return inner.top < outer.top ? inner.top - outer.top : inner.bottom - outer.bottom;\\n      }\\n    };\\n    var getOverflow = function (outer, inner) {\\n      return {\\n        x: overflowX(outer, inner),\\n        y: overflowY(outer, inner)\\n      };\\n    };\\n\\n    var getSelectedNode = function (range) {\\n      var startContainer = range.startContainer, startOffset = range.startOffset;\\n      if (startContainer.hasChildNodes() && range.endOffset === startOffset + 1) {\\n        return startContainer.childNodes[startOffset];\\n      }\\n      return null;\\n    };\\n    var getNode = function (container, offset) {\\n      if (container.nodeType === 1 && container.hasChildNodes()) {\\n        if (offset >= container.childNodes.length) {\\n          offset = container.childNodes.length - 1;\\n        }\\n        container = container.childNodes[offset];\\n      }\\n      return container;\\n    };\\n\\n    var extendingChars = new RegExp('[\\\\u0300-\\\\u036f\\\\u0483-\\\\u0487\\\\u0488-\\\\u0489\\\\u0591-\\\\u05bd\\\\u05bf\\\\u05c1-\\\\u05c2\\\\u05c4-\\\\u05c5\\\\u05c7\\\\u0610-\\\\u061a' + '\\\\u064b-\\\\u065f\\\\u0670\\\\u06d6-\\\\u06dc\\\\u06df-\\\\u06e4\\\\u06e7-\\\\u06e8\\\\u06ea-\\\\u06ed\\\\u0711\\\\u0730-\\\\u074a\\\\u07a6-\\\\u07b0' + '\\\\u07eb-\\\\u07f3\\\\u0816-\\\\u0819\\\\u081b-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082d\\\\u0859-\\\\u085b\\\\u08e3-\\\\u0902\\\\u093a\\\\u093c' + '\\\\u0941-\\\\u0948\\\\u094d\\\\u0951-\\\\u0957\\\\u0962-\\\\u0963\\\\u0981\\\\u09bc\\\\u09be\\\\u09c1-\\\\u09c4\\\\u09cd\\\\u09d7\\\\u09e2-\\\\u09e3' + '\\\\u0a01-\\\\u0a02\\\\u0a3c\\\\u0a41-\\\\u0a42\\\\u0a47-\\\\u0a48\\\\u0a4b-\\\\u0a4d\\\\u0a51\\\\u0a70-\\\\u0a71\\\\u0a75\\\\u0a81-\\\\u0a82\\\\u0abc' + '\\\\u0ac1-\\\\u0ac5\\\\u0ac7-\\\\u0ac8\\\\u0acd\\\\u0ae2-\\\\u0ae3\\\\u0b01\\\\u0b3c\\\\u0b3e\\\\u0b3f\\\\u0b41-\\\\u0b44\\\\u0b4d\\\\u0b56\\\\u0b57' + '\\\\u0b62-\\\\u0b63\\\\u0b82\\\\u0bbe\\\\u0bc0\\\\u0bcd\\\\u0bd7\\\\u0c00\\\\u0c3e-\\\\u0c40\\\\u0c46-\\\\u0c48\\\\u0c4a-\\\\u0c4d\\\\u0c55-\\\\u0c56' + '\\\\u0c62-\\\\u0c63\\\\u0c81\\\\u0cbc\\\\u0cbf\\\\u0cc2\\\\u0cc6\\\\u0ccc-\\\\u0ccd\\\\u0cd5-\\\\u0cd6\\\\u0ce2-\\\\u0ce3\\\\u0d01\\\\u0d3e\\\\u0d41-\\\\u0d44' + '\\\\u0d4d\\\\u0d57\\\\u0d62-\\\\u0d63\\\\u0dca\\\\u0dcf\\\\u0dd2-\\\\u0dd4\\\\u0dd6\\\\u0ddf\\\\u0e31\\\\u0e34-\\\\u0e3a\\\\u0e47-\\\\u0e4e\\\\u0eb1\\\\u0eb4-\\\\u0eb9' + '\\\\u0ebb-\\\\u0ebc\\\\u0ec8-\\\\u0ecd\\\\u0f18-\\\\u0f19\\\\u0f35\\\\u0f37\\\\u0f39\\\\u0f71-\\\\u0f7e\\\\u0f80-\\\\u0f84\\\\u0f86-\\\\u0f87\\\\u0f8d-\\\\u0f97' + '\\\\u0f99-\\\\u0fbc\\\\u0fc6\\\\u102d-\\\\u1030\\\\u1032-\\\\u1037\\\\u1039-\\\\u103a\\\\u103d-\\\\u103e\\\\u1058-\\\\u1059\\\\u105e-\\\\u1060\\\\u1071-\\\\u1074' + '\\\\u1082\\\\u1085-\\\\u1086\\\\u108d\\\\u109d\\\\u135d-\\\\u135f\\\\u1712-\\\\u1714\\\\u1732-\\\\u1734\\\\u1752-\\\\u1753\\\\u1772-\\\\u1773\\\\u17b4-\\\\u17b5' + '\\\\u17b7-\\\\u17bd\\\\u17c6\\\\u17c9-\\\\u17d3\\\\u17dd\\\\u180b-\\\\u180d\\\\u18a9\\\\u1920-\\\\u1922\\\\u1927-\\\\u1928\\\\u1932\\\\u1939-\\\\u193b\\\\u1a17-\\\\u1a18' + '\\\\u1a1b\\\\u1a56\\\\u1a58-\\\\u1a5e\\\\u1a60\\\\u1a62\\\\u1a65-\\\\u1a6c\\\\u1a73-\\\\u1a7c\\\\u1a7f\\\\u1ab0-\\\\u1abd\\\\u1ABE\\\\u1b00-\\\\u1b03\\\\u1b34' + '\\\\u1b36-\\\\u1b3a\\\\u1b3c\\\\u1b42\\\\u1b6b-\\\\u1b73\\\\u1b80-\\\\u1b81\\\\u1ba2-\\\\u1ba5\\\\u1ba8-\\\\u1ba9\\\\u1bab-\\\\u1bad\\\\u1be6\\\\u1be8-\\\\u1be9' + '\\\\u1bed\\\\u1bef-\\\\u1bf1\\\\u1c2c-\\\\u1c33\\\\u1c36-\\\\u1c37\\\\u1cd0-\\\\u1cd2\\\\u1cd4-\\\\u1ce0\\\\u1ce2-\\\\u1ce8\\\\u1ced\\\\u1cf4\\\\u1cf8-\\\\u1cf9' + '\\\\u1dc0-\\\\u1df5\\\\u1dfc-\\\\u1dff\\\\u200c-\\\\u200d\\\\u20d0-\\\\u20dc\\\\u20DD-\\\\u20E0\\\\u20e1\\\\u20E2-\\\\u20E4\\\\u20e5-\\\\u20f0\\\\u2cef-\\\\u2cf1' + '\\\\u2d7f\\\\u2de0-\\\\u2dff\\\\u302a-\\\\u302d\\\\u302e-\\\\u302f\\\\u3099-\\\\u309a\\\\ua66f\\\\uA670-\\\\uA672\\\\ua674-\\\\ua67d\\\\ua69e-\\\\ua69f\\\\ua6f0-\\\\ua6f1' + '\\\\ua802\\\\ua806\\\\ua80b\\\\ua825-\\\\ua826\\\\ua8c4\\\\ua8e0-\\\\ua8f1\\\\ua926-\\\\ua92d\\\\ua947-\\\\ua951\\\\ua980-\\\\ua982\\\\ua9b3\\\\ua9b6-\\\\ua9b9\\\\ua9bc' + '\\\\ua9e5\\\\uaa29-\\\\uaa2e\\\\uaa31-\\\\uaa32\\\\uaa35-\\\\uaa36\\\\uaa43\\\\uaa4c\\\\uaa7c\\\\uaab0\\\\uaab2-\\\\uaab4\\\\uaab7-\\\\uaab8\\\\uaabe-\\\\uaabf\\\\uaac1' + '\\\\uaaec-\\\\uaaed\\\\uaaf6\\\\uabe5\\\\uabe8\\\\uabed\\\\ufb1e\\\\ufe00-\\\\ufe0f\\\\ufe20-\\\\ufe2f\\\\uff9e-\\\\uff9f]');\\n    var isExtendingChar = function (ch) {\\n      return typeof ch === 'string' && ch.charCodeAt(0) >= 768 && extendingChars.test(ch);\\n    };\\n\\n    var lift2 = function (oa, ob, f) {\\n      return oa.isSome() && ob.isSome() ? Option.some(f(oa.getOrDie(), ob.getOrDie())) : Option.none();\\n    };\\n    var lift3 = function (oa, ob, oc, f) {\\n      return oa.isSome() && ob.isSome() && oc.isSome() ? Option.some(f(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Option.none();\\n    };\\n\\n    var slice$2 = [].slice;\\n    var or = function () {\\n      var x = [];\\n      for (var _i = 0; _i < arguments.length; _i++) {\\n        x[_i] = arguments[_i];\\n      }\\n      var args = slice$2.call(arguments);\\n      return function (x) {\\n        for (var i = 0; i < args.length; i++) {\\n          if (args[i](x)) {\\n            return true;\\n          }\\n        }\\n        return false;\\n      };\\n    };\\n    var and = function () {\\n      var x = [];\\n      for (var _i = 0; _i < arguments.length; _i++) {\\n        x[_i] = arguments[_i];\\n      }\\n      var args = slice$2.call(arguments);\\n      return function (x) {\\n        for (var i = 0; i < args.length; i++) {\\n          if (!args[i](x)) {\\n            return false;\\n          }\\n        }\\n        return true;\\n      };\\n    };\\n    var Predicate = {\\n      and: and,\\n      or: or\\n    };\\n\\n    var isElement$3 = NodeType.isElement;\\n    var isCaretCandidate$1 = isCaretCandidate;\\n    var isBlock$1 = NodeType.matchStyleValues('display', 'block table');\\n    var isFloated = NodeType.matchStyleValues('float', 'left right');\\n    var isValidElementCaretCandidate = Predicate.and(isElement$3, isCaretCandidate$1, not(isFloated));\\n    var isNotPre = not(NodeType.matchStyleValues('white-space', 'pre pre-line pre-wrap'));\\n    var isText$4 = NodeType.isText;\\n    var isBr$3 = NodeType.isBr;\\n    var nodeIndex = DOMUtils$1.nodeIndex;\\n    var resolveIndex = getNode;\\n    var createRange = function (doc) {\\n      return 'createRange' in doc ? doc.createRange() : DOMUtils$1.DOM.createRng();\\n    };\\n    var isWhiteSpace = function (chr) {\\n      return chr && /[\\\\r\\\\n\\\\t ]/.test(chr);\\n    };\\n    var isRange = function (rng) {\\n      return !!rng.setStart && !!rng.setEnd;\\n    };\\n    var isHiddenWhiteSpaceRange = function (range) {\\n      var container = range.startContainer;\\n      var offset = range.startOffset;\\n      var text;\\n      if (isWhiteSpace(range.toString()) && isNotPre(container.parentNode) && NodeType.isText(container)) {\\n        text = container.data;\\n        if (isWhiteSpace(text[offset - 1]) || isWhiteSpace(text[offset + 1])) {\\n          return true;\\n        }\\n      }\\n      return false;\\n    };\\n    var getBrClientRect = function (brNode) {\\n      var doc = brNode.ownerDocument;\\n      var rng = createRange(doc);\\n      var nbsp = doc.createTextNode('\\\\xA0');\\n      var parentNode = brNode.parentNode;\\n      var clientRect;\\n      parentNode.insertBefore(nbsp, brNode);\\n      rng.setStart(nbsp, 0);\\n      rng.setEnd(nbsp, 1);\\n      clientRect = clone$1(rng.getBoundingClientRect());\\n      parentNode.removeChild(nbsp);\\n      return clientRect;\\n    };\\n    var getBoundingClientRectWebKitText = function (rng) {\\n      var sc = rng.startContainer;\\n      var ec = rng.endContainer;\\n      var so = rng.startOffset;\\n      var eo = rng.endOffset;\\n      if (sc === ec && NodeType.isText(ec) && so === 0 && eo === 1) {\\n        var newRng = rng.cloneRange();\\n        newRng.setEndAfter(ec);\\n        return getBoundingClientRect(newRng);\\n      } else {\\n        return null;\\n      }\\n    };\\n    var isZeroRect = function (r) {\\n      return r.left === 0 && r.right === 0 && r.top === 0 && r.bottom === 0;\\n    };\\n    var getBoundingClientRect = function (item) {\\n      var clientRect, clientRects;\\n      clientRects = item.getClientRects();\\n      if (clientRects.length > 0) {\\n        clientRect = clone$1(clientRects[0]);\\n      } else {\\n        clientRect = clone$1(item.getBoundingClientRect());\\n      }\\n      if (!isRange(item) && isBr$3(item) && isZeroRect(clientRect)) {\\n        return getBrClientRect(item);\\n      }\\n      if (isZeroRect(clientRect) && isRange(item)) {\\n        return getBoundingClientRectWebKitText(item);\\n      }\\n      return clientRect;\\n    };\\n    var collapseAndInflateWidth = function (clientRect, toStart) {\\n      var newClientRect = collapse(clientRect, toStart);\\n      newClientRect.width = 1;\\n      newClientRect.right = newClientRect.left + 1;\\n      return newClientRect;\\n    };\\n    var getCaretPositionClientRects = function (caretPosition) {\\n      var clientRects = [];\\n      var beforeNode, node;\\n      var addUniqueAndValidRect = function (clientRect) {\\n        if (clientRect.height === 0) {\\n          return;\\n        }\\n        if (clientRects.length > 0) {\\n          if (isEqual(clientRect, clientRects[clientRects.length - 1])) {\\n            return;\\n          }\\n        }\\n        clientRects.push(clientRect);\\n      };\\n      var addCharacterOffset = function (container, offset) {\\n        var range = createRange(container.ownerDocument);\\n        if (offset < container.data.length) {\\n          if (isExtendingChar(container.data[offset])) {\\n            return clientRects;\\n          }\\n          if (isExtendingChar(container.data[offset - 1])) {\\n            range.setStart(container, offset);\\n            range.setEnd(container, offset + 1);\\n            if (!isHiddenWhiteSpaceRange(range)) {\\n              addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range), false));\\n              return clientRects;\\n            }\\n          }\\n        }\\n        if (offset > 0) {\\n          range.setStart(container, offset - 1);\\n          range.setEnd(container, offset);\\n          if (!isHiddenWhiteSpaceRange(range)) {\\n            addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range), false));\\n          }\\n        }\\n        if (offset < container.data.length) {\\n          range.setStart(container, offset);\\n          range.setEnd(container, offset + 1);\\n          if (!isHiddenWhiteSpaceRange(range)) {\\n            addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range), true));\\n          }\\n        }\\n      };\\n      if (isText$4(caretPosition.container())) {\\n        addCharacterOffset(caretPosition.container(), caretPosition.offset());\\n        return clientRects;\\n      }\\n      if (isElement$3(caretPosition.container())) {\\n        if (caretPosition.isAtEnd()) {\\n          node = resolveIndex(caretPosition.container(), caretPosition.offset());\\n          if (isText$4(node)) {\\n            addCharacterOffset(node, node.data.length);\\n          }\\n          if (isValidElementCaretCandidate(node) && !isBr$3(node)) {\\n            addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), false));\\n          }\\n        } else {\\n          node = resolveIndex(caretPosition.container(), caretPosition.offset());\\n          if (isText$4(node)) {\\n            addCharacterOffset(node, 0);\\n          }\\n          if (isValidElementCaretCandidate(node) && caretPosition.isAtEnd()) {\\n            addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), false));\\n            return clientRects;\\n          }\\n          beforeNode = resolveIndex(caretPosition.container(), caretPosition.offset() - 1);\\n          if (isValidElementCaretCandidate(beforeNode) && !isBr$3(beforeNode)) {\\n            if (isBlock$1(beforeNode) || isBlock$1(node) || !isValidElementCaretCandidate(node)) {\\n              addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(beforeNode), false));\\n            }\\n          }\\n          if (isValidElementCaretCandidate(node)) {\\n            addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), true));\\n          }\\n        }\\n      }\\n      return clientRects;\\n    };\\n    function CaretPosition(container, offset, clientRects) {\\n      var isAtStart = function () {\\n        if (isText$4(container)) {\\n          return offset === 0;\\n        }\\n        return offset === 0;\\n      };\\n      var isAtEnd = function () {\\n        if (isText$4(container)) {\\n          return offset >= container.data.length;\\n        }\\n        return offset >= container.childNodes.length;\\n      };\\n      var toRange = function () {\\n        var range;\\n        range = createRange(container.ownerDocument);\\n        range.setStart(container, offset);\\n        range.setEnd(container, offset);\\n        return range;\\n      };\\n      var getClientRects = function () {\\n        if (!clientRects) {\\n          clientRects = getCaretPositionClientRects(CaretPosition(container, offset));\\n        }\\n        return clientRects;\\n      };\\n      var isVisible = function () {\\n        return getClientRects().length > 0;\\n      };\\n      var isEqual = function (caretPosition) {\\n        return caretPosition && container === caretPosition.container() && offset === caretPosition.offset();\\n      };\\n      var getNode = function (before) {\\n        return resolveIndex(container, before ? offset - 1 : offset);\\n      };\\n      return {\\n        container: constant(container),\\n        offset: constant(offset),\\n        toRange: toRange,\\n        getClientRects: getClientRects,\\n        isVisible: isVisible,\\n        isAtStart: isAtStart,\\n        isAtEnd: isAtEnd,\\n        isEqual: isEqual,\\n        getNode: getNode\\n      };\\n    }\\n    (function (CaretPosition) {\\n      CaretPosition.fromRangeStart = function (range) {\\n        return CaretPosition(range.startContainer, range.startOffset);\\n      };\\n      CaretPosition.fromRangeEnd = function (range) {\\n        return CaretPosition(range.endContainer, range.endOffset);\\n      };\\n      CaretPosition.after = function (node) {\\n        return CaretPosition(node.parentNode, nodeIndex(node) + 1);\\n      };\\n      CaretPosition.before = function (node) {\\n        return CaretPosition(node.parentNode, nodeIndex(node));\\n      };\\n      CaretPosition.isAbove = function (pos1, pos2) {\\n        return lift2(head(pos2.getClientRects()), last(pos1.getClientRects()), isAbove).getOr(false);\\n      };\\n      CaretPosition.isBelow = function (pos1, pos2) {\\n        return lift2(last(pos2.getClientRects()), head(pos1.getClientRects()), isBelow).getOr(false);\\n      };\\n      CaretPosition.isAtStart = function (pos) {\\n        return pos ? pos.isAtStart() : false;\\n      };\\n      CaretPosition.isAtEnd = function (pos) {\\n        return pos ? pos.isAtEnd() : false;\\n      };\\n      CaretPosition.isTextPosition = function (pos) {\\n        return pos ? NodeType.isText(pos.container()) : false;\\n      };\\n      CaretPosition.isElementPosition = function (pos) {\\n        return CaretPosition.isTextPosition(pos) === false;\\n      };\\n    }(CaretPosition || (CaretPosition = {})));\\n    var CaretPosition$1 = CaretPosition;\\n\\n    var isText$5 = NodeType.isText;\\n    var isBogus$1 = NodeType.isBogus;\\n    var nodeIndex$1 = DOMUtils$1.nodeIndex;\\n    var normalizedParent = function (node) {\\n      var parentNode = node.parentNode;\\n      if (isBogus$1(parentNode)) {\\n        return normalizedParent(parentNode);\\n      }\\n      return parentNode;\\n    };\\n    var getChildNodes = function (node) {\\n      if (!node) {\\n        return [];\\n      }\\n      return ArrUtils.reduce(node.childNodes, function (result, node) {\\n        if (isBogus$1(node) && node.nodeName !== 'BR') {\\n          result = result.concat(getChildNodes(node));\\n        } else {\\n          result.push(node);\\n        }\\n        return result;\\n      }, []);\\n    };\\n    var normalizedTextOffset = function (node, offset) {\\n      while (node = node.previousSibling) {\\n        if (!isText$5(node)) {\\n          break;\\n        }\\n        offset += node.data.length;\\n      }\\n      return offset;\\n    };\\n    var equal = function (a) {\\n      return function (b) {\\n        return a === b;\\n      };\\n    };\\n    var normalizedNodeIndex = function (node) {\\n      var nodes, index, numTextFragments;\\n      nodes = getChildNodes(normalizedParent(node));\\n      index = ArrUtils.findIndex(nodes, equal(node), node);\\n      nodes = nodes.slice(0, index + 1);\\n      numTextFragments = ArrUtils.reduce(nodes, function (result, node, i) {\\n        if (isText$5(node) && isText$5(nodes[i - 1])) {\\n          result++;\\n        }\\n        return result;\\n      }, 0);\\n      nodes = ArrUtils.filter(nodes, NodeType.matchNodeNames(node.nodeName));\\n      index = ArrUtils.findIndex(nodes, equal(node), node);\\n      return index - numTextFragments;\\n    };\\n    var createPathItem = function (node) {\\n      var name;\\n      if (isText$5(node)) {\\n        name = 'text()';\\n      } else {\\n        name = node.nodeName.toLowerCase();\\n      }\\n      return name + '[' + normalizedNodeIndex(node) + ']';\\n    };\\n    var parentsUntil = function (root, node, predicate) {\\n      var parents = [];\\n      for (node = node.parentNode; node !== root; node = node.parentNode) {\\n        if (predicate && predicate(node)) {\\n          break;\\n        }\\n        parents.push(node);\\n      }\\n      return parents;\\n    };\\n    var create$2 = function (root, caretPosition) {\\n      var container, offset, path = [], outputOffset, childNodes, parents;\\n      container = caretPosition.container();\\n      offset = caretPosition.offset();\\n      if (isText$5(container)) {\\n        outputOffset = normalizedTextOffset(container, offset);\\n      } else {\\n        childNodes = container.childNodes;\\n        if (offset >= childNodes.length) {\\n          outputOffset = 'after';\\n          offset = childNodes.length - 1;\\n        } else {\\n          outputOffset = 'before';\\n        }\\n        container = childNodes[offset];\\n      }\\n      path.push(createPathItem(container));\\n      parents = parentsUntil(root, container);\\n      parents = ArrUtils.filter(parents, not(NodeType.isBogus));\\n      path = path.concat(ArrUtils.map(parents, function (node) {\\n        return createPathItem(node);\\n      }));\\n      return path.reverse().join('/') + ',' + outputOffset;\\n    };\\n    var resolvePathItem = function (node, name, index) {\\n      var nodes = getChildNodes(node);\\n      nodes = ArrUtils.filter(nodes, function (node, index) {\\n        return !isText$5(node) || !isText$5(nodes[index - 1]);\\n      });\\n      nodes = ArrUtils.filter(nodes, NodeType.matchNodeNames(name));\\n      return nodes[index];\\n    };\\n    var findTextPosition = function (container, offset) {\\n      var node = container, targetOffset = 0, dataLen;\\n      while (isText$5(node)) {\\n        dataLen = node.data.length;\\n        if (offset >= targetOffset && offset <= targetOffset + dataLen) {\\n          container = node;\\n          offset = offset - targetOffset;\\n          break;\\n        }\\n        if (!isText$5(node.nextSibling)) {\\n          container = node;\\n          offset = dataLen;\\n          break;\\n        }\\n        targetOffset += dataLen;\\n        node = node.nextSibling;\\n      }\\n      if (isText$5(container) && offset > container.data.length) {\\n        offset = container.data.length;\\n      }\\n      return CaretPosition$1(container, offset);\\n    };\\n    var resolve$2 = function (root, path) {\\n      var parts, container, offset;\\n      if (!path) {\\n        return null;\\n      }\\n      parts = path.split(',');\\n      path = parts[0].split('/');\\n      offset = parts.length > 1 ? parts[1] : 'before';\\n      container = ArrUtils.reduce(path, function (result, value) {\\n        value = /([\\\\w\\\\-\\\\(\\\\)]+)\\\\[([0-9]+)\\\\]/.exec(value);\\n        if (!value) {\\n          return null;\\n        }\\n        if (value[1] === 'text()') {\\n          value[1] = '#text';\\n        }\\n        return resolvePathItem(result, value[1], parseInt(value[2], 10));\\n      }, root);\\n      if (!container) {\\n        return null;\\n      }\\n      if (!isText$5(container)) {\\n        if (offset === 'after') {\\n          offset = nodeIndex$1(container) + 1;\\n        } else {\\n          offset = nodeIndex$1(container);\\n        }\\n        return CaretPosition$1(container.parentNode, offset);\\n      }\\n      return findTextPosition(container, parseInt(offset, 10));\\n    };\\n\\n    var trimEmptyTextNode = function (dom, node) {\\n      if (NodeType.isText(node) && node.data.length === 0) {\\n        dom.remove(node);\\n      }\\n    };\\n    var insertNode = function (dom, rng, node) {\\n      rng.insertNode(node);\\n      trimEmptyTextNode(dom, node.previousSibling);\\n      trimEmptyTextNode(dom, node.nextSibling);\\n    };\\n    var insertFragment = function (dom, rng, frag) {\\n      var firstChild = Option.from(frag.firstChild);\\n      var lastChild = Option.from(frag.lastChild);\\n      rng.insertNode(frag);\\n      firstChild.each(function (child) {\\n        return trimEmptyTextNode(dom, child.previousSibling);\\n      });\\n      lastChild.each(function (child) {\\n        return trimEmptyTextNode(dom, child.nextSibling);\\n      });\\n    };\\n    var rangeInsertNode = function (dom, rng, node) {\\n      if (NodeType.isDocumentFragment(node)) {\\n        insertFragment(dom, rng, node);\\n      } else {\\n        insertNode(dom, rng, node);\\n      }\\n    };\\n\\n    var isContentEditableFalse$2 = NodeType.isContentEditableFalse;\\n    var getNormalizedTextOffset = function (trim, container, offset) {\\n      var node, trimmedOffset;\\n      trimmedOffset = trim(container.data.slice(0, offset)).length;\\n      for (node = container.previousSibling; node && NodeType.isText(node); node = node.previousSibling) {\\n        trimmedOffset += trim(node.data).length;\\n      }\\n      return trimmedOffset;\\n    };\\n    var getPoint = function (dom, trim, normalized, rng, start) {\\n      var container = rng[start ? 'startContainer' : 'endContainer'];\\n      var offset = rng[start ? 'startOffset' : 'endOffset'];\\n      var point = [];\\n      var childNodes, after = 0;\\n      var root = dom.getRoot();\\n      if (NodeType.isText(container)) {\\n        point.push(normalized ? getNormalizedTextOffset(trim, container, offset) : offset);\\n      } else {\\n        childNodes = container.childNodes;\\n        if (offset >= childNodes.length && childNodes.length) {\\n          after = 1;\\n          offset = Math.max(0, childNodes.length - 1);\\n        }\\n        point.push(dom.nodeIndex(childNodes[offset], normalized) + after);\\n      }\\n      for (; container && container !== root; container = container.parentNode) {\\n        point.push(dom.nodeIndex(container, normalized));\\n      }\\n      return point;\\n    };\\n    var getLocation = function (trim, selection, normalized, rng) {\\n      var dom = selection.dom, bookmark = {};\\n      bookmark.start = getPoint(dom, trim, normalized, rng, true);\\n      if (!selection.isCollapsed()) {\\n        bookmark.end = getPoint(dom, trim, normalized, rng, false);\\n      }\\n      return bookmark;\\n    };\\n    var findIndex$2 = function (dom, name, element) {\\n      var count = 0;\\n      Tools.each(dom.select(name), function (node) {\\n        if (node.getAttribute('data-mce-bogus') === 'all') {\\n          return;\\n        }\\n        if (node === element) {\\n          return false;\\n        }\\n        count++;\\n      });\\n      return count;\\n    };\\n    var moveEndPoint = function (rng, start) {\\n      var container, offset, childNodes;\\n      var prefix = start ? 'start' : 'end';\\n      container = rng[prefix + 'Container'];\\n      offset = rng[prefix + 'Offset'];\\n      if (NodeType.isElement(container) && container.nodeName === 'TR') {\\n        childNodes = container.childNodes;\\n        container = childNodes[Math.min(start ? offset : offset - 1, childNodes.length - 1)];\\n        if (container) {\\n          offset = start ? 0 : container.childNodes.length;\\n          rng['set' + (start ? 'Start' : 'End')](container, offset);\\n        }\\n      }\\n    };\\n    var normalizeTableCellSelection = function (rng) {\\n      moveEndPoint(rng, true);\\n      moveEndPoint(rng, false);\\n      return rng;\\n    };\\n    var findSibling = function (node, offset) {\\n      var sibling;\\n      if (NodeType.isElement(node)) {\\n        node = getNode(node, offset);\\n        if (isContentEditableFalse$2(node)) {\\n          return node;\\n        }\\n      }\\n      if (isCaretContainer(node)) {\\n        if (NodeType.isText(node) && isCaretContainerBlock(node)) {\\n          node = node.parentNode;\\n        }\\n        sibling = node.previousSibling;\\n        if (isContentEditableFalse$2(sibling)) {\\n          return sibling;\\n        }\\n        sibling = node.nextSibling;\\n        if (isContentEditableFalse$2(sibling)) {\\n          return sibling;\\n        }\\n      }\\n    };\\n    var findAdjacentContentEditableFalseElm = function (rng) {\\n      return findSibling(rng.startContainer, rng.startOffset) || findSibling(rng.endContainer, rng.endOffset);\\n    };\\n    var getOffsetBookmark = function (trim, normalized, selection) {\\n      var element = selection.getNode();\\n      var name = element ? element.nodeName : null;\\n      var rng = selection.getRng();\\n      if (isContentEditableFalse$2(element) || name === 'IMG') {\\n        return {\\n          name: name,\\n          index: findIndex$2(selection.dom, name, element)\\n        };\\n      }\\n      var sibling = findAdjacentContentEditableFalseElm(rng);\\n      if (sibling) {\\n        name = sibling.tagName;\\n        return {\\n          name: name,\\n          index: findIndex$2(selection.dom, name, sibling)\\n        };\\n      }\\n      return getLocation(trim, selection, normalized, rng);\\n    };\\n    var getCaretBookmark = function (selection) {\\n      var rng = selection.getRng();\\n      return {\\n        start: create$2(selection.dom.getRoot(), CaretPosition$1.fromRangeStart(rng)),\\n        end: create$2(selection.dom.getRoot(), CaretPosition$1.fromRangeEnd(rng))\\n      };\\n    };\\n    var getRangeBookmark = function (selection) {\\n      return { rng: selection.getRng() };\\n    };\\n    var createBookmarkSpan = function (dom, id, filled) {\\n      var args = {\\n        'data-mce-type': 'bookmark',\\n        'id': id,\\n        'style': 'overflow:hidden;line-height:0px'\\n      };\\n      return filled ? dom.create('span', args, '&#xFEFF;') : dom.create('span', args);\\n    };\\n    var getPersistentBookmark = function (selection, filled) {\\n      var dom = selection.dom;\\n      var rng = selection.getRng();\\n      var id = dom.uniqueId();\\n      var collapsed = selection.isCollapsed();\\n      var element = selection.getNode();\\n      var name = element.nodeName;\\n      if (name === 'IMG') {\\n        return {\\n          name: name,\\n          index: findIndex$2(dom, name, element)\\n        };\\n      }\\n      var rng2 = normalizeTableCellSelection(rng.cloneRange());\\n      if (!collapsed) {\\n        rng2.collapse(false);\\n        var endBookmarkNode = createBookmarkSpan(dom, id + '_end', filled);\\n        rangeInsertNode(dom, rng2, endBookmarkNode);\\n      }\\n      rng = normalizeTableCellSelection(rng);\\n      rng.collapse(true);\\n      var startBookmarkNode = createBookmarkSpan(dom, id + '_start', filled);\\n      rangeInsertNode(dom, rng, startBookmarkNode);\\n      selection.moveToBookmark({\\n        id: id,\\n        keep: 1\\n      });\\n      return { id: id };\\n    };\\n    var getBookmark = function (selection, type, normalized) {\\n      if (type === 2) {\\n        return getOffsetBookmark(Zwsp.trim, normalized, selection);\\n      } else if (type === 3) {\\n        return getCaretBookmark(selection);\\n      } else if (type) {\\n        return getRangeBookmark(selection);\\n      } else {\\n        return getPersistentBookmark(selection, false);\\n      }\\n    };\\n    var GetBookmark = {\\n      getBookmark: getBookmark,\\n      getUndoBookmark: curry(getOffsetBookmark, identity, true),\\n      getPersistentBookmark: getPersistentBookmark\\n    };\\n\\n    var CARET_ID = '_mce_caret';\\n    var isCaretNode = function (node) {\\n      return NodeType.isElement(node) && node.id === CARET_ID;\\n    };\\n    var getParentCaretContainer = function (body, node) {\\n      while (node && node !== body) {\\n        if (node.id === CARET_ID) {\\n          return node;\\n        }\\n        node = node.parentNode;\\n      }\\n      return null;\\n    };\\n\\n    var isElement$4 = NodeType.isElement;\\n    var isText$6 = NodeType.isText;\\n    var removeNode = function (node) {\\n      var parentNode = node.parentNode;\\n      if (parentNode) {\\n        parentNode.removeChild(node);\\n      }\\n    };\\n    var getNodeValue = function (node) {\\n      try {\\n        return node.nodeValue;\\n      } catch (ex) {\\n        return '';\\n      }\\n    };\\n    var setNodeValue = function (node, text) {\\n      if (text.length === 0) {\\n        removeNode(node);\\n      } else {\\n        node.nodeValue = text;\\n      }\\n    };\\n    var trimCount = function (text) {\\n      var trimmedText = Zwsp.trim(text);\\n      return {\\n        count: text.length - trimmedText.length,\\n        text: trimmedText\\n      };\\n    };\\n    var removeUnchanged = function (caretContainer, pos) {\\n      remove$5(caretContainer);\\n      return pos;\\n    };\\n    var removeTextAndReposition = function (caretContainer, pos) {\\n      var before = trimCount(caretContainer.data.substr(0, pos.offset()));\\n      var after = trimCount(caretContainer.data.substr(pos.offset()));\\n      var text = before.text + after.text;\\n      if (text.length > 0) {\\n        setNodeValue(caretContainer, text);\\n        return CaretPosition$1(caretContainer, pos.offset() - before.count);\\n      } else {\\n        return pos;\\n      }\\n    };\\n    var removeElementAndReposition = function (caretContainer, pos) {\\n      var parentNode = pos.container();\\n      var newPosition = indexOf(from$1(parentNode.childNodes), caretContainer).map(function (index) {\\n        return index < pos.offset() ? CaretPosition$1(parentNode, pos.offset() - 1) : pos;\\n      }).getOr(pos);\\n      remove$5(caretContainer);\\n      return newPosition;\\n    };\\n    var removeTextCaretContainer = function (caretContainer, pos) {\\n      return isText$6(caretContainer) && pos.container() === caretContainer ? removeTextAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\\n    };\\n    var removeElementCaretContainer = function (caretContainer, pos) {\\n      return pos.container() === caretContainer.parentNode ? removeElementAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\\n    };\\n    var removeAndReposition = function (container, pos) {\\n      return CaretPosition$1.isTextPosition(pos) ? removeTextCaretContainer(container, pos) : removeElementCaretContainer(container, pos);\\n    };\\n    var remove$5 = function (caretContainerNode) {\\n      if (isElement$4(caretContainerNode) && isCaretContainer(caretContainerNode)) {\\n        if (hasContent(caretContainerNode)) {\\n          caretContainerNode.removeAttribute('data-mce-caret');\\n        } else {\\n          removeNode(caretContainerNode);\\n        }\\n      }\\n      if (isText$6(caretContainerNode)) {\\n        var text = Zwsp.trim(getNodeValue(caretContainerNode));\\n        setNodeValue(caretContainerNode, text);\\n      }\\n    };\\n    var CaretContainerRemove = {\\n      removeAndReposition: removeAndReposition,\\n      remove: remove$5\\n    };\\n\\n    var browser$2 = PlatformDetection$1.detect().browser;\\n    var isContentEditableFalse$3 = NodeType.isContentEditableFalse;\\n    var isTableCell$1 = function (node) {\\n      return NodeType.isElement(node) && /^(TD|TH)$/i.test(node.tagName);\\n    };\\n    var getAbsoluteClientRect = function (root, element, before) {\\n      var clientRect = collapse(element.getBoundingClientRect(), before);\\n      var docElm, scrollX, scrollY, margin, rootRect;\\n      if (root.tagName === 'BODY') {\\n        docElm = root.ownerDocument.documentElement;\\n        scrollX = root.scrollLeft || docElm.scrollLeft;\\n        scrollY = root.scrollTop || docElm.scrollTop;\\n      } else {\\n        rootRect = root.getBoundingClientRect();\\n        scrollX = root.scrollLeft - rootRect.left;\\n        scrollY = root.scrollTop - rootRect.top;\\n      }\\n      clientRect.left += scrollX;\\n      clientRect.right += scrollX;\\n      clientRect.top += scrollY;\\n      clientRect.bottom += scrollY;\\n      clientRect.width = 1;\\n      margin = element.offsetWidth - element.clientWidth;\\n      if (margin > 0) {\\n        if (before) {\\n          margin *= -1;\\n        }\\n        clientRect.left += margin;\\n        clientRect.right += margin;\\n      }\\n      return clientRect;\\n    };\\n    var trimInlineCaretContainers = function (root) {\\n      var contentEditableFalseNodes, node, sibling, i, data;\\n      contentEditableFalseNodes = DomQuery('*[contentEditable=false]', root);\\n      for (i = 0; i < contentEditableFalseNodes.length; i++) {\\n        node = contentEditableFalseNodes[i];\\n        sibling = node.previousSibling;\\n        if (endsWithCaretContainer(sibling)) {\\n          data = sibling.data;\\n          if (data.length === 1) {\\n            sibling.parentNode.removeChild(sibling);\\n          } else {\\n            sibling.deleteData(data.length - 1, 1);\\n          }\\n        }\\n        sibling = node.nextSibling;\\n        if (startsWithCaretContainer(sibling)) {\\n          data = sibling.data;\\n          if (data.length === 1) {\\n            sibling.parentNode.removeChild(sibling);\\n          } else {\\n            sibling.deleteData(0, 1);\\n          }\\n        }\\n      }\\n    };\\n    var FakeCaret = function (root, isBlock, hasFocus) {\\n      var lastVisualCaret = Cell(Option.none());\\n      var cursorInterval, caretContainerNode;\\n      var show = function (before, element) {\\n        var clientRect, rng;\\n        hide();\\n        if (isTableCell$1(element)) {\\n          return null;\\n        }\\n        if (isBlock(element)) {\\n          caretContainerNode = insertBlock('p', element, before);\\n          clientRect = getAbsoluteClientRect(root, element, before);\\n          DomQuery(caretContainerNode).css('top', clientRect.top);\\n          var caret = DomQuery('<div class=\\\"mce-visual-caret\\\" data-mce-bogus=\\\"all\\\"></div>').css(clientRect).appendTo(root)[0];\\n          lastVisualCaret.set(Option.some({\\n            caret: caret,\\n            element: element,\\n            before: before\\n          }));\\n          lastVisualCaret.get().each(function (caretState) {\\n            if (before) {\\n              DomQuery(caretState.caret).addClass('mce-visual-caret-before');\\n            }\\n          });\\n          startBlink();\\n          rng = element.ownerDocument.createRange();\\n          rng.setStart(caretContainerNode, 0);\\n          rng.setEnd(caretContainerNode, 0);\\n        } else {\\n          caretContainerNode = insertInline(element, before);\\n          rng = element.ownerDocument.createRange();\\n          if (isContentEditableFalse$3(caretContainerNode.nextSibling)) {\\n            rng.setStart(caretContainerNode, 0);\\n            rng.setEnd(caretContainerNode, 0);\\n          } else {\\n            rng.setStart(caretContainerNode, 1);\\n            rng.setEnd(caretContainerNode, 1);\\n          }\\n          return rng;\\n        }\\n        return rng;\\n      };\\n      var hide = function () {\\n        trimInlineCaretContainers(root);\\n        if (caretContainerNode) {\\n          CaretContainerRemove.remove(caretContainerNode);\\n          caretContainerNode = null;\\n        }\\n        lastVisualCaret.get().each(function (caretState) {\\n          DomQuery(caretState.caret).remove();\\n          lastVisualCaret.set(Option.none());\\n        });\\n        clearInterval(cursorInterval);\\n      };\\n      var startBlink = function () {\\n        cursorInterval = Delay.setInterval(function () {\\n          if (hasFocus()) {\\n            DomQuery('div.mce-visual-caret', root).toggleClass('mce-visual-caret-hidden');\\n          } else {\\n            DomQuery('div.mce-visual-caret', root).addClass('mce-visual-caret-hidden');\\n          }\\n        }, 500);\\n      };\\n      var reposition = function () {\\n        lastVisualCaret.get().each(function (caretState) {\\n          var clientRect = getAbsoluteClientRect(root, caretState.element, caretState.before);\\n          DomQuery(caretState.caret).css(clientRect);\\n        });\\n      };\\n      var destroy = function () {\\n        return Delay.clearInterval(cursorInterval);\\n      };\\n      var getCss = function () {\\n        return '.mce-visual-caret {' + 'position: absolute;' + 'background-color: black;' + 'background-color: currentcolor;' + '}' + '.mce-visual-caret-hidden {' + 'display: none;' + '}' + '*[data-mce-caret] {' + 'position: absolute;' + 'left: -1000px;' + 'right: auto;' + 'top: 0;' + 'margin: 0;' + 'padding: 0;' + '}';\\n      };\\n      return {\\n        show: show,\\n        hide: hide,\\n        getCss: getCss,\\n        reposition: reposition,\\n        destroy: destroy\\n      };\\n    };\\n    var isFakeCaretTableBrowser = function () {\\n      return browser$2.isIE() || browser$2.isEdge() || browser$2.isFirefox();\\n    };\\n    var isFakeCaretTarget = function (node) {\\n      return isContentEditableFalse$3(node) || NodeType.isTable(node) && isFakeCaretTableBrowser();\\n    };\\n\\n    var isContentEditableFalse$4 = NodeType.isContentEditableFalse;\\n    var isBlockLike = NodeType.matchStyleValues('display', 'block table table-cell table-caption list-item');\\n    var isCaretContainer$2 = isCaretContainer;\\n    var isCaretContainerBlock$1 = isCaretContainerBlock;\\n    var isElement$5 = NodeType.isElement;\\n    var isCaretCandidate$2 = isCaretCandidate;\\n    var isForwards = function (direction) {\\n      return direction > 0;\\n    };\\n    var isBackwards = function (direction) {\\n      return direction < 0;\\n    };\\n    var skipCaretContainers = function (walk, shallow) {\\n      var node;\\n      while (node = walk(shallow)) {\\n        if (!isCaretContainerBlock$1(node)) {\\n          return node;\\n        }\\n      }\\n      return null;\\n    };\\n    var findNode = function (node, direction, predicateFn, rootNode, shallow) {\\n      var walker = new TreeWalker(node, rootNode);\\n      if (isBackwards(direction)) {\\n        if (isContentEditableFalse$4(node) || isCaretContainerBlock$1(node)) {\\n          node = skipCaretContainers(walker.prev, true);\\n          if (predicateFn(node)) {\\n            return node;\\n          }\\n        }\\n        while (node = skipCaretContainers(walker.prev, shallow)) {\\n          if (predicateFn(node)) {\\n            return node;\\n          }\\n        }\\n      }\\n      if (isForwards(direction)) {\\n        if (isContentEditableFalse$4(node) || isCaretContainerBlock$1(node)) {\\n          node = skipCaretContainers(walker.next, true);\\n          if (predicateFn(node)) {\\n            return node;\\n          }\\n        }\\n        while (node = skipCaretContainers(walker.next, shallow)) {\\n          if (predicateFn(node)) {\\n            return node;\\n          }\\n        }\\n      }\\n      return null;\\n    };\\n    var getParentBlock = function (node, rootNode) {\\n      while (node && node !== rootNode) {\\n        if (isBlockLike(node)) {\\n          return node;\\n        }\\n        node = node.parentNode;\\n      }\\n      return null;\\n    };\\n    var isInSameBlock = function (caretPosition1, caretPosition2, rootNode) {\\n      return getParentBlock(caretPosition1.container(), rootNode) === getParentBlock(caretPosition2.container(), rootNode);\\n    };\\n    var getChildNodeAtRelativeOffset = function (relativeOffset, caretPosition) {\\n      var container, offset;\\n      if (!caretPosition) {\\n        return null;\\n      }\\n      container = caretPosition.container();\\n      offset = caretPosition.offset();\\n      if (!isElement$5(container)) {\\n        return null;\\n      }\\n      return container.childNodes[offset + relativeOffset];\\n    };\\n    var beforeAfter = function (before, node) {\\n      var range = node.ownerDocument.createRange();\\n      if (before) {\\n        range.setStartBefore(node);\\n        range.setEndBefore(node);\\n      } else {\\n        range.setStartAfter(node);\\n        range.setEndAfter(node);\\n      }\\n      return range;\\n    };\\n    var isNodesInSameBlock = function (root, node1, node2) {\\n      return getParentBlock(node1, root) === getParentBlock(node2, root);\\n    };\\n    var lean = function (left, root, node) {\\n      var sibling, siblingName;\\n      if (left) {\\n        siblingName = 'previousSibling';\\n      } else {\\n        siblingName = 'nextSibling';\\n      }\\n      while (node && node !== root) {\\n        sibling = node[siblingName];\\n        if (isCaretContainer$2(sibling)) {\\n          sibling = sibling[siblingName];\\n        }\\n        if (isContentEditableFalse$4(sibling)) {\\n          if (isNodesInSameBlock(root, sibling, node)) {\\n            return sibling;\\n          }\\n          break;\\n        }\\n        if (isCaretCandidate$2(sibling)) {\\n          break;\\n        }\\n        node = node.parentNode;\\n      }\\n      return null;\\n    };\\n    var before$2 = curry(beforeAfter, true);\\n    var after$1 = curry(beforeAfter, false);\\n    var normalizeRange = function (direction, root, range) {\\n      var node, container, offset, location;\\n      var leanLeft = curry(lean, true, root);\\n      var leanRight = curry(lean, false, root);\\n      container = range.startContainer;\\n      offset = range.startOffset;\\n      if (isCaretContainerBlock(container)) {\\n        if (!isElement$5(container)) {\\n          container = container.parentNode;\\n        }\\n        location = container.getAttribute('data-mce-caret');\\n        if (location === 'before') {\\n          node = container.nextSibling;\\n          if (isFakeCaretTarget(node)) {\\n            return before$2(node);\\n          }\\n        }\\n        if (location === 'after') {\\n          node = container.previousSibling;\\n          if (isFakeCaretTarget(node)) {\\n            return after$1(node);\\n          }\\n        }\\n      }\\n      if (!range.collapsed) {\\n        return range;\\n      }\\n      if (NodeType.isText(container)) {\\n        if (isCaretContainer$2(container)) {\\n          if (direction === 1) {\\n            node = leanRight(container);\\n            if (node) {\\n              return before$2(node);\\n            }\\n            node = leanLeft(container);\\n            if (node) {\\n              return after$1(node);\\n            }\\n          }\\n          if (direction === -1) {\\n            node = leanLeft(container);\\n            if (node) {\\n              return after$1(node);\\n            }\\n            node = leanRight(container);\\n            if (node) {\\n              return before$2(node);\\n            }\\n          }\\n          return range;\\n        }\\n        if (endsWithCaretContainer(container) && offset >= container.data.length - 1) {\\n          if (direction === 1) {\\n            node = leanRight(container);\\n            if (node) {\\n              return before$2(node);\\n            }\\n          }\\n          return range;\\n        }\\n        if (startsWithCaretContainer(container) && offset <= 1) {\\n          if (direction === -1) {\\n            node = leanLeft(container);\\n            if (node) {\\n              return after$1(node);\\n            }\\n          }\\n          return range;\\n        }\\n        if (offset === container.data.length) {\\n          node = leanRight(container);\\n          if (node) {\\n            return before$2(node);\\n          }\\n          return range;\\n        }\\n        if (offset === 0) {\\n          node = leanLeft(container);\\n          if (node) {\\n            return after$1(node);\\n          }\\n          return range;\\n        }\\n      }\\n      return range;\\n    };\\n    var getRelativeCefElm = function (forward, caretPosition) {\\n      return Option.from(getChildNodeAtRelativeOffset(forward ? 0 : -1, caretPosition)).filter(isContentEditableFalse$4);\\n    };\\n    var getNormalizedRangeEndPoint = function (direction, root, range) {\\n      var normalizedRange = normalizeRange(direction, root, range);\\n      if (direction === -1) {\\n        return CaretPosition.fromRangeStart(normalizedRange);\\n      }\\n      return CaretPosition.fromRangeEnd(normalizedRange);\\n    };\\n    var getElementFromPosition = function (pos) {\\n      return Option.from(pos.getNode()).map(Element.fromDom);\\n    };\\n    var getElementFromPrevPosition = function (pos) {\\n      return Option.from(pos.getNode(true)).map(Element.fromDom);\\n    };\\n    var getVisualCaretPosition = function (walkFn, caretPosition) {\\n      while (caretPosition = walkFn(caretPosition)) {\\n        if (caretPosition.isVisible()) {\\n          return caretPosition;\\n        }\\n      }\\n      return caretPosition;\\n    };\\n    var isMoveInsideSameBlock = function (from, to) {\\n      var inSameBlock = isInSameBlock(from, to);\\n      if (!inSameBlock && NodeType.isBr(from.getNode())) {\\n        return true;\\n      }\\n      return inSameBlock;\\n    };\\n\\n    var HDirection;\\n    (function (HDirection) {\\n      HDirection[HDirection['Backwards'] = -1] = 'Backwards';\\n      HDirection[HDirection['Forwards'] = 1] = 'Forwards';\\n    }(HDirection || (HDirection = {})));\\n    var isContentEditableFalse$5 = NodeType.isContentEditableFalse;\\n    var isText$7 = NodeType.isText;\\n    var isElement$6 = NodeType.isElement;\\n    var isBr$4 = NodeType.isBr;\\n    var isCaretCandidate$3 = isCaretCandidate;\\n    var isAtomic$1 = isAtomic;\\n    var isEditableCaretCandidate$1 = isEditableCaretCandidate;\\n    var getParents = function (node, root) {\\n      var parents = [];\\n      while (node && node !== root) {\\n        parents.push(node);\\n        node = node.parentNode;\\n      }\\n      return parents;\\n    };\\n    var nodeAtIndex = function (container, offset) {\\n      if (container.hasChildNodes() && offset < container.childNodes.length) {\\n        return container.childNodes[offset];\\n      }\\n      return null;\\n    };\\n    var getCaretCandidatePosition = function (direction, node) {\\n      if (isForwards(direction)) {\\n        if (isCaretCandidate$3(node.previousSibling) && !isText$7(node.previousSibling)) {\\n          return CaretPosition$1.before(node);\\n        }\\n        if (isText$7(node)) {\\n          return CaretPosition$1(node, 0);\\n        }\\n      }\\n      if (isBackwards(direction)) {\\n        if (isCaretCandidate$3(node.nextSibling) && !isText$7(node.nextSibling)) {\\n          return CaretPosition$1.after(node);\\n        }\\n        if (isText$7(node)) {\\n          return CaretPosition$1(node, node.data.length);\\n        }\\n      }\\n      if (isBackwards(direction)) {\\n        if (isBr$4(node)) {\\n          return CaretPosition$1.before(node);\\n        }\\n        return CaretPosition$1.after(node);\\n      }\\n      return CaretPosition$1.before(node);\\n    };\\n    var moveForwardFromBr = function (root, nextNode) {\\n      var nextSibling = nextNode.nextSibling;\\n      if (nextSibling && isCaretCandidate$3(nextSibling)) {\\n        if (isText$7(nextSibling)) {\\n          return CaretPosition$1(nextSibling, 0);\\n        } else {\\n          return CaretPosition$1.before(nextSibling);\\n        }\\n      } else {\\n        return findCaretPosition(HDirection.Forwards, CaretPosition$1.after(nextNode), root);\\n      }\\n    };\\n    var findCaretPosition = function (direction, startPos, root) {\\n      var node, nextNode, innerNode;\\n      var rootContentEditableFalseElm, caretPosition;\\n      if (!isElement$6(root) || !startPos) {\\n        return null;\\n      }\\n      if (startPos.isEqual(CaretPosition$1.after(root)) && root.lastChild) {\\n        caretPosition = CaretPosition$1.after(root.lastChild);\\n        if (isBackwards(direction) && isCaretCandidate$3(root.lastChild) && isElement$6(root.lastChild)) {\\n          return isBr$4(root.lastChild) ? CaretPosition$1.before(root.lastChild) : caretPosition;\\n        }\\n      } else {\\n        caretPosition = startPos;\\n      }\\n      var container = caretPosition.container();\\n      var offset = caretPosition.offset();\\n      if (isText$7(container)) {\\n        if (isBackwards(direction) && offset > 0) {\\n          return CaretPosition$1(container, --offset);\\n        }\\n        if (isForwards(direction) && offset < container.length) {\\n          return CaretPosition$1(container, ++offset);\\n        }\\n        node = container;\\n      } else {\\n        if (isBackwards(direction) && offset > 0) {\\n          nextNode = nodeAtIndex(container, offset - 1);\\n          if (isCaretCandidate$3(nextNode)) {\\n            if (!isAtomic$1(nextNode)) {\\n              innerNode = findNode(nextNode, direction, isEditableCaretCandidate$1, nextNode);\\n              if (innerNode) {\\n                if (isText$7(innerNode)) {\\n                  return CaretPosition$1(innerNode, innerNode.data.length);\\n                }\\n                return CaretPosition$1.after(innerNode);\\n              }\\n            }\\n            if (isText$7(nextNode)) {\\n              return CaretPosition$1(nextNode, nextNode.data.length);\\n            }\\n            return CaretPosition$1.before(nextNode);\\n          }\\n        }\\n        if (isForwards(direction) && offset < container.childNodes.length) {\\n          nextNode = nodeAtIndex(container, offset);\\n          if (isCaretCandidate$3(nextNode)) {\\n            if (isBr$4(nextNode)) {\\n              return moveForwardFromBr(root, nextNode);\\n            }\\n            if (!isAtomic$1(nextNode)) {\\n              innerNode = findNode(nextNode, direction, isEditableCaretCandidate$1, nextNode);\\n              if (innerNode) {\\n                if (isText$7(innerNode)) {\\n                  return CaretPosition$1(innerNode, 0);\\n                }\\n                return CaretPosition$1.before(innerNode);\\n              }\\n            }\\n            if (isText$7(nextNode)) {\\n              return CaretPosition$1(nextNode, 0);\\n            }\\n            return CaretPosition$1.after(nextNode);\\n          }\\n        }\\n        node = nextNode ? nextNode : caretPosition.getNode();\\n      }\\n      if (isForwards(direction) && caretPosition.isAtEnd() || isBackwards(direction) && caretPosition.isAtStart()) {\\n        node = findNode(node, direction, constant(true), root, true);\\n        if (isEditableCaretCandidate$1(node, root)) {\\n          return getCaretCandidatePosition(direction, node);\\n        }\\n      }\\n      nextNode = findNode(node, direction, isEditableCaretCandidate$1, root);\\n      rootContentEditableFalseElm = ArrUtils.last(filter(getParents(container, root), isContentEditableFalse$5));\\n      if (rootContentEditableFalseElm && (!nextNode || !rootContentEditableFalseElm.contains(nextNode))) {\\n        if (isForwards(direction)) {\\n          caretPosition = CaretPosition$1.after(rootContentEditableFalseElm);\\n        } else {\\n          caretPosition = CaretPosition$1.before(rootContentEditableFalseElm);\\n        }\\n        return caretPosition;\\n      }\\n      if (nextNode) {\\n        return getCaretCandidatePosition(direction, nextNode);\\n      }\\n      return null;\\n    };\\n    var CaretWalker = function (root) {\\n      return {\\n        next: function (caretPosition) {\\n          return findCaretPosition(HDirection.Forwards, caretPosition, root);\\n        },\\n        prev: function (caretPosition) {\\n          return findCaretPosition(HDirection.Backwards, caretPosition, root);\\n        }\\n      };\\n    };\\n\\n    var walkToPositionIn = function (forward, root, start) {\\n      var position = forward ? CaretPosition$1.before(start) : CaretPosition$1.after(start);\\n      return fromPosition(forward, root, position);\\n    };\\n    var afterElement = function (node) {\\n      return NodeType.isBr(node) ? CaretPosition$1.before(node) : CaretPosition$1.after(node);\\n    };\\n    var isBeforeOrStart = function (position) {\\n      if (CaretPosition$1.isTextPosition(position)) {\\n        return position.offset() === 0;\\n      } else {\\n        return isCaretCandidate(position.getNode());\\n      }\\n    };\\n    var isAfterOrEnd = function (position) {\\n      if (CaretPosition$1.isTextPosition(position)) {\\n        var container = position.container();\\n        return position.offset() === container.data.length;\\n      } else {\\n        return isCaretCandidate(position.getNode(true));\\n      }\\n    };\\n    var isBeforeAfterSameElement = function (from, to) {\\n      return !CaretPosition$1.isTextPosition(from) && !CaretPosition$1.isTextPosition(to) && from.getNode() === to.getNode(true);\\n    };\\n    var isAtBr = function (position) {\\n      return !CaretPosition$1.isTextPosition(position) && NodeType.isBr(position.getNode());\\n    };\\n    var shouldSkipPosition = function (forward, from, to) {\\n      if (forward) {\\n        return !isBeforeAfterSameElement(from, to) && !isAtBr(from) && isAfterOrEnd(from) && isBeforeOrStart(to);\\n      } else {\\n        return !isBeforeAfterSameElement(to, from) && isBeforeOrStart(from) && isAfterOrEnd(to);\\n      }\\n    };\\n    var fromPosition = function (forward, root, pos) {\\n      var walker = CaretWalker(root);\\n      return Option.from(forward ? walker.next(pos) : walker.prev(pos));\\n    };\\n    var navigate = function (forward, root, from) {\\n      return fromPosition(forward, root, from).bind(function (to) {\\n        if (isInSameBlock(from, to, root) && shouldSkipPosition(forward, from, to)) {\\n          return fromPosition(forward, root, to);\\n        } else {\\n          return Option.some(to);\\n        }\\n      });\\n    };\\n    var navigateIgnore = function (forward, root, from, ignoreFilter) {\\n      return navigate(forward, root, from).bind(function (pos) {\\n        return ignoreFilter(pos) ? navigateIgnore(forward, root, pos, ignoreFilter) : Option.some(pos);\\n      });\\n    };\\n    var positionIn = function (forward, element) {\\n      var startNode = forward ? element.firstChild : element.lastChild;\\n      if (NodeType.isText(startNode)) {\\n        return Option.some(CaretPosition$1(startNode, forward ? 0 : startNode.data.length));\\n      } else if (startNode) {\\n        if (isCaretCandidate(startNode)) {\\n          return Option.some(forward ? CaretPosition$1.before(startNode) : afterElement(startNode));\\n        } else {\\n          return walkToPositionIn(forward, element, startNode);\\n        }\\n      } else {\\n        return Option.none();\\n      }\\n    };\\n    var nextPosition = curry(fromPosition, true);\\n    var prevPosition = curry(fromPosition, false);\\n    var CaretFinder = {\\n      fromPosition: fromPosition,\\n      nextPosition: nextPosition,\\n      prevPosition: prevPosition,\\n      navigate: navigate,\\n      navigateIgnore: navigateIgnore,\\n      positionIn: positionIn,\\n      firstPositionIn: curry(positionIn, true),\\n      lastPositionIn: curry(positionIn, false)\\n    };\\n\\n    var isStringPathBookmark = function (bookmark) {\\n      return typeof bookmark.start === 'string';\\n    };\\n    var isRangeBookmark = function (bookmark) {\\n      return bookmark.hasOwnProperty('rng');\\n    };\\n    var isIdBookmark = function (bookmark) {\\n      return bookmark.hasOwnProperty('id');\\n    };\\n    var isIndexBookmark = function (bookmark) {\\n      return bookmark.hasOwnProperty('name');\\n    };\\n    var isPathBookmark = function (bookmark) {\\n      return Tools.isArray(bookmark.start);\\n    };\\n\\n    var addBogus = function (dom, node) {\\n      if (NodeType.isElement(node) && dom.isBlock(node) && !node.innerHTML && !Env.ie) {\\n        node.innerHTML = '<br data-mce-bogus=\\\"1\\\" />';\\n      }\\n      return node;\\n    };\\n    var resolveCaretPositionBookmark = function (dom, bookmark) {\\n      var rng, pos;\\n      rng = dom.createRng();\\n      pos = resolve$2(dom.getRoot(), bookmark.start);\\n      rng.setStart(pos.container(), pos.offset());\\n      pos = resolve$2(dom.getRoot(), bookmark.end);\\n      rng.setEnd(pos.container(), pos.offset());\\n      return rng;\\n    };\\n    var insertZwsp = function (node, rng) {\\n      var textNode = node.ownerDocument.createTextNode(Zwsp.ZWSP);\\n      node.appendChild(textNode);\\n      rng.setStart(textNode, 0);\\n      rng.setEnd(textNode, 0);\\n    };\\n    var isEmpty = function (node) {\\n      return node.hasChildNodes() === false;\\n    };\\n    var tryFindRangePosition = function (node, rng) {\\n      return CaretFinder.lastPositionIn(node).fold(function () {\\n        return false;\\n      }, function (pos) {\\n        rng.setStart(pos.container(), pos.offset());\\n        rng.setEnd(pos.container(), pos.offset());\\n        return true;\\n      });\\n    };\\n    var padEmptyCaretContainer = function (root, node, rng) {\\n      if (isEmpty(node) && getParentCaretContainer(root, node)) {\\n        insertZwsp(node, rng);\\n        return true;\\n      } else {\\n        return false;\\n      }\\n    };\\n    var setEndPoint = function (dom, start, bookmark, rng) {\\n      var point = bookmark[start ? 'start' : 'end'];\\n      var i, node, offset, children;\\n      var root = dom.getRoot();\\n      if (point) {\\n        offset = point[0];\\n        for (node = root, i = point.length - 1; i >= 1; i--) {\\n          children = node.childNodes;\\n          if (padEmptyCaretContainer(root, node, rng)) {\\n            return true;\\n          }\\n          if (point[i] > children.length - 1) {\\n            if (padEmptyCaretContainer(root, node, rng)) {\\n              return true;\\n            }\\n            return tryFindRangePosition(node, rng);\\n          }\\n          node = children[point[i]];\\n        }\\n        if (node.nodeType === 3) {\\n          offset = Math.min(point[0], node.nodeValue.length);\\n        }\\n        if (node.nodeType === 1) {\\n          offset = Math.min(point[0], node.childNodes.length);\\n        }\\n        if (start) {\\n          rng.setStart(node, offset);\\n        } else {\\n          rng.setEnd(node, offset);\\n        }\\n      }\\n      return true;\\n    };\\n    var isValidTextNode = function (node) {\\n      return NodeType.isText(node) && node.data.length > 0;\\n    };\\n    var restoreEndPoint = function (dom, suffix, bookmark) {\\n      var marker = dom.get(bookmark.id + '_' + suffix), node, idx, next, prev;\\n      var keep = bookmark.keep;\\n      var container, offset;\\n      if (marker) {\\n        node = marker.parentNode;\\n        if (suffix === 'start') {\\n          if (!keep) {\\n            idx = dom.nodeIndex(marker);\\n          } else {\\n            if (marker.hasChildNodes()) {\\n              node = marker.firstChild;\\n              idx = 1;\\n            } else if (isValidTextNode(marker.nextSibling)) {\\n              node = marker.nextSibling;\\n              idx = 0;\\n            } else if (isValidTextNode(marker.previousSibling)) {\\n              node = marker.previousSibling;\\n              idx = marker.previousSibling.data.length;\\n            } else {\\n              node = marker.parentNode;\\n              idx = dom.nodeIndex(marker) + 1;\\n            }\\n          }\\n          container = node;\\n          offset = idx;\\n        } else {\\n          if (!keep) {\\n            idx = dom.nodeIndex(marker);\\n          } else {\\n            if (marker.hasChildNodes()) {\\n              node = marker.firstChild;\\n              idx = 1;\\n            } else if (isValidTextNode(marker.previousSibling)) {\\n              node = marker.previousSibling;\\n              idx = marker.previousSibling.data.length;\\n            } else {\\n              node = marker.parentNode;\\n              idx = dom.nodeIndex(marker);\\n            }\\n          }\\n          container = node;\\n          offset = idx;\\n        }\\n        if (!keep) {\\n          prev = marker.previousSibling;\\n          next = marker.nextSibling;\\n          Tools.each(Tools.grep(marker.childNodes), function (node) {\\n            if (NodeType.isText(node)) {\\n              node.nodeValue = node.nodeValue.replace(/\\\\uFEFF/g, '');\\n            }\\n          });\\n          while (marker = dom.get(bookmark.id + '_' + suffix)) {\\n            dom.remove(marker, true);\\n          }\\n          if (prev && next && prev.nodeType === next.nodeType && NodeType.isText(prev) && !Env.opera) {\\n            idx = prev.nodeValue.length;\\n            prev.appendData(next.nodeValue);\\n            dom.remove(next);\\n            if (suffix === 'start') {\\n              container = prev;\\n              offset = idx;\\n            } else {\\n              container = prev;\\n              offset = idx;\\n            }\\n          }\\n        }\\n        return Option.some(CaretPosition$1(container, offset));\\n      } else {\\n        return Option.none();\\n      }\\n    };\\n    var alt = function (o1, o2) {\\n      return o1.isSome() ? o1 : o2;\\n    };\\n    var resolvePaths = function (dom, bookmark) {\\n      var rng = dom.createRng();\\n      if (setEndPoint(dom, true, bookmark, rng) && setEndPoint(dom, false, bookmark, rng)) {\\n        return Option.some(rng);\\n      } else {\\n        return Option.none();\\n      }\\n    };\\n    var resolveId = function (dom, bookmark) {\\n      var startPos = restoreEndPoint(dom, 'start', bookmark);\\n      var endPos = restoreEndPoint(dom, 'end', bookmark);\\n      return lift2(startPos, alt(endPos, startPos), function (spos, epos) {\\n        var rng = dom.createRng();\\n        rng.setStart(addBogus(dom, spos.container()), spos.offset());\\n        rng.setEnd(addBogus(dom, epos.container()), epos.offset());\\n        return rng;\\n      });\\n    };\\n    var resolveIndex$1 = function (dom, bookmark) {\\n      return Option.from(dom.select(bookmark.name)[bookmark.index]).map(function (elm) {\\n        var rng = dom.createRng();\\n        rng.selectNode(elm);\\n        return rng;\\n      });\\n    };\\n    var resolve$3 = function (selection, bookmark) {\\n      var dom = selection.dom;\\n      if (bookmark) {\\n        if (isPathBookmark(bookmark)) {\\n          return resolvePaths(dom, bookmark);\\n        } else if (isStringPathBookmark(bookmark)) {\\n          return Option.some(resolveCaretPositionBookmark(dom, bookmark));\\n        } else if (isIdBookmark(bookmark)) {\\n          return resolveId(dom, bookmark);\\n        } else if (isIndexBookmark(bookmark)) {\\n          return resolveIndex$1(dom, bookmark);\\n        } else if (isRangeBookmark(bookmark)) {\\n          return Option.some(bookmark.rng);\\n        }\\n      }\\n      return Option.none();\\n    };\\n    var ResolveBookmark = { resolve: resolve$3 };\\n\\n    var getBookmark$1 = function (selection, type, normalized) {\\n      return GetBookmark.getBookmark(selection, type, normalized);\\n    };\\n    var moveToBookmark = function (selection, bookmark) {\\n      ResolveBookmark.resolve(selection, bookmark).each(function (rng) {\\n        selection.setRng(rng);\\n      });\\n    };\\n    var isBookmarkNode$1 = function (node) {\\n      return NodeType.isElement(node) && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';\\n    };\\n    var Bookmarks = {\\n      getBookmark: getBookmark$1,\\n      moveToBookmark: moveToBookmark,\\n      isBookmarkNode: isBookmarkNode$1\\n    };\\n\\n    var isInlineBlock = function (node) {\\n      return node && /^(IMG)$/.test(node.nodeName);\\n    };\\n    var moveStart = function (dom, selection, rng) {\\n      var offset = rng.startOffset;\\n      var container = rng.startContainer, walker, node, nodes;\\n      if (rng.startContainer === rng.endContainer) {\\n        if (isInlineBlock(rng.startContainer.childNodes[rng.startOffset])) {\\n          return;\\n        }\\n      }\\n      if (container.nodeType === 1) {\\n        nodes = container.childNodes;\\n        if (offset < nodes.length) {\\n          container = nodes[offset];\\n          walker = new TreeWalker(container, dom.getParent(container, dom.isBlock));\\n        } else {\\n          container = nodes[nodes.length - 1];\\n          walker = new TreeWalker(container, dom.getParent(container, dom.isBlock));\\n          walker.next(true);\\n        }\\n        for (node = walker.current(); node; node = walker.next()) {\\n          if (node.nodeType === 3 && !isWhiteSpaceNode(node)) {\\n            rng.setStart(node, 0);\\n            selection.setRng(rng);\\n            return;\\n          }\\n        }\\n      }\\n    };\\n    var getNonWhiteSpaceSibling = function (node, next, inc) {\\n      if (node) {\\n        next = next ? 'nextSibling' : 'previousSibling';\\n        for (node = inc ? node : node[next]; node; node = node[next]) {\\n          if (node.nodeType === 1 || !isWhiteSpaceNode(node)) {\\n            return node;\\n          }\\n        }\\n      }\\n    };\\n    var isTextBlock$1 = function (editor, name) {\\n      if (name.nodeType) {\\n        name = name.nodeName;\\n      }\\n      return !!editor.schema.getTextBlockElements()[name.toLowerCase()];\\n    };\\n    var isValid = function (ed, parent, child) {\\n      return ed.schema.isValidChild(parent, child);\\n    };\\n    var isWhiteSpaceNode = function (node) {\\n      return node && node.nodeType === 3 && /^([\\\\t \\\\r\\\\n]+|)$/.test(node.nodeValue);\\n    };\\n    var replaceVars = function (value, vars) {\\n      if (typeof value !== 'string') {\\n        value = value(vars);\\n      } else if (vars) {\\n        value = value.replace(/%(\\\\w+)/g, function (str, name) {\\n          return vars[name] || str;\\n        });\\n      }\\n      return value;\\n    };\\n    var isEq = function (str1, str2) {\\n      str1 = str1 || '';\\n      str2 = str2 || '';\\n      str1 = '' + (str1.nodeName || str1);\\n      str2 = '' + (str2.nodeName || str2);\\n      return str1.toLowerCase() === str2.toLowerCase();\\n    };\\n    var normalizeStyleValue = function (dom, value, name) {\\n      if (name === 'color' || name === 'backgroundColor') {\\n        value = dom.toHex(value);\\n      }\\n      if (name === 'fontWeight' && value === 700) {\\n        value = 'bold';\\n      }\\n      if (name === 'fontFamily') {\\n        value = value.replace(/[\\\\'\\\\\\\"]/g, '').replace(/,\\\\s+/g, ',');\\n      }\\n      return '' + value;\\n    };\\n    var getStyle = function (dom, node, name) {\\n      return normalizeStyleValue(dom, dom.getStyle(node, name), name);\\n    };\\n    var getTextDecoration = function (dom, node) {\\n      var decoration;\\n      dom.getParent(node, function (n) {\\n        decoration = dom.getStyle(n, 'text-decoration');\\n        return decoration && decoration !== 'none';\\n      });\\n      return decoration;\\n    };\\n    var getParents$1 = function (dom, node, selector) {\\n      return dom.getParents(node, selector, dom.getRoot());\\n    };\\n    var FormatUtils = {\\n      isInlineBlock: isInlineBlock,\\n      moveStart: moveStart,\\n      getNonWhiteSpaceSibling: getNonWhiteSpaceSibling,\\n      isTextBlock: isTextBlock$1,\\n      isValid: isValid,\\n      isWhiteSpaceNode: isWhiteSpaceNode,\\n      replaceVars: replaceVars,\\n      isEq: isEq,\\n      normalizeStyleValue: normalizeStyleValue,\\n      getStyle: getStyle,\\n      getTextDecoration: getTextDecoration,\\n      getParents: getParents$1\\n    };\\n\\n    var isBookmarkNode$2 = Bookmarks.isBookmarkNode;\\n    var getParents$2 = FormatUtils.getParents, isWhiteSpaceNode$1 = FormatUtils.isWhiteSpaceNode, isTextBlock$2 = FormatUtils.isTextBlock;\\n    var findLeaf = function (node, offset) {\\n      if (typeof offset === 'undefined') {\\n        offset = node.nodeType === 3 ? node.length : node.childNodes.length;\\n      }\\n      while (node && node.hasChildNodes()) {\\n        node = node.childNodes[offset];\\n        if (node) {\\n          offset = node.nodeType === 3 ? node.length : node.childNodes.length;\\n        }\\n      }\\n      return {\\n        node: node,\\n        offset: offset\\n      };\\n    };\\n    var excludeTrailingWhitespace = function (endContainer, endOffset) {\\n      var leaf = findLeaf(endContainer, endOffset);\\n      if (leaf.node) {\\n        while (leaf.node && leaf.offset === 0 && leaf.node.previousSibling) {\\n          leaf = findLeaf(leaf.node.previousSibling);\\n        }\\n        if (leaf.node && leaf.offset > 0 && leaf.node.nodeType === 3 && leaf.node.nodeValue.charAt(leaf.offset - 1) === ' ') {\\n          if (leaf.offset > 1) {\\n            endContainer = leaf.node;\\n            endContainer.splitText(leaf.offset - 1);\\n          }\\n        }\\n      }\\n      return endContainer;\\n    };\\n    var isBogusBr = function (node) {\\n      return node.nodeName === 'BR' && node.getAttribute('data-mce-bogus') && !node.nextSibling;\\n    };\\n    var findParentContentEditable = function (dom, node) {\\n      var parent = node;\\n      while (parent) {\\n        if (parent.nodeType === 1 && dom.getContentEditable(parent)) {\\n          return dom.getContentEditable(parent) === 'false' ? parent : node;\\n        }\\n        parent = parent.parentNode;\\n      }\\n      return node;\\n    };\\n    var findSpace = function (start, remove, node, offset) {\\n      var pos, pos2;\\n      var str = node.nodeValue;\\n      if (typeof offset === 'undefined') {\\n        offset = start ? str.length : 0;\\n      }\\n      if (start) {\\n        pos = str.lastIndexOf(' ', offset);\\n        pos2 = str.lastIndexOf('\\\\xA0', offset);\\n        pos = pos > pos2 ? pos : pos2;\\n        if (pos !== -1 && !remove && (pos < offset || !start) && pos <= str.length) {\\n          pos++;\\n        }\\n      } else {\\n        pos = str.indexOf(' ', offset);\\n        pos2 = str.indexOf('\\\\xA0', offset);\\n        pos = pos !== -1 && (pos2 === -1 || pos < pos2) ? pos : pos2;\\n      }\\n      return pos;\\n    };\\n    var findWordEndPoint = function (dom, body, container, offset, start, remove) {\\n      var walker, node, pos, lastTextNode;\\n      if (container.nodeType === 3) {\\n        pos = findSpace(start, remove, container, offset);\\n        if (pos !== -1) {\\n          return {\\n            container: container,\\n            offset: pos\\n          };\\n        }\\n        lastTextNode = container;\\n      }\\n      walker = new TreeWalker(container, dom.getParent(container, dom.isBlock) || body);\\n      while (node = walker[start ? 'prev' : 'next']()) {\\n        if (node.nodeType === 3 && !isBookmarkNode$2(node.parentNode)) {\\n          lastTextNode = node;\\n          pos = findSpace(start, remove, node);\\n          if (pos !== -1) {\\n            return {\\n              container: node,\\n              offset: pos\\n            };\\n          }\\n        } else if (dom.isBlock(node) || FormatUtils.isEq(node, 'BR')) {\\n          break;\\n        }\\n      }\\n      if (lastTextNode) {\\n        if (start) {\\n          offset = 0;\\n        } else {\\n          offset = lastTextNode.length;\\n        }\\n        return {\\n          container: lastTextNode,\\n          offset: offset\\n        };\\n      }\\n    };\\n    var findSelectorEndPoint = function (dom, format, rng, container, siblingName) {\\n      var parents, i, y, curFormat;\\n      if (container.nodeType === 3 && container.nodeValue.length === 0 && container[siblingName]) {\\n        container = container[siblingName];\\n      }\\n      parents = getParents$2(dom, container);\\n      for (i = 0; i < parents.length; i++) {\\n        for (y = 0; y < format.length; y++) {\\n          curFormat = format[y];\\n          if ('collapsed' in curFormat && curFormat.collapsed !== rng.collapsed) {\\n            continue;\\n          }\\n          if (dom.is(parents[i], curFormat.selector)) {\\n            return parents[i];\\n          }\\n        }\\n      }\\n      return container;\\n    };\\n    var findBlockEndPoint = function (editor, format, container, siblingName) {\\n      var node;\\n      var dom = editor.dom;\\n      var root = dom.getRoot();\\n      if (!format[0].wrapper) {\\n        node = dom.getParent(container, format[0].block, root);\\n      }\\n      if (!node) {\\n        var scopeRoot = dom.getParent(container, 'LI,TD,TH');\\n        node = dom.getParent(container.nodeType === 3 ? container.parentNode : container, function (node) {\\n          return node !== root && isTextBlock$2(editor, node);\\n        }, scopeRoot);\\n      }\\n      if (node && format[0].wrapper) {\\n        node = getParents$2(dom, node, 'ul,ol').reverse()[0] || node;\\n      }\\n      if (!node) {\\n        node = container;\\n        while (node[siblingName] && !dom.isBlock(node[siblingName])) {\\n          node = node[siblingName];\\n          if (FormatUtils.isEq(node, 'br')) {\\n            break;\\n          }\\n        }\\n      }\\n      return node || container;\\n    };\\n    var findParentContainer = function (dom, format, startContainer, startOffset, endContainer, endOffset, start) {\\n      var container, parent, sibling, siblingName, root;\\n      container = parent = start ? startContainer : endContainer;\\n      siblingName = start ? 'previousSibling' : 'nextSibling';\\n      root = dom.getRoot();\\n      if (container.nodeType === 3 && !isWhiteSpaceNode$1(container)) {\\n        if (start ? startOffset > 0 : endOffset < container.nodeValue.length) {\\n          return container;\\n        }\\n      }\\n      while (true) {\\n        if (!format[0].block_expand && dom.isBlock(parent)) {\\n          return parent;\\n        }\\n        for (sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) {\\n          if (!isBookmarkNode$2(sibling) && !isWhiteSpaceNode$1(sibling) && !isBogusBr(sibling)) {\\n            return parent;\\n          }\\n        }\\n        if (parent === root || parent.parentNode === root) {\\n          container = parent;\\n          break;\\n        }\\n        parent = parent.parentNode;\\n      }\\n      return container;\\n    };\\n    var expandRng = function (editor, rng, format, remove) {\\n      var endPoint, startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;\\n      var dom = editor.dom;\\n      if (startContainer.nodeType === 1 && startContainer.hasChildNodes()) {\\n        startContainer = getNode(startContainer, startOffset);\\n        if (startContainer.nodeType === 3) {\\n          startOffset = 0;\\n        }\\n      }\\n      if (endContainer.nodeType === 1 && endContainer.hasChildNodes()) {\\n        endContainer = getNode(endContainer, rng.collapsed ? endOffset : endOffset - 1);\\n        if (endContainer.nodeType === 3) {\\n          endOffset = endContainer.nodeValue.length;\\n        }\\n      }\\n      startContainer = findParentContentEditable(dom, startContainer);\\n      endContainer = findParentContentEditable(dom, endContainer);\\n      if (isBookmarkNode$2(startContainer.parentNode) || isBookmarkNode$2(startContainer)) {\\n        startContainer = isBookmarkNode$2(startContainer) ? startContainer : startContainer.parentNode;\\n        if (rng.collapsed) {\\n          startContainer = startContainer.previousSibling || startContainer;\\n        } else {\\n          startContainer = startContainer.nextSibling || startContainer;\\n        }\\n        if (startContainer.nodeType === 3) {\\n          startOffset = rng.collapsed ? startContainer.length : 0;\\n        }\\n      }\\n      if (isBookmarkNode$2(endContainer.parentNode) || isBookmarkNode$2(endContainer)) {\\n        endContainer = isBookmarkNode$2(endContainer) ? endContainer : endContainer.parentNode;\\n        if (rng.collapsed) {\\n          endContainer = endContainer.nextSibling || endContainer;\\n        } else {\\n          endContainer = endContainer.previousSibling || endContainer;\\n        }\\n        if (endContainer.nodeType === 3) {\\n          endOffset = rng.collapsed ? 0 : endContainer.length;\\n        }\\n      }\\n      if (rng.collapsed) {\\n        endPoint = findWordEndPoint(dom, editor.getBody(), startContainer, startOffset, true, remove);\\n        if (endPoint) {\\n          startContainer = endPoint.container;\\n          startOffset = endPoint.offset;\\n        }\\n        endPoint = findWordEndPoint(dom, editor.getBody(), endContainer, endOffset, false, remove);\\n        if (endPoint) {\\n          endContainer = endPoint.container;\\n          endOffset = endPoint.offset;\\n        }\\n      }\\n      if (format[0].inline) {\\n        endContainer = remove ? endContainer : excludeTrailingWhitespace(endContainer, endOffset);\\n      }\\n      if (format[0].inline || format[0].block_expand) {\\n        if (!format[0].inline || (startContainer.nodeType !== 3 || startOffset === 0)) {\\n          startContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, true);\\n        }\\n        if (!format[0].inline || (endContainer.nodeType !== 3 || endOffset === endContainer.nodeValue.length)) {\\n          endContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, false);\\n        }\\n      }\\n      if (format[0].selector && format[0].expand !== false && !format[0].inline) {\\n        startContainer = findSelectorEndPoint(dom, format, rng, startContainer, 'previousSibling');\\n        endContainer = findSelectorEndPoint(dom, format, rng, endContainer, 'nextSibling');\\n      }\\n      if (format[0].block || format[0].selector) {\\n        startContainer = findBlockEndPoint(editor, format, startContainer, 'previousSibling');\\n        endContainer = findBlockEndPoint(editor, format, endContainer, 'nextSibling');\\n        if (format[0].block) {\\n          if (!dom.isBlock(startContainer)) {\\n            startContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, true);\\n          }\\n          if (!dom.isBlock(endContainer)) {\\n            endContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, false);\\n          }\\n        }\\n      }\\n      if (startContainer.nodeType === 1) {\\n        startOffset = dom.nodeIndex(startContainer);\\n        startContainer = startContainer.parentNode;\\n      }\\n      if (endContainer.nodeType === 1) {\\n        endOffset = dom.nodeIndex(endContainer) + 1;\\n        endContainer = endContainer.parentNode;\\n      }\\n      return {\\n        startContainer: startContainer,\\n        startOffset: startOffset,\\n        endContainer: endContainer,\\n        endOffset: endOffset\\n      };\\n    };\\n    var ExpandRange = { expandRng: expandRng };\\n\\n    var each$8 = Tools.each;\\n    var getEndChild = function (container, index) {\\n      var childNodes = container.childNodes;\\n      index--;\\n      if (index > childNodes.length - 1) {\\n        index = childNodes.length - 1;\\n      } else if (index < 0) {\\n        index = 0;\\n      }\\n      return childNodes[index] || container;\\n    };\\n    var walk$1 = function (dom, rng, callback) {\\n      var startContainer = rng.startContainer;\\n      var startOffset = rng.startOffset;\\n      var endContainer = rng.endContainer;\\n      var endOffset = rng.endOffset;\\n      var ancestor;\\n      var startPoint;\\n      var endPoint;\\n      var node;\\n      var parent;\\n      var siblings;\\n      var nodes;\\n      nodes = dom.select('td[data-mce-selected],th[data-mce-selected]');\\n      if (nodes.length > 0) {\\n        each$8(nodes, function (node) {\\n          callback([node]);\\n        });\\n        return;\\n      }\\n      var exclude = function (nodes) {\\n        var node;\\n        node = nodes[0];\\n        if (node.nodeType === 3 && node === startContainer && startOffset >= node.nodeValue.length) {\\n          nodes.splice(0, 1);\\n        }\\n        node = nodes[nodes.length - 1];\\n        if (endOffset === 0 && nodes.length > 0 && node === endContainer && node.nodeType === 3) {\\n          nodes.splice(nodes.length - 1, 1);\\n        }\\n        return nodes;\\n      };\\n      var collectSiblings = function (node, name, endNode) {\\n        var siblings = [];\\n        for (; node && node !== endNode; node = node[name]) {\\n          siblings.push(node);\\n        }\\n        return siblings;\\n      };\\n      var findEndPoint = function (node, root) {\\n        do {\\n          if (node.parentNode === root) {\\n            return node;\\n          }\\n          node = node.parentNode;\\n        } while (node);\\n      };\\n      var walkBoundary = function (startNode, endNode, next) {\\n        var siblingName = next ? 'nextSibling' : 'previousSibling';\\n        for (node = startNode, parent = node.parentNode; node && node !== endNode; node = parent) {\\n          parent = node.parentNode;\\n          siblings = collectSiblings(node === startNode ? node : node[siblingName], siblingName);\\n          if (siblings.length) {\\n            if (!next) {\\n              siblings.reverse();\\n            }\\n            callback(exclude(siblings));\\n          }\\n        }\\n      };\\n      if (startContainer.nodeType === 1 && startContainer.hasChildNodes()) {\\n        startContainer = startContainer.childNodes[startOffset];\\n      }\\n      if (endContainer.nodeType === 1 && endContainer.hasChildNodes()) {\\n        endContainer = getEndChild(endContainer, endOffset);\\n      }\\n      if (startContainer === endContainer) {\\n        return callback(exclude([startContainer]));\\n      }\\n      ancestor = dom.findCommonAncestor(startContainer, endContainer);\\n      for (node = startContainer; node; node = node.parentNode) {\\n        if (node === endContainer) {\\n          return walkBoundary(startContainer, ancestor, true);\\n        }\\n        if (node === ancestor) {\\n          break;\\n        }\\n      }\\n      for (node = endContainer; node; node = node.parentNode) {\\n        if (node === startContainer) {\\n          return walkBoundary(endContainer, ancestor);\\n        }\\n        if (node === ancestor) {\\n          break;\\n        }\\n      }\\n      startPoint = findEndPoint(startContainer, ancestor) || startContainer;\\n      endPoint = findEndPoint(endContainer, ancestor) || endContainer;\\n      walkBoundary(startContainer, startPoint, true);\\n      siblings = collectSiblings(startPoint === startContainer ? startPoint : startPoint.nextSibling, 'nextSibling', endPoint === endContainer ? endPoint.nextSibling : endPoint);\\n      if (siblings.length) {\\n        callback(exclude(siblings));\\n      }\\n      walkBoundary(endContainer, endPoint);\\n    };\\n    var RangeWalk = { walk: walk$1 };\\n\\n    var zeroWidth = function () {\\n      return '\\\\uFEFF';\\n    };\\n\\n    function NodeValue (is, name) {\\n      var get = function (element) {\\n        if (!is(element)) {\\n          throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\\n        }\\n        return getOption(element).getOr('');\\n      };\\n      var getOption = function (element) {\\n        return is(element) ? Option.from(element.dom().nodeValue) : Option.none();\\n      };\\n      var set = function (element, value) {\\n        if (!is(element)) {\\n          throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\\n        }\\n        element.dom().nodeValue = value;\\n      };\\n      return {\\n        get: get,\\n        getOption: getOption,\\n        set: set\\n      };\\n    }\\n\\n    var api = NodeValue(isText, 'text');\\n    var get$4 = function (element) {\\n      return api.get(element);\\n    };\\n\\n    var isZeroWidth = function (elem) {\\n      return isText(elem) && get$4(elem) === zeroWidth();\\n    };\\n    var context = function (editor, elem, wrapName, nodeName) {\\n      return parent(elem).fold(function () {\\n        return 'skipping';\\n      }, function (parent) {\\n        if (nodeName === 'br' || isZeroWidth(elem)) {\\n          return 'valid';\\n        } else if (isAnnotation(elem)) {\\n          return 'existing';\\n        } else if (isCaretNode(elem)) {\\n          return 'caret';\\n        } else if (!FormatUtils.isValid(editor, wrapName, nodeName) || !FormatUtils.isValid(editor, name(parent), wrapName)) {\\n          return 'invalid-child';\\n        } else {\\n          return 'valid';\\n        }\\n      });\\n    };\\n\\n    var shouldApplyToTrailingSpaces = function (rng) {\\n      return rng.startContainer.nodeType === 3 && rng.startContainer.nodeValue.length >= rng.startOffset && rng.startContainer.nodeValue[rng.startOffset] === '\\\\xA0';\\n    };\\n    var applyWordGrab = function (editor, rng) {\\n      var r = ExpandRange.expandRng(editor, rng, [{ inline: true }], shouldApplyToTrailingSpaces(rng));\\n      rng.setStart(r.startContainer, r.startOffset);\\n      rng.setEnd(r.endContainer, r.endOffset);\\n      editor.selection.setRng(rng);\\n    };\\n    var makeAnnotation = function (eDoc, _a, annotationName, decorate) {\\n      var _b = _a.uid, uid = _b === void 0 ? generate('mce-annotation') : _b, data = __rest(_a, ['uid']);\\n      var master = Element.fromTag('span', eDoc);\\n      add$2(master, annotation());\\n      set(master, '' + dataAnnotationId(), uid);\\n      set(master, '' + dataAnnotation(), annotationName);\\n      var _c = decorate(uid, data), _d = _c.attributes, attributes = _d === void 0 ? {} : _d, _e = _c.classes, classes = _e === void 0 ? [] : _e;\\n      setAll(master, attributes);\\n      add$3(master, classes);\\n      return master;\\n    };\\n    var annotate = function (editor, rng, annotationName, decorate, data) {\\n      var newWrappers = [];\\n      var master = makeAnnotation(editor.getDoc(), data, annotationName, decorate);\\n      var wrapper = Cell(Option.none());\\n      var finishWrapper = function () {\\n        wrapper.set(Option.none());\\n      };\\n      var getOrOpenWrapper = function () {\\n        return wrapper.get().getOrThunk(function () {\\n          var nu = shallow(master);\\n          newWrappers.push(nu);\\n          wrapper.set(Option.some(nu));\\n          return nu;\\n        });\\n      };\\n      var processElements = function (elems) {\\n        each(elems, processElement);\\n      };\\n      var processElement = function (elem) {\\n        var ctx = context(editor, elem, 'span', name(elem));\\n        switch (ctx) {\\n        case 'invalid-child': {\\n            finishWrapper();\\n            var children$1 = children(elem);\\n            processElements(children$1);\\n            finishWrapper();\\n            break;\\n          }\\n        case 'valid': {\\n            var w = getOrOpenWrapper();\\n            wrap$1(elem, w);\\n            break;\\n          }\\n        case 'skipping':\\n        case 'existing':\\n        case 'caret':\\n        }\\n      };\\n      var processNodes = function (nodes) {\\n        var elems = map(nodes, Element.fromDom);\\n        processElements(elems);\\n      };\\n      RangeWalk.walk(editor.dom, rng, function (nodes) {\\n        finishWrapper();\\n        processNodes(nodes);\\n      });\\n      return newWrappers;\\n    };\\n    var annotateWithBookmark = function (editor, name, settings, data) {\\n      editor.undoManager.transact(function () {\\n        var initialRng = editor.selection.getRng();\\n        if (initialRng.collapsed) {\\n          applyWordGrab(editor, initialRng);\\n        }\\n        if (editor.selection.getRng().collapsed) {\\n          var wrapper = makeAnnotation(editor.getDoc(), data, name, settings.decorate);\\n          set$1(wrapper, '\\\\xA0');\\n          editor.selection.getRng().insertNode(wrapper.dom());\\n          editor.selection.select(wrapper.dom());\\n        } else {\\n          var bookmark = GetBookmark.getPersistentBookmark(editor.selection, false);\\n          var rng = editor.selection.getRng();\\n          annotate(editor, rng, name, settings.decorate, data);\\n          editor.selection.moveToBookmark(bookmark);\\n        }\\n      });\\n    };\\n\\n    function Annotator (editor) {\\n      var registry = create$1();\\n      setup$1(editor, registry);\\n      var changes = setup(editor);\\n      return {\\n        register: function (name, settings) {\\n          registry.register(name, settings);\\n        },\\n        annotate: function (name, data) {\\n          registry.lookup(name).each(function (settings) {\\n            annotateWithBookmark(editor, name, settings, data);\\n          });\\n        },\\n        annotationChanged: function (name, callback) {\\n          changes.addListener(name, callback);\\n        },\\n        remove: function (name) {\\n          identify(editor, Option.some(name)).each(function (_a) {\\n            var elements = _a.elements;\\n            each(elements, unwrap);\\n          });\\n        },\\n        getAll: function (name) {\\n          var directory = findAll(editor, name);\\n          return map$2(directory, function (elems) {\\n            return map(elems, function (elem) {\\n              return elem.dom();\\n            });\\n          });\\n        }\\n      };\\n    }\\n\\n    var hasOnlyOneChild = function (node) {\\n      return node.firstChild && node.firstChild === node.lastChild;\\n    };\\n    var isPaddingNode = function (node) {\\n      return node.name === 'br' || node.value === '\\\\xA0';\\n    };\\n    var isPaddedEmptyBlock = function (schema, node) {\\n      var blockElements = schema.getBlockElements();\\n      return blockElements[node.name] && hasOnlyOneChild(node) && isPaddingNode(node.firstChild);\\n    };\\n    var isEmptyFragmentElement = function (schema, node) {\\n      var nonEmptyElements = schema.getNonEmptyElements();\\n      return node && (node.isEmpty(nonEmptyElements) || isPaddedEmptyBlock(schema, node));\\n    };\\n    var isListFragment = function (schema, fragment) {\\n      var firstChild = fragment.firstChild;\\n      var lastChild = fragment.lastChild;\\n      if (firstChild && firstChild.name === 'meta') {\\n        firstChild = firstChild.next;\\n      }\\n      if (lastChild && lastChild.attr('id') === 'mce_marker') {\\n        lastChild = lastChild.prev;\\n      }\\n      if (isEmptyFragmentElement(schema, lastChild)) {\\n        lastChild = lastChild.prev;\\n      }\\n      if (!firstChild || firstChild !== lastChild) {\\n        return false;\\n      }\\n      return firstChild.name === 'ul' || firstChild.name === 'ol';\\n    };\\n    var cleanupDomFragment = function (domFragment) {\\n      var firstChild = domFragment.firstChild;\\n      var lastChild = domFragment.lastChild;\\n      if (firstChild && firstChild.nodeName === 'META') {\\n        firstChild.parentNode.removeChild(firstChild);\\n      }\\n      if (lastChild && lastChild.id === 'mce_marker') {\\n        lastChild.parentNode.removeChild(lastChild);\\n      }\\n      return domFragment;\\n    };\\n    var toDomFragment = function (dom, serializer, fragment) {\\n      var html = serializer.serialize(fragment);\\n      var domFragment = dom.createFragment(html);\\n      return cleanupDomFragment(domFragment);\\n    };\\n    var listItems$1 = function (elm) {\\n      return Tools.grep(elm.childNodes, function (child) {\\n        return child.nodeName === 'LI';\\n      });\\n    };\\n    var isPadding = function (node) {\\n      return node.data === '\\\\xA0' || NodeType.isBr(node);\\n    };\\n    var isListItemPadded = function (node) {\\n      return node && node.firstChild && node.firstChild === node.lastChild && isPadding(node.firstChild);\\n    };\\n    var isEmptyOrPadded = function (elm) {\\n      return !elm.firstChild || isListItemPadded(elm);\\n    };\\n    var trimListItems = function (elms) {\\n      return elms.length > 0 && isEmptyOrPadded(elms[elms.length - 1]) ? elms.slice(0, -1) : elms;\\n    };\\n    var getParentLi = function (dom, node) {\\n      var parentBlock = dom.getParent(node, dom.isBlock);\\n      return parentBlock && parentBlock.nodeName === 'LI' ? parentBlock : null;\\n    };\\n    var isParentBlockLi = function (dom, node) {\\n      return !!getParentLi(dom, node);\\n    };\\n    var getSplit = function (parentNode, rng) {\\n      var beforeRng = rng.cloneRange();\\n      var afterRng = rng.cloneRange();\\n      beforeRng.setStartBefore(parentNode);\\n      afterRng.setEndAfter(parentNode);\\n      return [\\n        beforeRng.cloneContents(),\\n        afterRng.cloneContents()\\n      ];\\n    };\\n    var findFirstIn = function (node, rootNode) {\\n      var caretPos = CaretPosition$1.before(node);\\n      var caretWalker = CaretWalker(rootNode);\\n      var newCaretPos = caretWalker.next(caretPos);\\n      return newCaretPos ? newCaretPos.toRange() : null;\\n    };\\n    var findLastOf = function (node, rootNode) {\\n      var caretPos = CaretPosition$1.after(node);\\n      var caretWalker = CaretWalker(rootNode);\\n      var newCaretPos = caretWalker.prev(caretPos);\\n      return newCaretPos ? newCaretPos.toRange() : null;\\n    };\\n    var insertMiddle = function (target, elms, rootNode, rng) {\\n      var parts = getSplit(target, rng);\\n      var parentElm = target.parentNode;\\n      parentElm.insertBefore(parts[0], target);\\n      Tools.each(elms, function (li) {\\n        parentElm.insertBefore(li, target);\\n      });\\n      parentElm.insertBefore(parts[1], target);\\n      parentElm.removeChild(target);\\n      return findLastOf(elms[elms.length - 1], rootNode);\\n    };\\n    var insertBefore = function (target, elms, rootNode) {\\n      var parentElm = target.parentNode;\\n      Tools.each(elms, function (elm) {\\n        parentElm.insertBefore(elm, target);\\n      });\\n      return findFirstIn(target, rootNode);\\n    };\\n    var insertAfter = function (target, elms, rootNode, dom) {\\n      dom.insertAfter(elms.reverse(), target);\\n      return findLastOf(elms[0], rootNode);\\n    };\\n    var insertAtCaret = function (serializer, dom, rng, fragment) {\\n      var domFragment = toDomFragment(dom, serializer, fragment);\\n      var liTarget = getParentLi(dom, rng.startContainer);\\n      var liElms = trimListItems(listItems$1(domFragment.firstChild));\\n      var BEGINNING = 1, END = 2;\\n      var rootNode = dom.getRoot();\\n      var isAt = function (location) {\\n        var caretPos = CaretPosition$1.fromRangeStart(rng);\\n        var caretWalker = CaretWalker(dom.getRoot());\\n        var newPos = location === BEGINNING ? caretWalker.prev(caretPos) : caretWalker.next(caretPos);\\n        return newPos ? getParentLi(dom, newPos.getNode()) !== liTarget : true;\\n      };\\n      if (isAt(BEGINNING)) {\\n        return insertBefore(liTarget, liElms, rootNode);\\n      } else if (isAt(END)) {\\n        return insertAfter(liTarget, liElms, rootNode, dom);\\n      }\\n      return insertMiddle(liTarget, liElms, rootNode, rng);\\n    };\\n    var InsertList = {\\n      isListFragment: isListFragment,\\n      insertAtCaret: insertAtCaret,\\n      isParentBlockLi: isParentBlockLi,\\n      trimListItems: trimListItems,\\n      listItems: listItems$1\\n    };\\n\\n    var each$9 = Tools.each;\\n    var ElementUtils = function (dom) {\\n      this.compare = function (node1, node2) {\\n        if (node1.nodeName !== node2.nodeName) {\\n          return false;\\n        }\\n        var getAttribs = function (node) {\\n          var attribs = {};\\n          each$9(dom.getAttribs(node), function (attr) {\\n            var name = attr.nodeName.toLowerCase();\\n            if (name.indexOf('_') !== 0 && name !== 'style' && name.indexOf('data-') !== 0) {\\n              attribs[name] = dom.getAttrib(node, name);\\n            }\\n          });\\n          return attribs;\\n        };\\n        var compareObjects = function (obj1, obj2) {\\n          var value, name;\\n          for (name in obj1) {\\n            if (obj1.hasOwnProperty(name)) {\\n              value = obj2[name];\\n              if (typeof value === 'undefined') {\\n                return false;\\n              }\\n              if (obj1[name] !== value) {\\n                return false;\\n              }\\n              delete obj2[name];\\n            }\\n          }\\n          for (name in obj2) {\\n            if (obj2.hasOwnProperty(name)) {\\n              return false;\\n            }\\n          }\\n          return true;\\n        };\\n        if (!compareObjects(getAttribs(node1), getAttribs(node2))) {\\n          return false;\\n        }\\n        if (!compareObjects(dom.parseStyle(dom.getAttrib(node1, 'style')), dom.parseStyle(dom.getAttrib(node2, 'style')))) {\\n          return false;\\n        }\\n        return !Bookmarks.isBookmarkNode(node1) && !Bookmarks.isBookmarkNode(node2);\\n      };\\n    };\\n\\n    var getLastChildren = function (elm) {\\n      var children = [];\\n      var rawNode = elm.dom();\\n      while (rawNode) {\\n        children.push(Element.fromDom(rawNode));\\n        rawNode = rawNode.lastChild;\\n      }\\n      return children;\\n    };\\n    var removeTrailingBr = function (elm) {\\n      var allBrs = descendants$1(elm, 'br');\\n      var brs = filter(getLastChildren(elm).slice(-1), isBr);\\n      if (allBrs.length === brs.length) {\\n        each(brs, remove$1);\\n      }\\n    };\\n    var fillWithPaddingBr = function (elm) {\\n      empty(elm);\\n      append(elm, Element.fromHtml('<br data-mce-bogus=\\\"1\\\">'));\\n    };\\n    var isPaddingContents = function (elm) {\\n      return isText(elm) ? get$4(elm) === '\\\\xA0' : isBr(elm);\\n    };\\n    var isPaddedElement = function (elm) {\\n      return filter(children(elm), isPaddingContents).length === 1;\\n    };\\n    var trimBlockTrailingBr = function (elm) {\\n      lastChild(elm).each(function (lastChild) {\\n        prevSibling(lastChild).each(function (lastChildPrevSibling) {\\n          if (isBlock(elm) && isBr(lastChild) && isBlock(lastChildPrevSibling)) {\\n            remove$1(lastChild);\\n          }\\n        });\\n      });\\n    };\\n    var PaddingBr = {\\n      removeTrailingBr: removeTrailingBr,\\n      fillWithPaddingBr: fillWithPaddingBr,\\n      isPaddedElement: isPaddedElement,\\n      trimBlockTrailingBr: trimBlockTrailingBr\\n    };\\n\\n    var makeMap$3 = Tools.makeMap;\\n    function Writer (settings) {\\n      var html = [];\\n      var indent, indentBefore, indentAfter, encode, htmlOutput;\\n      settings = settings || {};\\n      indent = settings.indent;\\n      indentBefore = makeMap$3(settings.indent_before || '');\\n      indentAfter = makeMap$3(settings.indent_after || '');\\n      encode = Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities);\\n      htmlOutput = settings.element_format === 'html';\\n      return {\\n        start: function (name, attrs, empty) {\\n          var i, l, attr, value;\\n          if (indent && indentBefore[name] && html.length > 0) {\\n            value = html[html.length - 1];\\n            if (value.length > 0 && value !== '\\\\n') {\\n              html.push('\\\\n');\\n            }\\n          }\\n          html.push('<', name);\\n          if (attrs) {\\n            for (i = 0, l = attrs.length; i < l; i++) {\\n              attr = attrs[i];\\n              html.push(' ', attr.name, '=\\\"', encode(attr.value, true), '\\\"');\\n            }\\n          }\\n          if (!empty || htmlOutput) {\\n            html[html.length] = '>';\\n          } else {\\n            html[html.length] = ' />';\\n          }\\n          if (empty && indent && indentAfter[name] && html.length > 0) {\\n            value = html[html.length - 1];\\n            if (value.length > 0 && value !== '\\\\n') {\\n              html.push('\\\\n');\\n            }\\n          }\\n        },\\n        end: function (name) {\\n          var value;\\n          html.push('</', name, '>');\\n          if (indent && indentAfter[name] && html.length > 0) {\\n            value = html[html.length - 1];\\n            if (value.length > 0 && value !== '\\\\n') {\\n              html.push('\\\\n');\\n            }\\n          }\\n        },\\n        text: function (text, raw) {\\n          if (text.length > 0) {\\n            html[html.length] = raw ? text : encode(text);\\n          }\\n        },\\n        cdata: function (text) {\\n          html.push('<![CDATA[', text, ']]>');\\n        },\\n        comment: function (text) {\\n          html.push('<!--', text, '-->');\\n        },\\n        pi: function (name, text) {\\n          if (text) {\\n            html.push('<?', name, ' ', encode(text), '?>');\\n          } else {\\n            html.push('<?', name, '?>');\\n          }\\n          if (indent) {\\n            html.push('\\\\n');\\n          }\\n        },\\n        doctype: function (text) {\\n          html.push('<!DOCTYPE', text, '>', indent ? '\\\\n' : '');\\n        },\\n        reset: function () {\\n          html.length = 0;\\n        },\\n        getContent: function () {\\n          return html.join('').replace(/\\\\n$/, '');\\n        }\\n      };\\n    }\\n\\n    function HtmlSerializer (settings, schema) {\\n      if (schema === void 0) {\\n        schema = Schema();\\n      }\\n      var writer = Writer(settings);\\n      settings = settings || {};\\n      settings.validate = 'validate' in settings ? settings.validate : true;\\n      var serialize = function (node) {\\n        var handlers, validate;\\n        validate = settings.validate;\\n        handlers = {\\n          3: function (node) {\\n            writer.text(node.value, node.raw);\\n          },\\n          8: function (node) {\\n            writer.comment(node.value);\\n          },\\n          7: function (node) {\\n            writer.pi(node.name, node.value);\\n          },\\n          10: function (node) {\\n            writer.doctype(node.value);\\n          },\\n          4: function (node) {\\n            writer.cdata(node.value);\\n          },\\n          11: function (node) {\\n            if (node = node.firstChild) {\\n              do {\\n                walk(node);\\n              } while (node = node.next);\\n            }\\n          }\\n        };\\n        writer.reset();\\n        var walk = function (node) {\\n          var handler = handlers[node.type];\\n          var name, isEmpty, attrs, attrName, attrValue, sortedAttrs, i, l, elementRule;\\n          if (!handler) {\\n            name = node.name;\\n            isEmpty = node.shortEnded;\\n            attrs = node.attributes;\\n            if (validate && attrs && attrs.length > 1) {\\n              sortedAttrs = [];\\n              sortedAttrs.map = {};\\n              elementRule = schema.getElementRule(node.name);\\n              if (elementRule) {\\n                for (i = 0, l = elementRule.attributesOrder.length; i < l; i++) {\\n                  attrName = elementRule.attributesOrder[i];\\n                  if (attrName in attrs.map) {\\n                    attrValue = attrs.map[attrName];\\n                    sortedAttrs.map[attrName] = attrValue;\\n                    sortedAttrs.push({\\n                      name: attrName,\\n                      value: attrValue\\n                    });\\n                  }\\n                }\\n                for (i = 0, l = attrs.length; i < l; i++) {\\n                  attrName = attrs[i].name;\\n                  if (!(attrName in sortedAttrs.map)) {\\n                    attrValue = attrs.map[attrName];\\n                    sortedAttrs.map[attrName] = attrValue;\\n                    sortedAttrs.push({\\n                      name: attrName,\\n                      value: attrValue\\n                    });\\n                  }\\n                }\\n                attrs = sortedAttrs;\\n              }\\n            }\\n            writer.start(node.name, attrs, isEmpty);\\n            if (!isEmpty) {\\n              if (node = node.firstChild) {\\n                do {\\n                  walk(node);\\n                } while (node = node.next);\\n              }\\n              writer.end(name);\\n            }\\n          } else {\\n            handler(node);\\n          }\\n        };\\n        if (node.type === 1 && !settings.inner) {\\n          walk(node);\\n        } else {\\n          handlers[11](node);\\n        }\\n        return writer.getContent();\\n      };\\n      return { serialize: serialize };\\n    }\\n\\n    var createRange$1 = function (sc, so, ec, eo) {\\n      var rng = domGlobals.document.createRange();\\n      rng.setStart(sc, so);\\n      rng.setEnd(ec, eo);\\n      return rng;\\n    };\\n    var normalizeBlockSelectionRange = function (rng) {\\n      var startPos = CaretPosition$1.fromRangeStart(rng);\\n      var endPos = CaretPosition$1.fromRangeEnd(rng);\\n      var rootNode = rng.commonAncestorContainer;\\n      return CaretFinder.fromPosition(false, rootNode, endPos).map(function (newEndPos) {\\n        if (!isInSameBlock(startPos, endPos, rootNode) && isInSameBlock(startPos, newEndPos, rootNode)) {\\n          return createRange$1(startPos.container(), startPos.offset(), newEndPos.container(), newEndPos.offset());\\n        } else {\\n          return rng;\\n        }\\n      }).getOr(rng);\\n    };\\n    var normalize = function (rng) {\\n      return rng.collapsed ? rng : normalizeBlockSelectionRange(rng);\\n    };\\n    var RangeNormalizer = { normalize: normalize };\\n\\n    var isAfterNbsp = function (container, offset) {\\n      return NodeType.isText(container) && container.nodeValue[offset - 1] === '\\\\xA0';\\n    };\\n    var trimOrPadLeftRight = function (rng, html) {\\n      var container, offset;\\n      container = rng.startContainer;\\n      offset = rng.startOffset;\\n      var hasSiblingText = function (siblingName) {\\n        return container[siblingName] && container[siblingName].nodeType === 3;\\n      };\\n      if (container.nodeType === 3) {\\n        if (offset > 0) {\\n          html = html.replace(/^&nbsp;/, ' ');\\n        } else if (!hasSiblingText('previousSibling')) {\\n          html = html.replace(/^ /, '&nbsp;');\\n        }\\n        if (offset < container.length) {\\n          html = html.replace(/&nbsp;(<br>|)$/, ' ');\\n        } else if (!hasSiblingText('nextSibling')) {\\n          html = html.replace(/(&nbsp;| )(<br>|)$/, '&nbsp;');\\n        }\\n      }\\n      return html;\\n    };\\n    var trimNbspAfterDeleteAndPadValue = function (rng, value) {\\n      var container, offset;\\n      container = rng.startContainer;\\n      offset = rng.startOffset;\\n      if (container.nodeType === 3 && rng.collapsed) {\\n        if (container.data[offset] === '\\\\xA0') {\\n          container.deleteData(offset, 1);\\n          if (!/[\\\\u00a0| ]$/.test(value)) {\\n            value += ' ';\\n          }\\n        } else if (container.data[offset - 1] === '\\\\xA0') {\\n          container.deleteData(offset - 1, 1);\\n          if (!/[\\\\u00a0| ]$/.test(value)) {\\n            value = ' ' + value;\\n          }\\n        }\\n      }\\n      return value;\\n    };\\n\\n    var isTableCell$2 = NodeType.matchNodeNames('td th');\\n    var selectionSetContent = function (editor, content) {\\n      var rng = editor.selection.getRng();\\n      var container = rng.startContainer;\\n      var offset = rng.startOffset;\\n      if (rng.collapsed && isAfterNbsp(container, offset) && NodeType.isText(container)) {\\n        container.insertData(offset - 1, ' ');\\n        container.deleteData(offset, 1);\\n        rng.setStart(container, offset);\\n        rng.setEnd(container, offset);\\n        editor.selection.setRng(rng);\\n      }\\n      editor.selection.setContent(content);\\n    };\\n    var validInsertion = function (editor, value, parentNode) {\\n      if (parentNode.getAttribute('data-mce-bogus') === 'all') {\\n        parentNode.parentNode.insertBefore(editor.dom.createFragment(value), parentNode);\\n      } else {\\n        var node = parentNode.firstChild;\\n        var node2 = parentNode.lastChild;\\n        if (!node || node === node2 && node.nodeName === 'BR') {\\n          editor.dom.setHTML(parentNode, value);\\n        } else {\\n          selectionSetContent(editor, value);\\n        }\\n      }\\n    };\\n    var trimBrsFromTableCell = function (dom, elm) {\\n      Option.from(dom.getParent(elm, 'td,th')).map(Element.fromDom).each(PaddingBr.trimBlockTrailingBr);\\n    };\\n    var reduceInlineTextElements = function (editor, merge) {\\n      var textInlineElements = editor.schema.getTextInlineElements();\\n      var dom = editor.dom;\\n      if (merge) {\\n        var root_1 = editor.getBody(), elementUtils_1 = new ElementUtils(dom);\\n        Tools.each(dom.select('*[data-mce-fragment]'), function (node) {\\n          for (var testNode = node.parentNode; testNode && testNode !== root_1; testNode = testNode.parentNode) {\\n            if (textInlineElements[node.nodeName.toLowerCase()] && elementUtils_1.compare(testNode, node)) {\\n              dom.remove(node, true);\\n            }\\n          }\\n        });\\n      }\\n    };\\n    var markFragmentElements = function (fragment) {\\n      var node = fragment;\\n      while (node = node.walk()) {\\n        if (node.type === 1) {\\n          node.attr('data-mce-fragment', '1');\\n        }\\n      }\\n    };\\n    var umarkFragmentElements = function (elm) {\\n      Tools.each(elm.getElementsByTagName('*'), function (elm) {\\n        elm.removeAttribute('data-mce-fragment');\\n      });\\n    };\\n    var isPartOfFragment = function (node) {\\n      return !!node.getAttribute('data-mce-fragment');\\n    };\\n    var canHaveChildren = function (editor, node) {\\n      return node && !editor.schema.getShortEndedElements()[node.nodeName];\\n    };\\n    var moveSelectionToMarker = function (editor, marker) {\\n      var parentEditableFalseElm, parentBlock, nextRng;\\n      var dom = editor.dom, selection = editor.selection;\\n      var node, node2;\\n      var getContentEditableFalseParent = function (node) {\\n        var root = editor.getBody();\\n        for (; node && node !== root; node = node.parentNode) {\\n          if (editor.dom.getContentEditable(node) === 'false') {\\n            return node;\\n          }\\n        }\\n        return null;\\n      };\\n      if (!marker) {\\n        return;\\n      }\\n      editor.selection.scrollIntoView(marker);\\n      parentEditableFalseElm = getContentEditableFalseParent(marker);\\n      if (parentEditableFalseElm) {\\n        dom.remove(marker);\\n        selection.select(parentEditableFalseElm);\\n        return;\\n      }\\n      var rng = dom.createRng();\\n      node = marker.previousSibling;\\n      if (node && node.nodeType === 3) {\\n        rng.setStart(node, node.nodeValue.length);\\n        if (!Env.ie) {\\n          node2 = marker.nextSibling;\\n          if (node2 && node2.nodeType === 3) {\\n            node.appendData(node2.data);\\n            node2.parentNode.removeChild(node2);\\n          }\\n        }\\n      } else {\\n        rng.setStartBefore(marker);\\n        rng.setEndBefore(marker);\\n      }\\n      var findNextCaretRng = function (rng) {\\n        var caretPos = CaretPosition$1.fromRangeStart(rng);\\n        var caretWalker = CaretWalker(editor.getBody());\\n        caretPos = caretWalker.next(caretPos);\\n        if (caretPos) {\\n          return caretPos.toRange();\\n        }\\n      };\\n      parentBlock = dom.getParent(marker, dom.isBlock);\\n      dom.remove(marker);\\n      if (parentBlock && dom.isEmpty(parentBlock)) {\\n        editor.$(parentBlock).empty();\\n        rng.setStart(parentBlock, 0);\\n        rng.setEnd(parentBlock, 0);\\n        if (!isTableCell$2(parentBlock) && !isPartOfFragment(parentBlock) && (nextRng = findNextCaretRng(rng))) {\\n          rng = nextRng;\\n          dom.remove(parentBlock);\\n        } else {\\n          dom.add(parentBlock, dom.create('br', { 'data-mce-bogus': '1' }));\\n        }\\n      }\\n      selection.setRng(rng);\\n    };\\n    var insertHtmlAtCaret = function (editor, value, details) {\\n      var parser, serializer, parentNode, rootNode, fragment, args;\\n      var marker, rng, node, bookmarkHtml, merge;\\n      var selection = editor.selection, dom = editor.dom;\\n      if (/^ | $/.test(value)) {\\n        value = trimOrPadLeftRight(selection.getRng(), value);\\n      }\\n      parser = editor.parser;\\n      merge = details.merge;\\n      serializer = HtmlSerializer({ validate: editor.settings.validate }, editor.schema);\\n      bookmarkHtml = '<span id=\\\"mce_marker\\\" data-mce-type=\\\"bookmark\\\">&#xFEFF;&#x200B;</span>';\\n      args = {\\n        content: value,\\n        format: 'html',\\n        selection: true,\\n        paste: details.paste\\n      };\\n      args = editor.fire('BeforeSetContent', args);\\n      if (args.isDefaultPrevented()) {\\n        editor.fire('SetContent', {\\n          content: args.content,\\n          format: 'html',\\n          selection: true,\\n          paste: details.paste\\n        });\\n        return;\\n      }\\n      value = args.content;\\n      if (value.indexOf('{$caret}') === -1) {\\n        value += '{$caret}';\\n      }\\n      value = value.replace(/\\\\{\\\\$caret\\\\}/, bookmarkHtml);\\n      rng = selection.getRng();\\n      var caretElement = rng.startContainer || (rng.parentElement ? rng.parentElement() : null);\\n      var body = editor.getBody();\\n      if (caretElement === body && selection.isCollapsed()) {\\n        if (dom.isBlock(body.firstChild) && canHaveChildren(editor, body.firstChild) && dom.isEmpty(body.firstChild)) {\\n          rng = dom.createRng();\\n          rng.setStart(body.firstChild, 0);\\n          rng.setEnd(body.firstChild, 0);\\n          selection.setRng(rng);\\n        }\\n      }\\n      if (!selection.isCollapsed()) {\\n        editor.selection.setRng(RangeNormalizer.normalize(editor.selection.getRng()));\\n        editor.getDoc().execCommand('Delete', false, null);\\n        value = trimNbspAfterDeleteAndPadValue(editor.selection.getRng(), value);\\n      }\\n      parentNode = selection.getNode();\\n      var parserArgs = {\\n        context: parentNode.nodeName.toLowerCase(),\\n        data: details.data,\\n        insert: true\\n      };\\n      fragment = parser.parse(value, parserArgs);\\n      if (details.paste === true && InsertList.isListFragment(editor.schema, fragment) && InsertList.isParentBlockLi(dom, parentNode)) {\\n        rng = InsertList.insertAtCaret(serializer, dom, editor.selection.getRng(), fragment);\\n        editor.selection.setRng(rng);\\n        editor.fire('SetContent', args);\\n        return;\\n      }\\n      markFragmentElements(fragment);\\n      node = fragment.lastChild;\\n      if (node.attr('id') === 'mce_marker') {\\n        marker = node;\\n        for (node = node.prev; node; node = node.walk(true)) {\\n          if (node.type === 3 || !dom.isBlock(node.name)) {\\n            if (editor.schema.isValidChild(node.parent.name, 'span')) {\\n              node.parent.insert(marker, node, node.name === 'br');\\n            }\\n            break;\\n          }\\n        }\\n      }\\n      editor._selectionOverrides.showBlockCaretContainer(parentNode);\\n      if (!parserArgs.invalid) {\\n        value = serializer.serialize(fragment);\\n        validInsertion(editor, value, parentNode);\\n      } else {\\n        selectionSetContent(editor, bookmarkHtml);\\n        parentNode = selection.getNode();\\n        rootNode = editor.getBody();\\n        if (parentNode.nodeType === 9) {\\n          parentNode = node = rootNode;\\n        } else {\\n          node = parentNode;\\n        }\\n        while (node !== rootNode) {\\n          parentNode = node;\\n          node = node.parentNode;\\n        }\\n        value = parentNode === rootNode ? rootNode.innerHTML : dom.getOuterHTML(parentNode);\\n        value = serializer.serialize(parser.parse(value.replace(/<span (id=\\\"mce_marker\\\"|id=mce_marker).+?<\\\\/span>/i, function () {\\n          return serializer.serialize(fragment);\\n        })));\\n        if (parentNode === rootNode) {\\n          dom.setHTML(rootNode, value);\\n        } else {\\n          dom.setOuterHTML(parentNode, value);\\n        }\\n      }\\n      reduceInlineTextElements(editor, merge);\\n      moveSelectionToMarker(editor, dom.get('mce_marker'));\\n      umarkFragmentElements(editor.getBody());\\n      trimBrsFromTableCell(editor.dom, editor.selection.getStart());\\n      editor.fire('SetContent', args);\\n      editor.addVisual();\\n    };\\n    var processValue = function (value) {\\n      var details;\\n      if (typeof value !== 'string') {\\n        details = Tools.extend({\\n          paste: value.paste,\\n          data: { paste: value.paste }\\n        }, value);\\n        return {\\n          content: value.content,\\n          details: details\\n        };\\n      }\\n      return {\\n        content: value,\\n        details: {}\\n      };\\n    };\\n    var insertAtCaret$1 = function (editor, value) {\\n      var result = processValue(value);\\n      insertHtmlAtCaret(editor, result.content, result.details);\\n    };\\n    var InsertContent = { insertAtCaret: insertAtCaret$1 };\\n\\n    var strongRtl = /[\\\\u0591-\\\\u07FF\\\\uFB1D-\\\\uFDFF\\\\uFE70-\\\\uFEFC]/;\\n    var hasStrongRtl = function (text) {\\n      return strongRtl.test(text);\\n    };\\n\\n    var getBodySetting = function (editor, name, defaultValue) {\\n      var value = editor.getParam(name, defaultValue);\\n      if (value.indexOf('=') !== -1) {\\n        var bodyObj = editor.getParam(name, '', 'hash');\\n        return bodyObj.hasOwnProperty(editor.id) ? bodyObj[editor.id] : defaultValue;\\n      } else {\\n        return value;\\n      }\\n    };\\n    var getIframeAttrs = function (editor) {\\n      return editor.getParam('iframe_attrs', {});\\n    };\\n    var getDocType = function (editor) {\\n      return editor.getParam('doctype', '<!DOCTYPE html>');\\n    };\\n    var getDocumentBaseUrl = function (editor) {\\n      return editor.getParam('document_base_url', '');\\n    };\\n    var getBodyId = function (editor) {\\n      return getBodySetting(editor, 'body_id', 'tinymce');\\n    };\\n    var getBodyClass = function (editor) {\\n      return getBodySetting(editor, 'body_class', '');\\n    };\\n    var getContentSecurityPolicy = function (editor) {\\n      return editor.getParam('content_security_policy', '');\\n    };\\n    var shouldPutBrInPre = function (editor) {\\n      return editor.getParam('br_in_pre', true);\\n    };\\n    var getForcedRootBlock = function (editor) {\\n      if (editor.getParam('force_p_newlines', false)) {\\n        return 'p';\\n      }\\n      var block = editor.getParam('forced_root_block', 'p');\\n      return block === false ? '' : block;\\n    };\\n    var getForcedRootBlockAttrs = function (editor) {\\n      return editor.getParam('forced_root_block_attrs', {});\\n    };\\n    var getBrNewLineSelector = function (editor) {\\n      return editor.getParam('br_newline_selector', '.mce-toc h2,figcaption,caption');\\n    };\\n    var getNoNewLineSelector = function (editor) {\\n      return editor.getParam('no_newline_selector', '');\\n    };\\n    var shouldKeepStyles = function (editor) {\\n      return editor.getParam('keep_styles', true);\\n    };\\n    var shouldEndContainerOnEmptyBlock = function (editor) {\\n      return editor.getParam('end_container_on_empty_block', false);\\n    };\\n    var getFontStyleValues = function (editor) {\\n      return Tools.explode(editor.getParam('font_size_style_values', ''));\\n    };\\n    var getFontSizeClasses = function (editor) {\\n      return Tools.explode(editor.getParam('font_size_classes', ''));\\n    };\\n    var getImagesDataImgFilter = function (editor) {\\n      return editor.getParam('images_dataimg_filter', constant(true), 'function');\\n    };\\n    var isAutomaticUploadsEnabled = function (editor) {\\n      return editor.getParam('automatic_uploads', true, 'boolean');\\n    };\\n    var shouldReuseFileName = function (editor) {\\n      return editor.getParam('images_reuse_filename', false, 'boolean');\\n    };\\n    var shouldReplaceBlobUris = function (editor) {\\n      return editor.getParam('images_replace_blob_uris', true, 'boolean');\\n    };\\n    var getImageUploadUrl = function (editor) {\\n      return editor.getParam('images_upload_url', '', 'string');\\n    };\\n    var getImageUploadBasePath = function (editor) {\\n      return editor.getParam('images_upload_base_path', '', 'string');\\n    };\\n    var getImagesUploadCredentials = function (editor) {\\n      return editor.getParam('images_upload_credentials', false, 'boolean');\\n    };\\n    var getImagesUploadHandler = function (editor) {\\n      return editor.getParam('images_upload_handler', null, 'function');\\n    };\\n    var shouldUseContentCssCors = function (editor) {\\n      return editor.getParam('content_css_cors', false, 'boolean');\\n    };\\n    var getInlineBoundarySelector = function (editor) {\\n      return editor.getParam('inline_boundaries_selector', 'a[href],code,.mce-annotation', 'string');\\n    };\\n    var Settings = {\\n      getIframeAttrs: getIframeAttrs,\\n      getDocType: getDocType,\\n      getDocumentBaseUrl: getDocumentBaseUrl,\\n      getBodyId: getBodyId,\\n      getBodyClass: getBodyClass,\\n      getContentSecurityPolicy: getContentSecurityPolicy,\\n      shouldPutBrInPre: shouldPutBrInPre,\\n      getForcedRootBlock: getForcedRootBlock,\\n      getForcedRootBlockAttrs: getForcedRootBlockAttrs,\\n      getBrNewLineSelector: getBrNewLineSelector,\\n      getNoNewLineSelector: getNoNewLineSelector,\\n      shouldKeepStyles: shouldKeepStyles,\\n      shouldEndContainerOnEmptyBlock: shouldEndContainerOnEmptyBlock,\\n      getFontStyleValues: getFontStyleValues,\\n      getFontSizeClasses: getFontSizeClasses,\\n      getImagesDataImgFilter: getImagesDataImgFilter,\\n      isAutomaticUploadsEnabled: isAutomaticUploadsEnabled,\\n      shouldReuseFileName: shouldReuseFileName,\\n      shouldReplaceBlobUris: shouldReplaceBlobUris,\\n      getImageUploadUrl: getImageUploadUrl,\\n      getImageUploadBasePath: getImageUploadBasePath,\\n      getImagesUploadCredentials: getImagesUploadCredentials,\\n      getImagesUploadHandler: getImagesUploadHandler,\\n      shouldUseContentCssCors: shouldUseContentCssCors,\\n      getInlineBoundarySelector: getInlineBoundarySelector\\n    };\\n\\n    var isInlineTarget = function (editor, elm) {\\n      return is$1(Element.fromDom(elm), Settings.getInlineBoundarySelector(editor));\\n    };\\n    var isRtl = function (element) {\\n      return DOMUtils$1.DOM.getStyle(element, 'direction', true) === 'rtl' || hasStrongRtl(element.textContent);\\n    };\\n    var findInlineParents = function (isInlineTarget, rootNode, pos) {\\n      return filter(DOMUtils$1.DOM.getParents(pos.container(), '*', rootNode), isInlineTarget);\\n    };\\n    var findRootInline = function (isInlineTarget, rootNode, pos) {\\n      var parents = findInlineParents(isInlineTarget, rootNode, pos);\\n      return Option.from(parents[parents.length - 1]);\\n    };\\n    var hasSameParentBlock = function (rootNode, node1, node2) {\\n      var block1 = getParentBlock(node1, rootNode);\\n      var block2 = getParentBlock(node2, rootNode);\\n      return block1 && block1 === block2;\\n    };\\n    var isAtZwsp = function (pos) {\\n      return isBeforeInline(pos) || isAfterInline(pos);\\n    };\\n    var normalizePosition = function (forward, pos) {\\n      if (!pos) {\\n        return pos;\\n      }\\n      var container = pos.container(), offset = pos.offset();\\n      if (forward) {\\n        if (isCaretContainerInline(container)) {\\n          if (NodeType.isText(container.nextSibling)) {\\n            return CaretPosition$1(container.nextSibling, 0);\\n          } else {\\n            return CaretPosition$1.after(container);\\n          }\\n        } else {\\n          return isBeforeInline(pos) ? CaretPosition$1(container, offset + 1) : pos;\\n        }\\n      } else {\\n        if (isCaretContainerInline(container)) {\\n          if (NodeType.isText(container.previousSibling)) {\\n            return CaretPosition$1(container.previousSibling, container.previousSibling.data.length);\\n          } else {\\n            return CaretPosition$1.before(container);\\n          }\\n        } else {\\n          return isAfterInline(pos) ? CaretPosition$1(container, offset - 1) : pos;\\n        }\\n      }\\n    };\\n    var normalizeForwards = curry(normalizePosition, true);\\n    var normalizeBackwards = curry(normalizePosition, false);\\n    var InlineUtils = {\\n      isInlineTarget: isInlineTarget,\\n      findRootInline: findRootInline,\\n      isRtl: isRtl,\\n      isAtZwsp: isAtZwsp,\\n      normalizePosition: normalizePosition,\\n      normalizeForwards: normalizeForwards,\\n      normalizeBackwards: normalizeBackwards,\\n      hasSameParentBlock: hasSameParentBlock\\n    };\\n\\n    var isBeforeRoot = function (rootNode) {\\n      return function (elm) {\\n        return eq(rootNode, Element.fromDom(elm.dom().parentNode));\\n      };\\n    };\\n    var getParentBlock$1 = function (rootNode, elm) {\\n      return contains$3(rootNode, elm) ? closest(elm, function (element) {\\n        return isTextBlock(element) || isListItem(element);\\n      }, isBeforeRoot(rootNode)) : Option.none();\\n    };\\n    var placeCaretInEmptyBody = function (editor) {\\n      var body = editor.getBody();\\n      var node = body.firstChild && editor.dom.isBlock(body.firstChild) ? body.firstChild : body;\\n      editor.selection.setCursorLocation(node, 0);\\n    };\\n    var paddEmptyBody = function (editor) {\\n      if (editor.dom.isEmpty(editor.getBody())) {\\n        editor.setContent('');\\n        placeCaretInEmptyBody(editor);\\n      }\\n    };\\n    var willDeleteLastPositionInElement = function (forward, fromPos, elm) {\\n      return lift2(CaretFinder.firstPositionIn(elm), CaretFinder.lastPositionIn(elm), function (firstPos, lastPos) {\\n        var normalizedFirstPos = InlineUtils.normalizePosition(true, firstPos);\\n        var normalizedLastPos = InlineUtils.normalizePosition(false, lastPos);\\n        var normalizedFromPos = InlineUtils.normalizePosition(false, fromPos);\\n        if (forward) {\\n          return CaretFinder.nextPosition(elm, normalizedFromPos).map(function (nextPos) {\\n            return nextPos.isEqual(normalizedLastPos) && fromPos.isEqual(normalizedFirstPos);\\n          }).getOr(false);\\n        } else {\\n          return CaretFinder.prevPosition(elm, normalizedFromPos).map(function (prevPos) {\\n            return prevPos.isEqual(normalizedFirstPos) && fromPos.isEqual(normalizedLastPos);\\n          }).getOr(false);\\n        }\\n      }).getOr(true);\\n    };\\n    var DeleteUtils = {\\n      getParentBlock: getParentBlock$1,\\n      paddEmptyBody: paddEmptyBody,\\n      willDeleteLastPositionInElement: willDeleteLastPositionInElement\\n    };\\n\\n    var ancestor$2 = function (scope, selector, isRoot) {\\n      return ancestor$1(scope, selector, isRoot).isSome();\\n    };\\n\\n    var hasWhitespacePreserveParent = function (rootNode, node) {\\n      var rootElement = Element.fromDom(rootNode);\\n      var startNode = Element.fromDom(node);\\n      return ancestor$2(startNode, 'pre,code', curry(eq, rootElement));\\n    };\\n    var isWhitespace = function (rootNode, node) {\\n      return NodeType.isText(node) && /^[ \\\\t\\\\r\\\\n]*$/.test(node.data) && hasWhitespacePreserveParent(rootNode, node) === false;\\n    };\\n    var isNamedAnchor = function (node) {\\n      return NodeType.isElement(node) && node.nodeName === 'A' && node.hasAttribute('name');\\n    };\\n    var isContent = function (rootNode, node) {\\n      return isCaretCandidate(node) && isWhitespace(rootNode, node) === false || isNamedAnchor(node) || isBookmark(node);\\n    };\\n    var isBookmark = NodeType.hasAttribute('data-mce-bookmark');\\n    var isBogus$2 = NodeType.hasAttribute('data-mce-bogus');\\n    var isBogusAll$1 = NodeType.hasAttributeValue('data-mce-bogus', 'all');\\n    var isEmptyNode = function (targetNode) {\\n      var walker, node, brCount = 0;\\n      if (isContent(targetNode, targetNode)) {\\n        return false;\\n      } else {\\n        node = targetNode.firstChild;\\n        if (!node) {\\n          return true;\\n        }\\n        walker = new TreeWalker(node, targetNode);\\n        do {\\n          if (isBogusAll$1(node)) {\\n            node = walker.next(true);\\n            continue;\\n          }\\n          if (isBogus$2(node)) {\\n            node = walker.next();\\n            continue;\\n          }\\n          if (NodeType.isBr(node)) {\\n            brCount++;\\n            node = walker.next();\\n            continue;\\n          }\\n          if (isContent(targetNode, node)) {\\n            return false;\\n          }\\n          node = walker.next();\\n        } while (node);\\n        return brCount <= 1;\\n      }\\n    };\\n    var isEmpty$1 = function (elm) {\\n      return isEmptyNode(elm.dom());\\n    };\\n    var Empty = { isEmpty: isEmpty$1 };\\n\\n    var BlockPosition = Immutable('block', 'position');\\n    var BlockBoundary = Immutable('from', 'to');\\n    var getBlockPosition = function (rootNode, pos) {\\n      var rootElm = Element.fromDom(rootNode);\\n      var containerElm = Element.fromDom(pos.container());\\n      return DeleteUtils.getParentBlock(rootElm, containerElm).map(function (block) {\\n        return BlockPosition(block, pos);\\n      });\\n    };\\n    var isDifferentBlocks = function (blockBoundary) {\\n      return eq(blockBoundary.from().block(), blockBoundary.to().block()) === false;\\n    };\\n    var hasSameParent = function (blockBoundary) {\\n      return parent(blockBoundary.from().block()).bind(function (parent1) {\\n        return parent(blockBoundary.to().block()).filter(function (parent2) {\\n          return eq(parent1, parent2);\\n        });\\n      }).isSome();\\n    };\\n    var isEditable = function (blockBoundary) {\\n      return NodeType.isContentEditableFalse(blockBoundary.from().block().dom()) === false && NodeType.isContentEditableFalse(blockBoundary.to().block().dom()) === false;\\n    };\\n    var skipLastBr = function (rootNode, forward, blockPosition) {\\n      if (NodeType.isBr(blockPosition.position().getNode()) && Empty.isEmpty(blockPosition.block()) === false) {\\n        return CaretFinder.positionIn(false, blockPosition.block().dom()).bind(function (lastPositionInBlock) {\\n          if (lastPositionInBlock.isEqual(blockPosition.position())) {\\n            return CaretFinder.fromPosition(forward, rootNode, lastPositionInBlock).bind(function (to) {\\n              return getBlockPosition(rootNode, to);\\n            });\\n          } else {\\n            return Option.some(blockPosition);\\n          }\\n        }).getOr(blockPosition);\\n      } else {\\n        return blockPosition;\\n      }\\n    };\\n    var readFromRange = function (rootNode, forward, rng) {\\n      var fromBlockPos = getBlockPosition(rootNode, CaretPosition$1.fromRangeStart(rng));\\n      var toBlockPos = fromBlockPos.bind(function (blockPos) {\\n        return CaretFinder.fromPosition(forward, rootNode, blockPos.position()).bind(function (to) {\\n          return getBlockPosition(rootNode, to).map(function (blockPos) {\\n            return skipLastBr(rootNode, forward, blockPos);\\n          });\\n        });\\n      });\\n      return lift2(fromBlockPos, toBlockPos, BlockBoundary).filter(function (blockBoundary) {\\n        return isDifferentBlocks(blockBoundary) && hasSameParent(blockBoundary) && isEditable(blockBoundary);\\n      });\\n    };\\n    var read$1 = function (rootNode, forward, rng) {\\n      return rng.collapsed ? readFromRange(rootNode, forward, rng) : Option.none();\\n    };\\n    var BlockMergeBoundary = { read: read$1 };\\n\\n    var dropLast = function (xs) {\\n      return xs.slice(0, -1);\\n    };\\n    var parentsUntil$1 = function (start, root, predicate) {\\n      if (contains$3(root, start)) {\\n        return dropLast(parents(start, function (elm) {\\n          return predicate(elm) || eq(elm, root);\\n        }));\\n      } else {\\n        return [];\\n      }\\n    };\\n    var parents$1 = function (start, root) {\\n      return parentsUntil$1(start, root, constant(false));\\n    };\\n    var parentsAndSelf = function (start, root) {\\n      return [start].concat(parents$1(start, root));\\n    };\\n    var Parents = {\\n      parentsUntil: parentsUntil$1,\\n      parents: parents$1,\\n      parentsAndSelf: parentsAndSelf\\n    };\\n\\n    var getChildrenUntilBlockBoundary = function (block) {\\n      var children$1 = children(block);\\n      return findIndex(children$1, isBlock).fold(function () {\\n        return children$1;\\n      }, function (index) {\\n        return children$1.slice(0, index);\\n      });\\n    };\\n    var extractChildren = function (block) {\\n      var children = getChildrenUntilBlockBoundary(block);\\n      each(children, remove$1);\\n      return children;\\n    };\\n    var removeEmptyRoot = function (rootNode, block) {\\n      var parents = Parents.parentsAndSelf(block, rootNode);\\n      return find(parents.reverse(), Empty.isEmpty).each(remove$1);\\n    };\\n    var isEmptyBefore = function (el) {\\n      return filter(prevSiblings(el), function (el) {\\n        return !Empty.isEmpty(el);\\n      }).length === 0;\\n    };\\n    var nestedBlockMerge = function (rootNode, fromBlock, toBlock, insertionPoint) {\\n      if (Empty.isEmpty(toBlock)) {\\n        PaddingBr.fillWithPaddingBr(toBlock);\\n        return CaretFinder.firstPositionIn(toBlock.dom());\\n      }\\n      if (isEmptyBefore(insertionPoint) && Empty.isEmpty(fromBlock)) {\\n        before(insertionPoint, Element.fromTag('br'));\\n      }\\n      var position = CaretFinder.prevPosition(toBlock.dom(), CaretPosition$1.before(insertionPoint.dom()));\\n      each(extractChildren(fromBlock), function (child) {\\n        before(insertionPoint, child);\\n      });\\n      removeEmptyRoot(rootNode, fromBlock);\\n      return position;\\n    };\\n    var sidelongBlockMerge = function (rootNode, fromBlock, toBlock) {\\n      if (Empty.isEmpty(toBlock)) {\\n        remove$1(toBlock);\\n        if (Empty.isEmpty(fromBlock)) {\\n          PaddingBr.fillWithPaddingBr(fromBlock);\\n        }\\n        return CaretFinder.firstPositionIn(fromBlock.dom());\\n      }\\n      var position = CaretFinder.lastPositionIn(toBlock.dom());\\n      each(extractChildren(fromBlock), function (child) {\\n        append(toBlock, child);\\n      });\\n      removeEmptyRoot(rootNode, fromBlock);\\n      return position;\\n    };\\n    var findInsertionPoint = function (toBlock, block) {\\n      var parentsAndSelf = Parents.parentsAndSelf(block, toBlock);\\n      return Option.from(parentsAndSelf[parentsAndSelf.length - 1]);\\n    };\\n    var getInsertionPoint = function (fromBlock, toBlock) {\\n      return contains$3(toBlock, fromBlock) ? findInsertionPoint(toBlock, fromBlock) : Option.none();\\n    };\\n    var trimBr = function (first, block) {\\n      CaretFinder.positionIn(first, block.dom()).map(function (position) {\\n        return position.getNode();\\n      }).map(Element.fromDom).filter(isBr).each(remove$1);\\n    };\\n    var mergeBlockInto = function (rootNode, fromBlock, toBlock) {\\n      trimBr(true, fromBlock);\\n      trimBr(false, toBlock);\\n      return getInsertionPoint(fromBlock, toBlock).fold(curry(sidelongBlockMerge, rootNode, fromBlock, toBlock), curry(nestedBlockMerge, rootNode, fromBlock, toBlock));\\n    };\\n    var mergeBlocks = function (rootNode, forward, block1, block2) {\\n      return forward ? mergeBlockInto(rootNode, block2, block1) : mergeBlockInto(rootNode, block1, block2);\\n    };\\n    var MergeBlocks = { mergeBlocks: mergeBlocks };\\n\\n    var backspaceDelete = function (editor, forward) {\\n      var position;\\n      var rootNode = Element.fromDom(editor.getBody());\\n      position = BlockMergeBoundary.read(rootNode.dom(), forward, editor.selection.getRng()).bind(function (blockBoundary) {\\n        return MergeBlocks.mergeBlocks(rootNode, forward, blockBoundary.from().block(), blockBoundary.to().block());\\n      });\\n      position.each(function (pos) {\\n        editor.selection.setRng(pos.toRange());\\n      });\\n      return position.isSome();\\n    };\\n    var BlockBoundaryDelete = { backspaceDelete: backspaceDelete };\\n\\n    var deleteRangeMergeBlocks = function (rootNode, selection) {\\n      var rng = selection.getRng();\\n      return lift2(DeleteUtils.getParentBlock(rootNode, Element.fromDom(rng.startContainer)), DeleteUtils.getParentBlock(rootNode, Element.fromDom(rng.endContainer)), function (block1, block2) {\\n        if (eq(block1, block2) === false) {\\n          rng.deleteContents();\\n          MergeBlocks.mergeBlocks(rootNode, true, block1, block2).each(function (pos) {\\n            selection.setRng(pos.toRange());\\n          });\\n          return true;\\n        } else {\\n          return false;\\n        }\\n      }).getOr(false);\\n    };\\n    var isRawNodeInTable = function (root, rawNode) {\\n      var node = Element.fromDom(rawNode);\\n      var isRoot = curry(eq, root);\\n      return ancestor(node, isTableCell, isRoot).isSome();\\n    };\\n    var isSelectionInTable = function (root, rng) {\\n      return isRawNodeInTable(root, rng.startContainer) || isRawNodeInTable(root, rng.endContainer);\\n    };\\n    var isEverythingSelected = function (root, rng) {\\n      var noPrevious = CaretFinder.prevPosition(root.dom(), CaretPosition$1.fromRangeStart(rng)).isNone();\\n      var noNext = CaretFinder.nextPosition(root.dom(), CaretPosition$1.fromRangeEnd(rng)).isNone();\\n      return !isSelectionInTable(root, rng) && noPrevious && noNext;\\n    };\\n    var emptyEditor = function (editor) {\\n      editor.setContent('');\\n      editor.selection.setCursorLocation();\\n      return true;\\n    };\\n    var deleteRange = function (editor) {\\n      var rootNode = Element.fromDom(editor.getBody());\\n      var rng = editor.selection.getRng();\\n      return isEverythingSelected(rootNode, rng) ? emptyEditor(editor) : deleteRangeMergeBlocks(rootNode, editor.selection);\\n    };\\n    var backspaceDelete$1 = function (editor, forward) {\\n      return editor.selection.isCollapsed() ? false : deleteRange(editor);\\n    };\\n    var BlockRangeDelete = { backspaceDelete: backspaceDelete$1 };\\n\\n    var generate$1 = function (cases) {\\n      if (!isArray(cases)) {\\n        throw new Error('cases must be an array');\\n      }\\n      if (cases.length === 0) {\\n        throw new Error('there must be at least one case');\\n      }\\n      var constructors = [];\\n      var adt = {};\\n      each(cases, function (acase, count) {\\n        var keys$1 = keys(acase);\\n        if (keys$1.length !== 1) {\\n          throw new Error('one and only one name per case');\\n        }\\n        var key = keys$1[0];\\n        var value = acase[key];\\n        if (adt[key] !== undefined) {\\n          throw new Error('duplicate key detected:' + key);\\n        } else if (key === 'cata') {\\n          throw new Error('cannot have a case named cata (sorry)');\\n        } else if (!isArray(value)) {\\n          throw new Error('case arguments must be an array');\\n        }\\n        constructors.push(key);\\n        adt[key] = function () {\\n          var argLength = arguments.length;\\n          if (argLength !== value.length) {\\n            throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\\n          }\\n          var args = new Array(argLength);\\n          for (var i = 0; i < args.length; i++) {\\n            args[i] = arguments[i];\\n          }\\n          var match = function (branches) {\\n            var branchKeys = keys(branches);\\n            if (constructors.length !== branchKeys.length) {\\n              throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\\\nActual: ' + branchKeys.join(','));\\n            }\\n            var allReqd = forall(constructors, function (reqKey) {\\n              return contains(branchKeys, reqKey);\\n            });\\n            if (!allReqd) {\\n              throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\\\nRequired: ' + constructors.join(', '));\\n            }\\n            return branches[key].apply(null, args);\\n          };\\n          return {\\n            fold: function () {\\n              if (arguments.length !== cases.length) {\\n                throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + arguments.length);\\n              }\\n              var target = arguments[count];\\n              return target.apply(null, args);\\n            },\\n            match: match,\\n            log: function (label) {\\n              domGlobals.console.log(label, {\\n                constructors: constructors,\\n                constructor: key,\\n                params: args\\n              });\\n            }\\n          };\\n        };\\n      });\\n      return adt;\\n    };\\n    var Adt = { generate: generate$1 };\\n\\n    var isBr$5 = function (pos) {\\n      return getElementFromPosition(pos).exists(isBr);\\n    };\\n    var findBr = function (forward, root, pos) {\\n      var parentBlocks = filter(Parents.parentsAndSelf(Element.fromDom(pos.container()), root), isBlock);\\n      var scope = head(parentBlocks).getOr(root);\\n      return CaretFinder.fromPosition(forward, scope.dom(), pos).filter(isBr$5);\\n    };\\n    var isBeforeBr = function (root, pos) {\\n      return getElementFromPosition(pos).exists(isBr) || findBr(true, root, pos).isSome();\\n    };\\n    var isAfterBr = function (root, pos) {\\n      return getElementFromPrevPosition(pos).exists(isBr) || findBr(false, root, pos).isSome();\\n    };\\n    var findPreviousBr = curry(findBr, false);\\n    var findNextBr = curry(findBr, true);\\n\\n    var is$2 = function (expected) {\\n      return function (actual) {\\n        return expected === actual;\\n      };\\n    };\\n    var isNbsp = is$2('\\\\xA0');\\n    var isWhiteSpace$1 = function (chr) {\\n      return /^[\\\\r\\\\n\\\\t ]$/.test(chr);\\n    };\\n    var isContent$1 = function (chr) {\\n      return !isWhiteSpace$1(chr) && !isNbsp(chr);\\n    };\\n\\n    var isChar = function (forward, predicate, pos) {\\n      return Option.from(pos.container()).filter(NodeType.isText).exists(function (text) {\\n        var delta = forward ? 0 : -1;\\n        return predicate(text.data.charAt(pos.offset() + delta));\\n      });\\n    };\\n    var isBeforeSpace = curry(isChar, true, isWhiteSpace$1);\\n    var isAfterSpace = curry(isChar, false, isWhiteSpace$1);\\n    var isEmptyText = function (pos) {\\n      var container = pos.container();\\n      return NodeType.isText(container) && container.data.length === 0;\\n    };\\n    var isNextToContentEditableFalse = function (relativeOffset, caretPosition) {\\n      var node = getChildNodeAtRelativeOffset(relativeOffset, caretPosition);\\n      return NodeType.isContentEditableFalse(node) && !NodeType.isBogusAll(node);\\n    };\\n    var isBeforeContentEditableFalse = curry(isNextToContentEditableFalse, 0);\\n    var isAfterContentEditableFalse = curry(isNextToContentEditableFalse, -1);\\n    var isNextToTable = function (relativeOffset, caretPosition) {\\n      return NodeType.isTable(getChildNodeAtRelativeOffset(relativeOffset, caretPosition));\\n    };\\n    var isBeforeTable = curry(isNextToTable, 0);\\n    var isAfterTable = curry(isNextToTable, -1);\\n\\n    var isCompoundElement = function (node) {\\n      return isTableCell(Element.fromDom(node)) || isListItem(Element.fromDom(node));\\n    };\\n    var DeleteAction = Adt.generate([\\n      { remove: ['element'] },\\n      { moveToElement: ['element'] },\\n      { moveToPosition: ['position'] }\\n    ]);\\n    var isAtContentEditableBlockCaret = function (forward, from) {\\n      var elm = from.getNode(forward === false);\\n      var caretLocation = forward ? 'after' : 'before';\\n      return NodeType.isElement(elm) && elm.getAttribute('data-mce-caret') === caretLocation;\\n    };\\n    var isDeleteFromCefDifferentBlocks = function (root, forward, from, to) {\\n      var inSameBlock = function (elm) {\\n        return isInline(Element.fromDom(elm)) && !isInSameBlock(from, to, root);\\n      };\\n      return getRelativeCefElm(!forward, from).fold(function () {\\n        return getRelativeCefElm(forward, to).fold(constant(false), inSameBlock);\\n      }, inSameBlock);\\n    };\\n    var deleteEmptyBlockOrMoveToCef = function (root, forward, from, to) {\\n      var toCefElm = to.getNode(forward === false);\\n      return DeleteUtils.getParentBlock(Element.fromDom(root), Element.fromDom(from.getNode())).map(function (blockElm) {\\n        return Empty.isEmpty(blockElm) ? DeleteAction.remove(blockElm.dom()) : DeleteAction.moveToElement(toCefElm);\\n      }).orThunk(function () {\\n        return Option.some(DeleteAction.moveToElement(toCefElm));\\n      });\\n    };\\n    var findCefPosition = function (root, forward, from) {\\n      return CaretFinder.fromPosition(forward, root, from).bind(function (to) {\\n        if (isCompoundElement(to.getNode())) {\\n          return Option.none();\\n        } else if (isDeleteFromCefDifferentBlocks(root, forward, from, to)) {\\n          return Option.none();\\n        } else if (forward && NodeType.isContentEditableFalse(to.getNode())) {\\n          return deleteEmptyBlockOrMoveToCef(root, forward, from, to);\\n        } else if (forward === false && NodeType.isContentEditableFalse(to.getNode(true))) {\\n          return deleteEmptyBlockOrMoveToCef(root, forward, from, to);\\n        } else if (forward && isAfterContentEditableFalse(from)) {\\n          return Option.some(DeleteAction.moveToPosition(to));\\n        } else if (forward === false && isBeforeContentEditableFalse(from)) {\\n          return Option.some(DeleteAction.moveToPosition(to));\\n        } else {\\n          return Option.none();\\n        }\\n      });\\n    };\\n    var getContentEditableBlockAction = function (forward, elm) {\\n      if (forward && NodeType.isContentEditableFalse(elm.nextSibling)) {\\n        return Option.some(DeleteAction.moveToElement(elm.nextSibling));\\n      } else if (forward === false && NodeType.isContentEditableFalse(elm.previousSibling)) {\\n        return Option.some(DeleteAction.moveToElement(elm.previousSibling));\\n      } else {\\n        return Option.none();\\n      }\\n    };\\n    var skipMoveToActionFromInlineCefToContent = function (root, from, deleteAction) {\\n      return deleteAction.fold(function (elm) {\\n        return Option.some(DeleteAction.remove(elm));\\n      }, function (elm) {\\n        return Option.some(DeleteAction.moveToElement(elm));\\n      }, function (to) {\\n        if (isInSameBlock(from, to, root)) {\\n          return Option.none();\\n        } else {\\n          return Option.some(DeleteAction.moveToPosition(to));\\n        }\\n      });\\n    };\\n    var getContentEditableAction = function (root, forward, from) {\\n      if (isAtContentEditableBlockCaret(forward, from)) {\\n        return getContentEditableBlockAction(forward, from.getNode(forward === false)).fold(function () {\\n          return findCefPosition(root, forward, from);\\n        }, Option.some);\\n      } else {\\n        return findCefPosition(root, forward, from).bind(function (deleteAction) {\\n          return skipMoveToActionFromInlineCefToContent(root, from, deleteAction);\\n        });\\n      }\\n    };\\n    var read$2 = function (root, forward, rng) {\\n      var normalizedRange = normalizeRange(forward ? 1 : -1, root, rng);\\n      var from = CaretPosition$1.fromRangeStart(normalizedRange);\\n      var rootElement = Element.fromDom(root);\\n      if (forward === false && isAfterContentEditableFalse(from)) {\\n        return Option.some(DeleteAction.remove(from.getNode(true)));\\n      } else if (forward && isBeforeContentEditableFalse(from)) {\\n        return Option.some(DeleteAction.remove(from.getNode()));\\n      } else if (forward === false && isBeforeContentEditableFalse(from) && isAfterBr(rootElement, from)) {\\n        return findPreviousBr(rootElement, from).map(function (br) {\\n          return DeleteAction.remove(br.getNode());\\n        });\\n      } else if (forward && isAfterContentEditableFalse(from) && isBeforeBr(rootElement, from)) {\\n        return findNextBr(rootElement, from).map(function (br) {\\n          return DeleteAction.remove(br.getNode());\\n        });\\n      } else {\\n        return getContentEditableAction(root, forward, from);\\n      }\\n    };\\n\\n    var isCollapsibleWhitespace = function (c) {\\n      return ' \\\\f\\\\n\\\\r\\\\t\\\\x0B'.indexOf(c) !== -1;\\n    };\\n    var normalizeContent = function (content, isStartOfContent, isEndOfContent) {\\n      var result = foldl(content.split(''), function (acc, c) {\\n        if (isCollapsibleWhitespace(c) || c === '\\\\xA0') {\\n          if (acc.previousCharIsSpace || acc.str === '' && isStartOfContent || acc.str.length === content.length - 1 && isEndOfContent) {\\n            return {\\n              previousCharIsSpace: false,\\n              str: acc.str + '\\\\xA0'\\n            };\\n          } else {\\n            return {\\n              previousCharIsSpace: true,\\n              str: acc.str + ' '\\n            };\\n          }\\n        } else {\\n          return {\\n            previousCharIsSpace: false,\\n            str: acc.str + c\\n          };\\n        }\\n      }, {\\n        previousCharIsSpace: false,\\n        str: ''\\n      });\\n      return result.str;\\n    };\\n    var normalize$1 = function (node, offset, count) {\\n      if (count === 0) {\\n        return;\\n      }\\n      var whitespace = node.data.slice(offset, offset + count);\\n      var isEndOfContent = offset + count >= node.data.length;\\n      var isStartOfContent = offset === 0;\\n      node.replaceData(offset, count, normalizeContent(whitespace, isStartOfContent, isEndOfContent));\\n    };\\n    var normalizeWhitespaceAfter = function (node, offset) {\\n      var content = node.data.slice(offset);\\n      var whitespaceCount = content.length - lTrim(content).length;\\n      return normalize$1(node, offset, whitespaceCount);\\n    };\\n    var normalizeWhitespaceBefore = function (node, offset) {\\n      var content = node.data.slice(0, offset);\\n      var whitespaceCount = content.length - rTrim(content).length;\\n      return normalize$1(node, offset - whitespaceCount, whitespaceCount);\\n    };\\n    var mergeTextNodes = function (prevNode, nextNode, normalizeWhitespace) {\\n      var whitespaceOffset = rTrim(prevNode.data).length;\\n      prevNode.appendData(nextNode.data);\\n      remove$1(Element.fromDom(nextNode));\\n      if (normalizeWhitespace) {\\n        normalizeWhitespaceAfter(prevNode, whitespaceOffset);\\n      }\\n      return prevNode;\\n    };\\n\\n    var needsReposition = function (pos, elm) {\\n      var container = pos.container();\\n      var offset = pos.offset();\\n      return CaretPosition$1.isTextPosition(pos) === false && container === elm.parentNode && offset > CaretPosition$1.before(elm).offset();\\n    };\\n    var reposition = function (elm, pos) {\\n      return needsReposition(pos, elm) ? CaretPosition$1(pos.container(), pos.offset() - 1) : pos;\\n    };\\n    var beforeOrStartOf = function (node) {\\n      return NodeType.isText(node) ? CaretPosition$1(node, 0) : CaretPosition$1.before(node);\\n    };\\n    var afterOrEndOf = function (node) {\\n      return NodeType.isText(node) ? CaretPosition$1(node, node.data.length) : CaretPosition$1.after(node);\\n    };\\n    var getPreviousSiblingCaretPosition = function (elm) {\\n      if (isCaretCandidate(elm.previousSibling)) {\\n        return Option.some(afterOrEndOf(elm.previousSibling));\\n      } else {\\n        return elm.previousSibling ? CaretFinder.lastPositionIn(elm.previousSibling) : Option.none();\\n      }\\n    };\\n    var getNextSiblingCaretPosition = function (elm) {\\n      if (isCaretCandidate(elm.nextSibling)) {\\n        return Option.some(beforeOrStartOf(elm.nextSibling));\\n      } else {\\n        return elm.nextSibling ? CaretFinder.firstPositionIn(elm.nextSibling) : Option.none();\\n      }\\n    };\\n    var findCaretPositionBackwardsFromElm = function (rootElement, elm) {\\n      var startPosition = CaretPosition$1.before(elm.previousSibling ? elm.previousSibling : elm.parentNode);\\n      return CaretFinder.prevPosition(rootElement, startPosition).fold(function () {\\n        return CaretFinder.nextPosition(rootElement, CaretPosition$1.after(elm));\\n      }, Option.some);\\n    };\\n    var findCaretPositionForwardsFromElm = function (rootElement, elm) {\\n      return CaretFinder.nextPosition(rootElement, CaretPosition$1.after(elm)).fold(function () {\\n        return CaretFinder.prevPosition(rootElement, CaretPosition$1.before(elm));\\n      }, Option.some);\\n    };\\n    var findCaretPositionBackwards = function (rootElement, elm) {\\n      return getPreviousSiblingCaretPosition(elm).orThunk(function () {\\n        return getNextSiblingCaretPosition(elm);\\n      }).orThunk(function () {\\n        return findCaretPositionBackwardsFromElm(rootElement, elm);\\n      });\\n    };\\n    var findCaretPositionForward = function (rootElement, elm) {\\n      return getNextSiblingCaretPosition(elm).orThunk(function () {\\n        return getPreviousSiblingCaretPosition(elm);\\n      }).orThunk(function () {\\n        return findCaretPositionForwardsFromElm(rootElement, elm);\\n      });\\n    };\\n    var findCaretPosition$1 = function (forward, rootElement, elm) {\\n      return forward ? findCaretPositionForward(rootElement, elm) : findCaretPositionBackwards(rootElement, elm);\\n    };\\n    var findCaretPosOutsideElmAfterDelete = function (forward, rootElement, elm) {\\n      return findCaretPosition$1(forward, rootElement, elm).map(curry(reposition, elm));\\n    };\\n    var setSelection = function (editor, forward, pos) {\\n      pos.fold(function () {\\n        editor.focus();\\n      }, function (pos) {\\n        editor.selection.setRng(pos.toRange(), forward);\\n      });\\n    };\\n    var eqRawNode = function (rawNode) {\\n      return function (elm) {\\n        return elm.dom() === rawNode;\\n      };\\n    };\\n    var isBlock$2 = function (editor, elm) {\\n      return elm && editor.schema.getBlockElements().hasOwnProperty(name(elm));\\n    };\\n    var paddEmptyBlock = function (elm) {\\n      if (Empty.isEmpty(elm)) {\\n        var br = Element.fromHtml('<br data-mce-bogus=\\\"1\\\">');\\n        empty(elm);\\n        append(elm, br);\\n        return Option.some(CaretPosition$1.before(br.dom()));\\n      } else {\\n        return Option.none();\\n      }\\n    };\\n    var deleteNormalized = function (elm, afterDeletePosOpt, normalizeWhitespace) {\\n      var prevTextOpt = prevSibling(elm).filter(isText);\\n      var nextTextOpt = nextSibling(elm).filter(isText);\\n      remove$1(elm);\\n      return lift3(prevTextOpt, nextTextOpt, afterDeletePosOpt, function (prev, next, pos) {\\n        var prevNode = prev.dom(), nextNode = next.dom();\\n        var offset = prevNode.data.length;\\n        mergeTextNodes(prevNode, nextNode, normalizeWhitespace);\\n        return pos.container() === nextNode ? CaretPosition$1(prevNode, offset) : pos;\\n      }).orThunk(function () {\\n        if (normalizeWhitespace) {\\n          prevTextOpt.each(function (elm) {\\n            return normalizeWhitespaceBefore(elm.dom(), elm.dom().length);\\n          });\\n          nextTextOpt.each(function (elm) {\\n            return normalizeWhitespaceAfter(elm.dom(), 0);\\n          });\\n        }\\n        return afterDeletePosOpt;\\n      });\\n    };\\n    var isInlineElement = function (editor, element) {\\n      return has(editor.schema.getTextInlineElements(), name(element));\\n    };\\n    var deleteElement = function (editor, forward, elm, moveCaret) {\\n      if (moveCaret === void 0) {\\n        moveCaret = true;\\n      }\\n      var afterDeletePos = findCaretPosOutsideElmAfterDelete(forward, editor.getBody(), elm.dom());\\n      var parentBlock = ancestor(elm, curry(isBlock$2, editor), eqRawNode(editor.getBody()));\\n      var normalizedAfterDeletePos = deleteNormalized(elm, afterDeletePos, isInlineElement(editor, elm));\\n      if (editor.dom.isEmpty(editor.getBody())) {\\n        editor.setContent('');\\n        editor.selection.setCursorLocation();\\n      } else {\\n        parentBlock.bind(paddEmptyBlock).fold(function () {\\n          if (moveCaret) {\\n            setSelection(editor, forward, normalizedAfterDeletePos);\\n          }\\n        }, function (paddPos) {\\n          if (moveCaret) {\\n            setSelection(editor, forward, Option.some(paddPos));\\n          }\\n        });\\n      }\\n    };\\n    var DeleteElement = { deleteElement: deleteElement };\\n\\n    var deleteElement$1 = function (editor, forward) {\\n      return function (element) {\\n        editor._selectionOverrides.hideFakeCaret();\\n        DeleteElement.deleteElement(editor, forward, Element.fromDom(element));\\n        return true;\\n      };\\n    };\\n    var moveToElement = function (editor, forward) {\\n      return function (element) {\\n        var pos = forward ? CaretPosition$1.before(element) : CaretPosition$1.after(element);\\n        editor.selection.setRng(pos.toRange());\\n        return true;\\n      };\\n    };\\n    var moveToPosition = function (editor) {\\n      return function (pos) {\\n        editor.selection.setRng(pos.toRange());\\n        return true;\\n      };\\n    };\\n    var backspaceDeleteCaret = function (editor, forward) {\\n      var result = read$2(editor.getBody(), forward, editor.selection.getRng()).map(function (deleteAction) {\\n        return deleteAction.fold(deleteElement$1(editor, forward), moveToElement(editor, forward), moveToPosition(editor));\\n      });\\n      return result.getOr(false);\\n    };\\n    var deleteOffscreenSelection = function (rootElement) {\\n      each(descendants$1(rootElement, '.mce-offscreen-selection'), remove$1);\\n    };\\n    var backspaceDeleteRange = function (editor, forward) {\\n      var selectedElement = editor.selection.getNode();\\n      if (NodeType.isContentEditableFalse(selectedElement)) {\\n        deleteOffscreenSelection(Element.fromDom(editor.getBody()));\\n        DeleteElement.deleteElement(editor, forward, Element.fromDom(editor.selection.getNode()));\\n        DeleteUtils.paddEmptyBody(editor);\\n        return true;\\n      } else {\\n        return false;\\n      }\\n    };\\n    var getContentEditableRoot = function (root, node) {\\n      while (node && node !== root) {\\n        if (NodeType.isContentEditableTrue(node) || NodeType.isContentEditableFalse(node)) {\\n          return node;\\n        }\\n        node = node.parentNode;\\n      }\\n      return null;\\n    };\\n    var paddEmptyElement = function (editor) {\\n      var br;\\n      var ceRoot = getContentEditableRoot(editor.getBody(), editor.selection.getNode());\\n      if (NodeType.isContentEditableTrue(ceRoot) && editor.dom.isBlock(ceRoot) && editor.dom.isEmpty(ceRoot)) {\\n        br = editor.dom.create('br', { 'data-mce-bogus': '1' });\\n        editor.dom.setHTML(ceRoot, '');\\n        ceRoot.appendChild(br);\\n        editor.selection.setRng(CaretPosition$1.before(br).toRange());\\n      }\\n      return true;\\n    };\\n    var backspaceDelete$2 = function (editor, forward) {\\n      if (editor.selection.isCollapsed()) {\\n        return backspaceDeleteCaret(editor, forward);\\n      } else {\\n        return backspaceDeleteRange(editor, forward);\\n      }\\n    };\\n    var CefDelete = {\\n      backspaceDelete: backspaceDelete$2,\\n      paddEmptyElement: paddEmptyElement\\n    };\\n\\n    var isText$8 = NodeType.isText;\\n    var startsWithCaretContainer$1 = function (node) {\\n      return isText$8(node) && node.data[0] === Zwsp.ZWSP;\\n    };\\n    var endsWithCaretContainer$1 = function (node) {\\n      return isText$8(node) && node.data[node.data.length - 1] === Zwsp.ZWSP;\\n    };\\n    var createZwsp = function (node) {\\n      return node.ownerDocument.createTextNode(Zwsp.ZWSP);\\n    };\\n    var insertBefore$1 = function (node) {\\n      if (isText$8(node.previousSibling)) {\\n        if (endsWithCaretContainer$1(node.previousSibling)) {\\n          return node.previousSibling;\\n        } else {\\n          node.previousSibling.appendData(Zwsp.ZWSP);\\n          return node.previousSibling;\\n        }\\n      } else if (isText$8(node)) {\\n        if (startsWithCaretContainer$1(node)) {\\n          return node;\\n        } else {\\n          node.insertData(0, Zwsp.ZWSP);\\n          return node;\\n        }\\n      } else {\\n        var newNode = createZwsp(node);\\n        node.parentNode.insertBefore(newNode, node);\\n        return newNode;\\n      }\\n    };\\n    var insertAfter$1 = function (node) {\\n      if (isText$8(node.nextSibling)) {\\n        if (startsWithCaretContainer$1(node.nextSibling)) {\\n          return node.nextSibling;\\n        } else {\\n          node.nextSibling.insertData(0, Zwsp.ZWSP);\\n          return node.nextSibling;\\n        }\\n      } else if (isText$8(node)) {\\n        if (endsWithCaretContainer$1(node)) {\\n          return node;\\n        } else {\\n          node.appendData(Zwsp.ZWSP);\\n          return node;\\n        }\\n      } else {\\n        var newNode = createZwsp(node);\\n        if (node.nextSibling) {\\n          node.parentNode.insertBefore(newNode, node.nextSibling);\\n        } else {\\n          node.parentNode.appendChild(newNode);\\n        }\\n        return newNode;\\n      }\\n    };\\n    var insertInline$1 = function (before, node) {\\n      return before ? insertBefore$1(node) : insertAfter$1(node);\\n    };\\n    var insertInlineBefore = curry(insertInline$1, true);\\n    var insertInlineAfter = curry(insertInline$1, false);\\n\\n    var insertInlinePos = function (pos, before) {\\n      if (NodeType.isText(pos.container())) {\\n        return insertInline$1(before, pos.container());\\n      } else {\\n        return insertInline$1(before, pos.getNode());\\n      }\\n    };\\n    var isPosCaretContainer = function (pos, caret) {\\n      var caretNode = caret.get();\\n      return caretNode && pos.container() === caretNode && isCaretContainerInline(caretNode);\\n    };\\n    var renderCaret = function (caret, location) {\\n      return location.fold(function (element) {\\n        CaretContainerRemove.remove(caret.get());\\n        var text = insertInlineBefore(element);\\n        caret.set(text);\\n        return Option.some(CaretPosition$1(text, text.length - 1));\\n      }, function (element) {\\n        return CaretFinder.firstPositionIn(element).map(function (pos) {\\n          if (!isPosCaretContainer(pos, caret)) {\\n            CaretContainerRemove.remove(caret.get());\\n            var text = insertInlinePos(pos, true);\\n            caret.set(text);\\n            return CaretPosition$1(text, 1);\\n          } else {\\n            return CaretPosition$1(caret.get(), 1);\\n          }\\n        });\\n      }, function (element) {\\n        return CaretFinder.lastPositionIn(element).map(function (pos) {\\n          if (!isPosCaretContainer(pos, caret)) {\\n            CaretContainerRemove.remove(caret.get());\\n            var text = insertInlinePos(pos, false);\\n            caret.set(text);\\n            return CaretPosition$1(text, text.length - 1);\\n          } else {\\n            return CaretPosition$1(caret.get(), caret.get().length - 1);\\n          }\\n        });\\n      }, function (element) {\\n        CaretContainerRemove.remove(caret.get());\\n        var text = insertInlineAfter(element);\\n        caret.set(text);\\n        return Option.some(CaretPosition$1(text, 1));\\n      });\\n    };\\n    var BoundaryCaret = { renderCaret: renderCaret };\\n\\n    var evaluateUntil = function (fns, args) {\\n      for (var i = 0; i < fns.length; i++) {\\n        var result = fns[i].apply(null, args);\\n        if (result.isSome()) {\\n          return result;\\n        }\\n      }\\n      return Option.none();\\n    };\\n    var LazyEvaluator = { evaluateUntil: evaluateUntil };\\n\\n    var Location = Adt.generate([\\n      { before: ['element'] },\\n      { start: ['element'] },\\n      { end: ['element'] },\\n      { after: ['element'] }\\n    ]);\\n    var rescope = function (rootNode, node) {\\n      var parentBlock = getParentBlock(node, rootNode);\\n      return parentBlock ? parentBlock : rootNode;\\n    };\\n    var before$3 = function (isInlineTarget, rootNode, pos) {\\n      var nPos = InlineUtils.normalizeForwards(pos);\\n      var scope = rescope(rootNode, nPos.container());\\n      return InlineUtils.findRootInline(isInlineTarget, scope, nPos).fold(function () {\\n        return CaretFinder.nextPosition(scope, nPos).bind(curry(InlineUtils.findRootInline, isInlineTarget, scope)).map(function (inline) {\\n          return Location.before(inline);\\n        });\\n      }, Option.none);\\n    };\\n    var isNotInsideFormatCaretContainer = function (rootNode, elm) {\\n      return getParentCaretContainer(rootNode, elm) === null;\\n    };\\n    var findInsideRootInline = function (isInlineTarget, rootNode, pos) {\\n      return InlineUtils.findRootInline(isInlineTarget, rootNode, pos).filter(curry(isNotInsideFormatCaretContainer, rootNode));\\n    };\\n    var start = function (isInlineTarget, rootNode, pos) {\\n      var nPos = InlineUtils.normalizeBackwards(pos);\\n      return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {\\n        var prevPos = CaretFinder.prevPosition(inline, nPos);\\n        return prevPos.isNone() ? Option.some(Location.start(inline)) : Option.none();\\n      });\\n    };\\n    var end = function (isInlineTarget, rootNode, pos) {\\n      var nPos = InlineUtils.normalizeForwards(pos);\\n      return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {\\n        var nextPos = CaretFinder.nextPosition(inline, nPos);\\n        return nextPos.isNone() ? Option.some(Location.end(inline)) : Option.none();\\n      });\\n    };\\n    var after$2 = function (isInlineTarget, rootNode, pos) {\\n      var nPos = InlineUtils.normalizeBackwards(pos);\\n      var scope = rescope(rootNode, nPos.container());\\n      return InlineUtils.findRootInline(isInlineTarget, scope, nPos).fold(function () {\\n        return CaretFinder.prevPosition(scope, nPos).bind(curry(InlineUtils.findRootInline, isInlineTarget, scope)).map(function (inline) {\\n          return Location.after(inline);\\n        });\\n      }, Option.none);\\n    };\\n    var isValidLocation = function (location) {\\n      return InlineUtils.isRtl(getElement(location)) === false;\\n    };\\n    var readLocation = function (isInlineTarget, rootNode, pos) {\\n      var location = LazyEvaluator.evaluateUntil([\\n        before$3,\\n        start,\\n        end,\\n        after$2\\n      ], [\\n        isInlineTarget,\\n        rootNode,\\n        pos\\n      ]);\\n      return location.filter(isValidLocation);\\n    };\\n    var getElement = function (location) {\\n      return location.fold(identity, identity, identity, identity);\\n    };\\n    var getName = function (location) {\\n      return location.fold(constant('before'), constant('start'), constant('end'), constant('after'));\\n    };\\n    var outside = function (location) {\\n      return location.fold(Location.before, Location.before, Location.after, Location.after);\\n    };\\n    var inside = function (location) {\\n      return location.fold(Location.start, Location.start, Location.end, Location.end);\\n    };\\n    var isEq$1 = function (location1, location2) {\\n      return getName(location1) === getName(location2) && getElement(location1) === getElement(location2);\\n    };\\n    var betweenInlines = function (forward, isInlineTarget, rootNode, from, to, location) {\\n      return lift2(InlineUtils.findRootInline(isInlineTarget, rootNode, from), InlineUtils.findRootInline(isInlineTarget, rootNode, to), function (fromInline, toInline) {\\n        if (fromInline !== toInline && InlineUtils.hasSameParentBlock(rootNode, fromInline, toInline)) {\\n          return Location.after(forward ? fromInline : toInline);\\n        } else {\\n          return location;\\n        }\\n      }).getOr(location);\\n    };\\n    var skipNoMovement = function (fromLocation, toLocation) {\\n      return fromLocation.fold(constant(true), function (fromLocation) {\\n        return !isEq$1(fromLocation, toLocation);\\n      });\\n    };\\n    var findLocationTraverse = function (forward, isInlineTarget, rootNode, fromLocation, pos) {\\n      var from = InlineUtils.normalizePosition(forward, pos);\\n      var to = CaretFinder.fromPosition(forward, rootNode, from).map(curry(InlineUtils.normalizePosition, forward));\\n      var location = to.fold(function () {\\n        return fromLocation.map(outside);\\n      }, function (to) {\\n        return readLocation(isInlineTarget, rootNode, to).map(curry(betweenInlines, forward, isInlineTarget, rootNode, from, to)).filter(curry(skipNoMovement, fromLocation));\\n      });\\n      return location.filter(isValidLocation);\\n    };\\n    var findLocationSimple = function (forward, location) {\\n      if (forward) {\\n        return location.fold(compose(Option.some, Location.start), Option.none, compose(Option.some, Location.after), Option.none);\\n      } else {\\n        return location.fold(Option.none, compose(Option.some, Location.before), Option.none, compose(Option.some, Location.end));\\n      }\\n    };\\n    var findLocation = function (forward, isInlineTarget, rootNode, pos) {\\n      var from = InlineUtils.normalizePosition(forward, pos);\\n      var fromLocation = readLocation(isInlineTarget, rootNode, from);\\n      return readLocation(isInlineTarget, rootNode, from).bind(curry(findLocationSimple, forward)).orThunk(function () {\\n        return findLocationTraverse(forward, isInlineTarget, rootNode, fromLocation, pos);\\n      });\\n    };\\n    var BoundaryLocation = {\\n      readLocation: readLocation,\\n      findLocation: findLocation,\\n      prevLocation: curry(findLocation, false),\\n      nextLocation: curry(findLocation, true),\\n      getElement: getElement,\\n      outside: outside,\\n      inside: inside\\n    };\\n\\n    var hasSelectionModifyApi = function (editor) {\\n      return isFunction(editor.selection.getSel().modify);\\n    };\\n    var moveRel = function (forward, selection, pos) {\\n      var delta = forward ? 1 : -1;\\n      selection.setRng(CaretPosition$1(pos.container(), pos.offset() + delta).toRange());\\n      selection.getSel().modify('move', forward ? 'forward' : 'backward', 'word');\\n      return true;\\n    };\\n    var moveByWord = function (forward, editor) {\\n      var rng = editor.selection.getRng();\\n      var pos = forward ? CaretPosition$1.fromRangeEnd(rng) : CaretPosition$1.fromRangeStart(rng);\\n      if (!hasSelectionModifyApi(editor)) {\\n        return false;\\n      } else if (forward && isBeforeInline(pos)) {\\n        return moveRel(true, editor.selection, pos);\\n      } else if (!forward && isAfterInline(pos)) {\\n        return moveRel(false, editor.selection, pos);\\n      } else {\\n        return false;\\n      }\\n    };\\n    var WordSelection = {\\n      hasSelectionModifyApi: hasSelectionModifyApi,\\n      moveByWord: moveByWord\\n    };\\n\\n    var setCaretPosition = function (editor, pos) {\\n      var rng = editor.dom.createRng();\\n      rng.setStart(pos.container(), pos.offset());\\n      rng.setEnd(pos.container(), pos.offset());\\n      editor.selection.setRng(rng);\\n    };\\n    var isFeatureEnabled = function (editor) {\\n      return editor.settings.inline_boundaries !== false;\\n    };\\n    var setSelected = function (state, elm) {\\n      if (state) {\\n        elm.setAttribute('data-mce-selected', 'inline-boundary');\\n      } else {\\n        elm.removeAttribute('data-mce-selected');\\n      }\\n    };\\n    var renderCaretLocation = function (editor, caret, location) {\\n      return BoundaryCaret.renderCaret(caret, location).map(function (pos) {\\n        setCaretPosition(editor, pos);\\n        return location;\\n      });\\n    };\\n    var findLocation$1 = function (editor, caret, forward) {\\n      var rootNode = editor.getBody();\\n      var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());\\n      var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\\n      var location = BoundaryLocation.findLocation(forward, isInlineTarget, rootNode, from);\\n      return location.bind(function (location) {\\n        return renderCaretLocation(editor, caret, location);\\n      });\\n    };\\n    var toggleInlines = function (isInlineTarget, dom, elms) {\\n      var selectedInlines = filter(dom.select('*[data-mce-selected=\\\"inline-boundary\\\"]'), isInlineTarget);\\n      var targetInlines = filter(elms, isInlineTarget);\\n      each(difference(selectedInlines, targetInlines), curry(setSelected, false));\\n      each(difference(targetInlines, selectedInlines), curry(setSelected, true));\\n    };\\n    var safeRemoveCaretContainer = function (editor, caret) {\\n      if (editor.selection.isCollapsed() && editor.composing !== true && caret.get()) {\\n        var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\\n        if (CaretPosition$1.isTextPosition(pos) && InlineUtils.isAtZwsp(pos) === false) {\\n          setCaretPosition(editor, CaretContainerRemove.removeAndReposition(caret.get(), pos));\\n          caret.set(null);\\n        }\\n      }\\n    };\\n    var renderInsideInlineCaret = function (isInlineTarget, editor, caret, elms) {\\n      if (editor.selection.isCollapsed()) {\\n        var inlines = filter(elms, isInlineTarget);\\n        each(inlines, function (inline) {\\n          var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\\n          BoundaryLocation.readLocation(isInlineTarget, editor.getBody(), pos).bind(function (location) {\\n            return renderCaretLocation(editor, caret, location);\\n          });\\n        });\\n      }\\n    };\\n    var move = function (editor, caret, forward) {\\n      return function () {\\n        return isFeatureEnabled(editor) ? findLocation$1(editor, caret, forward).isSome() : false;\\n      };\\n    };\\n    var moveWord = function (forward, editor, caret) {\\n      return function () {\\n        return isFeatureEnabled(editor) ? WordSelection.moveByWord(forward, editor) : false;\\n      };\\n    };\\n    var setupSelectedState = function (editor) {\\n      var caret = Cell(null);\\n      var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\\n      editor.on('NodeChange', function (e) {\\n        if (isFeatureEnabled(editor)) {\\n          toggleInlines(isInlineTarget, editor.dom, e.parents);\\n          safeRemoveCaretContainer(editor, caret);\\n          renderInsideInlineCaret(isInlineTarget, editor, caret, e.parents);\\n        }\\n      });\\n      return caret;\\n    };\\n    var moveNextWord = curry(moveWord, true);\\n    var movePrevWord = curry(moveWord, false);\\n    var BoundarySelection = {\\n      move: move,\\n      moveNextWord: moveNextWord,\\n      movePrevWord: movePrevWord,\\n      setupSelectedState: setupSelectedState,\\n      setCaretPosition: setCaretPosition\\n    };\\n\\n    var isFeatureEnabled$1 = function (editor) {\\n      return editor.settings.inline_boundaries !== false;\\n    };\\n    var rangeFromPositions = function (from, to) {\\n      var range = domGlobals.document.createRange();\\n      range.setStart(from.container(), from.offset());\\n      range.setEnd(to.container(), to.offset());\\n      return range;\\n    };\\n    var hasOnlyTwoOrLessPositionsLeft = function (elm) {\\n      return lift2(CaretFinder.firstPositionIn(elm), CaretFinder.lastPositionIn(elm), function (firstPos, lastPos) {\\n        var normalizedFirstPos = InlineUtils.normalizePosition(true, firstPos);\\n        var normalizedLastPos = InlineUtils.normalizePosition(false, lastPos);\\n        return CaretFinder.nextPosition(elm, normalizedFirstPos).map(function (pos) {\\n          return pos.isEqual(normalizedLastPos);\\n        }).getOr(true);\\n      }).getOr(true);\\n    };\\n    var setCaretLocation = function (editor, caret) {\\n      return function (location) {\\n        return BoundaryCaret.renderCaret(caret, location).map(function (pos) {\\n          BoundarySelection.setCaretPosition(editor, pos);\\n          return true;\\n        }).getOr(false);\\n      };\\n    };\\n    var deleteFromTo = function (editor, caret, from, to) {\\n      var rootNode = editor.getBody();\\n      var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\\n      editor.undoManager.ignore(function () {\\n        editor.selection.setRng(rangeFromPositions(from, to));\\n        editor.execCommand('Delete');\\n        BoundaryLocation.readLocation(isInlineTarget, rootNode, CaretPosition$1.fromRangeStart(editor.selection.getRng())).map(BoundaryLocation.inside).map(setCaretLocation(editor, caret));\\n      });\\n      editor.nodeChanged();\\n    };\\n    var rescope$1 = function (rootNode, node) {\\n      var parentBlock = getParentBlock(node, rootNode);\\n      return parentBlock ? parentBlock : rootNode;\\n    };\\n    var backspaceDeleteCollapsed = function (editor, caret, forward, from) {\\n      var rootNode = rescope$1(editor.getBody(), from.container());\\n      var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\\n      var fromLocation = BoundaryLocation.readLocation(isInlineTarget, rootNode, from);\\n      return fromLocation.bind(function (location) {\\n        if (forward) {\\n          return location.fold(constant(Option.some(BoundaryLocation.inside(location))), Option.none, constant(Option.some(BoundaryLocation.outside(location))), Option.none);\\n        } else {\\n          return location.fold(Option.none, constant(Option.some(BoundaryLocation.outside(location))), Option.none, constant(Option.some(BoundaryLocation.inside(location))));\\n        }\\n      }).map(setCaretLocation(editor, caret)).getOrThunk(function () {\\n        var toPosition = CaretFinder.navigate(forward, rootNode, from);\\n        var toLocation = toPosition.bind(function (pos) {\\n          return BoundaryLocation.readLocation(isInlineTarget, rootNode, pos);\\n        });\\n        if (fromLocation.isSome() && toLocation.isSome()) {\\n          return InlineUtils.findRootInline(isInlineTarget, rootNode, from).map(function (elm) {\\n            if (hasOnlyTwoOrLessPositionsLeft(elm)) {\\n              DeleteElement.deleteElement(editor, forward, Element.fromDom(elm));\\n              return true;\\n            } else {\\n              return false;\\n            }\\n          }).getOr(false);\\n        } else {\\n          return toLocation.bind(function (_) {\\n            return toPosition.map(function (to) {\\n              if (forward) {\\n                deleteFromTo(editor, caret, from, to);\\n              } else {\\n                deleteFromTo(editor, caret, to, from);\\n              }\\n              return true;\\n            });\\n          }).getOr(false);\\n        }\\n      });\\n    };\\n    var backspaceDelete$3 = function (editor, caret, forward) {\\n      if (editor.selection.isCollapsed() && isFeatureEnabled$1(editor)) {\\n        var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());\\n        return backspaceDeleteCollapsed(editor, caret, forward, from);\\n      }\\n      return false;\\n    };\\n    var InlineBoundaryDelete = { backspaceDelete: backspaceDelete$3 };\\n\\n    var tableCellRng = Immutable('start', 'end');\\n    var tableSelection = Immutable('rng', 'table', 'cells');\\n    var deleteAction = Adt.generate([\\n      { removeTable: ['element'] },\\n      { emptyCells: ['cells'] }\\n    ]);\\n    var isRootFromElement = function (root) {\\n      return curry(eq, root);\\n    };\\n    var getClosestCell = function (container, isRoot) {\\n      return closest$1(Element.fromDom(container), 'td,th', isRoot);\\n    };\\n    var getClosestTable = function (cell, isRoot) {\\n      return ancestor$1(cell, 'table', isRoot);\\n    };\\n    var isExpandedCellRng = function (cellRng) {\\n      return eq(cellRng.start(), cellRng.end()) === false;\\n    };\\n    var getTableFromCellRng = function (cellRng, isRoot) {\\n      return getClosestTable(cellRng.start(), isRoot).bind(function (startParentTable) {\\n        return getClosestTable(cellRng.end(), isRoot).bind(function (endParentTable) {\\n          return eq(startParentTable, endParentTable) ? Option.some(startParentTable) : Option.none();\\n        });\\n      });\\n    };\\n    var getTableCells = function (table) {\\n      return descendants$1(table, 'td,th');\\n    };\\n    var getCellRangeFromStartTable = function (cellRng, isRoot) {\\n      return getClosestTable(cellRng.start(), isRoot).bind(function (table) {\\n        return last(getTableCells(table)).map(function (endCell) {\\n          return tableCellRng(cellRng.start(), endCell);\\n        });\\n      });\\n    };\\n    var partialSelection = function (isRoot, rng) {\\n      var startCell = getClosestCell(rng.startContainer, isRoot);\\n      var endCell = getClosestCell(rng.endContainer, isRoot);\\n      return rng.collapsed ? Option.none() : lift2(startCell, endCell, tableCellRng).fold(function () {\\n        return startCell.fold(function () {\\n          return endCell.bind(function (endCell) {\\n            return getClosestTable(endCell, isRoot).bind(function (table) {\\n              return head(getTableCells(table)).map(function (startCell) {\\n                return tableCellRng(startCell, endCell);\\n              });\\n            });\\n          });\\n        }, function (startCell) {\\n          return getClosestTable(startCell, isRoot).bind(function (table) {\\n            return last(getTableCells(table)).map(function (endCell) {\\n              return tableCellRng(startCell, endCell);\\n            });\\n          });\\n        });\\n      }, function (cellRng) {\\n        return isWithinSameTable(isRoot, cellRng) ? Option.none() : getCellRangeFromStartTable(cellRng, isRoot);\\n      });\\n    };\\n    var isWithinSameTable = function (isRoot, cellRng) {\\n      return getTableFromCellRng(cellRng, isRoot).isSome();\\n    };\\n    var getCellRng = function (rng, isRoot) {\\n      var startCell = getClosestCell(rng.startContainer, isRoot);\\n      var endCell = getClosestCell(rng.endContainer, isRoot);\\n      return lift2(startCell, endCell, tableCellRng).filter(isExpandedCellRng).filter(function (cellRng) {\\n        return isWithinSameTable(isRoot, cellRng);\\n      }).orThunk(function () {\\n        return partialSelection(isRoot, rng);\\n      });\\n    };\\n    var getTableSelectionFromCellRng = function (cellRng, isRoot) {\\n      return getTableFromCellRng(cellRng, isRoot).map(function (table) {\\n        return tableSelection(cellRng, table, getTableCells(table));\\n      });\\n    };\\n    var getTableSelectionFromRng = function (root, rng) {\\n      var isRoot = isRootFromElement(root);\\n      return getCellRng(rng, isRoot).bind(function (cellRng) {\\n        return getTableSelectionFromCellRng(cellRng, isRoot);\\n      });\\n    };\\n    var getCellIndex = function (cells, cell) {\\n      return findIndex(cells, function (x) {\\n        return eq(x, cell);\\n      });\\n    };\\n    var getSelectedCells = function (tableSelection) {\\n      return lift2(getCellIndex(tableSelection.cells(), tableSelection.rng().start()), getCellIndex(tableSelection.cells(), tableSelection.rng().end()), function (startIndex, endIndex) {\\n        return tableSelection.cells().slice(startIndex, endIndex + 1);\\n      });\\n    };\\n    var getAction = function (tableSelection) {\\n      return getSelectedCells(tableSelection).map(function (selected) {\\n        var cells = tableSelection.cells();\\n        return selected.length === cells.length ? deleteAction.removeTable(tableSelection.table()) : deleteAction.emptyCells(selected);\\n      });\\n    };\\n    var getActionFromCells = function (cells) {\\n      return deleteAction.emptyCells(cells);\\n    };\\n    var getActionFromRange = function (root, rng) {\\n      return getTableSelectionFromRng(root, rng).bind(getAction);\\n    };\\n    var TableDeleteAction = {\\n      getActionFromRange: getActionFromRange,\\n      getActionFromCells: getActionFromCells\\n    };\\n\\n    var getRanges = function (selection) {\\n      var ranges = [];\\n      if (selection) {\\n        for (var i = 0; i < selection.rangeCount; i++) {\\n          ranges.push(selection.getRangeAt(i));\\n        }\\n      }\\n      return ranges;\\n    };\\n    var getSelectedNodes = function (ranges) {\\n      return bind(ranges, function (range) {\\n        var node = getSelectedNode(range);\\n        return node ? [Element.fromDom(node)] : [];\\n      });\\n    };\\n    var hasMultipleRanges = function (selection) {\\n      return getRanges(selection).length > 1;\\n    };\\n    var MultiRange = {\\n      getRanges: getRanges,\\n      getSelectedNodes: getSelectedNodes,\\n      hasMultipleRanges: hasMultipleRanges\\n    };\\n\\n    var getCellsFromRanges = function (ranges) {\\n      return filter(MultiRange.getSelectedNodes(ranges), isTableCell);\\n    };\\n    var getCellsFromElement = function (elm) {\\n      var selectedCells = descendants$1(elm, 'td[data-mce-selected],th[data-mce-selected]');\\n      return selectedCells;\\n    };\\n    var getCellsFromElementOrRanges = function (ranges, element) {\\n      var selectedCells = getCellsFromElement(element);\\n      var rangeCells = getCellsFromRanges(ranges);\\n      return selectedCells.length > 0 ? selectedCells : rangeCells;\\n    };\\n    var getCellsFromEditor = function (editor) {\\n      return getCellsFromElementOrRanges(MultiRange.getRanges(editor.selection.getSel()), Element.fromDom(editor.getBody()));\\n    };\\n    var TableCellSelection = {\\n      getCellsFromRanges: getCellsFromRanges,\\n      getCellsFromElement: getCellsFromElement,\\n      getCellsFromElementOrRanges: getCellsFromElementOrRanges,\\n      getCellsFromEditor: getCellsFromEditor\\n    };\\n\\n    var emptyCells = function (editor, cells) {\\n      each(cells, PaddingBr.fillWithPaddingBr);\\n      editor.selection.setCursorLocation(cells[0].dom(), 0);\\n      return true;\\n    };\\n    var deleteTableElement = function (editor, table) {\\n      DeleteElement.deleteElement(editor, false, table);\\n      return true;\\n    };\\n    var deleteCellRange = function (editor, rootElm, rng) {\\n      return TableDeleteAction.getActionFromRange(rootElm, rng).map(function (action) {\\n        return action.fold(curry(deleteTableElement, editor), curry(emptyCells, editor));\\n      });\\n    };\\n    var deleteCaptionRange = function (editor, caption) {\\n      return emptyElement(editor, caption);\\n    };\\n    var deleteTableRange = function (editor, rootElm, rng, startElm) {\\n      return getParentCaption(rootElm, startElm).fold(function () {\\n        return deleteCellRange(editor, rootElm, rng);\\n      }, function (caption) {\\n        return deleteCaptionRange(editor, caption);\\n      }).getOr(false);\\n    };\\n    var deleteRange$1 = function (editor, startElm) {\\n      var rootNode = Element.fromDom(editor.getBody());\\n      var rng = editor.selection.getRng();\\n      var selectedCells = TableCellSelection.getCellsFromEditor(editor);\\n      return selectedCells.length !== 0 ? emptyCells(editor, selectedCells) : deleteTableRange(editor, rootNode, rng, startElm);\\n    };\\n    var getParentCell = function (rootElm, elm) {\\n      return find(Parents.parentsAndSelf(elm, rootElm), isTableCell);\\n    };\\n    var getParentCaption = function (rootElm, elm) {\\n      return find(Parents.parentsAndSelf(elm, rootElm), function (elm) {\\n        return name(elm) === 'caption';\\n      });\\n    };\\n    var deleteBetweenCells = function (editor, rootElm, forward, fromCell, from) {\\n      return CaretFinder.navigate(forward, editor.getBody(), from).bind(function (to) {\\n        return getParentCell(rootElm, Element.fromDom(to.getNode())).map(function (toCell) {\\n          return eq(toCell, fromCell) === false;\\n        });\\n      });\\n    };\\n    var emptyElement = function (editor, elm) {\\n      PaddingBr.fillWithPaddingBr(elm);\\n      editor.selection.setCursorLocation(elm.dom(), 0);\\n      return Option.some(true);\\n    };\\n    var isDeleteOfLastCharPos = function (fromCaption, forward, from, to) {\\n      return CaretFinder.firstPositionIn(fromCaption.dom()).bind(function (first) {\\n        return CaretFinder.lastPositionIn(fromCaption.dom()).map(function (last) {\\n          return forward ? from.isEqual(first) && to.isEqual(last) : from.isEqual(last) && to.isEqual(first);\\n        });\\n      }).getOr(true);\\n    };\\n    var emptyCaretCaption = function (editor, elm) {\\n      return emptyElement(editor, elm);\\n    };\\n    var validateCaretCaption = function (rootElm, fromCaption, to) {\\n      return getParentCaption(rootElm, Element.fromDom(to.getNode())).map(function (toCaption) {\\n        return eq(toCaption, fromCaption) === false;\\n      });\\n    };\\n    var deleteCaretInsideCaption = function (editor, rootElm, forward, fromCaption, from) {\\n      return CaretFinder.navigate(forward, editor.getBody(), from).bind(function (to) {\\n        return isDeleteOfLastCharPos(fromCaption, forward, from, to) ? emptyCaretCaption(editor, fromCaption) : validateCaretCaption(rootElm, fromCaption, to);\\n      }).or(Option.some(true));\\n    };\\n    var deleteCaretCells = function (editor, forward, rootElm, startElm) {\\n      var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());\\n      return getParentCell(rootElm, startElm).bind(function (fromCell) {\\n        return Empty.isEmpty(fromCell) ? emptyElement(editor, fromCell) : deleteBetweenCells(editor, rootElm, forward, fromCell, from);\\n      });\\n    };\\n    var deleteCaretCaption = function (editor, forward, rootElm, fromCaption) {\\n      var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());\\n      return Empty.isEmpty(fromCaption) ? emptyElement(editor, fromCaption) : deleteCaretInsideCaption(editor, rootElm, forward, fromCaption, from);\\n    };\\n    var deleteCaret = function (editor, forward, startElm) {\\n      var rootElm = Element.fromDom(editor.getBody());\\n      return getParentCaption(rootElm, startElm).fold(function () {\\n        return deleteCaretCells(editor, forward, rootElm, startElm);\\n      }, function (fromCaption) {\\n        return deleteCaretCaption(editor, forward, rootElm, fromCaption);\\n      }).getOr(false);\\n    };\\n    var backspaceDelete$4 = function (editor, forward) {\\n      var startElm = Element.fromDom(editor.selection.getStart(true));\\n      var cells = TableCellSelection.getCellsFromEditor(editor);\\n      return editor.selection.isCollapsed() && cells.length === 0 ? deleteCaret(editor, forward, startElm) : deleteRange$1(editor, startElm);\\n    };\\n    var TableDelete = { backspaceDelete: backspaceDelete$4 };\\n\\n    var isEq$2 = FormatUtils.isEq;\\n    var matchesUnInheritedFormatSelector = function (ed, node, name) {\\n      var formatList = ed.formatter.get(name);\\n      if (formatList) {\\n        for (var i = 0; i < formatList.length; i++) {\\n          if (formatList[i].inherit === false && ed.dom.is(node, formatList[i].selector)) {\\n            return true;\\n          }\\n        }\\n      }\\n      return false;\\n    };\\n    var matchParents = function (editor, node, name, vars) {\\n      var root = editor.dom.getRoot();\\n      if (node === root) {\\n        return false;\\n      }\\n      node = editor.dom.getParent(node, function (node) {\\n        if (matchesUnInheritedFormatSelector(editor, node, name)) {\\n          return true;\\n        }\\n        return node.parentNode === root || !!matchNode(editor, node, name, vars, true);\\n      });\\n      return matchNode(editor, node, name, vars);\\n    };\\n    var matchName = function (dom, node, format) {\\n      if (isEq$2(node, format.inline)) {\\n        return true;\\n      }\\n      if (isEq$2(node, format.block)) {\\n        return true;\\n      }\\n      if (format.selector) {\\n        return node.nodeType === 1 && dom.is(node, format.selector);\\n      }\\n    };\\n    var matchItems = function (dom, node, format, itemName, similar, vars) {\\n      var key, value;\\n      var items = format[itemName];\\n      var i;\\n      if (format.onmatch) {\\n        return format.onmatch(node, format, itemName);\\n      }\\n      if (items) {\\n        if (typeof items.length === 'undefined') {\\n          for (key in items) {\\n            if (items.hasOwnProperty(key)) {\\n              if (itemName === 'attributes') {\\n                value = dom.getAttrib(node, key);\\n              } else {\\n                value = FormatUtils.getStyle(dom, node, key);\\n              }\\n              if (similar && !value && !format.exact) {\\n                return;\\n              }\\n              if ((!similar || format.exact) && !isEq$2(value, FormatUtils.normalizeStyleValue(dom, FormatUtils.replaceVars(items[key], vars), key))) {\\n                return;\\n              }\\n            }\\n          }\\n        } else {\\n          for (i = 0; i < items.length; i++) {\\n            if (itemName === 'attributes' ? dom.getAttrib(node, items[i]) : FormatUtils.getStyle(dom, node, items[i])) {\\n              return format;\\n            }\\n          }\\n        }\\n      }\\n      return format;\\n    };\\n    var matchNode = function (ed, node, name, vars, similar) {\\n      var formatList = ed.formatter.get(name);\\n      var format, i, x, classes;\\n      var dom = ed.dom;\\n      if (formatList && node) {\\n        for (i = 0; i < formatList.length; i++) {\\n          format = formatList[i];\\n          if (matchName(ed.dom, node, format) && matchItems(dom, node, format, 'attributes', similar, vars) && matchItems(dom, node, format, 'styles', similar, vars)) {\\n            if (classes = format.classes) {\\n              for (x = 0; x < classes.length; x++) {\\n                if (!ed.dom.hasClass(node, classes[x])) {\\n                  return;\\n                }\\n              }\\n            }\\n            return format;\\n          }\\n        }\\n      }\\n    };\\n    var match = function (editor, name, vars, node) {\\n      var startNode;\\n      if (node) {\\n        return matchParents(editor, node, name, vars);\\n      }\\n      node = editor.selection.getNode();\\n      if (matchParents(editor, node, name, vars)) {\\n        return true;\\n      }\\n      startNode = editor.selection.getStart();\\n      if (startNode !== node) {\\n        if (matchParents(editor, startNode, name, vars)) {\\n          return true;\\n        }\\n      }\\n      return false;\\n    };\\n    var matchAll = function (editor, names, vars) {\\n      var startElement;\\n      var matchedFormatNames = [];\\n      var checkedMap = {};\\n      startElement = editor.selection.getStart();\\n      editor.dom.getParent(startElement, function (node) {\\n        var i, name;\\n        for (i = 0; i < names.length; i++) {\\n          name = names[i];\\n          if (!checkedMap[name] && matchNode(editor, node, name, vars)) {\\n            checkedMap[name] = true;\\n            matchedFormatNames.push(name);\\n          }\\n        }\\n      }, editor.dom.getRoot());\\n      return matchedFormatNames;\\n    };\\n    var canApply = function (editor, name) {\\n      var formatList = editor.formatter.get(name);\\n      var startNode, parents, i, x, selector;\\n      var dom = editor.dom;\\n      if (formatList) {\\n        startNode = editor.selection.getStart();\\n        parents = FormatUtils.getParents(dom, startNode);\\n        for (x = formatList.length - 1; x >= 0; x--) {\\n          selector = formatList[x].selector;\\n          if (!selector || formatList[x].defaultBlock) {\\n            return true;\\n          }\\n          for (i = parents.length - 1; i >= 0; i--) {\\n            if (dom.is(parents[i], selector)) {\\n              return true;\\n            }\\n          }\\n        }\\n      }\\n      return false;\\n    };\\n    var MatchFormat = {\\n      matchNode: matchNode,\\n      matchName: matchName,\\n      match: match,\\n      matchAll: matchAll,\\n      canApply: canApply,\\n      matchesUnInheritedFormatSelector: matchesUnInheritedFormatSelector\\n    };\\n\\n    var splitText = function (node, offset) {\\n      return node.splitText(offset);\\n    };\\n    var split$1 = function (rng) {\\n      var startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;\\n      if (startContainer === endContainer && NodeType.isText(startContainer)) {\\n        if (startOffset > 0 && startOffset < startContainer.nodeValue.length) {\\n          endContainer = splitText(startContainer, startOffset);\\n          startContainer = endContainer.previousSibling;\\n          if (endOffset > startOffset) {\\n            endOffset = endOffset - startOffset;\\n            startContainer = endContainer = splitText(endContainer, endOffset).previousSibling;\\n            endOffset = endContainer.nodeValue.length;\\n            startOffset = 0;\\n          } else {\\n            endOffset = 0;\\n          }\\n        }\\n      } else {\\n        if (NodeType.isText(startContainer) && startOffset > 0 && startOffset < startContainer.nodeValue.length) {\\n          startContainer = splitText(startContainer, startOffset);\\n          startOffset = 0;\\n        }\\n        if (NodeType.isText(endContainer) && endOffset > 0 && endOffset < endContainer.nodeValue.length) {\\n          endContainer = splitText(endContainer, endOffset).previousSibling;\\n          endOffset = endContainer.nodeValue.length;\\n        }\\n      }\\n      return {\\n        startContainer: startContainer,\\n        startOffset: startOffset,\\n        endContainer: endContainer,\\n        endOffset: endOffset\\n      };\\n    };\\n    var SplitRange = { split: split$1 };\\n\\n    var ZWSP$1 = Zwsp.ZWSP, CARET_ID$1 = '_mce_caret';\\n    var importNode = function (ownerDocument, node) {\\n      return ownerDocument.importNode(node, true);\\n    };\\n    var getEmptyCaretContainers = function (node) {\\n      var nodes = [];\\n      while (node) {\\n        if (node.nodeType === 3 && node.nodeValue !== ZWSP$1 || node.childNodes.length > 1) {\\n          return [];\\n        }\\n        if (node.nodeType === 1) {\\n          nodes.push(node);\\n        }\\n        node = node.firstChild;\\n      }\\n      return nodes;\\n    };\\n    var isCaretContainerEmpty = function (node) {\\n      return getEmptyCaretContainers(node).length > 0;\\n    };\\n    var findFirstTextNode = function (node) {\\n      var walker;\\n      if (node) {\\n        walker = new TreeWalker(node, node);\\n        for (node = walker.current(); node; node = walker.next()) {\\n          if (node.nodeType === 3) {\\n            return node;\\n          }\\n        }\\n      }\\n      return null;\\n    };\\n    var createCaretContainer = function (fill) {\\n      var caretContainer = Element.fromTag('span');\\n      setAll(caretContainer, {\\n        'id': CARET_ID$1,\\n        'data-mce-bogus': '1',\\n        'data-mce-type': 'format-caret'\\n      });\\n      if (fill) {\\n        append(caretContainer, Element.fromText(ZWSP$1));\\n      }\\n      return caretContainer;\\n    };\\n    var trimZwspFromCaretContainer = function (caretContainerNode) {\\n      var textNode = findFirstTextNode(caretContainerNode);\\n      if (textNode && textNode.nodeValue.charAt(0) === ZWSP$1) {\\n        textNode.deleteData(0, 1);\\n      }\\n      return textNode;\\n    };\\n    var removeCaretContainerNode = function (editor, node, moveCaret) {\\n      if (moveCaret === void 0) {\\n        moveCaret = true;\\n      }\\n      var dom = editor.dom, selection = editor.selection;\\n      if (isCaretContainerEmpty(node)) {\\n        DeleteElement.deleteElement(editor, false, Element.fromDom(node), moveCaret);\\n      } else {\\n        var rng = selection.getRng();\\n        var block = dom.getParent(node, dom.isBlock);\\n        var textNode = trimZwspFromCaretContainer(node);\\n        if (rng.startContainer === textNode && rng.startOffset > 0) {\\n          rng.setStart(textNode, rng.startOffset - 1);\\n        }\\n        if (rng.endContainer === textNode && rng.endOffset > 0) {\\n          rng.setEnd(textNode, rng.endOffset - 1);\\n        }\\n        dom.remove(node, true);\\n        if (block && dom.isEmpty(block)) {\\n          PaddingBr.fillWithPaddingBr(Element.fromDom(block));\\n        }\\n        selection.setRng(rng);\\n      }\\n    };\\n    var removeCaretContainer = function (editor, node, moveCaret) {\\n      if (moveCaret === void 0) {\\n        moveCaret = true;\\n      }\\n      var dom = editor.dom, selection = editor.selection;\\n      if (!node) {\\n        node = getParentCaretContainer(editor.getBody(), selection.getStart());\\n        if (!node) {\\n          while (node = dom.get(CARET_ID$1)) {\\n            removeCaretContainerNode(editor, node, false);\\n          }\\n        }\\n      } else {\\n        removeCaretContainerNode(editor, node, moveCaret);\\n      }\\n    };\\n    var insertCaretContainerNode = function (editor, caretContainer, formatNode) {\\n      var dom = editor.dom, block = dom.getParent(formatNode, curry(FormatUtils.isTextBlock, editor));\\n      if (block && dom.isEmpty(block)) {\\n        formatNode.parentNode.replaceChild(caretContainer, formatNode);\\n      } else {\\n        PaddingBr.removeTrailingBr(Element.fromDom(formatNode));\\n        if (dom.isEmpty(formatNode)) {\\n          formatNode.parentNode.replaceChild(caretContainer, formatNode);\\n        } else {\\n          dom.insertAfter(caretContainer, formatNode);\\n        }\\n      }\\n    };\\n    var appendNode = function (parentNode, node) {\\n      parentNode.appendChild(node);\\n      return node;\\n    };\\n    var insertFormatNodesIntoCaretContainer = function (formatNodes, caretContainer) {\\n      var innerMostFormatNode = foldr(formatNodes, function (parentNode, formatNode) {\\n        return appendNode(parentNode, formatNode.cloneNode(false));\\n      }, caretContainer);\\n      return appendNode(innerMostFormatNode, innerMostFormatNode.ownerDocument.createTextNode(ZWSP$1));\\n    };\\n    var applyCaretFormat = function (editor, name, vars) {\\n      var rng, caretContainer, textNode, offset, bookmark, container, text;\\n      var selection = editor.selection;\\n      rng = selection.getRng(true);\\n      offset = rng.startOffset;\\n      container = rng.startContainer;\\n      text = container.nodeValue;\\n      caretContainer = getParentCaretContainer(editor.getBody(), selection.getStart());\\n      if (caretContainer) {\\n        textNode = findFirstTextNode(caretContainer);\\n      }\\n      var wordcharRegex = /[^\\\\s\\\\u00a0\\\\u00ad\\\\u200b\\\\ufeff]/;\\n      if (text && offset > 0 && offset < text.length && wordcharRegex.test(text.charAt(offset)) && wordcharRegex.test(text.charAt(offset - 1))) {\\n        bookmark = selection.getBookmark();\\n        rng.collapse(true);\\n        rng = ExpandRange.expandRng(editor, rng, editor.formatter.get(name));\\n        rng = SplitRange.split(rng);\\n        editor.formatter.apply(name, vars, rng);\\n        selection.moveToBookmark(bookmark);\\n      } else {\\n        if (!caretContainer || textNode.nodeValue !== ZWSP$1) {\\n          caretContainer = importNode(editor.getDoc(), createCaretContainer(true).dom());\\n          textNode = caretContainer.firstChild;\\n          rng.insertNode(caretContainer);\\n          offset = 1;\\n          editor.formatter.apply(name, vars, caretContainer);\\n        } else {\\n          editor.formatter.apply(name, vars, caretContainer);\\n        }\\n        selection.setCursorLocation(textNode, offset);\\n      }\\n    };\\n    var removeCaretFormat = function (editor, name, vars, similar) {\\n      var dom = editor.dom, selection = editor.selection;\\n      var container, offset, bookmark;\\n      var hasContentAfter, node, formatNode;\\n      var parents = [], rng = selection.getRng();\\n      var caretContainer;\\n      container = rng.startContainer;\\n      offset = rng.startOffset;\\n      node = container;\\n      if (container.nodeType === 3) {\\n        if (offset !== container.nodeValue.length) {\\n          hasContentAfter = true;\\n        }\\n        node = node.parentNode;\\n      }\\n      while (node) {\\n        if (MatchFormat.matchNode(editor, node, name, vars, similar)) {\\n          formatNode = node;\\n          break;\\n        }\\n        if (node.nextSibling) {\\n          hasContentAfter = true;\\n        }\\n        parents.push(node);\\n        node = node.parentNode;\\n      }\\n      if (!formatNode) {\\n        return;\\n      }\\n      if (hasContentAfter) {\\n        bookmark = selection.getBookmark();\\n        rng.collapse(true);\\n        var expandedRng = ExpandRange.expandRng(editor, rng, editor.formatter.get(name), true);\\n        expandedRng = SplitRange.split(expandedRng);\\n        editor.formatter.remove(name, vars, expandedRng);\\n        selection.moveToBookmark(bookmark);\\n      } else {\\n        caretContainer = getParentCaretContainer(editor.getBody(), formatNode);\\n        var newCaretContainer = createCaretContainer(false).dom();\\n        var caretNode = insertFormatNodesIntoCaretContainer(parents, newCaretContainer);\\n        if (caretContainer) {\\n          insertCaretContainerNode(editor, newCaretContainer, caretContainer);\\n        } else {\\n          insertCaretContainerNode(editor, newCaretContainer, formatNode);\\n        }\\n        removeCaretContainerNode(editor, caretContainer, false);\\n        selection.setCursorLocation(caretNode, 1);\\n        if (dom.isEmpty(formatNode)) {\\n          dom.remove(formatNode);\\n        }\\n      }\\n    };\\n    var disableCaretContainer = function (editor, keyCode) {\\n      var selection = editor.selection, body = editor.getBody();\\n      removeCaretContainer(editor, null, false);\\n      if ((keyCode === 8 || keyCode === 46) && selection.isCollapsed() && selection.getStart().innerHTML === ZWSP$1) {\\n        removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()));\\n      }\\n      if (keyCode === 37 || keyCode === 39) {\\n        removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()));\\n      }\\n    };\\n    var setup$2 = function (editor) {\\n      editor.on('mouseup keydown', function (e) {\\n        disableCaretContainer(editor, e.keyCode);\\n      });\\n    };\\n    var replaceWithCaretFormat = function (targetNode, formatNodes) {\\n      var caretContainer = createCaretContainer(false);\\n      var innerMost = insertFormatNodesIntoCaretContainer(formatNodes, caretContainer.dom());\\n      before(Element.fromDom(targetNode), caretContainer);\\n      remove$1(Element.fromDom(targetNode));\\n      return CaretPosition$1(innerMost, 0);\\n    };\\n    var isFormatElement = function (editor, element) {\\n      var inlineElements = editor.schema.getTextInlineElements();\\n      return inlineElements.hasOwnProperty(name(element)) && !isCaretNode(element.dom()) && !NodeType.isBogus(element.dom());\\n    };\\n    var isEmptyCaretFormatElement = function (element) {\\n      return isCaretNode(element.dom()) && isCaretContainerEmpty(element.dom());\\n    };\\n\\n    var getParentInlines = function (rootElm, startElm) {\\n      var parents = Parents.parentsAndSelf(startElm, rootElm);\\n      return findIndex(parents, isBlock).fold(constant(parents), function (index) {\\n        return parents.slice(0, index);\\n      });\\n    };\\n    var hasOnlyOneChild$1 = function (elm) {\\n      return children(elm).length === 1;\\n    };\\n    var deleteLastPosition = function (forward, editor, target, parentInlines) {\\n      var isFormatElement$1 = curry(isFormatElement, editor);\\n      var formatNodes = map(filter(parentInlines, isFormatElement$1), function (elm) {\\n        return elm.dom();\\n      });\\n      if (formatNodes.length === 0) {\\n        DeleteElement.deleteElement(editor, forward, target);\\n      } else {\\n        var pos = replaceWithCaretFormat(target.dom(), formatNodes);\\n        editor.selection.setRng(pos.toRange());\\n      }\\n    };\\n    var deleteCaret$1 = function (editor, forward) {\\n      var rootElm = Element.fromDom(editor.getBody());\\n      var startElm = Element.fromDom(editor.selection.getStart());\\n      var parentInlines = filter(getParentInlines(rootElm, startElm), hasOnlyOneChild$1);\\n      return last(parentInlines).map(function (target) {\\n        var fromPos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\\n        if (DeleteUtils.willDeleteLastPositionInElement(forward, fromPos, target.dom()) && !isEmptyCaretFormatElement(target)) {\\n          deleteLastPosition(forward, editor, target, parentInlines);\\n          return true;\\n        } else {\\n          return false;\\n        }\\n      }).getOr(false);\\n    };\\n    var backspaceDelete$5 = function (editor, forward) {\\n      return editor.selection.isCollapsed() ? deleteCaret$1(editor, forward) : false;\\n    };\\n    var InlineFormatDelete = { backspaceDelete: backspaceDelete$5 };\\n\\n    var getPos$1 = function (elm) {\\n      var x = 0, y = 0;\\n      var offsetParent = elm;\\n      while (offsetParent && offsetParent.nodeType) {\\n        x += offsetParent.offsetLeft || 0;\\n        y += offsetParent.offsetTop || 0;\\n        offsetParent = offsetParent.offsetParent;\\n      }\\n      return {\\n        x: x,\\n        y: y\\n      };\\n    };\\n    var fireScrollIntoViewEvent = function (editor, elm, alignToTop) {\\n      var scrollEvent = {\\n        elm: elm,\\n        alignToTop: alignToTop\\n      };\\n      editor.fire('scrollIntoView', scrollEvent);\\n      return scrollEvent.isDefaultPrevented();\\n    };\\n    var scrollElementIntoView = function (editor, elm, alignToTop) {\\n      var y, viewPort;\\n      var dom = editor.dom;\\n      var root = dom.getRoot();\\n      var viewPortY, viewPortH, offsetY = 0;\\n      if (fireScrollIntoViewEvent(editor, elm, alignToTop)) {\\n        return;\\n      }\\n      if (!NodeType.isElement(elm)) {\\n        return;\\n      }\\n      if (alignToTop === false) {\\n        offsetY = elm.offsetHeight;\\n      }\\n      if (root.nodeName !== 'BODY') {\\n        var scrollContainer = editor.selection.getScrollContainer();\\n        if (scrollContainer) {\\n          y = getPos$1(elm).y - getPos$1(scrollContainer).y + offsetY;\\n          viewPortH = scrollContainer.clientHeight;\\n          viewPortY = scrollContainer.scrollTop;\\n          if (y < viewPortY || y + 25 > viewPortY + viewPortH) {\\n            scrollContainer.scrollTop = y < viewPortY ? y : y - viewPortH + 25;\\n          }\\n          return;\\n        }\\n      }\\n      viewPort = dom.getViewPort(editor.getWin());\\n      y = dom.getPos(elm).y + offsetY;\\n      viewPortY = viewPort.y;\\n      viewPortH = viewPort.h;\\n      if (y < viewPort.y || y + 25 > viewPortY + viewPortH) {\\n        editor.getWin().scrollTo(0, y < viewPortY ? y : y - viewPortH + 25);\\n      }\\n    };\\n    var getViewPortRect = function (editor) {\\n      if (editor.inline) {\\n        return editor.getBody().getBoundingClientRect();\\n      } else {\\n        var win = editor.getWin();\\n        return {\\n          left: 0,\\n          right: win.innerWidth,\\n          top: 0,\\n          bottom: win.innerHeight,\\n          width: win.innerWidth,\\n          height: win.innerHeight\\n        };\\n      }\\n    };\\n    var scrollBy = function (editor, dx, dy) {\\n      if (editor.inline) {\\n        editor.getBody().scrollLeft += dx;\\n        editor.getBody().scrollTop += dy;\\n      } else {\\n        editor.getWin().scrollBy(dx, dy);\\n      }\\n    };\\n    var scrollRangeIntoView = function (editor, rng) {\\n      head(CaretPosition.fromRangeStart(rng).getClientRects()).each(function (rngRect) {\\n        var bodyRect = getViewPortRect(editor);\\n        var overflow = getOverflow(bodyRect, rngRect);\\n        var margin = 4;\\n        var dx = overflow.x > 0 ? overflow.x + margin : overflow.x - margin;\\n        var dy = overflow.y > 0 ? overflow.y + margin : overflow.y - margin;\\n        scrollBy(editor, overflow.x !== 0 ? dx : 0, overflow.y !== 0 ? dy : 0);\\n      });\\n    };\\n    var ScrollIntoView = {\\n      scrollElementIntoView: scrollElementIntoView,\\n      scrollRangeIntoView: scrollRangeIntoView\\n    };\\n\\n    var isContentEditableTrue$2 = NodeType.isContentEditableTrue;\\n    var isContentEditableFalse$6 = NodeType.isContentEditableFalse;\\n    var showCaret = function (direction, editor, node, before, scrollIntoView) {\\n      return editor._selectionOverrides.showCaret(direction, node, before, scrollIntoView);\\n    };\\n    var getNodeRange = function (node) {\\n      var rng = node.ownerDocument.createRange();\\n      rng.selectNode(node);\\n      return rng;\\n    };\\n    var selectNode = function (editor, node) {\\n      var e = editor.fire('BeforeObjectSelected', { target: node });\\n      if (e.isDefaultPrevented()) {\\n        return null;\\n      }\\n      return getNodeRange(node);\\n    };\\n    var renderCaretAtRange = function (editor, range, scrollIntoView) {\\n      var normalizedRange = normalizeRange(1, editor.getBody(), range);\\n      var caretPosition = CaretPosition$1.fromRangeStart(normalizedRange);\\n      var caretPositionNode = caretPosition.getNode();\\n      if (isContentEditableFalse$6(caretPositionNode)) {\\n        return showCaret(1, editor, caretPositionNode, !caretPosition.isAtEnd(), false);\\n      }\\n      var caretPositionBeforeNode = caretPosition.getNode(true);\\n      if (isContentEditableFalse$6(caretPositionBeforeNode)) {\\n        return showCaret(1, editor, caretPositionBeforeNode, false, false);\\n      }\\n      var ceRoot = editor.dom.getParent(caretPosition.getNode(), function (node) {\\n        return isContentEditableFalse$6(node) || isContentEditableTrue$2(node);\\n      });\\n      if (isContentEditableFalse$6(ceRoot)) {\\n        return showCaret(1, editor, ceRoot, false, scrollIntoView);\\n      }\\n      return null;\\n    };\\n    var renderRangeCaret = function (editor, range, scrollIntoView) {\\n      if (!range || !range.collapsed) {\\n        return range;\\n      }\\n      var caretRange = renderCaretAtRange(editor, range, scrollIntoView);\\n      if (caretRange) {\\n        return caretRange;\\n      }\\n      return range;\\n    };\\n    var moveToRange = function (editor, rng) {\\n      editor.selection.setRng(rng);\\n      ScrollIntoView.scrollRangeIntoView(editor, editor.selection.getRng());\\n    };\\n\\n    var trimEmptyTextNode$1 = function (dom, node) {\\n      if (NodeType.isText(node) && node.data.length === 0) {\\n        dom.remove(node);\\n      }\\n    };\\n    var deleteContentAndShowCaret = function (editor, range, node, direction, forward, peekCaretPosition) {\\n      var caretRange = showCaret(direction, editor, peekCaretPosition.getNode(!forward), forward, true);\\n      if (range.collapsed) {\\n        var deleteRange = range.cloneRange();\\n        if (forward) {\\n          deleteRange.setEnd(caretRange.startContainer, caretRange.startOffset);\\n        } else {\\n          deleteRange.setStart(caretRange.endContainer, caretRange.endOffset);\\n        }\\n        deleteRange.deleteContents();\\n      } else {\\n        range.deleteContents();\\n      }\\n      editor.selection.setRng(caretRange);\\n      trimEmptyTextNode$1(editor.dom, node);\\n      return true;\\n    };\\n    var deleteCefBoundaryText = function (editor, forward) {\\n      var range = editor.selection.getRng();\\n      if (!NodeType.isText(range.commonAncestorContainer)) {\\n        return false;\\n      }\\n      var direction = forward ? HDirection.Forwards : HDirection.Backwards;\\n      var caretWalker = CaretWalker(editor.getBody());\\n      var getNextVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.next);\\n      var getPrevVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.prev);\\n      var getNextPosFn = forward ? getNextVisualCaretPosition : getPrevVisualCaretPosition;\\n      var isBeforeContentEditableFalseFn = forward ? isBeforeContentEditableFalse : isAfterContentEditableFalse;\\n      var caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\\n      var nextCaretPosition = InlineUtils.normalizePosition(forward, getNextPosFn(caretPosition));\\n      if (!nextCaretPosition) {\\n        return false;\\n      } else if (isBeforeContentEditableFalseFn(nextCaretPosition)) {\\n        return deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, nextCaretPosition);\\n      }\\n      var peekCaretPosition = getNextPosFn(nextCaretPosition);\\n      if (peekCaretPosition && isBeforeContentEditableFalseFn(peekCaretPosition)) {\\n        if (isMoveInsideSameBlock(nextCaretPosition, peekCaretPosition)) {\\n          return deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, peekCaretPosition);\\n        }\\n      }\\n      return false;\\n    };\\n    var backspaceDelete$6 = function (editor, forward) {\\n      return deleteCefBoundaryText(editor, forward);\\n    };\\n    var CefBoundaryDelete = { backspaceDelete: backspaceDelete$6 };\\n\\n    var nativeCommand = function (editor, command) {\\n      editor.getDoc().execCommand(command, false, null);\\n    };\\n    var deleteCommand = function (editor) {\\n      if (CefDelete.backspaceDelete(editor, false)) {\\n        return;\\n      } else if (CefBoundaryDelete.backspaceDelete(editor, false)) {\\n        return;\\n      } else if (InlineBoundaryDelete.backspaceDelete(editor, false)) {\\n        return;\\n      } else if (BlockBoundaryDelete.backspaceDelete(editor, false)) {\\n        return;\\n      } else if (TableDelete.backspaceDelete(editor)) {\\n        return;\\n      } else if (BlockRangeDelete.backspaceDelete(editor, false)) {\\n        return;\\n      } else if (InlineFormatDelete.backspaceDelete(editor, false)) {\\n        return;\\n      } else {\\n        nativeCommand(editor, 'Delete');\\n        DeleteUtils.paddEmptyBody(editor);\\n      }\\n    };\\n    var forwardDeleteCommand = function (editor) {\\n      if (CefDelete.backspaceDelete(editor, true)) {\\n        return;\\n      } else if (CefBoundaryDelete.backspaceDelete(editor, true)) {\\n        return;\\n      } else if (InlineBoundaryDelete.backspaceDelete(editor, true)) {\\n        return;\\n      } else if (BlockBoundaryDelete.backspaceDelete(editor, true)) {\\n        return;\\n      } else if (TableDelete.backspaceDelete(editor)) {\\n        return;\\n      } else if (BlockRangeDelete.backspaceDelete(editor, true)) {\\n        return;\\n      } else if (InlineFormatDelete.backspaceDelete(editor, true)) {\\n        return;\\n      } else {\\n        nativeCommand(editor, 'ForwardDelete');\\n      }\\n    };\\n    var DeleteCommands = {\\n      deleteCommand: deleteCommand,\\n      forwardDeleteCommand: forwardDeleteCommand\\n    };\\n\\n    var getSpecifiedFontProp = function (propName, rootElm, elm) {\\n      var getProperty = function (elm) {\\n        return getRaw(elm, propName);\\n      };\\n      var isRoot = function (elm) {\\n        return eq(Element.fromDom(rootElm), elm);\\n      };\\n      return closest(Element.fromDom(elm), function (elm) {\\n        return getProperty(elm).isSome();\\n      }, isRoot).bind(getProperty);\\n    };\\n    var round$1 = function (number, precision) {\\n      var factor = Math.pow(10, precision);\\n      return Math.round(number * factor) / factor;\\n    };\\n    var toPt = function (fontSize, precision) {\\n      if (/[0-9.]+px$/.test(fontSize)) {\\n        return round$1(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';\\n      }\\n      return fontSize;\\n    };\\n    var normalizeFontFamily = function (fontFamily) {\\n      return fontFamily.replace(/[\\\\'\\\\\\\"\\\\\\\\]/g, '').replace(/,\\\\s+/g, ',');\\n    };\\n    var getComputedFontProp = function (propName, elm) {\\n      return Option.from(DOMUtils$1.DOM.getStyle(elm, propName, true));\\n    };\\n    var getFontProp = function (propName) {\\n      return function (rootElm, elm) {\\n        return Option.from(elm).map(Element.fromDom).filter(isElement).bind(function (element) {\\n          return getSpecifiedFontProp(propName, rootElm, element.dom()).or(getComputedFontProp(propName, element.dom()));\\n        }).getOr('');\\n      };\\n    };\\n    var FontInfo = {\\n      getFontSize: getFontProp('font-size'),\\n      getFontFamily: compose(normalizeFontFamily, getFontProp('font-family')),\\n      toPt: toPt\\n    };\\n\\n    var findFirstCaretElement = function (editor) {\\n      return CaretFinder.firstPositionIn(editor.getBody()).map(function (caret) {\\n        var container = caret.container();\\n        return NodeType.isText(container) ? container.parentNode : container;\\n      });\\n    };\\n    var isRangeAtStartOfNode = function (rng, root) {\\n      return rng.startContainer === root && rng.startOffset === 0;\\n    };\\n    var getCaretElement = function (editor) {\\n      return Option.from(editor.selection.getRng()).bind(function (rng) {\\n        var root = editor.getBody();\\n        return isRangeAtStartOfNode(rng, root) ? Option.none() : Option.from(editor.selection.getStart(true));\\n      });\\n    };\\n    var fromFontSizeNumber = function (editor, value) {\\n      if (/^[0-9\\\\.]+$/.test(value)) {\\n        var fontSizeNumber = parseInt(value, 10);\\n        if (fontSizeNumber >= 1 && fontSizeNumber <= 7) {\\n          var fontSizes = Settings.getFontStyleValues(editor);\\n          var fontClasses = Settings.getFontSizeClasses(editor);\\n          if (fontClasses) {\\n            return fontClasses[fontSizeNumber - 1] || value;\\n          } else {\\n            return fontSizes[fontSizeNumber - 1] || value;\\n          }\\n        } else {\\n          return value;\\n        }\\n      } else {\\n        return value;\\n      }\\n    };\\n    var fontNameAction = function (editor, value) {\\n      editor.formatter.toggle('fontname', { value: fromFontSizeNumber(editor, value) });\\n      editor.nodeChanged();\\n    };\\n    var fontNameQuery = function (editor) {\\n      return getCaretElement(editor).fold(function () {\\n        return findFirstCaretElement(editor).map(function (caretElement) {\\n          return FontInfo.getFontFamily(editor.getBody(), caretElement);\\n        }).getOr('');\\n      }, function (caretElement) {\\n        return FontInfo.getFontFamily(editor.getBody(), caretElement);\\n      });\\n    };\\n    var fontSizeAction = function (editor, value) {\\n      editor.formatter.toggle('fontsize', { value: fromFontSizeNumber(editor, value) });\\n      editor.nodeChanged();\\n    };\\n    var fontSizeQuery = function (editor) {\\n      return getCaretElement(editor).fold(function () {\\n        return findFirstCaretElement(editor).map(function (caretElement) {\\n          return FontInfo.getFontSize(editor.getBody(), caretElement);\\n        }).getOr('');\\n      }, function (caretElement) {\\n        return FontInfo.getFontSize(editor.getBody(), caretElement);\\n      });\\n    };\\n\\n    var isEq$3 = function (rng1, rng2) {\\n      return rng1 && rng2 && (rng1.startContainer === rng2.startContainer && rng1.startOffset === rng2.startOffset) && (rng1.endContainer === rng2.endContainer && rng1.endOffset === rng2.endOffset);\\n    };\\n    var RangeCompare = { isEq: isEq$3 };\\n\\n    var findParent = function (node, rootNode, predicate) {\\n      while (node && node !== rootNode) {\\n        if (predicate(node)) {\\n          return node;\\n        }\\n        node = node.parentNode;\\n      }\\n      return null;\\n    };\\n    var hasParent = function (node, rootNode, predicate) {\\n      return findParent(node, rootNode, predicate) !== null;\\n    };\\n    var hasParentWithName = function (node, rootNode, name) {\\n      return hasParent(node, rootNode, function (node) {\\n        return node.nodeName === name;\\n      });\\n    };\\n    var isTable$2 = function (node) {\\n      return node && node.nodeName === 'TABLE';\\n    };\\n    var isTableCell$3 = function (node) {\\n      return node && /^(TD|TH|CAPTION)$/.test(node.nodeName);\\n    };\\n    var isCeFalseCaretContainer = function (node, rootNode) {\\n      return isCaretContainer(node) && hasParent(node, rootNode, isCaretNode) === false;\\n    };\\n    var hasBrBeforeAfter = function (dom, node, left) {\\n      var walker = new TreeWalker(node, dom.getParent(node.parentNode, dom.isBlock) || dom.getRoot());\\n      while (node = walker[left ? 'prev' : 'next']()) {\\n        if (NodeType.isBr(node)) {\\n          return true;\\n        }\\n      }\\n    };\\n    var isPrevNode = function (node, name) {\\n      return node.previousSibling && node.previousSibling.nodeName === name;\\n    };\\n    var hasContentEditableFalseParent = function (body, node) {\\n      while (node && node !== body) {\\n        if (NodeType.isContentEditableFalse(node)) {\\n          return true;\\n        }\\n        node = node.parentNode;\\n      }\\n      return false;\\n    };\\n    var findTextNodeRelative = function (dom, isAfterNode, collapsed, left, startNode) {\\n      var walker, lastInlineElement, parentBlockContainer;\\n      var body = dom.getRoot();\\n      var node;\\n      var nonEmptyElementsMap = dom.schema.getNonEmptyElements();\\n      parentBlockContainer = dom.getParent(startNode.parentNode, dom.isBlock) || body;\\n      if (left && NodeType.isBr(startNode) && isAfterNode && dom.isEmpty(parentBlockContainer)) {\\n        return Option.some(CaretPosition(startNode.parentNode, dom.nodeIndex(startNode)));\\n      }\\n      walker = new TreeWalker(startNode, parentBlockContainer);\\n      while (node = walker[left ? 'prev' : 'next']()) {\\n        if (dom.getContentEditableParent(node) === 'false' || isCeFalseCaretContainer(node, body)) {\\n          return Option.none();\\n        }\\n        if (NodeType.isText(node) && node.nodeValue.length > 0) {\\n          if (hasParentWithName(node, body, 'A') === false) {\\n            return Option.some(CaretPosition(node, left ? node.nodeValue.length : 0));\\n          }\\n          return Option.none();\\n        }\\n        if (dom.isBlock(node) || nonEmptyElementsMap[node.nodeName.toLowerCase()]) {\\n          return Option.none();\\n        }\\n        lastInlineElement = node;\\n      }\\n      if (collapsed && lastInlineElement) {\\n        return Option.some(CaretPosition(lastInlineElement, 0));\\n      }\\n      return Option.none();\\n    };\\n    var normalizeEndPoint = function (dom, collapsed, start, rng) {\\n      var container, offset, walker;\\n      var body = dom.getRoot();\\n      var node, nonEmptyElementsMap;\\n      var directionLeft, isAfterNode, normalized = false;\\n      container = rng[(start ? 'start' : 'end') + 'Container'];\\n      offset = rng[(start ? 'start' : 'end') + 'Offset'];\\n      isAfterNode = NodeType.isElement(container) && offset === container.childNodes.length;\\n      nonEmptyElementsMap = dom.schema.getNonEmptyElements();\\n      directionLeft = start;\\n      if (isCaretContainer(container)) {\\n        return Option.none();\\n      }\\n      if (NodeType.isElement(container) && offset > container.childNodes.length - 1) {\\n        directionLeft = false;\\n      }\\n      if (NodeType.isDocument(container)) {\\n        container = body;\\n        offset = 0;\\n      }\\n      if (container === body) {\\n        if (directionLeft) {\\n          node = container.childNodes[offset > 0 ? offset - 1 : 0];\\n          if (node) {\\n            if (isCaretContainer(node)) {\\n              return Option.none();\\n            }\\n            if (nonEmptyElementsMap[node.nodeName] || isTable$2(node)) {\\n              return Option.none();\\n            }\\n          }\\n        }\\n        if (container.hasChildNodes()) {\\n          offset = Math.min(!directionLeft && offset > 0 ? offset - 1 : offset, container.childNodes.length - 1);\\n          container = container.childNodes[offset];\\n          offset = NodeType.isText(container) && isAfterNode ? container.data.length : 0;\\n          if (!collapsed && container === body.lastChild && isTable$2(container)) {\\n            return Option.none();\\n          }\\n          if (hasContentEditableFalseParent(body, container) || isCaretContainer(container)) {\\n            return Option.none();\\n          }\\n          if (container.hasChildNodes() && isTable$2(container) === false) {\\n            node = container;\\n            walker = new TreeWalker(container, body);\\n            do {\\n              if (NodeType.isContentEditableFalse(node) || isCaretContainer(node)) {\\n                normalized = false;\\n                break;\\n              }\\n              if (NodeType.isText(node) && node.nodeValue.length > 0) {\\n                offset = directionLeft ? 0 : node.nodeValue.length;\\n                container = node;\\n                normalized = true;\\n                break;\\n              }\\n              if (nonEmptyElementsMap[node.nodeName.toLowerCase()] && !isTableCell$3(node)) {\\n                offset = dom.nodeIndex(node);\\n                container = node.parentNode;\\n                if (!directionLeft) {\\n                  offset++;\\n                }\\n                normalized = true;\\n                break;\\n              }\\n            } while (node = directionLeft ? walker.next() : walker.prev());\\n          }\\n        }\\n      }\\n      if (collapsed) {\\n        if (NodeType.isText(container) && offset === 0) {\\n          findTextNodeRelative(dom, isAfterNode, collapsed, true, container).each(function (pos) {\\n            container = pos.container();\\n            offset = pos.offset();\\n            normalized = true;\\n          });\\n        }\\n        if (NodeType.isElement(container)) {\\n          node = container.childNodes[offset];\\n          if (!node) {\\n            node = container.childNodes[offset - 1];\\n          }\\n          if (node && NodeType.isBr(node) && !isPrevNode(node, 'A') && !hasBrBeforeAfter(dom, node, false) && !hasBrBeforeAfter(dom, node, true)) {\\n            findTextNodeRelative(dom, isAfterNode, collapsed, true, node).each(function (pos) {\\n              container = pos.container();\\n              offset = pos.offset();\\n              normalized = true;\\n            });\\n          }\\n        }\\n      }\\n      if (directionLeft && !collapsed && NodeType.isText(container) && offset === container.nodeValue.length) {\\n        findTextNodeRelative(dom, isAfterNode, collapsed, false, container).each(function (pos) {\\n          container = pos.container();\\n          offset = pos.offset();\\n          normalized = true;\\n        });\\n      }\\n      return normalized ? Option.some(CaretPosition(container, offset)) : Option.none();\\n    };\\n    var normalize$2 = function (dom, rng) {\\n      var collapsed = rng.collapsed, normRng = rng.cloneRange();\\n      var startPos = CaretPosition.fromRangeStart(rng);\\n      normalizeEndPoint(dom, collapsed, true, normRng).each(function (pos) {\\n        if (!collapsed || !CaretPosition.isAbove(startPos, pos)) {\\n          normRng.setStart(pos.container(), pos.offset());\\n        }\\n      });\\n      if (!collapsed) {\\n        normalizeEndPoint(dom, collapsed, false, normRng).each(function (pos) {\\n          normRng.setEnd(pos.container(), pos.offset());\\n        });\\n      }\\n      if (collapsed) {\\n        normRng.collapse(true);\\n      }\\n      return RangeCompare.isEq(rng, normRng) ? Option.none() : Option.some(normRng);\\n    };\\n    var NormalizeRange = { normalize: normalize$2 };\\n\\n    var hasRightSideContent = function (schema, container, parentBlock) {\\n      var walker = new TreeWalker(container, parentBlock);\\n      var node;\\n      var nonEmptyElementsMap = schema.getNonEmptyElements();\\n      while (node = walker.next()) {\\n        if (nonEmptyElementsMap[node.nodeName.toLowerCase()] || node.length > 0) {\\n          return true;\\n        }\\n      }\\n    };\\n    var scrollToBr = function (dom, selection, brElm) {\\n      var marker = dom.create('span', {}, '&nbsp;');\\n      brElm.parentNode.insertBefore(marker, brElm);\\n      selection.scrollIntoView(marker);\\n      dom.remove(marker);\\n    };\\n    var moveSelectionToBr = function (dom, selection, brElm, extraBr) {\\n      var rng = dom.createRng();\\n      if (!extraBr) {\\n        rng.setStartAfter(brElm);\\n        rng.setEndAfter(brElm);\\n      } else {\\n        rng.setStartBefore(brElm);\\n        rng.setEndBefore(brElm);\\n      }\\n      selection.setRng(rng);\\n    };\\n    var insertBrAtCaret = function (editor, evt) {\\n      var selection = editor.selection;\\n      var dom = editor.dom;\\n      var rng = selection.getRng();\\n      var brElm;\\n      var extraBr;\\n      NormalizeRange.normalize(dom, rng).each(function (normRng) {\\n        rng.setStart(normRng.startContainer, normRng.startOffset);\\n        rng.setEnd(normRng.endContainer, normRng.endOffset);\\n      });\\n      var offset = rng.startOffset;\\n      var container = rng.startContainer;\\n      if (container.nodeType === 1 && container.hasChildNodes()) {\\n        var isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\\n        container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\\n        if (isAfterLastNodeInContainer && container.nodeType === 3) {\\n          offset = container.nodeValue.length;\\n        } else {\\n          offset = 0;\\n        }\\n      }\\n      var parentBlock = dom.getParent(container, dom.isBlock);\\n      var containerBlock = parentBlock ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;\\n      var containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';\\n      var isControlKey = evt && evt.ctrlKey;\\n      if (containerBlockName === 'LI' && !isControlKey) {\\n        parentBlock = containerBlock;\\n      }\\n      if (container && container.nodeType === 3 && offset >= container.nodeValue.length) {\\n        if (!hasRightSideContent(editor.schema, container, parentBlock)) {\\n          brElm = dom.create('br');\\n          rng.insertNode(brElm);\\n          rng.setStartAfter(brElm);\\n          rng.setEndAfter(brElm);\\n          extraBr = true;\\n        }\\n      }\\n      brElm = dom.create('br');\\n      rangeInsertNode(dom, rng, brElm);\\n      scrollToBr(dom, selection, brElm);\\n      moveSelectionToBr(dom, selection, brElm, extraBr);\\n      editor.undoManager.add();\\n    };\\n    var insertBrBefore = function (editor, inline) {\\n      var br = Element.fromTag('br');\\n      before(Element.fromDom(inline), br);\\n      editor.undoManager.add();\\n    };\\n    var insertBrAfter = function (editor, inline) {\\n      if (!hasBrAfter(editor.getBody(), inline)) {\\n        after(Element.fromDom(inline), Element.fromTag('br'));\\n      }\\n      var br = Element.fromTag('br');\\n      after(Element.fromDom(inline), br);\\n      scrollToBr(editor.dom, editor.selection, br.dom());\\n      moveSelectionToBr(editor.dom, editor.selection, br.dom(), false);\\n      editor.undoManager.add();\\n    };\\n    var isBeforeBr$1 = function (pos) {\\n      return NodeType.isBr(pos.getNode());\\n    };\\n    var hasBrAfter = function (rootNode, startNode) {\\n      if (isBeforeBr$1(CaretPosition$1.after(startNode))) {\\n        return true;\\n      } else {\\n        return CaretFinder.nextPosition(rootNode, CaretPosition$1.after(startNode)).map(function (pos) {\\n          return NodeType.isBr(pos.getNode());\\n        }).getOr(false);\\n      }\\n    };\\n    var isAnchorLink = function (elm) {\\n      return elm && elm.nodeName === 'A' && 'href' in elm;\\n    };\\n    var isInsideAnchor = function (location) {\\n      return location.fold(constant(false), isAnchorLink, isAnchorLink, constant(false));\\n    };\\n    var readInlineAnchorLocation = function (editor) {\\n      var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\\n      var position = CaretPosition$1.fromRangeStart(editor.selection.getRng());\\n      return BoundaryLocation.readLocation(isInlineTarget, editor.getBody(), position).filter(isInsideAnchor);\\n    };\\n    var insertBrOutsideAnchor = function (editor, location) {\\n      location.fold(noop, curry(insertBrBefore, editor), curry(insertBrAfter, editor), noop);\\n    };\\n    var insert = function (editor, evt) {\\n      var anchorLocation = readInlineAnchorLocation(editor);\\n      if (anchorLocation.isSome()) {\\n        anchorLocation.each(curry(insertBrOutsideAnchor, editor));\\n      } else {\\n        insertBrAtCaret(editor, evt);\\n      }\\n    };\\n    var InsertBr = { insert: insert };\\n\\n    var create$3 = Immutable('start', 'soffset', 'finish', 'foffset');\\n    var SimRange = { create: create$3 };\\n\\n    var adt = Adt.generate([\\n      { before: ['element'] },\\n      {\\n        on: [\\n          'element',\\n          'offset'\\n        ]\\n      },\\n      { after: ['element'] }\\n    ]);\\n    var cata = function (subject, onBefore, onOn, onAfter) {\\n      return subject.fold(onBefore, onOn, onAfter);\\n    };\\n    var getStart = function (situ) {\\n      return situ.fold(identity, identity, identity);\\n    };\\n    var before$4 = adt.before;\\n    var on = adt.on;\\n    var after$3 = adt.after;\\n    var Situ = {\\n      before: before$4,\\n      on: on,\\n      after: after$3,\\n      cata: cata,\\n      getStart: getStart\\n    };\\n\\n    var adt$1 = Adt.generate([\\n      { domRange: ['rng'] },\\n      {\\n        relative: [\\n          'startSitu',\\n          'finishSitu'\\n        ]\\n      },\\n      {\\n        exact: [\\n          'start',\\n          'soffset',\\n          'finish',\\n          'foffset'\\n        ]\\n      }\\n    ]);\\n    var exactFromRange = function (simRange) {\\n      return adt$1.exact(simRange.start(), simRange.soffset(), simRange.finish(), simRange.foffset());\\n    };\\n    var getStart$1 = function (selection) {\\n      return selection.match({\\n        domRange: function (rng) {\\n          return Element.fromDom(rng.startContainer);\\n        },\\n        relative: function (startSitu, finishSitu) {\\n          return Situ.getStart(startSitu);\\n        },\\n        exact: function (start, soffset, finish, foffset) {\\n          return start;\\n        }\\n      });\\n    };\\n    var domRange = adt$1.domRange;\\n    var relative = adt$1.relative;\\n    var exact = adt$1.exact;\\n    var getWin = function (selection) {\\n      var start = getStart$1(selection);\\n      return defaultView(start);\\n    };\\n    var range = SimRange.create;\\n    var Selection = {\\n      domRange: domRange,\\n      relative: relative,\\n      exact: exact,\\n      exactFromRange: exactFromRange,\\n      getWin: getWin,\\n      range: range\\n    };\\n\\n    var browser$3 = PlatformDetection$1.detect().browser;\\n    var clamp = function (offset, element) {\\n      var max = isText(element) ? get$4(element).length : children(element).length + 1;\\n      if (offset > max) {\\n        return max;\\n      } else if (offset < 0) {\\n        return 0;\\n      }\\n      return offset;\\n    };\\n    var normalizeRng = function (rng) {\\n      return Selection.range(rng.start(), clamp(rng.soffset(), rng.start()), rng.finish(), clamp(rng.foffset(), rng.finish()));\\n    };\\n    var isOrContains = function (root, elm) {\\n      return !NodeType.isRestrictedNode(elm.dom()) && (contains$3(root, elm) || eq(root, elm));\\n    };\\n    var isRngInRoot = function (root) {\\n      return function (rng) {\\n        return isOrContains(root, rng.start()) && isOrContains(root, rng.finish());\\n      };\\n    };\\n    var shouldStore = function (editor) {\\n      return editor.inline === true || browser$3.isIE();\\n    };\\n    var nativeRangeToSelectionRange = function (r) {\\n      return Selection.range(Element.fromDom(r.startContainer), r.startOffset, Element.fromDom(r.endContainer), r.endOffset);\\n    };\\n    var readRange = function (win) {\\n      var selection = win.getSelection();\\n      var rng = !selection || selection.rangeCount === 0 ? Option.none() : Option.from(selection.getRangeAt(0));\\n      return rng.map(nativeRangeToSelectionRange);\\n    };\\n    var getBookmark$2 = function (root) {\\n      var win = defaultView(root);\\n      return readRange(win.dom()).filter(isRngInRoot(root));\\n    };\\n    var validate = function (root, bookmark) {\\n      return Option.from(bookmark).filter(isRngInRoot(root)).map(normalizeRng);\\n    };\\n    var bookmarkToNativeRng = function (bookmark) {\\n      var rng = domGlobals.document.createRange();\\n      try {\\n        rng.setStart(bookmark.start().dom(), bookmark.soffset());\\n        rng.setEnd(bookmark.finish().dom(), bookmark.foffset());\\n        return Option.some(rng);\\n      } catch (_) {\\n        return Option.none();\\n      }\\n    };\\n    var store = function (editor) {\\n      var newBookmark = shouldStore(editor) ? getBookmark$2(Element.fromDom(editor.getBody())) : Option.none();\\n      editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;\\n    };\\n    var storeNative = function (editor, rng) {\\n      var root = Element.fromDom(editor.getBody());\\n      var range = shouldStore(editor) ? Option.from(rng) : Option.none();\\n      var newBookmark = range.map(nativeRangeToSelectionRange).filter(isRngInRoot(root));\\n      editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;\\n    };\\n    var getRng = function (editor) {\\n      var bookmark = editor.bookmark ? editor.bookmark : Option.none();\\n      return bookmark.bind(curry(validate, Element.fromDom(editor.getBody()))).bind(bookmarkToNativeRng);\\n    };\\n    var restore = function (editor) {\\n      getRng(editor).each(function (rng) {\\n        editor.selection.setRng(rng);\\n      });\\n    };\\n    var SelectionBookmark = {\\n      store: store,\\n      storeNative: storeNative,\\n      readRange: readRange,\\n      restore: restore,\\n      getRng: getRng,\\n      getBookmark: getBookmark$2,\\n      validate: validate\\n    };\\n\\n    var indentElement = function (dom, command, useMargin, value, unit, element) {\\n      if (dom.getContentEditable(element) === 'false') {\\n        return;\\n      }\\n      var indentStyleName = useMargin ? 'margin' : 'padding';\\n      indentStyleName = element.nodeName === 'TABLE' ? 'margin' : indentStyleName;\\n      indentStyleName += dom.getStyle(element, 'direction', true) === 'rtl' ? 'Right' : 'Left';\\n      if (command === 'outdent') {\\n        var styleValue = Math.max(0, parseInt(element.style[indentStyleName] || 0, 10) - value);\\n        dom.setStyle(element, indentStyleName, styleValue ? styleValue + unit : '');\\n      } else {\\n        var styleValue = parseInt(element.style[indentStyleName] || 0, 10) + value + unit;\\n        dom.setStyle(element, indentStyleName, styleValue);\\n      }\\n    };\\n    var isListComponent = function (el) {\\n      return isList(el) || isListItem(el);\\n    };\\n    var parentIsListComponent = function (el) {\\n      return parent(el).map(isListComponent).getOr(false);\\n    };\\n    var getBlocksToIndent = function (editor) {\\n      return filter(map(editor.selection.getSelectedBlocks(), Element.fromDom), function (el) {\\n        return !isListComponent(el) && !parentIsListComponent(el);\\n      });\\n    };\\n    var handle = function (editor, command) {\\n      var settings = editor.settings, dom = editor.dom, selection = editor.selection, formatter = editor.formatter;\\n      var indentUnit = /[a-z%]+$/i.exec(settings.indentation)[0];\\n      var indentValue = parseInt(settings.indentation, 10);\\n      var useMargin = editor.getParam('indent_use_margin', false);\\n      if (!editor.queryCommandState('InsertUnorderedList') && !editor.queryCommandState('InsertOrderedList')) {\\n        if (!settings.forced_root_block && !dom.getParent(selection.getNode(), dom.isBlock)) {\\n          formatter.apply('div');\\n        }\\n      }\\n      each(getBlocksToIndent(editor), function (block) {\\n        indentElement(dom, command, useMargin, indentValue, indentUnit, block.dom());\\n      });\\n    };\\n\\n    var each$a = Tools.each, extend$2 = Tools.extend;\\n    var map$3 = Tools.map, inArray$2 = Tools.inArray;\\n    function EditorCommands (editor) {\\n      var dom, selection, formatter;\\n      var commands = {\\n        state: {},\\n        exec: {},\\n        value: {}\\n      };\\n      var settings = editor.settings, bookmark;\\n      editor.on('PreInit', function () {\\n        dom = editor.dom;\\n        selection = editor.selection;\\n        settings = editor.settings;\\n        formatter = editor.formatter;\\n      });\\n      var execCommand = function (command, ui, value, args) {\\n        var func, customCommand, state = false;\\n        if (editor.removed) {\\n          return;\\n        }\\n        if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(command) && (!args || !args.skip_focus)) {\\n          editor.focus();\\n        } else {\\n          SelectionBookmark.restore(editor);\\n        }\\n        args = editor.fire('BeforeExecCommand', {\\n          command: command,\\n          ui: ui,\\n          value: value\\n        });\\n        if (args.isDefaultPrevented()) {\\n          return false;\\n        }\\n        customCommand = command.toLowerCase();\\n        if (func = commands.exec[customCommand]) {\\n          func(customCommand, ui, value);\\n          editor.fire('ExecCommand', {\\n            command: command,\\n            ui: ui,\\n            value: value\\n          });\\n          return true;\\n        }\\n        each$a(editor.plugins, function (p) {\\n          if (p.execCommand && p.execCommand(command, ui, value)) {\\n            editor.fire('ExecCommand', {\\n              command: command,\\n              ui: ui,\\n              value: value\\n            });\\n            state = true;\\n            return false;\\n          }\\n        });\\n        if (state) {\\n          return state;\\n        }\\n        if (editor.theme && editor.theme.execCommand && editor.theme.execCommand(command, ui, value)) {\\n          editor.fire('ExecCommand', {\\n            command: command,\\n            ui: ui,\\n            value: value\\n          });\\n          return true;\\n        }\\n        try {\\n          state = editor.getDoc().execCommand(command, ui, value);\\n        } catch (ex) {\\n        }\\n        if (state) {\\n          editor.fire('ExecCommand', {\\n            command: command,\\n            ui: ui,\\n            value: value\\n          });\\n          return true;\\n        }\\n        return false;\\n      };\\n      var queryCommandState = function (command) {\\n        var func;\\n        if (editor.quirks.isHidden() || editor.removed) {\\n          return;\\n        }\\n        command = command.toLowerCase();\\n        if (func = commands.state[command]) {\\n          return func(command);\\n        }\\n        try {\\n          return editor.getDoc().queryCommandState(command);\\n        } catch (ex) {\\n        }\\n        return false;\\n      };\\n      var queryCommandValue = function (command) {\\n        var func;\\n        if (editor.quirks.isHidden() || editor.removed) {\\n          return;\\n        }\\n        command = command.toLowerCase();\\n        if (func = commands.value[command]) {\\n          return func(command);\\n        }\\n        try {\\n          return editor.getDoc().queryCommandValue(command);\\n        } catch (ex) {\\n        }\\n      };\\n      var addCommands = function (commandList, type) {\\n        type = type || 'exec';\\n        each$a(commandList, function (callback, command) {\\n          each$a(command.toLowerCase().split(','), function (command) {\\n            commands[type][command] = callback;\\n          });\\n        });\\n      };\\n      var addCommand = function (command, callback, scope) {\\n        command = command.toLowerCase();\\n        commands.exec[command] = function (command, ui, value, args) {\\n          return callback.call(scope || editor, ui, value, args);\\n        };\\n      };\\n      var queryCommandSupported = function (command) {\\n        command = command.toLowerCase();\\n        if (commands.exec[command]) {\\n          return true;\\n        }\\n        try {\\n          return editor.getDoc().queryCommandSupported(command);\\n        } catch (ex) {\\n        }\\n        return false;\\n      };\\n      var addQueryStateHandler = function (command, callback, scope) {\\n        command = command.toLowerCase();\\n        commands.state[command] = function () {\\n          return callback.call(scope || editor);\\n        };\\n      };\\n      var addQueryValueHandler = function (command, callback, scope) {\\n        command = command.toLowerCase();\\n        commands.value[command] = function () {\\n          return callback.call(scope || editor);\\n        };\\n      };\\n      var hasCustomCommand = function (command) {\\n        command = command.toLowerCase();\\n        return !!commands.exec[command];\\n      };\\n      extend$2(this, {\\n        execCommand: execCommand,\\n        queryCommandState: queryCommandState,\\n        queryCommandValue: queryCommandValue,\\n        queryCommandSupported: queryCommandSupported,\\n        addCommands: addCommands,\\n        addCommand: addCommand,\\n        addQueryStateHandler: addQueryStateHandler,\\n        addQueryValueHandler: addQueryValueHandler,\\n        hasCustomCommand: hasCustomCommand\\n      });\\n      var execNativeCommand = function (command, ui, value) {\\n        if (ui === undefined) {\\n          ui = false;\\n        }\\n        if (value === undefined) {\\n          value = null;\\n        }\\n        return editor.getDoc().execCommand(command, ui, value);\\n      };\\n      var isFormatMatch = function (name) {\\n        return formatter.match(name);\\n      };\\n      var toggleFormat = function (name, value) {\\n        formatter.toggle(name, value ? { value: value } : undefined);\\n        editor.nodeChanged();\\n      };\\n      var storeSelection = function (type) {\\n        bookmark = selection.getBookmark(type);\\n      };\\n      var restoreSelection = function () {\\n        selection.moveToBookmark(bookmark);\\n      };\\n      addCommands({\\n        'mceResetDesignMode,mceBeginUndoLevel': function () {\\n        },\\n        'mceEndUndoLevel,mceAddUndoLevel': function () {\\n          editor.undoManager.add();\\n        },\\n        'Cut,Copy,Paste': function (command) {\\n          var doc = editor.getDoc();\\n          var failed;\\n          try {\\n            execNativeCommand(command);\\n          } catch (ex) {\\n            failed = true;\\n          }\\n          if (command === 'paste' && !doc.queryCommandEnabled(command)) {\\n            failed = true;\\n          }\\n          if (failed || !doc.queryCommandSupported(command)) {\\n            var msg = editor.translate('Your browser doesn\\\\'t support direct access to the clipboard. ' + 'Please use the Ctrl+X/C/V keyboard shortcuts instead.');\\n            if (Env.mac) {\\n              msg = msg.replace(/Ctrl\\\\+/g, '\\\\u2318+');\\n            }\\n            editor.notificationManager.open({\\n              text: msg,\\n              type: 'error'\\n            });\\n          }\\n        },\\n        'unlink': function () {\\n          if (selection.isCollapsed()) {\\n            var elm = editor.dom.getParent(editor.selection.getStart(), 'a');\\n            if (elm) {\\n              editor.dom.remove(elm, true);\\n            }\\n            return;\\n          }\\n          formatter.remove('link');\\n        },\\n        'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull,JustifyNone': function (command) {\\n          var align = command.substring(7);\\n          if (align === 'full') {\\n            align = 'justify';\\n          }\\n          each$a('left,center,right,justify'.split(','), function (name) {\\n            if (align !== name) {\\n              formatter.remove('align' + name);\\n            }\\n          });\\n          if (align !== 'none') {\\n            toggleFormat('align' + align);\\n          }\\n        },\\n        'InsertUnorderedList,InsertOrderedList': function (command) {\\n          var listElm, listParent;\\n          execNativeCommand(command);\\n          listElm = dom.getParent(selection.getNode(), 'ol,ul');\\n          if (listElm) {\\n            listParent = listElm.parentNode;\\n            if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) {\\n              storeSelection();\\n              dom.split(listParent, listElm);\\n              restoreSelection();\\n            }\\n          }\\n        },\\n        'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) {\\n          toggleFormat(command);\\n        },\\n        'ForeColor,HiliteColor': function (command, ui, value) {\\n          toggleFormat(command, value);\\n        },\\n        'FontName': function (command, ui, value) {\\n          fontNameAction(editor, value);\\n        },\\n        'FontSize': function (command, ui, value) {\\n          fontSizeAction(editor, value);\\n        },\\n        'RemoveFormat': function (command) {\\n          formatter.remove(command);\\n        },\\n        'mceBlockQuote': function () {\\n          toggleFormat('blockquote');\\n        },\\n        'FormatBlock': function (command, ui, value) {\\n          return toggleFormat(value || 'p');\\n        },\\n        'mceCleanup': function () {\\n          var bookmark = selection.getBookmark();\\n          editor.setContent(editor.getContent());\\n          selection.moveToBookmark(bookmark);\\n        },\\n        'mceRemoveNode': function (command, ui, value) {\\n          var node = value || selection.getNode();\\n          if (node !== editor.getBody()) {\\n            storeSelection();\\n            editor.dom.remove(node, true);\\n            restoreSelection();\\n          }\\n        },\\n        'mceSelectNodeDepth': function (command, ui, value) {\\n          var counter = 0;\\n          dom.getParent(selection.getNode(), function (node) {\\n            if (node.nodeType === 1 && counter++ === value) {\\n              selection.select(node);\\n              return false;\\n            }\\n          }, editor.getBody());\\n        },\\n        'mceSelectNode': function (command, ui, value) {\\n          selection.select(value);\\n        },\\n        'mceInsertContent': function (command, ui, value) {\\n          InsertContent.insertAtCaret(editor, value);\\n        },\\n        'mceInsertRawHTML': function (command, ui, value) {\\n          selection.setContent('tiny_mce_marker');\\n          var content = editor.getContent();\\n          editor.setContent(content.replace(/tiny_mce_marker/g, function () {\\n            return value;\\n          }));\\n        },\\n        'mceToggleFormat': function (command, ui, value) {\\n          toggleFormat(value);\\n        },\\n        'mceSetContent': function (command, ui, value) {\\n          editor.setContent(value);\\n        },\\n        'Indent,Outdent': function (command) {\\n          handle(editor, command);\\n        },\\n        'mceRepaint': function () {\\n        },\\n        'InsertHorizontalRule': function () {\\n          editor.execCommand('mceInsertContent', false, '<hr />');\\n        },\\n        'mceToggleVisualAid': function () {\\n          editor.hasVisual = !editor.hasVisual;\\n          editor.addVisual();\\n        },\\n        'mceReplaceContent': function (command, ui, value) {\\n          editor.execCommand('mceInsertContent', false, value.replace(/\\\\{\\\\$selection\\\\}/g, selection.getContent({ format: 'text' })));\\n        },\\n        'mceInsertLink': function (command, ui, value) {\\n          var anchor;\\n          if (typeof value === 'string') {\\n            value = { href: value };\\n          }\\n          anchor = dom.getParent(selection.getNode(), 'a');\\n          value.href = value.href.replace(' ', '%20');\\n          if (!anchor || !value.href) {\\n            formatter.remove('link');\\n          }\\n          if (value.href) {\\n            formatter.apply('link', value, anchor);\\n          }\\n        },\\n        'selectAll': function () {\\n          var editingHost = dom.getParent(selection.getStart(), NodeType.isContentEditableTrue);\\n          if (editingHost) {\\n            var rng = dom.createRng();\\n            rng.selectNodeContents(editingHost);\\n            selection.setRng(rng);\\n          }\\n        },\\n        'delete': function () {\\n          DeleteCommands.deleteCommand(editor);\\n        },\\n        'forwardDelete': function () {\\n          DeleteCommands.forwardDeleteCommand(editor);\\n        },\\n        'mceNewDocument': function () {\\n          editor.setContent('');\\n        },\\n        'InsertLineBreak': function (command, ui, value) {\\n          InsertBr.insert(editor, value);\\n          return true;\\n        }\\n      });\\n      var alignStates = function (name) {\\n        return function () {\\n          var nodes = selection.isCollapsed() ? [dom.getParent(selection.getNode(), dom.isBlock)] : selection.getSelectedBlocks();\\n          var matches = map$3(nodes, function (node) {\\n            return !!formatter.matchNode(node, name);\\n          });\\n          return inArray$2(matches, true) !== -1;\\n        };\\n      };\\n      addCommands({\\n        'JustifyLeft': alignStates('alignleft'),\\n        'JustifyCenter': alignStates('aligncenter'),\\n        'JustifyRight': alignStates('alignright'),\\n        'JustifyFull': alignStates('alignjustify'),\\n        'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) {\\n          return isFormatMatch(command);\\n        },\\n        'mceBlockQuote': function () {\\n          return isFormatMatch('blockquote');\\n        },\\n        'Outdent': function () {\\n          var node;\\n          if (settings.inline_styles) {\\n            if ((node = dom.getParent(selection.getStart(), dom.isBlock)) && parseInt(node.style.paddingLeft, 10) > 0) {\\n              return true;\\n            }\\n            if ((node = dom.getParent(selection.getEnd(), dom.isBlock)) && parseInt(node.style.paddingLeft, 10) > 0) {\\n              return true;\\n            }\\n          }\\n          return queryCommandState('InsertUnorderedList') || queryCommandState('InsertOrderedList') || !settings.inline_styles && !!dom.getParent(selection.getNode(), 'BLOCKQUOTE');\\n        },\\n        'InsertUnorderedList,InsertOrderedList': function (command) {\\n          var list = dom.getParent(selection.getNode(), 'ul,ol');\\n          return list && (command === 'insertunorderedlist' && list.tagName === 'UL' || command === 'insertorderedlist' && list.tagName === 'OL');\\n        }\\n      }, 'state');\\n      addCommands({\\n        Undo: function () {\\n          editor.undoManager.undo();\\n        },\\n        Redo: function () {\\n          editor.undoManager.redo();\\n        }\\n      });\\n      addQueryValueHandler('FontName', function () {\\n        return fontNameQuery(editor);\\n      }, this);\\n      addQueryValueHandler('FontSize', function () {\\n        return fontSizeQuery(editor);\\n      }, this);\\n    }\\n\\n    var nativeEvents = Tools.makeMap('focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange ' + 'mouseout mouseenter mouseleave wheel keydown keypress keyup input contextmenu dragstart dragend dragover ' + 'draggesture dragdrop drop drag submit ' + 'compositionstart compositionend compositionupdate touchstart touchmove touchend', ' ');\\n    var Dispatcher = function (settings) {\\n      var self = this;\\n      var scope, bindings = {}, toggleEvent;\\n      var returnFalse = function () {\\n        return false;\\n      };\\n      var returnTrue = function () {\\n        return true;\\n      };\\n      settings = settings || {};\\n      scope = settings.scope || self;\\n      toggleEvent = settings.toggleEvent || returnFalse;\\n      var fire = function (name, args) {\\n        var handlers, i, l, callback;\\n        name = name.toLowerCase();\\n        args = args || {};\\n        args.type = name;\\n        if (!args.target) {\\n          args.target = scope;\\n        }\\n        if (!args.preventDefault) {\\n          args.preventDefault = function () {\\n            args.isDefaultPrevented = returnTrue;\\n          };\\n          args.stopPropagation = function () {\\n            args.isPropagationStopped = returnTrue;\\n          };\\n          args.stopImmediatePropagation = function () {\\n            args.isImmediatePropagationStopped = returnTrue;\\n          };\\n          args.isDefaultPrevented = returnFalse;\\n          args.isPropagationStopped = returnFalse;\\n          args.isImmediatePropagationStopped = returnFalse;\\n        }\\n        if (settings.beforeFire) {\\n          settings.beforeFire(args);\\n        }\\n        handlers = bindings[name];\\n        if (handlers) {\\n          for (i = 0, l = handlers.length; i < l; i++) {\\n            callback = handlers[i];\\n            if (callback.once) {\\n              off(name, callback.func);\\n            }\\n            if (args.isImmediatePropagationStopped()) {\\n              args.stopPropagation();\\n              return args;\\n            }\\n            if (callback.func.call(scope, args) === false) {\\n              args.preventDefault();\\n              return args;\\n            }\\n          }\\n        }\\n        return args;\\n      };\\n      var on = function (name, callback, prepend, extra) {\\n        var handlers, names, i;\\n        if (callback === false) {\\n          callback = returnFalse;\\n        }\\n        if (callback) {\\n          callback = { func: callback };\\n          if (extra) {\\n            Tools.extend(callback, extra);\\n          }\\n          names = name.toLowerCase().split(' ');\\n          i = names.length;\\n          while (i--) {\\n            name = names[i];\\n            handlers = bindings[name];\\n            if (!handlers) {\\n              handlers = bindings[name] = [];\\n              toggleEvent(name, true);\\n            }\\n            if (prepend) {\\n              handlers.unshift(callback);\\n            } else {\\n              handlers.push(callback);\\n            }\\n          }\\n        }\\n        return self;\\n      };\\n      var off = function (name, callback) {\\n        var i, handlers, bindingName, names, hi;\\n        if (name) {\\n          names = name.toLowerCase().split(' ');\\n          i = names.length;\\n          while (i--) {\\n            name = names[i];\\n            handlers = bindings[name];\\n            if (!name) {\\n              for (bindingName in bindings) {\\n                toggleEvent(bindingName, false);\\n                delete bindings[bindingName];\\n              }\\n              return self;\\n            }\\n            if (handlers) {\\n              if (!callback) {\\n                handlers.length = 0;\\n              } else {\\n                hi = handlers.length;\\n                while (hi--) {\\n                  if (handlers[hi].func === callback) {\\n                    handlers = handlers.slice(0, hi).concat(handlers.slice(hi + 1));\\n                    bindings[name] = handlers;\\n                  }\\n                }\\n              }\\n              if (!handlers.length) {\\n                toggleEvent(name, false);\\n                delete bindings[name];\\n              }\\n            }\\n          }\\n        } else {\\n          for (name in bindings) {\\n            toggleEvent(name, false);\\n          }\\n          bindings = {};\\n        }\\n        return self;\\n      };\\n      var once = function (name, callback, prepend) {\\n        return on(name, callback, prepend, { once: true });\\n      };\\n      var has = function (name) {\\n        name = name.toLowerCase();\\n        return !(!bindings[name] || bindings[name].length === 0);\\n      };\\n      self.fire = fire;\\n      self.on = on;\\n      self.off = off;\\n      self.once = once;\\n      self.has = has;\\n    };\\n    Dispatcher.isNative = function (name) {\\n      return !!nativeEvents[name.toLowerCase()];\\n    };\\n\\n    var getEventDispatcher = function (obj) {\\n      if (!obj._eventDispatcher) {\\n        obj._eventDispatcher = new Dispatcher({\\n          scope: obj,\\n          toggleEvent: function (name, state) {\\n            if (Dispatcher.isNative(name) && obj.toggleNativeEvent) {\\n              obj.toggleNativeEvent(name, state);\\n            }\\n          }\\n        });\\n      }\\n      return obj._eventDispatcher;\\n    };\\n    var Observable = {\\n      fire: function (name, args, bubble) {\\n        var self = this;\\n        if (self.removed && name !== 'remove' && name !== 'detach') {\\n          return args;\\n        }\\n        args = getEventDispatcher(self).fire(name, args, bubble);\\n        if (bubble !== false && self.parent) {\\n          var parent = self.parent();\\n          while (parent && !args.isPropagationStopped()) {\\n            parent.fire(name, args, false);\\n            parent = parent.parent();\\n          }\\n        }\\n        return args;\\n      },\\n      on: function (name, callback, prepend) {\\n        return getEventDispatcher(this).on(name, callback, prepend);\\n      },\\n      off: function (name, callback) {\\n        return getEventDispatcher(this).off(name, callback);\\n      },\\n      once: function (name, callback) {\\n        return getEventDispatcher(this).once(name, callback);\\n      },\\n      hasEventListeners: function (name) {\\n        return getEventDispatcher(this).has(name);\\n      }\\n    };\\n\\n    var firePreProcess = function (editor, args) {\\n      return editor.fire('PreProcess', args);\\n    };\\n    var firePostProcess = function (editor, args) {\\n      return editor.fire('PostProcess', args);\\n    };\\n    var fireRemove = function (editor) {\\n      return editor.fire('remove');\\n    };\\n    var fireDetach = function (editor) {\\n      return editor.fire('detach');\\n    };\\n    var fireSwitchMode = function (editor, mode) {\\n      return editor.fire('SwitchMode', { mode: mode });\\n    };\\n    var fireObjectResizeStart = function (editor, target, width, height) {\\n      editor.fire('ObjectResizeStart', {\\n        target: target,\\n        width: width,\\n        height: height\\n      });\\n    };\\n    var fireObjectResized = function (editor, target, width, height) {\\n      editor.fire('ObjectResized', {\\n        target: target,\\n        width: width,\\n        height: height\\n      });\\n    };\\n    var Events = {\\n      firePreProcess: firePreProcess,\\n      firePostProcess: firePostProcess,\\n      fireRemove: fireRemove,\\n      fireDetach: fireDetach,\\n      fireSwitchMode: fireSwitchMode,\\n      fireObjectResizeStart: fireObjectResizeStart,\\n      fireObjectResized: fireObjectResized\\n    };\\n\\n    var setEditorCommandState = function (editor, cmd, state) {\\n      try {\\n        editor.getDoc().execCommand(cmd, false, state);\\n      } catch (ex) {\\n      }\\n    };\\n    var toggleClass = function (elm, cls, state) {\\n      if (has$2(elm, cls) && state === false) {\\n        remove$4(elm, cls);\\n      } else if (state) {\\n        add$2(elm, cls);\\n      }\\n    };\\n    var toggleReadOnly = function (editor, state) {\\n      toggleClass(Element.fromDom(editor.getBody()), 'mce-content-readonly', state);\\n      if (state) {\\n        editor.selection.controlSelection.hideResizeRect();\\n        editor.readonly = true;\\n        editor.getBody().contentEditable = 'false';\\n      } else {\\n        editor.readonly = false;\\n        editor.getBody().contentEditable = 'true';\\n        setEditorCommandState(editor, 'StyleWithCSS', false);\\n        setEditorCommandState(editor, 'enableInlineTableEditing', false);\\n        setEditorCommandState(editor, 'enableObjectResizing', false);\\n        editor.focus();\\n        editor.nodeChanged();\\n      }\\n    };\\n    var setMode = function (editor, mode) {\\n      if (mode === getMode(editor)) {\\n        return;\\n      }\\n      if (editor.initialized) {\\n        toggleReadOnly(editor, mode === 'readonly');\\n      } else {\\n        editor.on('init', function () {\\n          toggleReadOnly(editor, mode === 'readonly');\\n        });\\n      }\\n      Events.fireSwitchMode(editor, mode);\\n    };\\n    var getMode = function (editor) {\\n      return editor.readonly ? 'readonly' : 'design';\\n    };\\n    var isReadOnly = function (editor) {\\n      return editor.readonly === true;\\n    };\\n\\n    var DOM$1 = DOMUtils$1.DOM;\\n    var customEventRootDelegates;\\n    var getEventTarget = function (editor, eventName) {\\n      if (eventName === 'selectionchange') {\\n        return editor.getDoc();\\n      }\\n      if (!editor.inline && /^mouse|touch|click|contextmenu|drop|dragover|dragend/.test(eventName)) {\\n        return editor.getDoc().documentElement;\\n      }\\n      if (editor.settings.event_root) {\\n        if (!editor.eventRoot) {\\n          editor.eventRoot = DOM$1.select(editor.settings.event_root)[0];\\n        }\\n        return editor.eventRoot;\\n      }\\n      return editor.getBody();\\n    };\\n    var isListening = function (editor) {\\n      return !editor.hidden && !editor.readonly;\\n    };\\n    var fireEvent = function (editor, eventName, e) {\\n      if (isListening(editor)) {\\n        editor.fire(eventName, e);\\n      } else if (isReadOnly(editor)) {\\n        e.preventDefault();\\n      }\\n    };\\n    var bindEventDelegate = function (editor, eventName) {\\n      var eventRootElm, delegate;\\n      if (!editor.delegates) {\\n        editor.delegates = {};\\n      }\\n      if (editor.delegates[eventName] || editor.removed) {\\n        return;\\n      }\\n      eventRootElm = getEventTarget(editor, eventName);\\n      if (editor.settings.event_root) {\\n        if (!customEventRootDelegates) {\\n          customEventRootDelegates = {};\\n          editor.editorManager.on('removeEditor', function () {\\n            var name;\\n            if (!editor.editorManager.activeEditor) {\\n              if (customEventRootDelegates) {\\n                for (name in customEventRootDelegates) {\\n                  editor.dom.unbind(getEventTarget(editor, name));\\n                }\\n                customEventRootDelegates = null;\\n              }\\n            }\\n          });\\n        }\\n        if (customEventRootDelegates[eventName]) {\\n          return;\\n        }\\n        delegate = function (e) {\\n          var target = e.target;\\n          var editors = editor.editorManager.get();\\n          var i = editors.length;\\n          while (i--) {\\n            var body = editors[i].getBody();\\n            if (body === target || DOM$1.isChildOf(target, body)) {\\n              fireEvent(editors[i], eventName, e);\\n            }\\n          }\\n        };\\n        customEventRootDelegates[eventName] = delegate;\\n        DOM$1.bind(eventRootElm, eventName, delegate);\\n      } else {\\n        delegate = function (e) {\\n          fireEvent(editor, eventName, e);\\n        };\\n        DOM$1.bind(eventRootElm, eventName, delegate);\\n        editor.delegates[eventName] = delegate;\\n      }\\n    };\\n    var EditorObservable = {\\n      bindPendingEventDelegates: function () {\\n        var self = this;\\n        Tools.each(self._pendingNativeEvents, function (name) {\\n          bindEventDelegate(self, name);\\n        });\\n      },\\n      toggleNativeEvent: function (name, state) {\\n        var self = this;\\n        if (name === 'focus' || name === 'blur') {\\n          return;\\n        }\\n        if (state) {\\n          if (self.initialized) {\\n            bindEventDelegate(self, name);\\n          } else {\\n            if (!self._pendingNativeEvents) {\\n              self._pendingNativeEvents = [name];\\n            } else {\\n              self._pendingNativeEvents.push(name);\\n            }\\n          }\\n        } else if (self.initialized) {\\n          self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]);\\n          delete self.delegates[name];\\n        }\\n      },\\n      unbindAllNativeEvents: function () {\\n        var self = this;\\n        var body = self.getBody();\\n        var dom = self.dom;\\n        var name;\\n        if (self.delegates) {\\n          for (name in self.delegates) {\\n            self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]);\\n          }\\n          delete self.delegates;\\n        }\\n        if (!self.inline && body && dom) {\\n          body.onload = null;\\n          dom.unbind(self.getWin());\\n          dom.unbind(self.getDoc());\\n        }\\n        if (dom) {\\n          dom.unbind(body);\\n          dom.unbind(self.getContainer());\\n        }\\n      }\\n    };\\n    EditorObservable = Tools.extend({}, Observable, EditorObservable);\\n    var EditorObservable$1 = EditorObservable;\\n\\n    var sectionResult = Immutable('sections', 'settings');\\n    var detection = PlatformDetection$1.detect();\\n    var isTouch = detection.deviceType.isTouch();\\n    var mobilePlugins = [\\n      'lists',\\n      'autolink',\\n      'autosave'\\n    ];\\n    var defaultMobileSettings = { theme: 'mobile' };\\n    var normalizePlugins = function (plugins) {\\n      var pluginNames = isArray(plugins) ? plugins.join(' ') : plugins;\\n      var trimmedPlugins = map(isString(pluginNames) ? pluginNames.split(' ') : [], trim$2);\\n      return filter(trimmedPlugins, function (item) {\\n        return item.length > 0;\\n      });\\n    };\\n    var filterMobilePlugins = function (plugins) {\\n      return filter(plugins, curry(contains, mobilePlugins));\\n    };\\n    var extractSections = function (keys, settings) {\\n      var result = bifilter(settings, function (value, key) {\\n        return contains(keys, key);\\n      });\\n      return sectionResult(result.t, result.f);\\n    };\\n    var getSection = function (sectionResult, name, defaults) {\\n      var sections = sectionResult.sections();\\n      var sectionSettings = sections.hasOwnProperty(name) ? sections[name] : {};\\n      return Tools.extend({}, defaults, sectionSettings);\\n    };\\n    var hasSection = function (sectionResult, name) {\\n      return sectionResult.sections().hasOwnProperty(name);\\n    };\\n    var getDefaultSettings = function (id, documentBaseUrl, editor) {\\n      return {\\n        id: id,\\n        theme: 'modern',\\n        delta_width: 0,\\n        delta_height: 0,\\n        popup_css: '',\\n        plugins: '',\\n        document_base_url: documentBaseUrl,\\n        add_form_submit_trigger: true,\\n        submit_patch: true,\\n        add_unload_trigger: true,\\n        convert_urls: true,\\n        relative_urls: true,\\n        remove_script_host: true,\\n        object_resizing: true,\\n        doctype: '<!DOCTYPE html>',\\n        visual: true,\\n        font_size_style_values: 'xx-small,x-small,small,medium,large,x-large,xx-large',\\n        font_size_legacy_values: 'xx-small,small,medium,large,x-large,xx-large,300%',\\n        forced_root_block: 'p',\\n        hidden_input: true,\\n        render_ui: true,\\n        indentation: '40px',\\n        inline_styles: true,\\n        convert_fonts_to_spans: true,\\n        indent: 'simple',\\n        indent_before: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist',\\n        indent_after: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist',\\n        entity_encoding: 'named',\\n        url_converter: editor.convertURL,\\n        url_converter_scope: editor,\\n        ie7_compat: true\\n      };\\n    };\\n    var getExternalPlugins = function (overrideSettings, settings) {\\n      var userDefinedExternalPlugins = settings.external_plugins ? settings.external_plugins : {};\\n      if (overrideSettings && overrideSettings.external_plugins) {\\n        return Tools.extend({}, overrideSettings.external_plugins, userDefinedExternalPlugins);\\n      } else {\\n        return userDefinedExternalPlugins;\\n      }\\n    };\\n    var combinePlugins = function (forcedPlugins, plugins) {\\n      return [].concat(normalizePlugins(forcedPlugins)).concat(normalizePlugins(plugins));\\n    };\\n    var processPlugins = function (isTouchDevice, sectionResult, defaultOverrideSettings, settings) {\\n      var forcedPlugins = normalizePlugins(defaultOverrideSettings.forced_plugins);\\n      var plugins = normalizePlugins(settings.plugins);\\n      var platformPlugins = isTouchDevice && hasSection(sectionResult, 'mobile') ? filterMobilePlugins(plugins) : plugins;\\n      var combinedPlugins = combinePlugins(forcedPlugins, platformPlugins);\\n      return Tools.extend(settings, { plugins: combinedPlugins.join(' ') });\\n    };\\n    var isOnMobile = function (isTouchDevice, sectionResult) {\\n      var isInline = sectionResult.settings().inline;\\n      return isTouchDevice && hasSection(sectionResult, 'mobile') && !isInline;\\n    };\\n    var combineSettings = function (isTouchDevice, defaultSettings, defaultOverrideSettings, settings) {\\n      var sectionResult = extractSections(['mobile'], settings);\\n      var extendedSettings = Tools.extend(defaultSettings, defaultOverrideSettings, sectionResult.settings(), isOnMobile(isTouchDevice, sectionResult) ? getSection(sectionResult, 'mobile', defaultMobileSettings) : {}, {\\n        validate: true,\\n        content_editable: sectionResult.settings().inline,\\n        external_plugins: getExternalPlugins(defaultOverrideSettings, sectionResult.settings())\\n      });\\n      return processPlugins(isTouchDevice, sectionResult, defaultOverrideSettings, extendedSettings);\\n    };\\n    var getEditorSettings = function (editor, id, documentBaseUrl, defaultOverrideSettings, settings) {\\n      var defaultSettings = getDefaultSettings(id, documentBaseUrl, editor);\\n      return combineSettings(isTouch, defaultSettings, defaultOverrideSettings, settings);\\n    };\\n    var getFiltered = function (predicate, editor, name) {\\n      return Option.from(editor.settings[name]).filter(predicate);\\n    };\\n    var getParamObject = function (value) {\\n      var output = {};\\n      if (typeof value === 'string') {\\n        each(value.indexOf('=') > 0 ? value.split(/[;,](?![^=;,]*(?:[;,]|$))/) : value.split(','), function (val) {\\n          var arr = val.split('=');\\n          if (arr.length > 1) {\\n            output[Tools.trim(arr[0])] = Tools.trim(arr[1]);\\n          } else {\\n            output[Tools.trim(arr[0])] = Tools.trim(arr);\\n          }\\n        });\\n      } else {\\n        output = value;\\n      }\\n      return output;\\n    };\\n    var isArrayOf = function (p) {\\n      return function (a) {\\n        return isArray(a) && forall(a, p);\\n      };\\n    };\\n    var getParam = function (editor, name, defaultVal, type) {\\n      var value = name in editor.settings ? editor.settings[name] : defaultVal;\\n      if (type === 'hash') {\\n        return getParamObject(value);\\n      } else if (type === 'string') {\\n        return getFiltered(isString, editor, name).getOr(defaultVal);\\n      } else if (type === 'number') {\\n        return getFiltered(isNumber, editor, name).getOr(defaultVal);\\n      } else if (type === 'boolean') {\\n        return getFiltered(isBoolean, editor, name).getOr(defaultVal);\\n      } else if (type === 'object') {\\n        return getFiltered(isObject, editor, name).getOr(defaultVal);\\n      } else if (type === 'array') {\\n        return getFiltered(isArray, editor, name).getOr(defaultVal);\\n      } else if (type === 'string[]') {\\n        return getFiltered(isArrayOf(isString), editor, name).getOr(defaultVal);\\n      } else if (type === 'function') {\\n        return getFiltered(isFunction, editor, name).getOr(defaultVal);\\n      } else {\\n        return value;\\n      }\\n    };\\n\\n    var each$b = Tools.each, explode$2 = Tools.explode;\\n    var keyCodeLookup = {\\n      f1: 112,\\n      f2: 113,\\n      f3: 114,\\n      f4: 115,\\n      f5: 116,\\n      f6: 117,\\n      f7: 118,\\n      f8: 119,\\n      f9: 120,\\n      f10: 121,\\n      f11: 122,\\n      f12: 123\\n    };\\n    var modifierNames = Tools.makeMap('alt,ctrl,shift,meta,access');\\n    function Shortcuts (editor) {\\n      var self = this;\\n      var shortcuts = {};\\n      var pendingPatterns = [];\\n      var parseShortcut = function (pattern) {\\n        var id, key;\\n        var shortcut = {};\\n        each$b(explode$2(pattern, '+'), function (value) {\\n          if (value in modifierNames) {\\n            shortcut[value] = true;\\n          } else {\\n            if (/^[0-9]{2,}$/.test(value)) {\\n              shortcut.keyCode = parseInt(value, 10);\\n            } else {\\n              shortcut.charCode = value.charCodeAt(0);\\n              shortcut.keyCode = keyCodeLookup[value] || value.toUpperCase().charCodeAt(0);\\n            }\\n          }\\n        });\\n        id = [shortcut.keyCode];\\n        for (key in modifierNames) {\\n          if (shortcut[key]) {\\n            id.push(key);\\n          } else {\\n            shortcut[key] = false;\\n          }\\n        }\\n        shortcut.id = id.join(',');\\n        if (shortcut.access) {\\n          shortcut.alt = true;\\n          if (Env.mac) {\\n            shortcut.ctrl = true;\\n          } else {\\n            shortcut.shift = true;\\n          }\\n        }\\n        if (shortcut.meta) {\\n          if (Env.mac) {\\n            shortcut.meta = true;\\n          } else {\\n            shortcut.ctrl = true;\\n            shortcut.meta = false;\\n          }\\n        }\\n        return shortcut;\\n      };\\n      var createShortcut = function (pattern, desc, cmdFunc, scope) {\\n        var shortcuts;\\n        shortcuts = Tools.map(explode$2(pattern, '>'), parseShortcut);\\n        shortcuts[shortcuts.length - 1] = Tools.extend(shortcuts[shortcuts.length - 1], {\\n          func: cmdFunc,\\n          scope: scope || editor\\n        });\\n        return Tools.extend(shortcuts[0], {\\n          desc: editor.translate(desc),\\n          subpatterns: shortcuts.slice(1)\\n        });\\n      };\\n      var hasModifier = function (e) {\\n        return e.altKey || e.ctrlKey || e.metaKey;\\n      };\\n      var isFunctionKey = function (e) {\\n        return e.type === 'keydown' && e.keyCode >= 112 && e.keyCode <= 123;\\n      };\\n      var matchShortcut = function (e, shortcut) {\\n        if (!shortcut) {\\n          return false;\\n        }\\n        if (shortcut.ctrl !== e.ctrlKey || shortcut.meta !== e.metaKey) {\\n          return false;\\n        }\\n        if (shortcut.alt !== e.altKey || shortcut.shift !== e.shiftKey) {\\n          return false;\\n        }\\n        if (e.keyCode === shortcut.keyCode || e.charCode && e.charCode === shortcut.charCode) {\\n          e.preventDefault();\\n          return true;\\n        }\\n        return false;\\n      };\\n      var executeShortcutAction = function (shortcut) {\\n        return shortcut.func ? shortcut.func.call(shortcut.scope) : null;\\n      };\\n      editor.on('keyup keypress keydown', function (e) {\\n        if ((hasModifier(e) || isFunctionKey(e)) && !e.isDefaultPrevented()) {\\n          each$b(shortcuts, function (shortcut) {\\n            if (matchShortcut(e, shortcut)) {\\n              pendingPatterns = shortcut.subpatterns.slice(0);\\n              if (e.type === 'keydown') {\\n                executeShortcutAction(shortcut);\\n              }\\n              return true;\\n            }\\n          });\\n          if (matchShortcut(e, pendingPatterns[0])) {\\n            if (pendingPatterns.length === 1) {\\n              if (e.type === 'keydown') {\\n                executeShortcutAction(pendingPatterns[0]);\\n              }\\n            }\\n            pendingPatterns.shift();\\n          }\\n        }\\n      });\\n      self.add = function (pattern, desc, cmdFunc, scope) {\\n        var cmd;\\n        cmd = cmdFunc;\\n        if (typeof cmdFunc === 'string') {\\n          cmdFunc = function () {\\n            editor.execCommand(cmd, false, null);\\n          };\\n        } else if (Tools.isArray(cmd)) {\\n          cmdFunc = function () {\\n            editor.execCommand(cmd[0], cmd[1], cmd[2]);\\n          };\\n        }\\n        each$b(explode$2(Tools.trim(pattern.toLowerCase())), function (pattern) {\\n          var shortcut = createShortcut(pattern, desc, cmdFunc, scope);\\n          shortcuts[shortcut.id] = shortcut;\\n        });\\n        return true;\\n      };\\n      self.remove = function (pattern) {\\n        var shortcut = createShortcut(pattern);\\n        if (shortcuts[shortcut.id]) {\\n          delete shortcuts[shortcut.id];\\n          return true;\\n        }\\n        return false;\\n      };\\n    }\\n\\n    var hasFocus = function (element) {\\n      var doc = owner(element).dom();\\n      return element.dom() === doc.activeElement;\\n    };\\n    var active = function (_doc) {\\n      var doc = _doc !== undefined ? _doc.dom() : domGlobals.document;\\n      return Option.from(doc.activeElement).map(Element.fromDom);\\n    };\\n    var search = function (element) {\\n      return active(owner(element)).filter(function (e) {\\n        return element.dom().contains(e.dom());\\n      });\\n    };\\n\\n    var getContentEditableHost = function (editor, node) {\\n      return editor.dom.getParent(node, function (node) {\\n        return editor.dom.getContentEditable(node) === 'true';\\n      });\\n    };\\n    var getCollapsedNode = function (rng) {\\n      return rng.collapsed ? Option.from(getNode(rng.startContainer, rng.startOffset)).map(Element.fromDom) : Option.none();\\n    };\\n    var getFocusInElement = function (root, rng) {\\n      return getCollapsedNode(rng).bind(function (node) {\\n        if (isTableSection(node)) {\\n          return Option.some(node);\\n        } else if (contains$3(root, node) === false) {\\n          return Option.some(root);\\n        } else {\\n          return Option.none();\\n        }\\n      });\\n    };\\n    var normalizeSelection = function (editor, rng) {\\n      getFocusInElement(Element.fromDom(editor.getBody()), rng).bind(function (elm) {\\n        return CaretFinder.firstPositionIn(elm.dom());\\n      }).fold(function () {\\n        editor.selection.normalize();\\n        return;\\n      }, function (caretPos) {\\n        return editor.selection.setRng(caretPos.toRange());\\n      });\\n    };\\n    var focusBody = function (body) {\\n      if (body.setActive) {\\n        try {\\n          body.setActive();\\n        } catch (ex) {\\n          body.focus();\\n        }\\n      } else {\\n        body.focus();\\n      }\\n    };\\n    var hasElementFocus = function (elm) {\\n      return hasFocus(elm) || search(elm).isSome();\\n    };\\n    var hasIframeFocus = function (editor) {\\n      return editor.iframeElement && hasFocus(Element.fromDom(editor.iframeElement));\\n    };\\n    var hasInlineFocus = function (editor) {\\n      var rawBody = editor.getBody();\\n      return rawBody && hasElementFocus(Element.fromDom(rawBody));\\n    };\\n    var hasFocus$1 = function (editor) {\\n      return editor.inline ? hasInlineFocus(editor) : hasIframeFocus(editor);\\n    };\\n    var focusEditor = function (editor) {\\n      var selection = editor.selection, contentEditable = editor.settings.content_editable;\\n      var body = editor.getBody();\\n      var rng = selection.getRng();\\n      editor.quirks.refreshContentEditable();\\n      var contentEditableHost = getContentEditableHost(editor, selection.getNode());\\n      if (editor.$.contains(body, contentEditableHost)) {\\n        focusBody(contentEditableHost);\\n        normalizeSelection(editor, rng);\\n        activateEditor(editor);\\n        return;\\n      }\\n      if (editor.bookmark !== undefined && hasFocus$1(editor) === false) {\\n        SelectionBookmark.getRng(editor).each(function (bookmarkRng) {\\n          editor.selection.setRng(bookmarkRng);\\n          rng = bookmarkRng;\\n        });\\n      }\\n      if (!contentEditable) {\\n        if (!Env.opera) {\\n          focusBody(body);\\n        }\\n        editor.getWin().focus();\\n      }\\n      if (Env.gecko || contentEditable) {\\n        focusBody(body);\\n        normalizeSelection(editor, rng);\\n      }\\n      activateEditor(editor);\\n    };\\n    var activateEditor = function (editor) {\\n      return editor.editorManager.setActive(editor);\\n    };\\n    var focus = function (editor, skipFocus) {\\n      if (editor.removed) {\\n        return;\\n      }\\n      skipFocus ? activateEditor(editor) : focusEditor(editor);\\n    };\\n    var EditorFocus = {\\n      focus: focus,\\n      hasFocus: hasFocus$1\\n    };\\n\\n    var getProp = function (propName, elm) {\\n      var rawElm = elm.dom();\\n      return rawElm[propName];\\n    };\\n    var getComputedSizeProp = function (propName, elm) {\\n      return parseInt(get$1(elm, propName), 10);\\n    };\\n    var getClientWidth = curry(getProp, 'clientWidth');\\n    var getClientHeight = curry(getProp, 'clientHeight');\\n    var getMarginTop = curry(getComputedSizeProp, 'margin-top');\\n    var getMarginLeft = curry(getComputedSizeProp, 'margin-left');\\n    var getBoundingClientRect$1 = function (elm) {\\n      return elm.dom().getBoundingClientRect();\\n    };\\n    var isInsideElementContentArea = function (bodyElm, clientX, clientY) {\\n      var clientWidth = getClientWidth(bodyElm);\\n      var clientHeight = getClientHeight(bodyElm);\\n      return clientX >= 0 && clientY >= 0 && clientX <= clientWidth && clientY <= clientHeight;\\n    };\\n    var transpose = function (inline, elm, clientX, clientY) {\\n      var clientRect = getBoundingClientRect$1(elm);\\n      var deltaX = inline ? clientRect.left + elm.dom().clientLeft + getMarginLeft(elm) : 0;\\n      var deltaY = inline ? clientRect.top + elm.dom().clientTop + getMarginTop(elm) : 0;\\n      var x = clientX - deltaX;\\n      var y = clientY - deltaY;\\n      return {\\n        x: x,\\n        y: y\\n      };\\n    };\\n    var isXYInContentArea = function (editor, clientX, clientY) {\\n      var bodyElm = Element.fromDom(editor.getBody());\\n      var targetElm = editor.inline ? bodyElm : documentElement(bodyElm);\\n      var transposedPoint = transpose(editor.inline, targetElm, clientX, clientY);\\n      return isInsideElementContentArea(targetElm, transposedPoint.x, transposedPoint.y);\\n    };\\n    var fromDomSafe = function (node) {\\n      return Option.from(node).map(Element.fromDom);\\n    };\\n    var isEditorAttachedToDom = function (editor) {\\n      var rawContainer = editor.inline ? editor.getBody() : editor.getContentAreaContainer();\\n      return fromDomSafe(rawContainer).map(function (container) {\\n        return contains$3(owner(container), container);\\n      }).getOr(false);\\n    };\\n    var EditorView = {\\n      isXYInContentArea: isXYInContentArea,\\n      isEditorAttachedToDom: isEditorAttachedToDom\\n    };\\n\\n    function NotificationManagerImpl () {\\n      var unimplemented = function () {\\n        throw new Error('Theme did not provide a NotificationManager implementation.');\\n      };\\n      return {\\n        open: unimplemented,\\n        close: unimplemented,\\n        reposition: unimplemented,\\n        getArgs: unimplemented\\n      };\\n    }\\n\\n    function NotificationManager (editor) {\\n      var notifications = [];\\n      var getImplementation = function () {\\n        var theme = editor.theme;\\n        return theme && theme.getNotificationManagerImpl ? theme.getNotificationManagerImpl() : NotificationManagerImpl();\\n      };\\n      var getTopNotification = function () {\\n        return Option.from(notifications[0]);\\n      };\\n      var isEqual = function (a, b) {\\n        return a.type === b.type && a.text === b.text && !a.progressBar && !a.timeout && !b.progressBar && !b.timeout;\\n      };\\n      var reposition = function () {\\n        if (notifications.length > 0) {\\n          getImplementation().reposition(notifications);\\n        }\\n      };\\n      var addNotification = function (notification) {\\n        notifications.push(notification);\\n      };\\n      var closeNotification = function (notification) {\\n        findIndex(notifications, function (otherNotification) {\\n          return otherNotification === notification;\\n        }).each(function (index) {\\n          notifications.splice(index, 1);\\n        });\\n      };\\n      var open = function (args) {\\n        if (editor.removed || !EditorView.isEditorAttachedToDom(editor)) {\\n          return;\\n        }\\n        return find(notifications, function (notification) {\\n          return isEqual(getImplementation().getArgs(notification), args);\\n        }).getOrThunk(function () {\\n          editor.editorManager.setActive(editor);\\n          var notification = getImplementation().open(args, function () {\\n            closeNotification(notification);\\n            reposition();\\n          });\\n          addNotification(notification);\\n          reposition();\\n          return notification;\\n        });\\n      };\\n      var close = function () {\\n        getTopNotification().each(function (notification) {\\n          getImplementation().close(notification);\\n          closeNotification(notification);\\n          reposition();\\n        });\\n      };\\n      var getNotifications = function () {\\n        return notifications;\\n      };\\n      var registerEvents = function (editor) {\\n        editor.on('SkinLoaded', function () {\\n          var serviceMessage = editor.settings.service_message;\\n          if (serviceMessage) {\\n            open({\\n              text: serviceMessage,\\n              type: 'warning',\\n              timeout: 0,\\n              icon: ''\\n            });\\n          }\\n        });\\n        editor.on('ResizeEditor ResizeWindow', function () {\\n          Delay.requestAnimationFrame(reposition);\\n        });\\n        editor.on('remove', function () {\\n          each(notifications.slice(), function (notification) {\\n            getImplementation().close(notification);\\n          });\\n        });\\n      };\\n      registerEvents(editor);\\n      return {\\n        open: open,\\n        close: close,\\n        getNotifications: getNotifications\\n      };\\n    }\\n\\n    function WindowManagerImpl () {\\n      var unimplemented = function () {\\n        throw new Error('Theme did not provide a WindowManager implementation.');\\n      };\\n      return {\\n        open: unimplemented,\\n        alert: unimplemented,\\n        confirm: unimplemented,\\n        close: unimplemented,\\n        getParams: unimplemented,\\n        setParams: unimplemented\\n      };\\n    }\\n\\n    function WindowManager (editor) {\\n      var windows = [];\\n      var getImplementation = function () {\\n        var theme = editor.theme;\\n        return theme && theme.getWindowManagerImpl ? theme.getWindowManagerImpl() : WindowManagerImpl();\\n      };\\n      var funcBind = function (scope, f) {\\n        return function () {\\n          return f ? f.apply(scope, arguments) : undefined;\\n        };\\n      };\\n      var fireOpenEvent = function (win) {\\n        editor.fire('OpenWindow', { win: win });\\n      };\\n      var fireCloseEvent = function (win) {\\n        editor.fire('CloseWindow', { win: win });\\n      };\\n      var addWindow = function (win) {\\n        windows.push(win);\\n        fireOpenEvent(win);\\n      };\\n      var closeWindow = function (win) {\\n        findIndex(windows, function (otherWindow) {\\n          return otherWindow === win;\\n        }).each(function (index) {\\n          windows.splice(index, 1);\\n          fireCloseEvent(win);\\n          if (windows.length === 0) {\\n            editor.focus();\\n          }\\n        });\\n      };\\n      var getTopWindow = function () {\\n        return Option.from(windows[windows.length - 1]);\\n      };\\n      var open = function (args, params) {\\n        editor.editorManager.setActive(editor);\\n        SelectionBookmark.store(editor);\\n        var win = getImplementation().open(args, params, closeWindow);\\n        addWindow(win);\\n        return win;\\n      };\\n      var alert = function (message, callback, scope) {\\n        var win = getImplementation().alert(message, funcBind(scope ? scope : this, callback), closeWindow);\\n        addWindow(win);\\n      };\\n      var confirm = function (message, callback, scope) {\\n        var win = getImplementation().confirm(message, funcBind(scope ? scope : this, callback), closeWindow);\\n        addWindow(win);\\n      };\\n      var close = function () {\\n        getTopWindow().each(function (win) {\\n          getImplementation().close(win);\\n          closeWindow(win);\\n        });\\n      };\\n      var getParams = function () {\\n        return getTopWindow().map(getImplementation().getParams).getOr(null);\\n      };\\n      var setParams = function (params) {\\n        getTopWindow().each(function (win) {\\n          getImplementation().setParams(win, params);\\n        });\\n      };\\n      var getWindows = function () {\\n        return windows;\\n      };\\n      editor.on('remove', function () {\\n        each(windows.slice(0), function (win) {\\n          getImplementation().close(win);\\n        });\\n      });\\n      return {\\n        windows: windows,\\n        open: open,\\n        alert: alert,\\n        confirm: confirm,\\n        close: close,\\n        getParams: getParams,\\n        setParams: setParams,\\n        getWindows: getWindows\\n      };\\n    }\\n\\n    var data = {};\\n    var code = 'en';\\n    var I18n = {\\n      setCode: function (newCode) {\\n        if (newCode) {\\n          code = newCode;\\n          this.rtl = this.data[newCode] ? this.data[newCode]._dir === 'rtl' : false;\\n        }\\n      },\\n      getCode: function () {\\n        return code;\\n      },\\n      rtl: false,\\n      add: function (code, items) {\\n        var langData = data[code];\\n        if (!langData) {\\n          data[code] = langData = {};\\n        }\\n        for (var name in items) {\\n          langData[name] = items[name];\\n        }\\n        this.setCode(code);\\n      },\\n      translate: function (text) {\\n        var langData = data[code] || {};\\n        var toString = function (obj) {\\n          if (Tools.is(obj, 'function')) {\\n            return Object.prototype.toString.call(obj);\\n          }\\n          return !isEmpty(obj) ? '' + obj : '';\\n        };\\n        var isEmpty = function (text) {\\n          return text === '' || text === null || Tools.is(text, 'undefined');\\n        };\\n        var getLangData = function (text) {\\n          text = toString(text);\\n          return Tools.hasOwn(langData, text) ? toString(langData[text]) : text;\\n        };\\n        if (isEmpty(text)) {\\n          return '';\\n        }\\n        if (Tools.is(text, 'object') && Tools.hasOwn(text, 'raw')) {\\n          return toString(text.raw);\\n        }\\n        if (Tools.is(text, 'array')) {\\n          var values_1 = text.slice(1);\\n          text = getLangData(text[0]).replace(/\\\\{([0-9]+)\\\\}/g, function ($1, $2) {\\n            return Tools.hasOwn(values_1, $2) ? toString(values_1[$2]) : $1;\\n          });\\n        }\\n        return getLangData(text).replace(/{context:\\\\w+}$/, '');\\n      },\\n      data: data\\n    };\\n\\n    var PluginManager = AddOnManager.PluginManager;\\n    var resolvePluginName = function (targetUrl, suffix) {\\n      for (var name in PluginManager.urls) {\\n        var matchUrl = PluginManager.urls[name] + '/plugin' + suffix + '.js';\\n        if (matchUrl === targetUrl) {\\n          return name;\\n        }\\n      }\\n      return null;\\n    };\\n    var pluginUrlToMessage = function (editor, url) {\\n      var plugin = resolvePluginName(url, editor.suffix);\\n      return plugin ? I18n.translate([\\n        'Failed to load plugin: {0} from url {1}',\\n        plugin,\\n        url\\n      ]) : I18n.translate([\\n        'Failed to load plugin url: {0}',\\n        url\\n      ]);\\n    };\\n    var displayNotification = function (editor, message) {\\n      editor.notificationManager.open({\\n        type: 'error',\\n        text: message\\n      });\\n    };\\n    var displayError = function (editor, message) {\\n      if (editor._skinLoaded) {\\n        displayNotification(editor, message);\\n      } else {\\n        editor.on('SkinLoaded', function () {\\n          displayNotification(editor, message);\\n        });\\n      }\\n    };\\n    var uploadError = function (editor, message) {\\n      displayError(editor, I18n.translate([\\n        'Failed to upload image: {0}',\\n        message\\n      ]));\\n    };\\n    var pluginLoadError = function (editor, url) {\\n      displayError(editor, pluginUrlToMessage(editor, url));\\n    };\\n    var pluginInitError = function (editor, name, err) {\\n      var message = I18n.translate([\\n        'Failed to initialize plugin: {0}',\\n        name\\n      ]);\\n      initError(message, err);\\n      displayError(editor, message);\\n    };\\n    var initError = function (message) {\\n      var x = [];\\n      for (var _i = 1; _i < arguments.length; _i++) {\\n        x[_i - 1] = arguments[_i];\\n      }\\n      var console = domGlobals.window.console;\\n      if (console) {\\n        if (console.error) {\\n          console.error.apply(console, arguments);\\n        } else {\\n          console.log.apply(console, arguments);\\n        }\\n      }\\n    };\\n    var ErrorReporter = {\\n      pluginLoadError: pluginLoadError,\\n      pluginInitError: pluginInitError,\\n      uploadError: uploadError,\\n      displayError: displayError,\\n      initError: initError\\n    };\\n\\n    var PluginManager$1 = AddOnManager.PluginManager;\\n\\n    var ThemeManager = AddOnManager.ThemeManager;\\n\\n    function XMLHttpRequest () {\\n      var f = Global$1.getOrDie('XMLHttpRequest');\\n      return new f();\\n    }\\n\\n    function Uploader (uploadStatus, settings) {\\n      var pendingPromises = {};\\n      var pathJoin = function (path1, path2) {\\n        if (path1) {\\n          return path1.replace(/\\\\/$/, '') + '/' + path2.replace(/^\\\\//, '');\\n        }\\n        return path2;\\n      };\\n      var defaultHandler = function (blobInfo, success, failure, progress) {\\n        var xhr, formData;\\n        xhr = XMLHttpRequest();\\n        xhr.open('POST', settings.url);\\n        xhr.withCredentials = settings.credentials;\\n        xhr.upload.onprogress = function (e) {\\n          progress(e.loaded / e.total * 100);\\n        };\\n        xhr.onerror = function () {\\n          failure('Image upload failed due to a XHR Transport error. Code: ' + xhr.status);\\n        };\\n        xhr.onload = function () {\\n          var json;\\n          if (xhr.status < 200 || xhr.status >= 300) {\\n            failure('HTTP Error: ' + xhr.status);\\n            return;\\n          }\\n          json = JSON.parse(xhr.responseText);\\n          if (!json || typeof json.location !== 'string') {\\n            failure('Invalid JSON: ' + xhr.responseText);\\n            return;\\n          }\\n          success(pathJoin(settings.basePath, json.location));\\n        };\\n        formData = new domGlobals.FormData();\\n        formData.append('file', blobInfo.blob(), blobInfo.filename());\\n        xhr.send(formData);\\n      };\\n      var noUpload = function () {\\n        return new promiseObj(function (resolve) {\\n          resolve([]);\\n        });\\n      };\\n      var handlerSuccess = function (blobInfo, url) {\\n        return {\\n          url: url,\\n          blobInfo: blobInfo,\\n          status: true\\n        };\\n      };\\n      var handlerFailure = function (blobInfo, error) {\\n        return {\\n          url: '',\\n          blobInfo: blobInfo,\\n          status: false,\\n          error: error\\n        };\\n      };\\n      var resolvePending = function (blobUri, result) {\\n        Tools.each(pendingPromises[blobUri], function (resolve) {\\n          resolve(result);\\n        });\\n        delete pendingPromises[blobUri];\\n      };\\n      var uploadBlobInfo = function (blobInfo, handler, openNotification) {\\n        uploadStatus.markPending(blobInfo.blobUri());\\n        return new promiseObj(function (resolve) {\\n          var notification, progress;\\n          var noop = function () {\\n          };\\n          try {\\n            var closeNotification_1 = function () {\\n              if (notification) {\\n                notification.close();\\n                progress = noop;\\n              }\\n            };\\n            var success = function (url) {\\n              closeNotification_1();\\n              uploadStatus.markUploaded(blobInfo.blobUri(), url);\\n              resolvePending(blobInfo.blobUri(), handlerSuccess(blobInfo, url));\\n              resolve(handlerSuccess(blobInfo, url));\\n            };\\n            var failure = function (error) {\\n              closeNotification_1();\\n              uploadStatus.removeFailed(blobInfo.blobUri());\\n              resolvePending(blobInfo.blobUri(), handlerFailure(blobInfo, error));\\n              resolve(handlerFailure(blobInfo, error));\\n            };\\n            progress = function (percent) {\\n              if (percent < 0 || percent > 100) {\\n                return;\\n              }\\n              if (!notification) {\\n                notification = openNotification();\\n              }\\n              notification.progressBar.value(percent);\\n            };\\n            handler(blobInfo, success, failure, progress);\\n          } catch (ex) {\\n            resolve(handlerFailure(blobInfo, ex.message));\\n          }\\n        });\\n      };\\n      var isDefaultHandler = function (handler) {\\n        return handler === defaultHandler;\\n      };\\n      var pendingUploadBlobInfo = function (blobInfo) {\\n        var blobUri = blobInfo.blobUri();\\n        return new promiseObj(function (resolve) {\\n          pendingPromises[blobUri] = pendingPromises[blobUri] || [];\\n          pendingPromises[blobUri].push(resolve);\\n        });\\n      };\\n      var uploadBlobs = function (blobInfos, openNotification) {\\n        blobInfos = Tools.grep(blobInfos, function (blobInfo) {\\n          return !uploadStatus.isUploaded(blobInfo.blobUri());\\n        });\\n        return promiseObj.all(Tools.map(blobInfos, function (blobInfo) {\\n          return uploadStatus.isPending(blobInfo.blobUri()) ? pendingUploadBlobInfo(blobInfo) : uploadBlobInfo(blobInfo, settings.handler, openNotification);\\n        }));\\n      };\\n      var upload = function (blobInfos, openNotification) {\\n        return !settings.url && isDefaultHandler(settings.handler) ? noUpload() : uploadBlobs(blobInfos, openNotification);\\n      };\\n      if (isFunction(settings.handler) === false) {\\n        settings.handler = defaultHandler;\\n      }\\n      return { upload: upload };\\n    }\\n\\n    function FileReader () {\\n      var f = Global$1.getOrDie('FileReader');\\n      return new f();\\n    }\\n\\n    function Uint8Array (arr) {\\n      var f = Global$1.getOrDie('Uint8Array');\\n      return new f(arr);\\n    }\\n\\n    var requestAnimationFrame$1 = function (callback) {\\n      var f = Global$1.getOrDie('requestAnimationFrame');\\n      f(callback);\\n    };\\n    var atob = function (base64) {\\n      var f = Global$1.getOrDie('atob');\\n      return f(base64);\\n    };\\n    var Window = {\\n      atob: atob,\\n      requestAnimationFrame: requestAnimationFrame$1\\n    };\\n\\n    var blobUriToBlob = function (url) {\\n      return new promiseObj(function (resolve, reject) {\\n        var rejectWithError = function () {\\n          reject('Cannot convert ' + url + ' to Blob. Resource might not exist or is inaccessible.');\\n        };\\n        try {\\n          var xhr = XMLHttpRequest();\\n          xhr.open('GET', url, true);\\n          xhr.responseType = 'blob';\\n          xhr.onload = function () {\\n            if (this.status === 200) {\\n              resolve(this.response);\\n            } else {\\n              rejectWithError();\\n            }\\n          };\\n          xhr.onerror = rejectWithError;\\n          xhr.send();\\n        } catch (ex) {\\n          rejectWithError();\\n        }\\n      });\\n    };\\n    var parseDataUri = function (uri) {\\n      var type, matches;\\n      var uriParts = decodeURIComponent(uri).split(',');\\n      matches = /data:([^;]+)/.exec(uriParts[0]);\\n      if (matches) {\\n        type = matches[1];\\n      }\\n      return {\\n        type: type,\\n        data: uriParts[1]\\n      };\\n    };\\n    var dataUriToBlob = function (uri) {\\n      return new promiseObj(function (resolve) {\\n        var str, arr, i;\\n        var uriParts = parseDataUri(uri);\\n        try {\\n          str = Window.atob(uriParts.data);\\n        } catch (e) {\\n          resolve(new domGlobals.Blob([]));\\n          return;\\n        }\\n        arr = Uint8Array(str.length);\\n        for (i = 0; i < arr.length; i++) {\\n          arr[i] = str.charCodeAt(i);\\n        }\\n        resolve(new domGlobals.Blob([arr], { type: uriParts.type }));\\n      });\\n    };\\n    var uriToBlob = function (url) {\\n      if (url.indexOf('blob:') === 0) {\\n        return blobUriToBlob(url);\\n      }\\n      if (url.indexOf('data:') === 0) {\\n        return dataUriToBlob(url);\\n      }\\n      return null;\\n    };\\n    var blobToDataUri = function (blob) {\\n      return new promiseObj(function (resolve) {\\n        var reader = FileReader();\\n        reader.onloadend = function () {\\n          resolve(reader.result);\\n        };\\n        reader.readAsDataURL(blob);\\n      });\\n    };\\n    var Conversions = {\\n      uriToBlob: uriToBlob,\\n      blobToDataUri: blobToDataUri,\\n      parseDataUri: parseDataUri\\n    };\\n\\n    var count = 0;\\n    var uniqueId = function (prefix) {\\n      return (prefix || 'blobid') + count++;\\n    };\\n    var imageToBlobInfo = function (blobCache, img, resolve, reject) {\\n      var base64, blobInfo;\\n      if (img.src.indexOf('blob:') === 0) {\\n        blobInfo = blobCache.getByUri(img.src);\\n        if (blobInfo) {\\n          resolve({\\n            image: img,\\n            blobInfo: blobInfo\\n          });\\n        } else {\\n          Conversions.uriToBlob(img.src).then(function (blob) {\\n            Conversions.blobToDataUri(blob).then(function (dataUri) {\\n              base64 = Conversions.parseDataUri(dataUri).data;\\n              blobInfo = blobCache.create(uniqueId(), blob, base64);\\n              blobCache.add(blobInfo);\\n              resolve({\\n                image: img,\\n                blobInfo: blobInfo\\n              });\\n            });\\n          }, function (err) {\\n            reject(err);\\n          });\\n        }\\n        return;\\n      }\\n      base64 = Conversions.parseDataUri(img.src).data;\\n      blobInfo = blobCache.findFirst(function (cachedBlobInfo) {\\n        return cachedBlobInfo.base64() === base64;\\n      });\\n      if (blobInfo) {\\n        resolve({\\n          image: img,\\n          blobInfo: blobInfo\\n        });\\n      } else {\\n        Conversions.uriToBlob(img.src).then(function (blob) {\\n          blobInfo = blobCache.create(uniqueId(), blob, base64);\\n          blobCache.add(blobInfo);\\n          resolve({\\n            image: img,\\n            blobInfo: blobInfo\\n          });\\n        }, function (err) {\\n          reject(err);\\n        });\\n      }\\n    };\\n    var getAllImages = function (elm) {\\n      return elm ? from$1(elm.getElementsByTagName('img')) : [];\\n    };\\n    function ImageScanner (uploadStatus, blobCache) {\\n      var cachedPromises = {};\\n      var findAll = function (elm, predicate) {\\n        var images;\\n        if (!predicate) {\\n          predicate = constant(true);\\n        }\\n        images = filter(getAllImages(elm), function (img) {\\n          var src = img.src;\\n          if (!Env.fileApi) {\\n            return false;\\n          }\\n          if (img.hasAttribute('data-mce-bogus')) {\\n            return false;\\n          }\\n          if (img.hasAttribute('data-mce-placeholder')) {\\n            return false;\\n          }\\n          if (!src || src === Env.transparentSrc) {\\n            return false;\\n          }\\n          if (src.indexOf('blob:') === 0) {\\n            return !uploadStatus.isUploaded(src) && predicate(img);\\n          }\\n          if (src.indexOf('data:') === 0) {\\n            return predicate(img);\\n          }\\n          return false;\\n        });\\n        var promises = map(images, function (img) {\\n          if (cachedPromises[img.src]) {\\n            return new promiseObj(function (resolve) {\\n              cachedPromises[img.src].then(function (imageInfo) {\\n                if (typeof imageInfo === 'string') {\\n                  return imageInfo;\\n                }\\n                resolve({\\n                  image: img,\\n                  blobInfo: imageInfo.blobInfo\\n                });\\n              });\\n            });\\n          }\\n          var newPromise = new promiseObj(function (resolve, reject) {\\n            imageToBlobInfo(blobCache, img, resolve, reject);\\n          }).then(function (result) {\\n            delete cachedPromises[result.image.src];\\n            return result;\\n          }).catch(function (error) {\\n            delete cachedPromises[img.src];\\n            return error;\\n          });\\n          cachedPromises[img.src] = newPromise;\\n          return newPromise;\\n        });\\n        return promiseObj.all(promises);\\n      };\\n      return { findAll: findAll };\\n    }\\n\\n    var count$1 = 0;\\n    var seed = function () {\\n      var rnd = function () {\\n        return Math.round(Math.random() * 4294967295).toString(36);\\n      };\\n      var now = new Date().getTime();\\n      return 's' + now.toString(36) + rnd() + rnd() + rnd();\\n    };\\n    var uuid = function (prefix) {\\n      return prefix + count$1++ + seed();\\n    };\\n    var Uuid = { uuid: uuid };\\n\\n    function BlobCache () {\\n      var cache = [];\\n      var mimeToExt = function (mime) {\\n        var mimes = {\\n          'image/jpeg': 'jpg',\\n          'image/jpg': 'jpg',\\n          'image/gif': 'gif',\\n          'image/png': 'png'\\n        };\\n        return mimes[mime.toLowerCase()] || 'dat';\\n      };\\n      var create = function (o, blob, base64, filename) {\\n        if (isString(o)) {\\n          var id = o;\\n          return toBlobInfo({\\n            id: id,\\n            name: filename,\\n            blob: blob,\\n            base64: base64\\n          });\\n        } else if (isObject(o)) {\\n          return toBlobInfo(o);\\n        } else {\\n          throw new Error('Unknown input type');\\n        }\\n      };\\n      var toBlobInfo = function (o) {\\n        var id, name;\\n        if (!o.blob || !o.base64) {\\n          throw new Error('blob and base64 representations of the image are required for BlobInfo to be created');\\n        }\\n        id = o.id || Uuid.uuid('blobid');\\n        name = o.name || id;\\n        return {\\n          id: constant(id),\\n          name: constant(name),\\n          filename: constant(name + '.' + mimeToExt(o.blob.type)),\\n          blob: constant(o.blob),\\n          base64: constant(o.base64),\\n          blobUri: constant(o.blobUri || URL.createObjectURL(o.blob)),\\n          uri: constant(o.uri)\\n        };\\n      };\\n      var add = function (blobInfo) {\\n        if (!get(blobInfo.id())) {\\n          cache.push(blobInfo);\\n        }\\n      };\\n      var get = function (id) {\\n        return findFirst(function (cachedBlobInfo) {\\n          return cachedBlobInfo.id() === id;\\n        });\\n      };\\n      var findFirst = function (predicate) {\\n        return filter(cache, predicate)[0];\\n      };\\n      var getByUri = function (blobUri) {\\n        return findFirst(function (blobInfo) {\\n          return blobInfo.blobUri() === blobUri;\\n        });\\n      };\\n      var removeByUri = function (blobUri) {\\n        cache = filter(cache, function (blobInfo) {\\n          if (blobInfo.blobUri() === blobUri) {\\n            URL.revokeObjectURL(blobInfo.blobUri());\\n            return false;\\n          }\\n          return true;\\n        });\\n      };\\n      var destroy = function () {\\n        each(cache, function (cachedBlobInfo) {\\n          URL.revokeObjectURL(cachedBlobInfo.blobUri());\\n        });\\n        cache = [];\\n      };\\n      return {\\n        create: create,\\n        add: add,\\n        get: get,\\n        getByUri: getByUri,\\n        findFirst: findFirst,\\n        removeByUri: removeByUri,\\n        destroy: destroy\\n      };\\n    }\\n\\n    function UploadStatus () {\\n      var PENDING = 1, UPLOADED = 2;\\n      var blobUriStatuses = {};\\n      var createStatus = function (status, resultUri) {\\n        return {\\n          status: status,\\n          resultUri: resultUri\\n        };\\n      };\\n      var hasBlobUri = function (blobUri) {\\n        return blobUri in blobUriStatuses;\\n      };\\n      var getResultUri = function (blobUri) {\\n        var result = blobUriStatuses[blobUri];\\n        return result ? result.resultUri : null;\\n      };\\n      var isPending = function (blobUri) {\\n        return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === PENDING : false;\\n      };\\n      var isUploaded = function (blobUri) {\\n        return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === UPLOADED : false;\\n      };\\n      var markPending = function (blobUri) {\\n        blobUriStatuses[blobUri] = createStatus(PENDING, null);\\n      };\\n      var markUploaded = function (blobUri, resultUri) {\\n        blobUriStatuses[blobUri] = createStatus(UPLOADED, resultUri);\\n      };\\n      var removeFailed = function (blobUri) {\\n        delete blobUriStatuses[blobUri];\\n      };\\n      var destroy = function () {\\n        blobUriStatuses = {};\\n      };\\n      return {\\n        hasBlobUri: hasBlobUri,\\n        getResultUri: getResultUri,\\n        isPending: isPending,\\n        isUploaded: isUploaded,\\n        markPending: markPending,\\n        markUploaded: markUploaded,\\n        removeFailed: removeFailed,\\n        destroy: destroy\\n      };\\n    }\\n\\n    function EditorUpload (editor) {\\n      var blobCache = BlobCache();\\n      var uploader, imageScanner;\\n      var uploadStatus = UploadStatus();\\n      var urlFilters = [];\\n      var aliveGuard = function (callback) {\\n        return function (result) {\\n          if (editor.selection) {\\n            return callback(result);\\n          }\\n          return [];\\n        };\\n      };\\n      var cacheInvalidator = function () {\\n        return '?' + new Date().getTime();\\n      };\\n      var replaceString = function (content, search, replace) {\\n        var index = 0;\\n        do {\\n          index = content.indexOf(search, index);\\n          if (index !== -1) {\\n            content = content.substring(0, index) + replace + content.substr(index + search.length);\\n            index += replace.length - search.length + 1;\\n          }\\n        } while (index !== -1);\\n        return content;\\n      };\\n      var replaceImageUrl = function (content, targetUrl, replacementUrl) {\\n        content = replaceString(content, 'src=\\\"' + targetUrl + '\\\"', 'src=\\\"' + replacementUrl + '\\\"');\\n        content = replaceString(content, 'data-mce-src=\\\"' + targetUrl + '\\\"', 'data-mce-src=\\\"' + replacementUrl + '\\\"');\\n        return content;\\n      };\\n      var replaceUrlInUndoStack = function (targetUrl, replacementUrl) {\\n        each(editor.undoManager.data, function (level) {\\n          if (level.type === 'fragmented') {\\n            level.fragments = map(level.fragments, function (fragment) {\\n              return replaceImageUrl(fragment, targetUrl, replacementUrl);\\n            });\\n          } else {\\n            level.content = replaceImageUrl(level.content, targetUrl, replacementUrl);\\n          }\\n        });\\n      };\\n      var openNotification = function () {\\n        return editor.notificationManager.open({\\n          text: editor.translate('Image uploading...'),\\n          type: 'info',\\n          timeout: -1,\\n          progressBar: true\\n        });\\n      };\\n      var replaceImageUri = function (image, resultUri) {\\n        blobCache.removeByUri(image.src);\\n        replaceUrlInUndoStack(image.src, resultUri);\\n        editor.$(image).attr({\\n          'src': Settings.shouldReuseFileName(editor) ? resultUri + cacheInvalidator() : resultUri,\\n          'data-mce-src': editor.convertURL(resultUri, 'src')\\n        });\\n      };\\n      var uploadImages = function (callback) {\\n        if (!uploader) {\\n          uploader = Uploader(uploadStatus, {\\n            url: Settings.getImageUploadUrl(editor),\\n            basePath: Settings.getImageUploadBasePath(editor),\\n            credentials: Settings.getImagesUploadCredentials(editor),\\n            handler: Settings.getImagesUploadHandler(editor)\\n          });\\n        }\\n        return scanForImages().then(aliveGuard(function (imageInfos) {\\n          var blobInfos;\\n          blobInfos = map(imageInfos, function (imageInfo) {\\n            return imageInfo.blobInfo;\\n          });\\n          return uploader.upload(blobInfos, openNotification).then(aliveGuard(function (result) {\\n            var filteredResult = map(result, function (uploadInfo, index) {\\n              var image = imageInfos[index].image;\\n              if (uploadInfo.status && Settings.shouldReplaceBlobUris(editor)) {\\n                replaceImageUri(image, uploadInfo.url);\\n              } else if (uploadInfo.error) {\\n                ErrorReporter.uploadError(editor, uploadInfo.error);\\n              }\\n              return {\\n                element: image,\\n                status: uploadInfo.status\\n              };\\n            });\\n            if (callback) {\\n              callback(filteredResult);\\n            }\\n            return filteredResult;\\n          }));\\n        }));\\n      };\\n      var uploadImagesAuto = function (callback) {\\n        if (Settings.isAutomaticUploadsEnabled(editor)) {\\n          return uploadImages(callback);\\n        }\\n      };\\n      var isValidDataUriImage = function (imgElm) {\\n        if (forall(urlFilters, function (filter) {\\n            return filter(imgElm);\\n          }) === false) {\\n          return false;\\n        }\\n        if (imgElm.getAttribute('src').indexOf('data:') === 0) {\\n          var dataImgFilter = Settings.getImagesDataImgFilter(editor);\\n          return dataImgFilter(imgElm);\\n        }\\n        return true;\\n      };\\n      var addFilter = function (filter) {\\n        urlFilters.push(filter);\\n      };\\n      var scanForImages = function () {\\n        if (!imageScanner) {\\n          imageScanner = ImageScanner(uploadStatus, blobCache);\\n        }\\n        return imageScanner.findAll(editor.getBody(), isValidDataUriImage).then(aliveGuard(function (result) {\\n          result = filter(result, function (resultItem) {\\n            if (typeof resultItem === 'string') {\\n              ErrorReporter.displayError(editor, resultItem);\\n              return false;\\n            }\\n            return true;\\n          });\\n          each(result, function (resultItem) {\\n            replaceUrlInUndoStack(resultItem.image.src, resultItem.blobInfo.blobUri());\\n            resultItem.image.src = resultItem.blobInfo.blobUri();\\n            resultItem.image.removeAttribute('data-mce-src');\\n          });\\n          return result;\\n        }));\\n      };\\n      var destroy = function () {\\n        blobCache.destroy();\\n        uploadStatus.destroy();\\n        imageScanner = uploader = null;\\n      };\\n      var replaceBlobUris = function (content) {\\n        return content.replace(/src=\\\"(blob:[^\\\"]+)\\\"/g, function (match, blobUri) {\\n          var resultUri = uploadStatus.getResultUri(blobUri);\\n          if (resultUri) {\\n            return 'src=\\\"' + resultUri + '\\\"';\\n          }\\n          var blobInfo = blobCache.getByUri(blobUri);\\n          if (!blobInfo) {\\n            blobInfo = foldl(editor.editorManager.get(), function (result, editor) {\\n              return result || editor.editorUpload && editor.editorUpload.blobCache.getByUri(blobUri);\\n            }, null);\\n          }\\n          if (blobInfo) {\\n            var blob = blobInfo.blob();\\n            return 'src=\\\"data:' + blob.type + ';base64,' + blobInfo.base64() + '\\\"';\\n          }\\n          return match;\\n        });\\n      };\\n      editor.on('setContent', function () {\\n        if (Settings.isAutomaticUploadsEnabled(editor)) {\\n          uploadImagesAuto();\\n        } else {\\n          scanForImages();\\n        }\\n      });\\n      editor.on('RawSaveContent', function (e) {\\n        e.content = replaceBlobUris(e.content);\\n      });\\n      editor.on('getContent', function (e) {\\n        if (e.source_view || e.format === 'raw') {\\n          return;\\n        }\\n        e.content = replaceBlobUris(e.content);\\n      });\\n      editor.on('PostRender', function () {\\n        editor.parser.addNodeFilter('img', function (images) {\\n          each(images, function (img) {\\n            var src = img.attr('src');\\n            if (blobCache.getByUri(src)) {\\n              return;\\n            }\\n            var resultUri = uploadStatus.getResultUri(src);\\n            if (resultUri) {\\n              img.attr('src', resultUri);\\n            }\\n          });\\n        });\\n      });\\n      return {\\n        blobCache: blobCache,\\n        addFilter: addFilter,\\n        uploadImages: uploadImages,\\n        uploadImagesAuto: uploadImagesAuto,\\n        scanForImages: scanForImages,\\n        destroy: destroy\\n      };\\n    }\\n\\n    var isBlockElement = function (blockElements, node) {\\n      return blockElements.hasOwnProperty(node.nodeName);\\n    };\\n    var isValidTarget = function (blockElements, node) {\\n      if (NodeType.isText(node)) {\\n        return true;\\n      } else if (NodeType.isElement(node)) {\\n        return !isBlockElement(blockElements, node) && !Bookmarks.isBookmarkNode(node);\\n      } else {\\n        return false;\\n      }\\n    };\\n    var hasBlockParent = function (blockElements, root, node) {\\n      return exists(Parents.parents(Element.fromDom(node), Element.fromDom(root)), function (elm) {\\n        return isBlockElement(blockElements, elm.dom());\\n      });\\n    };\\n    var shouldRemoveTextNode = function (blockElements, node) {\\n      if (NodeType.isText(node)) {\\n        if (node.nodeValue.length === 0) {\\n          return true;\\n        } else if (/^\\\\s+$/.test(node.nodeValue) && (!node.nextSibling || isBlockElement(blockElements, node.nextSibling))) {\\n          return true;\\n        }\\n      }\\n      return false;\\n    };\\n    var addRootBlocks = function (editor) {\\n      var settings = editor.settings, dom = editor.dom, selection = editor.selection;\\n      var schema = editor.schema, blockElements = schema.getBlockElements();\\n      var node = selection.getStart();\\n      var rootNode = editor.getBody();\\n      var rng;\\n      var startContainer, startOffset, endContainer, endOffset, rootBlockNode;\\n      var tempNode, wrapped, restoreSelection;\\n      var rootNodeName, forcedRootBlock;\\n      forcedRootBlock = settings.forced_root_block;\\n      if (!node || !NodeType.isElement(node) || !forcedRootBlock) {\\n        return;\\n      }\\n      rootNodeName = rootNode.nodeName.toLowerCase();\\n      if (!schema.isValidChild(rootNodeName, forcedRootBlock.toLowerCase()) || hasBlockParent(blockElements, rootNode, node)) {\\n        return;\\n      }\\n      rng = selection.getRng();\\n      startContainer = rng.startContainer;\\n      startOffset = rng.startOffset;\\n      endContainer = rng.endContainer;\\n      endOffset = rng.endOffset;\\n      restoreSelection = EditorFocus.hasFocus(editor);\\n      node = rootNode.firstChild;\\n      while (node) {\\n        if (isValidTarget(blockElements, node)) {\\n          if (shouldRemoveTextNode(blockElements, node)) {\\n            tempNode = node;\\n            node = node.nextSibling;\\n            dom.remove(tempNode);\\n            continue;\\n          }\\n          if (!rootBlockNode) {\\n            rootBlockNode = dom.create(forcedRootBlock, editor.settings.forced_root_block_attrs);\\n            node.parentNode.insertBefore(rootBlockNode, node);\\n            wrapped = true;\\n          }\\n          tempNode = node;\\n          node = node.nextSibling;\\n          rootBlockNode.appendChild(tempNode);\\n        } else {\\n          rootBlockNode = null;\\n          node = node.nextSibling;\\n        }\\n      }\\n      if (wrapped && restoreSelection) {\\n        rng.setStart(startContainer, startOffset);\\n        rng.setEnd(endContainer, endOffset);\\n        selection.setRng(rng);\\n        editor.nodeChanged();\\n      }\\n    };\\n    var setup$3 = function (editor) {\\n      if (editor.settings.forced_root_block) {\\n        editor.on('NodeChange', curry(addRootBlocks, editor));\\n      }\\n    };\\n    var ForceBlocks = { setup: setup$3 };\\n\\n    var getStartNode = function (rng) {\\n      var sc = rng.startContainer, so = rng.startOffset;\\n      if (NodeType.isText(sc)) {\\n        return so === 0 ? Option.some(Element.fromDom(sc)) : Option.none();\\n      } else {\\n        return Option.from(sc.childNodes[so]).map(Element.fromDom);\\n      }\\n    };\\n    var getEndNode = function (rng) {\\n      var ec = rng.endContainer, eo = rng.endOffset;\\n      if (NodeType.isText(ec)) {\\n        return eo === ec.data.length ? Option.some(Element.fromDom(ec)) : Option.none();\\n      } else {\\n        return Option.from(ec.childNodes[eo - 1]).map(Element.fromDom);\\n      }\\n    };\\n    var getFirstChildren = function (node) {\\n      return firstChild(node).fold(constant([node]), function (child) {\\n        return [node].concat(getFirstChildren(child));\\n      });\\n    };\\n    var getLastChildren$1 = function (node) {\\n      return lastChild(node).fold(constant([node]), function (child) {\\n        if (name(child) === 'br') {\\n          return prevSibling(child).map(function (sibling) {\\n            return [node].concat(getLastChildren$1(sibling));\\n          }).getOr([]);\\n        } else {\\n          return [node].concat(getLastChildren$1(child));\\n        }\\n      });\\n    };\\n    var hasAllContentsSelected = function (elm, rng) {\\n      return lift2(getStartNode(rng), getEndNode(rng), function (startNode, endNode) {\\n        var start = find(getFirstChildren(elm), curry(eq, startNode));\\n        var end = find(getLastChildren$1(elm), curry(eq, endNode));\\n        return start.isSome() && end.isSome();\\n      }).getOr(false);\\n    };\\n    var moveEndPoint$1 = function (dom, rng, node, start) {\\n      var root = node, walker = new TreeWalker(node, root);\\n      var nonEmptyElementsMap = dom.schema.getNonEmptyElements();\\n      do {\\n        if (node.nodeType === 3 && Tools.trim(node.nodeValue).length !== 0) {\\n          if (start) {\\n            rng.setStart(node, 0);\\n          } else {\\n            rng.setEnd(node, node.nodeValue.length);\\n          }\\n          return;\\n        }\\n        if (nonEmptyElementsMap[node.nodeName] && !/^(TD|TH)$/.test(node.nodeName)) {\\n          if (start) {\\n            rng.setStartBefore(node);\\n          } else {\\n            if (node.nodeName === 'BR') {\\n              rng.setEndBefore(node);\\n            } else {\\n              rng.setEndAfter(node);\\n            }\\n          }\\n          return;\\n        }\\n        if (Env.ie && Env.ie < 11 && dom.isBlock(node) && dom.isEmpty(node)) {\\n          if (start) {\\n            rng.setStart(node, 0);\\n          } else {\\n            rng.setEnd(node, 0);\\n          }\\n          return;\\n        }\\n      } while (node = start ? walker.next() : walker.prev());\\n      if (root.nodeName === 'BODY') {\\n        if (start) {\\n          rng.setStart(root, 0);\\n        } else {\\n          rng.setEnd(root, root.childNodes.length);\\n        }\\n      }\\n    };\\n    var hasAnyRanges = function (editor) {\\n      var sel = editor.selection.getSel();\\n      return sel && sel.rangeCount > 0;\\n    };\\n\\n    function NodeChange (editor) {\\n      var lastRng, lastPath = [];\\n      var isSameElementPath = function (startElm) {\\n        var i, currentPath;\\n        currentPath = editor.$(startElm).parentsUntil(editor.getBody()).add(startElm);\\n        if (currentPath.length === lastPath.length) {\\n          for (i = currentPath.length; i >= 0; i--) {\\n            if (currentPath[i] !== lastPath[i]) {\\n              break;\\n            }\\n          }\\n          if (i === -1) {\\n            lastPath = currentPath;\\n            return true;\\n          }\\n        }\\n        lastPath = currentPath;\\n        return false;\\n      };\\n      if (!('onselectionchange' in editor.getDoc())) {\\n        editor.on('NodeChange Click MouseUp KeyUp Focus', function (e) {\\n          var nativeRng, fakeRng;\\n          nativeRng = editor.selection.getRng();\\n          fakeRng = {\\n            startContainer: nativeRng.startContainer,\\n            startOffset: nativeRng.startOffset,\\n            endContainer: nativeRng.endContainer,\\n            endOffset: nativeRng.endOffset\\n          };\\n          if (e.type === 'nodechange' || !RangeCompare.isEq(fakeRng, lastRng)) {\\n            editor.fire('SelectionChange');\\n          }\\n          lastRng = fakeRng;\\n        });\\n      }\\n      editor.on('contextmenu', function () {\\n        editor.fire('SelectionChange');\\n      });\\n      editor.on('SelectionChange', function () {\\n        var startElm = editor.selection.getStart(true);\\n        if (!startElm || !Env.range && editor.selection.isCollapsed()) {\\n          return;\\n        }\\n        if (hasAnyRanges(editor) && !isSameElementPath(startElm) && editor.dom.isChildOf(startElm, editor.getBody())) {\\n          editor.nodeChanged({ selectionChange: true });\\n        }\\n      });\\n      editor.on('MouseUp', function (e) {\\n        if (!e.isDefaultPrevented() && hasAnyRanges(editor)) {\\n          if (editor.selection.getNode().nodeName === 'IMG') {\\n            Delay.setEditorTimeout(editor, function () {\\n              editor.nodeChanged();\\n            });\\n          } else {\\n            editor.nodeChanged();\\n          }\\n        }\\n      });\\n      this.nodeChanged = function (args) {\\n        var selection = editor.selection;\\n        var node, parents, root;\\n        if (editor.initialized && selection && !editor.settings.disable_nodechange && !editor.readonly) {\\n          root = editor.getBody();\\n          node = selection.getStart(true) || root;\\n          if (node.ownerDocument !== editor.getDoc() || !editor.dom.isChildOf(node, root)) {\\n            node = root;\\n          }\\n          parents = [];\\n          editor.dom.getParent(node, function (node) {\\n            if (node === root) {\\n              return true;\\n            }\\n            parents.push(node);\\n          });\\n          args = args || {};\\n          args.element = node;\\n          args.parents = parents;\\n          editor.fire('NodeChange', args);\\n        }\\n      };\\n    }\\n\\n    var VK = {\\n      BACKSPACE: 8,\\n      DELETE: 46,\\n      DOWN: 40,\\n      ENTER: 13,\\n      LEFT: 37,\\n      RIGHT: 39,\\n      SPACEBAR: 32,\\n      TAB: 9,\\n      UP: 38,\\n      END: 35,\\n      HOME: 36,\\n      modifierPressed: function (e) {\\n        return e.shiftKey || e.ctrlKey || e.altKey || this.metaKeyPressed(e);\\n      },\\n      metaKeyPressed: function (e) {\\n        return Env.mac ? e.metaKey : e.ctrlKey && !e.altKey;\\n      }\\n    };\\n\\n    var getNodeClientRects = function (node) {\\n      var toArrayWithNode = function (clientRects) {\\n        return map(clientRects, function (clientRect) {\\n          clientRect = clone$1(clientRect);\\n          clientRect.node = node;\\n          return clientRect;\\n        });\\n      };\\n      if (NodeType.isElement(node)) {\\n        return toArrayWithNode(node.getClientRects());\\n      }\\n      if (NodeType.isText(node)) {\\n        var rng = node.ownerDocument.createRange();\\n        rng.setStart(node, 0);\\n        rng.setEnd(node, node.data.length);\\n        return toArrayWithNode(rng.getClientRects());\\n      }\\n    };\\n    var getClientRects = function (node) {\\n      return foldl(node, function (result, node) {\\n        return result.concat(getNodeClientRects(node));\\n      }, []);\\n    };\\n\\n    var VDirection;\\n    (function (VDirection) {\\n      VDirection[VDirection['Up'] = -1] = 'Up';\\n      VDirection[VDirection['Down'] = 1] = 'Down';\\n    }(VDirection || (VDirection = {})));\\n    var findUntil = function (direction, root, predicateFn, node) {\\n      while (node = findNode(node, direction, isEditableCaretCandidate, root)) {\\n        if (predicateFn(node)) {\\n          return;\\n        }\\n      }\\n    };\\n    var walkUntil = function (direction, isAboveFn, isBeflowFn, root, predicateFn, caretPosition) {\\n      var line = 0, node;\\n      var result = [];\\n      var targetClientRect;\\n      var add = function (node) {\\n        var i, clientRect, clientRects;\\n        clientRects = getClientRects([node]);\\n        if (direction === -1) {\\n          clientRects = clientRects.reverse();\\n        }\\n        for (i = 0; i < clientRects.length; i++) {\\n          clientRect = clientRects[i];\\n          if (isBeflowFn(clientRect, targetClientRect)) {\\n            continue;\\n          }\\n          if (result.length > 0 && isAboveFn(clientRect, ArrUtils.last(result))) {\\n            line++;\\n          }\\n          clientRect.line = line;\\n          if (predicateFn(clientRect)) {\\n            return true;\\n          }\\n          result.push(clientRect);\\n        }\\n      };\\n      targetClientRect = ArrUtils.last(caretPosition.getClientRects());\\n      if (!targetClientRect) {\\n        return result;\\n      }\\n      node = caretPosition.getNode();\\n      add(node);\\n      findUntil(direction, root, add, node);\\n      return result;\\n    };\\n    var aboveLineNumber = function (lineNumber, clientRect) {\\n      return clientRect.line > lineNumber;\\n    };\\n    var isLineNumber = function (lineNumber, clientRect) {\\n      return clientRect.line === lineNumber;\\n    };\\n    var upUntil = curry(walkUntil, VDirection.Up, isAbove, isBelow);\\n    var downUntil = curry(walkUntil, VDirection.Down, isBelow, isAbove);\\n    var positionsUntil = function (direction, root, predicateFn, node) {\\n      var caretWalker = CaretWalker(root);\\n      var walkFn, isBelowFn, isAboveFn, caretPosition;\\n      var result = [];\\n      var line = 0, clientRect, targetClientRect;\\n      var getClientRect = function (caretPosition) {\\n        if (direction === 1) {\\n          return ArrUtils.last(caretPosition.getClientRects());\\n        }\\n        return ArrUtils.last(caretPosition.getClientRects());\\n      };\\n      if (direction === 1) {\\n        walkFn = caretWalker.next;\\n        isBelowFn = isBelow;\\n        isAboveFn = isAbove;\\n        caretPosition = CaretPosition$1.after(node);\\n      } else {\\n        walkFn = caretWalker.prev;\\n        isBelowFn = isAbove;\\n        isAboveFn = isBelow;\\n        caretPosition = CaretPosition$1.before(node);\\n      }\\n      targetClientRect = getClientRect(caretPosition);\\n      do {\\n        if (!caretPosition.isVisible()) {\\n          continue;\\n        }\\n        clientRect = getClientRect(caretPosition);\\n        if (isAboveFn(clientRect, targetClientRect)) {\\n          continue;\\n        }\\n        if (result.length > 0 && isBelowFn(clientRect, ArrUtils.last(result))) {\\n          line++;\\n        }\\n        clientRect = clone$1(clientRect);\\n        clientRect.position = caretPosition;\\n        clientRect.line = line;\\n        if (predicateFn(clientRect)) {\\n          return result;\\n        }\\n        result.push(clientRect);\\n      } while (caretPosition = walkFn(caretPosition));\\n      return result;\\n    };\\n    var isAboveLine = function (lineNumber) {\\n      return function (clientRect) {\\n        return aboveLineNumber(lineNumber, clientRect);\\n      };\\n    };\\n    var isLine = function (lineNumber) {\\n      return function (clientRect) {\\n        return isLineNumber(lineNumber, clientRect);\\n      };\\n    };\\n\\n    var isContentEditableFalse$7 = NodeType.isContentEditableFalse;\\n    var findNode$1 = findNode;\\n    var distanceToRectLeft = function (clientRect, clientX) {\\n      return Math.abs(clientRect.left - clientX);\\n    };\\n    var distanceToRectRight = function (clientRect, clientX) {\\n      return Math.abs(clientRect.right - clientX);\\n    };\\n    var isInside = function (clientX, clientRect) {\\n      return clientX >= clientRect.left && clientX <= clientRect.right;\\n    };\\n    var findClosestClientRect = function (clientRects, clientX) {\\n      return ArrUtils.reduce(clientRects, function (oldClientRect, clientRect) {\\n        var oldDistance, newDistance;\\n        oldDistance = Math.min(distanceToRectLeft(oldClientRect, clientX), distanceToRectRight(oldClientRect, clientX));\\n        newDistance = Math.min(distanceToRectLeft(clientRect, clientX), distanceToRectRight(clientRect, clientX));\\n        if (isInside(clientX, clientRect)) {\\n          return clientRect;\\n        }\\n        if (isInside(clientX, oldClientRect)) {\\n          return oldClientRect;\\n        }\\n        if (newDistance === oldDistance && isContentEditableFalse$7(clientRect.node)) {\\n          return clientRect;\\n        }\\n        if (newDistance < oldDistance) {\\n          return clientRect;\\n        }\\n        return oldClientRect;\\n      });\\n    };\\n    var walkUntil$1 = function (direction, root, predicateFn, node) {\\n      while (node = findNode$1(node, direction, isEditableCaretCandidate, root)) {\\n        if (predicateFn(node)) {\\n          return;\\n        }\\n      }\\n    };\\n    var findLineNodeRects = function (root, targetNodeRect) {\\n      var clientRects = [];\\n      var collect = function (checkPosFn, node) {\\n        var lineRects;\\n        lineRects = filter(getClientRects([node]), function (clientRect) {\\n          return !checkPosFn(clientRect, targetNodeRect);\\n        });\\n        clientRects = clientRects.concat(lineRects);\\n        return lineRects.length === 0;\\n      };\\n      clientRects.push(targetNodeRect);\\n      walkUntil$1(VDirection.Up, root, curry(collect, isAbove), targetNodeRect.node);\\n      walkUntil$1(VDirection.Down, root, curry(collect, isBelow), targetNodeRect.node);\\n      return clientRects;\\n    };\\n    var getFakeCaretTargets = function (root) {\\n      return filter(from$1(root.getElementsByTagName('*')), isFakeCaretTarget);\\n    };\\n    var caretInfo = function (clientRect, clientX) {\\n      return {\\n        node: clientRect.node,\\n        before: distanceToRectLeft(clientRect, clientX) < distanceToRectRight(clientRect, clientX)\\n      };\\n    };\\n    var closestCaret = function (root, clientX, clientY) {\\n      var closestNodeRect;\\n      var contentEditableFalseNodeRects = getClientRects(getFakeCaretTargets(root));\\n      var targetNodeRects = filter(contentEditableFalseNodeRects, function (rect) {\\n        return clientY >= rect.top && clientY <= rect.bottom;\\n      });\\n      closestNodeRect = findClosestClientRect(targetNodeRects, clientX);\\n      if (closestNodeRect) {\\n        closestNodeRect = findClosestClientRect(findLineNodeRects(root, closestNodeRect), clientX);\\n        if (closestNodeRect && isFakeCaretTarget(closestNodeRect.node)) {\\n          return caretInfo(closestNodeRect, clientX);\\n        }\\n      }\\n      return null;\\n    };\\n\\n    var isXYWithinRange = function (clientX, clientY, range) {\\n      if (range.collapsed) {\\n        return false;\\n      }\\n      if (Env.ie && Env.ie <= 11 && range.startOffset === range.endOffset - 1 && range.startContainer === range.endContainer) {\\n        var elm = range.startContainer.childNodes[range.startOffset];\\n        if (NodeType.isElement(elm)) {\\n          return exists(elm.getClientRects(), function (rect) {\\n            return containsXY(rect, clientX, clientY);\\n          });\\n        }\\n      }\\n      return exists(range.getClientRects(), function (rect) {\\n        return containsXY(rect, clientX, clientY);\\n      });\\n    };\\n    var RangePoint = { isXYWithinRange: isXYWithinRange };\\n\\n    var getAbsolutePosition = function (elm) {\\n      var doc, docElem, win, clientRect;\\n      clientRect = elm.getBoundingClientRect();\\n      doc = elm.ownerDocument;\\n      docElem = doc.documentElement;\\n      win = doc.defaultView;\\n      return {\\n        top: clientRect.top + win.pageYOffset - docElem.clientTop,\\n        left: clientRect.left + win.pageXOffset - docElem.clientLeft\\n      };\\n    };\\n    var getBodyPosition = function (editor) {\\n      return editor.inline ? getAbsolutePosition(editor.getBody()) : {\\n        left: 0,\\n        top: 0\\n      };\\n    };\\n    var getScrollPosition = function (editor) {\\n      var body = editor.getBody();\\n      return editor.inline ? {\\n        left: body.scrollLeft,\\n        top: body.scrollTop\\n      } : {\\n        left: 0,\\n        top: 0\\n      };\\n    };\\n    var getBodyScroll = function (editor) {\\n      var body = editor.getBody(), docElm = editor.getDoc().documentElement;\\n      var inlineScroll = {\\n        left: body.scrollLeft,\\n        top: body.scrollTop\\n      };\\n      var iframeScroll = {\\n        left: body.scrollLeft || docElm.scrollLeft,\\n        top: body.scrollTop || docElm.scrollTop\\n      };\\n      return editor.inline ? inlineScroll : iframeScroll;\\n    };\\n    var getMousePosition = function (editor, event) {\\n      if (event.target.ownerDocument !== editor.getDoc()) {\\n        var iframePosition = getAbsolutePosition(editor.getContentAreaContainer());\\n        var scrollPosition = getBodyScroll(editor);\\n        return {\\n          left: event.pageX - iframePosition.left + scrollPosition.left,\\n          top: event.pageY - iframePosition.top + scrollPosition.top\\n        };\\n      }\\n      return {\\n        left: event.pageX,\\n        top: event.pageY\\n      };\\n    };\\n    var calculatePosition = function (bodyPosition, scrollPosition, mousePosition) {\\n      return {\\n        pageX: mousePosition.left - bodyPosition.left + scrollPosition.left,\\n        pageY: mousePosition.top - bodyPosition.top + scrollPosition.top\\n      };\\n    };\\n    var calc = function (editor, event) {\\n      return calculatePosition(getBodyPosition(editor), getScrollPosition(editor), getMousePosition(editor, event));\\n    };\\n    var MousePosition = { calc: calc };\\n\\n    var isContentEditableFalse$8 = NodeType.isContentEditableFalse, isContentEditableTrue$3 = NodeType.isContentEditableTrue;\\n    var isDraggable = function (rootElm, elm) {\\n      return isContentEditableFalse$8(elm) && elm !== rootElm;\\n    };\\n    var isValidDropTarget = function (editor, targetElement, dragElement) {\\n      if (targetElement === dragElement || editor.dom.isChildOf(targetElement, dragElement)) {\\n        return false;\\n      }\\n      if (isContentEditableFalse$8(targetElement)) {\\n        return false;\\n      }\\n      return true;\\n    };\\n    var cloneElement = function (elm) {\\n      var cloneElm = elm.cloneNode(true);\\n      cloneElm.removeAttribute('data-mce-selected');\\n      return cloneElm;\\n    };\\n    var createGhost = function (editor, elm, width, height) {\\n      var clonedElm = elm.cloneNode(true);\\n      editor.dom.setStyles(clonedElm, {\\n        width: width,\\n        height: height\\n      });\\n      editor.dom.setAttrib(clonedElm, 'data-mce-selected', null);\\n      var ghostElm = editor.dom.create('div', {\\n        'class': 'mce-drag-container',\\n        'data-mce-bogus': 'all',\\n        'unselectable': 'on',\\n        'contenteditable': 'false'\\n      });\\n      editor.dom.setStyles(ghostElm, {\\n        position: 'absolute',\\n        opacity: 0.5,\\n        overflow: 'hidden',\\n        border: 0,\\n        padding: 0,\\n        margin: 0,\\n        width: width,\\n        height: height\\n      });\\n      editor.dom.setStyles(clonedElm, {\\n        margin: 0,\\n        boxSizing: 'border-box'\\n      });\\n      ghostElm.appendChild(clonedElm);\\n      return ghostElm;\\n    };\\n    var appendGhostToBody = function (ghostElm, bodyElm) {\\n      if (ghostElm.parentNode !== bodyElm) {\\n        bodyElm.appendChild(ghostElm);\\n      }\\n    };\\n    var moveGhost = function (ghostElm, position, width, height, maxX, maxY) {\\n      var overflowX = 0, overflowY = 0;\\n      ghostElm.style.left = position.pageX + 'px';\\n      ghostElm.style.top = position.pageY + 'px';\\n      if (position.pageX + width > maxX) {\\n        overflowX = position.pageX + width - maxX;\\n      }\\n      if (position.pageY + height > maxY) {\\n        overflowY = position.pageY + height - maxY;\\n      }\\n      ghostElm.style.width = width - overflowX + 'px';\\n      ghostElm.style.height = height - overflowY + 'px';\\n    };\\n    var removeElement = function (elm) {\\n      if (elm && elm.parentNode) {\\n        elm.parentNode.removeChild(elm);\\n      }\\n    };\\n    var isLeftMouseButtonPressed = function (e) {\\n      return e.button === 0;\\n    };\\n    var hasDraggableElement = function (state) {\\n      return state.element;\\n    };\\n    var applyRelPos = function (state, position) {\\n      return {\\n        pageX: position.pageX - state.relX,\\n        pageY: position.pageY + 5\\n      };\\n    };\\n    var start$1 = function (state, editor) {\\n      return function (e) {\\n        if (isLeftMouseButtonPressed(e)) {\\n          var ceElm = find(editor.dom.getParents(e.target), Predicate.or(isContentEditableFalse$8, isContentEditableTrue$3)).getOr(null);\\n          if (isDraggable(editor.getBody(), ceElm)) {\\n            var elmPos = editor.dom.getPos(ceElm);\\n            var bodyElm = editor.getBody();\\n            var docElm = editor.getDoc().documentElement;\\n            state.element = ceElm;\\n            state.screenX = e.screenX;\\n            state.screenY = e.screenY;\\n            state.maxX = (editor.inline ? bodyElm.scrollWidth : docElm.offsetWidth) - 2;\\n            state.maxY = (editor.inline ? bodyElm.scrollHeight : docElm.offsetHeight) - 2;\\n            state.relX = e.pageX - elmPos.x;\\n            state.relY = e.pageY - elmPos.y;\\n            state.width = ceElm.offsetWidth;\\n            state.height = ceElm.offsetHeight;\\n            state.ghost = createGhost(editor, ceElm, state.width, state.height);\\n          }\\n        }\\n      };\\n    };\\n    var move$1 = function (state, editor) {\\n      var throttledPlaceCaretAt = Delay.throttle(function (clientX, clientY) {\\n        editor._selectionOverrides.hideFakeCaret();\\n        editor.selection.placeCaretAt(clientX, clientY);\\n      }, 0);\\n      return function (e) {\\n        var movement = Math.max(Math.abs(e.screenX - state.screenX), Math.abs(e.screenY - state.screenY));\\n        if (hasDraggableElement(state) && !state.dragging && movement > 10) {\\n          var args = editor.fire('dragstart', { target: state.element });\\n          if (args.isDefaultPrevented()) {\\n            return;\\n          }\\n          state.dragging = true;\\n          editor.focus();\\n        }\\n        if (state.dragging) {\\n          var targetPos = applyRelPos(state, MousePosition.calc(editor, e));\\n          appendGhostToBody(state.ghost, editor.getBody());\\n          moveGhost(state.ghost, targetPos, state.width, state.height, state.maxX, state.maxY);\\n          throttledPlaceCaretAt(e.clientX, e.clientY);\\n        }\\n      };\\n    };\\n    var getRawTarget = function (selection) {\\n      var rng = selection.getSel().getRangeAt(0);\\n      var startContainer = rng.startContainer;\\n      return startContainer.nodeType === 3 ? startContainer.parentNode : startContainer;\\n    };\\n    var drop = function (state, editor) {\\n      return function (e) {\\n        if (state.dragging) {\\n          if (isValidDropTarget(editor, getRawTarget(editor.selection), state.element)) {\\n            var targetClone_1 = cloneElement(state.element);\\n            var args = editor.fire('drop', {\\n              targetClone: targetClone_1,\\n              clientX: e.clientX,\\n              clientY: e.clientY\\n            });\\n            if (!args.isDefaultPrevented()) {\\n              targetClone_1 = args.targetClone;\\n              editor.undoManager.transact(function () {\\n                removeElement(state.element);\\n                editor.insertContent(editor.dom.getOuterHTML(targetClone_1));\\n                editor._selectionOverrides.hideFakeCaret();\\n              });\\n            }\\n          }\\n        }\\n        removeDragState(state);\\n      };\\n    };\\n    var stop = function (state, editor) {\\n      return function () {\\n        if (state.dragging) {\\n          editor.fire('dragend');\\n        }\\n        removeDragState(state);\\n      };\\n    };\\n    var removeDragState = function (state) {\\n      state.dragging = false;\\n      state.element = null;\\n      removeElement(state.ghost);\\n    };\\n    var bindFakeDragEvents = function (editor) {\\n      var state = {};\\n      var pageDom, dragStartHandler, dragHandler, dropHandler, dragEndHandler, rootDocument;\\n      pageDom = DOMUtils$1.DOM;\\n      rootDocument = domGlobals.document;\\n      dragStartHandler = start$1(state, editor);\\n      dragHandler = move$1(state, editor);\\n      dropHandler = drop(state, editor);\\n      dragEndHandler = stop(state, editor);\\n      editor.on('mousedown', dragStartHandler);\\n      editor.on('mousemove', dragHandler);\\n      editor.on('mouseup', dropHandler);\\n      pageDom.bind(rootDocument, 'mousemove', dragHandler);\\n      pageDom.bind(rootDocument, 'mouseup', dragEndHandler);\\n      editor.on('remove', function () {\\n        pageDom.unbind(rootDocument, 'mousemove', dragHandler);\\n        pageDom.unbind(rootDocument, 'mouseup', dragEndHandler);\\n      });\\n    };\\n    var blockIeDrop = function (editor) {\\n      editor.on('drop', function (e) {\\n        var realTarget = typeof e.clientX !== 'undefined' ? editor.getDoc().elementFromPoint(e.clientX, e.clientY) : null;\\n        if (isContentEditableFalse$8(realTarget) || isContentEditableFalse$8(editor.dom.getContentEditableParent(realTarget))) {\\n          e.preventDefault();\\n        }\\n      });\\n    };\\n    var init = function (editor) {\\n      bindFakeDragEvents(editor);\\n      blockIeDrop(editor);\\n    };\\n    var DragDropOverrides = { init: init };\\n\\n    var setup$4 = function (editor) {\\n      var renderFocusCaret = first(function () {\\n        if (!editor.removed) {\\n          var rng = editor.selection.getRng();\\n          if (rng.collapsed) {\\n            var caretRange = renderRangeCaret(editor, editor.selection.getRng(), false);\\n            editor.selection.setRng(caretRange);\\n          }\\n        }\\n      }, 0);\\n      editor.on('focus', function () {\\n        renderFocusCaret.throttle();\\n      });\\n      editor.on('blur', function () {\\n        renderFocusCaret.cancel();\\n      });\\n    };\\n    var CefFocus = { setup: setup$4 };\\n\\n    var isContentEditableTrue$4 = NodeType.isContentEditableTrue;\\n    var isContentEditableFalse$9 = NodeType.isContentEditableFalse;\\n    var getContentEditableRoot$1 = function (editor, node) {\\n      var root = editor.getBody();\\n      while (node && node !== root) {\\n        if (isContentEditableTrue$4(node) || isContentEditableFalse$9(node)) {\\n          return node;\\n        }\\n        node = node.parentNode;\\n      }\\n      return null;\\n    };\\n    var SelectionOverrides = function (editor) {\\n      var isBlock = function (node) {\\n        return editor.dom.isBlock(node);\\n      };\\n      var rootNode = editor.getBody();\\n      var fakeCaret = FakeCaret(editor.getBody(), isBlock, function () {\\n        return EditorFocus.hasFocus(editor);\\n      });\\n      var realSelectionId = 'sel-' + editor.dom.uniqueId();\\n      var selectedContentEditableNode;\\n      var isFakeSelectionElement = function (elm) {\\n        return editor.dom.hasClass(elm, 'mce-offscreen-selection');\\n      };\\n      var getRealSelectionElement = function () {\\n        var container = editor.dom.get(realSelectionId);\\n        return container ? container.getElementsByTagName('*')[0] : container;\\n      };\\n      var setRange = function (range) {\\n        if (range) {\\n          editor.selection.setRng(range);\\n        }\\n      };\\n      var getRange = function () {\\n        return editor.selection.getRng();\\n      };\\n      var showCaret = function (direction, node, before, scrollIntoView) {\\n        if (scrollIntoView === void 0) {\\n          scrollIntoView = true;\\n        }\\n        var e;\\n        e = editor.fire('ShowCaret', {\\n          target: node,\\n          direction: direction,\\n          before: before\\n        });\\n        if (e.isDefaultPrevented()) {\\n          return null;\\n        }\\n        if (scrollIntoView) {\\n          editor.selection.scrollIntoView(node, direction === -1);\\n        }\\n        return fakeCaret.show(before, node);\\n      };\\n      var getNormalizedRangeEndPoint = function (direction, range) {\\n        range = normalizeRange(direction, rootNode, range);\\n        if (direction === -1) {\\n          return CaretPosition$1.fromRangeStart(range);\\n        }\\n        return CaretPosition$1.fromRangeEnd(range);\\n      };\\n      var showBlockCaretContainer = function (blockCaretContainer) {\\n        if (blockCaretContainer.hasAttribute('data-mce-caret')) {\\n          showCaretContainerBlock(blockCaretContainer);\\n          setRange(getRange());\\n          editor.selection.scrollIntoView(blockCaretContainer[0]);\\n        }\\n      };\\n      var registerEvents = function () {\\n        editor.on('mouseup', function (e) {\\n          var range = getRange();\\n          if (range.collapsed && EditorView.isXYInContentArea(editor, e.clientX, e.clientY)) {\\n            setRange(renderCaretAtRange(editor, range, false));\\n          }\\n        });\\n        editor.on('click', function (e) {\\n          var contentEditableRoot;\\n          contentEditableRoot = getContentEditableRoot$1(editor, e.target);\\n          if (contentEditableRoot) {\\n            if (isContentEditableFalse$9(contentEditableRoot)) {\\n              e.preventDefault();\\n              editor.focus();\\n            }\\n            if (isContentEditableTrue$4(contentEditableRoot)) {\\n              if (editor.dom.isChildOf(contentEditableRoot, editor.selection.getNode())) {\\n                removeContentEditableSelection();\\n              }\\n            }\\n          }\\n        });\\n        editor.on('blur NewBlock', function () {\\n          removeContentEditableSelection();\\n        });\\n        editor.on('ResizeWindow FullscreenStateChanged', function () {\\n          return fakeCaret.reposition();\\n        });\\n        var handleTouchSelect = function (editor) {\\n          var moved = false;\\n          editor.on('touchstart', function () {\\n            moved = false;\\n          });\\n          editor.on('touchmove', function () {\\n            moved = true;\\n          });\\n          editor.on('touchend', function (e) {\\n            var contentEditableRoot = getContentEditableRoot$1(editor, e.target);\\n            if (isContentEditableFalse$9(contentEditableRoot)) {\\n              if (!moved) {\\n                e.preventDefault();\\n                setContentEditableSelection(selectNode(editor, contentEditableRoot));\\n              }\\n            }\\n          });\\n        };\\n        var hasNormalCaretPosition = function (elm) {\\n          var caretWalker = CaretWalker(elm);\\n          if (!elm.firstChild) {\\n            return false;\\n          }\\n          var startPos = CaretPosition$1.before(elm.firstChild);\\n          var newPos = caretWalker.next(startPos);\\n          return newPos && !isBeforeContentEditableFalse(newPos) && !isAfterContentEditableFalse(newPos);\\n        };\\n        var isInSameBlock = function (node1, node2) {\\n          var block1 = editor.dom.getParent(node1, editor.dom.isBlock);\\n          var block2 = editor.dom.getParent(node2, editor.dom.isBlock);\\n          return block1 === block2;\\n        };\\n        var hasBetterMouseTarget = function (targetNode, caretNode) {\\n          var targetBlock = editor.dom.getParent(targetNode, editor.dom.isBlock);\\n          var caretBlock = editor.dom.getParent(caretNode, editor.dom.isBlock);\\n          if (targetBlock && editor.dom.isChildOf(targetBlock, caretBlock) && isContentEditableFalse$9(getContentEditableRoot$1(editor, targetBlock)) === false) {\\n            return true;\\n          }\\n          return targetBlock && !isInSameBlock(targetBlock, caretBlock) && hasNormalCaretPosition(targetBlock);\\n        };\\n        handleTouchSelect(editor);\\n        editor.on('mousedown', function (e) {\\n          var contentEditableRoot;\\n          var targetElm = e.target;\\n          if (targetElm !== rootNode && targetElm.nodeName !== 'HTML' && !editor.dom.isChildOf(targetElm, rootNode)) {\\n            return;\\n          }\\n          if (EditorView.isXYInContentArea(editor, e.clientX, e.clientY) === false) {\\n            return;\\n          }\\n          contentEditableRoot = getContentEditableRoot$1(editor, targetElm);\\n          if (contentEditableRoot) {\\n            if (isContentEditableFalse$9(contentEditableRoot)) {\\n              e.preventDefault();\\n              setContentEditableSelection(selectNode(editor, contentEditableRoot));\\n            } else {\\n              removeContentEditableSelection();\\n              if (!(isContentEditableTrue$4(contentEditableRoot) && e.shiftKey) && !RangePoint.isXYWithinRange(e.clientX, e.clientY, editor.selection.getRng())) {\\n                hideFakeCaret();\\n                editor.selection.placeCaretAt(e.clientX, e.clientY);\\n              }\\n            }\\n          } else if (isFakeCaretTarget(targetElm) === false) {\\n            removeContentEditableSelection();\\n            hideFakeCaret();\\n            var caretInfo = closestCaret(rootNode, e.clientX, e.clientY);\\n            if (caretInfo) {\\n              if (!hasBetterMouseTarget(e.target, caretInfo.node)) {\\n                e.preventDefault();\\n                var range = showCaret(1, caretInfo.node, caretInfo.before, false);\\n                editor.getBody().focus();\\n                setRange(range);\\n              }\\n            }\\n          }\\n        });\\n        editor.on('keypress', function (e) {\\n          if (VK.modifierPressed(e)) {\\n            return;\\n          }\\n          switch (e.keyCode) {\\n          default:\\n            if (isContentEditableFalse$9(editor.selection.getNode())) {\\n              e.preventDefault();\\n            }\\n            break;\\n          }\\n        });\\n        editor.on('getSelectionRange', function (e) {\\n          var rng = e.range;\\n          if (selectedContentEditableNode) {\\n            if (!selectedContentEditableNode.parentNode) {\\n              selectedContentEditableNode = null;\\n              return;\\n            }\\n            rng = rng.cloneRange();\\n            rng.selectNode(selectedContentEditableNode);\\n            e.range = rng;\\n          }\\n        });\\n        editor.on('setSelectionRange', function (e) {\\n          e.range = normalizeShortEndedElementSelection(e.range);\\n          var rng = setContentEditableSelection(e.range, e.forward);\\n          if (rng) {\\n            e.range = rng;\\n          }\\n        });\\n        var isPasteBin = function (node) {\\n          return node.id === 'mcepastebin';\\n        };\\n        editor.on('AfterSetSelectionRange', function (e) {\\n          var rng = e.range;\\n          if (!isRangeInCaretContainer(rng) && !isPasteBin(rng.startContainer.parentNode)) {\\n            hideFakeCaret();\\n          }\\n          if (!isFakeSelectionElement(rng.startContainer.parentNode)) {\\n            removeContentEditableSelection();\\n          }\\n        });\\n        editor.on('copy', function (e) {\\n          var clipboardData = e.clipboardData;\\n          if (!e.isDefaultPrevented() && e.clipboardData && !Env.ie) {\\n            var realSelectionElement = getRealSelectionElement();\\n            if (realSelectionElement) {\\n              e.preventDefault();\\n              clipboardData.clearData();\\n              clipboardData.setData('text/html', realSelectionElement.outerHTML);\\n              clipboardData.setData('text/plain', realSelectionElement.outerText);\\n            }\\n          }\\n        });\\n        DragDropOverrides.init(editor);\\n        CefFocus.setup(editor);\\n      };\\n      var addCss = function () {\\n        var styles = editor.contentStyles, rootClass = '.mce-content-body';\\n        styles.push(fakeCaret.getCss());\\n        styles.push(rootClass + ' .mce-offscreen-selection {' + 'position: absolute;' + 'left: -9999999999px;' + 'max-width: 1000000px;' + '}' + rootClass + ' *[contentEditable=false] {' + 'cursor: default;' + '}' + rootClass + ' *[contentEditable=true] {' + 'cursor: text;' + '}');\\n      };\\n      var isWithinCaretContainer = function (node) {\\n        return isCaretContainer(node) || startsWithCaretContainer(node) || endsWithCaretContainer(node);\\n      };\\n      var isRangeInCaretContainer = function (rng) {\\n        return isWithinCaretContainer(rng.startContainer) || isWithinCaretContainer(rng.endContainer);\\n      };\\n      var normalizeShortEndedElementSelection = function (rng) {\\n        var shortEndedElements = editor.schema.getShortEndedElements();\\n        var newRng = editor.dom.createRng();\\n        var startContainer = rng.startContainer;\\n        var startOffset = rng.startOffset;\\n        var endContainer = rng.endContainer;\\n        var endOffset = rng.endOffset;\\n        if (has(shortEndedElements, startContainer.nodeName.toLowerCase())) {\\n          if (startOffset === 0) {\\n            newRng.setStartBefore(startContainer);\\n          } else {\\n            newRng.setStartAfter(startContainer);\\n          }\\n        } else {\\n          newRng.setStart(startContainer, startOffset);\\n        }\\n        if (has(shortEndedElements, endContainer.nodeName.toLowerCase())) {\\n          if (endOffset === 0) {\\n            newRng.setEndBefore(endContainer);\\n          } else {\\n            newRng.setEndAfter(endContainer);\\n          }\\n        } else {\\n          newRng.setEnd(endContainer, endOffset);\\n        }\\n        return newRng;\\n      };\\n      var setContentEditableSelection = function (range, forward) {\\n        var node;\\n        var $ = editor.$;\\n        var dom = editor.dom;\\n        var $realSelectionContainer, sel, startContainer, startOffset, endOffset, e, caretPosition, targetClone, origTargetClone;\\n        if (!range) {\\n          return null;\\n        }\\n        if (range.collapsed) {\\n          if (!isRangeInCaretContainer(range)) {\\n            if (forward === false) {\\n              caretPosition = getNormalizedRangeEndPoint(-1, range);\\n              if (isFakeCaretTarget(caretPosition.getNode(true))) {\\n                return showCaret(-1, caretPosition.getNode(true), false, false);\\n              }\\n              if (isFakeCaretTarget(caretPosition.getNode())) {\\n                return showCaret(-1, caretPosition.getNode(), !caretPosition.isAtEnd(), false);\\n              }\\n            } else {\\n              caretPosition = getNormalizedRangeEndPoint(1, range);\\n              if (isFakeCaretTarget(caretPosition.getNode())) {\\n                return showCaret(1, caretPosition.getNode(), !caretPosition.isAtEnd(), false);\\n              }\\n              if (isFakeCaretTarget(caretPosition.getNode(true))) {\\n                return showCaret(1, caretPosition.getNode(true), false, false);\\n              }\\n            }\\n          }\\n          return null;\\n        }\\n        startContainer = range.startContainer;\\n        startOffset = range.startOffset;\\n        endOffset = range.endOffset;\\n        if (startContainer.nodeType === 3 && startOffset === 0 && isContentEditableFalse$9(startContainer.parentNode)) {\\n          startContainer = startContainer.parentNode;\\n          startOffset = dom.nodeIndex(startContainer);\\n          startContainer = startContainer.parentNode;\\n        }\\n        if (startContainer.nodeType !== 1) {\\n          return null;\\n        }\\n        if (endOffset === startOffset + 1 && startContainer === range.endContainer) {\\n          node = startContainer.childNodes[startOffset];\\n        }\\n        if (!isContentEditableFalse$9(node)) {\\n          return null;\\n        }\\n        targetClone = origTargetClone = node.cloneNode(true);\\n        e = editor.fire('ObjectSelected', {\\n          target: node,\\n          targetClone: targetClone\\n        });\\n        if (e.isDefaultPrevented()) {\\n          return null;\\n        }\\n        $realSelectionContainer = descendant(Element.fromDom(editor.getBody()), '#' + realSelectionId).fold(function () {\\n          return $([]);\\n        }, function (elm) {\\n          return $([elm.dom()]);\\n        });\\n        targetClone = e.targetClone;\\n        if ($realSelectionContainer.length === 0) {\\n          $realSelectionContainer = $('<div data-mce-bogus=\\\"all\\\" class=\\\"mce-offscreen-selection\\\"></div>').attr('id', realSelectionId);\\n          $realSelectionContainer.appendTo(editor.getBody());\\n        }\\n        range = editor.dom.createRng();\\n        if (targetClone === origTargetClone && Env.ie) {\\n          $realSelectionContainer.empty().append('<p style=\\\"font-size: 0\\\" data-mce-bogus=\\\"all\\\">\\\\xA0</p>').append(targetClone);\\n          range.setStartAfter($realSelectionContainer[0].firstChild.firstChild);\\n          range.setEndAfter(targetClone);\\n        } else {\\n          $realSelectionContainer.empty().append('\\\\xA0').append(targetClone).append('\\\\xA0');\\n          range.setStart($realSelectionContainer[0].firstChild, 1);\\n          range.setEnd($realSelectionContainer[0].lastChild, 0);\\n        }\\n        $realSelectionContainer.css({ top: dom.getPos(node, editor.getBody()).y });\\n        $realSelectionContainer[0].focus();\\n        sel = editor.selection.getSel();\\n        sel.removeAllRanges();\\n        sel.addRange(range);\\n        each(descendants$1(Element.fromDom(editor.getBody()), '*[data-mce-selected]'), function (elm) {\\n          remove(elm, 'data-mce-selected');\\n        });\\n        node.setAttribute('data-mce-selected', '1');\\n        selectedContentEditableNode = node;\\n        hideFakeCaret();\\n        return range;\\n      };\\n      var removeContentEditableSelection = function () {\\n        if (selectedContentEditableNode) {\\n          selectedContentEditableNode.removeAttribute('data-mce-selected');\\n          descendant(Element.fromDom(editor.getBody()), '#' + realSelectionId).each(remove$1);\\n          selectedContentEditableNode = null;\\n        }\\n        descendant(Element.fromDom(editor.getBody()), '#' + realSelectionId).each(remove$1);\\n        selectedContentEditableNode = null;\\n      };\\n      var destroy = function () {\\n        fakeCaret.destroy();\\n        selectedContentEditableNode = null;\\n      };\\n      var hideFakeCaret = function () {\\n        fakeCaret.hide();\\n      };\\n      if (Env.ceFalse) {\\n        registerEvents();\\n        addCss();\\n      }\\n      return {\\n        showCaret: showCaret,\\n        showBlockCaretContainer: showBlockCaretContainer,\\n        hideFakeCaret: hideFakeCaret,\\n        destroy: destroy\\n      };\\n    };\\n\\n    var isValidPrefixAttrName = function (name) {\\n      return name.indexOf('data-') === 0 || name.indexOf('aria-') === 0;\\n    };\\n    var trimComments = function (text) {\\n      var sanitizedText = text;\\n      while (/<!--|--!?>/g.test(sanitizedText)) {\\n        sanitizedText = sanitizedText.replace(/<!--|--!?>/g, '');\\n      }\\n      return sanitizedText;\\n    };\\n    var isInvalidUri = function (settings, uri) {\\n      if (settings.allow_html_data_urls) {\\n        return false;\\n      } else if (/^data:image\\\\//i.test(uri)) {\\n        return settings.allow_svg_data_urls === false && /^data:image\\\\/svg\\\\+xml/i.test(uri);\\n      } else {\\n        return /^data:/i.test(uri);\\n      }\\n    };\\n    var findEndTagIndex = function (schema, html, startIndex) {\\n      var count = 1, index, matches, tokenRegExp, shortEndedElements;\\n      shortEndedElements = schema.getShortEndedElements();\\n      tokenRegExp = /<([!?\\\\/])?([A-Za-z0-9\\\\-_\\\\:\\\\.]+)((?:\\\\s+[^\\\"\\\\'>]+(?:(?:\\\"[^\\\"]*\\\")|(?:\\\\'[^\\\\']*\\\\')|[^>]*))*|\\\\/|\\\\s+)>/g;\\n      tokenRegExp.lastIndex = index = startIndex;\\n      while (matches = tokenRegExp.exec(html)) {\\n        index = tokenRegExp.lastIndex;\\n        if (matches[1] === '/') {\\n          count--;\\n        } else if (!matches[1]) {\\n          if (matches[2] in shortEndedElements) {\\n            continue;\\n          }\\n          count++;\\n        }\\n        if (count === 0) {\\n          break;\\n        }\\n      }\\n      return index;\\n    };\\n    var checkBogusAttribute = function (regExp, attrString) {\\n      var matches = regExp.exec(attrString);\\n      if (matches) {\\n        var name = matches[1];\\n        var value = matches[2];\\n        return typeof name === 'string' && name.toLowerCase() === 'data-mce-bogus' ? value : null;\\n      } else {\\n        return null;\\n      }\\n    };\\n    function SaxParser(settings, schema) {\\n      if (schema === void 0) {\\n        schema = Schema();\\n      }\\n      var noop = function () {\\n      };\\n      settings = settings || {};\\n      if (settings.fix_self_closing !== false) {\\n        settings.fix_self_closing = true;\\n      }\\n      var comment = settings.comment ? settings.comment : noop;\\n      var cdata = settings.cdata ? settings.cdata : noop;\\n      var text = settings.text ? settings.text : noop;\\n      var start = settings.start ? settings.start : noop;\\n      var end = settings.end ? settings.end : noop;\\n      var pi = settings.pi ? settings.pi : noop;\\n      var doctype = settings.doctype ? settings.doctype : noop;\\n      var parse = function (html) {\\n        var matches, index = 0, value, endRegExp;\\n        var stack = [];\\n        var attrList, i, textData, name;\\n        var isInternalElement, removeInternalElements, shortEndedElements, fillAttrsMap, isShortEnded;\\n        var validate, elementRule, isValidElement, attr, attribsValue, validAttributesMap, validAttributePatterns;\\n        var attributesRequired, attributesDefault, attributesForced, processHtml;\\n        var anyAttributesRequired, selfClosing, tokenRegExp, attrRegExp, specialElements, attrValue, idCount = 0;\\n        var decode = Entities.decode;\\n        var fixSelfClosing;\\n        var filteredUrlAttrs = Tools.makeMap('src,href,data,background,formaction,poster,xlink:href');\\n        var scriptUriRegExp = /((java|vb)script|mhtml):/i;\\n        var processEndTag = function (name) {\\n          var pos, i;\\n          pos = stack.length;\\n          while (pos--) {\\n            if (stack[pos].name === name) {\\n              break;\\n            }\\n          }\\n          if (pos >= 0) {\\n            for (i = stack.length - 1; i >= pos; i--) {\\n              name = stack[i];\\n              if (name.valid) {\\n                end(name.name);\\n              }\\n            }\\n            stack.length = pos;\\n          }\\n        };\\n        var parseAttribute = function (match, name, value, val2, val3) {\\n          var attrRule, i;\\n          var trimRegExp = /[\\\\s\\\\u0000-\\\\u001F]+/g;\\n          name = name.toLowerCase();\\n          value = name in fillAttrsMap ? name : decode(value || val2 || val3 || '');\\n          if (validate && !isInternalElement && isValidPrefixAttrName(name) === false) {\\n            attrRule = validAttributesMap[name];\\n            if (!attrRule && validAttributePatterns) {\\n              i = validAttributePatterns.length;\\n              while (i--) {\\n                attrRule = validAttributePatterns[i];\\n                if (attrRule.pattern.test(name)) {\\n                  break;\\n                }\\n              }\\n              if (i === -1) {\\n                attrRule = null;\\n              }\\n            }\\n            if (!attrRule) {\\n              return;\\n            }\\n            if (attrRule.validValues && !(value in attrRule.validValues)) {\\n              return;\\n            }\\n          }\\n          if (filteredUrlAttrs[name] && !settings.allow_script_urls) {\\n            var uri = value.replace(trimRegExp, '');\\n            try {\\n              uri = decodeURIComponent(uri);\\n            } catch (ex) {\\n              uri = unescape(uri);\\n            }\\n            if (scriptUriRegExp.test(uri)) {\\n              return;\\n            }\\n            if (isInvalidUri(settings, uri)) {\\n              return;\\n            }\\n          }\\n          if (isInternalElement && (name in filteredUrlAttrs || name.indexOf('on') === 0)) {\\n            return;\\n          }\\n          attrList.map[name] = value;\\n          attrList.push({\\n            name: name,\\n            value: value\\n          });\\n        };\\n        tokenRegExp = new RegExp('<(?:' + '(?:!--([\\\\\\\\w\\\\\\\\W]*?)--!?>)|' + '(?:!\\\\\\\\[CDATA\\\\\\\\[([\\\\\\\\w\\\\\\\\W]*?)\\\\\\\\]\\\\\\\\]>)|' + '(?:!DOCTYPE([\\\\\\\\w\\\\\\\\W]*?)>)|' + '(?:\\\\\\\\?([^\\\\\\\\s\\\\\\\\/<>]+) ?([\\\\\\\\w\\\\\\\\W]*?)[?/]>)|' + '(?:\\\\\\\\/([A-Za-z][A-Za-z0-9\\\\\\\\-_\\\\\\\\:\\\\\\\\.]*)>)|' + '(?:([A-Za-z][A-Za-z0-9\\\\\\\\-_\\\\\\\\:\\\\\\\\.]*)((?:\\\\\\\\s+[^\\\"\\\\'>]+(?:(?:\\\"[^\\\"]*\\\")|(?:\\\\'[^\\\\']*\\\\')|[^>]*))*|\\\\\\\\/|\\\\\\\\s+)>)' + ')', 'g');\\n        attrRegExp = /([\\\\w:\\\\-]+)(?:\\\\s*=\\\\s*(?:(?:\\\\\\\"((?:[^\\\\\\\"])*)\\\\\\\")|(?:\\\\'((?:[^\\\\'])*)\\\\')|([^>\\\\s]+)))?/g;\\n        shortEndedElements = schema.getShortEndedElements();\\n        selfClosing = settings.self_closing_elements || schema.getSelfClosingElements();\\n        fillAttrsMap = schema.getBoolAttrs();\\n        validate = settings.validate;\\n        removeInternalElements = settings.remove_internals;\\n        fixSelfClosing = settings.fix_self_closing;\\n        specialElements = schema.getSpecialElements();\\n        processHtml = html + '>';\\n        while (matches = tokenRegExp.exec(processHtml)) {\\n          if (index < matches.index) {\\n            text(decode(html.substr(index, matches.index - index)));\\n          }\\n          if (value = matches[6]) {\\n            value = value.toLowerCase();\\n            if (value.charAt(0) === ':') {\\n              value = value.substr(1);\\n            }\\n            processEndTag(value);\\n          } else if (value = matches[7]) {\\n            if (matches.index + matches[0].length > html.length) {\\n              text(decode(html.substr(matches.index)));\\n              index = matches.index + matches[0].length;\\n              continue;\\n            }\\n            value = value.toLowerCase();\\n            if (value.charAt(0) === ':') {\\n              value = value.substr(1);\\n            }\\n            isShortEnded = value in shortEndedElements;\\n            if (fixSelfClosing && selfClosing[value] && stack.length > 0 && stack[stack.length - 1].name === value) {\\n              processEndTag(value);\\n            }\\n            var bogusValue = checkBogusAttribute(attrRegExp, matches[8]);\\n            if (bogusValue !== null) {\\n              if (bogusValue === 'all') {\\n                index = findEndTagIndex(schema, html, tokenRegExp.lastIndex);\\n                tokenRegExp.lastIndex = index;\\n                continue;\\n              }\\n              isValidElement = false;\\n            }\\n            if (!validate || (elementRule = schema.getElementRule(value))) {\\n              isValidElement = true;\\n              if (validate) {\\n                validAttributesMap = elementRule.attributes;\\n                validAttributePatterns = elementRule.attributePatterns;\\n              }\\n              if (attribsValue = matches[8]) {\\n                isInternalElement = attribsValue.indexOf('data-mce-type') !== -1;\\n                if (isInternalElement && removeInternalElements) {\\n                  isValidElement = false;\\n                }\\n                attrList = [];\\n                attrList.map = {};\\n                attribsValue.replace(attrRegExp, parseAttribute);\\n              } else {\\n                attrList = [];\\n                attrList.map = {};\\n              }\\n              if (validate && !isInternalElement) {\\n                attributesRequired = elementRule.attributesRequired;\\n                attributesDefault = elementRule.attributesDefault;\\n                attributesForced = elementRule.attributesForced;\\n                anyAttributesRequired = elementRule.removeEmptyAttrs;\\n                if (anyAttributesRequired && !attrList.length) {\\n                  isValidElement = false;\\n                }\\n                if (attributesForced) {\\n                  i = attributesForced.length;\\n                  while (i--) {\\n                    attr = attributesForced[i];\\n                    name = attr.name;\\n                    attrValue = attr.value;\\n                    if (attrValue === '{$uid}') {\\n                      attrValue = 'mce_' + idCount++;\\n                    }\\n                    attrList.map[name] = attrValue;\\n                    attrList.push({\\n                      name: name,\\n                      value: attrValue\\n                    });\\n                  }\\n                }\\n                if (attributesDefault) {\\n                  i = attributesDefault.length;\\n                  while (i--) {\\n                    attr = attributesDefault[i];\\n                    name = attr.name;\\n                    if (!(name in attrList.map)) {\\n                      attrValue = attr.value;\\n                      if (attrValue === '{$uid}') {\\n                        attrValue = 'mce_' + idCount++;\\n                      }\\n                      attrList.map[name] = attrValue;\\n                      attrList.push({\\n                        name: name,\\n                        value: attrValue\\n                      });\\n                    }\\n                  }\\n                }\\n                if (attributesRequired) {\\n                  i = attributesRequired.length;\\n                  while (i--) {\\n                    if (attributesRequired[i] in attrList.map) {\\n                      break;\\n                    }\\n                  }\\n                  if (i === -1) {\\n                    isValidElement = false;\\n                  }\\n                }\\n                if (attr = attrList.map['data-mce-bogus']) {\\n                  if (attr === 'all') {\\n                    index = findEndTagIndex(schema, html, tokenRegExp.lastIndex);\\n                    tokenRegExp.lastIndex = index;\\n                    continue;\\n                  }\\n                  isValidElement = false;\\n                }\\n              }\\n              if (isValidElement) {\\n                start(value, attrList, isShortEnded);\\n              }\\n            } else {\\n              isValidElement = false;\\n            }\\n            if (endRegExp = specialElements[value]) {\\n              endRegExp.lastIndex = index = matches.index + matches[0].length;\\n              if (matches = endRegExp.exec(html)) {\\n                if (isValidElement) {\\n                  textData = html.substr(index, matches.index - index);\\n                }\\n                index = matches.index + matches[0].length;\\n              } else {\\n                textData = html.substr(index);\\n                index = html.length;\\n              }\\n              if (isValidElement) {\\n                if (textData.length > 0) {\\n                  text(textData, true);\\n                }\\n                end(value);\\n              }\\n              tokenRegExp.lastIndex = index;\\n              continue;\\n            }\\n            if (!isShortEnded) {\\n              if (!attribsValue || attribsValue.indexOf('/') !== attribsValue.length - 1) {\\n                stack.push({\\n                  name: value,\\n                  valid: isValidElement\\n                });\\n              } else if (isValidElement) {\\n                end(value);\\n              }\\n            }\\n          } else if (value = matches[1]) {\\n            if (value.charAt(0) === '>') {\\n              value = ' ' + value;\\n            }\\n            if (!settings.allow_conditional_comments && value.substr(0, 3).toLowerCase() === '[if') {\\n              value = ' ' + value;\\n            }\\n            comment(value);\\n          } else if (value = matches[2]) {\\n            cdata(trimComments(value));\\n          } else if (value = matches[3]) {\\n            doctype(value);\\n          } else if (value = matches[4]) {\\n            pi(value, matches[5]);\\n          }\\n          index = matches.index + matches[0].length;\\n        }\\n        if (index < html.length) {\\n          text(decode(html.substr(index)));\\n        }\\n        for (i = stack.length - 1; i >= 0; i--) {\\n          value = stack[i];\\n          if (value.valid) {\\n            end(value.name);\\n          }\\n        }\\n      };\\n      return { parse: parse };\\n    }\\n    (function (SaxParser) {\\n      SaxParser.findEndTag = findEndTagIndex;\\n    }(SaxParser || (SaxParser = {})));\\n    var SaxParser$1 = SaxParser;\\n\\n    var trimHtml = function (tempAttrs, html) {\\n      var trimContentRegExp = new RegExp(['\\\\\\\\s?(' + tempAttrs.join('|') + ')=\\\"[^\\\"]+\\\"'].join('|'), 'gi');\\n      return html.replace(trimContentRegExp, '');\\n    };\\n    var trimInternal = function (serializer, html) {\\n      var content = html;\\n      var bogusAllRegExp = /<(\\\\w+) [^>]*data-mce-bogus=\\\"all\\\"[^>]*>/g;\\n      var endTagIndex, index, matchLength, matches, shortEndedElements;\\n      var schema = serializer.schema;\\n      content = trimHtml(serializer.getTempAttrs(), content);\\n      shortEndedElements = schema.getShortEndedElements();\\n      while (matches = bogusAllRegExp.exec(content)) {\\n        index = bogusAllRegExp.lastIndex;\\n        matchLength = matches[0].length;\\n        if (shortEndedElements[matches[1]]) {\\n          endTagIndex = index;\\n        } else {\\n          endTagIndex = SaxParser$1.findEndTag(schema, content, index);\\n        }\\n        content = content.substring(0, index - matchLength) + content.substring(endTagIndex);\\n        bogusAllRegExp.lastIndex = index - matchLength;\\n      }\\n      return Zwsp.trim(content);\\n    };\\n    var trimExternal = trimInternal;\\n    var TrimHtml = {\\n      trimExternal: trimExternal,\\n      trimInternal: trimInternal\\n    };\\n\\n    var KEEP = 0, INSERT = 1, DELETE = 2;\\n    var diff = function (left, right) {\\n      var size = left.length + right.length + 2;\\n      var vDown = new Array(size);\\n      var vUp = new Array(size);\\n      var snake = function (start, end, diag) {\\n        return {\\n          start: start,\\n          end: end,\\n          diag: diag\\n        };\\n      };\\n      var buildScript = function (start1, end1, start2, end2, script) {\\n        var middle = getMiddleSnake(start1, end1, start2, end2);\\n        if (middle === null || middle.start === end1 && middle.diag === end1 - end2 || middle.end === start1 && middle.diag === start1 - start2) {\\n          var i = start1;\\n          var j = start2;\\n          while (i < end1 || j < end2) {\\n            if (i < end1 && j < end2 && left[i] === right[j]) {\\n              script.push([\\n                KEEP,\\n                left[i]\\n              ]);\\n              ++i;\\n              ++j;\\n            } else {\\n              if (end1 - start1 > end2 - start2) {\\n                script.push([\\n                  DELETE,\\n                  left[i]\\n                ]);\\n                ++i;\\n              } else {\\n                script.push([\\n                  INSERT,\\n                  right[j]\\n                ]);\\n                ++j;\\n              }\\n            }\\n          }\\n        } else {\\n          buildScript(start1, middle.start, start2, middle.start - middle.diag, script);\\n          for (var i2 = middle.start; i2 < middle.end; ++i2) {\\n            script.push([\\n              KEEP,\\n              left[i2]\\n            ]);\\n          }\\n          buildScript(middle.end, end1, middle.end - middle.diag, end2, script);\\n        }\\n      };\\n      var buildSnake = function (start, diag, end1, end2) {\\n        var end = start;\\n        while (end - diag < end2 && end < end1 && left[end] === right[end - diag]) {\\n          ++end;\\n        }\\n        return snake(start, end, diag);\\n      };\\n      var getMiddleSnake = function (start1, end1, start2, end2) {\\n        var m = end1 - start1;\\n        var n = end2 - start2;\\n        if (m === 0 || n === 0) {\\n          return null;\\n        }\\n        var delta = m - n;\\n        var sum = n + m;\\n        var offset = (sum % 2 === 0 ? sum : sum + 1) / 2;\\n        vDown[1 + offset] = start1;\\n        vUp[1 + offset] = end1 + 1;\\n        var d, k, i, x, y;\\n        for (d = 0; d <= offset; ++d) {\\n          for (k = -d; k <= d; k += 2) {\\n            i = k + offset;\\n            if (k === -d || k !== d && vDown[i - 1] < vDown[i + 1]) {\\n              vDown[i] = vDown[i + 1];\\n            } else {\\n              vDown[i] = vDown[i - 1] + 1;\\n            }\\n            x = vDown[i];\\n            y = x - start1 + start2 - k;\\n            while (x < end1 && y < end2 && left[x] === right[y]) {\\n              vDown[i] = ++x;\\n              ++y;\\n            }\\n            if (delta % 2 !== 0 && delta - d <= k && k <= delta + d) {\\n              if (vUp[i - delta] <= vDown[i]) {\\n                return buildSnake(vUp[i - delta], k + start1 - start2, end1, end2);\\n              }\\n            }\\n          }\\n          for (k = delta - d; k <= delta + d; k += 2) {\\n            i = k + offset - delta;\\n            if (k === delta - d || k !== delta + d && vUp[i + 1] <= vUp[i - 1]) {\\n              vUp[i] = vUp[i + 1] - 1;\\n            } else {\\n              vUp[i] = vUp[i - 1];\\n            }\\n            x = vUp[i] - 1;\\n            y = x - start1 + start2 - k;\\n            while (x >= start1 && y >= start2 && left[x] === right[y]) {\\n              vUp[i] = x--;\\n              y--;\\n            }\\n            if (delta % 2 === 0 && -d <= k && k <= d) {\\n              if (vUp[i] <= vDown[i + delta]) {\\n                return buildSnake(vUp[i], k + start1 - start2, end1, end2);\\n              }\\n            }\\n          }\\n        }\\n      };\\n      var script = [];\\n      buildScript(0, left.length, 0, right.length, script);\\n      return script;\\n    };\\n    var Diff = {\\n      KEEP: KEEP,\\n      DELETE: DELETE,\\n      INSERT: INSERT,\\n      diff: diff\\n    };\\n\\n    var getOuterHtml = function (elm) {\\n      if (NodeType.isElement(elm)) {\\n        return elm.outerHTML;\\n      } else if (NodeType.isText(elm)) {\\n        return Entities.encodeRaw(elm.data, false);\\n      } else if (NodeType.isComment(elm)) {\\n        return '<!--' + elm.data + '-->';\\n      }\\n      return '';\\n    };\\n    var createFragment$1 = function (html) {\\n      var frag, node, container;\\n      container = domGlobals.document.createElement('div');\\n      frag = domGlobals.document.createDocumentFragment();\\n      if (html) {\\n        container.innerHTML = html;\\n      }\\n      while (node = container.firstChild) {\\n        frag.appendChild(node);\\n      }\\n      return frag;\\n    };\\n    var insertAt = function (elm, html, index) {\\n      var fragment = createFragment$1(html);\\n      if (elm.hasChildNodes() && index < elm.childNodes.length) {\\n        var target = elm.childNodes[index];\\n        target.parentNode.insertBefore(fragment, target);\\n      } else {\\n        elm.appendChild(fragment);\\n      }\\n    };\\n    var removeAt = function (elm, index) {\\n      if (elm.hasChildNodes() && index < elm.childNodes.length) {\\n        var target = elm.childNodes[index];\\n        target.parentNode.removeChild(target);\\n      }\\n    };\\n    var applyDiff = function (diff, elm) {\\n      var index = 0;\\n      each(diff, function (action) {\\n        if (action[0] === Diff.KEEP) {\\n          index++;\\n        } else if (action[0] === Diff.INSERT) {\\n          insertAt(elm, action[1], index);\\n          index++;\\n        } else if (action[0] === Diff.DELETE) {\\n          removeAt(elm, index);\\n        }\\n      });\\n    };\\n    var read$3 = function (elm) {\\n      return filter(map(from$1(elm.childNodes), getOuterHtml), function (item) {\\n        return item.length > 0;\\n      });\\n    };\\n    var write = function (fragments, elm) {\\n      var currentFragments = map(from$1(elm.childNodes), getOuterHtml);\\n      applyDiff(Diff.diff(currentFragments, fragments), elm);\\n      return elm;\\n    };\\n    var Fragments = {\\n      read: read$3,\\n      write: write\\n    };\\n\\n    var undoLevelDocument = Cell(Option.none());\\n    var lazyTempDocument = function () {\\n      return undoLevelDocument.get().getOrThunk(function () {\\n        var doc = domGlobals.document.implementation.createHTMLDocument('undo');\\n        undoLevelDocument.set(Option.some(doc));\\n        return doc;\\n      });\\n    };\\n    var hasIframes = function (html) {\\n      return html.indexOf('</iframe>') !== -1;\\n    };\\n    var createFragmentedLevel = function (fragments) {\\n      return {\\n        type: 'fragmented',\\n        fragments: fragments,\\n        content: '',\\n        bookmark: null,\\n        beforeBookmark: null\\n      };\\n    };\\n    var createCompleteLevel = function (content) {\\n      return {\\n        type: 'complete',\\n        fragments: null,\\n        content: content,\\n        bookmark: null,\\n        beforeBookmark: null\\n      };\\n    };\\n    var createFromEditor = function (editor) {\\n      var fragments, content, trimmedFragments;\\n      fragments = Fragments.read(editor.getBody());\\n      trimmedFragments = bind(fragments, function (html) {\\n        var trimmed = TrimHtml.trimInternal(editor.serializer, html);\\n        return trimmed.length > 0 ? [trimmed] : [];\\n      });\\n      content = trimmedFragments.join('');\\n      return hasIframes(content) ? createFragmentedLevel(trimmedFragments) : createCompleteLevel(content);\\n    };\\n    var applyToEditor = function (editor, level, before) {\\n      if (level.type === 'fragmented') {\\n        Fragments.write(level.fragments, editor.getBody());\\n      } else {\\n        editor.setContent(level.content, { format: 'raw' });\\n      }\\n      editor.selection.moveToBookmark(before ? level.beforeBookmark : level.bookmark);\\n    };\\n    var getLevelContent = function (level) {\\n      return level.type === 'fragmented' ? level.fragments.join('') : level.content;\\n    };\\n    var getCleanLevelContent = function (level) {\\n      var elm = Element.fromTag('body', lazyTempDocument());\\n      set$1(elm, getLevelContent(level));\\n      each(descendants$1(elm, '*[data-mce-bogus]'), unwrap);\\n      return get$3(elm);\\n    };\\n    var hasEqualContent = function (level1, level2) {\\n      return getLevelContent(level1) === getLevelContent(level2);\\n    };\\n    var hasEqualCleanedContent = function (level1, level2) {\\n      return getCleanLevelContent(level1) === getCleanLevelContent(level2);\\n    };\\n    var isEq$4 = function (level1, level2) {\\n      if (!level1 || !level2) {\\n        return false;\\n      } else if (hasEqualContent(level1, level2)) {\\n        return true;\\n      } else {\\n        return hasEqualCleanedContent(level1, level2);\\n      }\\n    };\\n    var Levels = {\\n      createFragmentedLevel: createFragmentedLevel,\\n      createCompleteLevel: createCompleteLevel,\\n      createFromEditor: createFromEditor,\\n      applyToEditor: applyToEditor,\\n      isEq: isEq$4\\n    };\\n\\n    function UndoManager (editor) {\\n      var self = this, index = 0, data = [], beforeBookmark, isFirstTypedCharacter, locks = 0;\\n      var isUnlocked = function () {\\n        return locks === 0;\\n      };\\n      var setTyping = function (typing) {\\n        if (isUnlocked()) {\\n          self.typing = typing;\\n        }\\n      };\\n      var setDirty = function (state) {\\n        editor.setDirty(state);\\n      };\\n      var addNonTypingUndoLevel = function (e) {\\n        setTyping(false);\\n        self.add({}, e);\\n      };\\n      var endTyping = function () {\\n        if (self.typing) {\\n          setTyping(false);\\n          self.add();\\n        }\\n      };\\n      editor.on('init', function () {\\n        self.add();\\n      });\\n      editor.on('BeforeExecCommand', function (e) {\\n        var cmd = e.command;\\n        if (cmd !== 'Undo' && cmd !== 'Redo' && cmd !== 'mceRepaint') {\\n          endTyping();\\n          self.beforeChange();\\n        }\\n      });\\n      editor.on('ExecCommand', function (e) {\\n        var cmd = e.command;\\n        if (cmd !== 'Undo' && cmd !== 'Redo' && cmd !== 'mceRepaint') {\\n          addNonTypingUndoLevel(e);\\n        }\\n      });\\n      editor.on('ObjectResizeStart Cut', function () {\\n        self.beforeChange();\\n      });\\n      editor.on('SaveContent ObjectResized blur', addNonTypingUndoLevel);\\n      editor.on('DragEnd', addNonTypingUndoLevel);\\n      editor.on('KeyUp', function (e) {\\n        var keyCode = e.keyCode;\\n        if (e.isDefaultPrevented()) {\\n          return;\\n        }\\n        if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45 || e.ctrlKey) {\\n          addNonTypingUndoLevel();\\n          editor.nodeChanged();\\n        }\\n        if (keyCode === 46 || keyCode === 8) {\\n          editor.nodeChanged();\\n        }\\n        if (isFirstTypedCharacter && self.typing && Levels.isEq(Levels.createFromEditor(editor), data[0]) === false) {\\n          if (editor.isDirty() === false) {\\n            setDirty(true);\\n            editor.fire('change', {\\n              level: data[0],\\n              lastLevel: null\\n            });\\n          }\\n          editor.fire('TypingUndo');\\n          isFirstTypedCharacter = false;\\n          editor.nodeChanged();\\n        }\\n      });\\n      editor.on('KeyDown', function (e) {\\n        var keyCode = e.keyCode;\\n        if (e.isDefaultPrevented()) {\\n          return;\\n        }\\n        if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45) {\\n          if (self.typing) {\\n            addNonTypingUndoLevel(e);\\n          }\\n          return;\\n        }\\n        var modKey = e.ctrlKey && !e.altKey || e.metaKey;\\n        if ((keyCode < 16 || keyCode > 20) && keyCode !== 224 && keyCode !== 91 && !self.typing && !modKey) {\\n          self.beforeChange();\\n          setTyping(true);\\n          self.add({}, e);\\n          isFirstTypedCharacter = true;\\n        }\\n      });\\n      editor.on('MouseDown', function (e) {\\n        if (self.typing) {\\n          addNonTypingUndoLevel(e);\\n        }\\n      });\\n      var isInsertReplacementText = function (event) {\\n        return event.inputType === 'insertReplacementText';\\n      };\\n      var isInsertTextDataNull = function (event) {\\n        return event.inputType === 'insertText' && event.data === null;\\n      };\\n      editor.on('input', function (e) {\\n        if (e.inputType && (isInsertReplacementText(e) || isInsertTextDataNull(e))) {\\n          addNonTypingUndoLevel(e);\\n        }\\n      });\\n      editor.addShortcut('meta+z', '', 'Undo');\\n      editor.addShortcut('meta+y,meta+shift+z', '', 'Redo');\\n      editor.on('AddUndo Undo Redo ClearUndos', function (e) {\\n        if (!e.isDefaultPrevented()) {\\n          editor.nodeChanged();\\n        }\\n      });\\n      self = {\\n        data: data,\\n        typing: false,\\n        beforeChange: function () {\\n          if (isUnlocked()) {\\n            beforeBookmark = GetBookmark.getUndoBookmark(editor.selection);\\n          }\\n        },\\n        add: function (level, event) {\\n          var i;\\n          var settings = editor.settings;\\n          var lastLevel, currentLevel;\\n          currentLevel = Levels.createFromEditor(editor);\\n          level = level || {};\\n          level = Tools.extend(level, currentLevel);\\n          if (isUnlocked() === false || editor.removed) {\\n            return null;\\n          }\\n          lastLevel = data[index];\\n          if (editor.fire('BeforeAddUndo', {\\n              level: level,\\n              lastLevel: lastLevel,\\n              originalEvent: event\\n            }).isDefaultPrevented()) {\\n            return null;\\n          }\\n          if (lastLevel && Levels.isEq(lastLevel, level)) {\\n            return null;\\n          }\\n          if (data[index]) {\\n            data[index].beforeBookmark = beforeBookmark;\\n          }\\n          if (settings.custom_undo_redo_levels) {\\n            if (data.length > settings.custom_undo_redo_levels) {\\n              for (i = 0; i < data.length - 1; i++) {\\n                data[i] = data[i + 1];\\n              }\\n              data.length--;\\n              index = data.length;\\n            }\\n          }\\n          level.bookmark = GetBookmark.getUndoBookmark(editor.selection);\\n          if (index < data.length - 1) {\\n            data.length = index + 1;\\n          }\\n          data.push(level);\\n          index = data.length - 1;\\n          var args = {\\n            level: level,\\n            lastLevel: lastLevel,\\n            originalEvent: event\\n          };\\n          editor.fire('AddUndo', args);\\n          if (index > 0) {\\n            setDirty(true);\\n            editor.fire('change', args);\\n          }\\n          return level;\\n        },\\n        undo: function () {\\n          var level;\\n          if (self.typing) {\\n            self.add();\\n            self.typing = false;\\n            setTyping(false);\\n          }\\n          if (index > 0) {\\n            level = data[--index];\\n            Levels.applyToEditor(editor, level, true);\\n            setDirty(true);\\n            editor.fire('undo', { level: level });\\n          }\\n          return level;\\n        },\\n        redo: function () {\\n          var level;\\n          if (index < data.length - 1) {\\n            level = data[++index];\\n            Levels.applyToEditor(editor, level, false);\\n            setDirty(true);\\n            editor.fire('redo', { level: level });\\n          }\\n          return level;\\n        },\\n        clear: function () {\\n          data = [];\\n          index = 0;\\n          self.typing = false;\\n          self.data = data;\\n          editor.fire('ClearUndos');\\n        },\\n        hasUndo: function () {\\n          return index > 0 || self.typing && data[0] && !Levels.isEq(Levels.createFromEditor(editor), data[0]);\\n        },\\n        hasRedo: function () {\\n          return index < data.length - 1 && !self.typing;\\n        },\\n        transact: function (callback) {\\n          endTyping();\\n          self.beforeChange();\\n          self.ignore(callback);\\n          return self.add();\\n        },\\n        ignore: function (callback) {\\n          try {\\n            locks++;\\n            callback();\\n          } finally {\\n            locks--;\\n          }\\n        },\\n        extra: function (callback1, callback2) {\\n          var lastLevel, bookmark;\\n          if (self.transact(callback1)) {\\n            bookmark = data[index].bookmark;\\n            lastLevel = data[index - 1];\\n            Levels.applyToEditor(editor, lastLevel, true);\\n            if (self.transact(callback2)) {\\n              data[index - 1].beforeBookmark = bookmark;\\n            }\\n          }\\n        }\\n      };\\n      return self;\\n    }\\n\\n    var postProcessHooks = {}, filter$2 = ArrUtils.filter, each$c = ArrUtils.each;\\n    var addPostProcessHook = function (name, hook) {\\n      var hooks = postProcessHooks[name];\\n      if (!hooks) {\\n        postProcessHooks[name] = hooks = [];\\n      }\\n      postProcessHooks[name].push(hook);\\n    };\\n    var postProcess = function (name, editor) {\\n      each$c(postProcessHooks[name], function (hook) {\\n        hook(editor);\\n      });\\n    };\\n    addPostProcessHook('pre', function (editor) {\\n      var rng = editor.selection.getRng();\\n      var isPre, blocks;\\n      var hasPreSibling = function (pre) {\\n        return isPre(pre.previousSibling) && ArrUtils.indexOf(blocks, pre.previousSibling) !== -1;\\n      };\\n      var joinPre = function (pre1, pre2) {\\n        DomQuery(pre2).remove();\\n        DomQuery(pre1).append('<br><br>').append(pre2.childNodes);\\n      };\\n      isPre = NodeType.matchNodeNames('pre');\\n      if (!rng.collapsed) {\\n        blocks = editor.selection.getSelectedBlocks();\\n        each$c(filter$2(filter$2(blocks, isPre), hasPreSibling), function (pre) {\\n          joinPre(pre.previousSibling, pre);\\n        });\\n      }\\n    });\\n    var Hooks = { postProcess: postProcess };\\n\\n    var MCE_ATTR_RE = /^(src|href|style)$/;\\n    var each$d = Tools.each;\\n    var isEq$5 = FormatUtils.isEq;\\n    var isTableCell$4 = function (node) {\\n      return /^(TH|TD)$/.test(node.nodeName);\\n    };\\n    var isChildOfInlineParent = function (dom, node, parent) {\\n      return dom.isChildOf(node, parent) && node !== parent && !dom.isBlock(parent);\\n    };\\n    var getContainer = function (ed, rng, start) {\\n      var container, offset, lastIdx;\\n      container = rng[start ? 'startContainer' : 'endContainer'];\\n      offset = rng[start ? 'startOffset' : 'endOffset'];\\n      if (NodeType.isElement(container)) {\\n        lastIdx = container.childNodes.length - 1;\\n        if (!start && offset) {\\n          offset--;\\n        }\\n        container = container.childNodes[offset > lastIdx ? lastIdx : offset];\\n      }\\n      if (NodeType.isText(container) && start && offset >= container.nodeValue.length) {\\n        container = new TreeWalker(container, ed.getBody()).next() || container;\\n      }\\n      if (NodeType.isText(container) && !start && offset === 0) {\\n        container = new TreeWalker(container, ed.getBody()).prev() || container;\\n      }\\n      return container;\\n    };\\n    var wrap$2 = function (dom, node, name, attrs) {\\n      var wrapper = dom.create(name, attrs);\\n      node.parentNode.insertBefore(wrapper, node);\\n      wrapper.appendChild(node);\\n      return wrapper;\\n    };\\n    var wrapWithSiblings = function (dom, node, next, name, attrs) {\\n      var start = Element.fromDom(node);\\n      var wrapper = Element.fromDom(dom.create(name, attrs));\\n      var siblings = next ? nextSiblings(start) : prevSiblings(start);\\n      append$1(wrapper, siblings);\\n      if (next) {\\n        before(start, wrapper);\\n        prepend(wrapper, start);\\n      } else {\\n        after(start, wrapper);\\n        append(wrapper, start);\\n      }\\n      return wrapper.dom();\\n    };\\n    var matchName$1 = function (dom, node, format) {\\n      if (isEq$5(node, format.inline)) {\\n        return true;\\n      }\\n      if (isEq$5(node, format.block)) {\\n        return true;\\n      }\\n      if (format.selector) {\\n        return NodeType.isElement(node) && dom.is(node, format.selector);\\n      }\\n    };\\n    var isColorFormatAndAnchor = function (node, format) {\\n      return format.links && node.tagName === 'A';\\n    };\\n    var find$3 = function (dom, node, next, inc) {\\n      node = FormatUtils.getNonWhiteSpaceSibling(node, next, inc);\\n      return !node || (node.nodeName === 'BR' || dom.isBlock(node));\\n    };\\n    var removeNode$1 = function (ed, node, format) {\\n      var parentNode = node.parentNode;\\n      var rootBlockElm;\\n      var dom = ed.dom, forcedRootBlock = ed.settings.forced_root_block;\\n      if (format.block) {\\n        if (!forcedRootBlock) {\\n          if (dom.isBlock(node) && !dom.isBlock(parentNode)) {\\n            if (!find$3(dom, node, false) && !find$3(dom, node.firstChild, true, 1)) {\\n              node.insertBefore(dom.create('br'), node.firstChild);\\n            }\\n            if (!find$3(dom, node, true) && !find$3(dom, node.lastChild, false, 1)) {\\n              node.appendChild(dom.create('br'));\\n            }\\n          }\\n        } else {\\n          if (parentNode === dom.getRoot()) {\\n            if (!format.list_block || !isEq$5(node, format.list_block)) {\\n              each$d(Tools.grep(node.childNodes), function (node) {\\n                if (FormatUtils.isValid(ed, forcedRootBlock, node.nodeName.toLowerCase())) {\\n                  if (!rootBlockElm) {\\n                    rootBlockElm = wrap$2(dom, node, forcedRootBlock);\\n                    dom.setAttribs(rootBlockElm, ed.settings.forced_root_block_attrs);\\n                  } else {\\n                    rootBlockElm.appendChild(node);\\n                  }\\n                } else {\\n                  rootBlockElm = 0;\\n                }\\n              });\\n            }\\n          }\\n        }\\n      }\\n      if (format.selector && format.inline && !isEq$5(format.inline, node)) {\\n        return;\\n      }\\n      dom.remove(node, 1);\\n    };\\n    var removeFormat = function (ed, format, vars, node, compareNode) {\\n      var i, attrs, stylesModified;\\n      var dom = ed.dom;\\n      if (!matchName$1(dom, node, format) && !isColorFormatAndAnchor(node, format)) {\\n        return false;\\n      }\\n      if (format.remove !== 'all') {\\n        each$d(format.styles, function (value, name) {\\n          value = FormatUtils.normalizeStyleValue(dom, FormatUtils.replaceVars(value, vars), name);\\n          if (typeof name === 'number') {\\n            name = value;\\n            compareNode = 0;\\n          }\\n          if (format.remove_similar || (!compareNode || isEq$5(FormatUtils.getStyle(dom, compareNode, name), value))) {\\n            dom.setStyle(node, name, '');\\n          }\\n          stylesModified = 1;\\n        });\\n        if (stylesModified && dom.getAttrib(node, 'style') === '') {\\n          node.removeAttribute('style');\\n          node.removeAttribute('data-mce-style');\\n        }\\n        each$d(format.attributes, function (value, name) {\\n          var valueOut;\\n          value = FormatUtils.replaceVars(value, vars);\\n          if (typeof name === 'number') {\\n            name = value;\\n            compareNode = 0;\\n          }\\n          if (!compareNode || isEq$5(dom.getAttrib(compareNode, name), value)) {\\n            if (name === 'class') {\\n              value = dom.getAttrib(node, name);\\n              if (value) {\\n                valueOut = '';\\n                each$d(value.split(/\\\\s+/), function (cls) {\\n                  if (/mce\\\\-\\\\w+/.test(cls)) {\\n                    valueOut += (valueOut ? ' ' : '') + cls;\\n                  }\\n                });\\n                if (valueOut) {\\n                  dom.setAttrib(node, name, valueOut);\\n                  return;\\n                }\\n              }\\n            }\\n            if (name === 'class') {\\n              node.removeAttribute('className');\\n            }\\n            if (MCE_ATTR_RE.test(name)) {\\n              node.removeAttribute('data-mce-' + name);\\n            }\\n            node.removeAttribute(name);\\n          }\\n        });\\n        each$d(format.classes, function (value) {\\n          value = FormatUtils.replaceVars(value, vars);\\n          if (!compareNode || dom.hasClass(compareNode, value)) {\\n            dom.removeClass(node, value);\\n          }\\n        });\\n        attrs = dom.getAttribs(node);\\n        for (i = 0; i < attrs.length; i++) {\\n          var attrName = attrs[i].nodeName;\\n          if (attrName.indexOf('_') !== 0 && attrName.indexOf('data-') !== 0) {\\n            return false;\\n          }\\n        }\\n      }\\n      if (format.remove !== 'none') {\\n        removeNode$1(ed, node, format);\\n        return true;\\n      }\\n    };\\n    var findFormatRoot = function (editor, container, name, vars, similar) {\\n      var formatRoot;\\n      each$d(FormatUtils.getParents(editor.dom, container.parentNode).reverse(), function (parent) {\\n        var format;\\n        if (!formatRoot && parent.id !== '_start' && parent.id !== '_end') {\\n          format = MatchFormat.matchNode(editor, parent, name, vars, similar);\\n          if (format && format.split !== false) {\\n            formatRoot = parent;\\n          }\\n        }\\n      });\\n      return formatRoot;\\n    };\\n    var wrapAndSplit = function (editor, formatList, formatRoot, container, target, split, format, vars) {\\n      var parent, clone, lastClone, firstClone, i, formatRootParent;\\n      var dom = editor.dom;\\n      if (formatRoot) {\\n        formatRootParent = formatRoot.parentNode;\\n        for (parent = container.parentNode; parent && parent !== formatRootParent; parent = parent.parentNode) {\\n          clone = dom.clone(parent, false);\\n          for (i = 0; i < formatList.length; i++) {\\n            if (removeFormat(editor, formatList[i], vars, clone, clone)) {\\n              clone = 0;\\n              break;\\n            }\\n          }\\n          if (clone) {\\n            if (lastClone) {\\n              clone.appendChild(lastClone);\\n            }\\n            if (!firstClone) {\\n              firstClone = clone;\\n            }\\n            lastClone = clone;\\n          }\\n        }\\n        if (split && (!format.mixed || !dom.isBlock(formatRoot))) {\\n          container = dom.split(formatRoot, container);\\n        }\\n        if (lastClone) {\\n          target.parentNode.insertBefore(lastClone, target);\\n          firstClone.appendChild(target);\\n        }\\n      }\\n      return container;\\n    };\\n    var remove$6 = function (ed, name, vars, node, similar) {\\n      var formatList = ed.formatter.get(name), format = formatList[0];\\n      var bookmark, rng, contentEditable = true;\\n      var dom = ed.dom;\\n      var selection = ed.selection;\\n      var splitToFormatRoot = function (container) {\\n        var formatRoot = findFormatRoot(ed, container, name, vars, similar);\\n        return wrapAndSplit(ed, formatList, formatRoot, container, container, true, format, vars);\\n      };\\n      var isRemoveBookmarkNode = function (node) {\\n        return Bookmarks.isBookmarkNode(node) && NodeType.isElement(node) && (node.id === '_start' || node.id === '_end');\\n      };\\n      var process = function (node) {\\n        var children, i, l, lastContentEditable, hasContentEditableState;\\n        if (NodeType.isElement(node) && dom.getContentEditable(node)) {\\n          lastContentEditable = contentEditable;\\n          contentEditable = dom.getContentEditable(node) === 'true';\\n          hasContentEditableState = true;\\n        }\\n        children = Tools.grep(node.childNodes);\\n        if (contentEditable && !hasContentEditableState) {\\n          for (i = 0, l = formatList.length; i < l; i++) {\\n            if (removeFormat(ed, formatList[i], vars, node, node)) {\\n              break;\\n            }\\n          }\\n        }\\n        if (format.deep) {\\n          if (children.length) {\\n            for (i = 0, l = children.length; i < l; i++) {\\n              process(children[i]);\\n            }\\n            if (hasContentEditableState) {\\n              contentEditable = lastContentEditable;\\n            }\\n          }\\n        }\\n      };\\n      var unwrap = function (start) {\\n        var node = dom.get(start ? '_start' : '_end');\\n        var out = node[start ? 'firstChild' : 'lastChild'];\\n        if (isRemoveBookmarkNode(out)) {\\n          out = out[start ? 'firstChild' : 'lastChild'];\\n        }\\n        if (NodeType.isText(out) && out.data.length === 0) {\\n          out = start ? node.previousSibling || node.nextSibling : node.nextSibling || node.previousSibling;\\n        }\\n        dom.remove(node, true);\\n        return out;\\n      };\\n      var removeRngStyle = function (rng) {\\n        var startContainer, endContainer;\\n        var commonAncestorContainer = rng.commonAncestorContainer;\\n        rng = ExpandRange.expandRng(ed, rng, formatList, true);\\n        if (format.split) {\\n          rng = SplitRange.split(rng);\\n          startContainer = getContainer(ed, rng, true);\\n          endContainer = getContainer(ed, rng);\\n          if (startContainer !== endContainer) {\\n            if (/^(TR|TH|TD)$/.test(startContainer.nodeName) && startContainer.firstChild) {\\n              if (startContainer.nodeName === 'TR') {\\n                startContainer = startContainer.firstChild.firstChild || startContainer;\\n              } else {\\n                startContainer = startContainer.firstChild || startContainer;\\n              }\\n            }\\n            if (commonAncestorContainer && /^T(HEAD|BODY|FOOT|R)$/.test(commonAncestorContainer.nodeName) && isTableCell$4(endContainer) && endContainer.firstChild) {\\n              endContainer = endContainer.firstChild || endContainer;\\n            }\\n            if (isChildOfInlineParent(dom, startContainer, endContainer)) {\\n              var marker = Option.from(startContainer.firstChild).getOr(startContainer);\\n              splitToFormatRoot(wrapWithSiblings(dom, marker, true, 'span', {\\n                'id': '_start',\\n                'data-mce-type': 'bookmark'\\n              }));\\n              unwrap(true);\\n              return;\\n            }\\n            if (isChildOfInlineParent(dom, endContainer, startContainer)) {\\n              var marker = Option.from(endContainer.lastChild).getOr(endContainer);\\n              splitToFormatRoot(wrapWithSiblings(dom, marker, false, 'span', {\\n                'id': '_end',\\n                'data-mce-type': 'bookmark'\\n              }));\\n              unwrap(false);\\n              return;\\n            }\\n            startContainer = wrap$2(dom, startContainer, 'span', {\\n              'id': '_start',\\n              'data-mce-type': 'bookmark'\\n            });\\n            endContainer = wrap$2(dom, endContainer, 'span', {\\n              'id': '_end',\\n              'data-mce-type': 'bookmark'\\n            });\\n            splitToFormatRoot(startContainer);\\n            splitToFormatRoot(endContainer);\\n            startContainer = unwrap(true);\\n            endContainer = unwrap();\\n          } else {\\n            startContainer = endContainer = splitToFormatRoot(startContainer);\\n          }\\n          rng.startContainer = startContainer.parentNode ? startContainer.parentNode : startContainer;\\n          rng.startOffset = dom.nodeIndex(startContainer);\\n          rng.endContainer = endContainer.parentNode ? endContainer.parentNode : endContainer;\\n          rng.endOffset = dom.nodeIndex(endContainer) + 1;\\n        }\\n        RangeWalk.walk(dom, rng, function (nodes) {\\n          each$d(nodes, function (node) {\\n            process(node);\\n            if (NodeType.isElement(node) && ed.dom.getStyle(node, 'text-decoration') === 'underline' && node.parentNode && FormatUtils.getTextDecoration(dom, node.parentNode) === 'underline') {\\n              removeFormat(ed, {\\n                deep: false,\\n                exact: true,\\n                inline: 'span',\\n                styles: { textDecoration: 'underline' }\\n              }, null, node);\\n            }\\n          });\\n        });\\n      };\\n      if (node) {\\n        if (node.nodeType) {\\n          rng = dom.createRng();\\n          rng.setStartBefore(node);\\n          rng.setEndAfter(node);\\n          removeRngStyle(rng);\\n        } else {\\n          removeRngStyle(node);\\n        }\\n        return;\\n      }\\n      if (dom.getContentEditable(selection.getNode()) === 'false') {\\n        node = selection.getNode();\\n        for (var i = 0, l = formatList.length; i < l; i++) {\\n          if (formatList[i].ceFalseOverride) {\\n            if (removeFormat(ed, formatList[i], vars, node, node)) {\\n              break;\\n            }\\n          }\\n        }\\n        return;\\n      }\\n      if (!selection.isCollapsed() || !format.inline || dom.select('td[data-mce-selected],th[data-mce-selected]').length) {\\n        bookmark = GetBookmark.getPersistentBookmark(ed.selection, true);\\n        removeRngStyle(selection.getRng());\\n        selection.moveToBookmark(bookmark);\\n        if (format.inline && MatchFormat.match(ed, name, vars, selection.getStart())) {\\n          FormatUtils.moveStart(dom, selection, selection.getRng());\\n        }\\n        ed.nodeChanged();\\n      } else {\\n        removeCaretFormat(ed, name, vars, similar);\\n      }\\n    };\\n    var RemoveFormat = {\\n      removeFormat: removeFormat,\\n      remove: remove$6\\n    };\\n\\n    var each$e = Tools.each;\\n    var isElementNode = function (node) {\\n      return node && node.nodeType === 1 && !Bookmarks.isBookmarkNode(node) && !isCaretNode(node) && !NodeType.isBogus(node);\\n    };\\n    var findElementSibling = function (node, siblingName) {\\n      var sibling;\\n      for (sibling = node; sibling; sibling = sibling[siblingName]) {\\n        if (sibling.nodeType === 3 && sibling.nodeValue.length !== 0) {\\n          return node;\\n        }\\n        if (sibling.nodeType === 1 && !Bookmarks.isBookmarkNode(sibling)) {\\n          return sibling;\\n        }\\n      }\\n      return node;\\n    };\\n    var mergeSiblingsNodes = function (dom, prev, next) {\\n      var sibling, tmpSibling;\\n      var elementUtils = new ElementUtils(dom);\\n      if (prev && next) {\\n        prev = findElementSibling(prev, 'previousSibling');\\n        next = findElementSibling(next, 'nextSibling');\\n        if (elementUtils.compare(prev, next)) {\\n          for (sibling = prev.nextSibling; sibling && sibling !== next;) {\\n            tmpSibling = sibling;\\n            sibling = sibling.nextSibling;\\n            prev.appendChild(tmpSibling);\\n          }\\n          dom.remove(next);\\n          Tools.each(Tools.grep(next.childNodes), function (node) {\\n            prev.appendChild(node);\\n          });\\n          return prev;\\n        }\\n      }\\n      return next;\\n    };\\n    var processChildElements = function (node, filter, process) {\\n      each$e(node.childNodes, function (node) {\\n        if (isElementNode(node)) {\\n          if (filter(node)) {\\n            process(node);\\n          }\\n          if (node.hasChildNodes()) {\\n            processChildElements(node, filter, process);\\n          }\\n        }\\n      });\\n    };\\n    var hasStyle = function (dom, name) {\\n      return curry(function (name, node) {\\n        return !!(node && FormatUtils.getStyle(dom, node, name));\\n      }, name);\\n    };\\n    var applyStyle = function (dom, name, value) {\\n      return curry(function (name, value, node) {\\n        dom.setStyle(node, name, value);\\n        if (node.getAttribute('style') === '') {\\n          node.removeAttribute('style');\\n        }\\n        unwrapEmptySpan(dom, node);\\n      }, name, value);\\n    };\\n    var unwrapEmptySpan = function (dom, node) {\\n      if (node.nodeName === 'SPAN' && dom.getAttribs(node).length === 0) {\\n        dom.remove(node, true);\\n      }\\n    };\\n    var processUnderlineAndColor = function (dom, node) {\\n      var textDecoration;\\n      if (node.nodeType === 1 && node.parentNode && node.parentNode.nodeType === 1) {\\n        textDecoration = FormatUtils.getTextDecoration(dom, node.parentNode);\\n        if (dom.getStyle(node, 'color') && textDecoration) {\\n          dom.setStyle(node, 'text-decoration', textDecoration);\\n        } else if (dom.getStyle(node, 'text-decoration') === textDecoration) {\\n          dom.setStyle(node, 'text-decoration', null);\\n        }\\n      }\\n    };\\n    var mergeUnderlineAndColor = function (dom, format, vars, node) {\\n      if (format.styles.color || format.styles.textDecoration) {\\n        Tools.walk(node, curry(processUnderlineAndColor, dom), 'childNodes');\\n        processUnderlineAndColor(dom, node);\\n      }\\n    };\\n    var mergeBackgroundColorAndFontSize = function (dom, format, vars, node) {\\n      if (format.styles && format.styles.backgroundColor) {\\n        processChildElements(node, hasStyle(dom, 'fontSize'), applyStyle(dom, 'backgroundColor', FormatUtils.replaceVars(format.styles.backgroundColor, vars)));\\n      }\\n    };\\n    var mergeSubSup = function (dom, format, vars, node) {\\n      if (format.inline === 'sub' || format.inline === 'sup') {\\n        processChildElements(node, hasStyle(dom, 'fontSize'), applyStyle(dom, 'fontSize', ''));\\n        dom.remove(dom.select(format.inline === 'sup' ? 'sub' : 'sup', node), true);\\n      }\\n    };\\n    var mergeSiblings = function (dom, format, vars, node) {\\n      if (node && format.merge_siblings !== false) {\\n        node = mergeSiblingsNodes(dom, FormatUtils.getNonWhiteSpaceSibling(node), node);\\n        node = mergeSiblingsNodes(dom, node, FormatUtils.getNonWhiteSpaceSibling(node, true));\\n      }\\n    };\\n    var clearChildStyles = function (dom, format, node) {\\n      if (format.clear_child_styles) {\\n        var selector = format.links ? '*:not(a)' : '*';\\n        each$e(dom.select(selector, node), function (node) {\\n          if (isElementNode(node)) {\\n            each$e(format.styles, function (value, name) {\\n              dom.setStyle(node, name, '');\\n            });\\n          }\\n        });\\n      }\\n    };\\n    var mergeWithChildren = function (editor, formatList, vars, node) {\\n      each$e(formatList, function (format) {\\n        each$e(editor.dom.select(format.inline, node), function (child) {\\n          if (!isElementNode(child)) {\\n            return;\\n          }\\n          RemoveFormat.removeFormat(editor, format, vars, child, format.exact ? child : null);\\n        });\\n        clearChildStyles(editor.dom, format, node);\\n      });\\n    };\\n    var mergeWithParents = function (editor, format, name, vars, node) {\\n      if (MatchFormat.matchNode(editor, node.parentNode, name, vars)) {\\n        if (RemoveFormat.removeFormat(editor, format, vars, node)) {\\n          return;\\n        }\\n      }\\n      if (format.merge_with_parents) {\\n        editor.dom.getParent(node.parentNode, function (parent) {\\n          if (MatchFormat.matchNode(editor, parent, name, vars)) {\\n            RemoveFormat.removeFormat(editor, format, vars, node);\\n            return true;\\n          }\\n        });\\n      }\\n    };\\n    var MergeFormats = {\\n      mergeWithChildren: mergeWithChildren,\\n      mergeUnderlineAndColor: mergeUnderlineAndColor,\\n      mergeBackgroundColorAndFontSize: mergeBackgroundColorAndFontSize,\\n      mergeSubSup: mergeSubSup,\\n      mergeSiblings: mergeSiblings,\\n      mergeWithParents: mergeWithParents\\n    };\\n\\n    var each$f = Tools.each;\\n    var isElementNode$1 = function (node) {\\n      return node && node.nodeType === 1 && !Bookmarks.isBookmarkNode(node) && !isCaretNode(node) && !NodeType.isBogus(node);\\n    };\\n    var applyFormat = function (ed, name, vars, node) {\\n      var formatList = ed.formatter.get(name);\\n      var format = formatList[0];\\n      var bookmark, rng;\\n      var isCollapsed = !node && ed.selection.isCollapsed();\\n      var dom = ed.dom, selection = ed.selection;\\n      var setElementFormat = function (elm, fmt) {\\n        fmt = fmt || format;\\n        if (elm) {\\n          if (fmt.onformat) {\\n            fmt.onformat(elm, fmt, vars, node);\\n          }\\n          each$f(fmt.styles, function (value, name) {\\n            dom.setStyle(elm, name, FormatUtils.replaceVars(value, vars));\\n          });\\n          if (fmt.styles) {\\n            var styleVal = dom.getAttrib(elm, 'style');\\n            if (styleVal) {\\n              elm.setAttribute('data-mce-style', styleVal);\\n            }\\n          }\\n          each$f(fmt.attributes, function (value, name) {\\n            dom.setAttrib(elm, name, FormatUtils.replaceVars(value, vars));\\n          });\\n          each$f(fmt.classes, function (value) {\\n            value = FormatUtils.replaceVars(value, vars);\\n            if (!dom.hasClass(elm, value)) {\\n              dom.addClass(elm, value);\\n            }\\n          });\\n        }\\n      };\\n      var applyNodeStyle = function (formatList, node) {\\n        var found = false;\\n        if (!format.selector) {\\n          return false;\\n        }\\n        each$f(formatList, function (format) {\\n          if ('collapsed' in format && format.collapsed !== isCollapsed) {\\n            return;\\n          }\\n          if (dom.is(node, format.selector) && !isCaretNode(node)) {\\n            setElementFormat(node, format);\\n            found = true;\\n            return false;\\n          }\\n        });\\n        return found;\\n      };\\n      var applyRngStyle = function (dom, rng, bookmark, nodeSpecific) {\\n        var newWrappers = [];\\n        var wrapName, wrapElm, contentEditable = true;\\n        wrapName = format.inline || format.block;\\n        wrapElm = dom.create(wrapName);\\n        setElementFormat(wrapElm);\\n        RangeWalk.walk(dom, rng, function (nodes) {\\n          var currentWrapElm;\\n          var process = function (node) {\\n            var nodeName, parentName, hasContentEditableState, lastContentEditable;\\n            lastContentEditable = contentEditable;\\n            nodeName = node.nodeName.toLowerCase();\\n            parentName = node.parentNode.nodeName.toLowerCase();\\n            if (node.nodeType === 1 && dom.getContentEditable(node)) {\\n              lastContentEditable = contentEditable;\\n              contentEditable = dom.getContentEditable(node) === 'true';\\n              hasContentEditableState = true;\\n            }\\n            if (FormatUtils.isEq(nodeName, 'br')) {\\n              currentWrapElm = 0;\\n              if (format.block) {\\n                dom.remove(node);\\n              }\\n              return;\\n            }\\n            if (format.wrapper && MatchFormat.matchNode(ed, node, name, vars)) {\\n              currentWrapElm = 0;\\n              return;\\n            }\\n            if (contentEditable && !hasContentEditableState && format.block && !format.wrapper && FormatUtils.isTextBlock(ed, nodeName) && FormatUtils.isValid(ed, parentName, wrapName)) {\\n              node = dom.rename(node, wrapName);\\n              setElementFormat(node);\\n              newWrappers.push(node);\\n              currentWrapElm = 0;\\n              return;\\n            }\\n            if (format.selector) {\\n              var found = applyNodeStyle(formatList, node);\\n              if (!format.inline || found) {\\n                currentWrapElm = 0;\\n                return;\\n              }\\n            }\\n            if (contentEditable && !hasContentEditableState && FormatUtils.isValid(ed, wrapName, nodeName) && FormatUtils.isValid(ed, parentName, wrapName) && !(!nodeSpecific && node.nodeType === 3 && node.nodeValue.length === 1 && node.nodeValue.charCodeAt(0) === 65279) && !isCaretNode(node) && (!format.inline || !dom.isBlock(node))) {\\n              if (!currentWrapElm) {\\n                currentWrapElm = dom.clone(wrapElm, false);\\n                node.parentNode.insertBefore(currentWrapElm, node);\\n                newWrappers.push(currentWrapElm);\\n              }\\n              currentWrapElm.appendChild(node);\\n            } else {\\n              currentWrapElm = 0;\\n              each$f(Tools.grep(node.childNodes), process);\\n              if (hasContentEditableState) {\\n                contentEditable = lastContentEditable;\\n              }\\n              currentWrapElm = 0;\\n            }\\n          };\\n          each$f(nodes, process);\\n        });\\n        if (format.links === true) {\\n          each$f(newWrappers, function (node) {\\n            var process = function (node) {\\n              if (node.nodeName === 'A') {\\n                setElementFormat(node, format);\\n              }\\n              each$f(Tools.grep(node.childNodes), process);\\n            };\\n            process(node);\\n          });\\n        }\\n        each$f(newWrappers, function (node) {\\n          var childCount;\\n          var getChildCount = function (node) {\\n            var count = 0;\\n            each$f(node.childNodes, function (node) {\\n              if (!FormatUtils.isWhiteSpaceNode(node) && !Bookmarks.isBookmarkNode(node)) {\\n                count++;\\n              }\\n            });\\n            return count;\\n          };\\n          var getChildElementNode = function (root) {\\n            var child = false;\\n            each$f(root.childNodes, function (node) {\\n              if (isElementNode$1(node)) {\\n                child = node;\\n                return false;\\n              }\\n            });\\n            return child;\\n          };\\n          var mergeStyles = function (node) {\\n            var child, clone;\\n            child = getChildElementNode(node);\\n            if (child && !Bookmarks.isBookmarkNode(child) && MatchFormat.matchName(dom, child, format)) {\\n              clone = dom.clone(child, false);\\n              setElementFormat(clone);\\n              dom.replace(clone, node, true);\\n              dom.remove(child, 1);\\n            }\\n            return clone || node;\\n          };\\n          childCount = getChildCount(node);\\n          if ((newWrappers.length > 1 || !dom.isBlock(node)) && childCount === 0) {\\n            dom.remove(node, 1);\\n            return;\\n          }\\n          if (format.inline || format.wrapper) {\\n            if (!format.exact && childCount === 1) {\\n              node = mergeStyles(node);\\n            }\\n            MergeFormats.mergeWithChildren(ed, formatList, vars, node);\\n            MergeFormats.mergeWithParents(ed, format, name, vars, node);\\n            MergeFormats.mergeBackgroundColorAndFontSize(dom, format, vars, node);\\n            MergeFormats.mergeSubSup(dom, format, vars, node);\\n            MergeFormats.mergeSiblings(dom, format, vars, node);\\n          }\\n        });\\n      };\\n      if (dom.getContentEditable(selection.getNode()) === 'false') {\\n        node = selection.getNode();\\n        for (var i = 0, l = formatList.length; i < l; i++) {\\n          if (formatList[i].ceFalseOverride && dom.is(node, formatList[i].selector)) {\\n            setElementFormat(node, formatList[i]);\\n            return;\\n          }\\n        }\\n        return;\\n      }\\n      if (format) {\\n        if (node) {\\n          if (node.nodeType) {\\n            if (!applyNodeStyle(formatList, node)) {\\n              rng = dom.createRng();\\n              rng.setStartBefore(node);\\n              rng.setEndAfter(node);\\n              applyRngStyle(dom, ExpandRange.expandRng(ed, rng, formatList), null, true);\\n            }\\n          } else {\\n            applyRngStyle(dom, node, null, true);\\n          }\\n        } else {\\n          if (!isCollapsed || !format.inline || dom.select('td[data-mce-selected],th[data-mce-selected]').length) {\\n            var curSelNode = ed.selection.getNode();\\n            if (!ed.settings.forced_root_block && formatList[0].defaultBlock && !dom.getParent(curSelNode, dom.isBlock)) {\\n              applyFormat(ed, formatList[0].defaultBlock);\\n            }\\n            ed.selection.setRng(RangeNormalizer.normalize(ed.selection.getRng()));\\n            bookmark = GetBookmark.getPersistentBookmark(ed.selection, true);\\n            applyRngStyle(dom, ExpandRange.expandRng(ed, selection.getRng(), formatList));\\n            if (format.styles) {\\n              MergeFormats.mergeUnderlineAndColor(dom, format, vars, curSelNode);\\n            }\\n            selection.moveToBookmark(bookmark);\\n            FormatUtils.moveStart(dom, selection, selection.getRng());\\n            ed.nodeChanged();\\n          } else {\\n            applyCaretFormat(ed, name, vars);\\n          }\\n        }\\n        Hooks.postProcess(name, ed);\\n      }\\n    };\\n    var ApplyFormat = { applyFormat: applyFormat };\\n\\n    var each$g = Tools.each;\\n    var setup$5 = function (formatChangeData, editor) {\\n      var currentFormats = {};\\n      formatChangeData.set({});\\n      editor.on('NodeChange', function (e) {\\n        var parents = FormatUtils.getParents(editor.dom, e.element);\\n        var matchedFormats = {};\\n        parents = Tools.grep(parents, function (node) {\\n          return node.nodeType === 1 && !node.getAttribute('data-mce-bogus');\\n        });\\n        each$g(formatChangeData.get(), function (callbacks, format) {\\n          each$g(parents, function (node) {\\n            if (editor.formatter.matchNode(node, format, {}, callbacks.similar)) {\\n              if (!currentFormats[format]) {\\n                each$g(callbacks, function (callback) {\\n                  callback(true, {\\n                    node: node,\\n                    format: format,\\n                    parents: parents\\n                  });\\n                });\\n                currentFormats[format] = callbacks;\\n              }\\n              matchedFormats[format] = callbacks;\\n              return false;\\n            }\\n            if (MatchFormat.matchesUnInheritedFormatSelector(editor, node, format)) {\\n              return false;\\n            }\\n          });\\n        });\\n        each$g(currentFormats, function (callbacks, format) {\\n          if (!matchedFormats[format]) {\\n            delete currentFormats[format];\\n            each$g(callbacks, function (callback) {\\n              callback(false, {\\n                node: e.element,\\n                format: format,\\n                parents: parents\\n              });\\n            });\\n          }\\n        });\\n      });\\n    };\\n    var addListeners = function (formatChangeData, formats, callback, similar) {\\n      var formatChangeItems = formatChangeData.get();\\n      each$g(formats.split(','), function (format) {\\n        if (!formatChangeItems[format]) {\\n          formatChangeItems[format] = [];\\n          formatChangeItems[format].similar = similar;\\n        }\\n        formatChangeItems[format].push(callback);\\n      });\\n      formatChangeData.set(formatChangeItems);\\n    };\\n    var formatChanged = function (editor, formatChangeState, formats, callback, similar) {\\n      if (formatChangeState.get() === null) {\\n        setup$5(formatChangeState, editor);\\n      }\\n      addListeners(formatChangeState, formats, callback, similar);\\n    };\\n    var FormatChanged = { formatChanged: formatChanged };\\n\\n    var get$5 = function (dom) {\\n      var formats = {\\n        valigntop: [{\\n            selector: 'td,th',\\n            styles: { verticalAlign: 'top' }\\n          }],\\n        valignmiddle: [{\\n            selector: 'td,th',\\n            styles: { verticalAlign: 'middle' }\\n          }],\\n        valignbottom: [{\\n            selector: 'td,th',\\n            styles: { verticalAlign: 'bottom' }\\n          }],\\n        alignleft: [\\n          {\\n            selector: 'figure.image',\\n            collapsed: false,\\n            classes: 'align-left',\\n            ceFalseOverride: true,\\n            preview: 'font-family font-size'\\n          },\\n          {\\n            selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\\n            styles: { textAlign: 'left' },\\n            inherit: false,\\n            preview: false,\\n            defaultBlock: 'div'\\n          },\\n          {\\n            selector: 'img,table',\\n            collapsed: false,\\n            styles: { float: 'left' },\\n            preview: 'font-family font-size'\\n          }\\n        ],\\n        aligncenter: [\\n          {\\n            selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\\n            styles: { textAlign: 'center' },\\n            inherit: false,\\n            preview: 'font-family font-size',\\n            defaultBlock: 'div'\\n          },\\n          {\\n            selector: 'figure.image',\\n            collapsed: false,\\n            classes: 'align-center',\\n            ceFalseOverride: true,\\n            preview: 'font-family font-size'\\n          },\\n          {\\n            selector: 'img',\\n            collapsed: false,\\n            styles: {\\n              display: 'block',\\n              marginLeft: 'auto',\\n              marginRight: 'auto'\\n            },\\n            preview: false\\n          },\\n          {\\n            selector: 'table',\\n            collapsed: false,\\n            styles: {\\n              marginLeft: 'auto',\\n              marginRight: 'auto'\\n            },\\n            preview: 'font-family font-size'\\n          }\\n        ],\\n        alignright: [\\n          {\\n            selector: 'figure.image',\\n            collapsed: false,\\n            classes: 'align-right',\\n            ceFalseOverride: true,\\n            preview: 'font-family font-size'\\n          },\\n          {\\n            selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\\n            styles: { textAlign: 'right' },\\n            inherit: false,\\n            preview: 'font-family font-size',\\n            defaultBlock: 'div'\\n          },\\n          {\\n            selector: 'img,table',\\n            collapsed: false,\\n            styles: { float: 'right' },\\n            preview: 'font-family font-size'\\n          }\\n        ],\\n        alignjustify: [{\\n            selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\\n            styles: { textAlign: 'justify' },\\n            inherit: false,\\n            defaultBlock: 'div',\\n            preview: 'font-family font-size'\\n          }],\\n        bold: [\\n          {\\n            inline: 'strong',\\n            remove: 'all'\\n          },\\n          {\\n            inline: 'span',\\n            styles: { fontWeight: 'bold' }\\n          },\\n          {\\n            inline: 'b',\\n            remove: 'all'\\n          }\\n        ],\\n        italic: [\\n          {\\n            inline: 'em',\\n            remove: 'all'\\n          },\\n          {\\n            inline: 'span',\\n            styles: { fontStyle: 'italic' }\\n          },\\n          {\\n            inline: 'i',\\n            remove: 'all'\\n          }\\n        ],\\n        underline: [\\n          {\\n            inline: 'span',\\n            styles: { textDecoration: 'underline' },\\n            exact: true\\n          },\\n          {\\n            inline: 'u',\\n            remove: 'all'\\n          }\\n        ],\\n        strikethrough: [\\n          {\\n            inline: 'span',\\n            styles: { textDecoration: 'line-through' },\\n            exact: true\\n          },\\n          {\\n            inline: 'strike',\\n            remove: 'all'\\n          }\\n        ],\\n        forecolor: {\\n          inline: 'span',\\n          styles: { color: '%value' },\\n          links: true,\\n          remove_similar: true,\\n          clear_child_styles: true\\n        },\\n        hilitecolor: {\\n          inline: 'span',\\n          styles: { backgroundColor: '%value' },\\n          links: true,\\n          remove_similar: true,\\n          clear_child_styles: true\\n        },\\n        fontname: {\\n          inline: 'span',\\n          toggle: false,\\n          styles: { fontFamily: '%value' },\\n          clear_child_styles: true\\n        },\\n        fontsize: {\\n          inline: 'span',\\n          toggle: false,\\n          styles: { fontSize: '%value' },\\n          clear_child_styles: true\\n        },\\n        fontsize_class: {\\n          inline: 'span',\\n          attributes: { class: '%value' }\\n        },\\n        blockquote: {\\n          block: 'blockquote',\\n          wrapper: 1,\\n          remove: 'all'\\n        },\\n        subscript: { inline: 'sub' },\\n        superscript: { inline: 'sup' },\\n        code: { inline: 'code' },\\n        link: {\\n          inline: 'a',\\n          selector: 'a',\\n          remove: 'all',\\n          split: true,\\n          deep: true,\\n          onmatch: function () {\\n            return true;\\n          },\\n          onformat: function (elm, fmt, vars) {\\n            Tools.each(vars, function (value, key) {\\n              dom.setAttrib(elm, key, value);\\n            });\\n          }\\n        },\\n        removeformat: [\\n          {\\n            selector: 'b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins',\\n            remove: 'all',\\n            split: true,\\n            expand: false,\\n            block_expand: true,\\n            deep: true\\n          },\\n          {\\n            selector: 'span',\\n            attributes: [\\n              'style',\\n              'class'\\n            ],\\n            remove: 'empty',\\n            split: true,\\n            expand: false,\\n            deep: true\\n          },\\n          {\\n            selector: '*',\\n            attributes: [\\n              'style',\\n              'class'\\n            ],\\n            split: false,\\n            expand: false,\\n            deep: true\\n          }\\n        ]\\n      };\\n      Tools.each('p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp'.split(/\\\\s/), function (name) {\\n        formats[name] = {\\n          block: name,\\n          remove: 'all'\\n        };\\n      });\\n      return formats;\\n    };\\n    var DefaultFormats = { get: get$5 };\\n\\n    function FormatRegistry (editor) {\\n      var formats = {};\\n      var get = function (name) {\\n        return name ? formats[name] : formats;\\n      };\\n      var register = function (name, format) {\\n        if (name) {\\n          if (typeof name !== 'string') {\\n            Tools.each(name, function (format, name) {\\n              register(name, format);\\n            });\\n          } else {\\n            format = format.length ? format : [format];\\n            Tools.each(format, function (format) {\\n              if (typeof format.deep === 'undefined') {\\n                format.deep = !format.selector;\\n              }\\n              if (typeof format.split === 'undefined') {\\n                format.split = !format.selector || format.inline;\\n              }\\n              if (typeof format.remove === 'undefined' && format.selector && !format.inline) {\\n                format.remove = 'none';\\n              }\\n              if (format.selector && format.inline) {\\n                format.mixed = true;\\n                format.block_expand = true;\\n              }\\n              if (typeof format.classes === 'string') {\\n                format.classes = format.classes.split(/\\\\s+/);\\n              }\\n            });\\n            formats[name] = format;\\n          }\\n        }\\n      };\\n      var unregister = function (name) {\\n        if (name && formats[name]) {\\n          delete formats[name];\\n        }\\n        return formats;\\n      };\\n      register(DefaultFormats.get(editor.dom));\\n      register(editor.settings.formats);\\n      return {\\n        get: get,\\n        register: register,\\n        unregister: unregister\\n      };\\n    }\\n\\n    var each$h = Tools.each;\\n    var dom = DOMUtils$1.DOM;\\n    var parsedSelectorToHtml = function (ancestry, editor) {\\n      var elm, item, fragment;\\n      var schema = editor && editor.schema || Schema({});\\n      var decorate = function (elm, item) {\\n        if (item.classes.length) {\\n          dom.addClass(elm, item.classes.join(' '));\\n        }\\n        dom.setAttribs(elm, item.attrs);\\n      };\\n      var createElement = function (sItem) {\\n        var elm;\\n        item = typeof sItem === 'string' ? {\\n          name: sItem,\\n          classes: [],\\n          attrs: {}\\n        } : sItem;\\n        elm = dom.create(item.name);\\n        decorate(elm, item);\\n        return elm;\\n      };\\n      var getRequiredParent = function (elm, candidate) {\\n        var name = typeof elm !== 'string' ? elm.nodeName.toLowerCase() : elm;\\n        var elmRule = schema.getElementRule(name);\\n        var parentsRequired = elmRule && elmRule.parentsRequired;\\n        if (parentsRequired && parentsRequired.length) {\\n          return candidate && Tools.inArray(parentsRequired, candidate) !== -1 ? candidate : parentsRequired[0];\\n        } else {\\n          return false;\\n        }\\n      };\\n      var wrapInHtml = function (elm, ancestry, siblings) {\\n        var parent, parentCandidate, parentRequired;\\n        var ancestor = ancestry.length > 0 && ancestry[0];\\n        var ancestorName = ancestor && ancestor.name;\\n        parentRequired = getRequiredParent(elm, ancestorName);\\n        if (parentRequired) {\\n          if (ancestorName === parentRequired) {\\n            parentCandidate = ancestry[0];\\n            ancestry = ancestry.slice(1);\\n          } else {\\n            parentCandidate = parentRequired;\\n          }\\n        } else if (ancestor) {\\n          parentCandidate = ancestry[0];\\n          ancestry = ancestry.slice(1);\\n        } else if (!siblings) {\\n          return elm;\\n        }\\n        if (parentCandidate) {\\n          parent = createElement(parentCandidate);\\n          parent.appendChild(elm);\\n        }\\n        if (siblings) {\\n          if (!parent) {\\n            parent = dom.create('div');\\n            parent.appendChild(elm);\\n          }\\n          Tools.each(siblings, function (sibling) {\\n            var siblingElm = createElement(sibling);\\n            parent.insertBefore(siblingElm, elm);\\n          });\\n        }\\n        return wrapInHtml(parent, ancestry, parentCandidate && parentCandidate.siblings);\\n      };\\n      if (ancestry && ancestry.length) {\\n        item = ancestry[0];\\n        elm = createElement(item);\\n        fragment = dom.create('div');\\n        fragment.appendChild(wrapInHtml(elm, ancestry.slice(1), item.siblings));\\n        return fragment;\\n      } else {\\n        return '';\\n      }\\n    };\\n    var selectorToHtml = function (selector, editor) {\\n      return parsedSelectorToHtml(parseSelector(selector), editor);\\n    };\\n    var parseSelectorItem = function (item) {\\n      var tagName;\\n      var obj = {\\n        classes: [],\\n        attrs: {}\\n      };\\n      item = obj.selector = Tools.trim(item);\\n      if (item !== '*') {\\n        tagName = item.replace(/(?:([#\\\\.]|::?)([\\\\w\\\\-]+)|(\\\\[)([^\\\\]]+)\\\\]?)/g, function ($0, $1, $2, $3, $4) {\\n          switch ($1) {\\n          case '#':\\n            obj.attrs.id = $2;\\n            break;\\n          case '.':\\n            obj.classes.push($2);\\n            break;\\n          case ':':\\n            if (Tools.inArray('checked disabled enabled read-only required'.split(' '), $2) !== -1) {\\n              obj.attrs[$2] = $2;\\n            }\\n            break;\\n          }\\n          if ($3 === '[') {\\n            var m = $4.match(/([\\\\w\\\\-]+)(?:\\\\=\\\\\\\"([^\\\\\\\"]+))?/);\\n            if (m) {\\n              obj.attrs[m[1]] = m[2];\\n            }\\n          }\\n          return '';\\n        });\\n      }\\n      obj.name = tagName || 'div';\\n      return obj;\\n    };\\n    var parseSelector = function (selector) {\\n      if (!selector || typeof selector !== 'string') {\\n        return [];\\n      }\\n      selector = selector.split(/\\\\s*,\\\\s*/)[0];\\n      selector = selector.replace(/\\\\s*(~\\\\+|~|\\\\+|>)\\\\s*/g, '$1');\\n      return Tools.map(selector.split(/(?:>|\\\\s+(?![^\\\\[\\\\]]+\\\\]))/), function (item) {\\n        var siblings = Tools.map(item.split(/(?:~\\\\+|~|\\\\+)/), parseSelectorItem);\\n        var obj = siblings.pop();\\n        if (siblings.length) {\\n          obj.siblings = siblings;\\n        }\\n        return obj;\\n      }).reverse();\\n    };\\n    var getCssText = function (editor, format) {\\n      var name, previewFrag, previewElm, items;\\n      var previewCss = '', parentFontSize, previewStyles;\\n      previewStyles = editor.settings.preview_styles;\\n      if (previewStyles === false) {\\n        return '';\\n      }\\n      if (typeof previewStyles !== 'string') {\\n        previewStyles = 'font-family font-size font-weight font-style text-decoration ' + 'text-transform color background-color border border-radius outline text-shadow';\\n      }\\n      var removeVars = function (val) {\\n        return val.replace(/%(\\\\w+)/g, '');\\n      };\\n      if (typeof format === 'string') {\\n        format = editor.formatter.get(format);\\n        if (!format) {\\n          return;\\n        }\\n        format = format[0];\\n      }\\n      if ('preview' in format) {\\n        previewStyles = format.preview;\\n        if (previewStyles === false) {\\n          return '';\\n        }\\n      }\\n      name = format.block || format.inline || 'span';\\n      items = parseSelector(format.selector);\\n      if (items.length) {\\n        if (!items[0].name) {\\n          items[0].name = name;\\n        }\\n        name = format.selector;\\n        previewFrag = parsedSelectorToHtml(items, editor);\\n      } else {\\n        previewFrag = parsedSelectorToHtml([name], editor);\\n      }\\n      previewElm = dom.select(name, previewFrag)[0] || previewFrag.firstChild;\\n      each$h(format.styles, function (value, name) {\\n        value = removeVars(value);\\n        if (value) {\\n          dom.setStyle(previewElm, name, value);\\n        }\\n      });\\n      each$h(format.attributes, function (value, name) {\\n        value = removeVars(value);\\n        if (value) {\\n          dom.setAttrib(previewElm, name, value);\\n        }\\n      });\\n      each$h(format.classes, function (value) {\\n        value = removeVars(value);\\n        if (!dom.hasClass(previewElm, value)) {\\n          dom.addClass(previewElm, value);\\n        }\\n      });\\n      editor.fire('PreviewFormats');\\n      dom.setStyles(previewFrag, {\\n        position: 'absolute',\\n        left: -65535\\n      });\\n      editor.getBody().appendChild(previewFrag);\\n      parentFontSize = dom.getStyle(editor.getBody(), 'fontSize', true);\\n      parentFontSize = /px$/.test(parentFontSize) ? parseInt(parentFontSize, 10) : 0;\\n      each$h(previewStyles.split(' '), function (name) {\\n        var value = dom.getStyle(previewElm, name, true);\\n        if (name === 'background-color' && /transparent|rgba\\\\s*\\\\([^)]+,\\\\s*0\\\\)/.test(value)) {\\n          value = dom.getStyle(editor.getBody(), name, true);\\n          if (dom.toHex(value).toLowerCase() === '#ffffff') {\\n            return;\\n          }\\n        }\\n        if (name === 'color') {\\n          if (dom.toHex(value).toLowerCase() === '#000000') {\\n            return;\\n          }\\n        }\\n        if (name === 'font-size') {\\n          if (/em|%$/.test(value)) {\\n            if (parentFontSize === 0) {\\n              return;\\n            }\\n            var numValue = parseFloat(value) / (/%$/.test(value) ? 100 : 1);\\n            value = numValue * parentFontSize + 'px';\\n          }\\n        }\\n        if (name === 'border' && value) {\\n          previewCss += 'padding:0 2px;';\\n        }\\n        previewCss += name + ':' + value + ';';\\n      });\\n      editor.fire('AfterPreviewFormats');\\n      dom.remove(previewFrag);\\n      return previewCss;\\n    };\\n    var Preview = {\\n      getCssText: getCssText,\\n      parseSelector: parseSelector,\\n      selectorToHtml: selectorToHtml\\n    };\\n\\n    var toggle = function (editor, formats, name, vars, node) {\\n      var fmt = formats.get(name);\\n      if (MatchFormat.match(editor, name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle)) {\\n        RemoveFormat.remove(editor, name, vars, node);\\n      } else {\\n        ApplyFormat.applyFormat(editor, name, vars, node);\\n      }\\n    };\\n    var ToggleFormat = { toggle: toggle };\\n\\n    var setup$6 = function (editor) {\\n      editor.addShortcut('meta+b', '', 'Bold');\\n      editor.addShortcut('meta+i', '', 'Italic');\\n      editor.addShortcut('meta+u', '', 'Underline');\\n      for (var i = 1; i <= 6; i++) {\\n        editor.addShortcut('access+' + i, '', [\\n          'FormatBlock',\\n          false,\\n          'h' + i\\n        ]);\\n      }\\n      editor.addShortcut('access+7', '', [\\n        'FormatBlock',\\n        false,\\n        'p'\\n      ]);\\n      editor.addShortcut('access+8', '', [\\n        'FormatBlock',\\n        false,\\n        'div'\\n      ]);\\n      editor.addShortcut('access+9', '', [\\n        'FormatBlock',\\n        false,\\n        'address'\\n      ]);\\n    };\\n    var FormatShortcuts = { setup: setup$6 };\\n\\n    function Formatter (editor) {\\n      var formats = FormatRegistry(editor);\\n      var formatChangeState = Cell(null);\\n      FormatShortcuts.setup(editor);\\n      setup$2(editor);\\n      return {\\n        get: formats.get,\\n        register: formats.register,\\n        unregister: formats.unregister,\\n        apply: curry(ApplyFormat.applyFormat, editor),\\n        remove: curry(RemoveFormat.remove, editor),\\n        toggle: curry(ToggleFormat.toggle, editor, formats),\\n        match: curry(MatchFormat.match, editor),\\n        matchAll: curry(MatchFormat.matchAll, editor),\\n        matchNode: curry(MatchFormat.matchNode, editor),\\n        canApply: curry(MatchFormat.canApply, editor),\\n        formatChanged: curry(FormatChanged.formatChanged, editor, formatChangeState),\\n        getCssText: curry(Preview.getCssText, editor)\\n      };\\n    }\\n\\n    var hasOwnProperty$2 = Object.prototype.hasOwnProperty;\\n    var shallow$1 = function (old, nu) {\\n      return nu;\\n    };\\n    var baseMerge = function (merger) {\\n      return function () {\\n        var objects = new Array(arguments.length);\\n        for (var i = 0; i < objects.length; i++) {\\n          objects[i] = arguments[i];\\n        }\\n        if (objects.length === 0) {\\n          throw new Error('Can\\\\'t merge zero objects');\\n        }\\n        var ret = {};\\n        for (var j = 0; j < objects.length; j++) {\\n          var curObject = objects[j];\\n          for (var key in curObject) {\\n            if (hasOwnProperty$2.call(curObject, key)) {\\n              ret[key] = merger(ret[key], curObject[key]);\\n            }\\n          }\\n        }\\n        return ret;\\n      };\\n    };\\n    var merge = baseMerge(shallow$1);\\n\\n    var register = function (htmlParser, settings, dom) {\\n      htmlParser.addAttributeFilter('data-mce-tabindex', function (nodes, name) {\\n        var i = nodes.length, node;\\n        while (i--) {\\n          node = nodes[i];\\n          node.attr('tabindex', node.attributes.map['data-mce-tabindex']);\\n          node.attr(name, null);\\n        }\\n      });\\n      htmlParser.addAttributeFilter('src,href,style', function (nodes, name) {\\n        var i = nodes.length, node, value;\\n        var internalName = 'data-mce-' + name;\\n        var urlConverter = settings.url_converter;\\n        var urlConverterScope = settings.url_converter_scope;\\n        while (i--) {\\n          node = nodes[i];\\n          value = node.attributes.map[internalName];\\n          if (value !== undefined) {\\n            node.attr(name, value.length > 0 ? value : null);\\n            node.attr(internalName, null);\\n          } else {\\n            value = node.attributes.map[name];\\n            if (name === 'style') {\\n              value = dom.serializeStyle(dom.parseStyle(value), node.name);\\n            } else if (urlConverter) {\\n              value = urlConverter.call(urlConverterScope, value, name, node.name);\\n            }\\n            node.attr(name, value.length > 0 ? value : null);\\n          }\\n        }\\n      });\\n      htmlParser.addAttributeFilter('class', function (nodes) {\\n        var i = nodes.length, node, value;\\n        while (i--) {\\n          node = nodes[i];\\n          value = node.attr('class');\\n          if (value) {\\n            value = node.attr('class').replace(/(?:^|\\\\s)mce-item-\\\\w+(?!\\\\S)/g, '');\\n            node.attr('class', value.length > 0 ? value : null);\\n          }\\n        }\\n      });\\n      htmlParser.addAttributeFilter('data-mce-type', function (nodes, name, args) {\\n        var i = nodes.length, node;\\n        while (i--) {\\n          node = nodes[i];\\n          if (node.attributes.map['data-mce-type'] === 'bookmark' && !args.cleanup) {\\n            var hasChildren = Option.from(node.firstChild).exists(function (firstChild) {\\n              return !Zwsp.isZwsp(firstChild.value);\\n            });\\n            if (hasChildren) {\\n              node.unwrap();\\n            } else {\\n              node.remove();\\n            }\\n          }\\n        }\\n      });\\n      htmlParser.addNodeFilter('noscript', function (nodes) {\\n        var i = nodes.length, node;\\n        while (i--) {\\n          node = nodes[i].firstChild;\\n          if (node) {\\n            node.value = Entities.decode(node.value);\\n          }\\n        }\\n      });\\n      htmlParser.addNodeFilter('script,style', function (nodes, name) {\\n        var i = nodes.length, node, value, type;\\n        var trim = function (value) {\\n          return value.replace(/(<!--\\\\[CDATA\\\\[|\\\\]\\\\]-->)/g, '\\\\n').replace(/^[\\\\r\\\\n]*|[\\\\r\\\\n]*$/g, '').replace(/^\\\\s*((<!--)?(\\\\s*\\\\/\\\\/)?\\\\s*<!\\\\[CDATA\\\\[|(<!--\\\\s*)?\\\\/\\\\*\\\\s*<!\\\\[CDATA\\\\[\\\\s*\\\\*\\\\/|(\\\\/\\\\/)?\\\\s*<!--|\\\\/\\\\*\\\\s*<!--\\\\s*\\\\*\\\\/)\\\\s*[\\\\r\\\\n]*/gi, '').replace(/\\\\s*(\\\\/\\\\*\\\\s*\\\\]\\\\]>\\\\s*\\\\*\\\\/(-->)?|\\\\s*\\\\/\\\\/\\\\s*\\\\]\\\\]>(-->)?|\\\\/\\\\/\\\\s*(-->)?|\\\\]\\\\]>|\\\\/\\\\*\\\\s*-->\\\\s*\\\\*\\\\/|\\\\s*-->\\\\s*)\\\\s*$/g, '');\\n        };\\n        while (i--) {\\n          node = nodes[i];\\n          value = node.firstChild ? node.firstChild.value : '';\\n          if (name === 'script') {\\n            type = node.attr('type');\\n            if (type) {\\n              node.attr('type', type === 'mce-no/type' ? null : type.replace(/^mce\\\\-/, ''));\\n            }\\n            if (settings.element_format === 'xhtml' && value.length > 0) {\\n              node.firstChild.value = '// <![CDATA[\\\\n' + trim(value) + '\\\\n// ]]>';\\n            }\\n          } else {\\n            if (settings.element_format === 'xhtml' && value.length > 0) {\\n              node.firstChild.value = '<!--\\\\n' + trim(value) + '\\\\n-->';\\n            }\\n          }\\n        }\\n      });\\n      htmlParser.addNodeFilter('#comment', function (nodes) {\\n        var i = nodes.length, node;\\n        while (i--) {\\n          node = nodes[i];\\n          if (node.value.indexOf('[CDATA[') === 0) {\\n            node.name = '#cdata';\\n            node.type = 4;\\n            node.value = node.value.replace(/^\\\\[CDATA\\\\[|\\\\]\\\\]$/g, '');\\n          } else if (node.value.indexOf('mce:protected ') === 0) {\\n            node.name = '#text';\\n            node.type = 3;\\n            node.raw = true;\\n            node.value = unescape(node.value).substr(14);\\n          }\\n        }\\n      });\\n      htmlParser.addNodeFilter('xml:namespace,input', function (nodes, name) {\\n        var i = nodes.length, node;\\n        while (i--) {\\n          node = nodes[i];\\n          if (node.type === 7) {\\n            node.remove();\\n          } else if (node.type === 1) {\\n            if (name === 'input' && !('type' in node.attributes.map)) {\\n              node.attr('type', 'text');\\n            }\\n          }\\n        }\\n      });\\n      htmlParser.addAttributeFilter('data-mce-type', function (nodes) {\\n        each(nodes, function (node) {\\n          if (node.attr('data-mce-type') === 'format-caret') {\\n            if (node.isEmpty(htmlParser.schema.getNonEmptyElements())) {\\n              node.remove();\\n            } else {\\n              node.unwrap();\\n            }\\n          }\\n        });\\n      });\\n      htmlParser.addAttributeFilter('data-mce-src,data-mce-href,data-mce-style,' + 'data-mce-selected,data-mce-expando,' + 'data-mce-type,data-mce-resize', function (nodes, name) {\\n        var i = nodes.length;\\n        while (i--) {\\n          nodes[i].attr(name, null);\\n        }\\n      });\\n    };\\n    var trimTrailingBr = function (rootNode) {\\n      var brNode1, brNode2;\\n      var isBr = function (node) {\\n        return node && node.name === 'br';\\n      };\\n      brNode1 = rootNode.lastChild;\\n      if (isBr(brNode1)) {\\n        brNode2 = brNode1.prev;\\n        if (isBr(brNode2)) {\\n          brNode1.remove();\\n          brNode2.remove();\\n        }\\n      }\\n    };\\n    var DomSerializerFilters = {\\n      register: register,\\n      trimTrailingBr: trimTrailingBr\\n    };\\n\\n    var preProcess = function (editor, node, args) {\\n      var impl, doc, oldDoc;\\n      var dom = editor.dom;\\n      node = node.cloneNode(true);\\n      impl = domGlobals.document.implementation;\\n      if (impl.createHTMLDocument) {\\n        doc = impl.createHTMLDocument('');\\n        Tools.each(node.nodeName === 'BODY' ? node.childNodes : [node], function (node) {\\n          doc.body.appendChild(doc.importNode(node, true));\\n        });\\n        if (node.nodeName !== 'BODY') {\\n          node = doc.body.firstChild;\\n        } else {\\n          node = doc.body;\\n        }\\n        oldDoc = dom.doc;\\n        dom.doc = doc;\\n      }\\n      Events.firePreProcess(editor, merge(args, { node: node }));\\n      if (oldDoc) {\\n        dom.doc = oldDoc;\\n      }\\n      return node;\\n    };\\n    var shouldFireEvent = function (editor, args) {\\n      return editor && editor.hasEventListeners('PreProcess') && !args.no_events;\\n    };\\n    var process = function (editor, node, args) {\\n      return shouldFireEvent(editor, args) ? preProcess(editor, node, args) : node;\\n    };\\n    var DomSerializerPreProcess = { process: process };\\n\\n    var removeAttrs = function (node, names) {\\n      each(names, function (name) {\\n        node.attr(name, null);\\n      });\\n    };\\n    var addFontToSpansFilter = function (domParser, styles, fontSizes) {\\n      domParser.addNodeFilter('font', function (nodes) {\\n        each(nodes, function (node) {\\n          var props = styles.parse(node.attr('style'));\\n          var color = node.attr('color');\\n          var face = node.attr('face');\\n          var size = node.attr('size');\\n          if (color) {\\n            props.color = color;\\n          }\\n          if (face) {\\n            props['font-family'] = face;\\n          }\\n          if (size) {\\n            props['font-size'] = fontSizes[parseInt(node.attr('size'), 10) - 1];\\n          }\\n          node.name = 'span';\\n          node.attr('style', styles.serialize(props));\\n          removeAttrs(node, [\\n            'color',\\n            'face',\\n            'size'\\n          ]);\\n        });\\n      });\\n    };\\n    var addStrikeToSpanFilter = function (domParser, styles) {\\n      domParser.addNodeFilter('strike', function (nodes) {\\n        each(nodes, function (node) {\\n          var props = styles.parse(node.attr('style'));\\n          props['text-decoration'] = 'line-through';\\n          node.name = 'span';\\n          node.attr('style', styles.serialize(props));\\n        });\\n      });\\n    };\\n    var addFilters = function (domParser, settings) {\\n      var styles = Styles();\\n      if (settings.convert_fonts_to_spans) {\\n        addFontToSpansFilter(domParser, styles, Tools.explode(settings.font_size_legacy_values));\\n      }\\n      addStrikeToSpanFilter(domParser, styles);\\n    };\\n    var register$1 = function (domParser, settings) {\\n      if (settings.inline_styles) {\\n        addFilters(domParser, settings);\\n      }\\n    };\\n    var LegacyFilter = { register: register$1 };\\n\\n    var whiteSpaceRegExp$3 = /^[ \\\\t\\\\r\\\\n]*$/;\\n    var typeLookup = {\\n      '#text': 3,\\n      '#comment': 8,\\n      '#cdata': 4,\\n      '#pi': 7,\\n      '#doctype': 10,\\n      '#document-fragment': 11\\n    };\\n    var walk$2 = function (node, root, prev) {\\n      var sibling;\\n      var parent;\\n      var startName = prev ? 'lastChild' : 'firstChild';\\n      var siblingName = prev ? 'prev' : 'next';\\n      if (node[startName]) {\\n        return node[startName];\\n      }\\n      if (node !== root) {\\n        sibling = node[siblingName];\\n        if (sibling) {\\n          return sibling;\\n        }\\n        for (parent = node.parent; parent && parent !== root; parent = parent.parent) {\\n          sibling = parent[siblingName];\\n          if (sibling) {\\n            return sibling;\\n          }\\n        }\\n      }\\n    };\\n    var Node$1 = function () {\\n      function Node(name, type) {\\n        this.name = name;\\n        this.type = type;\\n        if (type === 1) {\\n          this.attributes = [];\\n          this.attributes.map = {};\\n        }\\n      }\\n      Node.create = function (name, attrs) {\\n        var node, attrName;\\n        node = new Node(name, typeLookup[name] || 1);\\n        if (attrs) {\\n          for (attrName in attrs) {\\n            node.attr(attrName, attrs[attrName]);\\n          }\\n        }\\n        return node;\\n      };\\n      Node.prototype.replace = function (node) {\\n        var self = this;\\n        if (node.parent) {\\n          node.remove();\\n        }\\n        self.insert(node, self);\\n        self.remove();\\n        return self;\\n      };\\n      Node.prototype.attr = function (name, value) {\\n        var self = this;\\n        var attrs, i;\\n        if (typeof name !== 'string') {\\n          for (i in name) {\\n            self.attr(i, name[i]);\\n          }\\n          return self;\\n        }\\n        if (attrs = self.attributes) {\\n          if (value !== undefined) {\\n            if (value === null) {\\n              if (name in attrs.map) {\\n                delete attrs.map[name];\\n                i = attrs.length;\\n                while (i--) {\\n                  if (attrs[i].name === name) {\\n                    attrs = attrs.splice(i, 1);\\n                    return self;\\n                  }\\n                }\\n              }\\n              return self;\\n            }\\n            if (name in attrs.map) {\\n              i = attrs.length;\\n              while (i--) {\\n                if (attrs[i].name === name) {\\n                  attrs[i].value = value;\\n                  break;\\n                }\\n              }\\n            } else {\\n              attrs.push({\\n                name: name,\\n                value: value\\n              });\\n            }\\n            attrs.map[name] = value;\\n            return self;\\n          }\\n          return attrs.map[name];\\n        }\\n      };\\n      Node.prototype.clone = function () {\\n        var self = this;\\n        var clone = new Node(self.name, self.type);\\n        var i, l, selfAttrs, selfAttr, cloneAttrs;\\n        if (selfAttrs = self.attributes) {\\n          cloneAttrs = [];\\n          cloneAttrs.map = {};\\n          for (i = 0, l = selfAttrs.length; i < l; i++) {\\n            selfAttr = selfAttrs[i];\\n            if (selfAttr.name !== 'id') {\\n              cloneAttrs[cloneAttrs.length] = {\\n                name: selfAttr.name,\\n                value: selfAttr.value\\n              };\\n              cloneAttrs.map[selfAttr.name] = selfAttr.value;\\n            }\\n          }\\n          clone.attributes = cloneAttrs;\\n        }\\n        clone.value = self.value;\\n        clone.shortEnded = self.shortEnded;\\n        return clone;\\n      };\\n      Node.prototype.wrap = function (wrapper) {\\n        var self = this;\\n        self.parent.insert(wrapper, self);\\n        wrapper.append(self);\\n        return self;\\n      };\\n      Node.prototype.unwrap = function () {\\n        var self = this;\\n        var node, next;\\n        for (node = self.firstChild; node;) {\\n          next = node.next;\\n          self.insert(node, self, true);\\n          node = next;\\n        }\\n        self.remove();\\n      };\\n      Node.prototype.remove = function () {\\n        var self = this, parent = self.parent, next = self.next, prev = self.prev;\\n        if (parent) {\\n          if (parent.firstChild === self) {\\n            parent.firstChild = next;\\n            if (next) {\\n              next.prev = null;\\n            }\\n          } else {\\n            prev.next = next;\\n          }\\n          if (parent.lastChild === self) {\\n            parent.lastChild = prev;\\n            if (prev) {\\n              prev.next = null;\\n            }\\n          } else {\\n            next.prev = prev;\\n          }\\n          self.parent = self.next = self.prev = null;\\n        }\\n        return self;\\n      };\\n      Node.prototype.append = function (node) {\\n        var self = this;\\n        var last;\\n        if (node.parent) {\\n          node.remove();\\n        }\\n        last = self.lastChild;\\n        if (last) {\\n          last.next = node;\\n          node.prev = last;\\n          self.lastChild = node;\\n        } else {\\n          self.lastChild = self.firstChild = node;\\n        }\\n        node.parent = self;\\n        return node;\\n      };\\n      Node.prototype.insert = function (node, refNode, before) {\\n        var parent;\\n        if (node.parent) {\\n          node.remove();\\n        }\\n        parent = refNode.parent || this;\\n        if (before) {\\n          if (refNode === parent.firstChild) {\\n            parent.firstChild = node;\\n          } else {\\n            refNode.prev.next = node;\\n          }\\n          node.prev = refNode.prev;\\n          node.next = refNode;\\n          refNode.prev = node;\\n        } else {\\n          if (refNode === parent.lastChild) {\\n            parent.lastChild = node;\\n          } else {\\n            refNode.next.prev = node;\\n          }\\n          node.next = refNode.next;\\n          node.prev = refNode;\\n          refNode.next = node;\\n        }\\n        node.parent = parent;\\n        return node;\\n      };\\n      Node.prototype.getAll = function (name) {\\n        var self = this;\\n        var node;\\n        var collection = [];\\n        for (node = self.firstChild; node; node = walk$2(node, self)) {\\n          if (node.name === name) {\\n            collection.push(node);\\n          }\\n        }\\n        return collection;\\n      };\\n      Node.prototype.empty = function () {\\n        var self = this;\\n        var nodes, i, node;\\n        if (self.firstChild) {\\n          nodes = [];\\n          for (node = self.firstChild; node; node = walk$2(node, self)) {\\n            nodes.push(node);\\n          }\\n          i = nodes.length;\\n          while (i--) {\\n            node = nodes[i];\\n            node.parent = node.firstChild = node.lastChild = node.next = node.prev = null;\\n          }\\n        }\\n        self.firstChild = self.lastChild = null;\\n        return self;\\n      };\\n      Node.prototype.isEmpty = function (elements, whitespace, predicate) {\\n        var self = this;\\n        var node = self.firstChild, i, name;\\n        whitespace = whitespace || {};\\n        if (node) {\\n          do {\\n            if (node.type === 1) {\\n              if (node.attributes.map['data-mce-bogus']) {\\n                continue;\\n              }\\n              if (elements[node.name]) {\\n                return false;\\n              }\\n              i = node.attributes.length;\\n              while (i--) {\\n                name = node.attributes[i].name;\\n                if (name === 'name' || name.indexOf('data-mce-bookmark') === 0) {\\n                  return false;\\n                }\\n              }\\n            }\\n            if (node.type === 8) {\\n              return false;\\n            }\\n            if (node.type === 3 && !whiteSpaceRegExp$3.test(node.value)) {\\n              return false;\\n            }\\n            if (node.type === 3 && node.parent && whitespace[node.parent.name] && whiteSpaceRegExp$3.test(node.value)) {\\n              return false;\\n            }\\n            if (predicate && predicate(node)) {\\n              return false;\\n            }\\n          } while (node = walk$2(node, self));\\n        }\\n        return true;\\n      };\\n      Node.prototype.walk = function (prev) {\\n        return walk$2(this, null, prev);\\n      };\\n      return Node;\\n    }();\\n\\n    var paddEmptyNode = function (settings, args, blockElements, node) {\\n      var brPreferred = settings.padd_empty_with_br || args.insert;\\n      if (brPreferred && blockElements[node.name]) {\\n        node.empty().append(new Node$1('br', 1)).shortEnded = true;\\n      } else {\\n        node.empty().append(new Node$1('#text', 3)).value = '\\\\xA0';\\n      }\\n    };\\n    var isPaddedWithNbsp = function (node) {\\n      return hasOnlyChild(node, '#text') && node.firstChild.value === '\\\\xA0';\\n    };\\n    var hasOnlyChild = function (node, name) {\\n      return node && node.firstChild && node.firstChild === node.lastChild && node.firstChild.name === name;\\n    };\\n    var isPadded = function (schema, node) {\\n      var rule = schema.getElementRule(node.name);\\n      return rule && rule.paddEmpty;\\n    };\\n    var isEmpty$2 = function (schema, nonEmptyElements, whitespaceElements, node) {\\n      return node.isEmpty(nonEmptyElements, whitespaceElements, function (node) {\\n        return isPadded(schema, node);\\n      });\\n    };\\n    var isLineBreakNode = function (node, blockElements) {\\n      return node && (blockElements[node.name] || node.name === 'br');\\n    };\\n\\n    var register$2 = function (parser, settings) {\\n      var schema = parser.schema;\\n      if (settings.remove_trailing_brs) {\\n        parser.addNodeFilter('br', function (nodes, _, args) {\\n          var i;\\n          var l = nodes.length;\\n          var node;\\n          var blockElements = Tools.extend({}, schema.getBlockElements());\\n          var nonEmptyElements = schema.getNonEmptyElements();\\n          var parent, lastParent, prev, prevName;\\n          var whiteSpaceElements = schema.getWhiteSpaceElements();\\n          var elementRule, textNode;\\n          blockElements.body = 1;\\n          for (i = 0; i < l; i++) {\\n            node = nodes[i];\\n            parent = node.parent;\\n            if (blockElements[node.parent.name] && node === parent.lastChild) {\\n              prev = node.prev;\\n              while (prev) {\\n                prevName = prev.name;\\n                if (prevName !== 'span' || prev.attr('data-mce-type') !== 'bookmark') {\\n                  if (prevName !== 'br') {\\n                    break;\\n                  }\\n                  if (prevName === 'br') {\\n                    node = null;\\n                    break;\\n                  }\\n                }\\n                prev = prev.prev;\\n              }\\n              if (node) {\\n                node.remove();\\n                if (isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, parent)) {\\n                  elementRule = schema.getElementRule(parent.name);\\n                  if (elementRule) {\\n                    if (elementRule.removeEmpty) {\\n                      parent.remove();\\n                    } else if (elementRule.paddEmpty) {\\n                      paddEmptyNode(settings, args, blockElements, parent);\\n                    }\\n                  }\\n                }\\n              }\\n            } else {\\n              lastParent = node;\\n              while (parent && parent.firstChild === lastParent && parent.lastChild === lastParent) {\\n                lastParent = parent;\\n                if (blockElements[parent.name]) {\\n                  break;\\n                }\\n                parent = parent.parent;\\n              }\\n              if (lastParent === parent && settings.padd_empty_with_br !== true) {\\n                textNode = new Node$1('#text', 3);\\n                textNode.value = '\\\\xA0';\\n                node.replace(textNode);\\n              }\\n            }\\n          }\\n        });\\n      }\\n      parser.addAttributeFilter('href', function (nodes) {\\n        var i = nodes.length, node;\\n        var appendRel = function (rel) {\\n          var parts = rel.split(' ').filter(function (p) {\\n            return p.length > 0;\\n          });\\n          return parts.concat(['noopener']).sort().join(' ');\\n        };\\n        var addNoOpener = function (rel) {\\n          var newRel = rel ? Tools.trim(rel) : '';\\n          if (!/\\\\b(noopener)\\\\b/g.test(newRel)) {\\n            return appendRel(newRel);\\n          } else {\\n            return newRel;\\n          }\\n        };\\n        if (!settings.allow_unsafe_link_target) {\\n          while (i--) {\\n            node = nodes[i];\\n            if (node.name === 'a' && node.attr('target') === '_blank') {\\n              node.attr('rel', addNoOpener(node.attr('rel')));\\n            }\\n          }\\n        }\\n      });\\n      if (!settings.allow_html_in_named_anchor) {\\n        parser.addAttributeFilter('id,name', function (nodes) {\\n          var i = nodes.length, sibling, prevSibling, parent, node;\\n          while (i--) {\\n            node = nodes[i];\\n            if (node.name === 'a' && node.firstChild && !node.attr('href')) {\\n              parent = node.parent;\\n              sibling = node.lastChild;\\n              do {\\n                prevSibling = sibling.prev;\\n                parent.insert(sibling, node);\\n                sibling = prevSibling;\\n              } while (sibling);\\n            }\\n          }\\n        });\\n      }\\n      if (settings.fix_list_elements) {\\n        parser.addNodeFilter('ul,ol', function (nodes) {\\n          var i = nodes.length, node, parentNode;\\n          while (i--) {\\n            node = nodes[i];\\n            parentNode = node.parent;\\n            if (parentNode.name === 'ul' || parentNode.name === 'ol') {\\n              if (node.prev && node.prev.name === 'li') {\\n                node.prev.append(node);\\n              } else {\\n                var li = new Node$1('li', 1);\\n                li.attr('style', 'list-style-type: none');\\n                node.wrap(li);\\n              }\\n            }\\n          }\\n        });\\n      }\\n      if (settings.validate && schema.getValidClasses()) {\\n        parser.addAttributeFilter('class', function (nodes) {\\n          var i = nodes.length, node, classList, ci, className, classValue;\\n          var validClasses = schema.getValidClasses();\\n          var validClassesMap, valid;\\n          while (i--) {\\n            node = nodes[i];\\n            classList = node.attr('class').split(' ');\\n            classValue = '';\\n            for (ci = 0; ci < classList.length; ci++) {\\n              className = classList[ci];\\n              valid = false;\\n              validClassesMap = validClasses['*'];\\n              if (validClassesMap && validClassesMap[className]) {\\n                valid = true;\\n              }\\n              validClassesMap = validClasses[node.name];\\n              if (!valid && validClassesMap && validClassesMap[className]) {\\n                valid = true;\\n              }\\n              if (valid) {\\n                if (classValue) {\\n                  classValue += ' ';\\n                }\\n                classValue += className;\\n              }\\n            }\\n            if (!classValue.length) {\\n              classValue = null;\\n            }\\n            node.attr('class', classValue);\\n          }\\n        });\\n      }\\n    };\\n\\n    var makeMap$4 = Tools.makeMap, each$i = Tools.each, explode$3 = Tools.explode, extend$3 = Tools.extend;\\n    function DomParser (settings, schema) {\\n      if (schema === void 0) {\\n        schema = Schema();\\n      }\\n      var nodeFilters = {};\\n      var attributeFilters = [];\\n      var matchedNodes = {};\\n      var matchedAttributes = {};\\n      settings = settings || {};\\n      settings.validate = 'validate' in settings ? settings.validate : true;\\n      settings.root_name = settings.root_name || 'body';\\n      var fixInvalidChildren = function (nodes) {\\n        var ni, node, parent, parents, newParent, currentNode, tempNode, childNode, i;\\n        var nonEmptyElements, whitespaceElements, nonSplitableElements, textBlockElements, specialElements, sibling, nextNode;\\n        nonSplitableElements = makeMap$4('tr,td,th,tbody,thead,tfoot,table');\\n        nonEmptyElements = schema.getNonEmptyElements();\\n        whitespaceElements = schema.getWhiteSpaceElements();\\n        textBlockElements = schema.getTextBlockElements();\\n        specialElements = schema.getSpecialElements();\\n        for (ni = 0; ni < nodes.length; ni++) {\\n          node = nodes[ni];\\n          if (!node.parent || node.fixed) {\\n            continue;\\n          }\\n          if (textBlockElements[node.name] && node.parent.name === 'li') {\\n            sibling = node.next;\\n            while (sibling) {\\n              if (textBlockElements[sibling.name]) {\\n                sibling.name = 'li';\\n                sibling.fixed = true;\\n                node.parent.insert(sibling, node.parent);\\n              } else {\\n                break;\\n              }\\n              sibling = sibling.next;\\n            }\\n            node.unwrap(node);\\n            continue;\\n          }\\n          parents = [node];\\n          for (parent = node.parent; parent && !schema.isValidChild(parent.name, node.name) && !nonSplitableElements[parent.name]; parent = parent.parent) {\\n            parents.push(parent);\\n          }\\n          if (parent && parents.length > 1) {\\n            parents.reverse();\\n            newParent = currentNode = filterNode(parents[0].clone());\\n            for (i = 0; i < parents.length - 1; i++) {\\n              if (schema.isValidChild(currentNode.name, parents[i].name)) {\\n                tempNode = filterNode(parents[i].clone());\\n                currentNode.append(tempNode);\\n              } else {\\n                tempNode = currentNode;\\n              }\\n              for (childNode = parents[i].firstChild; childNode && childNode !== parents[i + 1];) {\\n                nextNode = childNode.next;\\n                tempNode.append(childNode);\\n                childNode = nextNode;\\n              }\\n              currentNode = tempNode;\\n            }\\n            if (!isEmpty$2(schema, nonEmptyElements, whitespaceElements, newParent)) {\\n              parent.insert(newParent, parents[0], true);\\n              parent.insert(node, newParent);\\n            } else {\\n              parent.insert(node, parents[0], true);\\n            }\\n            parent = parents[0];\\n            if (isEmpty$2(schema, nonEmptyElements, whitespaceElements, parent) || hasOnlyChild(parent, 'br')) {\\n              parent.empty().remove();\\n            }\\n          } else if (node.parent) {\\n            if (node.name === 'li') {\\n              sibling = node.prev;\\n              if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) {\\n                sibling.append(node);\\n                continue;\\n              }\\n              sibling = node.next;\\n              if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) {\\n                sibling.insert(node, sibling.firstChild, true);\\n                continue;\\n              }\\n              node.wrap(filterNode(new Node$1('ul', 1)));\\n              continue;\\n            }\\n            if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) {\\n              node.wrap(filterNode(new Node$1('div', 1)));\\n            } else {\\n              if (specialElements[node.name]) {\\n                node.empty().remove();\\n              } else {\\n                node.unwrap();\\n              }\\n            }\\n          }\\n        }\\n      };\\n      var filterNode = function (node) {\\n        var i, name, list;\\n        name = node.name;\\n        if (name in nodeFilters) {\\n          list = matchedNodes[name];\\n          if (list) {\\n            list.push(node);\\n          } else {\\n            matchedNodes[name] = [node];\\n          }\\n        }\\n        i = attributeFilters.length;\\n        while (i--) {\\n          name = attributeFilters[i].name;\\n          if (name in node.attributes.map) {\\n            list = matchedAttributes[name];\\n            if (list) {\\n              list.push(node);\\n            } else {\\n              matchedAttributes[name] = [node];\\n            }\\n          }\\n        }\\n        return node;\\n      };\\n      var addNodeFilter = function (name, callback) {\\n        each$i(explode$3(name), function (name) {\\n          var list = nodeFilters[name];\\n          if (!list) {\\n            nodeFilters[name] = list = [];\\n          }\\n          list.push(callback);\\n        });\\n      };\\n      var getNodeFilters = function () {\\n        var out = [];\\n        for (var name in nodeFilters) {\\n          if (nodeFilters.hasOwnProperty(name)) {\\n            out.push({\\n              name: name,\\n              callbacks: nodeFilters[name]\\n            });\\n          }\\n        }\\n        return out;\\n      };\\n      var addAttributeFilter = function (name, callback) {\\n        each$i(explode$3(name), function (name) {\\n          var i;\\n          for (i = 0; i < attributeFilters.length; i++) {\\n            if (attributeFilters[i].name === name) {\\n              attributeFilters[i].callbacks.push(callback);\\n              return;\\n            }\\n          }\\n          attributeFilters.push({\\n            name: name,\\n            callbacks: [callback]\\n          });\\n        });\\n      };\\n      var getAttributeFilters = function () {\\n        return [].concat(attributeFilters);\\n      };\\n      var parse = function (html, args) {\\n        var parser, nodes, i, l, fi, fl, list, name;\\n        var blockElements;\\n        var invalidChildren = [];\\n        var isInWhiteSpacePreservedElement;\\n        var node;\\n        args = args || {};\\n        matchedNodes = {};\\n        matchedAttributes = {};\\n        blockElements = extend$3(makeMap$4('script,style,head,html,body,title,meta,param'), schema.getBlockElements());\\n        var nonEmptyElements = schema.getNonEmptyElements();\\n        var children = schema.children;\\n        var validate = settings.validate;\\n        var rootBlockName = 'forced_root_block' in args ? args.forced_root_block : settings.forced_root_block;\\n        var whiteSpaceElements = schema.getWhiteSpaceElements();\\n        var startWhiteSpaceRegExp = /^[ \\\\t\\\\r\\\\n]+/;\\n        var endWhiteSpaceRegExp = /[ \\\\t\\\\r\\\\n]+$/;\\n        var allWhiteSpaceRegExp = /[ \\\\t\\\\r\\\\n]+/g;\\n        var isAllWhiteSpaceRegExp = /^[ \\\\t\\\\r\\\\n]+$/;\\n        isInWhiteSpacePreservedElement = whiteSpaceElements.hasOwnProperty(args.context) || whiteSpaceElements.hasOwnProperty(settings.root_name);\\n        var addRootBlocks = function () {\\n          var node = rootNode.firstChild, next, rootBlockNode;\\n          var trim = function (rootBlockNode) {\\n            if (rootBlockNode) {\\n              node = rootBlockNode.firstChild;\\n              if (node && node.type === 3) {\\n                node.value = node.value.replace(startWhiteSpaceRegExp, '');\\n              }\\n              node = rootBlockNode.lastChild;\\n              if (node && node.type === 3) {\\n                node.value = node.value.replace(endWhiteSpaceRegExp, '');\\n              }\\n            }\\n          };\\n          if (!schema.isValidChild(rootNode.name, rootBlockName.toLowerCase())) {\\n            return;\\n          }\\n          while (node) {\\n            next = node.next;\\n            if (node.type === 3 || node.type === 1 && node.name !== 'p' && !blockElements[node.name] && !node.attr('data-mce-type')) {\\n              if (!rootBlockNode) {\\n                rootBlockNode = createNode(rootBlockName, 1);\\n                rootBlockNode.attr(settings.forced_root_block_attrs);\\n                rootNode.insert(rootBlockNode, node);\\n                rootBlockNode.append(node);\\n              } else {\\n                rootBlockNode.append(node);\\n              }\\n            } else {\\n              trim(rootBlockNode);\\n              rootBlockNode = null;\\n            }\\n            node = next;\\n          }\\n          trim(rootBlockNode);\\n        };\\n        var createNode = function (name, type) {\\n          var node = new Node$1(name, type);\\n          var list;\\n          if (name in nodeFilters) {\\n            list = matchedNodes[name];\\n            if (list) {\\n              list.push(node);\\n            } else {\\n              matchedNodes[name] = [node];\\n            }\\n          }\\n          return node;\\n        };\\n        var removeWhitespaceBefore = function (node) {\\n          var textNode, textNodeNext, textVal, sibling;\\n          var blockElements = schema.getBlockElements();\\n          for (textNode = node.prev; textNode && textNode.type === 3;) {\\n            textVal = textNode.value.replace(endWhiteSpaceRegExp, '');\\n            if (textVal.length > 0) {\\n              textNode.value = textVal;\\n              return;\\n            }\\n            textNodeNext = textNode.next;\\n            if (textNodeNext) {\\n              if (textNodeNext.type === 3 && textNodeNext.value.length) {\\n                textNode = textNode.prev;\\n                continue;\\n              }\\n              if (!blockElements[textNodeNext.name] && textNodeNext.name !== 'script' && textNodeNext.name !== 'style') {\\n                textNode = textNode.prev;\\n                continue;\\n              }\\n            }\\n            sibling = textNode.prev;\\n            textNode.remove();\\n            textNode = sibling;\\n          }\\n        };\\n        var cloneAndExcludeBlocks = function (input) {\\n          var name;\\n          var output = {};\\n          for (name in input) {\\n            if (name !== 'li' && name !== 'p') {\\n              output[name] = input[name];\\n            }\\n          }\\n          return output;\\n        };\\n        parser = SaxParser$1({\\n          validate: validate,\\n          allow_script_urls: settings.allow_script_urls,\\n          allow_conditional_comments: settings.allow_conditional_comments,\\n          self_closing_elements: cloneAndExcludeBlocks(schema.getSelfClosingElements()),\\n          cdata: function (text) {\\n            node.append(createNode('#cdata', 4)).value = text;\\n          },\\n          text: function (text, raw) {\\n            var textNode;\\n            if (!isInWhiteSpacePreservedElement) {\\n              text = text.replace(allWhiteSpaceRegExp, ' ');\\n              if (isLineBreakNode(node.lastChild, blockElements)) {\\n                text = text.replace(startWhiteSpaceRegExp, '');\\n              }\\n            }\\n            if (text.length !== 0) {\\n              textNode = createNode('#text', 3);\\n              textNode.raw = !!raw;\\n              node.append(textNode).value = text;\\n            }\\n          },\\n          comment: function (text) {\\n            node.append(createNode('#comment', 8)).value = text;\\n          },\\n          pi: function (name, text) {\\n            node.append(createNode(name, 7)).value = text;\\n            removeWhitespaceBefore(node);\\n          },\\n          doctype: function (text) {\\n            var newNode;\\n            newNode = node.append(createNode('#doctype', 10));\\n            newNode.value = text;\\n            removeWhitespaceBefore(node);\\n          },\\n          start: function (name, attrs, empty) {\\n            var newNode, attrFiltersLen, elementRule, attrName, parent;\\n            elementRule = validate ? schema.getElementRule(name) : {};\\n            if (elementRule) {\\n              newNode = createNode(elementRule.outputName || name, 1);\\n              newNode.attributes = attrs;\\n              newNode.shortEnded = empty;\\n              node.append(newNode);\\n              parent = children[node.name];\\n              if (parent && children[newNode.name] && !parent[newNode.name]) {\\n                invalidChildren.push(newNode);\\n              }\\n              attrFiltersLen = attributeFilters.length;\\n              while (attrFiltersLen--) {\\n                attrName = attributeFilters[attrFiltersLen].name;\\n                if (attrName in attrs.map) {\\n                  list = matchedAttributes[attrName];\\n                  if (list) {\\n                    list.push(newNode);\\n                  } else {\\n                    matchedAttributes[attrName] = [newNode];\\n                  }\\n                }\\n              }\\n              if (blockElements[name]) {\\n                removeWhitespaceBefore(newNode);\\n              }\\n              if (!empty) {\\n                node = newNode;\\n              }\\n              if (!isInWhiteSpacePreservedElement && whiteSpaceElements[name]) {\\n                isInWhiteSpacePreservedElement = true;\\n              }\\n            }\\n          },\\n          end: function (name) {\\n            var textNode, elementRule, text, sibling, tempNode;\\n            elementRule = validate ? schema.getElementRule(name) : {};\\n            if (elementRule) {\\n              if (blockElements[name]) {\\n                if (!isInWhiteSpacePreservedElement) {\\n                  textNode = node.firstChild;\\n                  if (textNode && textNode.type === 3) {\\n                    text = textNode.value.replace(startWhiteSpaceRegExp, '');\\n                    if (text.length > 0) {\\n                      textNode.value = text;\\n                      textNode = textNode.next;\\n                    } else {\\n                      sibling = textNode.next;\\n                      textNode.remove();\\n                      textNode = sibling;\\n                      while (textNode && textNode.type === 3) {\\n                        text = textNode.value;\\n                        sibling = textNode.next;\\n                        if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) {\\n                          textNode.remove();\\n                          textNode = sibling;\\n                        }\\n                        textNode = sibling;\\n                      }\\n                    }\\n                  }\\n                  textNode = node.lastChild;\\n                  if (textNode && textNode.type === 3) {\\n                    text = textNode.value.replace(endWhiteSpaceRegExp, '');\\n                    if (text.length > 0) {\\n                      textNode.value = text;\\n                      textNode = textNode.prev;\\n                    } else {\\n                      sibling = textNode.prev;\\n                      textNode.remove();\\n                      textNode = sibling;\\n                      while (textNode && textNode.type === 3) {\\n                        text = textNode.value;\\n                        sibling = textNode.prev;\\n                        if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) {\\n                          textNode.remove();\\n                          textNode = sibling;\\n                        }\\n                        textNode = sibling;\\n                      }\\n                    }\\n                  }\\n                }\\n              }\\n              if (isInWhiteSpacePreservedElement && whiteSpaceElements[name]) {\\n                isInWhiteSpacePreservedElement = false;\\n              }\\n              if (elementRule.removeEmpty && isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, node)) {\\n                if (!node.attributes.map.name && !node.attr('id')) {\\n                  tempNode = node.parent;\\n                  if (blockElements[node.name]) {\\n                    node.empty().remove();\\n                  } else {\\n                    node.unwrap();\\n                  }\\n                  node = tempNode;\\n                  return;\\n                }\\n              }\\n              if (elementRule.paddEmpty && (isPaddedWithNbsp(node) || isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, node))) {\\n                paddEmptyNode(settings, args, blockElements, node);\\n              }\\n              node = node.parent;\\n            }\\n          }\\n        }, schema);\\n        var rootNode = node = new Node$1(args.context || settings.root_name, 11);\\n        parser.parse(html);\\n        if (validate && invalidChildren.length) {\\n          if (!args.context) {\\n            fixInvalidChildren(invalidChildren);\\n          } else {\\n            args.invalid = true;\\n          }\\n        }\\n        if (rootBlockName && (rootNode.name === 'body' || args.isRootContent)) {\\n          addRootBlocks();\\n        }\\n        if (!args.invalid) {\\n          for (name in matchedNodes) {\\n            list = nodeFilters[name];\\n            nodes = matchedNodes[name];\\n            fi = nodes.length;\\n            while (fi--) {\\n              if (!nodes[fi].parent) {\\n                nodes.splice(fi, 1);\\n              }\\n            }\\n            for (i = 0, l = list.length; i < l; i++) {\\n              list[i](nodes, name, args);\\n            }\\n          }\\n          for (i = 0, l = attributeFilters.length; i < l; i++) {\\n            list = attributeFilters[i];\\n            if (list.name in matchedAttributes) {\\n              nodes = matchedAttributes[list.name];\\n              fi = nodes.length;\\n              while (fi--) {\\n                if (!nodes[fi].parent) {\\n                  nodes.splice(fi, 1);\\n                }\\n              }\\n              for (fi = 0, fl = list.callbacks.length; fi < fl; fi++) {\\n                list.callbacks[fi](nodes, list.name, args);\\n              }\\n            }\\n          }\\n        }\\n        return rootNode;\\n      };\\n      var exports = {\\n        schema: schema,\\n        addAttributeFilter: addAttributeFilter,\\n        getAttributeFilters: getAttributeFilters,\\n        addNodeFilter: addNodeFilter,\\n        getNodeFilters: getNodeFilters,\\n        filterNode: filterNode,\\n        parse: parse\\n      };\\n      register$2(exports, settings);\\n      LegacyFilter.register(exports, settings);\\n      return exports;\\n    }\\n\\n    var addTempAttr = function (htmlParser, tempAttrs, name) {\\n      if (Tools.inArray(tempAttrs, name) === -1) {\\n        htmlParser.addAttributeFilter(name, function (nodes, name) {\\n          var i = nodes.length;\\n          while (i--) {\\n            nodes[i].attr(name, null);\\n          }\\n        });\\n        tempAttrs.push(name);\\n      }\\n    };\\n    var postProcess$1 = function (editor, args, content) {\\n      if (!args.no_events && editor) {\\n        var outArgs = Events.firePostProcess(editor, merge(args, { content: content }));\\n        return outArgs.content;\\n      } else {\\n        return content;\\n      }\\n    };\\n    var getHtmlFromNode = function (dom, node, args) {\\n      var html = Zwsp.trim(args.getInner ? node.innerHTML : dom.getOuterHTML(node));\\n      return args.selection || isWsPreserveElement(Element.fromDom(node)) ? html : Tools.trim(html);\\n    };\\n    var parseHtml = function (htmlParser, html, args) {\\n      var parserArgs = args.selection ? merge({ forced_root_block: false }, args) : args;\\n      var rootNode = htmlParser.parse(html, parserArgs);\\n      DomSerializerFilters.trimTrailingBr(rootNode);\\n      return rootNode;\\n    };\\n    var serializeNode = function (settings, schema, node) {\\n      var htmlSerializer = HtmlSerializer(settings, schema);\\n      return htmlSerializer.serialize(node);\\n    };\\n    var toHtml = function (editor, settings, schema, rootNode, args) {\\n      var content = serializeNode(settings, schema, rootNode);\\n      return postProcess$1(editor, args, content);\\n    };\\n    function DomSerializer (settings, editor) {\\n      var dom, schema, htmlParser;\\n      var tempAttrs = ['data-mce-selected'];\\n      dom = editor && editor.dom ? editor.dom : DOMUtils$1.DOM;\\n      schema = editor && editor.schema ? editor.schema : Schema(settings);\\n      settings.entity_encoding = settings.entity_encoding || 'named';\\n      settings.remove_trailing_brs = 'remove_trailing_brs' in settings ? settings.remove_trailing_brs : true;\\n      htmlParser = DomParser(settings, schema);\\n      DomSerializerFilters.register(htmlParser, settings, dom);\\n      var serialize = function (node, parserArgs) {\\n        var args = merge({ format: 'html' }, parserArgs ? parserArgs : {});\\n        var targetNode = DomSerializerPreProcess.process(editor, node, args);\\n        var html = getHtmlFromNode(dom, targetNode, args);\\n        var rootNode = parseHtml(htmlParser, html, args);\\n        return args.format === 'tree' ? rootNode : toHtml(editor, settings, schema, rootNode, args);\\n      };\\n      return {\\n        schema: schema,\\n        addNodeFilter: htmlParser.addNodeFilter,\\n        addAttributeFilter: htmlParser.addAttributeFilter,\\n        serialize: serialize,\\n        addRules: function (rules) {\\n          schema.addValidElements(rules);\\n        },\\n        setRules: function (rules) {\\n          schema.setValidElements(rules);\\n        },\\n        addTempAttr: curry(addTempAttr, htmlParser, tempAttrs),\\n        getTempAttrs: function () {\\n          return tempAttrs;\\n        }\\n      };\\n    }\\n\\n    function DomSerializer$1 (settings, editor) {\\n      var domSerializer = DomSerializer(settings, editor);\\n      return {\\n        schema: domSerializer.schema,\\n        addNodeFilter: domSerializer.addNodeFilter,\\n        addAttributeFilter: domSerializer.addAttributeFilter,\\n        serialize: domSerializer.serialize,\\n        addRules: domSerializer.addRules,\\n        setRules: domSerializer.setRules,\\n        addTempAttr: domSerializer.addTempAttr,\\n        getTempAttrs: domSerializer.getTempAttrs\\n      };\\n    }\\n\\n    function BookmarkManager(selection) {\\n      return {\\n        getBookmark: curry(Bookmarks.getBookmark, selection),\\n        moveToBookmark: curry(Bookmarks.moveToBookmark, selection)\\n      };\\n    }\\n    (function (BookmarkManager) {\\n      BookmarkManager.isBookmarkNode = Bookmarks.isBookmarkNode;\\n    }(BookmarkManager || (BookmarkManager = {})));\\n    var BookmarkManager$1 = BookmarkManager;\\n\\n    var isContentEditableFalse$a = NodeType.isContentEditableFalse;\\n    var isContentEditableTrue$5 = NodeType.isContentEditableTrue;\\n    var getContentEditableRoot$2 = function (root, node) {\\n      while (node && node !== root) {\\n        if (isContentEditableTrue$5(node) || isContentEditableFalse$a(node)) {\\n          return node;\\n        }\\n        node = node.parentNode;\\n      }\\n      return null;\\n    };\\n    var ControlSelection = function (selection, editor) {\\n      var dom = editor.dom, each = Tools.each;\\n      var selectedElm, selectedElmGhost, resizeHelper, resizeHandles, selectedHandle;\\n      var startX, startY, selectedElmX, selectedElmY, startW, startH, ratio, resizeStarted;\\n      var width, height;\\n      var editableDoc = editor.getDoc(), rootDocument = domGlobals.document;\\n      var abs = Math.abs, round = Math.round, rootElement = editor.getBody();\\n      var startScrollWidth, startScrollHeight;\\n      resizeHandles = {\\n        nw: [\\n          0,\\n          0,\\n          -1,\\n          -1\\n        ],\\n        ne: [\\n          1,\\n          0,\\n          1,\\n          -1\\n        ],\\n        se: [\\n          1,\\n          1,\\n          1,\\n          1\\n        ],\\n        sw: [\\n          0,\\n          1,\\n          -1,\\n          1\\n        ]\\n      };\\n      var rootClass = '.mce-content-body';\\n      editor.contentStyles.push(rootClass + ' div.mce-resizehandle {' + 'position: absolute;' + 'border: 1px solid black;' + 'box-sizing: content-box;' + 'background: #FFF;' + 'width: 7px;' + 'height: 7px;' + 'z-index: 10000' + '}' + rootClass + ' .mce-resizehandle:hover {' + 'background: #000' + '}' + rootClass + ' img[data-mce-selected],' + rootClass + ' hr[data-mce-selected] {' + 'outline: 1px solid black;' + 'resize: none' + '}' + rootClass + ' .mce-clonedresizable {' + 'position: absolute;' + (Env.gecko ? '' : 'outline: 1px dashed black;') + 'opacity: .5;' + 'filter: alpha(opacity=50);' + 'z-index: 10000' + '}' + rootClass + ' .mce-resize-helper {' + 'background: #555;' + 'background: rgba(0,0,0,0.75);' + 'border-radius: 3px;' + 'border: 1px;' + 'color: white;' + 'display: none;' + 'font-family: sans-serif;' + 'font-size: 12px;' + 'white-space: nowrap;' + 'line-height: 14px;' + 'margin: 5px 10px;' + 'padding: 5px;' + 'position: absolute;' + 'z-index: 10001' + '}');\\n      var isImage = function (elm) {\\n        return elm && (elm.nodeName === 'IMG' || editor.dom.is(elm, 'figure.image'));\\n      };\\n      var isEventOnImageOutsideRange = function (evt, range) {\\n        return isImage(evt.target) && !RangePoint.isXYWithinRange(evt.clientX, evt.clientY, range);\\n      };\\n      var contextMenuSelectImage = function (evt) {\\n        var target = evt.target;\\n        if (isEventOnImageOutsideRange(evt, editor.selection.getRng()) && !evt.isDefaultPrevented()) {\\n          editor.selection.select(target);\\n        }\\n      };\\n      var getResizeTarget = function (elm) {\\n        return editor.dom.is(elm, 'figure.image') ? elm.querySelector('img') : elm;\\n      };\\n      var isResizable = function (elm) {\\n        var selector = editor.settings.object_resizing;\\n        if (selector === false || Env.iOS) {\\n          return false;\\n        }\\n        if (typeof selector !== 'string') {\\n          selector = 'table,img,figure.image,div';\\n        }\\n        if (elm.getAttribute('data-mce-resize') === 'false') {\\n          return false;\\n        }\\n        if (elm === editor.getBody()) {\\n          return false;\\n        }\\n        return is$1(Element.fromDom(elm), selector);\\n      };\\n      var resizeGhostElement = function (e) {\\n        var deltaX, deltaY, proportional;\\n        var resizeHelperX, resizeHelperY;\\n        deltaX = e.screenX - startX;\\n        deltaY = e.screenY - startY;\\n        width = deltaX * selectedHandle[2] + startW;\\n        height = deltaY * selectedHandle[3] + startH;\\n        width = width < 5 ? 5 : width;\\n        height = height < 5 ? 5 : height;\\n        if (isImage(selectedElm) && editor.settings.resize_img_proportional !== false) {\\n          proportional = !VK.modifierPressed(e);\\n        } else {\\n          proportional = VK.modifierPressed(e) || isImage(selectedElm) && selectedHandle[2] * selectedHandle[3] !== 0;\\n        }\\n        if (proportional) {\\n          if (abs(deltaX) > abs(deltaY)) {\\n            height = round(width * ratio);\\n            width = round(height / ratio);\\n          } else {\\n            width = round(height / ratio);\\n            height = round(width * ratio);\\n          }\\n        }\\n        dom.setStyles(getResizeTarget(selectedElmGhost), {\\n          width: width,\\n          height: height\\n        });\\n        resizeHelperX = selectedHandle.startPos.x + deltaX;\\n        resizeHelperY = selectedHandle.startPos.y + deltaY;\\n        resizeHelperX = resizeHelperX > 0 ? resizeHelperX : 0;\\n        resizeHelperY = resizeHelperY > 0 ? resizeHelperY : 0;\\n        dom.setStyles(resizeHelper, {\\n          left: resizeHelperX,\\n          top: resizeHelperY,\\n          display: 'block'\\n        });\\n        resizeHelper.innerHTML = width + ' &times; ' + height;\\n        if (selectedHandle[2] < 0 && selectedElmGhost.clientWidth <= width) {\\n          dom.setStyle(selectedElmGhost, 'left', selectedElmX + (startW - width));\\n        }\\n        if (selectedHandle[3] < 0 && selectedElmGhost.clientHeight <= height) {\\n          dom.setStyle(selectedElmGhost, 'top', selectedElmY + (startH - height));\\n        }\\n        deltaX = rootElement.scrollWidth - startScrollWidth;\\n        deltaY = rootElement.scrollHeight - startScrollHeight;\\n        if (deltaX + deltaY !== 0) {\\n          dom.setStyles(resizeHelper, {\\n            left: resizeHelperX - deltaX,\\n            top: resizeHelperY - deltaY\\n          });\\n        }\\n        if (!resizeStarted) {\\n          Events.fireObjectResizeStart(editor, selectedElm, startW, startH);\\n          resizeStarted = true;\\n        }\\n      };\\n      var endGhostResize = function () {\\n        resizeStarted = false;\\n        var setSizeProp = function (name, value) {\\n          if (value) {\\n            if (selectedElm.style[name] || !editor.schema.isValid(selectedElm.nodeName.toLowerCase(), name)) {\\n              dom.setStyle(getResizeTarget(selectedElm), name, value);\\n            } else {\\n              dom.setAttrib(getResizeTarget(selectedElm), name, value);\\n            }\\n          }\\n        };\\n        setSizeProp('width', width);\\n        setSizeProp('height', height);\\n        dom.unbind(editableDoc, 'mousemove', resizeGhostElement);\\n        dom.unbind(editableDoc, 'mouseup', endGhostResize);\\n        if (rootDocument !== editableDoc) {\\n          dom.unbind(rootDocument, 'mousemove', resizeGhostElement);\\n          dom.unbind(rootDocument, 'mouseup', endGhostResize);\\n        }\\n        dom.remove(selectedElmGhost);\\n        dom.remove(resizeHelper);\\n        showResizeRect(selectedElm);\\n        Events.fireObjectResized(editor, selectedElm, width, height);\\n        dom.setAttrib(selectedElm, 'style', dom.getAttrib(selectedElm, 'style'));\\n        editor.nodeChanged();\\n      };\\n      var showResizeRect = function (targetElm) {\\n        var position, targetWidth, targetHeight, e, rect;\\n        hideResizeRect();\\n        unbindResizeHandleEvents();\\n        position = dom.getPos(targetElm, rootElement);\\n        selectedElmX = position.x;\\n        selectedElmY = position.y;\\n        rect = targetElm.getBoundingClientRect();\\n        targetWidth = rect.width || rect.right - rect.left;\\n        targetHeight = rect.height || rect.bottom - rect.top;\\n        if (selectedElm !== targetElm) {\\n          selectedElm = targetElm;\\n          width = height = 0;\\n        }\\n        e = editor.fire('ObjectSelected', { target: targetElm });\\n        if (isResizable(targetElm) && !e.isDefaultPrevented()) {\\n          each(resizeHandles, function (handle, name) {\\n            var handleElm;\\n            var startDrag = function (e) {\\n              startX = e.screenX;\\n              startY = e.screenY;\\n              startW = getResizeTarget(selectedElm).clientWidth;\\n              startH = getResizeTarget(selectedElm).clientHeight;\\n              ratio = startH / startW;\\n              selectedHandle = handle;\\n              handle.startPos = {\\n                x: targetWidth * handle[0] + selectedElmX,\\n                y: targetHeight * handle[1] + selectedElmY\\n              };\\n              startScrollWidth = rootElement.scrollWidth;\\n              startScrollHeight = rootElement.scrollHeight;\\n              selectedElmGhost = selectedElm.cloneNode(true);\\n              dom.addClass(selectedElmGhost, 'mce-clonedresizable');\\n              dom.setAttrib(selectedElmGhost, 'data-mce-bogus', 'all');\\n              selectedElmGhost.contentEditable = false;\\n              selectedElmGhost.unSelectabe = true;\\n              dom.setStyles(selectedElmGhost, {\\n                left: selectedElmX,\\n                top: selectedElmY,\\n                margin: 0\\n              });\\n              selectedElmGhost.removeAttribute('data-mce-selected');\\n              rootElement.appendChild(selectedElmGhost);\\n              dom.bind(editableDoc, 'mousemove', resizeGhostElement);\\n              dom.bind(editableDoc, 'mouseup', endGhostResize);\\n              if (rootDocument !== editableDoc) {\\n                dom.bind(rootDocument, 'mousemove', resizeGhostElement);\\n                dom.bind(rootDocument, 'mouseup', endGhostResize);\\n              }\\n              resizeHelper = dom.add(rootElement, 'div', {\\n                'class': 'mce-resize-helper',\\n                'data-mce-bogus': 'all'\\n              }, startW + ' &times; ' + startH);\\n            };\\n            handleElm = dom.get('mceResizeHandle' + name);\\n            if (handleElm) {\\n              dom.remove(handleElm);\\n            }\\n            handleElm = dom.add(rootElement, 'div', {\\n              'id': 'mceResizeHandle' + name,\\n              'data-mce-bogus': 'all',\\n              'class': 'mce-resizehandle',\\n              'unselectable': true,\\n              'style': 'cursor:' + name + '-resize; margin:0; padding:0'\\n            });\\n            if (Env.ie === 11) {\\n              handleElm.contentEditable = false;\\n            }\\n            dom.bind(handleElm, 'mousedown', function (e) {\\n              e.stopImmediatePropagation();\\n              e.preventDefault();\\n              startDrag(e);\\n            });\\n            handle.elm = handleElm;\\n            dom.setStyles(handleElm, {\\n              left: targetWidth * handle[0] + selectedElmX - handleElm.offsetWidth / 2,\\n              top: targetHeight * handle[1] + selectedElmY - handleElm.offsetHeight / 2\\n            });\\n          });\\n        } else {\\n          hideResizeRect();\\n        }\\n        selectedElm.setAttribute('data-mce-selected', '1');\\n      };\\n      var hideResizeRect = function () {\\n        var name, handleElm;\\n        unbindResizeHandleEvents();\\n        if (selectedElm) {\\n          selectedElm.removeAttribute('data-mce-selected');\\n        }\\n        for (name in resizeHandles) {\\n          handleElm = dom.get('mceResizeHandle' + name);\\n          if (handleElm) {\\n            dom.unbind(handleElm);\\n            dom.remove(handleElm);\\n          }\\n        }\\n      };\\n      var updateResizeRect = function (e) {\\n        var startElm, controlElm;\\n        var isChildOrEqual = function (node, parent) {\\n          if (node) {\\n            do {\\n              if (node === parent) {\\n                return true;\\n              }\\n            } while (node = node.parentNode);\\n          }\\n        };\\n        if (resizeStarted || editor.removed) {\\n          return;\\n        }\\n        each(dom.select('img[data-mce-selected],hr[data-mce-selected]'), function (img) {\\n          img.removeAttribute('data-mce-selected');\\n        });\\n        controlElm = e.type === 'mousedown' ? e.target : selection.getNode();\\n        controlElm = dom.$(controlElm).closest('table,img,figure.image,hr')[0];\\n        if (isChildOrEqual(controlElm, rootElement)) {\\n          disableGeckoResize();\\n          startElm = selection.getStart(true);\\n          if (isChildOrEqual(startElm, controlElm) && isChildOrEqual(selection.getEnd(true), controlElm)) {\\n            showResizeRect(controlElm);\\n            return;\\n          }\\n        }\\n        hideResizeRect();\\n      };\\n      var isWithinContentEditableFalse = function (elm) {\\n        return isContentEditableFalse$a(getContentEditableRoot$2(editor.getBody(), elm));\\n      };\\n      var unbindResizeHandleEvents = function () {\\n        for (var name in resizeHandles) {\\n          var handle = resizeHandles[name];\\n          if (handle.elm) {\\n            dom.unbind(handle.elm);\\n            delete handle.elm;\\n          }\\n        }\\n      };\\n      var disableGeckoResize = function () {\\n        try {\\n          editor.getDoc().execCommand('enableObjectResizing', false, false);\\n        } catch (ex) {\\n        }\\n      };\\n      editor.on('init', function () {\\n        disableGeckoResize();\\n        if (Env.ie && Env.ie >= 11) {\\n          editor.on('mousedown click', function (e) {\\n            var target = e.target, nodeName = target.nodeName;\\n            if (!resizeStarted && /^(TABLE|IMG|HR)$/.test(nodeName) && !isWithinContentEditableFalse(target)) {\\n              if (e.button !== 2) {\\n                editor.selection.select(target, nodeName === 'TABLE');\\n              }\\n              if (e.type === 'mousedown') {\\n                editor.nodeChanged();\\n              }\\n            }\\n          });\\n          editor.dom.bind(rootElement, 'mscontrolselect', function (e) {\\n            var delayedSelect = function (node) {\\n              Delay.setEditorTimeout(editor, function () {\\n                editor.selection.select(node);\\n              });\\n            };\\n            if (isWithinContentEditableFalse(e.target)) {\\n              e.preventDefault();\\n              delayedSelect(e.target);\\n              return;\\n            }\\n            if (/^(TABLE|IMG|HR)$/.test(e.target.nodeName)) {\\n              e.preventDefault();\\n              if (e.target.tagName === 'IMG') {\\n                delayedSelect(e.target);\\n              }\\n            }\\n          });\\n        }\\n        var throttledUpdateResizeRect = Delay.throttle(function (e) {\\n          if (!editor.composing) {\\n            updateResizeRect(e);\\n          }\\n        });\\n        editor.on('nodechange ResizeEditor ResizeWindow drop FullscreenStateChanged', throttledUpdateResizeRect);\\n        editor.on('keyup compositionend', function (e) {\\n          if (selectedElm && selectedElm.nodeName === 'TABLE') {\\n            throttledUpdateResizeRect(e);\\n          }\\n        });\\n        editor.on('hide blur', hideResizeRect);\\n        editor.on('contextmenu', contextMenuSelectImage);\\n      });\\n      editor.on('remove', unbindResizeHandleEvents);\\n      var destroy = function () {\\n        selectedElm = selectedElmGhost = null;\\n      };\\n      return {\\n        isResizable: isResizable,\\n        showResizeRect: showResizeRect,\\n        hideResizeRect: hideResizeRect,\\n        updateResizeRect: updateResizeRect,\\n        destroy: destroy\\n      };\\n    };\\n\\n    var hasCeProperty = function (node) {\\n      return NodeType.isContentEditableTrue(node) || NodeType.isContentEditableFalse(node);\\n    };\\n    var findParent$1 = function (node, rootNode, predicate) {\\n      while (node && node !== rootNode) {\\n        if (predicate(node)) {\\n          return node;\\n        }\\n        node = node.parentNode;\\n      }\\n      return null;\\n    };\\n    var findClosestIeRange = function (clientX, clientY, doc) {\\n      var element, rng, rects;\\n      element = doc.elementFromPoint(clientX, clientY);\\n      rng = doc.body.createTextRange();\\n      if (!element || element.tagName === 'HTML') {\\n        element = doc.body;\\n      }\\n      rng.moveToElementText(element);\\n      rects = Tools.toArray(rng.getClientRects());\\n      rects = rects.sort(function (a, b) {\\n        a = Math.abs(Math.max(a.top - clientY, a.bottom - clientY));\\n        b = Math.abs(Math.max(b.top - clientY, b.bottom - clientY));\\n        return a - b;\\n      });\\n      if (rects.length > 0) {\\n        clientY = (rects[0].bottom + rects[0].top) / 2;\\n        try {\\n          rng.moveToPoint(clientX, clientY);\\n          rng.collapse(true);\\n          return rng;\\n        } catch (ex) {\\n        }\\n      }\\n      return null;\\n    };\\n    var moveOutOfContentEditableFalse = function (rng, rootNode) {\\n      var parentElement = rng && rng.parentElement ? rng.parentElement() : null;\\n      return NodeType.isContentEditableFalse(findParent$1(parentElement, rootNode, hasCeProperty)) ? null : rng;\\n    };\\n    var fromPoint$1 = function (clientX, clientY, doc) {\\n      var rng, point;\\n      var pointDoc = doc;\\n      if (pointDoc.caretPositionFromPoint) {\\n        point = pointDoc.caretPositionFromPoint(clientX, clientY);\\n        if (point) {\\n          rng = doc.createRange();\\n          rng.setStart(point.offsetNode, point.offset);\\n          rng.collapse(true);\\n        }\\n      } else if (doc.caretRangeFromPoint) {\\n        rng = doc.caretRangeFromPoint(clientX, clientY);\\n      } else if (pointDoc.body.createTextRange) {\\n        rng = pointDoc.body.createTextRange();\\n        try {\\n          rng.moveToPoint(clientX, clientY);\\n          rng.collapse(true);\\n        } catch (ex) {\\n          rng = findClosestIeRange(clientX, clientY, doc);\\n        }\\n        return moveOutOfContentEditableFalse(rng, doc.body);\\n      }\\n      return rng;\\n    };\\n    var CaretRangeFromPoint = { fromPoint: fromPoint$1 };\\n\\n    var processRanges = function (editor, ranges) {\\n      return map(ranges, function (range) {\\n        var evt = editor.fire('GetSelectionRange', { range: range });\\n        return evt.range !== range ? evt.range : range;\\n      });\\n    };\\n    var EventProcessRanges = { processRanges: processRanges };\\n\\n    var fromElements = function (elements, scope) {\\n      var doc = scope || domGlobals.document;\\n      var fragment = doc.createDocumentFragment();\\n      each(elements, function (element) {\\n        fragment.appendChild(element.dom());\\n      });\\n      return Element.fromDom(fragment);\\n    };\\n\\n    var tableModel = Immutable('element', 'width', 'rows');\\n    var tableRow = Immutable('element', 'cells');\\n    var cellPosition = Immutable('x', 'y');\\n    var getSpan = function (td, key) {\\n      var value = parseInt(get(td, key), 10);\\n      return isNaN(value) ? 1 : value;\\n    };\\n    var fillout = function (table, x, y, tr, td) {\\n      var rowspan = getSpan(td, 'rowspan');\\n      var colspan = getSpan(td, 'colspan');\\n      var rows = table.rows();\\n      for (var y2 = y; y2 < y + rowspan; y2++) {\\n        if (!rows[y2]) {\\n          rows[y2] = tableRow(deep(tr), []);\\n        }\\n        for (var x2 = x; x2 < x + colspan; x2++) {\\n          var cells = rows[y2].cells();\\n          cells[x2] = y2 === y && x2 === x ? td : shallow(td);\\n        }\\n      }\\n    };\\n    var cellExists = function (table, x, y) {\\n      var rows = table.rows();\\n      var cells = rows[y] ? rows[y].cells() : [];\\n      return !!cells[x];\\n    };\\n    var skipCellsX = function (table, x, y) {\\n      while (cellExists(table, x, y)) {\\n        x++;\\n      }\\n      return x;\\n    };\\n    var getWidth = function (rows) {\\n      return foldl(rows, function (acc, row) {\\n        return row.cells().length > acc ? row.cells().length : acc;\\n      }, 0);\\n    };\\n    var findElementPos = function (table, element) {\\n      var rows = table.rows();\\n      for (var y = 0; y < rows.length; y++) {\\n        var cells = rows[y].cells();\\n        for (var x = 0; x < cells.length; x++) {\\n          if (eq(cells[x], element)) {\\n            return Option.some(cellPosition(x, y));\\n          }\\n        }\\n      }\\n      return Option.none();\\n    };\\n    var extractRows = function (table, sx, sy, ex, ey) {\\n      var newRows = [];\\n      var rows = table.rows();\\n      for (var y = sy; y <= ey; y++) {\\n        var cells = rows[y].cells();\\n        var slice = sx < ex ? cells.slice(sx, ex + 1) : cells.slice(ex, sx + 1);\\n        newRows.push(tableRow(rows[y].element(), slice));\\n      }\\n      return newRows;\\n    };\\n    var subTable = function (table, startPos, endPos) {\\n      var sx = startPos.x(), sy = startPos.y();\\n      var ex = endPos.x(), ey = endPos.y();\\n      var newRows = sy < ey ? extractRows(table, sx, sy, ex, ey) : extractRows(table, sx, ey, ex, sy);\\n      return tableModel(table.element(), getWidth(newRows), newRows);\\n    };\\n    var createDomTable = function (table, rows) {\\n      var tableElement = shallow(table.element());\\n      var tableBody = Element.fromTag('tbody');\\n      append$1(tableBody, rows);\\n      append(tableElement, tableBody);\\n      return tableElement;\\n    };\\n    var modelRowsToDomRows = function (table) {\\n      return map(table.rows(), function (row) {\\n        var cells = map(row.cells(), function (cell) {\\n          var td = deep(cell);\\n          remove(td, 'colspan');\\n          remove(td, 'rowspan');\\n          return td;\\n        });\\n        var tr = shallow(row.element());\\n        append$1(tr, cells);\\n        return tr;\\n      });\\n    };\\n    var fromDom$1 = function (tableElm) {\\n      var table = tableModel(shallow(tableElm), 0, []);\\n      each(descendants$1(tableElm, 'tr'), function (tr, y) {\\n        each(descendants$1(tr, 'td,th'), function (td, x) {\\n          fillout(table, skipCellsX(table, x, y), y, tr, td);\\n        });\\n      });\\n      return tableModel(table.element(), getWidth(table.rows()), table.rows());\\n    };\\n    var toDom = function (table) {\\n      return createDomTable(table, modelRowsToDomRows(table));\\n    };\\n    var subsection = function (table, startElement, endElement) {\\n      return findElementPos(table, startElement).bind(function (startPos) {\\n        return findElementPos(table, endElement).map(function (endPos) {\\n          return subTable(table, startPos, endPos);\\n        });\\n      });\\n    };\\n    var SimpleTableModel = {\\n      fromDom: fromDom$1,\\n      toDom: toDom,\\n      subsection: subsection\\n    };\\n\\n    var findParentListContainer = function (parents) {\\n      return find(parents, function (elm) {\\n        return name(elm) === 'ul' || name(elm) === 'ol';\\n      });\\n    };\\n    var getFullySelectedListWrappers = function (parents, rng) {\\n      return find(parents, function (elm) {\\n        return name(elm) === 'li' && hasAllContentsSelected(elm, rng);\\n      }).fold(constant([]), function (li) {\\n        return findParentListContainer(parents).map(function (listCont) {\\n          return [\\n            Element.fromTag('li'),\\n            Element.fromTag(name(listCont))\\n          ];\\n        }).getOr([]);\\n      });\\n    };\\n    var wrap$3 = function (innerElm, elms) {\\n      var wrapped = foldl(elms, function (acc, elm) {\\n        append(elm, acc);\\n        return elm;\\n      }, innerElm);\\n      return elms.length > 0 ? fromElements([wrapped]) : wrapped;\\n    };\\n    var directListWrappers = function (commonAnchorContainer) {\\n      if (isListItem(commonAnchorContainer)) {\\n        return parent(commonAnchorContainer).filter(isList).fold(constant([]), function (listElm) {\\n          return [\\n            commonAnchorContainer,\\n            listElm\\n          ];\\n        });\\n      } else {\\n        return isList(commonAnchorContainer) ? [commonAnchorContainer] : [];\\n      }\\n    };\\n    var getWrapElements = function (rootNode, rng) {\\n      var commonAnchorContainer = Element.fromDom(rng.commonAncestorContainer);\\n      var parents = Parents.parentsAndSelf(commonAnchorContainer, rootNode);\\n      var wrapElements = filter(parents, function (elm) {\\n        return isInline(elm) || isHeading(elm);\\n      });\\n      var listWrappers = getFullySelectedListWrappers(parents, rng);\\n      var allWrappers = wrapElements.concat(listWrappers.length ? listWrappers : directListWrappers(commonAnchorContainer));\\n      return map(allWrappers, shallow);\\n    };\\n    var emptyFragment = function () {\\n      return fromElements([]);\\n    };\\n    var getFragmentFromRange = function (rootNode, rng) {\\n      return wrap$3(Element.fromDom(rng.cloneContents()), getWrapElements(rootNode, rng));\\n    };\\n    var getParentTable = function (rootElm, cell) {\\n      return ancestor$1(cell, 'table', curry(eq, rootElm));\\n    };\\n    var getTableFragment = function (rootNode, selectedTableCells) {\\n      return getParentTable(rootNode, selectedTableCells[0]).bind(function (tableElm) {\\n        var firstCell = selectedTableCells[0];\\n        var lastCell = selectedTableCells[selectedTableCells.length - 1];\\n        var fullTableModel = SimpleTableModel.fromDom(tableElm);\\n        return SimpleTableModel.subsection(fullTableModel, firstCell, lastCell).map(function (sectionedTableModel) {\\n          return fromElements([SimpleTableModel.toDom(sectionedTableModel)]);\\n        });\\n      }).getOrThunk(emptyFragment);\\n    };\\n    var getSelectionFragment = function (rootNode, ranges) {\\n      return ranges.length > 0 && ranges[0].collapsed ? emptyFragment() : getFragmentFromRange(rootNode, ranges[0]);\\n    };\\n    var read$4 = function (rootNode, ranges) {\\n      var selectedCells = TableCellSelection.getCellsFromElementOrRanges(ranges, rootNode);\\n      return selectedCells.length > 0 ? getTableFragment(rootNode, selectedCells) : getSelectionFragment(rootNode, ranges);\\n    };\\n    var FragmentReader = { read: read$4 };\\n\\n    var getTextContent = function (editor) {\\n      return Option.from(editor.selection.getRng()).map(function (rng) {\\n        var bin = editor.dom.add(editor.getBody(), 'div', {\\n          'data-mce-bogus': 'all',\\n          'style': 'overflow: hidden; opacity: 0;'\\n        }, rng.cloneContents());\\n        var text = Zwsp.trim(bin.innerText);\\n        editor.dom.remove(bin);\\n        return text;\\n      }).getOr('');\\n    };\\n    var getHtmlContent = function (editor, args) {\\n      var rng = editor.selection.getRng(), tmpElm = editor.dom.create('body');\\n      var sel = editor.selection.getSel();\\n      var fragment;\\n      var ranges = EventProcessRanges.processRanges(editor, MultiRange.getRanges(sel));\\n      fragment = args.contextual ? FragmentReader.read(Element.fromDom(editor.getBody()), ranges).dom() : rng.cloneContents();\\n      if (fragment) {\\n        tmpElm.appendChild(fragment);\\n      }\\n      return editor.selection.serializer.serialize(tmpElm, args);\\n    };\\n    var getContent = function (editor, args) {\\n      if (args === void 0) {\\n        args = {};\\n      }\\n      args.get = true;\\n      args.format = args.format || 'html';\\n      args.selection = true;\\n      args = editor.fire('BeforeGetContent', args);\\n      if (args.isDefaultPrevented()) {\\n        editor.fire('GetContent', args);\\n        return args.content;\\n      }\\n      if (args.format === 'text') {\\n        return getTextContent(editor);\\n      } else {\\n        args.getInner = true;\\n        var content = getHtmlContent(editor, args);\\n        if (args.format === 'tree') {\\n          return content;\\n        } else {\\n          args.content = editor.selection.isCollapsed() ? '' : content;\\n          editor.fire('GetContent', args);\\n          return args.content;\\n        }\\n      }\\n    };\\n    var GetSelectionContent = { getContent: getContent };\\n\\n    var setupArgs = function (args, content) {\\n      return __assign(__assign({ format: 'html' }, args), {\\n        set: true,\\n        selection: true,\\n        content: content\\n      });\\n    };\\n    var cleanContent = function (editor, args) {\\n      if (args.format !== 'raw') {\\n        var node = editor.parser.parse(args.content, __assign({\\n          isRootContent: true,\\n          forced_root_block: false\\n        }, args));\\n        return HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(node);\\n      } else {\\n        return args.content;\\n      }\\n    };\\n    var setContent = function (editor, content, args) {\\n      var contentArgs = setupArgs(args, content);\\n      var rng = editor.selection.getRng(), caretNode;\\n      var doc = editor.getDoc();\\n      var frag, temp;\\n      if (!contentArgs.no_events) {\\n        contentArgs = editor.fire('BeforeSetContent', contentArgs);\\n        if (contentArgs.isDefaultPrevented()) {\\n          editor.fire('SetContent', contentArgs);\\n          return;\\n        }\\n      }\\n      content = cleanContent(editor, contentArgs);\\n      if (rng.insertNode) {\\n        content += '<span id=\\\"__caret\\\">_</span>';\\n        if (rng.startContainer === doc && rng.endContainer === doc) {\\n          doc.body.innerHTML = content;\\n        } else {\\n          rng.deleteContents();\\n          if (doc.body.childNodes.length === 0) {\\n            doc.body.innerHTML = content;\\n          } else {\\n            if (rng.createContextualFragment) {\\n              rng.insertNode(rng.createContextualFragment(content));\\n            } else {\\n              frag = doc.createDocumentFragment();\\n              temp = doc.createElement('div');\\n              frag.appendChild(temp);\\n              temp.outerHTML = content;\\n              rng.insertNode(frag);\\n            }\\n          }\\n        }\\n        caretNode = editor.dom.get('__caret');\\n        rng = doc.createRange();\\n        rng.setStartBefore(caretNode);\\n        rng.setEndBefore(caretNode);\\n        editor.selection.setRng(rng);\\n        editor.dom.remove('__caret');\\n        try {\\n          editor.selection.setRng(rng);\\n        } catch (ex) {\\n        }\\n      } else {\\n        var anyRng = rng;\\n        if (anyRng.item) {\\n          doc.execCommand('Delete', false, null);\\n          anyRng = editor.selection.getRng();\\n        }\\n        if (/^\\\\s+/.test(content)) {\\n          anyRng.pasteHTML('<span id=\\\"__mce_tmp\\\">_</span>' + content);\\n          editor.dom.remove('__mce_tmp');\\n        } else {\\n          anyRng.pasteHTML(content);\\n        }\\n      }\\n      if (!contentArgs.no_events) {\\n        editor.fire('SetContent', contentArgs);\\n      }\\n    };\\n    var SetSelectionContent = { setContent: setContent };\\n\\n    var getEndpointElement = function (root, rng, start, real, resolve) {\\n      var container = start ? rng.startContainer : rng.endContainer;\\n      var offset = start ? rng.startOffset : rng.endOffset;\\n      return Option.from(container).map(Element.fromDom).map(function (elm) {\\n        return !real || !rng.collapsed ? child(elm, resolve(elm, offset)).getOr(elm) : elm;\\n      }).bind(function (elm) {\\n        return isElement(elm) ? Option.some(elm) : parent(elm);\\n      }).map(function (elm) {\\n        return elm.dom();\\n      }).getOr(root);\\n    };\\n    var getStart$2 = function (root, rng, real) {\\n      return getEndpointElement(root, rng, true, real, function (elm, offset) {\\n        return Math.min(childNodesCount(elm), offset);\\n      });\\n    };\\n    var getEnd = function (root, rng, real) {\\n      return getEndpointElement(root, rng, false, real, function (elm, offset) {\\n        return offset > 0 ? offset - 1 : offset;\\n      });\\n    };\\n    var skipEmptyTextNodes = function (node, forwards) {\\n      var orig = node;\\n      while (node && NodeType.isText(node) && node.length === 0) {\\n        node = forwards ? node.nextSibling : node.previousSibling;\\n      }\\n      return node || orig;\\n    };\\n    var getNode$1 = function (root, rng) {\\n      var elm, startContainer, endContainer, startOffset, endOffset;\\n      if (!rng) {\\n        return root;\\n      }\\n      startContainer = rng.startContainer;\\n      endContainer = rng.endContainer;\\n      startOffset = rng.startOffset;\\n      endOffset = rng.endOffset;\\n      elm = rng.commonAncestorContainer;\\n      if (!rng.collapsed) {\\n        if (startContainer === endContainer) {\\n          if (endOffset - startOffset < 2) {\\n            if (startContainer.hasChildNodes()) {\\n              elm = startContainer.childNodes[startOffset];\\n            }\\n          }\\n        }\\n        if (startContainer.nodeType === 3 && endContainer.nodeType === 3) {\\n          if (startContainer.length === startOffset) {\\n            startContainer = skipEmptyTextNodes(startContainer.nextSibling, true);\\n          } else {\\n            startContainer = startContainer.parentNode;\\n          }\\n          if (endOffset === 0) {\\n            endContainer = skipEmptyTextNodes(endContainer.previousSibling, false);\\n          } else {\\n            endContainer = endContainer.parentNode;\\n          }\\n          if (startContainer && startContainer === endContainer) {\\n            return startContainer;\\n          }\\n        }\\n      }\\n      if (elm && elm.nodeType === 3) {\\n        return elm.parentNode;\\n      }\\n      return elm;\\n    };\\n    var getSelectedBlocks = function (dom, rng, startElm, endElm) {\\n      var node, root;\\n      var selectedBlocks = [];\\n      root = dom.getRoot();\\n      startElm = dom.getParent(startElm || getStart$2(root, rng, rng.collapsed), dom.isBlock);\\n      endElm = dom.getParent(endElm || getEnd(root, rng, rng.collapsed), dom.isBlock);\\n      if (startElm && startElm !== root) {\\n        selectedBlocks.push(startElm);\\n      }\\n      if (startElm && endElm && startElm !== endElm) {\\n        node = startElm;\\n        var walker = new TreeWalker(startElm, root);\\n        while ((node = walker.next()) && node !== endElm) {\\n          if (dom.isBlock(node)) {\\n            selectedBlocks.push(node);\\n          }\\n        }\\n      }\\n      if (endElm && startElm !== endElm && endElm !== root) {\\n        selectedBlocks.push(endElm);\\n      }\\n      return selectedBlocks;\\n    };\\n    var select$1 = function (dom, node, content) {\\n      return Option.from(node).map(function (node) {\\n        var idx = dom.nodeIndex(node);\\n        var rng = dom.createRng();\\n        rng.setStart(node.parentNode, idx);\\n        rng.setEnd(node.parentNode, idx + 1);\\n        if (content) {\\n          moveEndPoint$1(dom, rng, node, true);\\n          moveEndPoint$1(dom, rng, node, false);\\n        }\\n        return rng;\\n      });\\n    };\\n\\n    var each$j = Tools.each;\\n    var isNativeIeSelection = function (rng) {\\n      return !!rng.select;\\n    };\\n    var isAttachedToDom = function (node) {\\n      return !!(node && node.ownerDocument) && contains$3(Element.fromDom(node.ownerDocument), Element.fromDom(node));\\n    };\\n    var isValidRange = function (rng) {\\n      if (!rng) {\\n        return false;\\n      } else if (isNativeIeSelection(rng)) {\\n        return true;\\n      } else {\\n        return isAttachedToDom(rng.startContainer) && isAttachedToDom(rng.endContainer);\\n      }\\n    };\\n    var Selection$1 = function (dom, win, serializer, editor) {\\n      var bookmarkManager, controlSelection;\\n      var selectedRange, explicitRange, selectorChangedData;\\n      var setCursorLocation = function (node, offset) {\\n        var rng = dom.createRng();\\n        if (!node) {\\n          moveEndPoint$1(dom, rng, editor.getBody(), true);\\n          setRng(rng);\\n        } else {\\n          rng.setStart(node, offset);\\n          rng.setEnd(node, offset);\\n          setRng(rng);\\n          collapse(false);\\n        }\\n      };\\n      var getContent = function (args) {\\n        return GetSelectionContent.getContent(editor, args);\\n      };\\n      var setContent = function (content, args) {\\n        return SetSelectionContent.setContent(editor, content, args);\\n      };\\n      var getStart = function (real) {\\n        return getStart$2(editor.getBody(), getRng(), real);\\n      };\\n      var getEnd$1 = function (real) {\\n        return getEnd(editor.getBody(), getRng(), real);\\n      };\\n      var getBookmark = function (type, normalized) {\\n        return bookmarkManager.getBookmark(type, normalized);\\n      };\\n      var moveToBookmark = function (bookmark) {\\n        return bookmarkManager.moveToBookmark(bookmark);\\n      };\\n      var select = function (node, content) {\\n        select$1(dom, node, content).each(setRng);\\n        return node;\\n      };\\n      var isCollapsed = function () {\\n        var rng = getRng(), sel = getSel();\\n        if (!rng || rng.item) {\\n          return false;\\n        }\\n        if (rng.compareEndPoints) {\\n          return rng.compareEndPoints('StartToEnd', rng) === 0;\\n        }\\n        return !sel || rng.collapsed;\\n      };\\n      var collapse = function (toStart) {\\n        var rng = getRng();\\n        rng.collapse(!!toStart);\\n        setRng(rng);\\n      };\\n      var getSel = function () {\\n        return win.getSelection ? win.getSelection() : win.document.selection;\\n      };\\n      var getRng = function () {\\n        var selection, rng, elm, doc;\\n        var tryCompareBoundaryPoints = function (how, sourceRange, destinationRange) {\\n          try {\\n            return sourceRange.compareBoundaryPoints(how, destinationRange);\\n          } catch (ex) {\\n            return -1;\\n          }\\n        };\\n        if (!win) {\\n          return null;\\n        }\\n        doc = win.document;\\n        if (typeof doc === 'undefined' || doc === null) {\\n          return null;\\n        }\\n        if (editor.bookmark !== undefined && EditorFocus.hasFocus(editor) === false) {\\n          var bookmark = SelectionBookmark.getRng(editor);\\n          if (bookmark.isSome()) {\\n            return bookmark.map(function (r) {\\n              return EventProcessRanges.processRanges(editor, [r])[0];\\n            }).getOr(doc.createRange());\\n          }\\n        }\\n        try {\\n          if ((selection = getSel()) && !NodeType.isRestrictedNode(selection.anchorNode)) {\\n            if (selection.rangeCount > 0) {\\n              rng = selection.getRangeAt(0);\\n            } else {\\n              rng = selection.createRange ? selection.createRange() : doc.createRange();\\n            }\\n          }\\n        } catch (ex) {\\n        }\\n        rng = EventProcessRanges.processRanges(editor, [rng])[0];\\n        if (!rng) {\\n          rng = doc.createRange ? doc.createRange() : doc.body.createTextRange();\\n        }\\n        if (rng.setStart && rng.startContainer.nodeType === 9 && rng.collapsed) {\\n          elm = dom.getRoot();\\n          rng.setStart(elm, 0);\\n          rng.setEnd(elm, 0);\\n        }\\n        if (selectedRange && explicitRange) {\\n          if (tryCompareBoundaryPoints(rng.START_TO_START, rng, selectedRange) === 0 && tryCompareBoundaryPoints(rng.END_TO_END, rng, selectedRange) === 0) {\\n            rng = explicitRange;\\n          } else {\\n            selectedRange = null;\\n            explicitRange = null;\\n          }\\n        }\\n        return rng;\\n      };\\n      var setRng = function (rng, forward) {\\n        var sel, node, evt;\\n        if (!isValidRange(rng)) {\\n          return;\\n        }\\n        var ieRange = isNativeIeSelection(rng) ? rng : null;\\n        if (ieRange) {\\n          explicitRange = null;\\n          try {\\n            ieRange.select();\\n          } catch (ex) {\\n          }\\n          return;\\n        }\\n        sel = getSel();\\n        evt = editor.fire('SetSelectionRange', {\\n          range: rng,\\n          forward: forward\\n        });\\n        rng = evt.range;\\n        if (sel) {\\n          explicitRange = rng;\\n          try {\\n            sel.removeAllRanges();\\n            sel.addRange(rng);\\n          } catch (ex) {\\n          }\\n          if (forward === false && sel.extend) {\\n            sel.collapse(rng.endContainer, rng.endOffset);\\n            sel.extend(rng.startContainer, rng.startOffset);\\n          }\\n          selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null;\\n        }\\n        if (!rng.collapsed && rng.startContainer === rng.endContainer && sel.setBaseAndExtent && !Env.ie) {\\n          if (rng.endOffset - rng.startOffset < 2) {\\n            if (rng.startContainer.hasChildNodes()) {\\n              node = rng.startContainer.childNodes[rng.startOffset];\\n              if (node && node.tagName === 'IMG') {\\n                sel.setBaseAndExtent(rng.startContainer, rng.startOffset, rng.endContainer, rng.endOffset);\\n                if (sel.anchorNode !== rng.startContainer || sel.focusNode !== rng.endContainer) {\\n                  sel.setBaseAndExtent(node, 0, node, 1);\\n                }\\n              }\\n            }\\n          }\\n        }\\n        editor.fire('AfterSetSelectionRange', {\\n          range: rng,\\n          forward: forward\\n        });\\n      };\\n      var setNode = function (elm) {\\n        setContent(dom.getOuterHTML(elm));\\n        return elm;\\n      };\\n      var getNode = function () {\\n        return getNode$1(editor.getBody(), getRng());\\n      };\\n      var getSelectedBlocks$1 = function (startElm, endElm) {\\n        return getSelectedBlocks(dom, getRng(), startElm, endElm);\\n      };\\n      var isForward = function () {\\n        var sel = getSel();\\n        var anchorRange, focusRange;\\n        if (!sel || !sel.anchorNode || !sel.focusNode) {\\n          return true;\\n        }\\n        anchorRange = dom.createRng();\\n        anchorRange.setStart(sel.anchorNode, sel.anchorOffset);\\n        anchorRange.collapse(true);\\n        focusRange = dom.createRng();\\n        focusRange.setStart(sel.focusNode, sel.focusOffset);\\n        focusRange.collapse(true);\\n        return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0;\\n      };\\n      var normalize = function () {\\n        var rng = getRng();\\n        var sel = getSel();\\n        if (!MultiRange.hasMultipleRanges(sel) && hasAnyRanges(editor)) {\\n          var normRng = NormalizeRange.normalize(dom, rng);\\n          normRng.each(function (normRng) {\\n            setRng(normRng, isForward());\\n          });\\n          return normRng.getOr(rng);\\n        }\\n        return rng;\\n      };\\n      var selectorChanged = function (selector, callback) {\\n        var currentSelectors;\\n        if (!selectorChangedData) {\\n          selectorChangedData = {};\\n          currentSelectors = {};\\n          editor.on('NodeChange', function (e) {\\n            var node = e.element, parents = dom.getParents(node, null, dom.getRoot()), matchedSelectors = {};\\n            each$j(selectorChangedData, function (callbacks, selector) {\\n              each$j(parents, function (node) {\\n                if (dom.is(node, selector)) {\\n                  if (!currentSelectors[selector]) {\\n                    each$j(callbacks, function (callback) {\\n                      callback(true, {\\n                        node: node,\\n                        selector: selector,\\n                        parents: parents\\n                      });\\n                    });\\n                    currentSelectors[selector] = callbacks;\\n                  }\\n                  matchedSelectors[selector] = callbacks;\\n                  return false;\\n                }\\n              });\\n            });\\n            each$j(currentSelectors, function (callbacks, selector) {\\n              if (!matchedSelectors[selector]) {\\n                delete currentSelectors[selector];\\n                each$j(callbacks, function (callback) {\\n                  callback(false, {\\n                    node: node,\\n                    selector: selector,\\n                    parents: parents\\n                  });\\n                });\\n              }\\n            });\\n          });\\n        }\\n        if (!selectorChangedData[selector]) {\\n          selectorChangedData[selector] = [];\\n        }\\n        selectorChangedData[selector].push(callback);\\n        return exports;\\n      };\\n      var getScrollContainer = function () {\\n        var scrollContainer;\\n        var node = dom.getRoot();\\n        while (node && node.nodeName !== 'BODY') {\\n          if (node.scrollHeight > node.clientHeight) {\\n            scrollContainer = node;\\n            break;\\n          }\\n          node = node.parentNode;\\n        }\\n        return scrollContainer;\\n      };\\n      var scrollIntoView = function (elm, alignToTop) {\\n        return ScrollIntoView.scrollElementIntoView(editor, elm, alignToTop);\\n      };\\n      var placeCaretAt = function (clientX, clientY) {\\n        return setRng(CaretRangeFromPoint.fromPoint(clientX, clientY, editor.getDoc()));\\n      };\\n      var getBoundingClientRect = function () {\\n        var rng = getRng();\\n        return rng.collapsed ? CaretPosition$1.fromRangeStart(rng).getClientRects()[0] : rng.getBoundingClientRect();\\n      };\\n      var destroy = function () {\\n        win = selectedRange = explicitRange = null;\\n        controlSelection.destroy();\\n      };\\n      var exports = {\\n        bookmarkManager: null,\\n        controlSelection: null,\\n        dom: dom,\\n        win: win,\\n        serializer: serializer,\\n        editor: editor,\\n        collapse: collapse,\\n        setCursorLocation: setCursorLocation,\\n        getContent: getContent,\\n        setContent: setContent,\\n        getBookmark: getBookmark,\\n        moveToBookmark: moveToBookmark,\\n        select: select,\\n        isCollapsed: isCollapsed,\\n        isForward: isForward,\\n        setNode: setNode,\\n        getNode: getNode,\\n        getSel: getSel,\\n        setRng: setRng,\\n        getRng: getRng,\\n        getStart: getStart,\\n        getEnd: getEnd$1,\\n        getSelectedBlocks: getSelectedBlocks$1,\\n        normalize: normalize,\\n        selectorChanged: selectorChanged,\\n        getScrollContainer: getScrollContainer,\\n        scrollIntoView: scrollIntoView,\\n        placeCaretAt: placeCaretAt,\\n        getBoundingClientRect: getBoundingClientRect,\\n        destroy: destroy\\n      };\\n      bookmarkManager = BookmarkManager$1(exports);\\n      controlSelection = ControlSelection(exports, editor);\\n      exports.bookmarkManager = bookmarkManager;\\n      exports.controlSelection = controlSelection;\\n      return exports;\\n    };\\n\\n    var BreakType;\\n    (function (BreakType) {\\n      BreakType[BreakType['Br'] = 0] = 'Br';\\n      BreakType[BreakType['Block'] = 1] = 'Block';\\n      BreakType[BreakType['Wrap'] = 2] = 'Wrap';\\n      BreakType[BreakType['Eol'] = 3] = 'Eol';\\n    }(BreakType || (BreakType = {})));\\n    var flip = function (direction, positions) {\\n      return direction === HDirection.Backwards ? positions.reverse() : positions;\\n    };\\n    var walk$3 = function (direction, caretWalker, pos) {\\n      return direction === HDirection.Forwards ? caretWalker.next(pos) : caretWalker.prev(pos);\\n    };\\n    var getBreakType = function (scope, direction, currentPos, nextPos) {\\n      if (NodeType.isBr(nextPos.getNode(direction === HDirection.Forwards))) {\\n        return BreakType.Br;\\n      } else if (isInSameBlock(currentPos, nextPos) === false) {\\n        return BreakType.Block;\\n      } else {\\n        return BreakType.Wrap;\\n      }\\n    };\\n    var getPositionsUntil = function (predicate, direction, scope, start) {\\n      var caretWalker = CaretWalker(scope);\\n      var currentPos = start, nextPos;\\n      var positions = [];\\n      while (currentPos) {\\n        nextPos = walk$3(direction, caretWalker, currentPos);\\n        if (!nextPos) {\\n          break;\\n        }\\n        if (NodeType.isBr(nextPos.getNode(false))) {\\n          if (direction === HDirection.Forwards) {\\n            return {\\n              positions: flip(direction, positions).concat([nextPos]),\\n              breakType: BreakType.Br,\\n              breakAt: Option.some(nextPos)\\n            };\\n          } else {\\n            return {\\n              positions: flip(direction, positions),\\n              breakType: BreakType.Br,\\n              breakAt: Option.some(nextPos)\\n            };\\n          }\\n        }\\n        if (!nextPos.isVisible()) {\\n          currentPos = nextPos;\\n          continue;\\n        }\\n        if (predicate(currentPos, nextPos)) {\\n          var breakType = getBreakType(scope, direction, currentPos, nextPos);\\n          return {\\n            positions: flip(direction, positions),\\n            breakType: breakType,\\n            breakAt: Option.some(nextPos)\\n          };\\n        }\\n        positions.push(nextPos);\\n        currentPos = nextPos;\\n      }\\n      return {\\n        positions: flip(direction, positions),\\n        breakType: BreakType.Eol,\\n        breakAt: Option.none()\\n      };\\n    };\\n    var getAdjacentLinePositions = function (direction, getPositionsUntilBreak, scope, start) {\\n      return getPositionsUntilBreak(scope, start).breakAt.map(function (pos) {\\n        var positions = getPositionsUntilBreak(scope, pos).positions;\\n        return direction === HDirection.Backwards ? positions.concat(pos) : [pos].concat(positions);\\n      }).getOr([]);\\n    };\\n    var findClosestHorizontalPositionFromPoint = function (positions, x) {\\n      return foldl(positions, function (acc, newPos) {\\n        return acc.fold(function () {\\n          return Option.some(newPos);\\n        }, function (lastPos) {\\n          return lift2(head(lastPos.getClientRects()), head(newPos.getClientRects()), function (lastRect, newRect) {\\n            var lastDist = Math.abs(x - lastRect.left);\\n            var newDist = Math.abs(x - newRect.left);\\n            return newDist <= lastDist ? newPos : lastPos;\\n          }).or(acc);\\n        });\\n      }, Option.none());\\n    };\\n    var findClosestHorizontalPosition = function (positions, pos) {\\n      return head(pos.getClientRects()).bind(function (targetRect) {\\n        return findClosestHorizontalPositionFromPoint(positions, targetRect.left);\\n      });\\n    };\\n    var getPositionsUntilPreviousLine = curry(getPositionsUntil, CaretPosition.isAbove, -1);\\n    var getPositionsUntilNextLine = curry(getPositionsUntil, CaretPosition.isBelow, 1);\\n    var isAtFirstLine = function (scope, pos) {\\n      return getPositionsUntilPreviousLine(scope, pos).breakAt.isNone();\\n    };\\n    var isAtLastLine = function (scope, pos) {\\n      return getPositionsUntilNextLine(scope, pos).breakAt.isNone();\\n    };\\n    var getPositionsAbove = curry(getAdjacentLinePositions, -1, getPositionsUntilPreviousLine);\\n    var getPositionsBelow = curry(getAdjacentLinePositions, 1, getPositionsUntilNextLine);\\n    var getFirstLinePositions = function (scope) {\\n      return CaretFinder.firstPositionIn(scope).map(function (pos) {\\n        return [pos].concat(getPositionsUntilNextLine(scope, pos).positions);\\n      }).getOr([]);\\n    };\\n    var getLastLinePositions = function (scope) {\\n      return CaretFinder.lastPositionIn(scope).map(function (pos) {\\n        return getPositionsUntilPreviousLine(scope, pos).positions.concat(pos);\\n      }).getOr([]);\\n    };\\n\\n    var isContentEditableFalse$b = NodeType.isContentEditableFalse;\\n    var getSelectedNode$1 = getSelectedNode;\\n    var moveToCeFalseHorizontally = function (direction, editor, getNextPosFn, range) {\\n      var forwards = direction === HDirection.Forwards;\\n      var isBeforeContentEditableFalseFn = forwards ? isBeforeContentEditableFalse : isAfterContentEditableFalse;\\n      if (!range.collapsed) {\\n        var node = getSelectedNode$1(range);\\n        if (isContentEditableFalse$b(node)) {\\n          return showCaret(direction, editor, node, direction === HDirection.Backwards, true);\\n        }\\n      }\\n      var rangeIsInContainerBlock = isRangeInCaretContainerBlock(range);\\n      var caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\\n      if (isBeforeContentEditableFalseFn(caretPosition)) {\\n        return selectNode(editor, caretPosition.getNode(!forwards));\\n      }\\n      var nextCaretPosition = InlineUtils.normalizePosition(forwards, getNextPosFn(caretPosition));\\n      if (!nextCaretPosition) {\\n        if (rangeIsInContainerBlock) {\\n          return range;\\n        }\\n        return null;\\n      }\\n      if (isBeforeContentEditableFalseFn(nextCaretPosition)) {\\n        return showCaret(direction, editor, nextCaretPosition.getNode(!forwards), forwards, true);\\n      }\\n      var peekCaretPosition = getNextPosFn(nextCaretPosition);\\n      if (peekCaretPosition && isBeforeContentEditableFalseFn(peekCaretPosition)) {\\n        if (isMoveInsideSameBlock(nextCaretPosition, peekCaretPosition)) {\\n          return showCaret(direction, editor, peekCaretPosition.getNode(!forwards), forwards, true);\\n        }\\n      }\\n      if (rangeIsInContainerBlock) {\\n        return renderRangeCaret(editor, nextCaretPosition.toRange(), true);\\n      }\\n      return null;\\n    };\\n    var moveToCeFalseVertically = function (direction, editor, walkerFn, range) {\\n      var caretPosition, linePositions, nextLinePositions;\\n      var closestNextLineRect, caretClientRect, clientX;\\n      var dist1, dist2, contentEditableFalseNode;\\n      contentEditableFalseNode = getSelectedNode$1(range);\\n      caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\\n      linePositions = walkerFn(editor.getBody(), isAboveLine(1), caretPosition);\\n      nextLinePositions = filter(linePositions, isLine(1));\\n      caretClientRect = ArrUtils.last(caretPosition.getClientRects());\\n      if (isBeforeContentEditableFalse(caretPosition) || isBeforeTable(caretPosition)) {\\n        contentEditableFalseNode = caretPosition.getNode();\\n      }\\n      if (isAfterContentEditableFalse(caretPosition) || isAfterTable(caretPosition)) {\\n        contentEditableFalseNode = caretPosition.getNode(true);\\n      }\\n      if (!caretClientRect) {\\n        return null;\\n      }\\n      clientX = caretClientRect.left;\\n      closestNextLineRect = findClosestClientRect(nextLinePositions, clientX);\\n      if (closestNextLineRect) {\\n        if (isContentEditableFalse$b(closestNextLineRect.node)) {\\n          dist1 = Math.abs(clientX - closestNextLineRect.left);\\n          dist2 = Math.abs(clientX - closestNextLineRect.right);\\n          return showCaret(direction, editor, closestNextLineRect.node, dist1 < dist2, true);\\n        }\\n      }\\n      if (contentEditableFalseNode) {\\n        var caretPositions = positionsUntil(direction, editor.getBody(), isAboveLine(1), contentEditableFalseNode);\\n        closestNextLineRect = findClosestClientRect(filter(caretPositions, isLine(1)), clientX);\\n        if (closestNextLineRect) {\\n          return renderRangeCaret(editor, closestNextLineRect.position.toRange(), true);\\n        }\\n        closestNextLineRect = ArrUtils.last(filter(caretPositions, isLine(0)));\\n        if (closestNextLineRect) {\\n          return renderRangeCaret(editor, closestNextLineRect.position.toRange(), true);\\n        }\\n      }\\n    };\\n    var createTextBlock = function (editor) {\\n      var textBlock = editor.dom.create(Settings.getForcedRootBlock(editor));\\n      if (!Env.ie || Env.ie >= 11) {\\n        textBlock.innerHTML = '<br data-mce-bogus=\\\"1\\\">';\\n      }\\n      return textBlock;\\n    };\\n    var exitPreBlock = function (editor, direction, range) {\\n      var pre, caretPos, newBlock;\\n      var caretWalker = CaretWalker(editor.getBody());\\n      var getNextVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.next);\\n      var getPrevVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.prev);\\n      if (range.collapsed && editor.settings.forced_root_block) {\\n        pre = editor.dom.getParent(range.startContainer, 'PRE');\\n        if (!pre) {\\n          return;\\n        }\\n        if (direction === 1) {\\n          caretPos = getNextVisualCaretPosition(CaretPosition$1.fromRangeStart(range));\\n        } else {\\n          caretPos = getPrevVisualCaretPosition(CaretPosition$1.fromRangeStart(range));\\n        }\\n        if (!caretPos) {\\n          newBlock = createTextBlock(editor);\\n          if (direction === 1) {\\n            editor.$(pre).after(newBlock);\\n          } else {\\n            editor.$(pre).before(newBlock);\\n          }\\n          editor.selection.select(newBlock, true);\\n          editor.selection.collapse();\\n        }\\n      }\\n    };\\n    var getHorizontalRange = function (editor, forward) {\\n      var caretWalker = CaretWalker(editor.getBody());\\n      var getNextVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.next);\\n      var getPrevVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.prev);\\n      var newRange;\\n      var direction = forward ? HDirection.Forwards : HDirection.Backwards;\\n      var getNextPosFn = forward ? getNextVisualCaretPosition : getPrevVisualCaretPosition;\\n      var range = editor.selection.getRng();\\n      newRange = moveToCeFalseHorizontally(direction, editor, getNextPosFn, range);\\n      if (newRange) {\\n        return newRange;\\n      }\\n      newRange = exitPreBlock(editor, direction, range);\\n      if (newRange) {\\n        return newRange;\\n      }\\n      return null;\\n    };\\n    var getVerticalRange = function (editor, down) {\\n      var newRange;\\n      var direction = down ? 1 : -1;\\n      var walkerFn = down ? downUntil : upUntil;\\n      var range = editor.selection.getRng();\\n      newRange = moveToCeFalseVertically(direction, editor, walkerFn, range);\\n      if (newRange) {\\n        return newRange;\\n      }\\n      newRange = exitPreBlock(editor, direction, range);\\n      if (newRange) {\\n        return newRange;\\n      }\\n      return null;\\n    };\\n    var moveH = function (editor, forward) {\\n      return function () {\\n        var newRng = getHorizontalRange(editor, forward);\\n        if (newRng) {\\n          moveToRange(editor, newRng);\\n          return true;\\n        } else {\\n          return false;\\n        }\\n      };\\n    };\\n    var moveV = function (editor, down) {\\n      return function () {\\n        var newRng = getVerticalRange(editor, down);\\n        if (newRng) {\\n          moveToRange(editor, newRng);\\n          return true;\\n        } else {\\n          return false;\\n        }\\n      };\\n    };\\n    var isCefPosition = function (forward) {\\n      return function (pos) {\\n        return forward ? isAfterContentEditableFalse(pos) : isBeforeContentEditableFalse(pos);\\n      };\\n    };\\n    var moveToLineEndPoint = function (editor, forward) {\\n      return function () {\\n        var from = forward ? CaretPosition$1.fromRangeEnd(editor.selection.getRng()) : CaretPosition$1.fromRangeStart(editor.selection.getRng());\\n        var result = forward ? getPositionsUntilNextLine(editor.getBody(), from) : getPositionsUntilPreviousLine(editor.getBody(), from);\\n        var to = forward ? last(result.positions) : head(result.positions);\\n        return to.filter(isCefPosition(forward)).fold(constant(false), function (pos) {\\n          editor.selection.setRng(pos.toRange());\\n          return true;\\n        });\\n      };\\n    };\\n\\n    var deflate = function (rect, delta) {\\n      return {\\n        left: rect.left - delta,\\n        top: rect.top - delta,\\n        right: rect.right + delta * 2,\\n        bottom: rect.bottom + delta * 2,\\n        width: rect.width + delta,\\n        height: rect.height + delta\\n      };\\n    };\\n    var getCorners = function (getYAxisValue, tds) {\\n      return bind(tds, function (td) {\\n        var rect = deflate(clone$1(td.getBoundingClientRect()), -1);\\n        return [\\n          {\\n            x: rect.left,\\n            y: getYAxisValue(rect),\\n            cell: td\\n          },\\n          {\\n            x: rect.right,\\n            y: getYAxisValue(rect),\\n            cell: td\\n          }\\n        ];\\n      });\\n    };\\n    var findClosestCorner = function (corners, x, y) {\\n      return foldl(corners, function (acc, newCorner) {\\n        return acc.fold(function () {\\n          return Option.some(newCorner);\\n        }, function (oldCorner) {\\n          var oldDist = Math.sqrt(Math.abs(oldCorner.x - x) + Math.abs(oldCorner.y - y));\\n          var newDist = Math.sqrt(Math.abs(newCorner.x - x) + Math.abs(newCorner.y - y));\\n          return Option.some(newDist < oldDist ? newCorner : oldCorner);\\n        });\\n      }, Option.none());\\n    };\\n    var getClosestCell$1 = function (getYAxisValue, isTargetCorner, table, x, y) {\\n      var cells = descendants$1(Element.fromDom(table), 'td,th,caption').map(function (e) {\\n        return e.dom();\\n      });\\n      var corners = filter(getCorners(getYAxisValue, cells), function (corner) {\\n        return isTargetCorner(corner, y);\\n      });\\n      return findClosestCorner(corners, x, y).map(function (corner) {\\n        return corner.cell;\\n      });\\n    };\\n    var getBottomValue = function (rect) {\\n      return rect.bottom;\\n    };\\n    var getTopValue = function (rect) {\\n      return rect.top;\\n    };\\n    var isAbove$1 = function (corner, y) {\\n      return corner.y < y;\\n    };\\n    var isBelow$1 = function (corner, y) {\\n      return corner.y > y;\\n    };\\n    var getClosestCellAbove = curry(getClosestCell$1, getBottomValue, isAbove$1);\\n    var getClosestCellBelow = curry(getClosestCell$1, getTopValue, isBelow$1);\\n    var findClosestPositionInAboveCell = function (table, pos) {\\n      return head(pos.getClientRects()).bind(function (rect) {\\n        return getClosestCellAbove(table, rect.left, rect.top);\\n      }).bind(function (cell) {\\n        return findClosestHorizontalPosition(getLastLinePositions(cell), pos);\\n      });\\n    };\\n    var findClosestPositionInBelowCell = function (table, pos) {\\n      return last(pos.getClientRects()).bind(function (rect) {\\n        return getClosestCellBelow(table, rect.left, rect.top);\\n      }).bind(function (cell) {\\n        return findClosestHorizontalPosition(getFirstLinePositions(cell), pos);\\n      });\\n    };\\n\\n    var hasNextBreak = function (getPositionsUntil, scope, lineInfo) {\\n      return lineInfo.breakAt.map(function (breakPos) {\\n        return getPositionsUntil(scope, breakPos).breakAt.isSome();\\n      }).getOr(false);\\n    };\\n    var startsWithWrapBreak = function (lineInfo) {\\n      return lineInfo.breakType === BreakType.Wrap && lineInfo.positions.length === 0;\\n    };\\n    var startsWithBrBreak = function (lineInfo) {\\n      return lineInfo.breakType === BreakType.Br && lineInfo.positions.length === 1;\\n    };\\n    var isAtTableCellLine = function (getPositionsUntil, scope, pos) {\\n      var lineInfo = getPositionsUntil(scope, pos);\\n      if (startsWithWrapBreak(lineInfo) || !NodeType.isBr(pos.getNode()) && startsWithBrBreak(lineInfo)) {\\n        return !hasNextBreak(getPositionsUntil, scope, lineInfo);\\n      } else {\\n        return lineInfo.breakAt.isNone();\\n      }\\n    };\\n    var isAtFirstTableCellLine = curry(isAtTableCellLine, getPositionsUntilPreviousLine);\\n    var isAtLastTableCellLine = curry(isAtTableCellLine, getPositionsUntilNextLine);\\n    var isCaretAtStartOrEndOfTable = function (forward, rng, table) {\\n      var caretPos = CaretPosition$1.fromRangeStart(rng);\\n      return CaretFinder.positionIn(!forward, table).map(function (pos) {\\n        return pos.isEqual(caretPos);\\n      }).getOr(false);\\n    };\\n    var navigateHorizontally = function (editor, forward, table, td) {\\n      var rng = editor.selection.getRng();\\n      var direction = forward ? 1 : -1;\\n      if (isFakeCaretTableBrowser() && isCaretAtStartOrEndOfTable(forward, rng, table)) {\\n        var newRng = showCaret(direction, editor, table, !forward, true);\\n        moveToRange(editor, newRng);\\n        return true;\\n      }\\n      return false;\\n    };\\n    var getClosestAbovePosition = function (root, table, start) {\\n      return findClosestPositionInAboveCell(table, start).orThunk(function () {\\n        return head(start.getClientRects()).bind(function (rect) {\\n          return findClosestHorizontalPositionFromPoint(getPositionsAbove(root, CaretPosition$1.before(table)), rect.left);\\n        });\\n      }).getOr(CaretPosition$1.before(table));\\n    };\\n    var getClosestBelowPosition = function (root, table, start) {\\n      return findClosestPositionInBelowCell(table, start).orThunk(function () {\\n        return head(start.getClientRects()).bind(function (rect) {\\n          return findClosestHorizontalPositionFromPoint(getPositionsBelow(root, CaretPosition$1.after(table)), rect.left);\\n        });\\n      }).getOr(CaretPosition$1.after(table));\\n    };\\n    var getTable = function (previous, pos) {\\n      var node = pos.getNode(previous);\\n      return NodeType.isElement(node) && node.nodeName === 'TABLE' ? Option.some(node) : Option.none();\\n    };\\n    var renderBlock = function (down, editor, table, pos) {\\n      var forcedRootBlock = Settings.getForcedRootBlock(editor);\\n      if (forcedRootBlock) {\\n        editor.undoManager.transact(function () {\\n          var element = Element.fromTag(forcedRootBlock);\\n          setAll(element, Settings.getForcedRootBlockAttrs(editor));\\n          append(element, Element.fromTag('br'));\\n          if (down) {\\n            after(Element.fromDom(table), element);\\n          } else {\\n            before(Element.fromDom(table), element);\\n          }\\n          var rng = editor.dom.createRng();\\n          rng.setStart(element.dom(), 0);\\n          rng.setEnd(element.dom(), 0);\\n          moveToRange(editor, rng);\\n        });\\n      } else {\\n        moveToRange(editor, pos.toRange());\\n      }\\n    };\\n    var moveCaret = function (editor, down, pos) {\\n      var table = down ? getTable(true, pos) : getTable(false, pos);\\n      var last = down === false;\\n      table.fold(function () {\\n        return moveToRange(editor, pos.toRange());\\n      }, function (table) {\\n        return CaretFinder.positionIn(last, editor.getBody()).filter(function (lastPos) {\\n          return lastPos.isEqual(pos);\\n        }).fold(function () {\\n          return moveToRange(editor, pos.toRange());\\n        }, function (_) {\\n          return renderBlock(down, editor, table, pos);\\n        });\\n      });\\n    };\\n    var navigateVertically = function (editor, down, table, td) {\\n      var rng = editor.selection.getRng();\\n      var pos = CaretPosition$1.fromRangeStart(rng);\\n      var root = editor.getBody();\\n      if (!down && isAtFirstTableCellLine(td, pos)) {\\n        var newPos = getClosestAbovePosition(root, table, pos);\\n        moveCaret(editor, down, newPos);\\n        return true;\\n      } else if (down && isAtLastTableCellLine(td, pos)) {\\n        var newPos = getClosestBelowPosition(root, table, pos);\\n        moveCaret(editor, down, newPos);\\n        return true;\\n      } else {\\n        return false;\\n      }\\n    };\\n    var moveH$1 = function (editor, forward) {\\n      return function () {\\n        return Option.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(function (td) {\\n          return Option.from(editor.dom.getParent(td, 'table')).map(function (table) {\\n            return navigateHorizontally(editor, forward, table);\\n          });\\n        }).getOr(false);\\n      };\\n    };\\n    var moveV$1 = function (editor, forward) {\\n      return function () {\\n        return Option.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(function (td) {\\n          return Option.from(editor.dom.getParent(td, 'table')).map(function (table) {\\n            return navigateVertically(editor, forward, table, td);\\n          });\\n        }).getOr(false);\\n      };\\n    };\\n\\n    var isTarget = function (node) {\\n      return contains(['figcaption'], name(node));\\n    };\\n    var rangeBefore = function (target) {\\n      var rng = domGlobals.document.createRange();\\n      rng.setStartBefore(target.dom());\\n      rng.setEndBefore(target.dom());\\n      return rng;\\n    };\\n    var insertElement = function (root, elm, forward) {\\n      if (forward) {\\n        append(root, elm);\\n      } else {\\n        prepend(root, elm);\\n      }\\n    };\\n    var insertBr = function (root, forward) {\\n      var br = Element.fromTag('br');\\n      insertElement(root, br, forward);\\n      return rangeBefore(br);\\n    };\\n    var insertBlock$1 = function (root, forward, blockName, attrs) {\\n      var block = Element.fromTag(blockName);\\n      var br = Element.fromTag('br');\\n      setAll(block, attrs);\\n      append(block, br);\\n      insertElement(root, block, forward);\\n      return rangeBefore(br);\\n    };\\n    var insertEmptyLine = function (root, rootBlockName, attrs, forward) {\\n      if (rootBlockName === '') {\\n        return insertBr(root, forward);\\n      } else {\\n        return insertBlock$1(root, forward, rootBlockName, attrs);\\n      }\\n    };\\n    var getClosestTargetBlock = function (pos, root) {\\n      var isRoot = curry(eq, root);\\n      return closest(Element.fromDom(pos.container()), isBlock, isRoot).filter(isTarget);\\n    };\\n    var isAtFirstOrLastLine = function (root, forward, pos) {\\n      return forward ? isAtLastLine(root.dom(), pos) : isAtFirstLine(root.dom(), pos);\\n    };\\n    var moveCaretToNewEmptyLine = function (editor, forward) {\\n      var root = Element.fromDom(editor.getBody());\\n      var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\\n      var rootBlock = Settings.getForcedRootBlock(editor);\\n      var rootBlockAttrs = Settings.getForcedRootBlockAttrs(editor);\\n      return getClosestTargetBlock(pos, root).exists(function () {\\n        if (isAtFirstOrLastLine(root, forward, pos)) {\\n          var rng = insertEmptyLine(root, rootBlock, rootBlockAttrs, forward);\\n          editor.selection.setRng(rng);\\n          return true;\\n        } else {\\n          return false;\\n        }\\n      });\\n    };\\n    var moveV$2 = function (editor, forward) {\\n      return function () {\\n        if (editor.selection.isCollapsed()) {\\n          return moveCaretToNewEmptyLine(editor, forward);\\n        } else {\\n          return false;\\n        }\\n      };\\n    };\\n\\n    var defaultPatterns = function (patterns) {\\n      return map(patterns, function (pattern) {\\n        return merge({\\n          shiftKey: false,\\n          altKey: false,\\n          ctrlKey: false,\\n          metaKey: false,\\n          keyCode: 0,\\n          action: noop\\n        }, pattern);\\n      });\\n    };\\n    var matchesEvent = function (pattern, evt) {\\n      return evt.keyCode === pattern.keyCode && evt.shiftKey === pattern.shiftKey && evt.altKey === pattern.altKey && evt.ctrlKey === pattern.ctrlKey && evt.metaKey === pattern.metaKey;\\n    };\\n    var match$1 = function (patterns, evt) {\\n      return bind(defaultPatterns(patterns), function (pattern) {\\n        return matchesEvent(pattern, evt) ? [pattern] : [];\\n      });\\n    };\\n    var action = function (f) {\\n      var x = [];\\n      for (var _i = 1; _i < arguments.length; _i++) {\\n        x[_i - 1] = arguments[_i];\\n      }\\n      var args = Array.prototype.slice.call(arguments, 1);\\n      return function () {\\n        return f.apply(null, args);\\n      };\\n    };\\n    var execute = function (patterns, evt) {\\n      return find(match$1(patterns, evt), function (pattern) {\\n        return pattern.action();\\n      });\\n    };\\n    var MatchKeys = {\\n      match: match$1,\\n      action: action,\\n      execute: execute\\n    };\\n\\n    var executeKeydownOverride = function (editor, caret, evt) {\\n      var os = PlatformDetection$1.detect().os;\\n      MatchKeys.execute([\\n        {\\n          keyCode: VK.RIGHT,\\n          action: moveH(editor, true)\\n        },\\n        {\\n          keyCode: VK.LEFT,\\n          action: moveH(editor, false)\\n        },\\n        {\\n          keyCode: VK.UP,\\n          action: moveV(editor, false)\\n        },\\n        {\\n          keyCode: VK.DOWN,\\n          action: moveV(editor, true)\\n        },\\n        {\\n          keyCode: VK.RIGHT,\\n          action: moveH$1(editor, true)\\n        },\\n        {\\n          keyCode: VK.LEFT,\\n          action: moveH$1(editor, false)\\n        },\\n        {\\n          keyCode: VK.UP,\\n          action: moveV$1(editor, false)\\n        },\\n        {\\n          keyCode: VK.DOWN,\\n          action: moveV$1(editor, true)\\n        },\\n        {\\n          keyCode: VK.RIGHT,\\n          action: BoundarySelection.move(editor, caret, true)\\n        },\\n        {\\n          keyCode: VK.LEFT,\\n          action: BoundarySelection.move(editor, caret, false)\\n        },\\n        {\\n          keyCode: VK.RIGHT,\\n          ctrlKey: !os.isOSX(),\\n          altKey: os.isOSX(),\\n          action: BoundarySelection.moveNextWord(editor, caret)\\n        },\\n        {\\n          keyCode: VK.LEFT,\\n          ctrlKey: !os.isOSX(),\\n          altKey: os.isOSX(),\\n          action: BoundarySelection.movePrevWord(editor, caret)\\n        },\\n        {\\n          keyCode: VK.UP,\\n          action: moveV$2(editor, false)\\n        },\\n        {\\n          keyCode: VK.DOWN,\\n          action: moveV$2(editor, true)\\n        }\\n      ], evt).each(function (_) {\\n        evt.preventDefault();\\n      });\\n    };\\n    var setup$7 = function (editor, caret) {\\n      editor.on('keydown', function (evt) {\\n        if (evt.isDefaultPrevented() === false) {\\n          executeKeydownOverride(editor, caret, evt);\\n        }\\n      });\\n    };\\n    var ArrowKeys = { setup: setup$7 };\\n\\n    var executeKeydownOverride$1 = function (editor, caret, evt) {\\n      MatchKeys.execute([\\n        {\\n          keyCode: VK.BACKSPACE,\\n          action: MatchKeys.action(CefDelete.backspaceDelete, editor, false)\\n        },\\n        {\\n          keyCode: VK.DELETE,\\n          action: MatchKeys.action(CefDelete.backspaceDelete, editor, true)\\n        },\\n        {\\n          keyCode: VK.BACKSPACE,\\n          action: MatchKeys.action(CefBoundaryDelete.backspaceDelete, editor, false)\\n        },\\n        {\\n          keyCode: VK.DELETE,\\n          action: MatchKeys.action(CefBoundaryDelete.backspaceDelete, editor, true)\\n        },\\n        {\\n          keyCode: VK.BACKSPACE,\\n          action: MatchKeys.action(InlineBoundaryDelete.backspaceDelete, editor, caret, false)\\n        },\\n        {\\n          keyCode: VK.DELETE,\\n          action: MatchKeys.action(InlineBoundaryDelete.backspaceDelete, editor, caret, true)\\n        },\\n        {\\n          keyCode: VK.BACKSPACE,\\n          action: MatchKeys.action(TableDelete.backspaceDelete, editor, false)\\n        },\\n        {\\n          keyCode: VK.DELETE,\\n          action: MatchKeys.action(TableDelete.backspaceDelete, editor, true)\\n        },\\n        {\\n          keyCode: VK.BACKSPACE,\\n          action: MatchKeys.action(BlockRangeDelete.backspaceDelete, editor, false)\\n        },\\n        {\\n          keyCode: VK.DELETE,\\n          action: MatchKeys.action(BlockRangeDelete.backspaceDelete, editor, true)\\n        },\\n        {\\n          keyCode: VK.BACKSPACE,\\n          action: MatchKeys.action(BlockBoundaryDelete.backspaceDelete, editor, false)\\n        },\\n        {\\n          keyCode: VK.DELETE,\\n          action: MatchKeys.action(BlockBoundaryDelete.backspaceDelete, editor, true)\\n        },\\n        {\\n          keyCode: VK.BACKSPACE,\\n          action: MatchKeys.action(InlineFormatDelete.backspaceDelete, editor, false)\\n        },\\n        {\\n          keyCode: VK.DELETE,\\n          action: MatchKeys.action(InlineFormatDelete.backspaceDelete, editor, true)\\n        }\\n      ], evt).each(function (_) {\\n        evt.preventDefault();\\n      });\\n    };\\n    var executeKeyupOverride = function (editor, evt) {\\n      MatchKeys.execute([\\n        {\\n          keyCode: VK.BACKSPACE,\\n          action: MatchKeys.action(CefDelete.paddEmptyElement, editor)\\n        },\\n        {\\n          keyCode: VK.DELETE,\\n          action: MatchKeys.action(CefDelete.paddEmptyElement, editor)\\n        }\\n      ], evt);\\n    };\\n    var setup$8 = function (editor, caret) {\\n      editor.on('keydown', function (evt) {\\n        if (evt.isDefaultPrevented() === false) {\\n          executeKeydownOverride$1(editor, caret, evt);\\n        }\\n      });\\n      editor.on('keyup', function (evt) {\\n        if (evt.isDefaultPrevented() === false) {\\n          executeKeyupOverride(editor, evt);\\n        }\\n      });\\n    };\\n    var DeleteBackspaceKeys = { setup: setup$8 };\\n\\n    var firstNonWhiteSpaceNodeSibling = function (node) {\\n      while (node) {\\n        if (node.nodeType === 1 || node.nodeType === 3 && node.data && /[\\\\r\\\\n\\\\s]/.test(node.data)) {\\n          return node;\\n        }\\n        node = node.nextSibling;\\n      }\\n    };\\n    var moveToCaretPosition = function (editor, root) {\\n      var walker, node, rng, lastNode = root, tempElm;\\n      var dom = editor.dom;\\n      var moveCaretBeforeOnEnterElementsMap = editor.schema.getMoveCaretBeforeOnEnterElements();\\n      if (!root) {\\n        return;\\n      }\\n      if (/^(LI|DT|DD)$/.test(root.nodeName)) {\\n        var firstChild = firstNonWhiteSpaceNodeSibling(root.firstChild);\\n        if (firstChild && /^(UL|OL|DL)$/.test(firstChild.nodeName)) {\\n          root.insertBefore(dom.doc.createTextNode('\\\\xA0'), root.firstChild);\\n        }\\n      }\\n      rng = dom.createRng();\\n      root.normalize();\\n      if (root.hasChildNodes()) {\\n        walker = new TreeWalker(root, root);\\n        while (node = walker.current()) {\\n          if (NodeType.isText(node)) {\\n            rng.setStart(node, 0);\\n            rng.setEnd(node, 0);\\n            break;\\n          }\\n          if (moveCaretBeforeOnEnterElementsMap[node.nodeName.toLowerCase()]) {\\n            rng.setStartBefore(node);\\n            rng.setEndBefore(node);\\n            break;\\n          }\\n          lastNode = node;\\n          node = walker.next();\\n        }\\n        if (!node) {\\n          rng.setStart(lastNode, 0);\\n          rng.setEnd(lastNode, 0);\\n        }\\n      } else {\\n        if (NodeType.isBr(root)) {\\n          if (root.nextSibling && dom.isBlock(root.nextSibling)) {\\n            rng.setStartBefore(root);\\n            rng.setEndBefore(root);\\n          } else {\\n            rng.setStartAfter(root);\\n            rng.setEndAfter(root);\\n          }\\n        } else {\\n          rng.setStart(root, 0);\\n          rng.setEnd(root, 0);\\n        }\\n      }\\n      editor.selection.setRng(rng);\\n      dom.remove(tempElm);\\n      editor.selection.scrollIntoView(root);\\n    };\\n    var getEditableRoot = function (dom, node) {\\n      var root = dom.getRoot();\\n      var parent, editableRoot;\\n      parent = node;\\n      while (parent !== root && dom.getContentEditable(parent) !== 'false') {\\n        if (dom.getContentEditable(parent) === 'true') {\\n          editableRoot = parent;\\n        }\\n        parent = parent.parentNode;\\n      }\\n      return parent !== root ? editableRoot : root;\\n    };\\n    var getParentBlock$2 = function (editor) {\\n      return Option.from(editor.dom.getParent(editor.selection.getStart(true), editor.dom.isBlock));\\n    };\\n    var getParentBlockName = function (editor) {\\n      return getParentBlock$2(editor).fold(constant(''), function (parentBlock) {\\n        return parentBlock.nodeName.toUpperCase();\\n      });\\n    };\\n    var isListItemParentBlock = function (editor) {\\n      return getParentBlock$2(editor).filter(function (elm) {\\n        return isListItem(Element.fromDom(elm));\\n      }).isSome();\\n    };\\n    var NewLineUtils = {\\n      moveToCaretPosition: moveToCaretPosition,\\n      getEditableRoot: getEditableRoot,\\n      getParentBlock: getParentBlock$2,\\n      getParentBlockName: getParentBlockName,\\n      isListItemParentBlock: isListItemParentBlock\\n    };\\n\\n    var hasFirstChild = function (elm, name) {\\n      return elm.firstChild && elm.firstChild.nodeName === name;\\n    };\\n    var hasParent$1 = function (elm, parentName) {\\n      return elm && elm.parentNode && elm.parentNode.nodeName === parentName;\\n    };\\n    var isListBlock = function (elm) {\\n      return elm && /^(OL|UL|LI)$/.test(elm.nodeName);\\n    };\\n    var isNestedList = function (elm) {\\n      return isListBlock(elm) && isListBlock(elm.parentNode);\\n    };\\n    var getContainerBlock = function (containerBlock) {\\n      var containerBlockParent = containerBlock.parentNode;\\n      if (/^(LI|DT|DD)$/.test(containerBlockParent.nodeName)) {\\n        return containerBlockParent;\\n      }\\n      return containerBlock;\\n    };\\n    var isFirstOrLastLi = function (containerBlock, parentBlock, first) {\\n      var node = containerBlock[first ? 'firstChild' : 'lastChild'];\\n      while (node) {\\n        if (NodeType.isElement(node)) {\\n          break;\\n        }\\n        node = node[first ? 'nextSibling' : 'previousSibling'];\\n      }\\n      return node === parentBlock;\\n    };\\n    var insert$1 = function (editor, createNewBlock, containerBlock, parentBlock, newBlockName) {\\n      var dom = editor.dom;\\n      var rng = editor.selection.getRng();\\n      if (containerBlock === editor.getBody()) {\\n        return;\\n      }\\n      if (isNestedList(containerBlock)) {\\n        newBlockName = 'LI';\\n      }\\n      var newBlock = newBlockName ? createNewBlock(newBlockName) : dom.create('BR');\\n      if (isFirstOrLastLi(containerBlock, parentBlock, true) && isFirstOrLastLi(containerBlock, parentBlock, false)) {\\n        if (hasParent$1(containerBlock, 'LI')) {\\n          dom.insertAfter(newBlock, getContainerBlock(containerBlock));\\n        } else {\\n          dom.replace(newBlock, containerBlock);\\n        }\\n      } else if (isFirstOrLastLi(containerBlock, parentBlock, true)) {\\n        if (hasParent$1(containerBlock, 'LI')) {\\n          dom.insertAfter(newBlock, getContainerBlock(containerBlock));\\n          newBlock.appendChild(dom.doc.createTextNode(' '));\\n          newBlock.appendChild(containerBlock);\\n        } else {\\n          containerBlock.parentNode.insertBefore(newBlock, containerBlock);\\n        }\\n      } else if (isFirstOrLastLi(containerBlock, parentBlock, false)) {\\n        dom.insertAfter(newBlock, getContainerBlock(containerBlock));\\n      } else {\\n        containerBlock = getContainerBlock(containerBlock);\\n        var tmpRng = rng.cloneRange();\\n        tmpRng.setStartAfter(parentBlock);\\n        tmpRng.setEndAfter(containerBlock);\\n        var fragment = tmpRng.extractContents();\\n        if (newBlockName === 'LI' && hasFirstChild(fragment, 'LI')) {\\n          newBlock = fragment.firstChild;\\n          dom.insertAfter(fragment, containerBlock);\\n        } else {\\n          dom.insertAfter(fragment, containerBlock);\\n          dom.insertAfter(newBlock, containerBlock);\\n        }\\n      }\\n      dom.remove(parentBlock);\\n      NewLineUtils.moveToCaretPosition(editor, newBlock);\\n    };\\n    var InsertLi = { insert: insert$1 };\\n\\n    var trimZwsp = function (fragment) {\\n      each(descendants(Element.fromDom(fragment), isText), function (text) {\\n        var rawNode = text.dom();\\n        rawNode.nodeValue = Zwsp.trim(rawNode.nodeValue);\\n      });\\n    };\\n    var isEmptyAnchor = function (dom, elm) {\\n      return elm && elm.nodeName === 'A' && dom.isEmpty(elm);\\n    };\\n    var isTableCell$5 = function (node) {\\n      return node && /^(TD|TH|CAPTION)$/.test(node.nodeName);\\n    };\\n    var emptyBlock = function (elm) {\\n      elm.innerHTML = '<br data-mce-bogus=\\\"1\\\">';\\n    };\\n    var containerAndSiblingName = function (container, nodeName) {\\n      return container.nodeName === nodeName || container.previousSibling && container.previousSibling.nodeName === nodeName;\\n    };\\n    var canSplitBlock = function (dom, node) {\\n      return node && dom.isBlock(node) && !/^(TD|TH|CAPTION|FORM)$/.test(node.nodeName) && !/^(fixed|absolute)/i.test(node.style.position) && dom.getContentEditable(node) !== 'true';\\n    };\\n    var trimInlineElementsOnLeftSideOfBlock = function (dom, nonEmptyElementsMap, block) {\\n      var node = block;\\n      var firstChilds = [];\\n      var i;\\n      if (!node) {\\n        return;\\n      }\\n      while (node = node.firstChild) {\\n        if (dom.isBlock(node)) {\\n          return;\\n        }\\n        if (NodeType.isElement(node) && !nonEmptyElementsMap[node.nodeName.toLowerCase()]) {\\n          firstChilds.push(node);\\n        }\\n      }\\n      i = firstChilds.length;\\n      while (i--) {\\n        node = firstChilds[i];\\n        if (!node.hasChildNodes() || node.firstChild === node.lastChild && node.firstChild.nodeValue === '') {\\n          dom.remove(node);\\n        } else {\\n          if (isEmptyAnchor(dom, node)) {\\n            dom.remove(node);\\n          }\\n        }\\n      }\\n    };\\n    var normalizeZwspOffset = function (start, container, offset) {\\n      if (NodeType.isText(container) === false) {\\n        return offset;\\n      } else if (start) {\\n        return offset === 1 && container.data.charAt(offset - 1) === Zwsp.ZWSP ? 0 : offset;\\n      } else {\\n        return offset === container.data.length - 1 && container.data.charAt(offset) === Zwsp.ZWSP ? container.data.length : offset;\\n      }\\n    };\\n    var includeZwspInRange = function (rng) {\\n      var newRng = rng.cloneRange();\\n      newRng.setStart(rng.startContainer, normalizeZwspOffset(true, rng.startContainer, rng.startOffset));\\n      newRng.setEnd(rng.endContainer, normalizeZwspOffset(false, rng.endContainer, rng.endOffset));\\n      return newRng;\\n    };\\n    var trimLeadingLineBreaks = function (node) {\\n      do {\\n        if (NodeType.isText(node)) {\\n          node.nodeValue = node.nodeValue.replace(/^[\\\\r\\\\n]+/, '');\\n        }\\n        node = node.firstChild;\\n      } while (node);\\n    };\\n    var getEditableRoot$1 = function (dom, node) {\\n      var root = dom.getRoot();\\n      var parent, editableRoot;\\n      parent = node;\\n      while (parent !== root && dom.getContentEditable(parent) !== 'false') {\\n        if (dom.getContentEditable(parent) === 'true') {\\n          editableRoot = parent;\\n        }\\n        parent = parent.parentNode;\\n      }\\n      return parent !== root ? editableRoot : root;\\n    };\\n    var applyAttributes = function (editor, node, forcedRootBlockAttrs) {\\n      Option.from(forcedRootBlockAttrs.style).map(editor.dom.parseStyle).each(function (attrStyles) {\\n        var currentStyles = getAllRaw(Element.fromDom(node));\\n        var newStyles = __assign(__assign({}, currentStyles), attrStyles);\\n        editor.dom.setStyles(node, newStyles);\\n      });\\n      var attrClassesOpt = Option.from(forcedRootBlockAttrs.class).map(function (attrClasses) {\\n        return attrClasses.split(/\\\\s+/);\\n      });\\n      var currentClassesOpt = Option.from(node.className).map(function (currentClasses) {\\n        return filter(currentClasses.split(/\\\\s+/), function (clazz) {\\n          return clazz !== '';\\n        });\\n      });\\n      lift2(attrClassesOpt, currentClassesOpt, function (attrClasses, currentClasses) {\\n        var filteredClasses = filter(currentClasses, function (clazz) {\\n          return !contains(attrClasses, clazz);\\n        });\\n        var newClasses = __spreadArrays(attrClasses, filteredClasses);\\n        editor.dom.setAttrib(node, 'class', newClasses.join(' '));\\n      });\\n      var appliedAttrs = [\\n        'style',\\n        'class'\\n      ];\\n      var remainingAttrs = bifilter(forcedRootBlockAttrs, function (_, attrs) {\\n        return !contains(appliedAttrs, attrs);\\n      }).t;\\n      editor.dom.setAttribs(node, remainingAttrs);\\n    };\\n    var setForcedBlockAttrs = function (editor, node) {\\n      var forcedRootBlockName = Settings.getForcedRootBlock(editor);\\n      if (forcedRootBlockName && forcedRootBlockName.toLowerCase() === node.tagName.toLowerCase()) {\\n        var forcedRootBlockAttrs = Settings.getForcedRootBlockAttrs(editor);\\n        applyAttributes(editor, node, forcedRootBlockAttrs);\\n      }\\n    };\\n    var wrapSelfAndSiblingsInDefaultBlock = function (editor, newBlockName, rng, container, offset) {\\n      var newBlock, parentBlock, startNode, node, next, rootBlockName;\\n      var blockName = newBlockName || 'P';\\n      var dom = editor.dom, editableRoot = getEditableRoot$1(dom, container);\\n      parentBlock = dom.getParent(container, dom.isBlock);\\n      if (!parentBlock || !canSplitBlock(dom, parentBlock)) {\\n        parentBlock = parentBlock || editableRoot;\\n        if (parentBlock === editor.getBody() || isTableCell$5(parentBlock)) {\\n          rootBlockName = parentBlock.nodeName.toLowerCase();\\n        } else {\\n          rootBlockName = parentBlock.parentNode.nodeName.toLowerCase();\\n        }\\n        if (!parentBlock.hasChildNodes()) {\\n          newBlock = dom.create(blockName);\\n          setForcedBlockAttrs(editor, newBlock);\\n          parentBlock.appendChild(newBlock);\\n          rng.setStart(newBlock, 0);\\n          rng.setEnd(newBlock, 0);\\n          return newBlock;\\n        }\\n        node = container;\\n        while (node.parentNode !== parentBlock) {\\n          node = node.parentNode;\\n        }\\n        while (node && !dom.isBlock(node)) {\\n          startNode = node;\\n          node = node.previousSibling;\\n        }\\n        if (startNode && editor.schema.isValidChild(rootBlockName, blockName.toLowerCase())) {\\n          newBlock = dom.create(blockName);\\n          setForcedBlockAttrs(editor, newBlock);\\n          startNode.parentNode.insertBefore(newBlock, startNode);\\n          node = startNode;\\n          while (node && !dom.isBlock(node)) {\\n            next = node.nextSibling;\\n            newBlock.appendChild(node);\\n            node = next;\\n          }\\n          rng.setStart(container, offset);\\n          rng.setEnd(container, offset);\\n        }\\n      }\\n      return container;\\n    };\\n    var addBrToBlockIfNeeded = function (dom, block) {\\n      var lastChild;\\n      block.normalize();\\n      lastChild = block.lastChild;\\n      if (!lastChild || /^(left|right)$/gi.test(dom.getStyle(lastChild, 'float', true))) {\\n        dom.add(block, 'br');\\n      }\\n    };\\n    var insert$2 = function (editor, evt) {\\n      var tmpRng, editableRoot, container, offset, parentBlock, shiftKey;\\n      var newBlock, fragment, containerBlock, parentBlockName, containerBlockName, newBlockName, isAfterLastNodeInContainer;\\n      var dom = editor.dom;\\n      var schema = editor.schema, nonEmptyElementsMap = schema.getNonEmptyElements();\\n      var rng = editor.selection.getRng();\\n      var createNewBlock = function (name) {\\n        var node = container, block, clonedNode, caretNode;\\n        var textInlineElements = schema.getTextInlineElements();\\n        if (name || parentBlockName === 'TABLE' || parentBlockName === 'HR') {\\n          block = dom.create(name || newBlockName);\\n        } else {\\n          block = parentBlock.cloneNode(false);\\n        }\\n        caretNode = block;\\n        if (Settings.shouldKeepStyles(editor) === false) {\\n          dom.setAttrib(block, 'style', null);\\n          dom.setAttrib(block, 'class', null);\\n        } else {\\n          do {\\n            if (textInlineElements[node.nodeName]) {\\n              if (isCaretNode(node) || Bookmarks.isBookmarkNode(node)) {\\n                continue;\\n              }\\n              clonedNode = node.cloneNode(false);\\n              dom.setAttrib(clonedNode, 'id', '');\\n              if (block.hasChildNodes()) {\\n                clonedNode.appendChild(block.firstChild);\\n                block.appendChild(clonedNode);\\n              } else {\\n                caretNode = clonedNode;\\n                block.appendChild(clonedNode);\\n              }\\n            }\\n          } while ((node = node.parentNode) && node !== editableRoot);\\n        }\\n        setForcedBlockAttrs(editor, block);\\n        emptyBlock(caretNode);\\n        return block;\\n      };\\n      var isCaretAtStartOrEndOfBlock = function (start) {\\n        var walker, node, name, normalizedOffset;\\n        normalizedOffset = normalizeZwspOffset(start, container, offset);\\n        if (NodeType.isText(container) && (start ? normalizedOffset > 0 : normalizedOffset < container.nodeValue.length)) {\\n          return false;\\n        }\\n        if (container.parentNode === parentBlock && isAfterLastNodeInContainer && !start) {\\n          return true;\\n        }\\n        if (start && NodeType.isElement(container) && container === parentBlock.firstChild) {\\n          return true;\\n        }\\n        if (containerAndSiblingName(container, 'TABLE') || containerAndSiblingName(container, 'HR')) {\\n          return isAfterLastNodeInContainer && !start || !isAfterLastNodeInContainer && start;\\n        }\\n        walker = new TreeWalker(container, parentBlock);\\n        if (NodeType.isText(container)) {\\n          if (start && normalizedOffset === 0) {\\n            walker.prev();\\n          } else if (!start && normalizedOffset === container.nodeValue.length) {\\n            walker.next();\\n          }\\n        }\\n        while (node = walker.current()) {\\n          if (NodeType.isElement(node)) {\\n            if (!node.getAttribute('data-mce-bogus')) {\\n              name = node.nodeName.toLowerCase();\\n              if (nonEmptyElementsMap[name] && name !== 'br') {\\n                return false;\\n              }\\n            }\\n          } else if (NodeType.isText(node) && !/^[ \\\\t\\\\r\\\\n]*$/.test(node.nodeValue)) {\\n            return false;\\n          }\\n          if (start) {\\n            walker.prev();\\n          } else {\\n            walker.next();\\n          }\\n        }\\n        return true;\\n      };\\n      var insertNewBlockAfter = function () {\\n        if (/^(H[1-6]|PRE|FIGURE)$/.test(parentBlockName) && containerBlockName !== 'HGROUP') {\\n          newBlock = createNewBlock(newBlockName);\\n        } else {\\n          newBlock = createNewBlock();\\n        }\\n        if (Settings.shouldEndContainerOnEmptyBlock(editor) && canSplitBlock(dom, containerBlock) && dom.isEmpty(parentBlock)) {\\n          newBlock = dom.split(containerBlock, parentBlock);\\n        } else {\\n          dom.insertAfter(newBlock, parentBlock);\\n        }\\n        NewLineUtils.moveToCaretPosition(editor, newBlock);\\n      };\\n      NormalizeRange.normalize(dom, rng).each(function (normRng) {\\n        rng.setStart(normRng.startContainer, normRng.startOffset);\\n        rng.setEnd(normRng.endContainer, normRng.endOffset);\\n      });\\n      container = rng.startContainer;\\n      offset = rng.startOffset;\\n      newBlockName = Settings.getForcedRootBlock(editor);\\n      shiftKey = evt.shiftKey;\\n      if (NodeType.isElement(container) && container.hasChildNodes()) {\\n        isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\\n        container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\\n        if (isAfterLastNodeInContainer && NodeType.isText(container)) {\\n          offset = container.nodeValue.length;\\n        } else {\\n          offset = 0;\\n        }\\n      }\\n      editableRoot = getEditableRoot$1(dom, container);\\n      if (!editableRoot) {\\n        return;\\n      }\\n      if (newBlockName && !shiftKey || !newBlockName && shiftKey) {\\n        container = wrapSelfAndSiblingsInDefaultBlock(editor, newBlockName, rng, container, offset);\\n      }\\n      parentBlock = dom.getParent(container, dom.isBlock);\\n      containerBlock = parentBlock ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;\\n      parentBlockName = parentBlock ? parentBlock.nodeName.toUpperCase() : '';\\n      containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';\\n      if (containerBlockName === 'LI' && !evt.ctrlKey) {\\n        parentBlock = containerBlock;\\n        containerBlock = containerBlock.parentNode;\\n        parentBlockName = containerBlockName;\\n      }\\n      if (/^(LI|DT|DD)$/.test(parentBlockName)) {\\n        if (dom.isEmpty(parentBlock)) {\\n          InsertLi.insert(editor, createNewBlock, containerBlock, parentBlock, newBlockName);\\n          return;\\n        }\\n      }\\n      if (newBlockName && parentBlock === editor.getBody()) {\\n        return;\\n      }\\n      newBlockName = newBlockName || 'P';\\n      if (isCaretContainerBlock(parentBlock)) {\\n        newBlock = showCaretContainerBlock(parentBlock);\\n        if (dom.isEmpty(parentBlock)) {\\n          emptyBlock(parentBlock);\\n        }\\n        setForcedBlockAttrs(editor, newBlock);\\n        NewLineUtils.moveToCaretPosition(editor, newBlock);\\n      } else if (isCaretAtStartOrEndOfBlock()) {\\n        insertNewBlockAfter();\\n      } else if (isCaretAtStartOrEndOfBlock(true)) {\\n        newBlock = parentBlock.parentNode.insertBefore(createNewBlock(), parentBlock);\\n        NewLineUtils.moveToCaretPosition(editor, containerAndSiblingName(parentBlock, 'HR') ? newBlock : parentBlock);\\n      } else {\\n        tmpRng = includeZwspInRange(rng).cloneRange();\\n        tmpRng.setEndAfter(parentBlock);\\n        fragment = tmpRng.extractContents();\\n        trimZwsp(fragment);\\n        trimLeadingLineBreaks(fragment);\\n        newBlock = fragment.firstChild;\\n        dom.insertAfter(fragment, parentBlock);\\n        trimInlineElementsOnLeftSideOfBlock(dom, nonEmptyElementsMap, newBlock);\\n        addBrToBlockIfNeeded(dom, parentBlock);\\n        if (dom.isEmpty(parentBlock)) {\\n          emptyBlock(parentBlock);\\n        }\\n        newBlock.normalize();\\n        if (dom.isEmpty(newBlock)) {\\n          dom.remove(newBlock);\\n          insertNewBlockAfter();\\n        } else {\\n          setForcedBlockAttrs(editor, newBlock);\\n          NewLineUtils.moveToCaretPosition(editor, newBlock);\\n        }\\n      }\\n      dom.setAttrib(newBlock, 'id', '');\\n      editor.fire('NewBlock', { newBlock: newBlock });\\n    };\\n    var InsertBlock = { insert: insert$2 };\\n\\n    var matchesSelector = function (editor, selector) {\\n      return NewLineUtils.getParentBlock(editor).filter(function (parentBlock) {\\n        return selector.length > 0 && is$1(Element.fromDom(parentBlock), selector);\\n      }).isSome();\\n    };\\n    var shouldInsertBr = function (editor) {\\n      return matchesSelector(editor, Settings.getBrNewLineSelector(editor));\\n    };\\n    var shouldBlockNewLine = function (editor) {\\n      return matchesSelector(editor, Settings.getNoNewLineSelector(editor));\\n    };\\n    var ContextSelectors = {\\n      shouldInsertBr: shouldInsertBr,\\n      shouldBlockNewLine: shouldBlockNewLine\\n    };\\n\\n    var newLineAction = Adt.generate([\\n      { br: [] },\\n      { block: [] },\\n      { none: [] }\\n    ]);\\n    var shouldBlockNewLine$1 = function (editor, shiftKey) {\\n      return ContextSelectors.shouldBlockNewLine(editor);\\n    };\\n    var isBrMode = function (requiredState) {\\n      return function (editor, shiftKey) {\\n        var brMode = Settings.getForcedRootBlock(editor) === '';\\n        return brMode === requiredState;\\n      };\\n    };\\n    var inListBlock = function (requiredState) {\\n      return function (editor, shiftKey) {\\n        return NewLineUtils.isListItemParentBlock(editor) === requiredState;\\n      };\\n    };\\n    var inBlock = function (blockName, requiredState) {\\n      return function (editor, shiftKey) {\\n        var state = NewLineUtils.getParentBlockName(editor) === blockName.toUpperCase();\\n        return state === requiredState;\\n      };\\n    };\\n    var inPreBlock = function (requiredState) {\\n      return inBlock('pre', requiredState);\\n    };\\n    var inSummaryBlock = function () {\\n      return inBlock('summary', true);\\n    };\\n    var shouldPutBrInPre$1 = function (requiredState) {\\n      return function (editor, shiftKey) {\\n        return Settings.shouldPutBrInPre(editor) === requiredState;\\n      };\\n    };\\n    var inBrContext = function (editor, shiftKey) {\\n      return ContextSelectors.shouldInsertBr(editor);\\n    };\\n    var hasShiftKey = function (editor, shiftKey) {\\n      return shiftKey;\\n    };\\n    var canInsertIntoEditableRoot = function (editor) {\\n      var forcedRootBlock = Settings.getForcedRootBlock(editor);\\n      var rootEditable = NewLineUtils.getEditableRoot(editor.dom, editor.selection.getStart());\\n      return rootEditable && editor.schema.isValidChild(rootEditable.nodeName, forcedRootBlock ? forcedRootBlock : 'P');\\n    };\\n    var match$2 = function (predicates, action) {\\n      return function (editor, shiftKey) {\\n        var isMatch = foldl(predicates, function (res, p) {\\n          return res && p(editor, shiftKey);\\n        }, true);\\n        return isMatch ? Option.some(action) : Option.none();\\n      };\\n    };\\n    var getAction$1 = function (editor, evt) {\\n      return LazyEvaluator.evaluateUntil([\\n        match$2([shouldBlockNewLine$1], newLineAction.none()),\\n        match$2([inSummaryBlock()], newLineAction.br()),\\n        match$2([\\n          inPreBlock(true),\\n          shouldPutBrInPre$1(false),\\n          hasShiftKey\\n        ], newLineAction.br()),\\n        match$2([\\n          inPreBlock(true),\\n          shouldPutBrInPre$1(false)\\n        ], newLineAction.block()),\\n        match$2([\\n          inPreBlock(true),\\n          shouldPutBrInPre$1(true),\\n          hasShiftKey\\n        ], newLineAction.block()),\\n        match$2([\\n          inPreBlock(true),\\n          shouldPutBrInPre$1(true)\\n        ], newLineAction.br()),\\n        match$2([\\n          inListBlock(true),\\n          hasShiftKey\\n        ], newLineAction.br()),\\n        match$2([inListBlock(true)], newLineAction.block()),\\n        match$2([\\n          isBrMode(true),\\n          hasShiftKey,\\n          canInsertIntoEditableRoot\\n        ], newLineAction.block()),\\n        match$2([isBrMode(true)], newLineAction.br()),\\n        match$2([inBrContext], newLineAction.br()),\\n        match$2([\\n          isBrMode(false),\\n          hasShiftKey\\n        ], newLineAction.br()),\\n        match$2([canInsertIntoEditableRoot], newLineAction.block())\\n      ], [\\n        editor,\\n        evt.shiftKey\\n      ]).getOr(newLineAction.none());\\n    };\\n    var NewLineAction = { getAction: getAction$1 };\\n\\n    var insert$3 = function (editor, evt) {\\n      NewLineAction.getAction(editor, evt).fold(function () {\\n        InsertBr.insert(editor, evt);\\n      }, function () {\\n        InsertBlock.insert(editor, evt);\\n      }, noop);\\n    };\\n    var InsertNewLine = { insert: insert$3 };\\n\\n    var endTypingLevel = function (undoManager) {\\n      if (undoManager.typing) {\\n        undoManager.typing = false;\\n        undoManager.add();\\n      }\\n    };\\n    var handleEnterKeyEvent = function (editor, event) {\\n      if (event.isDefaultPrevented()) {\\n        return;\\n      }\\n      event.preventDefault();\\n      endTypingLevel(editor.undoManager);\\n      editor.undoManager.transact(function () {\\n        if (editor.selection.isCollapsed() === false) {\\n          editor.execCommand('Delete');\\n        }\\n        InsertNewLine.insert(editor, event);\\n      });\\n    };\\n    var setup$9 = function (editor) {\\n      editor.on('keydown', function (event) {\\n        if (event.keyCode === VK.ENTER) {\\n          handleEnterKeyEvent(editor, event);\\n        }\\n      });\\n    };\\n    var EnterKey = { setup: setup$9 };\\n\\n    var insertTextAtPosition = function (text, pos) {\\n      var container = pos.container();\\n      var offset = pos.offset();\\n      if (NodeType.isText(container)) {\\n        container.insertData(offset, text);\\n        return Option.some(CaretPosition(container, offset + text.length));\\n      } else {\\n        return getElementFromPosition(pos).map(function (elm) {\\n          var textNode = Element.fromText(text);\\n          if (pos.isAtEnd()) {\\n            after(elm, textNode);\\n          } else {\\n            before(elm, textNode);\\n          }\\n          return CaretPosition(textNode.dom(), text.length);\\n        });\\n      }\\n    };\\n    var insertNbspAtPosition = curry(insertTextAtPosition, '\\\\xA0');\\n    var insertSpaceAtPosition = curry(insertTextAtPosition, ' ');\\n\\n    var navigateIgnoreEmptyTextNodes = function (forward, root, from) {\\n      return CaretFinder.navigateIgnore(forward, root, from, isEmptyText);\\n    };\\n    var getClosestBlock = function (root, pos) {\\n      return find(Parents.parentsAndSelf(Element.fromDom(pos.container()), root), isBlock);\\n    };\\n    var isAtBeforeAfterBlockBoundary = function (forward, root, pos) {\\n      return navigateIgnoreEmptyTextNodes(forward, root.dom(), pos).forall(function (newPos) {\\n        return getClosestBlock(root, pos).fold(function () {\\n          return isInSameBlock(newPos, pos, root.dom()) === false;\\n        }, function (fromBlock) {\\n          return isInSameBlock(newPos, pos, root.dom()) === false && contains$3(fromBlock, Element.fromDom(newPos.container()));\\n        });\\n      });\\n    };\\n    var isAtBlockBoundary = function (forward, root, pos) {\\n      return getClosestBlock(root, pos).fold(function () {\\n        return navigateIgnoreEmptyTextNodes(forward, root.dom(), pos).forall(function (newPos) {\\n          return isInSameBlock(newPos, pos, root.dom()) === false;\\n        });\\n      }, function (parent) {\\n        return navigateIgnoreEmptyTextNodes(forward, parent.dom(), pos).isNone();\\n      });\\n    };\\n    var isAtStartOfBlock = curry(isAtBlockBoundary, false);\\n    var isAtEndOfBlock = curry(isAtBlockBoundary, true);\\n    var isBeforeBlock = curry(isAtBeforeAfterBlockBoundary, false);\\n    var isAfterBlock = curry(isAtBeforeAfterBlockBoundary, true);\\n\\n    var nbsp = '\\\\xA0';\\n    var isInMiddleOfText = function (pos) {\\n      return CaretPosition.isTextPosition(pos) && !pos.isAtStart() && !pos.isAtEnd();\\n    };\\n    var getClosestBlock$1 = function (root, pos) {\\n      var parentBlocks = filter(Parents.parentsAndSelf(Element.fromDom(pos.container()), root), isBlock);\\n      return head(parentBlocks).getOr(root);\\n    };\\n    var hasSpaceBefore = function (root, pos) {\\n      if (isInMiddleOfText(pos)) {\\n        return isAfterSpace(pos);\\n      } else {\\n        return isAfterSpace(pos) || CaretFinder.prevPosition(getClosestBlock$1(root, pos).dom(), pos).exists(isAfterSpace);\\n      }\\n    };\\n    var hasSpaceAfter = function (root, pos) {\\n      if (isInMiddleOfText(pos)) {\\n        return isBeforeSpace(pos);\\n      } else {\\n        return isBeforeSpace(pos) || CaretFinder.nextPosition(getClosestBlock$1(root, pos).dom(), pos).exists(isBeforeSpace);\\n      }\\n    };\\n    var isPreValue = function (value) {\\n      return contains([\\n        'pre',\\n        'pre-wrap'\\n      ], value);\\n    };\\n    var isInPre = function (pos) {\\n      return getElementFromPosition(pos).bind(function (elm) {\\n        return closest(elm, isElement);\\n      }).exists(function (elm) {\\n        return isPreValue(get$1(elm, 'white-space'));\\n      });\\n    };\\n    var isAtBeginningOfBody = function (root, pos) {\\n      return CaretFinder.prevPosition(root.dom(), pos).isNone();\\n    };\\n    var isAtEndOfBody = function (root, pos) {\\n      return CaretFinder.nextPosition(root.dom(), pos).isNone();\\n    };\\n    var isAtLineBoundary = function (root, pos) {\\n      return isAtBeginningOfBody(root, pos) || isAtEndOfBody(root, pos) || isAtStartOfBlock(root, pos) || isAtEndOfBlock(root, pos) || isAfterBr(root, pos) || isBeforeBr(root, pos);\\n    };\\n    var needsToHaveNbsp = function (root, pos) {\\n      if (isInPre(pos)) {\\n        return false;\\n      } else {\\n        return isAtLineBoundary(root, pos) || hasSpaceBefore(root, pos) || hasSpaceAfter(root, pos);\\n      }\\n    };\\n    var needsToBeNbspLeft = function (root, pos) {\\n      if (isInPre(pos)) {\\n        return false;\\n      } else {\\n        return isAtStartOfBlock(root, pos) || isBeforeBlock(root, pos) || isAfterBr(root, pos) || hasSpaceBefore(root, pos);\\n      }\\n    };\\n    var leanRight = function (pos) {\\n      var container = pos.container();\\n      var offset = pos.offset();\\n      if (NodeType.isText(container) && offset < container.data.length) {\\n        return CaretPosition(container, offset + 1);\\n      } else {\\n        return pos;\\n      }\\n    };\\n    var needsToBeNbspRight = function (root, pos) {\\n      var afterPos = leanRight(pos);\\n      if (isInPre(afterPos)) {\\n        return false;\\n      } else {\\n        return isAtEndOfBlock(root, afterPos) || isAfterBlock(root, afterPos) || isBeforeBr(root, afterPos) || hasSpaceAfter(root, afterPos);\\n      }\\n    };\\n    var needsToBeNbsp = function (root, pos) {\\n      return needsToBeNbspLeft(root, pos) || needsToBeNbspRight(root, pos);\\n    };\\n    var isNbspAt = function (text, offset) {\\n      return isNbsp(text.charAt(offset));\\n    };\\n    var hasNbsp = function (pos) {\\n      var container = pos.container();\\n      return NodeType.isText(container) && contains$2(container.data, nbsp);\\n    };\\n    var normalizeNbspMiddle = function (text) {\\n      var chars = text.split('');\\n      return map(chars, function (chr, i) {\\n        if (isNbsp(chr) && i > 0 && i < chars.length - 1 && isContent$1(chars[i - 1]) && isContent$1(chars[i + 1])) {\\n          return ' ';\\n        } else {\\n          return chr;\\n        }\\n      }).join('');\\n    };\\n    var normalizeNbspAtStart = function (root, node) {\\n      var text = node.data;\\n      var firstPos = CaretPosition(node, 0);\\n      if (isNbspAt(text, 0) && !needsToBeNbsp(root, firstPos)) {\\n        node.data = ' ' + text.slice(1);\\n        return true;\\n      } else {\\n        return false;\\n      }\\n    };\\n    var normalizeNbspInMiddleOfTextNode = function (node) {\\n      var text = node.data;\\n      var newText = normalizeNbspMiddle(text);\\n      if (newText !== text) {\\n        node.data = newText;\\n        return true;\\n      } else {\\n        return false;\\n      }\\n    };\\n    var normalizeNbspAtEnd = function (root, node) {\\n      var text = node.data;\\n      var lastPos = CaretPosition(node, text.length - 1);\\n      if (isNbspAt(text, text.length - 1) && !needsToBeNbsp(root, lastPos)) {\\n        node.data = text.slice(0, -1) + ' ';\\n        return true;\\n      } else {\\n        return false;\\n      }\\n    };\\n    var normalizeNbsps = function (root, pos) {\\n      return Option.some(pos).filter(hasNbsp).bind(function (pos) {\\n        var container = pos.container();\\n        var normalized = normalizeNbspAtStart(root, container) || normalizeNbspInMiddleOfTextNode(container) || normalizeNbspAtEnd(root, container);\\n        return normalized ? Option.some(pos) : Option.none();\\n      });\\n    };\\n    var normalizeNbspsInEditor = function (editor) {\\n      var root = Element.fromDom(editor.getBody());\\n      if (editor.selection.isCollapsed()) {\\n        normalizeNbsps(root, CaretPosition.fromRangeStart(editor.selection.getRng())).each(function (pos) {\\n          editor.selection.setRng(pos.toRange());\\n        });\\n      }\\n    };\\n\\n    var locationToCaretPosition = function (root) {\\n      return function (location) {\\n        return location.fold(function (element) {\\n          return CaretFinder.prevPosition(root.dom(), CaretPosition$1.before(element));\\n        }, function (element) {\\n          return CaretFinder.firstPositionIn(element);\\n        }, function (element) {\\n          return CaretFinder.lastPositionIn(element);\\n        }, function (element) {\\n          return CaretFinder.nextPosition(root.dom(), CaretPosition$1.after(element));\\n        });\\n      };\\n    };\\n    var insertInlineBoundarySpaceOrNbsp = function (root, pos) {\\n      return function (checkPos) {\\n        return needsToHaveNbsp(root, checkPos) ? insertNbspAtPosition(pos) : insertSpaceAtPosition(pos);\\n      };\\n    };\\n    var setSelection$1 = function (editor) {\\n      return function (pos) {\\n        editor.selection.setRng(pos.toRange());\\n        editor.nodeChanged();\\n        return true;\\n      };\\n    };\\n    var insertSpaceOrNbspAtSelection = function (editor) {\\n      var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\\n      var root = Element.fromDom(editor.getBody());\\n      if (editor.selection.isCollapsed()) {\\n        var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\\n        var caretPosition = CaretPosition$1.fromRangeStart(editor.selection.getRng());\\n        return BoundaryLocation.readLocation(isInlineTarget, editor.getBody(), caretPosition).bind(locationToCaretPosition(root)).bind(insertInlineBoundarySpaceOrNbsp(root, pos)).exists(setSelection$1(editor));\\n      } else {\\n        return false;\\n      }\\n    };\\n\\n    var executeKeydownOverride$2 = function (editor, evt) {\\n      MatchKeys.execute([{\\n          keyCode: VK.SPACEBAR,\\n          action: MatchKeys.action(insertSpaceOrNbspAtSelection, editor)\\n        }], evt).each(function (_) {\\n        evt.preventDefault();\\n      });\\n    };\\n    var setup$a = function (editor) {\\n      editor.on('keydown', function (evt) {\\n        if (evt.isDefaultPrevented() === false) {\\n          executeKeydownOverride$2(editor, evt);\\n        }\\n      });\\n    };\\n    var SpaceKey = { setup: setup$a };\\n\\n    var findBlockCaretContainer = function (editor) {\\n      return descendant(Element.fromDom(editor.getBody()), '*[data-mce-caret]').fold(constant(null), function (elm) {\\n        return elm.dom();\\n      });\\n    };\\n    var removeIeControlRect = function (editor) {\\n      editor.selection.setRng(editor.selection.getRng());\\n    };\\n    var showBlockCaretContainer = function (editor, blockCaretContainer) {\\n      if (blockCaretContainer.hasAttribute('data-mce-caret')) {\\n        showCaretContainerBlock(blockCaretContainer);\\n        removeIeControlRect(editor);\\n        editor.selection.scrollIntoView(blockCaretContainer);\\n      }\\n    };\\n    var handleBlockContainer = function (editor, e) {\\n      var blockCaretContainer = findBlockCaretContainer(editor);\\n      if (!blockCaretContainer) {\\n        return;\\n      }\\n      if (e.type === 'compositionstart') {\\n        e.preventDefault();\\n        e.stopPropagation();\\n        showBlockCaretContainer(editor, blockCaretContainer);\\n        return;\\n      }\\n      if (hasContent(blockCaretContainer)) {\\n        showBlockCaretContainer(editor, blockCaretContainer);\\n        editor.undoManager.add();\\n      }\\n    };\\n    var setup$b = function (editor) {\\n      editor.on('keyup compositionstart', curry(handleBlockContainer, editor));\\n    };\\n    var CaretContainerInput = { setup: setup$b };\\n\\n    var browser$4 = PlatformDetection$1.detect().browser;\\n    var setupIeInput = function (editor) {\\n      var keypressThrotter = first(function () {\\n        if (!editor.composing) {\\n          normalizeNbspsInEditor(editor);\\n        }\\n      }, 0);\\n      if (browser$4.isIE()) {\\n        editor.on('keypress', function (e) {\\n          keypressThrotter.throttle();\\n        });\\n        editor.on('remove', function (e) {\\n          keypressThrotter.cancel();\\n        });\\n      }\\n    };\\n    var setup$c = function (editor) {\\n      setupIeInput(editor);\\n      editor.on('input', function (e) {\\n        if (e.isComposing === false) {\\n          normalizeNbspsInEditor(editor);\\n        }\\n      });\\n    };\\n\\n    var executeKeydownOverride$3 = function (editor, evt) {\\n      MatchKeys.execute([\\n        {\\n          keyCode: VK.END,\\n          action: moveToLineEndPoint(editor, true)\\n        },\\n        {\\n          keyCode: VK.HOME,\\n          action: moveToLineEndPoint(editor, false)\\n        }\\n      ], evt).each(function (_) {\\n        evt.preventDefault();\\n      });\\n    };\\n    var setup$d = function (editor) {\\n      editor.on('keydown', function (evt) {\\n        if (evt.isDefaultPrevented() === false) {\\n          executeKeydownOverride$3(editor, evt);\\n        }\\n      });\\n    };\\n    var HomeEndKeys = { setup: setup$d };\\n\\n    var setup$e = function (editor) {\\n      var caret = BoundarySelection.setupSelectedState(editor);\\n      CaretContainerInput.setup(editor);\\n      ArrowKeys.setup(editor, caret);\\n      DeleteBackspaceKeys.setup(editor, caret);\\n      EnterKey.setup(editor);\\n      SpaceKey.setup(editor);\\n      setup$c(editor);\\n      HomeEndKeys.setup(editor);\\n    };\\n    var KeyboardOverrides = { setup: setup$e };\\n\\n    function Quirks (editor) {\\n      var each = Tools.each;\\n      var BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection, settings = editor.settings, parser = editor.parser;\\n      var isGecko = Env.gecko, isIE = Env.ie, isWebKit = Env.webkit;\\n      var mceInternalUrlPrefix = 'data:text/mce-internal,';\\n      var mceInternalDataType = isIE ? 'Text' : 'URL';\\n      var setEditorCommandState = function (cmd, state) {\\n        try {\\n          editor.getDoc().execCommand(cmd, false, state);\\n        } catch (ex) {\\n        }\\n      };\\n      var isDefaultPrevented = function (e) {\\n        return e.isDefaultPrevented();\\n      };\\n      var setMceInternalContent = function (e) {\\n        var selectionHtml, internalContent;\\n        if (e.dataTransfer) {\\n          if (editor.selection.isCollapsed() && e.target.tagName === 'IMG') {\\n            selection.select(e.target);\\n          }\\n          selectionHtml = editor.selection.getContent();\\n          if (selectionHtml.length > 0) {\\n            internalContent = mceInternalUrlPrefix + escape(editor.id) + ',' + escape(selectionHtml);\\n            e.dataTransfer.setData(mceInternalDataType, internalContent);\\n          }\\n        }\\n      };\\n      var getMceInternalContent = function (e) {\\n        var internalContent;\\n        if (e.dataTransfer) {\\n          internalContent = e.dataTransfer.getData(mceInternalDataType);\\n          if (internalContent && internalContent.indexOf(mceInternalUrlPrefix) >= 0) {\\n            internalContent = internalContent.substr(mceInternalUrlPrefix.length).split(',');\\n            return {\\n              id: unescape(internalContent[0]),\\n              html: unescape(internalContent[1])\\n            };\\n          }\\n        }\\n        return null;\\n      };\\n      var insertClipboardContents = function (content, internal) {\\n        if (editor.queryCommandSupported('mceInsertClipboardContent')) {\\n          editor.execCommand('mceInsertClipboardContent', false, {\\n            content: content,\\n            internal: internal\\n          });\\n        } else {\\n          editor.execCommand('mceInsertContent', false, content);\\n        }\\n      };\\n      var emptyEditorWhenDeleting = function () {\\n        var serializeRng = function (rng) {\\n          var body = dom.create('body');\\n          var contents = rng.cloneContents();\\n          body.appendChild(contents);\\n          return selection.serializer.serialize(body, { format: 'html' });\\n        };\\n        var allContentsSelected = function (rng) {\\n          var selection = serializeRng(rng);\\n          var allRng = dom.createRng();\\n          allRng.selectNode(editor.getBody());\\n          var allSelection = serializeRng(allRng);\\n          return selection === allSelection;\\n        };\\n        editor.on('keydown', function (e) {\\n          var keyCode = e.keyCode;\\n          var isCollapsed, body;\\n          if (!isDefaultPrevented(e) && (keyCode === DELETE || keyCode === BACKSPACE)) {\\n            isCollapsed = editor.selection.isCollapsed();\\n            body = editor.getBody();\\n            if (isCollapsed && !dom.isEmpty(body)) {\\n              return;\\n            }\\n            if (!isCollapsed && !allContentsSelected(editor.selection.getRng())) {\\n              return;\\n            }\\n            e.preventDefault();\\n            editor.setContent('');\\n            if (body.firstChild && dom.isBlock(body.firstChild)) {\\n              editor.selection.setCursorLocation(body.firstChild, 0);\\n            } else {\\n              editor.selection.setCursorLocation(body, 0);\\n            }\\n            editor.nodeChanged();\\n          }\\n        });\\n      };\\n      var selectAll = function () {\\n        editor.shortcuts.add('meta+a', null, 'SelectAll');\\n      };\\n      var inputMethodFocus = function () {\\n        if (!editor.settings.content_editable) {\\n          dom.bind(editor.getDoc(), 'mousedown mouseup', function (e) {\\n            var rng;\\n            if (e.target === editor.getDoc().documentElement) {\\n              rng = selection.getRng();\\n              editor.getBody().focus();\\n              if (e.type === 'mousedown') {\\n                if (isCaretContainer(rng.startContainer)) {\\n                  return;\\n                }\\n                selection.placeCaretAt(e.clientX, e.clientY);\\n              } else {\\n                selection.setRng(rng);\\n              }\\n            }\\n          });\\n        }\\n      };\\n      var removeHrOnBackspace = function () {\\n        editor.on('keydown', function (e) {\\n          if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {\\n            if (!editor.getBody().getElementsByTagName('hr').length) {\\n              return;\\n            }\\n            if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\\n              var node = selection.getNode();\\n              var previousSibling = node.previousSibling;\\n              if (node.nodeName === 'HR') {\\n                dom.remove(node);\\n                e.preventDefault();\\n                return;\\n              }\\n              if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'hr') {\\n                dom.remove(previousSibling);\\n                e.preventDefault();\\n              }\\n            }\\n          }\\n        });\\n      };\\n      var focusBody = function () {\\n        if (!domGlobals.Range.prototype.getClientRects) {\\n          editor.on('mousedown', function (e) {\\n            if (!isDefaultPrevented(e) && e.target.nodeName === 'HTML') {\\n              var body_1 = editor.getBody();\\n              body_1.blur();\\n              Delay.setEditorTimeout(editor, function () {\\n                body_1.focus();\\n              });\\n            }\\n          });\\n        }\\n      };\\n      var selectControlElements = function () {\\n        editor.on('click', function (e) {\\n          var target = e.target;\\n          if (/^(IMG|HR)$/.test(target.nodeName) && dom.getContentEditableParent(target) !== 'false') {\\n            e.preventDefault();\\n            editor.selection.select(target);\\n            editor.nodeChanged();\\n          }\\n          if (target.nodeName === 'A' && dom.hasClass(target, 'mce-item-anchor')) {\\n            e.preventDefault();\\n            selection.select(target);\\n          }\\n        });\\n      };\\n      var removeStylesWhenDeletingAcrossBlockElements = function () {\\n        var getAttributeApplyFunction = function () {\\n          var template = dom.getAttribs(selection.getStart().cloneNode(false));\\n          return function () {\\n            var target = selection.getStart();\\n            if (target !== editor.getBody()) {\\n              dom.setAttrib(target, 'style', null);\\n              each(template, function (attr) {\\n                target.setAttributeNode(attr.cloneNode(true));\\n              });\\n            }\\n          };\\n        };\\n        var isSelectionAcrossElements = function () {\\n          return !selection.isCollapsed() && dom.getParent(selection.getStart(), dom.isBlock) !== dom.getParent(selection.getEnd(), dom.isBlock);\\n        };\\n        editor.on('keypress', function (e) {\\n          var applyAttributes;\\n          if (!isDefaultPrevented(e) && (e.keyCode === 8 || e.keyCode === 46) && isSelectionAcrossElements()) {\\n            applyAttributes = getAttributeApplyFunction();\\n            editor.getDoc().execCommand('delete', false, null);\\n            applyAttributes();\\n            e.preventDefault();\\n            return false;\\n          }\\n        });\\n        dom.bind(editor.getDoc(), 'cut', function (e) {\\n          var applyAttributes;\\n          if (!isDefaultPrevented(e) && isSelectionAcrossElements()) {\\n            applyAttributes = getAttributeApplyFunction();\\n            Delay.setEditorTimeout(editor, function () {\\n              applyAttributes();\\n            });\\n          }\\n        });\\n      };\\n      var disableBackspaceIntoATable = function () {\\n        editor.on('keydown', function (e) {\\n          if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {\\n            if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\\n              var previousSibling = selection.getNode().previousSibling;\\n              if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'table') {\\n                e.preventDefault();\\n                return false;\\n              }\\n            }\\n          }\\n        });\\n      };\\n      var removeBlockQuoteOnBackSpace = function () {\\n        editor.on('keydown', function (e) {\\n          var rng, container, offset, root, parent;\\n          if (isDefaultPrevented(e) || e.keyCode !== VK.BACKSPACE) {\\n            return;\\n          }\\n          rng = selection.getRng();\\n          container = rng.startContainer;\\n          offset = rng.startOffset;\\n          root = dom.getRoot();\\n          parent = container;\\n          if (!rng.collapsed || offset !== 0) {\\n            return;\\n          }\\n          while (parent && parent.parentNode && parent.parentNode.firstChild === parent && parent.parentNode !== root) {\\n            parent = parent.parentNode;\\n          }\\n          if (parent.tagName === 'BLOCKQUOTE') {\\n            editor.formatter.toggle('blockquote', null, parent);\\n            rng = dom.createRng();\\n            rng.setStart(container, 0);\\n            rng.setEnd(container, 0);\\n            selection.setRng(rng);\\n          }\\n        });\\n      };\\n      var setGeckoEditingOptions = function () {\\n        var setOpts = function () {\\n          setEditorCommandState('StyleWithCSS', false);\\n          setEditorCommandState('enableInlineTableEditing', false);\\n          if (!settings.object_resizing) {\\n            setEditorCommandState('enableObjectResizing', false);\\n          }\\n        };\\n        if (!settings.readonly) {\\n          editor.on('BeforeExecCommand MouseDown', setOpts);\\n        }\\n      };\\n      var addBrAfterLastLinks = function () {\\n        var fixLinks = function () {\\n          each(dom.select('a'), function (node) {\\n            var parentNode = node.parentNode;\\n            var root = dom.getRoot();\\n            if (parentNode.lastChild === node) {\\n              while (parentNode && !dom.isBlock(parentNode)) {\\n                if (parentNode.parentNode.lastChild !== parentNode || parentNode === root) {\\n                  return;\\n                }\\n                parentNode = parentNode.parentNode;\\n              }\\n              dom.add(parentNode, 'br', { 'data-mce-bogus': 1 });\\n            }\\n          });\\n        };\\n        editor.on('SetContent ExecCommand', function (e) {\\n          if (e.type === 'setcontent' || e.command === 'mceInsertLink') {\\n            fixLinks();\\n          }\\n        });\\n      };\\n      var setDefaultBlockType = function () {\\n        if (settings.forced_root_block) {\\n          editor.on('init', function () {\\n            setEditorCommandState('DefaultParagraphSeparator', settings.forced_root_block);\\n          });\\n        }\\n      };\\n      var normalizeSelection = function () {\\n        editor.on('keyup focusin mouseup', function (e) {\\n          if (!VK.modifierPressed(e)) {\\n            selection.normalize();\\n          }\\n        }, true);\\n      };\\n      var showBrokenImageIcon = function () {\\n        editor.contentStyles.push('img:-moz-broken {' + '-moz-force-broken-image-icon:1;' + 'min-width:24px;' + 'min-height:24px' + '}');\\n      };\\n      var restoreFocusOnKeyDown = function () {\\n        if (!editor.inline) {\\n          editor.on('keydown', function () {\\n            if (domGlobals.document.activeElement === domGlobals.document.body) {\\n              editor.getWin().focus();\\n            }\\n          });\\n        }\\n      };\\n      var bodyHeight = function () {\\n        if (!editor.inline) {\\n          editor.contentStyles.push('body {min-height: 150px}');\\n          editor.on('click', function (e) {\\n            var rng;\\n            if (e.target.nodeName === 'HTML') {\\n              if (Env.ie > 11) {\\n                editor.getBody().focus();\\n                return;\\n              }\\n              rng = editor.selection.getRng();\\n              editor.getBody().focus();\\n              editor.selection.setRng(rng);\\n              editor.selection.normalize();\\n              editor.nodeChanged();\\n            }\\n          });\\n        }\\n      };\\n      var blockCmdArrowNavigation = function () {\\n        if (Env.mac) {\\n          editor.on('keydown', function (e) {\\n            if (VK.metaKeyPressed(e) && !e.shiftKey && (e.keyCode === 37 || e.keyCode === 39)) {\\n              e.preventDefault();\\n              editor.selection.getSel().modify('move', e.keyCode === 37 ? 'backward' : 'forward', 'lineboundary');\\n            }\\n          });\\n        }\\n      };\\n      var disableAutoUrlDetect = function () {\\n        setEditorCommandState('AutoUrlDetect', false);\\n      };\\n      var tapLinksAndImages = function () {\\n        editor.on('click', function (e) {\\n          var elm = e.target;\\n          do {\\n            if (elm.tagName === 'A') {\\n              e.preventDefault();\\n              return;\\n            }\\n          } while (elm = elm.parentNode);\\n        });\\n        editor.contentStyles.push('.mce-content-body {-webkit-touch-callout: none}');\\n      };\\n      var blockFormSubmitInsideEditor = function () {\\n        editor.on('init', function () {\\n          editor.dom.bind(editor.getBody(), 'submit', function (e) {\\n            e.preventDefault();\\n          });\\n        });\\n      };\\n      var removeAppleInterchangeBrs = function () {\\n        parser.addNodeFilter('br', function (nodes) {\\n          var i = nodes.length;\\n          while (i--) {\\n            if (nodes[i].attr('class') === 'Apple-interchange-newline') {\\n              nodes[i].remove();\\n            }\\n          }\\n        });\\n      };\\n      var ieInternalDragAndDrop = function () {\\n        editor.on('dragstart', function (e) {\\n          setMceInternalContent(e);\\n        });\\n        editor.on('drop', function (e) {\\n          if (!isDefaultPrevented(e)) {\\n            var internalContent = getMceInternalContent(e);\\n            if (internalContent && internalContent.id !== editor.id) {\\n              e.preventDefault();\\n              var rng = CaretRangeFromPoint.fromPoint(e.x, e.y, editor.getDoc());\\n              selection.setRng(rng);\\n              insertClipboardContents(internalContent.html, true);\\n            }\\n          }\\n        });\\n      };\\n      var refreshContentEditable = function () {\\n      };\\n      var isHidden = function () {\\n        var sel;\\n        if (!isGecko || editor.removed) {\\n          return 0;\\n        }\\n        sel = editor.selection.getSel();\\n        return !sel || !sel.rangeCount || sel.rangeCount === 0;\\n      };\\n      removeBlockQuoteOnBackSpace();\\n      emptyEditorWhenDeleting();\\n      if (!Env.windowsPhone) {\\n        normalizeSelection();\\n      }\\n      if (isWebKit) {\\n        inputMethodFocus();\\n        selectControlElements();\\n        setDefaultBlockType();\\n        blockFormSubmitInsideEditor();\\n        disableBackspaceIntoATable();\\n        removeAppleInterchangeBrs();\\n        if (Env.iOS) {\\n          restoreFocusOnKeyDown();\\n          bodyHeight();\\n          tapLinksAndImages();\\n        } else {\\n          selectAll();\\n        }\\n      }\\n      if (Env.ie >= 11) {\\n        bodyHeight();\\n        disableBackspaceIntoATable();\\n      }\\n      if (Env.ie) {\\n        selectAll();\\n        disableAutoUrlDetect();\\n        ieInternalDragAndDrop();\\n      }\\n      if (isGecko) {\\n        removeHrOnBackspace();\\n        focusBody();\\n        removeStylesWhenDeletingAcrossBlockElements();\\n        setGeckoEditingOptions();\\n        addBrAfterLastLinks();\\n        showBrokenImageIcon();\\n        blockCmdArrowNavigation();\\n        disableBackspaceIntoATable();\\n      }\\n      return {\\n        refreshContentEditable: refreshContentEditable,\\n        isHidden: isHidden\\n      };\\n    }\\n\\n    var isTextBlockNode = function (node) {\\n      return NodeType.isElement(node) && isTextBlock(Element.fromDom(node));\\n    };\\n    var normalizeSelection$1 = function (editor) {\\n      var rng = editor.selection.getRng();\\n      var startPos = CaretPosition.fromRangeStart(rng);\\n      var endPos = CaretPosition.fromRangeEnd(rng);\\n      if (CaretPosition.isElementPosition(startPos)) {\\n        var container = startPos.container();\\n        if (isTextBlockNode(container)) {\\n          CaretFinder.firstPositionIn(container).each(function (pos) {\\n            return rng.setStart(pos.container(), pos.offset());\\n          });\\n        }\\n      }\\n      if (CaretPosition.isElementPosition(endPos)) {\\n        var container = startPos.container();\\n        if (isTextBlockNode(container)) {\\n          CaretFinder.lastPositionIn(container).each(function (pos) {\\n            return rng.setEnd(pos.container(), pos.offset());\\n          });\\n        }\\n      }\\n      editor.selection.setRng(RangeNormalizer.normalize(rng));\\n    };\\n    var setup$f = function (editor) {\\n      editor.on('click', function (e) {\\n        if (e.detail >= 3) {\\n          normalizeSelection$1(editor);\\n        }\\n      });\\n    };\\n\\n    var preventSummaryToggle = function (editor) {\\n      editor.on('click', function (e) {\\n        if (editor.dom.getParent(e.target, 'details')) {\\n          e.preventDefault();\\n        }\\n      });\\n    };\\n    var filterDetails = function (editor) {\\n      editor.parser.addNodeFilter('details', function (elms) {\\n        each(elms, function (details) {\\n          details.attr('data-mce-open', details.attr('open'));\\n          details.attr('open', 'open');\\n        });\\n      });\\n      editor.serializer.addNodeFilter('details', function (elms) {\\n        each(elms, function (details) {\\n          var open = details.attr('data-mce-open');\\n          details.attr('open', isString(open) ? open : null);\\n          details.attr('data-mce-open', null);\\n        });\\n      });\\n    };\\n    var setup$g = function (editor) {\\n      preventSummaryToggle(editor);\\n      filterDetails(editor);\\n    };\\n\\n    var DOM$2 = DOMUtils$1.DOM;\\n    var appendStyle = function (editor, text) {\\n      var head = Element.fromDom(editor.getDoc().head);\\n      var tag = Element.fromTag('style');\\n      set(tag, 'type', 'text/css');\\n      append(tag, Element.fromText(text));\\n      append(head, tag);\\n    };\\n    var createParser = function (editor) {\\n      var parser = DomParser(editor.settings, editor.schema);\\n      parser.addAttributeFilter('src,href,style,tabindex', function (nodes, name) {\\n        var i = nodes.length, node;\\n        var dom = editor.dom;\\n        var value, internalName;\\n        while (i--) {\\n          node = nodes[i];\\n          value = node.attr(name);\\n          internalName = 'data-mce-' + name;\\n          if (!node.attributes.map[internalName]) {\\n            if (value.indexOf('data:') === 0 || value.indexOf('blob:') === 0) {\\n              continue;\\n            }\\n            if (name === 'style') {\\n              value = dom.serializeStyle(dom.parseStyle(value), node.name);\\n              if (!value.length) {\\n                value = null;\\n              }\\n              node.attr(internalName, value);\\n              node.attr(name, value);\\n            } else if (name === 'tabindex') {\\n              node.attr(internalName, value);\\n              node.attr(name, null);\\n            } else {\\n              node.attr(internalName, editor.convertURL(value, name, node.name));\\n            }\\n          }\\n        }\\n      });\\n      parser.addNodeFilter('script', function (nodes) {\\n        var i = nodes.length, node, type;\\n        while (i--) {\\n          node = nodes[i];\\n          type = node.attr('type') || 'no/type';\\n          if (type.indexOf('mce-') !== 0) {\\n            node.attr('type', 'mce-' + type);\\n          }\\n        }\\n      });\\n      parser.addNodeFilter('#cdata', function (nodes) {\\n        var i = nodes.length, node;\\n        while (i--) {\\n          node = nodes[i];\\n          node.type = 8;\\n          node.name = '#comment';\\n          node.value = '[CDATA[' + node.value + ']]';\\n        }\\n      });\\n      parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', function (nodes) {\\n        var i = nodes.length, node;\\n        var nonEmptyElements = editor.schema.getNonEmptyElements();\\n        while (i--) {\\n          node = nodes[i];\\n          if (node.isEmpty(nonEmptyElements) && node.getAll('br').length === 0) {\\n            node.append(new Node$1('br', 1)).shortEnded = true;\\n          }\\n        }\\n      });\\n      return parser;\\n    };\\n    var autoFocus = function (editor) {\\n      if (editor.settings.auto_focus) {\\n        Delay.setEditorTimeout(editor, function () {\\n          var focusEditor;\\n          if (editor.settings.auto_focus === true) {\\n            focusEditor = editor;\\n          } else {\\n            focusEditor = editor.editorManager.get(editor.settings.auto_focus);\\n          }\\n          if (!focusEditor.destroyed) {\\n            focusEditor.focus();\\n          }\\n        }, 100);\\n      }\\n    };\\n    var initEditor = function (editor) {\\n      editor.bindPendingEventDelegates();\\n      editor.initialized = true;\\n      editor.fire('init');\\n      editor.focus(true);\\n      editor.nodeChanged({ initial: true });\\n      editor.execCallback('init_instance_callback', editor);\\n      autoFocus(editor);\\n    };\\n    var getStyleSheetLoader = function (editor) {\\n      return editor.inline ? DOM$2.styleSheetLoader : editor.dom.styleSheetLoader;\\n    };\\n    var initContentBody = function (editor, skipWrite) {\\n      var settings = editor.settings;\\n      var targetElm = editor.getElement();\\n      var doc = editor.getDoc(), body, contentCssText;\\n      if (!settings.inline) {\\n        editor.getElement().style.visibility = editor.orgVisibility;\\n      }\\n      if (!skipWrite && !settings.content_editable) {\\n        doc.open();\\n        doc.write(editor.iframeHTML);\\n        doc.close();\\n      }\\n      if (settings.content_editable) {\\n        editor.on('remove', function () {\\n          var bodyEl = this.getBody();\\n          DOM$2.removeClass(bodyEl, 'mce-content-body');\\n          DOM$2.removeClass(bodyEl, 'mce-edit-focus');\\n          DOM$2.setAttrib(bodyEl, 'contentEditable', null);\\n        });\\n        DOM$2.addClass(targetElm, 'mce-content-body');\\n        editor.contentDocument = doc = settings.content_document || domGlobals.document;\\n        editor.contentWindow = settings.content_window || domGlobals.window;\\n        editor.bodyElement = targetElm;\\n        settings.content_document = settings.content_window = null;\\n        settings.root_name = targetElm.nodeName.toLowerCase();\\n      }\\n      body = editor.getBody();\\n      body.disabled = true;\\n      editor.readonly = settings.readonly;\\n      if (!editor.readonly) {\\n        if (editor.inline && DOM$2.getStyle(body, 'position', true) === 'static') {\\n          body.style.position = 'relative';\\n        }\\n        body.contentEditable = editor.getParam('content_editable_state', true);\\n      }\\n      body.disabled = false;\\n      editor.editorUpload = EditorUpload(editor);\\n      editor.schema = Schema(settings);\\n      editor.dom = DOMUtils$1(doc, {\\n        keep_values: true,\\n        url_converter: editor.convertURL,\\n        url_converter_scope: editor,\\n        hex_colors: settings.force_hex_style_colors,\\n        class_filter: settings.class_filter,\\n        update_styles: true,\\n        root_element: editor.inline ? editor.getBody() : null,\\n        collect: settings.content_editable,\\n        schema: editor.schema,\\n        contentCssCors: Settings.shouldUseContentCssCors(editor),\\n        onSetAttrib: function (e) {\\n          editor.fire('SetAttrib', e);\\n        }\\n      });\\n      editor.parser = createParser(editor);\\n      editor.serializer = DomSerializer$1(settings, editor);\\n      editor.selection = Selection$1(editor.dom, editor.getWin(), editor.serializer, editor);\\n      editor.annotator = Annotator(editor);\\n      editor.formatter = Formatter(editor);\\n      editor.undoManager = UndoManager(editor);\\n      editor._nodeChangeDispatcher = new NodeChange(editor);\\n      editor._selectionOverrides = SelectionOverrides(editor);\\n      setup$g(editor);\\n      setup$f(editor);\\n      KeyboardOverrides.setup(editor);\\n      ForceBlocks.setup(editor);\\n      editor.fire('PreInit');\\n      if (!settings.browser_spellcheck && !settings.gecko_spellcheck) {\\n        doc.body.spellcheck = false;\\n        DOM$2.setAttrib(body, 'spellcheck', 'false');\\n      }\\n      editor.quirks = Quirks(editor);\\n      editor.fire('PostRender');\\n      if (settings.directionality) {\\n        body.dir = settings.directionality;\\n      }\\n      if (settings.nowrap) {\\n        body.style.whiteSpace = 'nowrap';\\n      }\\n      if (settings.protect) {\\n        editor.on('BeforeSetContent', function (e) {\\n          Tools.each(settings.protect, function (pattern) {\\n            e.content = e.content.replace(pattern, function (str) {\\n              return '<!--mce:protected ' + escape(str) + '-->';\\n            });\\n          });\\n        });\\n      }\\n      editor.on('SetContent', function () {\\n        editor.addVisual(editor.getBody());\\n      });\\n      editor.load({\\n        initial: true,\\n        format: 'html'\\n      });\\n      editor.startContent = editor.getContent({ format: 'raw' });\\n      editor.on('compositionstart compositionend', function (e) {\\n        editor.composing = e.type === 'compositionstart';\\n      });\\n      if (editor.contentStyles.length > 0) {\\n        contentCssText = '';\\n        Tools.each(editor.contentStyles, function (style) {\\n          contentCssText += style + '\\\\r\\\\n';\\n        });\\n        editor.dom.addStyle(contentCssText);\\n      }\\n      getStyleSheetLoader(editor).loadAll(editor.contentCSS, function (_) {\\n        initEditor(editor);\\n      }, function (urls) {\\n        initEditor(editor);\\n      });\\n      if (settings.content_style) {\\n        appendStyle(editor, settings.content_style);\\n      }\\n    };\\n    var InitContentBody = { initContentBody: initContentBody };\\n\\n    var DOM$3 = DOMUtils$1.DOM;\\n    var relaxDomain = function (editor, ifr) {\\n      if (domGlobals.document.domain !== domGlobals.window.location.hostname && Env.ie && Env.ie < 12) {\\n        var bodyUuid = Uuid.uuid('mce');\\n        editor[bodyUuid] = function () {\\n          InitContentBody.initContentBody(editor);\\n        };\\n        var domainRelaxUrl = 'javascript:(function(){' + 'document.open();document.domain=\\\"' + domGlobals.document.domain + '\\\";' + 'var ed = window.parent.tinymce.get(\\\"' + editor.id + '\\\");document.write(ed.iframeHTML);' + 'document.close();ed.' + bodyUuid + '(true);})()';\\n        DOM$3.setAttrib(ifr, 'src', domainRelaxUrl);\\n        return true;\\n      }\\n      return false;\\n    };\\n    var normalizeHeight = function (height) {\\n      var normalizedHeight = typeof height === 'number' ? height + 'px' : height;\\n      return normalizedHeight ? normalizedHeight : '';\\n    };\\n    var createIframeElement = function (id, title, height, customAttrs) {\\n      var iframe = Element.fromTag('iframe');\\n      setAll(iframe, customAttrs);\\n      setAll(iframe, {\\n        id: id + '_ifr',\\n        frameBorder: '0',\\n        allowTransparency: 'true',\\n        title: title\\n      });\\n      setAll$1(iframe, {\\n        width: '100%',\\n        height: normalizeHeight(height),\\n        display: 'block'\\n      });\\n      return iframe;\\n    };\\n    var getIframeHtml = function (editor) {\\n      var bodyId, bodyClass, iframeHTML;\\n      iframeHTML = Settings.getDocType(editor) + '<html><head>';\\n      if (Settings.getDocumentBaseUrl(editor) !== editor.documentBaseUrl) {\\n        iframeHTML += '<base href=\\\"' + editor.documentBaseURI.getURI() + '\\\" />';\\n      }\\n      iframeHTML += '<meta http-equiv=\\\"Content-Type\\\" content=\\\"text/html; charset=UTF-8\\\" />';\\n      bodyId = Settings.getBodyId(editor);\\n      bodyClass = Settings.getBodyClass(editor);\\n      if (Settings.getContentSecurityPolicy(editor)) {\\n        iframeHTML += '<meta http-equiv=\\\"Content-Security-Policy\\\" content=\\\"' + Settings.getContentSecurityPolicy(editor) + '\\\" />';\\n      }\\n      iframeHTML += '</head><body id=\\\"' + bodyId + '\\\" class=\\\"mce-content-body ' + bodyClass + '\\\" data-id=\\\"' + editor.id + '\\\"><br></body></html>';\\n      return iframeHTML;\\n    };\\n    var createIframe = function (editor, o) {\\n      var title = editor.editorManager.translate('Rich Text Area. Press ALT-F9 for menu. ' + 'Press ALT-F10 for toolbar. Press ALT-0 for help');\\n      var ifr = createIframeElement(editor.id, title, o.height, Settings.getIframeAttrs(editor)).dom();\\n      ifr.onload = function () {\\n        ifr.onload = null;\\n        editor.fire('load');\\n      };\\n      var isDomainRelaxed = relaxDomain(editor, ifr);\\n      editor.contentAreaContainer = o.iframeContainer;\\n      editor.iframeElement = ifr;\\n      editor.iframeHTML = getIframeHtml(editor);\\n      DOM$3.add(o.iframeContainer, ifr);\\n      return isDomainRelaxed;\\n    };\\n    var init$1 = function (editor, boxInfo) {\\n      var isDomainRelaxed = createIframe(editor, boxInfo);\\n      if (boxInfo.editorContainer) {\\n        DOM$3.get(boxInfo.editorContainer).style.display = editor.orgDisplay;\\n        editor.hidden = DOM$3.isHidden(boxInfo.editorContainer);\\n      }\\n      editor.getElement().style.display = 'none';\\n      DOM$3.setAttrib(editor.id, 'aria-hidden', 'true');\\n      if (!isDomainRelaxed) {\\n        InitContentBody.initContentBody(editor);\\n      }\\n    };\\n    var InitIframe = { init: init$1 };\\n\\n    var DOM$4 = DOMUtils$1.DOM;\\n    var initPlugin = function (editor, initializedPlugins, plugin) {\\n      var Plugin = PluginManager$1.get(plugin);\\n      var pluginUrl = PluginManager$1.urls[plugin] || editor.documentBaseUrl.replace(/\\\\/$/, '');\\n      plugin = Tools.trim(plugin);\\n      if (Plugin && Tools.inArray(initializedPlugins, plugin) === -1) {\\n        Tools.each(PluginManager$1.dependencies(plugin), function (dep) {\\n          initPlugin(editor, initializedPlugins, dep);\\n        });\\n        if (editor.plugins[plugin]) {\\n          return;\\n        }\\n        try {\\n          var pluginInstance = new Plugin(editor, pluginUrl, editor.$);\\n          editor.plugins[plugin] = pluginInstance;\\n          if (pluginInstance.init) {\\n            pluginInstance.init(editor, pluginUrl);\\n            initializedPlugins.push(plugin);\\n          }\\n        } catch (e) {\\n          ErrorReporter.pluginInitError(editor, plugin, e);\\n        }\\n      }\\n    };\\n    var trimLegacyPrefix = function (name) {\\n      return name.replace(/^\\\\-/, '');\\n    };\\n    var initPlugins = function (editor) {\\n      var initializedPlugins = [];\\n      Tools.each(editor.settings.plugins.split(/[ ,]/), function (name) {\\n        initPlugin(editor, initializedPlugins, trimLegacyPrefix(name));\\n      });\\n    };\\n    var initTheme = function (editor) {\\n      var Theme;\\n      var theme = editor.settings.theme;\\n      if (isString(theme)) {\\n        editor.settings.theme = trimLegacyPrefix(theme);\\n        Theme = ThemeManager.get(theme);\\n        editor.theme = new Theme(editor, ThemeManager.urls[theme]);\\n        if (editor.theme.init) {\\n          editor.theme.init(editor, ThemeManager.urls[theme] || editor.documentBaseUrl.replace(/\\\\/$/, ''), editor.$);\\n        }\\n      } else {\\n        editor.theme = {};\\n      }\\n    };\\n    var renderFromLoadedTheme = function (editor) {\\n      var w, h, minHeight, re, info;\\n      var settings = editor.settings;\\n      var elm = editor.getElement();\\n      w = settings.width || DOM$4.getStyle(elm, 'width') || '100%';\\n      h = settings.height || DOM$4.getStyle(elm, 'height') || elm.offsetHeight;\\n      minHeight = settings.min_height || 100;\\n      re = /^[0-9\\\\.]+(|px)$/i;\\n      if (re.test('' + w)) {\\n        w = Math.max(parseInt(w, 10), 100);\\n      }\\n      if (re.test('' + h)) {\\n        h = Math.max(parseInt(h, 10), minHeight);\\n      }\\n      info = editor.theme.renderUI({\\n        targetNode: elm,\\n        width: w,\\n        height: h,\\n        deltaWidth: settings.delta_width,\\n        deltaHeight: settings.delta_height\\n      });\\n      if (!settings.content_editable) {\\n        h = (info.iframeHeight || h) + (typeof h === 'number' ? info.deltaHeight || 0 : '');\\n        if (h < minHeight) {\\n          h = minHeight;\\n        }\\n      }\\n      info.height = h;\\n      return info;\\n    };\\n    var renderFromThemeFunc = function (editor) {\\n      var info;\\n      var elm = editor.getElement();\\n      info = editor.settings.theme(editor, elm);\\n      if (info.editorContainer.nodeType) {\\n        info.editorContainer.id = info.editorContainer.id || editor.id + '_parent';\\n      }\\n      if (info.iframeContainer && info.iframeContainer.nodeType) {\\n        info.iframeContainer.id = info.iframeContainer.id || editor.id + '_iframecontainer';\\n      }\\n      info.height = info.iframeHeight ? info.iframeHeight : elm.offsetHeight;\\n      return info;\\n    };\\n    var createThemeFalseResult = function (element) {\\n      return {\\n        editorContainer: element,\\n        iframeContainer: element\\n      };\\n    };\\n    var renderThemeFalseIframe = function (targetElement) {\\n      var iframeContainer = DOM$4.create('div');\\n      DOM$4.insertAfter(iframeContainer, targetElement);\\n      return createThemeFalseResult(iframeContainer);\\n    };\\n    var renderThemeFalse = function (editor) {\\n      var targetElement = editor.getElement();\\n      return editor.inline ? createThemeFalseResult(null) : renderThemeFalseIframe(targetElement);\\n    };\\n    var renderThemeUi = function (editor) {\\n      var settings = editor.settings, elm = editor.getElement();\\n      editor.orgDisplay = elm.style.display;\\n      if (isString(settings.theme)) {\\n        return renderFromLoadedTheme(editor);\\n      } else if (isFunction(settings.theme)) {\\n        return renderFromThemeFunc(editor);\\n      } else {\\n        return renderThemeFalse(editor);\\n      }\\n    };\\n    var init$2 = function (editor) {\\n      var settings = editor.settings;\\n      var elm = editor.getElement();\\n      var boxInfo;\\n      editor.rtl = settings.rtl_ui || editor.editorManager.i18n.rtl;\\n      editor.editorManager.i18n.setCode(settings.language);\\n      settings.aria_label = settings.aria_label || DOM$4.getAttrib(elm, 'aria-label', editor.getLang('aria.rich_text_area'));\\n      editor.fire('ScriptsLoaded');\\n      initTheme(editor);\\n      initPlugins(editor);\\n      boxInfo = renderThemeUi(editor);\\n      editor.editorContainer = boxInfo.editorContainer ? boxInfo.editorContainer : null;\\n      if (settings.content_css) {\\n        Tools.each(Tools.explode(settings.content_css), function (u) {\\n          editor.contentCSS.push(editor.documentBaseURI.toAbsolute(u));\\n        });\\n      }\\n      if (settings.content_editable) {\\n        return InitContentBody.initContentBody(editor);\\n      } else {\\n        return InitIframe.init(editor, boxInfo);\\n      }\\n    };\\n    var Init = { init: init$2 };\\n\\n    var DOM$5 = DOMUtils$1.DOM;\\n    var hasSkipLoadPrefix = function (name) {\\n      return name.charAt(0) === '-';\\n    };\\n    var loadLanguage = function (scriptLoader, editor) {\\n      var settings = editor.settings;\\n      if (settings.language && settings.language !== 'en' && !settings.language_url) {\\n        settings.language_url = editor.editorManager.baseURL + '/langs/' + settings.language + '.js';\\n      }\\n      if (settings.language_url && !editor.editorManager.i18n.data[settings.language]) {\\n        scriptLoader.add(settings.language_url);\\n      }\\n    };\\n    var loadTheme = function (scriptLoader, editor, suffix, callback) {\\n      var settings = editor.settings, theme = settings.theme;\\n      if (isString(theme)) {\\n        if (!hasSkipLoadPrefix(theme) && !ThemeManager.urls.hasOwnProperty(theme)) {\\n          var themeUrl = settings.theme_url;\\n          if (themeUrl) {\\n            ThemeManager.load(theme, editor.documentBaseURI.toAbsolute(themeUrl));\\n          } else {\\n            ThemeManager.load(theme, 'themes/' + theme + '/theme' + suffix + '.js');\\n          }\\n        }\\n        scriptLoader.loadQueue(function () {\\n          ThemeManager.waitFor(theme, callback);\\n        });\\n      } else {\\n        callback();\\n      }\\n    };\\n    var loadPlugins = function (settings, suffix) {\\n      if (Tools.isArray(settings.plugins)) {\\n        settings.plugins = settings.plugins.join(' ');\\n      }\\n      Tools.each(settings.external_plugins, function (url, name) {\\n        PluginManager$1.load(name, url);\\n        settings.plugins += ' ' + name;\\n      });\\n      Tools.each(settings.plugins.split(/[ ,]/), function (plugin) {\\n        plugin = Tools.trim(plugin);\\n        if (plugin && !PluginManager$1.urls[plugin]) {\\n          if (hasSkipLoadPrefix(plugin)) {\\n            plugin = plugin.substr(1, plugin.length);\\n            var dependencies = PluginManager$1.dependencies(plugin);\\n            Tools.each(dependencies, function (dep) {\\n              var defaultSettings = {\\n                prefix: 'plugins/',\\n                resource: dep,\\n                suffix: '/plugin' + suffix + '.js'\\n              };\\n              dep = PluginManager$1.createUrl(defaultSettings, dep);\\n              PluginManager$1.load(dep.resource, dep);\\n            });\\n          } else {\\n            PluginManager$1.load(plugin, {\\n              prefix: 'plugins/',\\n              resource: plugin,\\n              suffix: '/plugin' + suffix + '.js'\\n            });\\n          }\\n        }\\n      });\\n    };\\n    var loadScripts = function (editor, suffix) {\\n      var scriptLoader = ScriptLoader.ScriptLoader;\\n      loadTheme(scriptLoader, editor, suffix, function () {\\n        loadLanguage(scriptLoader, editor);\\n        loadPlugins(editor.settings, suffix);\\n        scriptLoader.loadQueue(function () {\\n          if (!editor.removed) {\\n            Init.init(editor);\\n          }\\n        }, editor, function (urls) {\\n          ErrorReporter.pluginLoadError(editor, urls[0]);\\n          if (!editor.removed) {\\n            Init.init(editor);\\n          }\\n        });\\n      });\\n    };\\n    var render = function (editor) {\\n      var settings = editor.settings, id = editor.id;\\n      var readyHandler = function () {\\n        DOM$5.unbind(domGlobals.window, 'ready', readyHandler);\\n        editor.render();\\n      };\\n      if (!EventUtils.Event.domLoaded) {\\n        DOM$5.bind(domGlobals.window, 'ready', readyHandler);\\n        return;\\n      }\\n      if (!editor.getElement()) {\\n        return;\\n      }\\n      if (!Env.contentEditable) {\\n        return;\\n      }\\n      if (!settings.inline) {\\n        editor.orgVisibility = editor.getElement().style.visibility;\\n        editor.getElement().style.visibility = 'hidden';\\n      } else {\\n        editor.inline = true;\\n      }\\n      var form = editor.getElement().form || DOM$5.getParent(id, 'form');\\n      if (form) {\\n        editor.formElement = form;\\n        if (settings.hidden_input && !/TEXTAREA|INPUT/i.test(editor.getElement().nodeName)) {\\n          DOM$5.insertAfter(DOM$5.create('input', {\\n            type: 'hidden',\\n            name: id\\n          }), id);\\n          editor.hasHiddenInput = true;\\n        }\\n        editor.formEventDelegate = function (e) {\\n          editor.fire(e.type, e);\\n        };\\n        DOM$5.bind(form, 'submit reset', editor.formEventDelegate);\\n        editor.on('reset', function () {\\n          editor.setContent(editor.startContent, { format: 'raw' });\\n        });\\n        if (settings.submit_patch && !form.submit.nodeType && !form.submit.length && !form._mceOldSubmit) {\\n          form._mceOldSubmit = form.submit;\\n          form.submit = function () {\\n            editor.editorManager.triggerSave();\\n            editor.setDirty(false);\\n            return form._mceOldSubmit(form);\\n          };\\n        }\\n      }\\n      editor.windowManager = WindowManager(editor);\\n      editor.notificationManager = NotificationManager(editor);\\n      if (settings.encoding === 'xml') {\\n        editor.on('GetContent', function (e) {\\n          if (e.save) {\\n            e.content = DOM$5.encode(e.content);\\n          }\\n        });\\n      }\\n      if (settings.add_form_submit_trigger) {\\n        editor.on('submit', function () {\\n          if (editor.initialized) {\\n            editor.save();\\n          }\\n        });\\n      }\\n      if (settings.add_unload_trigger) {\\n        editor._beforeUnload = function () {\\n          if (editor.initialized && !editor.destroyed && !editor.isHidden()) {\\n            editor.save({\\n              format: 'raw',\\n              no_events: true,\\n              set_dirty: false\\n            });\\n          }\\n        };\\n        editor.editorManager.on('BeforeUnload', editor._beforeUnload);\\n      }\\n      editor.editorManager.add(editor);\\n      loadScripts(editor, editor.suffix);\\n    };\\n    var Render = { render: render };\\n\\n    var add$4 = function (editor, name, settings) {\\n      var sidebars = editor.sidebars ? editor.sidebars : [];\\n      sidebars.push({\\n        name: name,\\n        settings: settings\\n      });\\n      editor.sidebars = sidebars;\\n    };\\n    var Sidebar = { add: add$4 };\\n\\n    var each$k = Tools.each, trim$4 = Tools.trim;\\n    var queryParts = 'source protocol authority userInfo user password host port relative path directory file query anchor'.split(' ');\\n    var DEFAULT_PORTS = {\\n      ftp: 21,\\n      http: 80,\\n      https: 443,\\n      mailto: 25\\n    };\\n    var URI = function (url, settings) {\\n      var self = this;\\n      var baseUri, baseUrl;\\n      url = trim$4(url);\\n      settings = self.settings = settings || {};\\n      baseUri = settings.base_uri;\\n      if (/^([\\\\w\\\\-]+):([^\\\\/]{2})/i.test(url) || /^\\\\s*#/.test(url)) {\\n        self.source = url;\\n        return;\\n      }\\n      var isProtocolRelative = url.indexOf('//') === 0;\\n      if (url.indexOf('/') === 0 && !isProtocolRelative) {\\n        url = (baseUri ? baseUri.protocol || 'http' : 'http') + '://mce_host' + url;\\n      }\\n      if (!/^[\\\\w\\\\-]*:?\\\\/\\\\//.test(url)) {\\n        baseUrl = settings.base_uri ? settings.base_uri.path : new URI(domGlobals.document.location.href).directory;\\n        if (settings.base_uri.protocol == '') {\\n          url = '//mce_host' + self.toAbsPath(baseUrl, url);\\n        } else {\\n          url = /([^#?]*)([#?]?.*)/.exec(url);\\n          url = (baseUri && baseUri.protocol || 'http') + '://mce_host' + self.toAbsPath(baseUrl, url[1]) + url[2];\\n        }\\n      }\\n      url = url.replace(/@@/g, '(mce_at)');\\n      url = /^(?:(?![^:@]+:[^:@\\\\/]*@)([^:\\\\/?#.]+):)?(?:\\\\/\\\\/)?((?:(([^:@\\\\/]*):?([^:@\\\\/]*))?@)?([^:\\\\/?#]*)(?::(\\\\d*))?)(((\\\\/(?:[^?#](?![^?#\\\\/]*\\\\.[^?#\\\\/.]+(?:[?#]|$)))*\\\\/?)?([^?#\\\\/]*))(?:\\\\?([^#]*))?(?:#(.*))?)/.exec(url);\\n      each$k(queryParts, function (v, i) {\\n        var part = url[i];\\n        if (part) {\\n          part = part.replace(/\\\\(mce_at\\\\)/g, '@@');\\n        }\\n        self[v] = part;\\n      });\\n      if (baseUri) {\\n        if (!self.protocol) {\\n          self.protocol = baseUri.protocol;\\n        }\\n        if (!self.userInfo) {\\n          self.userInfo = baseUri.userInfo;\\n        }\\n        if (!self.port && self.host === 'mce_host') {\\n          self.port = baseUri.port;\\n        }\\n        if (!self.host || self.host === 'mce_host') {\\n          self.host = baseUri.host;\\n        }\\n        self.source = '';\\n      }\\n      if (isProtocolRelative) {\\n        self.protocol = '';\\n      }\\n    };\\n    URI.prototype = {\\n      setPath: function (path) {\\n        var self = this;\\n        path = /^(.*?)\\\\/?(\\\\w+)?$/.exec(path);\\n        self.path = path[0];\\n        self.directory = path[1];\\n        self.file = path[2];\\n        self.source = '';\\n        self.getURI();\\n      },\\n      toRelative: function (uri) {\\n        var self = this;\\n        var output;\\n        if (uri === './') {\\n          return uri;\\n        }\\n        uri = new URI(uri, { base_uri: self });\\n        if (uri.host !== 'mce_host' && self.host !== uri.host && uri.host || self.port !== uri.port || self.protocol !== uri.protocol && uri.protocol !== '') {\\n          return uri.getURI();\\n        }\\n        var tu = self.getURI(), uu = uri.getURI();\\n        if (tu === uu || tu.charAt(tu.length - 1) === '/' && tu.substr(0, tu.length - 1) === uu) {\\n          return tu;\\n        }\\n        output = self.toRelPath(self.path, uri.path);\\n        if (uri.query) {\\n          output += '?' + uri.query;\\n        }\\n        if (uri.anchor) {\\n          output += '#' + uri.anchor;\\n        }\\n        return output;\\n      },\\n      toAbsolute: function (uri, noHost) {\\n        uri = new URI(uri, { base_uri: this });\\n        return uri.getURI(noHost && this.isSameOrigin(uri));\\n      },\\n      isSameOrigin: function (uri) {\\n        if (this.host == uri.host && this.protocol == uri.protocol) {\\n          if (this.port == uri.port) {\\n            return true;\\n          }\\n          var defaultPort = DEFAULT_PORTS[this.protocol];\\n          if (defaultPort && (this.port || defaultPort) == (uri.port || defaultPort)) {\\n            return true;\\n          }\\n        }\\n        return false;\\n      },\\n      toRelPath: function (base, path) {\\n        var items, breakPoint = 0, out = '', i, l;\\n        base = base.substring(0, base.lastIndexOf('/'));\\n        base = base.split('/');\\n        items = path.split('/');\\n        if (base.length >= items.length) {\\n          for (i = 0, l = base.length; i < l; i++) {\\n            if (i >= items.length || base[i] !== items[i]) {\\n              breakPoint = i + 1;\\n              break;\\n            }\\n          }\\n        }\\n        if (base.length < items.length) {\\n          for (i = 0, l = items.length; i < l; i++) {\\n            if (i >= base.length || base[i] !== items[i]) {\\n              breakPoint = i + 1;\\n              break;\\n            }\\n          }\\n        }\\n        if (breakPoint === 1) {\\n          return path;\\n        }\\n        for (i = 0, l = base.length - (breakPoint - 1); i < l; i++) {\\n          out += '../';\\n        }\\n        for (i = breakPoint - 1, l = items.length; i < l; i++) {\\n          if (i !== breakPoint - 1) {\\n            out += '/' + items[i];\\n          } else {\\n            out += items[i];\\n          }\\n        }\\n        return out;\\n      },\\n      toAbsPath: function (base, path) {\\n        var i, nb = 0, o = [], tr, outPath;\\n        tr = /\\\\/$/.test(path) ? '/' : '';\\n        base = base.split('/');\\n        path = path.split('/');\\n        each$k(base, function (k) {\\n          if (k) {\\n            o.push(k);\\n          }\\n        });\\n        base = o;\\n        for (i = path.length - 1, o = []; i >= 0; i--) {\\n          if (path[i].length === 0 || path[i] === '.') {\\n            continue;\\n          }\\n          if (path[i] === '..') {\\n            nb++;\\n            continue;\\n          }\\n          if (nb > 0) {\\n            nb--;\\n            continue;\\n          }\\n          o.push(path[i]);\\n        }\\n        i = base.length - nb;\\n        if (i <= 0) {\\n          outPath = o.reverse().join('/');\\n        } else {\\n          outPath = base.slice(0, i).join('/') + '/' + o.reverse().join('/');\\n        }\\n        if (outPath.indexOf('/') !== 0) {\\n          outPath = '/' + outPath;\\n        }\\n        if (tr && outPath.lastIndexOf('/') !== outPath.length - 1) {\\n          outPath += tr;\\n        }\\n        return outPath;\\n      },\\n      getURI: function (noProtoHost) {\\n        var s;\\n        var self = this;\\n        if (!self.source || noProtoHost) {\\n          s = '';\\n          if (!noProtoHost) {\\n            if (self.protocol) {\\n              s += self.protocol + '://';\\n            } else {\\n              s += '//';\\n            }\\n            if (self.userInfo) {\\n              s += self.userInfo + '@';\\n            }\\n            if (self.host) {\\n              s += self.host;\\n            }\\n            if (self.port) {\\n              s += ':' + self.port;\\n            }\\n          }\\n          if (self.path) {\\n            s += self.path;\\n          }\\n          if (self.query) {\\n            s += '?' + self.query;\\n          }\\n          if (self.anchor) {\\n            s += '#' + self.anchor;\\n          }\\n          self.source = s;\\n        }\\n        return self.source;\\n      }\\n    };\\n    URI.parseDataUri = function (uri) {\\n      var type, matches;\\n      uri = decodeURIComponent(uri).split(',');\\n      matches = /data:([^;]+)/.exec(uri[0]);\\n      if (matches) {\\n        type = matches[1];\\n      }\\n      return {\\n        type: type,\\n        data: uri[1]\\n      };\\n    };\\n    URI.getDocumentBaseUrl = function (loc) {\\n      var baseUrl;\\n      if (loc.protocol.indexOf('http') !== 0 && loc.protocol !== 'file:') {\\n        baseUrl = loc.href;\\n      } else {\\n        baseUrl = loc.protocol + '//' + loc.host + loc.pathname;\\n      }\\n      if (/^[^:]+:\\\\/\\\\/\\\\/?[^\\\\/]+\\\\//.test(baseUrl)) {\\n        baseUrl = baseUrl.replace(/[\\\\?#].*$/, '').replace(/[\\\\/\\\\\\\\][^\\\\/]+$/, '');\\n        if (!/[\\\\/\\\\\\\\]$/.test(baseUrl)) {\\n          baseUrl += '/';\\n        }\\n      }\\n      return baseUrl;\\n    };\\n\\n    var defaultFormat = 'html';\\n    var trimEmptyContents = function (editor, html) {\\n      var blockName = Settings.getForcedRootBlock(editor);\\n      var emptyRegExp = new RegExp('^(<' + blockName + '[^>]*>(&nbsp;|&#160;|\\\\\\\\s|\\\\xA0|<br \\\\\\\\/>|)<\\\\\\\\/' + blockName + '>[\\\\r\\\\n]*|<br \\\\\\\\/>[\\\\r\\\\n]*)$');\\n      return html.replace(emptyRegExp, '');\\n    };\\n    var getContentFromBody = function (editor, args, body) {\\n      var content;\\n      args.format = args.format ? args.format : defaultFormat;\\n      args.get = true;\\n      args.getInner = true;\\n      if (!args.no_events) {\\n        editor.fire('BeforeGetContent', args);\\n      }\\n      if (args.format === 'raw') {\\n        content = Tools.trim(TrimHtml.trimExternal(editor.serializer, body.innerHTML));\\n      } else if (args.format === 'text') {\\n        content = Zwsp.trim(body.innerText || body.textContent);\\n      } else if (args.format === 'tree') {\\n        return editor.serializer.serialize(body, args);\\n      } else {\\n        content = trimEmptyContents(editor, editor.serializer.serialize(body, args));\\n      }\\n      if (args.format !== 'text' && !isWsPreserveElement(Element.fromDom(body))) {\\n        args.content = Tools.trim(content);\\n      } else {\\n        args.content = content;\\n      }\\n      if (!args.no_events) {\\n        editor.fire('GetContent', args);\\n      }\\n      return args.content;\\n    };\\n    var getContent$1 = function (editor, args) {\\n      if (args === void 0) {\\n        args = {};\\n      }\\n      return Option.from(editor.getBody()).fold(constant(args.format === 'tree' ? new Node$1('body', 11) : ''), function (body) {\\n        return getContentFromBody(editor, args, body);\\n      });\\n    };\\n\\n    var traverse = function (node, fn) {\\n      fn(node);\\n      if (node.firstChild) {\\n        traverse(node.firstChild, fn);\\n      }\\n      if (node.next) {\\n        traverse(node.next, fn);\\n      }\\n    };\\n    var findMatchingNodes = function (nodeFilters, attributeFilters, node) {\\n      var nodeMatches = {};\\n      var attrMatches = {};\\n      var matches = [];\\n      if (node.firstChild) {\\n        traverse(node.firstChild, function (node) {\\n          each(nodeFilters, function (filter) {\\n            if (filter.name === node.name) {\\n              if (nodeMatches[filter.name]) {\\n                nodeMatches[filter.name].nodes.push(node);\\n              } else {\\n                nodeMatches[filter.name] = {\\n                  filter: filter,\\n                  nodes: [node]\\n                };\\n              }\\n            }\\n          });\\n          each(attributeFilters, function (filter) {\\n            if (typeof node.attr(filter.name) === 'string') {\\n              if (attrMatches[filter.name]) {\\n                attrMatches[filter.name].nodes.push(node);\\n              } else {\\n                attrMatches[filter.name] = {\\n                  filter: filter,\\n                  nodes: [node]\\n                };\\n              }\\n            }\\n          });\\n        });\\n      }\\n      for (var name in nodeMatches) {\\n        if (nodeMatches.hasOwnProperty(name)) {\\n          matches.push(nodeMatches[name]);\\n        }\\n      }\\n      for (var name in attrMatches) {\\n        if (attrMatches.hasOwnProperty(name)) {\\n          matches.push(attrMatches[name]);\\n        }\\n      }\\n      return matches;\\n    };\\n    var filter$3 = function (nodeFilters, attributeFilters, node) {\\n      var matches = findMatchingNodes(nodeFilters, attributeFilters, node);\\n      each(matches, function (match) {\\n        each(match.filter.callbacks, function (callback) {\\n          callback(match.nodes, match.filter.name, {});\\n        });\\n      });\\n    };\\n\\n    var defaultFormat$1 = 'html';\\n    var isTreeNode = function (content) {\\n      return content instanceof Node$1;\\n    };\\n    var moveSelection = function (editor) {\\n      if (EditorFocus.hasFocus(editor)) {\\n        CaretFinder.firstPositionIn(editor.getBody()).each(function (pos) {\\n          var node = pos.getNode();\\n          var caretPos = NodeType.isTable(node) ? CaretFinder.firstPositionIn(node).getOr(pos) : pos;\\n          editor.selection.setRng(caretPos.toRange());\\n        });\\n      }\\n    };\\n    var setEditorHtml = function (editor, html) {\\n      editor.dom.setHTML(editor.getBody(), html);\\n      moveSelection(editor);\\n    };\\n    var setContentString = function (editor, body, content, args) {\\n      var forcedRootBlockName, padd;\\n      if (content.length === 0 || /^\\\\s+$/.test(content)) {\\n        padd = '<br data-mce-bogus=\\\"1\\\">';\\n        if (body.nodeName === 'TABLE') {\\n          content = '<tr><td>' + padd + '</td></tr>';\\n        } else if (/^(UL|OL)$/.test(body.nodeName)) {\\n          content = '<li>' + padd + '</li>';\\n        }\\n        forcedRootBlockName = Settings.getForcedRootBlock(editor);\\n        if (forcedRootBlockName && editor.schema.isValidChild(body.nodeName.toLowerCase(), forcedRootBlockName.toLowerCase())) {\\n          content = padd;\\n          content = editor.dom.createHTML(forcedRootBlockName, editor.settings.forced_root_block_attrs, content);\\n        } else if (!content) {\\n          content = '<br data-mce-bogus=\\\"1\\\">';\\n        }\\n        setEditorHtml(editor, content);\\n        editor.fire('SetContent', args);\\n      } else {\\n        if (args.format !== 'raw') {\\n          content = HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(editor.parser.parse(content, {\\n            isRootContent: true,\\n            insert: true\\n          }));\\n        }\\n        args.content = isWsPreserveElement(Element.fromDom(body)) ? content : Tools.trim(content);\\n        setEditorHtml(editor, args.content);\\n        if (!args.no_events) {\\n          editor.fire('SetContent', args);\\n        }\\n      }\\n      return args.content;\\n    };\\n    var setContentTree = function (editor, body, content, args) {\\n      filter$3(editor.parser.getNodeFilters(), editor.parser.getAttributeFilters(), content);\\n      var html = HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(content);\\n      args.content = isWsPreserveElement(Element.fromDom(body)) ? html : Tools.trim(html);\\n      setEditorHtml(editor, args.content);\\n      if (!args.no_events) {\\n        editor.fire('SetContent', args);\\n      }\\n      return content;\\n    };\\n    var setContent$1 = function (editor, content, args) {\\n      if (args === void 0) {\\n        args = {};\\n      }\\n      args.format = args.format ? args.format : defaultFormat$1;\\n      args.set = true;\\n      args.content = isTreeNode(content) ? '' : content;\\n      if (!isTreeNode(content) && !args.no_events) {\\n        editor.fire('BeforeSetContent', args);\\n        content = args.content;\\n      }\\n      return Option.from(editor.getBody()).fold(constant(content), function (body) {\\n        return isTreeNode(content) ? setContentTree(editor, body, content, args) : setContentString(editor, body, content, args);\\n      });\\n    };\\n\\n    var DOM$6 = DOMUtils$1.DOM;\\n    var restoreOriginalStyles = function (editor) {\\n      DOM$6.setStyle(editor.id, 'display', editor.orgDisplay);\\n    };\\n    var safeDestroy = function (x) {\\n      return Option.from(x).each(function (x) {\\n        return x.destroy();\\n      });\\n    };\\n    var clearDomReferences = function (editor) {\\n      editor.contentAreaContainer = editor.formElement = editor.container = editor.editorContainer = null;\\n      editor.bodyElement = editor.contentDocument = editor.contentWindow = null;\\n      editor.iframeElement = editor.targetElm = null;\\n      if (editor.selection) {\\n        editor.selection = editor.selection.win = editor.selection.dom = editor.selection.dom.doc = null;\\n      }\\n    };\\n    var restoreForm = function (editor) {\\n      var form = editor.formElement;\\n      if (form) {\\n        if (form._mceOldSubmit) {\\n          form.submit = form._mceOldSubmit;\\n          form._mceOldSubmit = null;\\n        }\\n        DOM$6.unbind(form, 'submit reset', editor.formEventDelegate);\\n      }\\n    };\\n    var remove$7 = function (editor) {\\n      if (!editor.removed) {\\n        var _selectionOverrides = editor._selectionOverrides, editorUpload = editor.editorUpload;\\n        var body = editor.getBody();\\n        var element = editor.getElement();\\n        if (body) {\\n          editor.save({ is_removing: true });\\n        }\\n        editor.removed = true;\\n        editor.unbindAllNativeEvents();\\n        if (editor.hasHiddenInput && element) {\\n          DOM$6.remove(element.nextSibling);\\n        }\\n        Events.fireRemove(editor);\\n        editor.editorManager.remove(editor);\\n        if (!editor.inline && body) {\\n          restoreOriginalStyles(editor);\\n        }\\n        Events.fireDetach(editor);\\n        DOM$6.remove(editor.getContainer());\\n        safeDestroy(_selectionOverrides);\\n        safeDestroy(editorUpload);\\n        editor.destroy();\\n      }\\n    };\\n    var destroy = function (editor, automatic) {\\n      var selection = editor.selection, dom = editor.dom;\\n      if (editor.destroyed) {\\n        return;\\n      }\\n      if (!automatic && !editor.removed) {\\n        editor.remove();\\n        return;\\n      }\\n      if (!automatic) {\\n        editor.editorManager.off('beforeunload', editor._beforeUnload);\\n        if (editor.theme && editor.theme.destroy) {\\n          editor.theme.destroy();\\n        }\\n        safeDestroy(selection);\\n        safeDestroy(dom);\\n      }\\n      restoreForm(editor);\\n      clearDomReferences(editor);\\n      editor.destroyed = true;\\n    };\\n\\n    var DOM$7 = DOMUtils$1.DOM;\\n    var extend$4 = Tools.extend, each$l = Tools.each;\\n    var resolve$4 = Tools.resolve;\\n    var ie$2 = Env.ie;\\n    var Editor = function (id, settings, editorManager) {\\n      var self = this;\\n      var documentBaseUrl = self.documentBaseUrl = editorManager.documentBaseURL;\\n      var baseUri = editorManager.baseURI;\\n      settings = getEditorSettings(self, id, documentBaseUrl, editorManager.defaultSettings, settings);\\n      self.settings = settings;\\n      AddOnManager.language = settings.language || 'en';\\n      AddOnManager.languageLoad = settings.language_load;\\n      AddOnManager.baseURL = editorManager.baseURL;\\n      self.id = id;\\n      self.setDirty(false);\\n      self.plugins = {};\\n      self.documentBaseURI = new URI(settings.document_base_url, { base_uri: baseUri });\\n      self.baseURI = baseUri;\\n      self.contentCSS = [];\\n      self.contentStyles = [];\\n      self.shortcuts = new Shortcuts(self);\\n      self.loadedCSS = {};\\n      self.editorCommands = new EditorCommands(self);\\n      self.suffix = editorManager.suffix;\\n      self.editorManager = editorManager;\\n      self.inline = settings.inline;\\n      self.buttons = {};\\n      self.menuItems = {};\\n      if (settings.cache_suffix) {\\n        Env.cacheSuffix = settings.cache_suffix.replace(/^[\\\\?\\\\&]+/, '');\\n      }\\n      if (settings.override_viewport === false) {\\n        Env.overrideViewPort = false;\\n      }\\n      editorManager.fire('SetupEditor', { editor: self });\\n      self.execCallback('setup', self);\\n      self.$ = DomQuery.overrideDefaults(function () {\\n        return {\\n          context: self.inline ? self.getBody() : self.getDoc(),\\n          element: self.getBody()\\n        };\\n      });\\n    };\\n    Editor.prototype = {\\n      render: function () {\\n        Render.render(this);\\n      },\\n      focus: function (skipFocus) {\\n        EditorFocus.focus(this, skipFocus);\\n      },\\n      hasFocus: function () {\\n        return EditorFocus.hasFocus(this);\\n      },\\n      execCallback: function (name) {\\n        var x = [];\\n        for (var _i = 1; _i < arguments.length; _i++) {\\n          x[_i - 1] = arguments[_i];\\n        }\\n        var self = this;\\n        var callback = self.settings[name], scope;\\n        if (!callback) {\\n          return;\\n        }\\n        if (self.callbackLookup && (scope = self.callbackLookup[name])) {\\n          callback = scope.func;\\n          scope = scope.scope;\\n        }\\n        if (typeof callback === 'string') {\\n          scope = callback.replace(/\\\\.\\\\w+$/, '');\\n          scope = scope ? resolve$4(scope) : 0;\\n          callback = resolve$4(callback);\\n          self.callbackLookup = self.callbackLookup || {};\\n          self.callbackLookup[name] = {\\n            func: callback,\\n            scope: scope\\n          };\\n        }\\n        return callback.apply(scope || self, Array.prototype.slice.call(arguments, 1));\\n      },\\n      translate: function (text) {\\n        if (text && Tools.is(text, 'string')) {\\n          var lang_1 = this.settings.language || 'en', i18n_1 = this.editorManager.i18n;\\n          text = i18n_1.data[lang_1 + '.' + text] || text.replace(/\\\\{\\\\#([^\\\\}]+)\\\\}/g, function (a, b) {\\n            return i18n_1.data[lang_1 + '.' + b] || '{#' + b + '}';\\n          });\\n        }\\n        return this.editorManager.translate(text);\\n      },\\n      getLang: function (name, defaultVal) {\\n        return this.editorManager.i18n.data[(this.settings.language || 'en') + '.' + name] || (defaultVal !== undefined ? defaultVal : '{#' + name + '}');\\n      },\\n      getParam: function (name, defaultVal, type) {\\n        return getParam(this, name, defaultVal, type);\\n      },\\n      nodeChanged: function (args) {\\n        this._nodeChangeDispatcher.nodeChanged(args);\\n      },\\n      addButton: function (name, settings) {\\n        var self = this;\\n        if (settings.cmd) {\\n          settings.onclick = function () {\\n            self.execCommand(settings.cmd);\\n          };\\n        }\\n        if (settings.stateSelector && typeof settings.active === 'undefined') {\\n          settings.active = false;\\n        }\\n        if (!settings.text && !settings.icon) {\\n          settings.icon = name;\\n        }\\n        settings.tooltip = settings.tooltip || settings.title;\\n        self.buttons[name] = settings;\\n      },\\n      addSidebar: function (name, settings) {\\n        return Sidebar.add(this, name, settings);\\n      },\\n      addMenuItem: function (name, settings) {\\n        var self = this;\\n        if (settings.cmd) {\\n          settings.onclick = function () {\\n            self.execCommand(settings.cmd);\\n          };\\n        }\\n        self.menuItems[name] = settings;\\n      },\\n      addContextToolbar: function (predicate, items) {\\n        var self = this;\\n        var selector;\\n        self.contextToolbars = self.contextToolbars || [];\\n        if (typeof predicate === 'string') {\\n          selector = predicate;\\n          predicate = function (elm) {\\n            return self.dom.is(elm, selector);\\n          };\\n        }\\n        self.contextToolbars.push({\\n          id: Uuid.uuid('mcet'),\\n          predicate: predicate,\\n          items: items\\n        });\\n      },\\n      addCommand: function (name, callback, scope) {\\n        this.editorCommands.addCommand(name, callback, scope);\\n      },\\n      addQueryStateHandler: function (name, callback, scope) {\\n        this.editorCommands.addQueryStateHandler(name, callback, scope);\\n      },\\n      addQueryValueHandler: function (name, callback, scope) {\\n        this.editorCommands.addQueryValueHandler(name, callback, scope);\\n      },\\n      addShortcut: function (pattern, desc, cmdFunc, scope) {\\n        this.shortcuts.add(pattern, desc, cmdFunc, scope);\\n      },\\n      execCommand: function (cmd, ui, value, args) {\\n        return this.editorCommands.execCommand(cmd, ui, value, args);\\n      },\\n      queryCommandState: function (cmd) {\\n        return this.editorCommands.queryCommandState(cmd);\\n      },\\n      queryCommandValue: function (cmd) {\\n        return this.editorCommands.queryCommandValue(cmd);\\n      },\\n      queryCommandSupported: function (cmd) {\\n        return this.editorCommands.queryCommandSupported(cmd);\\n      },\\n      show: function () {\\n        var self = this;\\n        if (self.hidden) {\\n          self.hidden = false;\\n          if (self.inline) {\\n            self.getBody().contentEditable = true;\\n          } else {\\n            DOM$7.show(self.getContainer());\\n            DOM$7.hide(self.id);\\n          }\\n          self.load();\\n          self.fire('show');\\n        }\\n      },\\n      hide: function () {\\n        var self = this, doc = self.getDoc();\\n        if (!self.hidden) {\\n          if (ie$2 && doc && !self.inline) {\\n            doc.execCommand('SelectAll');\\n          }\\n          self.save();\\n          if (self.inline) {\\n            self.getBody().contentEditable = false;\\n            if (self === self.editorManager.focusedEditor) {\\n              self.editorManager.focusedEditor = null;\\n            }\\n          } else {\\n            DOM$7.hide(self.getContainer());\\n            DOM$7.setStyle(self.id, 'display', self.orgDisplay);\\n          }\\n          self.hidden = true;\\n          self.fire('hide');\\n        }\\n      },\\n      isHidden: function () {\\n        return !!this.hidden;\\n      },\\n      setProgressState: function (state, time) {\\n        this.fire('ProgressState', {\\n          state: state,\\n          time: time\\n        });\\n      },\\n      load: function (args) {\\n        var self = this;\\n        var elm = self.getElement(), html;\\n        if (self.removed) {\\n          return '';\\n        }\\n        if (elm) {\\n          args = args || {};\\n          args.load = true;\\n          html = self.setContent(elm.value !== undefined ? elm.value : elm.innerHTML, args);\\n          args.element = elm;\\n          if (!args.no_events) {\\n            self.fire('LoadContent', args);\\n          }\\n          args.element = elm = null;\\n          return html;\\n        }\\n      },\\n      save: function (args) {\\n        var self = this;\\n        var elm = self.getElement(), html, form;\\n        if (!elm || !self.initialized || self.removed) {\\n          return;\\n        }\\n        args = args || {};\\n        args.save = true;\\n        args.element = elm;\\n        html = args.content = self.getContent(args);\\n        if (!args.no_events) {\\n          self.fire('SaveContent', args);\\n        }\\n        if (args.format === 'raw') {\\n          self.fire('RawSaveContent', args);\\n        }\\n        html = args.content;\\n        if (!/TEXTAREA|INPUT/i.test(elm.nodeName)) {\\n          if (args.is_removing || !self.inline) {\\n            elm.innerHTML = html;\\n          }\\n          if (form = DOM$7.getParent(self.id, 'form')) {\\n            each$l(form.elements, function (elm) {\\n              if (elm.name === self.id) {\\n                elm.value = html;\\n                return false;\\n              }\\n            });\\n          }\\n        } else {\\n          elm.value = html;\\n        }\\n        args.element = elm = null;\\n        if (args.set_dirty !== false) {\\n          self.setDirty(false);\\n        }\\n        return html;\\n      },\\n      setContent: function (content, args) {\\n        return setContent$1(this, content, args);\\n      },\\n      getContent: function (args) {\\n        return getContent$1(this, args);\\n      },\\n      insertContent: function (content, args) {\\n        if (args) {\\n          content = extend$4({ content: content }, args);\\n        }\\n        this.execCommand('mceInsertContent', false, content);\\n      },\\n      isDirty: function () {\\n        return !this.isNotDirty;\\n      },\\n      setDirty: function (state) {\\n        var oldState = !this.isNotDirty;\\n        this.isNotDirty = !state;\\n        if (state && state !== oldState) {\\n          this.fire('dirty');\\n        }\\n      },\\n      setMode: function (mode) {\\n        setMode(this, mode);\\n      },\\n      getContainer: function () {\\n        var self = this;\\n        if (!self.container) {\\n          self.container = DOM$7.get(self.editorContainer || self.id + '_parent');\\n        }\\n        return self.container;\\n      },\\n      getContentAreaContainer: function () {\\n        return this.contentAreaContainer;\\n      },\\n      getElement: function () {\\n        if (!this.targetElm) {\\n          this.targetElm = DOM$7.get(this.id);\\n        }\\n        return this.targetElm;\\n      },\\n      getWin: function () {\\n        var self = this;\\n        var elm;\\n        if (!self.contentWindow) {\\n          elm = self.iframeElement;\\n          if (elm) {\\n            self.contentWindow = elm.contentWindow;\\n          }\\n        }\\n        return self.contentWindow;\\n      },\\n      getDoc: function () {\\n        var self = this;\\n        var win;\\n        if (!self.contentDocument) {\\n          win = self.getWin();\\n          if (win) {\\n            self.contentDocument = win.document;\\n          }\\n        }\\n        return self.contentDocument;\\n      },\\n      getBody: function () {\\n        var doc = this.getDoc();\\n        return this.bodyElement || (doc ? doc.body : null);\\n      },\\n      convertURL: function (url, name, elm) {\\n        var self = this, settings = self.settings;\\n        if (settings.urlconverter_callback) {\\n          return self.execCallback('urlconverter_callback', url, elm, true, name);\\n        }\\n        if (!settings.convert_urls || elm && elm.nodeName === 'LINK' || url.indexOf('file:') === 0 || url.length === 0) {\\n          return url;\\n        }\\n        if (settings.relative_urls) {\\n          return self.documentBaseURI.toRelative(url);\\n        }\\n        url = self.documentBaseURI.toAbsolute(url, settings.remove_script_host);\\n        return url;\\n      },\\n      addVisual: function (elm) {\\n        var self = this;\\n        var settings = self.settings;\\n        var dom = self.dom;\\n        var cls;\\n        elm = elm || self.getBody();\\n        if (self.hasVisual === undefined) {\\n          self.hasVisual = settings.visual;\\n        }\\n        each$l(dom.select('table,a', elm), function (elm) {\\n          var value;\\n          switch (elm.nodeName) {\\n          case 'TABLE':\\n            cls = settings.visual_table_class || 'mce-item-table';\\n            value = dom.getAttrib(elm, 'border');\\n            if ((!value || value === '0') && self.hasVisual) {\\n              dom.addClass(elm, cls);\\n            } else {\\n              dom.removeClass(elm, cls);\\n            }\\n            return;\\n          case 'A':\\n            if (!dom.getAttrib(elm, 'href')) {\\n              value = dom.getAttrib(elm, 'name') || elm.id;\\n              cls = settings.visual_anchor_class || 'mce-item-anchor';\\n              if (value && self.hasVisual) {\\n                dom.addClass(elm, cls);\\n              } else {\\n                dom.removeClass(elm, cls);\\n              }\\n            }\\n            return;\\n          }\\n        });\\n        self.fire('VisualAid', {\\n          element: elm,\\n          hasVisual: self.hasVisual\\n        });\\n      },\\n      remove: function () {\\n        remove$7(this);\\n      },\\n      destroy: function (automatic) {\\n        destroy(this, automatic);\\n      },\\n      uploadImages: function (callback) {\\n        return this.editorUpload.uploadImages(callback);\\n      },\\n      _scanForImages: function () {\\n        return this.editorUpload.scanForImages();\\n      }\\n    };\\n    extend$4(Editor.prototype, EditorObservable$1);\\n\\n    var isEditorUIElement = function (elm) {\\n      return elm.className.toString().indexOf('mce-') !== -1;\\n    };\\n    var FocusManager = { isEditorUIElement: isEditorUIElement };\\n\\n    var isManualNodeChange = function (e) {\\n      return e.type === 'nodechange' && e.selectionChange;\\n    };\\n    var registerPageMouseUp = function (editor, throttledStore) {\\n      var mouseUpPage = function () {\\n        throttledStore.throttle();\\n      };\\n      DOMUtils$1.DOM.bind(domGlobals.document, 'mouseup', mouseUpPage);\\n      editor.on('remove', function () {\\n        DOMUtils$1.DOM.unbind(domGlobals.document, 'mouseup', mouseUpPage);\\n      });\\n    };\\n    var registerFocusOut = function (editor) {\\n      editor.on('focusout', function () {\\n        SelectionBookmark.store(editor);\\n      });\\n    };\\n    var registerMouseUp = function (editor, throttledStore) {\\n      editor.on('mouseup touchend', function (e) {\\n        throttledStore.throttle();\\n      });\\n    };\\n    var registerEditorEvents = function (editor, throttledStore) {\\n      var browser = PlatformDetection$1.detect().browser;\\n      if (browser.isIE()) {\\n        registerFocusOut(editor);\\n      } else {\\n        registerMouseUp(editor, throttledStore);\\n      }\\n      editor.on('keyup nodechange', function (e) {\\n        if (!isManualNodeChange(e)) {\\n          SelectionBookmark.store(editor);\\n        }\\n      });\\n    };\\n    var register$3 = function (editor) {\\n      var throttledStore = first(function () {\\n        SelectionBookmark.store(editor);\\n      }, 0);\\n      if (editor.inline) {\\n        registerPageMouseUp(editor, throttledStore);\\n      }\\n      editor.on('init', function () {\\n        registerEditorEvents(editor, throttledStore);\\n      });\\n      editor.on('remove', function () {\\n        throttledStore.cancel();\\n      });\\n    };\\n    var SelectionRestore = { register: register$3 };\\n\\n    var documentFocusInHandler;\\n    var DOM$8 = DOMUtils$1.DOM;\\n    var isEditorUIElement$1 = function (elm) {\\n      return FocusManager.isEditorUIElement(elm);\\n    };\\n    var isUIElement = function (editor, elm) {\\n      var customSelector = editor ? editor.settings.custom_ui_selector : '';\\n      var parent = DOM$8.getParent(elm, function (elm) {\\n        return isEditorUIElement$1(elm) || (customSelector ? editor.dom.is(elm, customSelector) : false);\\n      });\\n      return parent !== null;\\n    };\\n    var getActiveElement = function () {\\n      try {\\n        return domGlobals.document.activeElement;\\n      } catch (ex) {\\n        return domGlobals.document.body;\\n      }\\n    };\\n    var registerEvents = function (editorManager, e) {\\n      var editor = e.editor;\\n      SelectionRestore.register(editor);\\n      editor.on('focusin', function () {\\n        var self = this;\\n        var focusedEditor = editorManager.focusedEditor;\\n        if (focusedEditor !== self) {\\n          if (focusedEditor) {\\n            focusedEditor.fire('blur', { focusedEditor: self });\\n          }\\n          editorManager.setActive(self);\\n          editorManager.focusedEditor = self;\\n          self.fire('focus', { blurredEditor: focusedEditor });\\n          self.focus(true);\\n        }\\n      });\\n      editor.on('focusout', function () {\\n        var self = this;\\n        Delay.setEditorTimeout(self, function () {\\n          var focusedEditor = editorManager.focusedEditor;\\n          if (!isUIElement(self, getActiveElement()) && focusedEditor === self) {\\n            self.fire('blur', { focusedEditor: null });\\n            editorManager.focusedEditor = null;\\n          }\\n        });\\n      });\\n      if (!documentFocusInHandler) {\\n        documentFocusInHandler = function (e) {\\n          var activeEditor = editorManager.activeEditor;\\n          var target;\\n          target = e.target;\\n          if (activeEditor && target.ownerDocument === domGlobals.document) {\\n            if (target !== domGlobals.document.body && !isUIElement(activeEditor, target) && editorManager.focusedEditor === activeEditor) {\\n              activeEditor.fire('blur', { focusedEditor: null });\\n              editorManager.focusedEditor = null;\\n            }\\n          }\\n        };\\n        DOM$8.bind(domGlobals.document, 'focusin', documentFocusInHandler);\\n      }\\n    };\\n    var unregisterDocumentEvents = function (editorManager, e) {\\n      if (editorManager.focusedEditor === e.editor) {\\n        editorManager.focusedEditor = null;\\n      }\\n      if (!editorManager.activeEditor) {\\n        DOM$8.unbind(domGlobals.document, 'focusin', documentFocusInHandler);\\n        documentFocusInHandler = null;\\n      }\\n    };\\n    var setup$h = function (editorManager) {\\n      editorManager.on('AddEditor', curry(registerEvents, editorManager));\\n      editorManager.on('RemoveEditor', curry(unregisterDocumentEvents, editorManager));\\n    };\\n    var FocusController = {\\n      setup: setup$h,\\n      isEditorUIElement: isEditorUIElement$1,\\n      isUIElement: isUIElement\\n    };\\n\\n    var DOM$9 = DOMUtils$1.DOM;\\n    var explode$4 = Tools.explode, each$m = Tools.each, extend$5 = Tools.extend;\\n    var instanceCounter = 0, beforeUnloadDelegate, EditorManager, boundGlobalEvents = false;\\n    var legacyEditors = [];\\n    var editors = [];\\n    var isValidLegacyKey = function (id) {\\n      return id !== 'length';\\n    };\\n    var globalEventDelegate = function (e) {\\n      var type = e.type;\\n      each$m(EditorManager.get(), function (editor) {\\n        switch (type) {\\n        case 'scroll':\\n          editor.fire('ScrollWindow', e);\\n          break;\\n        case 'resize':\\n          editor.fire('ResizeWindow', e);\\n          break;\\n        }\\n      });\\n    };\\n    var toggleGlobalEvents = function (state) {\\n      if (state !== boundGlobalEvents) {\\n        if (state) {\\n          DomQuery(window).on('resize scroll', globalEventDelegate);\\n        } else {\\n          DomQuery(window).off('resize scroll', globalEventDelegate);\\n        }\\n        boundGlobalEvents = state;\\n      }\\n    };\\n    var removeEditorFromList = function (targetEditor) {\\n      var oldEditors = editors;\\n      delete legacyEditors[targetEditor.id];\\n      for (var i = 0; i < legacyEditors.length; i++) {\\n        if (legacyEditors[i] === targetEditor) {\\n          legacyEditors.splice(i, 1);\\n          break;\\n        }\\n      }\\n      editors = filter(editors, function (editor) {\\n        return targetEditor !== editor;\\n      });\\n      if (EditorManager.activeEditor === targetEditor) {\\n        EditorManager.activeEditor = editors.length > 0 ? editors[0] : null;\\n      }\\n      if (EditorManager.focusedEditor === targetEditor) {\\n        EditorManager.focusedEditor = null;\\n      }\\n      return oldEditors.length !== editors.length;\\n    };\\n    var purgeDestroyedEditor = function (editor) {\\n      if (editor && editor.initialized && !(editor.getContainer() || editor.getBody()).parentNode) {\\n        removeEditorFromList(editor);\\n        editor.unbindAllNativeEvents();\\n        editor.destroy(true);\\n        editor.removed = true;\\n        editor = null;\\n      }\\n      return editor;\\n    };\\n    EditorManager = {\\n      defaultSettings: {},\\n      $: DomQuery,\\n      majorVersion: '4',\\n      minorVersion: '9.11',\\n      releaseDate: '2020-07-13',\\n      editors: legacyEditors,\\n      i18n: I18n,\\n      activeEditor: null,\\n      settings: {},\\n      setup: function () {\\n        var self = this;\\n        var baseURL, documentBaseURL, suffix = '';\\n        documentBaseURL = URI.getDocumentBaseUrl(domGlobals.document.location);\\n        if (/^[^:]+:\\\\/\\\\/\\\\/?[^\\\\/]+\\\\//.test(documentBaseURL)) {\\n          documentBaseURL = documentBaseURL.replace(/[\\\\?#].*$/, '').replace(/[\\\\/\\\\\\\\][^\\\\/]+$/, '');\\n          if (!/[\\\\/\\\\\\\\]$/.test(documentBaseURL)) {\\n            documentBaseURL += '/';\\n          }\\n        }\\n        var preInit = window.tinymce || window.tinyMCEPreInit;\\n        if (preInit) {\\n          baseURL = preInit.base || preInit.baseURL;\\n          suffix = preInit.suffix;\\n        } else {\\n          var scripts = domGlobals.document.getElementsByTagName('script');\\n          for (var i = 0; i < scripts.length; i++) {\\n            var src = scripts[i].src || '';\\n            if (src === '') {\\n              continue;\\n            }\\n            var srcScript = src.substring(src.lastIndexOf('/'));\\n            if (/tinymce(\\\\.full|\\\\.jquery|)(\\\\.min|\\\\.dev|)\\\\.js/.test(src)) {\\n              if (srcScript.indexOf('.min') !== -1) {\\n                suffix = '.min';\\n              }\\n              baseURL = src.substring(0, src.lastIndexOf('/'));\\n              break;\\n            }\\n          }\\n          if (!baseURL && domGlobals.document.currentScript) {\\n            var src = domGlobals.document.currentScript.src;\\n            if (src.indexOf('.min') !== -1) {\\n              suffix = '.min';\\n            }\\n            baseURL = src.substring(0, src.lastIndexOf('/'));\\n          }\\n        }\\n        self.baseURL = new URI(documentBaseURL).toAbsolute(baseURL);\\n        self.documentBaseURL = documentBaseURL;\\n        self.baseURI = new URI(self.baseURL);\\n        self.suffix = suffix;\\n        FocusController.setup(self);\\n      },\\n      overrideDefaults: function (defaultSettings) {\\n        var baseUrl, suffix;\\n        baseUrl = defaultSettings.base_url;\\n        if (baseUrl) {\\n          this.baseURL = new URI(this.documentBaseURL).toAbsolute(baseUrl.replace(/\\\\/+$/, ''));\\n          this.baseURI = new URI(this.baseURL);\\n        }\\n        suffix = defaultSettings.suffix;\\n        if (defaultSettings.suffix) {\\n          this.suffix = suffix;\\n        }\\n        this.defaultSettings = defaultSettings;\\n        var pluginBaseUrls = defaultSettings.plugin_base_urls;\\n        for (var name in pluginBaseUrls) {\\n          AddOnManager.PluginManager.urls[name] = pluginBaseUrls[name];\\n        }\\n      },\\n      init: function (settings) {\\n        var self = this;\\n        var result, invalidInlineTargets;\\n        invalidInlineTargets = Tools.makeMap('area base basefont br col frame hr img input isindex link meta param embed source wbr track ' + 'colgroup option tbody tfoot thead tr script noscript style textarea video audio iframe object menu', ' ');\\n        var isInvalidInlineTarget = function (settings, elm) {\\n          return settings.inline && elm.tagName.toLowerCase() in invalidInlineTargets;\\n        };\\n        var createId = function (elm) {\\n          var id = elm.id;\\n          if (!id) {\\n            id = elm.name;\\n            if (id && !DOM$9.get(id)) {\\n              id = elm.name;\\n            } else {\\n              id = DOM$9.uniqueId();\\n            }\\n            elm.setAttribute('id', id);\\n          }\\n          return id;\\n        };\\n        var execCallback = function (name) {\\n          var callback = settings[name];\\n          if (!callback) {\\n            return;\\n          }\\n          return callback.apply(self, Array.prototype.slice.call(arguments, 2));\\n        };\\n        var hasClass = function (elm, className) {\\n          return className.constructor === RegExp ? className.test(elm.className) : DOM$9.hasClass(elm, className);\\n        };\\n        var findTargets = function (settings) {\\n          var l, targets = [];\\n          if (Env.ie && Env.ie < 11) {\\n            ErrorReporter.initError('TinyMCE does not support the browser you are using. For a list of supported' + ' browsers please see: https://www.tinymce.com/docs/get-started/system-requirements/');\\n            return [];\\n          }\\n          if (settings.types) {\\n            each$m(settings.types, function (type) {\\n              targets = targets.concat(DOM$9.select(type.selector));\\n            });\\n            return targets;\\n          } else if (settings.selector) {\\n            return DOM$9.select(settings.selector);\\n          } else if (settings.target) {\\n            return [settings.target];\\n          }\\n          switch (settings.mode) {\\n          case 'exact':\\n            l = settings.elements || '';\\n            if (l.length > 0) {\\n              each$m(explode$4(l), function (id) {\\n                var elm;\\n                if (elm = DOM$9.get(id)) {\\n                  targets.push(elm);\\n                } else {\\n                  each$m(domGlobals.document.forms, function (f) {\\n                    each$m(f.elements, function (e) {\\n                      if (e.name === id) {\\n                        id = 'mce_editor_' + instanceCounter++;\\n                        DOM$9.setAttrib(e, 'id', id);\\n                        targets.push(e);\\n                      }\\n                    });\\n                  });\\n                }\\n              });\\n            }\\n            break;\\n          case 'textareas':\\n          case 'specific_textareas':\\n            each$m(DOM$9.select('textarea'), function (elm) {\\n              if (settings.editor_deselector && hasClass(elm, settings.editor_deselector)) {\\n                return;\\n              }\\n              if (!settings.editor_selector || hasClass(elm, settings.editor_selector)) {\\n                targets.push(elm);\\n              }\\n            });\\n            break;\\n          }\\n          return targets;\\n        };\\n        var provideResults = function (editors) {\\n          result = editors;\\n        };\\n        var initEditors = function () {\\n          var initCount = 0;\\n          var editors = [];\\n          var targets;\\n          var createEditor = function (id, settings, targetElm) {\\n            var editor = new Editor(id, settings, self);\\n            editors.push(editor);\\n            editor.on('init', function () {\\n              if (++initCount === targets.length) {\\n                provideResults(editors);\\n              }\\n            });\\n            editor.targetElm = editor.targetElm || targetElm;\\n            editor.render();\\n          };\\n          DOM$9.unbind(window, 'ready', initEditors);\\n          execCallback('onpageload');\\n          targets = DomQuery.unique(findTargets(settings));\\n          if (settings.types) {\\n            each$m(settings.types, function (type) {\\n              Tools.each(targets, function (elm) {\\n                if (DOM$9.is(elm, type.selector)) {\\n                  createEditor(createId(elm), extend$5({}, settings, type), elm);\\n                  return false;\\n                }\\n                return true;\\n              });\\n            });\\n            return;\\n          }\\n          Tools.each(targets, function (elm) {\\n            purgeDestroyedEditor(self.get(elm.id));\\n          });\\n          targets = Tools.grep(targets, function (elm) {\\n            return !self.get(elm.id);\\n          });\\n          if (targets.length === 0) {\\n            provideResults([]);\\n          } else {\\n            each$m(targets, function (elm) {\\n              if (isInvalidInlineTarget(settings, elm)) {\\n                ErrorReporter.initError('Could not initialize inline editor on invalid inline target element', elm);\\n              } else {\\n                createEditor(createId(elm), settings, elm);\\n              }\\n            });\\n          }\\n        };\\n        self.settings = settings;\\n        DOM$9.bind(window, 'ready', initEditors);\\n        return new promiseObj(function (resolve) {\\n          if (result) {\\n            resolve(result);\\n          } else {\\n            provideResults = function (editors) {\\n              resolve(editors);\\n            };\\n          }\\n        });\\n      },\\n      get: function (id) {\\n        if (arguments.length === 0) {\\n          return editors.slice(0);\\n        } else if (isString(id)) {\\n          return find(editors, function (editor) {\\n            return editor.id === id;\\n          }).getOr(null);\\n        } else if (isNumber(id)) {\\n          return editors[id] ? editors[id] : null;\\n        } else {\\n          return null;\\n        }\\n      },\\n      add: function (editor) {\\n        var self = this;\\n        var existingEditor;\\n        existingEditor = legacyEditors[editor.id];\\n        if (existingEditor === editor) {\\n          return editor;\\n        }\\n        if (self.get(editor.id) === null) {\\n          if (isValidLegacyKey(editor.id)) {\\n            legacyEditors[editor.id] = editor;\\n          }\\n          legacyEditors.push(editor);\\n          editors.push(editor);\\n        }\\n        toggleGlobalEvents(true);\\n        self.activeEditor = editor;\\n        self.fire('AddEditor', { editor: editor });\\n        if (!beforeUnloadDelegate) {\\n          beforeUnloadDelegate = function () {\\n            self.fire('BeforeUnload');\\n          };\\n          DOM$9.bind(window, 'beforeunload', beforeUnloadDelegate);\\n        }\\n        return editor;\\n      },\\n      createEditor: function (id, settings) {\\n        return this.add(new Editor(id, settings, this));\\n      },\\n      remove: function (selector) {\\n        var self = this;\\n        var i, editor;\\n        if (!selector) {\\n          for (i = editors.length - 1; i >= 0; i--) {\\n            self.remove(editors[i]);\\n          }\\n          return;\\n        }\\n        if (isString(selector)) {\\n          each$m(DOM$9.select(selector), function (elm) {\\n            editor = self.get(elm.id);\\n            if (editor) {\\n              self.remove(editor);\\n            }\\n          });\\n          return;\\n        }\\n        editor = selector;\\n        if (isNull(self.get(editor.id))) {\\n          return null;\\n        }\\n        if (removeEditorFromList(editor)) {\\n          self.fire('RemoveEditor', { editor: editor });\\n        }\\n        if (editors.length === 0) {\\n          DOM$9.unbind(window, 'beforeunload', beforeUnloadDelegate);\\n        }\\n        editor.remove();\\n        toggleGlobalEvents(editors.length > 0);\\n        return editor;\\n      },\\n      execCommand: function (cmd, ui, value) {\\n        var self = this, editor = self.get(value);\\n        switch (cmd) {\\n        case 'mceAddEditor':\\n          if (!self.get(value)) {\\n            new Editor(value, self.settings, self).render();\\n          }\\n          return true;\\n        case 'mceRemoveEditor':\\n          if (editor) {\\n            editor.remove();\\n          }\\n          return true;\\n        case 'mceToggleEditor':\\n          if (!editor) {\\n            self.execCommand('mceAddEditor', 0, value);\\n            return true;\\n          }\\n          if (editor.isHidden()) {\\n            editor.show();\\n          } else {\\n            editor.hide();\\n          }\\n          return true;\\n        }\\n        if (self.activeEditor) {\\n          return self.activeEditor.execCommand(cmd, ui, value);\\n        }\\n        return false;\\n      },\\n      triggerSave: function () {\\n        each$m(editors, function (editor) {\\n          editor.save();\\n        });\\n      },\\n      addI18n: function (code, items) {\\n        I18n.add(code, items);\\n      },\\n      translate: function (text) {\\n        return I18n.translate(text);\\n      },\\n      setActive: function (editor) {\\n        var activeEditor = this.activeEditor;\\n        if (this.activeEditor !== editor) {\\n          if (activeEditor) {\\n            activeEditor.fire('deactivate', { relatedTarget: editor });\\n          }\\n          editor.fire('activate', { relatedTarget: activeEditor });\\n        }\\n        this.activeEditor = editor;\\n      }\\n    };\\n    extend$5(EditorManager, Observable);\\n    EditorManager.setup();\\n    var EditorManager$1 = EditorManager;\\n\\n    function RangeUtils(dom) {\\n      var walk = function (rng, callback) {\\n        return RangeWalk.walk(dom, rng, callback);\\n      };\\n      var split = SplitRange.split;\\n      var normalize = function (rng) {\\n        return NormalizeRange.normalize(dom, rng).fold(constant(false), function (normalizedRng) {\\n          rng.setStart(normalizedRng.startContainer, normalizedRng.startOffset);\\n          rng.setEnd(normalizedRng.endContainer, normalizedRng.endOffset);\\n          return true;\\n        });\\n      };\\n      return {\\n        walk: walk,\\n        split: split,\\n        normalize: normalize\\n      };\\n    }\\n    (function (RangeUtils) {\\n      RangeUtils.compareRanges = RangeCompare.isEq;\\n      RangeUtils.getCaretRangeFromPoint = CaretRangeFromPoint.fromPoint;\\n      RangeUtils.getSelectedNode = getSelectedNode;\\n      RangeUtils.getNode = getNode;\\n    }(RangeUtils || (RangeUtils = {})));\\n    var RangeUtils$1 = RangeUtils;\\n\\n    var min = Math.min, max = Math.max, round$2 = Math.round;\\n    var relativePosition = function (rect, targetRect, rel) {\\n      var x, y, w, h, targetW, targetH;\\n      x = targetRect.x;\\n      y = targetRect.y;\\n      w = rect.w;\\n      h = rect.h;\\n      targetW = targetRect.w;\\n      targetH = targetRect.h;\\n      rel = (rel || '').split('');\\n      if (rel[0] === 'b') {\\n        y += targetH;\\n      }\\n      if (rel[1] === 'r') {\\n        x += targetW;\\n      }\\n      if (rel[0] === 'c') {\\n        y += round$2(targetH / 2);\\n      }\\n      if (rel[1] === 'c') {\\n        x += round$2(targetW / 2);\\n      }\\n      if (rel[3] === 'b') {\\n        y -= h;\\n      }\\n      if (rel[4] === 'r') {\\n        x -= w;\\n      }\\n      if (rel[3] === 'c') {\\n        y -= round$2(h / 2);\\n      }\\n      if (rel[4] === 'c') {\\n        x -= round$2(w / 2);\\n      }\\n      return create$4(x, y, w, h);\\n    };\\n    var findBestRelativePosition = function (rect, targetRect, constrainRect, rels) {\\n      var pos, i;\\n      for (i = 0; i < rels.length; i++) {\\n        pos = relativePosition(rect, targetRect, rels[i]);\\n        if (pos.x >= constrainRect.x && pos.x + pos.w <= constrainRect.w + constrainRect.x && pos.y >= constrainRect.y && pos.y + pos.h <= constrainRect.h + constrainRect.y) {\\n          return rels[i];\\n        }\\n      }\\n      return null;\\n    };\\n    var inflate = function (rect, w, h) {\\n      return create$4(rect.x - w, rect.y - h, rect.w + w * 2, rect.h + h * 2);\\n    };\\n    var intersect = function (rect, cropRect) {\\n      var x1, y1, x2, y2;\\n      x1 = max(rect.x, cropRect.x);\\n      y1 = max(rect.y, cropRect.y);\\n      x2 = min(rect.x + rect.w, cropRect.x + cropRect.w);\\n      y2 = min(rect.y + rect.h, cropRect.y + cropRect.h);\\n      if (x2 - x1 < 0 || y2 - y1 < 0) {\\n        return null;\\n      }\\n      return create$4(x1, y1, x2 - x1, y2 - y1);\\n    };\\n    var clamp$1 = function (rect, clampRect, fixedSize) {\\n      var underflowX1, underflowY1, overflowX2, overflowY2, x1, y1, x2, y2, cx2, cy2;\\n      x1 = rect.x;\\n      y1 = rect.y;\\n      x2 = rect.x + rect.w;\\n      y2 = rect.y + rect.h;\\n      cx2 = clampRect.x + clampRect.w;\\n      cy2 = clampRect.y + clampRect.h;\\n      underflowX1 = max(0, clampRect.x - x1);\\n      underflowY1 = max(0, clampRect.y - y1);\\n      overflowX2 = max(0, x2 - cx2);\\n      overflowY2 = max(0, y2 - cy2);\\n      x1 += underflowX1;\\n      y1 += underflowY1;\\n      if (fixedSize) {\\n        x2 += underflowX1;\\n        y2 += underflowY1;\\n        x1 -= overflowX2;\\n        y1 -= overflowY2;\\n      }\\n      x2 -= overflowX2;\\n      y2 -= overflowY2;\\n      return create$4(x1, y1, x2 - x1, y2 - y1);\\n    };\\n    var create$4 = function (x, y, w, h) {\\n      return {\\n        x: x,\\n        y: y,\\n        w: w,\\n        h: h\\n      };\\n    };\\n    var fromClientRect = function (clientRect) {\\n      return create$4(clientRect.left, clientRect.top, clientRect.width, clientRect.height);\\n    };\\n    var Rect = {\\n      inflate: inflate,\\n      relativePosition: relativePosition,\\n      findBestRelativePosition: findBestRelativePosition,\\n      intersect: intersect,\\n      clamp: clamp$1,\\n      create: create$4,\\n      fromClientRect: fromClientRect\\n    };\\n\\n    var types = {};\\n    var Factory = {\\n      add: function (type, typeClass) {\\n        types[type.toLowerCase()] = typeClass;\\n      },\\n      has: function (type) {\\n        return !!types[type.toLowerCase()];\\n      },\\n      get: function (type) {\\n        var lctype = type.toLowerCase();\\n        var controlType = types.hasOwnProperty(lctype) ? types[lctype] : null;\\n        if (controlType === null) {\\n          throw new Error('Could not find module for type: ' + type);\\n        }\\n        return controlType;\\n      },\\n      create: function (type, settings) {\\n        var ControlType;\\n        if (typeof type === 'string') {\\n          settings = settings || {};\\n          settings.type = type;\\n        } else {\\n          settings = type;\\n          type = settings.type;\\n        }\\n        type = type.toLowerCase();\\n        ControlType = types[type];\\n        if (!ControlType) {\\n          throw new Error('Could not find control by type: ' + type);\\n        }\\n        ControlType = new ControlType(settings);\\n        ControlType.type = type;\\n        return ControlType;\\n      }\\n    };\\n\\n    var each$n = Tools.each, extend$6 = Tools.extend;\\n    var extendClass, initializing;\\n    var Class = function () {\\n    };\\n    Class.extend = extendClass = function (prop) {\\n      var self = this;\\n      var _super = self.prototype;\\n      var prototype, name, member;\\n      var Class = function () {\\n        var i, mixins, mixin;\\n        var self = this;\\n        if (!initializing) {\\n          if (self.init) {\\n            self.init.apply(self, arguments);\\n          }\\n          mixins = self.Mixins;\\n          if (mixins) {\\n            i = mixins.length;\\n            while (i--) {\\n              mixin = mixins[i];\\n              if (mixin.init) {\\n                mixin.init.apply(self, arguments);\\n              }\\n            }\\n          }\\n        }\\n      };\\n      var dummy = function () {\\n        return this;\\n      };\\n      var createMethod = function (name, fn) {\\n        return function () {\\n          var self = this;\\n          var tmp = self._super;\\n          var ret;\\n          self._super = _super[name];\\n          ret = fn.apply(self, arguments);\\n          self._super = tmp;\\n          return ret;\\n        };\\n      };\\n      initializing = true;\\n      prototype = new self();\\n      initializing = false;\\n      if (prop.Mixins) {\\n        each$n(prop.Mixins, function (mixin) {\\n          for (var name_1 in mixin) {\\n            if (name_1 !== 'init') {\\n              prop[name_1] = mixin[name_1];\\n            }\\n          }\\n        });\\n        if (_super.Mixins) {\\n          prop.Mixins = _super.Mixins.concat(prop.Mixins);\\n        }\\n      }\\n      if (prop.Methods) {\\n        each$n(prop.Methods.split(','), function (name) {\\n          prop[name] = dummy;\\n        });\\n      }\\n      if (prop.Properties) {\\n        each$n(prop.Properties.split(','), function (name) {\\n          var fieldName = '_' + name;\\n          prop[name] = function (value) {\\n            var self = this;\\n            if (value !== undefined) {\\n              self[fieldName] = value;\\n              return self;\\n            }\\n            return self[fieldName];\\n          };\\n        });\\n      }\\n      if (prop.Statics) {\\n        each$n(prop.Statics, function (func, name) {\\n          Class[name] = func;\\n        });\\n      }\\n      if (prop.Defaults && _super.Defaults) {\\n        prop.Defaults = extend$6({}, _super.Defaults, prop.Defaults);\\n      }\\n      for (name in prop) {\\n        member = prop[name];\\n        if (typeof member === 'function' && _super[name]) {\\n          prototype[name] = createMethod(name, member);\\n        } else {\\n          prototype[name] = member;\\n        }\\n      }\\n      Class.prototype = prototype;\\n      Class.constructor = Class;\\n      Class.extend = extendClass;\\n      return Class;\\n    };\\n\\n    var min$1 = Math.min, max$1 = Math.max, round$3 = Math.round;\\n    var Color = function (value) {\\n      var self = {};\\n      var r = 0, g = 0, b = 0;\\n      var rgb2hsv = function (r, g, b) {\\n        var h, s, v, d, minRGB, maxRGB;\\n        h = 0;\\n        s = 0;\\n        v = 0;\\n        r = r / 255;\\n        g = g / 255;\\n        b = b / 255;\\n        minRGB = min$1(r, min$1(g, b));\\n        maxRGB = max$1(r, max$1(g, b));\\n        if (minRGB === maxRGB) {\\n          v = minRGB;\\n          return {\\n            h: 0,\\n            s: 0,\\n            v: v * 100\\n          };\\n        }\\n        d = r === minRGB ? g - b : b === minRGB ? r - g : b - r;\\n        h = r === minRGB ? 3 : b === minRGB ? 1 : 5;\\n        h = 60 * (h - d / (maxRGB - minRGB));\\n        s = (maxRGB - minRGB) / maxRGB;\\n        v = maxRGB;\\n        return {\\n          h: round$3(h),\\n          s: round$3(s * 100),\\n          v: round$3(v * 100)\\n        };\\n      };\\n      var hsvToRgb = function (hue, saturation, brightness) {\\n        var side, chroma, x, match;\\n        hue = (parseInt(hue, 10) || 0) % 360;\\n        saturation = parseInt(saturation, 10) / 100;\\n        brightness = parseInt(brightness, 10) / 100;\\n        saturation = max$1(0, min$1(saturation, 1));\\n        brightness = max$1(0, min$1(brightness, 1));\\n        if (saturation === 0) {\\n          r = g = b = round$3(255 * brightness);\\n          return;\\n        }\\n        side = hue / 60;\\n        chroma = brightness * saturation;\\n        x = chroma * (1 - Math.abs(side % 2 - 1));\\n        match = brightness - chroma;\\n        switch (Math.floor(side)) {\\n        case 0:\\n          r = chroma;\\n          g = x;\\n          b = 0;\\n          break;\\n        case 1:\\n          r = x;\\n          g = chroma;\\n          b = 0;\\n          break;\\n        case 2:\\n          r = 0;\\n          g = chroma;\\n          b = x;\\n          break;\\n        case 3:\\n          r = 0;\\n          g = x;\\n          b = chroma;\\n          break;\\n        case 4:\\n          r = x;\\n          g = 0;\\n          b = chroma;\\n          break;\\n        case 5:\\n          r = chroma;\\n          g = 0;\\n          b = x;\\n          break;\\n        default:\\n          r = g = b = 0;\\n        }\\n        r = round$3(255 * (r + match));\\n        g = round$3(255 * (g + match));\\n        b = round$3(255 * (b + match));\\n      };\\n      var toHex = function () {\\n        var hex = function (val) {\\n          val = parseInt(val, 10).toString(16);\\n          return val.length > 1 ? val : '0' + val;\\n        };\\n        return '#' + hex(r) + hex(g) + hex(b);\\n      };\\n      var toRgb = function () {\\n        return {\\n          r: r,\\n          g: g,\\n          b: b\\n        };\\n      };\\n      var toHsv = function () {\\n        return rgb2hsv(r, g, b);\\n      };\\n      var parse = function (value) {\\n        var matches;\\n        if (typeof value === 'object') {\\n          if ('r' in value) {\\n            r = value.r;\\n            g = value.g;\\n            b = value.b;\\n          } else if ('v' in value) {\\n            hsvToRgb(value.h, value.s, value.v);\\n          }\\n        } else {\\n          if (matches = /rgb\\\\s*\\\\(\\\\s*([0-9]+)\\\\s*,\\\\s*([0-9]+)\\\\s*,\\\\s*([0-9]+)[^\\\\)]*\\\\)/gi.exec(value)) {\\n            r = parseInt(matches[1], 10);\\n            g = parseInt(matches[2], 10);\\n            b = parseInt(matches[3], 10);\\n          } else if (matches = /#([0-F]{2})([0-F]{2})([0-F]{2})/gi.exec(value)) {\\n            r = parseInt(matches[1], 16);\\n            g = parseInt(matches[2], 16);\\n            b = parseInt(matches[3], 16);\\n          } else if (matches = /#([0-F])([0-F])([0-F])/gi.exec(value)) {\\n            r = parseInt(matches[1] + matches[1], 16);\\n            g = parseInt(matches[2] + matches[2], 16);\\n            b = parseInt(matches[3] + matches[3], 16);\\n          }\\n        }\\n        r = r < 0 ? 0 : r > 255 ? 255 : r;\\n        g = g < 0 ? 0 : g > 255 ? 255 : g;\\n        b = b < 0 ? 0 : b > 255 ? 255 : b;\\n        return self;\\n      };\\n      if (value) {\\n        parse(value);\\n      }\\n      self.toRgb = toRgb;\\n      self.toHsv = toHsv;\\n      self.toHex = toHex;\\n      self.parse = parse;\\n      return self;\\n    };\\n\\n    var serialize = function (o, quote) {\\n      var i, v, t, name;\\n      quote = quote || '\\\"';\\n      if (o === null) {\\n        return 'null';\\n      }\\n      t = typeof o;\\n      if (t === 'string') {\\n        v = '\\\\bb\\\\tt\\\\nn\\\\ff\\\\rr\\\"\\\"\\\\'\\\\'\\\\\\\\\\\\\\\\';\\n        return quote + o.replace(/([\\\\u0080-\\\\uFFFF\\\\x00-\\\\x1f\\\\\\\"\\\\'\\\\\\\\])/g, function (a, b) {\\n          if (quote === '\\\"' && a === '\\\\'') {\\n            return a;\\n          }\\n          i = v.indexOf(b);\\n          if (i + 1) {\\n            return '\\\\\\\\' + v.charAt(i + 1);\\n          }\\n          a = b.charCodeAt().toString(16);\\n          return '\\\\\\\\u' + '0000'.substring(a.length) + a;\\n        }) + quote;\\n      }\\n      if (t === 'object') {\\n        if (o.hasOwnProperty && Object.prototype.toString.call(o) === '[object Array]') {\\n          for (i = 0, v = '['; i < o.length; i++) {\\n            v += (i > 0 ? ',' : '') + serialize(o[i], quote);\\n          }\\n          return v + ']';\\n        }\\n        v = '{';\\n        for (name in o) {\\n          if (o.hasOwnProperty(name)) {\\n            v += typeof o[name] !== 'function' ? (v.length > 1 ? ',' + quote : quote) + name + quote + ':' + serialize(o[name], quote) : '';\\n          }\\n        }\\n        return v + '}';\\n      }\\n      return '' + o;\\n    };\\n    var JSON$1 = {\\n      serialize: serialize,\\n      parse: function (text) {\\n        try {\\n          return JSON.parse(text);\\n        } catch (ex) {\\n        }\\n      }\\n    };\\n\\n    var JSONP = {\\n      callbacks: {},\\n      count: 0,\\n      send: function (settings) {\\n        var self = this, dom = DOMUtils$1.DOM, count = settings.count !== undefined ? settings.count : self.count;\\n        var id = 'tinymce_jsonp_' + count;\\n        self.callbacks[count] = function (json) {\\n          dom.remove(id);\\n          delete self.callbacks[count];\\n          settings.callback(json);\\n        };\\n        dom.add(dom.doc.body, 'script', {\\n          id: id,\\n          src: settings.url,\\n          type: 'text/javascript'\\n        });\\n        self.count++;\\n      }\\n    };\\n\\n    var XHR = {\\n      send: function (settings) {\\n        var xhr, count = 0;\\n        var ready = function () {\\n          if (!settings.async || xhr.readyState === 4 || count++ > 10000) {\\n            if (settings.success && count < 10000 && xhr.status === 200) {\\n              settings.success.call(settings.success_scope, '' + xhr.responseText, xhr, settings);\\n            } else if (settings.error) {\\n              settings.error.call(settings.error_scope, count > 10000 ? 'TIMED_OUT' : 'GENERAL', xhr, settings);\\n            }\\n            xhr = null;\\n          } else {\\n            setTimeout(ready, 10);\\n          }\\n        };\\n        settings.scope = settings.scope || this;\\n        settings.success_scope = settings.success_scope || settings.scope;\\n        settings.error_scope = settings.error_scope || settings.scope;\\n        settings.async = settings.async === false ? false : true;\\n        settings.data = settings.data || '';\\n        XHR.fire('beforeInitialize', { settings: settings });\\n        xhr = XMLHttpRequest();\\n        if (xhr) {\\n          if (xhr.overrideMimeType) {\\n            xhr.overrideMimeType(settings.content_type);\\n          }\\n          xhr.open(settings.type || (settings.data ? 'POST' : 'GET'), settings.url, settings.async);\\n          if (settings.crossDomain) {\\n            xhr.withCredentials = true;\\n          }\\n          if (settings.content_type) {\\n            xhr.setRequestHeader('Content-Type', settings.content_type);\\n          }\\n          if (settings.requestheaders) {\\n            Tools.each(settings.requestheaders, function (header) {\\n              xhr.setRequestHeader(header.key, header.value);\\n            });\\n          }\\n          xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\\n          xhr = XHR.fire('beforeSend', {\\n            xhr: xhr,\\n            settings: settings\\n          }).xhr;\\n          xhr.send(settings.data);\\n          if (!settings.async) {\\n            return ready();\\n          }\\n          setTimeout(ready, 10);\\n        }\\n      }\\n    };\\n    Tools.extend(XHR, Observable);\\n\\n    var extend$7 = Tools.extend;\\n    var JSONRequest = function (settings) {\\n      this.settings = extend$7({}, settings);\\n      this.count = 0;\\n    };\\n    JSONRequest.sendRPC = function (o) {\\n      return new JSONRequest().send(o);\\n    };\\n    JSONRequest.prototype = {\\n      send: function (args) {\\n        var ecb = args.error, scb = args.success;\\n        args = extend$7(this.settings, args);\\n        args.success = function (c, x) {\\n          c = JSON$1.parse(c);\\n          if (typeof c === 'undefined') {\\n            c = { error: 'JSON Parse error.' };\\n          }\\n          if (c.error) {\\n            ecb.call(args.error_scope || args.scope, c.error, x);\\n          } else {\\n            scb.call(args.success_scope || args.scope, c.result);\\n          }\\n        };\\n        args.error = function (ty, x) {\\n          if (ecb) {\\n            ecb.call(args.error_scope || args.scope, ty, x);\\n          }\\n        };\\n        args.data = JSON$1.serialize({\\n          id: args.id || 'c' + this.count++,\\n          method: args.method,\\n          params: args.params\\n        });\\n        args.content_type = 'application/json';\\n        XHR.send(args);\\n      }\\n    };\\n\\n    var create$5 = function () {\\n      return function () {\\n        var data = {};\\n        var keys = [];\\n        var storage = {\\n          getItem: function (key) {\\n            var item = data[key];\\n            return item ? item : null;\\n          },\\n          setItem: function (key, value) {\\n            keys.push(key);\\n            data[key] = String(value);\\n          },\\n          key: function (index) {\\n            return keys[index];\\n          },\\n          removeItem: function (key) {\\n            keys = keys.filter(function (k) {\\n              return k === key;\\n            });\\n            delete data[key];\\n          },\\n          clear: function () {\\n            keys = [];\\n            data = {};\\n          },\\n          length: 0\\n        };\\n        Object.defineProperty(storage, 'length', {\\n          get: function () {\\n            return keys.length;\\n          },\\n          configurable: false,\\n          enumerable: false\\n        });\\n        return storage;\\n      }();\\n    };\\n\\n    var localStorage;\\n    try {\\n      localStorage = domGlobals.window.localStorage;\\n    } catch (e) {\\n      localStorage = create$5();\\n    }\\n    var LocalStorage = localStorage;\\n\\n    var tinymce = EditorManager$1;\\n    var publicApi = {\\n      geom: { Rect: Rect },\\n      util: {\\n        Promise: promiseObj,\\n        Delay: Delay,\\n        Tools: Tools,\\n        VK: VK,\\n        URI: URI,\\n        Class: Class,\\n        EventDispatcher: Dispatcher,\\n        Observable: Observable,\\n        I18n: I18n,\\n        XHR: XHR,\\n        JSON: JSON$1,\\n        JSONRequest: JSONRequest,\\n        JSONP: JSONP,\\n        LocalStorage: LocalStorage,\\n        Color: Color\\n      },\\n      dom: {\\n        EventUtils: EventUtils,\\n        Sizzle: Sizzle,\\n        DomQuery: DomQuery,\\n        TreeWalker: TreeWalker,\\n        DOMUtils: DOMUtils$1,\\n        ScriptLoader: ScriptLoader,\\n        RangeUtils: RangeUtils$1,\\n        Serializer: DomSerializer$1,\\n        ControlSelection: ControlSelection,\\n        BookmarkManager: BookmarkManager$1,\\n        Selection: Selection$1,\\n        Event: EventUtils.Event\\n      },\\n      html: {\\n        Styles: Styles,\\n        Entities: Entities,\\n        Node: Node$1,\\n        Schema: Schema,\\n        SaxParser: SaxParser$1,\\n        DomParser: DomParser,\\n        Writer: Writer,\\n        Serializer: HtmlSerializer\\n      },\\n      ui: { Factory: Factory },\\n      Env: Env,\\n      AddOnManager: AddOnManager,\\n      Annotator: Annotator,\\n      Formatter: Formatter,\\n      UndoManager: UndoManager,\\n      EditorCommands: EditorCommands,\\n      WindowManager: WindowManager,\\n      NotificationManager: NotificationManager,\\n      EditorObservable: EditorObservable$1,\\n      Shortcuts: Shortcuts,\\n      Editor: Editor,\\n      FocusManager: FocusManager,\\n      EditorManager: EditorManager$1,\\n      DOM: DOMUtils$1.DOM,\\n      ScriptLoader: ScriptLoader.ScriptLoader,\\n      PluginManager: AddOnManager.PluginManager,\\n      ThemeManager: AddOnManager.ThemeManager,\\n      trim: Tools.trim,\\n      isArray: Tools.isArray,\\n      is: Tools.is,\\n      toArray: Tools.toArray,\\n      makeMap: Tools.makeMap,\\n      each: Tools.each,\\n      map: Tools.map,\\n      grep: Tools.grep,\\n      inArray: Tools.inArray,\\n      extend: Tools.extend,\\n      create: Tools.create,\\n      walk: Tools.walk,\\n      createNS: Tools.createNS,\\n      resolve: Tools.resolve,\\n      explode: Tools.explode,\\n      _addCacheSuffix: Tools._addCacheSuffix,\\n      isOpera: Env.opera,\\n      isWebKit: Env.webkit,\\n      isIE: Env.ie,\\n      isGecko: Env.gecko,\\n      isMac: Env.mac\\n    };\\n    tinymce = Tools.extend(tinymce, publicApi);\\n    var Tinymce = tinymce;\\n\\n    var exportToModuleLoaders = function (tinymce) {\\n      if (typeof module === 'object') {\\n        try {\\n          module.exports = tinymce;\\n        } catch (_) {\\n        }\\n      }\\n    };\\n    var exportToWindowGlobal = function (tinymce) {\\n      window.tinymce = tinymce;\\n      window.tinyMCE = tinymce;\\n    };\\n    exportToWindowGlobal(Tinymce);\\n    exportToModuleLoaders(Tinymce);\\n\\n}(window));\\n})();\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// /home/angular/project/~/raw-loader!/home/angular/project/~/tinymce/tinymce.js\n// module id = 776\n// module chunks = 1"],"sourceRoot":""}