From b9f8373e3fb488286eb51934869a0813e78e6d0a Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Fri, 3 Mar 2023 10:59:46 +0800 Subject: [PATCH] MDL-77470 editor_tiny: Apply upstream security fixes - CVE-2022-23494 --- lib/editor/tiny/js/tinymce/themes/silver/theme.js | 1721 +++++++++++++++++++- .../tiny/js/tinymce/themes/silver/theme.min.js | 2 +- 2 files changed, 1644 insertions(+), 79 deletions(-) diff --git a/lib/editor/tiny/js/tinymce/themes/silver/theme.js b/lib/editor/tiny/js/tinymce/themes/silver/theme.js index b4940493bce..7a062cadb42 100644 --- a/lib/editor/tiny/js/tinymce/themes/silver/theme.js +++ b/lib/editor/tiny/js/tinymce/themes/silver/theme.js @@ -5,7 +5,7 @@ (function () { 'use strict'; - const getPrototypeOf$1 = Object.getPrototypeOf; + const getPrototypeOf$2 = Object.getPrototypeOf; const hasProto = (v, constructor, predicate) => { if (predicate(v, constructor.prototype)) { return true; @@ -28,7 +28,7 @@ const isType$1 = type => value => typeOf(value) === type; const isSimpleType = type => value => typeof value === type; const eq$1 = t => a => t === a; - const is$2 = (value, constructor) => isObject(value) && hasProto(value, constructor, (o, proto) => getPrototypeOf$1(o) === proto); + const is$2 = (value, constructor) => isObject(value) && hasProto(value, constructor, (o, proto) => getPrototypeOf$2(o) === proto); const isString = isType$1('string'); const isObject = isType$1('object'); const isPlainObject = value => is$2(value, Object); @@ -84,7 +84,7 @@ throw new Error(msg); }; }; - const apply = f => { + const apply$1 = f => { return f(); }; const never = constant$1(false); @@ -352,7 +352,7 @@ }; const keys = Object.keys; - const hasOwnProperty = Object.hasOwnProperty; + const hasOwnProperty$1 = Object.hasOwnProperty; const each = (obj, f) => { const props = keys(obj); for (let k = 0, len = props.length; k < len; k++) { @@ -421,7 +421,7 @@ const get$g = (obj, key) => { return has$2(obj, key) ? Optional.from(obj[key]) : Optional.none(); }; - const has$2 = (obj, key) => hasOwnProperty.call(obj, key); + const has$2 = (obj, key) => hasOwnProperty$1.call(obj, key); const hasNonNullableKey = (obj, key) => has$2(obj, key) && obj[key] !== undefined && obj[key] !== null; const is$1 = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs)); @@ -549,13 +549,13 @@ return actual; }; - const getPrototypeOf = Object.getPrototypeOf; + const getPrototypeOf$1 = Object.getPrototypeOf; const sandHTMLElement = scope => { return getOrDie$1('HTMLElement', scope); }; const isPrototypeOf = x => { const scope = resolve('ownerDocument.defaultView', x); - return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\w*Element$/.test(getPrototypeOf(x).constructor.name)); + return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\w*Element$/.test(getPrototypeOf$1(x).constructor.name)); }; const DOCUMENT = 9; @@ -708,7 +708,7 @@ const remove$7 = (element, key) => { element.dom.removeAttribute(key); }; - const clone$1 = element => foldl(element.dom.attributes, (acc, attr) => { + const clone$2 = element => foldl(element.dom.attributes, (acc, attr) => { acc[attr.name] = attr.value; return acc; }, {}); @@ -1484,8 +1484,8 @@ forall: always, getOr: identity, or: identity, - getOrThunk: apply, - orThunk: apply, + getOrThunk: apply$1, + orThunk: apply$1, getOrDie: die(String(error)), each: noop, toOptional: Optional.none @@ -2364,8 +2364,8 @@ return get$9(container); }; - const clone = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep)); - const shallow = original => clone(original, false); + const clone$1 = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep)); + const shallow = original => clone$1(original, false); const getHtml = element => { if (isShadowRoot(element)) { @@ -2895,7 +2895,7 @@ class: clazz, style, ...existingAttributes - } = clone$1(obsoleted); + } = clone$2(obsoleted); const { toSet: attrsToSet, toRemove: attrsToRemove @@ -3067,7 +3067,7 @@ }; return Result.value(build$2(completeSpec, obsoleted)); }; - const text$1 = textContent => { + const text$2 = textContent => { const element = SugarElement.fromText(textContent); return external$1({ element }); }; @@ -3546,7 +3546,7 @@ const loadEvent = (bConfig, bState, f) => runOnInit((component, _simulatedEvent) => { f(component, bConfig, bState); }); - const create$4 = (schema, name, active, apis, extra, state) => { + const create$5 = (schema, name, active, apis, extra, state) => { const configSchema = objOfOnly(schema); const schemaSchema = optionObjOf(name, [optionObjOfOnly('config', schema)]); return doCreate(configSchema, schemaSchema, name, active, apis, extra, state); @@ -3623,9 +3623,9 @@ defaulted('state', NoState), defaulted('extra', {}) ]); - const create$3 = data => { + const create$4 = data => { const value = asRawOrDie$1('Creating behaviour: ' + data.name, simpleSchema, data); - return create$4(value.fields, value.name, value.active, value.apis, value.extra, value.state); + return create$5(value.fields, value.name, value.active, value.apis, value.extra, value.state); }; const modeSchema = objOfOnly([ required$1('branchKey'), @@ -3642,7 +3642,7 @@ }; const revoke = constant$1(undefined); - const Receiving = create$3({ + const Receiving = create$4({ fields: ReceivingSchema, name: 'receiving', active: ActiveReceiving @@ -4379,13 +4379,13 @@ const zeroWidth = '\uFEFF'; const nbsp = '\xA0'; - const create$2 = (start, soffset, finish, foffset) => ({ + const create$3 = (start, soffset, finish, foffset) => ({ start, soffset, finish, foffset }); - const SimRange = { create: create$2 }; + const SimRange = { create: create$3 }; const adt$6 = Adt.generate([ { before: ['element'] }, @@ -4864,7 +4864,7 @@ init: init$g }); - const Positioning = create$3({ + const Positioning = create$4({ fields: PositionSchema, name: 'positioning', active: ActivePosition, @@ -5106,7 +5106,7 @@ init: init$f }); - const Sandboxing = create$3({ + const Sandboxing = create$4({ fields: SandboxSchema, name: 'sandboxing', active: ActiveSandbox, @@ -5361,7 +5361,7 @@ defaulted('resetOnDom', false) ]; - const Representing = create$3({ + const Representing = create$4({ fields: RepresentSchema, name: 'representing', active: ActiveRepresenting, @@ -5757,7 +5757,7 @@ const ComposeSchema = [required$1('find')]; - const Composing = create$3({ + const Composing = create$4({ fields: ComposeSchema, name: 'composing', apis: ComposeApis @@ -5839,7 +5839,7 @@ onHandler('onEnabled') ]; - const Disabling = create$3({ + const Disabling = create$4({ fields: DisableSchema, name: 'disabling', active: ActiveDisable, @@ -5951,7 +5951,7 @@ onHandler('onDehighlight') ]; - const Highlighting = create$3({ + const Highlighting = create$4({ fields: HighlightSchema, name: 'highlighting', apis: HighlightApis @@ -6109,7 +6109,7 @@ return me; }; - const create$1 = cyclicField => { + const create$2 = cyclicField => { const schema = [ option$3('onEscape'), option$3('onEnter'), @@ -6170,9 +6170,9 @@ return typical(schema, NoState.init, getKeydownRules, getKeyupRules, () => Optional.some(focusIn)); }; - var AcyclicType = create$1(customField('cyclic', never)); + var AcyclicType = create$2(customField('cyclic', never)); - var CyclicType = create$1(customField('cyclic', always)); + var CyclicType = create$2(customField('cyclic', always)); const doDefaultExecute = (component, _simulatedEvent, focused) => { dispatch(component, focused, execute$5()); @@ -6683,7 +6683,7 @@ contents: contents }); - const Replacing = create$3({ + const Replacing = create$4({ fields: [defaultedBoolean('reuseDom', true)], name: 'replacing', apis: ReplaceApis @@ -6691,7 +6691,7 @@ const events$d = (name, eventHandlers) => { const events = derive$2(eventHandlers); - return create$3({ + return create$4({ fields: [required$1('enabled')], name, active: { events: constant$1(events) } @@ -6754,7 +6754,7 @@ defaulted('ignore', false) ]; - const Focusing = create$3({ + const Focusing = create$4({ fields: FocusSchema, name: 'focusing', active: ActiveFocus, @@ -6873,7 +6873,7 @@ })) ]; - const Toggling = create$3({ + const Toggling = create$4({ fields: ToggleSchema, name: 'toggling', active: ActiveToggle, @@ -8130,7 +8130,7 @@ const updateText = (comp, text) => { if (comp.getSystem().isConnected()) { const banner = memBannerText.get(comp); - Replacing.set(banner, [text$1(text)]); + Replacing.set(banner, [text$2(text)]); } }; const apis = { @@ -9174,7 +9174,7 @@ const type = requiredString('type'); const name$1 = requiredString('name'); const label = requiredString('label'); - const text = requiredString('text'); + const text$1 = requiredString('text'); const title = requiredString('title'); const icon = requiredString('icon'); const value$1 = requiredString('value'); @@ -9298,7 +9298,7 @@ const cardTextFields = [ type, - text, + text$1, optionalName, defaultedArrayOf('classes', ['tox-collection__item-label'], string) ]; @@ -9575,7 +9575,7 @@ init: init$b }); - const Tooltipping = create$3({ + const Tooltipping = create$4({ fields: TooltippingSchema, name: 'tooltipping', active: ActiveTooltipping, @@ -9736,7 +9736,7 @@ tag: 'div', classes: [textClass] }, - components: [text$1(global$8.translate(text))] + components: [text$2(global$8.translate(text))] }); const renderHtml = (html, classes) => ({ dom: { @@ -9755,7 +9755,7 @@ tag: style.tag, styles: style.styles }, - components: [text$1(global$8.translate(text))] + components: [text$2(global$8.translate(text))] }] }); const renderShortcut = shortcut => ({ @@ -9763,7 +9763,7 @@ tag: 'div', classes: [accessoryClass] }, - components: [text$1(convertText(shortcut))] + components: [text$2(convertText(shortcut))] }); const renderCheckmark = icons => renderIcon$1('checkmark', icons, [checkmarkClass]); const renderSubmenuCaret = icons => renderIcon$1('chevron-right', icons, [caretClass]); @@ -10724,7 +10724,7 @@ } }; const makeComponents = cells => bind$3(cells, cellRow => map$2(cellRow, premade)); - const makeLabelText = (row, col) => text$1(`${ col }x${ row }`); + const makeLabelText = (row, col) => text$2(`${ col }x${ row }`); const renderInsertTableMenuItem = spec => { const numRows = 10; const numColumns = 10; @@ -10854,7 +10854,7 @@ groupHeadingClass ] }, - components: spec.text.map(text$1).toArray() + components: spec.text.map(text$2).toArray() }); const renderToggleMenuItem = (spec, itemResponse, providersBackstage, renderIcons = true) => { @@ -10951,7 +10951,7 @@ init: init$a }); - const Coupling = create$3({ + const Coupling = create$4({ fields: CouplingSchema, name: 'coupling', apis: CouplingApis, @@ -12321,7 +12321,7 @@ var TabstopSchema = [defaulted('tabAttr', 'data-alloy-tabstop')]; - const Tabstopping = create$3({ + const Tabstopping = create$4({ fields: TabstopSchema, name: 'tabstopping', active: ActiveTabstopping @@ -12349,7 +12349,7 @@ tag: 'label', classes: ['tox-label'] }, - components: [text$1(providersBackstage.translate(label))] + components: [text$2(providersBackstage.translate(label))] }); const formChangeEvent = generate$6('form-component-change'); @@ -12573,7 +12573,7 @@ ]) ]; - const Invalidating = create$3({ + const Invalidating = create$4({ fields: InvalidateSchema, name: 'invalidating', active: ActiveInvalidate, @@ -12605,7 +12605,7 @@ exhibit: exhibit$1 }); - const Unselecting = create$3({ + const Unselecting = create$4({ fields: [], name: 'unselecting', active: ActiveUnselecting @@ -13639,7 +13639,7 @@ tag: 'label', attributes: { 'aria-label': description } }, - components: [text$1(label)] + components: [text$2(label)] }); const pField = FormField.parts.field({ data, @@ -14278,7 +14278,7 @@ components: [ { dom: { tag: 'p' }, - components: [text$1(providersBackstage.translate('Drop an image here'))] + components: [text$2(providersBackstage.translate('Drop an image here'))] }, Button.sketch({ dom: { @@ -14290,7 +14290,7 @@ ] }, components: [ - text$1(providersBackstage.translate('Browse for an image')), + text$2(providersBackstage.translate('Browse for an image')), memInput.asSpec() ], action: comp => { @@ -14539,7 +14539,7 @@ tag: 'label', classes: ['tox-label'] }, - components: [text$1(backstageShared.providers.translate(spec.label))] + components: [text$2(backstageShared.providers.translate(spec.label))] }; const comps = map$2(spec.items, backstageShared.interpreter); return { @@ -14591,7 +14591,7 @@ tag: 'span', classes: [`${ prefix }__select-label`] }, - components: [text$1(providersBackstage.translate(text))], + components: [text$2(providersBackstage.translate(text))], behaviours: derive$1([Replacing.config({})]) }); @@ -14656,7 +14656,7 @@ config('menubutton-update-display-text', [ run$1(updateMenuText, (comp, se) => { optMemDisplayText.bind(mem => mem.getOpt(comp)).each(displayText => { - Replacing.set(displayText, [text$1(sharedBackstage.providers.translate(se.event.text))]); + Replacing.set(displayText, [text$2(sharedBackstage.providers.translate(se.event.text))]); }); }), run$1(updateMenuIcon, (comp, se) => { @@ -15248,7 +15248,7 @@ tag: 'label', classes: ['tox-label'] }, - components: [text$1(providersBackstage.translate(label))] + components: [text$2(providersBackstage.translate(label))] }); const widthField = FormCoupledInputs.parts.field1(formGroup([ FormField.parts.label(getLabel('Width')), @@ -15321,7 +15321,7 @@ tag: 'label', classes: ['tox-label'] }, - components: [text$1(providerBackstage.translate(spec.label))] + components: [text$2(providerBackstage.translate(spec.label))] }); const spectrum = Slider.parts.spectrum({ dom: { @@ -15619,7 +15619,7 @@ onStrictHandler('onStream') ]; - const Streaming = create$3({ + const Streaming = create$4({ fields: StreamingSchema, name: 'streaming', active: ActiveStreaming, @@ -16147,7 +16147,7 @@ const renderButtonSpec = (spec, action, providersBackstage, extraBehaviours = [], extraClasses = []) => { const translatedText = providersBackstage.translate(spec.text); const icon = spec.icon.map(iconName => renderIconFromPack(iconName, providersBackstage.icons)); - const components = [icon.getOrThunk(() => text$1(translatedText))]; + const components = [icon.getOrThunk(() => text$2(translatedText))]; const buttonType = spec.buttonType.getOr(!spec.primary && !spec.borderless ? 'secondary' : 'primary'); const baseClasses = calculateClassesFromButtonType(buttonType); const classes = [ @@ -16565,7 +16565,7 @@ tag: 'span', classes: ['tox-checkbox__label'] }, - components: [text$1(providerBackstage.translate(spec.label))], + components: [text$2(providerBackstage.translate(spec.label))], behaviours: derive$1([Unselecting.config({})]) }); const makeIcon = className => { @@ -17135,7 +17135,7 @@ }; const isContentEditableTrue = hasContentEditableState('true'); const isContentEditableFalse = hasContentEditableState('false'); - const create = (type, title, url, level, attach) => ({ + const create$1 = (type, title, url, level, attach) => ({ type, title, url, @@ -17186,12 +17186,12 @@ const attach = () => { elm.id = headerId; }; - return create('header', getElementText(elm) ?? '', '#' + headerId, getLevel(elm), attach); + return create$1('header', getElementText(elm) ?? '', '#' + headerId, getLevel(elm), attach); }; const anchorTarget = elm => { const anchorId = elm.id || elm.name; const anchorText = getElementText(elm); - return create('anchor', anchorText ? anchorText : '#' + anchorId, '#' + anchorId, 0, noop); + return create$1('anchor', anchorText ? anchorText : '#' + anchorId, '#' + anchorId, 0, noop); }; const getHeaderTargets = elms => { return map$2(filter$2(elms, isValidHeader), headerTarget); @@ -17806,7 +17806,7 @@ init: init$6 }); - const Docking = create$3({ + const Docking = create$4({ fields: DockingSchema, name: 'docking', active: ActiveDocking, @@ -18374,7 +18374,7 @@ init: init$5 }); - const Sliding = create$3({ + const Sliding = create$4({ fields: SlidingSchema, name: 'sliding', active: ActiveSliding, @@ -18712,7 +18712,7 @@ init: init$4 }); - const Blocking = create$3({ + const Blocking = create$4({ fields: BlockingSchema, name: 'blocking', apis: BlockingApis, @@ -20524,7 +20524,7 @@ init: init$3 }); - const Reflecting = create$3({ + const Reflecting = create$4({ fields: ReflectingSchema, name: 'reflecting', active: ActiveReflecting, @@ -23817,7 +23817,7 @@ 'aria-level': index + 1 } }, - components: [text$1(name)], + components: [text$2(name)], action: _btn => { editor.focus(); editor.selection.select(element); @@ -23834,7 +23834,7 @@ classes: ['tox-statusbar__path-divider'], attributes: { 'aria-hidden': true } }, - components: [text$1(` ${ delimiter } `)] + components: [text$2(` ${ delimiter } `)] }); const renderPathData = data => foldl(data, (acc, path, index) => { const element = renderElement(path.name, path.element, index); @@ -23965,7 +23965,7 @@ }; const renderWordCount = (editor, providersBackstage) => { - const replaceCountText = (comp, count, mode) => Replacing.set(comp, [text$1(providersBackstage.translate([ + const replaceCountText = (comp, count, mode) => Replacing.set(comp, [text$2(providersBackstage.translate([ '{0} ' + mode, count[mode] ]))]); @@ -24600,7 +24600,7 @@ ]; const dialogFooterButtonFields = [ ...baseFooterButtonFields, - text + text$1 ]; const normalFooterButtonFields = [ requiredStringEnum('type', [ @@ -24627,7 +24627,7 @@ const alertBannerFields = [ type, - text, + text$1, requiredStringEnum('level', [ 'info', 'warn', @@ -24646,7 +24646,7 @@ const buttonFields = [ type, - text, + text$1, enabled, generatedName('button'), optionalIcon, @@ -24677,7 +24677,7 @@ const collectionSchema = objOf(collectionFields); const collectionDataProcessor = arrOfObj([ value$1, - text, + text$1, icon ]); @@ -24753,11 +24753,11 @@ ]; const listBoxSingleItemFields = [ - text, + text$1, value$1 ]; const listBoxNestedItemFields = [ - text, + text$1, requiredArrayOf('items', thunkOf('items', () => listBoxItemSchema)) ]; const listBoxItemSchema = oneOf([ @@ -24773,7 +24773,7 @@ const selectBoxFields = formComponentWithLabelFields.concat([ requiredArrayOfObj('items', [ - text, + text$1, value$1 ]), defaultedNumber('size', 1), @@ -25399,7 +25399,7 @@ tag: 'div', classes: ['tox-dialog__body-nav-item'] }, - components: [text$1(backstage.shared.providers.translate(tab.title))], + components: [text$2(backstage.shared.providers.translate(tab.title))], view: () => { return [Form.sketch(parts => ({ dom: { @@ -25560,6 +25560,1571 @@ return ModalDialog.parts.body(bodySpec); }; + function _typeof(obj) { + '@babel/helpers - typeof'; + return _typeof = 'function' == typeof Symbol && 'symbol' == typeof Symbol.iterator ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && 'function' == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj; + }, _typeof(obj); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + function _isNativeReflectConstruct() { + if (typeof Reflect === 'undefined' || !Reflect.construct) + return false; + if (Reflect.construct.sham) + return false; + if (typeof Proxy === 'function') + return true; + try { + Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () { + })); + return true; + } catch (e) { + return false; + } + } + function _construct(Parent, args, Class) { + if (_isNativeReflectConstruct()) { + _construct = Reflect.construct; + } else { + _construct = function _construct(Parent, args, Class) { + var a = [null]; + a.push.apply(a, args); + var Constructor = Function.bind.apply(Parent, a); + var instance = new Constructor(); + if (Class) + _setPrototypeOf(instance, Class.prototype); + return instance; + }; + } + return _construct.apply(null, arguments); + } + function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); + } + function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) + return _arrayLikeToArray(arr); + } + function _iterableToArray(iter) { + if (typeof Symbol !== 'undefined' && iter[Symbol.iterator] != null || iter['@@iterator'] != null) + return Array.from(iter); + } + function _unsupportedIterableToArray(o, minLen) { + if (!o) + return; + if (typeof o === 'string') + return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === 'Object' && o.constructor) + n = o.constructor.name; + if (n === 'Map' || n === 'Set') + return Array.from(o); + if (n === 'Arguments' || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) + return _arrayLikeToArray(o, minLen); + } + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) + len = arr.length; + for (var i = 0, arr2 = new Array(len); i < len; i++) + arr2[i] = arr[i]; + return arr2; + } + function _nonIterableSpread() { + throw new TypeError('Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.'); + } + var hasOwnProperty = Object.hasOwnProperty, setPrototypeOf = Object.setPrototypeOf, isFrozen = Object.isFrozen, getPrototypeOf = Object.getPrototypeOf, getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + var freeze = Object.freeze, seal = Object.seal, create = Object.create; + var _ref = typeof Reflect !== 'undefined' && Reflect, apply = _ref.apply, construct = _ref.construct; + if (!apply) { + apply = function apply(fun, thisValue, args) { + return fun.apply(thisValue, args); + }; + } + if (!freeze) { + freeze = function freeze(x) { + return x; + }; + } + if (!seal) { + seal = function seal(x) { + return x; + }; + } + if (!construct) { + construct = function construct(Func, args) { + return _construct(Func, _toConsumableArray(args)); + }; + } + var arrayForEach = unapply(Array.prototype.forEach); + var arrayPop = unapply(Array.prototype.pop); + var arrayPush = unapply(Array.prototype.push); + var stringToLowerCase = unapply(String.prototype.toLowerCase); + var stringMatch = unapply(String.prototype.match); + var stringReplace = unapply(String.prototype.replace); + var stringIndexOf = unapply(String.prototype.indexOf); + var stringTrim = unapply(String.prototype.trim); + var regExpTest = unapply(RegExp.prototype.test); + var typeErrorCreate = unconstruct(TypeError); + function unapply(func) { + return function (thisArg) { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + return apply(func, thisArg, args); + }; + } + function unconstruct(func) { + return function () { + for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + return construct(func, args); + }; + } + function addToSet(set, array) { + if (setPrototypeOf) { + setPrototypeOf(set, null); + } + var l = array.length; + while (l--) { + var element = array[l]; + if (typeof element === 'string') { + var lcElement = stringToLowerCase(element); + if (lcElement !== element) { + if (!isFrozen(array)) { + array[l] = lcElement; + } + element = lcElement; + } + } + set[element] = true; + } + return set; + } + function clone(object) { + var newObject = create(null); + var property; + for (property in object) { + if (apply(hasOwnProperty, object, [property])) { + newObject[property] = object[property]; + } + } + return newObject; + } + function lookupGetter(object, prop) { + while (object !== null) { + var desc = getOwnPropertyDescriptor(object, prop); + if (desc) { + if (desc.get) { + return unapply(desc.get); + } + if (typeof desc.value === 'function') { + return unapply(desc.value); + } + } + object = getPrototypeOf(object); + } + function fallbackValue(element) { + console.warn('fallback value for', element); + return null; + } + return fallbackValue; + } + var html$1 = freeze([ + 'a', + 'abbr', + 'acronym', + 'address', + 'area', + 'article', + 'aside', + 'audio', + 'b', + 'bdi', + 'bdo', + 'big', + 'blink', + 'blockquote', + 'body', + 'br', + 'button', + 'canvas', + 'caption', + 'center', + 'cite', + 'code', + 'col', + 'colgroup', + 'content', + 'data', + 'datalist', + 'dd', + 'decorator', + 'del', + 'details', + 'dfn', + 'dialog', + 'dir', + 'div', + 'dl', + 'dt', + 'element', + 'em', + 'fieldset', + 'figcaption', + 'figure', + 'font', + 'footer', + 'form', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'head', + 'header', + 'hgroup', + 'hr', + 'html', + 'i', + 'img', + 'input', + 'ins', + 'kbd', + 'label', + 'legend', + 'li', + 'main', + 'map', + 'mark', + 'marquee', + 'menu', + 'menuitem', + 'meter', + 'nav', + 'nobr', + 'ol', + 'optgroup', + 'option', + 'output', + 'p', + 'picture', + 'pre', + 'progress', + 'q', + 'rp', + 'rt', + 'ruby', + 's', + 'samp', + 'section', + 'select', + 'shadow', + 'small', + 'source', + 'spacer', + 'span', + 'strike', + 'strong', + 'style', + 'sub', + 'summary', + 'sup', + 'table', + 'tbody', + 'td', + 'template', + 'textarea', + 'tfoot', + 'th', + 'thead', + 'time', + 'tr', + 'track', + 'tt', + 'u', + 'ul', + 'var', + 'video', + 'wbr' + ]); + var svg$1 = freeze([ + 'svg', + 'a', + 'altglyph', + 'altglyphdef', + 'altglyphitem', + 'animatecolor', + 'animatemotion', + 'animatetransform', + 'circle', + 'clippath', + 'defs', + 'desc', + 'ellipse', + 'filter', + 'font', + 'g', + 'glyph', + 'glyphref', + 'hkern', + 'image', + 'line', + 'lineargradient', + 'marker', + 'mask', + 'metadata', + 'mpath', + 'path', + 'pattern', + 'polygon', + 'polyline', + 'radialgradient', + 'rect', + 'stop', + 'style', + 'switch', + 'symbol', + 'text', + 'textpath', + 'title', + 'tref', + 'tspan', + 'view', + 'vkern' + ]); + var svgFilters = freeze([ + 'feBlend', + 'feColorMatrix', + 'feComponentTransfer', + 'feComposite', + 'feConvolveMatrix', + 'feDiffuseLighting', + 'feDisplacementMap', + 'feDistantLight', + 'feFlood', + 'feFuncA', + 'feFuncB', + 'feFuncG', + 'feFuncR', + 'feGaussianBlur', + 'feImage', + 'feMerge', + 'feMergeNode', + 'feMorphology', + 'feOffset', + 'fePointLight', + 'feSpecularLighting', + 'feSpotLight', + 'feTile', + 'feTurbulence' + ]); + var svgDisallowed = freeze([ + 'animate', + 'color-profile', + 'cursor', + 'discard', + 'fedropshadow', + 'font-face', + 'font-face-format', + 'font-face-name', + 'font-face-src', + 'font-face-uri', + 'foreignobject', + 'hatch', + 'hatchpath', + 'mesh', + 'meshgradient', + 'meshpatch', + 'meshrow', + 'missing-glyph', + 'script', + 'set', + 'solidcolor', + 'unknown', + 'use' + ]); + var mathMl$1 = freeze([ + 'math', + 'menclose', + 'merror', + 'mfenced', + 'mfrac', + 'mglyph', + 'mi', + 'mlabeledtr', + 'mmultiscripts', + 'mn', + 'mo', + 'mover', + 'mpadded', + 'mphantom', + 'mroot', + 'mrow', + 'ms', + 'mspace', + 'msqrt', + 'mstyle', + 'msub', + 'msup', + 'msubsup', + 'mtable', + 'mtd', + 'mtext', + 'mtr', + 'munder', + 'munderover' + ]); + var mathMlDisallowed = freeze([ + 'maction', + 'maligngroup', + 'malignmark', + 'mlongdiv', + 'mscarries', + 'mscarry', + 'msgroup', + 'mstack', + 'msline', + 'msrow', + 'semantics', + 'annotation', + 'annotation-xml', + 'mprescripts', + 'none' + ]); + var text = freeze(['#text']); + var html = freeze([ + 'accept', + 'action', + 'align', + 'alt', + 'autocapitalize', + 'autocomplete', + 'autopictureinpicture', + 'autoplay', + 'background', + 'bgcolor', + 'border', + 'capture', + 'cellpadding', + 'cellspacing', + 'checked', + 'cite', + 'class', + 'clear', + 'color', + 'cols', + 'colspan', + 'controls', + 'controlslist', + 'coords', + 'crossorigin', + 'datetime', + 'decoding', + 'default', + 'dir', + 'disabled', + 'disablepictureinpicture', + 'disableremoteplayback', + 'download', + 'draggable', + 'enctype', + 'enterkeyhint', + 'face', + 'for', + 'headers', + 'height', + 'hidden', + 'high', + 'href', + 'hreflang', + 'id', + 'inputmode', + 'integrity', + 'ismap', + 'kind', + 'label', + 'lang', + 'list', + 'loading', + 'loop', + 'low', + 'max', + 'maxlength', + 'media', + 'method', + 'min', + 'minlength', + 'multiple', + 'muted', + 'name', + 'nonce', + 'noshade', + 'novalidate', + 'nowrap', + 'open', + 'optimum', + 'pattern', + 'placeholder', + 'playsinline', + 'poster', + 'preload', + 'pubdate', + 'radiogroup', + 'readonly', + 'rel', + 'required', + 'rev', + 'reversed', + 'role', + 'rows', + 'rowspan', + 'spellcheck', + 'scope', + 'selected', + 'shape', + 'size', + 'sizes', + 'span', + 'srclang', + 'start', + 'src', + 'srcset', + 'step', + 'style', + 'summary', + 'tabindex', + 'title', + 'translate', + 'type', + 'usemap', + 'valign', + 'value', + 'width', + 'xmlns', + 'slot' + ]); + var svg = freeze([ + 'accent-height', + 'accumulate', + 'additive', + 'alignment-baseline', + 'ascent', + 'attributename', + 'attributetype', + 'azimuth', + 'basefrequency', + 'baseline-shift', + 'begin', + 'bias', + 'by', + 'class', + 'clip', + 'clippathunits', + 'clip-path', + 'clip-rule', + 'color', + 'color-interpolation', + 'color-interpolation-filters', + 'color-profile', + 'color-rendering', + 'cx', + 'cy', + 'd', + 'dx', + 'dy', + 'diffuseconstant', + 'direction', + 'display', + 'divisor', + 'dur', + 'edgemode', + 'elevation', + 'end', + 'fill', + 'fill-opacity', + 'fill-rule', + 'filter', + 'filterunits', + 'flood-color', + 'flood-opacity', + 'font-family', + 'font-size', + 'font-size-adjust', + 'font-stretch', + 'font-style', + 'font-variant', + 'font-weight', + 'fx', + 'fy', + 'g1', + 'g2', + 'glyph-name', + 'glyphref', + 'gradientunits', + 'gradienttransform', + 'height', + 'href', + 'id', + 'image-rendering', + 'in', + 'in2', + 'k', + 'k1', + 'k2', + 'k3', + 'k4', + 'kerning', + 'keypoints', + 'keysplines', + 'keytimes', + 'lang', + 'lengthadjust', + 'letter-spacing', + 'kernelmatrix', + 'kernelunitlength', + 'lighting-color', + 'local', + 'marker-end', + 'marker-mid', + 'marker-start', + 'markerheight', + 'markerunits', + 'markerwidth', + 'maskcontentunits', + 'maskunits', + 'max', + 'mask', + 'media', + 'method', + 'mode', + 'min', + 'name', + 'numoctaves', + 'offset', + 'operator', + 'opacity', + 'order', + 'orient', + 'orientation', + 'origin', + 'overflow', + 'paint-order', + 'path', + 'pathlength', + 'patterncontentunits', + 'patterntransform', + 'patternunits', + 'points', + 'preservealpha', + 'preserveaspectratio', + 'primitiveunits', + 'r', + 'rx', + 'ry', + 'radius', + 'refx', + 'refy', + 'repeatcount', + 'repeatdur', + 'restart', + 'result', + 'rotate', + 'scale', + 'seed', + 'shape-rendering', + 'specularconstant', + 'specularexponent', + 'spreadmethod', + 'startoffset', + 'stddeviation', + 'stitchtiles', + 'stop-color', + 'stop-opacity', + 'stroke-dasharray', + 'stroke-dashoffset', + 'stroke-linecap', + 'stroke-linejoin', + 'stroke-miterlimit', + 'stroke-opacity', + 'stroke', + 'stroke-width', + 'style', + 'surfacescale', + 'systemlanguage', + 'tabindex', + 'targetx', + 'targety', + 'transform', + 'transform-origin', + 'text-anchor', + 'text-decoration', + 'text-rendering', + 'textlength', + 'type', + 'u1', + 'u2', + 'unicode', + 'values', + 'viewbox', + 'visibility', + 'version', + 'vert-adv-y', + 'vert-origin-x', + 'vert-origin-y', + 'width', + 'word-spacing', + 'wrap', + 'writing-mode', + 'xchannelselector', + 'ychannelselector', + 'x', + 'x1', + 'x2', + 'xmlns', + 'y', + 'y1', + 'y2', + 'z', + 'zoomandpan' + ]); + var mathMl = freeze([ + 'accent', + 'accentunder', + 'align', + 'bevelled', + 'close', + 'columnsalign', + 'columnlines', + 'columnspan', + 'denomalign', + 'depth', + 'dir', + 'display', + 'displaystyle', + 'encoding', + 'fence', + 'frame', + 'height', + 'href', + 'id', + 'largeop', + 'length', + 'linethickness', + 'lspace', + 'lquote', + 'mathbackground', + 'mathcolor', + 'mathsize', + 'mathvariant', + 'maxsize', + 'minsize', + 'movablelimits', + 'notation', + 'numalign', + 'open', + 'rowalign', + 'rowlines', + 'rowspacing', + 'rowspan', + 'rspace', + 'rquote', + 'scriptlevel', + 'scriptminsize', + 'scriptsizemultiplier', + 'selection', + 'separator', + 'separators', + 'stretchy', + 'subscriptshift', + 'supscriptshift', + 'symmetric', + 'voffset', + 'width', + 'xmlns' + ]); + var xml = freeze([ + 'xlink:href', + 'xml:id', + 'xlink:title', + 'xml:space', + 'xmlns:xlink' + ]); + var MUSTACHE_EXPR = seal(/\{\{[\w\W]*|[\w\W]*\}\}/gm); + var ERB_EXPR = seal(/<%[\w\W]*|[\w\W]*%>/gm); + var DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]/); + var ARIA_ATTR = seal(/^aria-[\-\w]+$/); + var IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i); + var IS_SCRIPT_OR_DATA = seal(/^(?:\w+script|data):/i); + var ATTR_WHITESPACE = seal(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g); + var DOCTYPE_NAME = seal(/^html$/i); + var getGlobal = function getGlobal() { + return typeof window === 'undefined' ? null : window; + }; + var _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, document) { + if (_typeof(trustedTypes) !== 'object' || typeof trustedTypes.createPolicy !== 'function') { + return null; + } + var suffix = null; + var ATTR_NAME = 'data-tt-policy-suffix'; + if (document.currentScript && document.currentScript.hasAttribute(ATTR_NAME)) { + suffix = document.currentScript.getAttribute(ATTR_NAME); + } + var policyName = 'dompurify' + (suffix ? '#' + suffix : ''); + try { + return trustedTypes.createPolicy(policyName, { + createHTML: function createHTML(html) { + return html; + } + }); + } catch (_) { + console.warn('TrustedTypes policy ' + policyName + ' could not be created.'); + return null; + } + }; + function createDOMPurify() { + var window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal(); + var DOMPurify = function DOMPurify(root) { + return createDOMPurify(root); + }; + DOMPurify.version = '2.3.8'; + DOMPurify.removed = []; + if (!window || !window.document || window.document.nodeType !== 9) { + DOMPurify.isSupported = false; + return DOMPurify; + } + var originalDocument = window.document; + var document = window.document; + var DocumentFragment = window.DocumentFragment, HTMLTemplateElement = window.HTMLTemplateElement, Node = window.Node, Element = window.Element, NodeFilter = window.NodeFilter, _window$NamedNodeMap = window.NamedNodeMap, NamedNodeMap = _window$NamedNodeMap === void 0 ? window.NamedNodeMap || window.MozNamedAttrMap : _window$NamedNodeMap, HTMLFormElement = window.HTMLFormElement, DOMParser = window.DOMParser, trustedTypes = window.trustedTypes; + var ElementPrototype = Element.prototype; + var cloneNode = lookupGetter(ElementPrototype, 'cloneNode'); + var getNextSibling = lookupGetter(ElementPrototype, 'nextSibling'); + var getChildNodes = lookupGetter(ElementPrototype, 'childNodes'); + var getParentNode = lookupGetter(ElementPrototype, 'parentNode'); + if (typeof HTMLTemplateElement === 'function') { + var template = document.createElement('template'); + if (template.content && template.content.ownerDocument) { + document = template.content.ownerDocument; + } + } + var trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, originalDocument); + var emptyHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML('') : ''; + var _document = document, implementation = _document.implementation, createNodeIterator = _document.createNodeIterator, createDocumentFragment = _document.createDocumentFragment, getElementsByTagName = _document.getElementsByTagName; + var importNode = originalDocument.importNode; + var documentMode = {}; + try { + documentMode = clone(document).documentMode ? document.documentMode : {}; + } catch (_) { + } + var hooks = {}; + DOMPurify.isSupported = typeof getParentNode === 'function' && implementation && typeof implementation.createHTMLDocument !== 'undefined' && documentMode !== 9; + var MUSTACHE_EXPR$1 = MUSTACHE_EXPR, ERB_EXPR$1 = ERB_EXPR, DATA_ATTR$1 = DATA_ATTR, ARIA_ATTR$1 = ARIA_ATTR, IS_SCRIPT_OR_DATA$1 = IS_SCRIPT_OR_DATA, ATTR_WHITESPACE$1 = ATTR_WHITESPACE; + var IS_ALLOWED_URI$1 = IS_ALLOWED_URI; + var ALLOWED_TAGS = null; + var DEFAULT_ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray(html$1), _toConsumableArray(svg$1), _toConsumableArray(svgFilters), _toConsumableArray(mathMl$1), _toConsumableArray(text))); + var ALLOWED_ATTR = null; + var DEFAULT_ALLOWED_ATTR = addToSet({}, [].concat(_toConsumableArray(html), _toConsumableArray(svg), _toConsumableArray(mathMl), _toConsumableArray(xml))); + var CUSTOM_ELEMENT_HANDLING = Object.seal(Object.create(null, { + tagNameCheck: { + writable: true, + configurable: false, + enumerable: true, + value: null + }, + attributeNameCheck: { + writable: true, + configurable: false, + enumerable: true, + value: null + }, + allowCustomizedBuiltInElements: { + writable: true, + configurable: false, + enumerable: true, + value: false + } + })); + var FORBID_TAGS = null; + var FORBID_ATTR = null; + var ALLOW_ARIA_ATTR = true; + var ALLOW_DATA_ATTR = true; + var ALLOW_UNKNOWN_PROTOCOLS = false; + var SAFE_FOR_TEMPLATES = false; + var WHOLE_DOCUMENT = false; + var SET_CONFIG = false; + var FORCE_BODY = false; + var RETURN_DOM = false; + var RETURN_DOM_FRAGMENT = false; + var RETURN_TRUSTED_TYPE = false; + var SANITIZE_DOM = true; + var KEEP_CONTENT = true; + var IN_PLACE = false; + var USE_PROFILES = {}; + var FORBID_CONTENTS = null; + var DEFAULT_FORBID_CONTENTS = addToSet({}, [ + 'annotation-xml', + 'audio', + 'colgroup', + 'desc', + 'foreignobject', + 'head', + 'iframe', + 'math', + 'mi', + 'mn', + 'mo', + 'ms', + 'mtext', + 'noembed', + 'noframes', + 'noscript', + 'plaintext', + 'script', + 'style', + 'svg', + 'template', + 'thead', + 'title', + 'video', + 'xmp' + ]); + var DATA_URI_TAGS = null; + var DEFAULT_DATA_URI_TAGS = addToSet({}, [ + 'audio', + 'video', + 'img', + 'source', + 'image', + 'track' + ]); + var URI_SAFE_ATTRIBUTES = null; + var DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [ + 'alt', + 'class', + 'for', + 'id', + 'label', + 'name', + 'pattern', + 'placeholder', + 'role', + 'summary', + 'title', + 'value', + 'style', + 'xmlns' + ]); + var MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML'; + var SVG_NAMESPACE = 'http://www.w3.org/2000/svg'; + var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml'; + var NAMESPACE = HTML_NAMESPACE; + var IS_EMPTY_INPUT = false; + var PARSER_MEDIA_TYPE; + var SUPPORTED_PARSER_MEDIA_TYPES = [ + 'application/xhtml+xml', + 'text/html' + ]; + var DEFAULT_PARSER_MEDIA_TYPE = 'text/html'; + var transformCaseFunc; + var CONFIG = null; + var formElement = document.createElement('form'); + var isRegexOrFunction = function isRegexOrFunction(testValue) { + return testValue instanceof RegExp || testValue instanceof Function; + }; + var _parseConfig = function _parseConfig(cfg) { + if (CONFIG && CONFIG === cfg) { + return; + } + if (!cfg || _typeof(cfg) !== 'object') { + cfg = {}; + } + cfg = clone(cfg); + ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ? addToSet({}, cfg.ALLOWED_TAGS) : DEFAULT_ALLOWED_TAGS; + ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ? addToSet({}, cfg.ALLOWED_ATTR) : DEFAULT_ALLOWED_ATTR; + URI_SAFE_ATTRIBUTES = 'ADD_URI_SAFE_ATTR' in cfg ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR) : DEFAULT_URI_SAFE_ATTRIBUTES; + DATA_URI_TAGS = 'ADD_DATA_URI_TAGS' in cfg ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS) : DEFAULT_DATA_URI_TAGS; + FORBID_CONTENTS = 'FORBID_CONTENTS' in cfg ? addToSet({}, cfg.FORBID_CONTENTS) : DEFAULT_FORBID_CONTENTS; + FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS) : {}; + FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR) : {}; + USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false; + ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; + ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; + ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; + SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; + WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; + RETURN_DOM = cfg.RETURN_DOM || false; + RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; + RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; + FORCE_BODY = cfg.FORCE_BODY || false; + SANITIZE_DOM = cfg.SANITIZE_DOM !== false; + KEEP_CONTENT = cfg.KEEP_CONTENT !== false; + IN_PLACE = cfg.IN_PLACE || false; + IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI$1; + NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE; + if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) { + CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck; + } + if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) { + CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck; + } + if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') { + CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements; + } + PARSER_MEDIA_TYPE = SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE : PARSER_MEDIA_TYPE = cfg.PARSER_MEDIA_TYPE; + transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? function (x) { + return x; + } : stringToLowerCase; + if (SAFE_FOR_TEMPLATES) { + ALLOW_DATA_ATTR = false; + } + if (RETURN_DOM_FRAGMENT) { + RETURN_DOM = true; + } + if (USE_PROFILES) { + ALLOWED_TAGS = addToSet({}, _toConsumableArray(text)); + ALLOWED_ATTR = []; + if (USE_PROFILES.html === true) { + addToSet(ALLOWED_TAGS, html$1); + addToSet(ALLOWED_ATTR, html); + } + if (USE_PROFILES.svg === true) { + addToSet(ALLOWED_TAGS, svg$1); + addToSet(ALLOWED_ATTR, svg); + addToSet(ALLOWED_ATTR, xml); + } + if (USE_PROFILES.svgFilters === true) { + addToSet(ALLOWED_TAGS, svgFilters); + addToSet(ALLOWED_ATTR, svg); + addToSet(ALLOWED_ATTR, xml); + } + if (USE_PROFILES.mathMl === true) { + addToSet(ALLOWED_TAGS, mathMl$1); + addToSet(ALLOWED_ATTR, mathMl); + addToSet(ALLOWED_ATTR, xml); + } + } + if (cfg.ADD_TAGS) { + if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) { + ALLOWED_TAGS = clone(ALLOWED_TAGS); + } + addToSet(ALLOWED_TAGS, cfg.ADD_TAGS); + } + if (cfg.ADD_ATTR) { + if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) { + ALLOWED_ATTR = clone(ALLOWED_ATTR); + } + addToSet(ALLOWED_ATTR, cfg.ADD_ATTR); + } + if (cfg.ADD_URI_SAFE_ATTR) { + addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR); + } + if (cfg.FORBID_CONTENTS) { + if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) { + FORBID_CONTENTS = clone(FORBID_CONTENTS); + } + addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS); + } + if (KEEP_CONTENT) { + ALLOWED_TAGS['#text'] = true; + } + if (WHOLE_DOCUMENT) { + addToSet(ALLOWED_TAGS, [ + 'html', + 'head', + 'body' + ]); + } + if (ALLOWED_TAGS.table) { + addToSet(ALLOWED_TAGS, ['tbody']); + delete FORBID_TAGS.tbody; + } + if (freeze) { + freeze(cfg); + } + CONFIG = cfg; + }; + var MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [ + 'mi', + 'mo', + 'mn', + 'ms', + 'mtext' + ]); + var HTML_INTEGRATION_POINTS = addToSet({}, [ + 'foreignobject', + 'desc', + 'title', + 'annotation-xml' + ]); + var COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [ + 'title', + 'style', + 'font', + 'a', + 'script' + ]); + var ALL_SVG_TAGS = addToSet({}, svg$1); + addToSet(ALL_SVG_TAGS, svgFilters); + addToSet(ALL_SVG_TAGS, svgDisallowed); + var ALL_MATHML_TAGS = addToSet({}, mathMl$1); + addToSet(ALL_MATHML_TAGS, mathMlDisallowed); + var _checkValidNamespace = function _checkValidNamespace(element) { + var parent = getParentNode(element); + if (!parent || !parent.tagName) { + parent = { + namespaceURI: HTML_NAMESPACE, + tagName: 'template' + }; + } + var tagName = stringToLowerCase(element.tagName); + var parentTagName = stringToLowerCase(parent.tagName); + if (element.namespaceURI === SVG_NAMESPACE) { + if (parent.namespaceURI === HTML_NAMESPACE) { + return tagName === 'svg'; + } + if (parent.namespaceURI === MATHML_NAMESPACE) { + return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]); + } + return Boolean(ALL_SVG_TAGS[tagName]); + } + if (element.namespaceURI === MATHML_NAMESPACE) { + if (parent.namespaceURI === HTML_NAMESPACE) { + return tagName === 'math'; + } + if (parent.namespaceURI === SVG_NAMESPACE) { + return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName]; + } + return Boolean(ALL_MATHML_TAGS[tagName]); + } + if (element.namespaceURI === HTML_NAMESPACE) { + if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) { + return false; + } + if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) { + return false; + } + return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]); + } + return false; + }; + var _forceRemove = function _forceRemove(node) { + arrayPush(DOMPurify.removed, { element: node }); + try { + node.parentNode.removeChild(node); + } catch (_) { + try { + node.outerHTML = emptyHTML; + } catch (_) { + node.remove(); + } + } + }; + var _removeAttribute = function _removeAttribute(name, node) { + try { + arrayPush(DOMPurify.removed, { + attribute: node.getAttributeNode(name), + from: node + }); + } catch (_) { + arrayPush(DOMPurify.removed, { + attribute: null, + from: node + }); + } + node.removeAttribute(name); + if (name === 'is' && !ALLOWED_ATTR[name]) { + if (RETURN_DOM || RETURN_DOM_FRAGMENT) { + try { + _forceRemove(node); + } catch (_) { + } + } else { + try { + node.setAttribute(name, ''); + } catch (_) { + } + } + } + }; + var _initDocument = function _initDocument(dirty) { + var doc; + var leadingWhitespace; + if (FORCE_BODY) { + dirty = '' + dirty; + } else { + var matches = stringMatch(dirty, /^[\r\n\t ]+/); + leadingWhitespace = matches && matches[0]; + } + if (PARSER_MEDIA_TYPE === 'application/xhtml+xml') { + dirty = '' + dirty + ''; + } + var dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty; + if (NAMESPACE === HTML_NAMESPACE) { + try { + doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE); + } catch (_) { + } + } + if (!doc || !doc.documentElement) { + doc = implementation.createDocument(NAMESPACE, 'template', null); + try { + doc.documentElement.innerHTML = IS_EMPTY_INPUT ? '' : dirtyPayload; + } catch (_) { + } + } + var body = doc.body || doc.documentElement; + if (dirty && leadingWhitespace) { + body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null); + } + if (NAMESPACE === HTML_NAMESPACE) { + return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0]; + } + return WHOLE_DOCUMENT ? doc.documentElement : body; + }; + var _createIterator = function _createIterator(root) { + return createNodeIterator.call(root.ownerDocument || root, root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, null, false); + }; + var _isClobbered = function _isClobbered(elm) { + return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function'); + }; + var _isNode = function _isNode(object) { + return _typeof(Node) === 'object' ? object instanceof Node : object && _typeof(object) === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string'; + }; + var _executeHook = function _executeHook(entryPoint, currentNode, data) { + if (!hooks[entryPoint]) { + return; + } + arrayForEach(hooks[entryPoint], function (hook) { + hook.call(DOMPurify, currentNode, data, CONFIG); + }); + }; + var _sanitizeElements = function _sanitizeElements(currentNode) { + var content; + _executeHook('beforeSanitizeElements', currentNode, null); + if (_isClobbered(currentNode)) { + _forceRemove(currentNode); + return true; + } + if (regExpTest(/[\u0080-\uFFFF]/, currentNode.nodeName)) { + _forceRemove(currentNode); + return true; + } + var tagName = transformCaseFunc(currentNode.nodeName); + _executeHook('uponSanitizeElement', currentNode, { + tagName: tagName, + allowedTags: ALLOWED_TAGS + }); + if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && (!_isNode(currentNode.content) || !_isNode(currentNode.content.firstElementChild)) && regExpTest(/<[/\w]/g, currentNode.innerHTML) && regExpTest(/<[/\w]/g, currentNode.textContent)) { + _forceRemove(currentNode); + return true; + } + if (tagName === 'select' && regExpTest(/