jodit
Version:
Jodit is awesome and usefully wysiwyg editor with filebrowser
1,244 lines (1,122 loc) • 965 kB
JavaScript
/*!
* jodit - Jodit is awesome and usefully wysiwyg editor with filebrowser
* Author: Chupurnov <chupurnov@gmail.com> (https://xdsoft.net/)
* Version: v3.4.14
* Url: https://xdsoft.net/jodit/
* License(s): MIT
*/
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else {
var a = factory();
for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
}
})(window, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "/build/";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 128);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);
// EXPORTS
__webpack_require__.d(__webpack_exports__, "cns", function() { return /* reexport */ utils["c" /* cns */]; });
__webpack_require__.d(__webpack_exports__, "markDeprecated", function() { return /* reexport */ utils["g" /* markDeprecated */]; });
__webpack_require__.d(__webpack_exports__, "call", function() { return /* reexport */ utils["b" /* call */]; });
__webpack_require__.d(__webpack_exports__, "attr", function() { return /* reexport */ utils["a" /* attr */]; });
__webpack_require__.d(__webpack_exports__, "markOwner", function() { return /* reexport */ utils["h" /* markOwner */]; });
__webpack_require__.d(__webpack_exports__, "get", function() { return /* reexport */ utils["d" /* get */]; });
__webpack_require__.d(__webpack_exports__, "keepNames", function() { return /* reexport */ utils["f" /* keepNames */]; });
__webpack_require__.d(__webpack_exports__, "getClassName", function() { return /* reexport */ utils["e" /* getClassName */]; });
__webpack_require__.d(__webpack_exports__, "asArray", function() { return /* reexport */ asArray; });
__webpack_require__.d(__webpack_exports__, "splitArray", function() { return /* reexport */ splitArray; });
__webpack_require__.d(__webpack_exports__, "setTimeout", function() { return /* reexport */ set_timeout_setTimeout; });
__webpack_require__.d(__webpack_exports__, "clearTimeout", function() { return /* reexport */ set_timeout_clearTimeout; });
__webpack_require__.d(__webpack_exports__, "extend", function() { return /* reexport */ extend["a" /* extend */]; });
__webpack_require__.d(__webpack_exports__, "hasBrowserColorPicker", function() { return /* reexport */ checker["a" /* hasBrowserColorPicker */]; });
__webpack_require__.d(__webpack_exports__, "isArray", function() { return /* reexport */ checker["c" /* isArray */]; });
__webpack_require__.d(__webpack_exports__, "isEqual", function() { return /* reexport */ checker["f" /* isEqual */]; });
__webpack_require__.d(__webpack_exports__, "isFastEqual", function() { return /* reexport */ checker["g" /* isFastEqual */]; });
__webpack_require__.d(__webpack_exports__, "isBoolean", function() { return /* reexport */ checker["d" /* isBoolean */]; });
__webpack_require__.d(__webpack_exports__, "isFunction", function() { return /* reexport */ checker["h" /* isFunction */]; });
__webpack_require__.d(__webpack_exports__, "isHTML", function() { return /* reexport */ checker["i" /* isHTML */]; });
__webpack_require__.d(__webpack_exports__, "isHtmlFromWord", function() { return /* reexport */ checker["j" /* isHtmlFromWord */]; });
__webpack_require__.d(__webpack_exports__, "isInitable", function() { return /* reexport */ checker["k" /* isInitable */]; });
__webpack_require__.d(__webpack_exports__, "isDestructable", function() { return /* reexport */ checker["e" /* isDestructable */]; });
__webpack_require__.d(__webpack_exports__, "hasContainer", function() { return /* reexport */ checker["b" /* hasContainer */]; });
__webpack_require__.d(__webpack_exports__, "isInt", function() { return /* reexport */ checker["l" /* isInt */]; });
__webpack_require__.d(__webpack_exports__, "isJoditObject", function() { return /* reexport */ checker["m" /* isJoditObject */]; });
__webpack_require__.d(__webpack_exports__, "isViewObject", function() { return /* reexport */ checker["v" /* isViewObject */]; });
__webpack_require__.d(__webpack_exports__, "isLicense", function() { return /* reexport */ checker["n" /* isLicense */]; });
__webpack_require__.d(__webpack_exports__, "isNumber", function() { return /* reexport */ checker["o" /* isNumber */]; });
__webpack_require__.d(__webpack_exports__, "isNumeric", function() { return /* reexport */ checker["p" /* isNumeric */]; });
__webpack_require__.d(__webpack_exports__, "isPlainObject", function() { return /* reexport */ checker["q" /* isPlainObject */]; });
__webpack_require__.d(__webpack_exports__, "isString", function() { return /* reexport */ checker["s" /* isString */]; });
__webpack_require__.d(__webpack_exports__, "isURL", function() { return /* reexport */ checker["t" /* isURL */]; });
__webpack_require__.d(__webpack_exports__, "isValidName", function() { return /* reexport */ checker["u" /* isValidName */]; });
__webpack_require__.d(__webpack_exports__, "isVoid", function() { return /* reexport */ checker["w" /* isVoid */]; });
__webpack_require__.d(__webpack_exports__, "isWindow", function() { return /* reexport */ checker["x" /* isWindow */]; });
__webpack_require__.d(__webpack_exports__, "isPromise", function() { return /* reexport */ checker["r" /* isPromise */]; });
__webpack_require__.d(__webpack_exports__, "colorToHex", function() { return /* reexport */ color["a" /* colorToHex */]; });
__webpack_require__.d(__webpack_exports__, "applyStyles", function() { return /* reexport */ applyStyles; });
__webpack_require__.d(__webpack_exports__, "cleanFromWord", function() { return /* reexport */ cleanFromWord; });
__webpack_require__.d(__webpack_exports__, "htmlspecialchars", function() { return /* reexport */ htmlspecialchars; });
__webpack_require__.d(__webpack_exports__, "stripTags", function() { return /* reexport */ stripTags; });
__webpack_require__.d(__webpack_exports__, "nl2br", function() { return /* reexport */ nl2br; });
__webpack_require__.d(__webpack_exports__, "normalizeKeyAliases", function() { return /* reexport */ normalize["c" /* normalizeKeyAliases */]; });
__webpack_require__.d(__webpack_exports__, "normalizeLicense", function() { return /* reexport */ normalize["d" /* normalizeLicense */]; });
__webpack_require__.d(__webpack_exports__, "normalizeNode", function() { return /* reexport */ normalize["e" /* normalizeNode */]; });
__webpack_require__.d(__webpack_exports__, "normalizePath", function() { return /* reexport */ normalize["f" /* normalizePath */]; });
__webpack_require__.d(__webpack_exports__, "normalizeRelativePath", function() { return /* reexport */ normalize["g" /* normalizeRelativePath */]; });
__webpack_require__.d(__webpack_exports__, "normalizeSize", function() { return /* reexport */ normalize["h" /* normalizeSize */]; });
__webpack_require__.d(__webpack_exports__, "normalizeUrl", function() { return /* reexport */ normalize["i" /* normalizeUrl */]; });
__webpack_require__.d(__webpack_exports__, "normalizeCssValue", function() { return /* reexport */ normalize["b" /* normalizeCssValue */]; });
__webpack_require__.d(__webpack_exports__, "normalizeColor", function() { return /* reexport */ normalize["a" /* normalizeColor */]; });
__webpack_require__.d(__webpack_exports__, "getContentWidth", function() { return /* reexport */ getContentWidth; });
__webpack_require__.d(__webpack_exports__, "innerWidth", function() { return /* reexport */ inner_width_innerWidth; });
__webpack_require__.d(__webpack_exports__, "offset", function() { return /* reexport */ offset; });
__webpack_require__.d(__webpack_exports__, "position", function() { return /* reexport */ position; });
__webpack_require__.d(__webpack_exports__, "camelCase", function() { return /* reexport */ string["a" /* camelCase */]; });
__webpack_require__.d(__webpack_exports__, "stringify", function() { return /* reexport */ string["e" /* stringify */]; });
__webpack_require__.d(__webpack_exports__, "kebabCase", function() { return /* reexport */ string["c" /* kebabCase */]; });
__webpack_require__.d(__webpack_exports__, "trim", function() { return /* reexport */ string["f" /* trim */]; });
__webpack_require__.d(__webpack_exports__, "trimInv", function() { return /* reexport */ string["g" /* trimInv */]; });
__webpack_require__.d(__webpack_exports__, "ucfirst", function() { return /* reexport */ string["h" /* ucfirst */]; });
__webpack_require__.d(__webpack_exports__, "sprintf", function() { return /* reexport */ string["d" /* sprintf */]; });
__webpack_require__.d(__webpack_exports__, "i18n", function() { return /* reexport */ string["b" /* i18n */]; });
__webpack_require__.d(__webpack_exports__, "appendScript", function() { return /* reexport */ appendScript; });
__webpack_require__.d(__webpack_exports__, "appendScriptAsync", function() { return /* reexport */ appendScriptAsync; });
__webpack_require__.d(__webpack_exports__, "appendStyleAsync", function() { return /* reexport */ appendStyleAsync; });
__webpack_require__.d(__webpack_exports__, "loadNext", function() { return /* reexport */ loadNext; });
__webpack_require__.d(__webpack_exports__, "browser", function() { return /* reexport */ browser; });
__webpack_require__.d(__webpack_exports__, "convertMediaUrlToVideoEmbed", function() { return /* reexport */ convertMediaUrlToVideoEmbed; });
__webpack_require__.d(__webpack_exports__, "css", function() { return /* reexport */ css; });
__webpack_require__.d(__webpack_exports__, "clearCenterAlign", function() { return /* reexport */ clearCenterAlign; });
__webpack_require__.d(__webpack_exports__, "ctrlKey", function() { return /* reexport */ ctrlKey; });
__webpack_require__.d(__webpack_exports__, "dataBind", function() { return /* reexport */ dataBind; });
__webpack_require__.d(__webpack_exports__, "defaultLanguage", function() { return /* reexport */ default_language["a" /* defaultLanguage */]; });
__webpack_require__.d(__webpack_exports__, "each", function() { return /* reexport */ each; });
__webpack_require__.d(__webpack_exports__, "completeUrl", function() { return /* reexport */ completeUrl; });
__webpack_require__.d(__webpack_exports__, "humanSizeToBytes", function() { return /* reexport */ humanSizeToBytes; });
__webpack_require__.d(__webpack_exports__, "JoditArray", function() { return /* reexport */ jodit_array["a" /* JoditArray */]; });
__webpack_require__.d(__webpack_exports__, "JoditObject", function() { return /* reexport */ jodit_object["a" /* JoditObject */]; });
__webpack_require__.d(__webpack_exports__, "parseQuery", function() { return /* reexport */ parseQuery; });
__webpack_require__.d(__webpack_exports__, "buildQuery", function() { return /* reexport */ buildQuery; });
__webpack_require__.d(__webpack_exports__, "inView", function() { return /* reexport */ inView; });
__webpack_require__.d(__webpack_exports__, "scrollIntoView", function() { return /* reexport */ scrollIntoView; });
__webpack_require__.d(__webpack_exports__, "$$", function() { return /* reexport */ $$; });
__webpack_require__.d(__webpack_exports__, "getXPathByElement", function() { return /* reexport */ getXPathByElement; });
__webpack_require__.d(__webpack_exports__, "refs", function() { return /* reexport */ refs; });
__webpack_require__.d(__webpack_exports__, "cssPath", function() { return /* reexport */ cssPath; });
__webpack_require__.d(__webpack_exports__, "resolveElement", function() { return /* reexport */ resolveElement; });
__webpack_require__.d(__webpack_exports__, "hasOwn", function() { return /* reexport */ type["b" /* hasOwn */]; });
__webpack_require__.d(__webpack_exports__, "type", function() { return /* reexport */ type["c" /* type */]; });
__webpack_require__.d(__webpack_exports__, "error", function() { return /* reexport */ type["a" /* error */]; });
__webpack_require__.d(__webpack_exports__, "val", function() { return /* reexport */ val; });
// EXTERNAL MODULE: ./src/core/helpers/utils/index.ts + 4 modules
var utils = __webpack_require__(10);
// EXTERNAL MODULE: ./src/core/helpers/checker/index.ts + 20 modules
var checker = __webpack_require__(5);
// CONCATENATED MODULE: ./src/core/helpers/array/as-array.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
const asArray = (a) => (Object(checker["c" /* isArray */])(a) ? a : [a]);
// CONCATENATED MODULE: ./src/core/helpers/array/split-array.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
function splitArray(a) {
return Object(checker["s" /* isString */])(a) ? a.split(/[,\s]+/) : a;
}
// CONCATENATED MODULE: ./src/core/helpers/array/index.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
// CONCATENATED MODULE: ./src/core/helpers/async/set-timeout.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
function set_timeout_setTimeout(callback, timeout, ...args) {
if (!timeout) {
callback.call(null, ...args);
}
else {
return window.setTimeout(callback, timeout, ...args);
}
return 0;
}
function set_timeout_clearTimeout(timer) {
window.clearTimeout(timer);
}
// CONCATENATED MODULE: ./src/core/helpers/async/index.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
// EXTERNAL MODULE: ./src/core/helpers/extend.ts
var extend = __webpack_require__(24);
// EXTERNAL MODULE: ./src/core/helpers/color/index.ts + 1 modules
var color = __webpack_require__(25);
// EXTERNAL MODULE: ./src/core/dom.ts
var dom = __webpack_require__(1);
// EXTERNAL MODULE: ./src/core/constants.ts
var constants = __webpack_require__(2);
// EXTERNAL MODULE: ./src/core/helpers/type.ts
var type = __webpack_require__(21);
// EXTERNAL MODULE: ./src/core/helpers/string/index.ts + 6 modules
var string = __webpack_require__(11);
// CONCATENATED MODULE: ./src/core/helpers/selector.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
let temp = 1;
const $$temp = () => {
temp++;
return temp;
};
function $$(selector, root) {
let result;
if (/:scope/.test(selector) &&
constants["IS_IE"] &&
!(root && root.nodeType === Node.DOCUMENT_NODE)) {
const id = root.id, temp_id = id ||
'_selector_id_' + ('' + Math.random()).slice(2) + $$temp();
selector = selector.replace(/:scope/g, '#' + temp_id);
!id && root.setAttribute('id', temp_id);
result = root.parentNode.querySelectorAll(selector);
if (!id) {
root.removeAttribute('id');
}
}
else {
result = root.querySelectorAll(selector);
}
return [].slice.call(result);
}
const getXPathByElement = (element, root) => {
if (!element || element.nodeType !== Node.ELEMENT_NODE) {
return '';
}
if (!element.parentNode || root === element) {
return '';
}
if (element.id) {
return "//*[@id='" + element.id + "']";
}
const sames = [].filter.call(element.parentNode.childNodes, (x) => x.nodeName === element.nodeName);
return (getXPathByElement(element.parentNode, root) +
'/' +
element.nodeName.toLowerCase() +
(sames.length > 1
? '[' + (Array.from(sames).indexOf(element) + 1) + ']'
: ''));
};
const refs = (root) => {
return $$('[ref],[data-ref]', root).reduce((def, child) => {
const key = Object(utils["a" /* attr */])(child, '-ref');
if (key && Object(checker["s" /* isString */])(key)) {
def[Object(string["a" /* camelCase */])(key)] = child;
def[key] = child;
}
return def;
}, {});
};
const cssPath = (el) => {
if (!dom["a" /* Dom */].isElement(el)) {
return null;
}
const path = [];
let start = el;
while (start && start.nodeType === Node.ELEMENT_NODE) {
let selector = start.nodeName.toLowerCase();
if (start.id) {
selector += '#' + start.id;
path.unshift(selector);
break;
}
else {
let sib = start, nth = 1;
do {
sib = sib.previousElementSibling;
if (sib && sib.nodeName.toLowerCase() === selector) {
nth++;
}
} while (sib);
selector += ':nth-of-type(' + nth + ')';
}
path.unshift(selector);
start = start.parentNode;
}
return path.join(' > ');
};
function resolveElement(element, od) {
let resolved = element;
if (Object(checker["s" /* isString */])(element)) {
try {
resolved = od.querySelector(element);
}
catch (_a) {
throw Object(type["a" /* error */])('String "' + element + '" should be valid HTML selector');
}
}
if (!resolved ||
typeof resolved !== 'object' ||
!dom["a" /* Dom */].isElement(resolved) ||
!resolved.cloneNode) {
throw Object(type["a" /* error */])('Element "' + element + '" should be string or HTMLElement instance');
}
return resolved;
}
// CONCATENATED MODULE: ./src/core/helpers/html/apply-styles.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
function normalizeCSS(s) {
return s
.replace(/mso-[a-z-]+:[\s]*[^;]+;/gi, '')
.replace(/mso-[a-z-]+:[\s]*[^";]+$/gi, '')
.replace(/border[a-z-]*:[\s]*[^;]+;/gi, '')
.replace(/([0-9.]+)(pt|cm)/gi, (match, units, metrics) => {
switch (metrics.toLowerCase()) {
case 'pt':
return (parseFloat(units) * 1.328).toFixed(0) + 'px';
case 'cm':
return (parseFloat(units) * 0.02645833).toFixed(0) + 'px';
}
return match;
});
}
function applyStyles(html) {
if (html.indexOf('<html ') === -1) {
return html;
}
html = html.substring(html.indexOf('<html '), html.length);
html = html.substring(0, html.lastIndexOf('</html>') + '</html>'.length);
const iframe = document.createElement('iframe');
iframe.style.display = 'none';
document.body.appendChild(iframe);
let convertedString = '', collection = [], rules = [];
try {
const iframeDoc = iframe.contentDocument ||
(iframe.contentWindow ? iframe.contentWindow.document : null);
if (iframeDoc) {
iframeDoc.open();
iframeDoc.write(html);
iframeDoc.close();
if (iframeDoc.styleSheets.length) {
rules = iframeDoc.styleSheets[iframeDoc.styleSheets.length - 1].cssRules;
}
for (let idx = 0; idx < rules.length; idx += 1) {
if (rules[idx].selectorText === '') {
continue;
}
collection = $$(rules[idx].selectorText, iframeDoc.body);
collection.forEach((elm) => {
elm.style.cssText = normalizeCSS(rules[idx].style.cssText + ';' + elm.style.cssText);
});
}
dom["a" /* Dom */].each(iframeDoc.body, node => {
if (dom["a" /* Dom */].isElement(node)) {
const elm = node;
const css = elm.style.cssText;
if (css) {
elm.style.cssText = normalizeCSS(css);
}
if (elm.hasAttribute('lang')) {
elm.removeAttribute('lang');
}
}
});
convertedString = iframeDoc.firstChild
? Object(string["f" /* trim */])(iframeDoc.body.innerHTML)
: '';
}
}
catch (_a) {
}
finally {
dom["a" /* Dom */].safeRemove(iframe);
}
if (convertedString) {
html = convertedString;
}
return Object(string["f" /* trim */])(html
.replace(/<(\/)?(html|colgroup|col|o:p)[^>]*>/g, '')
.replace(/<!--[^>]*>/g, ''));
}
// CONCATENATED MODULE: ./src/core/helpers/html/clean-from-word.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
function cleanFromWord(html) {
if (html.indexOf('<html ') !== -1) {
html = html.substring(html.indexOf('<html '), html.length);
html = html.substring(0, html.lastIndexOf('</html>') + '</html>'.length);
}
let convertedString = '';
try {
const div = document.createElement('div');
div.innerHTML = html;
const marks = [];
if (div.firstChild) {
dom["a" /* Dom */].all(div, node => {
if (!node) {
return;
}
switch (node.nodeType) {
case Node.ELEMENT_NODE:
switch (node.nodeName) {
case 'STYLE':
case 'LINK':
case 'META':
marks.push(node);
break;
case 'W:SDT':
case 'W:SDTPR':
case 'FONT':
dom["a" /* Dom */].unwrap(node);
break;
default:
Array.from(node.attributes).forEach((attr) => {
if ([
'src',
'href',
'rel',
'content'
].indexOf(attr.name.toLowerCase()) ===
-1) {
node.removeAttribute(attr.name);
}
});
}
break;
case Node.TEXT_NODE:
break;
default:
marks.push(node);
}
});
}
marks.forEach(dom["a" /* Dom */].safeRemove);
convertedString = div.innerHTML;
}
catch (e) { }
if (convertedString) {
html = convertedString;
}
html = html
.split(/(\n)/)
.filter(string["f" /* trim */])
.join('\n');
return html
.replace(/<(\/)?(html|colgroup|col|o:p)[^>]*>/g, '')
.replace(/<!--[^>]*>/g, '');
}
// CONCATENATED MODULE: ./src/core/helpers/html/htmlspecialchars.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
function htmlspecialchars(html) {
const tmp = document.createElement('div');
tmp.textContent = html;
return tmp.innerHTML;
}
// CONCATENATED MODULE: ./src/core/helpers/html/strip-tags.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
function stripTags(html, doc = document) {
const tmp = doc.createElement('div');
if (Object(checker["s" /* isString */])(html)) {
tmp.innerHTML = html;
}
else {
tmp.appendChild(html);
}
$$('DIV, P, BR, H1, H2, H3, H4, H5, H6, HR', tmp).forEach(p => {
const pr = p.parentNode;
if (!pr) {
return;
}
const nx = p.nextSibling;
if (dom["a" /* Dom */].isText(nx) && /^\s/.test(nx.nodeValue || '')) {
return;
}
if (nx) {
pr.insertBefore(doc.createTextNode(' '), nx);
}
});
return Object(string["f" /* trim */])(tmp.innerText) || '';
}
// CONCATENATED MODULE: ./src/core/helpers/html/nl2br.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
function nl2br(html) {
return html.replace(/([^>])([\n\r]+)/g, '$1<br/>$2');
}
// CONCATENATED MODULE: ./src/core/helpers/html/index.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
// EXTERNAL MODULE: ./src/core/helpers/normalize/index.ts + 9 modules
var normalize = __webpack_require__(20);
// CONCATENATED MODULE: ./src/core/helpers/size/get-content-width.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
const getContentWidth = (element, win) => {
const pi = (value) => parseInt(value, 10), style = win.getComputedStyle(element), width = element.offsetWidth, paddingLeft = pi(style.getPropertyValue('padding-left') || '0'), paddingRight = pi(style.getPropertyValue('padding-right') || '0');
return width - paddingLeft - paddingRight;
};
// CONCATENATED MODULE: ./src/core/helpers/size/inner-width.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
const inner_width_innerWidth = (element, win) => {
const computedStyle = win.getComputedStyle(element);
let elementWidth = element.clientWidth;
elementWidth -=
parseFloat(computedStyle.paddingLeft || '0') +
parseFloat(computedStyle.paddingRight || '0');
return elementWidth;
};
// CONCATENATED MODULE: ./src/core/helpers/size/offset.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
const offset = (elm, jodit, doc, recurse = false) => {
let rect;
try {
rect = elm.getBoundingClientRect();
}
catch (e) {
rect = {
top: 0,
bottom: 0,
left: 0,
right: 0,
width: 0,
height: 0
};
}
const body = doc.body, docElem = doc.documentElement || {
clientTop: 0,
clientLeft: 0,
scrollTop: 0,
scrollLeft: 0
}, win = doc.defaultView || doc.parentWindow, scrollTop = win.pageYOffset || docElem.scrollTop || body.scrollTop, scrollLeft = win.pageXOffset || docElem.scrollLeft || body.scrollLeft, clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0;
let topValue, leftValue;
const iframe = jodit.iframe;
if (!recurse && jodit && jodit.options && jodit.o.iframe && iframe) {
const { top, left } = offset(iframe, jodit, jodit.od, true);
topValue = rect.top + top;
leftValue = rect.left + left;
}
else {
topValue = rect.top + scrollTop - clientTop;
leftValue = rect.left + scrollLeft - clientLeft;
}
return {
top: Math.round(topValue),
left: Math.round(leftValue),
width: rect.width,
height: rect.height
};
};
// CONCATENATED MODULE: ./src/core/helpers/size/position.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
function position(elm, jodit, recurse = false) {
const rect = elm.getBoundingClientRect();
let xPos = rect.left, yPos = rect.top;
if (Object(checker["m" /* isJoditObject */])(jodit) && jodit.iframe && !recurse) {
const { left, top } = position(jodit.iframe, jodit, true);
xPos += left;
yPos += top;
}
return {
left: Math.round(xPos),
top: Math.round(yPos),
width: Math.round(elm.offsetWidth),
height: Math.round(elm.offsetHeight)
};
}
// CONCATENATED MODULE: ./src/core/helpers/size/index.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
// CONCATENATED MODULE: ./src/core/helpers/complete-url.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
const completeUrl = (url) => {
if (window.location.protocol === 'file:' && /^\/\//.test(url)) {
url = 'https:' + url;
}
return url;
};
// CONCATENATED MODULE: ./src/core/helpers/append-script.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
const alreadyLoadedList = new Map();
const cacheLoaders = (loader) => {
return async (jodit, url) => {
if (alreadyLoadedList.has(url)) {
return alreadyLoadedList.get(url);
}
const promise = loader(jodit, url);
alreadyLoadedList.set(url, promise);
return promise;
};
};
const appendScript = (jodit, url, callback) => {
const script = jodit.c.element('script');
script.type = 'text/javascript';
if (Object(checker["h" /* isFunction */])(callback) && !jodit.isInDestruct) {
jodit.e.on(script, 'load', callback);
}
if (!script.src) {
script.src = completeUrl(url);
}
jodit.od.body.appendChild(script);
return {
callback,
element: script
};
};
const appendScriptAsync = cacheLoaders((jodit, url) => {
return new Promise((resolve, reject) => {
const { element } = appendScript(jodit, url, resolve);
!jodit.isInDestruct && jodit.e.on(element, 'error', reject);
});
});
const appendStyleAsync = cacheLoaders((jodit, url) => {
return new Promise((resolve, reject) => {
const link = jodit.c.element('link');
link.rel = 'stylesheet';
link.media = 'all';
link.crossOrigin = 'anonymous';
const callback = () => resolve(link);
!jodit.isInDestruct &&
jodit.e.on(link, 'load', callback).on(link, 'error', reject);
link.href = completeUrl(url);
if (jodit.o.shadowRoot) {
jodit.o.shadowRoot.appendChild(link);
}
else {
jodit.od.body.appendChild(link);
}
});
});
const loadNext = (jodit, urls, i = 0) => {
if (!Object(checker["s" /* isString */])(urls[i])) {
return Promise.resolve();
}
return appendScriptAsync(jodit, urls[i]).then(() => loadNext(jodit, urls, i + 1));
};
// CONCATENATED MODULE: ./src/core/helpers/browser.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
const browser = (browser) => {
const ua = navigator.userAgent.toLowerCase(), match = /(firefox)[\s/]([\w.]+)/.exec(ua) ||
/(chrome)[\s/]([\w.]+)/.exec(ua) ||
/(webkit)[\s/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version)[\s/]([\w.]+)/.exec(ua) ||
/(msie)[\s]([\w.]+)/.exec(ua) ||
/(trident)\/([\w.]+)/.exec(ua) ||
ua.indexOf('compatible') < 0 ||
[];
if (browser === 'version') {
return match[2];
}
if (browser === 'webkit') {
return match[1] === 'chrome' || match[1] === 'webkit';
}
if (browser === 'ff') {
return match[1] === 'firefox';
}
if (browser === 'msie') {
return match[1] === 'trident' || match[1] === 'msie';
}
return match[1] === browser;
};
// CONCATENATED MODULE: ./src/core/helpers/parse-query.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
const parseQuery = (queryString) => {
const query = {}, a = queryString.substr(1).split('&');
for (let i = 0; i < a.length; i += 1) {
const keyValue = a[i].split('=');
query[decodeURIComponent(keyValue[0])] = decodeURIComponent(keyValue[1] || '');
}
return query;
};
// CONCATENATED MODULE: ./src/core/helpers/convert-media-url-to-video-embed.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
const convertMediaUrlToVideoEmbed = (url, width = 400, height = 345) => {
if (!Object(checker["t" /* isURL */])(url)) {
return url;
}
const parser = document.createElement('a'), pattern1 = /(?:http?s?:\/\/)?(?:www\.)?(?:vimeo\.com)\/?(.+)/g;
parser.href = url;
if (!width) {
width = 400;
}
if (!height) {
height = 345;
}
const protocol = parser.protocol || '';
switch (parser.hostname) {
case 'www.vimeo.com':
case 'vimeo.com':
return pattern1.test(url)
? url.replace(pattern1, '<iframe width="' +
width +
'" height="' +
height +
'" src="' +
protocol +
'//player.vimeo.com/video/$1" frameborder="0" allowfullscreen></iframe>')
: url;
case 'youtube.com':
case 'www.youtube.com':
case 'youtu.be':
case 'www.youtu.be': {
const query = parser.search
? parseQuery(parser.search)
: { v: parser.pathname.substr(1) };
return query.v
? '<iframe width="' +
width +
'" height="' +
height +
'" src="' +
protocol +
'//www.youtube.com/embed/' +
query.v +
'" frameborder="0" allowfullscreen></iframe>'
: url;
}
}
return url;
};
// CONCATENATED MODULE: ./src/core/helpers/css.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
const css = (element, key, value, onlyStyleMode = false) => {
const numberFieldsReg = /^left|top|bottom|right|width|min|max|height|margin|padding|fontsize|font-size/i;
if (Object(checker["q" /* isPlainObject */])(key) || value !== undefined) {
const setValue = (elm, _key, _value) => {
if (!Object(checker["w" /* isVoid */])(_value) &&
numberFieldsReg.test(_key) &&
Object(checker["p" /* isNumeric */])(_value.toString())) {
_value = parseInt(_value.toString(), 10) + 'px';
}
if (!Object(checker["w" /* isVoid */])(_value) &&
css(elm, _key, undefined, true) !==
Object(normalize["b" /* normalizeCssValue */])(_key, _value)) {
elm.style[_key] = _value;
}
};
if (Object(checker["q" /* isPlainObject */])(key)) {
const keys = Object.keys(key);
for (let j = 0; j < keys.length; j += 1) {
setValue(element, Object(string["a" /* camelCase */])(keys[j]), key[keys[j]]);
}
}
else {
setValue(element, Object(string["a" /* camelCase */])(key), value);
}
return '';
}
const key2 = Object(string["c" /* kebabCase */])(key), doc = element.ownerDocument || document, win = doc ? doc.defaultView || doc.parentWindow : false;
const currentValue = element.style[key];
let result = '';
if (currentValue !== undefined && currentValue !== '') {
result = currentValue;
}
else if (win && !onlyStyleMode) {
result = win.getComputedStyle(element).getPropertyValue(key2);
}
if (numberFieldsReg.test(key) &&
/^[-+]?[0-9.]+px$/.test(result.toString())) {
result = parseInt(result.toString(), 10);
}
return Object(normalize["b" /* normalizeCssValue */])(key, result);
};
const clearCenterAlign = (image) => {
if (css(image, 'display') === 'block') {
css(image, 'display', '');
}
if (image.style.marginLeft === 'auto' &&
image.style.marginRight === 'auto') {
image.style.marginLeft = '';
image.style.marginRight = '';
}
};
// CONCATENATED MODULE: ./src/core/helpers/ctrl-key.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
const ctrlKey = (e) => {
if (typeof navigator !== 'undefined' &&
navigator.userAgent.indexOf('Mac OS X') !== -1) {
if (e.metaKey && !e.altKey) {
return true;
}
}
else if (e.ctrlKey && !e.altKey) {
return true;
}
return false;
};
// EXTERNAL MODULE: ./src/core/component/index.ts + 3 modules
var component = __webpack_require__(8);
// CONCATENATED MODULE: ./src/core/helpers/data-bind.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
const store = new WeakMap();
const dataBind = (elm, key, value) => {
let itemStore = store.get(elm);
if (!itemStore) {
itemStore = {};
store.set(elm, itemStore);
let e = null;
if (elm instanceof component["c" /* ViewComponent */]) {
e = elm.j.e;
}
if (Object(checker["v" /* isViewObject */])(elm)) {
e = elm.e;
}
e &&
e.on('beforeDestruct', () => {
store.delete(elm);
});
}
if (value === undefined) {
return itemStore[key];
}
itemStore[key] = value;
return value;
};
// EXTERNAL MODULE: ./src/core/helpers/default-language.ts
var default_language = __webpack_require__(26);
// CONCATENATED MODULE: ./src/core/helpers/each.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
function each(obj, callback) {
let length, keys, i;
if (Object(checker["c" /* isArray */])(obj)) {
length = obj.length;
for (i = 0; i < length; i += 1) {
if (callback.call(obj[i], i, obj[i]) === false) {
return false;
}
}
}
else {
keys = Object.keys(obj);
for (i = 0; i < keys.length; i += 1) {
if (callback.call(obj[keys[i]], keys[i], obj[keys[i]]) === false) {
return false;
}
}
}
return true;
}
// CONCATENATED MODULE: ./src/core/helpers/human-size-to-bytes.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
const humanSizeToBytes = (human) => {
if (/^[0-9.]+$/.test(human.toString())) {
return parseFloat(human);
}
const format = human.substr(-2, 2).toUpperCase(), formats = ['KB', 'MB', 'GB', 'TB'], number = parseFloat(human.substr(0, human.length - 2));
return formats.indexOf(format) !== -1
? number * Math.pow(1024, formats.indexOf(format) + 1)
: parseInt(human, 10);
};
// EXTERNAL MODULE: ./src/core/helpers/jodit-array.ts
var jodit_array = __webpack_require__(23);
// EXTERNAL MODULE: ./src/core/helpers/jodit-object.ts
var jodit_object = __webpack_require__(27);
// CONCATENATED MODULE: ./src/core/helpers/build-query.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
const buildQuery = (data, prefix) => {
const str = [];
const enc = encodeURIComponent;
for (const dataKey in data) {
if (Object.prototype.hasOwnProperty.call(data, dataKey)) {
const k = prefix ? prefix + '[' + dataKey + ']' : dataKey;
const v = data[dataKey];
str.push(Object(checker["q" /* isPlainObject */])(v) ? buildQuery(v, k) : enc(k) + '=' + enc(v));
}
}
return str.join('&');
};
// CONCATENATED MODULE: ./src/core/helpers/scroll-into-view.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
const inView = (elm, root, doc) => {
let rect = elm.getBoundingClientRect(), el = elm;
const top = rect.top, height = rect.height;
do {
if (el && el.parentNode) {
el = el.parentNode;
rect = el.getBoundingClientRect();
if (!(top <= rect.bottom)) {
return false;
}
if (top + height <= rect.top) {
return false;
}
}
} while (el && el !== root && el.parentNode);
return (top <= ((doc.documentElement && doc.documentElement.clientHeight) || 0));
};
const scrollIntoView = (elm, root, doc) => {
if (!inView(elm, root, doc)) {
if (root.clientHeight !== root.scrollHeight) {
root.scrollTop = elm.offsetTop;
}
if (!inView(elm, root, doc)) {
elm.scrollIntoView();
}
}
};
// CONCATENATED MODULE: ./src/core/helpers/val.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
const val = (elm, selector, value) => {
const child = elm.querySelector(selector);
if (!child) {
return '';
}
if (value) {
child.value = value;
}
return child.value;
};
// CONCATENATED MODULE: ./src/core/helpers/index.ts
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
/***/ }),
/* 1 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Dom; });
/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(0);
/* harmony import */ var _plugins_keyboard_helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(16);
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
class Dom {
static detach(node) {
while (node.firstChild) {
node.removeChild(node.firstChild);
}
}
static wrapInline(current, tag, editor) {
let tmp, first = current, last = current;
const selInfo = editor.s.save();
let needFindNext = false;
do {
needFindNext = false;
tmp = first.previousSibling;
if (tmp && !Dom.isBlock(tmp, editor.ew)) {
needFindNext = true;
first = tmp;
}
} while (needFindNext);
do {
needFindNext = false;
tmp = last.nextSibling;
if (tmp && !Dom.isBlock(tmp, editor.ew)) {
needFindNext = true;
last = tmp;
}
} while (needFindNext);
const wrapper = Object(_helpers__WEBPACK_IMPORTED_MODULE_1__["isString"])(tag) ? editor.createInside.element(tag) : tag;
if (first.parentNode) {
first.parentNode.insertBefore(wrapper, first);
}
let next = first;
while (next) {
next = first.nextSibling;
wrapper.appendChild(first);
if (first === last || !next) {
break;
}
first = next;
}
editor.s.restore(selInfo);
retur